1. 創建django項目
django-admin startproject docker_django
# 生成數據庫遷移文件
python3 manage.py makemigrations
# 執行數據庫映射
python3 manage.py migrate
# 創建管理員賬戶
python3 manage.py createsuperuser
# 修改配置文件settings.py
ALLOWED_HOSTS = ['*']
# 如果在服務器上啓動的項目,需要開放防火牆8000端口,此處爲了演示方便,直接關閉防火牆
systemctl stop firewalld
# 啓動項目
python3 manage.py runserver 0:8000
# 在瀏覽器中訪問後臺管理界面
http://10.10.102.237:8000/admin/login/?next=/admin/
- 此時我們應該可以登錄Django自帶的後臺
2.使用uwsgi啓動Django
1.安裝uwsgi,此處使用豆瓣源加速
pip3 install uwsgi -i https://pypi.douban.com/simple
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
2.在項目根目錄下(即與manage.py同級別目錄)創建uwsgi.ini文件
vi /xxx/xxx/docker_django/uwsgi.ini
[uwsgi]
; 使用nginx連接時使用
; socket = 0.0.0.0:10000
; 直接做web服務器使用,指定要監聽的ip和端口號,即我們運行項目時的ip和端口
http = 0.0.0.0:8000
; 項目目錄
chdir = /var/www/html/docker_django
; 項目中的wsgi.py文件的目錄
module = docker_django.wsgi:application
; 靜態文件映射,測試uwsgi配置時爲了能夠訪問到靜態資源,所以加上這個配置。在使用nginx時,需要註銷掉這個配置,改用nginx來代理靜態資源訪>問
; 可使用 python manage.py collectstatic
static-map=/static=/var/www/html/docker_django/static
; 指定啓動的工作進程數
processes = 4
; 指定每個進程中的線程數
threads = 2
; 指定在工作進程中存在一個主進程
master = True
; 服務停止時自動移除unix Socket和pid文件
vacuum = True
; 保存啓動之後主進程的進程號
pidfile = uwsgi.pid
; 設置uwsgi後臺運行,運行信息保存在uwsgi.log
; daemonize = uwsgi.log
; 單個日誌的大小
buffer-size=32768
; 設置每個工作進程處理請求的上限,達到上限時,將回收(重啓)該進程。可以預防內存泄漏
max-requests=5000
3. 使用uwsgi代理啓動django
- 在uwsgi所在目錄執行下面命令啓動
uwsgi uwsgi.ini
- 此時應該可以看到如下結果
- 當我們再次訪問Django後臺時,此時界面沒有css樣式,我們需要手動處理
- 修改settings.py文件,在文件最後增加以下內容,指定靜態文件目錄
`STATIC_ROOT = os.path.join(BASE_DIR, ‘static’)
MEDIA_ROOT = os.path.join(BASE_DIR, ‘media’)
MEDIA_URL = ‘/media/’`
2.執行靜態文件收集命令
python3 manage.py collectstatic
- 此時,再次訪問後臺,又回到了熟悉的界面
3.使用docker部署
1. 部署前準備工作
- 關於docker的介紹以及命令此處不提,網上很多,也爲了部署思路更加清晰
- 項目上線部署最重要的就是關閉debug調試模式,不能把報錯信息展示給用戶,避免被攻擊
# 在settings.py中關閉DEBUG模式
DEBUG = False
- 部署時需要修改允許訪問的地址ALLOWED_HOSTS,設置爲服務器真實IP地址和本地迴環地址127.0.0.1,如果有域名且做了域名映射的話,再將域名也加進去
# 在settings.py中修改ALLOWED_HOSTS
ALLOWED_HOSTS = ['10.10.102.237', '127.0.0.1']
- 在項目目錄下執行下面命令,導出項目依賴包到項目目錄(即manage.py同級目錄)下的requirements.txt文件中,會自動創建該文件
pip3 freeze > requirements.txt
2. 編寫Dockerfile,內容如下:
- 在當前項目目錄下(即manage.py同級目錄)創建Dockerfile
FROM centos:centos7
MAINTAINER Fat Puffer <dcpuffer@outlook.com>
# 更換yum源
RUN set -ex \
&& mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup \
&& curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo \
&& yum clean all \
&& yum makecache && yum update -y
# 安裝python3.7.2
RUN set -ex \
&& yum -y install zlib-devel bzip2-devel libffi-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make wget \
&& yum clean all \
&& mkdir /usr/local/python3
COPY Python-3.7.2.tar.xz /usr/local/python3/
RUN set -ex \
&& cd /usr/local/python3 \
&& tar -xvJf Python-3.7.2.tar.xz \
&& cd Python-3.7.2 \
&& ./configure prefix=/usr/local/python3 \
&& make && make install \
&& ln -s /usr/local/python3/bin/python3.7 /usr/local/bin/python3 \
&& ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3
RUN set -ex \
&& cd /usr/local/python3 \
&& python3 -V
# 在容器內/var/www/html/下創建docker_django文件夾
RUN mkdir -p /var/www/html/docker_django
# 設置容器內工作目錄
WORKDIR /var/www/html/docker_django
# 將當前目錄文件加入到容器工作目錄中(. 表示當前宿主機目錄)
ADD . /var/www/html/docker_django
# 利用 pip3 安裝依賴
RUN set -ex \
pip3 install -r requirements.txt -i https://pypi.douban.com/simple \
pip3 install uwsgi -i https://pypi.douban.com/simple \
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
# Windows環境下編寫的start.sh每行命令結尾有多餘的\r字符,需移除。
RUN sed -i 's/\r//' ./start.sh
# 設置start.sh文件可執行權限
RUN chmod +x ./start.sh
- start.sh腳本文件內容如下所示。最重要的是最後一句,使用uwsgi.ini配置文件啓動Django服務
#!/bin/bash
# 從第一行到最後一行分別表示:
# 1. 生成數據庫遷移文件
# 2. 根據數據庫遷移文件來修改數據庫
# 3. 用 uwsgi啓動 django 服務, 不再使用python manage.py runserver
python3 manage.py makemigrations &&
python3 manage.py migrate &&
python3 manage.py collectstatic
# python manage.py runserver 0.0.0.0:8000
uwsgi --ini /var/www/html/docker_django/uwsgi.ini
3.使用當前目錄的 Dockerfile 創建鏡像
# 根據Dockerfile創建名爲django_uwsgi_img的鏡像,版本v1,.代表當前目錄
sudo docker build -t django_uwsgi_img:v1 .
4.啓動並運行容器
# 根據鏡像生成名稱爲django_docker的容器,並且啓動將宿主機80端口映射到docker容器的8000端口
sudo docker run -it -d --name django_docker -p 80:8000 django_uwsgi_img:v1
5.進入django_docker的容器內部,並運行腳本命令start.sh
sudo docker exec -it django_docker /bin/bash start.sh
6.頁面訪問
http://10.10.102.237/admin