feat: Add Docker support with Dockerfile and entrypoint script.

This commit is contained in:
2026-01-17 16:54:26 +03:00
parent 62480db8af
commit c8205cc6f3
2 changed files with 27 additions and 10 deletions

View File

@@ -40,7 +40,14 @@ RUN mkdir -p /app/staticfiles /app/media
# Создаём непривилегированного пользователя
RUN useradd -m -u 1000 appuser
# Копируем entrypoint скрипт
# Установка gosu для безопасного понижения привилегий
RUN set -eux; \
apt-get update; \
apt-get install -y gosu; \
rm -rf /var/lib/apt/lists/*; \
# Проверка работы gosu
gosu nobody true
# Копируем entrypoint скрипт
COPY docker/entrypoint.sh /entrypoint.sh
COPY docker/create_public_tenant.py /app/docker/create_public_tenant.py
@@ -49,13 +56,13 @@ RUN chmod 755 /entrypoint.sh && chown appuser:appuser /entrypoint.sh
# Меняем владельца рабочей директории
RUN chown -R appuser:appuser /app
USER appuser
# USER appuser - УДАЛЕНО: запускаем entrypoint от root для настройки прав
# Порт приложения
EXPOSE 8000
# Точка входа (запускаем через bash явно, чтобы избежать ошибок Permission denied)
# Точка входа
ENTRYPOINT ["/bin/bash", "/entrypoint.sh"]
# Команда по умолчанию (будет переопределена в docker-compose)
# Команда по умолчанию
CMD ["web"]

View File

@@ -202,7 +202,7 @@ case "$1" in
run_migrations
create_platform_admin
echo "Starting Gunicorn..."
exec gunicorn myproject.wsgi:application \
exec gosu appuser gunicorn myproject.wsgi:application \
--bind 0.0.0.0:8000 \
--workers 3 \
--threads 2 \
@@ -216,7 +216,7 @@ case "$1" in
wait_for_redis
setup_directories
echo "Starting Celery Worker for photo processing and product import..."
exec celery -A myproject worker \
exec gosu appuser celery -A myproject worker \
-l info \
--concurrency=4
;;
@@ -224,18 +224,28 @@ case "$1" in
wait_for_postgres
wait_for_redis
echo "Starting Celery Beat..."
exec celery -A myproject beat -l info
exec gosu appuser celery -A myproject beat -l info
;;
migrate)
wait_for_postgres
run_migrations
# Миграции тоже запускаем от gosu
gosu appuser python manage.py migrate_schemas --shared
gosu appuser python manage.py migrate_schemas --tenant
gosu appuser python manage.py collectstatic --noinput
# Права уже выставлены setup_directories (который запускается перед этим в case web/celery,
# но для migrate мы можем вызвать его явно или просто поправить права на статику)
# В данном блоке setup_directories не вызывался в оригинальном скрипте, но лучше вызвать если хотим гарантий
# setup_directories
# Для migrate обычно важно просто создать схемы.
create_platform_admin
;;
collectstatic)
wait_for_postgres
setup_directories
echo "Collecting static files..."
python manage.py collectstatic --noinput
gosu appuser python manage.py collectstatic --noinput
echo "Setting permissions on static files..."
STATIC_ROOT="/app/myproject/staticfiles"
find "$STATIC_ROOT" -type d -exec chmod 755 {} \; 2>/dev/null || true
@@ -243,7 +253,7 @@ case "$1" in
echo "Static files collected and permissions set."
;;
shell)
exec python manage.py shell
exec gosu appuser python manage.py shell
;;
*)
exec "$@"