Требования по производительности зависят от конкретного решения, но общий принцип следующий: Totum потребляет мало оперативной памяти, но чувствителен к тактовой частоте процессора.
Для большинства решений достаточно CPU с частотой 2.4 - 2.6 Ггц (2-4 core).
Чем выше частота, тем быстрее для пользователя будет произведено вычисление. Количество ядер влияет только на комфорт совместной работы нескольких пользователей. Вычисление результата операции для пользователя всегда идет на одном ядре.
Для емких по количеству данных решений — требуется донастройка PostgreSQL на производительность, для чего требуется и ядра процессора и оперативная память.
Установку без домена смотреть здесь
Скрипт автоустановки предназначен ТОЛЬКО ДЛЯ ЧИСТЫХ ОБРАЗОВ!!!
Если у вас уже установлено и сконфигурировано другое ПО (или другие версии Totum), то сервер придет в неработоспособное состояние без возможности отката назад!
Разверните сервер;
Делегируйте на него домен (необходимо дождаться, пока DNS вступят в силу);
Откройте терминал под root
или sudo-пользователем
и выполните:
sudo curl -O https://raw.githubusercontent.com/totumonline/totum-mit/master/totum/moduls/install/autoinstall.sh && sudo bash autoinstall.sh
Если сервер скажет, что у него нет `curl` то его надо поставить: apt update && apt -y install curl
Следуйте подсказкам на экране.
Откройте делегированный домен и авторизуйтесь под admin и указанным при установке паролем.
Это нужно если вы ставите внутри локальной сети и доступ к серверу будет по
ip
.Скрипт автоустановки предназначен ТОЛЬКО ДЛЯ ЧИСТЫХ ОБРАЗОВ!!! Если у вас установлено и сконфигурировано другое ПО, то оно станет неработоспособным!
Разверните сервер;
Откройте терминал под root
или sudo-пользователем
и выполните:
sudo curl -O https://raw.githubusercontent.com/totumonline/totum-mit/master/totum/moduls/install/autoinstall_without_domain.sh && sudo bash autoinstall_without_domain.sh
Следуйте подсказкам на экране.
Откройте по ip
и авторизуйтесь под admin
и указанным при установке паролем
.
Откройте файл конфига Тотум и замените ip
на домен.
Например 70.145.23.56
> totum.monster
:
nano /home/totum/totum-mit-docker/totum/Conf.php
Если вы загружали файлы — переименуйте папку (замените YOUR_IP
и YOUR_DOMAIN
):
mv /home/totum/totum-mit/totum/fls/YOUR_IP /home/totum/totum-mit/totum/fls/YOUR_DOMAIN
Если вы загружали защищенные! файлы — переименуйте еще одну папку (замените YOUR_IP
и YOUR_DOMAIN
):
mv /home/totum/totum-mit/secureFiles/YOUR_IP /home/totum/totum-mit/secureFiles/YOUR_DOMAIN
Это пошаговое описание того, что делает скрипт автоконфигурации в случае, когда вам нужно разобраться подробнее и выполнить какие-то части установки по-другому.
Далее все команды указаны от root, если вы работаете от sudo-пользователя добавьте sudo.
В видео не показаны некоторые моменты, актуальные на отдельно взятых серверах. Текст имеет приоритет!
Проверяем работу apt
в фоновом режиме:
sudo ps aux | grep -i apt | wc -l
Ответ должен быть — 1
.
Проверяем локаль сервера:
locale
Должно быть
LANG=en_US.UTF-8
Если нет, то выполняем
dpkg-reconfigure locales
Оставляем звездочку только у en_US.UTF-8 UTF-8
. На втором экране выбираем en_US.UTF-8
по умолчанию.
Рестартуем сервер:
reboot
Обновляем реестр apt, подключаем PPA репозитарий PHP и обновляем еще раз.
apt update
apt -y install software-properties-common
add-apt-repository ppa:ondrej/php
apt update
Устанавливаем некоторое полезное ПО.
apt -y install git unzip curl nano htop wget mc
Создаем пользователя totum — замените typepasshere
на придуманный вами пароль.
useradd -p typepasshere -s /bin/bash -m totum
Устанавливаем PHP.
apt -y install php8.0 php8.0-bcmath php8.0-cli php8.0-curl php8.0-fpm php8.0-gd php8.0-mbstring php8.0-opcache php8.0-pgsql php8.0-xml php8.0-zip php8.0-soap php8.0-ldap
Проверяем, что fpm стоит в автозапуске.
systemctl is-enabled php8.0-fpm
Если отключен, то влючаем.
systemctl enable php8.0-fpm
Останавливаем apache.
service apache2 stop
Отключаем автозапуск apache.
systemctl disable apache2
Создаем пул php-fpm.
nano /etc/php/8.0/fpm/pool.d/totum.conf
Параметры pm необходимо настроить под производительность сервера (это можно сделать потом).
Параметры php_admin_value настройте под мощность своего сервера.
[memory_limit]
— желательно от 1024М
.
[upload_max_filesize]
— под задачи системы, измеряется в мегабайтах. При изменении помимо этого параметра необходимо изменить client_max_body_size 10M;
в конфиге домена nginx
.
[opcache.memory_consumption]
— от 128
до 1024
.
[jit_buffer_size]
— от 64
до 512
. Не используйте jit
— удалите эту строку из конфига пула при версии PHP
<
8.0.10
. Проверить версию — php -v
.
Конфиг FPM:
[totum]
pm = dynamic
pm.max_children = 20
pm.start_servers = 7
pm.min_spare_servers = 7
pm.max_spare_servers = 15
php_admin_value[display_errors] = stderr
php_admin_value[log_errors] = On
listen = /run/php/php8.0-fpm-totum.sock
listen.mode = 0660
listen.owner = totum
listen.group = www-data
user = totum
group = totum
php_admin_value[memory_limit] = 1024M
php_admin_value[upload_max_filesize] = 10M
php_admin_value[post_max_size] = 0
php_admin_value[opcache.enable] = 1
php_admin_value[opcache.enable_cli] = 1
php_admin_value[opcache.memory_consumption] = 128M
php_admin_value[jit_buffer_size] = 64M
php_admin_value[session.gc_maxlifetime] = 3600
php_admin_value[session.save_path] = /var/lib/php/sessions_totum
Создаем папку для хранения сессий:
mkdir /var/lib/php/sessions_totum && chmod 1733 /var/lib/php/sessions_totum
Удаляем стандартный пул:
rm /etc/php/8.0/fpm/pool.d/www.conf
Перезапускаем php-fpm.
service php8.0-fpm restart
Можно проверить, что пул totum запустился от пользователя totum.
systemctl status php8.0-fpm.service
Статья на хабр про настройку воркеров-fpm
pm.max_children — максимальное количество дочерних процессов;
pm.start_servers — количество процессов при старте;
pm.min_spare_servers — минимальное количество процессов, ожидающих соединения (запросов для обработки);
pm.max_spare_servers — максимальное количество процессов, ожидающих соединения (запросов для обработки).
Для того, чтобы корректно установить эти значения, необходимо учитывать:
сколько памяти в среднем потребляет дочерний процесс (используйте htop, отфильтруйте по php-fpm);
объем доступного ОЗУ (при помощи free).
Total Max Processes = (Total Ram - (Used Ram + Buffer)) / (Memory per php process)
Всего ОЗУ: 4Гб
Используется ОЗУ: 1000Мб
Буфер безопасности: 400Мб
Память на один дочерний php-fpm процесс (в среднем): 30Мб
Максимально возможное кол-во процессов = (4096 - (1000 + 400)) / 30 = 89
Четное количество: 89 округлили в меньшую сторону до 80
Значение остальных директив можно установить исходя из ожидаемой нагрузки на приложение а также учитывая загрузку кроме работы php-fpm.
К примеру для pm.max_children = 40.
pm.max_children = 40
pm.start_servers = 15
pm.min_spare_servers = 15
pm.max_spare_servers = 25
Устанавливаем postgresql.
apt -y install postgresql
Запускаем консоль postgresql от пользователя postgres.
sudo -u postgres psql
Создаем пользователя базы аналогичного пользователю системы — замените typasshere
на придуманный вами пароль.
CREATE USER totum WITH ENCRYPTED PASSWORD 'typepasshere';
Cоздаем базу и назначаем доступ.
CREATE DATABASE totum;
GRANT ALL PRIVILEGES ON DATABASE totum TO totum;
Закрываем консоль базы
\q
Устанавливаем nginx.
apt -y install nginx
Создаем файл конфигурации nginx:
nano /etc/nginx/sites-available/totum.online.conf
Замените YOUR_SERVER_IP
и DOMAIN.ZONE
на ваш ip и домен, admin@yourdomain.input
— на email админа.
server {
listen YOUR_SERVER_IP:80;
server_name DOMAIN.ZONE;
charset UTF-8;
root /home/totum/totum-mit/http/;
index index.php;
expires off;
client_max_body_size 10M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ ^/fls/6_main_img.png$ {
try_files /fls/$host/6_main_img.png $uri /fls/hand.png;
}
location ~ ^/fls/6_favicon.png$ {
try_files /fls/$host/6_favicon.png $uri /fls/hand_favicon.png;
}
location ~ ^/fls/(.+)$ {
try_files /fls/$host/$1 $uri /fls/no-img.jpg;
}
location ~ ^/fonts/(.+)$ {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
expires 365d;
}
location ~* \.php$ {
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f admin@yourdomain.input";
fastcgi_pass unix:/run/php/php8.0-fpm-totum.sock;
fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 300;
}
}
Включаем домен:
ln -s /etc/nginx/sites-available/totum.online.conf /etc/nginx/sites-enabled/totum.online.conf
Проверяем конфиг nginx.
nginx -t
Перезапускаем nginx.
service nginx restart
Иногда в образе системы у хостера 80
и 443
порты заблокированы в iptables
, чтобы открыть:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# просмотр правил
iptables -L | grep tcp
Как сохранить правила iptables:
Утилита iptables не сохраняет правила, если это явно не указать и после перезагрузки возвращается в предыдущее состояние. Установим пакет:
apt install iptables-persistent
В процессе установки на оба вопроса ответить Yes
.
Сохранить текущие правила после установки:
service netfilter-persistent save
Система при следующей загрузке использует последние сохраненные правила.
Как восстановить правила:
В процессе настройки брандмауэра, по разным причинам, возникает необходимость вернуться к заведомо рабочим, испытанным правилам. Сервис netfilter-persistent сохраняет их в файле /etc/iptables/rules.v4, если не успели сохранить активные правила, значит в файле предыдущая версия, восстанавливаем:
iptables-restore < /etc/iptables/rules.v4
Изменяем пользователя на totum.
su totum
Переходим в домашнюю директорию.
cd ~
Устанавливаем totum с git.
git clone https://github.com/totumonline/totum-mit.git
cd totum-mit
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php --quiet
rm composer-setup.php
php composer.phar install --no-dev
Выполните из папки totum-mit — замените DB_PASS
на пароль установленный для БД ранее, admin@yourdomain.input
и yourdomain.input
на ваши значения, typepasshere
— придумайте пароль админа totum. ru
укажите язык установки (доступны en
, ru
, es
, de
).
bin/totum install --pgdump=pg_dump --psql=psql -e -- ru multi totum admin@yourdomain.input yourdomain.input admin typepasshere totum localhost totum DB_PASS
bin/totum install --pgdump=PGDUMP --psql=PSQL -e -- ru multi SCHEMA_NAME ADMIN_EMAIL DOMAIN admin ADMIN_PASS DB_NAME DB_HOST DB_USER DB_PASS
PGDUMP
и PSQL
— необязательные параметры, но если они установлены вместе с базой их лучше указать. Если они не прописаны глобально для системы, то надо указать пути. Обычно --pgdump=pg_dump --psql=psql
.
-e
— позволяет перезаписать существующую схему БД.
ru
— язык устанавливаемой схемы. Доступны en
, ru
, es
, de
.
multi
— тип установки. Сейчас доступен только multi
.
SCHEMA_NAME
— название схемы в БД. Будет создана или перезаписана при наличии -e
. Ставить в public категорически ЗАПРЕЩАЕТСЯ!
ADMIN_EMAIL
— используются для критических нотификаций.
DOMAIN
— HOST без протокола (например totum.online) по которому будет отвечать Totum. При установке без домена указывается ip
.
ADMIN_PASS
— замените на желаемый пароль админа.
DB_NAME
, DB_HOST
, DB_USER
, DB_PASS
— параметры доступа к БД. Не указываются если вместо них используется строка подключения postgres --db_string="postgresql://user:pass@host:port/name"
openssl rand -base64 64 > /home/totum/totum-mit/Crypto.key
echo -e "* * * * * cd $HOME/totum-mit/ && bin/totum schemas-crons\n*/10 * * * * cd $HOME/totum-mit/ && bin/totum clean-tmp-dir\n*/10 * * * * cd $HOME/totum-mit/ && bin/totum clean-schemas-tmp-tables" | crontab -u totum -
Можно проверить.
crontab -e
# в качестве редактора выберите какой вам нравится, но лучше nano :)
Установим certbot:
apt install certbot
Добавим его конфигурацию:
nano /etc/letsencrypt/cli.ini
authenticator = webroot
webroot-path = /var/www/html
post-hook = service nginx reload
text = True
Создадим папку для проверки сертификатов:
mkdir -p /var/www/html/.well-known/acme-challenge
echo Success > /var/www/html/.well-known/acme-challenge/example.html
Зарегистрируем certbot заменив you_email@email.com
на ваш email:
certbot register --email you_email@email.com
Добавим файл конфигурации nginx:
nano /etc/nginx/acme
location /.well-known {
root /var/www/html;
}
Подключим эту дополнительную конфигурацию в основной конфиг (замените DOMAIN.ZONE
на ваш домен):
nano /etc/nginx/sites-available/DOMAIN.ZONE.conf
Добавляем в секцию server
:
include acme;
Перезагружаем nginx:
service nginx reload
Для проверки открываем из браузера (замените DOMAIN.ZONE
на ваш домен):
http://YOU_DOMAIN.ZONE/.well-known/acme-challenge/example.html
Должны увидеть: Success
Удаляем проверочный файл:
rm /var/www/html/.well-known/acme-challenge/example.html
Проверяем получение сертификата в тестовом режиме (замените YOUR_DOMAIN.ZONE
на ваш домен):
certbot certonly --dry-run -d YOUR_DOMAIN.ZONE
Если тест проходит — получаем сертификат:
certbot certonly -d YOUR_DOMAIN.ZONE
После получения можем проверить список доменов в сертификате:
cat /etc/letsencrypt/live/YOUR_DOMAIN.ZONE/cert.pem | openssl x509 -text | grep -o 'DNS:[^,]*' | cut -f2 -d:
Подключаем сертификат в конфиг nginx (замените YOUR_DOMAIN.ZONE
на ваш домен):
nano /etc/nginx/sites-available/YOUR_DOMAIN.ZONE.conf
Заменяем 80 порт на 443 (вместо YOUR_IP
у вас должен быть ip
вашего сервера):
listen YOUR_IP:80;
—> listen YOUR_IP:443 ssl;
Добавляем после include acme;
ssl_certificate /etc/letsencrypt/live/YOUR_DOMAIN.ZONE/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/YOUR_DOMAIN.ZONE/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/YOUR_DOMAIN.ZONE/chain.pem;
Создаем переадресацию http
>
https
, добавялем в настройки nginx после последней закрывающей скобки:
server {
include acme;
listen *:80;
server_name _;
location / {
return 301 https://$host$request_uri;
}
}
В верхней секции server
удаляем include acme;
.
Перезапускаем nginx:
service nginx reload
Подключаем перевыпуск сертификата:
crontab -e
Вам нужно заменить 42
в этой строке на другое число в диапазоне между 0
и 59
:
42 */12 * * * certbot renew --quiet --allow-subset-of-names
Для добавления дополнительных доменов в сертификат:
certbot certonly --expand -d YOU_DOMAIN.ZONE,YOU_SECOND_DOMAIN.ZONE,YOU_THIRD_DOMAIN.ZONE
Обязательно должны быть перечислены вссе домены в сертификате, первым должен быть основной домен на который сертификат получен первым!
Установка завершена — можно использовать Totum.
Если сервер имеет базово неподходящую вам таймзону ее нужно поменять в двух местах — системе и php.
Посмотреть информацию по системе:
timedatectl
Посмотреть список всех таймзон:
timedatectl list-timezones
Установить таймзону (название таймзоны берется из списка выше):
timedatectl set-timezone Europe/Kaliningrad
Устанавливаем timezone для пула FPM:
nano /etc/php/8.0/fpm/pool.d/totum.conf
PHP-FPM берет таймзону системы при старте, поэтому после установки новой системы таймзоны вам нужно рестартовать FPM:
service php8.0-fpm restart
Устанавливаем зону для PostgreSQL. Запускаем консоль postgresql от пользователя postgres.
sudo -u postgres psql
Устанавливаем зону:
ALTER SYSTEM SET timezone TO 'Europe/Minsk'
Закрываем консоль базы
\q
Рестартуем Postgresql:
service postgresql restart
Откройте файл конфига Тотум и замените старый домен на новый.
nano /home/totum/totum-mit-docker/totum/Conf.php
Если вы загружали файлы — переименуйте папку (замените YOUR_OLD_DOMAIN
на YOUR_NEW_DOMAIN
):
mv /home/totum/totum-mit/totum/fls/YOUR_OLD_DOMAIN /home/totum/totum-mit/totum/fls/YOUR_NEW_DOMAIN
Если вы загружали защищенные! файлы — переименуйте еще одну папку (замените YOUR_OLD_DOMAIN
и YOUR_NEW_DOMAIN
):
mv /home/totum/totum-mit/secureFiles/YOUR_OLD_DOMAIN /home/totum/totum-mit/secureFiles/YOUR_NEW_DOMAIN
Проверяем получение сертификата в тестовом режиме (замените YOUR_DOMAIN.ZONE
на ваш новый домен):
certbot certonly --dry-run -d YOUR_DOMAIN.ZONE
Если тест проходит — получаем сертификат:
certbot certonly -d YOUR_DOMAIN.ZONE
Подключаем сертификат в конфиг nginx:
nano /etc/nginx/sites-available/totum.online.conf
Замените YOUR_DOMAIN.ZONE
на ваш новый домен:
В строке
server_name
и в блоке с сертификатами
ssl_certificate /etc/letsencrypt/live/YOUR_DOMAIN.ZONE/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/YOUR_DOMAIN.ZONE/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/YOUR_DOMAIN.ZONE/chain.pem;
service nginx reload