zoukankan      html  css  js  c++  java
  • 使用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: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="230px;">
    </a>

    更多的玩法有待考虑。

    上传文件

    由于是个人使用,没有对上传的文件做进一步的过滤操作。建议大家不要随意上传.php.sh.py的文件。上传的文件位于静态目录:app/static/upload下,可以使用http://<server-name>/static/upload/<filename>访问。

    七牛图床

    如需使用七牛图床,需要配置好七牛图床的信息。包括个人的AccessKey/SecretKey

    默认的外链域名为:

    空间名是个人创建的仓库名。

    七牛图床主要是为了更方便的管理上传于七牛云的图片,目前支持上传,更名,删除等操作。

  • 相关阅读:
    加签验签
    .net core三个生命周期
    List,IList,IEnumerable的区别
    IHttpClientFactory 模拟http请求
    TDengine在Linux下的安装
    Linux环境下安装jdk
    在 React 中使用 JSX 的好处
    React介绍(讲人话)
    React是什么,为什么要使用它?
    mac系统下给文件夹加密方法
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/10282329.html
Copyright © 2011-2022 走看看