SameOS ~/tools/valheim-linux-dedicated-server.md

Valheim 전용 서버를 Linux에 SteamCMD로 열기

작성·공식 문서 확인일 2026-08-29 · SameOS operator

Valheim 서버는 설치보다 Steam 백엔드와 Crossplay 백엔드의 접속 방식 차이, 업데이트가 원본 시작 스크립트를 덮는 문제, 월드와 권한 파일의 실제 저장 위치를 아는 것이 중요합니다. 이 글은 공식 앱 896660을 전용 계정으로 설치하고 systemd에서 정상 종료하며 월드 복사본까지 남기는 구성을 다룹니다.

Steam과 Crossplay 중 먼저 선택

기본 Steam 백엔드는 지정 포트와 그다음 포트를 함께 사용하며 공식 기본 범위는 UDP 2456-2457입니다. 집 밖에서 접속하려면 두 포트를 서버로 전달해야 합니다. -crossplay를 넣으면 PlayFab 릴레이를 사용해 라우터 포트포워딩 없이 여러 플랫폼이 접속할 수 있습니다.

Crossplay에서는 공인 주소, 조인 코드나 서버 목록을 사용하고 로컬 IP나 loopback 주소로는 접속할 수 없다는 공식 제한이 있습니다. 따라서 같은 집에서 내부 IP 테스트가 필요한지, 다른 플랫폼 친구가 필요한지를 먼저 결정해야 이후 진단 방식이 꼬이지 않습니다.

전용 계정으로 앱 896660 설치

SteamCMD는 anonymous 로그인을 지원합니다. 서버 파일과 월드 데이터를 분리해 두면 업데이트와 복구가 쉬우므로 실행 파일은 /srv/valheim/server, 저장 데이터는 /srv/valheim/data에 둡니다. 공식 문서는 새 Linux에서 libatomic1과 PulseAudio 라이브러리가 필요할 수 있다고 안내합니다.

sudo apt update
sudo apt install -y steamcmd libatomic1 libpulse0
sudo useradd --system --create-home --home-dir /srv/valheim \
  --shell /usr/sbin/nologin valheim
sudo install -d -o valheim -g valheim /srv/valheim/server /srv/valheim/data

sudo -u valheim steamcmd \
  +force_install_dir /srv/valheim/server \
  +login anonymous +app_update 896660 validate +quit

업데이트에 덮이지 않는 시작 설정

공식 start_server.sh는 업데이트 때 원본으로 돌아갈 수 있으므로 직접 고치지 말고 복사본이나 systemd 설정에 인수를 둡니다. -savedir로 월드와 adminlist.txt, bannedlist.txt, permittedlist.txt를 실행 파일 밖에 모으면 백업 대상이 명확해집니다.

아래는 비공개 Steam 서버 예제입니다. PASSWORD는 실제 참여 암호로 교체해야 하며 명령행 인수는 같은 서버의 프로세스 목록에서 보일 수 있습니다. 공용 호스트의 여러 사용자와 계정을 공유하지 말고 서비스 파일 권한을 제한하세요.

# /etc/systemd/system/valheim.service
[Unit]
Description=Valheim Dedicated Server
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=valheim
Group=valheim
WorkingDirectory=/srv/valheim/server
Environment=SteamAppId=892970
Environment=LD_LIBRARY_PATH=/srv/valheim/server/linux64
ExecStart=/srv/valheim/server/valheim_server.x86_64 \
  -nographics -batchmode -name "Friends Valheim" \
  -port 2456 -world "Dedicated" -password "PASSWORD" \
  -savedir /srv/valheim/data -public 0 \
  -saveinterval 1800 -backups 4 -backupshort 7200 -backuplong 43200
KillSignal=SIGINT
TimeoutStopSec=90
Restart=on-failure
RestartSec=15

[Install]
WantedBy=multi-user.target

Crossplay가 필요하면 공식 인수 -crossplay를 추가합니다. Steam 방식과 Crossplay 방식을 동시에 진단하지 말고 선택한 백엔드를 운영 기록에 남기세요.

서비스와 네트워크 확인

공식 안내의 준비 완료 기준은 로그의 Game server connected입니다. systemd 상태가 active여도 그 문구 전에는 목록 등록과 월드 로딩이 끝나지 않았을 수 있습니다. Steam 방식이면 UDP 두 포트가 리스닝하는지 확인하고 같은 LAN에서 먼저 접속합니다.

sudo systemctl daemon-reload
sudo systemctl enable --now valheim
sudo journalctl -u valheim -f

# Steam 백엔드일 때
sudo ss -lunp | grep -E ':2456|:2457'
sudo ufw allow 2456:2457/udp

권한 목록과 월드 백업

adminlist.txt, bannedlist.txt, permittedlist.txt에는 표시 이름이 아니라 대소문자를 구분하는 Platform User ID를 한 줄에 하나씩 넣습니다. permittedlist에 한 명이라도 추가하면 그 목록 밖의 사람은 모두 차단되므로 적용 전 친구 ID가 빠지지 않았는지 확인해야 합니다.

정상 종료는 강제 kill이 아니라 SIGINT, 즉 터미널의 Ctrl+C에 해당합니다. 종료 뒤 /srv/valheim/data 전체를 보관하면 월드와 권한 목록이 함께 움직입니다. 실행 파일은 SteamCMD로 다시 받을 수 있지만 그 시점의 정확한 빌드가 필요하면 앱 manifest나 업데이트 일자도 기록합니다.

sudo systemctl stop valheim
sudo -u valheim tar -C /srv/valheim -czf \
  /srv/valheim/valheim-data-$(date +%F-%H%M).tar.gz data
sudo systemctl start valheim

gzip -t /srv/valheim/valheim-data-YYYY-MM-DD-HHMM.tar.gz
tar -tzf /srv/valheim/valheim-data-YYYY-MM-DD-HHMM.tar.gz | head

업데이트와 접속 실패 순서

업데이트가 start_server.sh를 되돌려도 이 구성은 systemd에 인수가 있어 영향을 받지 않습니다. 서버 이름, 월드 이름, 참여 암호와 Platform User ID는 공개 로그나 스크린샷에서 가리세요.

검증 범위와 공식 참고자료

Iron Gate의 공식 Dedicated Server 안내에서 앱 설치, 포트 범위, Crossplay 제한, 저장 경로, 자동 백업 인수와 SIGINT 종료 방식을 확인했습니다. 실제 월드나 참여 암호는 사용하지 않았습니다.

SameOS 작성·번역·검수 원칙 보기

게임 서버 백업 복구 훈련 Palworld 리눅스 서버 Factorio 헤드리스 서버