很多人第一次把项目搬到线上,都会卡在同一个地方:本地跑得好好的程序,一放到服务器上就出问题。依赖版本对不上,端口没开,终端一关进程就没了。每个问题单看都不大,凑在一起能耗掉一下午。这篇文章用一个小型项目做例子,把在腾讯云服务器上部署应用的过程走一遍,哪一步容易出岔子都标了出来。

一、动手之前,先想清楚服务器要干什么
开机器之前,先回答三个问题:应用用什么技术栈,大概有多少访问量,数据存在哪里。这三个答案基本决定了实例规格和地域。
案例里的项目是一个基于 Python Flask 的内部报表系统,每天访问不到几百次,数据库用 MySQL。这种负载对 CPU 压力很小,2 核 4G 的通用型实例足够用。等哪天真要扛大促流量,再升配置或者加负载均衡也不迟。一开始堆高规格,只是多花钱。
地域要看用户在哪。用户集中在华东,选上海或南京节点,访问延迟会明显低一些。面向海外的话可以考虑香港或新加坡,境外节点不需要走备案流程。国内节点要绑定域名对外提供网站服务,就得先完成 ICP 备案。这一步如果没提前排进计划,上线时间很容易被拖后。
二、开通实例后,先做安全配置
在腾讯云控制台创建实例时,镜像选长期支持版的 Ubuntu 或 CentOS,本案例用的是 Ubuntu 22.04。系统盘用默认配置就行,数据盘单独挂载,之后做备份和扩容都方便。
实例起来以后,别急着装软件,先把安全收紧。具体做这几件事:
- 安全组里只放行必要端口,一般就是 22(SSH)、80 和 443(HTTP、HTTPS)。其他端口等用到了再开。
- SSH 的来源 IP 限定为自己的固定 IP。家里宽带如果是动态 IP,每次变动后都要更新规则,否则会把自己锁在外面。
- 新建普通用户,配置 SSH 密钥登录,然后关闭 root 的密码登录。
- 执行一次系统更新,把内核和基础软件的补丁装齐。
案例里一开始只开了 22 端口,还用的是默认密码。上线一周,日志里就冒出大量境外 IP 的暴力破解记录。改成密钥登录、收紧安全组之后,这些记录马上停了。安全配置越早做,后面返工越少。
三、搭建运行环境
服务器的基础环境一般由三部分组成:语言运行时、数据库和 Web 服务器。案例项目按下面的顺序安装:
- 安装 Python 3.11 和虚拟环境工具,为项目单独建一个 venv。依赖不会和系统自带的 Python 混在一起,系统工具出问题时也不会牵连项目。
- 安装 MySQL 8.0,建一个专用数据库和账号。账号只授予这个库需要的权限,别图省事给全局管理员权限。
- 安装 Nginx 作为反向代理,对外监听 80 和 443,把请求转给本机的应用进程。
- 安装 Git,从代码仓库拉取部署版本。每次部署对应一个提交记录,出问题时知道该回退到哪个版本。
有一个细节容易被忽略:数据库密码不要写进代码。放到环境变量或独立配置文件里,再把文件权限设成只有当前用户可读。代码仓库哪天不小心公开了,数据库也不会跟着暴露。
四、部署应用,让进程常驻
代码拉下来以后,依次执行依赖安装、数据库迁移和静态资源构建。所有命令都在虚拟环境里跑,保证依赖版本和开发环境一致。很多“本地正常、线上报错”的情况,根源都出在这一步的版本没对齐。
应用不能直接用 python app.py 长期跑着。SSH 一断、服务器一重启,进程就没了。推荐用 systemd 管理,写一个服务单元文件,指定工作目录、启动命令和自动重启策略。配好之后,应用能随系统开机启动,异常退出也会被自动拉起。
应用一般只监听本机回环地址,比如 127.0.0.1 的 8000 端口,外部请求统一由 Nginx 接收。这样做有两个直接好处:应用不直接暴露在公网上;静态文件、压缩和 HTTPS 证书都交给 Nginx 处理,应用本身轻松不少。
五、配置域名与 HTTPS
域名解析在腾讯云 DNS 控制台完成。添加一条 A 记录,指向服务器的公网 IP。通常几分钟就能生效,用 ping 或在线工具确认一下即可。
证书有两种选法。可以申请腾讯云提供的免费 SSL 证书,也可以用 Let’s Encrypt 加 Certbot 自动签发和续期。案例项目选的是后者,一条命令完成申请,并自动改好 Nginx 配置。证书有效期 90 天,Certbot 通过定时任务自动续签,不用人盯着。不过要确认那个定时任务真的在跑。续签失败的话,证书到期那天站点会直接显示安全警告。
HTTPS 上线后,把 HTTP 请求永久跳转到 HTTPS。这样用户不会停留在明文地址上,搜索引擎也能明确站点的主地址。
六、上线后的检查,和几个常见问题
部署完成后,按下面的顺序检查一遍:
- 用浏览器打开首页和几个核心接口,确认返回内容正常。只看首页能打开不够。
- 查看 systemd 服务状态,确认应用处于 active 状态。
- 检查 Nginx 错误日志和应用日志,留意报错和权限相关的信息。
- 手动重启一次服务器,验证应用能不能自己恢复运行。很多人会跳过这一步,但它正好能测出服务单元配置的漏洞。
- 确认数据库备份任务已经配好,并且至少成功执行过一次。没跑过的备份,等于没有备份。
案例在验收时碰到两个典型问题。第一个是静态文件 404,原因是 Nginx 配置里的根目录路径少写了一级,改过来就好了。第二个更隐蔽:应用启动正常,页面上的图表却加载不出来,查下来是跨域配置里漏了服务器的正式域名。两个问题都不复杂,但如果没有固定的检查清单,往往要等用户反馈了才发现。
七、收尾与后续优化
在腾讯云服务器上部署应用,技术门槛并不高,难的是每一步是否扎实:先规划资源,再做安全加固,接着搭环境、用进程管理工具保证常驻,最后配好域名和证书,完整验收一遍。
流程跑通之后,再考虑 Docker 容器化、CI/CD 自动发布和监控告警。这些能让部署从手工操作变成可重复、可回滚的流程。项目如果还在起步阶段,不妨先用最简单的方案上线,等真实流量和问题暴露出来,再针对性地优化。很多经验就是在线上踩出来的。