Эта подготовка общая для Source, Archive и Registry. Нужен новый VPS с Ubuntu 24.04 LTS, x86_64 (linux/amd64), публичным IPv4 и доступом root из панели хостинга. Для двухсерверного размещения выполните подготовку на обоих VPS.
Замените 203.0.113.10 своим IP, example.com своим доменом, а example_project — техническим именем своего проекта. Путь постоянного каталога должен совпадать с Runtime directory в вашем профиле Deployment environments.
1. Подключитесь к новому серверу
На своём компьютере:
ssh root@203.0.113.10
При первом подключении SSH попросит подтвердить новый сервер. После входа команды этого раздела выполняются на VPS под root. Проверьте систему:
cat /etc/os-release
uname -m
Нужны Ubuntu 24.04 и x86_64. Оставьте этот терминал открытым до завершения подготовки.
2. Установите Docker и инструменты
На новом VPS под root:
apt-get update
apt-get install -y ca-certificates curl jq util-linux coreutils tar openssh-client python3 sudo git nano
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
cat > /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: noble
Components: stable
Architectures: amd64
Signed-By: /etc/apt/keyrings/docker.asc
EOF
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker
docker version
docker compose version
docker buildx version
Docker должен отвечать без ошибки подключения к daemon. Нужны Compose v2, Buildx, Docker client и daemon с API 1.49 или новее. Это показывает docker version. Если сервер уже используется и Docker установлен, сначала проверьте его версию и совместимость пакетов.
Go, Node и сам Admingen на VPS не нужны: сборка Source использует Docker, а Archive/Registry получают уже собранное приложение.
3. Создайте пользователя и каталог данных
На VPS под root:
adduser --disabled-password --gecos "" deploy
usermod -aG docker deploy
install -d -o deploy -g deploy -m 700 /home/deploy/.ssh
install -d -o deploy -g deploy -m 700 /srv/admingen/example_project/production
Команды создания рассчитаны на нового пользователя. Если deploy уже существует, достаточно проверить его группу docker и права на каталог.
/srv/admingen/example_project/production — постоянный каталог БД, файлов и состояния. Пользователь deploy должен владеть им и иметь право записи. Исходники позже будут находиться отдельно, например в /home/deploy/projects/example-project. Не используйте символические ссылки в пути каталога данных.
Группа docker даёт привилегированный доступ к серверу. Выпуском должен управлять только доверенный пользователь. Администрирование ОС продолжайте из root-терминала: парольный sudo для deploy здесь не настроен.
4. Откройте сеть
В панели хостинга разрешите TCP 80 и 443 для приложения, а SSH — со своего компьютера. Проверьте также уже существующий firewall сервера. Порты 80/443 должны быть свободны: их займёт Nginx. PostgreSQL в интернет не открывайте. Учтите, что публикация портов Docker может обходить обычные правила UFW.
Серверу нужен исходящий интернет для Docker-образов и выпуска сертификатов. Для source нужны также зависимости сборки. При двух серверах frontend должен обращаться к API по HTTPS.
5. Направьте домены на VPS
В DNS-панели домена создайте записи:
| Тип | Имя | Адрес |
|---|---|---|
| A | admin | IPv4 вашего VPS |
| A | api | Тот же IPv4 |
Для split admin направьте на frontend-VPS, api — на backend-VPS. Если используете Cloudflare: DNS → Records → Add record, Proxy status DNS only (серое облако), TTL Auto. У домена должны быть настроены nameservers этой DNS-панели.
Обновите конфликтующие A/CNAME, а не создавайте второй адрес. Если IPv6 не настроен, уберите старые AAAA только у этих двух имён. Другие записи домена не меняйте.
На своём компьютере проверьте ответы:
dig +short A admin.example.com
dig +short A api.example.com
dig +short AAAA admin.example.com
dig +short AAAA api.example.com
A должны вернуть нужные IPv4; при отсутствии IPv6 ответы AAAA должны быть пустыми. Дождитесь обновления DNS. При будущем provision Certbot выпустит HTTPS-сертификаты: для этого уже должны работать DNS и входящий порт 80. До развёртывания приложение в браузере не откроется. Корневой домен example.com эти шаги не публикуют.
Продолжайте выбранную инструкцию: Source, Archive или Registry.