一站式搭建网站:购买服务器,域名,备案,配置SSL证书,自动续期

00 引言

  • 自己经常会写一些技术笔记,记录自己的学习过程。但是有时在工作中或外面不方便使用电脑,于是想自己搭建一个在线的网站,记录自己的笔记,方便随时查看。

  • 之前的网站都是用的IP+端口直接访问,配置的自签名证书。自己用着还行,别人想要使用的话就会弹出不安全的提示。于是,今天索性购买一个域名,做下备案,然后配置正式的CA证书。特此记录一下过程,有需要的同学和参考。

整个过程包括一下几步:

  1. 购买云服务器
  2. 购买域名
  3. 网站备案
  4. 配置DNS解析
  5. 配置Let's Encrypt证书及自动续期

01 购买云服务器

  • 我很早就买了阿里云的服务器。目前比较划算的是99元/年的2核(vCPU)2GiB的服务器,续费也是每年99元。
  • 购买很简单:直接访问阿里云官网(https://www.aliyun.com),按下方图片指示购买就行了。
  • 由于我已经购买过了,所以这里显示的价格不是99.

温馨提醒:选择服务器区域时,尽量选择一线城市,比较稳定。我之前买的区域在南京,现在南京和福州已经停止服务,正好今年4月服务器也到期,因此又重新买了杭州的。如果碰见这种情况,就需要迁移数据。因为我的服务器没什么重要数据,所以就直接释放掉,重新购买新的,仍然还是99元/年。

02 购买域名

  • 因为服务器使用的阿里云,所以域名也一并在阿里云购买了,后面进行备案也方便。
  • 官网地址(https://wanwang.aliyun.com/domain),按下面步骤查询域名是否能被注册。

  • jiuyuanying.top 是我刚注册的域名,这里显示已被注册,

  • 对于未注册的域名,可以点击【立即注册】进行注册,可以看到不同注册年限的价格,根据需要进行选择。选择时间越长,均价就越低。

温馨提示:不同域名的价格差异比较大,越是简短的域名价格越贵。

配置信息模板

  • 点击【立即注册】后,根据需要选择年限,可以看到价格。购买域名还需要信息模板(类似于个人认证,后面买的域名需要认证到这个信息模板上)
  • 点击【创建信息模板】,右侧弹出表单,填写即可,然后等待审核通过(不到半个小时就通过了)

  • 域名购买成功后,进入【域名控制台】,左侧【域名管理】->【域名列表】,点击购买的域名,点击下方左侧的【域名所有者实名认证】,选择已经审核过的【信息模板】,提交就可以,把域名绑定到自己名下。我这是认证好的情况。

03 网站备案

  • 根据工信部的要求,网站域名如果解析到中国内地服务器,必须完成ICP备案。阿里云已经集成了备案的功能。【首页】->【产品】->【域名和网站】->【备案服务】
  • 备案流程

  • 我是在手机上的阿里云APP备案的,官网则通过【备案控制台】左侧的【备案基础服务】->【开始ICP备案】进行备案。添加相关信息,上传身份证和自己的照片。

温馨提示:注册域名满三天后才可进行ICP备案。虽然我在阿里云上提交备案,但是系统在三天后才会提交给管局审核。还请耐心等待。

04 配置DNS解析

  • 在【域名控制台】中找到注册的域名,点击右侧【解析】,

  • 配置操作如下,可以添加多个配置,常用的主机记录是 www@
  • www 表示可以解析 www.jiuyuanying.top
  • @ 表示直接输入域名也能解析 jiuyuanying.top

  • 配置完成之后,由于还没有完成备案,所以还无法访问网站,但是通过 ping jiuyuanying.top(Powershell 使用 Resolve-DnsName jiuyuanying.top)是可以解析到实际IP地址的。

05 配置Let's Encrypt证书及自动续期

  • 阿里云本身提供的也有免费证书:点开域名后,基本信息中有【开启SSL证书】,其中的【个人测试证书】是可以免费使用的,分为【个人测试证书(免费版)】和【个人测试证书(pro)】,有效期分别为3个月和6个月,不支持续费,所以没有选择。Let's Encrypt 提供免费可自动续期的证书,因此决定使用 Let's Encrypt。

  • Let's Encrypt 是全球最大的免费证书颁发机构,由Linux基金会、Mozilla、Google 等联合发起。根证书被所有主流浏览器信任。其提供了 certbot 工具用来完成证书申请和自动续期。

  • 环境说明:我的服务器使用的 Debian13 系统,手动编译安装的 nginx。服务器需要放行80端口

安装cerbot

# 安装依赖
sudo apt update
sudo apt install python3 python3-dev python3-venv libaugeas-dev gcc

# 创建虚拟环境
python3 -m venv /home/zmy/software/certbot/
# 升级pip
/home/zmy/software/certbot/bin/pip install --upgrade pip

# 安装cerbot
/home/zmy/software/certbot/bin/pip install certbot
# 加入系统路径
sudo ln -s /home/zmy/software/certbot/bin/certbot /usr/local/bin/certbot
# 查看是否安装成功
certbot --version

# 配置相关路径
makedir /home/zmy/software/certbot/{logs,work,config,cert}

# 生成证书,使用webroot模式
certbot certonly --webroot \
-w /home/zmy/software/nginx/install/html \
-d jiuyuanying.top \
--cert-path /home/zmy/software/certbot/cert \
--config-dir /home/zmy/software/certbot/config \
--work-dir /home/zmy/software/certbot/work \
--logs-dir /home/zmy/software/certbot/logs
  • webroot 插件的工作原理是为你请求的每个域名创建一个临时文件,地址为 ${webroot-path}/.well-known/acme-challenge。然后,Let's Encrypt 验证服务器会发出 HTTP 请求,验证每个请求域名的 DNS 是否解析到运行 certbot 的服务器。(通过80端口)
server {
    listen 80;
    server_name jiuyuanying.top;
    # 放行验证目录
    location /.well-known/acme-challenge/ {
        root html;
        try_files $uri =404;
    }
}
  • 成功输出
zmy@zmy-aliyun:~/software/certbot$ certbot certonly --webroot -w /home/zmy/software/nginx/install/html -d jiuyuanying.top --cert-path /home/zmy/software/certbot/cert --config-dir /home/zmy/software/certbot/config --work-dir /home/zmy/software/certbot/work --logs-dir /home/zmy/software/certbot/logs
Saving debug log to /home/zmy/software/certbot/logs/letsencrypt.log
Requesting a certificate for jiuyuanying.top

Successfully received certificate.
Certificate is saved at: /home/zmy/software/certbot/config/live/jiuyuanying.top/fullchain.pem
Key is saved at:         /home/zmy/software/certbot/config/live/jiuyuanying.top/privkey.pem
This certificate expires on 2026-10-16.
These files will be updated when the certificate renews.

NEXT STEPS:
- The certificate will need to be renewed before it expires. Certbot can automatically renew the certificate in the background, but you may need to take steps to enable that functionality. See https://certbot.org/renewal-setup for instructions.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • 生成的证书被放置在自定义的路径:/home/zmy/software/certbot/config/live/jiuyuanying.top 目录下。要用到的有两个 fullchain.pemprivkey.pem
  • nginx 中配置生成的证书
server {
  listen 443;  
  server_name jiuyuanying.top;
  ssl_certificate ssl/fullchain.pem; 
  ssl_certificate_key ssl/privkey.pem;
}

自动续期

  • 手动测试从新申请证书,由于ICP备案还没完成,暂时 http 访问 80 端口被拦截,等备案通过,再给大家说一下结果。但是配置是没问题的。
certbot renew --dry-run \
--cert-path /home/zmy/software/certbot/cert \
--config-dir /home/zmy/software/certbot/config \
--work-dir /home/zmy/software/certbot/work \
--logs-dir /home/zmy/software/certbot/logs
  • 创建定时任务,每隔2个月的1号凌晨3点执行(使用绝对路径,避免环境问题
  • (crontab -l; echo '0 3 1 */2 * /home/zmy/software/certbot/bin/certbot renew --cert-path /home/zmy/software/certbot/cert --config-dir /home/zmy/software/certbot/config --work-dir /home/zmy/software/certbot/work --logs-dir /home/zmy/software/certbot/logs --deploy-hook "sudo systemctl reload nginx"')|crontab -

--deploy-hook "sudo systemctl reload nginx" 的意思是每次成功续订后运行,类似的还有 --pre-hook--post-hook 在每次申请前后都执行。

提醒一下:不要直接在微信公众号中复制代码到服务器,因为复制的内容中时不时就出现 NBSP 不可打印字符,看着是空格,实际不是,运行命令会有问题,把复制内容粘贴到 notepad++ 看一下没问题再复制到服务器。复制到脚本中记得使用 LF 的换行符,都是血泪教训。

结束语

  • 过几天备案通过了再分享一下成果。
  • 本次的分享就结束了,如有疑问 请留言讨论,我一定及时回复。

觉得有用的话,还请关注一下我的公众号!*
4a17221b56bd7764b3bc35cfc0b0e13f

posted @ 2026-07-18 23:56  九原鹰  阅读(2)  评论(0)    收藏  举报