Compare commits

..

19 Commits

Author SHA1 Message Date
Kayne Ruse db66d61abe Bump dependencies 2025-09-10 14:06:56 +10:00
dependabot[bot] f5fceb5c4e Bump dotenv from 17.2.1 to 17.2.2
Bumps [dotenv](https://github.com/motdotla/dotenv) from 17.2.1 to 17.2.2.
- [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md)
- [Commits](https://github.com/motdotla/dotenv/compare/v17.2.1...v17.2.2)

---
updated-dependencies:
- dependency-name: dotenv
  dependency-version: 17.2.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-10 13:04:24 +10:00
Kayne Ruse b4b490dc6f Experimenting with dependabot 2025-09-09 18:56:40 +10:00
Kayne Ruse 496048f62b Updated dependencies 2025-07-26 03:56:40 +10:00
Ratstail91 2e8c3f98ca Fully tested the remote database
Updated docker base image
2024-05-03 09:27:29 +10:00
Ratstail91 582c0b453c UNTESTED: Updated all dependencies 2024-05-03 07:08:09 +10:00
Ratstail91 9db6dbf63b UNTESTED: Added database port as a configurable option
Also updated license field in package.json
2024-04-15 21:03:23 +10:00
Ratstail91 3700372e92 Updated dependencies 2024-04-15 17:12:04 +10:00
Ratstail91 416ab2f3f9 Updated libraries, docker engine version, docker distro version 2023-12-23 23:55:26 +11:00
Kayne Ruse 1b5cbaea17 Docker behaviour changed, fixed 2023-06-26 23:20:34 +10:00
Kayne Ruse 0f2b8d3f52 Updated dependencies, bumped patch version 2023-06-26 23:06:15 +10:00
Kayne Ruse 88c2239fdb Updated dependencies 2023-05-29 07:56:13 +10:00
Kayne Ruse b5f9d0a7fc Updated dependencies 2023-05-03 21:32:31 +10:00
Kayne Ruse 1ec29e4519 Updated depencencies, bumped version 2023-03-25 01:50:32 +11:00
Kayne Ruse a15c43b3d0 Updated dependencies 2023-03-19 02:53:17 +11:00
Kayne Ruse 9bc96bdb5f Updated dependencies 2023-02-21 09:30:15 +11:00
Kayne Ruse 4bdcee11ea Updated dependencies, License 2023-01-12 08:08:34 +11:00
Kayne Ruse e1cd1ec001 Bumped version number 2023-01-04 12:57:13 +00:00
Kayne Ruse e8a9a79687 Switched to a slim docker distro 2023-01-04 23:51:49 +11:00
11 changed files with 1103 additions and 745 deletions
+3 -1
View File
@@ -2,7 +2,9 @@ WEB_PORT=3300
WEB_ORIGIN=http://localhost:3001 WEB_ORIGIN=http://localhost:3001
DB_HOSTNAME=database DB_HOSTNAME=localhost
DB_PORTNAME=3306
DB_DATABASE=chat DB_DATABASE=chat
DB_USERNAME=chat DB_USERNAME=chat
DB_PASSWORD=blastoise DB_PASSWORD=blastoise
+10
View File
@@ -0,0 +1,10 @@
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
+3 -2
View File
@@ -1,6 +1,7 @@
FROM node:18
FROM node:22-bookworm-slim
WORKDIR "/app" WORKDIR "/app"
COPY package*.json ./ COPY package*.json /app
RUN npm install --production RUN npm install --production
COPY . /app COPY . /app
EXPOSE 3300 EXPOSE 3300
+1 -1
View File
@@ -1,4 +1,4 @@
Copyright (c) 2021 Kayne Ruse, KR Game Studios Copyright (c) 2021-2023 Kayne Ruse, KR Game Studios
This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
+1 -1
View File
@@ -6,7 +6,7 @@ This server is available via docker hub at krgamestudios/chat-server.
# Setup # Setup
There are multiple ways to run this app - it can run on it's own via `npm start` (for production) or `npm run dev` (for development). it can also run inside docker using `docker-compose up --build` - run `node configure-script.js` to generate docker-compose.yml and startup.sql. There are multiple ways to run this app - it can run on it's own via `npm start` (for production) or `npm run dev` (for development). it can also run inside docker using `docker compose up --build` - run `node configure-script.js` to generate docker-compose.yml and startup.sql.
To generate an authorization token, use [auth-server](https://github.com/krgamestudios/auth-server). A public-facing development auth-server is available here (tokens are valid for 10 minutes): To generate an authorization token, use [auth-server](https://github.com/krgamestudios/auth-server). A public-facing development auth-server is available here (tokens are valid for 10 minutes):
+55 -26
View File
@@ -33,6 +33,25 @@ const question = (prompt, def = null) => {
const appWebOrigin = await question('Web Origin', `https://example.com`); //TODO: clean these up properly const appWebOrigin = await question('Web Origin', `https://example.com`); //TODO: clean these up properly
const appPort = await question('App Port', '3300'); const appPort = await question('App Port', '3300');
//configure the database address
let dbLocation = '';
while (typeof dbLocation != 'string' || /^[le]/i.test(dbLocation[0]) == false) {
dbLocation = await question('[l]ocal or [e]xternal database?');
}
let appDBHost = '';
let appDBPort = '';
if (/^[l]/i.test(dbLocation[0])) {
appDBHost = 'database';
appDBPort = '3306';
}
else {
appDBHost = await question('DB Host');
appDBPort = await question('DB Port', '3306');
}
//configure the database account
const appDBUser = await question('DB User', appName); const appDBUser = await question('DB User', appName);
const appDBPass = await question('DB Pass', 'blastoise'); const appDBPass = await question('DB Pass', 'blastoise');
const dbRootPass = await question('DB Root Pass'); const dbRootPass = await question('DB Root Pass');
@@ -43,38 +62,42 @@ const question = (prompt, def = null) => {
//generate the files //generate the files
const ymlfile = ` const ymlfile = `
version: '3'
services: services:
${appName}: ${appName}:
build: build:
context: . context: .
ports: ports:
- "${appPort}" - ${appPort}
labels: labels:
- "traefik.enable=true" - traefik.enable=true
- "traefik.http.routers.${appName}router.rule=Host(\`${appWebAddress}\`)" - traefik.http.routers.${appName}router.rule=Host(\`${appWebAddress}\`)
- "traefik.http.routers.${appName}router.entrypoints=websecure" - traefik.http.routers.${appName}router.entrypoints=websecure
- "traefik.http.routers.${appName}router.tls.certresolver=myresolver" - traefik.http.routers.${appName}router.tls.certresolver=myresolver
- "traefik.http.routers.${appName}router.service=${appName}service@docker" - traefik.http.routers.${appName}router.service=${appName}service@docker
- "traefik.http.services.${appName}service.loadbalancer.server.port=${appPort}" - traefik.http.services.${appName}service.loadbalancer.server.port=${appPort}
environment: environment:
- WEB_PORT=${appPort} - WEB_PORT=${appPort}
- WEB_ORIGIN=${appWebOrigin} - WEB_ORIGIN=${appWebOrigin}
- DB_HOSTNAME=database - DB_HOSTNAME=${appDBHost}
- DB_PORTNAME=${appDBPort}
- DB_DATABASE=${appName} - DB_DATABASE=${appName}
- DB_USERNAME=${appDBUser} - DB_USERNAME=${appDBUser}
- DB_PASSWORD=${appDBPass} - DB_PASSWORD=${appDBPass}
- DB_TIMEZONE=Australia/Sydney - DB_TIMEZONE=Australia/Sydney
- SECRET_ACCESS=${appSecretAccess} - SECRET_ACCESS=${appSecretAccess}
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
networks: networks:
- app-network - app-network${ appDBHost != 'database' ? '' : `
depends_on: depends_on:
- database - database
database: database:
image: mariadb:latest image: mariadb:latest
environment: environment:
MYSQL_DATABASE: ${appName} MYSQL_DATABASE: ${appName}
MYSQL_TCP_PORT: ${appDBPort}
MYSQL_USER: ${appDBUser} MYSQL_USER: ${appDBUser}
MYSQL_PASSWORD: ${appDBPass} MYSQL_PASSWORD: ${appDBPass}
MYSQL_ROOT_PASSWORD: ${dbRootPass} MYSQL_ROOT_PASSWORD: ${dbRootPass}
@@ -83,34 +106,40 @@ services:
volumes: volumes:
- ./mysql:/var/lib/mysql - ./mysql:/var/lib/mysql
- ./startup.sql:/docker-entrypoint-initdb.d/startup.sql:ro - ./startup.sql:/docker-entrypoint-initdb.d/startup.sql:ro
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro`}
traefik_${appName}: traefik_${appName}:
container_name: ${appName}_traefik container_name: ${appName}_traefik
image: "traefik:v2.4" image: traefik:v2.10
container_name: "traefik" container_name: traefik
command: command:
- "--log.level=ERROR" - --log.level=ERROR
- "--api.insecure=false" - --api.insecure=false
- "--providers.docker=true" - --providers.docker=true
- "--providers.docker.exposedbydefault=false" - --providers.docker.exposedbydefault=false
- "--entrypoints.websecure.address=:443" - --entrypoints.websecure.address=:443
- "--certificatesresolvers.myresolver.acme.tlschallenge=true" - --certificatesresolvers.myresolver.acme.tlschallenge=true
- "--certificatesresolvers.myresolver.acme.email=${supportEmail}" - --certificatesresolvers.myresolver.acme.email=${supportEmail}
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" - --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json
ports: ports:
- "80:80" - 80:80
- "443:443" - 443:443
volumes: volumes:
- "./letsencrypt:/letsencrypt" - ./letsencrypt:/letsencrypt
- "/var/run/docker.sock:/var/run/docker.sock:ro" - /var/run/docker.sock:/var/run/docker.sock:ro
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
networks: networks:
- app-network - app-network
networks: networks:
app-network: app-network:
driver: bridge driver: bridge
`; `;
const dockerfile = ` const dockerfile = `
FROM node:18 FROM node:22-bookworm-slim
WORKDIR "/app" WORKDIR "/app"
COPY package*.json ./ COPY package*.json ./
RUN npm install --production RUN npm install --production
+1016 -700
View File
File diff suppressed because it is too large Load Diff
+9 -9
View File
@@ -1,6 +1,6 @@
{ {
"name": "chat-server", "name": "chat-server",
"version": "1.4.0", "version": "1.5.1",
"description": "An API centric chat server. Uses Sequelize and mariaDB by default.", "description": "An API centric chat server. Uses Sequelize and mariaDB by default.",
"main": "server/server.js", "main": "server/server.js",
"scripts": { "scripts": {
@@ -13,21 +13,21 @@
"url": "git+https://github.com/krgamestudios/chat-server.git" "url": "git+https://github.com/krgamestudios/chat-server.git"
}, },
"author": "Kayne Ruse", "author": "Kayne Ruse",
"license": "ISC", "license": "Zlib",
"bugs": { "bugs": {
"url": "https://github.com/krgamestudios/chat-server/issues" "url": "https://github.com/krgamestudios/chat-server/issues"
}, },
"homepage": "https://github.com/krgamestudios/chat-server#readme", "homepage": "https://github.com/krgamestudios/chat-server#readme",
"dependencies": { "dependencies": {
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^16.0.3", "dotenv": "^17.2.2",
"express": "^4.18.2", "express": "^5.1.0",
"jsonwebtoken": "^9.0.0", "jsonwebtoken": "^9.0.2",
"mariadb": "^3.0.2", "mariadb": "^3.4.5",
"sequelize": "^6.25.8", "sequelize": "^6.37.7",
"socket.io": "^4.5.4" "socket.io": "^4.8.1"
}, },
"devDependencies": { "devDependencies": {
"nodemon": "^2.0.20" "nodemon": "^3.1.10"
} }
} }
+1 -2
View File
@@ -2,11 +2,10 @@ const Sequelize = require('sequelize');
const sequelize = new Sequelize(process.env.DB_DATABASE, process.env.DB_USERNAME, process.env.DB_PASSWORD, { const sequelize = new Sequelize(process.env.DB_DATABASE, process.env.DB_USERNAME, process.env.DB_PASSWORD, {
host: process.env.DB_HOSTNAME, host: process.env.DB_HOSTNAME,
port: process.env.DB_PORTNAME,
dialect: 'mariadb', dialect: 'mariadb',
timezone: process.env.DB_TIMEZONE, timezone: process.env.DB_TIMEZONE,
logging: process.env.DB_LOGGING ? console.log : false logging: process.env.DB_LOGGING ? console.log : false
}); });
sequelize.sync();
module.exports = sequelize; module.exports = sequelize;
+2 -1
View File
@@ -31,7 +31,7 @@ app.use('/admin', require('./admin'));
require('./chat')(io.of('/chat')); require('./chat')(io.of('/chat'));
//error on access //error on access
app.get('*', (req, res) => { app.get('/{*any}', (req, res) => {
res.redirect('https://github.com/krgamestudios/chat-server'); res.redirect('https://github.com/krgamestudios/chat-server');
}); });
@@ -39,4 +39,5 @@ app.get('*', (req, res) => {
server.listen(process.env.WEB_PORT || 3300, async (err) => { server.listen(process.env.WEB_PORT || 3300, async (err) => {
await database.sync(); await database.sync();
console.log(`listening to localhost:${process.env.WEB_PORT || 3300}`); console.log(`listening to localhost:${process.env.WEB_PORT || 3300}`);
console.log(`database located at ${process.env.DB_HOSTNAME || '<default>'}:${process.env.DB_PORTNAME || '<default>'}`);
}); });
+2 -2
View File
@@ -1,4 +1,4 @@
#use this while debugging #use this while debugging
CREATE DATABASE IF NOT EXISTS chat; CREATE DATABASE chat;
CREATE USER IF NOT EXISTS 'chat'@'%' IDENTIFIED BY 'blastoise'; CREATE USER 'chat'@'%' IDENTIFIED BY 'blastoise';
GRANT ALL PRIVILEGES ON chat.* TO 'chat'@'%'; GRANT ALL PRIVILEGES ON chat.* TO 'chat'@'%';