# Установка системных компонент В этом разделе описана установка необходимых для ERP компонент, таких как СУБД, брокер сообщений, PHP и другие. (install)= ## Установка Для работы Cubalink ERP нужно установить следующие компоненты: 1. PostgreSQL + PostGIS 2. RabbitMQ + WebSTOMP + Management 3. PHP 8.3 с расширениями ctype, gd, json, libxml, mbstring, openssl, pdo, pdo_pgsql, posix, simplexml, snmp, sockets, zlib, pcntl 4. Redis 5. Python 3.11 + venv + pip + dev 6. Supervisor 7. NGINX или другой WEB-сервер ````{important} Пожалуйста, используйте только актульные поддерживаемые версии операционных систем, например, **Debian 13 trixie**, чтобы не возникло проблем с установкой или обновлениями компонент. Некоторые компоненты не могут быть установлены на операционные системы, для которых закончилась поддержка. ```` (install-postgres)= ### PostgreSQL Инструкции по установке под вашу операционную систему доступны [на официальном сайте](https://www.postgresql.org/download/). Рекомендуется выбирать пакеты с *конкретной* версией (например, 18). Не забудьте про расширение PostGIS-3. ```shell sudo apt install -y postgresql-18 postgresql-18-postgis-3 ``` После установки желательно [выполнить настройку](https://pgconfigurator.cybertec.at/) Postgres для достижения максимальной производительности. (install-rabbitmq)= ### RabbitMQ Инструкции по установки под вашу операционную систему доступны [на официальном сайте](https://www.rabbitmq.com/docs/platforms). После установки Erlang и RabbitMQ вам нужно будет активировать плагины: rabbitmq_management и rabbitmq_web_stomp. ```shell sudo rabbitmq-plugins enable rabbitmq_management --offline ``` и ```shell sudo rabbitmq-plugins enable rabbitmq_web_stomp --offline ``` (install-php)= ### PHP PHP необходим версии 8.3. Другие версии не поддерживаются. Необходимо установить php и требуемый набор расширений. Если вы планируете использовать WEB-сервер NGINX, то установите расширение php-fpm, как показано далее; если Apache2, то php-fpm устанавливать не нужно, вместо этого установите apache2-php. ```shell sudo apt install -y php8.3-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd} ``` (install-redis)= ### Redis Инструкции по установке под вашу операционную систему доступны [на официальном сайте](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/). (install-python)= ### Python Подходит Python 3.10 и новее. Например, Debian 13 включает версию Python 3.13. Если у вас версия Python ниже 3.10, то вам нужно обновить Python. В любом случае вам нужно установить следующие дополнительные компоненты: + venv + pip На Debian это делается следующим образом: ```shell sudo apt install -y python3-venv python3-pip python3-dev ``` (install-supervisor)= ### Supervisor Supervisor является пакетом Python. Установите supervisor одним из подходящих способов, описанных [на официальном сайте](http://supervisord.org/installing.html). Для Debian также существует системный пакет, который можно установить используя **apt**. (install-nginx)= ### Nginx Инструкции по установке под вашу операционную систему доступны [на официальном сайте](https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/). (setup)= ## Настройка Следующие настройки вам пригодятся дальше при [установке ERP](/erp_install), поэтому запишите создаваемые имена пользователей, их пароли, названия базы данных и т.д. (setup-postgres)= ### База данных Postgresql Создать пользвателя базы данных, базу данных и активировать расширение PostGIS в ней. Вместо `имя_пользователя` укажите имя создаваемого пользователя. После выоплнения первой команды нужно будет дважды ввести пароль создаваемого пользователя. ```shell sudo -u postgres createuser имя_пользователя -P sudo -u postgres createdb -e -E "UTF-8" -l "ru_RU.UTF-8" -O имя_пользователя -T template0 cubalink sudo -u postgres psql -d cubalink -c "CREATE EXTENSION postgis" ``` (setup-rabbitmq)= ### RabbitMQ Создайте файл **/etc/rabbitmq/rabbitmq.conf** с настройками: ```text listeners.tcp.default = 5672 web_stomp.port = 15674 web_stomp.cowboy_opts.max_keepalive = 60 ``` Теперь нужно создать пользователя с полными правами для ERP и еще одного пользователя с ограниченными правами для WebSocket. Вместо `имя_пользователя` (`имя_websocket_пользователя`) и `пароль_пользователя` (`пароль_websocket_пользователя`) укажите соответственно имя и пароль создаваемого пользователя. Основной пользотватель: ```shell sudo rabbitmqctl add_user имя_пользователя пароль_пользователя sudo rabbitmqctl set_user_tags имя_пользователя administrator monitoring sudo rabbitmqctl set_permissions имя_пользователя ".*" ".*" ".*" ``` WebSocket пользователь: ```shell sudo rabbitmqctl add_user имя_websocket_пользователя пароль_websocket_пользователя sudo rabbitmqctl set_permissions имя_websocket_пользователя "^erp-stomp:id-.*" "" "^erp-stomp:id-.*" ``` Имя и пароль этого пользователя вам нужно будет ввести в настройках ERP после установки. (setup-php)= ### PHP + В файлах /etc/php/8.3/fpm/php.ini и /etc/php/8.3/cli/php.ini укажите ваш часовой пояс в `date.timezone` + В файле /etc/php/8.3/fpm/php.ini для параметра `cgi.fix_pathinfo` установите значение `0` + В файле /etc/php/8.3/fpm/php.ini для значений `post_max_size` и `upload_max_filesize` установите значения `100M` + В файле /etc/php/8.3/fpm/php.ini для значения `max_execution_time` установите `300` + В файле /etc/php/8.3/fpm/pool.d/www.conf для значения `request_terminate_timeout` установите `300` + В файле /etc/php/8.3/fpm/pool.d/www.conf настройте ProcessManager следующим образом: + `pm.max_children = 75` + `pm.min_spare_servers = 4` + `pm.max_spare_servers = 8` + `pm.start_servers = 8` (setup-redis)= ### Redis Вы можете дополнительно настроить пароль, но в этом нет необходимости, если вы будете использовать Redis изолированно на том же сервере. Пароль настраивается в файле /etc/redis/redis.conf в параметре `requirepass`. (setup-nginx)= ### Nginx В конфигурационном файле /etc/nginx/nginx.conf измените значение для `user` на: ``` user www-data www-data; ``` Удалите файл /etc/nginx/conf.d/default.conf и вместо него создайте новый файл со следующим содержимым (вместо `erp.mycompany.com` укажите ваше доменное имя): ```nginx server { listen 80 default_server; server_name erp.mycompany.com; charset utf-8; client_max_body_size 100M; access_log /var/log/nginx/erp-access.log; error_log /var/log/nginx/erp-error.log; root /var/www/erp/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|js|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|wav|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.3-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; } } ``` (reboot)= ### Перезапуск Перезапустите операционную систему целиком или все настраиваемые службы: ```shell sudo systemctl restart rabbitmq-server sudo systemctl restart php8.3-fpm sudo systemctl restart nginx sudo systemctl restart redis ```