编辑
2025-01-30
网络
0

目录

服务器基础设施的准备(网络、硬件、系统)
网络
服务器软硬件平台
博客系统的选择
实现域名公网访问博客
在宿主机安装DDNS-GO服务
阿里云RAM用户设置
宿主机DDNS-GO服务配置
课后总结
挖坑
图片名称

24年年底我在阿里云购买了目前的 polaristaion.fun 域名,准备作为个人博客的域名来使用。但域名有了,博客服务器该如何搭建却让我犯了难。

这边都是废话

服务器硬件上,目前主流的方案大多是租用 VPS (Virtual Private Server) 服务商提供的虚拟服务器搭建。但众所周知,国内IPv4地址资源并不多,商用的企业宽带费用也是高的吓人,一般人如果想要以较低廉的价格长期租用到一台性能尚可、拥有公网访问能力、带宽也还算可以的服务器的可能性无限接近于0。虽然博客服务器本身对性能要求不高,但为了访问和浏览的良好体验(其实是钱包真的撑不住辣!),我不得不放弃这个方案,转而准备自主搭建服务器硬件。

如前文所说,个人博客服务器对性能要求不高,如果专门为了它而装一台电脑属实有些小题大做。理论上只要是一台可以运行Docker,并且可以公网访问的电脑就足以满足我的需求,于是我便把目光放到了1年多前我给家里装的软路由身上……

服务器基础设施的准备(网络、硬件、系统)

网络

先来看看我们家的网络拓扑结构:

graph TD
    A[光猫] -->|桥接模式| B(软路由 WAN 口PPPoE拨号)
    B -->|DHCP 服务| D[软路由 LAN 口]
    D -->|分配 IP| E(内网设备1)
    D -->|分配 IP| F(内网设备2)
    D -->|分配 IP| G(内网设备3)
    D -->|分配 IP| H(内网设备N)

好吧,这只是一个再普通不过的光猫桥接、软路由拨号的家用网络拓扑结构罢了……其实只要保证运行博客服务器的主机可以获取到公网IP地址就可以了。

关于网络基础设施的搭建在此就不赘述,详细可以看我的另一篇文章【此处应有链接(挖坑)】。

服务器软硬件平台

因为我们家用的是移动宽带,所以公网IPv4什么的基本就别想了,但好在光猫可以获取到公网IPv6的地址,这就使得公网访问成为可能。外网通过域名连接的问题可以通过 DDNS (Dynamic DNS) 解决(后面会讲),家用宽带的带宽也完全足够一个博客网站使用。用于部署博客系统的软路由主机基本配置如下:

软路由使用 x86 Intel® 7代平台的 NEC M710Q 小主机

CPU: Intel® Pentium G4560 2C4T with Intel® HD Graphics 610

RAM: 8GB DDR4 2666MHz

Storage: 128G NVMe SSD + 2TB SATA HDD

Network: 1Gbps RJ45 ×2

本套主机平台功耗很低,软路由系统日常负载长期低于 5%,7×24 小时开机运行,并且OpenWRT系统可以运行Docker,用于部署博客系统十分合适。

博客系统的选择

地基准备妥当了,往上面盖什么样子的房子呢?

说到博客系统,互联网上的各种开源项目琳琅满目,各有千秋。

但凡事在做选择前,都要先明确自己的需求,这样才不至于陷入选择困难。而我对于博客系统的需求点主要就2个:轻量化功能全。轻量化主要是为了减轻服务端压力以及在网络质量堪忧的情况下也具有相当的可用性;功能全则是由于目前主流的几款博客系统本身功能其实并不算丰富,主要是靠各种插件来进行界面美化和功能补全,像广泛使用的Hexo类静态网站生成器甚至都没有管理后台。所以为了能够一步到位,保障高度的可维护性与性能,避免因为装了一堆插件而导致服务端变得臃肿繁杂,我需要一款本身就已经提供了相当齐全管理工具的博客系统。

因为我做博客的目的主要是为了记录一些自己做的项目、学到的一些知识、日常生活解决问题某些的经验,所以良好的文本编辑与阅读体验是首要的,而至于其他的一些花里胡哨的装饰性功能则没有强烈需求

以此为目标,我在互联网上搜寻到了现在所使用的这个博客系统—— VanBlog 。这个系统完美满足了我对于博客系统的需求期望,并且可以在当前的平台使用Docker部署,帮助文档也写的十分详细,我便毫不犹豫地选择了它。

至于如何部署可以移步至该博客项目的快速上手页面,根据需求选择部署方式。

提示

如果你和我一样是使用OpenWRT之类的本身就带有Web管理界面的系统设备进行部署,那么 VanBlog 博客(或者说所有博客系统)默认所使用的 80 (HTTP) / 443 (HTTPS) 端口此时应该是被宿主系统本身的Web管理界面所占用的,所以应当提前更改宿主系统的Web管理界面端口,以此释放后提供给 VanBlog 使用,这里提供一个更改OpenWRT系统Web管理端口的教程,其它系统可以自行查阅。这样更改后,访问宿主系统Web管理界面时就需要在IP或域名后面加上前面教程中所修改的端口号(例如 http://192.168.1.1:2333 or https://example.xyz:2333 )来进行访问。

当然,如果你能够接受在访问博客时在域名后面加上端口号的话,也可以修改Docker容器的端口号来避开宿主系统的Web管理界面端口。

此外,路由器防火墙设置也需要注意,应当放行需要公网访问的端口的IPv6入站流量。

实现域名公网访问博客

博客系统在本地部署完毕后,可以先尝试使用本地IP直接连接,来测试博客系统是否在正常运行,以及,注册好后台管理员账号,填写网站的相关讯息。

在做完以上步骤后,就可以着手准备将域名解析到当前设备的IP地址了。 我的域名是在阿里云购买,所以接下来我将以阿里云为例来介绍如何设置DDNS实现在公网使用域名访问个人博客

这里先简单介绍一下DDNS服务的工作过程,以便理解后面的配置流程。不过首先请务必确保你已经知晓了何为DNS服务以及其工作原理。

graph TD
    A[用户设备] -->|定期发送IP地址| B(DDNS客户端)
    B -->|将IP地址发送到| C{DDNS服务器}
    C -->|检查IP是否变化| D{IP是否变化?}
    D -- 是 --> E[更新DNS记录]
    D -- 否 --> F[无需操作]
    E -->|通知DNS服务器| G(DNS服务器)
    G -->|更新域名解析记录| H[域名解析生效]
    F -->|等待下一次检查| B
    H -->|用户访问域名| A

在宿主机安装DDNS-GO服务

DDNS-GO 是一个开源的多平台动态域名解析服务,可以实现多个域名管理平台的域名解析,同时支持 IPv4 和 IPv6,也就是说只要有公网IP就可以实现动态域名解析将内网服务暴露到公网。支持的域名服务商包括阿里云、腾讯云Dnspod、Cloudflare、华为云、百度云、Porkbun、GoDaddy以及自定义Callback。

这里我只介绍一下OpenWRT系统的安装流程,至于其他系统的安装方法可以自行查阅。

提示

OpenWRT有很多不同开发者整合编译的版本,有的甚至会内置DDNS-GO服务,对于这类系统可以直接跳过本段。

对于像iStoreOS这样内置应用商店的OpenWRT版本,可以直接在应用商店搜索"DDNS-GO"进行一键安装。而对于没有内置应用商店的版本可以按照以下流程进行安装:

ddns-go_luci_github.png

  • 点击"Show all assets"查看编译好的所有平台的ipk安装包,

ddns-go_luci_github_show.png

  • 找到自己系统平台的ipk包后下载,或者可以右键复制地址保存,稍后在路由器后台使用curl或wget命令进行下载。

ddns-go_luci_github_x86.png

  • 除了上面的DDNS-GO本身的软件包,还需要下载列表最下方的 luci-app-ddns-go(Web管理的图形界面)和 luci-i18n-ddns-go-zh-cn(中文支持)的ipk包。

ddns-go_luci_github_cn.png

  • 下载完成后上传到路由器的文件夹中,使用 cd 命令切换工作目录到对应文件夹。如果文件夹中只有需要安装的ipk包,可以使用以下 opkg 命令安装该目录下的所有ipk安装包( * 是通配符)。
opkg install *.ipk
  • 安装完成后输入。
ddns-go -h
  • 如果输出类似以下内容,则表明DDNS-GO服务已经安装完成。
root@Polari_S_tation:~# ddns-go -h Usage of ddns-go: -c string 自定义配置文件路径 (default "/root/.ddns_go_config.yaml") -f int 同步间隔时间(秒) (default 300) -l string 监听地址 (default ":9876") -noweb 不启动 web 服务 -s string 服务管理, 支持install, uninstall
  • 此时登陆OpenWRT的Web管理页面,在“服务”列表下应当已经出现了DDNS-GO的选项。

ddns-go_luci_service.png

  • 勾选启动”后保存,就可以在浏览器访问当前设备的对应端口来连接DDNS-GO服务配置页面。具体如何设置将会在下一节之后介绍。

ddns-go_luci_service_luci.png

阿里云RAM用户设置

RAM (Resource Access Management) 是阿里云提供的身份访问管理服务,用于管理和控制云资源的访问权限。RAM用户由阿里云账号或具有管理员权限的其他RAM用户、RAM角色创建,不拥有资源,不能独立计量计费,必须在获得授权后才能登录控制台或使用API访问阿里云账号下的资源。一个阿里云账号下可以创建多个RAM用户,对应企业内的员工、系统或应用程序。

之所以要用阿里云的RAM账号是因为我作为主账号管理者可以控制这个子账号可访问的资源范围,而在此处我只是用它来管理域名DNS解析记录的,所以没有必要将整个账号的全部权限都授权给宿主机的DDNS服务,这样做可以一定程度上提高账户安全性(虽然我账号上也没什么有价值的东西)。

  • 首先登陆阿里云后进入账户的“工作台”,点击上方的“资源管理”选项卡。

提示

如果没有这个选项的话可以点击右上角的“使用旧版”。

ali_back.png

  • 在下面的列表中找到自己购买的域名,然后进入控制台

ali_domain_manager.png

  • 点击“添加记录”,来为当前域名添加子域名。

ali_domain_add.png

  • 因为我的博客服务器的使用的是公网IPv6地址,所以记录类型选“AAAA-”。
  • 主机记录按照自己的需求填写。比如我填写的是“blog”,那么在访问博客网页时就应该使
  • 用“blog.polaristaion.fun”域名进行连接,相当于是 <主机记录> . <域名> 就是这个网站的实际域名。

相关信息

关于域名的组成可以看博客园的这篇文章,有兴趣的可以了解一下。

  • 解析请求来源”保持默认即可。
  • 记录值”可以随便填,因为之后DDNS服务会自动检测服务器的IP后更新这个值。

提示

也可以先把服务器现在的IPv6地址手动填写进去,保存之后可以尝试访问该域名,检查DNS解析是否正常工作。

  • TTL (Time to Live)” 同样保持默认即可。

ali_domain_info.png

填写好子域名相关配置之后就可以设置RAM账户了。

  • 鼠标移动到右上角用户头像,点击下面的“访问控制”,进入“RAM 访问控制”页面。

ali_ram_manager.png

  • 点击左侧“身份管理”列表下的“用户”选项卡,点击“创建用户”。

ali_ram_add.png

  • 按需求设置“登录名称”和“显示名称”,并勾选下方的“使用永久 AccessKey 访问”,点击“确定”后验证身份。

ali_ram_info.png

  • 按照提示复制“AccessKey ID”和“AccessKey Secret”后保存,或是下载CSV文件,RAM 账户就创建完成了。

ali_ram_secret.png

  • 回到用户列表后点击刚刚创建用户右侧操作栏的“添加权限”。

ali_ram_permission.png

  • 权限策略里搜索“DNS”,勾选搜索结果中的“管理云解析(DNS)的权限”,点击“确认新增授权”后即可。

ali_ram_permission_dns.png

至此,阿里云 RAM 账户配置已经完成,可以进入下一阶段了。

宿主机DDNS-GO服务配置

回到博客服务器,访问DDNS-GO配置页面。

  • DNS服务商”选择“阿里云”。
  • 打开上一节保存的RAM账户授权信息,复制对应的“AccessKey ID”和“AccessKey Secret”填写到下面对应位置。
  • 取消勾选IPv4的“是否启用”,关闭IPv4检测。
  • 勾选IPv6的“是否启用”,开启IPv6检测。
  • IP获取方式选择“通过网卡获取”或“通过接口获取”皆可,对于我的使用环境来说没有太大区别。
  • 在下方的“Domains”文本栏中填写网站的域名。

提示

这里一定要填写网站的完整域名,即上文提到的 主机记录 . 域名 。比如我这里就应该填写 “blog.polaristation.fun”。

  • 确认填写无误之后即可保存
  • 此时DDNS-GO的Web配置网页右侧应该会输出日志记录,如果没有报错则表示配置成功。

课后总结

至此,所有网站相关配置全部完成,保证服务器正常联网后域名DNS解析记录就会自动更新。在保证设备有IPv6联网权限的情况下就可以尝试使用域名访问博客网站了。

挖坑

  • 给域名进行ICP备案
  • 实现 IPv4-Only 网络环境下可以访问本网站。

本文作者:Polaris⭐

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 Polari_S_tation 版权所有 许可协议。转载请注明出处!