diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..434ca95 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +.git/ +bin/ +backups/ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..2bee485 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# tg_autopost + diff --git a/docker-compose.yml b/docker-compose.yml index 817e36a..6685c93 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.9" - services: db: build: @@ -8,21 +6,25 @@ services: container_name: mariadb restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD: rootpass - MYSQL_DATABASE: tg_autopost - MYSQL_USER: tguser - MYSQL_PASSWORD: tgpass + MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} + MYSQL_DATABASE: ${DB_NAME} + MYSQL_USER: ${DB_USER} + MYSQL_PASSWORD: ${DB_PASSWORD} ports: - - "3306:3306" + - "${DB_PORT}:3306" volumes: - - ./app/var/lib/mysql:/var/lib/mysql + - ./db_storage/mysql:/var/lib/mysql + env_file: + - .env redis: image: redis:7.2 container_name: redis restart: unless-stopped ports: - - "6379:6379" + - "${REDIS_PORT}:6379" + env_file: + - .env django: build: @@ -31,7 +33,7 @@ services: container_name: django command: python manage.py runserver 0.0.0.0:8000 volumes: - - ./app:/app + - .:/app ports: - "8000:8000" env_file: @@ -47,7 +49,7 @@ services: container_name: bot command: python manage.py runbot volumes: - - ./app:/app + - .:/app env_file: - .env depends_on: @@ -61,7 +63,7 @@ services: container_name: celery_worker command: celery -A tg_autopost worker -l info volumes: - - ./app:/app + - .:/app env_file: - .env depends_on: @@ -75,7 +77,7 @@ services: container_name: celery_beat command: celery -A tg_autopost beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler volumes: - - ./app:/app + - .:/app env_file: - .env depends_on: diff --git a/docker/bot/Dockerfile b/docker/bot/Dockerfile index c1961de..f744df0 100644 --- a/docker/bot/Dockerfile +++ b/docker/bot/Dockerfile @@ -2,14 +2,7 @@ FROM python:3.12-slim WORKDIR /app -RUN apt-get update && apt-get install -y \ - build-essential \ - libmariadb-dev \ - libmariadb-dev-compat \ - pkg-config \ - && rm -rf /var/lib/apt/lists/* +COPY docker/bot/requirements.txt /tmp/requirements.txt +RUN pip install --no-cache-dir -r /tmp/requirements.txt -COPY requirements.txt /app/ -RUN pip install --no-cache-dir -r requirements.txt - -COPY app /app +COPY . /app diff --git a/docker/bot/requirements.txt b/docker/bot/requirements.txt new file mode 100644 index 0000000..8096edf --- /dev/null +++ b/docker/bot/requirements.txt @@ -0,0 +1,3 @@ +python-telegram-bot>=21.6 +pytz>=2024.1 +python-dateutil>=2.9.0 diff --git a/docker/celery/Dockerfile b/docker/celery/Dockerfile index c1961de..c28afff 100644 --- a/docker/celery/Dockerfile +++ b/docker/celery/Dockerfile @@ -9,7 +9,7 @@ RUN apt-get update && apt-get install -y \ pkg-config \ && rm -rf /var/lib/apt/lists/* -COPY requirements.txt /app/ -RUN pip install --no-cache-dir -r requirements.txt +COPY docker/celery/requirements.txt /tmp/requirements.txt +RUN pip install --no-cache-dir -r /tmp/requirements.txt -COPY app /app +COPY . /app diff --git a/docker/celery/requirements.txt b/docker/celery/requirements.txt new file mode 100644 index 0000000..98b6880 --- /dev/null +++ b/docker/celery/requirements.txt @@ -0,0 +1,4 @@ +celery>=5.4.0 +redis>=5.0.4 +pytz>=2024.1 +python-dateutil>=2.9.0 diff --git a/docker/db/conf.d/custom.cnf b/docker/db/conf.d/custom.cnf new file mode 100644 index 0000000..06d2729 --- /dev/null +++ b/docker/db/conf.d/custom.cnf @@ -0,0 +1,26 @@ +[mysqld] +# Кодировка и сравнение по умолчанию +character-set-server = utf8mb4 +collation-server = utf8mb4_unicode_ci + +# Разрешить большие пакеты (для больших вставок и дампов) +max_allowed_packet = 256M + +# Оптимизация кеша +query_cache_type = 1 +query_cache_size = 64M + +# Логи медленных запросов (для диагностики) +slow_query_log = 1 +long_query_time = 2 +slow_query_log_file = /var/lib/mysql/mysql-slow.log + +# Увеличение соединений +max_connections = 500 + +# Таймауты +wait_timeout = 28800 +interactive_timeout = 28800 + +# Временная зона сервера +default_time_zone = '+09:00' diff --git a/docker/db/requirements.txt b/docker/db/requirements.txt new file mode 100644 index 0000000..a10b676 --- /dev/null +++ b/docker/db/requirements.txt @@ -0,0 +1,24 @@ +# Django +Django>=5.0,<6.0 +django-environ>=0.11.2 +django-celery-beat>=2.6.0 +django-celery-results>=2.5.1 + +# Telegram Bot +python-telegram-bot>=21.6 + +# База данных (MariaDB/MySQL) +mysqlclient>=2.2.4 # Для работы Django с MariaDB + +# Celery +celery>=5.4.0 +redis>=5.0.4 + +# Для работы с временными зонами и датами +pytz>=2024.1 +python-dateutil>=2.9.0 + +# Dev utils +black>=24.3.0 # автоформатирование +flake8>=7.0.0 # линтер +ipython>=8.22.0 # интерактивная консоль diff --git a/docker/main/Dockerfile b/docker/main/Dockerfile index fd68d7f..78c66ea 100644 --- a/docker/main/Dockerfile +++ b/docker/main/Dockerfile @@ -9,9 +9,9 @@ RUN apt-get update && apt-get install -y \ pkg-config \ && rm -rf /var/lib/apt/lists/* -COPY requirements.txt /app/ -RUN pip install --no-cache-dir -r requirements.txt +COPY docker/main/requirements.txt /tmp/requirements.txt +RUN pip install --no-cache-dir -r /tmp/requirements.txt -COPY app /app +COPY . /app EXPOSE 8000 diff --git a/docker/main/requirements.txt b/docker/main/requirements.txt new file mode 100644 index 0000000..27469c1 --- /dev/null +++ b/docker/main/requirements.txt @@ -0,0 +1,8 @@ +Django>=5.0,<6.0 +django-environ>=0.11.2 +django-celery-beat>=2.6.0 +django-celery-results>=2.5.1 +mysqlclient>=2.2.4 +pytz>=2024.1 +python-dateutil>=2.9.0 +pillow>=10.0.0 \ No newline at end of file diff --git a/docker/utils/Dockerfile b/docker/utils/Dockerfile index cd8a78f..14a2733 100644 --- a/docker/utils/Dockerfile +++ b/docker/utils/Dockerfile @@ -10,8 +10,9 @@ RUN apt-get update && apt-get install -y \ pkg-config \ && rm -rf /var/lib/apt/lists/* -COPY requirements.txt /app/ -RUN pip install --no-cache-dir -r requirements.txt +COPY docker/utils/requirements.txt /tmp/requirements.txt +RUN pip install --no-cache-dir -r /tmp/requirements.txt + COPY . /app/ diff --git a/docker/utils/requirements.txt b/docker/utils/requirements.txt new file mode 100644 index 0000000..15061ca --- /dev/null +++ b/docker/utils/requirements.txt @@ -0,0 +1,3 @@ +black>=24.3.0 +flake8>=7.0.0 +ipython>=8.22.0 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..a10b676 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,24 @@ +# Django +Django>=5.0,<6.0 +django-environ>=0.11.2 +django-celery-beat>=2.6.0 +django-celery-results>=2.5.1 + +# Telegram Bot +python-telegram-bot>=21.6 + +# База данных (MariaDB/MySQL) +mysqlclient>=2.2.4 # Для работы Django с MariaDB + +# Celery +celery>=5.4.0 +redis>=5.0.4 + +# Для работы с временными зонами и датами +pytz>=2024.1 +python-dateutil>=2.9.0 + +# Dev utils +black>=24.3.0 # автоформатирование +flake8>=7.0.0 # линтер +ipython>=8.22.0 # интерактивная консоль