一、在Ubuntu上安装Python3.7 ```shell # 升级包索引和软件 sudo apt update sudo apt upgrade -y # 安装编译所需包 sudo apt install -y build-essential zlib1g-dev libbz2-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget # 官网下载 Python3.7 wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz # 解压 tar -xzvf Python-3.7.4.tgz # 查看已安装 Python 的位置 whereis python # 编译安装 cd Python-3.7.4 ./configure --prefix=/usr/lib/python3.7 # 配置安装位置 sudo make sudo make install # 建立软链接 sudo ln -s /usr/lib/python3.7/bin/python3.7 /usr/bin/python3.7 sudo ln -s /usr/lib/python3.7/bin/pip3.7 /usr/bin/pip3.7 # 替换系统默认(建议不要替换,会使系统发生改变,使得ufw无法使用) sudo rm -rf /usr/bin/python3 sudo ln -s /usr/lib/python3.7/bin/python3.7 /usr/bin/python3 # 默认ubuntu系统中没有pip3,直接建立软连接即可, 如果有先删除 sudo ln -s /usr/lib/python3.7/bin/pip3.7 /usr/bin/pip3 # pip 换源 sudo mkdir ~/.pip sudo vi ~/.pip/pip.conf # 写入 [global] index-url = http://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com # 保存并关闭 ``` 二、安装 JDK-11 ```shell sudo apt update sudo apt install -y openjdk-11-jdk java -version sudo update-alternatives --config java sudo nano /etc/environment JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64" source /etc/environment echo $JAVA_HOME 三、创建 Python 虚拟环境 ```shell # 更新并安装组件 sudo apt update sudo apt install -y python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools # 安装 python3-venv 软件包 sudo apt install -y python3-venv # 创建虚拟环境 cd ~ python3.7 -m venv be # 激活虚拟环境 source ~/be/bin/activate # 上传代码 # 从本地向云主机上传代码 # scp ... # 安装依赖(激活虚拟环境时都应该使用pip而不是pip3) pip install -r requirements.txt # 安装 uwsgi pip install uwsgi # 创建 wsgi.py 作为程序入口点,告诉 uWSGI 服务器如何与程序进行交互 ``` 四、安装 Nginx ```shell sudo apt-get install -y nginx # 启动 sudo /etc/init.d/nginx start sudo systemctl restart nginx sudo systemctl start nginx sudo systemctl stop nginx sudo systemctl status nginx 五、配置 uWSGI ```shell # 启用UFW防火墙,允许访问端口5000 sudo ufw allow 5000 # 测试 uWSGI 服务(若本地开启了代理注意关闭,在虚拟环境下执行) uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app # 从本地浏览器输入 http://:5000 # 关闭虚拟环境 deactivate # 创建 uWSGI 配置文件 nano ~/be/be.ini # 从 [uwsgi] 标头开始,以便 uWSGI 知道应用设置 # 需要指定两件事:模块本神,通过引用 wsgi.py 减去扩展名,以及文件中的 callable 对象,即 app [uwsgi] module = wsgi:app # 接下来,告诉 uWSGI 以主模式启动并生成5个工作进程提供实际请求 [uwsgi] module = wsgi:app master = true processes = 5 # 接下来 [uwsgi] module = wsgi:app master = true processes = 5 socket = be.sock chmod-socket = 660 vacuum = true die-on-term = true # 保存并关闭 ``` 六、创建 systemd 单元文件 ```shell sudo nano /etc/systemd/system/be.service [Unit] Description=uWSGI instance to serve be After=network.target [Service] User=ubuntu Group=www-data WorkingDirectory=/home/ubuntu/be Environment="PATH=/home/ubuntu/be/bin" ExecStart=/home/ubuntu/be/bin/uwsgi --ini be.ini [Install] WantedBy=multi-user.target # 保存并关闭 # 现在可以启动创建的 uWSGI 服务并启用它,以便它在启动时启动 sudo systemctl start be sudo systemctl enable be # 查看状态 sudo systemctl status be ``` 七、将 Nginx 配置为代理请求 ```shell sudo nano /etc/nginx/sites-available/be # 写入 server { listen 80; server_name <公网IP>; location / { include uwsgi_params; uwsgi_pass unix:/home/ubuntu/be/be.sock; } } # 保存并关闭 # 若要启用该配置,需将文件链接至 sites-enabled 目录 sudo ln -s /etc/nginx/sites-available/be /etc/nginx/sites-enabled # 通过如下命令测试语法错误 sudo nginx -t # 返回成功则重启 Nginx 进程以读取新配置 sudo systemctl restart nginx # 再次调整防火墙,不再需要通过5000端口访问,可以删除该规则,最后可以允许访问Nginx服务器 sudo ufw delete allow 5000 sudo ufw allow 'Nginx Full' # 现在可以直接通过 IP 地址访问 # 遇到错误使用如下方式检查 sudo less /var/log/nginx/error.log # 检查Nginx错误日志 sudo less /var/log/nginx/access.log # 检查Nginx访问日志 sudo journalctl -u nginx # 检查Nginx进程日志 sudo journalctl -u be # 检查你的Flask应用程序的uWSGI日志 ```