本文参考以下文章: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:passworduser: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端口放行)

十一、使用说明

后台登录

http://ip/admin

账号和密码需要在配置文件中查看

编辑文章

后文对网站的编辑操作,只允许有管理员权限的用户操作。

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网站的更多相关文章

  1. 写给新手看的Flask+uwsgi+Nginx+Ubuntu部署教程

    学习 Flask,写完一个 Flask 应用需要部署的时候,就想着折腾自己的服务器.根据搜索的教程照做,对于原理一知半解,磕磕碰碰,只要运行起来了,谢天谢地然后不再折腾了,到下一次还需要部署时,这样的 ...

  2. Flask+uwsgi+Nginx+Ubuntu部署

    学了一段时间flask,可是一直没有做过部署, 于是想着怎么部署呢, 想想,先吧服务给搞通吧,于是呢 就先想着去吧服务给搞起来,这里选择的是Flask+uwsgi+Nginx+Ubuntu, Pyth ...

  3. flask+uwsgi+nginx+docker-compose部署

    简单介绍 Flask这里就不多阐述了,已经是很流行的一个轻量级python框架了,对于小.中型项目特别适合.这里用docker的compose编排部署.uwsgi 简单的说明下,uWSGI是一个Web ...

  4. Flask+uwsgi+Nginx+Ubuntu部署教程

    学习 Flask,写完一个 Flask 应用需要部署的时候,就想着折腾自己的服务器.根据搜索的教程照做,对于原理一知半解,磕磕碰碰,只要运行起来了,谢天谢地然后不再折腾了,到下一次还需要部署时,这样的 ...

  5. [原创]Flask+uwsgi+virtualenv+nginx部署配置

    1.创建工程python2.7版本虚目录: #virtualenv -p /usr/bin/python2.7 CDN_resource #cd CDN_resource #source ./bin/ ...

  6. 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 ...

  7. 部署一个fc网站需要注意的地方

    1. php环境 必须5.3 2. yum install nodejs 3. yum install v8-devel 3. 下载v8js php扩展, 版本是 v8js-0.1.3 tar -zx ...

  8. 踩坑踩坑之Flask+ uWSGI + Tensorflow的Web服务部署

    一.简介 作为算法开发人员,在算法模块完成后,拟部署Web服务以对外提供服务,从而将算法模型落地应用.本文针对首次基于Flask + uWSGI + Tensorflow + Nginx部署Web服务 ...

  9. python部署-Flask+uwsgi+Nginx

    一.Flask部分(app.py) flask即Python代码:部分参考代码如下,相信很多人如果看到这篇文章一定有flask的代码能力. from app import create_app fro ...

随机推荐

  1. swift 学习笔记一

    看 Developing IOS 8 Apps with swift 的时候看到一些比較实用的点,记录一下: 1.将函数作为參数传递. 比如: 写一个两个数求和的函数:performOperation ...

  2. HDU1171_Big Event in HDU【01背包】

    Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  3. U4687 不无聊的序列

    U4687 不无聊的序列 0通过 85提交 题目提供者飞翔 标签 难度尚无评定 提交 最新讨论 暂时没有讨论 题目背景 如果一个序列的任意一个连续的子序列中没有只出现一次的元素,辣么kkk就认为这个序 ...

  4. 1245 最小的N个和(前k小ai+bi)

    1245 最小的N个和  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 有两个长度为 N ...

  5. vim g 和 % 区别

    vim中的g(global)和%的区别: g:全局的 s/pattern/replacement/  : 替换行中出现的每一个pattern g/pattern/s/pattern/replaceme ...

  6. iOS-获取子视图父控制器

    开发中有的时候需要涉及当前视图的父级视图,可以通过UIResponder来获取,有两种实现方式: UIView *next=sender; while ([next superview]) { nex ...

  7. 【HDU 4864】 Task

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4864 [算法] 贪心 不妨将两个数组分别按x从大到小排序 然后枚举每件物品,选择x值大于该物品的且 ...

  8. 简单动态规划——最长公共子序列&&最长回文子序列&&最长上升||下降子序列

    最长公共子序列,顾名思义当然是求两个字符串的最长公共子序列啦,当然,这只是一道非常菜的动规,所以直接附上代码: #include<iostream> #include<cstdio& ...

  9. Secure CRT中解决vim高亮设置的方法

    此文主要是解决vim编程中高亮显示的.原因是: 1.默认情况下,SecureCRT是有自己的终端显示颜色.这样在我们编程中不利于阅读内容. 2.我们必须到Linux系统中进行改进才能真正解决这样的问题 ...

  10. PCB Genesis 外形加内角孔实现方法

    在PCB工程制作CAM时,经常会遇到外形拐角处直角的,而客户对内角是要求,比如最大内角要求R0.5mm或者不接受内角, 但成型方式为铣方式,又不是啤板成型,那怎么处理才可以达到要求效果呢,在这里介绍2 ...