无封面
flask项目部署服务器教程
1.部署之前
[root@iZuf662ezm094cpns9yxkqZ ~]# cd /root/untilapp
[root@iZuf662ezm094cpns9yxkqZ untilapp]# tar -xzf Python-3.12.9.tgz
[root@iZuf662ezm094cpns9yxkqZ untilapp]# cd Python-3.12.9
[root@iZuf662ezm094cpns9yxkqZ Python-3.12.9]# ./configure --prefix=/usr/local/python3.12
[root@iZuf662ezm094cpns9yxkqZ Python-3.12.9]# make -j$(nproc)
[root@iZuf662ezm094cpns9yxkqZ Python-3.12.9]# sudo make install
[root@iZuf662ezm094cpns9yxkqZ Python-3.12.9]# python3.12 --version
[root@iZuf662ezm094cpns9yxkqZ //]# cd ~
[root@iZuf662ezm094cpns9yxkqZ ~]# python3.12 --version
[root@iZuf662ezm094cpns9yxkqZ ~]# /usr/local/python3.12/bin/python3.12 --version
[root@iZuf662ezm094cpns9yxkqZ ~]# export PATH="/usr/local/python3.12/bin:$PATH"
[root@iZuf662ezm094cpns9yxkqZ ~]# source ~/.bashrc
[root@iZuf662ezm094cpns9yxkqZ ~]# python3.12 --version
[root@iZuf662ezm094cpns9yxkqZ ~]# cd /root/untilapp
[root@iZuf662ezm094cpns9yxkqZ untilapp]# # 使用 tar 命令解压 MySQL 压缩包
[root@iZuf662ezm094cpns9yxkqZ untilapp]# tar -xvf mysql-8.0.39-linux-glibc2.28-x86_64.tar.xz -C /usr/local/
[root@iZuf662ezm094cpns9yxkqZ untilapp]# # 编辑/etc/profile文件,添加 MySQL 的 bin 目录到 PATH 环境变量中
[root@iZuf662ezm094cpns9yxkqZ untilapp]# echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
[root@iZuf662ezm094cpns9yxkqZ untilapp]# # 使配置生效
[root@iZuf662ezm094cpns9yxkqZ untilapp]# source /etc/profile
[root@iZuf662ezm094cpns9yxkqZ untilapp]# # 创建一个专门的 MySQL 用户和组
[root@iZuf662ezm094cpns9yxkqZ untilapp]# groupadd mysql
[root@iZuf662ezm094cpns9yxkqZ untilapp]# useradd -r -g mysql -s /bin/false mysql
[root@iZuf662ezm094cpns9yxkqZ untilapp]# # 将 MySQL 安装目录的所有权更改为 mysql 用户
[root@iZuf662ezm094cpns9yxkqZ untilapp]# chown -R mysql:mysql /usr/local/mysql
[root@iZuf662ezm094cpns9yxkqZ untilapp]# # 初始化 MySQL 数据目录
[root@iZuf662ezm094cpns9yxkqZ untilapp]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data
[root@iZuf662ezm094cpns9yxkqZ untilapp]# # 启动 MySQL 服务
[root@iZuf662ezm094cpns9yxkqZ untilapp]# /usr/local/mysql/bin/mysqld_safe --user=mysql &
[root@iZuf662ezm094cpns9yxkqZ untilapp]# Logging to '/usr/local/mysql/data/iZuf662ezm094cpns9yxkqZ.err'.
[root@iZuf662ezm094cpns9yxkqZ untilapp]# # 登录 MySQL
[root@iZuf662ezm094cpns9yxkqZ untilapp]# mysql -u root -p
Enter password:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'zhongxinyi';
Query OK, 0 rows affected (0.01 sec)
mysql> # 允许 root 用户从任何 IP 访问
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'zhongxinyi';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE DATABASE steamdata;
Query OK, 1 row affected (0.01 sec)
mysql> -- 更新 root 用户的权限,允许从任何主机连接
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'zhongxinyi';
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'zhongxinyi';
ERROR 1396 (HY000): Operation CREATE USER failed for 'root'@'%'
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
[root@iZuf662ezm094cpns9yxkqZ untilapp]# sudo vi /etc/systemd/system/mysql.service
[root@iZuf662ezm094cpns9yxkqZ untilapp]# sudo systemctl daemon-reload
[root@iZuf662ezm094cpns9yxkqZ untilapp]# sudo systemctl start mysql
[root@iZuf662ezm094cpns9yxkqZ untilapp]# sudo systemctl enable mysql
[root@iZuf662ezm094cpns9yxkqZ untilapp]# cd ~
[root@iZuf662ezm094cpns9yxkqZ ~]# sudo yum update
[root@iZuf662ezm094cpns9yxkqZ ~]# sudo yum install nginx
[root@iZuf662ezm094cpns9yxkqZ ~]# sudo systemctl start nginx
[root@iZuf662ezm094cpns9yxkqZ ~]# sudo systemctl enable nginx
[root@iZuf662ezm094cpns9yxkqZ ~]# sudo systemctl status nginx
[root@iZuf662ezm094cpns9yxkqZ ~]# python3.12 --version
[root@iZuf662ezm094cpns9yxkqZ ~]# pip3.12 --version
[root@iZuf662ezm094cpns9yxkqZ ~]# python3.12 -m pip install --upgrade pip
[root@iZuf662ezm094cpns9yxkqZ ~]# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
[root@iZuf662ezm094cpns9yxkqZ ~]# python3.12 get-pip.py
[root@iZuf662ezm094cpns9yxkqZ ~]# python3.12 -m pip --version
[root@iZuf662ezm094cpns9yxkqZ ~]# yum install zlib-devel
2.后来
Flask项目部署到阿里云服务器(全网最清晰简单完整部署),linux命令和脚本文件 nginx安装到服务器等每一步清晰记录
小路的蹊
于 2024-04-26 18:25:12 发布
阅读量1w 收藏 106
点赞数 34 文章标签: 服务器 flask 阿里云 版权
GitCode 开源社区 文章已被社区收录 加入社区 本文详细介绍了如何获取阿里云免费服务器,远程控制,安装Nginx作为Web服务器,配置Python虚拟环境,导入Flask项目并配置Nginx以代理Flask应用。还涵盖了如何在虚拟环境中安装Gunicorn以支持高并发部署。 摘要由CSDN通过智能技术生成 目录
一、获取免费阿里云服务器
二、远程控制阿里云服务器
三、安装nginx(web服务器)
-
更新系统软件包:
-
安装EPEL存储库
-
安装Nginx
-
启动Nginx服务并设置开机自启
-
验证Nginx安装
四、安装python虚拟环境
1.检查系统是否已安装Python3及其pip3:
-
创建Python虚拟环境
-
激活虚拟环境:
-
安装项目所需Python包
-
退出虚拟环境
五、导入项目文件
-
确保虚拟环境已激活
-
配置nginx
-
确保flask项目中入口文件host='0.0.0.0'
-
将本地flask项目文件(包括源代码、配置文件、静态资源等)复制到虚拟环境所在的目录下
-
在虚拟环境中安装Gumicorn
一、获取免费阿里云服务器 没有服务器的话可以在阿里云获取免费服务器
阿里云-计算,为了无法计算的价值
二、远程控制阿里云服务器 本文使用的XShell7
三、安装nginx(web服务器) 在部署flask项目时候,因为flask是一个轻量级的Python Web框架,其本身并不包含一个成熟的Web服务器组件,而是依赖于内置的简易服务器(werkzeug)
- 更新系统软件包: sudo yum update
-
安装EPEL存储库 sudo yum install epel-release
-
安装Nginx sudo yum install nginx
-
启动Nginx服务并设置开机自启 sudo systemctl start nginx 为了让Nginx在系统启动时自动运行,执行:
sudo systemctl enable nginx
- 验证Nginx安装 (1) 命令行检查Nginx服务状态:
sudo systemctl status nginx
(2) 浏览器访问服务器的公共IP地址
Nginx默认监听在80端口,外部想使用nginx就需要云服务器开发80端口,在云服务器控制台的左侧导航栏找到安全组,点进安全组
点进后:
点击手动添加,授权策略:默认(允许);优先级默认:默认(1);协议类型:默认(TCP);端口: 80 ;授权对象:0.0.0.0/0。
表示允许所有外部IP地址访问,然后点击保存。
如果不能访问,可能是防火墙的问题,关闭防火墙或者允许nginx端口。
四、安装python虚拟环境 1.检查系统是否已安装Python3及其pip3: python3 --version pip3 --version
如果没有安装或版本过低:
sudo yum install python3 python3-devel python3-pip
- 创建Python虚拟环境 在root目录下创建一个新的虚拟环境:
mkdir my_flaskProject cd my_flaskProject python3 -m venv my_venv 这里my_venv是虚拟机环境的名称,可以自己命名。
- 激活虚拟环境: source my_venv/bin/activate
激活后,命令行提示符前会显示虚拟环境的名字(my_venv),这表明当前正处于此虚拟环境中运行命令,此时安装的Python包将只在这个环境中生效,不会影响全局Python环境。
- 安装项目所需Python包 在虚环境中,可以使用pip安装Flask和其他项目依赖:
pip install Flask pip install -r requirements.txt # 如果存在requirements.txt文件
- 退出虚拟环境 完成开发或部署任务后,要退出当前虚拟环境,只需运行:
deactivate 五、导入项目文件
- 确保虚拟环境已激活 如果未激活:
source /root/my_flaskProject/my_venv/bin/activate 可能会提示错误信息:Permission denied 表示当前没有足够的权限来执行 activate 脚本
运行如下命令:
chmod +x /root/my_flaskProject/my_venv/bin/activate 赋予 activate 脚本执行权限
再次激活,前面出现(my_venv)激活成功!
- 配置nginx 编辑Nginx的服务器配置文件,通常位于/etc/nginx/sites-available/目录下,如果没有sites-available这个目录,可按照如下进行配置:
打开/etc/nginx/nginx.conf文件,在http{...}块内添加
server { listen 80; # 监听公网端口(此处为标准HTTP端口80) server_name your_domain.com; # 替换为您的域名或公网IP
location / { proxy_pass http://localhost:5000; # 替换为项目实际监听的本地端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } 这段配置是告诉Nginx监听公网端口80,并将所有到此服务器的请求转发到本地端口8080(是你的python项目本地运行的端口)。同时设置了必要的代理头信息。
重启Nginx服务:
sudo systemctl restart nginx 检查配置和日志
nginx -t
- 确保flask项目中入口文件host='0.0.0.0' 端口号为上述在nginx配置的项目实际监听的端口号。
if name == 'main': app.run(host='0.0.0.0', port=5000, debug=True)
- 将本地flask项目文件(包括源代码、配置文件、静态资源等)复制到虚拟环境所在的目录下 cp -r /path/to/your_project /root/my_flaskProject/my_venv/ 设置环境变量:如果应用初始化在app.py文件中则:
export FLASK_APP=app.py 如果是其他文件,例如入口在myflask.py中则:
export FLASK_APP=myflask (去掉.py)
论之前检查3306,80,5000端口防火墙
- 检查 80 端口是否已开放:
使用以下命令查看
firewalld
中已开放的端口列表:
sudo firewall-cmd --list-ports
如果 80/tcp 不在列表中,则需要开放该端口。
- 开放 80 端口:
执行以下命令将 80 端口添加到防火墙规则中,并使其永久生效(重启
firewalld
后规则仍然存在):
sudo firewall-cmd --add-port=80/tcp --permanent
命令执行成功后,会显示 success
。
- 重新加载
firewalld
配置: 添加新规则后,需要重新加载firewalld
以使配置生效:
sudo firewall-cmd --reload
使用 iptables
检查和开放 80 端口:
- 检查 80 端口的规则:
使用以下命令查看当前的
iptables
规则:
sudo iptables -L
查找是否有允许 80 端口(TCP 协议)的规则。如果没有相关规则,你需要添加。
- 添加允许 80 端口的规则: 执行以下命令添加允许 80 端口的规则:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
这将在 INPUT
链中添加一条规则,允许目标端口为 80 的 TCP 流量通过。
- 保存
iptables
规则(不同系统保存方式可能不同): 在 CentOS/RHEL 系统中,如果你安装了iptables-services
包,可以使用以下命令保存规则:
sudo service iptables save
在 Ubuntu/Debian 系统中,你可能需要使用 iptables-persistent
工具来保存规则,安装和保存的步骤如下:
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
完成上述步骤后,再次尝试通过域名 tiancj.xyz
访问你的网站,看是否能够正常访问。
运行:flask run
netstat -tulpn | grep :5000 查看端口5000进程
杀死进程:kill -9 进程id
- 在虚拟环境中安装Gumicorn 虚拟环境(如使用 virtualenv 或 conda 创建的环境)为项目提供了独立的Python运行环境。在其中安装Gunicorn和其他依赖,可以确保项目使用的是特定版本的软件包,避免与其他项目或系统全局包产生版本冲突。这样,每个Flask应用可以拥有自己的依赖集,易于管理和更新,且不会影响到服务器上其他应用程序。
pip install gunicorn 配置Gunicorn运行Flask应用: 创建一个Gunicorn启动脚本:
vim gunicorn_start.sh
!/bin/bash
设置工作目录(这里替换成您的Flask应用所在的目录)
working_directory=" /root/my_flaskProject/my_venv/"
切换到工作目录
cd "$working_directory"
设置环境变量,如果适用
export FLASK_APP=myflask.py export FLASK_ENV=production
启动Gunicorn,指定监听地址和端口,以及应用入口点
exec gunicorn --bind 0.0.0.0:5000 myflask:app 给启动脚本赋予权限:
chmod +x gunicorn_start.sh 启动Gunicorn服务:
./gunicorn_start.sh 成功后,可以查看进程
然后在nginx.conf配置(刚刚在导入项目时其实已经配置过...):
server { listen 80; # 监听公网端口(此处为标准HTTP端口80) server_name 114.55.118.198; # 替换为您的域名或公网IP
location / {
proxy_pass http://localhost:5000; # 替换为项目实际监听的本地端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600s;
}
}
完成配置后,执行以下操作以检查配置文件的正确性并重启Nginx服务:
sudo nginx -t sudo systemctl restart nginx 启动Gunicorn服务: 通过执行该脚本来启动Gunicorn服务:
如果先前有运行的端口占用,杀死进程重新启动
打开公网地址!成功! ————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_66111719/article/details/138226848
nginx配置
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
client_max_body_size 10000m; # 设置http块下允许的最大请求体大小为100M
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
client_max_body_size 10000m; # 设置server块下允许的最大请求体大小为100M
listen 80; # 监听公网端口(此处为标准HTTP端口80)
server_name tiancj.xyz 47.103.136.126; # 同时写上域名和公网IP,用空格分隔
root /usr/share/nginx/html;
location / {
proxy_pass http://127.0.0.1:5000; # 替换为项目实际监听的本地端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2;
# listen [::]:443 ssl http2;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}
记得设置mysql.service steamflask.service nginx开机自启动
steamflask.service配置
[Unit]
Description=Flask Application
After=network.target
[Service]
User=root
Group=root
WorkingDirectory=/root/flaskProjects
# 激活虚拟环境并设置 FLASK_APP 环境变量,然后启动 Flask 应用
ExecStart=/bin/bash -c 'source /root/flaskProjects/steam_venv/bin/activate && export FLASK_APP=/root/flaskProjects/app.py && flask run --host=0.0.0.0 --port=5000'
Restart=always
[Install]
WantedBy=multi-user.target
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'zhongxinyi';
评论区
暂无评论,快来发表第一条评论吧~