Compare commits

...
4 Commits
3 changed files with 106 additions and 30 deletions

No files matched your search

+10 -3
View File
@@ -16,16 +16,23 @@ RUN apt-get update && \
lib32stdc++6 && \ lib32stdc++6 && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
RUN mkdir -p ${STEAMCMDDIR} ${VALHEIMDIR} ${BACKUPDIR} && \ # Create directories and install SteamCMD
cd ${STEAMCMDDIR} && \ RUN mkdir -p "${STEAMCMDDIR}" "${VALHEIMDIR}" "${BACKUPDIR}" && \
cd "${STEAMCMDDIR}" && \
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz && \ wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz && \
tar -xzf steamcmd_linux.tar.gz && rm steamcmd_linux.tar.gz tar -xzf steamcmd_linux.tar.gz && rm steamcmd_linux.tar.gz
# Set working directory BEFORE copying scripts
WORKDIR ${VALHEIMDIR}
# Copy scripts
COPY entrypoint.sh /entrypoint.sh COPY entrypoint.sh /entrypoint.sh
COPY backup.sh /backup.sh COPY backup.sh /backup.sh
RUN chmod +x /entrypoint.sh /backup.sh RUN chmod +x /entrypoint.sh /backup.sh
WORKDIR ${VALHEIMDIR} # Copy managed wrapper into the correct directory
COPY start_server_managed.sh ./start_server_managed.sh
RUN chmod +x ./start_server_managed.sh
EXPOSE 2456/udp 2457/udp 2458/udp EXPOSE 2456/udp 2457/udp 2458/udp
+66 -27
View File
@@ -1,11 +1,11 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -uo pipefail
export TERM=xterm export TERM=xterm
STEAMCMDDIR="${STEAMCMDDIR:-/opt/steamcmd}" STEAMCMDDIR="${STEAMCMDDIR:-/opt/steamcmd}"
VALHEIMDIR="${VALHEIMDIR:-/opt/valheim}" VALHEIMDIR="${VALHEIMDIR:-/opt/valheim}"
BACKUPDIR="${BACKUPDIR:-/backups}" BACKUPDIR="${BACKUPDIR:-/mnt/backups}"
BEPINEX_URL="${BEPINEX_URL:-https://cloud.theminisip.ca/index.php/s/K32Lnjc6TyWXaiN/download}" BEPINEX_URL="${BEPINEX_URL:-https://cloud.theminisip.ca/index.php/s/K32Lnjc6TyWXaiN/download}"
@@ -14,6 +14,9 @@ WORLD_NAME="${WORLD_NAME:-Dedicated}"
SERVER_PASSWORD="${SERVER_PASSWORD:-changeme}" SERVER_PASSWORD="${SERVER_PASSWORD:-changeme}"
PUBLIC="${PUBLIC:-1}" PUBLIC="${PUBLIC:-1}"
# REQUIRED FIX: remove trailing slash
UNITY3D_WORLDS="/root/.config/unity3d/IronGate/Valheim"
install_valheim() { install_valheim() {
echo "[valheim] installing/updating via SteamCMD (forced non-interactive)..." echo "[valheim] installing/updating via SteamCMD (forced non-interactive)..."
"${STEAMCMDDIR}/steamcmd.sh" \ "${STEAMCMDDIR}/steamcmd.sh" \
@@ -39,7 +42,6 @@ install_bepinex() {
mkdir -p /tmp/bepinex mkdir -p /tmp/bepinex
unzip -q /tmp/bepinex.zip -d /tmp/bepinex unzip -q /tmp/bepinex.zip -d /tmp/bepinex
# Folder confirmed by you
bep_root="/tmp/bepinex/BepInExPack_Valheim" bep_root="/tmp/bepinex/BepInExPack_Valheim"
if [ ! -d "${bep_root}" ]; then if [ ! -d "${bep_root}" ]; then
@@ -51,34 +53,34 @@ install_bepinex() {
echo "[bepinex] copying contents of ${bep_root} to ${VALHEIMDIR}" echo "[bepinex] copying contents of ${bep_root} to ${VALHEIMDIR}"
cp -r "${bep_root}/"* "${VALHEIMDIR}/" cp -r "${bep_root}/"* "${VALHEIMDIR}/"
# Fix CRLF if present
sed -i 's/\r$//' "${VALHEIMDIR}/start_server_bepinex.sh" sed -i 's/\r$//' "${VALHEIMDIR}/start_server_bepinex.sh"
# Ensure executable
chmod +x "${VALHEIMDIR}/start_server_bepinex.sh" chmod +x "${VALHEIMDIR}/start_server_bepinex.sh"
echo "[managed] patching BepInEx password override..."
sed -i '/PASSWORD=/d' "${VALHEIMDIR}/start_server_bepinex.sh"
sed -i '/changeme/d' "${VALHEIMDIR}/start_server_bepinex.sh"
sed -i '/password/d' "${VALHEIMDIR}/start_server_bepinex.sh"
echo "[managed] rewriting BepInEx launch command..."
sed -i '/exec .*valheim_server.x86_64/d' "${VALHEIMDIR}/start_server_bepinex.sh"
cat >> "${VALHEIMDIR}/start_server_bepinex.sh" << EOF
exec ./valheim_server.x86_64 \
-name "${SERVER_NAME}" \
-port 2456 \
-world "${WORLD_NAME}" \
-savedir "${UNITY3D_WORLDS}" \
-password "${SERVER_PASSWORD}" \
-public "${PUBLIC}"
EOF
} }
backup_world() { install_wrapper() {
echo "[backup] backing up world..." echo "[managed] installing wrapper script..."
ts=$(date +"%Y-%m-%d_%H-%M-%S") cat > "${VALHEIMDIR}/start_server_managed.sh" << EOF
mkdir -p "${BACKUPDIR}" #!/usr/bin/env bash
cp "/config/worlds_local/${WORLD_NAME}.db" "${BACKUPDIR}/${WORLD_NAME}_${ts}.db" || true set -uo pipefail
cp "/config/worlds_local/${WORLD_NAME}.fwl" "${BACKUPDIR}/${WORLD_NAME}_${ts}.fwl" || true
}
install_valheim
install_bepinex
# Background backup loop
while true; do
sleep 3600
backup_world
done &
cd "${VALHEIMDIR}"
echo "[valheim] using password: ${SERVER_PASSWORD}"
echo "[valheim] starting server..."
exec ./start_server_bepinex.sh \ exec ./start_server_bepinex.sh \
-name "${SERVER_NAME}" \ -name "${SERVER_NAME}" \
@@ -86,3 +88,40 @@ exec ./start_server_bepinex.sh \
-world "${WORLD_NAME}" \ -world "${WORLD_NAME}" \
-password "${SERVER_PASSWORD}" \ -password "${SERVER_PASSWORD}" \
-public "${PUBLIC}" -public "${PUBLIC}"
EOF
chmod +x "${VALHEIMDIR}/start_server_managed.sh"
}
backup_world() {
echo "[backup] backing up world directory..."
ts=$(date +"%Y-%m-%d_%H-%M-%S")
mkdir -p "${BACKUPDIR}"
world_dir="${UNITY3D_WORLDS}/worlds_local/${WORLD_NAME}"
if [ -d "${world_dir}" ]; then
zip -r "${BACKUPDIR}/${WORLD_NAME}_${ts}.zip" "${world_dir}"
echo "[backup] created ${BACKUPDIR}/${WORLD_NAME}_${ts}.zip"
else
echo "[backup] WARNING: world directory not found: ${world_dir}"
fi
}
install_valheim
install_bepinex
install_wrapper
mkdir -p "${UNITY3D_WORLDS}" || true
while true; do
sleep 3600
backup_world
done &
cd "${VALHEIMDIR}"
echo "[valheim] starting server..."
# REQUIRED FIX: clean exec line
exec ./start_server_managed.sh
+30
View File
@@ -2,11 +2,41 @@ cat > "${VALHEIMDIR}/start_server_managed.sh" << 'EOF'
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -euo pipefail
# -------------------------
# BACKUP FUNCTION + LOOP
# -------------------------
backup_world() {
echo "[backup] backing up world directory..."
ts=$(date +"%Y-%m-%d_%H-%M-%S")
world_dir="/root/.config/unity3d/IronGate/Valheim/worlds_local/${WORLD_NAME}"
if [ -d "${world_dir}" ]; then
mkdir -p "/mnt/backups"
zip -r "/mnt/backups/${WORLD_NAME}_${ts}.zip" "${world_dir}"
echo "[backup] created /mnt/backups/${WORLD_NAME}_${ts}.zip"
else
echo "[backup] WARNING: world directory not found: ${world_dir}"
fi
}
# Run backups every hour in background
while true; do
sleep 3600
backup_world
done &
# -------------------------
# START SERVER
# -------------------------
# Forward environment variables into the BepInEx launcher # Forward environment variables into the BepInEx launcher
exec ./start_server_bepinex.sh \ exec ./start_server_bepinex.sh \
-name "${SERVER_NAME}" \ -name "${SERVER_NAME}" \
-port 2456 \ -port 2456 \
-world "${WORLD_NAME}" \ -world "${WORLD_NAME}" \
-savedir "/root/.config/unity3d/IronGate/Valheim/worlds_local" \
-password "${SERVER_PASSWORD}" \ -password "${SERVER_PASSWORD}" \
-public "${PUBLIC}" -public "${PUBLIC}"
EOF EOF