# Монитор заявок - 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 ```