Flask diegimas į serverį - robotautas/kursas GitHub Wiki

Diegsime Flask programą biudzetas į Linux Ubuntu serverį per sukurtą vartotoją "vartotojas"

Flask diegimas į serverį

Savo projekte sukuriame requirements.txt failą (žr. temą virtualios aplinkos)

Per FTP programą įsirašome savo flask programos katalogą į /home/vartotojas/.

Pvz.: Iš Desktop katalogą biudzetas per WINSCP nukopijuojame į /home/vartotojas/

Jei reikia, serveryje įdiegiame openssh:

vartotojas@ubuntu:~$ sudo apt install openssh-server

Prisijungiame prie mūsų serverio su cmd (jei sukurtas vartotojas - per jį, jei ne - per root):

C:\Users\Donoras>ssh [email protected]

Serveryje atnaujiname programas:

vartotojas@ubuntu:~$ sudo apt update && apt upgrade  

Susikuriame virtualią aplinką:

Įdiegiame pip:

vartotojas@ubuntu:~$ sudo apt install python3-pip

Įdiegiame venv:

vartotojas@ubuntu:~$ sudo apt install python3-venv

Sukuriame venv:

vartotojas@ubuntu:~$ python3 -m venv biudzetas/venv

Aktyvuojame sukurtą aplinką:

vartotojas@ubuntu:~$ cd biudzetas/
vartotojas@ubuntu:~/biudzetas$ source venv/bin/activate

Įdiegiame programas iš requirements.txt failo:

(venv) vartotojas@ubuntu:~/biudzetas$ pip install -r requirements.txt

Nustatome app kintamąjį ir išbandome programą:

(venv) vartotojas@ubuntu:~/biudzetas$ export FLASK_APP=run.py
(venv) vartotojas@ubuntu:~/biudzetas$ flask run --host=0.0.0.0

Galime kompiuterio naršyklėje užeiti į IP ir portą ir patikrinti, ar veikia programa, pvz.: http://192.168.43.108:5000/

Matome užrašą: WARNING: This is a development server. Do not use it in a production deployment. Todėl toks paleidimas tinka tik kūrimo tikslams. Normaliam veikimui serveryje mums reikės programų nginx ir gunicorn.

Sustabdome procesą cmd programoje paspaudę CTRL+C

Diegiame ngnix ir gunicorn:

(venv) vartotojas@ubuntu:~/biudzetas$ cd
(venv) vartotojas@ubuntu:~$ sudo apt install nginx
(venv) vartotojas@ubuntu:~$ pip install gunicorn

Konfiguruojame ngnix:

(venv) vartotojas@ubuntu:~$ sudo rm /etc/nginx/sites-enabled/default
(venv) vartotojas@ubuntu:~$ sudo nano /etc/nginx/sites-enabled/biudzetas

Šiame faile įdedame tokį kodą:

Prie server_name įrašome savo serverio IP

Į location /static - kelia iki programos static katalogo

server {
    listen 80;
    server_name 192.168.43.108;

    location /static {
        alias /home/vartotojas/biudzetas/biudzetas/static;
    }

    location / {
        proxy_pass http://localhost:8000;
        include /etc/nginx/proxy_params;
        proxy_redirect off;
    }
}

Perkrauname nginx:

(venv) vartotojas@ubuntu:~$ sudo systemctl restart nginx

Jei naršyklėje atidarysime http://192.168.43.108/, pamatysime, kad programa vis dar neveikia (nginx klaida)

Konfiguruojame ir paleidžiame gunicorn:

Sužinome, kiek mūsų serveris turi branduolių:

(venv) vartotojas@ubuntu:~$ nproc --all
1

Reiškia, paleisdami gunicorn, prie -w turėsime įrašyti 3 ((2 x branduolių_kiekis) + 1)

Paleidžiame gunicorn:

(venv) vartotojas@ubuntu:~$ cd biudzetas/
(venv) vartotojas@ubuntu:~/biudzetas$ gunicorn -w 3 run:app

Galime užeiti į naršyklę ir pažiūrėti, ar viskas veikia, pvz.: http://192.168.43.108/

Bėda, kad nutraukę gunicorn procesą, vėl neprieisime prie programos per naršyklę. Tam reikia įsidiegti ir sukonfiguruoti supervisor

Konfiguruojame ir paleidžiame supervisor:

Įsidiegiame:

(venv) vartotojas@ubuntu:~/biudzetas$ sudo apt install supervisor

Sukuriame konfiguracinį failą:

(venv) vartotojas@ubuntu:~/biudzetas$ sudo nano /etc/supervisor/conf.d/biudzetas.conf 

Į failą įrašome tokį kodą:

[program:biudzetas]                                                    
directory=/home/vartotojas/biudzetas
command=/home/vartotojas/biudzetas/venv/bin/gunicorn -w 3 run:app
user=vartotojas
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
stderr_logfile=/var/log/biudzetas/biudzetas.err.log
stdout_logfile=/var/log/biudzetas/biudzetas.out.log

Sukuriame aprašytus log failus:

(venv) vartotojas@ubuntu:~/biudzetas$ sudo mkdir -p /var/log/biudzetas
(venv) vartotojas@ubuntu:~/biudzetas$ sudo touch /var/log/biudzetas/biudzetas.err.log
(venv) vartotojas@ubuntu:~/biudzetas$ sudo touch /var/log/biudzetas/biudzetas.out.log

Perkrauname supervisor:

(venv) vartotojas@ubuntu:~/biudzetas$ sudo supervisorctl reload

Galime naršyklėje atsidaryti http://192.168.43.108/

Padidiname atsiunčiamos nuotraukos dydžio limitą:

Atsidarome nginx konfiguracinį failą:

vartotojas@ubuntu:~$ sudo nano /etc/nginx/nginx.conf

Jame pridedame eilutę client_max_body_size 5M:

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        client_max_body_size 5M;
        # server_tokens off;

Perkrauname nginx:

vartotojas@ubuntu:~$ sudo systemctl restart nginx

VISKAS!