intra_monitor/README.md
2026-03-18 14:56:19 +03:00

156 lines
No EOL
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Монитор заявок — 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-<shortsha>` при push в `main`
- `docker-build-tag` — сборка и push git-тега, `latest` и `sha-<shortsha>` при событии `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
```