Make site URLs environment-driven
This commit is contained in:
parent
f0a6da915a
commit
df4afe8a57
11
.env.example
11
.env.example
|
|
@ -5,6 +5,17 @@
|
||||||
# exposed to browser-side code.
|
# exposed to browser-side code.
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Public site URLs
|
||||||
|
# These values are safe to expose to the generated site and can stay empty
|
||||||
|
# until the final domain / service URLs are ready.
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
PUBLIC_SITE_URL=
|
||||||
|
PUBLIC_GITEA_URL=
|
||||||
|
PUBLIC_GITHUB_URL=https://github.com/sepcomet
|
||||||
|
PUBLIC_BLOG_URL=
|
||||||
|
PUBLIC_GITEA_USERNAME=
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
# Gitea
|
# Gitea
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
|
|
|
||||||
10
Dockerfile
10
Dockerfile
|
|
@ -12,6 +12,11 @@ ARG GITEA_TOKEN=""
|
||||||
ARG GITEA_USERNAME=""
|
ARG GITEA_USERNAME=""
|
||||||
ARG SEAFILE_BASE_URL=""
|
ARG SEAFILE_BASE_URL=""
|
||||||
ARG SEAFILE_TOKEN=""
|
ARG SEAFILE_TOKEN=""
|
||||||
|
ARG PUBLIC_SITE_URL=""
|
||||||
|
ARG PUBLIC_GITEA_URL=""
|
||||||
|
ARG PUBLIC_GITHUB_URL=""
|
||||||
|
ARG PUBLIC_BLOG_URL=""
|
||||||
|
ARG PUBLIC_GITEA_USERNAME=""
|
||||||
ARG SYNC_OUTPUT_DIR="src/data/generated"
|
ARG SYNC_OUTPUT_DIR="src/data/generated"
|
||||||
ARG STRICT_SYNC="false"
|
ARG STRICT_SYNC="false"
|
||||||
ARG SEAFILE_MIRROR_DOWNLOADS="false"
|
ARG SEAFILE_MIRROR_DOWNLOADS="false"
|
||||||
|
|
@ -28,6 +33,11 @@ ENV GITEA_BASE_URL="${GITEA_BASE_URL}" \
|
||||||
GITEA_USERNAME="${GITEA_USERNAME}" \
|
GITEA_USERNAME="${GITEA_USERNAME}" \
|
||||||
SEAFILE_BASE_URL="${SEAFILE_BASE_URL}" \
|
SEAFILE_BASE_URL="${SEAFILE_BASE_URL}" \
|
||||||
SEAFILE_TOKEN="${SEAFILE_TOKEN}" \
|
SEAFILE_TOKEN="${SEAFILE_TOKEN}" \
|
||||||
|
PUBLIC_SITE_URL="${PUBLIC_SITE_URL}" \
|
||||||
|
PUBLIC_GITEA_URL="${PUBLIC_GITEA_URL}" \
|
||||||
|
PUBLIC_GITHUB_URL="${PUBLIC_GITHUB_URL}" \
|
||||||
|
PUBLIC_BLOG_URL="${PUBLIC_BLOG_URL}" \
|
||||||
|
PUBLIC_GITEA_USERNAME="${PUBLIC_GITEA_USERNAME}" \
|
||||||
SYNC_OUTPUT_DIR="${SYNC_OUTPUT_DIR}" \
|
SYNC_OUTPUT_DIR="${SYNC_OUTPUT_DIR}" \
|
||||||
STRICT_SYNC="${STRICT_SYNC}" \
|
STRICT_SYNC="${STRICT_SYNC}" \
|
||||||
SEAFILE_MIRROR_DOWNLOADS="${SEAFILE_MIRROR_DOWNLOADS}" \
|
SEAFILE_MIRROR_DOWNLOADS="${SEAFILE_MIRROR_DOWNLOADS}" \
|
||||||
|
|
|
||||||
22
README.md
22
README.md
|
|
@ -34,6 +34,11 @@ cp .env.example .env
|
||||||
|
|
||||||
然后填写:
|
然后填写:
|
||||||
|
|
||||||
|
- `PUBLIC_SITE_URL`
|
||||||
|
- `PUBLIC_GITEA_URL`
|
||||||
|
- `PUBLIC_GITHUB_URL`
|
||||||
|
- `PUBLIC_BLOG_URL`
|
||||||
|
- `PUBLIC_GITEA_USERNAME`
|
||||||
- `GITEA_BASE_URL`
|
- `GITEA_BASE_URL`
|
||||||
- `GITEA_TOKEN`
|
- `GITEA_TOKEN`
|
||||||
- `GITEA_USERNAME`
|
- `GITEA_USERNAME`
|
||||||
|
|
@ -41,6 +46,7 @@ cp .env.example .env
|
||||||
- `SEAFILE_TOKEN`
|
- `SEAFILE_TOKEN`
|
||||||
|
|
||||||
如果某些远端还没接好,也可以先保留为空;系统会按当前策略回退到 seed data。
|
如果某些远端还没接好,也可以先保留为空;系统会按当前策略回退到 seed data。
|
||||||
|
如果正式域名还没下来,`PUBLIC_SITE_URL` / `PUBLIC_BLOG_URL` 也可以先留空。
|
||||||
|
|
||||||
### 3. 本地开发
|
### 3. 本地开发
|
||||||
|
|
||||||
|
|
@ -102,6 +108,22 @@ npm run rebuild
|
||||||
|
|
||||||
- 文件:`src/content/seafile/index.json`
|
- 文件:`src/content/seafile/index.json`
|
||||||
|
|
||||||
|
## 推荐的内容维护边界
|
||||||
|
|
||||||
|
当前更推荐把下面这些文件视为 **AstrBot 可维护输入文件**:
|
||||||
|
|
||||||
|
- `src/content/projects/index.json`
|
||||||
|
- `src/content/seafile/index.json`
|
||||||
|
- `src/content/shares/index.json`
|
||||||
|
|
||||||
|
也就是说:
|
||||||
|
|
||||||
|
- 你在 AstrBot 里维护项目 / 分享 / 下载配置
|
||||||
|
- AstrBot 负责更新这些 JSON
|
||||||
|
- 仓库只负责在构建时读取并消费它们
|
||||||
|
|
||||||
|
这样比手工直接改 JSON 更适合日常维护,也不需要额外引入数据库或在线后台。
|
||||||
|
|
||||||
## 统一重建入口
|
## 统一重建入口
|
||||||
|
|
||||||
适合 AstrBot / cron 调用的命令:
|
适合 AstrBot / cron 调用的命令:
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,11 @@
|
||||||
import { defineConfig } from 'astro/config';
|
import { defineConfig } from 'astro/config';
|
||||||
|
import { loadEnv } from 'vite';
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig(({ mode }) => {
|
||||||
site: 'https://sepcomet.xyz',
|
const env = loadEnv(mode, process.cwd(), '');
|
||||||
|
const site = env.PUBLIC_SITE_URL?.trim();
|
||||||
|
|
||||||
|
return {
|
||||||
|
...(site ? { site } : {}),
|
||||||
|
};
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,11 @@ services:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
args:
|
args:
|
||||||
|
PUBLIC_SITE_URL: ${PUBLIC_SITE_URL:-}
|
||||||
|
PUBLIC_GITEA_URL: ${PUBLIC_GITEA_URL:-}
|
||||||
|
PUBLIC_GITHUB_URL: ${PUBLIC_GITHUB_URL:-}
|
||||||
|
PUBLIC_BLOG_URL: ${PUBLIC_BLOG_URL:-}
|
||||||
|
PUBLIC_GITEA_USERNAME: ${PUBLIC_GITEA_USERNAME:-}
|
||||||
GITEA_BASE_URL: ${GITEA_BASE_URL:-}
|
GITEA_BASE_URL: ${GITEA_BASE_URL:-}
|
||||||
GITEA_TOKEN: ${GITEA_TOKEN:-}
|
GITEA_TOKEN: ${GITEA_TOKEN:-}
|
||||||
GITEA_USERNAME: ${GITEA_USERNAME:-}
|
GITEA_USERNAME: ${GITEA_USERNAME:-}
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,20 @@ npm run rebuild
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 2.0 公开 URL 配置
|
||||||
|
|
||||||
|
| 变量 | 必填 | 作用 |
|
||||||
|
|------|------|------|
|
||||||
|
| `PUBLIC_SITE_URL` | 可选 | 站点正式地址,对应 Astro `site` |
|
||||||
|
| `PUBLIC_GITEA_URL` | 可选 | 页面里展示的 Gitea 根地址 |
|
||||||
|
| `PUBLIC_GITHUB_URL` | 可选 | 页面里展示的 GitHub 地址 |
|
||||||
|
| `PUBLIC_BLOG_URL` | 可选 | 页面里展示的 Blog 地址 |
|
||||||
|
| `PUBLIC_GITEA_USERNAME` | 可选 | 页面展示用 Gitea 用户名 |
|
||||||
|
|
||||||
|
这些变量会进入最终静态页面,因此只应放公开信息。
|
||||||
|
|
||||||
|
如果正式域名还没发下来,可以先留空;页面会继续构建,只是不会输出对应外链。
|
||||||
|
|
||||||
### 2.1 Gitea
|
### 2.1 Gitea
|
||||||
|
|
||||||
| 变量 | 必填 | 作用 |
|
| 变量 | 必填 | 作用 |
|
||||||
|
|
@ -99,6 +113,22 @@ cp .env.example .env
|
||||||
|
|
||||||
## 3. 映射文件如何填写
|
## 3. 映射文件如何填写
|
||||||
|
|
||||||
|
### 3.0 推荐的维护边界
|
||||||
|
|
||||||
|
当前建议把以下文件视为 **AstrBot 可维护输入文件**:
|
||||||
|
|
||||||
|
- `src/content/projects/index.json`
|
||||||
|
- `src/content/seafile/index.json`
|
||||||
|
- `src/content/shares/index.json`
|
||||||
|
|
||||||
|
推荐工作流:
|
||||||
|
|
||||||
|
1. 你在 AstrBot 里编辑项目 / 分享 / 下载配置
|
||||||
|
2. AstrBot 更新这些 JSON
|
||||||
|
3. AstrBot 执行 `npm run rebuild`
|
||||||
|
|
||||||
|
仓库本身只负责消费这些文件,不需要额外引入数据库或在线后台。
|
||||||
|
|
||||||
### 3.1 项目种子数据:`src/content/projects/index.json`
|
### 3.1 项目种子数据:`src/content/projects/index.json`
|
||||||
|
|
||||||
每个项目至少包含:
|
每个项目至少包含:
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,11 @@
|
||||||
|
|
||||||
确保仓库根目录有可用的 `.env`,或在执行 `docker compose` 前导出这些变量:
|
确保仓库根目录有可用的 `.env`,或在执行 `docker compose` 前导出这些变量:
|
||||||
|
|
||||||
|
- `PUBLIC_SITE_URL`
|
||||||
|
- `PUBLIC_GITEA_URL`
|
||||||
|
- `PUBLIC_GITHUB_URL`
|
||||||
|
- `PUBLIC_BLOG_URL`
|
||||||
|
- `PUBLIC_GITEA_USERNAME`
|
||||||
- `GITEA_BASE_URL`
|
- `GITEA_BASE_URL`
|
||||||
- `GITEA_TOKEN`
|
- `GITEA_TOKEN`
|
||||||
- `GITEA_USERNAME`
|
- `GITEA_USERNAME`
|
||||||
|
|
|
||||||
|
|
@ -41,9 +41,13 @@ const isPlaceholder = activity.source === 'placeholder';
|
||||||
: '这里展示构建阶段同步下来的 Gitea 热力图与最近活动摘要。'}
|
: '这里展示构建阶段同步下来的 Gitea 热力图与最近活动摘要。'}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
{
|
||||||
|
site.gitea.url ? (
|
||||||
<a class="section-link" href={site.gitea.url} target="_blank" rel="noreferrer">
|
<a class="section-link" href={site.gitea.url} target="_blank" rel="noreferrer">
|
||||||
打开 Gitea
|
打开 Gitea
|
||||||
</a>
|
</a>
|
||||||
|
) : null
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="activity-grid">
|
<div class="activity-grid">
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ const {
|
||||||
source,
|
source,
|
||||||
} = Astro.props;
|
} = Astro.props;
|
||||||
|
|
||||||
const fallbackRepoUrl = repo ? `${site.gitea.url}/${repo}` : '';
|
const fallbackRepoUrl = repo && site.gitea.url ? `${site.gitea.url}/${repo}` : '';
|
||||||
const resolvedRepoUrl = repoUrl || fallbackRepoUrl;
|
const resolvedRepoUrl = repoUrl || fallbackRepoUrl;
|
||||||
const visibleDownloads = downloads.filter((item) => item.name || item.url);
|
const visibleDownloads = downloads.filter((item) => item.name || item.url);
|
||||||
const sourceLabels = {
|
const sourceLabels = {
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,12 @@
|
||||||
|
const publicSiteUrl = import.meta.env.PUBLIC_SITE_URL?.trim() || '';
|
||||||
|
const publicGiteaUrl = import.meta.env.PUBLIC_GITEA_URL?.trim() || '';
|
||||||
|
const publicGithubUrl = import.meta.env.PUBLIC_GITHUB_URL?.trim() || '';
|
||||||
|
const publicBlogUrl = import.meta.env.PUBLIC_BLOG_URL?.trim() || publicSiteUrl;
|
||||||
|
const publicGiteaUsername =
|
||||||
|
import.meta.env.PUBLIC_GITEA_USERNAME?.trim() ||
|
||||||
|
import.meta.env.GITEA_USERNAME?.trim() ||
|
||||||
|
'sepcomet';
|
||||||
|
|
||||||
export const site = {
|
export const site = {
|
||||||
name: 'SepComet',
|
name: 'SepComet',
|
||||||
title: '个人主页',
|
title: '个人主页',
|
||||||
|
|
@ -7,13 +16,13 @@ export const site = {
|
||||||
avatar: '/images/avatar.svg',
|
avatar: '/images/avatar.svg',
|
||||||
location: 'Shanghai / Remote',
|
location: 'Shanghai / Remote',
|
||||||
gitea: {
|
gitea: {
|
||||||
url: 'https://gitea.sepcomet.xyz',
|
url: publicGiteaUrl,
|
||||||
username: 'sepcomet',
|
username: publicGiteaUsername,
|
||||||
},
|
},
|
||||||
links: [
|
links: [
|
||||||
{ name: 'GitHub', url: 'https://github.com/sepcomet' },
|
{ name: 'GitHub', url: publicGithubUrl },
|
||||||
{ name: 'Gitea', url: 'https://gitea.sepcomet.xyz' },
|
{ name: 'Gitea', url: publicGiteaUrl },
|
||||||
{ name: 'Blog', url: 'https://sepcomet.xyz' },
|
{ name: 'Blog', url: publicBlogUrl },
|
||||||
],
|
].filter((link) => link.url),
|
||||||
stacks: ['Unity', 'Astro', 'TypeScript', 'Docker'],
|
stacks: ['Unity', 'Astro', 'TypeScript', 'Docker'],
|
||||||
} as const;
|
} as const;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue