Add Enigma BBS deployment files
Some checks failed
Build and Push Docker Image / build (push) Has been cancelled

This commit is contained in:
capitano
2026-04-07 18:19:11 +02:00
parent 3089316a25
commit f138e4a28f
8 changed files with 16 additions and 327 deletions

View File

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

View File

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

View File

@@ -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: {}

View File

@@ -1,6 +0,0 @@
apiVersion: v1
kind: Namespace
metadata:
name: enigmabbs
labels:
name: enigmabbs

View File

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

View File

@@ -1,8 +0,0 @@
apiVersion: v1
data:
.dockerconfigjson: eyJhdXRocyI6eyJnaXQuZ2lhY28ubmV0Ijp7InVzZXJuYW1lIjoiY2FwaXRhbm8iLCJwYXNzd29yZCI6ImE1ZTQ4NTJmOWU5ODI3OGM4MjhlNzA5YjdmOTcxYmE0NmQ0YWY5NjAiLCJlbWFpbCI6ImFkbWluQGdpYWNvLm5ldCIsImF1dGgiOiJZMkZ3YVhSaGJtODZZVFZsTkRnMU1tWTVaVGs0TWpjNFl6Z3lPR1UzTURsaU4yWTVOekZpWVRRMlpEUmhaamsyTUE9PSJ9fX0=
kind: Secret
metadata:
name: git-registry-secret
namespace: enigmabbs
type: kubernetes.io/dockerconfigjson

View File

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

View File

@@ -1,7 +0,0 @@
apiVersion: v1
data:
ssh_private_key.pem: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlHNHdJQkFBS0NBWUVBcWlBTmlqVnAzd2ZNblAxYld3WTRmb2Q1MFZza3VERDNlLzVuNVJUSExNNkZmd1pZCkNFeHlzUFNnSUNFaUpSajhLekVGcTJzZ3VoQUduRkIrb3VlTkFqVjlaSHlPZEtLeDZjb3N3Zk5DelZqdnJ0K1UKNFVzS0tyYVpVS3NWSmh2SUZodGhEUlJ1VHV5Y3NnOXpHYlV0VmFIYm1kNTFHNk93dUpvdG9KdTJ0Z3hyMEZXMgpWV3N1V2ZhcGlTRHhDWTRkeVg1V0JCbVhBNE9oc2wxYnBlN1JlUFBKS1hGbUNzYnkwV3NjMlI5ZjYxSU4xTllqClRxRnBDY0REbEtMN3B6VGMrVDY1UlA4bkNlRlJSaTI4MCtHRis3MG1ZbnFreGNwV1hHSEFIcHBvdHJRRDR1UHgKdUt3c3Y0SEV3VnZnZE9WeFVkUng1Z25HR0g1NlFjQ1hqbE1MaW5tSVlkdkhzUEJwU0R1NVVRTmJGY2FETklKdgpmTHpkcFZUN1g5cFRwd1QxTW9pZGZUQTJSZEJvNXI4alR4VDZ0czNva0ZUNWpCbUdZL2J2VUJzcFp4V1V5QVdkCndPa1lidGRvSkFoeXdYS2V1aXhiZU05RWpWc0twUGNKeUpsengrZUt5YTBuS0tuR1BNakJ5cXphWnBPVE9FR3EKUHYzeXlGN1E5V1pZU20yWEFnTUJBQUVDZ2dHQUJKbVJSQ2Rsa1c0NGpoWWJuajV3MEpzQkpEUCtyaXhFeE1tQQpMYVYrTFN2NFdCTG4xbkdhdUVZay9qbG5IdkdwLzlEM2drY0hQNENuYlJxUUVmK0l4SUtGdlczUXZENlo2T1JhCmlYUDJYbThGTEFsSGtUL2lLbjE5Yjd6d2VYTk8yYW9yMlpxdjBOcDg4aU9RelNVazhLZkx0RUZia1QrL3kzMy8KdGRRQUFMUWRSaWpMSVV3Z21MWWVwMktJb2VXQjBLemx6bjZTb3Jtd2FZNDBxQ3ZvNWdoUmJCbHcxT0hFTnYxYQpibFIyMTNvRWZiaThnNmZCbTAzbSsrSGNSQTBkMFJBYlRhekNCZnBqdXZUaTNrYjArZUR2WWFqMFRJUVZwbExXCmg5clE4b0IwN2FEbjFvWmIwTVAwdURHdnhZV0d2N2xxeFRSTDl5T2RTQVdEdzcxQnh4VWtFQ1QreWdNQngxZFQKazd3d0NCSXY4YUhLeGIzZDlEN0FmSVd5ZDVZUm9yZFlhNXlqMUJScExjaDZmYWxwMjFHa05QUzBpaGRqTDBhZQpEWWc3cG9PYVkvM1hkRDNXWkJNRTdRbE9RbHdiLzFhelhWRUs1VXMvQXFwUEhnNi9nekcyQ1RhZVlBSUxRblBrCkZkbUJWREtqM1B0SEx4M2ZvOFg1WUJHS1FEOWhBb0hCQU93L2xDRnpWVUcxQktsMU8zZ2hxbUx2N1VpN1R2bGsKWG05V2dpVjNhYkxRTjcvb1VUUmNVR1M2SG84UDRpVzNJYmRLVHpHYnU5WXRSRHhoSmlMRWk0Z0dUV2V5bjFYcgpoMFJZajJyNTlKeUEvOS94YUVyTVFxa3I0WG9ETUxKUnpKRDhTZjBBQmVUdnZ2dlpZYkVpZk1rTVpxSGRERUtGCnMwTEdZVU1hSS8zdHJqQ0FRNkIyNVBvcHdBeGkxNXpESmU2WnZLZ2NSaThpMDduZW0rQndOcHJRMU5oNWZZS1YKSVpvWFFVWlpwaEhxOGVJeGtXUHhma2NwMC9FMHU2N08xUUtCd1FDNFdUMjY4UDNpSGk3eUtGbWJEV2ErcWw1SgpxYXV3bXRJRUZxMGRXVE5wWkw4ZlFDN0IwOXRUVE95dENZclpHek92VWJpVEREV3VjTzcrbkxxaEp0YzRXVmxyClJhQ3ltTm1WN2t5MDgzbUJub0VMZ01vQjRqUFJTNnNNMGhUbXdObnRHOFBDZmJTYnlWM21DUGVnMmJaMGVWZGYKQmQ1dnVsdXp0ZHBQSVRZaUwwaFAxSm40WXN1OVNZb0k0S2EveXQ2VTNNYXZzNHAwY29sSFhZUmtJcWZOaitNcwpEUUViVkZERmZTQldjVjlzN3g5ZVJ2aTU5UEVXcE81R09vWFArTHNDZ2NFQTRDUEtCSnFKenRkUlh2ME11UU1uCnhzcGZVOXZ5SjRia1dibTNySmhJdmcveWRLNlRMSnhRNGQvN1VqdjlrVTdZUEMvU1J2eThENDNPNllJNlRrNHYKRzVUdkoyMCs0cU9kS0dqbFdOZGhEb01OUUlpbkxCL3pOdEdkRU1lcUVlU3RzdmpKc2JHdDVmRFlQOVdVYkJ5TwpTNmpxVHJPTUNDa1ZWRXNteUNVcTlLWGwxN281YnlxZVFBSVFaUy81NUk3NWxCQmoveE1rTzJCTmhGRUJqc1NuCjZlWXJxbDVKaC9TNWRwcU5vWk00amxOYnZnRE5NZ2RTaVczVDJVcndyZjhwQW9IQVlsbWFDV1lRek5YMWpkUGgKR2t1b0NRaXpqUEVzVytmOUs1azllbTdnY3RZQThSYzQyc2ZBTjB6TzUvSXpWV2loeG1MKzZkU1Z2eDhaSWxWVApiQzVnbS90dkxUL1VYL1FVQVYxRkp6VE9HazBKNDYwdUdKc3BzZnVBb2pKaVhFbCsrblRabDZXZytZd1F3RzBBClQ1eFhMd1NkakdDQkwzSnBBaE4vQ01CYk5SbXNwb3B5S29YcTFHMnJhdGtQblRzS1RMa01keWgrTVduNXUwMDEKR0ljMHB3S2czQnVELzZTWUF3U2lmL3UwUVZYQmtuYWlzL0x0dkhyNWRCWTgxWnVKQW9IQWVDYkhISHRKUzRkawp0NS9hMVY5ZkZuU1IrS2RONldwTG1mSG1aZW9zRnE5Z3U4eUdFTU1aWlp2dEZkOUtZa2ZMcDQ3SVNxdmNDYVJDClZNNEZFcjZOOFd2dWdKbFNnVDJMcHFxSktJUjF2WVk3MFZSZlBTQjdwMEYydlFnRnZta3FhcUZwR2NvaG15UkwKK1Q5bkd0UzhTZGdGNTJZenNYbjBWMHM2Z1piN0VsWitrc29vVldnMFgrcVNyMitjcWFkSndReFVyQVovcUlQRApJQ3QyK0FOMkxYSDl5Zko5Y1lhM0ZpSytET3IrK0d1U0hWdHpkQno3dGJQQm5kMWpEWmxPCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
kind: Secret
metadata:
name: enigmabbs-ssh-key
namespace: enigmabbs