Requirements:
python -m venv ./venv
source .venv/bin/activateNext, run
pip install -r requirements.txtto get the dependencies.
Finally run the api with
python api.pyFlask will run on http://127.0.0.1:5000/.
$ curl 127.0.0.1:5000/
[{"id":1,"name":"Monday"},{"id":2,"name":"Tuesday"},{"id":3,"name":"Wednesday"},{"id":4,"name":"Thursday"},{"id":5,"name":"Friday"},{"id":6,"name":"Saturday"},{"id":7,"name":"Sunday"}]To return a single day pass in a number with Monday starting at 1.
$ curl 127.0.0.1:5000/2
{"day":{"id":2,"name":"Tuesday"}}Days will also accept a post message.
$ curl -X POST 127.0.0.1:5000/
{"success":true}- Używana do budowania pakietów aplikacji w formacie Wheel.
- Security group jest odpwoiednio skofnigurowane aby udostępniało ruch HTTTP na porcie 5000 i 5001
- System operacyjny: Amazon Linux 2.
- Zainstalowane pakiety: Python3, Git, pip, wheel.
- Aplikacja budowana w katalogu
/home/ec2-user/app/, z plikiem .whl w katalogudist/. - Zawiera plik buid_script.sh wykonujący klonowanie, tworzenie pliku wheel i utworzenie relase zawierjącym kod aplkiacji wraz z plikiem .whl.
- Używana do uruchamiania testowej wersji aplikacji zbudowanej na maszynie BUILD.
- Security group jest odpwoiednio skofnigurowane aby udostępniało ruch HTTTP na porcie 5000 i 5001
- System operacyjny: Amazon Linux 2.
- Zainstalowane pakiety: Python3, pip, wheel.
- Aplikacja zainstalowana z pliku .whl w katalogu
/home/ec2-user/. - Zawiera plik all_install.sh wykonujący pobranie, rozpakowanie kodu źródłowego wraz z plikiem wheel i niezbędnymi pakietami.
- Zawiera plik tests.sh wykonujący test dymny i dwa kolejne sprawdzające działanie aplkiacji.
- Tworzymy nową instancję EC2 z Amazon Linux 2.
- Konfigurujemy grupy zabezpieczeń, aby umożliwić połączenie SSH.
- Po przez skrypt build_script.sh instalujemy wymagane pakiety zawarte w setup.py i requirements.txt
pip install --upgrade pip
pip install -r requirements.txt
pip install wheel- Klonujemy repozytorium GitHub i usuwamy poprzednie pliki budowania:
REPO_URL="https://github.com/BlueNovember1/python-api.git" # Twoje repozytorium
BUILD_DIR="/home/ec2-user/build"
VERSION="v$(date +'%Y%m%d%H%M')" # automatyczna nazwa wersji bazująca na dacie i czasie
echo ">>> Klonowanie repozytorium..."
rm -rf $BUILD_DIR # usuń poprzednie pliki budowania
git clone $REPO_URL $BUILD_DIR- Budujemy pakiet Wheel za pomocą polecenia:
python3 /home/ec2-user/build/setup.py bdist_wheel- Używamy SCP do przesłania pliku .whl na maszynę TEST:
echo ">>> Czyszczenie środowiska..."
deactivate # wyłącz wirtualne środowisko
rm -rf venv # usuń wirtualne środowisko
rm -rf build dist *.egg-info # usuń pozostałe pliki- Wybór repozytorium
echo ">>> Ustawianie repozytorium BlueNovember1/python-api jako domyślne..."
gh repo set-default BlueNovember1/python-api- Tworzenie wydania (relese) z kodem źródłowym i plikiem wheel
echo ">>> Tworzenie nowego wydania na GitHub..."
gh release create $VERSION $WHEEL_FILE --notes "Release $VERSION"- Link do wydania
RELEASE_URL="https://github.com/BlueNovember1/python-api/releases/tag/$VERSION"
echo ">>> Wydanie dostępne pod adresem: $RELEASE_URL"- Tworzymy nową instancję EC2 z Amazon Linux 2.
- Konfigurujemy grupy zabezpieczeń, aby umożliwić połączenie SSH.
- Tworzymy nową instancję EC2 z Amazon Linux 2, z otwartym portem 5000 i 5001 (HTTP).
- Po przez skrypt install_script.sh instalujemy wymagane pakiety zawarte w setup.py i requirements.txt
pip install pip
pip install -r requirements.txt
pip install wheelecho ">>> Pobieranie najnowszego wydania aplikacji z GitHub (plik .whl)..."
wget --header="Authorization: token $GITHUB_TOKEN" $LATEST_RELEASE_URL -O $WHL_FILEecho ">>> Pobieranie pliku ZIP z kodem źródłowym z GitHub..."
wget --header="Authorization: token $GITHUB_TOKEN" $ZIP_URL -O $ZIP_FILEecho ">>> Rozpakowywanie pliku ZIP..."
unzip $ZIP_FILE -d $INSTALL_DIR/source_code- Tworzymy wirtualne środowisko i instalujemy aplikację:
python3 -m venv venv source venv/bin/activate pip install /home/ec2-user/your-app-1.0.0-py3-none-any.whl
- Tworzymy plik serwisowy systemd, aby aplikacja uruchamiała się automatycznie po restarcie:
sudo tee /etc/systemd/system/python-api.service > /dev/null <<EOL [Unit] Description=Python API Application After=network.target [Service] User=ec2-user WorkingDirectory=/home/ec2-user/ Environment="PATH=/home/ec2-user/venv/bin" ExecStart=/home/ec2-user/venv/bin/python3 -m flask run --host=0.0.0.0 --port=5000 ExecStart=$VENV_DIR/bin/python3 -m flask run --host=0.0.0.0 --port=5000 Restart=always [Install] WantedBy=multi-user.target EOL
- Uruchamiamy aplikację jako usługę:
sudo systemctl daemon-reload sudo systemctl enable python-api sudo systemctl start python-api - Sprawdzamy działanie aplikacji (test dymny):
lub w celu wykonania wszytkich testów na raz
curl http://localhost:5000/
bash tests.sh

- Konfiguracja maszyn BUILD i TEST umożliwia oddzielne procesy budowania oraz testowania aplikacji, co ułatwia kontrolę jakości i pozwala na bardziej elastyczne zarządzanie środowiskami.
- Odpowiedenia konfiguracja secuirty group dla danej instacji jest niezbędnym elementem pracy na instancjach.
- Dostęp do instancji może być umożliwiony po przez klucz ssh lub wygenrowany token gitchub z odpowiednimi dostępami.
- Procesy na maszynie BUILD oraz TEST mogą być dodatkowo zautomatyzowane za pomocą skryptów CI/CD.
- Praca została podzielona w odpowiedni sposób aby każdy członek grupy mógł zrozumieć działanie instancji i skryptów na nich.


