# Монитор заявок — CleverParking Node/Express приложение со встроенным фронтендом и SQLite. Образ собирается в Woodpecker CI, публикуется в Forgejo registry и деплоится на сервер через Docker socket на агенте с меткой `role=work_woodpecker`. --- ## Локальный запуск ```bash cp .env.example .env # Отредактировать .env под себя docker compose up -d --build ``` Compose собирает образ из текущего каталога, данные SQLite хранятся в `./data`. --- ## Первоначальная настройка сервера Выполняется **один раз** вручную перед первым деплоем через CI. ### 1. Установить Docker ```bash curl -fsSL https://get.docker.com | sh ``` Проверить: ```bash docker version docker compose version ``` ### 2. Создать рабочий каталог и файлы ```bash mkdir -p /opt/intradesk-monitor/data cd /opt/intradesk-monitor ``` Создать `docker-compose.yml`: ```bash cat > docker-compose.yml << 'EOF' services: intradesk-monitor: image: git.example.com/user/intradesk-monitor:latest container_name: intradesk-monitor restart: always env_file: .env ports: - "${APP_PORT:-3000}:3000" volumes: - ./data:/data environment: NODE_ENV: production PORT: 3000 DB_PATH: /data/intradesk.db healthcheck: test: ["CMD", "node", "-e", "const http=require('http');const req=http.get('http://127.0.0.1:3000/healthz',res=>process.exit(res.statusCode===200?0:1));req.on('error',()=>process.exit(1));"] interval: 30s timeout: 5s retries: 3 start_period: 15s EOF ``` > Заменить `git.example.com/user/intradesk-monitor` на актуальный путь образа. ### 3. Создать .env ```bash # Сгенерировать секреты JWT_SECRET=$(openssl rand -hex 32) ADMIN_SECRET=$(openssl rand -hex 32) cat > /opt/intradesk-monitor/.env << EOF JWT_SECRET=${JWT_SECRET} ADMIN_SECRET=${ADMIN_SECRET} APP_PORT=3000 EOF ``` Проверить: ```bash cat /opt/intradesk-monitor/.env ``` ### 4. Авторизоваться в Forgejo registry Чтобы сервер мог скачать образ при `docker compose pull`: ```bash docker login git.example.com ``` Ввести логин и токен с правом `package:read`. Учётные данные сохраняются в `~/.docker/config.json` и используются автоматически при каждом `pull`. ### 5. Проверить вручную до первого CI-деплоя ```bash cd /opt/intradesk-monitor docker compose pull docker compose up -d docker compose ps docker compose logs -f ``` Если контейнер поднялся и healthcheck зелёный — сервер готов принимать деплои от CI. --- ## Секреты Woodpecker Добавить в Settings → Secrets репозитория: | Секрет | Значение | |--------------------|---------------------------------------------------| | `forgejo_host` | хост registry, например `git.example.com` | | `forgejo_image` | полный путь образа, например `git.example.com/user/intradesk-monitor` | | `forgejo_username` | логин пользователя Forgejo | | `forgejo_token` | токен с правом `package:write` | --- ## Что делает pipeline `.woodpecker.yml` содержит три шага: - `docker-build` — сборка и push тегов `latest` и `sha-` при push в `main` - `docker-build-tag` — сборка и push git-тега, `latest` и `sha-` при событии `tag` - `deploy` — на сервере делает `docker compose pull` + `up -d` через Docker socket; агент с меткой `role=work_woodpecker` --- ## Полезные команды на сервере ```bash cd /opt/intradesk-monitor # Статус и логи docker compose ps docker compose logs -f # Откат на предыдущий образ docker compose stop docker compose run --rm intradesk-monitor docker tag $(cat .previous_image) intradesk-monitor:rollback docker compose up -d ```