본문 바로가기
게임/Factorio

구글 클라우드 서버로 24시간 헤드리스 팩토리오 서버 만들기

by LeoLoveFox 2021. 4. 24.

헤드리스 서버란 똑같은 멀티플레이어 호스트인데, 플레이어 즉 캐릭터만 없다고 이해하면 편할 것 같습니다.

 

현재 구글 클라우드 플랫폼에서는 처음 가입하면 무료로 90일 동안 사용할 수 있는 300$의 크레딧이 제공됩니다.

이걸 활용해 팩토리오 서버를 만들어서 세이브 파일을 업로드해 24시간 구동시킬 수 있는 방법을 소개해 드리겠습니다.

 

내용이 많이 길어서 천천히 인내심을 가지고 따라 해 주세요!

 

먼저 구글 클라우드 서비스를 이용해서 컴퓨터를 하나 만들어야 합니다.

cloud.google.com 으로 이동한 다음 구글 계정에 로그인하면 '무료로 시작하기' 버튼이 생깁니다.

누르면 개인정보와 결제 수단을 등록합시다. 이때 신용카드를 등록하는 이유는 자동 가입을 방지하기 위함으로,

무료 체험판 종료 후 자동으로 결제되지 않으니 안심하셔도 됩니다!

 

가입이 완료되면 자신의 대시보드에 진입하게 됩니다.

우리는 컴퓨터를 사용해서 서버를 만들어야 하니 "Compute Engine 탭의 VM 인스턴스" 항목을 선택한 후 잠시 기다리면 새 인스턴스를 만들 수 있게 됩니다.

 

Compute Engine API 사용 버튼을 누른 후

 

인스턴스 만들기 버튼을 눌러줍니다.

 

이제 설정해줘야 할 것은 인스턴스의 이름과 서비스 지역, 머신 구성, 부팅 디스크를 골라야 합니다.

한국 안에서 게임을 하시는 분들은 위 사진처럼 제가 만든 구성을 따라 만드시면 기가팩토리가 아닌 이상

무난 무난하게 운영할 수 있는 사양으로 생성할 수 있습니다.

 

밑에서 방화벽 허용 항목을 체크하고, 아래 내용을 펼칩니다.

 

네트워킹 탭에서 default 네트워크 인터페이스 항목을 펼쳐서 외부 IP 주소를 임시에서 IP 주소 만들기로 바꿔주면

 

이름은 원하는 걸로 정하고 예약을 누르신 후 잠시 기다리면 IP주소가 발급됩니다.

네트워크 인터페이스의 완료 탭으로 누르고 맨 밑 인스턴스 만들기 버튼을 눌러주세요.

 

정상적으로 만들어졌다면 위 사진과 같이 인스턴스 목록이 뜹니다.

이제 서버 안에서 세부적으로 다뤄야 하기 때문에 목록 오른쪽 SSH 버튼을 누르면 새 창으로 서버가 열리게 됩니다.

 

먼저 해야 할 일은 리눅스 안의 데이터들을 업데이트해줘야 합니다.

sudo apt-get update 를 입력하고 엔터.

 

이렇게 자동으로 업데이트가 완료됩니다.

그다음은 sudo apt-get install -y default-jre-headless 를 입력해줍니다.

 

설치가 완료되면 대략 위 이미지 비슷하게 뜹니다.

 

그다음으로 해주어야 하는 일은 팩토리오 홈페이지에서 배포하는 헤드리스 서버를 다운로드하여야 합니다.

www.factorio.com/download 에 접속하면

 

Download | Factorio

 

www.factorio.com

 

사진 오른쪽 밑에 있는 것처럼 리눅스의 펭귄 마크에 머리가 없는(Headless) 버전을 다운로드할 수 있는데,

클릭해서 다운로드하는 게 아닌 서버 안에서 직접 다운로드하여야 합니다. 버튼을 우클릭해서 링크를 복사해주세요.

 

먼저 파일을 저장하기 위해 폴더를 만들고,

sudo mkdir /srv/FactorioServer

다음엔 폴더에 대한 권한을 자신이 접근할 수 있게 설정하는 커맨드를 입력해줍니다.

sudo chown 이름 /srv/FactorioServer

 

cd /srv/FactorioServer/ 커맨드를 입력해서 해당 디렉터리로 이동합니다.

그다음엔 wget 명령어를 사용해서 아까 복사해둔 링크를 붙여 넣어서 팩토리오 파일을 다운로드합니다.

 

ls -al 명령어로 해당 디렉터리에 어떤 항목이 있는지 볼 수 있습니다. linux64 파일이 생겼습니다.

tar -xJf linux64 를 입력해 압축을 풀어줍니다.

 

다시 ls -al 명령어로 목록을 확인해보면 factorio 폴더가 생성되었음을 확인할 수 있습니다.

기존에 다운로드한 압축파일은 용량을 차지할 뿐이니 rm linux64 를 입력해서 지워줍니다.

 

cd factoriocd data 를 순서대로 입력해서 data 폴더로 접근합니다.

server-setting.example.json 파일을 찾을 수 있는데 우리는 이것을 다운로드해서 수정해야 합니다.

 

서버에 있는 파일들에 접근하고 다운로드할 수 있게 프로그램을 하나 깔아야 하는데 저는 FileZilla를 사용하겠습니다.

https://filezilla-project.org/

 

FileZilla - The free FTP solution

Overview Welcome to the homepage of FileZilla®, the free FTP solution. The FileZilla Client not only supports FTP, but also FTP over TLS (FTPS) and SFTP. It is open source software distributed free of charge under the terms of the GNU General Public Licen

filezilla-project.org

이곳으로 이동해서 프로그램을 받고 설치해줍니다.

 

FileZilla 통해 서버에 접속하기 위해선 ssh 키가 필요합니다. 이를 위해서 프로그램을 하나 더 다운로드합니다.

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

 

Download PuTTY: latest release (0.74)

This page contains download links for the latest released version of PuTTY. Currently this is 0.74, released on 2020-06-27. When new releases come out, this page will update to contain the latest, so this is a good page to bookmark or link to. Alternativel

www.chiark.greenend.org.uk

주황색 테두리로 표시해둔 것을 찾아서 다운로드해주시면 됩니다.

 

받은 파일을 실행 후 Generate 버튼을 누르고 마우스를 무작위로 움직이면 아래처럼 Key 값이 생성됩니다.

주황색 테두리 안에 있는 긴 내용 전체를 텍스트 파일 같은 곳에 복사해두고, Save private key 버튼을 눌러줍니다.

 

저장할 때의 파일 이름은 Key comment 안의 내용을 복사해서 붙여 넣어주세요.

 

이제 다시 구글 클라우드 플랫폼으로 이동해서 "메타데이터 - SSH 키 - 수정" 항목으로 이동해줍니다.

 

항목 추가 버튼을 눌러서 아까 복사해둔 긴 내용을 붙여 넣고 저장합니다.

 

이제 FileZilla를 실행하고 편집 - 설정 창에 진입합니다.

 

SFTP 탭에서 키 파일 추가 버튼을 눌러서 아까 저장한 ppk 파일을 등록해줍니다.

그리고 왼쪽 아래 확인 버튼을 눌러 메인 화면으로 돌아옵니다.

 

호스트에 "sftp://서버의 외부 IP 주소", 사용자명에 키 파일의 이름을 입력하고 빠른 연결을 눌러줍니다.

 

'디렉터리 목록 조회 성공'이 나타나면 성공적으로 접속된 것이고, 우측에 서버의 디렉터리가 보입니다.

 

최상위 폴더 "/" 디렉터리를 눌러 항목을 조회하고 내리다 보면,

아까 생성한 srv/FactorioServer/factorio 경로가 있습니다.

data 폴더에 들어가면 server-setting.example.json 파일이 있습니다.

 

파일을 다운로드하려면 왼쪽 디렉터리 창에서 원하는 경로를 설정한 후 오른쪽 서버 디렉터리 창에서 파일을 더블클릭하면 왼쪽 경로에 파일이 다운로드됩니다. 저는 찾기 쉽게 Documents 폴더에 다운로드하였습니다.

 

다운로드 후에는 파일 이름을 "server-setting.json"으로 바꾸고 우클릭 - 연결 프로그램 - 메모장을 선택해 수정합니다.

원하는 대로 설정하고 저장하면 됩니다.

유저 토큰의 경우에는 PC에 설치된 팩토리오에서 값을 불러올 수 있는데,

C:\Users\이름\AppData\Roaming\Factorio 경로에 가면 "player-data.json" 파일이 있는데 그 안에서 아래 사진처럼 확인할 수 있습니다.

 

다른 설정값은 위 사진처럼 세이브 간격, 세이브 생성 수, 자동 일시정지 기능을 설정해주면 됩니다.

제 세팅 값은 자동화가 완료된 시점에서 60분 간격으로 9개까지 세이브 파일이 생성되도록 설정했으며,

자동 일시정지 기능은 주변에 레이저 포탑을 넓게 둘러놔서 바이터들이 습격할 수 없기에 꺼뒀습니다. ( -> false)

 

저장 후 FileZilla에서 다시 서버에 업로드해야 하는데 아직 factorio/data 폴더에 접근할 권한이 없어서 실패합니다.

권한 설정을 하기 위해 ssh 창으로 갑니다.

명령어 순서대로 설명하면

sudo su                           - Root 권한 획득

cd ..                                - 상위 폴더로 이동

cd ..                                - 상위 폴더로 이동

cd srv                              - srv 폴더로 이동

chmod 777 FactorioServer  - FactorioServer 디렉터리에 접근 권한 부여

cd FactorioServer              - FactorioServer 폴더로 이동

chmod 777 factorio           - factorio 디렉터리에 접근 권한 부여

cd factorio                       - factorio 폴더로 이동

chmod 777 data                - data 디렉터리에 접근 권한 부여

exit                                 - Root 권한 해제

입니다.

 

이제 FileZilla에서 간단하게 factorio/data 디렉터리에 편집한 "server-setting.json" 파일을 드래그 앤 드롭해서 업로드합니다.

 

위 사진처럼 "server-setting.json" 파일이 생성되었습니다. 새로고침 해야 나타나는 경우도 있습니다.

 

24시간 돌릴 세이브 파일을 넣기 위해 factorio 디렉터리에서 우클릭 - 디렉터리 만들기 클릭을 한 다음

이름은 "saves" 로 입력한 후 확인을 눌러줍니다.

파일을 넣기 위해서는 접근 권한이 필요하기 때문에 ssh 창에 가서 아까와 같은 방법으로 아래 이미지처럼

saves 디렉터리에 접근 권한을 부여합니다.

 

PC에서 플레이하던 세이브 파일을 찾아서 서버에 업로드할 차례입니다.

 

C:\Users\이름\AppData\Roaming\Factorio\saves 경로에 가면 zip 파일 형태로 세이브 파일들이 저장되어 있는 모습을 확인할 수 있습니다.

 

마찬가지로 원하는 세이브 파일을 서버의 saves 폴더에 드래그 앤 드롭하면 업로드가 완료됩니다.

 

 

이제 팩토리오 서버를 켜보도록 하겠습니다.

/srv/FactorioServer/factorio 디렉터리로 이동해서

 

bin/x64/factorio --start-server saves/"세이브 파일 이름. zip" --server-settings data/server-settings.json

입력합니다.

 

여러 텍스트가 지나가고 마지막에 "Matching server connection resumed" 문구가 뜬다면

정상적으로 서버가 시작됐다는 뜻입니다.

 

게임에 접속하기 전에 팩토리오에서 사용하는 포트 34197을 서버에서 허용해주면 접속할 수 있게 됩니다.

VM 인스턴스 대시보드에서 방화벽 규칙 설정 탭을 누릅니다.

 

방화벽 규칙 만들기 버튼을 클릭합니다.

 

맨 위에서 이름은 아무렇게나 정하시고 (ex. factoriowall)

대상을 "네트워크의 모든 인스턴스"

소스 IP 범위에 "0.0.0.0/0"를 추가

udp 항목 체크 후, 34197을 입력하고 만들기 버튼을 누르면 됩니다.

 

이제 정말로 팩토리오에 접속해봅시다!

 

게임 내에서 "멀티플레이어 - 공개 게임 찾아보기" 에서 server-settings.json 에서 지정한 게임 이름을 검색해서

나온다면 정상적으로 호스팅 되고 있다는 뜻입니다.

 

게임 참가 버튼을 눌러 암호를 입력하는 란이 뜬다면 정상적으로 게임에 접속할 수 있습니다.

 

그런데, 이렇게만 세팅해두면 ssh 창을 껐을 때는 서버가 같이 종료돼서 24시간 서버의 의미가 없습니다.

이 문제는 서버를 자동으로 켜고 끄는 명령어 파일만 만들어주면 해결됩니다.

 

ssh 창에서 Ctrl+C 를 입력해서 서버를 종료합니다.

nano run.sh 를 입력해서 서버를 실행하는 명령어 파일을 생성합니다.

 

아무것도 없는 편집 창이 뜨는데, 여기다가

nohup bin/x64/factorio --start-server saves/"세이브 파일 이름.zip" --server-settings data/server-settings.json &

을 입력합니다. 마지막에 "&" 기호를 꼭 붙여 넣어야 합니다.

여기서 nohup 명령어는 ssh 터미널 세션이 끊겨도 실행을 멈추지 않고 동작하게 하는 명령어입니다.

 

그다음 Ctrl+X 를 입력하면 변경 내용을 저장할 것인지 묻는데, y를 입력하고 엔터를 누르면 저장이 됩니다.

이 파일은 실행하는데 권한이 필요하기 때문에,

위 이미지와 같이 파일에 권한을 부여해줍니다.

 

다음은 서버를 멈추는 명령어 파일입니다.

nano stop.sh 를 입력해서 편집창으로 들어갑니다.

 

간단하게 응용프로그램 종료 명령어를 사용하면 됩니다.

pkill factorio

마찬가지로 Ctrl+X 를 입력하고 y 누르고 엔터를 누르면 stop.sh 파일이 생성됩니다.

이 파일도 실행하는데 권한이 필요하기 때문에,

다시 한번 위 이미지와 같이 권한을 부여해줍니다.

 

ls -al 명령어로 확인해보면 초록색으로 권한이 부여된 "run.sh"와 "stop.sh" 파일이 생성된 것을 확인할 수 있습니다.

 

이제 다시 서버를 실행시켜 봅시다.

./run.sh 를 입력하면 백그라운드에서 팩토리오 서버가 시작하게 됩니다.

엔터를 누르면 명령어를 다시 입력할 수 있는데, top 명령어로 현재 실행되고 있는 프로세스를 살펴보면

제일 위에서 팩토리오가 약 57퍼센트의 CPU 점유율을 가지고 실행되고 있는 모습을 확인할 수 있습니다.

실행 중인 프로세스 리스트에서 나오려면 Ctrl+C 를 입력하면 됩니다.

 

이제 ssh 터미널을 종료해서 팩토리오 서버는 24시간 실행되게 설정되었습니다!

 

나중에 서버를 멈출 일이 생겼을 때에는 마찬가지로 /srv/FactorioServer/factorio 경로에서

./stop.sh 를 입력하면 팩토리오가 종료될 것입니다.

 

사용중인 모드가 있다면 서버의 mods 폴더에 chmod 777로 권한을 부여하고 PC에 설치된 모드 디렉터리에서 FileZilla를 통해 업로드 하면 됩니다.

 

 - 팩토리오 버전 업데이트는 ./stop.sh 로 종료 후 /srv/FactorioServer 디렉터리에 wget으로 최신 버전의 팩토리오를 다운로드해서 압축해제 후 덮어씌우면 된다고 합니다. 혹시 모르니 세이브 파일은 꼭 백업 해두고 업데이트 진행 합시다.

 

부족하고 긴 글 읽어주셔서 감사합니다!

 

참고한 Youtube 자료 : www.youtube.com/watch?v=EfG2Y6mayDY

반응형

댓글