这是一个使用最新 Next.js 版本构建的一个 AI 导航类项目,主要是收集国内外的一些 AI 技术和应用,希望在使用 AI 应用和开发方面能起到一个导航的作用,在众多的 AI 应用中,快速找到自己需要的应用。
内置 AI Agent,只需要使用自然语言,Agent 就能帮你搜索你需要的网站,然后根据您的选择是否入库此网站,简化自己搜索添加网站繁琐的步骤。
内置 MCP 管理,您可以根据您的需求,自定义设置您需要的 MCP,AI Agent 会自动识别已开启的 MCP。
-
在项目根目录新建
.env文件,复制.env.example中的内容到.env文件中,修改其中的环境变量。 -
登录 supabase 新建一个项目,获取到
DATABASE_URL,赋值给.env文件中的DATABASE_URL,用于连接线上数据库。 -
访问 better-auth.com 官网,点击
Generate Secret按钮,生成一个BETTER_AUTH_SECRET,赋值给.env文件中对应的环境变量,其中的BETTER_AUTH_URL赋值为项目的部署地址,例如http://xtai-nav.cn,本地开发测试使用http://localhost:3000。 -
pnpm install安装依赖 -
pnpm run db:push同步数据库表结构 -
pnpm run dev启动项目
{
"mcpServers": {
"shadcn": {
"command": "npx",
"args": [
"shadcn@latest",
"mcp"
]
}
}
}- 登录
- 注册
- 点赞
- 收藏
- 编辑网站
- 新增网站
- 删除网站
- 更新网站
- 我的收藏
- 个人设置
- 暗黑主题
- 侧边栏导航
- 搜索网站
- 日志记录
- AI Agent 搜集网站
- MCP 配置
- AI 聊天助手
- ...
生产环境提供 两种 Docker 部署方式,按场景二选一(同一台机器不要同时占用 80/443)。
| 模式 A:与 xtai-notion 同机 | 模式 B:仅部署 xtai-nav | |
|---|---|---|
| 适用 | 同一 ECS 上同时跑 notion + nav | 服务器只跑导航站 |
| Compose | docker-compose.yml |
docker-compose.standalone.yml |
| 公网入口 | xtai-notion 的 xtai-nginx |
本仓库 xtai-nav-nginx |
| 本仓库启动 | 仅 xtai-nav-web |
xtai-nav-nginx + xtai-nav-web |
| 本仓库命令 | docker compose --env-file .env up -d --build |
docker compose -f docker-compose.standalone.yml --env-file .env up -d --build |
| 详细文档 | DEPLOY.md | DEPLOY-STANDALONE.md |
-
安装 Docker:
sudo apt update && sudo apt install -y docker.io docker-compose-plugin -
复制环境变量:
cp .env.example .env,填写DATABASE_URL、BETTER_AUTH_SECRET等 -
域名与 HTTPS 地址保持一致(无端口):
DOMAIN=xtai-nav.cn NEXT_PUBLIC_BASE_URL=https://xtai-nav.cn BETTER_AUTH_URL=https://xtai-nav.cn
-
证书放在
ssl/:xtai-nav.cn.pem、xtai-nav.cn.key(须为文件,勿在证书缺失时启动 nginx,否则 Docker 可能误建同名目录)
修改 NEXT_PUBLIC_BASE_URL 后需 重新构建 应用镜像。
由 xtai-notion 的 xtai-nginx 按域名分流:fenoteai.cn → notion,xtai-nav.cn → 本项目的 xtai-nav-web。
顺序:先 notion,后 nav。
# 1. 在 xtai-notion 目录(创建 xtai-shared 网络并启动 notion + nginx)
cd /path/to/xtai-notion
cp apps/web/.env.example apps/web/.env
# apps/web/.env 中设置 NAV_DOMAIN=xtai-nav.cn
docker compose --env-file apps/web/.env up -d --build
# 2. 在本仓库目录
cd /path/to/xtai-nav
cp .env.example .env
docker compose --env-file .env up -d --build常用命令:
docker compose --env-file .env ps
docker compose --env-file .env logs -f web
docker compose --env-file .env up -d --build更新 nav 证书后,在 xtai-notion 目录执行:docker compose --env-file apps/web/.env restart nginx
不依赖 xtai-notion,由本仓库的 xtai-nav-nginx + xtai-nav-web 直接对外提供 80/443。更完整的说明见 DEPLOY-STANDALONE.md。
单项目额外前置:
- DNS:
DOMAIN(如xtai-nav.cn)的 A 记录 指向服务器 IP - 安全组 / 防火墙放行 80、443
- 证书放入
ssl/:xtai-nav.cn.pem、xtai-nav.cn.key
部署命令(在仓库根目录执行):
cd /path/to/xtai-nav
cp .env.example .env
# 编辑 .env:DATABASE_URL、BETTER_AUTH_SECRET、DOMAIN、NEXT_PUBLIC_BASE_URL、BETTER_AUTH_URL 等
docker compose -f docker-compose.standalone.yml --env-file .env up -d --build常用命令(均需带 -f docker-compose.standalone.yml):
docker compose -f docker-compose.standalone.yml --env-file .env ps
docker compose -f docker-compose.standalone.yml --env-file .env logs -f web
docker compose -f docker-compose.standalone.yml --env-file .env logs nginx --tail 10
docker compose -f docker-compose.standalone.yml --env-file .env up -d --build # 更新代码后重建
docker compose -f docker-compose.standalone.yml --env-file .env restart nginx # 仅更新证书后重载 nginx
docker compose -f docker-compose.standalone.yml --env-file .env down # 停止并移除容器可选环境变量(见 .env.example 注释):
| 变量 | 默认 | 说明 |
|---|---|---|
NGINX_HTTP_PORT |
80 |
对外 HTTP 端口 |
NGINX_HTTPS_PORT |
443 |
对外 HTTPS 端口 |
SSL_DIR |
./ssl |
证书目录 |
PORT |
3000 |
应用容器内端口(nginx 反代目标) |
curl -I http://xtai-nav.cn # 应 301 → https
curl -Ik https://xtai-nav.cn # 应 HTTP/2 200浏览器访问 **https://xtai-nav.cn**,确认证书与页面正常。
- 在服务器的终端命令行输入
ssh-keygen -t rsa -b 4096 -C "deploy@yourdomain.com" -P "" -f ~/.ssh/id_rsa- 私钥保存到:
~/.ssh/id_rsa - 公钥保存到:
~/.ssh/id_rsa.pub - 查看并复制公钥:
cat ~/.ssh/id_rsa.pub添加到 Github 仓库的 SSH Keys
- 私钥保存到:
- 在 Github 仓库页面,点击
Settings->Secrets and variables->Actions->New repository secret- 添加以下 Secrets:
SSH_PRIVATE_KEY:将~/.ssh/id_rsa的内容复制到该 Secret 中。PS:cat ~/.ssh/id_rsa查看私钥内容SERVER_HOST:服务器的 IP 地址。PS:ifconfig查看 IP 地址SSH_USER:服务器用户名
- 添加以下 Secrets:
- 在项目根目录新建
.github/workflows/deploy.yml文件,添加以下内容
name: 🚀 Deploy xtai-nav-app to ECS
on:
push:
branches:
- deploy # 推送到 deploy 分支自动部署
jobs:
deploy:
name: Deploy to ECS
runs-on: ubuntu-latest
steps:
- name: 🚀 Deploy on Remote ECS
env:
PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
HOSTNAME: ${{ secrets.SSH_HOST }}
USER_NAME: ${{ secrets.SSH_USER }}
run: |
echo "$PRIVATE_KEY" > private_key && chmod 600 private_key
ssh -o StrictHostKeyChecking=no -i private_key ${USER_NAME}@${HOSTNAME} "
set -e
echo '➡️ 进入部署目录...'
cd ~/xtai-nav-app || mkdir -p ~/xtai-nav-app && cd ~/xtai-nav-app
echo '📦 拉取最新代码...'
if [ ! -d .git ]; then
git clone -b deploy git@github.com:${{ github.repository }} .
else
git fetch origin deploy && git reset --hard origin/deploy
fi
echo '🐳 停止旧容器...'
docker stop xtai-nav-app || true
docker rm xtai-nav-app || true
echo '🧹 删除旧镜像...'
docker rmi xtai-nav-app || true
echo '🧱 构建新镜像...'
docker build -t xtai-nav-app .
echo '🚀 启动容器...'
docker run -d \
--name xtai-nav-app \
-p 3000:3000 \
xtai-nav-app
echo '✅ 部署完成!'
"
rm -f private_key- 在本地终端命令行输入以下命令,将本地公钥复制到服务器,实现免密登录
- ssh-copy-id user@your-server-ip