fix 2
This commit is contained in:
parent
2cb2b3f53e
commit
66d436b7aa
3 changed files with 127 additions and 32 deletions
|
|
@ -8,7 +8,7 @@ ADMIN_SECRET=мой_секрет_для_создания_юзеров
|
|||
APP_PORT=3000
|
||||
|
||||
# Имя production-образа для docker compose deploy
|
||||
IMAGE_NAME=registry.example.com/team/intradesk-monitor
|
||||
IMAGE_NAME=git.ihateamerica.ru/dv/intra_monitor
|
||||
|
||||
# Порт сервера (по умолчанию 3000)
|
||||
PORT=3000
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ steps:
|
|||
registry:
|
||||
from_secret: forgejo_host
|
||||
repo:
|
||||
from_secret: forgejo_image
|
||||
from_secret: forgejo_image_2
|
||||
username:
|
||||
from_secret: forgejo_username
|
||||
password:
|
||||
|
|
@ -46,7 +46,7 @@ steps:
|
|||
registry:
|
||||
from_secret: forgejo_host
|
||||
repo:
|
||||
from_secret: forgejo_image
|
||||
from_secret: forgejo_image_2
|
||||
username:
|
||||
from_secret: forgejo_username
|
||||
password:
|
||||
|
|
@ -71,14 +71,14 @@ steps:
|
|||
image: docker:cli
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- /opt/intradesk-monitor:/deploy
|
||||
- /opt/intra_monitor:/deploy
|
||||
commands:
|
||||
- |
|
||||
set -e
|
||||
cd /deploy
|
||||
|
||||
# Проверяем наличие .env на сервере
|
||||
test -f .env || (echo "Missing /opt/intradesk-monitor/.env on deploy host" && exit 1)
|
||||
test -f .env || (echo "Missing /opt/intra_monitor/.env on deploy host" && exit 1)
|
||||
|
||||
# Сохраняем ID текущего образа (для отката)
|
||||
CONTAINER=$(docker compose ps -q intradesk-monitor 2>/dev/null | head -1)
|
||||
|
|
|
|||
147
README.md
147
README.md
|
|
@ -1,61 +1,156 @@
|
|||
# Монитор заявок - CleverParking
|
||||
# Монитор заявок — CleverParking
|
||||
|
||||
Node/Express приложение со встроенным фронтендом и SQLite.
|
||||
|
||||
Проект теперь настроен по той же схеме, что и другой рабочий сервис на этом сервере:
|
||||
Образ собирается в Woodpecker CI, публикуется в Forgejo registry и деплоится на сервер через Docker socket на агенте с меткой `role=work_woodpecker`.
|
||||
|
||||
- образ собирается в Woodpecker и публикуется в registry;
|
||||
- deploy выполняется на агенте с label `role=work_woodpecker`;
|
||||
- на сервере запускается `docker compose pull && docker compose up -d`.
|
||||
---
|
||||
|
||||
## Локальный запуск
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
# Отредактировать .env под себя
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
Локальный compose собирает образ из текущего каталога и хранит SQLite в `./data`.
|
||||
Compose собирает образ из текущего каталога, данные SQLite хранятся в `./data`.
|
||||
|
||||
## Production deploy
|
||||
---
|
||||
|
||||
На сервере должен существовать каталог `/opt/intradesk-monitor` с файлом `.env`.
|
||||
## Первоначальная настройка сервера
|
||||
|
||||
Минимальный пример `/opt/intradesk-monitor/.env`:
|
||||
Выполняется **один раз** вручную перед первым деплоем через CI.
|
||||
|
||||
```dotenv
|
||||
JWT_SECRET=long_random_secret
|
||||
ADMIN_SECRET=another_long_secret
|
||||
APP_PORT=3000
|
||||
IMAGE_NAME=git.example.com/user/intradesk-monitor
|
||||
### 1. Установить Docker
|
||||
|
||||
```bash
|
||||
curl -fsSL https://get.docker.com | sh
|
||||
```
|
||||
|
||||
Во время deploy pipeline копирует [docker-compose.deploy.yml](c:/Users/Professional/Documents/VSCode/intra_git/intradesk-monitor/docker-compose.deploy.yml) в `/opt/intradesk-monitor/docker-compose.yml`, затем выполняет стандартный `docker compose pull` и `docker compose up -d`.
|
||||
Проверить:
|
||||
|
||||
```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`
|
||||
- `forgejo_image`
|
||||
- `forgejo_username`
|
||||
- `forgejo_token`
|
||||
| Секрет | Значение |
|
||||
|--------------------|---------------------------------------------------|
|
||||
| `forgejo_host` | хост registry, например `git.example.com` |
|
||||
| `forgejo_image` | полный путь образа, например `git.example.com/user/intradesk-monitor` |
|
||||
| `forgejo_username` | логин пользователя Forgejo |
|
||||
| `forgejo_token` | токен с правом `package:write` |
|
||||
|
||||
`forgejo_image` должен совпадать с `IMAGE_NAME` в серверном `.env`.
|
||||
---
|
||||
|
||||
## Что делает pipeline
|
||||
|
||||
[.woodpecker.yml](c:/Users/Professional/Documents/VSCode/intra_git/intradesk-monitor/.woodpecker.yml) содержит три шага:
|
||||
`.woodpecker.yml` содержит три шага:
|
||||
|
||||
- `docker-build` — сборка и push `latest` и `sha-<shortsha>` при push в `main`;
|
||||
- `docker-build-tag` — сборка и push git tag, `latest` и `sha-<shortsha>` при событии tag;
|
||||
- `deploy` — deploy на прод-сервере через Docker socket на агенте `role=work_woodpecker`.
|
||||
- `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
|
||||
cat .previous_image
|
||||
|
||||
# Откат на предыдущий образ
|
||||
docker compose stop
|
||||
docker compose run --rm intradesk-monitor docker tag $(cat .previous_image) intradesk-monitor:rollback
|
||||
docker compose up -d
|
||||
```
|
||||
Loading…
Add table
Reference in a new issue