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 startsudo service nginx stop
注:执行完毕后可尝试访问: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 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-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 系列之 部署发布相关推荐
- Dapr微服务应用开发系列5:发布订阅构建块
题记:这篇介绍发布订阅构建块,这是对事件驱动架构设计的一种实现落地. 注:对于"Building Blocks"这个词组的翻译,我之前使用了"构件块",现在和官 ...
- Python框架Flask系列教程(1)——基础-黄勇-专题视频课程
Python框架Flask系列教程(1)--基础-4431人已学习 课程介绍 从初级讲解Flask开发网站.涉及到的知识点包括:URL和视图.Jinja2模版.SQLAlchemy数据 ...
- Flask+Gunicorn+Ngnix部署笔记
1 前言 最近自己开发了一个基于Flask Web框架的小应用,用于对外服务.记录下将Web应用部署的步骤.采用比较常见的flask + gunicorn + nginx来部署. 其实我的环境很简单, ...
- flask系列---模板的继承及Bootstrap实现导航条(四)
在建设一个网站的时候,不同的页面有很多元素是一样的,比如导航条.侧边栏等,我们可以使用模板的继承,避免重复编写html代码.现在我们打算实现一个在网页上方的导航条,并在所有的页面中继承这个导航条.导航 ...
- GeoServer基础教程(三):部署发布Shapefile地图数据
转载:http://blog.csdn.net/mingzai624. 这是GeoServer官方网站提供的一份Shapefile测试数据 nyc_roads.zip ,包含了部分纽约的道路信息,我们 ...
- SCCM 2007 R2部署、操作详解系列之部署篇
SCCM 2007 R2部署.操作详解系列之部署篇 导语: 大家好,我是John Cai(蔡建涛),欢迎大家来到我的博客-E网情深http://johncai.blog.51cto.com/.今天,我 ...
- 持续集成:部署发布篇
随时随地发布软件 提交出用户满意的.高质量的工作软件是研发的终极目标,能够随时随地提供可工作的软件,不仅减轻"终极构建"发行噩梦在开发同学心中的阴影,也有助于项目经理把控版本发布节 ...
- Silverlight 3 全系列开发工具发布
Silverlight 3 全系列开发工具发布 Expression® Studio 3 Make your vision real with the four professional tools ...
- flask程序打包部署_如何使用Flask构建Web应用程序并将其部署到云中
flask程序打包部署 by Salvador Villalon 萨尔瓦多·维拉隆(Salvador Villalon) 介绍 (Introduction) In each section, I wi ...
最新文章
- 到底选择PostgreSOL还是MySQL?看这里!
- python 字典的系列操作
- 文本转换成htmldocument
- 上下位机串口通信 python_怎么将图片通过串口发送给下位机?
- ubuntu 安装deb程序文件失败的解决方法
- [BuildRelease]Mozilla Build Tools - Autoconf + GNU Make
- Install Tcpping on Linux
- eclipse下彻底删除SVN插件
- SNMP弱口令导致的网络入侵
- 全网营销干货:物联网时代,为什么要关注线下大数据?
- Flask 上传自定义头像_1 使用Flask Uploads
- C/C++犯二程度计算
- supermap 模型导入纹理丢失解决方法
- tp6使用workman实现定时任务
- postman中 form-data、x-www-form-urlencoded、raw、binary的区别
- iOS 开发 -- 使用KeyChain保存用户名、密码并实现自动登录
- Error creating bean with name 'redisTemplate' defined in URL
- 王道机组笔记IEEE754
- 学习 | 遗传力与田间试验设计
- 03 SpringMVC 处理响应
热门文章
- Android 中文 API (27) —— SeekBar.OnSeekBarChangeListener
- [Linux实用工具]munin-node插件配置和插件编写
- http各种中的各种timeout
- 2019年终总结--满城灯火,只若初见
- MySQL全面优化,速度飞起来!
- 让 CPU 告诉你硬盘和网络到底有多慢
- 没看过这条鄙视链,别轻易说你懂区块链!
- C++:=default一些说明
- C语言 什么时候用取地址什么时候不用取地址,符号讲解
- IntelliJ IDEA maven库下载依赖包速度慢的问题(包制百病)