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
|
APP_PORT=3000
|
||||||
|
|
||||||
# Имя production-образа для docker compose deploy
|
# Имя production-образа для docker compose deploy
|
||||||
IMAGE_NAME=registry.example.com/team/intradesk-monitor
|
IMAGE_NAME=git.ihateamerica.ru/dv/intra_monitor
|
||||||
|
|
||||||
# Порт сервера (по умолчанию 3000)
|
# Порт сервера (по умолчанию 3000)
|
||||||
PORT=3000
|
PORT=3000
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ steps:
|
||||||
registry:
|
registry:
|
||||||
from_secret: forgejo_host
|
from_secret: forgejo_host
|
||||||
repo:
|
repo:
|
||||||
from_secret: forgejo_image
|
from_secret: forgejo_image_2
|
||||||
username:
|
username:
|
||||||
from_secret: forgejo_username
|
from_secret: forgejo_username
|
||||||
password:
|
password:
|
||||||
|
|
@ -46,7 +46,7 @@ steps:
|
||||||
registry:
|
registry:
|
||||||
from_secret: forgejo_host
|
from_secret: forgejo_host
|
||||||
repo:
|
repo:
|
||||||
from_secret: forgejo_image
|
from_secret: forgejo_image_2
|
||||||
username:
|
username:
|
||||||
from_secret: forgejo_username
|
from_secret: forgejo_username
|
||||||
password:
|
password:
|
||||||
|
|
@ -71,14 +71,14 @@ steps:
|
||||||
image: docker:cli
|
image: docker:cli
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
- /opt/intradesk-monitor:/deploy
|
- /opt/intra_monitor:/deploy
|
||||||
commands:
|
commands:
|
||||||
- |
|
- |
|
||||||
set -e
|
set -e
|
||||||
cd /deploy
|
cd /deploy
|
||||||
|
|
||||||
# Проверяем наличие .env на сервере
|
# Проверяем наличие .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 текущего образа (для отката)
|
# Сохраняем ID текущего образа (для отката)
|
||||||
CONTAINER=$(docker compose ps -q intradesk-monitor 2>/dev/null | head -1)
|
CONTAINER=$(docker compose ps -q intradesk-monitor 2>/dev/null | head -1)
|
||||||
|
|
|
||||||
149
README.md
149
README.md
|
|
@ -1,61 +1,156 @@
|
||||||
# Монитор заявок - CleverParking
|
# Монитор заявок — CleverParking
|
||||||
|
|
||||||
Node/Express приложение со встроенным фронтендом и SQLite.
|
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
|
```bash
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
|
# Отредактировать .env под себя
|
||||||
docker compose up -d --build
|
docker compose up -d --build
|
||||||
```
|
```
|
||||||
|
|
||||||
Локальный compose собирает образ из текущего каталога и хранит SQLite в `./data`.
|
Compose собирает образ из текущего каталога, данные SQLite хранятся в `./data`.
|
||||||
|
|
||||||
## Production deploy
|
---
|
||||||
|
|
||||||
На сервере должен существовать каталог `/opt/intradesk-monitor` с файлом `.env`.
|
## Первоначальная настройка сервера
|
||||||
|
|
||||||
Минимальный пример `/opt/intradesk-monitor/.env`:
|
Выполняется **один раз** вручную перед первым деплоем через CI.
|
||||||
|
|
||||||
```dotenv
|
### 1. Установить Docker
|
||||||
JWT_SECRET=long_random_secret
|
|
||||||
ADMIN_SECRET=another_long_secret
|
```bash
|
||||||
APP_PORT=3000
|
curl -fsSL https://get.docker.com | sh
|
||||||
IMAGE_NAME=git.example.com/user/intradesk-monitor
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Во время 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
|
## Секреты Woodpecker
|
||||||
|
|
||||||
Нужны секреты репозитория:
|
Добавить в Settings → Secrets репозитория:
|
||||||
|
|
||||||
- `forgejo_host`
|
| Секрет | Значение |
|
||||||
- `forgejo_image`
|
|--------------------|---------------------------------------------------|
|
||||||
- `forgejo_username`
|
| `forgejo_host` | хост registry, например `git.example.com` |
|
||||||
- `forgejo_token`
|
| `forgejo_image` | полный путь образа, например `git.example.com/user/intradesk-monitor` |
|
||||||
|
| `forgejo_username` | логин пользователя Forgejo |
|
||||||
|
| `forgejo_token` | токен с правом `package:write` |
|
||||||
|
|
||||||
`forgejo_image` должен совпадать с `IMAGE_NAME` в серверном `.env`.
|
---
|
||||||
|
|
||||||
## Что делает pipeline
|
## Что делает 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` — сборка и push тегов `latest` и `sha-<shortsha>` при push в `main`
|
||||||
- `docker-build-tag` — сборка и push git tag, `latest` и `sha-<shortsha>` при событии tag;
|
- `docker-build-tag` — сборка и push git-тега, `latest` и `sha-<shortsha>` при событии `tag`
|
||||||
- `deploy` — deploy на прод-сервере через Docker socket на агенте `role=work_woodpecker`.
|
- `deploy` — на сервере делает `docker compose pull` + `up -d` через Docker socket; агент с меткой `role=work_woodpecker`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Полезные команды на сервере
|
## Полезные команды на сервере
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /opt/intradesk-monitor
|
cd /opt/intradesk-monitor
|
||||||
|
|
||||||
|
# Статус и логи
|
||||||
docker compose ps
|
docker compose ps
|
||||||
docker compose logs -f
|
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