Django docker-compose: как обрабатывать миграции и собирать статику
У меня есть приложение django, которое я пытаюсь "докеризировать". Я довольно близок к этому, но столкнулся с небольшой проблемой.
По сути, я пытаюсь понять, как мне справиться с тем, что каждый раз, когда я запускаю docker-compose, я должен запускать python manage.py migrate
.
Есть предложения? Ниже мой dockerfile и мой dockercompose. Если они совершенно неправильные, пожалуйста, сообщите мне об этом.
# pull official base image
FROM python:3.10-alpine
# set work directory
WORKDIR /app
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV DEBUG 0
# install psycopg2
RUN apk update \
&& apk add --virtual build-essential libffi-dev gcc python3-dev musl-dev \
&& apk add postgresql-dev \
&& pip install psycopg2
# install dependencies
COPY ./requirements.txt .
RUN pip install -r requirements.txt
# copy project
COPY . .
# add and run as non-root user
RUN adduser -D miliu
USER miliu
# run gunicorn
# CMD gunicorn mywebsite.wsgi:application --bind 0.0.0.0:$PORT
CMD python ./manage.py collectstatic --noinput
version: "3.8"
services:
web:
build: .
volumes:
- .:/django
ports:
- 8000:8000
env_file: .env
image: miliu
container_name: miliu_container
command: >
sh -c "python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
depends_on:
- db
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
command: postgres -c password_encryption=md5
container_name: postgres_db
#platform: linux/x86_64
#image: mysql:5.7
#environment:
# MYSQL_DATABASE: 'django-app-db'
# MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
#volumes:
# - ./data/mysql/db:/var/lib/mysql