From f138e4a28ff0ced6acc09caa35bee4fa4d31f71d Mon Sep 17 00:00:00 2001 From: capitano Date: Tue, 7 Apr 2026 18:19:11 +0200 Subject: [PATCH] Add Enigma BBS deployment files --- Dockerfile | 36 ++++----- configmap.yaml | 42 ---------- deployment.yaml | 178 ------------------------------------------- namespace.yaml | 6 -- pvc.yaml | 47 ------------ registry-secret.yaml | 8 -- service.yaml | 19 ----- ssh-secret.yaml | 7 -- 8 files changed, 16 insertions(+), 327 deletions(-) delete mode 100644 configmap.yaml delete mode 100644 deployment.yaml delete mode 100644 namespace.yaml delete mode 100644 pvc.yaml delete mode 100644 registry-secret.yaml delete mode 100644 service.yaml delete mode 100644 ssh-secret.yaml diff --git a/Dockerfile b/Dockerfile index dea84d7..528f41d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,7 @@ ENV NVM_DIR /root/.nvm ENV DEBIAN_FRONTEND noninteractive -# Install APT and NPM packages +# Clone repo and build RUN apt-get update \ && apt-get install -y \ git \ @@ -30,30 +30,27 @@ RUN apt-get update \ && npm install -g pm2 -COPY . /enigma-bbs/ - -WORKDIR /enigma-bbs - -# Install npm dependencies -RUN cd /enigma-bbs && npm install - -# Prepare files -RUN dos2unix /enigma-bbs/docker/bin/docker-entrypoint.sh \ - && apt-get remove dos2unix -y \ +# Clone Enigma and install +RUN git clone --depth 1 https://github.com/NuSkooler/enigma-bbs.git /enigma-bbs \ + && cd /enigma-bbs && npm install \ + && dos2unix /enigma-bbs/docker/bin/docker-entrypoint.sh \ && chmod +x /enigma-bbs/docker/bin/docker-entrypoint.sh \ - && cp -f /enigma-bbs/docker/bin/sexyz /usr/local/bin \ - && mkdir -p /enigma-bbs-pre/art \ - && mkdir /enigma-bbs-pre/mods \ - && mkdir /enigma-bbs-pre/config \ - && cp -rp /enigma-bbs/art/* ../enigma-bbs-pre/art/ \ - && cp -rp /enigma-bbs/mods/* ../enigma-bbs-pre/mods/ \ - && cp -rp /enigma-bbs/config/* ../enigma-bbs-pre/config/ \ + && cp -f /enigma-bbs/docker/bin/sexyz /usr/local/bin + +# Setup staging directories with dummy SSH key +RUN mkdir -p /enigma-bbs-pre/art \ + && mkdir -p /enigma-bbs-pre/mods \ + && mkdir -p /enigma-bbs-pre/config/security \ + && cp -rp /enigma-bbs/art/* /enigma-bbs-pre/art/ \ + && cp -rp /enigma-bbs/mods/* /enigma-bbs-pre/mods/ \ + && cp -rp /enigma-bbs/config/* /enigma-bbs-pre/config/ \ + && touch /enigma-bbs-pre/config/security/ssh_private_key.pem \ && apt-get remove build-essential python3 libssl-dev git curl dos2unix -y \ && apt-get autoremove -y \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ && apt-get clean -# enigma storage mounts +# Volumes VOLUME /enigma-bbs/art VOLUME /enigma-bbs/config VOLUME /enigma-bbs/db @@ -62,7 +59,6 @@ VOLUME /enigma-bbs/logs VOLUME /enigma-bbs/mods VOLUME /mail -# Enigma default port EXPOSE 8888 44510 44511 WORKDIR /enigma-bbs diff --git a/configmap.yaml b/configmap.yaml deleted file mode 100644 index 344174a..0000000 --- a/configmap.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: enigmabbs-config - namespace: enigmabbs -data: - config.hjson: | - { - system: { - bbsName: "Enigma BBS" - bbsTimeZone: "America/New_York" - bbsNodeNumber: 1 - domain: "enigma.giaco.net" - } - - loginServers: { - telnet: { - enabled: true - port: 8888 - } - ssh: { - enabled: true - port: 44511 - } - } - - contentServers: { - web: { - domain: "enigma.giaco.net" - http: { - enabled: true - port: 8888 - } - } - } - - security: { - secureLoginOnly: false - requireSecureConnections: false - } - } - achievements.hjson: | diff --git a/deployment.yaml b/deployment.yaml deleted file mode 100644 index 120ac0e..0000000 --- a/deployment.yaml +++ /dev/null @@ -1,178 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: enigmabbs - namespace: enigmabbs -spec: - replicas: 1 - selector: - matchLabels: - app: enigmabbs - template: - metadata: - labels: - app: enigmabbs - spec: - initContainers: - - name: init-check - image: busybox:latest - command: ["/bin/sh", "-c"] - args: - - | - echo "Checking for existing processes on port 8888..." - netstat -tlnp 2>/dev/null | grep 8888 || echo "Port 8888 is free" - - name: init-config - image: enigmabbs/enigma-bbs:latest - command: ["/bin/sh", "-c"] - args: - - | - set -e - echo "Creating directories..." - mkdir -p /enigma-bbs/config/security - mkdir -p /enigma-bbs/config/menus - mkdir -p /enigma-bbs/db - mkdir -p /enigma-bbs/filebase - echo "Copying SSH key from secret..." - cp /enigma-ssh-key/ssh_private_key.pem /enigma-bbs/config/security/ssh_private_key.pem - chmod 600 /enigma-bbs/config/security/ssh_private_key.pem - echo "Creating config.hjson..." - cat > /enigma-bbs/config/config.hjson << 'EOF' - { - system: { - bbsName: "Enigma BBS" - bbsTimeZone: "America/New_York" - bbsNodeNumber: 1 - domain: "enigma.giaco.net" - } - - loginServers: { - telnet: { - enabled: true - port: 8888 - } - ssh: { - enabled: true - port: 44511 - privateKeyPem: "/enigma-bbs/config/security/ssh_private_key.pem" - privateKeyPass: "" - } - } - - contentServers: { - web: { - domain: "enigma.giaco.net" - http: { - enabled: true - port: 8888 - } - } - } - - security: { - secureLoginOnly: false - requireSecureConnections: false - } - } - EOF - echo "Creating achievements.hjson..." - cat > /enigma-bbs/config/achievements.hjson << 'EOF' - { - systemAchievements: { - } - } - EOF - echo "Creating menu.hjson..." - cat > /enigma-bbs/config/menu.hjson << 'EOF' - { - menus: { - someMenu: { - } - } - } - EOF - echo "Init completed" - volumeMounts: - - name: enigmabbs-config - mountPath: /enigma-bbs/config - - name: enigmabbs-data - mountPath: /enigma-bbs/db - - name: enigmabbs-art - mountPath: /enigma-bbs/art - - name: enigmabbs-mods - mountPath: /enigma-bbs/mods - - name: enigmabbs-ssh-key-volume - mountPath: /enigma-ssh-key - readOnly: true - containers: - - name: enigmabbs - image: enigmabbs/enigma-bbs:latest - imagePullPolicy: Always - command: ["/bin/sh", "-c"] - args: - - | - set -e - echo "Killing any existing pm2 processes..." - pm2 delete all || true - pm2 kill || true - sleep 2 - echo "Starting Enigma BBS..." - exec pm2-runtime main.js - ports: - - containerPort: 8888 - name: web - - containerPort: 44510 - name: telnet - - containerPort: 44511 - name: ssh - env: - - name: NODE_ENV - value: "production" - volumeMounts: - - name: enigmabbs-data - mountPath: /enigma-bbs/db - - name: enigmabbs-art - mountPath: /enigma-bbs/art - - name: enigmabbs-config - mountPath: /enigma-bbs/config - - name: enigmabbs-mods - mountPath: /enigma-bbs/mods - - name: enigmabbs-logs - mountPath: /enigma-bbs/logs - resources: - requests: - memory: "512Mi" - cpu: "500m" - limits: - memory: "2Gi" - cpu: "1000m" - readinessProbe: - tcpSocket: - port: 8888 - initialDelaySeconds: 90 - periodSeconds: 10 - timeoutSeconds: 5 - failureThreshold: 5 - livenessProbe: - tcpSocket: - port: 8888 - initialDelaySeconds: 180 - periodSeconds: 30 - timeoutSeconds: 10 - failureThreshold: 3 - volumes: - - name: enigmabbs-data - persistentVolumeClaim: - claimName: enigmabbs-data - - name: enigmabbs-art - persistentVolumeClaim: - claimName: enigmabbs-art - - name: enigmabbs-config - emptyDir: {} - - name: enigmabbs-ssh-key-volume - secret: - secretName: enigmabbs-ssh-key - - name: enigmabbs-mods - persistentVolumeClaim: - claimName: enigmabbs-mods - - name: enigmabbs-logs - emptyDir: {} diff --git a/namespace.yaml b/namespace.yaml deleted file mode 100644 index 332c9fc..0000000 --- a/namespace.yaml +++ /dev/null @@ -1,6 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: enigmabbs - labels: - name: enigmabbs diff --git a/pvc.yaml b/pvc.yaml deleted file mode 100644 index d3665ff..0000000 --- a/pvc.yaml +++ /dev/null @@ -1,47 +0,0 @@ -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: enigmabbs-data - namespace: enigmabbs -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 1Gi ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: enigmabbs-art - namespace: enigmabbs -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 500Mi ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: enigmabbs-mods - namespace: enigmabbs -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 500Mi ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: enigmabbs-logs - namespace: enigmabbs -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 500Mi diff --git a/registry-secret.yaml b/registry-secret.yaml deleted file mode 100644 index 6d6e334..0000000 --- a/registry-secret.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: v1 -data: - .dockerconfigjson: eyJhdXRocyI6eyJnaXQuZ2lhY28ubmV0Ijp7InVzZXJuYW1lIjoiY2FwaXRhbm8iLCJwYXNzd29yZCI6ImE1ZTQ4NTJmOWU5ODI3OGM4MjhlNzA5YjdmOTcxYmE0NmQ0YWY5NjAiLCJlbWFpbCI6ImFkbWluQGdpYWNvLm5ldCIsImF1dGgiOiJZMkZ3YVhSaGJtODZZVFZsTkRnMU1tWTVaVGs0TWpjNFl6Z3lPR1UzTURsaU4yWTVOekZpWVRRMlpEUmhaamsyTUE9PSJ9fX0= -kind: Secret -metadata: - name: git-registry-secret - namespace: enigmabbs -type: kubernetes.io/dockerconfigjson diff --git a/service.yaml b/service.yaml deleted file mode 100644 index 98c098d..0000000 --- a/service.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: enigmabbs - namespace: enigmabbs -spec: - type: LoadBalancer - selector: - app: enigmabbs - ports: - - name: web - port: 8888 - targetPort: 8888 - - name: telnet - port: 44510 - targetPort: 44510 - - name: ssh - port: 44511 - targetPort: 44511 diff --git a/ssh-secret.yaml b/ssh-secret.yaml deleted file mode 100644 index a4eacd0..0000000 --- a/ssh-secret.yaml +++ /dev/null @@ -1,7 +0,0 @@ -apiVersion: v1 -data: - ssh_private_key.pem: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlHNHdJQkFBS0NBWUVBcWlBTmlqVnAzd2ZNblAxYld3WTRmb2Q1MFZza3VERDNlLzVuNVJUSExNNkZmd1pZCkNFeHlzUFNnSUNFaUpSajhLekVGcTJzZ3VoQUduRkIrb3VlTkFqVjlaSHlPZEtLeDZjb3N3Zk5DelZqdnJ0K1UKNFVzS0tyYVpVS3NWSmh2SUZodGhEUlJ1VHV5Y3NnOXpHYlV0VmFIYm1kNTFHNk93dUpvdG9KdTJ0Z3hyMEZXMgpWV3N1V2ZhcGlTRHhDWTRkeVg1V0JCbVhBNE9oc2wxYnBlN1JlUFBKS1hGbUNzYnkwV3NjMlI5ZjYxSU4xTllqClRxRnBDY0REbEtMN3B6VGMrVDY1UlA4bkNlRlJSaTI4MCtHRis3MG1ZbnFreGNwV1hHSEFIcHBvdHJRRDR1UHgKdUt3c3Y0SEV3VnZnZE9WeFVkUng1Z25HR0g1NlFjQ1hqbE1MaW5tSVlkdkhzUEJwU0R1NVVRTmJGY2FETklKdgpmTHpkcFZUN1g5cFRwd1QxTW9pZGZUQTJSZEJvNXI4alR4VDZ0czNva0ZUNWpCbUdZL2J2VUJzcFp4V1V5QVdkCndPa1lidGRvSkFoeXdYS2V1aXhiZU05RWpWc0twUGNKeUpsengrZUt5YTBuS0tuR1BNakJ5cXphWnBPVE9FR3EKUHYzeXlGN1E5V1pZU20yWEFnTUJBQUVDZ2dHQUJKbVJSQ2Rsa1c0NGpoWWJuajV3MEpzQkpEUCtyaXhFeE1tQQpMYVYrTFN2NFdCTG4xbkdhdUVZay9qbG5IdkdwLzlEM2drY0hQNENuYlJxUUVmK0l4SUtGdlczUXZENlo2T1JhCmlYUDJYbThGTEFsSGtUL2lLbjE5Yjd6d2VYTk8yYW9yMlpxdjBOcDg4aU9RelNVazhLZkx0RUZia1QrL3kzMy8KdGRRQUFMUWRSaWpMSVV3Z21MWWVwMktJb2VXQjBLemx6bjZTb3Jtd2FZNDBxQ3ZvNWdoUmJCbHcxT0hFTnYxYQpibFIyMTNvRWZiaThnNmZCbTAzbSsrSGNSQTBkMFJBYlRhekNCZnBqdXZUaTNrYjArZUR2WWFqMFRJUVZwbExXCmg5clE4b0IwN2FEbjFvWmIwTVAwdURHdnhZV0d2N2xxeFRSTDl5T2RTQVdEdzcxQnh4VWtFQ1QreWdNQngxZFQKazd3d0NCSXY4YUhLeGIzZDlEN0FmSVd5ZDVZUm9yZFlhNXlqMUJScExjaDZmYWxwMjFHa05QUzBpaGRqTDBhZQpEWWc3cG9PYVkvM1hkRDNXWkJNRTdRbE9RbHdiLzFhelhWRUs1VXMvQXFwUEhnNi9nekcyQ1RhZVlBSUxRblBrCkZkbUJWREtqM1B0SEx4M2ZvOFg1WUJHS1FEOWhBb0hCQU93L2xDRnpWVUcxQktsMU8zZ2hxbUx2N1VpN1R2bGsKWG05V2dpVjNhYkxRTjcvb1VUUmNVR1M2SG84UDRpVzNJYmRLVHpHYnU5WXRSRHhoSmlMRWk0Z0dUV2V5bjFYcgpoMFJZajJyNTlKeUEvOS94YUVyTVFxa3I0WG9ETUxKUnpKRDhTZjBBQmVUdnZ2dlpZYkVpZk1rTVpxSGRERUtGCnMwTEdZVU1hSS8zdHJqQ0FRNkIyNVBvcHdBeGkxNXpESmU2WnZLZ2NSaThpMDduZW0rQndOcHJRMU5oNWZZS1YKSVpvWFFVWlpwaEhxOGVJeGtXUHhma2NwMC9FMHU2N08xUUtCd1FDNFdUMjY4UDNpSGk3eUtGbWJEV2ErcWw1SgpxYXV3bXRJRUZxMGRXVE5wWkw4ZlFDN0IwOXRUVE95dENZclpHek92VWJpVEREV3VjTzcrbkxxaEp0YzRXVmxyClJhQ3ltTm1WN2t5MDgzbUJub0VMZ01vQjRqUFJTNnNNMGhUbXdObnRHOFBDZmJTYnlWM21DUGVnMmJaMGVWZGYKQmQ1dnVsdXp0ZHBQSVRZaUwwaFAxSm40WXN1OVNZb0k0S2EveXQ2VTNNYXZzNHAwY29sSFhZUmtJcWZOaitNcwpEUUViVkZERmZTQldjVjlzN3g5ZVJ2aTU5UEVXcE81R09vWFArTHNDZ2NFQTRDUEtCSnFKenRkUlh2ME11UU1uCnhzcGZVOXZ5SjRia1dibTNySmhJdmcveWRLNlRMSnhRNGQvN1VqdjlrVTdZUEMvU1J2eThENDNPNllJNlRrNHYKRzVUdkoyMCs0cU9kS0dqbFdOZGhEb01OUUlpbkxCL3pOdEdkRU1lcUVlU3RzdmpKc2JHdDVmRFlQOVdVYkJ5TwpTNmpxVHJPTUNDa1ZWRXNteUNVcTlLWGwxN281YnlxZVFBSVFaUy81NUk3NWxCQmoveE1rTzJCTmhGRUJqc1NuCjZlWXJxbDVKaC9TNWRwcU5vWk00amxOYnZnRE5NZ2RTaVczVDJVcndyZjhwQW9IQVlsbWFDV1lRek5YMWpkUGgKR2t1b0NRaXpqUEVzVytmOUs1azllbTdnY3RZQThSYzQyc2ZBTjB6TzUvSXpWV2loeG1MKzZkU1Z2eDhaSWxWVApiQzVnbS90dkxUL1VYL1FVQVYxRkp6VE9HazBKNDYwdUdKc3BzZnVBb2pKaVhFbCsrblRabDZXZytZd1F3RzBBClQ1eFhMd1NkakdDQkwzSnBBaE4vQ01CYk5SbXNwb3B5S29YcTFHMnJhdGtQblRzS1RMa01keWgrTVduNXUwMDEKR0ljMHB3S2czQnVELzZTWUF3U2lmL3UwUVZYQmtuYWlzL0x0dkhyNWRCWTgxWnVKQW9IQWVDYkhISHRKUzRkawp0NS9hMVY5ZkZuU1IrS2RONldwTG1mSG1aZW9zRnE5Z3U4eUdFTU1aWlp2dEZkOUtZa2ZMcDQ3SVNxdmNDYVJDClZNNEZFcjZOOFd2dWdKbFNnVDJMcHFxSktJUjF2WVk3MFZSZlBTQjdwMEYydlFnRnZta3FhcUZwR2NvaG15UkwKK1Q5bkd0UzhTZGdGNTJZenNYbjBWMHM2Z1piN0VsWitrc29vVldnMFgrcVNyMitjcWFkSndReFVyQVovcUlQRApJQ3QyK0FOMkxYSDl5Zko5Y1lhM0ZpSytET3IrK0d1U0hWdHpkQno3dGJQQm5kMWpEWmxPCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg== -kind: Secret -metadata: - name: enigmabbs-ssh-key - namespace: enigmabbs