简单叙述下博客部署流程,以及配置CDN,图床
本次部署博客采用的是 halo 框架(建站)+Nginx proxy manager(反向代理)
服务器域名准备
服务器
这里记录购买服务器的经验 买服务器要注意几个点,新用户注册几个服务厂商(腾讯云,阿里云,华为云,京东云)时,第一笔消费会相较尤为的底,并且还会有用户的首单又会推荐。但是对于个人建站来看云服务器数据的迁移是极为不便的。云服务器的购买不能只看第一年的优惠,一定要看后续续费的价格,其中买的时候一定要注意带宽流量包等相关信息。用超了很贵,很贵,很贵。 一般买服务器要注意几个时间点:
新用户的第一单特惠,仔细看续费的价格(这是最重要的)
每年的 618,双 11 活动(尤其是其中的秒杀活动,抢到了就很便宜)
续费同价的活动
学生认证
域名
域名个人使用,在购买的时候,什么最好是挑选 cn, com, top, xyz 等常见后缀,原因是这几个后缀在续费的时候大概率是最便宜的。 各个厂商给新用户的第一单域名,各种有含义的后缀贵则 15 一年,少则 1 元一年而且都比常用后缀域名偏移,所以我第一单买了. fun 后缀的域名,然后麻烦事就来了。 紧记:无论服务器还是域名,买的时候不是看第一年价格而是后续的续费价格 fun 后缀的域名后续每年的续费在 115,以及赶上续费同价的服务器价格的四分之三了。 一旦到期,后续想要换域名,那么备案,图床,CDN 等都得重弄,十分耗时麻烦。(巨大的时间成本)
博客建站
建站
对于博客的建站有很多的框架可以给人使用但是主要分为两大类 :静态,动态 静态常见的右 Hexo, Hugo, VuePress, GitBook, 动态的有 Halo,WordPress, Solo 等 静态的不需要服务器的使用就可以搭建博客,动态的必须要有服务器 由于自己买了服务器,并且学习的语言是 Java 所以选择了 Halo 作为搭建博客的搭建 先行条件:安装 docker,docker-compose 安装好后,先 docker 创建一个博客各项要用的内部网络:halo_network
docker network create halo_network
对于每一种建站的方式,官方文档都给出了具体的文档,这里我参考 Halo 的官方文档进行建站,采用 docker-compose 进行 halo+mysql 的安装,用 Nginx proxy manager 进行反向代理。
根据 Halo docker-compose 安装文档 最终的配置 xml 文件如下:
version: "3"
services:
halo:
image: registry.fit2cloud.com/halo/halo:2.20
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
- halo_network
volumes:
- ./halo2:/root/.halo2
ports:
- "8090:8090" # 如不希望暴露端口,可注释
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
environment:
- JVM_OPTS=-Xmx256m -Xms256m
command:
- --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
- --spring.r2dbc.username=root
- --spring.r2dbc.password=密码
- --spring.sql.init.platform=mysql
- --halo.external-url=https://域名
halodb:
image: mysql:8.1.0
restart: on-failure:3
networks:
- halo_network
command:
- --default-authentication-plugin=caching_sha2_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --explicit_defaults_for_timestamp=true
volumes:
- ./mysql:/var/lib/mysql
- ./mysqlBackup:/data/mysqlBackup
ports:
- 3306:3306
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
interval: 3s
retries: 5
start_period: 30s
environment:
- MYSQL_ROOT_PASSWORD=密码
- MYSQL_DATABASE=halo
networks:
halo_network:
external: true
对于 Halo Nginx Proxy Manager (反向代理)
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginxproxymanager-app-1
restart: unless-stopped
ports:
- '80:80' # HTTP
- '81:81' # 管理界面
- '443:443' # HTTPS
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
- halo_network
networks:
halo_network:
external: true
根据文档运行对应的 docker-compose. yaml, 创建出对应的组件,初始化halo
反向代理
对于Nginx proxy manager 安装好后,浏览器打开对应服务器 ip 的 80 端口(服务器防火墙记得开放相关端口),配置好 halo 的反向代理。
注册进入对应的界面 点击对应的 Hosts 的 Proxy Hosts 再点击 Add Proxy Host
填写相关信息(这部分信息 Halo Nginx Proxy Manager (反向代理) 都有写)
我们这里主要关注 SSL,在 SSL 部分如果我们的网站想要通过 https 访问,就一定要配置对应的 ssl 证书,这个证书可以在 SSL Certificates 处申请,选择 Add Certificates 选择 Lets's Encrypt
然后填写保存
最后将对应的 ssl 证书加载进入对应的 Proxy Hosts 中即可
Nginx proxy manager 处申请的免费证书,只要不关闭Nginx proxy manager 对应的端口,就会在快过期时自动续上,比服务器厂商提供的免费证书更方便。
域名解析 DNS
域名只是购买和进行反向解析还不够,还必须结合 DNS 进行网络解析才能用。 由于 IP 地址是由一串容易混淆的数字串构成,人们很难记忆所有计算机的 IP 地址,这样对于我们日常工作生活访问不同网站是很困难的。基于这种背景,人们在 IP 地址的基础上又发展出了一种更易识别的符号化标识,这种标识由人们自行选择的字母和数字构成,相比 IP 地址更易被识别和记忆,逐渐代替 IP 地址成为互联网用户进行访问互联的主要入口。这种符号化标识就是域名。域名虽然更易被用户所接受和使用,但计算机只能识别纯数字构成的IP地址,不能直接读取域名。因此要想达到访问效果,就需要将域名翻译成IP地址。而DNS域名解析承担的就是这种翻译效果。(详情参考书籍:计算机网络)
先将对应的域名绑定域名解析厂商 控制台->我的域名(每找到那就直接在搜索栏搜),找到对应的域名,点击,进入页面后,点击修改 DNS 服务器 选择默认推荐的即可
然后对域名添加解析记录 DNS 域名解析服务一般都会选择对应的云服务器厂商提供的(也可以选择其它)以腾讯云为例 登陆->控制台->云解析 DNS(找不到也可以直接在腾讯云内搜索) 就会显示对应的域名,点击解析,添加对应的域名,www.域名的最基本的记录,其中记录值为服务器的公网 IP
保存之后,等几分钟,DNS 解析就会生效。 到了这里已经基本可以根据域名访问博客了
CDN 配置
直接使用 DNS 解析有被直接轨迹服务器 ip 的可能,并且由于带宽限制,博客访问速度会很慢 所以这里使用 CDN(内容分发网络) CDN 是一个全球性的代理服务器分布式网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。它从靠近用户的位置提供内容。通常,HTML/CSS/JS,图片和视频等静态内容由 CDN 提供。CDN 的 DNS 解析会告知客户端连接哪台服务器。CDN 的关键技术主要有内容存储和分发技术。
国内有常见的腾讯云,阿里云,七牛云,又拍云等几个厂商,不同的厂商配置不同,可以根据官方文档进行配置。
额外
博客与图床部署配置文档:Cloudflare + 腾讯云 + 又拍云全流程
一、系统目标
二、图床(Cloudflare R2)配置
1. 创建图床存储桶
登录 Cloudflare → R2 控制台
创建 Bucket:如
image-bed
设置 Bucket 为 Public(Allow public access)
2. 设置 DNS CNAME
在 Cloudflare → DNS 设置中添加:
类型:CNAME
名称:r2
内容:pub-xxxxxx.r2.dev(你的 R2 公共地址)
代理状态:Proxied(橙云)✅
3. 图片访问结构
图片地址形式为:
https://r2.zshunbao.top/image-bed/YYYY/MM/xxx.png
4. 推荐配置(可选)
在 Cloudflare → Rules 中添加 Page Rule:
URL: https://r2.zshunbao.top/*
设置:
- Cache Level: Cache Everything
- Edge Cache TTL: 1 month
三、博客主站(腾讯云 + 又拍云)配置
1. Cloudflare DNS 设置
类型:A
名称:@
值:腾讯云服务器公网 IP
代理状态:DNS only(灰云)
类型:A
名称:www
值:同上
代理状态:DNS only(灰云)
2. 又拍云创建 CDN 服务
登录又拍云控制台
创建服务:
类型:CDN 加速
服务名称:halo-blog
加速域名:zshunbao.top 和 www.zshunbao.top
源站类型:IP → 填写腾讯云公网 IP
协议:HTTP 或 HTTPS(根据你的 NPM 配置选择)
3. 启用 HTTPS(可选)
又拍云支持自动申请免费证书,建议开启
也可以上传自己的证书(如使用 Cloudflare Origin CA)
4. 腾讯云服务器配置
使用 Nginx Proxy Manager (NPM) 作为反向代理:
添加 Proxy Host:
Domain:zshunbao.top
Forward Hostname/IP:halo 容器地址或
localhost
Forward Port:8090
开启 SSL:申请 Let's Encrypt 并强制 SSL
添加跳转项 www → @(301重定向)
四、整体结构图
客户端
↓
DNS 解析(Cloudflare)
↓
CDN 加速(图床用 Cloudflare,博客用又拍云)
↓
源站(R2 存储桶 / 腾讯云服务器)
五、注意事项
六、推荐后续操作
使用 PicGo + R2 作为图床上传工具
在 Halo 中设置图片前缀
https://r2.zshunbao.top/image-bed/