refactor: improve env loading

chore: add Dockerfile
This commit is contained in:
Jo 2023-11-26 00:25:28 +01:00
parent 162e256424
commit a19e1415f1
9 changed files with 148 additions and 4 deletions

View file

@ -1 +1,18 @@
# todo: Write Dockerfile FROM node:21
# Install netcat
RUN apt-get update && apt-get install -y netcat
WORKDIR /usr/src/app
# Copy package.json and package-lock.json to the working directory
COPY package*.json ./
RUN npm install pnpm
RUN pnpm install
COPY . .
EXPOSE 4300
ENTRYPOINT ["./entrypoint.sh"]

7
app.js
View file

@ -14,10 +14,14 @@
const express = require("express"); const express = require("express");
const bodyParser = require("body-parser"); const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser");
const mysql = require("mysql2"); const mysql = require("mysql2");
const path = require("path"); const path = require("path");
if (!process.env.DOCKER) {
const dotenv = require("dotenv"); const dotenv = require("dotenv");
dotenv.config(); dotenv.config();
}
//------------------------------------------------> //------------------------------------------------>
// Express initialization & configuration // Express initialization & configuration
@ -34,8 +38,9 @@ app.set("view engine", "ejs");
// Middlewares // Middlewares
//------------------------------------------------> //------------------------------------------------>
// Use body-parser to get req.body // Use body-parser and cookie-parser
app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
//------------------------------------------------> //------------------------------------------------>
// MySQL connection // MySQL connection

9
config/example.env Normal file
View file

@ -0,0 +1,9 @@
# Database
DB_HOST="exampleHost"
DB_PORT=3306
DB_NAME="exampleName"
DB_USER="exampleUser"
DB_PASSWORD="examplePassword"
# Express
PORT=4300

View file

37
docker-compose.yml Normal file
View file

@ -0,0 +1,37 @@
version: '3'
services:
# MySQL service
db:
image: mysql:8
restart: always
environment:
MYSQL_DATABASE: jet
MYSQL_USER: jet
MYSQL_PASSWORD: ghiuwe§825429h§$%ff
MYSQL_ROOT_PASSWORD: hgruwhgvuiwrghiuwe§825429h§$%ff
ports:
- "3306:3306"
volumes:
- mysql:/var/lib/mysql
# Express app service
app:
build:
context: .
dockerfile: Dockerfile
depends_on:
- db
ports:
- "4300:4300"
environment:
DB_HOST: db
DB_PORT: 3306
DB_USER: jet
DB_PASSWORD: ghiuwe§825429h§$%ff
DB_NAME: jet
DOCKER: true
PORT: 4300
volumes:
mysql:

17
entrypoint.sh Executable file
View file

@ -0,0 +1,17 @@
#!/bin/bash
set -e
# Function to check if the database is healthy
check_database() {
until nc -z -w 1 "$DB_HOST" "$DB_PORT"; do
>&2 echo "[JET] Waiting for MySQL to be ready..."
sleep 1
done
>&2 echo "[JET] MySQL is ready"
}
# Check if the database is healthy
check_database
# Start the Express app
exec npm run start

37
example-compose.yml Normal file
View file

@ -0,0 +1,37 @@
version: '3'
services:
# MySQL service
db:
image: mysql:8
restart: always
environment:
MYSQL_DATABASE: exampleDatabaseName
MYSQL_USER: exampleUser
MYSQL_PASSWORD: examplePassword
MYSQL_ROOT_PASSWORD: exampleRootPassword
ports:
- "3306:3306"
volumes:
- mysql:/var/lib/mysql
# Express app service
app:
build:
context: .
dockerfile: Dockerfile
depends_on:
- db
ports:
- "4300:4300"
environment:
DB_HOST: db
DB_PORT: 3306
DB_USER: exampleUser
DB_PASSWORD: examplePassword
DB_NAME: exampleDatabaseName
DOCKER: true
PORT: 4300
volumes:
mysql:

21
package-lock.json generated
View file

@ -10,6 +10,7 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"body-parser": "^1.20.2", "body-parser": "^1.20.2",
"cookie-parser": "^1.4.6",
"dotenv": "^16.3.1", "dotenv": "^16.3.1",
"ejs": "^3.1.9", "ejs": "^3.1.9",
"express": "^4.18.2", "express": "^4.18.2",
@ -510,6 +511,26 @@
"node": ">= 0.6" "node": ">= 0.6"
} }
}, },
"node_modules/cookie-parser": {
"version": "1.4.6",
"resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz",
"integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==",
"dependencies": {
"cookie": "0.4.1",
"cookie-signature": "1.0.6"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/cookie-parser/node_modules/cookie": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
"integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/cookie-signature": { "node_modules/cookie-signature": {
"version": "1.0.6", "version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",

View file

@ -18,6 +18,7 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"body-parser": "^1.20.2", "body-parser": "^1.20.2",
"cookie-parser": "^1.4.6",
"dotenv": "^16.3.1", "dotenv": "^16.3.1",
"ejs": "^3.1.9", "ejs": "^3.1.9",
"express": "^4.18.2", "express": "^4.18.2",