Add Docker Compose and deployment documentation

This commit is contained in:
tgvpn
2026-05-21 00:29:22 +03:00
parent 626128673d
commit 20872232b7
6 changed files with 347 additions and 8 deletions
+10
View File
@@ -0,0 +1,10 @@
.env
.env.*
!.env.example
*.exe
.git
.gitignore
README.md
bot.exe
dist/
bin/
+2
View File
@@ -3,3 +3,5 @@ BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz
# true — подробные логи API Telegram # true — подробные логи API Telegram
BOT_DEBUG=false BOT_DEBUG=false
# Docker Compose читает этот файл как .env (скопируйте: cp .env.example .env)
+1
View File
@@ -1,4 +1,5 @@
.env .env
.docker/
*.exe *.exe
*.exe~ *.exe~
*.dll *.dll
+24
View File
@@ -0,0 +1,24 @@
FROM golang:1.22-alpine AS builder
WORKDIR /app
RUN apk add --no-cache git ca-certificates
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /bot .
FROM alpine:3.20
RUN apk add --no-cache ca-certificates tzdata \
&& adduser -D -H -u 10001 bot
WORKDIR /app
COPY --from=builder /bot /app/bot
USER bot
ENTRYPOINT ["/app/bot"]
+296 -8
View File
@@ -1,15 +1,303 @@
# tgvpn # tgvpn
Telegram-бот на Go (базовое приветствие, дальше — VPN-функции). Telegram-бот на Go (базовое приветствие; далее — VPN-функции).
## Запуск ## Требования
1. Скопируйте `.env.example` в `.env` и укажите `BOT_TOKEN` от [@BotFather](https://t.me/BotFather). | Компонент | Минимум |
2. `go run .` |-----------|---------|
| Docker | 24+ |
| Docker Compose | v2 (`docker compose`) |
| Токен бота | [@BotFather](https://t.me/BotFather) |
| Сеть | Исходящий HTTPS к `api.telegram.org` (порт 443) |
Для запуска **без Docker**: Go 1.22+.
---
## Быстрый старт (Docker Compose)
### 1. Клонирование
```bash
git clone https://git.evilfox.cc/test/tgvpn.git
cd tgvpn
```
### 2. Переменные окружения
```bash
cp .env.example .env
```
Отредактируйте `.env`:
```env
BOT_TOKEN=ваш_токен_от_BotFather
BOT_DEBUG=false
```
> **Важно:** файл `.env` не попадает в git и не копируется в образ. Compose передаёт переменные в контейнер при старте.
### 3. Сборка и запуск
```bash
docker compose up -d --build
```
### 4. Проверка
```bash
# логи (должно быть: «бот @имя_бота запущен»)
docker compose logs -f bot
# статус контейнера
docker compose ps
```
В Telegram откройте бота и отправьте `/start`.
### 5. Остановка
```bash
docker compose down
```
---
## Развёртывание на VPS (Linux)
Ниже — пошаговая установка на чистый сервер (Ubuntu 22.04/24.04, Debian 12). Аналогично на других дистрибутивах с Docker.
### Шаг 1. Подключение к серверу
```bash
ssh user@your-server-ip
```
### Шаг 2. Установка Docker
```bash
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER
```
Выйдите из SSH и зайдите снова, чтобы группа `docker` применилась:
```bash
exit
ssh user@your-server-ip
docker --version
docker compose version
```
### Шаг 3. Клонирование проекта
```bash
sudo mkdir -p /opt/tgvpn
sudo chown $USER:$USER /opt/tgvpn
cd /opt/tgvpn
git clone https://git.evilfox.cc/test/tgvpn.git .
```
### Шаг 4. Настройка `.env`
```bash
cp .env.example .env
nano .env # или vim / vi
```
Укажите реальный `BOT_TOKEN`. Для продакшена оставьте `BOT_DEBUG=false`.
Права на секреты:
```bash
chmod 600 .env
```
### Шаг 5. Запуск в фоне
```bash
docker compose up -d --build
```
Проверка:
```bash
docker compose ps
docker compose logs --tail=50 bot
```
### Шаг 6. Автозапуск после перезагрузки сервера
В `docker-compose.yml` уже указано `restart: unless-stopped`. После перезагрузки VPS контейнер поднимется сам, если Docker запущен:
```bash
sudo systemctl enable docker
sudo systemctl start docker
```
### Шаг 7. Обновление версии бота
```bash
cd /opt/tgvpn
git pull
docker compose up -d --build
docker compose logs --tail=30 bot
```
Старый образ можно удалить (опционально):
```bash
docker image prune -f
```
---
## Развёртывание на Windows
### Docker Desktop
1. Установите [Docker Desktop](https://www.docker.com/products/docker-desktop/).
2. В PowerShell:
```powershell
git clone https://git.evilfox.cc/test/tgvpn.git
cd tgvpn
Copy-Item .env.example .env
# отредактируйте .env — вставьте BOT_TOKEN
docker compose up -d --build
docker compose logs -f bot
```
---
## Локальная разработка (без Docker)
```bash
cp .env.example .env
# укажите BOT_TOKEN в .env
go run .
```
или
```bash
go build -o bot .
./bot
```
---
## Переменные окружения ## Переменные окружения
| Переменная | Описание | | Переменная | Обязательно | Описание |
|--------------|-----------------------------------| |--------------|-------------|----------|
| `BOT_TOKEN` | Токен бота (обязательно) | | `BOT_TOKEN` | да | Токен от @BotFather |
| `BOT_DEBUG` | `true` — подробные логи API | | `BOT_DEBUG` | нет | `true` — подробные логи Telegram API (только для отладки) |
---
## Полезные команды Docker
```bash
# пересобрать образ и перезапустить
docker compose up -d --build
# логи в реальном времени
docker compose logs -f bot
# последние 100 строк логов
docker compose logs --tail=100 bot
# зайти в контейнер (обычно не нужно)
docker compose exec bot sh
# удалить контейнер (образ останется)
docker compose down
# удалить контейнер и неиспользуемые образы проекта
docker compose down --rmi local
```
---
## Сеть и безопасность
- Бот использует **long polling**: входящие запросы на ваш сервер **не нужны**, порты открывать не требуется.
- Нужен только **исходящий** доступ к `https://api.telegram.org`.
- Не коммитьте `.env` в git. Не публикуйте `BOT_TOKEN`.
- Контейнер запускается от непривилегированного пользователя `bot` (UID 10001).
Если позже добавите **webhook**, понадобится reverse proxy (nginx/Caddy), TLS и открытый порт 443 — это описывается отдельно при появлении функции.
---
## Устранение неполадок
### `BOT_TOKEN не задан`
- Проверьте, что файл `.env` лежит рядом с `docker-compose.yml`.
- В `.env` нет пробелов вокруг `=`: `BOT_TOKEN=123:ABC`, не `BOT_TOKEN = ...`.
- После правки: `docker compose up -d --force-recreate`.
### `Authentication failed` / `401 Unauthorized`
- Неверный или отозванный токен. Создайте новый в @BotFather`/token` → обновите `.env``docker compose up -d --force-recreate`.
### Бот не отвечает в Telegram
```bash
docker compose ps # State должен быть running
docker compose logs bot # ошибки сети, токена
```
- Убедитесь, что на сервере нет блокировки Telegram (firewall, провайдер).
- Проверьте: `curl -I https://api.telegram.org` с хоста.
### Контейнер постоянно перезапускается
```bash
docker compose logs --tail=200 bot
```
Чаще всего — пустой `BOT_TOKEN` или ошибка при старте.
### Нет доступа к `docker` без sudo
```bash
sudo usermod -aG docker $USER
# перелогиньтесь
```
---
## Структура проекта
```
tgvpn/
├── main.go # логика бота
├── Dockerfile # multi-stage сборка
├── docker-compose.yml # оркестрация
├── .env.example # шаблон переменных
├── .dockerignore
├── go.mod / go.sum
└── README.md
```
---
## Репозиторий
https://git.evilfox.cc/test/tgvpn.git
+14
View File
@@ -0,0 +1,14 @@
services:
bot:
build:
context: .
dockerfile: Dockerfile
image: tgvpn-bot:latest
container_name: tgvpn-bot
restart: unless-stopped
env_file:
- .env
environment:
BOT_DEBUG: ${BOT_DEBUG:-false}
# Long polling — исходящие HTTPS к api.telegram.org
# ports не нужны, пока нет webhook