Skip to content

Commit de5f992

Browse files
🗑️ 删除GitHub工作流文件,移除不再使用的构建和部署步骤
1 parent 729e429 commit de5f992

File tree

2 files changed

+154
-0
lines changed

2 files changed

+154
-0
lines changed

blog/2025-8-30.md

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
---
2+
title: GithubPage智能DNS解析
3+
date: 2025-8-30
4+
authors: jiangmiemie
5+
tags: [GithubPage智能DNS解析]
6+
keywords: [智能DNS解析,GithubPage]
7+
description: GithubPage智能DNS解析
8+
---
9+
10+
好久不见,今天分享一下我的网站是如何做智能DNS解析的案例。
11+
12+
现在看到到这个网站被部署在一个github仓库,我域名解析指向了github,因此可以通过域名直接访问这个网站。
13+
14+
但是目前在中国大陆访问比较慢,于是我采购了一台中国大陆的服务器。目标:
15+
- 在大陆的IP地址访问,解析到大陆服务器。
16+
- 在境外访问,解析到github。
17+
18+
项目原本的增量更新逻辑不变:即通过`githubworkflow`,每次变更自动更新不一致的文件。
19+
20+
实现这个需求的关键在于使用**智能DNS解析**,也就是根据访问者的地理位置将域名解析到不同的IP地址。
21+
22+
## 域名解析修改
23+
24+
在阿里云服务选择`云解析 DNS`。相关配置如下:
25+
26+
| 主机记录 | 记录类型 | 解析线路 | 记录值 |
27+
|----------|----------|----------|--------|
28+
| www | CNAME | 境外 | 你的Github用户ID.github.io |
29+
| @ | CNAME | 境外 | 你的Github用户ID.github.io |
30+
| www | A | 中国地区 | 我的服务器IP |
31+
| @ | A | 中国地区 | 我的服务器IP |
32+
33+
## 服务器配置
34+
35+
在服务器上,需要部署一个**Web服务器**(如Nginx或Apache),并配置它来服务项目静态文件。大部分服务器都是开箱既有。我用的宝塔面板,添加`PHP项目`,简单的配置了一下域名和`SSL`证书。找到项目指向的文件夹`/www/wwwroot/jiangmiemie.com`,后续将Github生成的静态资源传输到这里即可。
36+
37+
如何将项目文件**同步**到这台服务器上。这里计划使用`rsync`增量同步,使用`ssh`链接,。
38+
39+
### rsync
40+
41+
`rsync``scp` 更适合同步大量文件,因为它可以只传输有变化的部分。
42+
43+
我的这台服务器是阿里云系统(不是Ubuntu),需要使用:`yum install -y rsync`安装一下。
44+
45+
### ssh
46+
47+
需要打开的防火墙端口:`22``80``443`
48+
49+
:::info
50+
虽然我们可以直接通过账号密码登录ssh,但是账号密码权限太高,因此设置一个仅用于登录的ssh密码。
51+
:::
52+
53+
```bash showLineNumbers
54+
# 生成密钥对(在服务器上)
55+
ssh-keygen -t rsa -b 4096 -f ~/.ssh/github_deploy_key -N ""
56+
57+
# 查看生成的文件
58+
ls -la ~/.ssh/
59+
# 会看到:
60+
# github_deploy_key (私钥)
61+
# github_deploy_key.pub (公钥)
62+
63+
# 将公钥添加到authorized_keys
64+
cat ~/.ssh/github_deploy_key.pub >> ~/.ssh/authorized_keys
65+
66+
# 设置正确权限(过低没有权限,过高ssh会认为文件不安全)
67+
chmod 700 ~/.ssh
68+
chmod 600 ~/.ssh/authorized_keys
69+
chmod 600 ~/.ssh/github_deploy_key
70+
71+
# 测试密钥是否工作(在服务器上)应该能直接连接,不需要密码
72+
ssh -i ~/.ssh/github_deploy_key root@localhost
73+
74+
# 显示私钥内容(复制到GitHub Secrets)
75+
cat ~/.ssh/github_deploy_key
76+
```
77+
78+
## GitHub Workflow修改
79+
80+
完整内容如下,变更的内容为`Setup SSH``Deploy to server`
81+
82+
因为`GitHub Workflow`是所有人都能看到的,因此为了安全,你需要把服务器IP地址、链接密码等配置为密钥变量。下面代码中`${{ secrets.SSH_PRIVATE_KEY }}`这样格式的都是密钥变量。
83+
84+
把你的ip地址和刚刚终端显示的`私钥`复制到GitHub Secrets。
85+
86+
:::info
87+
在你的GitHub仓库页面,进入 `Settings` -> `Secrets and variables` -> `Actions`
88+
89+
点击 `New repository secret`
90+
91+
Name 填写一个有意义的名称,比如我设置的是`SSH_PRIVATE_KEY``IP`
92+
93+
- `IP`的 Secret 框中,仅粘贴你的ip地址。例如:`192.168.10.11`
94+
95+
- `SSH_PRIVATE_KEY`的 Secret 框中,粘贴从`-----BEGIN OPENSSH PRIVATE KEY-----``-----END OPENSSH PRIVATE KEY-----`完整内容。
96+
97+
:::
98+
99+
```yml showLineNumbers {21-33}
100+
name: Build HTML
101+
on: push
102+
jobs:
103+
build-and-deploy:
104+
runs-on: ubuntu-latest
105+
permissions:
106+
contents: write
107+
steps:
108+
- uses: actions/checkout@v3
109+
- uses: actions/setup-node@v3
110+
with:
111+
node-version: 18
112+
- run: |
113+
npm install
114+
npm run build
115+
- uses: peaceiris/actions-gh-pages@v3
116+
if: github.ref == 'refs/heads/main'
117+
with:
118+
github_token: ${{ secrets.GITHUB_TOKEN }}
119+
publish_dir: ./build
120+
- name: Setup SSH
121+
uses: webfactory/[email protected]
122+
with:
123+
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
124+
125+
- name: Deploy to server
126+
run: |
127+
mkdir -p ~/.ssh
128+
ssh-keyscan -H ${{ secrets.IP }} >> ~/.ssh/known_hosts
129+
rsync -avz --exclude='.user.ini' ./build/ root@${{ secrets.IP }}:/www/wwwroot/jiangmiemie.com
130+
env:
131+
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
132+
SERVER_IP: ${{ secrets.IP }}
133+
```
134+
135+
- `ssh-keyscan -H ${{ secrets.IP }} >> ~/.ssh/known_hosts`
136+
137+
表示将服务器的公钥添加到 known_hosts 文件中。
138+
139+
140+
- `rsync -avz --exclude='.user.ini' ./build/ root@${{ secrets.IP }}:/www/wwwroot/jiangmiemie.com`
141+
142+
表示将`./build/`文件夹同步到`/www/wwwroot/jiangmiemie.com`文件夹。
143+
144+
| 参数 | 作用 | 详细说明 |
145+
|------|------|----------|
146+
| `rsync` | 远程同步工具 | 比scp更智能,只传输变化的部分 |
147+
| `-a` | 归档模式 | 保留文件权限、时间戳、符号链接等所有属性 |
148+
| `-v` | 详细输出 | 显示传输过程的详细信息 |
149+
| `-z` | 压缩传输 | 传输时压缩数据,减少网络带宽 |
150+
| `--exclude='.user.ini'` | 排除文件 | 跳过服务器自动生成的系统文件 |
151+
| `./build/` | 源目录 | 本地构建好的静态文件目录 |
152+
| `root@IP:/path/` | 目标地址 | 服务器上的部署目录 |
153+
154+
每次你推送代码到GitHub,工作流会自动构建并将变化同步到服务器,实现真正的**持续部署**!

0 commit comments

Comments
 (0)