Ядро K2 Cloud ERP автоматично встановлює все, що необхідно для роботи системи. Воно автоматично встановить Python, якщо його немає в Linux (у Windows це є обов‘язком адміністратора), встановлює pip та всі необхідні компоненти та залежності.
Система K2 Cloud ERP з коробки підтримує багатопоточність. Але для реальної роботи все ж таки рекомендується налаштувати вебсервер Nginx та налаштувати сервіс додатка 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 для домену з сервісом 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, який відповідає за 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