Скрипт автоустановки предназначен ТОЛЬКО ДЛЯ ЧИСТЫХ ОБРАЗОВ!!!
Если у вас уже установлено и сконфигурировано другое ПО (или другие версии Totum), то с очень высокой вероятностью сервер придет в неработоспособное состояние без возможности отката назад!
Если в процессе установки произошли ошибки связанные с недоступностью репозиториев или серверов сертификатов, то скрипт не сохраняет состояния, повторный запуск не приведет к корректной установке. В этом случае необходимо перезалить образ сервера и произвести установку с нуля.
Разверните сервер;
Делегируйте на него домен;
Откройте терминал под 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
.SSL сертификат не выпускается! Для отправки email вам потребуется сторонний SMTP-сервер.
Если потом вы решите на эту базу сделать домен и сертифкат — вам потребуется скилл в Linux!
ОБРАЩЕНИЯ В ТЕПОДДЕРЖКУ ПО ПОДКЛЮЧЕНИЮ НА ТАКУЮ УСТАНОВКУ ДОМЕНА, EXIM И SSL НЕ ОБРАБАТЫВАЮТСЯ!
Скрипт автоустановки предназначен ТОЛЬКО ДЛЯ ЧИСТЫХ ОБРАЗОВ!!! Если у вас установлено и сконфигурировано другое ПО, то с очень высокой долей веротности оно станет неработоспособным!
Если в процессе установки произошли ошибки связанные с недоступностью репозиториев или серверов сертификатов, то скрипт не сохранет состояния, повторный запуск не приведет к корректной установке. В этом случае необходимо перезалить образ сервера и произвести установку с нуля.
Разверните сервер;
Откройте терминал под 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
и указанным при установке паролем
.
Пропишите настройки SMTP
в /home/totum/totum-mit/Conf.php
Откройте файл конфига Тотум и замените ip
на домен.
Например 70.145.23.56
> totum.monster
:
nano /home/totum/totum-mit-docker/totum/Conf.php
Если вы загружали файлы — переименуйте папку (замените YOU_IP
и YOU_DOMAIN
):
mv /home/totum/totum-mit-docker/totum/fls/YOU_IP /home/totum/totum-mit-docker/totum/fls/YOU_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
Устанавливаем необходимые модули PHP.
apt -y install 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 — замените DOMAIN.ZONE
на ваш домен .
nano /etc/nginx/sites-available/DOMAIN.ZONE.conf
Замените YOU_SERVER_IP
и DOMAIN.ZONE
на ваш ip и домен, admin@youdomain.input
— на email админа.
server {
listen YOU_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';
}
location ~* \.php$ {
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f admin@youdomain.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;
}
}
Включаем домен — замените DOMAIN.ZONE
на ваш домен.
ln -s /etc/nginx/sites-available/DOMAIN.ZONE.conf /etc/nginx/sites-enabled/DOMAIN.ZONE.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
С этого момента можно открыть DOMAIN.ZONE
в браузере и увидеть визуальный установщик.
Для этого ваш домен должен быть делегирован и иметь A запись на ip сервера. Или прописан в hosts на локальной машине с которой осуществляется доступ.
Продолжить установку можно в нем или вернуться в консоль и установить из консоли.
Выполните из папки totum-mit — замените DB_PASS
на пароль установленный для БД ранее, admin@youdomain.input
и youdomain.input
на ваши значения, typepasshere
— придумайте пароль админа totum.
bin/totum install --pgdump=pg_dump --psql=psql -e -- ru multi totum admin@youdomain.input youdomain.input admin typepasshere totum localhost totum DB_PASS
Эта команда для для multi установки!:
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 :)
Эта команда для для no-multi установки!:
echo -e "* * * * * cd $HOME/totum-mit/ && bin/totum schema-crons\n*/10 * * * * cd $HOME/totum-mit/ && bin/totum clean-tmp-dir\n*/10 * * * * cd $HOME/totum-mit/ && bin/totum clean-schema-tmp-tables" | crontab -u totum -
Установим обработчик sendmail, вернувшись в root (потребуется ввести пароль рута):
su root
apt -y install exim4
Настроим exim4.
dpkg-reconfigure exim4-config
Далее в конфигураторе выберите вариант *internet site; mail is sent and received directly using SMTP*
.
Введите ваш DOMAIN.ZONE
в качестве name.
На шаге IP-adresses to *listen on for incoming SMTP connections*
введите 127.0.0.1
Остальные шаги оставьте по умолчанию нажимая enter.
Чтобы письма не валились в спам, в настройках домена пропишите TXT-SPF запись, заменив YOU_SERVER_IP
на ip вашего сервера.
TXT "v=spf1 ip4:YOU_SERVER_IP ~all"
Проверить наличие SPF-записи можно:
dig TXT DOMAIN.ZONE
Для проверки зайдите в totum, создайте в любом месте кнопку с кодом действия заменив EMAIL
на ваш email.
=: emailSend(to: "EMAIL"; title: "Тест Exim4"; body: "Тест Exim4")
Сохраните и выполните кнопку, если нет ошибок — ожидайте письмо. Если нет SPF, то скорее всего искать надо в Спаме!
Также его можно поискать в логах exim. Замените EMAIL на использованный при отправке email.
exigrep '=> .*EMAIL' /var/log/exim4/mainlog | grep '=>'
Ответом должна быть строка вида (например для gmail):
2021-02-06 16:18:39 1l8NTt-0005ie-Lm => TEST_EMAIL@gmail.com R=dnslookup T=remote_smtp H=gmail-smtp-in.l.google.com [173.194.222.27] X=TLS1.2:ECDHE_ECDSA_CHACHA20_POLY1305:256 CV=yes DN="C=US,ST=California,L=Mountain View,O=Google LLC,CN=mx.google.com" K C="250 2.0.0 OK r17si9575802lji.231 - gsmtp"
Установим 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
Проверяем получение сертификата в тестовом режиме (замените YOU_DOMAIL.ZONE
на ваш домен):
certbot certonly --dry-run -d YOU_DOMAIL.ZONE
Если тест проходит — получаем сертификат:
certbot certonly -d YOU_DOMAIL.ZONE
После получения можем проверить список доменов в сертификате:
cat /etc/letsencrypt/live/*/cert.pem | openssl x509 -text | grep -o 'DNS:[^,]*' | cut -f2 -d:
Подключаем сертификат в конфиг nginx (замените YOU_DOMAIL.ZONE
на ваш домен):
nano /etc/nginx/sites-available/YOU_DOMAIN.ZONE.conf
Заменяем 80 порт на 443 (вместо YOU_IP
у вас должен быть ip
вашего сервера):
listen YOU_IP:80;
—> listen YOU_IP:443 ssl;
Добавляем после include acme;
ssl_certificate /etc/letsencrypt/live/YOU_DOMAIN.ZONE/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/YOU_DOMAIN.ZONE/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/YOU_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