Встановлення
УВАГА: ця інструкція актуальна для версій ERP USERSIDE 3.19+
Опис
Для спрощення будуть розглянуті команди для операційної системи Linux Debian 13 (trixie). Для досвідчених системних адміністраторів не становитиме труднощів використати аналогічні команди для іншої операційної системи. Якщо ж ви не почуваєтеся впевнено в адмініструванні операційних систем, ми рекомендуємо використовувати Debian або Ubuntu Server LTS. Через їхню простоту, а також тому, що наша технічна підтримка значно краще розбирається в Debian-подібних дистрибутивах. Імовірність підказати щось, що не стосується ERP USERSIDE, але стосується адміністрування операційної системи, буде значно вищою, якщо у вас Debian або подібний дистрибутив на його основі.
З іншого боку, якщо ви досвідчений системний адміністратор і маєте навички та досвід роботи з Docker, можливо, зручнішим для вас буде варіант використання готового середовища на базі Docker-образів, які ми підготували спеціально, включивши до них усе необхідне для роботи ERP USERSIDE. У цьому випадку вам не доведеться нічого налаштовувати, крім виконання простих налаштувань Docker-бандла https://github.com/userside/userside-docker.
Вимоги
Для роботи ERP USERSIDE потрібні різні системні застосунки та служби, зокрема інтерпретатор мови PHP з набором розширень, WEB-сервер, система керування базами даних тощо. У цьому розділі перелічені такі вимоги залежно від версії ERP USERSIDE.
Також зверніть увагу, що ваша операційна система має бути налаштована з коректним часовим поясом і локаллю. Від цього залежить правильність відображення інформації та коректність сортування.
Список потрібних розширень PHP містить усі розширення, які не входять до складу ядра PHP. Частина цих розширень може постачатися разом з основним пакетом PHP або у складі пакета php-common, інша частина має бути встановлена додатково.
3.20
- PHP 8.4-8.5
- Розширення PHP: ctype, gd, json, libxml, mbstring, openssl, pdo, pdo_pgsql, posix, simplexml, snmp, sockets, zlib, pcntl
- Додаткові розширення PHP: ldap
- Python: Потрібен Python3 будь-якої версії, що підтримується на цей момент. Статус версій можна переглянути тут: "Status of Python versions". Рекомендується використовувати версію зі станом "security" або "bugfix". Версії, позначені як "end-of-life", не підтримуються. Версії, позначені як "feature", використовувати не рекомендується.
- Модулі Python: pip, venv
- PostgreSQL: 16+ (бажано 18)
- Redis: 5+ (бажано 7)
- RabbitMQ: 3.13+ (бажано 4+)
- Supervisor
3.19 (поточна стабільна)
- PHP: 8.3-8.4
- Розширення PHP: ctype, gd, json, libxml, mbstring, openssl, pdo, pdo_pgsql, posix, simplexml, snmp, sockets, zlib, pcntl
- Додаткові розширення PHP: ldap, soap
- Python: Потрібен Python3 будь-якої версії, що підтримується на цей момент. Статус версій можна переглянути тут: "Status of Python versions". Рекомендується використовувати версію зі станом "security" або "bugfix". Версії, позначені як "end-of-life", не підтримуються. Версії, позначені як "feature", використовувати не рекомендується.
- Модулі Python: pip, venv
- PostgreSQL: 12+ (бажано 16)
- Redis: 5+ (бажано 7)
- RabbitMQ: 3.10+ (бажано 3.13)
- Supervisor
Основні домовленості
Каталог, у який встановлюється ERP USERSIDE, - /var/www/userside. Усередині цього каталогу має бути підкаталог public, який є кореневим каталогом для WEB-сервера. Якщо ви хочете використовувати інший каталог для ERP USERSIDE, не забувайте вносити відповідні виправлення в усі приклади з цієї інструкції.
Створіть каталоги:
sudo mkdir -p /var/www/userside/public /var/log/usm_poller sudo chown -R www-data:www-data /var/www/userside /var/log/usm_poller
Вам потрібно виділити доменне ім'я для ERP USERSIDE. У прикладах нижче використовується userside.mycompany.com, але вам потрібно буде замінити його на своє. Пропишіть це доменне ім'я в /etc/hosts, якщо воно відрізняється від імені хоста, на якому виконується встановлення.
Встановлення необхідних компонентів
Спочатку встановіть утиліти, які будуть потрібні далі в процесі встановлення. Вони потрібні для будь-якої версії ERP USERSIDE. Ви можете копіювати рядки по одному та вставляти їх у командний рядок вашої операційної системи.
Скопіюйте та вставте такі рядки повністю:
sudo tee /etc/apt/sources.list.d/contrib-non-free.list << EOL deb http://deb.debian.org/debian/ $(lsb_release -sc) contrib non-free non-free-firmware EOL sudo apt update sudo apt full-upgrade -y sudo apt install -y gnupg ca-certificates lsb-release debian-archive-keyring debian-keyring libsnmp-dev snmp-mibs-downloader
PostgreSQL
Альтернативний офіційний репозиторій
Ми наполегливо рекомендуємо використовувати останню версію PostgreSQL, оскільки це завжди позитивно впливає на швидкість роботи. Додайте до системи офіційний репозиторій Postgres:
sudo install -d /usr/share/postgresql-common/pgdg sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc sudo sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' sudo apt update
Якщо у вас інша операційна система, необхідні команди для неї можна знайти на офіційному сайті PostgreSQL.
Встановлення
Увага! Перед встановленням PostgreSQL у вашій операційній системі має бути встановлена ваша локальна локаль і коректний часовий пояс. Це можна зробити й пізніше, але буде значно простіше, якщо це виконати до встановлення PostgreSQL. Виконайте таку команду, щоб переконатися, що потрібна локаль присутня:
locale -a
Якщо серед перелічених немає вашої локальної локалі, встановіть її. Для цього достатньо відредагувати файл /etc/locale.gen, прибравши коментарі перед рядком або рядками з потрібною локаллю, а потім виконати команду:
sudo locale-gen
Якщо потрібно змінити локаль за замовчуванням, виконайте:
sudo dpkg-reconfigure locales
Щоб змінити часовий пояс, виконайте:
sudo timedatectl set-timezone Europe/Kyiv
Тепер можна перейти до встановлення PostgreSQL:
sudo apt install -y postgresql-18 postgresql-18-postgis-3
Налаштування
Створіть користувача та базу даних для ERP USERSIDE. У прикладі нижче створюється користувач з іменем userside і база даних з таким самим іменем. Якщо ваша локаль не uk_UA, не забудьте змінити команду. Потім до бази даних підключається розширення PostGis, потрібне для роботи з географічними даними. Після виконання першого рядка вам потрібно буде двічі ввести пароль для нового користувача - запишіть цей пароль, він знадобиться далі для встановлення ERP USERSIDE.
sudo -u postgres createuser userside -P sudo -u postgres createdb -e -E "UTF-8" -l "uk_UA.UTF-8" -O userside -T template0 userside sudo -u postgres psql -d userside -c "CREATE EXTENSION postgis"
Якщо PostgreSQL встановлений на іншому сервері, потрібно буде внести корекції до файлів postgresql.conf і pg_hba.conf, розташованих у каталозі /etc/postgresql/16/main/. У файлі postgresql.conf потрібно розкоментувати та змінити значення параметра listen_addresses, вказавши там усі IP-адреси інтерфейсів сервера, на яких він може приймати підключення до PostgreSQL. У файлі pg_hba.conf потрібно в самому кінці додати рядок за аналогією з попередніми, який вказує, з якої адреси може підключатися користувач ERP USERSIDE. Але якщо PostgreSQL розташований на тому самому сервері, що й USERSIDE, вносити корективи в ці файли не потрібно.
Redis
Стандартний репозиторій Debian 13 містить Redis версії 8.0.2. Ця версія підходить для роботи ERP USERSIDE.
Встановлення
sudo apt install -y redis-server
Налаштування
За замовчуванням Redis приймає підключення без пароля, але ми наполегливо рекомендуємо встановити пароль. Оскільки пароль передається у відкритому вигляді (Redis не передбачає шифрування, бо орієнтований на швидкість обробки запитів, і додаткові кроки на кшталт шифрування не застосовуються), потрібно створити справді довгий і складний пароль, наприклад за допомогою утиліти openssl:
openssl rand --hex 32
На виході буде випадковий набір із 32 байтів у шістнадцятковому вигляді, який ви використовуватимете як пароль. Далі потрібно підставити цей згенерований рядок замість слова MYPASSWORDHERE. Запишіть його. Потім ви вкажете цей рядок як пароль Redis у налаштуваннях.
Вкажіть згенерований пароль у конфігураційному файлі Redis:
sudo sed -i 's@^.*requirepass .*@requirepass MYPASSWORDHERE@g' /etc/redis/redis.conf
де замість MYPASSWORDHERE вкажіть отриманий раніше пароль.
Також слід вимкнути timeout (у деяких версіях Redis він увімкнений):
sudo sed -i 's@^timeout .*@timeout 0@' /etc/redis/redis.conf
Перезапустіть Redis і переконайтеся, що він працює (у відповідь має бути PONG):
sudo systemctl restart redis redis-cli -h 127.0.0.1 -p 6379 -a MYPASSWORDHERE ping
RabbitMQ
Стандартний репозиторій Debian 13 містить старішу версію RabbitMQ 4.0.5. Її можна використовувати - вона підтримується. Однак ця версія відносно стара, тому краще встановити новішу версію з альтернативних репозиторіїв. На офіційному сайті RabbitMQ є досить докладна інформація щодо встановлення RabbitMQ для кожної операційної системи.
Додавання альтернативних репозиторіїв
Скопіюйте та вставте такий блок повністю в командний рядок:
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" \ | sudo gpg --dearmor \ | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie trixie main deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/debian/trixie trixie main EOF sudo apt update
Встановлення
Переконайтеся, що в /etc/hosts є запис для вашого hostname. Відсутність такого запису (наприклад, якщо ви змінили hostname після встановлення) є типовою помилкою під час встановлення RabbitMQ. Тому краще ще раз переконатися, що запис для hostname є.
sudo apt install -y erlang-base \
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
erlang-runtime-tools erlang-snmp erlang-ssl \
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
sudo apt install rabbitmq-server -y --fix-missing
Встановлення необхідних додатків
Наступні два рядки виконуйте по одному.
sudo rabbitmq-plugins enable rabbitmq_management --offline sudo rabbitmq-plugins enable rabbitmq_web_stomp --offline
Налаштування
Скопіюйте та вставте такий блок повністю:
sudo tee /etc/rabbitmq/rabbitmq.conf << EOF listeners.tcp.default = 5672 consumer_timeout = 2400000 web_stomp.port = 15674 web_stomp.cowboy_opts.max_keepalive = 60 EOF
Тепер потрібно створити користувачів. Ми рекомендуємо використовувати трьох різних користувачів: для адміністрування сервера (повні права), для userside і модулів (повні права, але без адміністративних прав) і користувача web-stomp для websocket (мінімальні права на читання певних об'єктів брокера). Але можна створити лише двох: адміністратора, який також використовуватиметься для userside, і користувача для websocket. Обов'язково має бути щонайменше два різні користувачі, оскільки пароль користувача websocket передається в браузер і може бути легко прочитаний користувачем. Далі наведено приклад для рекомендованих трьох користувачів.
Створіть користувача для адміністрування RabbitMQ. У цьому прикладі використовується ім'я користувача admin і пароль admin_password.
Тег administrator призначається користувачу одразу після створення, надаючи максимальні адміністративні права, а потім задаються дозволи для vhost /, що дозволяють повний доступ до налаштування, запису й читання всього всередині цього vhost*.
sudo rabbitmqctl add_user "admin" "admin_password" sudo rabbitmqctl set_user_tags "admin" "administrator" sudo rabbitmqctl set_permissions -p "/" "admin" ".*" ".*" ".*"
Створіть користувача, від імені якого працюватимуть ERP USERSIDE і модулі. Приклад для імені користувача userside (адміністративні права цьому користувачу надавати не потрібно):
sudo rabbitmqctl add_user "userside" "system_password" sudo rabbitmqctl set_user_tags "userside" "monitoring" sudo rabbitmqctl set_permissions -p "/" "userside" ".*" ".*" ".*"
Створіть користувача WebSTOMP. Він знадобиться для використання сповіщень через WebSocket. Замість websock-user можна вказати інше ім'я користувача. Замість password_websocket вкажіть свій пароль, але цей пароль передаватиметься у відкритому вигляді в браузер, тому не робіть його схожим на інші паролі:
sudo rabbitmqctl add_user "websock-user" "password_websocket" sudo rabbitmqctl set_permissions -p "/" "websock-user" "^erp-stomp:id-.*" "" "^erp-stomp:id-.*"
Увага: ім'я користувача та пароль WebSTOMP потрібно буде вказати в налаштуваннях інтерфейсу USERSIDE (Меню: Налаштування - Основні - Websocket).
* vhost - це віртуальний хост у RabbitMQ, який дозволяє різним застосункам розмежовувати різні варіанти використання одного сервера. Так само, як, наприклад, різні бази даних на одному сервері СКБД. Типовий vhost має назву /, і майже завжди цього достатньо. Але якщо ви плануєте, наприклад, запускати кілька копій ERP USERSIDE на одному сервері, то для кожної копії потрібно створити окремий vhost і, відповідно, користувачів для нього. Докладніше див. в офіційному посібнику.
Перезапустіть службу RabbitMQ:
sudo systemctl restart rabbitmq-server
Керування
Одна з команд вище встановлює модуль керування RabbitMQ, який надає зручний WEB-інтерфейс для моніторингу, діагностики та керування сервером RabbitMQ. За допомогою цього модуля можна стежити за сервером, кількістю повідомлень у чергах та іншими статусами. Усе це можна робити й за допомогою консольної утиліти rabbitmqctl, але WEB-інтерфейс може бути значно наочнішим і зручнішим.
За замовчуванням WEB-інтерфейс керування доступний за адресою http://userside.mycompany.com:15672. Ми рекомендуємо використовувати firewall для обмеження доступу до цього інтерфейсу керування.
Докладніше про модуль керування можна прочитати на офіційному сайті RabbitMQ.
PHP
Альтернативний репозиторій
sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' sudo apt update
Встановлення
Виконайте такі команди:
sudo apt install -y php8.4-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd}
Якщо ви плануєте використовувати LDAP, потрібно встановити розширення php-ldap:
sudo apt install -y php8.4-ldap
Налаштування
Нижче наведені команди, які вносять зміни до конфігураційних файлів.
sudo sed -i "s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@" /etc/php/8.4/fpm/php.ini sudo sed -i "s@^;date.timezone.*@date.timezone = $(cat /etc/timezone)@" /etc/php/8.4/cli/php.ini sudo sed -i "s@;cgi.fix_pathinfo=1@cgi.fix_pathinfo=0@" /etc/php/8.4/fpm/php.ini sudo sed -i "s@post_max_size = 8M@post_max_size = 100M@" /etc/php/8.4/fpm/php.ini sudo sed -i "s@upload_max_filesize = 2M@upload_max_filesize = 100M@" /etc/php/8.4/fpm/php.ini sudo sed -i "s@max_execution_time.*@max_execution_time = 300@" /etc/php/8.4/fpm/php.ini sudo sed -i "s@^;request_terminate_timeout =.*@request_terminate_timeout = 300@" /etc/php/8.4/fpm/pool.d/www.conf sudo systemctl restart php8.4-fpm
NGINX
Альтернативний офіційний репозиторій
Версія NGINX, що постачається в репозиторії Debian, повністю придатна для використання, і додавати альтернативний репозиторій не потрібно. Однак якщо ви хочете завжди мати останню версію, виконайте такі рядки для додавання офіційного репозиторію nginx до вашої операційної системи:
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
| sudo tee /etc/apt/preferences.d/99nginx
sudo apt update
Якщо у вас інша операційна система, необхідні команди для неї можна знайти на офіційному сайті NGINX: https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/
Встановлення
sudo apt install -y nginx
Налаштування
sudo sed -i "s@^user.*;@user www-data www-data;@" "/etc/nginx/nginx.conf" sudo systemctl restart nginx
У наведеному нижче прикладі конфігурації передбачається, що ERP USERSIDE буде встановлена до типового системного каталогу /var/www/userside. Якщо ви хочете встановити ERP USERSIDE до іншого каталогу, не забудьте виправити це в усіх наступних прикладах. Щоб не помилитися, ми рекомендуємо використовувати саме каталог /var/www/userside.
Тепер відредагуйте файл /etc/nginx/conf.d/default.conf. Або видаліть його та створіть файл з назвою /etc/nginx/conf.d/userside.conf. У будь-якому разі, незалежно від вашого вибору, вміст файлу має бути таким (замість userside.mycompany.com вкажіть своє доменне ім'я):
server {
listen 80 default_server;
server_name userside.mycompany.com;
charset utf-8;
client_max_body_size 100M;
access_log /var/log/nginx/userside-access.log;
error_log /var/log/nginx/userside-error.log;
root /var/www/userside/public;
index index.php;
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~* ^.+\.(css|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|bmp|rtf)$ {
access_log off;
log_not_found off;
expires max;
add_header Pragma public;
add_header Cache-Control "public";
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 300;
include fastcgi_params;
}
location /ws {
proxy_pass http://127.0.0.1:15674/ws;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
location ~ /\.ht { deny all; }
}
Також ви можете налаштувати SSL та інші параметри. Ця тема виходить за межі цієї інструкції.
Якщо RabbitMQ встановлений на іншому сервері або ви змінили значення порту WebSTOMP з 15674 на інше, вкажіть IP-адресу сервера з RabbitMQ і номер порту в рядку proxy_pass http://127.0.0.1:15674/ws;. Протокол має залишатися http. Шлях має залишатися /ws.
Перевірте конфігурацію та, якщо все гаразд, перезапустіть nginx:
sudo nginx -t && sudo nginx -s reload
Python
Потрібен Python3 будь-якої версії, що підтримується на цей момент. Статус версій можна переглянути тут: "Status of Python versions". Рекомендується використовувати версію зі станом "security" або "bugfix". Версії, позначені як "end-of-life", не підтримуються. Версії, позначені як "feature", використовувати не рекомендується.
Якщо на вашому хості встановлена непідтримувана версія ("end-of-life"), обов'язково встановіть додатково актуальнішу версію Python.
Встановлення потрібних пакетів
sudo apt install -y python3-dev python3-pip python3-venv libffi-dev pkg-config
Supervisor
sudo apt install -y supervisor
Завантаження та запуск інсталятора
Також див.: довідка з інсталятора
1. перейдіть до каталогу системи
cd /var/www/userside
2. завантажте скрипт інсталятора
curl -fsSL https://my.userside.eu/install.sh | sudo -u www-data bash
3. запустіть інсталятор
sudo -u www-data ./installer install
Під час роботи інсталятор перевіряє відповідність технічним вимогам, запитує параметри доступу та перевіряє підключення до серверних служб.
Ви можете ввести будь-який доступний вам номер версії ERP USERSIDE для встановлення. Для цього можна ввести номер версії зі списку (у ньому міститься лише остання версія кожної гілки) або ввести повний номер версії, якщо його немає у списку.
Після завершення роботи інсталятора буде показано повідомлення про успішне встановлення.
Якщо встановлення виконувалося не від імені користувача web-сервера, після завершення встановлення обов'язково зробіть цього користувача власником усіх файлів userside рекурсивно.
sudo chown -R www-data:www-data /var/www/userside
Налаштування після встановлення
Налаштування системних служб
Після встановлення скопіюйте приклади конфігураційних файлів системних служб і за потреби налаштуйте їх (наприклад, вкажіть шлях до каталогу userside, якщо він відрізняється від /var/www/userside). Виконайте команди:
sudo cp etc/us-core-worker.conf-example /etc/supervisor/conf.d/us-core-worker.conf sudo cp microservice/poller/etc/usm_poller.conf-example /etc/supervisor/conf.d/usm_poller.conf sudo cp etc/logrotate-example /etc/logrotate.d/userside sudo cp microservice/poller/etc/logrotate-example /etc/logrotate.d/usm_poller sudo cp etc/crontab-example /etc/cron.d/userside
Встановлення необхідних залежностей для usm_poller
Створіть віртуальне середовище venv для Python і встановіть залежні модулі, як показано нижче:
cd /var/www/userside/microservice/poller sudo -H python3 -m venv venv sudo -H venv/bin/pip install -U pip sudo -H venv/bin/pip install -U -r requirements.txt
Запуск supervisor
Supervisor контролює роботу служб, зазначених у його конфігурації. Щоб запустити supervisor, виконайте:
sudo systemctl restart supervisor
Після запуску supervisor за кілька секунд можна переглянути стан усіх служб, які він контролює. Усі служби мають бути в стані RUNNING:
sudo supervisorctl status
Одразу після встановлення
На цьому встановлення ERP USERSIDE завершено. Тепер виконайте такі дії:
- Відкрийте сторінку системи http://userside.mydomain.com/ і увійдіть (типовий логін: Admin, пароль: 1234).
- Налаштуйте Websocket у розділі: Налаштування - Основні - WebSocket. Увімкніть його та введіть ім'я користувача й пароль WebSTOMP-користувача, якого ви створили раніше в RabbitMQ.
- Виконайте основні налаштування в розділі: Налаштування - Основні.
- Налаштуйте взаємодію з білінгом згідно з інструкцією.
- Прочитайте інструкції на сторінці: З чого почати?.
- Налаштуйте API Key.
Оновлення системи
Ми намагаємося зробити все можливе, щоб наскрізне оновлення з будь-якої версії до останньої версії було успішним. Однак іноді через давні проблеми зі структурою бази даних, які раніше ніколи не заважали роботі, може виникнути ситуація, коли наскрізне оновлення неможливе. У такому випадку доведеться оновлюватися поетапно до кожної наступної останньої версії. Наприклад, з 3.14.80 спочатку до 3.15.60, потім до 3.16.39 і так далі.
Перед оновленням обов'язково прочитайте про всі зміни, які потрібно виконати для оновлення для кожної версії, що лежить між вашою поточною версією та тією, до якої ви збираєтеся оновитися.
Ми рекомендуємо зробити копію системи для безпечного проведення оновлення. Зверніться до розділу HOWTO: Клонування USERSIDE. Ви завжди можете видалити копію та почати спочатку. Це просто й безпечно. Але якщо ви хочете оновити робочу систему, виконуйте оновлення в моменти найменшого навантаження із запасом часу, потрібним для аварійного відновлення, якщо раптом щось піде не так. Завжди обов'язково робіть резервну копію бази даних і файлів перед оновленнями. Якщо оновлення буде перерване, особливо на етапі міграції даних, є ризик, що коректно відновити дані буде дуже непросто або навіть неможливо. Загалом відповідальність за наявність актуальної резервної копії повністю лежить на вас.
Процес оновлення
Ми наполегливо рекомендуємо виконувати тестові оновлення на копії системи.
Для проведення оновлення запустіть інсталятор у режимі install і дотримуйтесь інструкцій:
cd /var/www/userside sudo -u www-data ./installer install
Після оновлення USERSIDE потрібно обов'язково оновити залежності usm_poller:
cd /var/www/userside/microservice/poller sudo -H venv/bin/pip install -U pip sudo -H venv/bin/pip install -U -r requirements.txt
Тепер потрібно перезапустити всі служби, які контролюються supervisor, і переконатися, що всі вони запустилися та перебувають у стані RUNNING:
sudo supervisorctl restart all sudo supervisorctl status
Обслуговування системи
Для підтримання системи в робочому стані та забезпечення її надійної роботи в майбутньому рекомендується виконувати кілька простих дій:
- періодично створювати резервну копію бази даних
- періодично створювати резервну копію завантажених файлів (це можна зробити, просто архівуючи каталог /var/www/userside/var/attachments і файл .env)
- періодично стежити за продуктивністю сервера (за допомогою htop, atop) і брокера RabbitMQ та приймати рішення щодо масштабування пулів fpm, фонових процесів ядра і мікросервісів
Резервне копіювання
Налаштуйте періодичне резервне копіювання бази даних і користувацьких файлів. Бажано мінімум раз на добу в моменти найменшого навантаження на сервер. У PostgreSQL існує два способи створити резервну копію бази даних: dump і sql-script. У кожного з них є свої переваги та недоліки. Перший створює безпечний дамп бази даних повністю, а другий створює SQL-скрипт, виконання якого дає змогу відновити як структуру, так і дані. Рекомендуємо звернутися до документації з використання команди pg_dump для вибору більш відповідного для вас способу або набору параметрів.
Нижче наведені дві команди для створення резервної копії бази даних - виберіть одну з них і додайте до вашого crontab:
# SQL-script sudo -u postgres pg_dump --no-acl -Fp -Z 5 userside > /backup/userside.sql.gz # DUMP sudo -u postgres pg_dump --no-acl -Fc userside > /backup/userside.dump
Для створення мінімальної резервної копії файлів можна використати таку команду (для версії 3.15 і новіше):
sudo tar -czf /backup/userside.tgz .env common/config/settings.json var/attachments
Цих файлів разом із базою даних буде достатньо для відновлення роботи USERSIDE. Але для більшої надійності можна виконувати резервне копіювання всього каталогу /var/www/userside.
Відновлення з резервної копії
Для відновлення з дампа використовується команда pg_restore. Документація з використання pg_restore. Для відновлення з SQL-скрипта використовується утиліта psql. Документація з використання psql.
Перед відновленням бази даних із резервної копії потрібно обов'язково зупинити роботу USERSIDE.
1. Зупинити cron userside і всіх модулів
mkdir -p ~/cron sudo mv /etc/cron.d/userside ~/cron sudo mv /etc/cron.d/userside-modules ~/cron
2. Зупинити роботу фонових служб
sudo supervisorctl stop all
3. Зупинити роботу php-fpm
sudo systemctl stop php8.4-fpm
Тільки після цього можна переходити до відновлення бази даних із резервної копії.
SQL-script
Для відновлення БД із резервної копії у вигляді SQL-скрипта спочатку потрібно пересоздати базу даних, а потім відновити резервну копію в порожню базу даних:
sudo -u postgres dropdb userside sudo -u postgres createdb -e -E "UTF-8" -l "uk_UA.UTF-8" -O userside -T template0 userside sudo -u postgres psql -d userside -c "CREATE EXTENSION postgis" gunzip < userside.sql.gz | sudo -u postgres psql -d userside -v ON_ERROR_STOP=1
DUMP
Дамп містить базу даних повністю з усіма її елементами. Тому перед відновленням бази даних із дампа вона не повинна існувати на сервері - видаліть базу даних перед відновленням із дампа. Також важливо, щоб користувач бази даних (власник усіх елементів) уже існував - створіть його перед відновленням, якщо відновлюєте базу даних на новому сервері, де потрібного користувача ще немає.
Також зверніть увагу, що структура дампа може бути несумісною між різними версіями PostgreSQL. Це не обов'язково так, але цілком імовірно.
Для відновлення з дампа використовуйте команди:
sudo -u postgres dropdb userside sudo -u postgres pg_restore --clean --if-exists --create --exit-on-error --dbname=postgres userside.dump
Зверніть увагу, що ім'я бази даних у команді обов'язково має бути postgres, оскільки з дампа відновлюється вся база даних повністю, а не її вміст.
Після відновлення бази даних
Після відновлення бази даних будь-яким способом потрібно очистити кеш ERP USERSIDE, оскільки в кеші тепер містяться дані, відмінні від даних у базі. Перейдіть до каталогу /var/www/userside і виконайте команду очищення кешу (першу, якщо використовується пароль, або другу, якщо пароль не використовується):
source /var/www/userside/.env && redis-cli -h $US_REDIS_HOST -p $US_REDIS_PORT -a $US_REDIS_PASSWORD -n $US_REDIS_DB FLUSHDB source /var/www/userside/.env && redis-cli -h $US_REDIS_HOST -p $US_REDIS_PORT -n $US_REDIS_DB FLUSHDB
Відновіть роботу служб, які були зупинені перед виконанням резервного копіювання:
sudo mv ~/cron/* /etc/cron.d sudo supervisorctl start all sudo systemctl start php8.4-fpm
Виконайте команду відновлення, щоб файли системи відповідали версії бази даних і щоб перевірити систему на цілісність файлів.
cd /var/www/userside sudo -u www-data ./installer repair