zoukankan      html  css  js  c++  java
  • 基于Centos7+Flask+Nginx+uWSGI+Python3的服务器网页搭建教程

    之前完成了贴吧签到系统的搭建,笔者想将这个功能分享给更多人使用,所以尝试搭建了一个网页,一路遇到了很多问题,最终解决了,记录下过程分享给大家

    首先安装 uWSGI ,和 Nginx 配套使用,具体用途自行查阅(已配置Python3环境)

    yum install python3-devel.x86_64
    pip3 install uwsgi

    新建一个 uWSGI 的配置文件,路径自选,笔者配置文件路径为 /root/uwsgi.ini ,项目路径为 /root/flask ,配置文件内容如下

    [uwsgi]
    socket = 127.0.0.1:8000 
    processes = 4   
    threads = 2 
    master = true
    pythonpath = /root/flask
    chdir = /root/flask module = manage callable = app memory-report = true
    py-autoreload = 1

    其中需要修改的是 callable 名,即 app = Flask(__name__) 名字,一般是 app ,笔者含有这行代码的文件名为 manage.py ,所以 module 名为 manage ,socket 最后的8000需要记下,后面配置 Nginx 需要,这个值可以修改成自己需要的

    如果已经运行过 uWSGI,可以先杀掉进程

    killall -9 uwsgi

    然后启动 uWSGI

    uwsgi --ini /root/uwsgi.ini -d /root/uwsgi.log

    不要使用 uWSGI -x 命令,一般此命令使用的是 xml 配置文件,如果要用此命令,则需要安装

    yum install libxml*

    然后重新安装 uWSGI 即可

    使用yum安装 Nginx,这个方法安装的Nginx是不支持https的,所以需要用到https的请直接跳过这一部分

    sudo yum install epel-release
    sudo yum install nginx

    使用systemctl控制Nnginx

    systemctl start nginx
    systemctl restart nginx
    systemctl enable nginx 设置开机启动
    killall -9 nginx

    然后打开Nginx配置文件,路径一般为

    /etc/nginx/nginx.conf

    也可以使用以下命令查找路径

    find / -name nginx.conf

     编辑配置文件,可以使用vim或者使用ftp软件,笔者使用的是WinSCP,因为后文需要将本地的项目传到VPS服务器,找到下文中位置(http段内),添加红色的两句,地址填写上文uWSGI里的地址,如果在 Flask 中配置了错误页面的路由,则不用修改这里的其他内容

    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000;
        root  html;
        index  index.html index.htm;
    }

    这里开始是安装https版Nginx的步骤

    去拉取官网的安装包,可以选择自行选择最新的版本,笔者使用的是当前最新版本

    wget https://nginx.org/download/nginx-1.19.2.tar.gz

    解压并进入目录

    tar zxf nginx-1.19.2.tar.gz
    cd nginx-1.19.2

    配置及编译

    1 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
    2 make && make install

    配置软链

    ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

    修改 /usr/local/nginx/conf/nginx.conf

    其中80端口映射到443端口,然后取消443端口的注释,ssl的密钥文件按实际路径填写,加密方式参考申请ssl的网站的引导,如图为阿里云的配置,然后location中加入uwsgi相关信息,保存文件后启动 / 重启nginx服务

    检查配置是否正确
    nginx -t
    启动服务
    nginx -c /usr/local/nginx/conf/nginx.conf
    重启服务
    nginx -s reload

    修改防火墙配置,允许HTTP和HTTPS通信

    sudo firewall-cmd --permanent --zone=public --add-service=http 
    sudo firewall-cmd --permanent --zone=public --add-service=https
    sudo firewall-cmd --reload 

    之后就是配置Flask项目相关的库,如果有 requirements.txt 文件,可以直接使用以下命令安装所有依赖包,如没有则需手动安装

    pip3 install -r /root/flask/requirements.txt

    笔者使用的是 MySQL ,所以也记录下 MySQL 的安装过程,在新的文章中有8.0的配置方式,以下为5.7的配置方式

    下载解压安装 MySQL

    wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm
    rpm -Uvh mysql57-community-release-el7-10.noarch.rpm
    yum install  -y  mysql-community-server

    启动 MySQL 服务,(CentOS7 已经用 systemctl 指令替代了原来的 service 命令)

    systemctl start mysqld.service

    新版MySQL安装后又默认密码,密码储存在 /var/log/mysqld.log 中,可以直接使用查找命令获得

    grep 'temporary password' /var/log/mysqld.log

    然后使用默认密码登陆,-p 为带密码登陆,回车后再输入密码

    mysql -u root -p

    然后修改密码强度保护

    set global validate_password_policy=0;
    set global validate_password_length=1;

    然后再修改密码(红色部分为你的密码)

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword';

    就可以正常使用了,退出 MySQL 界面使用 exit 命令

    但是 Flask 项目使用 MySQL 时还需要安装 mysqlclient 库(如果使用 pymysql 之类的第三方库就不需要,使用 Flask 自带的 Flask-SQLAlchemy则需要)

    yum install mysql-devel
    yum install gcc python-devel
    pip3 install mysqlclient

    MySQL 配置大致如此,然后通过 WinSCP 等 sftp 软件传输到 vps 服务器即可

    至此,大部分功能就能够正常实现了,如果你已经购买了域名,笔者使用的是阿里云,购买了域名和一年的云解析服务,然后配置云解析目标地址为服务器地址,记录类型为A,域名为 *.你的域名 即可,接下来就可以尝试打开你的网站了(初步设置完域名解析可能要一段时间才能访问)

    如果一切顺利,现在就能显示你的网站了,如果出现问题,可以通过以下途径查看问题所在

    直接运行 Flask 项目,查看是否是库安装的问题

    python3 manage.py

    如果已经访问过网站,可以在 Nginx 和 uWSGI 的日志里面查看问题

    /root/uwsgi.log
    /usr/local/nginx/log/

    如果已经能访问网站,操作数据库时出现问题,可以查看数据库的日志

    /var/log/mysqld.log

    基本能通过日志发现问题,解决方法请自行搜索报错内容

    如果是安装过程中出现问题,则可以清理完再重新安装,搜索安装过的软件和文件,先卸载软件再删除参留文件(以 MySQL 为例)

    yum remove mysql mysql-server mysql-libs mysql-server;
    如果是 yum 安装的则用 yum 卸载,用 pip 安装的用 pip卸载
    rpm -qa | grep -i mysql
    rpm 查找到的软件用 yum remove 卸载,因为依赖问题无法卸载可以使用 rpm -e --nodeps卸载,安装时不要使用 --nodeps 跳过依赖检查
    find / -name mysql
    find 查找到的文件用 rm -rf 删除(记得验证是否是正确的路径)
    chkconfig --list | grep -i mysql
    删除相关的服务 chkconfig --del mysql

    卸载完之后再查找一遍,若清理干净则可以重新安装,可同理卸载 Nginx 和 uWSGI

    理论上网页已经能正常运行在VPS上了,如果还出现其他问题,读者可以自行尝试解决并留言写下解决方法

    在此感谢以下Geeks

    CentOS 7下搭建Nginx+uWSGI+Flask
    https://blog.csdn.net/qq965194745/article/details/79417976
    
    nginx和uwsgi配置
    https://blog.csdn.net/guoqingpei/article/details/52749101
    
    如何在CentOS 7上安装Nginx
    https://blog.csdn.net/oldguncm/article/details/78855000
    Centos7.3 安装Mysql5.7并修改初始密码 https://blog.csdn.net/zyw_java/article/details/70949596 Centos pip install mysqlclient Error https://blog.csdn.net/cemao4548/article/details/78287086 centos下彻底删除MYSQL 和重新安装MYSQL https://www.cnblogs.com/cyl048/p/6879085.html

     更新时间 2018.07.21

  • 相关阅读:
    大厂面试爱问的「调度算法」,20 张图一举拿下
    键盘敲入 A 字母时,操作系统期间发生了什么
    “花呗还不起了,能不能把支付宝服务器炸掉?”
    Tomcat 报SocketException 断开的管道错误
    linux中grep命令的用法
    Linux的关机与重启
    globbing:文件名通配
    转载:Git 团队协作中常用术语
    Java多线程学习笔记
    RectTransform简析
  • 原文地址:https://www.cnblogs.com/Pyrokine/p/9095629.html
Copyright © 2011-2022 走看看