⟵ сюдатуда ⟶
  • Установка
  • Установка на NetAngels.ru
  • Установка на Ubuntu
  • Автоустановка на Ubuntu 20 с доменом и SSL-сертификатом!
  • Автоустановка на Ubuntu 20 без домена
  • Если вам все-же нужно подключить домен и сертификат.
  • Конфигурация среды и установка Totum на Ubuntu 20 в ручном пошаговом режиме
  • Предварительные проверки
  • Установка тулов и php + создание пользователя linux
  • Настраиваем FPM
  • Настройка pm (опционально)
  • PostgreSQL
  • Nginx
  • Правила iptables
  • Устанавливаем Totum
  • Установка из консоли
  • Установим кроны
  • Установка EXIM для отправки email
  • Установка SSL сертификатов Let's Encrypt
  • Изменение timezone
  • Установка с Docker
  • Обновления
  • Бэкапы
  • Multi/no-multi
  • Консольная утилита bin/totum
  • Основы для пользователей
  • Интерфейс и компоновка
  • Таблицы и их параметры
  • Префильтр
  • Поля и их параметры
  • Синтаксис
  • Код, действия, форматирование
  • Реляционные взаимосвязи
  • Порядок расчета и единицы пересчета
  • Сравнения
  • Функции
  • Отладка
  • Автозаполнение расчетных и временных
  • Дублирование строк и циклов
  • Деревья
  • Печать и CSV
  • API
  • Роли и пользователи
  • Нотификации
  • Действия по расписанию
  • Анонимные таблицы
  • Внешние формы
  • Экспорт и импорт таблиц
  • Системные таблицы
  • Подключение функций
  • Дополнительные интерфейсы
  • Структура файлов
  • Структура базы
  • Автоустановка на Ubuntu 20

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

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

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

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

    NetAngels referal link —>

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

    2. Делегируйте на него домен;

    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.

    SSL сертификат не выпускается! Для отправки email вам потребуется сторонний SMTP-сервер.

    Если потом вы решите на эту базу сделать домен и сертифкат — вам потребуется скилл в Linux!

    ОБРАЩЕНИЯ В ТЕПОДДЕРЖКУ ПО ПОДКЛЮЧЕНИЮ НА ТАКУЮ УСТАНОВКУ ДОМЕНА, EXIM И SSL НЕ ОБРАБАТЫВАЮТСЯ!

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

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

    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 и указанным при установке паролем.

    3. Пропишите настройки SMTP в /home/totum/totum-mit/Conf.php

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

    1. Делегируйте домен.

    Откройте файл конфига Тотум и замените 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
    
    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
    

    Устанавливаем необходимые модули 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
    

    Проверяем, что 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 — замените 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 ~* \.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
    

    Правила 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
    

    С этого момента можно открыть 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 -
    

    Установка EXIM для отправки email

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

    exim cfg

    Чтобы письма не валились в спам, в настройках домена пропишите 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"
    

    Установка 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
    

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

    Изменение 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