阿里云Linux云服务器部署Python项目全流程详解
阿里云Linux云服务器部署Python项目全流程详解
在云计算快速普及的今天,将Python项目部署到云服务器已成为开发者的必备技能。阿里云作为国内领先的云服务提供商,其ECS云服务器具备弹性灵活、稳定可靠、成本可控等优势,成为部署Python应用的首选平台之一。本文将从实战角度出发,详细讲解在阿里云Linux系统(以CentOS 7.9为例)上部署Python项目的完整流程,涵盖环境准备、项目上传、依赖管理、服务配置、安全优化等核心环节,同时提供Flask、Django项目的具体部署示例,以及容器化部署方案,帮助不同需求的开发者快速上手,实现Python项目的稳定上线运行。
一、部署前准备:服务器选购与基础配置
1.1 阿里云ECS服务器选购
部署Python项目首先需要一台阿里云ECS云服务器,选购时需根据项目规模、访问量、资源需求选择合适的配置,避免资源不足或浪费。
需要先登录阿里云控制台,点击:阿里云控制台
进入阿里云控制台后,选择「云服务器ECS」,点击「创建实例」,核心配置选择如下:
地域与可用区:优先选择靠近目标用户群体的地域,国内推荐华东1(杭州)、华东2(上海)、华北2(北京)等,可用区选择默认即可,避免跨可用区部署增加成本。
实例规格:个人测试或小型项目选择「共享型实例」(如ecs.t5-lc2m1.nano,1核2G内存);中小型企业项目选择「计算型实例」(如ecs.c6.large,2核4G内存);高并发、大数据量项目选择「高性能实例」(如ecs.g7.xlarge,4核8G内存)。
操作系统:推荐选择Linux系统,兼容性好、性能稳定、免费开源,优先选择CentOS 7.9 64位(主流、教程多、适配性强),也可选择Ubuntu 22.04、Alibaba Cloud Linux 3等。
存储配置:系统盘默认40GB即可,数据盘根据项目大小选择,小型项目额外购买20GB高效云盘,存放项目代码、日志、静态资源等。
带宽:初期选择「按固定带宽计费」,个人项目1-3Mbps,企业项目5-10Mbps,后期可根据访问量弹性升级;公网IP勾选「分配公网IPv4地址」,确保服务器可被外网访问。
安全组:选择默认安全组或新建安全组,开放核心端口:22(SSH远程连接)、80(HTTP)、443(HTTPS)、项目自定义端口(如5000、8000),避免端口未开放导致无法访问。
配置完成后,确认订单并支付,等待服务器创建完成(约1-3分钟),创建成功后,在ECS控制台查看服务器的公网IP地址、内网IP地址、操作系统用户名(默认root),记录关键信息,后续远程连接与项目访问需使用。
1.2 远程连接服务器
Linux服务器远程连接主要通过SSH协议,Windows系统推荐使用FinalShell、Xshell、Putty等工具,Mac/Linux系统直接使用终端命令连接,以下以FinalShell为例详细说明:
下载并安装FinalShell(官网免费版),打开软件,点击「新建连接」,选择「SSH连接」。
配置连接参数:
主机:填写服务器公网IP地址
端口:默认22
用户名:root
密码:服务器创建时设置的登录密码(若忘记密码,可在ECS控制台重置实例密码)。点击「确定」,连接成功后,终端显示服务器欢迎信息,当前用户为root,命令行提示符为「[root@服务器ID ~]#」,表示已成功登录服务器。
Mac/Linux终端连接命令:
ssh root@服务器公网IP地址
输入密码后即可登录,连接成功后,建议立即修改root密码,提升服务器安全性:
passwd
按照提示输入旧密码、新密码、确认新密码,密码需包含大小写字母、数字、特殊字符,长度不少于8位。
1.3 服务器基础环境初始化
首次登录服务器,需先更新系统软件包、关闭防火墙(或开放端口)、安装基础依赖工具,确保系统环境干净、稳定,避免后续部署出现依赖冲突或网络访问问题。
步骤1:更新系统软件包
CentOS系统执行以下命令,更新所有已安装的软件包至最新版本:
yum update -y
命令执行完成后,系统自动更新内核、驱动、工具等,耗时约5-10分钟,期间请勿中断操作。
步骤2:关闭防火墙或开放端口
服务器默认开启firewalld防火墙,为避免端口拦截,可选择关闭防火墙(测试环境推荐)或开放项目所需端口(生产环境推荐)。
关闭firewalld防火墙:
systemctl stop firewalld systemctl disable firewalld
开放指定端口(以80、443、5000为例):
firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=443/tcp firewall-cmd --permanent --add-port=5000/tcp firewall-cmd --reload
查看端口开放状态:
firewall-cmd --list-ports
步骤3:安装基础依赖工具
安装wget、curl、git、vim等常用工具,方便后续下载文件、克隆代码、编辑配置文件:
yum install -y wget curl git vim net-tools
安装完成后,可通过「wget --version」「git --version」验证工具是否安装成功。
二、Python环境搭建:安装Python与虚拟环境
Linux系统默认可能预装Python,但版本较低(如Python 2.7),无法满足现代Python项目需求,需手动安装指定版本Python,并配置虚拟环境隔离项目依赖,避免不同项目依赖包冲突。
2.1 安装Python 3.9(推荐稳定版本)
CentOS 7.9默认软件仓库中的Python版本较低,需通过第三方软件仓库(EPEL)安装Python 3.9,步骤如下:
步骤1:安装EPEL仓库
yum install -y epel-release
步骤2:安装Python 3.9及pip
yum install -y python39 python39-pip python39-devel
python39-devel包含Python开发所需的头文件、库文件,用于编译安装部分依赖包(如psycopg2、numpy)。
步骤3:验证Python安装
查看Python 3.9版本:
python3.9 --version
输出「Python 3.9.18」表示安装成功。
查看pip版本:
pip3.9 --version
输出pip版本信息及Python路径,表示pip安装成功。
步骤4:配置Python与pip软链接(简化命令)
默认需使用「python3.9」「pip3.9」命令,配置软链接后可直接使用「python3」「pip3」,操作如下:
ln -s /usr/bin/python3.9 /usr/bin/python3 ln -s /usr/bin/pip3.9 /usr/bin/pip3
验证软链接:
python3 --version pip3 --version
输出版本信息表示软链接配置成功。
2.2 配置Python虚拟环境
虚拟环境可隔离不同项目的依赖包,避免全局环境污染,是Python项目部署的标准实践,推荐使用venv模块(Python 3.3+内置,无需额外安装)创建虚拟环境。
步骤1:创建项目目录
在服务器/home目录下创建项目根目录(如my_python_project),用于存放项目代码、虚拟环境、日志等:
mkdir -p /home/my_python_project cd /home/my_python_project
步骤2:创建虚拟环境
在项目目录下创建名为venv的虚拟环境(名称自定义,建议统一为venv):
python3 -m venv venv
命令执行完成后,项目目录下生成venv文件夹,包含虚拟环境的Python解释器、pip工具、site-packages目录(存放依赖包)。
步骤3:激活虚拟环境
Linux系统激活虚拟环境命令:
source venv/bin/activate
激活成功后,命令行提示符前会显示「(venv)」,表示当前处于虚拟环境中,此时使用的python3、pip3命令均为虚拟环境内的工具,安装的依赖包仅对当前虚拟环境生效。
步骤4:退出虚拟环境
完成操作后,退出虚拟环境命令:
deactivate
三、项目上传与依赖安装:本地代码迁移至服务器
Python项目开发完成后,需将本地代码上传至阿里云服务器,然后在虚拟环境中安装项目所需依赖包,确保项目运行环境完整。
3.1 本地项目准备
上传代码前,需在本地开发环境中生成依赖包清单文件requirements.txt,记录项目所有依赖包及版本,方便服务器批量安装。

步骤1:本地生成requirements.txt
本地激活项目虚拟环境,执行以下命令:
pip freeze > requirements.txt
命令执行完成后,项目根目录生成requirements.txt文件,内容示例(Flask项目):
Flask==2.3.3 gunicorn==21.2.0 python-dateutil==2.8.2 requests==2.31.0
步骤2:整理项目文件
删除本地项目中的无用文件(如__pycache__文件夹、.git目录、日志文件、虚拟环境文件夹venv),仅保留核心代码文件、静态资源文件夹(static)、模板文件夹(templates)、配置文件、requirements.txt,减少上传体积。
3.2 项目代码上传至服务器
代码上传主要有三种方式:FinalShell拖拽上传(简单)、Git克隆(推荐,适合版本控制)、SCP命令(高效),分别说明如下:
方式1:FinalShell拖拽上传(新手推荐)
在FinalShell左侧「文件」面板,导航至服务器项目目录「/home/my_python_project」。
打开本地项目文件夹,选中所有文件(除venv、__pycache__),直接拖拽至FinalShell左侧服务器目录,等待上传完成(小型项目几秒至几分钟)。
上传完成后,在服务器终端执行「ls」命令,查看项目文件是否完整。
方式2:Git克隆代码(推荐,适合团队协作)
若本地代码已托管至GitHub、Gitee、GitLab等代码仓库,可直接在服务器通过git clone命令克隆代码,无需手动上传,后续更新代码只需执行git pull。
克隆代码命令:
cd /home/my_python_project git clone 你的代码仓库地址 .
注意命令末尾的「.」,表示将代码克隆至当前目录,而非新建子目录。
方式3:SCP命令上传(高效,适合大文件)
Mac/Linux终端或Windows PowerShell执行SCP命令,上传本地项目文件夹至服务器:
scp -r 本地项目路径/* root@服务器公网IP:/home/my_python_project/
示例(Windows本地项目在D盘):
scp -r D:/my_flask_project/* root@123.45.67.89:/home/my_python_project/
输入服务器密码后,开始上传,进度实时显示。
3.3 安装项目依赖包
代码上传完成后,激活虚拟环境,通过requirements.txt批量安装依赖包,确保依赖版本与本地开发环境一致。
步骤1:激活虚拟环境
cd /home/my_python_project source venv/bin/activate
步骤2:配置pip阿里云镜像(加速安装)
默认pip使用国外源,安装速度慢且易超时,配置阿里云PyPI镜像,大幅提升安装速度:
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
步骤3:批量安装依赖包
pip install -r requirements.txt
命令执行完成后,所有依赖包自动安装至虚拟环境的site-packages目录,若安装过程中出现编译错误,需安装对应系统依赖(如安装numpy需执行yum install -y gcc)。
步骤4:验证依赖安装
以Flask为例,执行以下命令验证:
pip show Flask
输出Flask版本、安装路径等信息,表示依赖安装成功。
四、Python项目启动配置:WSGI服务器与Nginx反向代理
Python内置的开发服务器(如Flask的app.run())仅适用于测试环境,性能差、稳定性低、无法处理高并发,生产环境需使用专业的WSGI服务器(如Gunicorn、uWSGI)运行Python应用,同时配置Nginx反向代理,处理静态资源、负载均衡、请求转发,提升项目性能与安全性。
4.1 Gunicorn部署Flask项目(示例)
Gunicorn是轻量级、高性能的WSGI服务器,支持多进程、异步处理,配置简单,适合中小型Python Web项目部署。

步骤1:确认Flask项目入口文件
假设Flask项目入口文件为app.py,核心代码示例:
from flask import Flask
app=Flask(__name__)
@app.route('/')
def index():
return "Hello, 阿里云Python项目部署成功!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=False)注意:生产环境必须关闭debug模式(debug=False),避免代码泄露与安全漏洞。
步骤2:安装Gunicorn
虚拟环境中执行:
pip install gunicorn
步骤3:Gunicorn启动Flask项目
命令格式:gunicorn -w 进程数 -b 绑定IP:端口 入口文件:应用实例
启动命令(4进程,绑定0.0.0.0:5000):
gunicorn -w 4 -b 0.0.0.0:5000 app:app
参数说明:
-w 4:开启4个工作进程(推荐为CPU核心数×2+1,1核服务器设为3,2核设为5)
-b 0.0.0.0:5000:绑定服务器所有网卡的5000端口,确保外网可访问
app:app:第一个app为入口文件名app.py,第二个app为Flask应用实例名。
步骤4:后台运行Gunicorn(关闭终端不停止)
直接启动Gunicorn,关闭终端后进程会终止,需添加-D参数后台运行:
gunicorn -w 4 -b 0.0.0.0:5000 app:app -D
查看Gunicorn进程:
ps aux | grep gunicorn
输出多个gunicorn进程,表示后台启动成功。
步骤5:测试项目访问
浏览器访问「http://服务器公网IP:5000」,显示「Hello, 阿里云Python项目部署成功!」,表示Flask项目通过Gunicorn部署成功。
4.2 Gunicorn部署Django项目(示例)
Django项目部署与Flask类似,核心区别为入口文件与应用实例配置。
步骤1:Django项目目录结构
my_django_project/ ├── my_django_project/ # 项目配置目录 │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py # Django自带WSGI配置文件 ├── app/ # 应用模块 ├── manage.py └── requirements.txt
步骤2:Gunicorn启动Django项目
命令格式:gunicorn -w 进程数 -b 绑定IP:端口 项目配置目录.wsgi:application
启动命令:
gunicorn -w 4 -b 0.0.0.0:8000 my_django_project.wsgi:application -D
步骤3:Django静态资源收集
Django静态资源(图片、CSS、JS)需手动收集至指定目录,方便Nginx处理:
python manage.py collectstatic
按照提示输入「yes」,静态资源自动收集至settings.py中配置的STATIC_ROOT目录。
4.3 安装与配置Nginx反向代理
Nginx是高性能Web服务器,负责接收外网请求,转发至Gunicorn,同时处理静态资源、实现端口80/443访问、配置域名解析,是生产环境必备组件。
步骤1:安装Nginx
yum install -y nginx
启动Nginx并设置开机自启:
systemctl start nginx systemctl enable nginx
验证Nginx安装:浏览器访问服务器公网IP,显示Nginx默认欢迎页面,表示安装成功。
步骤2:配置Nginx反向代理
编辑Nginx配置文件,创建Python项目专属配置:

vim /etc/nginx/conf.d/python_project.conf
写入以下配置(Flask项目示例,端口5000):
server {
listen 80;
server_name 你的域名 服务器公网IP; # 绑定域名或直接使用IP
# 静态资源配置
location /static/ {
alias /home/my_python_project/static/; # 静态资源目录
expires 30d; # 缓存30天
}
# 动态请求转发至Gunicorn
location / {
proxy_pass http://127.0.0.1:5000; # 转发至Gunicorn监听端口
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;
}
}Django项目配置仅需修改proxy_pass端口(8000)与静态资源路径:
location /static/ {
alias /home/my_django_project/static/;
}步骤3:验证Nginx配置并重启
检查配置文件语法错误:
nginx -t
输出「syntax is ok」「test is successful」表示配置正确。
重启Nginx使配置生效:
systemctl restart nginx
步骤4:测试域名/IP访问
浏览器直接访问服务器公网IP(默认80端口),无需输入5000端口,即可访问Python项目,Nginx自动转发请求至Gunicorn,静态资源正常加载,表示反向代理配置成功。
五、进程守护与开机自启:保障项目持续运行
服务器重启或Gunicorn进程意外退出后,项目会停止运行,需配置进程守护工具(Supervisor)监控Gunicorn进程,异常时自动重启,同时配置开机自启,确保服务器重启后项目自动运行。
5.1 安装Supervisor
Supervisor是Linux系统常用的进程管理工具,可监控、管理后台进程,支持自动重启、日志记录、多进程管理。
CentOS系统安装Supervisor:
yum install -y supervisor
启动Supervisor并设置开机自启:
systemctl start supervisord systemctl enable supervisord
5.2 配置Supervisor监控Gunicorn
创建Supervisor配置文件,监控Gunicorn进程:
vim /etc/supervisord.d/python_project.ini
写入以下配置(Flask项目示例):
[program:python_project] directory=/home/my_python_project # 项目目录 command=/home/my_python_project/venv/bin/gunicorn -w 4 -b 127.0.0.1:5000 app:app # Gunicorn启动命令(使用虚拟环境内的gunicorn) autostart=true # 开机自启 autorestart=true # 进程异常退出时自动重启 startretries=3 # 启动失败重试次数 stdout_logfile=/home/my_python_project/logs/gunicorn.log # 标准输出日志 stderr_logfile=/home/my_python_project/logs/gunicorn.err.log # 错误日志 user=root # 运行用户
创建日志目录:
mkdir -p /home/my_python_project/logs
更新Supervisor配置,生效新配置:
supervisorctl update
启动监控进程:
supervisorctl start python_project
查看进程状态:
supervisorctl status
输出「python_project RUNNING」表示进程监控配置成功,Gunicorn进程由Supervisor管理,异常时自动重启。
六、容器化部署(Docker):标准化环境与快速迁移
Docker容器化部署可将Python项目、依赖、运行环境打包为镜像,实现环境标准化、一致性,避免「本地运行正常,服务器报错」问题,同时支持快速迁移、批量部署,适合企业级项目。
6.1 安装Docker与Docker Compose
步骤1:安装Docker
yum install -y docker-ce systemctl start docker systemctl enable docker
验证Docker安装:
docker --version
步骤2:安装Docker Compose
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
验证Docker Compose安装:
docker-compose --version
6.2 编写Dockerfile(构建项目镜像)
在项目根目录创建Dockerfile文件,定义镜像构建规则:
vim Dockerfile
写入以下内容(Flask项目示例):
# 基础镜像(阿里云Python镜像,国内拉取快) FROM alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/python:3.9.18 # 设置工作目录 WORKDIR /app # 复制依赖文件 COPY requirements.txt . # 安装依赖(阿里云镜像加速) RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ # 复制项目代码 COPY . . # 暴露端口 EXPOSE 5000 # 启动命令 CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "app:app"]
6.3 编写docker-compose.yml(容器编排)
创建docker-compose.yml文件,定义容器服务、端口映射、数据卷、网络配置:
vim docker-compose.yml
写入以下内容:
version: '3' services: python_app: build: . # 基于当前目录Dockerfile构建镜像 container_name: python_project_container ports: - "5000:5000" # 主机端口:容器端口 volumes: - /home/my_python_project:/app # 数据卷映射,代码修改实时生效 restart: always # 容器异常自动重启
6.4 启动Docker容器
构建镜像并启动容器:

docker-compose up -d
-d:后台启动容器。
查看容器状态:
docker-compose ps
输出容器运行状态,表示启动成功,浏览器访问「http://服务器公网IP:5000」即可访问项目。
七、安全配置与性能优化:提升项目稳定性与安全性
项目部署上线后,需进行安全配置与性能优化,防止恶意攻击、提升访问速度、降低服务器压力,确保项目长期稳定运行。
7.1 安全配置
关闭root密码登录,启用SSH密钥登录:避免暴力破解密码,提升SSH连接安全。
配置Nginx HTTPS(SSL证书):阿里云免费申请SSL证书,配置HTTPS加密传输,防止数据泄露。
设置防火墙白名单:仅开放必要端口,限制IP访问,屏蔽恶意请求。
定期更新系统与依赖包:修复安全漏洞,避免漏洞被利用攻击服务器。
禁用Gunicorn debug模式:生产环境关闭debug,防止代码泄露与远程代码执行。
7.2 性能优化
Gunicorn进程数优化:进程数设为CPU核心数×2+1,避免进程过多导致资源竞争。
Nginx静态资源缓存:配置静态资源缓存时间(如30天),减少重复请求,提升访问速度。
数据库优化:若项目使用数据库,配置数据库连接池、索引优化、慢查询日志,提升数据库响应速度。
启用阿里云CDN加速:静态资源托管至OSS,配置CDN加速,减轻源站压力,提升全国访问速度。
服务器配置升级:访问量增大时,升级服务器CPU、内存、带宽,避免资源瓶颈。
八、常见问题与解决方案
问题1:Gunicorn启动失败,提示端口被占用
解决方案:查看端口占用进程(lsof -i:5000),杀死占用进程(kill -9 进程ID),或修改Gunicorn监听端口。问题2:浏览器访问IP无法打开项目,提示连接超时
解决方案:检查安全组是否开放对应端口、防火墙是否放行、Nginx是否正常运行、Gunicorn是否监听0.0.0.0。问题3:依赖安装失败,提示编译错误
解决方案:安装系统依赖包(如gcc、python39-devel、mysql-devel),再重新安装依赖。问题4:服务器重启后项目无法自动启动
解决方案:检查Supervisor配置是否正确、autostart是否设为true、Supervisor是否开机自启。问题5:Docker容器启动失败,提示镜像构建错误
解决方案:检查Dockerfile语法、依赖文件是否存在、网络是否正常,重新构建镜像(docker-compose build)。
九、总结
本文详细讲解了阿里云Linux云服务器部署Python项目的完整流程,涵盖服务器选购、环境准备、代码上传、依赖安装、WSGI服务器配置、Nginx反向代理、进程守护、容器化部署、安全优化等核心环节,提供了Flask、Django项目的具体部署示例,以及常见问题解决方案。
对于小型个人项目,推荐使用传统部署方式(Gunicorn+Nginx+Supervisor),配置简单、成本低;对于企业级项目或需要频繁迁移、批量部署的场景,推荐使用Docker容器化部署,实现环境标准化、一致性,提升部署效率与可维护性。
部署完成后,需定期监控服务器运行状态、项目日志、访问流量,及时处理异常问题,同时根据业务增长情况,弹性升级服务器配置,优化项目性能,确保Python项目在阿里云服务器上稳定、高效运行。
十、常见问答
Q1:阿里云Linux服务器部署Python项目,必须用CentOS系统吗?
A1:不是必须,CentOS是最主流、教程最多的选择,兼容性好;也可选择Ubuntu、Alibaba Cloud Linux等Linux系统,部署流程基本一致,仅部分命令(如安装软件)略有差异。
Q2:为什么生产环境不能用Python内置的开发服务器?
A2:Python内置开发服务器仅适用于本地测试,性能差、单进程、无法处理高并发,且安全性低,暴露敏感信息;生产环境需用Gunicorn、uWSGI等专业WSGI服务器,支持多进程、异步处理,稳定性与性能更强。
Q3:虚拟环境有必要创建吗?不创建会有什么问题?
A3:非常有必要创建虚拟环境;不创建的话,所有项目依赖包安装在全局环境,不同项目依赖包版本冲突,导致项目运行报错,且全局环境杂乱,难以维护,虚拟环境可隔离依赖,避免冲突。
Q4:Nginx反向代理的作用是什么?必须配置吗?
A4:Nginx反向代理核心作用:接收外网请求、转发至Gunicorn,处理静态资源、实现80/443端口访问、配置域名解析、负载均衡;生产环境建议配置,可提升项目性能、安全性、可访问性,不配置也能通过端口直接访问,但性能差、无静态资源处理能力。
Q5:Docker容器化部署相比传统部署有哪些优势?
A5:Docker优势:环境标准化,避免本地与服务器环境差异导致的报错;快速迁移,打包为镜像后可在任意支持Docker的服务器快速部署;隔离性强,容器内环境独立,不影响服务器全局环境;可批量部署,支持集群编排,适合企业级高并发场景。
Q6:如何监控阿里云服务器上Python项目的运行状态?
A6:可通过三种方式监控:1. Supervisor:查看进程状态(supervisorctl status),查看日志文件;2. Nginx日志:查看/var/log/nginx/access.log(访问日志)、error.log(错误日志);3. 阿里云ECS控制台:监控服务器CPU、内存、带宽、磁盘使用率,设置告警规则,异常时及时通知。



