add docker
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
.git
|
||||
.venv
|
||||
__pycache__
|
||||
.pytest_cache
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.pyd
|
||||
*.sqlite3
|
||||
bot.sqlite3
|
||||
data
|
||||
config.toml
|
||||
.env
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
FROM python:3.13-slim
|
||||
|
||||
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||
PYTHONUNBUFFERED=1
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY requirements.txt ./
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
COPY bot.py ./
|
||||
COPY vpn_bot ./vpn_bot
|
||||
|
||||
RUN useradd --create-home --uid 10001 botuser \
|
||||
&& mkdir -p /app/data \
|
||||
&& chown -R botuser:botuser /app
|
||||
|
||||
USER botuser
|
||||
|
||||
CMD ["python", "bot.py", "--config", "/app/config.toml"]
|
||||
@@ -38,7 +38,7 @@ The bot uses:
|
||||
- `PUT /api/user/{username}`
|
||||
- `POST /api/user/{username}/reset`
|
||||
|
||||
## Install
|
||||
## Install locally
|
||||
|
||||
```bash
|
||||
python -m venv .venv
|
||||
@@ -49,12 +49,54 @@ cp config.example.toml config.toml
|
||||
|
||||
Edit `config.toml`.
|
||||
|
||||
## Run
|
||||
For local runs, `database_path = "bot.sqlite3"` is fine.
|
||||
|
||||
## Run locally
|
||||
|
||||
```bash
|
||||
python bot.py --config config.toml
|
||||
```
|
||||
|
||||
## Run with Docker Compose
|
||||
|
||||
Copy and edit the config first:
|
||||
|
||||
```bash
|
||||
cp config.example.toml config.toml
|
||||
mkdir -p data
|
||||
```
|
||||
|
||||
For Docker Compose, set the SQLite path in `config.toml` to the mounted data directory:
|
||||
|
||||
```toml
|
||||
database_path = "/app/data/bot.sqlite3"
|
||||
```
|
||||
|
||||
Start the bot:
|
||||
|
||||
```bash
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
View logs:
|
||||
|
||||
```bash
|
||||
docker compose logs -f vpn-bot
|
||||
```
|
||||
|
||||
Stop the bot:
|
||||
|
||||
```bash
|
||||
docker compose down
|
||||
```
|
||||
|
||||
Files used by Docker:
|
||||
|
||||
- `Dockerfile` builds a small Python image for the bot.
|
||||
- `docker-compose.yml` mounts `./config.toml` read-only into the container.
|
||||
- `docker-compose.yml` mounts `./data` to `/app/data` so SQLite data persists across restarts/rebuilds.
|
||||
- `.dockerignore` keeps secrets, local DB files, virtualenvs, and caches out of the image build context.
|
||||
|
||||
## Admin usage
|
||||
|
||||
Start the bot from an admin Telegram account, then use:
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
services:
|
||||
vpn-bot:
|
||||
build: .
|
||||
container_name: marzban-vpn-bot
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./config.toml:/app/config.toml:ro
|
||||
- ./data:/app/data
|
||||
Reference in New Issue
Block a user