Docker로 Longvinter 서버 열기 (AMD64, ARM64)

>

Created:

먼저 AMD64 아키텍처에서는 Longvinter에서 공식적으로 사설 서버를 도커로 돌릴 수 있도록 소스 코드를 올려두긴 했다. 하지만 이를 제대로 사용하려면 소스 코드를 수정해야 한다. 그렇지 않으면 단순히 서버를 실행하기만 하는 용도로만 사용할 수 있다.

여기서 사용할 이미지(GitHub)는 Palworld 서버를 열 때 사용한 이미지의 소스 코드를 롱빈터용으로 수정한 것이다.


리눅스에 도커가 설치되어 있다는 가정 하에 진행

이미지 다운로드

이 과정은 생략해도 어차피 나중에 자동으로 다운로드가 진행된다.

Shell
1
docker pull kimzuni/longvinter-docker-server:latest

서버 실행 준비

docker-compose.yml 파일 작성

Shell
1
2
3
mkdir -p ~/docker/longvinter
cd ~/docker/longvinter
vi docker-compose.yml

원래 제일 첫 번째 줄에 적던 version: "x.x" 구문은 이제 의미가 없어졌다고 작성하지 않아도 된다고 한다.

./docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
services:
  longvinter-server:
    container_name: longvinter-server
    image: kimzuni/longvinter-docker-server:latest
    restart: unless-stopped
    stop_grace_period: 30s
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    ports:
      - "7777:7777/tcp"
      - "7777:7777/udp"
      - "27016:27016/tcp"
      - "27016:27016/udp"
    environment:
      TZ: "UTC"
      PUID: 1000
      PGID: 1000
      PORT: 7777
      QUERY_PORT: 27016
      CFG_SERVER_NAME: "Unnamed Island"
      CFG_MAX_PLAYERS: 32
      CFG_SERVER_MOTD: "Welcome to Longvinter Island!"
      CFG_PASSWORD: ""
      CFG_COMMUNITY_WEBSITE: "www.longvinter.com"
      CFG_COOP_PLAY: false
      CFG_COOP_SPAWN: 0
      CFG_SERVER_TAG: "none"
      CFG_ADMIN_STEAM_ID: ""
      CFG_ENABLE_PVP: true
      CFG_TENT_DECAY: true
      CFG_MAX_TENTS: 2
    volumes:
      - ./data:/data
    networks:
      games:
        ipv4_address: 172.16.11.12
networks:
  games:
    name: games
    external: true

서버 실행

Shell
1
2
docker compose up -d # 실행
docker logs -f longvinter-server # 컨테이너 로그 확인

필터링을 위한 비속어가 포함된 굉장히 긴 로그가 나타나고 잠시 후 아래와 같은 로그가 뜨면 서버에 접속할 수 있다.

Log
1
2
3
4
5
6
7
8
9
****Starting Server****
/data/LongvinterServer.sh -Port=7777 -QueryPort=27016
time="2024-04-04T08:50:08Z" level=info msg="read crontab: /home/steam/server/crontab"
...
[2024.04.04-09.04.21:243][ 74]LogEOS: Verbose: CreateSession: Successfully created session 'Unnamed Island' with ID 'fb347698360146d5971fe63b8ad04bfe'
[2024.04.04-09.04.21:573][ 84]LogNet: ReplicationDriverClass is null! Not using ReplicationDriver.
[2024.04.04-09.04.21:573][ 84]LogNetCore: DDoS detection status: detection enabled: 0 analytics enabled: 0
[2024.04.04-09.04.21:573][ 84]LogInit: BSD IPv4/6: Socket queue. Rx: 262144 (config 131072) Tx: 262144 (config 131072)
[2024.04.04-09.04.21:573][ 84]LogNet: Created socket for bind address: 0.0.0.0 on port 7787

그 외

docker compose 명령어는 docker-compose.yml 파일이 있는 위치 또는 그 하위에서 실행해야 햔다.

Shell
1
2
3
4
docker restart longvinter-server # 재시작
docker compose down # 종료
docker pause longvinter-server # 일시정지
docker unpause longvinter-server # 일시정지 해제

Failed to find object

ARM64 버전에선 아래와 같은 경고 메시지가 굉장히 많이 뜨긴 하지만, 서버를 들어가보면 모든 오브젝트들이 아무런 문제 없이 표시되며, 정상적으로 플레이가 가능하다.

Log
1
[2024.04.03-12.41.47:651][  0]LogUObjectGlobals: Warning: Failed to find object 'Object None.None'