@underpostnet/cyberia 3.3.0 → 3.3.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +1 -0
- package/.github/workflows/coverall.cyberia.ci.yml +34 -14
- package/.github/workflows/cyberia-client.cd.yml +5 -0
- package/.github/workflows/cyberia-server.cd.yml +5 -0
- package/.github/workflows/docker-image.cyberia-client.ci.yml +8 -5
- package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +8 -3
- package/.github/workflows/docker-image.cyberia-server.ci.yml +8 -5
- package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +8 -5
- package/.github/workflows/docker-image.engine-cyberia.ci.yml +15 -1
- package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +15 -1
- package/.github/workflows/engine-cyberia.cd.yml +3 -0
- package/.github/workflows/engine-cyberia.ci.yml +4 -5
- package/.github/workflows/ghpkg.ci.yml +35 -20
- package/.github/workflows/hardhat.ci.yml +12 -11
- package/.github/workflows/npmpkg.ci.yml +17 -15
- package/.github/workflows/pwa-microservices-template-test.ci.yml +2 -2
- package/.github/workflows/release.cd.yml +1 -0
- package/.prettierignore +1 -0
- package/AGENTS.md +47 -0
- package/CHANGELOG.md +565 -2510
- package/CLI-HELP.md +306 -147
- package/Dockerfile +25 -9
- package/Dockerfile.dev +25 -9
- package/Dockerfile.test +4 -4
- package/README.md +21 -1
- package/bin/build.js +66 -41
- package/bin/build.template.js +8 -3
- package/bin/cyberia.js +308 -91
- package/bin/deploy.js +18 -104
- package/bin/index.js +308 -91
- package/conf.js +91 -4
- package/deploy/cyberia-client/deploy.sh +47 -0
- package/deploy/cyberia-client/package.sh +18 -0
- package/deploy/cyberia-client/state.sh +14 -0
- package/deploy/cyberia-server/deploy.sh +47 -0
- package/deploy/cyberia-server/package.sh +18 -0
- package/deploy/cyberia-server/state.sh +14 -0
- package/deploy/dd-cyberia/deploy.sh +6 -26
- package/deploy/dd-cyberia/init.sh +35 -43
- package/deploy/dd-cyberia/package.sh +17 -0
- package/deploy/dd-cyberia/state.sh +14 -0
- package/deploy/dd-cyberia/sync-deploy.sh +92 -170
- package/deploy/lib/github-actions-logging.sh +594 -0
- package/deploy/lib/host.sh +185 -0
- package/deploy/lib/state.sh +62 -0
- package/deploy/pwa-microservices-template/deploy.sh +12 -39
- package/deploy/release/deploy.sh +9 -39
- package/deployment.yaml +7 -2
- package/docker-compose.yml +7 -7
- package/examples/static-page/README.md +19 -19
- package/examples/static-page/ssr-components/CustomPage.js +2 -2
- package/hardhat/hardhat.config.js +1 -6
- package/hardhat/package-lock.json +101 -40
- package/hardhat/package.json +2 -2
- package/manifests/alertmanager/deployment.yaml +81 -0
- package/manifests/blackbox-exporter/deployment.yaml +75 -0
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +32 -7
- package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +32 -7
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +7 -2
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/grafana/deployment.yaml +26 -7
- package/manifests/grafana/kustomization.yaml +1 -0
- package/manifests/grafana/service.yaml +6 -1
- package/manifests/mariadb/pv.yaml +1 -0
- package/manifests/mongodb/statefulset.yaml +9 -2
- package/manifests/mysql/pv-pvc.yaml +14 -1
- package/manifests/postgresql/pv.yaml +12 -1
- package/manifests/postgresql/pvc.yaml +1 -0
- package/manifests/prometheus/deployment.yaml +18 -22
- package/package.json +83 -10
- package/scripts/event-monitor.sh +56 -0
- package/scripts/k3s-node-setup.sh +27 -14
- package/scripts/kubeadm-node-setup.sh +31 -11
- package/scripts/maas-setup.sh +8 -8
- package/scripts/selinux-normalize.sh +907 -0
- package/scripts/shutdown-machine.sh +843 -0
- package/scripts/test-monitor.sh +3 -3
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +1 -1
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +2 -2
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +2 -2
- package/src/api/core/core.controller.js +1 -1
- package/src/api/core/core.router.js +2 -2
- package/src/api/core/core.service.js +2 -2
- package/src/api/crypto/crypto.controller.js +1 -1
- package/src/api/crypto/crypto.service.js +1 -1
- package/src/api/cyberia-action/cyberia-action.controller.js +1 -1
- package/src/api/cyberia-action/cyberia-action.router.js +1 -1
- package/src/api/cyberia-action/cyberia-action.service.js +2 -2
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +1 -1
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +1 -1
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +2 -2
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +1 -1
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +1 -1
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +2 -2
- package/src/api/cyberia-entity/cyberia-entity.controller.js +1 -1
- package/src/api/cyberia-entity/cyberia-entity.router.js +1 -1
- package/src/api/cyberia-entity/cyberia-entity.service.js +2 -2
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +1 -1
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +1 -1
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +2 -2
- package/src/api/cyberia-instance/cyberia-fallback-capture.js +466 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +8 -0
- package/src/api/cyberia-instance/cyberia-instance-map.service.js +1 -1
- package/src/api/cyberia-instance/cyberia-instance.controller.js +1 -1
- package/src/api/cyberia-instance/cyberia-instance.router.js +2 -2
- package/src/api/cyberia-instance/cyberia-instance.service.js +2 -2
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +1 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +1 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +2 -2
- package/src/api/cyberia-map/cyberia-map.controller.js +1 -1
- package/src/api/cyberia-map/cyberia-map.router.js +1 -1
- package/src/api/cyberia-map/cyberia-map.service.js +2 -2
- package/src/api/cyberia-quest/cyberia-quest.controller.js +1 -1
- package/src/api/cyberia-quest/cyberia-quest.router.js +1 -1
- package/src/api/cyberia-quest/cyberia-quest.service.js +2 -2
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +1 -1
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +1 -1
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +2 -2
- package/src/api/cyberia-saga/cyberia-saga.controller.js +1 -1
- package/src/api/cyberia-saga/cyberia-saga.router.js +1 -1
- package/src/api/cyberia-saga/cyberia-saga.service.js +2 -2
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +0 -26
- package/src/api/cyberia-skill/cyberia-skill.controller.js +1 -1
- package/src/api/cyberia-skill/cyberia-skill.router.js +1 -1
- package/src/api/cyberia-skill/cyberia-skill.service.js +2 -2
- package/src/api/default/default.controller.js +1 -1
- package/src/api/default/default.router.js +1 -1
- package/src/api/default/default.service.js +2 -2
- package/src/api/document/document.controller.js +1 -1
- package/src/api/document/document.router.js +1 -1
- package/src/api/document/document.service.js +2 -2
- package/src/api/file/file.controller.js +1 -1
- package/src/api/file/file.router.js +1 -1
- package/src/api/file/file.service.js +2 -2
- package/src/api/instance/instance.controller.js +1 -1
- package/src/api/instance/instance.router.js +1 -1
- package/src/api/instance/instance.service.js +2 -2
- package/src/api/ipfs/ipfs.controller.js +1 -1
- package/src/api/ipfs/ipfs.router.js +2 -2
- package/src/api/ipfs/ipfs.service.js +2 -2
- package/src/api/object-layer/object-layer.controller.js +1 -1
- package/src/api/object-layer/object-layer.router.js +2 -2
- package/src/api/object-layer/object-layer.service.js +3 -3
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +1 -1
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +1 -1
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +2 -2
- package/src/api/test/test.controller.js +1 -1
- package/src/api/test/test.service.js +1 -1
- package/src/api/user/guest.service.js +3 -3
- package/src/api/user/user.controller.js +1 -1
- package/src/api/user/user.router.js +2 -2
- package/src/api/user/user.service.js +4 -4
- package/src/api.js +5 -9
- package/src/cli/app.js +391 -0
- package/src/cli/baremetal.js +30 -35
- package/src/cli/client.js +306 -0
- package/src/cli/cloud-init.js +3 -3
- package/src/cli/cluster.js +184 -82
- package/src/cli/db.js +120 -68
- package/src/cli/deploy.js +153 -71
- package/src/cli/docker-compose.js +5 -5
- package/src/cli/domains.js +184 -0
- package/src/cli/dotenv-store.js +143 -0
- package/src/cli/event.js +2281 -0
- package/src/cli/fs.js +3 -3
- package/src/cli/host.js +672 -0
- package/src/cli/image.js +4 -6
- package/src/cli/index.js +322 -142
- package/src/cli/ipfs.js +34 -30
- package/src/cli/kickstart.js +1 -1
- package/src/cli/kubectl.js +218 -41
- package/src/cli/lxd.js +3 -3
- package/src/cli/monitor.js +1359 -26
- package/src/cli/package.js +90 -0
- package/src/cli/release.js +16 -12
- package/src/cli/repository.js +558 -363
- package/src/cli/run.js +331 -650
- package/src/cli/secrets.js +2158 -964
- package/src/cli/ssh.js +478 -279
- package/src/cli/state.js +394 -0
- package/src/cli/static.js +2 -2
- package/src/cli/system.js +1 -1
- package/src/cli/test.js +199 -125
- package/src/cli/vultr.js +61 -21
- package/src/cli/wireguard.js +1111 -306
- package/src/client/components/core/CalendarCore.js +53 -96
- package/src/client/components/core/Docs.js +258 -211
- package/src/client/components/core/FileExplorer.js +0 -21
- package/src/client/components/core/PanelForm.js +4 -4
- package/src/client/components/core/Repository.js +56 -0
- package/src/client/components/core/Translate.js +7 -0
- package/src/client/components/core/{FullScreen.js → ViewModeController.js} +42 -39
- package/src/client/components/core/Wallet.js +0 -11
- package/src/client/components/core/Worker.js +7 -1
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +2 -2
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +2 -1
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +2 -2
- package/src/client/components/default/AppShellDefault.js +1 -1
- package/src/client/components/default/SettingsDefault.js +2 -2
- package/src/client/components/itemledger/SettingsItemledger.js +2 -2
- package/src/client/components/underpost/AppShellUnderpost.js +3 -2
- package/src/client/components/underpost/SettingsUnderpost.js +2 -2
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +32 -5
- package/src/client/public/cyberia-docs/CYBERIA.md +21 -1
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +23 -6
- package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
- package/src/client/public/default/android-chrome-144x144.png +0 -0
- package/src/client/public/default/android-chrome-192x192.png +0 -0
- package/src/client/public/default/android-chrome-256x256.png +0 -0
- package/src/client/public/default/android-chrome-36x36.png +0 -0
- package/src/client/public/default/android-chrome-384x384.png +0 -0
- package/src/client/public/default/android-chrome-48x48.png +0 -0
- package/src/client/public/default/android-chrome-512x512.png +0 -0
- package/src/client/public/default/android-chrome-72x72.png +0 -0
- package/src/client/public/default/android-chrome-96x96.png +0 -0
- package/src/client/public/default/apple-touch-icon-1024x1024.png +0 -0
- package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/default/apple-touch-icon-167x167.png +0 -0
- package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1125x2436.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1136x640.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1170x2532.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1179x2556.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1242x2208.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1242x2688.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1284x2778.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1290x2796.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1334x750.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1488x2266.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1536x2048.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1620x2160.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1640x2160.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1668x2224.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1668x2388.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1792x828.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2048x1536.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2048x2732.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2160x1620.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2160x1640.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2208x1242.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2224x1668.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2266x1488.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2388x1668.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2436x1125.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2532x1170.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2556x1179.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2688x1242.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2732x2048.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2778x1284.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2796x1290.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-640x1136.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-750x1334.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-828x1792.png +0 -0
- package/src/client/public/default/assets/background/white.jpg +0 -0
- package/src/client/public/default/browserconfig.xml +1 -1
- package/src/client/public/default/favicon-16x16.png +0 -0
- package/src/client/public/default/favicon-32x32.png +0 -0
- package/src/client/public/default/favicon-48x48.png +0 -0
- package/src/client/public/default/favicon.ico +0 -0
- package/src/client/public/default/manifest.webmanifest +5 -5
- package/src/client/public/default/mstile-144x144.png +0 -0
- package/src/client/public/default/mstile-150x150.png +0 -0
- package/src/client/public/default/mstile-310x150.png +0 -0
- package/src/client/public/default/mstile-310x310.png +0 -0
- package/src/client/public/default/mstile-70x70.png +0 -0
- package/src/client/public/default/yandex-browser-50x50.png +0 -0
- package/src/client/public/default/yandex-browser-manifest.json +1 -1
- package/src/client/ssr/RootDocument.js +1 -1
- package/src/client/ssr/body/404.js +1 -1
- package/src/client/ssr/body/500.js +1 -1
- package/src/client/ssr/body/CacheControl.js +1 -1
- package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +1 -1
- package/src/client/ssr/body/DefaultSplashScreen.js +1 -1
- package/src/client/ssr/body/SwaggerDarkMode.js +1 -1
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +1 -1
- package/src/client/ssr/head/CryptokoynScripts.js +1 -1
- package/src/client/ssr/head/Css.js +1 -1
- package/src/client/ssr/head/CyberiaPortalScripts.js +1 -1
- package/src/client/ssr/head/DefaultScripts.js +1 -1
- package/src/client/ssr/head/ItemledgerScripts.js +1 -1
- package/src/client/ssr/head/Microdata.js +1 -1
- package/src/client/ssr/head/Production.js +1 -1
- package/src/client/ssr/head/Pwa.js +1 -1
- package/src/client/ssr/head/PwaItemledger.js +1 -1
- package/src/client/ssr/head/Seo.js +1 -1
- package/src/client/ssr/head/UnderpostScripts.js +1 -1
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +1 -1
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +1 -1
- package/src/client/ssr/views/Cyberia404.js +7 -5
- package/src/client/ssr/views/CyberiaServerMetrics.js +1 -1
- package/src/client/ssr/views/Maintenance.js +1 -1
- package/src/client/ssr/views/NoNetworkConnection.js +1 -1
- package/src/client/ssr/views/Test.js +1 -1
- package/src/client/sw/core.sw.js +20 -14
- package/src/client-builder/client-build-docs.js +61 -46
- package/src/client-builder/client-build-live.js +2 -2
- package/src/client-builder/client-build.js +38 -30
- package/src/client-builder/client-dev-server.js +3 -3
- package/src/client-builder/client-icons.js +2 -2
- package/src/client-builder/ssr.js +3 -3
- package/src/client.build.js +3 -6
- package/src/client.dev.js +3 -6
- package/src/db/DataBaseProvider.js +186 -3
- package/src/db/mariadb/MariaDB.js +3 -2
- package/src/db/mongo/MongoBootstrap.js +273 -101
- package/src/db/mongo/MongooseDB.js +7 -8
- package/src/{server/valkey.js → db/valkey/Valkey.js} +5 -4
- package/src/grpc/cyberia/grpc-server.js +1 -1
- package/src/index.js +79 -23
- package/src/mailer/EmailRender.js +2 -2
- package/src/mailer/MailerInterceptor.js +87 -0
- package/src/mailer/MailerProvider.js +50 -6
- package/src/projects/cyberia/atlas-sprite-sheet-generator.js +1 -1
- package/src/projects/cyberia/besu-genesis-generator.js +3 -3
- package/src/projects/cyberia/catalog-cyberia.js +53 -10
- package/src/projects/cyberia/gemini-client.js +1 -1
- package/src/projects/cyberia/generate-saga.js +1 -1
- package/src/projects/cyberia/hot-reload-trigger.js +1 -1
- package/src/projects/cyberia/instance-data.js +1 -1
- package/src/projects/cyberia/ipfs-client.js +4 -4
- package/src/projects/cyberia/map-preview-generator.js +1 -1
- package/src/projects/cyberia/object-layer.js +1 -1
- package/src/projects/cyberia/semantic-layer-generator.js +1 -1
- package/src/projects/underpost/catalog-underpost.js +9 -1
- package/src/proxy.js +4 -7
- package/src/runtime/cyberia-client/Dockerfile +9 -4
- package/src/runtime/cyberia-client/Dockerfile.dev +8 -2
- package/src/runtime/cyberia-server/Dockerfile +9 -4
- package/src/runtime/cyberia-server/Dockerfile.dev +8 -2
- package/src/runtime/engine-cyberia/Dockerfile +25 -9
- package/src/runtime/engine-cyberia/Dockerfile.dev +25 -9
- package/src/runtime/engine-cyberia/Dockerfile.test +4 -4
- package/src/runtime/engine-cyberia/docker-compose.yml +7 -7
- package/src/runtime/express/Express.js +32 -27
- package/src/runtime/lampp/Lampp.js +22 -70
- package/src/runtime/nginx/Nginx.js +1 -1
- package/src/runtime/wp/Wp.js +16 -48
- package/src/server/{catalog.js → build/catalog.js} +15 -5
- package/src/server/build/coverage.js +117 -0
- package/src/server/build/execution.js +402 -0
- package/src/server/build/package.js +465 -0
- package/src/server/build/testing.js +528 -0
- package/src/server/{dns.js → network/dns.js} +144 -11
- package/src/server/{forward-proxy.js → network/forward-proxy.js} +10 -18
- package/src/server/{middlewares.js → network/middlewares.js} +3 -3
- package/src/server/network/node-capability.js +98 -0
- package/src/server/{peer.js → network/peer.js} +3 -3
- package/src/server/{proxy.js → network/proxy.js} +7 -13
- package/src/server/network/router.js +356 -0
- package/src/server/{tls.js → network/tls.js} +2 -2
- package/src/server/{underpost-compression.js → network/underpost-compression.js} +1 -1
- package/src/server/{underpost-gateway.js → network/underpost-gateway.js} +7 -7
- package/src/server/{underpost-ingress.js → network/underpost-ingress.js} +2 -2
- package/src/server/{cri.js → ops/cri.js} +2 -2
- package/src/server/{cron.js → ops/cron.js} +349 -74
- package/src/server/ops/event-notification.js +284 -0
- package/src/server/{logger.js → ops/logger.js} +108 -23
- package/src/server/ops/monitoring.js +1724 -0
- package/src/server/{systemd.js → ops/systemd.js} +55 -1
- package/src/server/{conf.js → runtime/conf.js} +513 -422
- package/src/server/runtime/config-scope.js +215 -0
- package/src/server/runtime/environment.js +149 -0
- package/src/server/{process.js → runtime/process.js} +153 -12
- package/src/server/{runtime-status.js → runtime/runtime-status.js} +155 -16
- package/src/server/{runtime.js → runtime/runtime.js} +12 -8
- package/src/server/{start.js → runtime/start.js} +128 -39
- package/src/server/{auth.js → security/auth.js} +7 -8
- package/src/server/security/container-storage.js +382 -0
- package/src/server/{crypto.js → security/crypto.js} +1 -1
- package/src/server/{selinux.js → security/selinux.js} +1 -1
- package/src/server/{backup.js → storage/backup.js} +17 -8
- package/src/server/{data-query.js → storage/data-query.js} +1 -1
- package/src/server/{downloader.js → storage/downloader.js} +2 -2
- package/src/server/storage/repository.js +68 -0
- package/src/server.js +4 -7
- package/src/ws/IoInterface.js +1 -1
- package/src/ws/IoServer.js +1 -1
- package/src/ws/core/core.ws.connection.js +1 -1
- package/src/ws/core/core.ws.emit.js +1 -1
- package/src/ws/core/core.ws.server.js +1 -1
- package/src/ws/default/default.ws.connection.js +1 -1
- package/src/ws/default/default.ws.emit.js +1 -1
- package/src/ws/default/default.ws.server.js +1 -1
- package/test/e2e/event-e2e-public-ingress-down.js +45 -0
- package/test/e2e/event-e2e-wireguard-server-down.js +38 -0
- package/test/e2e/event-e2e-wireguard-spoke-down.js +40 -0
- package/test/{api.test.js → integration/app/api.test.js} +33 -14
- package/test/integration/app/cyberia/cyberia-cli-plain-reads.test.js +30 -0
- package/test/{cyberia-instance-conf-defaults.test.js → integration/app/cyberia/cyberia-instance-conf-defaults.test.js} +1 -1
- package/test/integration/app/cyberia/cyberia-load.test.js +467 -0
- package/test/integration/app/cyberia/fallback-world-capture.test.js +253 -0
- package/test/integration/app/cyberia/object-layer-item-id.test.js +327 -0
- package/test/{shape-generator.test.js → integration/app/cyberia/shape-generator.test.js} +1 -1
- package/test/integration/infra/1-security/config-scope.test.js +305 -0
- package/test/integration/infra/1-security/container-storage.test.js +356 -0
- package/test/integration/infra/1-security/in-pod-cli-surface.test.js +86 -0
- package/test/integration/infra/1-security/secret-onboarding.test.js +930 -0
- package/test/{selinux.test.js → integration/infra/1-security/selinux.test.js} +2 -4
- package/test/{sops-secret-store.test.js → integration/infra/1-security/sops-secret-store.test.js} +415 -61
- package/test/integration/infra/1-security/systemd-service.test.js +70 -0
- package/test/integration/infra/1-security/underpost-config-secret.test.js +367 -0
- package/test/integration/infra/2-network/dns-firewall.test.js +566 -0
- package/test/integration/infra/2-network/node-capability.test.js +182 -0
- package/test/integration/infra/2-network/wireguard-cli.test.js +1163 -0
- package/test/{wireguard-edge.test.js → integration/infra/2-network/wireguard-edge.test.js} +609 -55
- package/test/{cluster-instances.test.js → integration/infra/3-cluster/cluster-instances.test.js} +11 -15
- package/test/{deploy-node-placement.test.js → integration/infra/3-cluster/deploy-node-placement.test.js} +3 -3
- package/test/integration/infra/3-cluster/docker-compose-stack.test.js +313 -0
- package/test/integration/infra/4-ingress/deploy-routes.test.js +379 -0
- package/test/integration/infra/4-ingress/gateway-static-assets.test.js +453 -0
- package/test/{instance-traffic-plan.test.js → integration/infra/4-ingress/instance-traffic-plan.test.js} +10 -6
- package/test/{underpost-gateway.test.js → integration/infra/4-ingress/underpost-gateway.test.js} +6 -6
- package/test/{underpost-ingress.test.js → integration/infra/4-ingress/underpost-ingress.test.js} +4 -4
- package/test/integration/infra/5-observability/cron-jobs.test.js +652 -0
- package/test/{deploy-monitor.test.js → integration/infra/5-observability/deploy-monitor.test.js} +29 -31
- package/test/integration/infra/5-observability/event-notification.test.js +197 -0
- package/test/integration/infra/5-observability/event-remediation.test.js +502 -0
- package/test/integration/infra/5-observability/event-targets.test.js +1174 -0
- package/test/integration/infra/5-observability/monitoring-stack.test.js +902 -0
- package/test/support/shell-harness.js +73 -0
- package/test/unit/build-template.test.js +97 -0
- package/test/unit/build-workflow-offline.test.js +132 -0
- package/test/unit/catalog.test.js +71 -0
- package/test/unit/client-build-docs.test.js +334 -0
- package/test/unit/conf-loading.test.js +303 -0
- package/test/unit/conf-resolution.test.js +979 -0
- package/test/unit/coverage-artifact.test.js +130 -0
- package/test/{crypto.test.js → unit/crypto.test.js} +1 -1
- package/test/unit/deploy-env-resolution.test.js +38 -0
- package/test/unit/deploy-log-table.test.js +447 -0
- package/test/unit/execution-profiles.test.js +219 -0
- package/test/unit/fleet-sync-source.test.js +149 -0
- package/test/unit/logger-redaction.test.js +112 -0
- package/test/unit/package.test.js +403 -0
- package/test/unit/prepare-host.test.js +299 -0
- package/test/unit/process-environment.test.js +18 -0
- package/test/unit/propagation-message.test.js +78 -0
- package/test/unit/redeploy-plan.test.js +24 -0
- package/test/unit/release-bump.test.js +474 -0
- package/test/unit/ssh-output-redaction.test.js +28 -0
- package/test/unit/start-options.test.js +46 -0
- package/test/unit/test-tiers.test.js +193 -0
- package/vitest.config.js +58 -0
- package/.nycrc +0 -9
- package/deploy/lib/logging.sh +0 -96
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +0 -48
- package/manifests/mongodb/pv-pvc.yaml +0 -59
- package/scripts/coverall-test-cyberia.sh +0 -24
- package/scripts/coverall-test.sh +0 -24
- package/scripts/link-local-underpost-cli.sh +0 -6
- package/src/api/user/user.build.js +0 -16
- package/src/cli/env.js +0 -177
- package/src/client/components/core/Blockchain.js +0 -41
- package/src/client/components/core/Blog.js +0 -9
- package/src/client/components/core/KeyboardAvoidance.js +0 -145
- package/src/client/public/default/assets/background/dark.jpg +0 -0
- package/src/client/public/default/assets/background/white0-min.jpg +0 -0
- package/src/client/public/default/assets/background/white0.jpg +0 -0
- package/src/client/public/doc/favicon.ico +0 -0
- package/src/client/public/doc/sitemap +0 -148
- package/src/server/environment.js +0 -98
|
@@ -55,6 +55,12 @@ spec:
|
|
|
55
55
|
- '--keyFile'
|
|
56
56
|
- '/opt/mongodb/mongodb-keyfile'
|
|
57
57
|
- '--bind_ip_all'
|
|
58
|
+
# Pinned, not inferred. mongod sizes its cache from the cgroup limit and lands on
|
|
59
|
+
# the 256MB floor, which leaves no headroom for a `mongodump` running in this same
|
|
60
|
+
# container — the dump gets OOM-killed (exit 137), the container restarts, and the
|
|
61
|
+
# replica set re-elects mid-backup.
|
|
62
|
+
- '--wiredTigerCacheSizeGB'
|
|
63
|
+
- '0.25'
|
|
58
64
|
|
|
59
65
|
ports:
|
|
60
66
|
- containerPort: 27017
|
|
@@ -91,10 +97,11 @@ spec:
|
|
|
91
97
|
resources:
|
|
92
98
|
requests:
|
|
93
99
|
cpu: '100m'
|
|
94
|
-
memory: '
|
|
100
|
+
memory: '512Mi'
|
|
95
101
|
limits:
|
|
96
102
|
cpu: '500m'
|
|
97
|
-
|
|
103
|
+
# 256MB WiredTiger cache + connections + an in-container mongodump/mongorestore.
|
|
104
|
+
memory: '1536Mi'
|
|
98
105
|
volumes:
|
|
99
106
|
- name: raw-secret-keyfile-volume
|
|
100
107
|
secret:
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
# pv-pvc.yaml
|
|
2
|
+
# The host path lives under /data, the node storage root this platform owns and labels
|
|
3
|
+
# `container_file_t`; a path outside it (the previous '/mnt/data') carries the policy default and
|
|
4
|
+
# is unreadable to the unprivileged container. `claimRef` pins the volume to exactly one claim —
|
|
5
|
+
# without it this PV and postgres-pv-volume were interchangeable `manual`-class volumes over the
|
|
6
|
+
# same directory, so either database could bind either one and both could land on one data tree.
|
|
2
7
|
apiVersion: v1
|
|
3
8
|
kind: PersistentVolume
|
|
4
9
|
metadata:
|
|
@@ -7,12 +12,19 @@ metadata:
|
|
|
7
12
|
type: local
|
|
8
13
|
spec:
|
|
9
14
|
storageClassName: manual
|
|
15
|
+
persistentVolumeReclaimPolicy: Retain
|
|
10
16
|
capacity:
|
|
11
17
|
storage: 20Gi
|
|
12
18
|
accessModes:
|
|
13
19
|
- ReadWriteOnce
|
|
20
|
+
claimRef:
|
|
21
|
+
apiVersion: v1
|
|
22
|
+
kind: PersistentVolumeClaim
|
|
23
|
+
namespace: default
|
|
24
|
+
name: mysql-pv-claim
|
|
14
25
|
hostPath:
|
|
15
|
-
path: '/
|
|
26
|
+
path: '/data/mysql'
|
|
27
|
+
type: DirectoryOrCreate
|
|
16
28
|
---
|
|
17
29
|
apiVersion: v1
|
|
18
30
|
kind: PersistentVolumeClaim
|
|
@@ -20,6 +32,7 @@ metadata:
|
|
|
20
32
|
name: mysql-pv-claim
|
|
21
33
|
spec:
|
|
22
34
|
storageClassName: manual
|
|
35
|
+
volumeName: mysql-pv
|
|
23
36
|
accessModes:
|
|
24
37
|
- ReadWriteOnce
|
|
25
38
|
resources:
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
# The host path lives under /data, the node storage root this platform owns and labels
|
|
2
|
+
# `container_file_t`. `claimRef` pins the volume to exactly one claim: this PV and mysql-pv were
|
|
3
|
+
# previously interchangeable `manual`-class volumes over the same '/mnt/data' directory, so either
|
|
4
|
+
# database could bind either one and both could end up writing one data tree.
|
|
1
5
|
kind: PersistentVolume
|
|
2
6
|
apiVersion: v1
|
|
3
7
|
metadata:
|
|
@@ -7,9 +11,16 @@ metadata:
|
|
|
7
11
|
app: postgres
|
|
8
12
|
spec:
|
|
9
13
|
storageClassName: manual
|
|
14
|
+
persistentVolumeReclaimPolicy: Retain
|
|
10
15
|
capacity:
|
|
11
16
|
storage: 5Gi
|
|
12
17
|
accessModes:
|
|
13
18
|
- ReadWriteMany
|
|
19
|
+
claimRef:
|
|
20
|
+
apiVersion: v1
|
|
21
|
+
kind: PersistentVolumeClaim
|
|
22
|
+
namespace: default
|
|
23
|
+
name: postgres-pv-claim
|
|
14
24
|
hostPath:
|
|
15
|
-
path: '/
|
|
25
|
+
path: '/data/postgresql'
|
|
26
|
+
type: DirectoryOrCreate
|
|
@@ -1,25 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
apiVersion: v1
|
|
3
|
-
kind: ConfigMap
|
|
4
|
-
metadata:
|
|
5
|
-
name: prometheus-config
|
|
6
|
-
labels:
|
|
7
|
-
app: prometheus
|
|
8
|
-
data:
|
|
9
|
-
prometheus.yml: |
|
|
10
|
-
global:
|
|
11
|
-
scrape_interval: 30s
|
|
12
|
-
evaluation_interval: 30s
|
|
13
|
-
|
|
14
|
-
scrape_configs:
|
|
15
|
-
- job_name: 'scraper'
|
|
16
|
-
metrics_path: /metrics
|
|
17
|
-
scheme: https
|
|
18
|
-
static_configs:
|
|
19
|
-
- targets: []
|
|
20
|
-
# tls_config:
|
|
21
|
-
# insecure_skip_verify: true
|
|
22
|
-
|
|
23
1
|
---
|
|
24
2
|
apiVersion: apps/v1
|
|
25
3
|
kind: Deployment
|
|
@@ -37,6 +15,7 @@ spec:
|
|
|
37
15
|
labels:
|
|
38
16
|
app: prometheus
|
|
39
17
|
spec:
|
|
18
|
+
serviceAccountName: prometheus
|
|
40
19
|
containers:
|
|
41
20
|
- name: prometheus
|
|
42
21
|
image: prom/prometheus:latest
|
|
@@ -51,8 +30,22 @@ spec:
|
|
|
51
30
|
volumeMounts:
|
|
52
31
|
- name: prometheus-config
|
|
53
32
|
mountPath: /etc/prometheus/
|
|
33
|
+
- name: prometheus-rules
|
|
34
|
+
mountPath: /etc/prometheus/rules/
|
|
54
35
|
- name: prometheus-data
|
|
55
36
|
mountPath: /prometheus
|
|
37
|
+
readinessProbe:
|
|
38
|
+
httpGet:
|
|
39
|
+
path: /-/ready
|
|
40
|
+
port: 9090
|
|
41
|
+
initialDelaySeconds: 10
|
|
42
|
+
periodSeconds: 15
|
|
43
|
+
livenessProbe:
|
|
44
|
+
httpGet:
|
|
45
|
+
path: /-/healthy
|
|
46
|
+
port: 9090
|
|
47
|
+
initialDelaySeconds: 30
|
|
48
|
+
periodSeconds: 20
|
|
56
49
|
resources:
|
|
57
50
|
requests:
|
|
58
51
|
memory: '200Mi'
|
|
@@ -61,6 +54,9 @@ spec:
|
|
|
61
54
|
- name: prometheus-config
|
|
62
55
|
configMap:
|
|
63
56
|
name: prometheus-config
|
|
57
|
+
- name: prometheus-rules
|
|
58
|
+
configMap:
|
|
59
|
+
name: prometheus-rules
|
|
64
60
|
- name: prometheus-data
|
|
65
61
|
emptyDir: {}
|
|
66
62
|
|
package/package.json
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"type": "module",
|
|
3
3
|
"main": "src/index.js",
|
|
4
4
|
"name": "@underpostnet/cyberia",
|
|
5
|
-
"version": "3.3.
|
|
5
|
+
"version": "3.3.73",
|
|
6
6
|
"description": "Cyberia CLI — toolchain for the Cyberia MMO data layer, content pipeline, persistence, gRPC services, and ERC-1155 lifecycle on Hyperledger Besu.",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"start": "node --max-old-space-size=8192 src/server",
|
|
9
9
|
"build": "node bin client",
|
|
10
|
-
"test": "
|
|
11
|
-
"test:
|
|
10
|
+
"test": "node bin test",
|
|
11
|
+
"test:coverage": "COVERAGE_ENFORCE=1 node bin test unit,infra,app,cyberia",
|
|
12
12
|
"dev": "NODE_ENV=development nodemon src/server",
|
|
13
13
|
"dev:container": "NODE_ENV=development node src/server",
|
|
14
14
|
"prod:container": "NODE_ENV=production node src/server",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"dev:proxy": "NODE_ENV=development node src/proxy proxy",
|
|
18
18
|
"docs": "typedoc --options typedoc.json",
|
|
19
19
|
"install:global": "npm install -g prettier",
|
|
20
|
-
"install:test": "npm install -g
|
|
20
|
+
"install:test": "npm install -g coveralls-next",
|
|
21
21
|
"install": "npm run install:global && npm run install:test",
|
|
22
22
|
"prettier": "prettier --write .",
|
|
23
23
|
"fix": "npm audit fix --force && npm audit",
|
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
"security:secrets:ci": "gitleaks detect --source . --config .gitleaks.toml --redact=1",
|
|
27
27
|
"security:deps": "npm audit",
|
|
28
28
|
"security": "npm run security:secrets:ci && npm run security:deps",
|
|
29
|
-
"clean": "node bin env clean && node bin run clean",
|
|
30
29
|
"docker:generate": "node bin docker-compose --generate --deploy-id dd-cyberia --docker-compose-id cyberia",
|
|
31
30
|
"docker:up": "node bin docker-compose --up --deploy-id dd-cyberia --docker-compose-id cyberia",
|
|
32
31
|
"docker:up:build": "node bin docker-compose --up --build --deploy-id dd-cyberia --docker-compose-id cyberia",
|
|
@@ -41,7 +40,8 @@
|
|
|
41
40
|
"docker:reset": "node bin docker-compose --reset --deploy-id dd-cyberia --docker-compose-id cyberia"
|
|
42
41
|
},
|
|
43
42
|
"bin": {
|
|
44
|
-
"cyberia": "bin/index.js"
|
|
43
|
+
"cyberia": "bin/index.js",
|
|
44
|
+
"underpost": "bin/index.js"
|
|
45
45
|
},
|
|
46
46
|
"repository": {
|
|
47
47
|
"type": "git",
|
|
@@ -72,12 +72,12 @@
|
|
|
72
72
|
},
|
|
73
73
|
"homepage": "https://github.com/underpostnet/engine-cyberia#readme",
|
|
74
74
|
"dependencies": {
|
|
75
|
-
"underpost": "^3.3.
|
|
75
|
+
"underpost": "^3.3.73",
|
|
76
76
|
"adm-zip": "^0.6.0",
|
|
77
77
|
"maxrects-packer": "^2.7.3",
|
|
78
78
|
"pngjs": "^7.0.0",
|
|
79
79
|
"jimp": "^1.6.0",
|
|
80
|
-
"sharp": "^0.
|
|
80
|
+
"sharp": "^0.35.3",
|
|
81
81
|
"ethers": "~6.16.0"
|
|
82
82
|
},
|
|
83
83
|
"publishConfig": {
|
|
@@ -90,12 +90,85 @@
|
|
|
90
90
|
"minimatch": "^10.2.2",
|
|
91
91
|
"glob": "^11.0.0",
|
|
92
92
|
"diff": ">=8.0.3",
|
|
93
|
-
"js-yaml": "
|
|
93
|
+
"js-yaml": "$js-yaml",
|
|
94
94
|
"debug": ">=4.3.6",
|
|
95
95
|
"serialize-javascript": ">=7.0.5",
|
|
96
96
|
"router": {
|
|
97
97
|
"path-to-regexp": ">=8.4.0"
|
|
98
98
|
},
|
|
99
99
|
"ws": "^8.20.2"
|
|
100
|
+
},
|
|
101
|
+
"devDependencies": {
|
|
102
|
+
"@fortawesome/fontawesome-free": "^7.3.1",
|
|
103
|
+
"@fullcalendar/rrule": "^7.0.2",
|
|
104
|
+
"@grpc/grpc-js": "^1.14.4",
|
|
105
|
+
"@grpc/proto-loader": "^0.8.1",
|
|
106
|
+
"@neodrag/vanilla": "^2.3.1",
|
|
107
|
+
"@vitest/coverage-v8": "4.1.11",
|
|
108
|
+
"ag-grid-community": "^36.1.0",
|
|
109
|
+
"allure-vitest": "3.11.0",
|
|
110
|
+
"axios": "^1.20.0",
|
|
111
|
+
"bumpp": "^12.2.2",
|
|
112
|
+
"chai": "^6.2.2",
|
|
113
|
+
"clipboardy": "^5.3.2",
|
|
114
|
+
"cloudinary": "^2.11.0",
|
|
115
|
+
"colors": "^1.4.0",
|
|
116
|
+
"commander": "^15.0.0",
|
|
117
|
+
"compression": "^1.7.4",
|
|
118
|
+
"cookie-parser": "^1.4.7",
|
|
119
|
+
"cors": "^2.8.6",
|
|
120
|
+
"d3": "^7.9.0",
|
|
121
|
+
"dexie": "^4.4.5",
|
|
122
|
+
"dotenv": "^17.4.2",
|
|
123
|
+
"easymde": "^2.21.0",
|
|
124
|
+
"esbuild": "^0.28.2",
|
|
125
|
+
"escape-string-regexp": "^5.0.0",
|
|
126
|
+
"express": "^5.2.1",
|
|
127
|
+
"express-fileupload": "^1.4.3",
|
|
128
|
+
"express-rate-limit": "^8.6.2",
|
|
129
|
+
"express-slow-down": "^3.1.1",
|
|
130
|
+
"fast-json-stable-stringify": "^2.1.0",
|
|
131
|
+
"favicons": "^7.3.1",
|
|
132
|
+
"fs-extra": "^11.4.0",
|
|
133
|
+
"fullcalendar": "^7.0.2",
|
|
134
|
+
"helmet": "^8.3.0",
|
|
135
|
+
"html-minifier-terser": "^7.2.0",
|
|
136
|
+
"http-proxy-middleware": "^4.2.0",
|
|
137
|
+
"ignore-walk": "^9.0.0",
|
|
138
|
+
"iovalkey": "^0.4.0",
|
|
139
|
+
"json-colorizer": "^3.0.1",
|
|
140
|
+
"js-yaml": "^5.4.1",
|
|
141
|
+
"jsonwebtoken": "^9.0.3",
|
|
142
|
+
"mariadb": "^3.5.3",
|
|
143
|
+
"mongoose": "^9.9.4",
|
|
144
|
+
"morgan": "^1.12.0",
|
|
145
|
+
"marked": "^18.0.11",
|
|
146
|
+
"nodemailer": "^9.0.6",
|
|
147
|
+
"nodemon": "^3.0.1",
|
|
148
|
+
"peer": "^1.0.2",
|
|
149
|
+
"peerjs": "^1.5.5",
|
|
150
|
+
"prom-client": "^15.1.2",
|
|
151
|
+
"read": "^6.0.0",
|
|
152
|
+
"rrule": "^2.8.1",
|
|
153
|
+
"shelljs": "^0.10.0",
|
|
154
|
+
"sitemap": "^9.0.1",
|
|
155
|
+
"socket.io": "^4.8.3",
|
|
156
|
+
"sortablejs": "^1.15.0",
|
|
157
|
+
"split-file": "^2.3.0",
|
|
158
|
+
"swagger-autogen": "^2.23.7",
|
|
159
|
+
"swagger-ui-express": "^5.0.0",
|
|
160
|
+
"typedoc": "^0.28.20",
|
|
161
|
+
"typescript": "6.0.3",
|
|
162
|
+
"validator": "^13.15.35",
|
|
163
|
+
"vanilla-jsoneditor": "^3.13.0",
|
|
164
|
+
"vitest": "4.1.11",
|
|
165
|
+
"winston": "^3.19.0",
|
|
166
|
+
"workbox-background-sync": "^7.4.1",
|
|
167
|
+
"workbox-cacheable-response": "^7.4.1",
|
|
168
|
+
"workbox-core": "^7.4.1",
|
|
169
|
+
"workbox-expiration": "^7.4.1",
|
|
170
|
+
"workbox-precaching": "^7.4.1",
|
|
171
|
+
"workbox-routing": "^7.4.1",
|
|
172
|
+
"workbox-strategies": "^7.4.1"
|
|
100
173
|
}
|
|
101
|
-
}
|
|
174
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
NAMESPACE="${NAMESPACE:-default}"
|
|
5
|
+
TARGET_URL="${TARGET_URL:-https://underpost.net/}"
|
|
6
|
+
ENVOY_NAMESPACE="${ENVOY_NAMESPACE:-envoy-gateway-system}"
|
|
7
|
+
|
|
8
|
+
COLOR_CYAN='\033[0;36m'
|
|
9
|
+
COLOR_GREEN='\033[0;32m'
|
|
10
|
+
COLOR_YELLOW='\033[1;33m'
|
|
11
|
+
COLOR_RED='\033[0;31m'
|
|
12
|
+
COLOR_NC='\033[0m'
|
|
13
|
+
|
|
14
|
+
echo -e "${COLOR_CYAN}=== 1. Active Probes Status (Prometheus Instant Query) ===${COLOR_NC}"
|
|
15
|
+
kubectl exec -n "$NAMESPACE" deployment/prometheus -c prometheus -- \
|
|
16
|
+
promtool query instant http://localhost:9090 'probe_success' || true
|
|
17
|
+
|
|
18
|
+
echo -e "\n${COLOR_CYAN}=== 2. Currently Firing Alerts ===${COLOR_NC}"
|
|
19
|
+
kubectl exec -n "$NAMESPACE" deployment/prometheus -c prometheus -- \
|
|
20
|
+
promtool query instant http://localhost:9090 'ALERTS{alertstate="firing"}' || true
|
|
21
|
+
|
|
22
|
+
echo -e "\n${COLOR_CYAN}=== 3. Blackbox Exporter Live Test (${TARGET_URL}) ===${COLOR_NC}"
|
|
23
|
+
ENCODED_URL=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$TARGET_URL', safe=''))" 2>/dev/null || echo "https%3A%2F%2Funderpost.net%2F")
|
|
24
|
+
kubectl get --raw "/api/v1/namespaces/$NAMESPACE/services/blackbox-exporter:9115/proxy/probe?module=http_2xx&target=${ENCODED_URL}" | grep -E "probe_success|probe_http_status_code" || true
|
|
25
|
+
|
|
26
|
+
echo -e "\n${COLOR_CYAN}=== 4. Prometheus Logs (Rule Evaluation & Scraping) ===${COLOR_NC}"
|
|
27
|
+
kubectl logs -n "$NAMESPACE" -l app=prometheus --tail=50 --all-containers=true
|
|
28
|
+
|
|
29
|
+
echo -e "\n${COLOR_CYAN}=== 5. Alertmanager Logs (Notifications & Dispatch) ===${COLOR_NC}"
|
|
30
|
+
kubectl logs -n "$NAMESPACE" -l app=alertmanager --tail=50 --all-containers=true
|
|
31
|
+
|
|
32
|
+
echo -e "\n${COLOR_CYAN}=== 6. Blackbox Exporter Logs (ICMP/HTTP Probes Execution) ===${COLOR_NC}"
|
|
33
|
+
kubectl logs -n "$NAMESPACE" -l app=blackbox-exporter --tail=50 --all-containers=true
|
|
34
|
+
|
|
35
|
+
echo -e "\n${COLOR_CYAN}=== 7. WireGuard Interface Status ===${COLOR_NC}"
|
|
36
|
+
if command -v wg &> /dev/null; then
|
|
37
|
+
echo -e "${COLOR_YELLOW}[Host WireGuard Status]${COLOR_NC}"
|
|
38
|
+
wg show || true
|
|
39
|
+
|
|
40
|
+
echo -e "\n${COLOR_YELLOW}[WireGuard Systemd Services]${COLOR_NC}"
|
|
41
|
+
systemctl list-units --type=service 'wg-quick*' --no-pager || true
|
|
42
|
+
else
|
|
43
|
+
echo -e "${COLOR_YELLOW}'wg' CLI tool is not installed on the host.${COLOR_NC}"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
echo -e "\n${COLOR_CYAN}=== 8. Ingress & Gateway Diagnostics ===${COLOR_NC}"
|
|
47
|
+
if kubectl get ns "$ENVOY_NAMESPACE" &>/dev/null; then
|
|
48
|
+
echo -e "${COLOR_YELLOW}[Targeting namespace: ${ENVOY_NAMESPACE}]${COLOR_NC}"
|
|
49
|
+
kubectl get pods -n "$ENVOY_NAMESPACE" || true
|
|
50
|
+
else
|
|
51
|
+
echo -e "${COLOR_YELLOW}[Namespace '${ENVOY_NAMESPACE}' not found. Searching cluster-wide for Ingress/Envoy resources...]${COLOR_NC}"
|
|
52
|
+
kubectl get pods -A -l "app.kubernetes.io/name in (envoy-gateway, envoy, ingress-nginx, ingress)" 2>/dev/null || \
|
|
53
|
+
kubectl get pods -A | grep -E "envoy|ingress|gateway" || true
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
echo -e "\n${COLOR_GREEN}Done checking cluster monitoring state.${COLOR_NC}"
|
|
@@ -50,23 +50,36 @@ fi
|
|
|
50
50
|
|
|
51
51
|
# ---------------------------------------------------------------------------
|
|
52
52
|
# System-wide Node.js is required by service units under SELinux.
|
|
53
|
+
#
|
|
54
|
+
# RHEL/Rocky only. An underpost node is an SELinux-Enforcing RHEL host: the storage labeling,
|
|
55
|
+
# the systemd units and the CRI bring-up below are all written against that policy, so a
|
|
56
|
+
# package manager that is merely present is not evidence the rest of this script applies.
|
|
57
|
+
# Commissioning a Debian/Ubuntu machine that is not an underpost node is `underpost baremetal`.
|
|
53
58
|
# ---------------------------------------------------------------------------
|
|
54
|
-
if command -v dnf >/dev/null 2>&1; then
|
|
55
|
-
|
|
59
|
+
if ! command -v dnf >/dev/null 2>&1; then
|
|
60
|
+
echo "ERROR: underpost nodes are RHEL/Rocky only; dnf was not found" >&2
|
|
61
|
+
exit 1
|
|
56
62
|
fi
|
|
57
63
|
|
|
58
|
-
|
|
64
|
+
sudo dnf install -y policycoreutils policycoreutils-python-utils selinux-policy-targeted audit rsync
|
|
65
|
+
|
|
66
|
+
# `command -v node` is not the question this step asks: an nvm runtime under $HOME answers it and
|
|
67
|
+
# is exactly what a unit cannot execute. Only a Node 24 at a system path counts.
|
|
68
|
+
system_node_path() {
|
|
69
|
+
local candidate
|
|
70
|
+
for candidate in /usr/bin/node /usr/local/bin/node /bin/node; do
|
|
71
|
+
if [ -x "$candidate" ] && "$candidate" --version 2>/dev/null | grep -q '^v24'; then
|
|
72
|
+
printf '%s' "$candidate"
|
|
73
|
+
return 0
|
|
74
|
+
fi
|
|
75
|
+
done
|
|
76
|
+
return 1
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if ! system_node_path >/dev/null; then
|
|
59
80
|
echo "Installing system-wide Node.js 24..."
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
sudo dnf install -y nodejs
|
|
63
|
-
elif command -v apt-get >/dev/null 2>&1; then
|
|
64
|
-
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo bash -
|
|
65
|
-
sudo apt-get install -y nodejs
|
|
66
|
-
else
|
|
67
|
-
echo "ERROR: a supported system package manager is required for Node.js 24" >&2
|
|
68
|
-
exit 1
|
|
69
|
-
fi
|
|
81
|
+
curl -fsSL https://rpm.nodesource.com/setup_24.x | sudo bash -
|
|
82
|
+
sudo dnf install -y nodejs
|
|
70
83
|
fi
|
|
71
84
|
|
|
72
85
|
echo "
|
|
@@ -84,7 +97,7 @@ cd "$ENGINE_ROOT"
|
|
|
84
97
|
|
|
85
98
|
# Install JS deps and generate secrets using the local engine entrypoint only.
|
|
86
99
|
npm install
|
|
87
|
-
|
|
100
|
+
# Cluster Secret administration is a control-plane capability, not part of node bring-up.
|
|
88
101
|
|
|
89
102
|
if [ "$ROLE" = "control" ]; then
|
|
90
103
|
echo "Installing underpost CLI..."
|
|
@@ -148,16 +148,37 @@ fi
|
|
|
148
148
|
# ---------------------------------------------------------------------------
|
|
149
149
|
# 0. Base prerequisites.
|
|
150
150
|
# ---------------------------------------------------------------------------
|
|
151
|
+
# RHEL/Rocky only. An underpost node is an SELinux-Enforcing RHEL host: the storage labeling, the
|
|
152
|
+
# systemd units and the CRI bring-up below are all written against that policy. Commissioning a
|
|
153
|
+
# Debian/Ubuntu machine that is not an underpost node is `underpost baremetal`.
|
|
154
|
+
if ! command -v dnf >/dev/null 2>&1; then
|
|
155
|
+
echo "ERROR: underpost nodes are RHEL/Rocky only; dnf was not found" >&2
|
|
156
|
+
exit 1
|
|
157
|
+
fi
|
|
158
|
+
|
|
151
159
|
log "Installing base prerequisites..."
|
|
152
|
-
sudo dnf install -y tar xz gzip bzip2 git curl ca-certificates which findutils policycoreutils policycoreutils-python-utils selinux-policy-targeted audit 2>/dev/null \
|
|
153
|
-
|| dnf install -y tar xz gzip bzip2 git curl ca-certificates which findutils policycoreutils policycoreutils-python-utils selinux-policy-targeted audit
|
|
160
|
+
sudo dnf install -y tar xz gzip bzip2 git curl rsync ca-certificates which findutils policycoreutils policycoreutils-python-utils selinux-policy-targeted audit 2>/dev/null \
|
|
161
|
+
|| dnf install -y tar xz gzip bzip2 git curl rsync ca-certificates which findutils policycoreutils policycoreutils-python-utils selinux-policy-targeted audit
|
|
154
162
|
|
|
155
163
|
# ---------------------------------------------------------------------------
|
|
156
164
|
# 1. System-wide Node.js. Home-directory runtimes cannot be used by hardened
|
|
157
165
|
# systemd services under SELinux.
|
|
158
166
|
# ---------------------------------------------------------------------------
|
|
159
|
-
|
|
160
|
-
|
|
167
|
+
# `command -v node` is not the question this step asks: an nvm runtime under $HOME answers it and
|
|
168
|
+
# is exactly what a unit cannot execute. Only a Node 24 at a system path counts.
|
|
169
|
+
system_node_path() {
|
|
170
|
+
local candidate
|
|
171
|
+
for candidate in /usr/bin/node /usr/local/bin/node /bin/node; do
|
|
172
|
+
if [ -x "$candidate" ] && "$candidate" --version 2>/dev/null | grep -q '^v24'; then
|
|
173
|
+
printf '%s' "$candidate"
|
|
174
|
+
return 0
|
|
175
|
+
fi
|
|
176
|
+
done
|
|
177
|
+
return 1
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if node_path="$(system_node_path)"; then
|
|
181
|
+
log "System-wide Node.js $("$node_path" --version) already installed at $node_path"
|
|
161
182
|
else
|
|
162
183
|
log "Installing system-wide Node.js 24..."
|
|
163
184
|
curl -fsSL https://rpm.nodesource.com/setup_24.x | sudo bash -
|
|
@@ -178,7 +199,7 @@ Bringing up underpost kubeadm node (role=$ROLE) from $ENGINE_ROOT
|
|
|
178
199
|
# ---------------------------------------------------------------------------
|
|
179
200
|
# 2. Engine source — required by `node bin cluster` (manifests + CLI).
|
|
180
201
|
# Normalizes any (custom-named) repo into the canonical paths, mirroring
|
|
181
|
-
# src/server/start.js: clone into a temp dir then copy the contents into the
|
|
202
|
+
# src/server/runtime/start.js: clone into a temp dir then copy the contents into the
|
|
182
203
|
# target, so the working tree is always $ENGINE_ROOT regardless of repo name.
|
|
183
204
|
# ---------------------------------------------------------------------------
|
|
184
205
|
command -v git >/dev/null 2>&1 || sudo dnf install -y git
|
|
@@ -248,10 +269,8 @@ fi
|
|
|
248
269
|
|
|
249
270
|
cd "$ENGINE_ROOT"
|
|
250
271
|
|
|
251
|
-
# Clone + normalize the private secrets repo into $ENGINE_ROOT/engine-private
|
|
252
|
-
#
|
|
253
|
-
# regardless of the private repo's name. The token is masked in logs and then
|
|
254
|
-
# stripped from the saved remote URL.
|
|
272
|
+
# Clone + normalize the private secrets repo into $ENGINE_ROOT/engine-private, regardless of the
|
|
273
|
+
# private repo's name. The token is masked in logs and then stripped from the saved remote URL.
|
|
255
274
|
if [ -n "$GITHUB_TOKEN" ]; then
|
|
256
275
|
PRIV_URL="https://${GITHUB_USERNAME:-x-access-token}:${GITHUB_TOKEN}@${ENGINE_PRIVATE_REPO#https://}"
|
|
257
276
|
if clone_or_pull "$PRIV_URL" "$ENGINE_PRIVATE_BRANCH" "$ENGINE_ROOT/engine-private" "origin" "$GITHUB_TOKEN"; then
|
|
@@ -264,10 +283,11 @@ else
|
|
|
264
283
|
log "WARNING: GITHUB_TOKEN not provided; engine-private not cloned — secrets will be unavailable"
|
|
265
284
|
fi
|
|
266
285
|
|
|
267
|
-
# Install JS deps
|
|
286
|
+
# Install JS deps using the local engine entrypoint. Cluster Secret administration is not part of
|
|
287
|
+
# node bring-up: it is a control-plane capability, projected by `cron --setup-start --apply` on the
|
|
288
|
+
# control node. A worker joining the cluster has no business writing cluster-wide Secrets.
|
|
268
289
|
npm install
|
|
269
290
|
npm install -g underpost
|
|
270
|
-
node bin run secret
|
|
271
291
|
|
|
272
292
|
# ---------------------------------------------------------------------------
|
|
273
293
|
# 3. Host prerequisites (Docker, CRI-O, kubelet/kubeadm/kubectl, ...) via cluster.js
|
package/scripts/maas-setup.sh
CHANGED
|
@@ -18,14 +18,14 @@ cd /home/dd/engine
|
|
|
18
18
|
underpost secret underpost --create-from-file /home/dd/engine/engine-private/conf/dd-cron/.env.production
|
|
19
19
|
|
|
20
20
|
# Extract configuration values from secrets
|
|
21
|
-
DB_PG_MAAS_USER=$(node bin
|
|
22
|
-
DB_PG_MAAS_PASS=$(node bin
|
|
23
|
-
DB_PG_MAAS_HOST=$(node bin
|
|
24
|
-
DB_PG_MAAS_NAME=$(node bin
|
|
25
|
-
|
|
26
|
-
MAAS_ADMIN_USERNAME=$(node bin
|
|
27
|
-
MAAS_ADMIN_EMAIL=$(node bin
|
|
28
|
-
MAAS_ADMIN_PASS=$(node bin
|
|
21
|
+
DB_PG_MAAS_USER=$(node bin host get --plain DB_PG_MAAS_USER)
|
|
22
|
+
DB_PG_MAAS_PASS=$(node bin host get --plain DB_PG_MAAS_PASS)
|
|
23
|
+
DB_PG_MAAS_HOST=$(node bin host get --plain DB_PG_MAAS_HOST)
|
|
24
|
+
DB_PG_MAAS_NAME=$(node bin host get --plain DB_PG_MAAS_NAME)
|
|
25
|
+
|
|
26
|
+
MAAS_ADMIN_USERNAME=$(node bin host get --plain MAAS_ADMIN_USERNAME)
|
|
27
|
+
MAAS_ADMIN_EMAIL=$(node bin host get --plain MAAS_ADMIN_EMAIL)
|
|
28
|
+
MAAS_ADMIN_PASS=$(node bin host get --plain MAAS_ADMIN_PASS)
|
|
29
29
|
|
|
30
30
|
# Initialize MAAS region+rack controller
|
|
31
31
|
maas init region+rack \
|