diff --git a/dockerfile b/dockerfile index 891b03d5b..826113361 100644 --- a/dockerfile +++ b/dockerfile @@ -2,13 +2,6 @@ FROM node:14-buster-slim AS build WORKDIR /app -# split the sqlite install here, so that it can caches the arm prebuilt -# do not modify it, since we don't want to re-compile the arm prebuilt again -RUN apt update && \ - apt --yes install python3 python3-pip python3-dev git g++ make && \ - ln -s /usr/bin/python3 /usr/bin/python && \ - npm install mapbox/node-sqlite3#593c9d --build-from-source - COPY . . RUN npm install --legacy-peer-deps && \ npm run build && \ @@ -16,7 +9,7 @@ RUN npm install --legacy-peer-deps && \ chmod +x /app/extra/entrypoint.sh -FROM node:14-bullseye-slim AS release +FROM node:14-buster-slim AS release WORKDIR /app # Install Apprise, add sqlite3 cli for debugging in the future, iputils-ping for ping, util-linux for setpriv diff --git a/dockerfile-alpine b/dockerfile-alpine index 5e34d84a8..f30da5b05 100644 --- a/dockerfile-alpine +++ b/dockerfile-alpine @@ -2,13 +2,6 @@ FROM node:14-alpine3.12 AS build WORKDIR /app -# split the sqlite install here, so that it can caches the arm prebuilt -RUN apk add --no-cache --virtual .build-deps make g++ python3 python3-dev git && \ - ln -s /usr/bin/python3 /usr/bin/python && \ - npm install mapbox/node-sqlite3#593c9d && \ - apk del .build-deps && \ - rm -f /usr/bin/python - COPY . . RUN npm install --legacy-peer-deps && \ npm run build && \ diff --git a/package.json b/package.json index 5d7d7d423..9468414b6 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,8 @@ "node": "14.*" }, "scripts": { - "install-legacy-peer-deps": "npm install --legacy-peer-deps", - "update-legacy-peer-deps": "npm update --legacy-peer-deps", + "install-legacy": "npm install --legacy-peer-deps", + "update-legacy": "npm update --legacy-peer-deps", "lint:js": "eslint --ext \".js,.vue\" --ignore-path .gitignore .", "lint:style": "stylelint \"**/*.{vue,css,scss}\" --ignore-path .gitignore", "lint": "npm run lint:js && npm run lint:style", @@ -24,6 +24,7 @@ "build-docker-alpine": "docker buildx build -f dockerfile-alpine --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:alpine -t louislam/uptime-kuma:1-alpine -t louislam/uptime-kuma:1.6.0-alpine --target release . --push", "build-docker-debian": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 -t louislam/uptime-kuma:1.6.0 -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:1.6.0-debian --target release . --push", "build-docker-nightly": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly --target nightly . --push", + "build-docker-nightly-alpine": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly-alpine --target nightly . --push", "build-docker-nightly-amd64": "docker buildx build --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain", "setup": "git checkout 1.6.0 && npm install --legacy-peer-deps && node node_modules/esbuild/install.js && npm run build && npm prune", "update-version": "node extra/update-version.js", @@ -44,6 +45,7 @@ "@fortawesome/free-regular-svg-icons": "^5.15.4", "@fortawesome/free-solid-svg-icons": "^5.15.4", "@fortawesome/vue-fontawesome": "^3.0.0-4", + "@louislam/sqlite3": "^5.0.5", "@popperjs/core": "^2.10.1", "args-parser": "^1.3.0", "axios": "^0.21.4", @@ -68,7 +70,6 @@ "redbean-node": "0.1.2", "socket.io": "^4.2.0", "socket.io-client": "^4.2.0", - "sqlite3": "github:mapbox/node-sqlite3#593c9d", "tcp-ping": "^0.1.1", "thirty-two": "^1.0.2", "timezones-list": "^3.0.1", diff --git a/server/database.js b/server/database.js index 7f3f461a1..a42479469 100644 --- a/server/database.js +++ b/server/database.js @@ -3,6 +3,7 @@ const { R } = require("redbean-node"); const { setSetting, setting } = require("./util-server"); const { debug, sleep } = require("../src/util"); const dayjs = require("dayjs"); +const knex = require("knex"); class Database { @@ -57,18 +58,27 @@ class Database { static async connect() { const acquireConnectionTimeout = 120 * 1000; - R.setup("sqlite", { - filename: Database.path, + const Dialect = require("knex/lib/dialects/sqlite3/index.js"); + Dialect.prototype._driver = () => require("@louislam/sqlite3"); + + const knexInstance = knex({ + client: Dialect, + connection: { + filename: Database.path, + acquireConnectionTimeout: acquireConnectionTimeout, + }, useNullAsDefault: true, - acquireConnectionTimeout: acquireConnectionTimeout, - }, { - min: 1, - max: 1, - idleTimeoutMillis: 120 * 1000, - propagateCreateError: false, - acquireTimeoutMillis: acquireConnectionTimeout, + pool: { + min: 1, + max: 1, + idleTimeoutMillis: 120 * 1000, + propagateCreateError: false, + acquireTimeoutMillis: acquireConnectionTimeout, + } }); + R.setup(knexInstance); + if (process.env.SQL_LOG === "1") { R.debug(true); } @@ -84,6 +94,7 @@ class Database { console.log("SQLite config:"); console.log(await R.getAll("PRAGMA journal_mode")); console.log(await R.getAll("PRAGMA cache_size")); + console.log("SQLite Version: " + await R.getCell("SELECT sqlite_version()")); } static async patch() {