本指南介绍如何构建和部署 SkyMap Test 应用程序。
SkyMap Test 支持多种部署方式:
- Windows: MSI安装包
- macOS: DMG安装包
- Linux: AppImage、deb、rpm包
- 静态托管: Vercel、Netlify
- 自托管: Nginx、Apache
- Rust 工具链(1.70+)
- Node.js (20+)
- pnpm 或 npm
- 操作系统特定工具
- 安装 Microsoft Visual C++ Build Tools
- 安装 Rust
- 安装 Node.js 和 pnpm
# 克隆仓库
git clone https://github.com/yourusername/skymap-test.git
cd skymap-test
# 安装依赖
pnpm install
# 构建
pnpm tauri build- MSI安装包:
src-tauri/target/release/bundle/msi/ - 可执行文件:
src-tauri/target/release/
- 安装 Xcode Command Line Tools
- 安装 Rust
- 安装 Node.js 和 pnpm
# 克隆仓库
git clone https://github.com/yourusername/skymap-test.git
cd skymap-test
# 安装依赖
pnpm install
# 构建
pnpm tauri build- DMG安装包:
src-tauri/target/release/bundle/dmg/ - 应用程序:
src-tauri/target/release/bundle/macos/
# Ubuntu/Debian
sudo apt update
sudo apt install libwebkit2gtk-4.0-dev \
build-essential \
curl \
wget \
libssl-dev \
libgtk-3-dev \
libayatana-appindicator3-dev \
librsvg2-dev
# Fedora
sudo dnf install webkit2gtk3-devel \
openssl-devel \
curl \
wget \
file \
libappindicator-gtk3-devel \
librsvg2-devel# 克隆仓库
git clone https://github.com/yourusername/skymap-test.git
cd skymap-test
# 安装依赖
pnpm install
# 构建
pnpm tauri build- AppImage:
src-tauri/target/release/bundle/appimage/ - deb包:
src-tauri/target/release/bundle/deb/ - rpm包:
src-tauri/target/release/bundle/rpm/
# 构建Next.js应用
pnpm build
# 输出在 out/ 目录- 推送代码到GitHub
- 在 Vercel 导入项目
- Vercel自动检测Next.js并配置
- 点击部署
- 推送代码到GitHub
- 在 Netlify 导入项目
- 配置构建设置:
- 构建命令:
pnpm build - 发布目录:
out
- 构建命令:
- 点击部署
server {
listen 80;
server_name skymap.example.com;
root /var/www/skymap-test/out;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}<VirtualHost *:80>
ServerName skymap.example.com
DocumentRoot /var/www/skymap-test/out
<Directory /var/www/skymap-test/out>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</Directory>
</VirtualHost>使用 SignTool 对应用进行签名:
signtool sign /f certificate.pfx /p password /t timestamp_url skymap-test.msi# 安装证书
# 导入开发者证书到钥匙串
# 签名应用
codesign --sign "Developer ID Application: Your Name" \
--force --deep \
src-tauri/target/release/bundle/macos/SkyMapTest.app
# 公证应用(需要Apple Developer账号)
xcrun notarytool submit SkyMapTest.dmg \
--apple-id "your@email.com" \
--password "app-specific-password" \
--team-id "team-id" \
--wait使用语义化版本:
- MAJOR.MINOR.PATCH
- 例如: 1.0.0, 1.1.0, 1.1.1
- 更新版本号
- 更新CHANGELOG
- 创建Git标签
- 构建所有平台的安装包
- 上传到GitHub Releases
- 发布公告
使用GitHub Actions自动构建:
name: Build Release
on:
push:
tags:
- 'v*'
jobs:
build:
strategy:
matrix:
os: [windows-latest, macos-latest, ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- uses: dtolnay/rust-toolchain@stable
- run: pnpm install
- run: pnpm tauri build
- uses: actions/upload-artifact@v4
with:
name: ${{ matrix.os }}-bundle
path: |
src-tauri/target/release/bundle/- 启用压缩
- 移除不必要的依赖
- 使用LTO(Link Time Optimization)
- 精简资源文件
- 延迟加载非关键模块
- 优化初始化顺序
- 预加载常用数据
SkyMap Test 内置更新机制:
- 自动检查更新
- 下载更新包
- 自动安装
桌面端自动更新使用 GitHub Releases 作为唯一发布源,并依赖以下文件:
latest.json- 平台对应的 updater 归档
- 与归档匹配的
.sig签名文件
当前 updater endpoint:
https://github.com/AstroAir/skymap-test/releases/latest/download/latest.json
发布时,GitHub Actions 会为 tag 构建动态注入一份临时 Tauri 配置,包含:
bundle.createUpdaterArtifacts: trueplugins.updater.pubkeyplugins.updater.endpoints
要使自动更新生效,还需要:
- 在 GitHub Secrets 中设置
TAURI_UPDATER_PUBLIC_KEY - 在 GitHub Secrets 中设置
TAURI_SIGNING_PRIVATE_KEY - 在 GitHub Secrets 中设置
TAURI_SIGNING_PRIVATE_KEY_PASSWORD - 在发布前维护
CHANGELOG.md中对应版本的条目 - 将生成的 draft release 人工检查后再 publish
# 清理缓存
cd src-tauri
cargo clean
# 更新Rust
rustup update# 清理Next.js缓存
rm -rf .next out
# 重新安装依赖
rm -rf node_modules pnpm-lock.yaml
pnpm install# 重新安装Tauri CLI
pnpm remove -D @tauri-apps/cli
pnpm add -D @tauri-apps/cli