531 lines
28 KiB
HTML
531 lines
28 KiB
HTML
<!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。频道管理、文件分享、集成 Webhook,CI/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>
|