feat: Add Docker support with Dockerfile and entrypoint script.
This commit is contained in:
@@ -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"]
|
||||||
|
|||||||
@@ -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 "$@"
|
||||||
|
|||||||
Reference in New Issue
Block a user