带有TurborePo管道,Prisma,Postgresql或Sqlite(LiteFS)的混音打字型Monorepo,Docker部署到Fly.io,pnpm,shadcn/ui tailwindcss。
pnpm create remix@latest --init-script --install --template https://github.com/PhilDL/remix-gospel-stack?该存储库有意见:
- 仅打字稿。
- 仅与PNPM软件包管理器兼容以处理MonorePo工作区。
- 使用turborepo管道 +缓存来构建,棉绒,打字和测试monorepo。
git clone [email protected]:PhilDL/remix-gospel-stack.git
cd remix-gospel-stack
pnpm add -w @remix-run/dev
pnpm remix init该堆栈是由TurborePo和PNPM工作区提供动力的面向混音的MonorePo。通过建造Docker容器在Fly.io上包含一个现成的混音应用程序。
该软件包使用pnpm作为首选的软件包管理器来管理工作区。如果将工作空间定义放在package.json文件中,则可能与yarn和npm一起使用,但不能保证。
包含应用程序的apps程序夹
remix-app :eSM中的remix.run应用。remix-vercel :remix.run应用程序,准备部署在Vercel上。nextjs-app :a next.js应用包含示例的packages文件夹
ui :由SHADCN/UI供电的React UI软件包示例。一些示例组件和ShadCN/UI尾风配置导出为后风插件和预设。database :准备在其他软件包或应用程序中使用的Prisma包装器。与TSUP捆绑在一起。可以是postgresql或sqlite // litefs取决于您在安装过程中的选择。business :使用PRISMA database作为依赖关系的示例软件包,并使用诸如示例的存储库模式。internal-nobuild :示例软件包是纯打字条,没有构建步骤。软件包的main入口点是直接的src/index.ts 。 Remix通过自己的构建步骤(带有Esbuild)来处理编译。该软件包还包含带有vitest的单位测试。混音使用tsconfig.json路径来引用该项目及其类型。当您不打算发布软件包时,我会建议使用这些类型的内部软件包。 config-packages :
future : {
unstable_optimizeDeps : true ,
v3_fetcherPersist : true ,
v3_lazyRouteDiscovery : true ,
v3_relativeSplatPath : true ,
v3_throwAbortReason : true ,
v3_singleFetch : true ,
v3_routeConfig : true ,
} ,警告以下所有命令应从monorepo root目录启动
安装依赖项。
pnpm install您还必须复制示例.env.example:
cp .env.example .env
cp .env.example .env.docker启动PostgreSQL Docker容器
pnpm run docker:db注意: NPM脚本将在Docker在后台设置容器时完成。确保Docker已经完成,并且您的容器在继续之前运行。
产生Prisma模式
pnpm run generate运行Prisma迁移到数据库
pnpm run db:migrate:deploy运行第一个构建(通过...选项使用依赖项)
pnpm run build --filter=@remix-gospel-stack/remix-app...简单地运行pnpm run build将构建所有内容,包括NextJS应用程序。
运行Remix Dev Server
pnpm run dev --filter=@remix-gospel-stack/remix-app要在PostgreSQL和SQLITE(LITEFS)之间切换,可以从存储库的根部使用涡轮发电机。
pnpm turbo gen scaffold-database然后按照提示。但是请注意,Prisma迁移链接到特定数据库,因此您必须删除migrations文件夹。
注意:切换到需要另一个软件包(liteFS-js)的sqlite(litefs)之后,您将不得不再次运行
pnpm i --fix-lockfile。您可能还必须再次运行pnpm run setup才能生成第一个迁移。
turbo gen workspace --name @remix-gospel-stack/foobarbaz --type package --copy然后按照提示
检查turbo.json文件以查看可用管道。
pnpm run test:e2e:dev --filter=@remix-gospel-stack/remix-apppnpm run lintpnpm run typecheckpnpm run test
or
pnpm run test:devpnpm add dayjs --filter @remix-gospel-stack/remix-appconfig-package文件夹中的tsconfigs,eslint配置。然后,任何软件包或应用程序都将从这些配置扩展。 警告以下所有命令应从monorepo root目录启动
在第一次部署之前,您需要做一些事情:
首先唱歌的苍蝇CLI
fly auth signup创建两个应用程序,一个应用程序,一个用于登台,一个用于生产:
fly apps create remix-gospel-stack
fly apps create remix-gospel-stack-staging注意:成功创建了一个应用程序后,请仔细检查
fly.toml文件,以确保app键是您创建的生产应用程序的名称。此堆栈自动在INIT上附加了独特的后缀,该后缀可能与您在飞行中创建的应用程序不匹配。如果您有此不匹配,则可能会在github操作中看到404个错误。
初始化git。
git init创建一个新的GitHub存储库,然后将其添加为项目的遥控器。不要推动您的应用!
git remote add origin < ORIGIN_URL >将FLY_API_TOKEN添加到您的github存储库中。为此,请访问您的用户设置,然后创建一个新的令牌,然后将其添加到您的回购秘密中,名称为FLY_API_TOKEN 。
为您的分期和生产环境创建数据库:
数据库创建:
fly postgres create --name remix-gospel-stack-db
fly postgres attach --app remix-gospel-stack remix-gospel-stack-db
fly postgres create --name remix-gospel-stack-staging-db
fly postgres attach --app remix-gospel-stack-staging remix-gospel-stack-staging-db注意:在附加登台数据库时
fly set secret您将获得相同的警告。不用担心。继续!
Fly将为您设置DATABASE_URL秘密。
警告以下所有命令应从monorepo root目录启动
在第一次部署之前,您需要做一些事情:
首先唱歌的苍蝇CLI
fly auth signup创建两个应用程序,一个应用程序,一个用于登台,一个用于生产:
fly apps create remix-gospel-stack
fly apps create remix-gospel-stack-staging注意:成功创建了一个应用程序后,请仔细检查
fly.toml文件,以确保app键是您创建的生产应用程序的名称。此堆栈自动在INIT上附加了独特的后缀,该后缀可能与您在飞行中创建的应用程序不匹配。如果您有此不匹配,则可能会在github操作中看到404个错误。
初始化git。
git init创建一个新的GitHub存储库,然后将其添加为项目的遥控器。不要推动您的应用!
git remote add origin < ORIGIN_URL >将FLY_API_TOKEN添加到您的github存储库中。为此,请访问您的用户设置,然后创建一个新的令牌,然后将其添加到您的回购秘密中,名称为FLY_API_TOKEN 。
为SQLite数据库创建一个持续的卷,以用于您的分期和生产环境。运行以下(随意根据您的需求和选择的区域更改GB大小(https://fly.io/docs/reference/regions/)。
fly volumes create data --region cdg --size 1 --app remix-gospel-stack
fly volumes create data --region cdg --size 1 --app remix-gospel-stack-staging然后将卷附加到应用程序:
fly consul attach --app remix-gospel-stack
fly consul attach --app remix-gospel-stack-staging现在,所有设置了所有设置,您可以提交并将更改推向存储库。对您的main分支机构的每一个承诺都会触发您的生产环境的部署,而对dev部门的每项提交都会触发您的分期环境的部署。
如果您遇到部署飞行的任何问题,请确保您遵循上面的所有步骤,如果有的话,请向Fly Support Support Sovidence发布有关部署(包括您的应用程序名称)的许多详细信息。他们通常在那儿反应迅速,希望可以帮助解决您的任何部署问题和问题。
在单个区域中运行网站和数据库后,您可以通过遵循Fly的缩放和多区域PostgreSQL文档添加更多区域。
确保为您的应用程序设置PRIMARY_REGION环境变量。您可以在fly.toml中使用[env] config将其设置为要用作应用程序和数据库的主要区域的区域。
安装Modheader浏览器扩展程序(或类似的内容),并使用它将应用程序加载到您要测试的fly-prefer-region名称中。
您可以在响应中检查x-fly-region标头,以了解您的请求由哪个区域。
我们使用GitHub操作进行连续集成和部署。运行测试/构建/等之后,进入main分支的任何内容都将部署到生产中。 dev分支中的任何内容都将部署到分期。
docker network create app_network
pnpm docker:build:remix-apppnpm docker:run:remix-appDOCKER_DEFAULT_PLATFORM=linux/amd64 flyctl deploy --config ./apps/remix-app/fly.toml --dockerfile ./apps/remix-app/Dockerfile了解有关TurborePo的力量的更多信息:
如果您发现模板有用,请考虑给它星星。感谢您!
我绝不是Monorepo,Docker或CI的专家。这里提出的设置是许多人之一,可能可以改善10倍,但是我一路上自己学习,因此,如果您看到任何可能的改进,请提交PR。我会非常感谢!