美文网首页
正式部署(Python+Falsk+uwsgi+nginx+vu

正式部署(Python+Falsk+uwsgi+nginx+vu

作者: 孙子衡 | 来源:发表于2023-07-30 10:53 被阅读0次

1.更新yum

sudo yum update y

2. 安装git

sudo yum install git

如果是Ubuntu下:

sudo apt-get update
sudo apt-get install git

3.安装python3.8 到 /usr/local/下

安装依赖包:命令可以在任意位置
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel
安装wget
yum install wget
下载python3.8
wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz
# 解压压缩包
tar -zxvf Python-3.8.1.tgz  

# 进入文件夹
cd Python-3.8.1

# 配置安装位置
./configure prefix=/usr/local/python3

# 安装
make && make install
 
# 添加软连接
因为腾讯云的Centos7.6 默认安装了python3.6 软连接的python3 pip3 被占 这里使用了 python38 和 pip38
#添加python3的软链接 
ln -s /usr/local/python3/bin/python3.8 /usr/bin/python38

#添加 pip3 的软链接 
ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip38

4.安装python 虚拟环境(virtualenv)

下载虚拟环境包
pip38  install virtualenv
# 配置软连接
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
# 返回根目录 创建虚拟环境的管理目录
cd /
# 创建虚拟环境的管理目录
mkdir -p /data/env
# 进入管理目录
cd /data/env
# 创建虚拟环境
virtualenv -p /usr/bin/python38 flask_one_env
# 进入虚拟环境

# 如果是在/data/env 目录下:
source /flask_one_env/bin/activate
# 如果是其他目录下:
source /data/env/flask_one_env/bin/activate
# 退出虚拟环境
deactivate

5.安装MySQL数据库

在线下载mysql安装包
wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

安装MySQL
rpm -ivh mysql57-community-release-el7-8.noarch.rpm

安装mysql服务
cd /etc/yum.repos.d/
yum -y install mysql-server
此时如果出现 Public key  ....is not installed  说明秘钥过期
执行下面命令:
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
再次执行 
yum -y install mysql-server

启动MySQL
systemctl start mysqld

获取MySQL临时密码
grep 'temporary password' /var/log/mysqld.log

进入MySQL 
mysql -uroot -p   使用临时密码进入   C4iro:f1lj(l

把MySQL的密码校验强度改为低风险
set global validate_password_policy=LOW;

 修改MySQL密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Bysjx123#'; 

设置远程访问:
允许任意ip访问  也可以指定ip

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Bysjx123#' WITH GRANT OPTION;

刷新设置
FLUSH PRIVILEGES;

创建项目使用的数据库
create database ys_flask_db charset=utf8mb4;
create database ys_game charset=utf8mb4;

# 退出数据库
\q

关闭Cenots的防火墙
sudo systemctl disable firewalld

6.安装项目以及项目所需要的安装包

进入home目录下
cd /home

创建project文件夹
mkdir project
进入 project文件夹下
cd project
clone 后台项目
git clone https://gitee.com/xxxxx/ai-backend.git
# 项目拉取成功后进入项目
cd ai-backend/
# 在这个目录下进入虚拟环境
source /flask_one_env/bin/activate
# 在虚拟环境下 下载python所需要有的安装包
pip3 install -r requirements.txt
# 特别说明  包安装成功后 将这个包卸载掉重新安装  因为这个2.x的包 代码中使用的功能是 1.x的
pip3 uninstall itsdangerous
# 重新安装
pip3 install itsdangerous==1.1.0

# 安装成功后运行项目 (运行一次就行 用初始化 Falsk-migrate迁移工具)
python app.py 

出现如下就是运行成功了
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:8848
 * Running on http://10.0.0.9:8848]

ctrl+c  退出项目运行

# 查看Falsk-migrate 数据管理工具是否启动
flask --help
出现如下:如果有db 命令 就是成功了
(flask_one_env) [root@VM-0-9-centos ai-backend]# flask --help
Usage: flask [OPTIONS] COMMAND [ARGS]...

  A general utility script for Flask applications.

  An application to load must be given with the '--app' option, 'FLASK_APP'
  environment variable, or with a 'wsgi.py' or 'app.py' file in the current
  directory.

Options:
  -e, --env-file FILE   Load environment variables from this file. python-
                        dotenv must be installed.
  -A, --app IMPORT      The Flask application or factory function to load, in
                        the form 'module:name'. Module can be a dotted import
                        or file path. Name is not required if it is 'app',
                        'application', 'create_app', or 'make_app', and can be
                        'name(args)' to pass arguments.
  --debug / --no-debug  Set debug mode.
  --version             Show the Flask version.
  --help                Show this message and exit.

Commands:
  db      Perform database migrations.
  routes  Show the routes for the app.
  run     Run a development server.

# 下面是通过迁移命令生成表结构
flask db init :一个项目只需要执行一次
flask db migrate
flask db upgrade
# 具体执行如下:
(flask_one_env) [root@VM-0-9-centos ai-backend]# flask db init
  Creating directory '/home/project/ai-backend/migrations' ...  done
  Creating directory '/home/project/ai-backend/migrations/versions' ...  done
  Generating /home/project/ai-backend/migrations/alembic.ini ...  done
  Generating /home/project/ai-backend/migrations/env.py ...  done
  Generating /home/project/ai-backend/migrations/README ...  done
  Generating /home/project/ai-backend/migrations/script.py.mako ...  done
  Please edit configuration/connection/logging settings in '/home/project/ai-backend/migrations/alembic.ini' before proceeding.
(flask_one_env) [root@VM-0-9-centos ai-backend]# flask db migrate
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added table 'chatgpt_notice'
INFO  [alembic.autogenerate.compare] Detected added table 'sys_config'
INFO  [alembic.autogenerate.compare] Detected added table 'userinfo'
INFO  [alembic.autogenerate.compare] Detected added table 'user_title'
INFO  [alembic.autogenerate.compare] Detected added table 'user_token'
INFO  [alembic.autogenerate.compare] Detected added table 'userinfo_log'
INFO  [alembic.autogenerate.compare] Detected added table 'chatgpt_log'
  Generating /home/project/ai-backend/migrations/versions/50fbb9f45f60_.py ...  done
(flask_one_env) [root@VM-0-9-centos ai-backend]# flask db upgrade
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> 50fbb9f45f60, empty message

# 这样项目的数据库表就是添加完成

7.配置uwsgi

# 全局下载 uwsgi
pip38 install  uwsgi
# 全局链接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
在项目目录下创建配置文件
touch uwsgi.ini
touch uwsgi.pid
touch uwsgi.log
touch uwsgi.status

uwsgi.ini 的配置

[uwsgi]
# uwsgi启动时所使用的地址与端口
socket=127.0.0.1:8000
# 必须全部为绝对路径
# 项目的路径 ,pwd指令中显示的路径
chdir=/home/project/ai-backend
# flask的wsgi文件 启动文件
wsgi-file=/home/project/ai-backend/app.py
# python 程序内用以启动的 application 变量名
callable=app
# Python虚拟环境的路径 , 进入到虚拟环境目录里面执行pipenv --venv得到
virtualenv=/flask_one_env
daemonize=/home/project/ai-backend/uwsgi.log 
stats=/home/project/ai-backend/uwsgi.status 
pidfile=/home/project/ai-backend/uwsgi.pid 
# 进程相关
# 主进程
master=True
# 最大数量的工作进程
processes=10
# 线程数
threads=4
#状态检测地址
# stats = 127.0.0.1:9191


# 停止 uwsgi
uwsgi --stop uwsgi.pid
# 重启 uwsgi
uwsgi --reload uwsgi.pid

8.配置nginx

# 查看是否已经下载了nginx
nginx -v

#下载:
安装 EPEL 仓库
Nginx 不是 CentOS 官方软件源的一部分。所以,要安装 Nginx,需要添加 Extra Packages for Enterprise Linux (EPEL) 存储库。使用以下命令安装 EPEL 仓库:

sudo yum install epel-release
安装 Nginx
使用以下命令安装 Nginx:

sudo yum install nginx

# 配置nginx的conf文件
不需要在nginx的初始文件下修改
初始文件会自动加载.d下的所有conf文件
cd /etc/nginx/conf.d/
touch xxx.conf

配置xxx.conf

纯后台的配置 .conf 文件

server {
    listen 80;  # 监听请求的端口号
    server_name 43.134.178.153;  # 域名或 IP 地址

    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000;  # uWSGI 服务器监听的 IP 和端口号
    }
}

前后台一起配置的 .conf文件

server {
    listen 80;   # 前端端口
    server_name 43.134.178.153;
    
     location = / {
        return 301 /ai;
    }

    location / {
        root /home/project/ai-vue/dist;  #前端静态dist文件的路径
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
      
    }


    location /api {
        proxy_pass http://127.0.0.1:8848/;     # 反向代理到后端
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

server {
    listen 8848;  # 监听请求的端口号     这是后台的配置
    server_name 43.134.178.153;  # 域名或 IP 地址

    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000;  # uWSGI 服务器监听的 IP 和端口号

    }

}

启动nginx

systemctl status nginx
此时应该就能访问了 
如果不能访问 
重启 uwsgi 试试
uwsgi --ini  uwsgi.ini


# 检查nginx 下的 .conf 文件格式是否正确
sudo nginx -t
# 重启ngnix
sudo systemctl restart nginx

相关文章

网友评论

      本文标题:正式部署(Python+Falsk+uwsgi+nginx+vu

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