DNS:使用域名访问 Pigsty 中的 Web 服务
安装完 Pigsty 之后,用户可以通过 IP + Port 的方式访问大部分 Infra组件 提供的 Web 界面。
假设你的节点使用的内网 IP 地址是 10.10.10.10,那么默认情况下:
- http://10.10.10.10:3000 是 Grafana 监控面板(日常使用的主要入口)
- http://10.10.10.10:9090 是 Prometheus 时序数据库控制台
- http://10.10.10.10:9093 是 AlertManager 告警控制台
- http://10.10.10.10 是 Nginx HTTP 服务的入口(默认 80 端口)
对于开发测试来说,IP + 端口无需配置即可使用,非常方便,然而对于更严肃的部署而言,我强烈建议您通过 域名 访问这些服务。
使用域名 有诸多优点,并不需要额外花钱或者引入额外的依赖,只需简单一行配置即可。
接下来,我们会深入展开以下主题:
太长不看
向本机 /etc/hosts
(Linux/MacOS) / C:\Windows\System32\drivers\etc\hosts
(Windows) 文件中添加以下静态解析记录:
sudo tee -a /etc/hosts <<EOF
10.10.10.10 h.pigsty g.pigsty p.pigsty a.pigsty
EOF
将占位符 IP 地址
10.10.10.10
替换为 Pigsty 安装节点的 IP 地址(公网/内网不限,可达即可)。如果你修改了
infra_portal
中的默认域名,请将默认域名替换为你自己的域名。
为什么要用域名?
Pigsty 强烈建议 使用域名访问 Web 系统,而不是直接通过 IP+Port 直连的方式,原因如下:
- 域名更容易记忆,使用方便
- 域名更加灵活,可以通过修改解析指向不同地址
- 通过域名访问,可以将所有服务收拢至 Nginx 统一出口,便于管理,审计,减小攻击面。
- 使用域名,可以申请 HTTPS 证书,加密流量,避免信息被窃听,提高安全性。
- 在国内,HTTP 访问未备案的域名,会被运营商劫持到特殊页面,HTTPS 访问证书域名则不会
- 一些无法直连的服务,例如监听 127.0.0.1 地址或者内部 Docker 网段的服务,可以通过 NGINX 代理访问
Pigsty 默认使用 内网静态域名,只需要在您本地服务器添加解析即可,无需在 DNS 供应商处申请真实域名。
如果您的 Pigsty 部署于互联网公网环境,您也可以考虑使用真正的互联网域名,并申请免费的 HTTPS 证书。
域名的工作原理
如果您并不熟悉 HTTP / DNS 协议,以下是一个简短的原理介绍:为什么 Nginx 只使用一个 80 端口(+ HTTPS 443)就可以为多个域名提供服务?
DNS协议
- 当客户端(例如浏览器)要访问 https://a.pigsty.cc 时,首先会通过 DNS 请求来解析 a.pigsty.cc 这个域名对应的 IP 地址。
- 负责解析的,可以是 本地的静态文件,也可以是 内网DNS服务器,或者是互联网上的 公网 DNS 解析。
- DNS 返回的 IP 地址可能是同一台服务器,但对客户端来说,它只需要知道:这个域名解析到哪个 IP 即可。
- 多条域名(例如 a.pigsty.cc、p.pigsty.cc)可以在 DNS 解析时指向同一个 IP,浏览器最终都会把请求发到相同的 IP 地址上。
HTTP协议
- 在浏览器请求 HTTP 资源时(HTTP/1.1 及以上),请求头里会包含一个 Host 字段,内容为请求的域名。
- 这个 Host 字段是用于区分的关键,HTTP/1.1 规范规定,客户端必须包含这个首部。
- 当 Nginx 在 80 端口上收到请求后,会根据请求中的 Host,来匹配对应的服务器,进而决定要返回的站点内容。
- 因此通过 Host 不同取值的区分,Nginx 就可以在同一个端口上为不同域名提供不同的内容。
Pigsty默认域名
Pigsty 默认为四个核心组件配置使用以下四个 内网域名:
域名 | 名称 | 端口 | 组件 | 说明 |
---|---|---|---|---|
h.pigsty |
home |
80/443 | Nginx | 默认服务器,本地软件仓库 |
g.pigsty |
grafana |
3000 | Grafana | Grafana 监控大屏与可视化平台 |
p.pigsty |
prometheus |
9090 | Prometheus | Prometheus 监控时序数据库 |
a.pigsty |
alertmanager |
9093 | AlertManager | 告警聚合/屏蔽/管理/消息发送 |
因为这四个域名不使用任何顶级域,所以你需要 本地静态解析 或 内网动态解析 才可以使用。
这并不是什么复杂的配置,只需要在您的客户端机器上添加一行配置即可。
本地静态解析
假设 Pigsty 安装的内网 IP 地址为 10.10.10.10
,那么在您的客户端机器上,添加以下静态解析记录即可:
# Pigsty 核心组件与默认域名
10.10.10.10 h.pigsty g.pigsty p.pigsty a.pigsty
如何添加解析
所谓客户端机器,指的是您在本地需要访问 Pigsty 服务的机器,通常也是你使用浏览器的环境,比如笔记本,台式机,虚拟机。
对于 Linux / MacOS 用户,您可以直接 sudo nano /etc/hosts
来编辑 hosts 文件,添加上述记录。
对于 Windows 用户,您需要使用管理员权限执行 notepad C:\Windows\System32\drivers\etc\hosts
来编辑 hosts 文件,添加上述记录。
添加记录后,您就可以通过这几个域名访问 Pigsty 的 Web 服务了。
解析到其他域名
如果您不喜欢 Pigsty 默认的域名,您也可以将解析记录修改为其他域名,只是务必在安装前相应修改 infra_portal
中的 domain
参数。
例如,您希望使用 *.pigsty.xxx
作为默认域名,那么您需要修改 infra_portal
中的 domain
参数为:
infra_portal:
home : { domain: h.pigsty.xxx }
grafana : { domain: g.pigsty.xxx ,endpoint: "${admin_ip}:3000" ,websocket: true }
prometheus : { domain: p.pigsty.xxx ,endpoint: "${admin_ip}:9090" }
alertmanager : { domain: a.pigsty.xxx ,endpoint: "${admin_ip}:9093" }
blackbox : { endpoint: "${admin_ip}:9115" }
loki : { endpoint: "${admin_ip}:3100" }
而相应的解析记录则需要修改为:
10.10.10.10 h.pigsty.xxx g.pigsty.xxx p.pigsty.xxx a.pigsty.xxx
这个域名可以是真的域名,也可以是随便什么你自己喜欢的名字,只要你确保域名可以在 本机,内网,或公网 上被解析到 Pigsty 的 IP 地址即可。
其他解析记录
如果您需要运行其他一系列 Pigsty 扩展工具集,你可以一并添加其他解析记录:
# Pigsty 扩展工具与使用的默认域名
10.10.10.10 adm.pigsty # pgadmin GUI 管理工具
10.10.10.10 ddl.pigsty # bytebase 数据库DDL管理工具
10.10.10.10 cli.pigsty # pig CLI 预留域名
10.10.10.10 api.pigsty # pigsty API 预留域名
10.10.10.10 lab.pigsty # jupyterlab 预留域名
10.10.10.10 git.pigsty # gitea 预留域名
10.10.10.10 wiki.pigsty # wiki.js 预留域名
10.10.10.10 noco.pigsty # nocodb 预留域名
10.10.10.10 supa.pigsty # supabase 预留域名
10.10.10.10 dify.pigsty # dify 预留域名
10.10.10.10 odoo.pigsty # odoo 预留域名
10.10.10.10 mm.pigsty # minio 预留域名
解析到公网地址
如果您的 Pigsty 部署在公网环境,比如云服务器上,那么您 不能 将本地解析记录解析到 内网 IP 地址,而 必须 将其解析到您的 公网 IP 地址。
您的云服务器如果可以访问互联网,那么通常会有两块虚拟网卡,一块连接互联网,一块连接内网,同时分别有对应的公网 IP 地址与内网 IP 地址。
假设您的云服务器公网 IP 地址为 1.2.3.4
,内网 VPC 地址为 10.10.10.10
,那么您需要将解析记录相应配置为:
# 公网/云服务器部署,请解析至公网 IP 地址!修改记录的前半段即可:
1.2.3.4 h.pigsty g.pigsty p.pigsty a.pigsty
内网动态解析
假如您希望在办公网络中的其他同事也可以通过域名访问 Pigsty 的 Web 服务,那么您可以考虑使用 内网动态解析。
最简单的办法是要求您的网络管理员,为您在内网 DNS 服务器上添加上面的解析记录。
使用内网DNS
假设您的内网 DNS 服务器地址为 192.168.1.1
,那么在 Linux 与 MacOS 上,您可以编辑 /etc/resolv.conf
文件,添加以下记录:
nameserver 192.168.1.1
在 Windows 上,通常你需要在 “网络和 Internet 设置” 中找到网络适配器,然后打开 `TCP/IPv4 属性,修改 DNS 配置。
您可以通过以下命令来测试内网 DNS 解析是否生效:
dig h.pigsty @192.168.1.1
使用Pigsty自带的DNS
Pigsty Infra 模块 自带 DNS 解析服务器,您也可以通过 53 端口使用该 DNS 服务器。
但公网部署时请务必注意,中国大陆有特殊国情,通常 不允许 用户在公网服务器上启动 DNS 服务(53 端口)!
本地HTTPS访问
当您在本地通过 HTTP 访问 Pigsty 的 Web 服务时,默认会提示 “不安全”,因为这是明文传输的 HTTP 协议,容易被窃听,篡改,冒充。
在默认情况下,Pigsty 会使用本地自签名的 CA 证书为 Nginx 中所有带域名的服务器签发 “自签名证书”,并使用这些证书为 HTTP 服务启用 SSL。
如果你使用 HTTPS 访问 Pigsty 的 Web 服务,默认会提示 “证书错误”,因为这是 自签名的证书,而非权威机构签发的证书。
你可以选择:
- 不管他,回头接着用 HTTP 甚至是 IP+Port 访问,反正这是内网,怎么方便怎么来。
- 使用 HTTPS 访问,点击 “高级 - 我知道这里的风险,继续访问”
- 使用 Chrome 浏览器,可以在提示不安全的窗口键入
thisisunsafe
表示你知道这是“不安全”的自签名证书。 - 使用 HTTPS 访问,并且信任自签名证书,需要将 Pigsty 的 CA 证书添加到您的浏览器或操作系统中。
- 申请一个 CA 证书,并给 Pigsty 使用,这样 Pigsty 签发的证书就都是有效真证书。
- 使用正儿八经的真域名,并申请真正的 HTTPS 证书使用。
通常对于内网访问,如果您需要 HTTPS,又懒得每次跳过安全提醒,可以考虑直接在系统中信任 Pigsty 自动生成的 自签名CA。
对于严肃的生产环境,我们建议使用真正的 公网域名 并使用诸如 certbot
这样的工具申请免费的 HTTPS 证书使用。
信任自签名CA
Pigsty 默认会在初始化时,在 安装节点 本机 Pigsty 源码目录(~/pigsty
)中生成一个自签名的 CA,并使用此 CA 签发内网各项服务所需的证书。
如果你想通过 HTTPS 加密访问 Pigsty 提供的 Web 服务,需要将 Pigsty 的 CA 证书分发至客户端电脑的信任证书目录中(或用真的 CA ,很贵!)。
在 Pigsty 纳管的 Linux 节点中,都已经自动完成了对 Pigsty 自签名 CA 的信任,在 Linux 上可以这样信任 Pigsty CA:
rm -rf /etc/pki/ca-trust/source/anchors/ca.crt
ln -s /etc/pki/ca.crt /etc/pki/ca-trust/source/anchors/ca.crt
/bin/update-ca-trust
rm -rf /usr/local/share/ca-certificates/ca.crt
ln -s /etc/pki/ca.crt /usr/local/share/ca-certificates/ca.crt
/usr/sbin/update-ca-certificates
在 MacOS 上,您需要双击 ca.crt
文件将其加入系统钥匙串,然后在钥匙串应用中,搜索 pigsty-ca
,打开然后选择 “信任” 此根证书。
在 Windows 上,您需要将 ca.crt
文件添加到 “受信任的根证书颁发机构” 中。
信任 Pigsty CA 后,访问由该 CA 签发的自签名证书网站时,就不会再弹出 “不受信任证书” 之类的信息了。
公网域名解析
您也可以使用类似 Cloudflare,Godaddy,阿里云万网,腾讯云 DNSPod 等 DNS 服务商提供的域名解析服务。
这通常需要您 购买 一个域名,普通域名一年十几块钱,很便宜。
通常您需要通过云 DNS 服务商提供的控制台或 API 接口,将域名解析到 Pigsty 部署服务器的 公网 IP 地址。
假设你购买的域名名为 pigsty.xxx
,您可以选择添加一条 *
通配符A记录,将所有子域名解析到 Pigsty 部署服务器的 公网 IP 地址。
或者单独为每个组件使用的域名添加一条 A 记录,将其指向 公网IP地址 即可:
- h.pigsty.xxx 1.2.3.4
- a.pigsty.xxx 1.2.3.4
- p.pigsty.xxx 1.2.3.4
- g.pigsty.xxx 1.2.3.4
Pigsty 内置了 Certbot 支持,如果使用公网域名,可以一键申请免费的 HTTPS 证书供 Nginx 使用(需三个月一更新)。