⟵ сюдатуда ⟶
  • Установка
  • Установка на Ubuntu
  • Требования к аппаратной части
  • Автоустановка на Ubuntu 20 с доменом и SSL-сертификатом!
  • Автоустановка на Ubuntu 20 без домена
  • Если вам все же нужно подключить домен и сертификат.
  • Конфигурация среды и установка Totum на Ubuntu 20 в ручном пошаговом режиме
  • Предварительные проверки
  • Установка тулов и php + создание пользователя linux
  • Настраиваем FPM
  • Настройка pm (опционально)
  • PostgreSQL
  • Nginx
  • Правила iptables
  • Устанавливаем Totum
  • Установка из консоли
  • Генерируем ключ шифрования
  • Установим кроны
  • Установка SSL сертификатов Let's Encrypt
  • Изменение timezone
  • Если вам необходимо заменить домен у работающей системы
  • Обновления
  • Установка PRO
  • Бэкапы
  • Консольная утилита bin/totum
  • Основы для пользователей
  • Интерфейс и компоновка
  • Таблицы и их параметры
  • Префильтр
  • Поля и их параметры
  • Синтаксис
  • Код, действия, форматирование
  • Реляционные взаимосвязи
  • Порядок расчета и единицы пересчета
  • Автозаполнение расчетных и временных
  • Дублирование строк и циклов
  • Сравнения
  • Функции
  • Отладка
  • Печать и CSV
  • API
  • Роли и пользователи
  • Нотификации
  • Действия по расписанию
  • Системные таблицы
  • [PRO] Деревья
  • [PRO] Анонимные таблицы
  • [PRO] Внешние формы
  • [PRO] Экспорт и импорт таблиц
  • [PRO] MeiliSearch
  • [PRO] Базы данных
  • [PRO] Настройка CSS
  • [PRO] Custom docs
  • [PRO] LDAP AD
  • [PRO] Версии файлов
  • [PRO] List-unsubscribe
  • [PRO] Динамические поля
  • [PRO] Only Office
  • [PRO] Auth Tokens
  • [PRO] 2FA
  • [PRO] Superlang
  • [PRO] Profiler
  • [PRO] Подключение функций
  • [SRV] Установка и подключение
  • [SRV] Экспорт, pdf, загрузка и предпросмотр
  • [SRV] XLSX/DOCX генераторы
  • Автоустановка на Ubuntu 20

    Требования к аппаратной части

    Требования по производительности зависят от конкретного решения, но общий принцип следующий: Totum потребляет мало оперативной памяти, но чувствителен к тактовой частоте процессора.

    Для большинства решений достаточно CPU с частотой 2.4 - 2.6 Ггц (2-4 core).

    Чем выше частота, тем быстрее для пользователя будет произведено вычисление. Количество ядер влияет только на комфорт совместной работы нескольких пользователей. Вычисление результата операции для пользователя всегда идет на одном ядре.

    Для емких по количеству данных решений — требуется донастройка PostgreSQL на производительность, для чего требуется и ядра процессора и оперативная память.

    Автоустановка на Ubuntu 20 с доменом и SSL-сертификатом!

    Установку без домена смотреть здесь

    Скрипт автоустановки предназначен ТОЛЬКО ДЛЯ ЧИСТЫХ ОБРАЗОВ!!!

    Если у вас уже установлено и сконфигурировано другое ПО (или другие версии Totum), то сервер придет в неработоспособное состояние без возможности отката назад!

    NetAngels referal link —>

    1. Разверните сервер;

    2. Делегируйте на него домен (необходимо дождаться, пока DNS вступят в силу);

    3. Откройте терминал под 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
    
    1. Следуйте подсказкам на экране.

    2. Откройте делегированный домен и авторизуйтесь под admin и указанным при установке паролем.


    Автоустановка на Ubuntu 20 без домена

    Это нужно если вы ставите внутри локальной сети и доступ к серверу будет по ip.

    Скрипт автоустановки предназначен ТОЛЬКО ДЛЯ ЧИСТЫХ ОБРАЗОВ!!! Если у вас установлено и сконфигурировано другое ПО, то оно станет неработоспособным!

    NetAngels referal link —>

    1. Разверните сервер;

    2. Откройте терминал под 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
    
    1. Следуйте подсказкам на экране.

    2. Откройте по ip и авторизуйтесь под admin и указанным при установке паролем.

    Если вам все же нужно подключить домен и сертификат.

    1. Делегируйте домен (дождитесь применения изменений в DNS).

    Откройте файл конфига Тотум и замените 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
    
    1. Установите Certbot и выпустите сертификат по этой инструкции.

    Конфигурация среды и установка Totum на Ubuntu 20 в ручном пошаговом режиме

    Это пошаговое описание того, что делает скрипт автоконфигурации в случае, когда вам нужно разобраться подробнее и выполнить какие-то части установки по-другому.

    Далее все команды указаны от 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
    

    Установка тулов и php + создание пользователя linux

    Обновляем реестр 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
    

    Настраиваем FPM

    Создаем пул 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
    

    Настройка pm (опционально)

    Статья на хабр про настройку воркеров-fpm

    • pm.max_children — максимальное количество дочерних процессов;

    • pm.start_servers — количество процессов при старте;

    • pm.min_spare_servers — минимальное количество процессов, ожидающих соединения (запросов для обработки);

    • pm.max_spare_servers — максимальное количество процессов, ожидающих соединения (запросов для обработки).

    Для того, чтобы корректно установить эти значения, необходимо учитывать:

    • сколько памяти в среднем потребляет дочерний процесс (используйте htop, отфильтруйте по php-fpm);

      • это колонка RES, единица измерения там Килобайты.
      • еще можно посмотреть MEM% и умножить общее количество памяти на выводимый там процентаж.
      • ~ память на один дочерний php-fpm процесс (в среднем) 30Мб
    • объем доступного ОЗУ (при помощи 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

    Устанавливаем 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

    Устанавливаем 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
    

    Правила iptables

    Иногда в образе системы у хостера 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

    Изменяем пользователя на 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
    
    Справочная информация по консольному установщику Totum
    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 :)
    

    Установка SSL сертификатов Let's Encrypt

    Установим 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.

    Изменение timezone

    Если сервер имеет базово неподходящую вам таймзону ее нужно поменять в двух местах — системе и 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
    

    Если вам необходимо заменить домен у работающей системы

    1. Делегируйте новый домен (дождитесь применения изменений в DNS).

    Откройте файл конфига Тотум и замените старый домен на новый.

    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
    
    1. Выпустите новый сертификат.

    Проверяем получение сертификата в тестовом режиме (замените 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;
    
    1. Перезапускаем nginx:
    service nginx reload