Djano + Nginx + docker配置與管理
在配置這個服務之前,應該對docker的基本安裝與使用應該很熟悉了。下面開始直接不如正題
1.讓我們創建一個名為myproject的空目錄,並在src名稱內添加另一個文件夾。src應該包含django項目。為了測試目的,讓一個簡單的django項目在名為mydjango的內部。
2.讓我們在myproject中創建一個子目錄並命名為config。讓我們把一個requirement.pip
文件放到配置文件中,然後寫下這些行:
Django==1.10 gunicorn==19.6.0 psycopg2==2.6.2
記住: 這裏面包含的是你第一次創建時會下載的安裝包,如果你少裝了或者不清楚安裝什麽,也可以在你的doker服務起來之後進去安裝,例如你的docker web服務的ID是123dsfsdf,你可以使用命令
# docker exec -it 123dsfsdf /bin/sh # pip install ***
3.現在,做一個Dockerfile
內部的myproject。這應該包含以下幾行:
FROM python:3.5 ENV PYTHONUNBUFFERED 1 RUN mkdir /config ADD /config/requirements.pip /config/ RUN pip install -r /config/requirements.pip RUN mkdir /src; WORKDIR /src
如果你對dockerfile裏面的命令有什麽不熟悉的可以先去了解了解docker的基本命令。
4.然後開始創建一個名為docker-compose.yml
中的myproject目錄,用於docker-compose up 啟動時執行的腳本路徑。
該docker-compose.yml
文件描述了制作您的應用的服務。在這裏,我們需要一個Web服務(Django + Gunicorn),一個數據庫(Postgres)和代理服務器(Nginx)。它還描述了這些服務將使用哪些Docker映像,它們將如何鏈接在一起,以及它們可能需要裝入容器內的任何卷。最後,該docker-compose.yml
文件描述了這些服務公開哪些端口。有關此文件如何工作的更多信息,不要忘了 通過運行將docker-compose
version: ‘2‘ services: nginx: image: nginx:latest container_name: ng01 ports: - "8000:8000" volumes: - ./src:/src - ./config/nginx:/etc/nginx/conf.d depends_on: - web web: build: . container_name: dg01 command: bash -c "python manage.py makemigrations && python manage.py migrate && gunicorn mydjango.wsgi -b 0.0.0.0:8000" depends_on: - db volumes: - ./src:/src expose: - "8000" db: image: postgres:latest container_name: ps01
註意:image 所使用的都是你本地已經存在的鏡像,如果不存在會去網上自行下載,不過這樣會很耽誤時間。
這樣一切結束後,你會發現在你的服務器上啟動了三個服務dj01, ps01, ng01。
如果此時你還不是很明白項目的個文件存檔路徑的話,這裏列出自己的作為參考
── myproject ├── src │ ├── mydjango │ ├── manage.py ├── config │ ├── requirements.pip │ ├── nginx │ ├── mydjango.conf ├── Dockerfile └── docker-compose.yml
當讓。此時你的web還是不能訪問你的外網環境的,需要你在nginx下自行配置
6.現在讓我們寫一個名為myproject的config文件夾內的nginx 配置文件,並將其放在一個名為nginx的子目錄中。mydjango.conf
upstream web { server web:8000; } # portal server { location / { proxy_pass http://web/; } listen 80; server_name localhost; }
這樣恭喜你完成了整個服務的部署
最後提供幾個命令用於查看docker
用於shell訪問
#Nginx docker exec -ti nginx bash #Web docker exec -ti web bash #Database docker exec -ti db bash
用於日誌
#Nginx docker-compose logs nginx #Web docker-compose logs web #DB docker-compose logs db
Djano + Nginx + docker配置與管理