mirror of
https://github.com/artemium428/428th-exchange-bot.git
synced 2026-09-15 16:56:20 +00:00
Add Docker Compose deploy setup for VPS.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
8f6d2c07d6
commit
501c2a5985
5 changed files with 77 additions and 0 deletions
16
.dockerignore
Normal file
16
.dockerignore
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
.git
|
||||
.venv
|
||||
venv
|
||||
__pycache__
|
||||
*.py[cod]
|
||||
*.egg-info
|
||||
.pytest_cache
|
||||
.mypy_cache
|
||||
.env
|
||||
data
|
||||
*.db
|
||||
.DS_Store
|
||||
README.md
|
||||
.dockerignore
|
||||
Dockerfile
|
||||
docker-compose.yml
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
BOT_TOKEN=123456:ABC-DEF
|
||||
MANAGER_GROUP_ID=-1001234567890
|
||||
# Local: data/bot.db — Docker Compose sets /app/data/bot.db
|
||||
DATABASE_PATH=data/bot.db
|
||||
# Optional text overrides (per language). Prefer _RU / _UK.
|
||||
# Bare WELCOME_TEXT / ACK_TEXT / COOLDOWN_TEXT apply only to RU
|
||||
|
|
|
|||
20
Dockerfile
Normal file
20
Dockerfile
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
FROM python:3.12-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||
PYTHONUNBUFFERED=1 \
|
||||
DATABASE_PATH=/app/data/bot.db
|
||||
|
||||
RUN adduser --disabled-password --gecos "" --uid 1000 bot \
|
||||
&& mkdir -p /app/data \
|
||||
&& chown bot:bot /app/data
|
||||
|
||||
COPY requirements.txt .
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
COPY --chown=bot:bot bot ./bot
|
||||
|
||||
USER bot
|
||||
|
||||
CMD ["python", "-m", "bot"]
|
||||
28
README.md
28
README.md
|
|
@ -70,3 +70,31 @@ python -m bot
|
|||
Рядом с `bot.db` могут появляться файлы `-wal` / `-shm` (режим WAL) — их тоже не нужно коммитить (`data/` в `.gitignore`).
|
||||
|
||||
При старте бот проверяет `MANAGER_GROUP_ID`: супергруппа с Topics, бот — админ с правами Manage topics и Delete messages. При ошибке процесс завершится с понятным текстом в логе и stderr.
|
||||
|
||||
## Деплой на VPS (Docker)
|
||||
|
||||
Нужны Docker и Docker Compose. Бот работает через long-polling — открывать порты не нужно, достаточно исходящего HTTPS к `api.telegram.org`. Запускайте **один** контейнер на один `BOT_TOKEN`.
|
||||
|
||||
```bash
|
||||
git clone <repo-url> && cd 428th-exchange-bot
|
||||
cp .env.example .env
|
||||
# заполните BOT_TOKEN и MANAGER_GROUP_ID
|
||||
|
||||
mkdir -p data
|
||||
# каталог должен быть доступен пользователю контейнера (uid 1000)
|
||||
sudo chown -R 1000:1000 data
|
||||
|
||||
docker compose up -d --build
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
SQLite лежит в `./data` на хосте (`DATABASE_PATH=/app/data/bot.db` внутри контейнера). Бэкапьте эту папку (вместе с `-wal` / `-shm`, если они есть).
|
||||
|
||||
Полезные команды:
|
||||
|
||||
```bash
|
||||
docker compose ps
|
||||
docker compose restart
|
||||
docker compose down # остановить без удаления ./data
|
||||
docker compose up -d --build # обновить код после git pull
|
||||
```
|
||||
|
|
|
|||
12
docker-compose.yml
Normal file
12
docker-compose.yml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
services:
|
||||
bot:
|
||||
build: .
|
||||
container_name: exchange-bot
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
DATABASE_PATH: /app/data/bot.db
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
# Long-polling: no published ports. Needs outbound HTTPS to api.telegram.org.
|
||||
Loading…
Add table
Reference in a new issue