ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

云服务器运行Python代码全攻略:从零部署到后台运行

云服务器运行Python代码全攻略:从零部署到后台运行 1. 项目概述为什么说“云服务器上跑Python代码其实很简单”很多刚接触编程或者数据分析的朋友一听到“云服务器”、“Linux命令”、“远程部署”这些词心里可能就有点发怵感觉这是运维工程师或者资深开发者的领域。我以前也是这么想的总觉得在本地电脑上跑得好好的Python脚本干嘛要折腾到云上去直到有一次我需要一个脚本7x24小时不间断地爬取数据而我的笔记本电脑不可能一直开着这才硬着头皮研究起了云服务器。结果上手之后发现这事儿远没有想象中复杂。所谓的“云服务器”你可以把它理解为一台24小时不关机的、放在遥远机房的“超级电脑”。你通过互联网远程操作它在上面安装环境、运行程序。对于运行Python代码这个核心需求来说整个过程可以拆解为几个非常清晰的步骤买服务器、连上它、装环境、传代码、跑起来。每一步现在都有成熟的工具和可视化的操作界面门槛已经大大降低。无论是腾讯云、阿里云还是其他云服务商它们提供的产品本质上都是为了让你能更简单、更便宜地获得计算资源。对于Python开发者、学生、或是需要自动化处理任务的个人来说利用云服务器可以彻底解放本地机器实现任务托管、环境隔离和资源弹性伸缩。接下来我就以一个完全新手的视角带你走一遍从零到一在云服务器上运行Python代码的全过程你会发现它真的比装一个大型游戏还要简单。2. 核心需求解析我们到底需要云服务器来做什么在动手之前我们得先想清楚为什么要把Python代码放到云服务器上跑这决定了我们后续选择什么样的服务器配置以及采用何种部署方式。根据我的经验主要的需求场景可以归纳为以下几类2.1 长期运行与任务托管这是最经典的需求。你的脚本可能需要定时执行比如每天凌晨抓取数据、需要持续监听比如一个微信机器人、或者一次运行时间长达数小时甚至数天比如训练一个简单的机器学习模型。让本地电脑长期开机并执行这些任务不现实耗电、发热、还可能因为系统更新或睡眠而中断。云服务器提供了稳定的、不间断的运行环境。2.2 环境隔离与一致性“在我电脑上运行得好好的怎么到你那就出错了”——经典的“开发环境与生产环境”问题。通过云服务器你可以为每一个项目构建一个干净、独立的环境。特别是当你需要特定版本的Python、复杂的C库依赖比如某些科学计算或深度学习框架时在服务器上配置一次就能保证每次运行结果一致不会污染本地环境。2.3 资源需求与弹性伸缩有些数据处理任务非常消耗内存或CPU。你的本地电脑可能只有8G内存处理一个几G的Pandas DataFrame就卡死了。而云服务器可以按需选择配置从1核1G的入门款到多核大内存的高配款甚至可以临时升级配置来处理峰值任务用完再降配非常灵活经济。2.4 公网访问与API服务如果你写了一个Web API比如用Flask或FastAPI、一个数据看板比如用Streamlit或Gradio或者任何需要从公网访问的服务那么云服务器几乎是必需品。它会有一个固定的公网IP地址让全世界或你指定的用户都能访问到你部署的服务。对于绝大多数个人和小型项目来说需求1长期运行和需求2环境隔离是最主要的驱动力。我们的目标就是用最低的成本和最简单的操作把写好的.py文件扔到云上让它稳定地跑起来。3. 云服务器选购与基础配置指南第一步是获得一台云服务器。国内主流的选择是腾讯云、阿里云和华为云。它们经常有针对新用户的“首购优惠”或“秒杀活动”价格非常低廉甚至有时可以免费试用一段时间。对于跑Python脚本初期我们不需要太高配置。3.1 配置选择建议系统镜像强烈推荐选择 Linux 系统特别是 Ubuntu 或 CentOS 的稳定版如 Ubuntu 22.04 LTS。原因有三第一Linux 系统本身资源占用少更稳定第二绝大多数Python服务的部署教程和社区支持都是基于Linux的第三通过命令行操作Linux是程序员的一项基础技能早学早受益。虽然Windows Server也可以但会复杂一些。硬件配置对于运行不涉及复杂计算的普通Python脚本爬虫、自动化、简单数据处理1核CPU、2GB内存、50GB SSD云硬盘的配置绰绰有余。这个配置在活动期间每月可能只需几十元。如果你的脚本需要运行Pandas、NumPy进行中等规模数据处理建议内存升级到4GB。如果需要跑TensorFlow/PyTorch模型训练那至少需要4核8G以上并考虑带GPU的机型。网络与安全组购买时一定要勾选“分配公网IP”否则你的服务器将无法从外部访问。同时系统会提示你设置“安全组”你可以把它理解为云服务器的虚拟防火墙。初始设置时为了简化可以先放行所有端口但这仅用于学习测试生产环境务必严格限制。更安全的做法是只放行22端口用于SSH连接和你未来可能需要用到的服务端口如80用于HTTP443用于HTTPS。注意很多优惠活动是“首购特惠”续费价格会恢复原价。如果你只是短期项目如一个月用完后可以直接释放销毁服务器数据记得备份。如果是长期使用可以关注“包年包月”的折扣或者在不同云厂商间迁移。3.2 获取登录凭证与远程连接购买成功后在云服务器的控制台页面你能看到这台服务器的公网IP地址。同时你需要获取登录方式。Linux服务器通常不直接使用密码登录而是通过SSH密钥对这比密码更安全。创建或导入密钥对在控制台找到“SSH密钥”管理页面创建一个新的密钥对。系统会生成一个私钥文件.pem或.rar格式让你下载到本地并自动将公钥部署到你的服务器上。这个私钥文件至关重要相当于你的“门禁卡”务必妥善保管不要泄露。使用SSH工具连接如果你使用Windows系统推荐使用PuTTY或MobaXterm。以PuTTY为例打开后在“Host Name”处填入你的公网IP端口填22。然后在左侧目录中找到Connection - SSH - Auth在“Private key file for authentication”处选择你刚才下载的私钥文件PuTTY可能需要先用puttygen工具将.pem格式转换为.ppk格式。最后点击“Open”连接。如果你使用macOS或Linux系统直接打开终端Terminal即可。首先需要给私钥文件设置正确的权限防止其他用户读取然后使用ssh命令连接。# 将私钥文件移动到~/.ssh目录下并修改权限 mv ~/Downloads/your-key.pem ~/.ssh/ chmod 400 ~/.ssh/your-key.pem # 使用ssh命令连接其中root是用户名有些镜像默认用户是ubuntu ssh -i ~/.ssh/your-key.pem root你的公网IP首次连接时会提示你确认服务器指纹输入yes即可。看到类似rootyour-server:~#的命令行提示符恭喜你你已经成功进入了你的云端电脑4. Linux环境下的Python环境搭建实操连接上服务器后我们面对的是一个纯净的Linux系统。接下来的任务就是安装Python和必要的工具。我们以最常用的Ubuntu系统为例。4.1 系统更新与基础工具安装首先更新系统的软件包列表并升级已有的软件包到最新版本。这是一个好习惯可以确保系统安全并修复已知漏洞。apt update apt upgrade -y-y参数表示自动确认所有提示避免中途需要手动输入。接着安装一些我们后续可能会用到的工具比如用于从网络下载文件的wget用于解压的unzip以及一个强大的文本编辑器vim如果你不熟悉vim也可以安装更简单的nano。apt install -y wget unzip vim4.2 Python3与Pip的安装Ubuntu 22.04 LTS 默认已经安装了 Python 3.10。我们可以先检查一下版本python3 --version如果显示版本号说明已安装。如果没有或者你需要安装其他特定版本如Python 3.9或3.11可以使用deadsnakesPPA源来安装。安装特定版本Python以Python 3.9为例add-apt-repository ppa:deadsnakes/ppa -y apt update apt install -y python3.9 python3.9-venv python3.9-distutils安装PipPython包管理工具Pip可能没有随Python一起安装。我们可以使用一个官方脚本来安装它这个脚本会安装对应Python版本的pip。# 为python3.9安装pip wget https://bootstrap.pypa.io/get-pip.py python3.9 get-pip.py rm get-pip.py # 验证安装 python3.9 -m pip --version实操心得在服务器上强烈建议使用虚拟环境Virtual Environment来管理每个项目的依赖。这能完美解决“环境隔离”的问题。你可以为你的爬虫项目创建一个虚拟环境里面安装requests和beautifulsoup4再为你的数据分析项目创建另一个里面安装pandas和numpy。它们彼此独立互不干扰。创建并使用虚拟环境# 安装虚拟环境工具如果未安装 apt install -y python3.9-venv # 为你的项目创建一个目录并进入 mkdir my_python_project cd my_python_project # 创建虚拟环境环境文件会保存在当前目录下的venv文件夹中 python3.9 -m venv venv # 激活虚拟环境 source venv/bin/activate激活后你的命令行提示符前会出现(venv)字样表示你正处在这个虚拟环境中。之后所有通过pip install安装的包都只会安装在这个环境中。5. 代码上传、运行与进程管理环境准备好了现在需要把本地的Python代码传到服务器上并让它运行起来。5.1 代码上传的几种方式使用SCP命令命令行推荐SCP是基于SSH的安全拷贝协议。在你本地电脑的终端里执行不是在服务器上。# 将本地文件上传到服务器家目录 scp -i ~/.ssh/your-key.pem /本地/路径/your_script.py root你的公网IP:~/ # 上传整个目录 scp -i ~/.ssh/your-key.pem -r /本地/路径/your_project root你的公网IP:~/使用SFTP客户端图形化易用比如FileZilla、WinSCP。连接方式和SSH类似主机填公网IP协议选SFTP用户名填root密钥文件选择你的私钥。连接成功后就可以像操作FTP一样在本地和服务器之间拖拽文件了。直接使用Git克隆如果你的代码已经托管在GitHub、Gitee等平台可以在服务器上直接git clone下来。这要求服务器上已经安装了git (apt install -y git)。5.2 运行Python脚本文件上传后回到服务器的SSH窗口进入文件所在目录激活虚拟环境如果用了的话然后直接运行。cd ~/my_python_project source venv/bin/activate python your_script.py如果脚本需要参数像在本地一样加上即可python your_script.py arg1 arg2。5.3 让脚本在后台持续运行直接在SSH窗口运行脚本一旦你关闭这个终端窗口脚本进程就会被终止。我们需要让它在后台运行并且即使退出登录也不受影响。有几种工具可以实现nohup命令最简单nohup意为“不挂起”。它会忽略挂断信号让命令在后台持续执行并将输出重定向到一个文件。nohup python your_script.py output.log 21 output.log将标准输出重定向到output.log文件。21将标准错误也重定向到标准输出即也写入output.log。让命令在后台运行。执行后会返回一个进程IDPID。你可以用jobs -l查看后台任务或者用ps aux | grep python查找进程。screen或tmux终端复用器它们可以创建一个独立的终端会话你可以在里面运行程序然后“分离”detach这个会话。即使你关闭SSH连接这个会话和其中运行的程序也会保留。之后你可以随时“连接”attach回来查看。# 安装screen apt install -y screen # 创建一个名为‘myscript’的新会话 screen -S myscript # 此时进入一个新终端在这里运行你的脚本 python your_script.py # 按下 CtrlA然后按 D即可分离这个会话回到主终端 # 重新连接会话 screen -r myscriptSystemd服务最专业、最稳定对于需要长期运行、开机自启的服务这是最佳选择。你需要创建一个服务配置文件.service文件。# 创建服务文件 vim /etc/systemd/system/my-python-service.service文件内容示例[Unit] DescriptionMy Python Script Service Afternetwork.target [Service] Typesimple Userroot WorkingDirectory/root/my_python_project ExecStart/root/my_python_project/venv/bin/python /root/my_python_project/your_script.py Restarton-failure RestartSec10 [Install] WantedBymulti-user.target然后启用并启动服务systemctl daemon-reload systemctl enable my-python-service systemctl start my-python-service # 查看状态和日志 systemctl status my-python-service journalctl -u my-python-service -f使用systemd你可以非常方便地管理服务的启动、停止、重启和查看日志并且服务器重启后服务会自动启动。6. 常见问题与排查技巧实录在实际操作中你几乎一定会遇到一些问题。下面是我踩过的一些坑和解决方法。6.1 连接与权限问题问题SSH连接超时或被拒绝。排查首先确认服务器的公网IP是否正确。然后去云服务器的控制台检查安全组规则是否放行了22端口入方向。最后检查服务器内部的防火墙如ufw是否关闭或放行了22端口 (ufw status)。问题使用密钥文件连接时提示“Permissions are too open”。解决这是私钥文件的权限太宽松不安全。在本地执行chmod 400 your-key.pemLinux/macOS或右键属性设置“只读”Windows但最好用PuTTYgen转换格式。问题执行命令提示“Permission denied”。解决这通常是权限不足。对于系统级操作如安装软件需要在命令前加sudo。对于操作文件可能需要用chmod修改文件权限或用chown改变文件所有者。6.2 Python环境与依赖问题问题pip install速度极慢或失败。解决将pip源更换为国内镜像。在用户家目录创建或修改~/.pip/pip.conf文件[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple trusted-host pypi.tuna.tsinghua.edu.cn常用的镜像源还有阿里云 (https://mirrors.aliyun.com/pypi/simple/) 和腾讯云 (https://mirrors.cloud.tencent.com/pypi/simple)。问题运行脚本时提示“ModuleNotFoundError: No module named ‘xxx’”。排查首先确认你是否在正确的虚拟环境中命令行前有(venv)。用pip list检查该模块是否已安装。如果没有用pip install安装。如果已安装检查Python解释器路径是否正确which python。问题安装某些包如psycopg2,mysqlclient时编译失败提示缺少头文件。解决这些包依赖系统级的C库。你需要先安装开发工具和对应的库。一个比较全的安装命令是apt install -y python3-dev build-essential libssl-dev libffi-dev libpq-dev具体缺少哪个库可以根据错误信息去搜索通常是libxxx-dev格式的包。6.3 进程管理与后台运行问题问题使用nohup运行后如何查看实时日志解决使用tail -f output.log命令可以实时追踪日志文件的末尾输出。问题如何优雅地停止一个后台运行的Python脚本解决首先用ps aux | grep python找到对应的进程IDPID然后使用kill PID发送终止信号。如果普通kill无效可以使用kill -9 PID强制终止但可能导致数据丢失慎用。对于systemd管理的服务使用systemctl stop service-name。问题脚本运行一段时间后自己停了nohup的日志文件也没有新错误。排查这可能是脚本内部发生了未捕获的异常导致退出。一个健壮的脚本应该用try...except包裹主逻辑并将异常信息记录到日志。另外检查服务器资源内存、磁盘是否用尽。可以用free -h查看内存df -h查看磁盘空间。6.4 网络与外部访问问题问题脚本里访问某个网站或API超时。排查首先在服务器上测试网络连通性ping 目标域名或curl -v http://目标网址。可能是服务器所在网络到目标地址不通。可以尝试修改脚本中的超时时间或者使用重试机制。另外某些云服务器的海外节点访问国内服务可能会有速度问题反之亦然。问题我部署了一个Web服务如Flask但无法从公网访问。排查第一确认你的服务是否绑定到了0.0.0.0而不是127.0.0.1localhost。Flask默认是127.0.0.1:5000只允许本机访问需要改成app.run(host0.0.0.0, port5000)。第二去云服务器控制台的安全组规则放行你服务监听的端口如5000的入方向流量。7. 进阶技巧与优化建议当你熟悉了基础操作后下面这些技巧能让你的云端Python之旅更高效、更专业。7.1 使用Docker容器化部署可选但推荐Docker可以将你的Python应用及其所有依赖打包成一个独立的“容器镜像”。在任何安装了Docker的机器上都能以完全相同的方式运行彻底解决环境一致性问题。在服务器上安装Dockerapt install -y docker.io为你的项目编写一个简单的Dockerfile# 使用官方Python镜像 FROM python:3.9-slim # 设置工作目录 WORKDIR /app # 复制依赖文件并安装 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 复制应用代码 COPY . . # 运行命令 CMD [python, your_script.py]在项目目录下构建镜像docker build -t my-python-app .运行容器docker run -d --name my-app my-python-app-d表示后台运行使用Docker后你不再需要关心服务器上的Python版本、虚拟环境管理起来非常干净。7.2 使用版本控制与自动化部署将你的代码放在Git仓库如GitHub、Gitee中。在服务器上你可以设置一个简单的自动化流程在服务器上克隆仓库。使用cron定时任务定期执行git pull拉取最新代码。如果使用Docker可以在拉取代码后重新构建和运行容器。更高级的做法是使用CI/CD工具如GitHub Actions在代码推送到仓库后自动触发在服务器上的部署脚本。7.3 监控与日志管理对于长期运行的服务监控其健康状况很重要。基础监控使用htop命令可以实时查看CPU、内存使用情况。云服务商的控制台也提供了基本的监控图表。日志集中不要只把日志写在文件里。对于多个服务可以考虑使用docker logs如果用了Docker或者将日志输出到系统日志logger命令甚至使用专门的日志收集工具如Fluentd、Loki。进程守护除了systemd还可以使用supervisor这类专门的进程管理工具它提供了更丰富的进程监控和重启功能。7.4 成本控制与资源优化云服务器的费用主要来自计算资源CPU/内存和公网带宽。选择按量计费对于流量不确定或短期项目按量计费可能比包月更划算。设置自动关机对于只在特定时间运行的脚本如每天凌晨的数据处理可以在脚本开始和结束时调用云服务商的API或使用cron任务来开机和关机节省大量费用。使用对象存储如果脚本产生大量需要永久保存的数据如图片、文件将其存放在云对象存储如腾讯云COS、阿里云OSS中通常比放在云硬盘上更便宜、更可靠。定期清理定期清理无用的Docker镜像、日志文件、临时文件释放磁盘空间。回过头看在云服务器上运行Python代码的核心步骤无非就是“连接-装环境-传代码-跑起来”。现代云平台和工具链已经把这些步骤简化到了极致。最大的障碍可能不是技术而是迈出第一步的心理门槛。从今天起试着把你本地那个需要定时运行的爬虫脚本或者那个总在吃内存的数据分析脚本丢到云服务器上去吧。当你第一次通过公网IP访问到自己部署的小服务或者看到脚本在云端稳定运行了一周而你的电脑可以安心关机时那种感觉会非常棒。这不仅是学会了一项技能更是打开了一种新的、更高效的工作流思维方式。
返回列表