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 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 скрипт # Копируем entrypoint скрипт
COPY docker/entrypoint.sh /entrypoint.sh COPY docker/entrypoint.sh /entrypoint.sh
COPY docker/create_public_tenant.py /app/docker/create_public_tenant.py 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 RUN chown -R appuser:appuser /app
USER appuser # USER appuser - УДАЛЕНО: запускаем entrypoint от root для настройки прав
# Порт приложения # Порт приложения
EXPOSE 8000 EXPOSE 8000
# Точка входа (запускаем через bash явно, чтобы избежать ошибок Permission denied) # Точка входа
ENTRYPOINT ["/bin/bash", "/entrypoint.sh"] ENTRYPOINT ["/bin/bash", "/entrypoint.sh"]
# Команда по умолчанию (будет переопределена в docker-compose) # Команда по умолчанию
CMD ["web"] CMD ["web"]

View File

@@ -202,7 +202,7 @@ case "$1" in
run_migrations run_migrations
create_platform_admin create_platform_admin
echo "Starting Gunicorn..." echo "Starting Gunicorn..."
exec gunicorn myproject.wsgi:application \ exec gosu appuser gunicorn myproject.wsgi:application \
--bind 0.0.0.0:8000 \ --bind 0.0.0.0:8000 \
--workers 3 \ --workers 3 \
--threads 2 \ --threads 2 \
@@ -216,7 +216,7 @@ case "$1" in
wait_for_redis wait_for_redis
setup_directories setup_directories
echo "Starting Celery Worker for photo processing and product import..." echo "Starting Celery Worker for photo processing and product import..."
exec celery -A myproject worker \ exec gosu appuser celery -A myproject worker \
-l info \ -l info \
--concurrency=4 --concurrency=4
;; ;;
@@ -224,18 +224,28 @@ case "$1" in
wait_for_postgres wait_for_postgres
wait_for_redis wait_for_redis
echo "Starting Celery Beat..." echo "Starting Celery Beat..."
exec celery -A myproject beat -l info exec gosu appuser celery -A myproject beat -l info
;; ;;
migrate) migrate)
wait_for_postgres 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 create_platform_admin
;; ;;
collectstatic) collectstatic)
wait_for_postgres wait_for_postgres
setup_directories setup_directories
echo "Collecting static files..." echo "Collecting static files..."
python manage.py collectstatic --noinput gosu appuser python manage.py collectstatic --noinput
echo "Setting permissions on static files..." echo "Setting permissions on static files..."
STATIC_ROOT="/app/myproject/staticfiles" STATIC_ROOT="/app/myproject/staticfiles"
find "$STATIC_ROOT" -type d -exec chmod 755 {} \; 2>/dev/null || true 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." echo "Static files collected and permissions set."
;; ;;
shell) shell)
exec python manage.py shell exec gosu appuser python manage.py shell
;; ;;
*) *)
exec "$@" exec "$@"