uVersion
Русский
Скачать →

Wiki

Настройка и миграция сервера

Редактирование config.toml, перенос каталога данных, использование базы данных PostgreSQL в другом месте, резервное копирование и восстановление.

Всё настраивается в одном файле, /etc/uversion/config.toml. Установщик создаёт его; затем вы можете свободно его редактировать.

Файл конфигурации

Отредактируйте, затем перезапустите: сервер читает свою конфигурацию только при запуске.

sudo nano /etc/uversion/config.toml
sudo systemctl restart uversion-server

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

# EXTRAIT PARTIEL : le fichier contient d'autres sections.
# N'ecrasez jamais votre fichier avec ce bloc, editez les lignes concernees.

[server]
bind_address = "0.0.0.0"
port = 8080

[database]
# Ou toute base PostgreSQL accessible : autre disque, autre machine, service manage.
url = "postgres://uversion:MOTDEPASSE@127.0.0.1:5432/uversion"

[security]
# Le secret qui signe les sessions. Obligatoire et SANS valeur par defaut :
# absent ou plus court que 32 caracteres, le serveur refuse de demarrer.
# L'installateur en genere un. Le remplacer deconnecte tout le monde une fois.
jwt_secret = "..."

[storage]
# Le contenu des fichiers (les chunks, morceaux de fichiers). C'est ce qui grossit.
path = "/var/lib/uversion/data/chunks"

[tls]
disabled = false
https_port = 8443

[licence]
key = "..."
Права на файл Он содержит лицензионный ключ, секрет, которым подписываются сессии, и пароль базы данных. У него режим 0640 root:uversion: сохраните его таким.

Где живут данные

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

ЧтоГде
Содержимое файлов (чанки, куски файлов: именно это занимает место)/var/lib/uversion/data/chunks
TLS-сертификат, отпечаток сервера/var/lib/uversion/data/tls
Идентичность сервера, якорь лицензии/var/lib/uversion/server-id, last-validated-at
Метаданные (файлы, ревизии, пользователи, блокировки, права, задачи)PostgreSQL: /var/lib/postgresql/16/main
Конфигурация: лицензионный ключ, секрет подписи сессий, пароль базы данных/etc/uversion/config.toml, /etc/uversion/licence-key
База данных не следует за каталогом данных Изменение каталога данных перемещает чанки и сертификаты, но не базу данных. А база данных ссылается на чанки по отпечатку: если вы перенесёте одно без другого, сервер станет искать чанки, которых нет. Переносите оба, либо ни одного.

Перенос каталога данных

Это обычный случай: содержимое растёт, системный раздел мал. База же данных остаётся маленькой (она растёт с числом ревизий, а не с размером файлов).

1. Остановить службу

sudo systemctl stop uversion-server

2. Скопировать каталог

Именно -a сохраняет права и владельцев. Копирование, а не перемещение, оставляет вам возможность отката вплоть до финальной проверки.

sudo mkdir -p /srv/uversion
sudo rsync -a /var/lib/uversion/ /srv/uversion/
sudo chown -R uversion:uversion /srv/uversion
sudo chmod 0750 /srv/uversion

3. Указать конфигурации новый путь

Этот шаг обязателен и идёт перед следующим: см. врезку «Порядок важен» ниже.

sudo sed -i 's#/var/lib/uversion#/srv/uversion#g' /etc/uversion/config.toml

4. Сообщить новый путь установщику

Ответьте новый путь на вопрос «Data directory». Установщик перезаписывает systemd-юнит на основе этого ответа, затем перезапускает службу.

sudo dpkg-reconfigure uversion-server
#   Data directory : /srv/uversion

5. Убедиться, что юнит действительно указывает туда

systemctl cat uversion-server | grep -E 'WorkingDirectory|ReadWritePaths'
systemctl status uversion-server
Действуйте через dpkg-reconfigure, не пишите systemd-юнит сами Установщик сам пишет /etc/systemd/system/uversion-server.service.d/10-data-dir.conf и переписывает его при каждой настройке на основе данного вами ответа. Положенный вручную файл переживает всё до следующего обновления, включая то, что запускает кнопка Update now: тогда юнит снова указывает на старую папку, пока конфигурация пишет в новую. Усиленная служба (ProtectSystem=strict) запускается нормально и ломается при первой же отправке файла, недели спустя.
Порядок важен: сначала отредактируйте config.toml Одного dpkg-reconfigure недостаточно. Установщик исправляет [storage].path только если найденная там папка больше не существует: всё ещё присутствующий пользовательский путь считается осознанным выбором и остаётся как есть. Поскольку вы скопировали, а не переместили, старая папка ещё существует, и потому шаг 2 выше обязателен. Проверив всё и убедившись, что сервер работает по новому пути, вы можете удалить старую папку.
Никогда под /home и /root Служба работает от усиленного системного пользователя (ProtectHome=true, а домашний каталог непроходим для системной учётной записи). Путь под /home или /root мешает запуску (226/NAMESPACE или 200/CHDIR). Выберите системный путь: /srv, /opt или смонтированный диск.

Разместить базу данных в другом месте

Установщик создаёт локальную базу данных, но ничто вас к ней не привязывает. Направьте url на любую доступную базу данных PostgreSQL: другой диск, смонтированный как отдельный кластер, другую машину или управляемый сервис.

[database]
url = "postgres://UTILISATEUR:MOTDEPASSE@HOTE:5432/BASE"

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

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

База данных на диске данных

Предыдущий раздел предполагает базу данных, которой вы управляете в другом месте. Если ваша цель иная: чтобы одного уцелевшего диска хватило для восстановления сервера, когда машина умирает, тогда установщик может разместить базу данных внутри каталога данных, в виде выделенного кластера PostgreSQL: отдельного экземпляра PostgreSQL, со своей папкой и своим портом, независимого от системного.

Вопрос задаётся при установке. Чтобы включить это на уже работающем сервере Debian:

sudo dpkg-reconfigure uversion-server
#   Data directory                     : /srv/uversion
#   Put the database on the data directory too?  Yes

В Windows

То же обещание, иная механика. В Windows нет именованных кластеров: установщик перемещает сам экземпляр PostgreSQL в каталог данных, переориентируя службу. Этот выбор делается в момент установки, добавлением -DbOnDataDir к параметрам скрипта. Он не предлагается вопросом: скрипт спрашивает лишь код активации, поэтому, если вы не передадите этот параметр, база данных останется в своём расположении по умолчанию. Точную форму команды см. в Установка в Windows, учитывая, что однострочная команда не может принять ни одного параметра.

# PowerShell en administrateur, installation en ligne de commande
& ([scriptblock]::Create((iwr https://uversion.io/downloads/server/install.ps1 -UseBasicParsing).Content)) `
    -LicenceKey "UV-XXXX-XXXX-XXXX" -DataDir "D:\uVersion" -DbOnDataDir

# verifier ensuite ou pointe le service PostgreSQL
(Get-CimInstance Win32_Service -Filter "Name='postgresql-x64-16'").PathName

Перенос отклоняется, с выводом причины, если экземпляр размещает другие базы данных, кроме базы uVersion, или если его каталог не самодостаточен: наличие табличного пространства, перемещённый через соединение (junction) pg_wal или абсолютный путь, записанный в postgresql.conf. Ничего никогда не удаляется: установщик копирует, проверяет, запускает службу на новой копии и только затем переименовывает старый каталог.

Два отличия от Linux Windows не умеет заставлять службу ждать диск: эквивалента RequiresMountsFor не существует. Опоздавший внешний диск поэтому подхватывается действиями восстановления службы, а не зависимостью. И PostgreSQL в Windows не проверяет никаких прав на своём каталоге: ограничивает их установщик, страховки на стороне сервера нет.

Тогда диск содержит всё:

/srv/uversion/
├── data/chunks       contenu des fichiers
├── data/tls          certificat, empreinte
├── pgdata/16         LA BASE (cluster PostgreSQL dedie)
└── recovery/         procedure + fichiers necessaires a la reprise
    ├── RESTORE.md
    ├── pgconf/       postgresql.conf, pg_hba.conf, pg_ident.conf
    ├── etc/          copie de config.toml et du mot de passe
    └── cluster.env

Кластер получает свой собственный порт, назначаемый автоматически (5433, если он свободен), и config.toml обновляется, чтобы указывать на него. Системный кластер не затрагивается: он может продолжать размещать другие базы данных.

Две оговорки, которые стоит знать, прежде чем сказать «да» Каталог данных PostgreSQL открывается только той мажорной версией, что его создала: восстановление через три года может потребовать явной установки PostgreSQL 16. И диск теперь несёт лицензионный ключ, секрет, которым подписываются сессии, и пароль базы данных, в каталоге, доступном только для root: обращайтесь с этим диском как с учётными данными.
База данных уже заполнена: установщик отказывается её переносить Если ваш сервер уже работает с данными, включение опции ничего не переносит: переезд, прерванный посреди обновления пакета, был бы хуже, чем отсутствие переезда вовсе. Установщик оставляет вас в текущем состоянии и печатает ручную процедуру (остановка, pg_dump, создание кластера, восстановление, обновление url).

Восстановить сервер на новой машине

Диск не содержит программ: приготовьте PostgreSQL и пакет uVersion, копия которых, хранимая рядом с диском, избавит от неприятного сюрприза в нужный день.

# sur la machine neuve
sudo apt install postgresql-16
# montez le disque, par exemple sur /srv/uversion
sudo apt install ./uversion-server_*.deb
#   dossier de donnees : le point de montage du disque
#   base sur le dossier de donnees : oui

Установщик находит базу данных на диске, возвращает на место конфигурационные файлы PostgreSQL (которые pg_createcluster вынес из каталога, на системный диск), регистрирует кластер, исправляет владельцев, затем заново выравнивает порт и путь к чанкам в config.toml. Если диск монтируется в иной точке монтирования, чем прежде, просто укажите новый путь.

Полная процедура, включая вариант без переустановки, записана на самом диске: recovery/RESTORE.md.

Резервное копирование и восстановление

Полная резервная копия это три элемента: экспорт базы данных (dump), каталог данных и каталог конфигурации.

Сделать резервную копию базы данных

Метаданные: файлы, ревизии, пользователи, блокировки.

sudo -u postgres pg_dump uversion > uversion-$(date +%F).sql

Сделать резервную копию каталога данных

Содержимое файлов, то есть то, что занимает место.

sudo tar -C /var/lib/uversion -czf uversion-data-$(date +%F).tar.gz .

Сделать резервную копию конфигурации

Лицензионный ключ, секрет подписи сессий, пароль базы данных. Она не живёт в каталоге данных.

sudo tar -C /etc -czf uversion-etc-$(date +%F).tar.gz uversion
Не забудьте /etc/uversion Это третий элемент, и его легче всего забыть: он не живёт в каталоге данных. /etc/uversion/config.toml несёт лицензионный ключ, секрет, которым подписываются сессии, и пароль базы данных; /etc/uversion/licence-key несёт саму лицензию. Без них восстановление на новой машине стартует с новым секретом, и вся команда отключается разом, и приходится заново запрашивать лицензию: код активации, полученный при регистрации, одноразовый и уже израсходован, повторно используется только лицензионный ключ, который он породил.

Чтобы восстановить на новой машине: установите пакет, затем верните три элемента на место, в этом порядке.

1. Восстановить базу данных

sudo -u postgres createdb -O uversion uversion      # seulement si elle n'existe pas
sudo -u postgres psql uversion < sauvegarde.sql

2. Восстановить данные

Вернуть чанки, с правильными правами:

sudo rsync -a /mnt/backup/uversion/ /var/lib/uversion/
sudo chown -R uversion:uversion /var/lib/uversion
sudo chmod 0750 /var/lib/uversion

3. Перенести две строки конфигурации

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

# N'ECRASEZ PAS le fichier neuf : ouvrez l'ancien a cote et recopiez-en
# deux lignes, et deux seulement.
#   [security] jwt_secret  -> sinon toute l'equipe est deconnectee
#   [licence]  key         -> sinon il faut redemander une licence
# Gardez le [database] url que l'installateur vient d'ecrire : il porte le
# mot de passe qu'il a lui-meme redefini.
sudo nano /etc/uversion/config.toml

4. Перезапустить

sudo systemctl restart uversion-server
Установка поверх существующей базы данных Установщик ничего не разрушает: если он уже находит базу данных uversion, он повторно использует её как есть и лишь сбрасывает пароль роли. Поэтому вы можете сначала восстановить свой dump, а установить потом.

Перенос кластера PostgreSQL

Требуется редко: база данных мала. Если вы настаиваете, это стандартная операция PostgreSQL, а не то, чем управляет установщик uVersion. Внимание: этот кластер (системный экземпляр PostgreSQL, со своей папкой и своим портом) может размещать другие базы данных, кроме базы uVersion.

sudo systemctl stop uversion-server
sudo pg_ctlcluster 16 main stop

sudo mkdir -p /srv/pgdata
sudo rsync -a /var/lib/postgresql/16/main/ /srv/pgdata/16/main/
sudo chown -R postgres:postgres /srv/pgdata

sudo sed -i "s#^data_directory =.*#data_directory = '/srv/pgdata/16/main'#" \
  /etc/postgresql/16/main/postgresql.conf

sudo pg_ctlcluster 16 main start
sudo systemctl start uversion-server

Затем проверьте с помощью pg_lsclusters, что кластер в сети по новому пути.