diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..4d2946a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +.git +node_modules +config.json +certs +src/logs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8db21eb --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +node_modules +config.json +certs +src/logs diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..be1b7af --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM node:18-alpine + +RUN apk add --no-cache python3 make gcc g++ +WORKDIR /app + +COPY "docker/entrypoint.sh" ./ + +COPY package*.json ./ +RUN npm install + +COPY . ./ + +VOLUME [ "/app/config.json", "/app/certs" ] + +CMD ["sh", "entrypoint.sh"] diff --git a/README.md b/README.md index b46941e..efa72b7 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ This is the PN miiverse replacement web UI, which works with the 3DS and Wii U M # Install and usage -First install [NodeJS](https://nodejs.org) and [MongoDB](https://mongodb.com). Download/clone this repo and run `npm i` to install all dependencies. Edit `example.config.js` to your liking and rename it `config.js`. Run the server via `npm run start`. +First install [NodeJS](https://nodejs.org) and [MongoDB](https://mongodb.com). Download/clone this repo and run `npm i` to install all dependencies. Edit `example.config.json` to your liking and rename it `config.json`. Run the server via `npm run start`. Check out the [Wiki](https://github.com/PretendoNetwork/juxt-web/wiki) for information on how to set up your mongoDB to work with the application diff --git a/src/config.example.json b/config.example.json similarity index 100% rename from src/config.example.json rename to config.example.json diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100644 index 0000000..8580413 --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +files='config.json certs/access/private.pem certs/access/aes.key' + +for file in $files; do + if [ ! -f $file ]; then + echo "$PWD/$file file does not exist. Please mount and try again." + exit 1 + fi +done + +exec node src/server.js diff --git a/dockerfile b/dockerfile deleted file mode 100644 index 810e1a4..0000000 --- a/dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -# syntax=docker/dockerfile:1 -FROM node:12-alpine -EXPOSE 80/tcp -EXPOSE 443/tcp -RUN apk add --no-cache npm python3 make g++ -WORKDIR /app -COPY . . -RUN mkdir /config -VOLUME /config -WORKDIR /app/src -RUN mv config.example.json /config/config.json -RUN npm install -WORKDIR /app -RUN echo "cp /config/config.json /app/src/config.json && npm start" > startup.sh -RUN chmod +x startup.sh -ENTRYPOINT "/app/startup.sh" \ No newline at end of file diff --git a/src/accountdb.js b/src/accountdb.js index 625bd9d..284d46d 100644 --- a/src/accountdb.js +++ b/src/accountdb.js @@ -1,5 +1,5 @@ const mongoose = require('mongoose'); -const { account_db: mongooseConfig } = require('./config.json'); +const { account_db: mongooseConfig } = require('../config.json'); const { uri, database, options } = mongooseConfig; const logger = require('./logger'); diff --git a/src/database.js b/src/database.js index 41800d3..3643ca1 100644 --- a/src/database.js +++ b/src/database.js @@ -1,5 +1,5 @@ const mongoose = require('mongoose'); -const { mongoose: mongooseConfig } = require('./config.json'); +const { mongoose: mongooseConfig } = require('../config.json'); const { ENDPOINT } = require('./models/endpoint'); const { COMMUNITY } = require('./models/communities'); const { POST } = require('./models/post'); diff --git a/src/middleware/auth.js b/src/middleware/auth.js index 0380636..87bddc0 100644 --- a/src/middleware/auth.js +++ b/src/middleware/auth.js @@ -1,4 +1,4 @@ -const config = require('../config.json'); +const config = require('../../config.json'); const util = require('../util'); function auth(request, response, next) { diff --git a/src/server.js b/src/server.js index 6f548e2..ed36d5f 100644 --- a/src/server.js +++ b/src/server.js @@ -7,7 +7,7 @@ const cookieParser = require('cookie-parser'); const auth = require('./middleware/auth'); const database = require('./database'); const logger = require('./logger'); -const config = require('./config.json'); +const config = require('../config.json'); const { http: { port } } = config; const app = express(); diff --git a/src/services/juxt-web/routes/admin/api.js b/src/services/juxt-web/routes/admin/api.js index 55e01da..90e21e8 100644 --- a/src/services/juxt-web/routes/admin/api.js +++ b/src/services/juxt-web/routes/admin/api.js @@ -2,7 +2,7 @@ var express = require('express'); const database = require('../../../../database'); const logger = require('../../../../logger'); const util = require('../../../../util'); -const config = require('../../../../config.json'); +const config = require('../../../../../config.json'); const { COMMUNITY } = require('../../../../models/communities'); const { POST } = require('../../../../models/post'); var router = express.Router(); diff --git a/src/services/juxt-web/routes/admin/home.js b/src/services/juxt-web/routes/admin/home.js index 7eece81..70b9df1 100644 --- a/src/services/juxt-web/routes/admin/home.js +++ b/src/services/juxt-web/routes/admin/home.js @@ -3,7 +3,7 @@ var xml = require('object-to-xml'); const database = require('../../../../database'); const logger = require('../../../../logger'); const util = require('../../../../util'); -const config = require('../../../../config.json'); +const config = require('../../../../../config.json'); const request = require("request"); var path = require('path'); var moment = require('moment'); diff --git a/src/services/juxt-web/routes/console/communities.js b/src/services/juxt-web/routes/console/communities.js index d526cc7..625bde1 100644 --- a/src/services/juxt-web/routes/console/communities.js +++ b/src/services/juxt-web/routes/console/communities.js @@ -2,7 +2,7 @@ var express = require('express'); var xml = require('object-to-xml'); const database = require('../../../../database'); const util = require('../../../../util'); -const config = require('../../../../config.json'); +const config = require('../../../../../config.json'); var multer = require('multer'); var moment = require('moment'); var upload = multer({ dest: 'uploads/' }); diff --git a/src/services/juxt-web/routes/console/feed.js b/src/services/juxt-web/routes/console/feed.js index e0f43bf..516e9ff 100644 --- a/src/services/juxt-web/routes/console/feed.js +++ b/src/services/juxt-web/routes/console/feed.js @@ -2,7 +2,7 @@ var express = require('express'); var xml = require('object-to-xml'); const database = require('../../../../database'); const util = require('../../../../util'); -const config = require('../../../../config.json'); +const config = require('../../../../../config.json'); var moment = require('moment'); var router = express.Router(); diff --git a/src/services/juxt-web/routes/console/messages.js b/src/services/juxt-web/routes/console/messages.js index c0ab563..f1e65f6 100644 --- a/src/services/juxt-web/routes/console/messages.js +++ b/src/services/juxt-web/routes/console/messages.js @@ -2,7 +2,7 @@ var express = require('express'); var xml = require('object-to-xml'); const database = require('../../../../database'); const util = require('../../../../util'); -const config = require('../../../../config.json'); +const config = require('../../../../../config.json'); const { CONVERSATION } = require('../../../../models/conversation'); const { POST } = require('../../../../models/post'); var moment = require('moment'); diff --git a/src/services/juxt-web/routes/console/notifications.js b/src/services/juxt-web/routes/console/notifications.js index ad06ba4..61b6779 100644 --- a/src/services/juxt-web/routes/console/notifications.js +++ b/src/services/juxt-web/routes/console/notifications.js @@ -2,7 +2,7 @@ var express = require('express'); var xml = require('object-to-xml'); const database = require('../../../../database'); const util = require('../../../../util'); -const config = require('../../../../config.json'); +const config = require('../../../../../config.json'); var moment = require('moment'); var router = express.Router(); diff --git a/src/services/juxt-web/routes/console/posts.js b/src/services/juxt-web/routes/console/posts.js index 0f20ce7..57e3408 100644 --- a/src/services/juxt-web/routes/console/posts.js +++ b/src/services/juxt-web/routes/console/posts.js @@ -1,7 +1,7 @@ var express = require('express'); const database = require('../../../../database'); const util = require('../../../../util'); -const config = require('../../../../config.json'); +const config = require('../../../../../config.json'); const { POST } = require('../../../../models/post'); const rateLimit = require('../../../../middleware/ratelimit'); var multer = require('multer'); diff --git a/src/services/juxt-web/routes/console/show.js b/src/services/juxt-web/routes/console/show.js index be8cdb8..be9c7ba 100644 --- a/src/services/juxt-web/routes/console/show.js +++ b/src/services/juxt-web/routes/console/show.js @@ -2,7 +2,7 @@ var express = require('express'); var xml = require('object-to-xml'); const database = require('../../../../database'); const util = require('../../../../util'); -const config = require('../../../../config.json'); +const config = require('../../../../../config.json'); var moment = require('moment'); var router = express.Router(); diff --git a/src/services/juxt-web/routes/console/userpage.js b/src/services/juxt-web/routes/console/userpage.js index 1f9744a..6234c63 100644 --- a/src/services/juxt-web/routes/console/userpage.js +++ b/src/services/juxt-web/routes/console/userpage.js @@ -2,7 +2,7 @@ var express = require('express'); var xml = require('object-to-xml'); const database = require('../../../../database'); const util = require('../../../../util'); -const config = require('../../../../config.json'); +const config = require('../../../../../config.json'); var multer = require('multer'); var moment = require('moment'); var upload = multer({ dest: 'uploads/' }); diff --git a/src/services/juxt-web/routes/web/login.js b/src/services/juxt-web/routes/web/login.js index c2922eb..0f1fe52 100644 --- a/src/services/juxt-web/routes/web/login.js +++ b/src/services/juxt-web/routes/web/login.js @@ -4,7 +4,7 @@ var parseString = require('xml2js').parseString; const database = require('../../../../database'); const util = require('../../../../util'); var path = require('path'); -const config = require("../../../../config.json"); +const config = require("../../../../../config.json"); const request = require("request"); const logger = require("../../../../logger"); diff --git a/src/util.js b/src/util.js index fe1c729..bd5d78b 100644 --- a/src/util.js +++ b/src/util.js @@ -3,7 +3,7 @@ const NodeRSA = require('node-rsa'); const fs = require('fs-extra'); const database = require('./database'); const logger = require('./logger'); -const config = require('./config.json'); +const config = require('../config.json'); const { USER } = require('./models/user'); const translations = require('./translations') var HashMap = require('hashmap');