Установка системных компонент

В этом разделе описана установка необходимых для ERP компонент, таких как СУБД, брокер сообщений, PHP и другие.

Установка

Для работы 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-сервер

Важно

Пожалуйста, используйте только актульные поддерживаемые версии операционных систем, например, Debian 12 bookworm, чтобы не возникло проблем с установкой или обновлениями компонент. Некоторые компоненты не могут быть установлены на операционные системы, для которых закончилась поддержка.

PostgreSQL

Инструкции по установке под вашу операционную систему доступны на официальном сайте.

Рекомендуется явно устанавливать версию 16. Не забудьте про расширение PostGIS-3.

sudo apt install -y postgresql-16 postgresql-16-postgis-3

После установки желательно выполнить настройку Postgres для достижения максимальной производительности.

RabbitMQ

Инструкции по установки под вашу операционную систему доступны на официальном сайте.

После установки Erlang и RabbitMQ вам нужно будет активировать плагины: rabbitmq_management и rabbitmq_web_stomp.

sudo rabbitmq-plugins enable rabbitmq_management --offline

и

sudo rabbitmq-plugins enable rabbitmq_web_stomp --offline

PHP

PHP необходим версии 8.3. Другие версии не поддерживаются. Необходимо установить php и требуемый набор расширений. Если вы планируете использовать WEB-сервер NGINX, то установите расширение php-fpm, как показано далее; если Apache2, то php-fpm устанавливать не нужно, вместо этого установите apache2-php.

sudo apt install -y php8.3-{fpm,cli,common,curl,intl,mbstring,opcache,pgsql,readline,xml,zip,snmp,gd}

Redis

Инструкции по установке под вашу операционную систему доступны на официальном сайте.

Python

Подходит Python 3.9 и новее. Например, Debian 12 содерит версию Python 3.11. Если у вас версия Python ниже 3.9, то вам нужно обновить Python.

В любом случае вам нужно установить следующие дополнительные компоненты:

  • venv

  • pip

На Debian12 это делается следующим образом:

sudo apt install -y python3-venv python3-pip python3-dev

Supervisor

Supervisor является пакетом Python. Установите supervisor одним из подходящих способов, описанных на официальном сайте.

Для Debian также существует системный пакет, который можно установить используя apt.

Nginx

Инструкции по установке под вашу операционную систему доступны на официальном сайте.

Настройка

Следующие настройки вам пригодятся дальше при установке ERP, поэтому запишите создаваемые имена пользователей, их пароли, названия базы данных и т.д.

База данных Postgresql

Создать пользвателя базы данных, базу данных и активировать расширение PostGIS в ней. Вместо имя_пользователя укажите имя создаваемого пользователя. После выоплнения первой команды нужно будет дважды ввести пароль создаваемого пользователя.

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"

RabbitMQ

Создайте файл /etc/rabbitmq/rabbitmq.conf с настройками:

listeners.tcp.default = 5672
web_stomp.port = 15674
web_stomp.cowboy_opts.max_keepalive = 60

Теперь нужно создать пользователя с полными правами для ERP и еще одного пользователя с ограниченными правами для WebSocket.

Вместо имя_пользователя (имя_websocket_пользователя) и пароль_пользователя (пароль_websocket_пользователя) укажите соответственно имя и пароль создаваемого пользователя.

Основной пользотватель:

sudo rabbitmqctl add_user имя_пользователя пароль_пользователя
sudo rabbitmqctl set_user_tags имя_пользователя administrator monitoring
sudo rabbitmqctl set_permissions имя_пользователя ".*" ".*" ".*"

WebSocket пользователь:

sudo rabbitmqctl add_user имя_websocket_пользователя пароль_websocket_пользователя
sudo rabbitmqctl set_permissions имя_websocket_пользователя "^erp-stomp:id-.*" "" "^erp-stomp:id-.*"

Имя и пароль этого пользователя вам нужно будет ввести в настройках ERP после установки.

PHP

  • В файлах /etc/php/8.3/fpm/php.ini и /etc/php/8.3/fpm/fpm.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

Redis

Вы можете дополнительно настроить пароль, но в этом нет необходимости, если вы будете использовать Redis изолированно на том же сервере. Пароль настраивается в файле /etc/redis/redis.conf в параметре requirepass.

Nginx

В конфигурационном файле /etc/nginx/nginx.conf измените значение для user на:

user www-data www-data;

Удалите файл /etc/nginx/conf.d/default.conf и вместо него создайте новый файл со следующим содержимым (вместо erp.mycompany.com укажите ваше доменное имя):

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; }
}

Перезапуск

Перезапустите операционную систему целиком или все настраиваемые службы:

sudo systemctl restart rabbitmq-server
sudo systemctl restart php8.3-fpm
sudo systemctl restart nginx
sudo systemctl restart redis