From 7d07c1306c35b40db5897809176794bc7d50f676 Mon Sep 17 00:00:00 2001 From: Phil Date: Fri, 5 Apr 2024 03:08:07 +0200 Subject: [PATCH 1/8] add - docker files --- .dockerignore | 4 ++++ Dockerfile | 17 +++++++++++++++++ docker-compose.yml | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..69f07f2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +node_modules/ +.env +src/miscellaneous/migratenicknames.js +test.js diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f645f90 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +# get node +FROM node:18.5.0-buster-slim + +# Create app directory +WORKDIR /usr/src/app + +# Get app dependencies +COPY package*.json ./ + +# building app +RUN npm i --omit=dev --verbose + +# Bundle app source +COPY . . + +# start up command for bot +CMD [ "npm", "start" ] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..ce0569b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,46 @@ +# Use .env. Only edit this, if you know your stuff. +services: + app: + build: + context: ./ + restart: always + env_file: + - .env + depends_on: + - cache + - db + - setup + environment: + REDIS_HOST: cache + POSTGRES_HOST: db + POSTGRES_USER: ${POSTGRES_DB} + + setup: + build: + context: . + command: "npm run setupdb" + environment: + POSTGRES_USER: ${POSTGRES_DB} + POSTGRES_PASSWORD: + POSTGRES_HOST: db + POSTGRES_DB: + + cache: + image: redis:6.2-alpine + restart: always + command: redis-server --save 20 1 --loglevel warning + volumes: + - cache:/data + + db: + image: postgres:16-alpine + restart: always + volumes: + - db:/var/lib/postgresql/data + environment: + POSTGRES_PASSWORD: + POSTGRES_USER: + +volumes: + db: + cache: From 8a53b0fbd3ac7ba3d9cc1b3adc3e797c13018687 Mon Sep 17 00:00:00 2001 From: Phil Date: Fri, 5 Apr 2024 03:10:10 +0200 Subject: [PATCH 2/8] update - renamed env names --- .env.example | 8 ++++---- src/db/clients/postgres.js | 10 +++++----- src/miscellaneous/generateDB.js | 18 +++++++++--------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.env.example b/.env.example index 4219000..9e889f2 100644 --- a/.env.example +++ b/.env.example @@ -4,10 +4,10 @@ GLOBAL_BOT_PREFIX=v3 CREATOR_IDS=212445217763229699 MESSAGE_BATCH_SIZE=10 PASTE_CREATE_ENDPOINT=host your own haste-server instance to get this -PGUSER=postgresusername -PGPASSWORD=postgrespassword -PGHOST=localhost -PGDATABASE=logger +POSTGRES_USER=postgresusername # will be ignored on Docker +POSTGRES_PASSWORD=postgrespassword +POSTGRES_HOST=localhost # will be ignored on Docker +POSTGRES_DB=logger REDIS_LOCK_TTL=2000 AES_KEY=youraeskey MESSAGE_HISTORY_DAYS=how many days as an int you want to be wiped from db diff --git a/src/db/clients/postgres.js b/src/db/clients/postgres.js index 0167694..685279f 100644 --- a/src/db/clients/postgres.js +++ b/src/db/clients/postgres.js @@ -2,11 +2,11 @@ const { Client, Pool } = require('pg') // PREREQUISITE: Have postgres installed require('dotenv').config() const pool = new Pool({ - user: process.env.PGUSER, - host: process.env.PGHOST, - database: process.env.PGDATABASE, - password: process.env.PGPASSWORD, - port: process.env.PGPORT || 5432, + user: process.env.POSTGRES_USER, + host: process.env.POSTGRES_HOST, + database: process.env.POSTGRES_DB, + password: process.env.POSTGRES_PASSWORD, + port: process.env.POSTGRES_PORT || 5432, max: 5 // 5 clients each, god help us all if this isn't sufficient }) diff --git a/src/miscellaneous/generateDB.js b/src/miscellaneous/generateDB.js index da00a94..f398903 100644 --- a/src/miscellaneous/generateDB.js +++ b/src/miscellaneous/generateDB.js @@ -3,10 +3,10 @@ const { Pool } = require('pg') require('dotenv').config() const pool = new Pool({ - user: process.env.PGUSER, // Make sure PGUSER is a superuser - host: process.env.PGHOST, + user: process.env.POSTGRES_USER, // Make sure POSTGRES_USER is a superuser + host: process.env.POSTGRES_HOST, database: 'template1', // Should exist in all postgres databases by default - password: process.env.PGPASSWORD, + password: process.env.POSTGRES_PASSWORD, port: 5432 }) @@ -14,13 +14,13 @@ pool.on('error', e => { console.error('There was an error while generating the database structure!', e) }) -async function generate () { - await pool.query('CREATE DATABASE logger') // create db +async function generate() { + await pool.query(`CREATE DATABASE ${process.env.POSTGRES_DB}`) // create db const loggerDB = new Pool({ - user: process.env.PGUSER, - host: process.env.PGHOST, - database: 'logger', - password: process.env.PGPASSWORD, + user: process.env.POSTGRES_USER, + host: process.env.POSTGRES_HOST, + database: process.env.POSTGRES_DB, + password: process.env.POSTGRES_PASSWORD, port: 5432 }) await loggerDB.query('CREATE TABLE messages ( id TEXT PRIMARY KEY, author_id TEXT NOT NULL, content TEXT, attachment_b64 TEXT, ts TIMESTAMPTZ )') // establish messages table From 8131ef0b41602147082c37eaf2da3351fe4451d6 Mon Sep 17 00:00:00 2001 From: Phil Date: Fri, 5 Apr 2024 03:10:21 +0200 Subject: [PATCH 3/8] add - startup and setup commands --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 2a90477..e2155c7 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,9 @@ "main": "index.js", "scripts": { "test": "standard", - "lint": "node_modules/.bin/eslint . --ext .js" + "lint": "node_modules/.bin/eslint . --ext .js", + "start": "node index.js", + "setupdb": "node src/miscellaneous/generateDB.js" }, "keywords": [ "logging", From 5c61ce17cff594590f8d76a0abb4b0fe14f0ada4 Mon Sep 17 00:00:00 2001 From: Phil Date: Fri, 5 Apr 2024 03:17:32 +0200 Subject: [PATCH 4/8] add - depend on --- docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index ce0569b..56f86f3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,6 +19,8 @@ services: build: context: . command: "npm run setupdb" + depends_on: + - db environment: POSTGRES_USER: ${POSTGRES_DB} POSTGRES_PASSWORD: From d53e5b8e9592c11568143655f24157a8b92d18bc Mon Sep 17 00:00:00 2001 From: Phil Date: Fri, 5 Apr 2024 03:24:35 +0200 Subject: [PATCH 5/8] add - restart policy --- docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yml b/docker-compose.yml index 56f86f3..9d400a0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,6 +19,7 @@ services: build: context: . command: "npm run setupdb" + restart: on-failure depends_on: - db environment: From 890655765c531f2dd143a8c484be895fc7e04bc8 Mon Sep 17 00:00:00 2001 From: Phil Date: Fri, 5 Apr 2024 03:24:57 +0200 Subject: [PATCH 6/8] update - check if in docker --- docker-compose.yml | 1 + src/miscellaneous/generateDB.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 9d400a0..0aa367c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,6 +23,7 @@ services: depends_on: - db environment: + DOCKER: true POSTGRES_USER: ${POSTGRES_DB} POSTGRES_PASSWORD: POSTGRES_HOST: db diff --git a/src/miscellaneous/generateDB.js b/src/miscellaneous/generateDB.js index f398903..c09540d 100644 --- a/src/miscellaneous/generateDB.js +++ b/src/miscellaneous/generateDB.js @@ -15,7 +15,7 @@ pool.on('error', e => { }) async function generate() { - await pool.query(`CREATE DATABASE ${process.env.POSTGRES_DB}`) // create db + if (!process.env.DOCKER) await pool.query(`CREATE DATABASE ${process.env.POSTGRES_DB}`) // create db const loggerDB = new Pool({ user: process.env.POSTGRES_USER, host: process.env.POSTGRES_HOST, From cebda5727b368150d4096f6ac7b305247a2a0158 Mon Sep 17 00:00:00 2001 From: Phil Date: Fri, 5 Apr 2024 03:28:47 +0200 Subject: [PATCH 7/8] update - use IF NOT EXISTS statements --- docker-compose.yml | 1 - src/miscellaneous/generateDB.js | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 0aa367c..9d400a0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,7 +23,6 @@ services: depends_on: - db environment: - DOCKER: true POSTGRES_USER: ${POSTGRES_DB} POSTGRES_PASSWORD: POSTGRES_HOST: db diff --git a/src/miscellaneous/generateDB.js b/src/miscellaneous/generateDB.js index c09540d..e1b355b 100644 --- a/src/miscellaneous/generateDB.js +++ b/src/miscellaneous/generateDB.js @@ -15,7 +15,7 @@ pool.on('error', e => { }) async function generate() { - if (!process.env.DOCKER) await pool.query(`CREATE DATABASE ${process.env.POSTGRES_DB}`) // create db + await pool.query(`CREATE DATABASE IF NOT EXISTS ${process.env.POSTGRES_DB}`) // create db const loggerDB = new Pool({ user: process.env.POSTGRES_USER, host: process.env.POSTGRES_HOST, @@ -23,8 +23,8 @@ async function generate() { password: process.env.POSTGRES_PASSWORD, port: 5432 }) - await loggerDB.query('CREATE TABLE messages ( id TEXT PRIMARY KEY, author_id TEXT NOT NULL, content TEXT, attachment_b64 TEXT, ts TIMESTAMPTZ )') // establish messages table - await loggerDB.query('CREATE TABLE guilds ( id TEXT PRIMARY KEY, owner_id TEXT NOT NULL, ignored_channels TEXT[], disabled_events TEXT[], event_logs JSON, log_bots BOOL, custom_settings JSON )') // establish guilds table + await loggerDB.query('CREATE TABLE IF NOT EXISTS messages ( id TEXT PRIMARY KEY, author_id TEXT NOT NULL, content TEXT, attachment_b64 TEXT, ts TIMESTAMPTZ )') // establish messages table + await loggerDB.query('CREATE TABLE IF NOT EXISTS guilds ( id TEXT PRIMARY KEY, owner_id TEXT NOT NULL, ignored_channels TEXT[], disabled_events TEXT[], event_logs JSON, log_bots BOOL, custom_settings JSON )') // establish guilds table console.log('DB Generated!') } From bde9fa8d59e6855e17007868e65e46cc936fa407 Mon Sep 17 00:00:00 2001 From: Phil Date: Fri, 5 Apr 2024 03:32:03 +0200 Subject: [PATCH 8/8] rollback - IF NOT EXISTS doesn't work on DB creation --- docker-compose.yml | 1 + src/miscellaneous/generateDB.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 9d400a0..0aa367c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,6 +23,7 @@ services: depends_on: - db environment: + DOCKER: true POSTGRES_USER: ${POSTGRES_DB} POSTGRES_PASSWORD: POSTGRES_HOST: db diff --git a/src/miscellaneous/generateDB.js b/src/miscellaneous/generateDB.js index e1b355b..486276d 100644 --- a/src/miscellaneous/generateDB.js +++ b/src/miscellaneous/generateDB.js @@ -15,7 +15,7 @@ pool.on('error', e => { }) async function generate() { - await pool.query(`CREATE DATABASE IF NOT EXISTS ${process.env.POSTGRES_DB}`) // create db + if (!process.env.DOCKER) await pool.query(`CREATE DATABASE ${process.env.POSTGRES_DB}`) // create db const loggerDB = new Pool({ user: process.env.POSTGRES_USER, host: process.env.POSTGRES_HOST,