Бот для отслеживания матчей, изменения ELO и детальной статистики игроков FACEIT CS2 в Telegram.
- Язык: Kotlin 2.3 (JVM 21)
- Telegram API:
dev.inmo:tgbotapi(Long Polling) - HTTP клиент: Ktor Client (CIO) + Content Negotiation (KotlinX Serialization)
- База данных: Exposed ORM + SQLite (WAL mode)
- CI/CD & Деплой: GitHub Actions + GitHub Packages (
ghcr.io) + Docker Compose
На сервере перейдите в папку с сервисом (например, ~/services/tracker):
mkdir -p ~/services/tracker && cd ~/services/trackerСоздайте файл .env:
TELEGRAM_BOT_TOKEN=ваш_токен_бота
FACEIT_API_KEY=ваш_api_ключ_faceit
TELEGRAM_CHAT_ID=
POLL_INTERVAL_SECONDS=45
SQLITE_DB_PATH=/app/data/tracker.dbСоздайте docker-compose.yml:
version: "3.8"
services:
faceit-tracker:
image: ghcr.io/incw/tracker:latest
container_name: faceit-tracker
restart: unless-stopped
env_file:
- .env
environment:
- SQLITE_DB_PATH=/app/data/tracker.db
volumes:
- ./data:/app/data
deploy:
resources:
limits:
cpus: "0.50"
memory: 384M
reservations:
memory: 128M
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
networks:
- tracker-network
networks:
tracker-network:
driver: bridgeПодготовьте директорию для SQLite:
mkdir -p data
sudo chown -R 10001:10001 dataЗапустите контейнер:
docker compose pull
docker compose up -dВесь процесс полностью автоматизирован через GitHub Actions:
Внесите изменения в код, протестируйте и отправьте коммит в репозиторий:
git add .
git commit -m "feat: описание ваших изменений"
git push origin mainGitHub Actions автоматически соберет новый Docker-образ и опубликует его в
ghcr.ioс тегомlatest.
Перейдите в папку с ботом на сервере и выполните:
docker compose pull && docker compose up -dDocker скачает обновлённый образ и перезапустит контейнер с сохранением базы данных и всех настроек.
База данных и сопутствующие WAL-файлы хранятся в папке ./data/ на хосте:
data/tracker.dbdata/tracker.db-waldata/tracker.db-shm
Если вам нужно полностью очистить базу и начать с чистого листа:
# 1. Останавливаем бота
docker compose down
# 2. Удаляем файлы базы данных
rm -f data/tracker.db*
# 3. Запускаем бота заново (база и все таблицы создадутся с нуля)
docker compose up -dДля создания мгновенной резервной копии базы:
cp data/tracker.db data/tracker_backup_$(date +%Y%m%d_%H%M%S).dbЕсли на сервере установлена утилита sqlite3 (apt install -y sqlite3):
# Посмотреть отслеживаемых игроков
sqlite3 data/tracker.db "SELECT id, nickname, current_elo FROM tracked_players;"
# Посмотреть активные подписки чатов
sqlite3 data/tracker.db "SELECT * FROM chat_subscriptions;"| Задача | Команда |
|---|---|
| Просмотр логов в реальном времени | docker compose logs -f faceit-tracker |
| Последние 100 строк логов | docker compose logs --tail=100 faceit-tracker |
| Проверить статус контейнера | docker compose ps |
| Перезапустить бота | docker compose restart faceit-tracker |
| Остановить бота | docker compose down |
| Посмотреть потребление RAM и CPU | docker stats faceit-tracker |
| Очистить старые неиспользуемые Docker-образы | docker image prune -f |