VPSでFiveMサーバーを立ち上げる方法
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の権限を持つディレクトリである .sshはdrwx------
、
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/server-start.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