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는 공개 로그나 스크린샷에서 가리세요.
- 정상 종료 후 data 백업
- SteamCMD app_update 896660 validate 실행
- 서비스 시작 후 Game server connected 확인
- Steam 방식은 2456-2457/udp와 포트포워딩 확인
- Crossplay는 LAN IP가 아닌 조인 코드·목록·공인 주소로 확인
- 클라이언트와 서버 빌드가 다르면 양쪽 업데이트 후 재시도
검증 범위와 공식 참고자료
Iron Gate의 공식 Dedicated Server 안내에서 앱 설치, 포트 범위, Crossplay 제한, 저장 경로, 자동 백업 인수와 SIGINT 종료 방식을 확인했습니다. 실제 월드나 참여 암호는 사용하지 않았습니다.