使用Flask+uWsgi的方式部署一个blog网站
本文参考以下文章:https://www.yukunweb.com/2017/12/ubuntu-nginx-uwsgi-flask-app/
需要学习的地方
nginx+uwsgi部署flask应用
一 nginx配置:
server {
listen 80;
server_name 192.168.0.114; # 公网IP或域名
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5000; #指向uwsgi 所应用的内部地址
- uwsgi_param UWSGI_PYHOME /home/project/YuBlog-master/venv; #虚拟环境目录
- uwsgi_param UWSGI_CHDIR /home/project/YuBlog-master/source; # 应用根目录
- uwsgi_param UWSGI_SCRIPT manage:app; # 启动程序
uwsgi_read_timeout 100;
}
}
二 uwsgi配置:
[uwsgi]
master = true
socket = :5000
wsgi-file = manage.py
callable = app
processes = 4
threads = 2
buffer-size = 32768
说明
1.使用的系统是Cent OS 7.5 64位
2. YuBlog GitHub地址: https://github.com/Blackyukun/YuBlog
一、更新系统
# yum install epel-release
# yum update
# yum install vim wget
二、安装python3.7
1.安装依赖包
# yum -y install gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
2.下载并安装python3.7
# wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
# tar -zxvf Python-3.7.2.tgz
# mkdir /usr/local/python3
# cd Python-3.7.0
# ./configure --prefix=/usr/local/python3
# make && make install
3.设置软链接
# ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
# ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3
4.检查安装是否成功
# python3 -V
# pip3 –V
注:若不设置第三步或者第三步设置未成功,也不碍事,可以直接还是用绝对路径的方式操作:
/usr/local/python3/bin/python3
/usr/local/python3/bin/pip3
三、获取应用源码
# mkdir –p /home/project && cd /home/project
# wget https://github.com/Blackyukun/YuBlog/archive/master.zip
# yum install unzip
# unzip master.zip
得到一个YuBlog-master的文件夹,里面有如下目录或文件:
certbot # 设置https证书使用
docker-compose.yml # docker使用
mysql # 数据库文件,可以用来作参考
nginx # nginx文件,可以用来作参考
README.md # 说明
source # 程序源码
四、配置虚拟环境
说明:不配置虚拟环境也可以,直接使用上述安装的python3.7环境,不过还是建议使用虚拟环境
1.安装virtualenv
# /usr/local/python3/bin/pip3 install virtualenv
2.创建虚拟环境
创建在YuBlog-master目录下,跟source源码同目录,也就是在/home/project/YuBlog-master目录下操作.
需要注意的是,如果直接virtualenv venv命令,创建的将会是Python2的虚拟环境。如果想要创建Python3的环境,需要指定Python3的目录:
# /usr/local/python3/bin/virtualenv -p /usr/local/python3/bin/python3 venv
如果成功,项目目录下会生成一个venv目录,那里就是我们的python3虚拟环境了。接下来激活虚拟环境:
# source venv/bin/activate
激活成功后会出现(venv)
退出虚拟环境命令是:# deactivate
3.安装依赖包
# /usr/local/python3/bin/pip3 install -r /home/project/YuBlog-master/source/requirements.txt
五、安装MySQL5.6数据库
1.下载 MySQL Yum Repository
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
2.添加 MySQL Yum Repository
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
3.验证下是否添加成功
# yum repolist enabled | grep "mysql.*-community.*"
4.选择要启用 MySQL 版本
查看 MySQL 版本,执行yum repolist all | grep mysql
可以看到 5.5, 5.7 版本是默认禁用的,因为现在最新的稳定版是 5.6
可以通过类似下面的语句来启动某些版本
yum-config-manager --disable mysql56-community
yum-config-manager --enable mysql57-community-dmr
或者通过修改 /etc/yum.repos.d/mysql-community.repo 文件
# Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
其中 enabled=0 是指禁用,enabled=1 指启用。
注意: 任何时候,只能启用一个版本。
5.通过 Yum 来安装 MySQL
yum install mysql-community-server
6.设置root密码
# 启动 service mysqld start
# 登录,默认密码为空
mysql -uroot -p
use mysql;
SET PASSWORD = PASSWORD(' password ');
FLUSH PRIVILEGES;
7.编辑MySQL的配置文件
把数据库默认的编码全部改为UTF-8
MySQL的配置文件默认存放在/etc/my.cnf或者/etc/mysql/my.cnf:
vim /etc/mysql/my.cnf
[client]
default-character-set = utf8
[mysqld]
default-storage-engine = INNODB
character-set-server = utf8
collation-server = utf8_general_ci
指令查看编码是否设置正确。如果看到utf8就表示正确。
show variables like '%char%';
8.创建数据库
create database mydb;
数据库操作总结:
用户名:root,密码: password,数据库名:mydb
六、安装Nginx服务器
1.安装并启动nginx
- # yum install nginx
- 默认安装目录/etc/nginx/
- # service nginx start
2.配置nginx
(1)nginx.conf文件中user nginx;修改成user root;
也就是以root用户启动nginx,否则会报错: 13: Permission denied
(2)nginx.conf文件中server{}块注释掉
(3)在conf.d目录中新建yunblog.conf文件,添加如下内容
server {
listen 80;
server_name 192.168.0.114; # 公网IP或域名
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5000; #指向uwsgi 所应用的内部地址
- uwsgi_param UWSGI_PYHOME /home/project/YuBlog-master/venv; #虚拟环境目录
- uwsgi_param UWSGI_CHDIR /home/project/YuBlog-master/source; # 应用根目录
- uwsgi_param UWSGI_SCRIPT manage:app; # 启动程序
uwsgi_read_timeout 100;
}
}
说明:(2)和(3)可以合成一步,也就是说把(2)中的server{}块内容换成(3)中的内容.或者参考/home/project/YuBlog-master/nginx目录下的nginx.conf文件
3.重启nginx
# service nginx restart
七、安装uWSGI
1.在虚拟环境中安装uwsgi
# /usr/local/python3/bin/pip3 install uwsgi
2.配置uwsgi
在项目的根目录下,创建配置文件config.ini,
篇日志如下内容:
[uwsgi]
master = true
socket = :5000 #跟 nginx配置文件中的端口号保持一致
wsgi-file = manage.py # 主程序文件
callable = app # 应用
processes = 4
threads = 2
buffer-size = 32768
八、项目配置
1、2、3为必须配置的,其余保持默认即可
1. 配置数据库信息
博客运行前需要在config.py中配置必须信息。YuBlog 采用mysql存储,redis做部分缓存,需配置数据库信息。
mysql
的配置需根据使用场景选择配置,
开发场景配置DevelopmentConfig
类中的SQLALCHEMY_DATABASE_URI
的信息。
生产环境的配置在ProductionConfig
类的SQLALCHEMY_DATABASE_URI
信息。
其中默认的root:password
为user
:password
,
@localhost:3306/db
为@<host>:<port>/<db-name>
。
2.
配置redis信息
安装redis: yum install redis
启动redis: service redis start
redis的配置为:
# 配置类型,可选`simple`不使用 redis 数据库(不推荐)
CACHE_TYPE = 'redis'
CACHE_REDIS_HOST = '127.0.0.1'
CACHE_REDIS_PORT = 6379
CACHE_REDIS_DB = os.getenv('CACHE_REDIS_DB') or ''
CHCHE_REDIS_PASSWORD = os.getenv('CHCHE_REDIS_PASSWORD') or ''
其中私密信息建议使用环境变量的形式配置,如CHCHE_REDIS_PASSWORD
os.getenv()表示是从.env中获取配置信息
3. .env文件内容
MYSQL_PASSWORD= password
ADMIN_PASSWORD=password # 管理员登陆密码
MAIL_USERNAME=example@email.com # 发送邮件邮箱
MAIL_PASSWORD=password # 发送邮件邮箱的第三方客户端登陆密码
ADMIN_MAIL=example@email.com # 接受通知邮件邮箱
QN_ACCESS_KEY='' # 如使用七牛图床,需要配置,否则默认空就行
QN_SECRET_KEY=''
4. 防止csrf攻击配置
- CSRF_ENABLED = True
- # 密钥
- SECRET_KEY = 'you-guess'
5. 分页条数配置
- # 每页显示文章条数
- POSTS_PER_PAGE = 10
- # 管理文章页,每页显示条数
- ADMIN_POSTS_PER_PAGE = 20
- # 归档页文章条数
- ACHIVES_POSTS_PER_PAGE = 20
- # 搜索结果页每页条数
- SEARCH_POSTS_PER_PAGE = 15
- # 文章评论分页,每页条数
- COMMENTS_PER_PAGE = 10
- # 管理评论,每页条数
- ADMIN_COMMENTS_PER_PAGE = 50
6. 管理员初始设置
- # 管理员姓名
- ADMIN_NAME = 'kyu'
- # 管理员登录信息
- ADMIN_LOGIN_NAME = 'login-name'
- # 登录密码
- ADMIN_PASSWORD = os.getenv('ADMIN_PASSWORD') or 'password'
- # 博客名
- SITE_NAME = '意外'
- # 博客标题
- SITE_TITLE = '我的博客'
- # 管理员简介
- ADMIN_PROFILE = '克制力,执行力'
同样的ADMIN_PASSWORD
配置建议使用环境变量,初始设置除了登录名和登录密码,可以直接选择默认,可以在管理页面修改。
7. 站点配置
- rss 配置
- # 站点协议
- WEB_PROTOCOL = 'http/https'
- # 站点域名
- WEB_URL = 'domain name'
- # 站点创建时间
- WEB_START_TIME = '2018-08-18'
- # 显示条数
- RSS_COUNTS = 10
- # 发送邮件用户登录
- MAIL_USERNAME = os.getenv('MAIL_USERNAME')
- # 客户端登录密码非正常登录密码
- MAIL_PASSWORD = os.getenv('MAIL_PASSWORD')
- MAIL_SERVER = os.getenv('MAIL_SERVER') or 'smtp.qq.com'
- MAIL_PORT = os.getenv('MAIL_PORT') or '465'
- ADMIN_MAIL_SUBJECT_PREFIX = 'blog'
- ADMIN_MAIL_SENDER = 'admin.com'
- # 接收邮件通知的邮箱
- ADMIN_MAIL = os.getenv('ADMIN_MAIL')
- # 站点搜索的最小字节
- WHOOSHEE_MIN_STRING_LEN = 1
- # 专题保密文章的密码,建议设置环境变量
- ARTICLE_PASSWORD = os.getenv('ARTICLE_PASSWORD') or 'password'
8. 七牛图床配置
默认不开启。如需使用可将NEED_PIC_BED
配置为True
。
- # 七牛云存储配置
- NEED_PIC_BED = False
- QN_ACCESS_KEY = os.getenv('QN_ACCESS_KEY') or ''
- QN_SECRET_KEY = os.getenv('QN_SECRET_KEY') or ''
- # 七牛空间名
- QN_PIC_BUCKET = 'bucket-name'
- # 七牛外链域名
- QN_PIC_DOMAIN = 'domain-url'
九、程序运行相关
1. 配置环境变量为生产环境
windows
配置: set CONFIG=production
linux配置: export CONFIG=production
2.
迁移数据库等信息
使用前确认是否开启了mysql,配置了相关信息
- 创建迁移仓库:python manage.py db init;
- 创建迁移脚本:python manage.py db migrate -m "v1.0";
- 更新仓库:python manage.py db upgrade;
- 创建管理员信息:python manage.py add_admin;
十、启动uwsgi
1.启动uwsgi
# uwsgi config.ini (
在虚拟环境目录中执行)
报错:
no app loaded. going in full dynamic mode
配置plugin = python或者启动uwsgi命令:uwsgi config.ini --plugin python
2.访问网站(80端口放行)
十一、使用说明
后台登录
账号和密码需要在配置文件中查看
编辑文章
后文对网站的编辑操作,只允许有管理员权限的用户操作。
YuBlog
支持markdown
语法,上传图片可使用七牛图床进行上传获取外链。填写说明:
- 分类:技术 # 限制只能写一个分类
- 标签:docker,nginx # 标签不限制个数,每个标签之间使用英文的逗号隔开
- 链接:nginx-and-docker # 文章的URL,自己可以随意指定,建议有些意义
- 日期:2018-08-18 # 年月日间需使用-连接
- 标题:nginx和docker # 文章标题
可以选择保存草稿,待下次编辑,也可以直接发布,当然后续更改也很方便。
管理文章
可以对所有发布过的文章进行更新或者删除操作,删除需进一步确认,以防误删。
审核评论
为了防止垃圾评论污染,用户的评论一律需要自己审核通过还是删除。
管理链接
博客支持添加友情链接和社交链接,他们展示在不同的地方。不要搞错了:
添加专题
博客支持系列专题功能,专栏一般是一类文章的聚合,比如系列教程或者日记啥的,文章可以自行选择加密或者不加密。由于之前的偷懒,文章密码是设置在环境变量的,未来会改进。
侧栏插件
博客支持自定义的侧栏box
插件:
如果想要保持侧栏固定顶部,需要勾选广告选项。插件支持原生的html,css,js语法。但要保持宽度不得超过父元素,建议不超过230px。
- <a href="https://www.yukunweb.com/static/upload/wenwen.png" target="_blank">
- <img src="https://www.yukunweb.com/static/upload/wenwen.png" alt="wenwen" style="width:230px;">
- </a>
更多的玩法有待考虑。
上传文件
由于是个人使用,没有对上传的文件做进一步的过滤操作。建议大家不要随意上传.php
、.sh
、.py
的文件。上传的文件位于静态目录:app/static/upload
下,可以使用http://<server-name>/static/upload/<filename>
访问。
七牛图床
如需使用七牛图床,需要配置好七牛图床的信息。包括个人的AccessKey/SecretKey
:
默认的外链域名为:
空间名是个人创建的仓库名。
七牛图床主要是为了更方便的管理上传于七牛云的图片,目前支持上传,更名,删除等操作。
使用Flask+uWsgi的方式部署一个blog网站的更多相关文章
- 写给新手看的Flask+uwsgi+Nginx+Ubuntu部署教程
学习 Flask,写完一个 Flask 应用需要部署的时候,就想着折腾自己的服务器.根据搜索的教程照做,对于原理一知半解,磕磕碰碰,只要运行起来了,谢天谢地然后不再折腾了,到下一次还需要部署时,这样的 ...
- Flask+uwsgi+Nginx+Ubuntu部署
学了一段时间flask,可是一直没有做过部署, 于是想着怎么部署呢, 想想,先吧服务给搞通吧,于是呢 就先想着去吧服务给搞起来,这里选择的是Flask+uwsgi+Nginx+Ubuntu, Pyth ...
- flask+uwsgi+nginx+docker-compose部署
简单介绍 Flask这里就不多阐述了,已经是很流行的一个轻量级python框架了,对于小.中型项目特别适合.这里用docker的compose编排部署.uwsgi 简单的说明下,uWSGI是一个Web ...
- Flask+uwsgi+Nginx+Ubuntu部署教程
学习 Flask,写完一个 Flask 应用需要部署的时候,就想着折腾自己的服务器.根据搜索的教程照做,对于原理一知半解,磕磕碰碰,只要运行起来了,谢天谢地然后不再折腾了,到下一次还需要部署时,这样的 ...
- [原创]Flask+uwsgi+virtualenv+nginx部署配置
1.创建工程python2.7版本虚目录: #virtualenv -p /usr/bin/python2.7 CDN_resource #cd CDN_resource #source ./bin/ ...
- CentOS 6.5 Python 2.6.6+Flask 用wsgi方式部署在Apache 2.2.15下
1,安装wsgi Apache模块 easy_install mod_wsgi 2,添加/etc/httpd/conf.d/wsgi.conf LoadModule wsgi_module modul ...
- 部署一个fc网站需要注意的地方
1. php环境 必须5.3 2. yum install nodejs 3. yum install v8-devel 3. 下载v8js php扩展, 版本是 v8js-0.1.3 tar -zx ...
- 踩坑踩坑之Flask+ uWSGI + Tensorflow的Web服务部署
一.简介 作为算法开发人员,在算法模块完成后,拟部署Web服务以对外提供服务,从而将算法模型落地应用.本文针对首次基于Flask + uWSGI + Tensorflow + Nginx部署Web服务 ...
- python部署-Flask+uwsgi+Nginx
一.Flask部分(app.py) flask即Python代码:部分参考代码如下,相信很多人如果看到这篇文章一定有flask的代码能力. from app import create_app fro ...
随机推荐
- mac 浏览器解决跨域问题
Chrome:命令行执行如下命令open -a Google\ Chrome --args --disable-web-security出现如下提示,说明已经开启: Safari: open -a ' ...
- _stdcall与_cdecl
_cdecl(C Declaration的缩写)是C/C++和MFC程序默认使用的调用约定,因此可以省略,也可以在函数声明时加上_cdecl关键字来手工指定.采用_cdecl约定时,函数参数按照从右到 ...
- 利用rman自己主动备份转储spfile
利用rman自己主动备份转储spfile [情景简单介绍] 生产环境丢失了server的參数文件,rman已开启自己主动备份设置. [操作过程简述] ----启动rman $rman target / ...
- android TabHost控件
(一)TabHost控件,默认是在顶部显示的 TabHost是盛放Tab按钮和Tab内容的首要容器, TabWidget(tabs标签)用于选择页面,是指一组包含文本或图标的 ,FrameLayout ...
- 深入理解7816(2)---关于ATR【转】
本文转载自:http://blog.sina.com.cn/s/blog_4df8400a0102vcrk.html 深入理解7816(2)---关于ATR 智能卡(此处主要指接触式CPU卡)本身始终 ...
- 排列(permutation) 用1,2,3,…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要 求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。
#include <stdio.h> #include <math.h> // 算法竞赛的目标是编程对任意输入均得到正确的结果. // 请先独立完成,如果有困难可以翻阅本书代码 ...
- PCB Winform使用谷歌webkit内核 应用
我们Winfrom界面嵌入网页最常用的是WebBrowser控件,因为微软自带的,使用方便,但在实际使用起来,会遇到各种麻烦(JS,不兼容问题,渲染等问题) 而实际WebBrowser控件内核是微软的 ...
- 9.9 NOIP模拟题
9.9 NOIP模拟题 T1 两个圆的面积求并 /* 计算圆的面积并 多个圆要用辛普森积分解决 这里只有两个,模拟计算就好 两圆相交时,面积并等于中间两个扇形面积减去两个三角形面积 余弦定理求角度,算 ...
- Kubernetes 配置 Taint 和 Toleration(污点和容忍)
通过污点和容忍让pod运行在特定节点上 参考官网:https://k8smeetup.github.io/docs/concepts/configuration/taint-and-toleratio ...
- phpStorm更新后配置svn无法使用
phpStorm迎来新的更新,结果之前配置的svn竟然无法使用啦,快捷键一类也没有作用.各种查找解决方案,最后找到解决方案.点击File找到Settings,找到Plugins这个部分,这个部分是管理 ...