你有没有遇见这样的情况,买了台云服务器,然后发现自己对它毫无概念。钱付了,控制台里躺着一串公网 IP 和一串初始密码,光标停在命令行窗口里,不知道从哪下手。折腾了一整天,从完全不懂到把 Python 项目跑起来,回头看这条路的每一步其实都不难,难的是没人把这些步骤串起来讲。这篇就是从零到跑通的完整链路,买机器、远程连接、传文件、装环境,一次讲完。

云服务器到底是个什么东西

简单说,云服务器就是一台插着固定公网 IP、放在机房、永不关机的电脑。

它和你桌上的机器没有任何本质区别。CPU、内存、硬盘、网卡,一样不少。差别在三件事上。

你摸不到它。 你的电脑在你眼前,服务器在几百公里外的机架里,你只能通过网络给它下指令。

它有一个全世界都能访问的门牌号。 公网 IP 是它在互联网上的唯一地址,任何地方的人都能顺着这个地址找到它。你家宽带其实也有 IP,但那是运营商动态分配的,别人从外面找不到你。很多人第一次想开个网站给朋友看时,发现别人访问不了你的电脑,就是这个原因。想有一个稳定入口,就得买这种带固定公网 IP 的机器。

它不休息。 机房有电力、有空调、有多线带宽,机器常年开机待命。笔记本合上盖就睡,服务器要对 24 小时在线的请求负责。

这个认识先立住。后面所有操作,都是从这台「摸不到的电脑」上长出来的。

购买时你只需要想清楚四件事

打开腾讯云控制台,首页有两个入口,轻量应用服务器和云服务器 CVM。新手选轻量应用服务器就好,它是面向个人和中小项目的简化版,价格便宜、该有的都有。云服务器 CVM 配置自由度更高,等你有明确需求了再换不迟。

下单时真正需要拿主意的只有四件事,

地域。 选离你的目标用户近的节点。跑国内业务就选北京、上海、广州,跟你在哪里没关系。这一点特别重要,因为地域下单后改不了,想换只能重买一台,别图便宜选个冷门节点,回头延迟全算在你头上。

镜像。 装在机器上的操作系统。Ubuntu、Debian、CentOS 任选,跟你在旧电脑上重装系统时选 Windows 还是 Linux 是一个道理。新手统一选 Ubuntu 22.04 就行,资料多、坑少,本文所有命令都以它为基准。

规格。 新手从 2 核 2G 起步足够,跑脚本、挂服务、学手艺都够用,以后不够再升配。

密码。 设一个你能记住的初始密码,这是接下来登录用的重要凭据。腾讯云也支持密钥登录,但生成密钥是进系统之后的事,购买这一步先设密码即可。

买完之后,控制台上会多出一个实例条目。界面上按钮一大堆,新手最容易慌,其实绝大多数点击都是在改这台机器的硬件配置,真正进去操作,靠的是后面讲的 SSH。控制台里唯一要特别留心的,是安全组规则,它是服务器前的一道防火墙,决定哪些网络流量允许进来。新机器默认只放行 22 端口,也就是只允许 SSH 远程连接,其他口子全关着。

遇到「连不上」先查安全组,这条能省半天时间。怎么判断?本地敲一条 telnet 你的IP 22,通了是机器的事,不通就是安全组的事。

SSH,你进入这台机器的正门

现在你手里有三样东西,公网 IP、用户名(ubuntu 或 root)、密码。怎么用?SSH(Secure Shell)是一条加密的远程登录通道,你本地敲命令,命令通过这条通道发到服务器上执行,结果再传回来,全程加密,别人在中间截获了也只能看到一堆乱码。

你可能会想,腾讯云的网页控制台不是也能登录吗?其实这两种入口用起来感觉差不多,差别在细节上。网页控制台是云厂商在浏览器里给你模拟的一个终端,偶尔会有延迟和断连。本地 SSH 才是正路,你所有自动化操作、文件传输都建立在它上面,而且更快更稳。

Windows 用户直接打开 PowerShell,Mac 和 Linux 打开终端,输入,

ssh ubuntu@你的服务器IP

回车后提示输入密码,输入时屏幕上不会有任何显示,这是正常的,输完直接回车。看到类似这样的欢迎信息,就说明你成功进入了服务器,

Welcome to Ubuntu 22.04 LTS

从这一刻起,你敲的每一条命令,都运行在几千公里外的那台机器上。

新手最常撞见两条报错,先说结论。Connection refused,连不上,多半是安全组没放行 22 端口。Permission denied,拒绝登录,要么密码错了,要么用户名对不上(用户名里拼写错一个字母也会这样,别问我怎么知道的)。排查有一个基本顺序,从「网络通不通」到「认证对不对」逐层确认,网络层看安全组,认证层看用户名和密码,这个顺序覆盖了九成登录失败。

密码登录能用,但不该长期用。原因很现实,你的公网 IP 全世界可见,自动扫描工具天天在猜各种用户名和密码组合,密码简单点的机器,几个小时就可能被爆破。

解决方式是用密钥登录,它像一把配对的钥匙和锁,私钥留在你本地,公钥放到服务器上。服务器验证时不是比密码,而是验证你是否持有那把私钥,没有私钥的人猜一万年也进不来。

配置分两步。第一步,在本地生成一对钥匙,Windows 的 PowerShell 直接执行,

ssh-keygen -t ed25519

一路回车即可,会生成一对文件,默认在 ~/.ssh/ 目录下,id_ed25519.pub 是公钥,id_ed25519 是私钥。私钥不要发给任何人。

第二步,把公钥放到服务器上,最省事的方式如下,注意替换成你的 IP,

ssh-copy-id ubuntu@你的服务器IP

它会把本地公钥自动追加到服务器上,完成后你再 ssh 登录,就不需要输密码了。密钥登录测试通过后,就该把密码登录彻底关掉,编辑服务器上的 SSH 配置,

sudo nano /etc/ssh/sshd_config

找到 PasswordAuthentication 这一行,改成 no,保存退出,重启服务,

sudo systemctl restart sshd

这一步做完,密码爆破这条路就断了,只留密钥这一把钥匙。到这里,你已经能自由进出这台机器了。

把项目文件搬上服务器

你写好的 Python 脚本在本地电脑里,服务器是一台全新的机器,怎么把代码弄过去?服务器不是网盘,没有图形界面让你拖拽,你能用的通道就是之前那一条 SSH。scp 正好是走这条通道的「文件版 SSH」,语法几乎就是 cp 的远程版,区别只在多了一个目标地址。

scp 本地文件路径 ubuntu@服务器IP:目标目录

例如把 main.py 传到家目录,

scp main.py ubuntu@你的IP:~/

~ 是当前用户的家目录,等价于 /home/ubuntu/。如果是整个项目文件夹,就不一样了,scp 直接复制目录效率很低。标准做法是先用 tar 打包,把一个目录变成一个文件。

tar 本身不带压缩,只是把目录打包成单一文件,加 -z 参数才会用 gzip 压缩,两个参数配合是传项目前的标准动作,

tar -czf 项目名.tar.gz 项目目录

更常用的是带排除参数,把 .git、日志、虚拟环境这些不需要带上服务器的目录跳过去,体积能小一个量级,

tar -czf 项目名.tar.gz --exclude=".git" --exclude="logs" 项目目录

然后一条 scp 传过去,到服务器上解压,项目文件就位了,

scp 项目名.tar.gz ubuntu@你的IP:~/
tar -xzf 项目名.tar.gz

打包和传输本身不难,难的是细节。说真的,这三个坑我是一次性踩全过的。No such file or directory 不一定是你文件不存在,也可能是目标目录写错了,scp 不会给你建不存在的目录,先在本地确认路径,再到服务器确认目标目录。另外如果代码是 Windows 上写的,传上去后脚本可能报莫名其妙的错,先怀疑换行符问题,用 dos2unix 处理一下。

其实把文件搞上服务器有三条路,各有适用场景。scp 适合一次性的小项目,git clone 适合长期维护、多台机器(需要先把代码推到 GitHub 等托管平台),服务器直接下载适合文件已在公网的情况(比如 GitHub release,但依赖服务器网络,容易被墙)。如果你在用 git 管理代码,直接推到托管平台再在服务器上 clone 更省事,但大部分小脚本场景,tar + scp 足够。

环境隔离,让项目真的跑起来

文件传上去了,你兴冲冲敲 python main.py,结果报错满屏。再进服务器一看,Python 确实装着的,为什么跑不起来?因为服务器上的 Python 是系统共用的,直接安装依赖会污染系统环境。更麻烦的是,两个项目一个要 aiohttp 1.x、一个要 2.x,装来装去互相覆盖,某天系统组件悄悄坏掉,你都不知道是谁干的。

一个项目一个环境,依赖互不干扰,这是 Python 项目部署的第一原则。

解决方案是虚拟环境,为每个项目隔离出一套独立的 Python 环境。创建并激活,

python3 -m venv .venv

source .venv/bin/activate

.venv 是环境目录名,激活后在提示符最前面会多一个 (.venv) 标记,此时敲的 python 和 pip 都指向这个环境自身,和系统互不影响。

正规项目都会带一份 requirements.txt,列出全部依赖。有了它在服务器上安装就一行,

pip install -r requirements.txt

安装慢、卡住、超时,是国内服务器装依赖的高频事故。原因不在你,在默认的 Python 官方源 PyPI 架在境外,服务器访问经常是龟速甚至断连。解决方式是换国内镜像源,一条命令永久生效,

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

换成清华源之后,同样的安装往往从十几分钟缩到几秒。腾讯云上也可以用 https://mirrors.cloud.tencent.com/pypi/simple,就近原则哪个快用哪个。注意换源要写在安装依赖之前。如果某个依赖的安装仍然失败,先看报错尾部,多数情况是网络超时,重试或换另一个镜像即可,很少是依赖本身的问题。

启动前还有一件小事,很多人栽在这。项目里如果带了部署脚本(比如 deploy.sh),直接执行会报 Permission denied,因为新上传的文件默认没有「可执行」权限,

chmod +x deploy.sh

chmod 是改文件权限的命令,+x 表示加上可执行权限。另外需要执行系统级操作(比如安装软件)时,命令开头加 sudo,它表示用管理员权限运行。

一切就绪,进入项目目录启动,

source .venv/bin/activate

python main.py

看到程序输出正常运行,说明环境搭建成功。如果启动报错,遵循一条原则,先看日志,再在网上搜报错原文,多数报错的答案早就在那里了。

回头看看这条链路

从买机器到程序跑通,一共五步,买、连、传、装、跑,每一步都解决一个问题。

  • 云服务器是永远在线、有公网 IP 的电脑,控制台管硬件,安全组管网络
  • SSH 是进出这台机器的唯一正门,密钥登录配好后记得关掉密码登录
  • tar + scp 是文件传输的标准组合拳,排除目录参数能省大量时间
  • venv 隔离依赖,requirements.txt 一键安装,国内服务器先换镜像源
  • 权限和路径是新手两大报错源,chmod +x 和 dos2unix 是两颗定心丸

程序在终端里跑起来了,但事情还没完。等会儿关掉 SSH 窗口它会直接消失,跑挂了你也只能干瞪眼。下一篇解决的就是这件事,怎么查程序的病,怎么让它 7x24 不掉线。

更多推荐