美文网首页
Centos7 安装部署Flask

Centos7 安装部署Flask

作者: Oort | 来源:发表于2022-05-14 15:09 被阅读0次

    Centos7 安装部署Flask

    针对 Flask + vue-admin + mysql + redis 的部署文档

    安装Nginx

    1.更新yum 源
    sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    
    2.安装
    sudo yum install nginx
    
    3.配置nginx
    // 1.设置开机启动
    $ sudo systemctl enable nginx
    // 2.启动服务
    $ sudo systemctl start nginx
    // 3.停止服务
    $ sudo systemctl restart nginx
    // 4.重新加载,因为一般重新配置之后,不希望重启服务,这时可以使用重新加载。
    $ sudo systemctl reload nginx
    
    4.常见问题
    // 绑定其他端口
    // Nginx 默认绑定的端口是 http 协议的默认端口,端口号为:80,如果需要绑定其他端口,需要注意 SELinux 的配置
    
    // 例如:绑定 8081 端口,但是会发现无法启动,一般的报错如下
    
    // YYYY/MM/DD hh:mm:ss [emerg] 46123#0: bind() to 0.0.0.0:8081 failed (13: Permission denied)
    // 此时需要更改 SELinux 的设置。我们使用 SELinux 的管理工具 semanage 进行操作,比较方便。
    
    // 安装 semanage 使用如下命令
    
    sudo yum install policycoreutils-python
    // 然后查看是否有其他协议类型使用了此端口
    
    sudo semanage port -l | grep 8081
    transproxy_port_t              tcp      8081
    // 返回了结果,表明已经被其他类型占用了,类型为 transproxy_port_t。
    
    // 我们还要查看一下 Nginx 的在 SELinux 中的类型 http_port_t 绑定的端口
    
    sudo semanage port -l | grep http_port_t
    http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
    pegasus_http_port_t            tcp      5988
    // 第一行 http_port_t 中没有包含 8081 这个端口。因此需要修改 8081 端口到 http_port_t 类型中。
    
    sudo semanage port -m -p tcp -t http_port_t 8081
    // 如果没有其他协议类型使用想要绑定的端口,如 8001,则我们只要新增到 SELinux 中即可。
    
    sudo semanage port -l | grep 8001
    sudo semanage port -a -p tcp -t http_port_t 8001
    // 此时,重新启动 Nginx 即可。
    

    防火墙操作

    1. 查看已经开放的端口
    firewall-cmd --list-ports
    
    2.开启端口
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    
    3.命令含义:

    –zone #作用域

    –add-port=80/tcp #添加端口,格式为:端口/通讯协议

    –permanent #永久生效,没有此参数重启后失效

    4.重启防火墙

    firewall-cmd --reload #重启firewall

    systemctl stop firewalld.service #停止firewall

    systemctl disable firewalld.service #禁止firewall开机启动

    firewall-cmd --state #查看默认防火墙状态(关闭后

    CentOS 7 安装 Python3.7

    1. 我们先看看现有的 python2在哪里
    [root@lidan /]# whereis python
    python: /usr/bin/python /usr/bin/python2.7 /usr/bin/python.bak /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/share/man/man1/python.1.gz
    [root@lidan bin]# ll python*
    lrwxrwxrwx. 1 root root    9 5月  27 2016 python2 -> python2.7
    -rwxr-xr-x. 1 root root 7136 11月 20 2015 python2.7
    lrwxrwxrwx. 1 root root    7 5月  27 2016 python.bak -> python2
    
    2. 接下来我们要安装编译 Python3的相关包
    yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel
    

    这里面有一个包很关键libffi-devel,因为只有3.7才会用到这个包,如果不安装这个包的话,在 make 阶段会出现如下的报错:

    ModuleNotFoundError: No module named '_ctypes'
    
    3. 安装pip,因为 CentOs 是没有 pip 的。
    #运行这个命令添加epel扩展源 
    yum -y install epel-release 
    #安装pip 
    yum install python-pip
    
    4. 可以用yum 安装 安装一下 wget
    yum -y install wget
    
    5. 我们可以下载 python3.7的源码包了
    wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
    #解压缩
    tar -zxvf Python-3.7.0.tgz
    
    #进入解压后的目录,依次执行下面命令进行手动编译
    ./configure prefix=/usr/local/python3 
    make && make install
    

    如果最后没提示出错,就代表正确安装了,在/usr/local/目录下就会有python3目录

    6. 添加软链接
    #添加python3的软链接 
    ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3.7 
    #添加 pip3 的软链接 
    ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3.7
    #测试是否安装成功了 
    python -V
    
    7. 更改yum配置,因为其要用到python2才能执行,否则会导致yum不能正常使用(不管安装 python3的那个版本,都必须要做的)
    vi /usr/bin/yum 
    把 #! /usr/bin/python 修改为 #! /usr/bin/python2 
    vi /usr/libexec/urlgrabber-ext-down 
    把 #! /usr/bin/python 修改为 #! /usr/bin/python2
    
    8.安装pipenv
    pip install pipenv
    
    9.安装git
    yum install git
    

    安装mysql8.0

    1.下载mysql yum包

    官方下载地址:https://dev.mysql.com/downloads/repo/yum/ 或者直接使用wget下载

    wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
    
    2.安装软件源
    rpm -Uvh https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
    
    3.安装mysql
    yum install mysql-community-server
    # 安装过程中如果出现y/n的话就一直y就行了,如果嫌麻烦可以用这个命令来安装
    yum install -y mysql-community-server
    
    4.启动&配置
    #启动
    service mysqld start
    #查看运行状态
    service mysqld status
    # 看到绿色的running代表已经启动成功,然后mysql在5.6之后的版本都会默认生成一个默认密码,是root用户的。通过如下命令查看密码
    grep 'temporary password' /var/log/mysqld.log
    
    5.进入mysql

    执行完如下命令之后输入默认密码

    mysql -u root -p
    

    修改root密码

    alter user 'root'@'localhost' identified by '密码';
    

    刷新

    flush privileges;
    
    6.创建用户和分配权限

    由于mysql8新提供了一种密码加密方式caching-sha2-password,且为默认,目前很多客户端都不支持,所以我们在创建新角色用户的时候可以指定其为mysql_native_password,原来的root账户等不去做任何改变(无形之中增加了安全性有木有)

    #创建一个test用户(一般情况下root用户只在本地环境下使用),密码是29dIg;2^,数据库的密码最好设置得连自己都记不住。
    CREATE USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';
    #授权数据库给用户,并设置所有ip都可以远程连接
    #如果只授予用户某些数据库的话就把*.*改成 数据库名称.*  意思就是 数据库.表
    #如果只授予用户某些权限的话,比如只能读不能写,就把GRANT ALL改成GRANT SELECT
    GRANT ALL ON *.* TO 'test'@'%';
    #当然,你也可以撤销授权,用法和授权几乎都是一样的。
    REVOKE ALL ON *.* from 'test'@'%'; 
    
    7.总结

    官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能!所以我也是第一时间把我的网站的mysql数据库从5.7升级到了8.0版本。 有些大神已经总结了8.0的诸多好处,我就不多赘述了。

    安装redis

    1.安装
    yum -y install redis
    
    2.启动redis
    service redis start
    
    3.停止redis
    service redis stop
    
    4.查看redis运行状态
    service redis status
    
    5.查看redis进程
    ps -ef | grep redis
    
    6.设置redis为开机自动启动
    chkconfig redis on
    
    7.进入redis服务
    # 进入本机redis
    redis-cli
    
    # 列出所有key
    keys *
    
    8.防火墙开放相应端口
    # 开启6379 
    /sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
    # 开启6380 
    /sbin/iptables -I INPUT -p tcp --dport 6380 -j ACCEPT
    # 保存 
    /etc/rc.d/init.d/iptables save
    # centos 7下执行 
    service iptables save
    
    9.修改redis默认端口和密码
    # 打开配置文件
    vi /etc/redis.conf
    
    # 修改默认端口,查找 port 6379 修改为相应端口即可
    # 修改默认密码,查找 requirepass foobared 将 foobared 修改为你的密码
    # 使用配置文件启动 redis
    redis-server /etc/redis.conf &
    
    # 使用端口登录
    redis-cli -h 127.0.0.1 -p 6179
    
    # 此时再输入命令则会报错
    # 输入刚才输入的密码
    auth 111
    
    # 停止redis
    redis-cli -h 127.0.0.1 -p 6179 shutdown
    
    # 使用进程ID杀死
    ps -ef | grep redis kill -9 XXX
    
    # 使用redis desktop manager远程连接redis
    

    uwsgi安装配置

    1.直接使用pip 安装uwsgi

    安装完成后配置uwsgi.ini文件

    [uwsgi]
    # 暴露给nginx代理的端口及ip
    socket=0.0.0.0:9090
    # 启动主进程,来管理其他进程,其它的uwsgi进程都是这个master进程的子进程,如果kill这个master进程,相当于重启所有的uwsgi进程。
    master=true
    # 在app加载前切换到当前目录, 指定运行目录
    chdir=/home/app/
    # 启动uwsgi的用户名和用户组
    uid=root
    gid=root
    #指定虚拟环境路径
    home=/root/.local/share/virtualenvs/app-4uwEKS64
    # 指定加载wsgi文件 app入口
    wsgi-file=app.py
    # uWSGI加载的模块中哪个变量将被调用
    callable=app
    # 设置工作进程的数量
    processes=1
    # 设置每个工作进程的线程数
    threads=4
    # 序列化接受的内容,如果可能的话
    thunder-lock=true
    # 设置缓冲
    post-buffering=4096
    # 缓冲区
    # buffer-size = 32768
    #允许用内嵌的语言启动线程。这将允许你在app程序中产生一个子线程
    enable-threads = true
    #设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,等待这个工作>结束的最长秒数。这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了
    #8秒就会被强行结束(忽略之前已经接收到的请求而直接结束)
    reload-mercy = 8
    #为每个工作进程设置请求数的上限。当一个工作进程处理的请求数达到这个值,那么该工>作进程就会被回收重用(重启)。你可以使用这个选项来默默地对抗内存泄漏
    max-requests = 5000
    #通过使用POSIX/UNIX的setrlimit()函数来限制每个uWSGI进程的虚拟内存使用数。这个配>置会限制uWSGI的进程占用虚拟内存不超过256M。如果虚拟内存已经达到256M,并继续申请>虚拟内存则会使程序报内存错误,本次的http请求将返回500错误。
    limit-as = 256
    #一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前>处理这个请求的工作进程会被回收再利用(即重启)
    harakiri = 60
    # sock文件权限
    chmod-socket=666
    # log日志权限
    logfile-chmod=644
    # uwsgi的进程名称前缀
    procname-prefix-spaced=mysite
    
    # py文件修改,自动加载
    # py-autoreload=1
    
    # 监听端口,测试时候使用
    # http=0.0.0.0:8080
    
    # 退出uwsgi是否清理中间文件,包含pid、sock和status文件
    vacuum=true
    
    # socket文件,配置nginx时候使用
    socket=%(chdir)/uwsgi.sock
    
    # status文件,可以查看uwsgi的运行状态
    stats=%(chdir)/uwsgi.status
    
    # pid文件,通过该文件可以控制uwsgi的重启和停止
    pidfile=%(chdir)/uwsgi.pid
    
    
    # 日志文件,通过该文件查看uwsgi的日志
    daemonize=%(chdir)/uwsgi.log
    
    2.启动
    uwsgi --ini uwsgi.ini
    
    3.停止
    uwsgi --stop uwsgi.pid
    
    4.重启
    uwsgi --reload uwsgi.pid
    

    相关文章

      网友评论

          本文标题:Centos7 安装部署Flask

          本文链接:https://www.haomeiwen.com/subject/zrlsyctx.html