Files
nexora-portal/index.html

531 lines
28 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Nexora — 智能研发平台</title>
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
theme: {
extend: {
colors: {
nexora: { 50: '#fef2f2', 100: '#fee2e2', 500: '#ef4444', 600: '#dc2626', 700: '#b91c1c', 800: '#991b1b', 900: '#1a1a2e' },
dark: { 800: '#1e1e2e', 900: '#0f0f1a', 700: '#2a2a3e' }
}
}
}
}
</script>
<style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap');
body { font-family: 'Inter', system-ui, sans-serif; }
html { scroll-behavior: smooth; }
.gradient-text { background: linear-gradient(135deg, #ef4444, #f97316, #eab308); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; }
.card-hover { transition: all 0.3s ease; }
.card-hover:hover { transform: translateY(-4px); box-shadow: 0 20px 40px rgba(0,0,0,0.3); }
.glow { box-shadow: 0 0 30px rgba(239, 68, 68, 0.15); }
.service-icon { font-size: 2.5rem; }
.nav-blur { backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); }
.hero-bg { background: radial-gradient(ellipse at 50% 0%, rgba(239,68,68,0.12) 0%, transparent 60%); }
.section-divider { background: linear-gradient(90deg, transparent, rgba(239,68,68,0.3), transparent); height: 1px; }
pre code { font-size: 0.85rem; }
.flow-arrow { color: #ef4444; font-size: 1.5rem; }
.env-dev { border-color: #22c55e; }
.env-staging { border-color: #eab308; }
.env-prod { border-color: #ef4444; }
</style>
</head>
<body class="bg-dark-900 text-gray-200 antialiased">
<!-- Navigation -->
<nav class="fixed top-0 w-full z-50 nav-blur bg-dark-900/80 border-b border-gray-800/50">
<div class="max-w-6xl mx-auto px-6 py-4 flex items-center justify-between">
<a href="#" class="flex items-center gap-3">
<span class="text-3xl">🦞</span>
<span class="text-xl font-bold text-white">Nexora</span>
</a>
<div class="hidden md:flex items-center gap-8 text-sm">
<a href="#services" class="text-gray-400 hover:text-white transition">服务</a>
<a href="#quickstart" class="text-gray-400 hover:text-white transition">快速开始</a>
<a href="#devops" class="text-gray-400 hover:text-white transition">开发流程</a>
<a href="#team" class="text-gray-400 hover:text-white transition">团队</a>
<a href="#sso" class="text-gray-400 hover:text-white transition">SSO</a>
<a href="https://uptime.nexora.restry.cn" target="_blank" class="px-4 py-2 bg-nexora-600/20 text-nexora-500 rounded-lg hover:bg-nexora-600/30 transition text-sm">服务状态 ↗</a>
</div>
</div>
</nav>
<!-- Hero -->
<section class="hero-bg pt-32 pb-20">
<div class="max-w-6xl mx-auto px-6 text-center">
<div class="inline-flex items-center gap-2 px-4 py-2 rounded-full bg-dark-700/50 border border-gray-700/50 text-sm text-gray-400 mb-8">
<span class="w-2 h-2 bg-green-500 rounded-full animate-pulse"></span>
全部服务运行中
</div>
<h1 class="text-5xl md:text-7xl font-800 text-white mb-6 leading-tight">
<span class="gradient-text">Nexora</span><br>智能研发平台
</h1>
<p class="text-xl text-gray-400 max-w-2xl mx-auto mb-10 leading-relaxed">
一站式自托管研发基础设施 — 代码管理、知识协作、服务监控、容器编排、团队沟通,统一认证,开箱即用。
</p>
<div class="flex flex-wrap justify-center gap-4">
<a href="#quickstart" class="px-8 py-3 bg-nexora-600 text-white rounded-lg font-medium hover:bg-nexora-700 transition">
快速开始 →
</a>
<a href="#services" class="px-8 py-3 bg-dark-700 text-gray-300 rounded-lg font-medium hover:bg-dark-800 border border-gray-700 transition">
查看服务
</a>
</div>
</div>
</section>
<div class="section-divider max-w-4xl mx-auto"></div>
<!-- Services -->
<section id="services" class="py-20">
<div class="max-w-6xl mx-auto px-6">
<div class="text-center mb-16">
<h2 class="text-3xl md:text-4xl font-bold text-white mb-4">平台服务</h2>
<p class="text-gray-400 max-w-xl mx-auto">所有服务通过 Gitea 统一账号体系登录,一个账号访问全部平台。</p>
</div>
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-6">
<!-- Gitea -->
<a href="https://gitea.nexora.restry.cn" target="_blank" class="card-hover p-6 rounded-2xl bg-dark-800 border border-gray-700/50 glow block">
<div class="service-icon mb-4">🗃️</div>
<h3 class="text-xl font-semibold text-white mb-2">Gitea — 代码管理</h3>
<p class="text-gray-400 text-sm leading-relaxed mb-3">
轻量级 Git 托管平台,兼容 GitHub 生态。支持仓库管理、Pull Request、代码审查、Issue 跟踪、Gitea Actions CI/CD。
</p>
<div class="text-xs text-gray-500">gitea.nexora.restry.cn ↗</div>
</a>
<!-- Outline -->
<a href="https://outline.nexora.restry.cn" target="_blank" class="card-hover p-6 rounded-2xl bg-dark-800 border border-gray-700/50 glow block">
<div class="service-icon mb-4">📝</div>
<h3 class="text-xl font-semibold text-white mb-2">Outline — 知识库</h3>
<p class="text-gray-400 text-sm leading-relaxed mb-3">
团队文档协作平台,支持 Markdown 编辑、实时协作、结构化知识管理。项目文档、API 文档、会议记录、技术方案都在这里。
</p>
<div class="text-xs text-gray-500">outline.nexora.restry.cn ↗</div>
</a>
<!-- Uptime Kuma -->
<a href="https://uptime.nexora.restry.cn" target="_blank" class="card-hover p-6 rounded-2xl bg-dark-800 border border-gray-700/50 glow block">
<div class="service-icon mb-4">📊</div>
<h3 class="text-xl font-semibold text-white mb-2">Uptime Kuma — 监控</h3>
<p class="text-gray-400 text-sm leading-relaxed mb-3">
服务可用性监控,实时检测所有平台服务状态。支持 HTTP、TCP、Ping、DNS 多种检测方式,故障时自动告警到 Mattermost。
</p>
<div class="text-xs text-gray-500">uptime.nexora.restry.cn ↗</div>
</a>
<!-- Portainer -->
<a href="https://portainer.nexora.restry.cn" target="_blank" class="card-hover p-6 rounded-2xl bg-dark-800 border border-gray-700/50 glow block">
<div class="service-icon mb-4">🐳</div>
<h3 class="text-xl font-semibold text-white mb-2">Portainer — 容器管理</h3>
<p class="text-gray-400 text-sm leading-relaxed mb-3">
Docker 可视化管理面板。查看容器状态、日志、资源占用,管理镜像、网络、数据卷,无需命令行也能运维。
</p>
<div class="text-xs text-gray-500">portainer.nexora.restry.cn ↗</div>
</a>
<!-- Mattermost -->
<a href="https://mm.dora.restry.cn" target="_blank" class="card-hover p-6 rounded-2xl bg-dark-800 border border-gray-700/50 glow block">
<div class="service-icon mb-4">💬</div>
<h3 class="text-xl font-semibold text-white mb-2">Mattermost — 团队沟通</h3>
<p class="text-gray-400 text-sm leading-relaxed mb-3">
自托管即时通讯平台,替代 Slack。频道管理、文件分享、集成 WebhookCI/CD 通知和监控告警都汇聚于此。
</p>
<div class="text-xs text-gray-500">mm.dora.restry.cn ↗</div>
</a>
<!-- Nexora AI -->
<div class="card-hover p-6 rounded-2xl bg-dark-800 border border-gray-700/50 glow">
<div class="service-icon mb-4">🤖</div>
<h3 class="text-xl font-semibold text-white mb-2">Nexora AI — 运维管家</h3>
<p class="text-gray-400 text-sm leading-relaxed mb-3">
AI 驱动的 DevOps 助手,驻扎在 Mattermost。服务监控、代码管理、自动化运维、子代理编排7×24 在线协助。
</p>
<div class="text-xs text-gray-500">通过 Mattermost 交互 🦞</div>
</div>
</div>
</div>
</section>
<div class="section-divider max-w-4xl mx-auto"></div>
<!-- Quick Start -->
<section id="quickstart" class="py-20">
<div class="max-w-4xl mx-auto px-6">
<h2 class="text-3xl md:text-4xl font-bold text-white mb-4 text-center">快速开始</h2>
<p class="text-gray-400 text-center mb-16">从零开始5 分钟上手 Nexora 平台。</p>
<!-- Step 1: Login -->
<div class="mb-12">
<div class="flex items-center gap-3 mb-4">
<span class="w-8 h-8 bg-nexora-600 text-white rounded-lg flex items-center justify-center font-bold text-sm">1</span>
<h3 class="text-xl font-semibold text-white">登录账号</h3>
</div>
<div class="pl-11">
<p class="text-gray-400 mb-3">
所有平台服务使用 <strong class="text-white">Gitea 统一账号</strong>登录。首次使用请联系管理员创建账号,然后访问 Gitea 修改初始密码。
</p>
<div class="bg-dark-800 rounded-xl p-4 border border-gray-700/50">
<p class="text-sm text-gray-400 mb-2">📌 登录地址</p>
<code class="text-nexora-500">https://gitea.nexora.restry.cn</code>
<p class="text-sm text-gray-500 mt-2">其他服务Outline、Portainer 等)点击 "通过 Nexora Git 登录" 即可 SSO 跳转。</p>
</div>
</div>
</div>
<!-- Step 2: SSH Key -->
<div class="mb-12">
<div class="flex items-center gap-3 mb-4">
<span class="w-8 h-8 bg-nexora-600 text-white rounded-lg flex items-center justify-center font-bold text-sm">2</span>
<h3 class="text-xl font-semibold text-white">配置 SSH Key</h3>
</div>
<div class="pl-11">
<p class="text-gray-400 mb-3">推送代码需要 SSH 密钥认证:</p>
<div class="bg-dark-800 rounded-xl p-4 border border-gray-700/50 overflow-x-auto">
<pre class="text-sm text-gray-300"><code># 生成 SSH Key如果还没有
ssh-keygen -t ed25519 -C "your-email@nexora.dev"
# 复制公钥
cat ~/.ssh/id_ed25519.pub
# 粘贴到 Gitea → 设置 → SSH/GPG Keys → 添加密钥</code></pre>
</div>
</div>
</div>
<!-- Step 3: Import Repo -->
<div class="mb-12">
<div class="flex items-center gap-3 mb-4">
<span class="w-8 h-8 bg-nexora-600 text-white rounded-lg flex items-center justify-center font-bold text-sm">3</span>
<h3 class="text-xl font-semibold text-white">导入已有代码</h3>
</div>
<div class="pl-11">
<p class="text-gray-400 mb-3">从 GitHub/GitLab 等平台迁移仓库:</p>
<div class="bg-dark-800 rounded-xl p-4 border border-gray-700/50">
<ol class="text-sm text-gray-300 space-y-2 list-decimal list-inside">
<li>登录 Gitea → 右上角 <strong class="text-white">+</strong><strong class="text-white">迁移外部仓库</strong></li>
<li>选择来源平台GitHub、GitLab、Gitea 等)</li>
<li>填入仓库 URL支持 HTTPS 和 SSH</li>
<li>如果是私有仓库,填入访问令牌</li>
<li>选择是否迁移 Issues、PR、Labels 等</li>
<li>点击 <strong class="text-white">迁移仓库</strong>,等待完成</li>
</ol>
</div>
<p class="text-sm text-gray-500 mt-3">💡 也可以命令行迁移:</p>
<div class="bg-dark-800 rounded-xl p-4 border border-gray-700/50 overflow-x-auto mt-2">
<pre class="text-sm text-gray-300"><code># 克隆原仓库(含所有分支和标签)
git clone --mirror https://github.com/org/repo.git
# 推送到 Nexora Gitea
cd repo.git
git remote set-url origin ssh://git@gitea.nexora.restry.cn:2222/your-username/repo.git
git push --mirror</code></pre>
</div>
</div>
</div>
<!-- Step 4: New Repo -->
<div class="mb-12">
<div class="flex items-center gap-3 mb-4">
<span class="w-8 h-8 bg-nexora-600 text-white rounded-lg flex items-center justify-center font-bold text-sm">4</span>
<h3 class="text-xl font-semibold text-white">新建代码仓库</h3>
</div>
<div class="pl-11">
<div class="bg-dark-800 rounded-xl p-4 border border-gray-700/50 overflow-x-auto">
<pre class="text-sm text-gray-300"><code># 方式一:网页创建
# Gitea → + → 创建仓库 → 填写名称/描述 → 创建
# 方式二:命令行推送新项目
mkdir my-project && cd my-project
git init && git checkout -b main
echo "# My Project" > README.md
git add . && git commit -m "init: project scaffold"
git remote add origin ssh://git@gitea.nexora.restry.cn:2222/your-username/my-project.git
git push -u origin main</code></pre>
</div>
</div>
</div>
</div>
</section>
<div class="section-divider max-w-4xl mx-auto"></div>
<!-- DevOps -->
<section id="devops" class="py-20">
<div class="max-w-5xl mx-auto px-6">
<h2 class="text-3xl md:text-4xl font-bold text-white mb-4 text-center">开发流程</h2>
<p class="text-gray-400 text-center mb-16">规范化的三环境 + Git Flow 工作流,保障代码质量与部署安全。</p>
<!-- 3 Environments -->
<h3 class="text-2xl font-semibold text-white mb-8">🏗️ 三环境架构</h3>
<div class="grid md:grid-cols-3 gap-6 mb-16">
<div class="p-6 rounded-2xl bg-dark-800 border-2 env-dev">
<div class="text-3xl mb-3">🟢</div>
<h4 class="text-lg font-bold text-green-400 mb-2">Development</h4>
<p class="text-sm text-gray-400 mb-3">开发环境 — 自由实验,快速迭代</p>
<ul class="text-xs text-gray-500 space-y-1">
<li>• 分支:<code class="text-green-400">feature/*</code></li>
<li>• 部署:本地 / Docker Compose</li>
<li>• 数据库:独立开发库</li>
<li>• 域名:<code>dev-*.nexora.restry.cn</code></li>
</ul>
</div>
<div class="p-6 rounded-2xl bg-dark-800 border-2 env-staging">
<div class="text-3xl mb-3">🟡</div>
<h4 class="text-lg font-bold text-yellow-400 mb-2">Staging</h4>
<p class="text-sm text-gray-400 mb-3">测试环境 — 集成测试,验收确认</p>
<ul class="text-xs text-gray-500 space-y-1">
<li>• 分支:<code class="text-yellow-400">develop</code></li>
<li>• 部署PR 合并后自动部署</li>
<li>• 数据库:测试数据(可重置)</li>
<li>• 域名:<code>staging-*.nexora.restry.cn</code></li>
</ul>
</div>
<div class="p-6 rounded-2xl bg-dark-800 border-2 env-prod">
<div class="text-3xl mb-3">🔴</div>
<h4 class="text-lg font-bold text-red-400 mb-2">Production</h4>
<p class="text-sm text-gray-400 mb-3">生产环境 — 稳定可靠,审批发布</p>
<ul class="text-xs text-gray-500 space-y-1">
<li>• 分支:<code class="text-red-400">main</code>(打 tag</li>
<li>• 部署:审批后触发</li>
<li>• 数据库:生产数据(定时备份)</li>
<li>• 域名:<code>*.nexora.restry.cn</code></li>
</ul>
</div>
</div>
<!-- Git Flow -->
<h3 class="text-2xl font-semibold text-white mb-8">🌿 Git 分支策略</h3>
<div class="bg-dark-800 rounded-2xl p-8 border border-gray-700/50 mb-16">
<div class="overflow-x-auto">
<pre class="text-sm text-gray-300 leading-relaxed"><code>main (生产) ─────●──────────────────●─────── 稳定发布
↑ ↑
release/* ────●── 测试修复 ──● │ 发版准备
↑ ↓ ↑
develop (集成) ──●──●──●──●──●──●──●──●──●──── 日常集成
↑ ↑ ↑
feature/login ──●──● │ 功能分支
feature/api ───────●──● 功能分支
hotfix/* ──●──── 紧急修复 → main + develop</code></pre>
</div>
<div class="mt-6 grid md:grid-cols-2 gap-4 text-sm">
<div class="text-gray-400"><code class="text-white">main</code> — 生产代码,只接受 release 和 hotfix 合并</div>
<div class="text-gray-400"><code class="text-white">develop</code> — 集成分支feature 完成后合并到此</div>
<div class="text-gray-400"><code class="text-white">feature/*</code> — 功能开发,从 develop 拉出</div>
<div class="text-gray-400"><code class="text-white">release/*</code> — 发版准备,冻结功能只修 bug</div>
<div class="text-gray-400"><code class="text-white">hotfix/*</code> — 紧急修复,从 main 拉出</div>
</div>
</div>
<!-- Workflow -->
<h3 class="text-2xl font-semibold text-white mb-8">🔄 日常开发流程</h3>
<div class="bg-dark-800 rounded-2xl p-8 border border-gray-700/50 mb-16 overflow-x-auto">
<pre class="text-sm text-gray-300"><code># 1. 从 develop 拉功能分支
git checkout develop && git pull
git checkout -b feature/user-auth
# 2. 开发 & 提交
git add . && git commit -m "feat: add JWT authentication"
# 3. 推送并创建 Pull Request
git push -u origin feature/user-auth
# → 在 Gitea 上创建 PR → develop
# 4. 代码审查 + CI 通过 → 合并
# → Staging 自动部署QA 验证
# 5. 发版
git checkout -b release/v1.0.0 develop
# 测试修复后 → 合并到 main + develop
git tag v1.0.0
git push --tags
# → Production 部署</code></pre>
</div>
<!-- CI/CD -->
<h3 class="text-2xl font-semibold text-white mb-8">⚡ CI/CD 自动化</h3>
<div class="bg-dark-800 rounded-2xl p-8 border border-gray-700/50">
<p class="text-gray-400 mb-4">使用 <strong class="text-white">Gitea Actions</strong>(兼容 GitHub Actions 语法):</p>
<div class="flex flex-wrap items-center gap-3 mb-6 text-sm">
<span class="px-3 py-1 bg-blue-900/30 text-blue-400 rounded-lg">git push</span>
<span class="flow-arrow"></span>
<span class="px-3 py-1 bg-purple-900/30 text-purple-400 rounded-lg">Build</span>
<span class="flow-arrow"></span>
<span class="px-3 py-1 bg-yellow-900/30 text-yellow-400 rounded-lg">Test</span>
<span class="flow-arrow"></span>
<span class="px-3 py-1 bg-green-900/30 text-green-400 rounded-lg">Deploy</span>
<span class="flow-arrow"></span>
<span class="px-3 py-1 bg-red-900/30 text-red-400 rounded-lg">Notify</span>
</div>
<pre class="text-sm text-gray-300 overflow-x-auto"><code># .gitea/workflows/ci.yml
name: CI Pipeline
on:
push:
branches: [develop, main]
pull_request:
branches: [develop]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: npm ci && npm run build
- name: Test
run: npm test
- name: Deploy to Staging
if: github.ref == 'refs/heads/develop'
run: echo "Deploy to staging..."
- name: Deploy to Production
if: startsWith(github.ref, 'refs/tags/v')
run: echo "Deploy to production..."</code></pre>
</div>
</div>
</section>
<div class="section-divider max-w-4xl mx-auto"></div>
<!-- Team -->
<section id="team" class="py-20">
<div class="max-w-4xl mx-auto px-6">
<h2 class="text-3xl md:text-4xl font-bold text-white mb-4 text-center">团队成员</h2>
<p class="text-gray-400 text-center mb-12">平台账号统一由 Gitea 管理,以下为当前团队成员。</p>
<div class="grid md:grid-cols-2 lg:grid-cols-4 gap-6">
<div class="text-center p-6 rounded-2xl bg-dark-800 border border-gray-700/50">
<div class="text-4xl mb-3">👨‍💼</div>
<h4 class="font-semibold text-white">admin</h4>
<p class="text-xs text-nexora-500">管理员</p>
<p class="text-xs text-gray-500 mt-1">admin@nexora.dev</p>
</div>
<div class="text-center p-6 rounded-2xl bg-dark-800 border border-gray-700/50">
<div class="text-4xl mb-3">👩‍💻</div>
<h4 class="font-semibold text-white">dev-alice</h4>
<p class="text-xs text-green-400">开发</p>
<p class="text-xs text-gray-500 mt-1">alice@nexora.dev</p>
</div>
<div class="text-center p-6 rounded-2xl bg-dark-800 border border-gray-700/50">
<div class="text-4xl mb-3">👨‍💻</div>
<h4 class="font-semibold text-white">dev-bob</h4>
<p class="text-xs text-green-400">开发</p>
<p class="text-xs text-gray-500 mt-1">bob@nexora.dev</p>
</div>
<div class="text-center p-6 rounded-2xl bg-dark-800 border border-gray-700/50">
<div class="text-4xl mb-3">🧪</div>
<h4 class="font-semibold text-white">qa-charlie</h4>
<p class="text-xs text-yellow-400">测试</p>
<p class="text-xs text-gray-500 mt-1">charlie@nexora.dev</p>
</div>
</div>
<div class="mt-8 text-center text-sm text-gray-500">
需要新建账号?联系管理员或在 Mattermost 找 🦞 Nexora AI 协助。
</div>
</div>
</section>
<div class="section-divider max-w-4xl mx-auto"></div>
<!-- SSO -->
<section id="sso" class="py-20">
<div class="max-w-4xl mx-auto px-6">
<h2 class="text-3xl md:text-4xl font-bold text-white mb-4 text-center">统一认证 (SSO)</h2>
<p class="text-gray-400 text-center mb-12">Gitea 作为 OAuth2/OIDC Provider一个账号登录所有服务。</p>
<div class="bg-dark-800 rounded-2xl p-8 border border-gray-700/50">
<div class="flex flex-wrap items-center justify-center gap-4 mb-8 text-sm">
<span class="px-4 py-2 bg-gray-700 rounded-lg text-white">Outline</span>
<span class="px-4 py-2 bg-gray-700 rounded-lg text-white">Portainer</span>
<span class="px-4 py-2 bg-gray-700 rounded-lg text-white">新服务...</span>
<span class="flow-arrow"></span>
<span class="px-4 py-2 bg-nexora-600 rounded-lg text-white font-semibold">🗃️ Gitea OAuth</span>
<span class="flow-arrow"></span>
<span class="px-4 py-2 bg-green-800 rounded-lg text-white">✅ 登录成功</span>
</div>
<h4 class="text-lg font-semibold text-white mb-4">接入新服务到 Gitea SSO</h4>
<ol class="text-sm text-gray-400 space-y-3 list-decimal list-inside">
<li>登录 Gitea → <strong class="text-white">站点管理</strong><strong class="text-white">应用</strong><strong class="text-white">创建 OAuth2 应用</strong></li>
<li>填写应用名称和回调 URL<code class="text-nexora-500">https://new-service.nexora.restry.cn/callback</code></li>
<li>获取 <code class="text-white">Client ID</code><code class="text-white">Client Secret</code></li>
<li>在新服务中配置 OIDC
<div class="bg-dark-700 rounded-lg p-3 mt-2 overflow-x-auto">
<pre class="text-xs text-gray-300"><code>Authorization URL: https://gitea.nexora.restry.cn/login/oauth/authorize
Token URL: https://gitea.nexora.restry.cn/login/oauth/access_token
Userinfo URL: https://gitea.nexora.restry.cn/login/oauth/userinfo</code></pre>
</div>
</li>
<li>用户点击 "通过 Nexora Git 登录" 即可 SSO 跳转 ✅</li>
</ol>
</div>
</div>
</section>
<div class="section-divider max-w-4xl mx-auto"></div>
<!-- Architecture -->
<section class="py-20">
<div class="max-w-4xl mx-auto px-6">
<h2 class="text-3xl md:text-4xl font-bold text-white mb-4 text-center">基础架构</h2>
<p class="text-gray-400 text-center mb-12">全容器化部署FRP 内网穿透Caddy 自动 TLS。</p>
<div class="bg-dark-800 rounded-2xl p-8 border border-gray-700/50 overflow-x-auto">
<pre class="text-sm text-gray-300 leading-relaxed"><code>
┌─────────────────────────────────────────────────────────────┐
│ 外网用户 (HTTPS) │
└─────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ fw-n2 (40.162.94.187) — FRP Server │
│ *.nexora.restry.cn → FRP 隧道 │
└─────────────────────┬───────────────────────────────────────┘
↓ HTTP/HTTPS 隧道
┌─────────────────────────────────────────────────────────────┐
│ claw-bot (192.168.31.141) — FRP Client │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ Caddy (TLS 终结 + 反向代理) │ │
│ │ ├── gitea.nexora.restry.cn → Gitea:3000 │ │
│ │ ├── outline.nexora.restry.cn → Outline:3000 │ │
│ │ ├── uptime.nexora.restry.cn → Uptime Kuma:3001 │ │
│ │ ├── portainer.nexora.restry.cn→ Portainer:9000 │ │
│ │ └── www.nexora.restry.cn → 静态文件 (本站) │ │
│ └────────────────────────────────────────────────────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────────┐ │
│ │ Gitea │ │ Outline │ │ Postgres │ │ Uptime Kuma │ │
│ └──────────┘ └──────────┘ └──────────┘ └───────────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────────────────┐ │
│ │Portainer │ │ Redis │ │ 🦞 Nexora AI (OpenClaw) │ │
│ └──────────┘ └──────────┘ └──────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
</code></pre>
</div>
</div>
</section>
<!-- Footer -->
<footer class="border-t border-gray-800/50 py-12">
<div class="max-w-6xl mx-auto px-6 text-center">
<div class="flex items-center justify-center gap-3 mb-4">
<span class="text-2xl">🦞</span>
<span class="text-lg font-semibold text-white">Nexora</span>
</div>
<p class="text-sm text-gray-500 mb-4">智能研发平台 — 自托管、安全、高效</p>
<div class="flex flex-wrap justify-center gap-6 text-sm text-gray-500 mb-6">
<a href="https://gitea.nexora.restry.cn" class="hover:text-white transition">Gitea</a>
<a href="https://outline.nexora.restry.cn" class="hover:text-white transition">Outline</a>
<a href="https://uptime.nexora.restry.cn" class="hover:text-white transition">服务状态</a>
<a href="https://portainer.nexora.restry.cn" class="hover:text-white transition">Portainer</a>
<a href="https://mm.dora.restry.cn" class="hover:text-white transition">Mattermost</a>
</div>
<p class="text-xs text-gray-600">© 2026 Nexora. All rights reserved.</p>
</div>
</footer>
</body>
</html>