3.8 KiB
Деплой на боевой сервер (Linux VPS)
Выполняется один раз, вручную, на целевой машине (ruvdstest.danamir.site). После этого шага
CI/CD (.gitea/workflows/ci-cd.yml) берёт на себя все последующие обновления при push в master.
Все команды ниже выполняются на самой целевой машине (по SSH/консоли хостера) — не на машине разработки.
Реверс-прокси (nginx, TLS, домен) уже настроен отдельно и обслуживается не отсюда — этот документ
покрывает только сам стек, который должен подняться и слушать 127.0.0.1:8081.
1. Установить Docker
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
sudo usermod -aG docker $USER # затем перелогиниться, чтобы применилось
Проверить:
docker --version
docker compose version
2. Склонировать репозиторий
sudo mkdir -p /opt/ruvdstests
sudo chown $USER:$USER /opt/ruvdstests
git clone https://git.danamir.su/danamir/RuvdsTest.git /opt/ruvdstests
cd /opt/ruvdstests
3. Настроить .env с боевыми секретами
cp .env.example .env
# Сгенерировать длинный случайный JWT-секрет и подставить в .env:
sed -i "s|^JWT_SECRET=.*|JWT_SECRET=$(openssl rand -base64 48 | tr -d '\n')|" .env
# Сгенерировать пароль для Postgres:
sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -base64 24 | tr -d '\n')|" .env
# Публичный origin — на этом этапе это скорее формальность (клиент теперь
# ходит на /api того же origin, кросс-доменных запросов не будет), но
# выставить правильно не помешает. Подставить сюда тот адрес, по которому
# сайт реально открывается через ваш внешний реверс-прокси.
echo "CLIENT_ORIGIN=https://ruvdstest.danamir.site" >> .env
cat .env # свериться, что все три значения на месте
4. Поднять стек
docker compose up -d --build
docker compose ps # все три контейнера должны быть Up/healthy
Проверить изнутри машины, что всё работает (пока без TLS, напрямую на loopback-порт клиента):
curl -s http://127.0.0.1:8081/api/login -X POST \
-H "Content-Type: application/json" \
-d '{"Email":"teacher@example.com","Password":"teacher123"}'
# ожидается {"Ok":{"Token":"...", ...}}
5. Подключить в существующий реверс-прокси
Внешний nginx настраивается отдельно (не входит в этот репозиторий) — ему нужен один
proxy_pass http://127.0.0.1:8081; на весь сайт. Клиентский контейнер уже сам умеет
проксировать /api/* на сервер (см. src/Client/nginx.conf), поэтому отдельный location для
/api во внешнем nginx не нужен — один location / { proxy_pass ...; } покрывает всё.
6. Раннер CI/CD
См. docs/CI-CD.md — регистрируется на этой же машине, деплой-шаг пайплайна выполняет
docker compose up -d прямо здесь же (поверх уже поднятого в шаге 4 стека).