部署全流程概览
把你的项目从本地搬到互联网上,让全世界都能访问,需要这几个步骤:
购买云服务器
一台 7×24 小时运行的远程电脑
注册域名
比如 yoursite.com,比 IP 地址好记
DNS 解析
把域名指向服务器 IP
ICP 备案(中国大陆服务器)
合规要求,否则无法访问
安装 Nginx
Web 服务器软件,处理 HTTP 请求
配置 SSL 证书
启用 HTTPS,加密传输
部署应用
上传代码,配置运行环境
购买云服务器
国内外主流服务商
| 服务商 | 优势 | 适合场景 | 价格参考 |
|---|---|---|---|
| 腾讯云 | 国内访问快、备案方便、学生优惠 | 面向国内用户的网站/应用 | ¥88/年起(学生) |
| 阿里云 | 生态完善、文档丰富、企业首选 | 商业项目、企业应用 | ¥99/年起 |
| AWS | 全球覆盖、服务最全、技术领先 | 国际业务、大型项目 | 首年免费(有限额) |
| Vultr / DigitalOcean | 价格便宜、按小时计费、无需备案 | 个人项目、学习测试 | $5/月起 |
重要:使用中国大陆境内的服务器(腾讯云、阿里云等),域名必须完成 ICP 备案才能访问。境外服务器(AWS、Vultr 等)无需备案,但国内访问速度较慢。
选择配置
对于个人项目或小型网站,入门配置足够:
| 配置项 | 推荐配置 | 说明 |
|---|---|---|
| CPU | 1-2 核 | 轻量级应用够用 |
| 内存 | 2GB | 最低 1GB,推荐 2GB |
| 硬盘 | 20-40GB SSD | 系统 + 应用 + 数据 |
| 带宽 | 1-5 Mbps | 小流量网站足够 |
| 操作系统 | Ubuntu 22.04 LTS | 稳定、文档多、易用 |
购买流程(以腾讯云为例)
注册账号
访问 cloud.tencent.com,注册并完成实名认证(需要身份证)
选择产品
进入「云服务器 CVM」或「轻量应用服务器」(新手推荐轻量,更简单)
配置选择
- 地域:选择离你目标用户最近的(如北京、上海、广州)
- 镜像:选择 Ubuntu 22.04 LTS
- 实例规格:2核2GB 或 1核2GB
- 网络:默认即可,带宽选 1-5 Mbps
设置密码
设置 root 密码(或选择密钥对登录),务必记住
购买时长
建议先买 1 个月测试,确认没问题再续费 1 年(有折扣)
支付并等待
支付后 1-2 分钟,服务器就创建好了,你会得到一个公网 IP 地址
学生优惠:腾讯云、阿里云都有学生专享套餐,1 核 2GB 服务器约 ¥10/月。需要学生认证(学信网)。
域名注册与解析
注册域名
域名就是你网站的地址,比如 example.com。
在哪里买?
- 国内:腾讯云、阿里云、西部数码(需要实名认证)
- 国外:Namecheap、GoDaddy、Cloudflare(无需实名,支持信用卡)
价格:
.com域名:¥55-80/年.cn域名:¥29-50/年(需要实名,且必须备案).xyz、.top等新顶级域:¥10-30/年
建议:如果用国内服务器,直接在同一家云服务商(腾讯云/阿里云)买域名,备案流程会更方便。如果用境外服务器,可以在 Namecheap 或 Cloudflare 买,价格更便宜。
DNS 解析配置
买了域名和服务器后,需要把它们关联起来——这就是 DNS 解析。
步骤:
登录域名管理后台(腾讯云 DNS 解析 / 阿里云云解析)
添加 A 记录:
- 主机记录:
@(代表根域名example.com) - 记录类型:A
- 记录值:你的服务器公网 IP(如
123.45.67.89) - TTL:600(10 分钟,默认即可)
添加 www 子域名(可选):
- 主机记录:
www - 记录类型:CNAME
- 记录值:
example.com
这样 www.example.com 和 example.com 都能访问
等待生效(通常 10 分钟内)
验证解析是否生效:
# 在本地终端运行
$ ping example.com
# 如果返回你的服务器 IP,说明解析成功
PING example.com (123.45.67.89): 56 data bytes
ICP 备案(中国大陆)
什么是 ICP 备案
ICP 备案是中国工信部要求的互联网信息服务备案制度。简单说:
- 如果你的服务器在中国大陆境内(腾讯云、阿里云等)
- 并且用域名访问
- 就必须完成 ICP 备案,否则域名会被拦截,无法访问
重要:
- 境外服务器(AWS、Vultr、DigitalOcean 等)无需备案
- 只用 IP 访问(不用域名)也无需备案
- 备案需要 10-20 天,期间网站无法访问
- 个人备案不能做商业网站(如电商、论坛)
备案流程
以腾讯云为例(阿里云流程类似):
准备材料
- 身份证正反面照片
- 手机号(需要本人实名)
- 邮箱
- 服务器(已购买,在腾讯云)
- 域名(已注册并实名认证)
提交备案申请
登录腾讯云备案系统,填写信息:
- 主体信息:个人姓名、身份证号、地址、电话
- 网站信息:网站名称(不能含有公司、论坛等词)、域名、网站描述
- 服务器信息:选择你购买的服务器实例
上传资料
上传身份证照片、手持身份证照片(部分省份需要)
腾讯云初审
1-2 个工作日,腾讯云审核你的资料
工信部审核
腾讯云提交到工信部,10-20 个工作日审核
备案成功
收到短信和邮件通知,获得备案号(如:京ICP备12345678号)
必须在网站底部显示备案号并链接到 beian.miit.gov.cn
备案期间怎么办?备案期间域名无法访问,但可以用 IP 访问。建议先用 IP 调试好网站,备案通过后再切换到域名。
公安备案
ICP 备案通过后,还需要在 30 天内完成公安备案。
流程:
- 访问 全国公安机关互联网站安全管理服务平台
- 注册账号,填写网站信息(与 ICP 备案一致)
- 上传服务器信息、域名证书
- 等待审核(通常 1-3 个工作日)
- 审核通过后,获得公安备案号(如:京公网安备 11010502012345号)
- 在网站底部显示公安备案号和图标
备案号展示示例:
<footer>
<a href="https://beian.miit.gov.cn/" target="_blank">京ICP备12345678号</a>
<a href="http://www.beian.gov.cn/portal/registerSystemInfo" target="_blank">
<img src="beian-icon.png" alt="公安备案图标">
京公网安备 11010502012345号
</a>
</footer>
Nginx 安装与配置
安装 Nginx
SSH 登录到服务器后,安装 Nginx:
# 更新软件包列表
$ sudo apt update
# 安装 Nginx
$ sudo apt install nginx -y
# 启动 Nginx
$ sudo systemctl start nginx
# 设置开机自启
$ sudo systemctl enable nginx
# 检查状态
$ sudo systemctl status nginx
安装完成后,在浏览器访问你的服务器 IP(http://123.45.67.89),应该能看到 Nginx 的欢迎页面。
防火墙设置:确保服务器安全组/防火墙开放了 80 端口(HTTP)和 443 端口(HTTPS)。在腾讯云/阿里云控制台的「安全组规则」里添加。
基础配置
Nginx 的配置文件位置:
- 主配置:
/etc/nginx/nginx.conf - 网站配置:
/etc/nginx/sites-available/ - 启用的网站:
/etc/nginx/sites-enabled/(软链接) - 日志:
/var/log/nginx/
常用命令:
# 测试配置文件语法
$ sudo nginx -t
# 重新加载配置(不中断服务)
$ sudo systemctl reload nginx
# 重启 Nginx
$ sudo systemctl restart nginx
# 停止 Nginx
$ sudo systemctl stop nginx
# 查看错误日志
$ sudo tail -f /var/log/nginx/error.log
部署静态网站
假设你有一个静态网站(HTML、CSS、JS),部署步骤:
创建网站目录
$ sudo mkdir -p /var/www/mysite
$ sudo chown -R $USER:$USER /var/www/mysite
上传网站文件
# 在本地电脑运行
$ scp -r ./mysite/* ubuntu@123.45.67.89:/var/www/mysite/
创建 Nginx 配置
$ sudo nano /etc/nginx/sites-available/mysite
写入以下内容:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/mysite;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
启用配置
# 创建软链接
$ sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/
# 测试配置
$ sudo nginx -t
# 重载 Nginx
$ sudo systemctl reload nginx
现在访问 http://example.com 应该能看到你的网站了。
SSL 证书配置
为什么需要 HTTPS
- 安全:加密传输,防止数据被窃取
- 信任:浏览器显示🔒,用户更信任
- SEO:搜索引擎优先收录 HTTPS 网站
- 必需:很多现代 Web API(如地理定位、摄像头)要求 HTTPS
获取免费 SSL 证书
使用 Let's Encrypt 提供的免费证书,通过 Certbot 工具自动申请和配置。
安装 Certbot
$ sudo apt install certbot python3-certbot-nginx -y
申请证书
$ sudo certbot --nginx -d example.com -d www.example.com
按提示操作:
- 输入邮箱(用于证书到期提醒)
- 同意服务条款
- 选择是否重定向 HTTP 到 HTTPS(推荐选 2,自动重定向)
验证
Certbot 会自动修改 Nginx 配置,添加 SSL 相关设置。访问 https://example.com 应该能看到🔒。
Nginx HTTPS 配置
Certbot 自动生成的配置大致如下:
server {
listen 80;
server_name example.com www.example.com;
# 重定向到 HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
# SSL 证书路径(Certbot 自动配置)
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# SSL 优化配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
root /var/www/mysite;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
自动续期
Let's Encrypt 证书有效期 90 天,需要定期续期。Certbot 已自动配置了续期任务。
# 测试续期(不会真正续期)
$ sudo certbot renew --dry-run
# 手动续期
$ sudo certbot renew
# 查看自动续期任务
$ sudo systemctl list-timers | grep certbot
Certbot 会在系统中添加定时任务,每天自动检查证书是否需要续期。证书到期前 30 天会自动续期,无需手动操作。
部署应用
Flask 应用部署
用 Gunicorn + Nginx 部署 Flask 应用:
上传代码
$ scp -r ./myflaskapp ubuntu@123.45.67.89:~/
$ ssh ubuntu@123.45.67.89
$ cd ~/myflaskapp
安装依赖
$ python3 -m venv venv
$ source venv/bin/activate
$ pip install -r requirements.txt
$ pip install gunicorn
测试运行
$ gunicorn -w 4 -b 127.0.0.1:5000 app:app
参数说明:-w 4 表示 4 个工作进程,app:app 表示 app.py 文件里的 app 对象
配置 Nginx 反向代理
$ sudo nano /etc/nginx/sites-available/myflaskapp
server {
listen 80;
server_name api.example.com;
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;
}
}
$ sudo ln -s /etc/nginx/sites-available/myflaskapp /etc/nginx/sites-enabled/
$ sudo nginx -t
$ sudo systemctl reload nginx
用 systemd 管理进程
$ sudo nano /etc/systemd/system/myflaskapp.service
[Unit]
Description=My Flask App
After=network.target
[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/myflaskapp
Environment="PATH=/home/ubuntu/myflaskapp/venv/bin"
ExecStart=/home/ubuntu/myflaskapp/venv/bin/gunicorn -w 4 -b 127.0.0.1:5000 app:app
Restart=always
[Install]
WantedBy=multi-user.target
$ sudo systemctl enable myflaskapp
$ sudo systemctl start myflaskapp
$ sudo systemctl status myflaskapp
Node.js 应用部署
用 PM2 + Nginx 部署 Node.js 应用:
安装 Node.js 和 PM2
# 安装 nvm
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
$ source ~/.bashrc
# 安装 Node.js
$ nvm install --lts
# 安装 PM2
$ npm install -g pm2
上传代码并安装依赖
$ scp -r ./mynodeapp ubuntu@123.45.67.89:~/
$ ssh ubuntu@123.45.67.89
$ cd ~/mynodeapp
$ npm install
用 PM2 启动
$ pm2 start app.js --name myapp
# 查看状态
$ pm2 status
# 查看日志
$ pm2 logs myapp
# 设置开机自启
$ pm2 startup
$ pm2 save
配置 Nginx
与 Flask 类似,配置反向代理到 Node.js 监听的端口(如 3000)
运维基础
监控服务状态
# 查看系统资源
$ htop
# 查看磁盘使用
$ df -h
# 查看内存使用
$ free -h
# 查看 Nginx 访问日志
$ sudo tail -f /var/log/nginx/access.log
# 查看应用日志
$ sudo journalctl -u myflaskapp -f
定期备份
# 备份网站文件
$ tar -czf backup-$(date +%Y%m%d).tar.gz /var/www/mysite
# 备份数据库(如果有)
$ mysqldump -u root -p mydatabase > backup-$(date +%Y%m%d).sql
# 下载到本地
$ scp ubuntu@123.45.67.89:~/backup-*.tar.gz ./
更新系统
# 定期更新系统(建议每月一次)
$ sudo apt update
$ sudo apt upgrade -y
$ sudo reboot # 如果更新了内核
常见问题
问题 1:域名访问不了,显示 502 Bad Gateway
原因:后端应用没有运行。
# 检查应用状态
$ sudo systemctl status myflaskapp
$ pm2 status
# 查看错误日志
$ sudo tail -f /var/log/nginx/error.log
问题 2:HTTPS 证书申请失败
原因:域名解析未生效,或 80 端口未开放。
# 检查域名解析
$ ping example.com
# 检查 80 端口
$ sudo netstat -tlnp | grep :80
# 检查防火墙
$ sudo ufw status
问题 3:网站很慢
可能原因:
- 服务器配置太低(升级配置)
- 带宽不足(升级带宽)
- 没有启用 gzip 压缩(在 Nginx 配置中启用)
- 没有使用 CDN(考虑接入 CDN)
问题 4:备案被驳回
常见原因:
- 网站名称不合规(不能含有公司、论坛等词)
- 网站描述过于简单(需要详细说明网站用途)
- 照片不清晰(重新拍摄上传)
- 联系方式错误(确保手机号实名且能接通)
下一步
恭喜!你已经完成了从购买服务器到部署上线的完整流程。接下来可以:
- 学习 Docker 容器化部署,让环境更一致
- 配置 CI/CD 自动化部署(GitHub Actions)
- 接入 CDN 加速(腾讯云 CDN、Cloudflare)
- 配置数据库(MySQL、PostgreSQL、MongoDB)
- 学习监控和日志分析(Prometheus、Grafana)
现在你的项目已经在互联网上运行了,全世界都能访问。这是一个重要的里程碑。