From d7739ca20344e8a1e257510328d20ac2babe0cc3 Mon Sep 17 00:00:00 2001 From: Egor Deev Date: Fri, 2 Oct 2026 12:10:57 +0000 Subject: [PATCH] =?UTF-8?q?Docker:=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=20?= =?UTF-8?q?=D0=BD=D0=B0=20python:3.12-slim,=20compose=20=D1=81=20=D1=82?= =?UTF-8?q?=D0=BE=D0=BC=D0=BE=D0=BC=20=D0=B4=D0=BB=D1=8F=20=D0=B1=D0=B0?= =?UTF-8?q?=D0=B7=D1=8B=20=D0=B8=20media?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dockerfile: collectstatic при сборке, gunicorn, непривилегированный пользователь, база и загрузки в томе /data, миграции при старте; - compose.yaml для запуска одной командой, .env.example со всеми переменными. --- .dockerignore | 14 ++++++++++++++ .env.example | 32 ++++++++++++++++++++++++++++++++ Dockerfile | 23 +++++++++++++++++++++++ compose.yaml | 20 ++++++++++++++++++++ 4 files changed, 89 insertions(+) create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 Dockerfile create mode 100644 compose.yaml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ae27c87 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,14 @@ +.git +.github +**/__pycache__ +*.pyc +.venv +venv +.env +db.sqlite3 +media +staticfiles +logs +docs +*.md +!requirements*.txt diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..91ac412 --- /dev/null +++ b/.env.example @@ -0,0 +1,32 @@ +# Django +DJANGO_SECRET_KEY=change-me-to-a-long-random-string +DJANGO_DEBUG=False +DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1 +# DJANGO_CSRF_TRUSTED_ORIGINS=https://example.com +# DJANGO_SECURE_SSL_REDIRECT=True +# DJANGO_DB_PATH=/data/db.sqlite3 +# DJANGO_MEDIA_ROOT=/data/media +# DJANGO_SERVE_MEDIA=False + +# Yandex SmartCaptcha (форма обратной связи) +SMARTCAPTCHA_CLIENT_KEY= +SMARTCAPTCHA_SERVER_KEY= + +# Автопостинг новых статей (по умолчанию выключен) +SOCIAL_AUTOPOST=False +TELEGRAM_BOT_TOKEN= +TELEGRAM_CHANNEL_ID= +VK_ACCESS_TOKEN= +VK_GROUP_ID= + +# Уведомления владельцу о сообщениях с формы (AlertBot) +ALERTBOT_TOKEN= +ALERTBOT_CHAT_ID= + +# Почта +EMAIL_HOST=smtp.yandex.ru +EMAIL_PORT=465 +EMAIL_HOST_USER= +EMAIL_HOST_PASSWORD= +DEFAULT_FROM_EMAIL= +CONTACT_EMAIL= diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..284c050 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +FROM python:3.12-slim + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + DJANGO_DB_PATH=/data/db.sqlite3 \ + DJANGO_MEDIA_ROOT=/data/media + +WORKDIR /app + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . +RUN DJANGO_SECRET_KEY=build-only python manage.py collectstatic --noinput \ + && useradd --create-home --uid 1000 app \ + && mkdir -p /data/media logs \ + && chown -R app:app /data logs + +USER app +VOLUME ["/data"] +EXPOSE 8000 + +CMD ["sh", "-c", "python manage.py migrate --noinput && gunicorn dspace.wsgi:application --bind 0.0.0.0:8000 --workers 3 --access-logfile -"] diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..43695ca --- /dev/null +++ b/compose.yaml @@ -0,0 +1,20 @@ +services: + web: + build: . + image: ghcr.io/edeev/deev.space:latest + ports: + - "8000:8000" + env_file: + - path: .env + required: false + environment: + DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:-change-me-to-a-long-random-string} + DJANGO_ALLOWED_HOSTS: ${DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1} + DJANGO_SECURE_SSL_REDIRECT: "False" + DJANGO_SERVE_MEDIA: "True" + volumes: + - data:/data + restart: unless-stopped + +volumes: + data: