基于 Next.js 的 TinaCMS 自托管项目模板
tina-self-hosted-template — Next.js 启动器模板
作者 IKKEM-Lin
基于 Next.js 的 TinaCMS 自托管项目模板,支持本地媒体管理、文档搜索以及 local、GitLab、GitHub 三种 Git 提供方,并区分 local、SSR、SSG 三种运行环境。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 3
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
支持 local、GitLab、GitHub 三种 Git 提供方
支持本地媒体管理器与 Cloudinary 媒体类型
支持文档搜索
区分 local、SSR、SSG 三种环境
数据库可选 sqlite、mongodb 或 redis
模板详细介绍
该模板是一个基于 Next.js 的 TinaCMS 自托管项目,README 说明其支持本地媒体管理器、文档搜索以及部分 Git 提供方(local、GitLab 和 GitHub)。项目划分三种环境:local 供开发者使用,ssr 供内容编辑者使用,ssg 用于静态导出部署。
开发者可运行 npm i 与 npm run dev 启动开发服务器,并在浏览器中访问 http://localhost:3000 查看结果,访问 http://localhost:3000/admin/index.html#/graphql 进行 GraphQL 调试。SSR 部署可通过 docker-compose up -d 或 npm run build:ssr 后 npm run start 完成,内容编辑入口为 http://localhost:3080/admin/index.html。SSG 部署需先将 GIT_COMMIT_BRANCH 分支合并到 main 分支,确保 .env 存在并修改 NEXTAUTH_SECRET,再运行 npm run build:ssg 生成包含静态文件的 out 文件夹。
环境变量仅在 SSR 或 SSG 下生效,涵盖 Git 提交分支与消息、Git 类型(local/gitlab/github)及其对应凭据、数据库类型(sqlite/mongodb/redis)及其连接参数、媒体类型(localMedia/cloudinary)以及 NEXTAUTH_SECRET。README 未提供关于页面功能、性能或生产就绪程度的进一步说明。
适合你的项目吗?
适用场景
- 开发者本地运行 npm run dev 进行开发与 GraphQL 调试
- 内容编辑者通过 SSR 部署在 /admin/index.html 编辑内容
- 将内容静态导出为 out 文件夹用于 SSG 部署
- 使用 Docker 或 npm 脚本部署 SSR 环境
- 通过环境变量切换 Git 提供方与数据库类型
适合人群
- 需要自托管 TinaCMS 的 Next.js 项目
- 希望使用本地、GitLab 或 GitHub 作为内容提交来源的团队
- 需要在 SSR 与 SSG 之间选择部署方式的内容站点
- 需要本地媒体管理或 Cloudinary 媒体存储的项目
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
开发环境:运行 npm i 与 npm run dev,访问 http://localhost:3000 查看结果。
- 2
SSR 部署:复制 .env.example 为 .env 并修改 NEXTAUTH_SECRET,使用 docker-compose up -d 或 npm run build:ssr 后 npm run start,编辑入口为 http://localhost:3080/admin/index.html。
- 3
SSG 部署:将 GIT_COMMIT_BRANCH 分支合并到 main 分支,确保 .env 存在并修改 NEXTAUTH_SECRET,运行 npm run build:ssg 生成 out 文件夹。
- 4
环境变量仅在 SSR 或 SSG 下生效,需按所选 Git 类型、数据库类型和媒体类型配置对应必填项。
- 5
若遇到 better_sqlite3.node 绑定文件错误,可手动运行 npm run postinstall 重建并复制到项目目录。
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
- 必须设置 GIT_TYPE,可选值为 local、gitlab 或 github,用于指定内容提交所使用的 Git 提供方。
- 当 GIT_TYPE=local 时,必须提供 GIT_LOCAL_COMMITTER_NAME。
- 当 GIT_TYPE=local 时,必须提供 GIT_LOCAL_COMMITTER_EMAIL。
- 当 GIT_TYPE=gitlab 时,必须提供 GITLAB_HOST。
- 当 GIT_TYPE=gitlab 时,必须提供 GITLAB_PROJECT_ID。
- 当 GIT_TYPE=gitlab 时,必须提供 GITLAB_PERSONAL_ACCESS_TOKEN。
- 当 GIT_TYPE=github 时,必须提供 GITHUB_OWNER。
- 当 GIT_TYPE=github 时,必须提供 GITHUB_REPO。
- 当 GIT_TYPE=github 时,必须提供 GITHUB_PERSONAL_ACCESS_TOKEN。
- 必须设置 DATABASE_TYPE,可选 sqlite、mongodb 或 redis。
- 当 DATABASE_TYPE=mongodb 时,必须提供 MONGODB_URI。
- 当 DATABASE_TYPE=redis 时,必须提供 REDIS_URL。
- 必须设置 TINA_PUBLIC_MEDIA_TYPE,可选 localMedia 或 cloudinary。
- 当 TINA_PUBLIC_MEDIA_TYPE=cloudinary 时,必须提供 CLOUDINARY_URL,格式为 cloudinary://<API_KEY>:<API_SECRET>@<CLOUD_NAME>。
- 必须提供 NEXTAUTH_SECRET,用于 tinacms-auth 的密钥。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
| GIT_TYPE | `local` | **Required**, `local`, `gitlab` or `github` |
README 原文
| GIT_LOCAL_COMMITTER_NAME | | **Required**, when `GIT_TYPE=local` |
README 原文
| GIT_LOCAL_COMMITTER_EMAIL | | **Required**, when `GIT_TYPE=local` |
README 原文
| GITLAB_HOST | | **Required**, when `GIT_TYPE=gitlab` |
README 原文
| GITLAB_PROJECT_ID | | **Required**, when `GIT_TYPE=gitlab` |
README 原文
| GITLAB_PERSONAL_ACCESS_TOKEN | | **Required**, when `GIT_TYPE=gitlab` |
README 原文
| GITHUB_OWNER | | **Required**, when `GIT_TYPE=github` |
README 原文
| GITHUB_REPO | | **Required**, when `GIT_TYPE=github` |
README 原文
| GITHUB_PERSONAL_ACCESS_TOKEN | | **Required**, when `GIT_TYPE=github` |
README 原文
| DATABASE_TYPE | `sqlite` | **Required**, `sqlite`, `mongodb` or `redis` |
README 原文
| MONGODB_URI | | **Required** when `DATABASE_TYPE=mongodb` |
README 原文
| REDIS_URL | | **Required** when `DATABASE_TYPE=redis` |
README 原文
| TINA_PUBLIC_MEDIA_TYPE | `localMedia` | **Required**, `localMedia` or `cloudinary` |
README 原文
| CLOUDINARY_URL | | **Required** when `TINA_PUBLIC_MEDIA_TYPE=cloudinary`, format: `cloudinary://<API_KEY>:<API_SECRET>@<CLOUD_NAME>` |
README 原文
https://github.com/IKKEM-Lin/tina-self-hosted-template/blob/main/LICENSEhttps://github.com/IKKEM-Lin/tina-self-hosted-template/blob/main/README.md| NEXTAUTH_SECRET | | Required,secret for [tinacms-auth](https://tina.io/docs/reference/self-hosted/auth-provider/authjs) |
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-14。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 77 / 100
- 技术栈
- Next.js · React
- 网站类型
- 启动器
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2025-05-12
- 截图检查日期
- 2026-10-14
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Next.js。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: codex-user-requested-batch-review-20261015 · 2026-10-15
查看当时使用的来源资料
SHA-256: d9c998986bd182382a6c8f1041246ed719fa546f41e08785d470037e0ef57e97
2026-10-14T07:12:52.048Z
来源文件 / 仓库[](https://vercel.com/new/git/external?repository-url=https://github.com/IKKEM-Lin/tina-self-hosted-template/tree/main&env=GITHUB_PERSONAL_ACCESS_TOKEN,CLOUDINARY_URL,NEXTAUTH_SECRET&envDescription=NEXTAUTH_SECRET%20is%20secret%20for%20tinacms-auth.%20For%20the%20other%20variables%2C%20you%20can&envLink=https://github.com/IKKEM-Lin/tina-self-hosted-template/tree/main/doc/VercelDeploy.md&project-name=tina-self-hosted-template&repository-name=tina-self-hosted-template&stores=%5B%7B%22type%22%3A%22kv%22%7D%5D&)   [](https://render.com/deploy?repo=https%3A%2F%2Fgithub.com%2FIKKEM-Lin%2Ftina-self-hosted-template) This is a [tinacms](https://tina.io/) self-host project base on [next.js](https://nextjs.org/). It supports local media manager, document search and some git provider (local, gitlab and github). ## Overview We have 3 environment in this project: - local: env for developer - ssr: env for content editor - ssg: static export for deploy ## For developer First, run the development server: ```bash npm i npm run dev ``` Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. open [http://localhost:3000/admin/index.html#/graphql](http://localhost:3000/admin/index.html#/graphql) for graphql debug. ## Deploy SSR(Server-side rendering) ```bash cp .env.example .env # Change NEXTAUTH_SECRET in .env file # deploy with docker docker-compose up -d # deploy without docker npm i npm run build:ssr npm run start ``` Open http://localhost:3080/admin/index.html with your browser to edit content. ## Deploy SSG(Static Site Generation) SSG( Static Site Generator ) is feature of Next.js. Follow the steps below to create: 1. Merge latest `GIT_COMMIT_BRANCH` branch into `main` branch 2. Run `cp .env.example .env` if `.env` file not exist in project. Remember to change `NEXTAUTH_SECRET` in .env file 3. Run `npm run build:ssg` and you will get `out` folder which include static file ## Environment variables The variables take effect only when SSR or SSG. | Variable | Default | Description | | ---------------------------- | ------------------------------ | ----------------------------------------------------------------------------------------------------------------- | | GIT_COMMIT_BRANCH | `tina` | The branch for cms commit | | GIT_COMMIT_MESSAGE | `content: Edited with TinaCMS` | Commit message whe cms commit | | GIT_TYPE | `local` | **Required**, `local`, `gitlab` or `github` | | GIT_LOCAL_COMMITTER_NAME | | **Required**, when `GIT_TYPE=local` | | GIT_LOCAL_COMMITTER_EMAIL | | **Required**, when `GIT_TYPE=local` | | GITLAB_HOST | | **Required**, when `GIT_TYPE=gitlab` | | GITLAB_PROJECT_ID | | **Required**, when `GIT_TYPE=gitlab` | | GITLAB_PERSONAL_ACCESS_TOKEN | | **Required**, when `GIT_TYPE=gitlab` | | GITHUB_OWNER | | **Required**, when `GIT_TYPE=github` | | GITHUB_REPO | | **Required**, when `GIT_TYPE=github` | | GITHUB_PERSONAL_ACCESS_TOKEN | | **Required**, when `GIT_TYPE=github` | | DATABASE_TYPE | `sqlite` | **Required**, `sqlite`, `mongodb` or `redis` | | SQLITE_DB_PATH | `sqliteDB/tinacms.db` | Optional | | MONGODB_URI | | **Required** when `DATABASE_TYPE=mongodb` | | MONGODB_COLLECTION_NAME | `tinacms` | Optional when `DATABASE_TYPE=mongodb` | | MONGODB_DB_NAME | `tinacms` | Optional when `DATABASE_TYPE=mongodb` | | REDIS_URL | | **Required** when `DATABASE_TYPE=redis` | | REDIS_NAMESPACE | `tinacms` | Optional when `DATABASE_TYPE=redis` | | REDIS_DEBUG | `false` | Optional | | TINA_PUBLIC_MEDIA_TYPE | `localMedia` | **Required**, `localMedia` or `cloudinary` | | CLOUDINARY_URL | | **Required** when `TINA_PUBLIC_MEDIA_TYPE=cloudinary`, format: `cloudinary://<API_KEY>:<API_SECRET>@<CLOUD_NAME>` | | NEXTAUTH_SECRET | | Required,secret for [tinacms-auth](https://tina.io/docs/reference/self-hosted/auth-provider/authjs) | ## FAQ ### How to resolve "Error: Could not locate the bindings file, better_sqlite3.node" Try to rebuild better_sqlite3 and copy it to project directory. You can run `npm run postinstall` manually.
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

ai-website-cloner-template
Clone any website with one command using AI coding agents
Next.js · 启动器

Next.js SaaS Starter
Next.js SaaS Starter 是 Next.js 官方维护的 SaaS 起点模板,定位介于学习资源和可直接部署的脚手架之间。
Next.js · SaaS

Next.js Commerce
Next.js Commerce 是 Vercel 团队维护的电商启动模板,基于 Next.js App Router 构建,采用服务端渲染、React Server Components、Server Actions …
Next.js · 电商

Next-js-Boilerplate
Next-js-Boilerplate 是一个面向 Next.js 16、Tailwind CSS 4 和 TypeScript 的启动器,核心定位是开发者体验优先。
Next.js · 启动器

tailwind-nextjs-starter-blog
tailwind-nextjs-starter-blog 是一个面向个人技术博客的 Next.js 与 Tailwind CSS 启动模板,其 v2 版本基于 App Router 与 React Server Comp…
Next.js · 博客

next-forge
Production-grade Turborepo template for Next.js apps.
Next.js · 启动器
