diff --git a/.circleci/config.yml b/.circleci/config.yml index 78c1ed9..e4f5a7e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -18,11 +18,16 @@ jobs: name: Run tests command: | npm run test:linux -# - deploy: -# name: Push to docker -# command: | -# docker login -u $DOCKER_USER -p $DOCKER_PASS -# docker push ${di} + - setup_remote_docker + - run: + name: Build docker image + command: | + docker build -t ${di}:build_${CIRCLE_BUILD_NUM} -t ${di}:${CIRCLE_SHA1} -t ${di}:${dtag} . + - deploy: + name: Push to docker + command: | + docker login -u $DOCKER_USER -p $DOCKER_PASS + docker push ${di} workflows: version: 2 diff --git a/.gitignore b/.gitignore index e532af9..81990f5 100644 --- a/.gitignore +++ b/.gitignore @@ -58,7 +58,7 @@ typings/ .env # Local development config file -config/config.json +config/*.json # Public folder should be ignored public/* diff --git a/Dockerfile b/Dockerfile index 47a2011..07336de 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,14 @@ -FROM node:alpine - -ARG NODE=development +FROM alpine ENV HOME=/app \ - NODE_ENV=${NODE} - -COPY package.json $HOME/ + NODE_ENV=production WORKDIR $HOME -RUN npm install +COPY package.json $HOME/ -COPY . $HOME/ +RUN apk update && apk upgrade && apk add nodejs npm && npm install --production -EXPOSE 4020 +COPY api $HOME/api CMD ["npm", "start"] diff --git a/config/config.default.json b/api/config.default.json similarity index 100% rename from config/config.default.json rename to api/config.default.json diff --git a/api/config.mjs b/api/config.mjs index c659397..c7329ce 100644 --- a/api/config.mjs +++ b/api/config.mjs @@ -52,7 +52,7 @@ if (nconf.get('NODE_ENV') === 'production') { nconf.file('main', path.resolve(path.join(__dirname, configFile))) // Load defaults -nconf.file('default', path.resolve(path.join(__dirname, '../config/config.default.json'))) +nconf.file('default', path.resolve(path.join(__dirname, '../api/config.default.json'))) // Final sanity checks diff --git a/api/log.mjs b/api/log.mjs index 9fbfab9..aa6d7e5 100644 --- a/api/log.mjs +++ b/api/log.mjs @@ -20,10 +20,3 @@ for (let i = 0; i < settings.streams.length; i++) { const log = bunyan.createLogger(settings) export default log - -log.logMiddleware = () => - (ctx, next) => { - ctx.log = log - - return next() - } diff --git a/api/media/routes.mjs b/api/media/routes.mjs index 26d387b..7b2ea17 100644 --- a/api/media/routes.mjs +++ b/api/media/routes.mjs @@ -14,6 +14,8 @@ export default class MediaRoutes { let result = await this.formidable.uploadFile(ctx, site) + ctx.log.info(`Uploaded ${result.filename}`) + ctx.body = { filename: result.filename, path: `/${site}/${result.filename}` diff --git a/api/server.mjs b/api/server.mjs index b75db6c..27540fb 100644 --- a/api/server.mjs +++ b/api/server.mjs @@ -13,6 +13,9 @@ const app = new Flaska({ app.before(function(ctx) { ctx.__started = performance.now() + ctx.log = ctx.log.child({ + ip: ctx.req.headers['x-forwarded-for'] || ctx.req.connection.remoteAddress, + }) }) app.after(function(ctx) { @@ -21,11 +24,11 @@ app.after(function(ctx) { if (ctx.status >= 400) { logger = ctx.log.warn } - logger({ + logger.apply(ctx.log, [{ path: ctx.url, status: ctx.status, ms: Math.round(ended), - }, 'Request finished') + }, 'Request finished']) }) app.onerror(function(err, ctx) { diff --git a/package.json b/package.json index 69f91c1..d22ac1f 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "description": "", "main": "index.js", "scripts": { - "dev": "nodemon index.js", - "start": "node --experimental-modules api/server.mjs", + "start": "node api/server.mjs", + "start:bunyan": "node api/server.mjs | bunyan", "test": "set NODE_ENV=test&& eltro test/**/*.test.mjs -r dot", "test:linux": "NODE_ENV=test eltro 'test/**/*.test.mjs' -r dot" }, @@ -21,7 +21,7 @@ "homepage": "https://github.com/nfp-projects/storage-upload#readme", "dependencies": { "bunyan-lite": "^1.1.1", - "flaska": "^0.9.6", + "flaska": "^0.9.7", "formidable": "^1.2.2", "nconf-lite": "^2.0.0" }, diff --git a/test/helper.server.mjs b/test/helper.server.mjs index b469907..4ef3533 100644 --- a/test/helper.server.mjs +++ b/test/helper.server.mjs @@ -8,8 +8,11 @@ serv.log = { warn: stub(), info: stub(), error: stub(), + child: stub(), } +serv.log.child.returns(serv.log) + export const server = serv export function createClient() { diff --git a/test/media/api.test.mjs b/test/media/api.test.mjs index 0d6f901..be02814 100644 --- a/test/media/api.test.mjs +++ b/test/media/api.test.mjs @@ -5,7 +5,6 @@ import path from 'path' import { server, resetLog } from '../helper.server.mjs' import Client from '../helper.client.mjs' -import config from '../../api/config.mjs' import encode from '../../api/jwt/encode.mjs' let __dirname = path.dirname(fileURLToPath(import.meta.url))