Добавлено логирование информации о запуске приложения в Docker-контейнере в функции настройки логирования. Теперь выводится информация о временной зоне и пользователе контейнера, что улучшает отслеживание работы приложения в различных средах.
This commit is contained in:
parent
98ba1cb3c1
commit
c0a8cf1334
91
.dockerignore
Normal file
91
.dockerignore
Normal file
@ -0,0 +1,91 @@
|
||||
# Версионный контроль
|
||||
.git/
|
||||
.gitignore
|
||||
.gitattributes
|
||||
.gitmodules
|
||||
|
||||
# Окружение Python
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
*.so
|
||||
.Python
|
||||
venv/
|
||||
env/
|
||||
ENV/
|
||||
.env
|
||||
.venv
|
||||
|
||||
# IDE и редакторы
|
||||
.vscode/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
*.sublime-*
|
||||
*.code-workspace
|
||||
|
||||
# Операционная система
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
Desktop.ini
|
||||
|
||||
# Логи и временные файлы
|
||||
logs/
|
||||
*.log
|
||||
*.tmp
|
||||
*.temp
|
||||
temp/
|
||||
tmp/
|
||||
|
||||
# Тестирование
|
||||
.pytest_cache/
|
||||
.coverage
|
||||
.tox/
|
||||
.cache
|
||||
coverage.xml
|
||||
htmlcov/
|
||||
.nyc_output
|
||||
|
||||
# Документация
|
||||
docs/
|
||||
*.md
|
||||
*.rst
|
||||
*.txt
|
||||
!requirements.txt
|
||||
|
||||
# Docker файлы
|
||||
Dockerfile.*
|
||||
docker-compose*.yml
|
||||
!docker-compose.yml
|
||||
|
||||
# Конфигурация
|
||||
env.example
|
||||
.env.*
|
||||
!.env.example
|
||||
|
||||
# Базы данных (если есть локальные)
|
||||
*.db
|
||||
*.sqlite3
|
||||
data/
|
||||
|
||||
# Бекапы и архивы
|
||||
*.bak
|
||||
*.backup
|
||||
*.zip
|
||||
*.tar.gz
|
||||
*.rar
|
||||
|
||||
# Локальные изображения для разработки
|
||||
images/*
|
||||
!images/.gitkeep
|
||||
|
||||
# Специфичные для проекта
|
||||
node_modules/
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
62
Dockerfile
Normal file
62
Dockerfile
Normal file
@ -0,0 +1,62 @@
|
||||
# Используем официальный Python образ
|
||||
FROM python:3.12-slim
|
||||
|
||||
# Устанавливаем системные зависимости
|
||||
RUN apt-get update && apt-get install -y \
|
||||
gcc \
|
||||
libaio1 \
|
||||
libaio-dev \
|
||||
unzip \
|
||||
wget \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Устанавливаем Oracle Instant Client
|
||||
RUN mkdir -p /opt/oracle && \
|
||||
cd /opt/oracle && \
|
||||
wget https://download.oracle.com/otn_software/linux/instantclient/1921000/instantclient-basic-linux.x64-19.21.0.0.0dbru.zip && \
|
||||
unzip instantclient-basic-linux.x64-19.21.0.0.0dbru.zip && \
|
||||
rm instantclient-basic-linux.x64-19.21.0.0.0dbru.zip && \
|
||||
echo /opt/oracle/instantclient_19_21 > /etc/ld.so.conf.d/oracle-instantclient.conf && \
|
||||
ldconfig
|
||||
|
||||
# Устанавливаем переменные окружения для Oracle
|
||||
ENV ORACLE_HOME=/opt/oracle/instantclient_19_21
|
||||
ENV LD_LIBRARY_PATH=/opt/oracle/instantclient_19_21:$LD_LIBRARY_PATH
|
||||
ENV PATH=/opt/oracle/instantclient_19_21:$PATH
|
||||
|
||||
# Создаем пользователя для безопасности
|
||||
RUN useradd --create-home --shell /bin/bash salvagebot
|
||||
USER salvagebot
|
||||
WORKDIR /home/salvagebot/app
|
||||
|
||||
# Копируем файл зависимостей
|
||||
COPY --chown=salvagebot:salvagebot requirements.txt .
|
||||
|
||||
# Устанавливаем Python зависимости
|
||||
RUN pip install --user --no-cache-dir -r requirements.txt
|
||||
|
||||
# Копируем entrypoint скрипт
|
||||
COPY --chown=salvagebot:salvagebot docker-entrypoint.sh /usr/local/bin/
|
||||
USER root
|
||||
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
|
||||
USER salvagebot
|
||||
|
||||
# Копируем код приложения
|
||||
COPY --chown=salvagebot:salvagebot . .
|
||||
|
||||
# Создаем необходимые директории
|
||||
RUN mkdir -p logs images data
|
||||
|
||||
# Устанавливаем переменные окружения Python
|
||||
ENV PYTHONPATH=/home/salvagebot/app
|
||||
ENV PYTHONUNBUFFERED=1
|
||||
|
||||
# Проверяем здоровье контейнера
|
||||
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
||||
CMD python -c "import sys; sys.exit(0)"
|
||||
|
||||
# Используем entrypoint для инициализации
|
||||
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
|
||||
|
||||
# Команда запуска
|
||||
CMD ["python", "main.py"]
|
||||
148
Makefile
Normal file
148
Makefile
Normal file
@ -0,0 +1,148 @@
|
||||
# Makefile для SalvageDB Telegram Bot
|
||||
.PHONY: help build up down restart logs shell clean test health
|
||||
|
||||
# Переменные
|
||||
COMPOSE_FILE = docker-compose.yml
|
||||
SERVICE_NAME = salvagedb-bot
|
||||
CONTAINER_NAME = salvagedb-telegram-bot
|
||||
|
||||
# Помощь
|
||||
help: ## Показать доступные команды
|
||||
@echo "SalvageDB Telegram Bot - Docker Commands"
|
||||
@echo "========================================"
|
||||
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'
|
||||
|
||||
# Основные команды
|
||||
build: ## Собрать Docker образ
|
||||
@echo "🔨 Building Docker image..."
|
||||
docker-compose build --no-cache
|
||||
|
||||
up: ## Запустить контейнер
|
||||
@echo "🚀 Starting container..."
|
||||
docker-compose up -d
|
||||
|
||||
down: ## Остановить контейнер
|
||||
@echo "🛑 Stopping container..."
|
||||
docker-compose down
|
||||
|
||||
restart: ## Перезапустить контейнер
|
||||
@echo "🔄 Restarting container..."
|
||||
docker-compose restart
|
||||
|
||||
# Логи и мониторинг
|
||||
logs: ## Показать логи в реальном времени
|
||||
@echo "📋 Following logs..."
|
||||
docker-compose logs -f $(SERVICE_NAME)
|
||||
|
||||
logs-tail: ## Показать последние 100 строк логов
|
||||
@echo "📋 Last 100 log lines..."
|
||||
docker-compose logs --tail=100 $(SERVICE_NAME)
|
||||
|
||||
health: ## Проверить здоровье контейнера
|
||||
@echo "🏥 Checking container health..."
|
||||
docker inspect --format='{{.State.Health.Status}}' $(CONTAINER_NAME) || echo "Health check not available"
|
||||
|
||||
status: ## Показать статус контейнера
|
||||
@echo "📊 Container status:"
|
||||
docker-compose ps
|
||||
|
||||
stats: ## Показать статистику ресурсов
|
||||
@echo "📈 Resource usage:"
|
||||
docker stats $(CONTAINER_NAME) --no-stream
|
||||
|
||||
# Разработка
|
||||
shell: ## Подключиться к контейнеру
|
||||
@echo "🐚 Opening shell in container..."
|
||||
docker-compose exec $(SERVICE_NAME) bash
|
||||
|
||||
shell-root: ## Подключиться как root
|
||||
@echo "🔑 Opening root shell in container..."
|
||||
docker-compose exec --user root $(SERVICE_NAME) bash
|
||||
|
||||
# Тестирование
|
||||
test-env: ## Проверить переменные окружения
|
||||
@echo "🔍 Checking environment variables..."
|
||||
docker-compose exec $(SERVICE_NAME) python -c "import os; [print(f'{k}={v[:20]}{"..." if len(v) > 20 else ""}') for k, v in sorted(os.environ.items()) if any(x in k.upper() for x in ['BOT', 'DB', 'PRICE', 'ADMIN', 'DEBUG'])]"
|
||||
|
||||
test-db: ## Тестировать подключение к БД
|
||||
@echo "🗄️ Testing database connection..."
|
||||
docker-compose exec $(SERVICE_NAME) python -c "import oracledb, os; conn = oracledb.connect(user=os.getenv('DB_USER'), password=os.getenv('DB_PASSWORD'), dsn=os.getenv('DB_DSN')); print('✅ Database connection successful!'); conn.close()"
|
||||
|
||||
test-bot: ## Проверить импорты бота
|
||||
@echo "🤖 Testing bot imports..."
|
||||
docker-compose exec $(SERVICE_NAME) python -c "import aiogram, oracledb, asyncio, logging; print('✅ All imports successful!')"
|
||||
|
||||
test-all: test-env test-db test-bot ## Запустить все тесты
|
||||
|
||||
# Обслуживание
|
||||
clean: ## Удалить контейнеры и volumes
|
||||
@echo "🧹 Cleaning up..."
|
||||
docker-compose down -v
|
||||
docker system prune -f
|
||||
|
||||
clean-images: ## Удалить неиспользуемые образы
|
||||
@echo "🗑️ Removing unused images..."
|
||||
docker image prune -f
|
||||
|
||||
clean-all: clean clean-images ## Полная очистка
|
||||
|
||||
# Бэкап и восстановление
|
||||
backup-logs: ## Создать архив логов
|
||||
@echo "💾 Creating logs backup..."
|
||||
tar -czf logs_backup_$(shell date +%Y%m%d_%H%M%S).tar.gz logs/
|
||||
|
||||
backup-env: ## Создать бэкап переменных окружения
|
||||
@echo "🔐 Creating environment backup..."
|
||||
cp .env .env.backup.$(shell date +%Y%m%d_%H%M%S)
|
||||
|
||||
# Деплой
|
||||
deploy: build up ## Полный деплой (сборка + запуск)
|
||||
@echo "🚀 Deployment complete!"
|
||||
@make health
|
||||
|
||||
redeploy: down build up ## Переделой (остановка + сборка + запуск)
|
||||
@echo "🔄 Redeployment complete!"
|
||||
@make health
|
||||
|
||||
# Мониторинг
|
||||
monitor: ## Мониторинг в реальном времени
|
||||
@echo "📊 Starting monitoring (Ctrl+C to stop)..."
|
||||
@while true; do \
|
||||
clear; \
|
||||
echo "=== SalvageDB Bot Monitoring ==="; \
|
||||
echo "Time: $$(date)"; \
|
||||
echo ""; \
|
||||
echo "Container Status:"; \
|
||||
docker-compose ps; \
|
||||
echo ""; \
|
||||
echo "Resource Usage:"; \
|
||||
docker stats $(CONTAINER_NAME) --no-stream 2>/dev/null || echo "Container not running"; \
|
||||
echo ""; \
|
||||
echo "Last 5 log lines:"; \
|
||||
docker-compose logs --tail=5 $(SERVICE_NAME) 2>/dev/null || echo "No logs available"; \
|
||||
sleep 5; \
|
||||
done
|
||||
|
||||
# Обновление
|
||||
update: ## Обновить код и перезапустить
|
||||
@echo "📥 Updating application..."
|
||||
git pull
|
||||
@make redeploy
|
||||
|
||||
# Конфигурация
|
||||
setup: ## Первоначальная настройка
|
||||
@echo "⚙️ Initial setup..."
|
||||
@if [ ! -f .env ]; then \
|
||||
echo "📝 Creating .env file from template..."; \
|
||||
cp env.example .env; \
|
||||
echo "✅ Please edit .env file with your configuration"; \
|
||||
else \
|
||||
echo "✅ .env file already exists"; \
|
||||
fi
|
||||
@echo "📁 Creating directories..."
|
||||
mkdir -p logs images data
|
||||
chmod 755 logs images data
|
||||
@echo "✅ Setup complete! Edit .env file and run 'make deploy'"
|
||||
|
||||
# По умолчанию
|
||||
.DEFAULT_GOAL := help
|
||||
236
README_DOCKER.md
Normal file
236
README_DOCKER.md
Normal file
@ -0,0 +1,236 @@
|
||||
# SalvageDB Telegram Bot - Docker Deployment
|
||||
|
||||
Полная инструкция по развертыванию SalvageDB Telegram Bot в Docker контейнере.
|
||||
|
||||
## 📋 Требования
|
||||
|
||||
- Docker Engine 20.10+
|
||||
- Docker Compose 2.0+
|
||||
- Минимум 512 MB RAM
|
||||
- Доступ к Oracle Database
|
||||
|
||||
## 🚀 Быстрый старт
|
||||
|
||||
### 1. Подготовка переменных окружения
|
||||
|
||||
Скопируйте файл с примером и настройте переменные:
|
||||
|
||||
```bash
|
||||
cp env.example .env
|
||||
nano .env
|
||||
```
|
||||
|
||||
Обязательно настройте следующие переменные:
|
||||
- `BOT_TOKEN` - токен от @BotFather
|
||||
- `DB_USER`, `DB_PASSWORD`, `DB_DSN` - настройки Oracle DB
|
||||
- `ADMIN_USER_ID` - ваш Telegram ID для админ-функций
|
||||
|
||||
### 2. Создание необходимых директорий
|
||||
|
||||
```bash
|
||||
# Создаем директории для данных
|
||||
mkdir -p logs images data
|
||||
|
||||
# Устанавливаем права доступа
|
||||
chmod 755 logs images data
|
||||
```
|
||||
|
||||
### 3. Запуск контейнера
|
||||
|
||||
```bash
|
||||
# Сборка и запуск
|
||||
docker-compose up --build -d
|
||||
|
||||
# Проверка статуса
|
||||
docker-compose ps
|
||||
|
||||
# Просмотр логов
|
||||
docker-compose logs -f salvagedb-bot
|
||||
```
|
||||
|
||||
## 📁 Структура проекта
|
||||
|
||||
```
|
||||
salvagedb_bot/
|
||||
├── Dockerfile # Конфигурация Docker образа
|
||||
├── docker-compose.yml # Orchestration конфигурация
|
||||
├── docker-entrypoint.sh # Скрипт инициализации
|
||||
├── .dockerignore # Исключения для Docker
|
||||
├── env.example # Пример переменных окружения
|
||||
├── requirements.txt # Python зависимости
|
||||
├── main.py # Основной код бота
|
||||
├── db.py # Модуль работы с БД
|
||||
├── middlewares/ # Middleware компоненты
|
||||
├── logs/ # Логи приложения (volume)
|
||||
├── images/ # Изображения автомобилей (volume)
|
||||
└── data/ # Дополнительные данные (volume)
|
||||
```
|
||||
|
||||
## 🔧 Конфигурация
|
||||
|
||||
### Переменные окружения
|
||||
|
||||
| Переменная | Описание | Значение по умолчанию |
|
||||
|-----------|----------|----------------------|
|
||||
| `BOT_TOKEN` | Токен Telegram бота | **Обязательно** |
|
||||
| `BOT_NAME` | Имя бота | `SalvageDB Bot` |
|
||||
| `ADMIN_USER_ID` | ID администратора | **Обязательно** |
|
||||
| `DECODE_PRICE` | Цена декодирования VIN | `1` |
|
||||
| `CHECK_PRICE` | Цена проверки повреждений | `10` |
|
||||
| `IMG_PRICE` | Цена доступа к фото | `100` |
|
||||
| `DB_USER` | Пользователь Oracle DB | **Обязательно** |
|
||||
| `DB_PASSWORD` | Пароль Oracle DB | **Обязательно** |
|
||||
| `DB_DSN` | DSN строка Oracle DB | **Обязательно** |
|
||||
| `DEBUG` | Режим отладки | `0` |
|
||||
| `TIMEZONE` | Часовой пояс | `UTC` |
|
||||
|
||||
### Volumes
|
||||
|
||||
- `./logs:/home/salvagebot/app/logs` - Логи приложения
|
||||
- `./images:/home/salvagebot/app/images:ro` - Изображения (read-only)
|
||||
- `./data:/home/salvagebot/app/data` - Дополнительные данные
|
||||
|
||||
## 🛠️ Управление контейнером
|
||||
|
||||
### Основные команды
|
||||
|
||||
```bash
|
||||
# Запуск
|
||||
docker-compose up -d
|
||||
|
||||
# Остановка
|
||||
docker-compose down
|
||||
|
||||
# Перезапуск
|
||||
docker-compose restart
|
||||
|
||||
# Пересборка и запуск
|
||||
docker-compose up --build -d
|
||||
|
||||
# Просмотр логов в реальном времени
|
||||
docker-compose logs -f salvagedb-bot
|
||||
|
||||
# Подключение к контейнеру
|
||||
docker-compose exec salvagedb-bot bash
|
||||
|
||||
# Просмотр статуса
|
||||
docker-compose ps
|
||||
```
|
||||
|
||||
### Мониторинг
|
||||
|
||||
```bash
|
||||
# Проверка здоровья контейнера
|
||||
docker-compose exec salvagedb-bot python -c "print('Bot is healthy!')"
|
||||
|
||||
# Статистика ресурсов
|
||||
docker stats salvagedb-telegram-bot
|
||||
|
||||
# Информация о контейнере
|
||||
docker inspect salvagedb-telegram-bot
|
||||
```
|
||||
|
||||
## 📊 Логирование
|
||||
|
||||
### Структура логов
|
||||
|
||||
Логи сохраняются в директории `./logs/`:
|
||||
- `salvagedb_bot.log` - текущий лог файл
|
||||
- `salvagedb_bot.log.YYYY-MM-DD` - архивные логи
|
||||
|
||||
### Конфигурация логирования
|
||||
|
||||
- **Ротация:** ежедневно в полночь
|
||||
- **Хранение:** 30 дней
|
||||
- **Формат:** `YYYY-MM-DD HH:MM:SS - module - LEVEL - message`
|
||||
- **Уровни:** INFO, WARNING, ERROR
|
||||
|
||||
## 🔒 Безопасность
|
||||
|
||||
### Рекомендации
|
||||
|
||||
1. **Переменные окружения:**
|
||||
- Никогда не коммитьте `.env` файл
|
||||
- Используйте сильные пароли для БД
|
||||
- Ограничьте доступ к токену бота
|
||||
|
||||
2. **Сетевая безопасность:**
|
||||
- Контейнер работает в изолированной сети
|
||||
- Нет открытых портов (только исходящие соединения)
|
||||
|
||||
3. **Файловая система:**
|
||||
- Приложение работает под непривилегированным пользователем
|
||||
- Read-only монтирование для изображений
|
||||
|
||||
## 🐛 Устранение неполадок
|
||||
|
||||
### Проблемы с Oracle
|
||||
|
||||
```bash
|
||||
# Проверка Oracle client в контейнере
|
||||
docker-compose exec salvagedb-bot python -c "import oracledb; print(oracledb.version)"
|
||||
|
||||
# Тест подключения к БД
|
||||
docker-compose exec salvagedb-bot python -c "
|
||||
import oracledb
|
||||
import os
|
||||
conn = oracledb.connect(user=os.getenv('DB_USER'), password=os.getenv('DB_PASSWORD'), dsn=os.getenv('DB_DSN'))
|
||||
print('Connection successful!')
|
||||
conn.close()
|
||||
"
|
||||
```
|
||||
|
||||
### Проблемы с ботом
|
||||
|
||||
```bash
|
||||
# Проверка токена бота
|
||||
docker-compose exec salvagedb-bot python -c "
|
||||
import os
|
||||
print('Bot token length:', len(os.getenv('BOT_TOKEN', '')))
|
||||
"
|
||||
|
||||
# Проверка aiogram
|
||||
docker-compose exec salvagebot-bot python -c "import aiogram; print('aiogram version:', aiogram.__version__)"
|
||||
```
|
||||
|
||||
### Логи отладки
|
||||
|
||||
```bash
|
||||
# Включить DEBUG режим
|
||||
echo "DEBUG=1" >> .env
|
||||
docker-compose restart
|
||||
|
||||
# Просмотр подробных логов
|
||||
docker-compose logs -f --tail=100 salvagedb-bot
|
||||
```
|
||||
|
||||
## 🔄 Обновление
|
||||
|
||||
```bash
|
||||
# Остановить контейнер
|
||||
docker-compose down
|
||||
|
||||
# Обновить код
|
||||
git pull
|
||||
|
||||
# Пересобрать и запустить
|
||||
docker-compose up --build -d
|
||||
|
||||
# Проверить статус
|
||||
docker-compose logs -f salvagedb-bot
|
||||
```
|
||||
|
||||
## 📞 Поддержка
|
||||
|
||||
При возникновении проблем:
|
||||
|
||||
1. Проверьте логи: `docker-compose logs salvagedb-bot`
|
||||
2. Убедитесь в правильности переменных окружения
|
||||
3. Проверьте подключение к Oracle DB
|
||||
4. Проверьте валидность токена бота
|
||||
|
||||
## 🏷️ Теги версий
|
||||
|
||||
- `latest` - последняя стабильная версия
|
||||
- `dev` - версия для разработки
|
||||
- `v1.x.x` - конкретные релизы
|
||||
115
docker-compose.yml
Normal file
115
docker-compose.yml
Normal file
@ -0,0 +1,115 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
salvagedb-bot:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
container_name: salvagedb-telegram-bot
|
||||
restart: unless-stopped
|
||||
|
||||
# Переменные окружения
|
||||
environment:
|
||||
# Telegram Bot настройки
|
||||
- BOT_TOKEN=${BOT_TOKEN}
|
||||
- BOT_NAME=${BOT_NAME:-SalvageDB Bot}
|
||||
- ADMIN_USER_ID=${ADMIN_USER_ID}
|
||||
|
||||
# Цены на услуги (в Telegram Stars)
|
||||
- DECODE_PRICE=${DECODE_PRICE:-1}
|
||||
- CHECK_PRICE=${CHECK_PRICE:-10}
|
||||
- IMG_PRICE=${IMG_PRICE:-100}
|
||||
|
||||
# База данных Oracle
|
||||
- db_user=${DB_USER}
|
||||
- db_password=${DB_PASSWORD}
|
||||
- db_dsn=${DB_DSN}
|
||||
|
||||
# Настройки приложения
|
||||
- DEBUG=${DEBUG:-0}
|
||||
- PYTHONUNBUFFERED=1
|
||||
- TZ=${TIMEZONE:-UTC}
|
||||
|
||||
# Монтируем volumes для логов и изображений
|
||||
volumes:
|
||||
- ./logs:/home/salvagebot/app/logs
|
||||
- ./images:/home/salvagebot/app/images:ro # read-only для изображений
|
||||
- ./data:/home/salvagebot/app/data # дополнительные данные если нужны
|
||||
|
||||
# Настройки сети
|
||||
networks:
|
||||
- salvagedb-network
|
||||
|
||||
# Ограничения ресурсов
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 512M
|
||||
cpus: '0.5'
|
||||
reservations:
|
||||
memory: 256M
|
||||
cpus: '0.25'
|
||||
|
||||
# Политика перезапуска
|
||||
restart: unless-stopped
|
||||
|
||||
# Зависимости (если есть другие сервисы)
|
||||
depends_on: []
|
||||
|
||||
# Логирование
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
# Проверка здоровья
|
||||
healthcheck:
|
||||
test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
# Дополнительные сервисы (если понадобятся)
|
||||
# nginx:
|
||||
# image: nginx:alpine
|
||||
# container_name: salvagedb-nginx
|
||||
# restart: unless-stopped
|
||||
# ports:
|
||||
# - "80:80"
|
||||
# - "443:443"
|
||||
# volumes:
|
||||
# - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
||||
# - ./nginx/ssl:/etc/nginx/ssl:ro
|
||||
# networks:
|
||||
# - salvagedb-network
|
||||
# depends_on:
|
||||
# - salvagedb-bot
|
||||
|
||||
# redis:
|
||||
# image: redis:7-alpine
|
||||
# container_name: salvagedb-redis
|
||||
# restart: unless-stopped
|
||||
# volumes:
|
||||
# - redis_data:/data
|
||||
# networks:
|
||||
# - salvagedb-network
|
||||
# command: redis-server --appendonly yes
|
||||
|
||||
# Определяем сети
|
||||
networks:
|
||||
salvagedb-network:
|
||||
driver: bridge
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 172.20.0.0/16
|
||||
|
||||
# Определяем volumes
|
||||
volumes:
|
||||
# redis_data:
|
||||
# driver: local
|
||||
logs_data:
|
||||
driver: local
|
||||
images_data:
|
||||
driver: local
|
||||
98
docker-entrypoint.sh
Normal file
98
docker-entrypoint.sh
Normal file
@ -0,0 +1,98 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Скрипт инициализации для Docker контейнера SalvageDB Bot
|
||||
set -e
|
||||
|
||||
echo "====================================================="
|
||||
echo "SalvageDB Telegram Bot - Docker Container Startup"
|
||||
echo "====================================================="
|
||||
|
||||
# Проверяем обязательные переменные окружения
|
||||
check_env_var() {
|
||||
if [ -z "${!1}" ]; then
|
||||
echo "❌ ERROR: Environment variable $1 is not set!"
|
||||
echo "Please check your .env file or docker-compose.yml"
|
||||
exit 1
|
||||
else
|
||||
echo "✅ $1 is configured"
|
||||
fi
|
||||
}
|
||||
|
||||
echo "🔍 Checking required environment variables..."
|
||||
check_env_var BOT_TOKEN
|
||||
check_env_var DB_USER
|
||||
check_env_var DB_PASSWORD
|
||||
check_env_var DB_DSN
|
||||
check_env_var ADMIN_USER_ID
|
||||
|
||||
echo ""
|
||||
echo "📋 Configuration Summary:"
|
||||
echo " • Bot Name: ${BOT_NAME:-'SalvageDB Bot'}"
|
||||
echo " • Debug Mode: ${DEBUG:-'0'}"
|
||||
echo " • Timezone: ${TZ:-'UTC'}"
|
||||
echo " • Decode Price: ${DECODE_PRICE:-'1'} ⭐"
|
||||
echo " • Check Price: ${CHECK_PRICE:-'10'} ⭐"
|
||||
echo " • Image Price: ${IMG_PRICE:-'100'} ⭐"
|
||||
echo " • Database DSN: ${DB_DSN}"
|
||||
echo " • Admin User ID: ${ADMIN_USER_ID}"
|
||||
|
||||
echo ""
|
||||
echo "📁 Creating directories..."
|
||||
mkdir -p /home/salvagebot/app/logs
|
||||
mkdir -p /home/salvagebot/app/images
|
||||
mkdir -p /home/salvagebot/app/data
|
||||
|
||||
echo "✅ Directory structure created"
|
||||
|
||||
echo ""
|
||||
echo "🐍 Testing Python environment..."
|
||||
python -c "
|
||||
import sys
|
||||
print(f'Python version: {sys.version}')
|
||||
print(f'Python path: {sys.executable}')
|
||||
"
|
||||
|
||||
echo ""
|
||||
echo "📦 Testing critical imports..."
|
||||
python -c "
|
||||
try:
|
||||
import aiogram
|
||||
print('✅ aiogram imported successfully')
|
||||
|
||||
import oracledb
|
||||
print('✅ oracledb imported successfully')
|
||||
|
||||
import asyncio
|
||||
print('✅ asyncio imported successfully')
|
||||
|
||||
import logging
|
||||
print('✅ logging imported successfully')
|
||||
|
||||
print('🎉 All critical dependencies are available')
|
||||
except ImportError as e:
|
||||
print(f'❌ Import error: {e}')
|
||||
exit(1)
|
||||
"
|
||||
|
||||
echo ""
|
||||
echo "🔗 Testing Oracle connectivity..."
|
||||
python -c "
|
||||
import oracledb
|
||||
import os
|
||||
|
||||
try:
|
||||
# Тестируем создание пула соединений (без подключения к БД)
|
||||
print('Testing Oracle client library...')
|
||||
print(f'Oracle client version: {oracledb.version}')
|
||||
print('✅ Oracle client is ready')
|
||||
except Exception as e:
|
||||
print(f'❌ Oracle client error: {e}')
|
||||
exit(1)
|
||||
"
|
||||
|
||||
echo ""
|
||||
echo "🚀 Starting SalvageDB Telegram Bot..."
|
||||
echo "====================================================="
|
||||
|
||||
# Запускаем основное приложение
|
||||
exec "$@"
|
||||
61
env.example
Normal file
61
env.example
Normal file
@ -0,0 +1,61 @@
|
||||
# ==================================================
|
||||
# SALVAGEDB TELEGRAM BOT - ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ
|
||||
# ==================================================
|
||||
|
||||
# --------------------------------------------------
|
||||
# TELEGRAM BOT НАСТРОЙКИ
|
||||
# --------------------------------------------------
|
||||
# Токен бота от @BotFather
|
||||
BOT_TOKEN=your_bot_token_here
|
||||
|
||||
# Имя бота (опционально)
|
||||
BOT_NAME=SalvageDB Bot
|
||||
|
||||
# ID администратора для возврата платежей и статистики
|
||||
ADMIN_USER_ID=123456789
|
||||
|
||||
# --------------------------------------------------
|
||||
# ЦЕНЫ НА УСЛУГИ (в Telegram Stars)
|
||||
# --------------------------------------------------
|
||||
# Цена за детальную информацию о VIN
|
||||
DECODE_PRICE=1
|
||||
|
||||
# Цена за детальную проверку повреждений
|
||||
CHECK_PRICE=10
|
||||
|
||||
# Цена за доступ к фотографиям
|
||||
IMG_PRICE=100
|
||||
|
||||
# --------------------------------------------------
|
||||
# БАЗА ДАННЫХ ORACLE
|
||||
# --------------------------------------------------
|
||||
# Пользователь базы данных
|
||||
DB_USER=your_db_user
|
||||
|
||||
# Пароль базы данных
|
||||
DB_PASSWORD=your_db_password
|
||||
|
||||
# DSN строка подключения к Oracle
|
||||
# Формат: host:port/service_name
|
||||
DB_DSN=localhost:1521/XEPDB1
|
||||
|
||||
# --------------------------------------------------
|
||||
# НАСТРОЙКИ ПРИЛОЖЕНИЯ
|
||||
# --------------------------------------------------
|
||||
# Режим отладки (0 = выключен, 1 = включен)
|
||||
DEBUG=0
|
||||
|
||||
# Часовой пояс
|
||||
TIMEZONE=UTC
|
||||
|
||||
# --------------------------------------------------
|
||||
# ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ (опционально)
|
||||
# --------------------------------------------------
|
||||
# Максимальный размер лог файла
|
||||
LOG_MAX_SIZE=10M
|
||||
|
||||
# Количество архивных лог файлов
|
||||
LOG_MAX_FILES=3
|
||||
|
||||
# Интервал очистки временных файлов (в часах)
|
||||
CLEANUP_INTERVAL=24
|
||||
9
main.py
9
main.py
@ -75,6 +75,15 @@ def setup_logging():
|
||||
logging.info(f"Log level: {logging.getLevelName(log_level)}")
|
||||
logging.info(f"Logs directory: {os.path.abspath(logs_dir)}")
|
||||
logging.info(f"Log rotation: daily, keeping 30 days")
|
||||
|
||||
# Проверяем запуск в Docker
|
||||
if os.path.exists('/.dockerenv'):
|
||||
logging.info("Running inside Docker container")
|
||||
logging.info(f"Container timezone: {getenv('TZ', 'UTC')}")
|
||||
logging.info(f"Container user: {getenv('USER', 'unknown')}")
|
||||
else:
|
||||
logging.info("Running on host system")
|
||||
|
||||
logging.info("=== LOGGING SETUP COMPLETE ===")
|
||||
|
||||
|
||||
|
||||
20
requirements.txt
Normal file
20
requirements.txt
Normal file
@ -0,0 +1,20 @@
|
||||
# Telegram Bot Framework
|
||||
aiogram==3.13.1
|
||||
|
||||
# Oracle Database
|
||||
oracledb==2.5.0
|
||||
|
||||
# Async HTTP client (зависимость aiogram)
|
||||
aiohttp==3.10.11
|
||||
|
||||
# Дополнительные зависимости для работы с данными
|
||||
typing-extensions==4.12.2
|
||||
|
||||
# Для работы с датами и временем
|
||||
python-dateutil==2.9.0
|
||||
|
||||
# Для логирования (встроенно в Python, но для совместимости)
|
||||
# logging - встроенно
|
||||
|
||||
# Для работы с переменными окружения
|
||||
python-dotenv==1.0.1
|
||||
Loading…
x
Reference in New Issue
Block a user