Merge branch 'feature/dockerize' into 'main'

Intermittent Merge

See merge request neshura-websites/www!2
This commit is contained in:
Neshura 2022-12-09 21:24:03 +00:00
commit 6f7e649783
6 changed files with 173 additions and 6085 deletions

View file

@ -26,7 +26,7 @@ RUN yarn build
FROM node:16-alpine AS runner
LABEL author="neshura@proton.me"
WORKDIR /usr/src/ap
WORKDIR /usr/src/app
ENV NODE_ENV production

5908
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -3,27 +3,24 @@
"version": "0.2.0",
"private": true,
"scripts": {
"dev:debug": "NODE_OPTIONS='--inspect' next dev -p 4040",
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@types/dockerode": "^3.3.14",
"@types/next": "^9.0.0",
"dockerode": "^3.3.4",
"next": "^12.3.0",
"node": "^18.9.0",
"node-html-parser": "^5.3.3",
"react": "18.2.0",
"react-dom": "18.2.0",
"swr": "^1.3.0"
},
"devDependencies": {
"@types/node": "^18.7.18",
"@types/react": "^18.0.14",
"eslint": "^8.23.1",
"eslint-config-next": "12.2.0",
"@types/dockerode": "^3.3.14",
"@types/react": "^18.0.14",
"typescript": "^4.7.4"
}
}

View file

@ -1,56 +0,0 @@
import fsPromises from 'fs/promises'
import path from 'path'
import type { NextApiRequest, NextApiResponse } from 'next'
import { CustomLink } from '../../interfaces/LinkTypes';
export default async function userHandler(req: NextApiRequest, res: NextApiResponse) {
const {
body: { ip, status, key },
method,
} = req
const filePath = path.join(process.cwd(), '/data/zomboid.json')
const jsonBuffer = await fsPromises.readFile(filePath)
const jsonData = JSON.parse(jsonBuffer.toString())
switch (method) {
case 'GET':
res.status(200).json(jsonData)
break
case 'PUT':
if (key == "#inFamous3") {
if (ip != jsonData.currentIP) {
jsonData.historicIP.unshift(jsonData.currentIP)
if (Object.keys(jsonData.historicIP).length > 10) {
jsonData.historicIP.pop()
}
jsonData.currentIP = ip
}
jsonData.status = status
modifyServerStatus(ip, status)
await fsPromises.writeFile(filePath, JSON.stringify(jsonData, null, 2))
res.status(200).json(jsonData)
}
else {
res.status(401).json("wrong key")
}
break
default:
res.setHeader('Allow', ['GET', 'PUT'])
res.status(405).end(`Method ${method} Not Allowed`)
}
}
async function modifyServerStatus(ip: String, status: String) {
const filePath = path.join(process.cwd(), '/confs/pages.json')
const jsonBuffer = await fsPromises.readFile(filePath)
const data = JSON.parse(jsonBuffer.toString())
data.servers.zomboid.ip = ip
data.servers.zomboid.status = status
await fsPromises.writeFile(filePath, JSON.stringify(data, null, 2))
return data
}

155
public/pages.json Normal file
View file

@ -0,0 +1,155 @@
{
"services": [
{
"name": "Nextcloud",
"href": "https://nextcloud.neshura-server.net",
"desc": "Self-hosted Cloud Storage Service",
"warn": "Note: Registration requires approval",
"type": "docker",
"docker_container_name": "nextcloud",
"location": "brr7-4800u"
},
{
"name": "Komga",
"href": "https://komga.neshura-server.net",
"desc": "Self-hosted Comic Library",
"warn": "Note: Registration only via Admin",
"type": "docker",
"docker_container_name": "komga",
"location": "brr7-4800u"
},
{
"name": "Calibre Web",
"href": "https://calibre.neshura-server.net/",
"desc": "Self-hosted Ebook Library Service",
"warn": "Note: Registration only via Admin",
"type": "app",
"location": "brr7-4800u"
},
{
"name": "PeerTube",
"href": "https://tube.neshura-server.net",
"desc": "Self-hosted PeerTube Instance",
"warn": "Note: Registration only via Admin",
"type": "docker",
"docker_container_name": "peertube",
"location": "brr7-4800u"
},
{
"name": "Mastodon",
"href": "https://mastodon.neshura-server.net",
"desc": "Self-hosted Mastodon Instance",
"warn": "Note: Registration requires approval",
"type": "docker",
"docker_container_name": "mastodon-web",
"location": "brr7-4800u"
},
{
"name": "File Browser",
"href": "https://files.neshura-server.net/",
"desc": "Server File Browser",
"warn": "Note: Registration only via Admin",
"type": "docker",
"docker_container_name": "filebrowser",
"location": "brr7-4800u"
},
{
"name": "Matrix",
"href": "https://matrix.neshura-server.net/",
"desc": "Open-Source, Decentralized Chat Protocol",
"warn": "Note: Registration only via Admin",
"type": "docker",
"docker_container_name": "synapse",
"location": "brr7-4800u"
},
{
"name": "Element",
"href": "https://element.neshura-server.net/",
"desc": "Matrix Chat Client",
"warn": "Note: Registration requires token",
"type": "docker",
"docker_container_name": "element",
"location": "brr7-4800u"
},
{
"name": "Jellyfin",
"href": "https://jellyfin.neshura-server.net/",
"desc": "Open-Source, Self-Hosted Media Platform",
"warn": "Note: Registration only via Admin",
"type": "docker",
"docker_container_name": "jellyfin",
"location": "brr7-4800u"
},
{
"name": "Navidrome",
"href": "https://navidrome.neshura-server.net/",
"desc": "Open-Source, Self-Hosted Music Streaming Platform",
"warn": "Note: Registration only via Admin",
"type": "docker",
"docker_container_name": "navidrome",
"location": "brr7-4800u"
},
{
"name": "Picard",
"href": "https://picard.neshura-server.net/",
"desc": "MP3 Tagger",
"warn": "Note: Access only via Admin",
"type": "docker",
"docker_container_name": "picard",
"location": "brr7-4800u"
},
{
"name": "Gitlab",
"href": "https://gitlab.neshura-server.net/",
"desc": "Self-hosted Git Service",
"warn": "Note: Registration only via Admin",
"type": "docker",
"docker_container_name": "gitlab",
"location": "brr7-4800u"
},
{
"name": "Portainer",
"href": "https://portainer.neshura-server.net/",
"desc": "Docker Container Manager",
"warn": "Note: Admin Only",
"type": "docker",
"docker_container_name": "portainer",
"location": "brr7-4800u"
},
{
"name": "Nginx Proxy Manager",
"href": "https://nginx.neshura-server.net/",
"desc": "Web-based Nginx Proxy Manager",
"warn": "Note: Admin Only",
"type": "docker",
"docker_container_name": "nginx-prox",
"location": "brr7-4800u"
},
{
"name": "Grafana",
"href": "https://monitoring.neshura-server.net/",
"desc": "Server Monitoring Utility",
"warn": "Note: Admin Only",
"type": "docker",
"docker_container_name": "grafana",
"location": "brr7-4800u"
}
],
"games": {
"minecraft": {
"name": "Minecraft",
"href": "https://minecraft.neshura-server.net/",
"desc": "View all currently available Minecraft Servers and their mods"
},
"ready_or_not": {
"name": "Ready or Not",
"href": "https://readyornot.neshura-server.net/",
"desc": "Collection of Floor Plans for the Game 'Ready or Not'"
},
"zomboid": {
"name": "Zomboid",
"ip": "91.13.248.30",
"status": "Online"
}
}
}

128
yarn.lock
View file

@ -192,32 +192,20 @@
resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz"
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
"@types/next@^9.0.0":
version "9.0.0"
resolved "https://registry.npmjs.org/@types/next/-/next-9.0.0.tgz"
integrity sha512-gnBXM8rP1mnCgT1uE2z8SnpFTKRWReJlhbZLZkOLq/CH1ifvTNwjIVtXvsywTy1dwVklf+y/MB0Eh6FOa94yrg==
dependencies:
next "*"
"@types/node@*":
version "18.11.9"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4"
integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==
"@types/node@^18.7.18":
version "18.7.18"
resolved "https://registry.npmjs.org/@types/node/-/node-18.7.18.tgz"
integrity sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==
version "18.11.12"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.12.tgz#89e7f8aa8c88abf432f9bd594888144d7dba10aa"
integrity sha512-FgD3NtTAKvyMmD44T07zz2fEf+OKwutgBCEVM8GcvMGVGaDktiLNTDvPwC/LUe3PinMW+X6CuLOF2Ui1mAlSXg==
"@types/prop-types@*":
version "15.7.5"
resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz"
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
"@types/react@^18.0.14":
version "18.0.18"
resolved "https://registry.npmjs.org/@types/react/-/react-18.0.18.tgz"
integrity sha512-6hI08umYs6NaiHFEEGioXnxJ+oEhY3eRz8VCUaudZmGdtvPviCJB8mgaMxaDWAdPSYd4eFavrPk2QIolwbLYrg==
version "18.0.26"
resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917"
integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==
dependencies:
"@types/prop-types" "*"
"@types/scheduler" "*"
@ -225,7 +213,7 @@
"@types/scheduler@*":
version "0.16.2"
resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz"
resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
"@types/ssh2@*":
@ -408,11 +396,6 @@ bl@^4.0.3:
inherits "^2.0.4"
readable-stream "^3.4.0"
boolbase@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz"
integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
@ -511,26 +494,10 @@ cross-spawn@^7.0.2:
shebang-command "^2.0.0"
which "^2.0.1"
css-select@^4.2.1:
version "4.3.0"
resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz"
integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==
dependencies:
boolbase "^1.0.0"
css-what "^6.0.1"
domhandler "^4.3.1"
domutils "^2.8.0"
nth-check "^2.0.1"
css-what@^6.0.1:
version "6.1.0"
resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz"
integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
csstype@^3.0.2:
version "3.1.0"
resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz"
integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==
version "3.1.1"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9"
integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==
damerau-levenshtein@^1.0.8:
version "1.0.8"
@ -611,36 +578,6 @@ doctrine@^3.0.0:
dependencies:
esutils "^2.0.2"
dom-serializer@^1.0.1:
version "1.4.1"
resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz"
integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==
dependencies:
domelementtype "^2.0.1"
domhandler "^4.2.0"
entities "^2.0.0"
domelementtype@^2.0.1, domelementtype@^2.2.0:
version "2.3.0"
resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz"
integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
domhandler@^4.2.0, domhandler@^4.3.1:
version "4.3.1"
resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz"
integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==
dependencies:
domelementtype "^2.2.0"
domutils@^2.8.0:
version "2.8.0"
resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz"
integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
dependencies:
dom-serializer "^1.0.1"
domelementtype "^2.2.0"
domhandler "^4.2.0"
emoji-regex@^9.2.2:
version "9.2.2"
resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz"
@ -653,11 +590,6 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1:
dependencies:
once "^1.4.0"
entities@^2.0.0:
version "2.2.0"
resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz"
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5:
version "1.20.2"
resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz"
@ -1128,11 +1060,6 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
he@1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
ieee754@^1.1.13:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
@ -1425,7 +1352,7 @@ natural-compare@^1.4.0:
resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
next@*, next@^12.3.0:
next@^12.3.0:
version "12.3.0"
resolved "https://registry.npmjs.org/next/-/next-12.3.0.tgz"
integrity sha512-GpzI6me9V1+XYtfK0Ae9WD0mKqHyzQlGq1xH1rzNIYMASo4Tkl4rTe9jSqtBpXFhOS33KohXs9ZY38Akkhdciw==
@ -1451,33 +1378,6 @@ next@*, next@^12.3.0:
"@next/swc-win32-ia32-msvc" "12.3.0"
"@next/swc-win32-x64-msvc" "12.3.0"
node-bin-setup@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/node-bin-setup/-/node-bin-setup-1.1.0.tgz#9df94c41335a8f41958a639b2736f860582a209c"
integrity sha512-pTeU6NgUrexiLNtd+AKwvg6cngHMvj5FZ5e2bbv2ogBSIc9yhkXSSaTScfSRZnwHIh5YFmYSYlemLWkiKD7rog==
node-html-parser@^5.3.3:
version "5.4.2"
resolved "https://registry.npmjs.org/node-html-parser/-/node-html-parser-5.4.2.tgz"
integrity sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==
dependencies:
css-select "^4.2.1"
he "1.2.0"
node@^18.9.0:
version "18.9.0"
resolved "https://registry.yarnpkg.com/node/-/node-18.9.0.tgz#e2dfeba8e0a04c6397371d5118f3e4ff918e2cd7"
integrity sha512-s+JrNt8qOeV2Uci4aYs7jsFSRXgko7jThozysqeZ2bJGp3PGaBKA+kpCCP+TDrg4TRcTLyw3bcHCJx9drxTQtQ==
dependencies:
node-bin-setup "^1.0.0"
nth-check@^2.0.1:
version "2.1.1"
resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz"
integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
dependencies:
boolbase "^1.0.0"
object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
@ -1656,7 +1556,7 @@ queue-microtask@^1.2.2:
react-dom@18.2.0:
version "18.2.0"
resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
dependencies:
loose-envify "^1.1.0"
@ -1756,7 +1656,7 @@ safer-buffer@~2.1.0:
scheduler@^0.23.0:
version "0.23.0"
resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
dependencies:
loose-envify "^1.1.0"