diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..edd83c0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +node_modules +npm-debug.log +Dockerfile +.dockerignore \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e8caf97 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM node:21 + +RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app +RUN mkdir -p /home/node/app/var/db && chown -R node:node /home/node/app +WORKDIR /home/node/app + +USER node +COPY --chown=node:node package*.json ./ +RUN npm install +COPY --chown=node:node src src +COPY --chown=node:node bin bin + +EXPOSE 3000 +CMD [ "npm", "start" ] diff --git a/bin/www b/bin/www index 36e14e1..13e2e8b 100755 --- a/bin/www +++ b/bin/www @@ -20,20 +20,18 @@ const path = require("path"); var port = normalizePort(process.env.PORT || "3000"); app.set("port", port); -/** - * Create HTTPS server. - */ -const https_options = { - key: fs.readFileSync("certs/key.pem"), - cert: fs.readFileSync("certs/cert.pem"), -}; if (process.env.NODE_ENV === "development") { - // console.log(`starting livereload, watching ${path.join(__dirname, "../src/views")}`) + /** + * Create HTTPS server. + */ + const https_options = { + key: fs.readFileSync("certs/key.pem"), + cert: fs.readFileSync("certs/cert.pem"), + }; var livereload = require("livereload"); - var connectLiveReload = require("connect-livereload"); - const liveReloadServer = livereload.createServer({https: https_options, extraExts: ['pug']}); + const liveReloadServer = livereload.createServer({https: https_options}); liveReloadServer.watch(path.join(__dirname, "../src/views")); liveReloadServer.server.once("connection", () => { setTimeout(() => { @@ -41,9 +39,11 @@ if (process.env.NODE_ENV === "development") { }, 100); }); + var server = https.createServer(https_options, app); +} +else { + var server = http.createServer(app); } - -var server = https.createServer(https_options, app); /** * Listen on provided port, on all network interfaces. diff --git a/caddy/Caddyfile b/caddy/Caddyfile new file mode 100644 index 0000000..b186387 --- /dev/null +++ b/caddy/Caddyfile @@ -0,0 +1,3 @@ +localhost { + reverse_proxy app:3000 +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..ef60eeb --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,24 @@ +version: "3.3" + +services: + app: + env_file: + - .env + build: . + networks: + - web + expose: + - 3000 + + caddy: + image: caddy + ports: + - 80:80 + - 443:443 + volumes: + - ./caddy/Caddyfile:/etc/caddy/Caddyfile + networks: + - web + +networks: + web: \ No newline at end of file diff --git a/src/app.js b/src/app.js index e9db2b9..0f1dbe5 100644 --- a/src/app.js +++ b/src/app.js @@ -163,4 +163,6 @@ app.use(function (err, req, res, next) { // next(createError(404)); // }); +app.set('trust proxy') + module.exports = {app}; \ No newline at end of file