Первый production release: runbook (почти turnkey)¶
Цель: после подготовки вам останется только:
1) вписать IP/домен/VPN CIDR в env и команды,
2) загрузить данные (STL и наборы для продаж),
3) запустить готовые скрипты.
0) Уже подготовлено в репозитории¶
docker-compose.prod.yml— production stack сервера A.docker-compose.bot.yml— Telegram bot stack сервера B.docs/operations/nginx-prod-template.conf— nginx c bot gateway (8088) и source allow-list.docs/operations/firewall-ufw-server-a.shdocs/operations/firewall-ufw-server-b.shdocs/operations/systemd/konstructorium-a.servicedocs/operations/systemd/konstructorium-bot.servicescripts/release/preflight-prod-check.shscripts/release/server-a-first-release.shscripts/release/server-b-first-release.shscripts/release/sync-data-to-server-b.sh.env.prod.exampletelegram_bot_service/.env.prod.example
1) Какие endpoint должны быть доступны боту¶
Снаружи интернета эти endpoint не нужны для пользователей. Доступ бота дается только с доверенного source CIDR/IP к Server A:8088:
/api/orders/.../api/models/.../api/profiles/telegram/.../media/...(parts xlsx)
Именно это заложено в nginx-prod-template.conf.
2) Минимум ручных параметров (вписать один раз)¶
На Server A¶
PUBLIC_DOMAIN(например,shop.example.com)BOT_SOURCE_CIDR(например,203.0.113.55/32для одного публичного IP бота)- секреты в
.env
На Server B¶
SERVER_A_PUBLIC_IP(например,203.0.113.10)- секреты бота в
telegram_bot_service/.env
3) Копипаста: Server A¶
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release git ufw nginx
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker "$USER"
newgrp docker
sudo mkdir -p /opt/konstructorium
sudo chown -R "$USER":"$USER" /opt/konstructorium
cd /opt/konstructorium
git clone <YOUR_REPO_URL> .
cp .env.prod.example .env
cp telegram_bot_service/.env.prod.example telegram_bot_service/.env
Заполнить .env:
nano /opt/konstructorium/.env
Старт и настройка:
cd /opt/konstructorium
bash scripts/release/preflight-prod-check.sh
BOT_SOURCE_CIDR=203.0.113.55/32 USE_SSL=0 SSH_PORT=22 bash scripts/release/server-a-first-release.sh
Когда появится домен и сертификат, переключитесь на SSL:
cd /opt/konstructorium
DOMAIN=shop.example.com BOT_SOURCE_CIDR=203.0.113.55/32 USE_SSL=1 SSH_PORT=22 bash scripts/release/server-a-first-release.sh
4) Копипаста: Server B¶
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release git ufw
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker "$USER"
newgrp docker
sudo mkdir -p /opt/konstructorium
sudo chown -R "$USER":"$USER" /opt/konstructorium
cd /opt/konstructorium
git clone <YOUR_REPO_URL> .
cp telegram_bot_service/.env.prod.example telegram_bot_service/.env
Заполнить telegram_bot_service/.env (главное — SERVER_A_PUBLIC_IP в URL):
nano /opt/konstructorium/telegram_bot_service/.env
Старт:
cd /opt/konstructorium
bash scripts/release/server-b-first-release.sh
5) Загрузка данных (то, что вы просили)¶
Нужно положить:
- STL:
/opt/konstructorium/data/details/stl_files - наборы и исходные файлы:
/opt/konstructorium/data/...
На Server B желательно держать синхронную копию data/, потому что бот формирует ZIP локально.
Синхронизация с Server A на Server B:
cd /opt/konstructorium
DEST_HOST=bot.example.com SSH_USER=ubuntu SSH_PORT=22 bash scripts/release/sync-data-to-server-b.sh
6) Post-release smoke¶
curl -I https://shop.example.com
curl -i http://127.0.0.1:8001/api/health/
curl -i http://127.0.0.1:8002/api/health/
curl -i http://127.0.0.1:8003/api/models/
Плюс ручной E2E:
- checkout на сайте,
/startв Telegram,- оплата,
- проверка ZIP в Telegram и в
order_service/media.