用Docker部署Django+uWSGI+Nginx html
-
大體步驟以下:
-
建立Centos容器
-
安裝Python及pip
-
安裝MySQL
-
使Django鏈接到MySQL
-
運行uWSGI服務器
-
運行Nginx服務器
建立Centos容器
安裝docker軟件 python
yum install docker
-
建立一個centos容器
docker run -d --name deploy1 --network host centos tail -f /dev/null
-
-d:讓它在後臺運行。
-
–name deploy1:設置名字。
-
–network host:讓它加入宿主機的網絡,從而能夠連上外網。
-
centos:要運行的鏡像。docker會自動從官方鏡像中拉取latest版本。
-
tail -f /dev/null:讓容器一直執行某條命令,以避免沒有任務而自動退出。
進入centos容器。 mysql
docker exec -it deploy1 bash
-
將Django項目的源代碼從宿主機拷貝到centos容器中
docker cp /root/django deploy1: /var/www/web_project
安裝Python及pip nginx
yum install epel-release # 添加epel軟件庫
yum install python34 # 安裝指定版本的python
而後用pip安裝Django項目須要的Python第三方庫。 web
若是項目目錄下有一個requirements.txt,則能夠用pip3.4 install -r requirements.txt sql
安裝MySQL
Yum install mariadb
執行 Mysql_secure_installtion進行初始化,設置密碼爲123456 docker
使Django鏈接到MySQL
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 數據庫引擎,不用改
'NAME': 'blog', # database名,須要在mysql中已存在
'USER': 'root',
'PASSWORD': '******',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
運行uWSGI服務器
-
安裝依賴庫:yum install build-essential python-devel
-
安裝uWSGI:pip install uwsgi
-
進入Django項目目錄,執行mkdir uwsgi,建立一個uwsgi文件夾。再執行vi uwsgi/uwsgi.ini,在其下建立一個uwsgi.ini,做爲配置文件。其內容以下:
[uwsgi]
chdir = /var/www/web_project
socket= 127.0.0.1:3301
http = 0.0.0.0:8001
module = web_project.wsgi
#home = /var/www/vitual/
master = true
processes = 5
vacuum = true
daemonize=/var/log/uwsgi.log
使用配置文件啓動uWSGI服務器(默認在後臺運行):uwsgi --ini uwsgi/uwsgi.ini 數據庫
運行Nginx服務器
安裝Nginx:yum install nginx django
修改Nginx的配置文件 /etc/nginx/site-enable/mysite_nginx.conf centos
upstream django {
server 127.0.0.1:3301; # for a web port socket (we'll use this first)
}
server {
# the port your site will be served on
listen 8081;
# the domain name it will serve for
server_name _; # substitute your machine's IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media{
alias /var/www/web_project/media/; # your oDjango project's media files - amend as required
}
location /static {
alias /var/www/web_project/allstatic/; # your Django project's static files - amend as required
}
location /admin {
uwsgi_pass django;
include uwsgi_params; # the uwsgi_params file you installed
}
location /api {
uwsgi_pass django;
include uwsgi_params; # the uwsgi_params file you installed
}
location /ckeditor/upload/ {
proxy_method POST;
proxy_pass http://127.0.0.1:8001$request_uri;
}
location / {
root /var/www/html/dist;
index index.html;
#try_files $uri $uri/ /index.html;
}
}
先啓動uWSGI服務器,再用nginx啓動nginx服務器(默認做爲守護進程運行)
-
數據的持久化
docker run -d -p 80:8081 -p 10000:8001 --restart=always --privileged=true -v /usr/docker_dat/mysql/data:/var/lib/mysql --name newblog5 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root webblog_4
映射本地的目錄到 容器內部的 /var/lib/msyql
-
第一次數據庫會報沒有權限,須要修改mysql的數據庫權限
chown -R mysql /var/lib/mysql