Compare commits
4
Commits
1dedc36cc9
...
1.0.1.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f92b1c899f | ||
|
|
bbf8ed9af7 | ||
|
|
92a71171d0 | ||
|
|
3a8f3d9cd4 |
No files matched your search
+10
-3
@@ -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
@@ -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
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in new issue
Block a user