Django后端部署詳細
后端部署文檔
所用技術:
-
nginx
-
uwsgi
-
supervisor
-
daphne
-
celery
-
python3.6
技術講解
python3.6
安裝依賴: sudo apt install openssl* zlib*
從官網下載源碼:sudo wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
解壓:sudo tar -xzvf Python-3.6.8.tgz
進入源碼目錄:cd Python-3.6.8
安裝到/usr/local/python目錄,不用事先創建python目錄:
sudo ./configure --prefix=/usr/local/python # --prefix指定目錄
編譯:sudo make
安裝:sudo make install
創建python與pip軟連接
sudo ln -s /usr/local/python/bin/python3.6 /usr/bin/python
sudo ln -s /usr/local/python/bin/pip3.6 /usr/bin/pip
注意:若是python未添加到環境變量的話需要將其用到的模塊創建軟連接
celery
安裝:pip install celert
創建軟連接:sudo ln -s /usr/local/python/bin/celery /usr/bin/celery
nginx
安裝: sudo apt-get install nginx
運行: sudo /etc/init.d/nginx restart (根據nginx具體位置)
驗證:打開瀏覽器-->IP:80-->Welcome to Nginx! (出現則表示成功)
uwsgi:
安裝: sudo pip3 install uwsgi
驗證:uwsgi --http :8000 --chdir project(項目名)/ --module uwsgiproject.wsgi
###### `注意:uwsgiproject.wsgi是你自己的配置的uwsgi文件,一定要具體到此文件的位置`
daphne :
安裝:sudo pip3 install daphne
運行:daphne -p 8001 -b 127.0.0.1 project.asgi:application
注意:daphne 主要為ws請求和channels配合,形成聊天功能,如果項目中沒有channels可以不配置
supervisor:
[supervisor是一個Linux/Unix系統上的進程監控工具,supervisor是一個Python開發的通用的進程管理程序,可以管理和監控Linux上面的進程,能將一個普通的命令行進程變為后臺daemon,并監控進程狀態,異常退出時能自動重啟]
安裝: pip3 install supervisor
配置軟連接: ln -s /usr/local/python3/bin/supervisord /usr/bin/supervisord
啟動:supervisord -c /etc/supervisord.conf
1.配置nginx(配置文件):
1.1添加配置文件
-
cd /etc/nginx/sites-enabled 或者 cd /etc/nginx/conf.d #注意:如果需要在其他地方添加配置文件請在 /etc/nginx/nginx.conf 文件中添加具體內容請百度 sudo vim project.conf #project 明明隨意,一般命名為項目名1.2具體內容
-
#具體內容 server{ # 監聽本項目端口,瀏覽器輸入的端口 listen 8000; server_name owd.com; charset utf-8; client_max_body_size 75M; # 收集項目靜態文件路徑 location /static{ alias project/static; # 靜態文件目錄 } # 和uwsgi通信端口和項目通信文件uwsgi_params location /api{ include uwsgi_params; uwsgi_pass 127.0.0.1:8001; #此端口為和uwsgi通信的端口 } #把所有ws開頭的請求轉發給daphne 如果沒有daphne可去除此location location /ws { proxy_pass http://127.0.0.1:8002 #此為和daphne通訊的端口 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $server_name; } }1.3重啟nginx服務
-
#重啟nginx服務 sudo /etc/init.d/nginx restart #或 service nginx restart
2.配置uwsgi(配置文件)
2.1拷貝uwsgi_params文件到項目目錄
-
#拷貝uwsgi_params文件到項目目錄 cp /etc/nginx/uwsgi_params /home/project/2.2創建uwsgi配置文件
-
mkdir uwsgi #最好在項目根目錄下 cd uwsgi vim uwsgi.ini #uwsgi命名隨意
2.3具體內容
-
#具體內容 [uwsgi] # 和nginx通信的端口 socket=127.0.0.1:8001 # 項目路徑 chdir=/home/codfish # wsgi.py路徑 wsgi-file=codfish/wsgi.py # 進程數 processes=4 # 線程數 thread=2 # 本項目占用uwsgi端口 stats=127.0.0.1:8081
3.配置daphne(配置文件asgi.py)
3.1內容如下
-
# 項目/settings和wsgi.py的同目錄下創建asgi.py #內容如下 """ ASGI entrypoint. Configures Django and then runs the application defined in the ASGI_APPLICATION setting. """ import os import django from channels.routing import get_default_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings") #project為項目名 django.setup() application = get_default_application()3.2啟動daphne服務測試
-
#啟動daphne服務測試(在項目根目錄下) daphne -p 8991 project.asgi:application #or daphne -b 127.0.0.1 -p 8991 project.asgi:application
4.配置supervisord(配置文件)
-
#配置文件所在目錄 /etc/ supervisord.conf #配置daphne, 同時還配置了uwsgi,可以根據需求進行具體配置 #具體內容如下 [supervisord] nodaemon=true [supervisorctl] #daphne配置,如果沒有可以刪除 [program:daphne] directory=project #項目目錄 (絕對路徑) command=daphne -b 127.0.0.1 -p 8001 --proxy-headers project.asgi:application #啟動命令 project為項目名 #8001端口請和nginx與daphne通訊的端口相同 autostart=true autorestart=true stdout_logfile=/www/wwwroot/haomai/haomai/websocket.log #日志 請自定義日志位置 redirect_stderr=true #uwsgi配置 如果沒有可以刪除 [program:uwsgi] directory=project #uwsgi配置文件目錄 (絕對路徑) command=uwsgi --ini uwsgi.ini #啟動命令 uwsgi.ini 為你的uwsgi的配置文件 autostart=true autorestart=true stdout_logfile=/www/wwwroot/haomai/haomai/uwsgi.log #日志 請自定義日志位置 redirect_stderr=true [program:celery.worker] ;指定運行目錄 directory=/home/lzz/Desktop/CodFish ;運行目錄下執行命令 command=celery -A CodFish worker -B ;啟動設置 numprocs=1 ;進程數 autostart=true ;當supervisor啟動時,程序將會自動啟動 autorestart=true ;自動重啟 ;停止信號,默認TERM ;中斷:INT (類似于Ctrl+C)(kill -INT pid),退出后會將寫文件或日志(推薦) ;終止:TERM (kill -TERM pid) ;掛起:HUP (kill -HUP pid),注意與Ctrl+Z/kill -stop pid不同 ;從容停止:QUIT (kill -QUIT pid) stopsignal=INT ;輸出日志 stdout_logfile=/home/lzz/Desktop/log/celery_worker.log stdout_logfile_maxbytes=10MB ;默認最大50M stdout_logfile_backups=10 ;日志文件備份數,默認為10 ;錯誤日志 redirect_stderr=false ;為true表示禁止監聽錯誤 stderr_logfile=/home/lzz/Desktop/log/celery_worker_err.log stderr_logfile_maxbytes=10MB stderr_logfile_backups=104.1啟動supervisor
-
#啟動supervisor supervisord -c /etc/supervisord.conf4.2將supervisord加入了開機自啟動設置
-
#創建supervisord.service #我們在任意位置隨便創建個這個文件,運行以下命令 touch supervisord.service vim supervisord.service -
#寫入以下內容 #supervisord.service [Unit] Description=Supervisor daemon [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf ExecStop=/usr/bin/supervisorctl shutdown ExecReload=/usr/bin/supervisorctl reload KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target -
#將文件拷貝到/usr/lib/systemd/system/ cp supervisord.service /usr/lib/systemd/system/ -
#啟動服務 systemctl enable supervisord -
#驗證一下是否為開機啟動 systemctl is-enabled supervisord #enabled為開機自啟
5.fdfs以及docker安裝
5.1docker安裝
?
-
ubuntu安裝:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun centOS安裝:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun5.2fastdfs安裝
-
pip install fdfs_client-py-master.zip # fdfs_client-py-master 安裝包在文件夾內 pip install mutagen pip isntall requests sudo docker load -i 文件路徑/fastdfs_docker.tar # fastdfs_docker安裝包在文件夾內
5.3 docker 鏡像安裝
sudo docker run -dit --name tracker --network=host -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker
sudo docker run -dti --name storage --network=host -e TRACKER_SERVER=146.56.199.104:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage #IP地址需要更改
sudo docker container ls #查看已啟動的鏡像鏡像
sudo docker container stop storage #停止鏡像
sudo docker container rm storage #刪除鏡像
sudo docker container start storage #啟動鏡像
sudo docker container restart tracker #重啟鏡像
sudo docker exec -it tracker /bin/bash #進入鏡像
sudo pkill -f daphne -9
sudo pkill -f uwsgi -9
sudo pkill -f celery -9
supervisord -c /etc/supervisord.conf
sudo docker container start storage
sudo docker container start tracker
celery -A CodFish worker -B
celery -A CodFish beat -l info
浙公網安備 33010602011771號