本文参考以下文章: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. LeetCode 246. Strobogrammatic Number (可颠倒数字) $

    A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside ...

  2. LeetCode 172. Factorial Trailing Zeroes (阶乘末尾零的数量)

    Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in log ...

  3. Android CardView使用和导入出错问题

    Android CardView使用和导入出错问题 第一部分:导入Android CardView出错的问题. Android CardView是Android在support.v7包里面的一个vie ...

  4. [Sqlite]--&gt;数据迁移备份--从低版本号3.6.2到高版本号3.8.6

    引子: 1. Sqlite在Windows.Linux 和 Mac OS X 上的安装过程 2.嵌入式数据库的安装.建库.建表.更新表结构以及数据导入导出等等具体过程记录 个字段IPHONE和LOGI ...

  5. Bing Maps进阶系列六:使用Silverlight剪切(Clip)特性实现Bing Maps的迷你小地图

    Bing Maps进阶系列六:使用Silverlight剪切(Clip)特性实现Bing Maps的迷你小地图 Bing Maps Silverlight Control虽然为我们提供了简洁.方面的开 ...

  6. sizeof中的表达式不执行

    char a = 255;      printf("%d\n",a);    printf("%d\n",sizeof(++a));      printf( ...

  7. IDEA maven不能下载源码:" can not download source"问题

    用IDEA无法下载源码,可以在命令行项目根目录下,执行如下命令 :mvn dependency:resolve -Dclassifier=sources下载 也可以在idea设置中设置为自动下载源码

  8. phpexecl 的基本操作

    基本使用方法分三部分:一.引入接口 // PHPExcel_IOFactory require_once dirname(__FILE__).'/Classes/PHPExcel/IOFactory. ...

  9. [Swift通天遁地]八、媒体与动画-(13)CoreText框架实现图文混排

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  10. 注解配置AOP切面编程

    1.导入先关jar包 2.编写applicationContext.xml,配置开启注解扫描和切面注解扫描 <?xml version="1.0" encoding=&quo ...