Skip to content

跨服务器多语言网站部署指南

🌐 架构概述

本项目支持中英文版本部署在不同服务器上,通过智能映射系统实现无缝的语言切换体验。

📋 推荐部署架构

中文站点: ls-ai.cn
├── 服务器: 国内服务器 (更快的中文用户访问)
├── 内容: 中文版本 (/)
└── 备案: 中国ICP备案

英文站点: flareseek.com  
├── 服务器: 海外服务器 (更快的国际用户访问)
├── 内容: 英文版本 (/en/)
└── 备案: 无需中国备案

🔧 配置步骤

1. 域名配置

不同主域名配置

bash
# 中文站点
ls-ai.cn 国内服务器IP
www.ls-ai.cn 国内服务器IP

# 英文站点  
flareseek.com 海外服务器IP
www.flareseek.com 海外服务器IP

2. 服务器配置

中文服务器 (国内)

nginx
# /etc/nginx/sites-available/ls-ai.cn
server {
    listen 80;
    listen 443 ssl http2;
    server_name ls-ai.cn www.ls-ai.cn;
    
    # SSL配置
    ssl_certificate /path/to/ls-ai.cn.crt;
    ssl_certificate_key /path/to/ls-ai.cn.key;
    
    # 网站根目录
    root /var/www/ls-ai.cn;
    index index.html;
    
    # 静态文件缓存
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|webp)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
    
    # 处理SPA路由
    location / {
        try_files $uri $uri/ /index.html;
    }
    
    # 跨域头配置 (用于语言切换)
    add_header Access-Control-Allow-Origin "https://flareseek.com";
    add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
    add_header Access-Control-Allow-Headers "Content-Type";
}

英文服务器 (海外)

nginx
# /etc/nginx/sites-available/flareseek.com
server {
    listen 80;
    listen 443 ssl http2;
    server_name flareseek.com www.flareseek.com;
    
    # SSL配置
    ssl_certificate /path/to/flareseek.com.crt;
    ssl_certificate_key /path/to/flareseek.com.key;
    
    # 网站根目录
    root /var/www/flareseek.com;
    index index.html;
    
    # 静态文件缓存
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|webp)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
    
    # 处理SPA路由
    location / {
        try_files $uri $uri/ /index.html;
    }
    
    # 跨域头配置 (用于语言切换)
    add_header Access-Control-Allow-Origin "https://ls-ai.cn";
    add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
    add_header Access-Control-Allow-Headers "Content-Type";
}

3. 构建配置

中文版构建 (部署到国内服务器)

bash
# package.json - 中文版构建脚本
{
  "scripts": {
    "build:cn": "vitepress build --base=/ --outDir=dist-cn",
    "deploy:cn": "npm run build:cn && rsync -avz dist-cn/ user@cn-server:/var/www/ls-ai.cn/"
  }
}

英文版构建 (部署到海外服务器)

bash
# package.json - 英文版构建脚本
{
  "scripts": {
    "build:en": "vitepress build --base=/ --outDir=dist-en",
    "deploy:en": "npm run build:en && rsync -avz dist-en/ user@en-server:/var/www/flareseek.com/"
  }
}

4. VitePress配置更新

typescript
// .vitepress/config.mts
export default defineConfig({
  // 基础配置
  base: '/',
  
  // 多语言配置
  locales: {
    root: {
      label: '简体中文',
      lang: 'zh-CN',
      title: "类视搜图",
      // 中文版配置...
    },
    // 注意: 英文版在独立服务器上,这里的 /en/ 配置主要用于开发
    en: {
      label: 'English', 
      lang: 'en-US',
      title: "FlareSeek",
      // 英文版配置...
    }
  },
  
  // 构建配置
  vite: {
    define: {
      // 运行时域名配置
      __CHINESE_DOMAIN__: JSON.stringify('ls-ai.cn'),
      __ENGLISH_DOMAIN__: JSON.stringify('flareseek.com')
    }
  }
})

5. 跨域映射脚本部署

crossDomainMapping.js 复制到两个服务器的 /scripts/ 目录:

bash
# 中文服务器
cp .vitepress/scripts/crossDomainMapping.js /var/www/ls-ai.cn/scripts/

# 英文服务器  
cp .vitepress/scripts/crossDomainMapping.js /var/www/flareseek.com/scripts/

🚀 部署流程

自动化部署脚本

bash
#!/bin/bash
# deploy.sh - 自动化部署脚本

echo "🚀 开始部署多语言网站..."

# 1. 构建中文版
echo "📦 构建中文版..."
npm run build:cn

# 2. 构建英文版 (移除中文内容)
echo "📦 构建英文版..."
# 临时移除中文路由,只保留英文内容
npm run build:en

# 3. 部署到中文服务器
echo "🇨🇳 部署到中文服务器..."
rsync -avz --delete dist-cn/ user@ls-ai.cn:/var/www/ls-ai.cn/
ssh user@ls-ai.cn "sudo systemctl reload nginx"

# 4. 部署到英文服务器
echo "🇺🇸 部署到英文服务器..."
rsync -avz --delete dist-en/ user@flareseek.com:/var/www/flareseek.com/
ssh user@flareseek.com "sudo systemctl reload nginx"

echo "✅ 部署完成!"
echo "🔗 中文站点: https://ls-ai.cn"
echo "🔗 英文站点: https://flareseek.com"

GitHub Actions 自动部署

yaml
# .github/workflows/deploy.yml
name: Deploy Multi-Language Sites

on:
  push:
    branches: [ main ]

jobs:
  deploy-chinese:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
          
      - name: Install dependencies
        run: npm ci
        
      - name: Build Chinese site
        run: npm run build:cn
        
      - name: Deploy to Chinese server
        uses: appleboy/ssh-action@v0.1.5
        with:
          host: ${{ secrets.CN_SERVER_HOST }}
          username: ${{ secrets.CN_SERVER_USER }}
          key: ${{ secrets.CN_SERVER_KEY }}
          script: |
            cd /var/www/ls-ai.cn
            git pull origin main
            npm ci
            npm run build:cn
            sudo systemctl reload nginx

  deploy-english:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
          
      - name: Install dependencies
        run: npm ci
        
      - name: Build English site
        run: npm run build:en
        
      - name: Deploy to English server
        uses: appleboy/ssh-action@v0.1.5
        with:
          host: ${{ secrets.EN_SERVER_HOST }}
          username: ${{ secrets.EN_SERVER_USER }}
          key: ${{ secrets.EN_SERVER_KEY }}
          script: |
            cd /var/www/flareseek.com
            git pull origin main
            npm ci
            npm run build:en
            sudo systemctl reload nginx

🔍 测试验证

1. 功能测试清单

  • [ ] 中文站点 (ls-ai.cn) 正常访问
  • [ ] 英文站点 (flareseek.com) 正常访问
  • [ ] 语言切换链接正确跳转
  • [ ] 自动语言检测工作正常
  • [ ] 跨域脚本加载成功
  • [ ] SEO标签正确设置
  • [ ] SSL证书配置正确
  • [ ] 页面加载速度正常

2. 测试脚本

javascript
// test-cross-domain.js - 跨域功能测试
async function testCrossDomainMapping() {
  const tests = [
    {
      name: '中文站点访问测试',
      url: 'https://ls-ai.cn',
      expectedLang: 'zh-CN'
    },
    {
      name: '英文站点访问测试', 
      url: 'https://flareseek.com',
      expectedLang: 'en-US'
    },
    {
      name: '语言切换链接测试',
      url: 'https://ls-ai.cn/docs/installation',
      expectedTarget: 'https://flareseek.com/docs/installation'
    }
  ]
  
  for (const test of tests) {
    console.log(`🧪 ${test.name}...`)
    try {
      const response = await fetch(test.url)
      console.log(`✅ ${test.name} - 状态: ${response.status}`)
    } catch (error) {
      console.log(`❌ ${test.name} - 错误: ${error.message}`)
    }
  }
}

testCrossDomainMapping()

📊 监控和维护

1. 性能监控

javascript
// 添加到两个站点的监控脚本
function trackCrossDomainPerformance() {
  // 监控语言切换性能
  const switchStart = performance.now()
  
  window.addEventListener('beforeunload', () => {
    const switchTime = performance.now() - switchStart
    
    // 发送性能数据到分析服务
    navigator.sendBeacon('/api/analytics', JSON.stringify({
      type: 'language_switch_performance',
      duration: switchTime,
      from: window.location.hostname,
      timestamp: Date.now()
    }))
  })
}

2. 错误监控

javascript
// 跨域错误监控
window.addEventListener('error', (event) => {
  if (event.filename && event.filename.includes('crossDomainMapping')) {
    console.error('Cross-domain mapping error:', event.error)
    
    // 发送错误报告
    fetch('/api/error-report', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        type: 'cross_domain_error',
        message: event.message,
        filename: event.filename,
        lineno: event.lineno,
        colno: event.colno,
        userAgent: navigator.userAgent,
        url: window.location.href,
        timestamp: Date.now()
      })
    })
  }
})

🎯 最佳实践

1. SEO优化

  • 每个域名都有独立的sitemap.xml
  • 使用hreflang标签指向对应语言版本
  • 避免重复内容问题

2. 用户体验

  • 保持语言偏好设置
  • 提供明显的语言切换入口
  • 确保跨域跳转的流畅性

3. 性能优化

  • 使用CDN加速静态资源
  • 启用Gzip压缩
  • 优化图片和字体加载

4. 安全考虑

  • 配置正确的CORS策略
  • 使用HTTPS加密传输
  • 定期更新SSL证书

通过以上配置,您就可以实现中英文网站在不同服务器上的完美映射和切换!