No description
Find a file
2026-04-14 16:59:38 +03:00
public фикс неизвестно + доп статистика 2026-04-14 16:54:15 +03:00
.dockerignore init 2026-03-18 14:19:29 +03:00
.env.example fix 2 2026-03-18 14:56:19 +03:00
.gitignore init 2026-03-18 14:19:29 +03:00
.woodpecker.yml fix vibe 2 2 2026-03-18 23:50:18 +03:00
docker-compose.yml fix vibe 3 1 2026-03-19 13:00:20 +03:00
Dockerfile fix vibe 2 2 2026-03-18 23:50:18 +03:00
intradesk-monitor.zip 11 2026-04-14 16:59:38 +03:00
package.json init 2026-03-18 14:19:29 +03:00
README.md fix 2 2026-03-18 14:56:19 +03:00
refresh-service.js vibe 2 2026-03-18 18:35:03 +03:00
server.js vibe 2 2026-03-18 18:35:03 +03:00
start.sh init 2026-03-18 14:19:29 +03:00

Монитор заявок — CleverParking

Node/Express приложение со встроенным фронтендом и SQLite.

Образ собирается в Woodpecker CI, публикуется в Forgejo registry и деплоится на сервер через Docker socket на агенте с меткой role=work_woodpecker.


Локальный запуск

cp .env.example .env
# Отредактировать .env под себя
docker compose up -d --build

Compose собирает образ из текущего каталога, данные SQLite хранятся в ./data.


Первоначальная настройка сервера

Выполняется один раз вручную перед первым деплоем через CI.

1. Установить Docker

curl -fsSL https://get.docker.com | sh

Проверить:

docker version
docker compose version

2. Создать рабочий каталог и файлы

mkdir -p /opt/intradesk-monitor/data
cd /opt/intradesk-monitor

Создать docker-compose.yml:

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

# Сгенерировать секреты
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

Проверить:

cat /opt/intradesk-monitor/.env

4. Авторизоваться в Forgejo registry

Чтобы сервер мог скачать образ при docker compose pull:

docker login git.example.com

Ввести логин и токен с правом package:read.

Учётные данные сохраняются в ~/.docker/config.json и используются автоматически при каждом pull.

5. Проверить вручную до первого CI-деплоя

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-<shortsha> при push в main
  • docker-build-tag — сборка и push git-тега, latest и sha-<shortsha> при событии tag
  • deploy — на сервере делает docker compose pull + up -d через Docker socket; агент с меткой role=work_woodpecker

Полезные команды на сервере

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