Flask 系列之 部署发布
說明
- 操作系統:Windows 10
- Python 版本:3.7x
- 虛擬環境管理器:virtualenv
- 代碼編輯器:VS Code
實驗目標
通過 Windows 的 WSL,將我們的項目網站部署到 Ubuntu 16.04 上面
操作
運行環境搭建
打開 WSL,執行下述操作
- 安裝 Python3 pip3 以及虛擬環境管理工具 virtualenv
- 安裝并啟動 Mysql
安裝完成之后需要進入 Mysql 的 Shell 中創建我們程序需要實驗的的數據庫 todo
略,具體可參考:Flask 系列之 SQLAlchemy
- 安裝并啟動 Nginx
注:執行完畢后可嘗試訪問:http://127.0.0.1, 看是否正常。
代碼打包與上傳
pip freeze > requirements.txtcp -R /mnt/c/Users/hippieZhou/Desktop/Flask_todolist /home/hippie/todolistcd /home/hippie/todolist# 創建虛擬環境 python -m virtualenv venv# 激活虛擬環境 source venv/bin/activate# 安裝項目依賴包 pip3 install -r requirements.txt# 測試網站是否能正常初始化和運行 flask initdb flask admin flask run上傳代碼之前可以先將我們現有的虛擬環境對于的文件目錄 venv 刪除掉,因為我們之前的虛擬環境是基于 Windows 創建的,在 Ubuntu 不適用,需要重新創建。
使用 gunicorn
進入當前項目的虛擬環境執行下述操作
# 安裝 pip install gunicorn# 查看幫助 gunicorn -h# 直接運行 gunicorn 運行文件名稱:Flask 程序實例名# 測試運行 # -w 4 :以 4 個進程來啟動 # -b 127.0.0.1:5000 :綁定到本地的 127.0.0.1:5000 來運行 # -D :以守護進程的方式運行 # --access-logfile ./logs/log :將當前訪問的日志信息記錄到當前目錄下的 logs/log 文件中,注:logs 文件夾需要提前創建 # manage:app :manage 代表入口函數對應的文件名稱;app 為 Flask 對象 gunicorn -w 4 -b 127.0.0.1:5000 -D --access-logfile ./logs/log manage:app# 查看當前運行的后臺進程, 通過此方法可查詢到有 5 個進程,其中一個是主進程,另外 4 個是子進程 ps aux | grep gunicorn# 通過上述命令查看主進程的 pid 退出該后臺進程 kill -9 pid配置 Nginx
# 備份 Nginx 的原始配置文件sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak# 編輯我們的網站對應的配置文件 sudo vim /etc/nginx/sites-available/default# 配置完成之后執行下述操作檢查配置是否正常 sudo nginx -t# 重啟 Nginx sudo service nginx restartNginx 的配置如下所示:
server {listen 80;server_name hippiezhou.fun *.hippiezhou.fun;access_log /var/log/nginx/access.log;error_log /var/log/nginx/error.log;location / {proxy_pass http://127.0.0.1:5000/; #此處和你gunicore的ip和端口一致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-Proto $scheme;} }基于最簡配置原則,我們只需修改第一個 server 中的 location 結點,并且需要屏蔽掉里面的 try_files 字段即可。
此時,如果之前我們的網站已經通過 gunicorn 運行著的話,那么我們重啟一下我們的 Nginx 服務,即可通過 127.0.0.1 訪問我們的網站了。
Nginx 對應的錯誤日志位于 /var/log/nginx 目錄下,通過查看相關日志可以排查問題。
配置 HTTPS
登陸到遠程服務器上,執行下述 bash 操作:
sudo apt-get update sudo apt-get install software-properties-common sudo add-apt-repository universe sudo add-apt-repository ppa:certbot/certbot sudo apt-get update sudo apt-get install certbot python-certbot-nginxsudo certbot --nginx# sudo certbot renew --dry-runsudo ufw allow httpssudo systemctl restart nginx修改之后的 Nginx 配置如下圖所示:
使用 crontab 定期更新證書
# 每個月凌晨 0:0:0 更新證書 crontab 0 0 1 * * /usr/bin/certbot renew --force-renewal # 每個月凌晨 0:0:5 更新 Nginx crontab 5 0 1 * * /usr/sbin/service nginx restart注:crontab 中有六個字段,其含義如下:
- 第1個字段:分鐘 (0-59)
- 第2個字段:小時 (0-23)
- 第3個字段:日期 (1-31)
- 第4個字段:月份 (1-12 [12 代表 December])
- 第5個字段:一周當中的某天 (0-7 [7 或 0 代表星期天])
- /path/to/command – 計劃執行的腳本或命令的名稱
相關參考
- 獨立 WSGI 容器
- 如何免費的讓網站啟用HTTPS
- certbot
轉載于:https://www.cnblogs.com/hippieZhou/p/10608847.html
總結
以上是生活随笔為你收集整理的Flask 系列之 部署发布的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pycharm活动模板
- 下一篇: Windows安装MySQL教程