Установка

Установка Toutadmin

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

Размещено в Европе, ставить нечего: бесплатно до пяти сотрудников, и весь продукт с первого дня.

Загрузка открыта всем

Бесплатный тариф не заканчивается на SaaS: до пяти сотрудников вы точно так же можете поставить продукт у себя — свои файлы, своя база, свои резервные копии — ничего не платя. Тариф решает численность, а не место, где работает экземпляр. Свыше пяти сотрудников нужна подписка — работает ли экземпляр у нас или у вас.

Посмотреть тарифы

Какую ставить

Выбор зависит от хостинга, а не от ваших задач: обе редакции делают ровно одно и то же.

Редакция Node

Для сервера, которым вы управляете сами: одна машина, постоянно работающая служба, обратный прокси перед ней.

Node 22, компилятор C, локальный диск. Машины с одним ядром хватит на несколько десятков человек. Сервер MySQL поддерживается, если он у вас есть; иначе SQLite не требует ничего.

Редакция PHP

Для виртуального хостинга: папка, которую надо выложить, файл, который надо заполнить, и задание планировщика. Командная строка не нужна.

PHP 8.1 и расширение SQLite. Никаких зависимостей: ни Composer, ни менеджера пакетов. И расширение PDO MySQL, если вы предпочитаете сервер базы данных.

Выбор остаётся обратимым

У обеих редакций одна и та же схема базы и один формат паролей. Перейти с одной на другую — это скопировать файл базы и пять папок: никакого преобразования, и никому не придётся менять пароль.

SQLite или MySQL

И какая база данных

Второй выбор — и единственный, который трудно изменить. Он не зависит от редакции: обе принимают оба движка, и все четыре сочетания проходят одни и те же тесты.

SQLite

Файл на диске сервера. Ничего устанавливать, ничем управлять, ни за чем следить — а экземпляр переезжает копированием папки.

Это значение по умолчанию и верный ответ в большинстве случаев: один сервер приложения и локальный диск, который остаётся от развёртывания к развёртыванию.

MySQL или MariaDB

Сервер базы данных, на этой машине или где-то в сети. Данные живут там, где ваша ИТ-служба уже их сохраняет, реплицирует и наблюдает.

Брать по трём причинам: несколько серверов приложения на одной базе, внутреннее правило, которое этого требует, или эфемерный диск приложения — контейнер, пересоздаваемый при каждом развёртывании.

MySQL — не выбор ради скорости

Это самое распространённое убеждение, и оно ложно: SQLite живёт внутри процесса, MySQL — за сокетом. По нашим измерениям на двух тысячах операций SQLite быстрее в два с половиной — сто пятьдесят раз, смотря по операции, и выдерживает сравнение даже при восьми одновременно пишущих. MySQL выбирают из-за того, где живут данные и кто ими управляет, а не ради времени отклика.

Подробности, с цифрами

За пять минут

Быстрая установка

Ровно столько, чтобы открыть помощник. Подробности идут сразу следом, шаг за шагом, с тем, что делает каждая команда и зачем.

Редакция Node

Три команды на сервере, которым вы управляете. Последняя создаёт установочный жетон и запускает экземпляр.

git clone <votre-dépôt> toutadmin
cd toutadmin && npm ci --omit=dev
INSTALL_TOKEN=$(openssl rand -hex 16) \
NODE_ENV=production node src/server.js

Редакция PHP

Никакой командной строки: папку выложить, файл скопировать, право записи открыть.

# 1. déposer le dossier (racine web → public/)
# 2. cp config.sample.php config.php
# 3. chmod 770 data/
# 4. ouvrir https://votre-domaine/install

Дальше всё делает помощник

Экземпляр запускается пустым и замыкается на себе: пока он не установлен, любой адрес ведёт к помощнику, а после установки помощник исчезает окончательно.

  1. 1 ЯзыкЯзык экземпляра, один из шестнадцати. Позже меняется, и каждый сохраняет свой.
  2. 2 ПредпосылкиПомощник проверяет, на чём он стоит: версия, права записи, база, папки. Чего не хватает — названо, а не угадано.
  3. 3 База данныхSQLite в файле, который ничего не требует, или MySQL / MariaDB, если он у вас есть. Мастер пробует соединение прежде, чем на него положиться.
  4. 4 ОрганизацияНазвание предприятия и годовая норма отпуска. Два ответа, изменяемые потом.
  5. 5 АдминистраторПервая учётная запись. Не меньше двенадцати знаков: это единственная запись, которая может создавать другие.
  6. 6 УстановкаСводка, затем установка в четыре объявляемых на экране этапа. Мастер закрывается окончательно.
https://votre-domaine/install

Поставьте установочный жетон прежде, чем открыть порт

Между первым запуском и вашим приходом в помощник учётную запись управления создал бы тот, кто успел первым. INSTALL_TOKEN закрывает это окно: без него помощник не открывается.

Помощник установки
Помощник установки Помощник установки
Редакция Node

На своём сервере, в четыре шага

  1. Получить и установить

    npm ci, а не npm install: он ставит ровно то, что описано в файле блокировки. На сервере уехавшая версия — это сбой, который никто не понимает.

    git clone <votre-dépôt> /var/www/toutadmin
    cd /var/www/toutadmin
    npm ci --omit=dev
  2. Настроить

    Всё задаётся переменными окружения, и ни одна не обязательна. Задайте INSTALL_TOKEN до того, как откроете порт: между первым запуском и вашим приходом в мастер учётную запись администратора создал бы тот, кто пришёл первым.

    cp .env.example .env
    # PORT, NODE_ENV=production, INSTALL_TOKEN…
  3. Передать системе

    Запущенный вручную, продукт остановится, как только вы закроете терминал. Служба перезапускается сама и имеет право писать только в свою папку данных.

    sudo systemctl enable --now toutadmin
    journalctl -u toutadmin -f
  4. Зашифровать соединение

    Никогда не выставляйте порт приложения прямо в интернет. За прокси экземпляр сам выставляет заголовки безопасности — в том числе HSTS, и только поверх уже зашифрованного соединения.

    sudo certbot --nginx -d intranet.exemple.fr
Редакция PHP

На виртуальном хостинге, в четыре шага

  1. Выложить файлы

    Здесь и ошибаются. Если сервер отдаёт всю папку, базу сможет скачать кто угодно — вместе с учётными записями, хешами паролей и сейфом.

    # déposer le dossier ; la racine web pointe sur public/, pas sur le dossier
  2. Записать конфигурацию

    Конфигурацию пишет сам мастер, и делает это последним: пока файла нет, прерванная установка ничего после себя не оставила. Он кладёт туда ключ, принадлежащий экземпляру: тот скрепляет подписи и шифрует секреты в базе — сохраните его вместе с остальным.

    cp config.sample.php config.php
    php -r "echo bin2hex(random_bytes(32));"   # session_secret
  3. Открыть права на запись

    SQLite пишет файлы рядом с базой: писать надо уметь в папку, а не только в файл. Остальное может остаться только для чтения.

    chmod 770 data/     # le dossier, pas seulement la base
  4. Поставить обход в расписание

    Сайт на PHP живёт только во время запроса. Задание планировщика закрывает истёкшие договоры, выставляет повторяющиеся счета, отправляет веб-перехватчики и создаёт резервные копии.

    * * * * * /usr/bin/php /var/www/toutadmin/tools/cron.php

Прежде чем открыть коллегам

Копия, которая уезжает наружу

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

Пробная учётная запись без прав

Войдите под ней и походите по экранам. Только так вы увидите продукт таким, каким его увидят коллеги, — и именно эту проверку пропускают чаще всего.

Два администратора, а не один

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

Полное руководство — в документации

Эта страница даёт канву. Документация даёт всё остальное: настройку фронтального сервера, точные права, сертификаты, восстановление, обновление, разбор неполадок по симптому — и оба руководства целиком, по одному на редакцию.

Начните бесплатно, смените тариф, когда вырастете

Первые пять сотрудников бесплатны, всегда. Сверх того — 5 € за сотрудника в месяц. Чтобы попробовать, карта не нужна.