81 lines
3.6 KiB
Markdown
81 lines
3.6 KiB
Markdown
# Монитор заявок - CleverParking
|
||
|
||
Node/Express приложение со встроенным фронтендом и SQLite. Проект подготовлен для:
|
||
|
||
- локального запуска через Docker Compose;
|
||
- автоматической сборки Docker-образа в Woodpecker;
|
||
- deploy прямо на хост, где установлен Woodpecker agent.
|
||
|
||
## Локальный запуск
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
docker compose up -d --build
|
||
```
|
||
|
||
Приложение будет доступно на `http://localhost:3000`, а база SQLite сохранится в папке `./data`.
|
||
|
||
## Что добавлено для production
|
||
|
||
- `Dockerfile` с production `NODE_ENV` и `HEALTHCHECK`;
|
||
- `/healthz` endpoint для проверки контейнера;
|
||
- fail-fast проверка `JWT_SECRET` и `ADMIN_SECRET` в production;
|
||
- `docker-compose.deploy.yml` для запуска заранее собранного локального образа;
|
||
- `.woodpecker.yml` для сборки и deploy на хосте агента;
|
||
- `deploy/remote-deploy.sh` и `deploy.sh` для повторного запуска того же сценария уже на сервере.
|
||
|
||
## Как теперь работает deploy
|
||
|
||
1. Woodpecker забирает код из Git.
|
||
2. На push в default branch step `deploy` запускается на агенте, который стоит на целевой машине.
|
||
3. Step собирает локальный образ `intradesk-monitor:$CI_COMMIT_SHA` и тег `latest`.
|
||
4. В `/opt/intradesk-monitor` копируются deploy-файлы из репозитория.
|
||
5. Затем выполняется `docker compose up -d` уже с локально собранным образом.
|
||
|
||
Registry и SSH для такого сценария не нужны.
|
||
|
||
## Что нужно на машине с агентом
|
||
|
||
- установленный Docker с `docker compose`;
|
||
- Woodpecker agent на этой же машине;
|
||
- каталог `/opt/intradesk-monitor`;
|
||
- файл `/opt/intradesk-monitor/.env`;
|
||
- доверенный (`trusted`) репозиторий в Woodpecker, потому что pipeline использует bind-mount хостовых путей и Docker socket.
|
||
|
||
Пример `/opt/intradesk-monitor/.env`:
|
||
|
||
```dotenv
|
||
JWT_SECRET=long_random_secret
|
||
ADMIN_SECRET=another_long_secret
|
||
APP_PORT=3000
|
||
```
|
||
|
||
`PORT` и `DB_PATH` в production задаются через compose автоматически.
|
||
|
||
## Настройка агента
|
||
|
||
Текущий `.woodpecker.yml` ожидает, что на хосте доступны:
|
||
|
||
- `/var/run/docker.sock`
|
||
- `/opt/intradesk-monitor`
|
||
|
||
Если у тебя несколько агентов, добавь на нужный агент собственный label и раскомментируй блок `labels` в `.woodpecker.yml`, чтобы deploy уходил строго на нужную машину.
|
||
|
||
## Первый деплой
|
||
|
||
1. Создать каталог `/opt/intradesk-monitor`.
|
||
2. Положить в него `.env`.
|
||
3. Убедиться, что агент Woodpecker может работать с Docker на хосте.
|
||
4. Пометить репозиторий как `trusted` в Woodpecker.
|
||
5. Запушить изменения в default branch.
|
||
|
||
После этого Woodpecker сам соберёт образ на целевой машине и перезапустит контейнер.
|
||
|
||
## Полезные команды на сервере
|
||
|
||
```bash
|
||
cd /opt/intradesk-monitor
|
||
docker ps --filter name=intradesk-monitor
|
||
docker logs -f intradesk-monitor
|
||
./deploy.sh
|
||
```
|