Linuxにゲームサーバーを置く勉強した時のメモ

権限を設定

Linuxサーバにアップロードした後

ゲーム名_Dataのフォルダの権限に755を設定

ゲーム名.x86_64の実行ファイルの権限を744に設定

サービスを作る

/etc/systemd/system/サービス名.service

Descriptionに簡単な説明を書く

ExecStart に UnityでLinux出力した場所の実行ファイルを指定

Restartは no に設定

[Unit]
Description=Valentine2022

[Service]
ExecStart = /home/Valentine2022/Valentine2022.x86_64
Restart = no
Type = simple
WorkingDirectory=/home/Valentine2022
Environment=HOME=/home/Valentine2022

[Install]
WantedBy=multi-user.target

サービスが落ちた時に自動的に起動するには Restartをalwaysにする

[Unit]
Description=Valentine2022

[Service]
ExecStart = /home/Valentine2022/Valentine2022.x86_64
RestartSec=30s
Restart=always
TimeoutStartSec=0
Type = simple
WorkingDirectory=/home/Valentine2022
Environment=HOME=/home/Valentine2022

[Install]
WantedBy=multi-user.target
サービスのコマンド

サービス開始

systemctl start ゲーム名

サービス再起動

systemctl restart ゲーム名

サービス停止

systemctl stop ゲーム名

サービスの自動起動

systemctl enable ゲーム名

サービスの自動起動を解除

systemctl disable ゲーム名

サービスの状態を確認する

systemctl status ゲーム名

サービスログを確認するコマンド

journalctl -u ゲーム名.service

サービスログを自動更新で確認するコマンド

journalctl -u ゲーム名.service -f

SSL証明書

LetsEncryptのフォルダに移動

cd /etc/letsencrypt/live/www.misaki-vanilla.com/

証明書作る

openssl pkcs12 -export -out /etc/letsencrypt/live/www.misaki-vanilla.com/cert.pfx -inkey /etc/letsencrypt/live/www.misaki-vanilla.com/privkey.pem -in /etc/letsencrypt/live/www.misaki-vanilla.com/cert.pem -certfile /etc/letsencrypt/live/www.misaki-vanilla.com/chain.pem -passin pass:"" -passout pass:""

OpenSSL 3.0の場合 -legacyをつける

openssl pkcs12 -legacy -export -out /etc/letsencrypt/live/misaki-vanilla.com/cert.pfx -inkey /etc/letsencrypt/live/misaki-vanilla.com/privkey.pem -in /etc/letsencrypt/live/misaki-vanilla.com/cert.pem -certfile /etc/letsencrypt/live/misaki-vanilla.com/chain.pem -passin pass:"" -passout pass:""

リンクを張る

ln -s /etc/letsencrypt/live/www.misaki-vanilla.com/cert.pfx /home/Valentine2022/cert.pfx

Json形式に変換

echo ‘{“path”:”./cert.pfx”,”password”:””}’ > /home/Valentine2022/cert.json

Let’s Encrypt自動更新

/etc/letsencrypt/renewal/www.misaki-vanilla.com.conf

[renewalparams]の下にrenew_hook = /home/cert.sh をつける key_typeをrsaにする

[renewalparams]
renew_hook = /home/cert.sh
account = **************************************
authenticator = webroot
server = https://acme-v02.api.letsencrypt.org/directory
webroot_path = /home/html,
key_type = rsa
[[webroot_map]]
misaki-vanilla.com = /home/html

シェルスクリプト /home/cert.sh 権限は744

#!/bin/bash

openssl pkcs12 -export -out /etc/letsencrypt/live/www.misaki-vanilla.com/cert.pfx -inkey /etc/letsencrypt/live/www.misaki-vanilla.com/privkey.pem -in /etc/letsencrypt/live/www.misaki-vanilla.com/cert.pem -certfile /etc/letsencrypt/live/www.misaki-vanilla.com/chain.pem -passin pass:"" -passout pass:""

systemctl restart valentine2022

sleep 30

/sbin/reboot

WebサイトもSSL更新する場合はこれも追加

cert.sh シェルスクリプトに systemctl restart nginx

証明書更新タイミングについて

letsencryptログの場所

/var/log/letsencrypt/letsencrypt.log

・Kusanagiサーバー

crontab -eで毎日3時7分頃チェックを行っている

07 03 * * * /usr/bin/kusanagi update cert

・古いletsencrypt

手動で実行タイミングを設定する必要がある crontab -e

00 03 * * * certbot renew

・新しいletsencrypt

systemctl list-timersで動いてるタイマーを確認

動いていなかったら

cmd
systemctl enable --now certbot-renew.timer

certbot-renew.serviceが時間を管理している

/etc/systemd/system/snap.certbot.renew.timerもしくは

/etc/systemd/system/timers.target.wants/certbot-renew.timerのOnCalendar部分を編集して

下記を実行することで反映

systemctl daemon-reload

systemctl restart snap.certbot.renew.timer もしくは
systemctl restart certbot-renew.timer

swapメモリ追加

メモリが少ないときにHDDから4GBメモリ分を追加する

fallocate -l 4G /swapfile

dd if=/dev/zero of=/swapfile count=1024 bs=4MiB

どちらか。 swaponでエラーする場合は下で生成を行う
fallocate failed:Text file buyというエラーで既にswapfileがある場合swapfile2にする
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
sed -i '$ a /swapfile swap swap defaults 0 0' /etc/fstab

確認

free -m
Nginx

Nginx インストール

yum nginx install

Nginx 有効

systemctl enable nginx

Nginx開始

systemctl start nginx

HTTP通信をHTTPSにリダイレクト

server {
    listen 80;
    server_name _;
    return 301 https://$host$request_uri;
}

HTTPS証明書設定

server {
    listen       443 ssl;
    server_name  _;

    ssl_protocols TLSv1.2;
    ssl_ciphers EECDH+AESGCM:EECDH+AES;
    ssl_ecdh_curve prime256v1;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;

    ssl_certificate /etc/letsencrypt/live/misaki-vanilla.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/misaki-vanilla.com/privkey.pem;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

ポートフォワーディング

    location /game/ {
        proxy_pass https://127.0.0.1:8000/;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

proxy_passでPermission deniedが出る場合

/usr/sbin/setsebool httpd_can_network_connect true
/usr/sbin/setsebool httpd_can_network_relay true
Linuxログ 重くなるので削除

100MBだけ残して削除

sudo journalctl --vacuum-size=100M

1日分だけ残して削除

sudo journalctl --vacuum-time=1days

ログファイルの最大保存を指定する

/etc/systemd/journald.conf

SystemMaxUse=100M
Let’s Encrypt 新しいバージョン

Nginxのサーバーネームにドメインを設定

nginx
server {
    listen       80;
    server_name  test.misaki-vanilla.com;
cmd
dnf install epel-release
cmd
dnf install certbot python3-certbot-nginx
cmd
certbot --nginx

古いLet’s Encryptを削除

sudo apt-get remove certbot
sudo dnf remove certbot
sudo yum remove certbot
sudo rm -rf /usr/bin/certbot

認証用にポート80を開放

sudo yum install epel-release

sudo yum install snapd

sudo systemctl enable --now snapd.socket

sudo ln -s /var/lib/snapd/snap /snap

reboot か再接続
少し時間 10秒ぐらいあけてから実行
sudo snap install core

sudo snap refresh core

インストール

sudo snap install --classic certbot

sudo ln -s /snap/bin/certbot /usr/bin/certbot

バージョン確認
sudo certbot --version

証明書発行

/usr/bin/certbot -n certonly --standalone -d ドメイン -m メールアドレス --key-type rsa --agree-tos

Nginxありの場合はこちら

/usr/bin/certbot -n certonly --webroot -w /usr/share/nginx/html -d ドメイン -m メールアドレス --key-type rsa --agree-tos