{"id":39103883,"url":"https://github.com/xijaja/gone","last_synced_at":"2026-01-17T19:19:12.948Z","repository":{"id":131675985,"uuid":"582226829","full_name":"xijaja/gone","owner":"xijaja","description":"Gone 远走高飞，前后端单文件一次性部署。","archived":false,"fork":false,"pushed_at":"2025-05-15T08:56:29.000Z","size":290,"stargazers_count":23,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-15T09:42:22.283Z","etag":null,"topics":["dockerfile","embed","fullstack","goembed","golang","shadcn-svelte","solid","svelte","sveltekit","typescript"],"latest_commit_sha":null,"homepage":"https://gone.fly.dev","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xijaja.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-12-26T06:28:20.000Z","updated_at":"2025-05-15T08:56:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"178e899c-e60a-4762-9d5d-f974eb116f1d","html_url":"https://github.com/xijaja/gone","commit_stats":null,"previous_names":[],"tags_count":1,"template":true,"template_full_name":null,"purl":"pkg:github/xijaja/gone","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xijaja%2Fgone","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xijaja%2Fgone/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xijaja%2Fgone/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xijaja%2Fgone/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xijaja","download_url":"https://codeload.github.com/xijaja/gone/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xijaja%2Fgone/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28516721,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T18:55:29.170Z","status":"ssl_error","status_checked_at":"2026-01-17T18:55:03.375Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dockerfile","embed","fullstack","goembed","golang","shadcn-svelte","solid","svelte","sveltekit","typescript"],"created_at":"2026-01-17T19:19:12.152Z","updated_at":"2026-01-17T19:19:12.932Z","avatar_url":"https://github.com/xijaja.png","language":"Go","readme":"\u003ch1 align=\"center\"\u003eGone\u003c/h1\u003e\n\u003cp align=\"center\"\u003e远走高飞，前后端一次性部署，一个文件搞定\u003c/p\u003e\n\n## 特点\n\n- 采用现代化技术栈\n- 前后端开发时分离\n- 单二进制程序构建\n- 适合小型全栈项目\n- 代码整洁注释齐全\n- 单服务器轻量部署\n\n## 介绍\n\n本项目共有两个分支，`main` 分支和 `with-sqlite` 分支，两者在使用的数据库上有所不同。\n\n两者均使用 embed 包，将前端打包后的文件嵌入到二进制文件中，最终部署时仅需部署该二进制文件。 `with-sqlite` 分支还将 sqlite 数据库嵌入。\n\n早先，前端部分使用 Solid 和 DaisyUI，现在改用 SvelteKit 主要还是因为近期发布了 Svelte 5 这个带有符文（Runes）的版本。并且有神级 UI 库 ShadcnUI 加持，编写前端时会更加舒适。\n\n大致技术栈：\n\n- 前端：[Svelte/Kit](https://kit.svelte.dev) + TypeScript + [TailwindCSS](https://tailwindcss.com) + [ShadcnUI](https://github.com/shadcn-svelte/ui)\n- 后端：Golang + [Fiber](https://github.com/gofiber/fiber) + [GORM](https://gorm.io) + Sqlite3/Postgres/MySQL + Dotenv + Air\n\n最后，技术栈不是固定的，可以使用 Vue/React/Solid 等来替换 Svelte 前端框架，也可以使用 Rust 和 rust-embed 来替换 Golang。\n\n## 功能模块\n\n- 用户管理系统（登录等功能）\n- Todo 待办事项管理（Demo）\n- 静态文件服务（前端打包后的文件）\n- 使用 GORM 作为 ORM 框架\n- 支持多种数据库（Sqlite3/Postgres/MySQL）\n- 使用 JWT 进行身份认证\n- 包含日志中间件和 CSRF 保护\n- 支持优雅关机\n- 使用 embed 包将前端文件嵌入二进制文件\n\n## 项目目录\n\n项目目录也参考 [Go 项目标准布局](https://github.com/golang-standards/project-layout/blob/master/README_zh-CN.md) 进行了些许调整：\n\n```sh\n.\n├── README.md                   # 项目介绍\n├── Dockerfile                  # Dockerfile\n├── deploy.sh                   # 部署脚本\n├── makefile                    # makefile\n├── go.mod                      # go.mod\n├── go.sum                      # go.sum\n├── LICENSE                     # 许可证\n├── apis                        # api 路由\n│   ├── handler                 # 路由处理\n│   │   └── xxx.go              # xxx 路由处理\n│   ├── middleware              # 中间件\n│   │   ├── logs.go             # 日志中间件\n│   │   └── xxx.go              # xxx 中间件\n│   └── router.go               # 路由\n├── cmd                         # 命令\n│   ├── app                     # 程序入口\n│   │   └── main.go             # 程序入口\n│   └── cli                     # 命令行入口\n│       └── main.go             # 命令行入口\n├── config                      # 配置\n│   ├── conf.go                 # 环境配置\n│   └── start.go                # 启动配置\n├── database                    # 数据库\n│   ├── access                  # 数据库连接\n│   │   ├── postgres.go         # pg 数据库连接\n│   │   └── xxx.go              # xxx 数据库连接\n│   └── model                   # 数据库模型\n│       ├── auto_migrate.go     # 自动迁移\n│       └── xxx_model.go        # xxx 模型\n├── internal                    # 内部包\n├── pkg                         # 外部包\n└── svelte                      # 前端\n    ├── frontend.go             # 嵌入前端\n    ├── src                     # 前端源码\n    │   ├── app.css             # app 样式\n    │   ├── app.d.ts            # app 类型\n    │   ├── app.html            # app html\n    │   ├── lib                 # 库\n    │   │   ├── components      # 组件\n    │   │   ├── hooks           # 钩子\n    │   │   ├── index.ts        # 入口\n    │   │   └── utils.ts        # 工具\n    │   └── routes              # 路由\n    │       ├── +layout.svelte  # 布局\n    │       ├── +layout.ts      # 布局\n    │       └── +page.svelte    # 页面\n    ├── static                  # 静态资源\n    ├── package.json            # package.json\n    ├── components.json         # ShadcnUI 组件配置\n    ├── eslint.config.js        # ESLint 配置\n    ├── postcss.config.js       # PostCSS 配置\n    ├── svelte.config.js        # Svelte 配置\n    ├── tailwind.config.ts      # TailwindCSS 配置\n    ├── tsconfig.json           # TypeScript 配置\n    └── vite.config.ts          # Vite 配置\n```\n\n## 食用方法\n\n```sh\n# 1.克隆项目\ngit clone https://github.com/xijaja/gone.git\n\n# 2.进入项目\ncd gone\n\n# 3.复制 .env.dev 为 .env\ncp .env.dev .env\n\n# 4.编译前端（npm / yarn / pnpm）\ncd svelte \u0026\u0026 pnpm install \u0026\u0026 pnpm run build\n\n# 5.启动后端\ncd .. \u0026\u0026 go run ./cmd/app\n\n# 6.构建可执行文件（要记得编译前端）\ngo build -o app ./cmd/app\n\n# 另外，构建不同的平台需要交叉编译\nGOOS=linux GOARCH=amd64 go build -o app ./cmd/app        # linux amd64\nGOOS=linux GOARCH=arm64 go build -o app ./cmd/app        # linux arm64\nGOOS=darwin GOARCH=arm64 go build -o app ./cmd/app       # mac apple silicon\nGOOS=darwin GOARCH=amd64 go build -o app ./cmd/app       # mac intel\nGOOS=windows GOARCH=amd64 go build -o app.exe ./cmd/app  # windows amd64\nGOOS=windows GOARCH=arm64 go build -o app.exe ./cmd/app  # windows arm64\n```\n\n## 部署相关\n\n- 提供 deploy.sh 服务器部署脚本\n- 提供 github actions 用于 fly.io 部署\n- 提供 Dockerfile 容器化部署\n- 提供 makefile 本地开发和容器命令\n\n```sh\n# 查看 makefile 中可用的命令\n❯❯❯ make help\n可用的命令:\n  make pg               - 启动本地的 postgres 数据库\n  make rs               - 启动本地的 redis 数据库\n  make fly              - 部署到 fly.io\n  make frontend         - 构建前端项目\n  make build            - 构建 Docker 镜像\n  make save             - 保存并传输镜像到远程主机\n  make remote-run       - 在远程主机上运行容器\n  make remote-ps        - 查看远程主机上的 Docker 状态\n  make remote-images    - 查看远程主机上的镜像\n  make deploy           - 执行完整的部署流程\n  make clean            - 清理本地镜像\n  make help             - 显示此帮助信息\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxijaja%2Fgone","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxijaja%2Fgone","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxijaja%2Fgone/lists"}