mirror of
https://github.com/umami-software/umami.git
synced 2026-02-19 12:05:41 +01:00
feat: use opennextjs to deploy on cloudflare workers
This commit is contained in:
parent
777515f754
commit
6ab1a9b724
10 changed files with 4214 additions and 3 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -11,6 +11,7 @@ node_modules
|
||||||
|
|
||||||
# next.js
|
# next.js
|
||||||
/.next/
|
/.next/
|
||||||
|
/.open-next/
|
||||||
/out/
|
/out/
|
||||||
/prisma/
|
/prisma/
|
||||||
/src/generated/
|
/src/generated/
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
generator client {
|
generator client {
|
||||||
provider = "prisma-client-js"
|
provider = "prisma-client-js"
|
||||||
|
previewFeatures = ["driverAdapters"]
|
||||||
}
|
}
|
||||||
|
|
||||||
datasource db {
|
datasource db {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
generator client {
|
generator client {
|
||||||
provider = "prisma-client-js"
|
provider = "prisma-client-js"
|
||||||
|
previewFeatures = ["driverAdapters"]
|
||||||
}
|
}
|
||||||
|
|
||||||
datasource db {
|
datasource db {
|
||||||
|
|
|
||||||
|
|
@ -179,6 +179,7 @@ if (cloudMode && cloudUrl) {
|
||||||
/** @type {import('next').NextConfig} */
|
/** @type {import('next').NextConfig} */
|
||||||
export default {
|
export default {
|
||||||
reactStrictMode: false,
|
reactStrictMode: false,
|
||||||
|
serverExternalPackages: ['@prisma/client', '.prisma/client'],
|
||||||
env: {
|
env: {
|
||||||
basePath,
|
basePath,
|
||||||
cloudMode,
|
cloudMode,
|
||||||
|
|
|
||||||
3
open-next.config.ts
Normal file
3
open-next.config.ts
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
import { defineCloudflareConfig } from '@opennextjs/cloudflare';
|
||||||
|
|
||||||
|
export default defineCloudflareConfig({});
|
||||||
|
|
@ -47,7 +47,11 @@
|
||||||
"postbuild": "node scripts/postbuild.js",
|
"postbuild": "node scripts/postbuild.js",
|
||||||
"test": "jest",
|
"test": "jest",
|
||||||
"cypress-open": "cypress open cypress run",
|
"cypress-open": "cypress open cypress run",
|
||||||
"cypress-run": "cypress run cypress run"
|
"cypress-run": "cypress run cypress run",
|
||||||
|
"cloudflare:build": "opennextjs-cloudflare build",
|
||||||
|
"cloudflare:preview": "opennextjs-cloudflare preview",
|
||||||
|
"cloudflare:deploy": "opennextjs-cloudflare deploy",
|
||||||
|
"cf-typegen": "wrangler types --env-interface CloudflareEnv cloudflare-env.d.ts"
|
||||||
},
|
},
|
||||||
"lint-staged": {
|
"lint-staged": {
|
||||||
"**/*.{js,jsx,ts,tsx}": [
|
"**/*.{js,jsx,ts,tsx}": [
|
||||||
|
|
@ -72,6 +76,8 @@
|
||||||
"@dicebear/core": "^9.2.1",
|
"@dicebear/core": "^9.2.1",
|
||||||
"@fontsource/inter": "^4.5.15",
|
"@fontsource/inter": "^4.5.15",
|
||||||
"@hello-pangea/dnd": "^17.0.0",
|
"@hello-pangea/dnd": "^17.0.0",
|
||||||
|
"@opennextjs/cloudflare": "^1.11.0",
|
||||||
|
"@prisma/adapter-pg": "^6.17.1",
|
||||||
"@prisma/client": "6.7.0",
|
"@prisma/client": "6.7.0",
|
||||||
"@prisma/extension-read-replicas": "^0.4.1",
|
"@prisma/extension-read-replicas": "^0.4.1",
|
||||||
"@react-spring/web": "^9.7.3",
|
"@react-spring/web": "^9.7.3",
|
||||||
|
|
|
||||||
4149
pnpm-lock.yaml
generated
4149
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load diff
2
public/_headers
Normal file
2
public/_headers
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
/_next/static/*
|
||||||
|
Cache-Control: public,max-age=31536000,immutable
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
import debug from 'debug';
|
import debug from 'debug';
|
||||||
|
import { getCloudflareContext } from '@opennextjs/cloudflare';
|
||||||
|
import { PrismaPg } from '@prisma/adapter-pg';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import { PrismaClient } from '@prisma/client';
|
||||||
import { readReplicas } from '@prisma/extension-read-replicas';
|
import { readReplicas } from '@prisma/extension-read-replicas';
|
||||||
import { formatInTimeZone } from 'date-fns-tz';
|
import { formatInTimeZone } from 'date-fns-tz';
|
||||||
|
|
@ -409,6 +411,25 @@ function getClient(params?: {
|
||||||
options,
|
options,
|
||||||
} = params || {};
|
} = params || {};
|
||||||
|
|
||||||
|
if (navigator.userAgent === 'Cloudflare-Workers') {
|
||||||
|
return new Proxy({} as PrismaClient, {
|
||||||
|
get: (target, prop, receiver) => {
|
||||||
|
const adapter = new PrismaPg({
|
||||||
|
connectionString:
|
||||||
|
getCloudflareContext()?.env?.HYPERDRIVE?.connectionString ?? process.env.DATABASE_URL,
|
||||||
|
maxUses: 1,
|
||||||
|
});
|
||||||
|
const prisma = new PrismaClient({
|
||||||
|
errorFormat: 'pretty',
|
||||||
|
adapter,
|
||||||
|
...(logQuery && PRISMA_LOG_OPTIONS),
|
||||||
|
...options,
|
||||||
|
});
|
||||||
|
return Reflect.get(prisma, prop, receiver);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const prisma = new PrismaClient({
|
const prisma = new PrismaClient({
|
||||||
errorFormat: 'pretty',
|
errorFormat: 'pretty',
|
||||||
...(logQuery && PRISMA_LOG_OPTIONS),
|
...(logQuery && PRISMA_LOG_OPTIONS),
|
||||||
|
|
|
||||||
30
wrangler.toml
Normal file
30
wrangler.toml
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
# To deploy on Cloudflare Workers, please follow these two steps
|
||||||
|
#
|
||||||
|
# 1. Build the Application: pnpm run cloudflare:build
|
||||||
|
# 2. Deploy the Application: pnpm run cloudflare:deploy
|
||||||
|
#
|
||||||
|
# You need add `DATABASE_URL` variable in build environment and runtime environment.
|
||||||
|
#
|
||||||
|
# When use Hyperdrive, you don't need to add the `DATABASE_URL` variable in the runtime environment.
|
||||||
|
main = ".open-next/worker.js"
|
||||||
|
name = "umami"
|
||||||
|
compatibility_date = "2025-09-15"
|
||||||
|
compatibility_flags = ["nodejs_compat", "global_fetch_strictly_public"]
|
||||||
|
workers_dev = false
|
||||||
|
|
||||||
|
[observability]
|
||||||
|
enabled = true
|
||||||
|
|
||||||
|
[assets]
|
||||||
|
directory = ".open-next/assets"
|
||||||
|
binding = "ASSETS"
|
||||||
|
|
||||||
|
[[services]]
|
||||||
|
binding = "WORKER_SELF_REFERENCE"
|
||||||
|
service = "umami"
|
||||||
|
|
||||||
|
# Advanced users can enable hyperdrive to optimize database connection latency.
|
||||||
|
# For usage, please refer to https://developers.cloudflare.com/hyperdrive/get-started/.
|
||||||
|
# [[hyperdrive]]
|
||||||
|
# binding = "HYPERDRIVE"
|
||||||
|
# id = ""
|
||||||
Loading…
Add table
Add a link
Reference in a new issue