🎃

VPSでFiveMサーバーを立ち上げる方法

2023/10/25に公開

GTA:VのModサーバーであるFiveMをVPSでホストするまでの手順

サーバー引っ越し時の自分用メモ兼、いつか来るときのための引き継ぎ書

また、ここではVPSの申し込みに関しては取り扱わないことにする

【参考】
QBCore Documentation :
Linux Installation
揚げポテほかほかクラフト :
【Linux版】GTA5のFiveMサーバーの立て方を徹底解説します!【QBCore】

サーバーの前提

  • OS : Ubuntu 22.04 LTS
  • rootパスワード設定済み
  • ターミナルにアクセス可能

サーバーへのアクセス

基本的にはサーバーに割り当てられたipに申し込み時に決めたrootパスワードでログインするだけ

ssh root@<ipアドレス>
ちょっとした例外

たまに、予めユーザー名が指定されてたり、アクセス時に使用する鍵が決まってたりする
例えばWebArena Indigoだと

ユーザー名 : ubuntu
パスワード : 半角の空白1文字
秘密鍵 : 申し込み時に決めた公開鍵に対応するもの

という風になっていてその場合は

ssh ubuntu@<ipアドレス> -i <秘密鍵のパス>

でアクセスすることが出来る


また、このようにしてrootユーザー以外でSSH接続した場合は

su root

でrootユーザーに切り替えておく

パッケージの更新

apt update & apt upgrade -y

一般ユーザーの作成

#ユーザーの作成
adduser <ユーザー名>
#sudoを使えるようにする
usermod -aG sudo <ユーザー名>

SSHの設定

SSH用の鍵ペアがない場合

クライアント(サーバーにアクセスする端末)側で実行する
未インストールの場合はOpenSSHクライアントをインストールする

#鍵ペアの生成
ssh-keygen -t ed25519

passphraseの設定をすることで使用時にパスワードの必要な鍵を生成することが出来る
ここを空白にして鍵を生成すると、秘密鍵さえ持っていればSSH接続できるようになる

拡張子が.pubなのが公開鍵で、拡張子がないのが秘密鍵

作成した一般ユーザーに切り替える

su <ユーザー名>

公開鍵の登録

#ホームディレクトリに移動
cd ~
#フォルダ作成
mkdir .ssh
#フォルダのアクセス権限設定
chmod 700 .ssh
#作成したフォルダに移動
cd .ssh
#鍵の保存
vi authorized_keys
#ファイルのアクセス権限設定
chmod 600 authorized_keys
アクセス権限

アクセス権限には以下の4種類があり、それぞれ数字と文字が割り当てられている

権限 数字 文字
読み取り 4 r
書き込み 2 w
実行 1 x
権限無し 0 -

これらの数字や文字を組み合わせて権限を表現する
数字の場合は各権限の数字の和で表す

権限 数字 文字
読み書き実行 7 rwx
読み書き 6 rw

コマンドで権限を変更するときは自分グループ他人の権限を変更し、同じ順番で権限を表記する
そうすると先ほど設定したSSH用のフォルダやファイルの権限は次のような意味であることが分かる

ファイル・ディレクトリ 権限 自分 ユーザー 他人
.ssh 700 読み/書き/実行 権限無し 権限無し
authorized_keys 600 読み/書き 権限無し 権限無し

また、ls -laなどで見れる権限の場合最初にファイル種別を示す1文字がつく

文字 種別
- ファイル
d ディレクトリ
l シンボリックリンク

そうすると、700の権限を持つディレクトリである .sshdrwx------
600の権限を持つファイルである authorized_keys-rw-------という表記であらわされる

viの使い方

入力モード : i
コマンドモード : Esc
検索 : /
閉じる : :q
保存して閉じる : :wq

保存後、一般ユーザーでSSH接続できることを確認する
また、今後の作業は一般ユーザーで行うことを想定する

SSHサーバーの設定

#sshd_configのバックアップを作成
sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_backup
#SSHサーバーの設定変更
sudo vi /etc/ssh/sshd_config

以下の点を変更し、必要に応じてコメントアウトを解除する

項目 変更後の値 説明
Port 任意の空きポート SSH接続に使用するポート
PermitRootLogin no ルートユーザーでのSSHログイン
PasswordAuthentication no パスワード認証を用いたSSH接続の許可
PubkeyAuthentication yes 公開鍵認証を用いたSSH接続の許可
SSHのポートを変更する理由

SSHで使用する22番ポートはウェルノウンポートに含まれ、攻撃の対象にされやすい
そこで、任意のポートに変更してなるべく攻撃しにくいようにしておく

変更後はsshd_configの設定に誤りがないか確認する

sudo sshd -t

コンソールに何も出力されなければ誤りはない

sshd_configをもとに戻したくなったら

バックアップ作成時と逆のコマンドを入力する

sudo cp -p /etc/ssh/sshd_config_backup /etc/ssh/sshd_config

SSHサーバーを再起動

sudo systemctl restart sshd

再起動後、ポートを変更した場合はSSH接続時に-p <ポート番号>のオプションを入れてどのポートを使用するか指定する

また、以下の3点を確認する

  • Rootユーザーでログインできない
  • パスワードを使用したログインが出来ない
  • 一般ユーザーで秘密鍵を使用した場合ログインできる

VPNの設定

今回は、Tailscaleという簡単にP2P型のVPNを構築できるサービスを利用します

インストール方法は公式サイトを参照

若しくは以下のコマンドを実行

curl -fsSL https://tailscale.com/install.sh | sh

インストールしたら

sudo tailscale up

コマンドでTailscaleにサーバーを接続する
接続後、必要に応じて外部ユーザーへの共有を行う

ファイアウォールの設定

以下のポートを開放する必要があります

ポート プロトコル 送信元 用途
22 or 任意 TCP Anywhere SSH接続用
445 TCP Tailscale ファイル共有用
3306 TCP/UDP Tailscale データベース接続用
30120 TCP/UDP Anywhere FiveM接続用
40120 TCP/UDP Tailscale txAdmin接続用

ファイル共有などのサーバー管理者のみが利用するものに関してはTailscaleからのアクセスのみを許可するようにしています

SSHを同様に制限しても使用できますが、万が一Tailscaleのサービスが停止したりうまく動かなかったときにサーバーへアクセスする手段がなくなるためここでは設定しません

ルールの追加

Anywhere

#アクセスの許可(TCP/UDP)
sudo ufw allow <番号>
#アクセスの許可(TCPのみ)
sudo ufw allow <番号>/tcp


Tailscale

#アクセスの許可(IPv4 TCP/UDP)
sudo ufw allow from 100.64.0.0/10 to any port <番号>
#アクセスの許可(IPv4 TCP)
sudo ufw allow from 100.64.0.0/10 to any port <番号> proto tcp

#アクセスの許可(IPv6 TCP/UDP)
sudo ufw allow from fd7a:115c:a1e0:ab12::/64 to any port <番号>
#アクセスの許可(IPv6 TCP)
sudo ufw allow from fd7a:115c:a1e0:ab12::/64 to any port <番号> proto tcp
ルールの削除

現在追加されているルールを確認

sudo ufw status numbered

以下出力例


Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 1234                       ALLOW IN    Anywhere
[ 2] 2222/tcp                   ALLOW IN    Anywhere
[ 3] 1234 (v6)                  ALLOW IN    Anywhere (v6)
[ 4] 2222/tcp (v6)              ALLOW IN    Anywhere (v6)

削除したいルールの番号を確認して削除する

sudo ufw delete <番号>

ルールの追加、削除を行た後はファイアウォールの再読み込みを行う

sudo ufw reload

データベースの設定

MariaDBサーバーのインストール

sudo apt-get install mariadb-server

MariaDBサーバーのセットアップ

sudo mysql_secure_installation
設定項目(一例)
項目
Enter Current password for root rootパスワードの入力
Switch to unix_socket authentication n
Change the root password n
Remove anonymous users y
Disallow root login remotely y
Remove test database access to is y
Reload privilege tables now y

MariaDBサーバーにユーザーを追加

MariaDBサーバーにアクセス

sudo mysql

SQL実行

#ユーザー追加
create user '<ユーザー名>'@'%' identified by '<パスワード>';
#権限追加
grant all privileges on *.* to '<ユーザー名>'@'%' identified by '<パスワード>';
#権限再読み込み
flush privileges;

最後にMariaDBサーバーから切断する

exit

MariaDBサーバーの設定

sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
項目
bind-address 0.0.0.0

MariaDBの再起動

sudo systemctl restart mariadb

FiveMサーバーの立ち上げ

cd ~
mkdir fivem && cd $_

サーバーのダウンロード

ここから安定板(RECOMMENDED)のダウンロードリンクを取得する

wget <取得したリンク>

ダウンロードしたファイルを展開する

tar -xvf fx.tar.xz

展開後不要になったファイルを削除する場合は以下のコマンド

rm fx.tar.xz

サービスの作成

スクリプトを作成する

vi server-start.sh

以下の内容を書き込む

#!/bin/bash
cd "$(dirname "$0")"
screen -S fivem -d -m bash ./run.sh
screen コマンド

screenコマンドでは仮想端末を作成し、処理をバックグラウンドで実行することが出来る
今回使用したオプションは以下の2つ

オプション
-S 仮想端末に名前を設定する
-d -m 作成した端末に接続しない

screen -S fivem -d -m bash ./run.shは以下の動作をする
fiemという名前の仮想端末を作成し、bash ./run.shというコマンドを実行するが、作成した端末に接続はしないで処理を完了する

サービスを作成する

vi fivem-server.service

以下の内容を自身の環境に合わせて書き込む

[Unit]
Description=FiveM Server
ConditionPathExists=/home/<ユーザー名>/fivem
After=tailscaled.service

[Service]
Type=forking
ExecStart=/home/<ユーザー名>/fivem/start-server.sh
Restart=always
User=<ユーザー名>

[Install]
WantedBy=multi-user.target

2つのファイルを作成したら以下のコマンドを実行する

#スクリプトファイルに実行権限を付与
chmod 0755 server-start.sh
#ファイルのコピー
sudo cp fivem-server.service /etc/systemd/system
#一応?
sudo systemctl daemon-reload
#サービスの有効化
sudo systemctl enable fivem-server
#サービスの開始
sudo systemctl start fivem-server

これにより、VPSの再起動時に自動的にFiveMサーバーが起動するようになる
手動でサーバーの動作を変えたいときはサービスの状態を変える

#サービスの停止
sudo systemctl stop fivem-server
#サービスの再起動
sudo systemctl restart fivem-server

txAdminへのアクセス

サービスを起動したらサーバーのTailscale内のIPを用いてtxAdminに接続する
アクセスするURLはこんな感じhttp://<TailscaleのIP>:40120

初めてアクセスすると4ケタの番号を入力するように言われる
番号はサーバーを立ち上げてるターミナルで確認できるが、今回は仮想端末を使用しているため以下のコマンドで仮想端末にアクセスする

screen -r <端末名>

端末名はscreenコマンドの-Sオプションで指定している
何も変更していなければfivem

端末から切断する

仮想端末から切断するときはCtrl + a → dもしくはCtrl + a → Ctrl + d

また、同一の仮想端末に対して複数接続することはできない
接続中に誤ってSSHを切断したりしてしまうと、仮想端末への接続だけが生き残ってしまう
その場合は以下のコマンドで接続を切断する

screen -d <端末名>

4ケタの番号を入力後Cfx.reのアカウントを使用してtxAdminの認証を行う
その後、バックアップパスワードの設定と利用規約の同意を行い、マスターアカウントの作成を完了する

txAdminの設定

1 Welcome,〇〇〇!

Nextを選択する

2 Server Name

サーバーリストなどに表示される名前の設定
任意の名前を設定後、Nextを選択する

Go to Reciipe Deployerを押して次の設定に進む

3 Deployment Type

Popular Recipesを選択する

4 Select Templte

QBCore Frameworkを選択する

5 Data Location

何も変更せずSaveを選択する

6 Finish

Go to Recipe Deployerを選択して次の設定に進む

Step 1: Review Recipe

何も変更せずにNextを選択する

Step 2: Input Parameters

License KeyはKeymasterから発行する
tebexを利用したアセットを使用する場合や、上位のサーバーキーを利用する場合はその資格のあるcfxアカウントで生成したLicense Keyを使用する

License Keyを入力したら必ずShow/Hide Database optionsを選択しメニューを開く
メニューを開いたら以下の通りに設定する

項目
Database Host TailscaleのIP
Database Username ここで作成したユーザー
Database Password ここで設定したパスワード

設定が終わったらRun Recipeを選択する

Step 3: Run Recipe

レシピが実行される
実行完了までやや時間がかかる

レシピ実行に失敗するパターン

時々、Githubに接続できなくなったりして実行が失敗するときがある
一度txAdminを閉じて時間をおいてから再度設定を試みたりしてみる

この段階でtxAdminを閉じると最初からセットアップをやり直す必要がある
また、途中までダウンロードが進んでいた場合、サーバー内にゴミが溜まっているため最後に失敗した際のフォルダを削除したほうが良い

レシピの実行が完了したらNextを選択する

Step 4: Configure server.cfg

以下の通りに設定する

項目
sv_hostname サーバー名
sv_projectName サーバー名
sv_projectDesc サーバーの説明文

server.cfgの設定が終わったらSave & Run Serverを選択しサーバーを起動する

サーバーのコンソールが表示され、色々流れていく様子が見えたらサーバーの立ち上げは完了

Sambaの設定

sudo apt install -y samba

バックアップの作成

sudo cp -a /etc/samba/smb.conf /etc/samba/smb.conf.backup
sudo vi smb.conf

以下の内容をファイルの最後に追加する

[fivem]
path = /home/<ユーザー名>/fivem
browsable = yes
writable = yes
guest ok = no
read only = no

パスワード設定

sudo smbpasswd -a username <ユーザー名>

アクセスする際は\\<TailscaleのIP>\fivemでアクセスする

Discussion