Skip to content

Flask diegimas į serverį

DonatasNoreika edited this page Jun 17, 2020 · 34 revisions

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 vartotojas@192.168.43.108

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!

Dekoratoriai

Iteratoriai ir generatoriai

RegEx

Pillow

Email

NumPy

Pandas

Seaborn

Mašininis mokymasis

Requests, JSON, API

Web Scraping (Beautiful Soup)

Duomenų bazės

Flask

Django

Django REST

Odoo

Linux

Pabaigimo užduotis: savo programos kūrimas

Clone this wiki locally