Tech Learning · 07

从零部署:
服务器、域名、SSL 与 Nginx

完整的生产环境部署流程——从购买服务器、配置域名、申请 SSL 证书,到用 Nginx 部署你的第一个网站。

约 25 分钟 实战部署 2026
如果这篇文章对你有帮助,点个赞让我知道吧 👋
感谢你的支持!🎉

部署全流程概览

把你的项目从本地搬到互联网上,让全世界都能访问,需要这几个步骤:

1

购买云服务器

一台 7×24 小时运行的远程电脑

2

注册域名

比如 yoursite.com,比 IP 地址好记

3

DNS 解析

把域名指向服务器 IP

4

ICP 备案(中国大陆服务器)

合规要求,否则无法访问

5

安装 Nginx

Web 服务器软件,处理 HTTP 请求

6

配置 SSL 证书

启用 HTTPS,加密传输

7

部署应用

上传代码,配置运行环境

购买云服务器

国内外主流服务商

服务商 优势 适合场景 价格参考
腾讯云 国内访问快、备案方便、学生优惠 面向国内用户的网站/应用 ¥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 稳定、文档多、易用

购买流程(以腾讯云为例)

1

注册账号

访问 cloud.tencent.com,注册并完成实名认证(需要身份证)

2

选择产品

进入「云服务器 CVM」或「轻量应用服务器」(新手推荐轻量,更简单)

3

配置选择

  • 地域:选择离你目标用户最近的(如北京、上海、广州)
  • 镜像:选择 Ubuntu 22.04 LTS
  • 实例规格:2核2GB 或 1核2GB
  • 网络:默认即可,带宽选 1-5 Mbps
4

设置密码

设置 root 密码(或选择密钥对登录),务必记住

5

购买时长

建议先买 1 个月测试,确认没问题再续费 1 年(有折扣)

6

支付并等待

支付后 1-2 分钟,服务器就创建好了,你会得到一个公网 IP 地址

学生优惠:腾讯云、阿里云都有学生专享套餐,1 核 2GB 服务器约 ¥10/月。需要学生认证(学信网)。

域名注册与解析

注册域名

域名就是你网站的地址,比如 example.com

在哪里买?

价格:

建议:如果用国内服务器,直接在同一家云服务商(腾讯云/阿里云)买域名,备案流程会更方便。如果用境外服务器,可以在 Namecheap 或 Cloudflare 买,价格更便宜。

DNS 解析配置

买了域名和服务器后,需要把它们关联起来——这就是 DNS 解析。

步骤:

1

登录域名管理后台(腾讯云 DNS 解析 / 阿里云云解析)

2

添加 A 记录:

  • 主机记录:@(代表根域名 example.com
  • 记录类型:A
  • 记录值:你的服务器公网 IP(如 123.45.67.89
  • TTL:600(10 分钟,默认即可)
3

添加 www 子域名(可选):

  • 主机记录:www
  • 记录类型:CNAME
  • 记录值:example.com

这样 www.example.comexample.com 都能访问

4

等待生效(通常 10 分钟内)

验证解析是否生效:

# 在本地终端运行
$ ping example.com

# 如果返回你的服务器 IP,说明解析成功
PING example.com (123.45.67.89): 56 data bytes

ICP 备案(中国大陆)

什么是 ICP 备案

ICP 备案是中国工信部要求的互联网信息服务备案制度。简单说:

重要:

  • 境外服务器(AWS、Vultr、DigitalOcean 等)无需备案
  • 只用 IP 访问(不用域名)也无需备案
  • 备案需要 10-20 天,期间网站无法访问
  • 个人备案不能做商业网站(如电商、论坛)

备案流程

以腾讯云为例(阿里云流程类似):

1

准备材料

  • 身份证正反面照片
  • 手机号(需要本人实名)
  • 邮箱
  • 服务器(已购买,在腾讯云)
  • 域名(已注册并实名认证)
2

提交备案申请

登录腾讯云备案系统,填写信息:

  • 主体信息:个人姓名、身份证号、地址、电话
  • 网站信息:网站名称(不能含有公司、论坛等词)、域名、网站描述
  • 服务器信息:选择你购买的服务器实例
3

上传资料

上传身份证照片、手持身份证照片(部分省份需要)

4

腾讯云初审

1-2 个工作日,腾讯云审核你的资料

5

工信部审核

腾讯云提交到工信部,10-20 个工作日审核

6

备案成功

收到短信和邮件通知,获得备案号(如:京ICP备12345678号)

必须在网站底部显示备案号并链接到 beian.miit.gov.cn

备案期间怎么办?备案期间域名无法访问,但可以用 IP 访问。建议先用 IP 调试好网站,备案通过后再切换到域名。

公安备案

ICP 备案通过后,还需要在 30 天内完成公安备案

流程:

  1. 访问 全国公安机关互联网站安全管理服务平台
  2. 注册账号,填写网站信息(与 ICP 备案一致)
  3. 上传服务器信息、域名证书
  4. 等待审核(通常 1-3 个工作日)
  5. 审核通过后,获得公安备案号(如:京公网安备 11010502012345号)
  6. 在网站底部显示公安备案号和图标
📋

备案号展示示例:

<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 的配置文件位置:

常用命令:

# 测试配置文件语法
$ 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),部署步骤:

1

创建网站目录

$ sudo mkdir -p /var/www/mysite
$ sudo chown -R $USER:$USER /var/www/mysite
2

上传网站文件

# 在本地电脑运行
$ scp -r ./mysite/* ubuntu@123.45.67.89:/var/www/mysite/
3

创建 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;
    }
}
4

启用配置

# 创建软链接
$ 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

获取免费 SSL 证书

使用 Let's Encrypt 提供的免费证书,通过 Certbot 工具自动申请和配置。

1

安装 Certbot

$ sudo apt install certbot python3-certbot-nginx -y
2

申请证书

$ sudo certbot --nginx -d example.com -d www.example.com

按提示操作:

  • 输入邮箱(用于证书到期提醒)
  • 同意服务条款
  • 选择是否重定向 HTTP 到 HTTPS(推荐选 2,自动重定向)
3

验证

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 应用:

1

上传代码

$ scp -r ./myflaskapp ubuntu@123.45.67.89:~/
$ ssh ubuntu@123.45.67.89
$ cd ~/myflaskapp
2

安装依赖

$ python3 -m venv venv
$ source venv/bin/activate
$ pip install -r requirements.txt
$ pip install gunicorn
3

测试运行

$ gunicorn -w 4 -b 127.0.0.1:5000 app:app

参数说明:-w 4 表示 4 个工作进程,app:app 表示 app.py 文件里的 app 对象

4

配置 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
5

用 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 应用:

1

安装 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
2

上传代码并安装依赖

$ scp -r ./mynodeapp ubuntu@123.45.67.89:~/
$ ssh ubuntu@123.45.67.89
$ cd ~/mynodeapp
$ npm install
3

用 PM2 启动

$ pm2 start app.js --name myapp

# 查看状态
$ pm2 status

# 查看日志
$ pm2 logs myapp

# 设置开机自启
$ pm2 startup
$ pm2 save
4

配置 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:网站很慢

可能原因:

问题 4:备案被驳回

常见原因:

下一步

恭喜!你已经完成了从购买服务器到部署上线的完整流程。接下来可以:

现在你的项目已经在互联网上运行了,全世界都能访问。这是一个重要的里程碑。