Dodawanie aplikacji đź’»FLASK -> 🦄GUNICORN (systemd)-> 🚀NGINX + đź”’SSL -> (â—Ź’â—ˇ’â—Ź)
https://copilot.microsoft.com/chats/a95gZGfn7bRTDwd2uQPzE
Przygotowanie pliku uruchamiajÄ…cego aplikacje wsgi.py umieszczonego w katalogu aplikacji:
#sudo nano /var/www/apps/aplikacja/wsgi.py from app import app
/var/www/apps/aplikacja ├── wsgi.py ├── required.txt ├── app │  ├── blueprints │  ├── static │  ├── templates │  └── app.py └── venv
Zmiana uprawnień do katalogu z aplikacją
sudo chown -R www-data:www-data /var/www/apps/aplikacja/
Przygotowanie serwisu Gunicorn
#sudo nano /etc/systemd/system/aplikacja.service [Unit] Description=Gunicorn dla Aplikacji After=network.target [Service] User=www-data Group=www-data WorkingDirectory=/var/www/apps/aplikacja Environment="PATH=/var/www/apps/aplikacja/venv/bin" ExecStart=/var/www/apps/aplikacja/venv/bin/gunicorn -w 4 -b 127.0.0.1:8002 --access-logfile - --error-logfile - wsgi:app Restart=always RestartSec=3 [Install] WantedBy=multi-user.target
Wpis wsgi:app wskazuje na nazwÄ™ pliku i aplikacjÄ™ ktĂłrÄ… on uruchamia.
Po zapisaniu pliku należy odświeżyć serwisy i uruchomić serwis dla aplikacji
sudo systemctl daemon-reload sudo systemctl enable aplikacja.service sudo systemctl start aplikacja.service sudo systemctl status aplikacja.service
W przypadku problemów sprawdzić logi systemctl dla aplikacji.
sudo journalctl -xeu aplikacja.service
Przygotowanie NGINX
Instalacja nginx:
sudo apt install nginx
Zmiana portów nasłuchowych
Domyślne porty nasłuchowe (80) zdefiniowane są w pliku/etc/nginx/sites-enabled/default.
server {
listen 81;
}
Po zapisaniu restart nginx
sudo service nginx start
lub
sudo systemctl restart nginx
Przygotowanie konfiguracji dla NGINX
#sudo nano /etc/nginx/sites-available/aplikacja
server {
server_name aplikacja.domena.pl, www.aplikacja.domena.pl; # adres aplikacji w internecie. Moze być ich kilka rozdzielonych przecinkami
location / {
proxy_pass http://127.0.0.1:8002; #zgodnie z ustawieniami w GUNICORN dla opcji --bind lub -b
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 60s;
}
}
Przygotowanie linku symbolicznego dla konfiguracji do uruchomienienia przez NGINX, test linku oraz przeładowanie konfiguracji NGINX
# przygotowanie linku sudo ln -s /etc/nginx/sites-available/aplikacja /etc/nginx/sites-enabled/ # test poprawnosci sudo nginx -t # przeładowanie konfiguracji NGINX sudo systemctl reload nginx # sprawdzenie poprawnosci działania NGINX sudo systemctl status nginx
Dodanie certyfikatu SSL za pomocÄ… CERTBOT
sudo certbot --nginx
DODATKI:
Jeżeli aplikacja potrzebuje więcej czasu dodaj do konfiguracji serwisu czas (timeout) w sekundach
#sudo nano /etc/systemd/system/aplikacja.service
--timeout 300
oraz w ustawieniach nignx
#sudo nano /etc/nginx/sites-available/aplikacja
location / {
...
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
}
Następnie przeładuj serwis i nginx
systemctl deamon-reload
systemctl restart aplikacja.service
systemctl reload nginx
Dodatkowe informacje:
https://copilot.microsoft.com/chats/TCYfvRNkVMZhGjNAC6bT7 : Unix Socket vs 127.0.0.1:port