TheIndex的前端,编辑面板和API。
最简单的方法是开始使用Docker Compose。您需要从github复制docker-compose.yml和example.env文件。重example.env为.env并根据需要调整环境变量。使用以下命令:
docker-compose up -d您需要将<host-port>更改为您选择的端口。网络服务器不通过SSL/TLS确保,您有责任将反向代理放在此容器面前。当您第一次运行图像时,请不要忘记将自己的Discord-ID设置在Env SETUP_WHITELIST_DISCORD_ID中以登录和编辑。容器设置一次后,您可以从设置中删除ENV变量。
我们将MongoDB用作数据库服务器。您可以通过例如:
注意:数据库将开始空,您必须自己填写数据。
docker run -d
--name mongo
-v ./db:/data/db
mongo为了开发或测试目的,强烈建议使用Mongo-Exppress访问,查看和编辑数据库的当前状态。如果您可以公开访问它,请不要忘记使用登录凭据确保它。
要简单地旋转蒙古表达码头容器,请运行:
docker run -d
--name mongo-express
-p 8081:8081
mongo-express您还可以查看我们提供的docker-compose文件,以进行设置。
为了提高性能,我们使用REDIS缓存MongoDB结果。缓存在缓存可能中被自动填充。
您可以通过运行使用Docker创建一个新实例:
docker run -d
--name redis
redis REDIS DB已经包含在示例docker-compose文件中
警告:请注意,我们没有提供任何官方支持,并且每次更新都可能随着破裂的变化而提供。在更新之前,请务必进行备份
要获取最新版本的容器映像,您需要运行:
docker pull ghcr.io/snaacky/theindex:latest之后,您需要停止并删除当前的运行实例并重新启动。
这是可能的环境变量的集合,其默认值应在.env文件中设置:
| 范围 | 功能 | 默认 |
|---|---|---|
NEXT_PUBLIC_SITE_NAME | 您网站的名称 | "The Index" |
NEXT_PUBLIC_DOMAIN | 您的域或IP,删除后斜线 | "https://theindex.moe" |
DATABASE_URL | 看看MongoDB文档 | "mongodb://mongo:27017/index" |
CACHE_URL | REDIS缓存数据库的连接字符串 | "redis://redis:6379" |
CHROME_URL | WebSocket URL到运行的Chrome实例 | "ws://chrome:3300" |
AUDIT_WEBHOOK | webhook-url用于审核log,空白以禁用支持 | "" |
AUTH_DISCORD_ID | Discord OAuth2客户端ID | "your_discord_oauth_client_id" |
AUTH_DISCORD_SECRET | Discord Oauth2客户秘密 | "your_discord_oauth_client_secret" |
DISCORD_BOT_TOKEN | 需要访问机器人资源 | "your_discord_bot_token" |
SETUP_WHITELIST_DISCORD_ID | 如果您需要帮助获得ID,请查看本指南 | "your_discord_id" |
并且仅在您处于开发模式并调试数据库时才需要以下ENV变量
| 范围 | 功能 | 默认 |
|---|---|---|
ME_CONFIG_BASICAUTH_USERNAME | Mongo-express用户名 | “行政” |
ME_CONFIG_BASICAUTH_PASSWORD | Mongo-Express密码 | “ super_secret” |
如果要验证docker-compose文件如何填充Envs,请使用docker-compose config
入门并不是直接的。您需要在计算机上安装了带有Docker-Compose的最新版本的Docker。
首先通过图形Git客户端(强烈建议)克隆回购或通过CLI通过
git clone https://github.com/snaacky/theindexexample.env文件复制到.env 。NEXT_PUBLIC_DOMAIN和NEXTAUTH_URL http://localhost:3000NEXTAUTH_SECRET 。您可以使用发电机,例如1Password或自己创建它。DATABASE_URL , CACHE_URL和CHROME_URL使用Localhost代替mongo , redis和chrome : mongodb://mongo:27017 > fost mongodb://localhost:27017https://discord.com/developers >创建一个新应用程序 - >进入应用程序面板内的Auth2 >将CLIENT ID和CLIENT SECRET复制到.env文件中。Auth2 Redirects中的重定向并粘贴以下URL中,需要验证您的Discord登录http://localhost:3000/api/auth/callback/discord 。SETUP_WHITELIST_DISCORD_ID填充您的Discord ID以具有管理帐户。MEILI_MASTER_KEY 。您可以使用发电机,例如1Password或自己创建它。docker-compose文件中的图像:| 服务 | 端口映射 |
|---|---|
mongo | 27017:27017 |
redis | 6379:6379 |
meili | 7700:7700 |
chrome | 3300:3000 |
例如, mongo的设置应该看起来与此相似:
mongo :
image : mongo
container_name : index-db
restart : unless-stopped
ports :
- ' 27017:27017 '
volumes :
- ./db:/data/dbdocker-compose up -d mongo redis meili chrome mongo-express另外,您也可以只评论或删除索引服务并运行命令
docker-compose up -d要开始在前端进行编码,您需要确保正确安装了最新版本的node.js。安装所有必需的依赖项一次运行:
bun install注意:我们决定坚持使用NPM而不是纱线来管理依赖关系。
现在,您应该有一个称为node_modules的文件夹,其中包含我们需要的所有依赖项。我们将Next.js用作我们的React Web服务的框架。要测试Web服务,您将必须在后台运行DB服务器,并通过以下方式启动前端:
bun run dev编译后,您可以在选择的浏览器中打开http:// localhost:3000,并查看运行的Web应用程序。
当我们使用next.js时,前端支持热装加载,因此您可以在修改代码时将页面打开,并在浏览器中即时查看更改。
要创建现成的Docker映像,只需运行:
docker build . -t index现在,您拥有带有标签index的本地映像,其中包含可分发版本的代码,现在可以运行。
我们使用更漂亮的人来确保所有参与者的一致代码样式。您可以简单地使用EG运行命令自动自动化所有内容
bunx prettier --write . 在可能的情况下,我们使用ISR预先生成所有可公开访问的页面,以通过CDN或代理来缓存,同时使用SWR验证和获取新数据,请求我们自己的API。
我们在端点/api上提供每个API请求,可以在页面 /API上查看相应的代码。
/api/auth用于nextAuth.js。/api/edit/...需要登录的用户,通常(至少)(至少)编辑器权限,并且用于修改或创建新内容。 _id关键字_new保留用于创建新内容。/api/delete/...需要登录的用户,通常(至少)(至少)编辑器权限,并且用于删除内容。/api/[content]s是获取特定内容的所有项目列表的公共端点。/api/[content]/...是获取有关特定内容信息的公共端点。每个页面请求首先必须通过_app.ts,在应用基本布局,如果页面具有auth属性,它还验证了用户是否可以访问给定页面。有效的auth属性是:
auth本身为null或typeof auth === "undefined" ,无限制。这似乎是一个公共页面。requireLogin ,不是真正需要的,而是出于逻辑原因进行设置。用户必须登录。requireAdmin ,只有具有管理员权利的用户才能访问此页面。requireEditor ,只有编辑器才能查看此页面。 始终欢迎拉起重新要求,但可能并非总是合并,因为它必须与我们的索引构想保持一致。如果您想要某个功能或有想法,可以始终在问题中打开功能请求,或在我们的#index中的不和谐中报告。如果还不错,就与我们的想法保持一致,我们找到了一些时间,我们一定会实现您的请求功能(某个时候...)。
最重要的是:
我们很棒的社区的帮助:3
Editor - 视图func(_id, dataObject)的格式,并且仅根据需要进行更新,GraphQl将是不错的...add , remove API,而不必将整个数组发送到更新列表 - > GraphQL?