From 27a323f5576dfe23526029f7303b2978caba9f56 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Sun, 15 Mar 2020 21:10:38 +0100 Subject: [PATCH] docker build --- .github/workflows/build-app.yaml | 32 ++++++++++++------ .github/workflows/build-docker.yaml | 37 +++++++++------------ docker/Dockerfile | 18 +++------- packages/api/src/controllers/connections.js | 2 +- packages/api/src/main.js | 5 +-- packages/api/src/utility/datadir.js | 10 +++--- packages/api/src/utility/useController.js | 18 +++++++--- 7 files changed, 66 insertions(+), 56 deletions(-) diff --git a/.github/workflows/build-app.yaml b/.github/workflows/build-app.yaml index 01c00d845..8daaf2270 100644 --- a/.github/workflows/build-app.yaml +++ b/.github/workflows/build-app.yaml @@ -1,11 +1,11 @@ -name: Docker image -on: [push] -# on: -# push: -# branches: -# - production +name: Electron app + +on: + push: + branches: + - production jobs: build: @@ -32,9 +32,21 @@ jobs: - name: yarn install run: | yarn install - - name: Prepare docker image + - name: Publish run: | - yarn run prepare:docker - - name: Build docker image + yarn run build:app + - name: Cleanup artifacts run: | - docker build ./docker + npx rimraf "app/dist/!(*.exe|*.deb|*.AppImage|*.dmg)" + - name: Upload artifacts + uses: actions/upload-artifact@v1 + with: + name: ${{ matrix.os }} + path: app/dist + - name: Release + uses: softprops/action-gh-release@v1 + if: startsWith(github.ref, 'refs/tags/') + with: + files: "app/dist/**" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/build-docker.yaml b/.github/workflows/build-docker.yaml index fbe2f1cc1..6bd52ec0d 100644 --- a/.github/workflows/build-docker.yaml +++ b/.github/workflows/build-docker.yaml @@ -1,9 +1,11 @@ -name: Electron app +name: Docker image -on: - push: - branches: - - production +on: [push] + +# on: +# push: +# branches: +# - production jobs: build: @@ -30,21 +32,14 @@ jobs: - name: yarn install run: | yarn install - - name: Publish + - name: Prepare docker image run: | - yarn run build:app - - name: Cleanup artifacts + yarn run prepare:docker + - name: Build docker image run: | - npx rimraf "app/dist/!(*.exe|*.deb|*.AppImage|*.dmg)" - - name: Upload artifacts - uses: actions/upload-artifact@v1 - with: - name: ${{ matrix.os }} - path: app/dist - - name: Release - uses: softprops/action-gh-release@v1 - if: startsWith(github.ref, 'refs/tags/') - with: - files: "app/dist/**" - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + docker build ./docker -t dbgate:future + - name: Push docker image + run: | + docker tag dbgate:future dbgate/dbgate:future + docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} + docker push dbgate/dbgate:future diff --git a/docker/Dockerfile b/docker/Dockerfile index 66c4b7151..33f00c678 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,17 +1,9 @@ -# base image -FROM node:10 +FROM node:12-alpine -# set working directory -WORKDIR /home/jenasoft/dbgate +WORKDIR /home/dbgate-docker COPY . . -RUN yarn -RUN yarn build:api -RUN yarn build:web - -# start app -WORKDIR /home/jenasoft/raftcz-frontend/build -EXPOSE 5000 -# CMD yarn start -CMD serve -s +WORKDIR /home/dbgate-docker +EXPOSE 3000 +CMD node bundle.js diff --git a/packages/api/src/controllers/connections.js b/packages/api/src/controllers/connections.js index 549522a16..19b4c06d7 100644 --- a/packages/api/src/controllers/connections.js +++ b/packages/api/src/controllers/connections.js @@ -12,7 +12,7 @@ module.exports = { opened: [], async _init() { - const dir = await datadir(); + const dir = datadir(); // @ts-ignore this.datastore = nedb.create(path.join(dir, 'connections.jsonl')); }, diff --git a/packages/api/src/main.js b/packages/api/src/main.js index 68859603b..806b1e733 100644 --- a/packages/api/src/main.js +++ b/packages/api/src/main.js @@ -28,8 +28,9 @@ function start() { useController(app, '/database-connections', databaseConnections); useController(app, '/tables', tables); - if (fs.existsSync(`${__dirname}/build`)) { - app.use(express.static(`${__dirname}/build`)); + if (fs.existsSync('/home/dbgate-docker/build')) { + // server static files inside docker container + app.use(express.static('/home/dbgate-docker/build')); } else { app.get('/', (req, res) => { res.send('DbGate API'); diff --git a/packages/api/src/utility/datadir.js b/packages/api/src/utility/datadir.js index dce4327d8..88a77ad4b 100644 --- a/packages/api/src/utility/datadir.js +++ b/packages/api/src/utility/datadir.js @@ -1,15 +1,15 @@ const os = require('os'); const path = require('path'); -const fs = require('fs-extra'); +const fs = require('fs'); let created = false; -module.exports = async function datadir() { +module.exports = function datadir() { const dir = path.join(os.homedir(), 'dbgate-data'); if (!created) { - const stat = await fs.stat(dir); - if (!stat.isDirectory) { - await fs.mkdir(dir); + if (!fs.existsSync(dir)) { + console.log(`Creating data directory ${dir}`) + fs.mkdirSync(dir); } created = true; } diff --git a/packages/api/src/utility/useController.js b/packages/api/src/utility/useController.js index 8fe694058..67e4cb41c 100644 --- a/packages/api/src/utility/useController.js +++ b/packages/api/src/utility/useController.js @@ -7,6 +7,16 @@ const express = require('express'); module.exports = function useController(app, route, controller) { const router = express.Router(); + if (controller._init) { + console.log(`Calling init controller for controller ${route}`); + try { + controller._init(); + } catch (err) { + console.log(`Error initializing controller, exiting application`, err); + process.exit(1); + } + } + for (const key of _.keys(controller)) { const obj = controller[key]; if (!_.isFunction(obj)) continue; @@ -31,10 +41,10 @@ module.exports = function useController(app, route, controller) { router[method](route, controller[key]); } else { router[method](route, async (req, res) => { - if (controller._init && !controller._init_called) { - await controller._init(); - controller._init_called = true; - } + // if (controller._init && !controller._init_called) { + // await controller._init(); + // controller._init_called = true; + // } try { let params = [{ ...req.body, ...req.query }]; if (rawParams) params = [req, res];