Pre-loader

/ K2 Cloud ERP for Python / Адміністраторам / Налаштування вебсервера Nginx для роботи з K2 Cloud ERP

Налаштування вебсервера Nginx для роботи з K2 Cloud ERP

Ядро K2 Cloud ERP автоматично встановлює все, що необхідно для роботи системи. Воно автоматично встановить Python, якщо його немає в Linux (у Windows це є обов‘язком адміністратора), встановлює pip та всі необхідні компоненти та залежності.

Система K2 Cloud ERP з коробки підтримує багатопоточність. Але для реальної роботи все ж таки рекомендується налаштувати вебсервер Nginx та налаштувати сервіс додатка K2 Cloud ERP, щоб він стартував автоматично.

Сервіс K2 Cloud ERP 

Щоб створити сервіс, заходите в папку /etc/systemd/system.

Створюєте файл з тією назвою, яку буде мати сервіс. Наприклад: k2update.service

В цьому файлі пишете:


[Unit]
# Назва сервісу
Description=Gunicorn instance to server k2update
After=network.target

[Service]

# Користувач та група під якими буде працювати сервіс
User=www-data
Group=www-data

# Шлях д каталогу з K2CloudERP
WorkingDirectory=/var/www/k2cloud/k2update/k2update-real

# Шлях до середи Python
Environment="PATH=/var/www/k2cloud/k2update/venv"

# Можна підключатись, як через sock файли, так і через порти. 
#ExecStart=gunicorn --workers 4 --bind unix:/var/run/k2update/k2update.sock -m 007 app:app

# Підключаємось через порт проекта по замовчуванню
# Вказали 4 ворк-процеса та 4 потока. Ці параметри потрібно міняти в залежності від кількості ваших процесорів та кількості користувачів
ExecStart=gunicorn --workers 4 --threads 4 -m 007 app:app


[Install]
WantedBy=multi-user.target

Ви створили сервіс. 

Коли ви вносите зміни в сервісі, необхідно перезавантажити демони:

systemctl daemon-reload

Запустити сервіс можна командою:

service k2update start

Зупинити сервіс:

service k2update stop

Перезавантажити:

service k2update restart

Подивитись статус сервіса:

systemctl status k2update

Якщо сервіс працює, то повинні показуватись його процеси:

Для того, щоб сервіс автоматично завантажувався при перезавантаженні сервера, потрібно виконати команду:

systemctl enable k2update.service

Налаштування вебсервера Nginx на сервері-бекенді

Тепер налаштуємо конфіг вебсервера Nginx для домену з сервісом K2 Cloud ERP.

Заходимо в папку: /etc/nginx/sites-enabled

Створюємо файл, як звучить домен: k2update.corp2.eu

Пишемо в ньому:

server {
    listen 80;
    server_name k2update.corp2.eu;

    # Лог зі зверненнями до веб-серверу
    access_log /var/log/nginx/k2update.corp2.eu_access.log main;

    # Лог з помилками
    error_log /var/log/nginx/k2update.corp2.eu_error.log;


    # Root-каталог
    root /var/www/corp2/demo9.corp2.net/site/www;


     # Статическиое наполнение отдает сам nginx
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|bmp|swf|txt|exe|7z|rar|pdf|jfif|zip|htm|arj|fla|avi|fla|shtml|rss|atom|tif|tiff|wbmp|jng|svg|svgz|ear|json|hqx|doc|ps|eps|ai|rtf|xls|ppt|wmlc|kml|kmz|cco|jardiff|jnlp|rpm|sea|xhtml|xpi|dll|bin|deb|dmg|eot|iso|img|msi|msp|msm|ogx|mid|midi|kar|mpga|mpega|mp2|mp3|m4a|oga|ogg|spx|ra|3gpp|3gp|mp4|mpeg|mpg|mpe|ogv|mov|flv|mng|asx|asf|wmv|avi|v8i)$ {
           root $root;
           expires  10d;
           break;
        }


location ~* .(js|css|png|jpg|jpeg|gif|ico)$ {
    expires 24h;
    log_not_found off;
}




    location / {

        # Якщо працюємо через порти
        proxy_pass http://127.0.0.1:8000;

        # Якщо працюємо через sock
        #proxy_pass http://unix:/var/run/k2update/k2update.sock;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Для того, щоб спрацювали зміни, виконуємо релоад вебсервера:

nginx -s reload

Налаштування Nginx, який доступний з інтернет

У нас на фронті стоїть Nginx, який відповідає за ssl шифрування сайтів та за кешування інформації. Його основна функція – швидко отримати від бекенд вебсервера контент, тим самим звільнивши бекенд від роботи, й передати цей контент по https-протоколу.

Генеруємо SSL-сертифікат. Ми генеруємо сертифікат без необхідності перезавантаження вебсервера командою:

certbot certonly --nginx -d "k2update-test.corp2.eu"

Тепер налаштуємо конфіг Nginx. Переходимо в папку: /etc/nginx/sites-enabled

Створюємо файл з такою ж назвою, як звучить домен: k2update.corp2.eu

Вставляємо в нього наступну інформацію:

server {
        listen *:443 ssl;
        listen *:80;

        # Рут каталог тут не важливий, бо він на іншому сервері
        #root /var/www/corp2/corp2.eu/www;

        index index.php index.htm index.html;
        server_name k2update.corp2.eu;
     

        access_log /var/log/nginx/k2update.corp2.eu_access.log main;
        error_log /var/log/nginx/k2update.corp2.eu_error.log;

               # Заставляємо завжди працювати по https 
               if ( $scheme = "http" ) {
                   rewrite ^/(.*)$ https://$host/$1 permanent;
               }


            ssl_certificate /etc/letsencrypt/live/k2update.corp2.eu/fullchain.pem; # managed by Certbot
            ssl_certificate_key /etc/letsencrypt/live/k2update.corp2.eu/privkey.pem; # managed by Certbot


                ssl_session_cache shared:SSL:10m;
                ssl_session_timeout 5m;
                ssl_dhparam /etc/ssl/certs/dhparam.pem;
                add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
                ssl_protocols TLSv1.1 TLSv1.2;
                ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-
                ssl_prefer_server_ciphers on;


                #ssl_session_timeout 5m;
                #ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
                #ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
                #ssl_prefer_server_ciphers on;





# Статическиое наполнение отдает сам nginx
        # back-end этим заниматься не должен
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|bmp|swf|txt|exe|7z|rar|pdf|jfif|zip|htm|arj|fla|avi|fla|shtml|rss|atom|tif|tiff|wbmp|jng|svg|svgz|ear|json|hqx|doc|ps|eps|ai|rtf|xls|ppt|wmlc|kml|kmz|cco|jardiff|jnlp|rpm|sea|xhtml|xpi|dll|bin|deb|dmg|eot|iso|img|msi|msp|msm|ogx|mid|midi|kar|mpga|mpega|mp2|mp3|m4a|oga|ogg|spx|ra|3gpp|3gp|mp4|mpeg|mpg|mpe|ogv|mov|flv|mng|asx|asf|wmv|avi|v8i)$ {
#            root /var/www/corp2/corp2.eu/www;
#           expires   10d;
#           break;
#        }



        location ~* {
           proxy_pass http://192.168.20.229:80;
           proxy_redirect http://192.168.20.229:80/ /;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_connect_timeout 120;
           proxy_send_timeout 120;
           proxy_read_timeout 120;


           proxy_cache off;
           add_header Cache-Control no-cache;
           expires 1s;
           proxy_no_cache 1;
           proxy_cache_bypass 1;

        }

} 

Релоад вебсервера:

nginx -s reload