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.
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# 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
|
||||
# -----------------------------------------------------------------------------
|
||||
|
|
|
|||
10
Dockerfile
10
Dockerfile
|
|
@ -12,6 +12,11 @@ ARG GITEA_TOKEN=""
|
|||
ARG GITEA_USERNAME=""
|
||||
ARG SEAFILE_BASE_URL=""
|
||||
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 STRICT_SYNC="false"
|
||||
ARG SEAFILE_MIRROR_DOWNLOADS="false"
|
||||
|
|
@ -28,6 +33,11 @@ ENV GITEA_BASE_URL="${GITEA_BASE_URL}" \
|
|||
GITEA_USERNAME="${GITEA_USERNAME}" \
|
||||
SEAFILE_BASE_URL="${SEAFILE_BASE_URL}" \
|
||||
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}" \
|
||||
STRICT_SYNC="${STRICT_SYNC}" \
|
||||
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_TOKEN`
|
||||
- `GITEA_USERNAME`
|
||||
|
|
@ -41,6 +46,7 @@ cp .env.example .env
|
|||
- `SEAFILE_TOKEN`
|
||||
|
||||
如果某些远端还没接好,也可以先保留为空;系统会按当前策略回退到 seed data。
|
||||
如果正式域名还没下来,`PUBLIC_SITE_URL` / `PUBLIC_BLOG_URL` 也可以先留空。
|
||||
|
||||
### 3. 本地开发
|
||||
|
||||
|
|
@ -102,6 +108,22 @@ npm run rebuild
|
|||
|
||||
- 文件:`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 调用的命令:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,11 @@
|
|||
import { defineConfig } from 'astro/config';
|
||||
import { loadEnv } from 'vite';
|
||||
|
||||
export default defineConfig({
|
||||
site: 'https://sepcomet.xyz',
|
||||
export default defineConfig(({ mode }) => {
|
||||
const env = loadEnv(mode, process.cwd(), '');
|
||||
const site = env.PUBLIC_SITE_URL?.trim();
|
||||
|
||||
return {
|
||||
...(site ? { site } : {}),
|
||||
};
|
||||
});
|
||||
|
|
|
|||
|
|
@ -4,6 +4,11 @@ services:
|
|||
context: .
|
||||
dockerfile: Dockerfile
|
||||
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_TOKEN: ${GITEA_TOKEN:-}
|
||||
GITEA_USERNAME: ${GITEA_USERNAME:-}
|
||||
|
|
|
|||
|
|
@ -43,6 +43,20 @@ npm run rebuild
|
|||
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
|
||||
|
||||
| 变量 | 必填 | 作用 |
|
||||
|
|
@ -99,6 +113,22 @@ cp .env.example .env
|
|||
|
||||
## 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`
|
||||
|
||||
每个项目至少包含:
|
||||
|
|
|
|||
|
|
@ -17,6 +17,11 @@
|
|||
|
||||
确保仓库根目录有可用的 `.env`,或在执行 `docker compose` 前导出这些变量:
|
||||
|
||||
- `PUBLIC_SITE_URL`
|
||||
- `PUBLIC_GITEA_URL`
|
||||
- `PUBLIC_GITHUB_URL`
|
||||
- `PUBLIC_BLOG_URL`
|
||||
- `PUBLIC_GITEA_USERNAME`
|
||||
- `GITEA_BASE_URL`
|
||||
- `GITEA_TOKEN`
|
||||
- `GITEA_USERNAME`
|
||||
|
|
|
|||
|
|
@ -41,9 +41,13 @@ const isPlaceholder = activity.source === 'placeholder';
|
|||
: '这里展示构建阶段同步下来的 Gitea 热力图与最近活动摘要。'}
|
||||
</p>
|
||||
</div>
|
||||
{
|
||||
site.gitea.url ? (
|
||||
<a class="section-link" href={site.gitea.url} target="_blank" rel="noreferrer">
|
||||
打开 Gitea
|
||||
</a>
|
||||
) : null
|
||||
}
|
||||
</div>
|
||||
|
||||
<div class="activity-grid">
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ const {
|
|||
source,
|
||||
} = Astro.props;
|
||||
|
||||
const fallbackRepoUrl = repo ? `${site.gitea.url}/${repo}` : '';
|
||||
const fallbackRepoUrl = repo && site.gitea.url ? `${site.gitea.url}/${repo}` : '';
|
||||
const resolvedRepoUrl = repoUrl || fallbackRepoUrl;
|
||||
const visibleDownloads = downloads.filter((item) => item.name || item.url);
|
||||
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 = {
|
||||
name: 'SepComet',
|
||||
title: '个人主页',
|
||||
|
|
@ -7,13 +16,13 @@ export const site = {
|
|||
avatar: '/images/avatar.svg',
|
||||
location: 'Shanghai / Remote',
|
||||
gitea: {
|
||||
url: 'https://gitea.sepcomet.xyz',
|
||||
username: 'sepcomet',
|
||||
url: publicGiteaUrl,
|
||||
username: publicGiteaUsername,
|
||||
},
|
||||
links: [
|
||||
{ name: 'GitHub', url: 'https://github.com/sepcomet' },
|
||||
{ name: 'Gitea', url: 'https://gitea.sepcomet.xyz' },
|
||||
{ name: 'Blog', url: 'https://sepcomet.xyz' },
|
||||
],
|
||||
{ name: 'GitHub', url: publicGithubUrl },
|
||||
{ name: 'Gitea', url: publicGiteaUrl },
|
||||
{ name: 'Blog', url: publicBlogUrl },
|
||||
].filter((link) => link.url),
|
||||
stacks: ['Unity', 'Astro', 'TypeScript', 'Docker'],
|
||||
} as const;
|
||||
|
|
|
|||
Loading…
Reference in New Issue