Flask 系列之 部署发布

说明
- 操作系统:Windows 10
- Python 版本:3.7x
- 虚拟环境管理器:virtualenv
- 代码编辑器:VS Code
实验目标
通过 Windows 的 WSL,将我们的项目网站部署到 Ubuntu 16.04 上面
操作
运行环境搭建
打开 WSL,执行下述操作
- 安装 Python3 pip3 以及虚拟环境管理工具 virtualenv
sudo apt-get install python3
sudo apt-get install python3-pip
pip3 install virtualenv
- 安装并启动 Mysql
安装完成之后需要进入 Mysql 的 Shell 中创建我们程序需要实验的的数据库 todo
略,具体可参考:Flask 系列之 SQLAlchemy
- 安装并启动 Nginx
# 安装并启动 Nginx
sudo apt-get install nginx
sudo service nginx start
sudo service nginx stop
注:执行完毕后可尝试访问:http://127.0.0.1, 看是否正常。
代码打包与上传
pip freeze > requirements.txt
cp -R /mnt/c/Users/hippieZhou/Desktop/Flask_todolist /home/hippie/todolist
cd /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 restart
Nginx 的配置如下所示:
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-nginx
sudo certbot --nginx
# sudo certbot renew --dry-run
sudo ufw allow https
sudo 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 – 计划执行的脚本或命令的名称
相关参考
Flask 系列之 部署发布的更多相关文章
- 运维与自动化系列④自动化部署基础与git
运维与自动化系列④自动化部署基础与git 自动化部署基础与git 一:上一篇的代码是保存在本地,但是在生产环境当中是由版本控制进行代码管理,以便于发布代码和回滚,一般是使用gitlib比较多,另外还有 ...
- Git系列②之部署企业级开源仓库gitlab服务器
Git系列②之部署企业级开源仓库gitlab服务器 上一篇我们介绍了github的常见使用方法,下面开始部署本地开源仓库gitlab GitLab 是一个用于仓库管理系统的开源项目. 1.安装配置gi ...
- 【Python】Flask系列-URL和视图笔记
1.学习目标 熟悉Flask相关知识. 熟悉web开发流程. 能独立开发Flask项目. 2.环境配置 Python虚拟环境安装 因为python的框架更新迭代太快了,有时候需要在电脑上存在一个框架的 ...
- Flask容器化部署原理与实现
本文将介绍Flask的部署方案:Flask + Nginx + uWSGI,并使用docker进行容器化部署,部署的实例来源 Flask开发初探,操作系统为ubuntu. Flask系列文章: Fla ...
- Maven-008-Nexus 私服部署发布报错 Failed to deploy artifacts: Failed to transfer file: ... Return code is: 4XX, ReasonPhrase: ... 解决方案
我在部署构件至 maven nexus 私服时,有时会出现 Failed to deploy artifacts: Failed to transfer file: ... Return code i ...
- QT程序在windows下部署发布
转载:http://www.cnblogs.com/Fan_Fan/archive/2010/05/29/1746860.html QT程序在windows下部署发布 以下包括了部分网上收集的,以及q ...
- Tomcat部署发布JSP应用程序的三种方法 (转)
Tomcat部署发布JSP应用程序的三种方法 1.直接放到Webapps目录下 Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应 ...
- 【IDEA】【2】创建Maven项目及部署发布
正文: 1,我参考的文档1已经比较全面了,需要注意的是界面可能有点不一样,有些地方需要自己注意一下 2,project和model的概念:挺困扰人的,我目前没有多模块开发,开发多个项目的时候是开了多个 ...
- 关于在windows下部署发布QT程序的总结
原文请看:http://www.cnblogs.com/javaexam2/archive/2011/05/18/2632916.html 关于在windows下部署发布QT程序的总结 2008-06 ...
随机推荐
- python | Elasticsearch-dsl常用方法总结(join为案例)
Elasticsearch DSL是一个高级库,其目的是帮助编写和运行针对Elasticsearch的查询.它建立在官方低级客户端(elasticsearch-py)之上. 它提供了一种更方便和习惯的 ...
- JavaScript 获取完整当前域名
<script> var dq_url = window.location.protocol+"//"+window.location.host;/*获取当前域名*/ ...
- Array.from();Object.keys();Array.map()
Array.from():方法从一个类似数组或可迭代对象创建一个新的数组形式: const bar = ["a", "b", "c"]; A ...
- LeetCode题解38.Count and Say
38. Count and Say The count-and-say sequence is the sequence of integers beginning as follows: 1, 11 ...
- Array.find()和Array.findIndex()
ES6新增的两个方法,根据回调函数返回作为判断依据,按照数组顺序进行遍历,符合条件(为真)时find()返回该值.findIndex()返回下标. 1.语法 arr.find(callback[, t ...
- [SQL]LeetCode178. 分数排名 | Rank Scores
Write a SQL query to rank scores. If there is a tie between two scores, both should have the same ra ...
- 机器学习入门15 - 训练神经网络 (Training Neural Networks)
原文链接:https://developers.google.com/machine-learning/crash-course/training-neural-networks/ 反向传播算法是最常 ...
- pycharm(Python编辑器)的激活
1.将“0.0.0.0 account.jetbrains.com”中的内容添加到hosts文件中,hosts路径为:C:\Windows\System32\drivers\etc mac用户的hos ...
- springcloud之服务注册与发现
本次分享的是关于springcloud服务注册与发现的内容,将通过分别搭建服务中心,服务注册,服务发现来说明:现在北京这边很多创业公司都开始往springcloud靠了,可能是由于文档和组件比较丰富的 ...
- 9.Django form组件
Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 创建Form类时,主要涉及到 [ ...