Django3開發個人部落格:部署
阿新 • • 發佈:2020-12-16
一、部署準備
-
本站採用uwsgi+nginx+supervisor的方式來在阿里雲伺服器上進行部署。
-
使用xshell連線遠端伺服器。
-
安裝Python3環境,可參考 Centos7安裝Python3。
-
安裝redis,可參考 Centos7安裝redis6.0。
-
安裝MySQL,可參考 Centos7安裝MySQL8.0。
-
安裝MySQL後建立Django專案需要使用的資料庫。
-
安裝專案中用到的依賴:
# windows10下。 pip freeze > requirements.txt # 將得到的requirements.txt複製至centos7下。 pip3 install -r requirements.txt 安裝mysqlclient可能出的錯:OSError: mysql_config not found 執行命令: yum install mysql-devel gcc gcc-devel python-devel
-
在伺服器上建立新使用者,並賦予一定許可權。
二、部署程式碼
-
本站的原始碼除settings.py以外均可在 GitHub中檢視。
-
使用git拉取專案原始碼:
[[email protected] ~]$ git clone https://github.com/Zhangzyb/MyBlog.git Cloning into 'MyBlog'... remote: Enumerating objects: 410, done. remote: Counting objects: 100% (410/410), done. remote: Compressing objects: 100% (282/282), done. remote: Total 846 (delta 178), reused 309 (delta 107), pack-reused 436 Receiving objects: 100% (846/846), 1.13 MiB | 20.00 KiB/s, done. Resolving deltas: 100% (367/367), done.
-
配置settings.py檔案:
DEBUG = False # 改成False ALLOWED_HOSTS = ['.zhangzyb.icu','127.0.0.1','localhost'] EMAIL_PORT = 465 # 修改郵件埠號,阿里雲對個人不開放22埠 # 將所有的靜態檔案收集到一起 STATIC_ROOT = os.path.join(BASE_DIR, 'staticall')
-
資料庫遷移:
python3 manage.py makemigrations python3 manage.py migrate
三、使用uwsgi+nginx部署Django專案
-
uwsgi可以使用命令列的方式執行Django,同時支援以配置檔案的方式來執行。
pip3 install uwsgi # uwsgi配置檔案 # /home/zyb/MyBlog/Blog/uwsgi.ini [uwsgi] chdir=/home/zyb/MyBlog/Blog module=Blog.wsgi:application master=true processes=4 socket=/home/zyb/MyBlog/Blog/blog.sock vacuum=true 執行命令:uwsgi --ini uwsgi.ini
-
Nginx負責處理靜態檔案。
# 收集靜態檔案 python3 manage.py collectstatic # 安裝nginx yum install nginx # 修改nginx.conf # /etc/nginx/nginx.conf user zyb; # 修改為新建使用者 worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; ... # 在/etc/nginx/conf.d目錄下建立blog.conf配置檔案 # /etc/nginx/conf.d/blog.conf upstream django { server unix:///home/zyb/MyBlog/Blog/blog.sock; # for a file socket # server 127.0.0.1:8080; # for a web port socket (we'll use this first) } # configuration of the server server { # the port your site will be served on # the domain name it will serve for 123.57.237.231 server_name www.zhangzyb.icu; # 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 /home/zyb/MyBlog/Blog/uploads; # your Django project's media files - amend as required } location /static { alias /home/zyb/MyBlog/Blog/staticall; # your Django project's static files - amend as required } # Finally, send all non-media requests to the Django server. location / { uwsgi_pass django; include /home/zyb/MyBlog/Blog/uwsgi_params; # the uwsgi_params file you installed } } # 重啟nginx systemctl restart nginx
-
專案檔案樹型結構圖。
├── article ├── Blog ├── blog.sock ├── celery_tasks ├── comment ├── manage.py ├── static ├── staticall ├── templates ├── uploads ├── uwsgi.ini └── uwsgi_params
-
更詳細的uwsgi+nginx部署Django專案可檢視官方文件 uwsgi部署Django。
四、使用supervisor守護程序
-
supervisor可以將程序以後臺的方式運行同時在程序因意外停止後重啟程序。
-
本站使用supervisor管理兩個程序,uwsgi和celery。
-
supervisor的配置:
# 安裝supervisor pip3 install supervisor # 生成配置檔案 echo_supervisord_conf > /etc/supervisord.conf # 避免許可權問題,需要修改配置檔案 [unix_http_server] file=/etc/supervisor/var/supervisor.sock ; # 修改socket檔案的位置 ... [supervisord] logfile=/etc/supervisor/log/supervisord.log ; # 修改日誌檔案的位置 ... pidfile=/etc/supervisor/var/supervisord.pid ; # 修改pidfile的位置 ... [supervisorctl] serverurl=unix:///etc/supervisor/var/supervisor.sock ; # use a unix:// URL for a unix socket ... [include] # 去掉註釋 files = /etc/supervisor/*.conf # 建立用於存放supervisor管理檔案的資料夾 # mkdir /etc/supervisor # mkdir /etc/supervisor/var # mkdri /etc/supervisor/log
-
使用supervisor管理uwsgi:
# /etc/supervisor/uwsgi.conf [program:uwsgi] command=uwsgi --ini uwsgi.ini directory=/home/zyb/MyBlog/Blog user=zyb autorestart=true autostart=true startretries=3 redirect_stderr=true startsecs=5 stdout_logfile=/etc/supervisor/log/uwsgi.log stopasgroup=true killasgroup=true priority=999
-
使用supervisor管理Celery:
# /etc/supervisor/celery.conf [program:celery] command=celery -A celery_tasks.main worker -l INFO directory=/home/zyb/MyBlog/Blog user=zyb autorestart=true autostart=true startretries=3 redirect_stderr=true startsecs=5 stdout_logfile=/etc/supervisor/log/celery.log stopasgroup=true killasgroup=true priority=999
-
關於.conf檔案中的引數參考官方文件 programx-section。
-
執行supervisor:
supervisord -c /etc/supervisod.conf supervisorctl status
-
執行結果:
-
關於supervisor的基本使用可參考這篇部落格:使用supervisor守護程序。
-
關於supervisor的更多知識可檢視官方文件:Supervisor。