Django, Nginx и Docker. РАЗРАБОТКА
Я хочу развернуть свое приложение, созданное на основе django и flutter, и я использовал docker для докеризации django и nginx. Вот что у меня есть на данный момент и что я должен добавить или изменить:
docker-compose.yaml:
version: '3.8'
services:
api:
build:
context: ./api
command: gunicorn myproject.wsgi:application --bind 0.0.0.0:8000
volumes:
- ./api:/app/
- static:/app/static/
expose:
- 8000
depends_on:
- db
db:
image: postgres:latest
volumes:
- data:/var/lib/postgresql/data/
server:
build:
context: ./server
volumes:
- static:/app/static/
- media:/app/media/
- certs:/etc/nginx/certs
ports:
- 443:443
- 80:80
certbot:
image: certbot/certbot
depends_on:
- api
volumes:
data:
static:
media:
certs:
dockerfile (django):
FROM python:latest
ENV SECRET_KEY 123
ENV DATABASE_PASSWORD postgres
ENV DEBUG 0
RUN mkdir /app
WORKDIR /app
COPY . .
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
RUN python manage.py collectstatic --no-input
dockerfile (nginx):
FROM nginx:latest
RUN mkdir /server
RUN rm /etc/nginx/conf.d/default.conf
COPY ./nginx.conf /etc/nginx/conf.d/
WORKDIR /server
nginx.conf:
server {
listen 80;
server_name mydomain.com
return 301 https://$server_name$request_uri;
location / {
proxy_pass http://server;
}
location /static/ {
alias /server/static/;
}
}
server {
listen 443 ssl;
server_name mydomain.com;
}
Спасибо за ваше время
Я пытался искать в Интернете, но не смог найти много ответов
Я не эксперт, но:
Docker Compose file:
- Важный момент, используйте файл .env и конфигурационный параметр env_file для хранения ваших секретов.
- Удалите bind mount из службы api .
- Медиа том не существует на api сервисе, следовательно, не разделяется с прокси (внутри этого тома ничего не будет?)
Dockerfile (Django):
- Рассмотрите возможность использования фиксированной версии Python, иначе при перестройке могут возникнуть конфликты. (Вы можете тестировать и обновлять в dev environ) .
- Перемещайте переменные окружения в файл .env, чтобы скрыть свои секреты.
- Подумайте о добавлении и удалении временных файлов (и libs) после того, как вы их использовали, например:
RUN pip install -r requirements.txt && \
rm requirements.txt
(Еще лучше, если вы добавите их в папку /temp, а затем удалите папку)
- Насколько я знаю, есть и другие хорошие практики, такие как создание пользователя для запуска приложения для ограничения привилегий (вместо запуска с правами root). Иметь сценарий оболочки в качестве точки входа и т.д. .
nginx.conf:
- Статический URL неверен? Нет такого каталога /server/static.