Next.jsReact启动器

tina-self-hosted-template — Next.js 启动器模板

作者 IKKEM-Lin

基于 Next.js 的 TinaCMS 自托管项目模板,支持本地媒体管理、文档搜索以及 local、GitLab、GitHub 三种 Git 提供方,并区分 local、SSR、SSG 三种运行环境。

看看你的网站会是什么样

浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。

3 个预览视图
桌面端首页1 / 3
桌面端截图首屏预览

由服务器浏览器实际访问页面后截取。

全部页面与视图 3

截图用于了解视觉与布局,交互效果请以实际项目为准。

采集于 2026-10-14查看来源

值得关注的模板亮点

从已有项目资料中,快速了解它的特点。

01

基于 Next.js 的 TinaCMS 自托管项目模板

02

支持 local、GitLab、GitHub 三种 Git 提供方

03

支持本地媒体管理器与 Cloudinary 媒体类型

04

支持文档搜索

05

区分 local、SSR、SSG 三种环境

06

数据库可选 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 未提供关于页面功能、性能或生产就绪程度的进一步说明。

Next.js启动器

适合你的项目吗?

适用场景

  • 开发者本地运行 npm run dev 进行开发与 GraphQL 调试
  • 内容编辑者通过 SSR 部署在 /admin/index.html 编辑内容
  • 将内容静态导出为 out 文件夹用于 SSG 部署
  • 使用 Docker 或 npm 脚本部署 SSR 环境
  • 通过环境变量切换 Git 提供方与数据库类型

适合人群

  • 需要自托管 TinaCMS 的 Next.js 项目
  • 希望使用本地、GitLab 或 GitHub 作为内容提交来源的团队
  • 需要在 SSR 与 SSG 之间选择部署方式的内容站点
  • 需要本地媒体管理或 Cloudinary 媒体存储的项目

上手与定制指南

结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。

  1. 1

    开发环境:运行 npm i 与 npm run dev,访问 http://localhost:3000 查看结果。

  2. 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. 3

    SSG 部署:将 GIT_COMMIT_BRANCH 分支合并到 main 分支,确保 .env 存在并修改 NEXTAUTH_SECRET,运行 npm run build:ssg 生成 out 文件夹。

  4. 4

    环境变量仅在 SSR 或 SSG 下生效,需按所选 Git 类型、数据库类型和媒体类型配置对应必填项。

  5. 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 原文

| NEXTAUTH_SECRET | | Required,secret for [tinacms-auth](https://tina.io/docs/reference/self-hosted/auth-provider/authjs) |

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

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

来源文件 / 仓库
[![Deploy with Vercel](https://vercel.com/button)](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&)
&emsp; 
[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](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.
反馈内容错误

看看同类模板

对比同技术栈与用途的模板,找到更适合的视觉与内容结构。