Как на famedev-сервере поднят сайт cfu_botsad_landing из GitFlic, какие домены нужны, где лежат файлы, как проверить и как обновлять деплой.
Для текущей схемы достаточно одного домена:
https://botsad.fameedu.ru/ — публичный сайтhttps://botsad.fameedu.ru/admin/ — админкаhttps://botsad.fameedu.ru/api/* — APIДомен должен смотреть A-записью на сервер:
botsad.fameedu.ru A 104.143.201.246
Проверка:
getent hosts botsad.fameedu.ru
dig +short botsad.fameedu.ru A
Код лежит здесь:
/srv/projects/cfu_botsad_landing
Основные файлы деплоя:
docker-compose.demo.yml — compose для famedev/demo-сервера..demo.yml — описание проекта для democtl, если понадобится.nginx.conf — nginx отдаёт сайт, админку и проксирует API.backend/Dockerfile.demo — Dockerfile API с копированием scripts/garden-objects.json.Контейнеры:
cfu_botsad_landing-frontend
cfu_botsad_landing-api
Frontend подключён к сетям coolify и demo; API — к demo.
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
cd /srv/projects/cfu_botsad_landing
corepack enable --install-directory ~/.local/bin
export PATH="$HOME/.local/bin:$PATH"
pnpm install --frozen-lockfile
pnpm build
docker-compose.demo.yml, .demo.yml, backend/Dockerfile.demo.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
Для обычного обновления кода:
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
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
Ожидаемый результат:
//admin//api/health и JSON {"status":"ok"}/api/public/siteapi в 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