Loading Dockerfile 0 → 100644 +16 −0 Original line number Diff line number Diff line FROM node:alpine ENV \ DIRPATH="/opt/redmic" \ SITE_PORT="3000" \ SITE_PATH="content" WORKDIR ${DIRPATH} COPY ./ ./ RUN npm install EXPOSE ${SITE_PORT} ENTRYPOINT node app --port=${SITE_PORT} --path=${SITE_PATH} app/index.js 0 → 100644 +52 −0 Original line number Diff line number Diff line var packageJson = require('../package.json'), version = packageJson.version, description = packageJson.description, params = require('./params')(version), logging = require('./logging'), logger = logging.logger, sitePath = params.path, port = params.port, debug = params.debug, path = require('path'), express = require('express'), http = require('http'), app = express(); logging.registerAppLogger(params, app); function exposeContents(directoryName) { var pathOptions = { maxAge: 600000, index: false }; var exposedPath = path.join(__dirname, '..', directoryName), servedPath = express['static'](exposedPath, pathOptions); app.use(servedPath) .use('/' + directoryName, servedPath); } exposeContents(sitePath); exposeContents('index.js'); exposeContents('index.css'); app.set('view engine', 'pug') .set('views', path.join(__dirname, '..', 'views')) .get('/', function (req, res) { res.render('index', { path: sitePath }); }); http.createServer(app).listen(port, function() { logger.verbose(description + ' v%s', version); logger.verbose('Listening on port %d', port); debug && logger.verbose('Debug mode enabled'); }); app/logging.js 0 → 100644 +41 −0 Original line number Diff line number Diff line var morgan = require('morgan'), winston = require('winston'); var logConsoleTransport = new (winston.transports.Console)({ level: 'silly', colorize: true, timestamp: true, prettyPrint: true, humanReadableUnhandledException: true }); var logger = new (winston.Logger)({ transports: [ logConsoleTransport ], exceptionHandlers: [ logConsoleTransport ], exitOnError: false }); function registerLogger(params, app) { app.use(morgan('dev', { skip: function(req, res) { return params.debug ? res.statusCode < 400 : false; }, stream: { write: function(msg) { logger.info(msg.slice(0, -1)); } } })); } module.exports = { registerAppLogger: registerLogger, logger: logger }; app/params.js 0 → 100644 +17 −0 Original line number Diff line number Diff line var commander = require('commander'); module.exports = function(version) { commander .version(version) .option('-P, --path <value>', null) .option('-d, --debug', null) .option('-p, --port <n>', null, 3000) .parse(process.argv); return { path: commander.path, debug: commander.debug || false, port: commander.port }; }; index.css 0 → 100644 +62 −0 Original line number Diff line number Diff line body { min-width: 220px; margin: 0; } a { text-decoration: none; color: inherit; } .page-title { text-align: center; margin: 20px 0; } .page-title h1 { margin: 0; } .box-container { display: flex; flex-wrap: wrap; justify-content: space-around; padding: 10px; } .box { display: flex; flex-direction: column; width: 180px; min-width: 180px; height: 300px; margin: 10px; border-radius: 10px; border: solid 2px lightgray; background-color: floralwhite; } .box-title { display: flex; justify-content: space-around; align-items: center; height: 40%; padding: 5px; border-bottom: solid 2px lightgray; } .box-title img { max-width: 100px; max-height: 100px; } .box-content { height: 60%; padding: 5px; overflow: auto; } .box-content h2 { margin: 0; text-align: center; } No newline at end of file Loading
Dockerfile 0 → 100644 +16 −0 Original line number Diff line number Diff line FROM node:alpine ENV \ DIRPATH="/opt/redmic" \ SITE_PORT="3000" \ SITE_PATH="content" WORKDIR ${DIRPATH} COPY ./ ./ RUN npm install EXPOSE ${SITE_PORT} ENTRYPOINT node app --port=${SITE_PORT} --path=${SITE_PATH}
app/index.js 0 → 100644 +52 −0 Original line number Diff line number Diff line var packageJson = require('../package.json'), version = packageJson.version, description = packageJson.description, params = require('./params')(version), logging = require('./logging'), logger = logging.logger, sitePath = params.path, port = params.port, debug = params.debug, path = require('path'), express = require('express'), http = require('http'), app = express(); logging.registerAppLogger(params, app); function exposeContents(directoryName) { var pathOptions = { maxAge: 600000, index: false }; var exposedPath = path.join(__dirname, '..', directoryName), servedPath = express['static'](exposedPath, pathOptions); app.use(servedPath) .use('/' + directoryName, servedPath); } exposeContents(sitePath); exposeContents('index.js'); exposeContents('index.css'); app.set('view engine', 'pug') .set('views', path.join(__dirname, '..', 'views')) .get('/', function (req, res) { res.render('index', { path: sitePath }); }); http.createServer(app).listen(port, function() { logger.verbose(description + ' v%s', version); logger.verbose('Listening on port %d', port); debug && logger.verbose('Debug mode enabled'); });
app/logging.js 0 → 100644 +41 −0 Original line number Diff line number Diff line var morgan = require('morgan'), winston = require('winston'); var logConsoleTransport = new (winston.transports.Console)({ level: 'silly', colorize: true, timestamp: true, prettyPrint: true, humanReadableUnhandledException: true }); var logger = new (winston.Logger)({ transports: [ logConsoleTransport ], exceptionHandlers: [ logConsoleTransport ], exitOnError: false }); function registerLogger(params, app) { app.use(morgan('dev', { skip: function(req, res) { return params.debug ? res.statusCode < 400 : false; }, stream: { write: function(msg) { logger.info(msg.slice(0, -1)); } } })); } module.exports = { registerAppLogger: registerLogger, logger: logger };
app/params.js 0 → 100644 +17 −0 Original line number Diff line number Diff line var commander = require('commander'); module.exports = function(version) { commander .version(version) .option('-P, --path <value>', null) .option('-d, --debug', null) .option('-p, --port <n>', null, 3000) .parse(process.argv); return { path: commander.path, debug: commander.debug || false, port: commander.port }; };
index.css 0 → 100644 +62 −0 Original line number Diff line number Diff line body { min-width: 220px; margin: 0; } a { text-decoration: none; color: inherit; } .page-title { text-align: center; margin: 20px 0; } .page-title h1 { margin: 0; } .box-container { display: flex; flex-wrap: wrap; justify-content: space-around; padding: 10px; } .box { display: flex; flex-direction: column; width: 180px; min-width: 180px; height: 300px; margin: 10px; border-radius: 10px; border: solid 2px lightgray; background-color: floralwhite; } .box-title { display: flex; justify-content: space-around; align-items: center; height: 40%; padding: 5px; border-bottom: solid 2px lightgray; } .box-title img { max-width: 100px; max-height: 100px; } .box-content { height: 60%; padding: 5px; overflow: auto; } .box-content h2 { margin: 0; text-align: center; } No newline at end of file