案例 把图床从 PHP/Laravel 换到 Go:ywty 的 Gin、Nuxt 3 与三种部署方式

2026-10-01 21:02:26

把图床从 PHP/Laravel 换到 Go:ywty 的 Gin、Nuxt 3 与三种部署方式

仓库:chizw/ywty

ywty 是一个自托管图床 / 云相册系统,从经典 Lsky Pro+ 完全重写而来。后端从 PHP/Laravel 迁到 Go + Gin + GORM,前端从 Vue 3 + Vite 升级到 Nuxt 3 SSR,UI 使用 shadcn-vue(Radix Vue + Tailwind)。当前是生产可用 alpha 版,P0–P11 已完成。

技术栈:Go + Gin 后端,Nuxt 3 SSR 前端

后端技术栈包括:

  • Go 1.25+、Gin、GORM v2
  • Viper(YAML + 环境变量)
  • Zap(按等级 / 文件切割)
  • Asynq(基于 Redis 的异步队列)
  • BigCache + Redis 多级缓存
  • Casbin(RBAC)、golang-jwt
  • disintegration/imaging、asaskevich/govalidator

前端使用 Nuxt 3 SSR,UI 层为 shadcn-vue(Radix Vue + Tailwind)。这套组合适合想把图床或相册服务放到 Go 技术栈、同时用 SSR 重做前端的团队参考。

数据层:30+ 张表,SQLite 默认、MySQL 可用

数据层由一套 GORM 模型覆盖 30+ 张业务表。默认使用 SQLite,便于轻量化启动;同时深度支持 MySQL,生产环境推荐 MariaDB 10.6.20+。

迁移通过 CLI 完成:

migrate up / down / status / seed

部署方式 A:Docker Compose(推荐)

复制环境变量文件,至少修改 JWT_SECRET 和 APP_URL:

cp .env.example .env
docker compose up -d

启动后访问 http://localhost:3000。

其他场景:

连接宿主机已有 MySQL + Redis:

DB_HOST=host.docker.internal REDIS_HOST=host.docker.internal docker compose up -d --scale mysql=0 --scale redis=0

本地开发用 SQLite:

DB_DRIVER=sqlite docker compose up -d --scale mysql=0 --scale redis=0

执行迁移:

docker compose run --rm migrate

部署侧还包含 Docker + Docker Compose、GitHub Actions CI(gofmt/vet/test/build/Docker 多架构)、Nginx 反代 + HTTPS、Supervisor 守护。

部署方式 B:本地开发

进入 server 目录,下载依赖并准备环境变量:

cd server && go mod download && cp .env.example .env

初始化数据库和种子数据:

go run ./cmd/migrate   # 初始化数据库+种子

启动 API,默认监听 :8080:

go run ./cmd/api       # 默认 :8080

部署方式 C:生产

生产部署脚本:

./deploy/deploy.sh prod v1.0.0

配置 Nginx 和 Supervisor:

cp deploy/nginx.conf.example /etc/nginx/sites-available/ywty.conf
cp deploy/supervisor.conf /etc/supervisor/conf.d/ywty.conf

数据库备份:

./deploy/backup-db.sh mysql

目录结构

  • deploy/:deploy.sh、dev-up/down.sh、backup-db.sh、nginx.conf.example、supervisor.conf
  • .github/workflows/
  • docker-compose.yml
  • .env.example
  • Dockerfile(合并 API + Web)

从 PHP/Laravel 迁到 Go 的现实含义

Lsky Pro+ 是 PHP 生态。团队如果想把图床放到 Go 技术栈,或者用 Nuxt SSR 重做前端,这个项目可以作为重构参考:30+ 表的模型、多存储驱动、队列与缓存分层,都在同一套 GORM 模型和 Go 服务里落地。

仓库地址:

复制全文 生成海报 Go Nuxt 图床 自托管 Gin

推荐文章

程序员茄子在线接单