Setup deployment for Khufu

This commit is contained in:
Dunemask 2021-08-06 19:56:59 -06:00
parent 5d35d66713
commit 9bed3908d3
10 changed files with 101 additions and 39 deletions

View file

@ -1,10 +1,10 @@
FROM node:latest FROM node:latest
RUN apt-get update && apt-get upgrade -y RUN apt-get update && apt-get upgrade -y
RUN apt-get install libsass-dev build-essential -y
WORKDIR /dunestorm/khufu WORKDIR /dunestorm/khufu
COPY build /dunestorm/khufu/build/ COPY package.json .
RUN npm i -g serve RUN npm i --only=prod
COPY server server
COPY build build
ENV KHUFU_DEV_TOKEN $KHUFU_DEV_TOKEN ENV KHUFU_DEV_TOKEN $KHUFU_DEV_TOKEN
CMD ["serve", "-s", "build", "-l", "52026"] CMD ["npm", "start"]
# EXPOSE PORTS
EXPOSE 52026 EXPOSE 52026

33
docker-compose.yml Normal file
View file

@ -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

View file

@ -1,13 +1,17 @@
{ {
"name": "dunestash-frontend", "name": "khufu",
"version": "0.1.0", "version": "1.0.0",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@fortawesome/fontawesome-svg-core": "^1.2.35", "http-proxy-middleware": "^2.0.1",
"@fortawesome/free-brands-svg-icons": "^5.15.3", "express": "^4.17.1"
"@fortawesome/free-regular-svg-icons": "^5.15.3", },
"@fortawesome/free-solid-svg-icons": "^5.15.3", "devDependencies": {
"@fortawesome/react-fontawesome": "^0.1.14", "@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", "js-file-download": "^0.4.12",
"react": "^17.0.2", "react": "^17.0.2",
"react-axios": "^2.0.5", "react-axios": "^2.0.5",
@ -17,15 +21,12 @@
"react-router-dom": "^5.2.0", "react-router-dom": "^5.2.0",
"react-scripts": "^4.0.3", "react-scripts": "^4.0.3",
"react-toastify": "^7.0.4", "react-toastify": "^7.0.4",
"remove": "^0.1.5", "sass": "^1.37.5"
"sass": "^1.36.0",
"web-vitals": "^2.1.0"
}, },
"scripts": { "scripts": {
"start": "PORT=52026 react-scripts start", "start": "node server/main.js",
"build": "react-scripts build", "start:dev": "PORT=52026 react-scripts start",
"test": "react-scripts test", "build": "react-scripts build"
"eject": "react-scripts eject"
}, },
"eslintConfig": { "eslintConfig": {
"extends": [ "extends": [
@ -44,8 +45,5 @@
"last 1 firefox version", "last 1 firefox version",
"last 1 safari version" "last 1 safari version"
] ]
},
"devDependencies": {
"serve": "^12.0.0"
} }
} }

10
server/main.js Normal file
View file

@ -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}! 🌴`));

View file

@ -6,7 +6,7 @@ import "react-toastify/dist/ReactToastify.css";
import Stash from "./Stash"; import Stash from "./Stash";
//Constants //Constants
const token = const token =
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1dWlkIjoiYmVjYWNjNjdhNmRjLTBlN2QtMDBlNi1jYmVhLWVhZGNlYmUxIiwiaWF0IjoxNjI3MTcxMDU1LCJleHAiOjE2Mjk3NjMwNTV9.zqiHrYnJlB7ozwjMnpgVUsBAt9vfLHLICFgWB0MguLA"; "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYxMDhiMjI1ODBmYWEwMDAxMzQwZDdjMiIsImVtYWlsIjoiZHVuZXFhK3VzZXJAZ21haWwuY29tIiwiaXAiOiI6OmZmZmY6MTkyLjE2OC4yMjQuMSIsImlhdCI6MTYyNzk1OTg0NSwiZXhwIjoxNjMwNTUxODQ1fQ.mGybyFVxGzQ0cSIU4oE-RQpkQM45kIGHVFNAQmwsvvk";
localStorage.setItem("authToken", token); localStorage.setItem("authToken", token);
class App extends React.Component { class App extends React.Component {
render() { render() {

View file

@ -6,10 +6,10 @@ import { toast } from "react-toastify";
import Stashbar from "./stash/Stashbar"; import Stashbar from "./stash/Stashbar";
import StashUpload from "./stash/StashUpload"; import StashUpload from "./stash/StashUpload";
import StashContextMenu from "./stash/StashContextMenu"; import StashContextMenu from "./stash/StashContextMenu";
import { serverUrls, serverAddress } from "./stash/api.json"; import { serverUrls} from "./stash/api.json";
import "./stash/scss/Stash.scss"; import "./stash/scss/Stash.scss";
//Constants //Constants
const filesUrl = `${serverAddress}/${serverUrls.GET.filesUrl}`; const filesUrl = `${serverUrls.GET.filesUrl}`;
//Class //Class
const getConfig = () => ({ const getConfig = () => ({
headers: { headers: {

23
src/setupProxy.js Normal file
View file

@ -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",
})
);
};

View file

@ -12,11 +12,11 @@ import {
} from "@fortawesome/free-solid-svg-icons"; } from "@fortawesome/free-solid-svg-icons";
//Local Imports //Local Imports
import "./scss/stash/StashContextMenu.scss"; import "./scss/stash/StashContextMenu.scss";
import { serverUrls, serverAddress } from "./api.json"; import { serverUrls } from "./api.json";
//Constants //Constants
const downloadUrl = `${serverAddress}/${serverUrls.POST.downloadUrl}`; const downloadUrl = `${serverUrls.POST.downloadUrl}`;
const deleteUrl = `${serverAddress}/${serverUrls.POST.deleteUrl}`; const deleteUrl = `${serverUrls.POST.deleteUrl}`;
const publicUrl = `${serverAddress}/${serverUrls.POST.publicUrl}`; const publicUrl = `${serverUrls.POST.publicUrl}`;
function getConfig() { function getConfig() {
var authToken = localStorage.getItem("authToken"); var authToken = localStorage.getItem("authToken");

View file

@ -6,8 +6,8 @@ import { toast } from "react-toastify";
import StashDropzone from "./StashDropzone"; import StashDropzone from "./StashDropzone";
import StashUploadDialog from "./uploader/StashUploadDialog"; import StashUploadDialog from "./uploader/StashUploadDialog";
//Constants //Constants
import { serverUrls, serverFields, serverAddress } from "./api.json"; import { serverUrls, serverFields } from "./api.json";
const uploadUrl = `${serverAddress}/${serverUrls.POST.uploadUrl}`; const uploadUrl = `${serverUrls.POST.uploadUrl}`;
const uploadField = serverFields.uploadField; const uploadField = serverFields.uploadField;
const cancelMessage = "User Canceled"; const cancelMessage = "User Canceled";
const successClearTime = 200; const successClearTime = 200;

View file

@ -1,16 +1,14 @@
{ {
"serverAddress": "http://nubian.dunestorm.net:52001",
"serverUrls": { "serverUrls": {
"POST": { "POST": {
"uploadUrl": "api/stash/upload", "uploadUrl": "/api/nubian/stash/upload",
"downloadUrl": "api/stash/download", "downloadUrl": "/api/nubian/stash/download",
"deleteUrl": "api/stash/delete", "deleteUrl": "/api/nubian/stash/delete",
"publicUrl": "api/stash/public" "publicUrl": "/api/nubian/stash/public"
}, },
"GET": { "GET": {
"filesUrl": "api/stash/files", "filesUrl": "/api/nubian/stash/files",
"rawUrl": "api/stash/raw", "rawUrl": "/api/nubian/stash/raw"
"avatar": "api/user/avatar"
} }
}, },
"serverFields": { "serverFields": {