Docker django nginx gunicorn mysql

Trong quá trình phát triển ứng dụng, một giai đoạn quan trọng, mang tính quyết định là thúc đẩy sản xuất hoặc làm cho ứng dụng sẵn sàng sản xuất. Một số cấu hình cần được thực hiện để đảm bảo không có sự cố, chẳng hạn như vi phạm bảo mật hoặc để lộ các cấu hình nhạy cảm như khóa bí mật. Phát triển web Django không khác. Cách ứng dụng chạy trong quá trình phát triển rất khác so với cách ứng dụng chạy trong sản xuất

Để phục vụ trong sản xuất, ứng dụng Django cần phải có

  1. Giao diện cổng máy chủ web ổn định và đáng tin cậy [WSGI] để nhận các yêu cầu HTTP
  2. Một máy chủ proxy cũng có thể hoạt động như một bộ cân bằng tải trong trường hợp ứng dụng Django nhận được lưu lượng truy cập HTTP lớn

Hướng dẫn này sẽ khám phá cách thiết lập ứng dụng Django với Gunicorn làm WSGI và NGINX làm máy chủ proxy. Để dễ thiết lập, hướng dẫn sẽ đóng gói tất cả những thứ này bằng Docker. Do đó, giả định rằng bạn có ít nhất kinh nghiệm ở trình độ trung cấp với Docker và Docker Compose và ít nhất là các kỹ năng ở trình độ mới bắt đầu trong Django

Tạo một ứng dụng Django mẫu

Ứng dụng sẽ là một ứng dụng Django đơn giản hiển thị thông báo "xin chào thế giới" bằng cách sử dụng HTTPResponse. Mã khởi động cho ứng dụng có thể được tìm thấy tại liên kết github này

Tải xuống và sử dụng nó cho phần còn lại của hướng dẫn

Đóng gói ứng dụng Django bằng Docker

Đối với ứng dụng nhiều vùng chứa, hoạt động này được thực hiện theo hai giai đoạn. 1] phát triển tệp Docker cho ứng dụng chính và 2] ghép mọi thứ với phần còn lại của bộ chứa bằng Docker Compose

Tệp Docker ứng dụng

Tệp Docker rất đơn giản. Nó thiết lập ứng dụng Django trong hình ảnh của chính nó

1FROM python:3.8.3-alpine
2
3ENV MICRO_SERVICE=/home/app/microservice
4RUN addgroup -S $APP_USER && adduser -S $APP_USER -G $APP_USER
5# set work directory
6
7
8RUN mkdir -p $MICRO_SERVICE
9RUN mkdir -p $MICRO_SERVICE/static
10
11# where the code lives
12WORKDIR $MICRO_SERVICE
13
14# set environment variables
15ENV PYTHONDONTWRITEBYTECODE 1
16ENV PYTHONUNBUFFERED 1
17
18# install psycopg2 dependencies
19RUN apk update \
20    && apk add --virtual build-deps gcc python3-dev musl-dev \
21    && apk add postgresql-dev gcc python3-dev musl-dev \
22    && apk del build-deps \
23    && apk --no-cache add musl-dev linux-headers g++
24# install dependencies
25RUN pip install --upgrade pip
26# copy project
27COPY . $MICRO_SERVICE
28RUN pip install -r requirements.txt
29COPY ./entrypoint.sh $MICRO_SERVICE
30
31CMD ["/bin/bash", "/home/app/microservice/entrypoint.sh"]

dockerfile

Dự án Docker Soạn tệp

Docker Compose sẽ đạt được những điều sau

  1. Quay lên ba hình ảnh. Hình ảnh ứng dụng Nginx, Postgres và Django

  2. Xác định thứ tự chạy. Bộ chứa Postgres sẽ chạy trước, tiếp theo là bộ chứa Django và cuối cùng là bộ chứa Nginx

Để xây dựng hoàn chỉnh bộ chứa Nginx, bạn cần có các tệp Docker và conf đặc biệt cho bộ chứa đó. Trong thư mục sampleApp của bạn, hãy tạo một thư mục có tên nginx . Trong thư mục ______8 , tạo một dockerfile và sao chép khối mã bên dưới.

1FROM nginx:1.19.0-alpine
2
3RUN rm /etc/nginx/conf.d/default.conf
4COPY nginx.conf /etc/nginx/conf.d

dockerfile

Trong cùng một thư mục, hãy tạo một tệp có tên

1FROM nginx:1.19.0-alpine
2
3RUN rm /etc/nginx/conf.d/default.conf
4COPY nginx.conf /etc/nginx/conf.d
0 và sao chép khối mã bên dưới. Đây là mã chịu trách nhiệm thiết lập nginx.

1upstream sampleapp {
2    server web:8000;
3}
4
5server {
6
7    listen 80;
8
9    location / {
10        proxy_pass //sampleapp;
11        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
12        proxy_set_header Host $host;
13        proxy_redirect off;
14    }
15    location /static/ {
16        alias /home/app/microservice/static/;
17    }
18
19}

conf

Sau khi hoàn tất, hãy tạo tệp

1FROM nginx:1.19.0-alpine
2
3RUN rm /etc/nginx/conf.d/default.conf
4COPY nginx.conf /etc/nginx/conf.d
1 chính. Đây sẽ là file chịu trách nhiệm chạy toàn bộ project. Trong thư mục dự án chính, sampleApp , tạo một tệp có tên
1FROM nginx:1.19.0-alpine
2
3RUN rm /etc/nginx/conf.d/default.conf
4COPY nginx.conf /etc/nginx/conf.d
1
và .

1version: '3.7'
2
3services:
4  nginx:
5    build: ./nginx
6    ports:
7      - 1300:80
8    volumes:
9      - static_volume:/home/app/microservice/static
10    depends_on:
11      - web
12    restart: "on-failure"
13  web:
14    build: . #build the image for the web service from the dockerfile in parent directory
15    command: sh -c "python manage.py makemigrations &&
16                    python manage.py migrate &&
17                    python manage.py initiate_admin &&
18                    python manage.py collectstatic &&
19                    gunicorn sampleApp.wsgi:application --bind 0.0.0.0:${APP_PORT}"
20    volumes:
21      - .:/microservice:rw # map data and files from parent directory in host to microservice directory in docker containe
22      - static_volume:/home/app/microservice/static
23    env_file:
24      - .env
25    image: sampleapp
26
27    expose:
28      - ${APP_PORT}
29    restart: "on-failure"
30    depends_on:
31      - db
32  db:
33    image: postgres:11-alpine
34    volumes:
35      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
36      - postgres_data:/var/lib/postgresql/data/
37    environment:
38      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
39      - POSTGRES_DB=${DB_NAME}
40      - PGPORT=${DB_PORT}
41      - POSTGRES_USER=${POSTGRES_USER}
42    restart: "on-failure"
43
44
45volumes:
46  postgres_data:
47  static_volume:

dockerfile

Thử nghiệm ứng dụng Dockerized trực tiếp

Toàn bộ dự án được thiết lập và tất cả những gì còn lại là chạy nó. Chạy lệnh Docker Compose bên dưới để quay vòng các thùng chứa

1docker-compose up --build

đánh đập

Để kiểm tra xem toàn bộ dự án có hoạt động hay không, từ cơ sở dữ liệu, ứng dụng và bộ chứa nginx, hãy truy cập trang chủ và trang quản trị của ứng dụng. Trang chủ, URL ______12 , sẽ hiển thị một thông báo "xin chào thế giới" đơn giản.

URL trang quản trị là

1FROM nginx:1.19.0-alpine
2
3RUN rm /etc/nginx/conf.d/default.conf
4COPY nginx.conf /etc/nginx/conf.d
3 . Sử dụng thông tin đăng nhập kiểm tra.

tên tài khoản. quản trị viên

mật khẩu mở khóa. mypass123

Bạn sẽ thấy một màn hình như bên dưới.

Đây là giao diện của trang quản trị.

Sự kết luận

Làm cho ứng dụng Django sẵn sàng sản xuất chỉ từ các tập lệnh khai báo trong Docker là một lợi thế lớn cho trưởng nhóm và người quản lý dự án. Nó cung cấp cho họ khả năng thực hiện cấu hình trước, cho phép các nhà phát triển tập trung vào phát triển ứng dụng. Thực tiễn này không chỉ tạo ra cảm giác đồng nhất trong thực tiễn triển khai mà còn tiết kiệm thời gian quan trọng bằng cách cho phép các nhà phát triển tập trung vào phát triển ứng dụng và logic kinh doanh thay vì thiết lập và triển khai

Biết cách đóng gói ứng dụng Django thành ứng dụng sẵn sàng để triển khai trong môi trường sản xuất là rất quan trọng đối với các vai trò của nhà phát triển như kỹ sư DevOps và full-stack quan tâm đến Python cho web

Để tiếp tục xây dựng dựa trên những kỹ năng này, hãy vượt qua thử thách triển khai ứng dụng đóng gói lên máy chủ trực tiếp. Chọn nhà cung cấp phù hợp. Các tùy chọn bao gồm Linode, GCP, Digital Ocean và AWS, trong số các nhà cung cấp dịch vụ đám mây khác

Chủ Đề