帶有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。我會非常感謝!