diff --git a/Dockerfile b/Dockerfile index 1282fd86d..aa894ea55 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,11 +16,13 @@ COPY --from=deps /app/node_modules ./node_modules COPY . . COPY docker/middleware.ts ./src +ARG DATABASE_TYPE ARG BASE_PATH +ENV DATABASE_TYPE=$DATABASE_TYPE ENV BASE_PATH=$BASE_PATH + ENV NEXT_TELEMETRY_DISABLED=1 -ENV DATABASE_URL="postgresql://user:pass@localhost:5432/dummy" RUN npm run build-docker diff --git a/README.md b/README.md index 95bb43303..dcc6865fc 100644 --- a/README.md +++ b/README.md @@ -27,10 +27,10 @@ A detailed getting started guide can be found at [umami.is/docs](https://umami.i ### Requirements -- A server with Node.js version 18.18+. -- A PostgreSQL database version v12.14+. +- A server with Node.js version 18.18 or newer +- A database. Umami supports [PostgreSQL](https://www.postgresql.org/) (minimum v12.14) databases. -### Get the source code and install packages +### Get the Source Code and Install Packages ```bash git clone https://github.com/umami-software/umami.git @@ -58,7 +58,7 @@ postgresql://username:mypassword@localhost:5432/mydb pnpm run build ``` -The build step will create tables in your database if you are installing for the first time. It will also create a login user with username **admin** and password **umami**. +_The build step will create tables in your database if you are installing for the first time. It will also create a login user with username **admin** and password **umami**._ ### Start the Application @@ -66,36 +66,37 @@ The build step will create tables in your database if you are installing for the pnpm run start ``` -By default, this will launch the application on `http://localhost:3000`. You will need to either [proxy](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/) requests from your web server or change the [port](https://nextjs.org/docs/api-reference/cli#production) to serve the application directly. +_By default, this will launch the application on `http://localhost:3000`. You will need to either [proxy](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/) requests from your web server or change the [port](https://nextjs.org/docs/api-reference/cli#production) to serve the application directly._ --- ## 🐳 Installing with Docker -Umami provides Docker images as well as a Docker compose file for easy deployment. - -Docker image: - -```bash -docker pull docker.umami.is/umami-software/umami:latest -``` - -Docker compose to run Umami with a Postgres database, run: +To build the Umami container and start up a Postgres database, run: ```bash docker compose up -d ``` +Alternatively, to pull just the Umami Docker image with PostgreSQL support: + +```bash +docker pull docker.umami.is/umami-software/umami:latest +``` + --- ## 🔄 Getting Updates +> [!WARNING] +> If you are updating from Umami V2, image "postgresql-latest" is deprecated. You must change it to "latest". +> e.g., rename `docker.umami.is/umami-software/umami:postgresql-latest` to `docker.umami.is/umami-software/umami:latest`. To get the latest features, simply do a pull, install any new dependencies, and rebuild: ```bash git pull pnpm install -pnpm build +pnpm run build ``` To update the Docker image, simply pull the new images and rebuild: diff --git a/biome.json b/biome.json index 61d094cac..0dec793be 100644 --- a/biome.json +++ b/biome.json @@ -46,14 +46,6 @@ "arrowParentheses": "asNeeded" } }, - "css": { - "formatter": { - "enabled": true, - "indentStyle": "space", - "indentWidth": 2, - "lineEnding": "lf" - } - }, "assist": { "enabled": true, "actions": { diff --git a/package.json b/package.json index 09a691352..e20ae62d0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "umami", - "version": "3.0.2", + "version": "3.0.1", "description": "A modern, privacy-focused alternative to Google Analytics.", "author": "Umami Software, Inc. ", "license": "MIT", diff --git a/src/lib/prisma.ts b/src/lib/prisma.ts index 64cb870fd..06336d3b5 100644 --- a/src/lib/prisma.ts +++ b/src/lib/prisma.ts @@ -303,7 +303,9 @@ function getClient() { const url = process.env.DATABASE_URL; const replicaUrl = process.env.DATABASE_REPLICA_URL; const logQuery = process.env.LOG_QUERY; - const schema = getSchema(); + + const connectionUrl = new URL(url); + const schema = connectionUrl.searchParams.get('schema') ?? undefined; const baseAdapter = new PrismaPg({ connectionString: url }, { schema }); diff --git a/src/queries/sql/reports/getRevenue.ts b/src/queries/sql/reports/getRevenue.ts index ebde8bb1b..fa25078c3 100644 --- a/src/queries/sql/reports/getRevenue.ts +++ b/src/queries/sql/reports/getRevenue.ts @@ -62,7 +62,7 @@ async function relationalQuery( ${joinSessionQuery} where revenue.website_id = {{websiteId::uuid}} and revenue.created_at between {{startDate}} and {{endDate}} - and upper(revenue.currency) = {{currency}} + and revenue.currency = upper({{currency}}) ${filterQuery} group by x, t order by t @@ -83,7 +83,7 @@ async function relationalQuery( ${cohortQuery} where revenue.website_id = {{websiteId::uuid}} and revenue.created_at between {{startDate}} and {{endDate}} - and upper(revenue.currency) = {{currency}} + and revenue.currency = upper({{currency}}) ${filterQuery} group by session.country `, @@ -102,7 +102,7 @@ async function relationalQuery( ${joinSessionQuery} where revenue.website_id = {{websiteId::uuid}} and revenue.created_at between {{startDate}} and {{endDate}} - and upper(revenue.currency) = {{currency}} + and revenue.currency = upper({{currency}}) ${filterQuery} `, queryParams, @@ -154,7 +154,7 @@ async function clickhouseQuery( ${cohortQuery} where website_revenue.website_id = {websiteId:UUID} and website_revenue.created_at between {startDate:DateTime64} and {endDate:DateTime64} - and upper(website_revenue.currency) = {currency:String} + and website_revenue.currency = upper({currency:String}) ${filterQuery} group by x, t order by t @@ -182,7 +182,7 @@ async function clickhouseQuery( ${cohortQuery} where website_revenue.website_id = {websiteId:UUID} and website_revenue.created_at between {startDate:DateTime64} and {endDate:DateTime64} - and upper(website_revenue.currency) = {currency:String} + and website_revenue.currency = upper({currency:String}) ${filterQuery} group by website_event.country order by value desc @@ -205,7 +205,7 @@ async function clickhouseQuery( ${cohortQuery} where website_revenue.website_id = {websiteId:UUID} and website_revenue.created_at between {startDate:DateTime64} and {endDate:DateTime64} - aand upper(website_revenue.currency) = {currency:String} + and website_revenue.currency = upper({currency:String}) ${filterQuery} `, queryParams,