mirror of
https://github.com/dredx/prole.git
synced 2026-09-24 17:54:32 +00:00
- Remove Vagrant from dependency checks and UI; use Docker for workstation build.\n- Add WORKSTATION_VERSION ARG + OCI version label in workstation/Dockerfile; tag image as prole-workstation:<version>.\n- Add installer.workstation helpers: parse version, compose canonical docker build (auto platform flags on Apple Silicon).\n- Refactor install.py Workstation page to display/execute docker build; write logs to logs/workstation-docker-<ts>.log; update summary links.\n- Update Deploy page copy: "Build workstation Docker image".\n- Centralize footer buttons styling/layout with installer.screen.create_nav_footer and use it from install.py.\n- Update installer package docs to describe Docker-based workstation helpers.
152 lines
5.1 KiB
Docker
152 lines
5.1 KiB
Docker
# ====================================================================================
|
||
# Monster image: Unreal Engine (Linux) + Synapse (Matrix homeserver)
|
||
# ====================================================================================
|
||
FROM ubuntu:22.04
|
||
|
||
# Version tag for the workstation image
|
||
ARG WORKSTATION_VERSION=0.1.0
|
||
LABEL org.opencontainers.image.version="${WORKSTATION_VERSION}"
|
||
|
||
ENV DEBIAN_FRONTEND=noninteractive \
|
||
TZ=Etc/UTC \
|
||
UE_ROOT=/opt/UnrealEngine \
|
||
SYNAPSE_VENV=/opt/synapse \
|
||
SYNAPSE_CONFIG_PATH=/data/homeserver.yaml
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# Base OS deps
|
||
# ------------------------------------------------------------------------------
|
||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||
ca-certificates \
|
||
curl \
|
||
wget \
|
||
unzip \
|
||
python3 \
|
||
python3-pip \
|
||
python3-venv \
|
||
libffi-dev \
|
||
libssl-dev \
|
||
libjpeg-dev \
|
||
libpq-dev \
|
||
sqlite3 \
|
||
tini \
|
||
supervisor \
|
||
locales \
|
||
less vim \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
# Set UTF-8 locale
|
||
RUN locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8
|
||
ENV LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# Unreal Engine: install from local ZIP
|
||
# ------------------------------------------------------------------------------
|
||
# Place Linux_Unreal_Engine_5.7.1.zip next to this Dockerfile before building
|
||
COPY Linux_Unreal_Engine_5.7.1.zip /tmp/ue.zip
|
||
|
||
RUN mkdir -p "${UE_ROOT}" \
|
||
&& unzip -q /tmp/ue.zip -d "${UE_ROOT}" \
|
||
&& rm /tmp/ue.zip
|
||
|
||
# If the ZIP unpacks with an extra top-level directory, you may want to normalize:
|
||
# RUN mv "${UE_ROOT}"/Linux_Unreal_Engine_*/* "${UE_ROOT}"/ && rmdir "${UE_ROOT}"/Linux_Unreal_Engine_*
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# Synapse (Matrix homeserver) in a virtualenv
|
||
# ------------------------------------------------------------------------------
|
||
RUN python3 -m venv "${SYNAPSE_VENV}" \
|
||
&& "${SYNAPSE_VENV}/bin/pip" install --upgrade pip wheel \
|
||
&& "${SYNAPSE_VENV}/bin/pip" install matrix-synapse
|
||
|
||
# Data directory for Synapse config, keys, DB, etc.
|
||
RUN mkdir -p /data \
|
||
&& chown -R root:root /data
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# Runtime scripts
|
||
# ------------------------------------------------------------------------------
|
||
|
||
# Synapse start script: expects /data/homeserver.yaml to already exist
|
||
# You can mount /data as a volume and pre-generate config per client
|
||
RUN mkdir -p /opt/scripts
|
||
RUN cat <<'EOF' > /opt/scripts/run-synapse.sh
|
||
#!/usr/bin/env bash
|
||
set -e
|
||
|
||
VENV="${SYNAPSE_VENV:-/opt/synapse}"
|
||
CONFIG="${SYNAPSE_CONFIG_PATH:-/data/homeserver.yaml}"
|
||
|
||
if [ ! -f "$CONFIG" ]; then
|
||
echo "ERROR: Synapse config not found at $CONFIG"
|
||
echo "You must generate homeserver.yaml and mount /data or set SYNAPSE_CONFIG_PATH."
|
||
exit 1
|
||
fi
|
||
|
||
exec "$VENV/bin/python" -m synapse.app.homeserver \
|
||
--config-path "$CONFIG"
|
||
EOF
|
||
RUN chmod +x /opt/scripts/run-synapse.sh
|
||
|
||
# Unreal start script: adjust for your packaged app
|
||
# TODO: Replace the command with your actual cooked Linux server/client binary
|
||
RUN cat <<'EOF' > /opt/scripts/run-unreal.sh
|
||
#!/usr/bin/env bash
|
||
set -e
|
||
|
||
UE_ROOT="${UE_ROOT:-/opt/UnrealEngine}"
|
||
|
||
# Example placeholder; replace with your actual binary & project path
|
||
# For example, if you have a packaged server:
|
||
# "$UE_ROOT/YourGame/Binaries/Linux/YourGameServer-Linux-Shipping"
|
||
if [ ! -x "$UE_ROOT/Engine/Binaries/Linux/UnrealEditor" ]; then
|
||
echo "WARNING: UnrealEditor not found or not executable. Fix /opt/scripts/run-unreal.sh."
|
||
fi
|
||
|
||
# Placeholder: just sleep to avoid crash-loop if you haven't wired in your app yet
|
||
# Replace this with the actual Unreal command.
|
||
exec "$UE_ROOT/Engine/Binaries/Linux/UnrealEditor" || exec sleep 3600
|
||
EOF
|
||
RUN chmod +x /opt/scripts/run-unreal.sh
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# Supervisor config: run Synapse + Unreal together
|
||
# ------------------------------------------------------------------------------
|
||
RUN mkdir -p /etc/supervisor/conf.d
|
||
|
||
RUN cat <<'EOF' > /etc/supervisor/conf.d/supervisord.conf
|
||
[supervisord]
|
||
nodaemon=true
|
||
logfile=/var/log/supervisord.log
|
||
pidfile=/var/run/supervisord.pid
|
||
|
||
[program:synapse]
|
||
command=/opt/scripts/run-synapse.sh
|
||
autostart=true
|
||
autorestart=true
|
||
priority=10
|
||
stdout_logfile=/var/log/synapse.log
|
||
stderr_logfile=/var/log/synapse.err
|
||
|
||
[program:unreal]
|
||
command=/opt/scripts/run-unreal.sh
|
||
autostart=true
|
||
autorestart=true
|
||
priority=20
|
||
stdout_logfile=/var/log/ueapp.log
|
||
stderr_logfile=/var/log/ueapp.err
|
||
EOF
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# Ports
|
||
# ------------------------------------------------------------------------------
|
||
# Synapse: 8008 (http), 8448 (federation / tls, if enabled)
|
||
# Unreal: you’ll add ports here depending on your game/server (e.g. 7777, 5901 for VNC, etc.)
|
||
EXPOSE 8008 8448
|
||
|
||
WORKDIR /opt
|
||
|
||
# Use tini as PID 1 for better signal handling
|
||
ENTRYPOINT ["/usr/bin/tini", "--"]
|
||
|
||
CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] |