Docker搭建Django環境(nginx + uwsgi + django)

由於Docker官方提供的Django很久都沒有更新
所以使用官方的python鏡像,在此基礎上再安裝django和uwsgi
注意:一定要聲明端口,因爲使用其他容器如nginx時,需要訪問到

FROM python:3.6.4-stretch
 
RUN pip install django uwsgi;
 
EXPOSE 80

另外使用官方的nginx鏡像,將兩個容器一起運行
整個流程是 客戶端(瀏覽器) -> nginx -> uwsgi -> django(python)

通過定義docker-compose.yml來將兩個容器運行起來

nginx:
    container_name: nginx
    image: registry.cn-shenzhen.aliyuncs.com/beni/nginx:latest
    ports:
        - 80:80
    volumes:
        - C:/data/django/nginx:/etc/nginx/conf.d
        - C:/data/django/www:/data/django/www
    links:
        - django:django
 
django:
    container_name: django
    image: registry.cn-shenzhen.aliyuncs.com/beni/django:latest
    volumes:
        - C:/data/django/www:/data/django/www
    command: uwsgi --ini /data/django/www/mblog/uwsgi.ini

uwsgi需要先啓動起來,nginx才能去訪問,啓動uwsgi可以直接命令行帶參數,或者可以寫ini的配置文件去啓動(這樣會更新維護和管理)
這裏涉及非常多的參數,目前還沒完全搞懂
注意:一定要使用socket定義,並且跟nginx定義的端口一致,並且跟容器暴露的端口一致
注意:路徑問題一定要處理好,這裏是定義chdir跳去django項目的目錄

[uwsgi]
chdir     = /data/django/www/mblog
module    = mblog.wsgi
socket    = :80
processes = 4
threads   = 10
enable-threads
master-as-root

nginx需要修改配置去指向uwsgi,並且要指定static資源,這裏只列出關鍵的位置

location /static {
    alias /data/django/www/mblog/static;
}
location / {
    include uwsgi_params;
    uwsgi_pass django:80;
}

需要在settings.py文件中指定static目錄,如果不指定會導致無法執行collectstatic
STATIC_ROOT = os.path.join(BASE_DIR, “static/”)

執行collectstatic將所有靜態文件都整理到指定目錄
python manage.py collectstatic

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章