From 9bed3908d39e546462a7415ac91e5f74e4a98db5 Mon Sep 17 00:00:00 2001 From: Dunemask Date: Fri, 6 Aug 2021 19:56:59 -0600 Subject: [PATCH] Setup deployment for Khufu --- Dockerfile | 10 +++++----- docker-compose.yml | 33 +++++++++++++++++++++++++++++++++ package.json | 32 +++++++++++++++----------------- server/main.js | 10 ++++++++++ src/App.js | 2 +- src/Stash.jsx | 4 ++-- src/setupProxy.js | 23 +++++++++++++++++++++++ src/stash/StashContextMenu.jsx | 8 ++++---- src/stash/StashUpload.jsx | 4 ++-- src/stash/api.json | 14 ++++++-------- 10 files changed, 101 insertions(+), 39 deletions(-) create mode 100644 docker-compose.yml create mode 100644 server/main.js create mode 100644 src/setupProxy.js diff --git a/Dockerfile b/Dockerfile index bf311e9..0e9a77e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,10 @@ FROM node:latest RUN apt-get update && apt-get upgrade -y -RUN apt-get install libsass-dev build-essential -y WORKDIR /dunestorm/khufu -COPY build /dunestorm/khufu/build/ -RUN npm i -g serve +COPY package.json . +RUN npm i --only=prod +COPY server server +COPY build build ENV KHUFU_DEV_TOKEN $KHUFU_DEV_TOKEN -CMD ["serve", "-s", "build", "-l", "52026"] -# EXPOSE PORTS +CMD ["npm", "start"] EXPOSE 52026 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..a6a084c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,33 @@ +version: "3" +services: + cairo.dunestorm.net: + image: cairo.dunestorm.net + ports: + - "52000:52000" + environment: + - ALEXANDRIA_DATABASE_PASSWORD=${ALEXANDRIA_DATABASE_PASSWORD} + + nubian.dunestorm.net: + image: nubian.dunestorm.net + ports: + - "52001:52001" + environment: + - ALEXANDRIA_DATABASE_PASSWORD=${ALEXANDRIA_DATABASE_PASSWORD} + + khufu.dunestorm.net: + image: khufu.dunestorm.net + build: . + ports: + - "80:52026" + + alexandria.dunestorm.net: + image: mongo + environment: + - MONGO_INITDB_ROOT_USERNAME=admin + - MONGO_INITDB_ROOT_PASSWORD=${ALEXANDRIA_DATABASE_PASSWORD} + volumes: + - /home/dunemask/Documents/dev/Dunestorm/mongodb/database:/data/db + ports: + - "27017:27017" + restart: unless-stopped + command: --quiet diff --git a/package.json b/package.json index b551e11..142c426 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,17 @@ { - "name": "dunestash-frontend", - "version": "0.1.0", + "name": "khufu", + "version": "1.0.0", "private": true, "dependencies": { - "@fortawesome/fontawesome-svg-core": "^1.2.35", - "@fortawesome/free-brands-svg-icons": "^5.15.3", - "@fortawesome/free-regular-svg-icons": "^5.15.3", - "@fortawesome/free-solid-svg-icons": "^5.15.3", - "@fortawesome/react-fontawesome": "^0.1.14", + "http-proxy-middleware": "^2.0.1", + "express": "^4.17.1" + }, + "devDependencies": { + "@fortawesome/fontawesome-svg-core": "^1.2.36", + "@fortawesome/free-brands-svg-icons": "^5.15.4", + "@fortawesome/free-regular-svg-icons": "^5.15.4", + "@fortawesome/free-solid-svg-icons": "^5.15.4", + "@fortawesome/react-fontawesome": "^0.1.15", "js-file-download": "^0.4.12", "react": "^17.0.2", "react-axios": "^2.0.5", @@ -17,15 +21,12 @@ "react-router-dom": "^5.2.0", "react-scripts": "^4.0.3", "react-toastify": "^7.0.4", - "remove": "^0.1.5", - "sass": "^1.36.0", - "web-vitals": "^2.1.0" + "sass": "^1.37.5" }, "scripts": { - "start": "PORT=52026 react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" + "start": "node server/main.js", + "start:dev": "PORT=52026 react-scripts start", + "build": "react-scripts build" }, "eslintConfig": { "extends": [ @@ -44,8 +45,5 @@ "last 1 firefox version", "last 1 safari version" ] - }, - "devDependencies": { - "serve": "^12.0.0" } } diff --git a/server/main.js b/server/main.js new file mode 100644 index 0000000..d165d17 --- /dev/null +++ b/server/main.js @@ -0,0 +1,10 @@ +const express = require("express"); +const { createProxyMiddleware } = require("http-proxy-middleware"); +const port = process.env.PORT || 52026; +const cairoUrl = process.env.CAIRO_URL || "http://cairo.dunestorm.net:52000"; +const nubianUrl = process.env.NUBIAN_URL || "http://nubian.dunestorm.net:52001"; +const app = express(); +app.use("/", express.static("build")); +app.use("/api/cairo", createProxyMiddleware({ target: cairoUrl })); +app.use("/api/nubian", createProxyMiddleware({ target: nubianUrl })); +app.listen(port, () => console.log(`🌴 Nile server started on ${port}! 🌴`)); diff --git a/src/App.js b/src/App.js index 98fddf0..2c525be 100644 --- a/src/App.js +++ b/src/App.js @@ -6,7 +6,7 @@ import "react-toastify/dist/ReactToastify.css"; import Stash from "./Stash"; //Constants const token = - "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1dWlkIjoiYmVjYWNjNjdhNmRjLTBlN2QtMDBlNi1jYmVhLWVhZGNlYmUxIiwiaWF0IjoxNjI3MTcxMDU1LCJleHAiOjE2Mjk3NjMwNTV9.zqiHrYnJlB7ozwjMnpgVUsBAt9vfLHLICFgWB0MguLA"; + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYxMDhiMjI1ODBmYWEwMDAxMzQwZDdjMiIsImVtYWlsIjoiZHVuZXFhK3VzZXJAZ21haWwuY29tIiwiaXAiOiI6OmZmZmY6MTkyLjE2OC4yMjQuMSIsImlhdCI6MTYyNzk1OTg0NSwiZXhwIjoxNjMwNTUxODQ1fQ.mGybyFVxGzQ0cSIU4oE-RQpkQM45kIGHVFNAQmwsvvk"; localStorage.setItem("authToken", token); class App extends React.Component { render() { diff --git a/src/Stash.jsx b/src/Stash.jsx index 094c65b..3b876e9 100644 --- a/src/Stash.jsx +++ b/src/Stash.jsx @@ -6,10 +6,10 @@ import { toast } from "react-toastify"; import Stashbar from "./stash/Stashbar"; import StashUpload from "./stash/StashUpload"; import StashContextMenu from "./stash/StashContextMenu"; -import { serverUrls, serverAddress } from "./stash/api.json"; +import { serverUrls} from "./stash/api.json"; import "./stash/scss/Stash.scss"; //Constants -const filesUrl = `${serverAddress}/${serverUrls.GET.filesUrl}`; +const filesUrl = `${serverUrls.GET.filesUrl}`; //Class const getConfig = () => ({ headers: { diff --git a/src/setupProxy.js b/src/setupProxy.js new file mode 100644 index 0000000..65fccaa --- /dev/null +++ b/src/setupProxy.js @@ -0,0 +1,23 @@ +const { createProxyMiddleware } = require("http-proxy-middleware"); +const cairoUrl = + process.env.CAIRO_URL || "http://cairo.dunestorm.net:52000"; +const nubianUrl = + process.env.NUBIAN_URL || "http://nubian.dunestorm.net:52001"; +module.exports = (app) => { + // Cairo Proxy + app.use( + "/api/cairo", + createProxyMiddleware({ + target: cairoUrl, + // logLevel: "silent", + }) + ); + // Nubian Proxy + app.use( + "/api/nubian", + createProxyMiddleware({ + target: nubianUrl, + // logLevel: "silent", + }) + ); +}; diff --git a/src/stash/StashContextMenu.jsx b/src/stash/StashContextMenu.jsx index d932117..95ffd6a 100644 --- a/src/stash/StashContextMenu.jsx +++ b/src/stash/StashContextMenu.jsx @@ -12,11 +12,11 @@ import { } from "@fortawesome/free-solid-svg-icons"; //Local Imports import "./scss/stash/StashContextMenu.scss"; -import { serverUrls, serverAddress } from "./api.json"; +import { serverUrls } from "./api.json"; //Constants -const downloadUrl = `${serverAddress}/${serverUrls.POST.downloadUrl}`; -const deleteUrl = `${serverAddress}/${serverUrls.POST.deleteUrl}`; -const publicUrl = `${serverAddress}/${serverUrls.POST.publicUrl}`; +const downloadUrl = `${serverUrls.POST.downloadUrl}`; +const deleteUrl = `${serverUrls.POST.deleteUrl}`; +const publicUrl = `${serverUrls.POST.publicUrl}`; function getConfig() { var authToken = localStorage.getItem("authToken"); diff --git a/src/stash/StashUpload.jsx b/src/stash/StashUpload.jsx index fcebfd5..9c70d70 100644 --- a/src/stash/StashUpload.jsx +++ b/src/stash/StashUpload.jsx @@ -6,8 +6,8 @@ import { toast } from "react-toastify"; import StashDropzone from "./StashDropzone"; import StashUploadDialog from "./uploader/StashUploadDialog"; //Constants -import { serverUrls, serverFields, serverAddress } from "./api.json"; -const uploadUrl = `${serverAddress}/${serverUrls.POST.uploadUrl}`; +import { serverUrls, serverFields } from "./api.json"; +const uploadUrl = `${serverUrls.POST.uploadUrl}`; const uploadField = serverFields.uploadField; const cancelMessage = "User Canceled"; const successClearTime = 200; diff --git a/src/stash/api.json b/src/stash/api.json index 29c3d4e..7f69f80 100644 --- a/src/stash/api.json +++ b/src/stash/api.json @@ -1,16 +1,14 @@ { - "serverAddress": "http://nubian.dunestorm.net:52001", "serverUrls": { "POST": { - "uploadUrl": "api/stash/upload", - "downloadUrl": "api/stash/download", - "deleteUrl": "api/stash/delete", - "publicUrl": "api/stash/public" + "uploadUrl": "/api/nubian/stash/upload", + "downloadUrl": "/api/nubian/stash/download", + "deleteUrl": "/api/nubian/stash/delete", + "publicUrl": "/api/nubian/stash/public" }, "GET": { - "filesUrl": "api/stash/files", - "rawUrl": "api/stash/raw", - "avatar": "api/user/avatar" + "filesUrl": "/api/nubian/stash/files", + "rawUrl": "/api/nubian/stash/raw" } }, "serverFields": {