Skip to content

vaesonshu/xtai-nav

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

94 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Next.js入门全栈实战项目 — 星途AI导航

概述

这是一个使用最新 Next.js 版本构建的一个 AI 导航类项目,主要是收集国内外的一些 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 启动项目

项目技术栈

开发框架

登录注册

数据库

ORM

组件库

MCP Server

{
  "mcpServers": {
    "shadcn": {
      "command": "npx",
      "args": [
        "shadcn@latest",
        "mcp"
      ]
    }
  }
}

AI 编程助手

项目功能点

  • 登录
  • 注册
  • 点赞
  • 收藏
  • 编辑网站
  • 新增网站
  • 删除网站
  • 更新网站
  • 我的收藏
  • 个人设置
  • 暗黑主题
  • 侧边栏导航
  • 搜索网站
  • 日志记录
  • 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-notionxtai-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

公共前置

  1. 安装 Docker:sudo apt update && sudo apt install -y docker.io docker-compose-plugin

  2. 复制环境变量:cp .env.example .env,填写 DATABASE_URLBETTER_AUTH_SECRET

  3. 域名与 HTTPS 地址保持一致(无端口):

    DOMAIN=xtai-nav.cn
    NEXT_PUBLIC_BASE_URL=https://xtai-nav.cn
    BETTER_AUTH_URL=https://xtai-nav.cn
  4. 证书放在 ssl/xtai-nav.cn.pemxtai-nav.cn.key(须为文件,勿在证书缺失时启动 nginx,否则 Docker 可能误建同名目录)

修改 NEXT_PUBLIC_BASE_URL 后需 重新构建 应用镜像。


模式 A:与 xtai-notion 同机(默认)

xtai-notionxtai-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


模式 B:仅部署 xtai-nav(standalone)

不依赖 xtai-notion,由本仓库的 xtai-nav-nginx + xtai-nav-web 直接对外提供 80/443。更完整的说明见 DEPLOY-STANDALONE.md

单项目额外前置:

  1. DNS:DOMAIN(如 xtai-nav.cn)的 A 记录 指向服务器 IP
  2. 安全组 / 防火墙放行 80、443
  3. 证书放入 ssl/xtai-nav.cn.pemxtai-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**,确认证书与页面正常。

Github Actions

1. Ubuntu 生成 SSH Key

  • 在服务器的终端命令行输入 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

2. 配置 Github Actions Secrets

  • 在 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:服务器用户名

3. 配置 Github Actions 工作流

  • 在项目根目录新建 .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 免密登录(如果需要)

  • 在本地终端命令行输入以下命令,将本地公钥复制到服务器,实现免密登录
    • ssh-copy-id user@your-server-ip

项目优化

About

星途 AI 导航 | AI 应用一站式导航 - Next.js 入门实战导航项目。(待更新V2版本)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages