prole/workstation/Dockerfile
chrisfu aad4c9c919 installer: switch workstation build to Docker, drop Vagrant
- 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.
2025-12-03 22:55:21 -08:00

152 lines
5.1 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ====================================================================================
# 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: youll 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"]