Инструкция: деплой Botsad Landing

Как на famedev-сервере поднят сайт cfu_botsad_landing из GitFlic, какие домены нужны, где лежат файлы, как проверить и как обновлять деплой.

Домен: botsad.fameedu.ru Репозиторий: git@gitflic.ru:cfu_cai/cfu_botsad_landing.git Путь: /srv/projects/cfu_botsad_landing Docker + Coolify Traefik
Сайтhttps://botsad.fameedu.ru/
Публичный Astro-фронт
Админкаhttps://botsad.fameedu.ru/admin/
React/Vite админ-панель
API health/api/health
FastAPI через nginx proxy

Содержание

1. DNS и домены

Для текущей схемы достаточно одного домена:

Домен должен смотреть A-записью на сервер:

botsad.fameedu.ru A 104.143.201.246

Проверка:

getent hosts botsad.fameedu.ru
dig +short botsad.fameedu.ru A

2. Структура деплоя

Код лежит здесь:

/srv/projects/cfu_botsad_landing

Основные файлы деплоя:

Контейнеры:

cfu_botsad_landing-frontend
cfu_botsad_landing-api

Frontend подключён к сетям coolify и demo; API — к demo.

3. Первый деплой с нуля

  1. Клонировать репозиторий:
cd /srv/projects
GIT_SSH_COMMAND='ssh -i ~/.ssh/gitflic_coolify -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new' \
  git clone git@gitflic.ru:cfu_cai/cfu_botsad_landing.git cfu_botsad_landing
  1. Включить pnpm через corepack и собрать статические артефакты:
cd /srv/projects/cfu_botsad_landing
corepack enable --install-directory ~/.local/bin
export PATH="$HOME/.local/bin:$PATH"
pnpm install --frozen-lockfile
pnpm build
  1. Убедиться, что есть файлы docker-compose.demo.yml, .demo.yml, backend/Dockerfile.demo.
  2. Поднять контейнеры:
docker compose -p cfu_botsad_landing -f docker-compose.demo.yml build
docker compose -p cfu_botsad_landing -f docker-compose.demo.yml up -d --remove-orphans

4. Обновление деплоя

Для обычного обновления кода:

cd /srv/projects/cfu_botsad_landing
git pull
export PATH="$HOME/.local/bin:$PATH"
pnpm install --frozen-lockfile
pnpm build
docker compose -p cfu_botsad_landing -f docker-compose.demo.yml build api
docker compose -p cfu_botsad_landing -f docker-compose.demo.yml up -d --remove-orphans

Если менялся только фронт/админка и API не трогали, обычно достаточно:

pnpm build
docker compose -p cfu_botsad_landing -f docker-compose.demo.yml up -d --force-recreate frontend

5. Проверка после деплоя

docker ps --filter 'name=cfu_botsad_landing' --format 'table {{.Names}}\t{{.Status}}\t{{.Networks}}'

curl --noproxy '*' -sS -L -D - https://botsad.fameedu.ru/ -o /tmp/botsad_home
curl --noproxy '*' -sS -L -D - https://botsad.fameedu.ru/admin/ -o /tmp/botsad_admin
curl --noproxy '*' -sS -L -D - https://botsad.fameedu.ru/api/health
curl --noproxy '*' -sS -L -D - https://botsad.fameedu.ru/api/public/site -o /tmp/botsad_site

Ожидаемый результат:

6. Важные нюансы

Главный нюанс: не использовать generic upstream api в nginx, если frontend висит сразу в сетях coolify и demo. Docker DNS может периодически резолвить чужой сервис с таким alias.

Правильный upstream в nginx.conf:

location /api/ {
    proxy_pass http://cfu_botsad_landing-api:8000/api/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

Traefik/Coolify labels должны явно указывать service:

traefik.http.routers.botsad-https.service=botsad
traefik.http.services.botsad.loadbalancer.server.port=80

Если API не стартует и в логах ошибка про /scripts/garden-objects.json, значит API собран обычным backend/Dockerfile, а не backend/Dockerfile.demo.

docker logs --tail 80 cfu_botsad_landing-api