RisingWorldサーバー構築(VPS編)自分用メモ、修正版
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

RisingWorldサーバー構築(VPS編)自分用メモ、修正版

2019-06-25 22:11
    検索で自分以外の人も見ちゃうかも知れないのに気が付きました(-_-;)
    RW_backupngWorldサーバー構築(VPS編)の文を、読み易いように無駄な部分を削り、
    ました。

    それでもまだ長いし読み難いですね。
    あくまで自分用のメモなんですよ・・・・(言い訳)

    一応、実際に630円のプランでコマンド打ちながら修正したので、Linuxの初心者でも再現出来るかも?(だって私も初心者レベルだし)

    サーバーリストにもっと、日本のサーバーが増えれば日本語ローカライズも夢じゃないと信じて加筆しました(*‘ω‘ *)

    修正前

    https://ch.nicovideo.jp/seven-rising/blomaga/ar1752433

    【事前準備】
    Googleの共有ドライブと、gmailと連動させるので事前にアカウントを作っておく。
    一人で2アカ作って良いのかは、私も理解してないですが。(セキュリティを考えると、専用に使える2アカウント目が好ましい)

    【VPS選定】
    ConohaVPSと契約する。(他社でもCent7.xxならOK?)
    https://www.conoha.jp/?btn_id=guide-vpsstartup-commonHeader_top&_ga=2.220647515.215200719.1556779168-734954735.1555038871


    プランは取りえず1GBを選んでおくと良いです。
    後でボタン一つで2Gとかに増やせます。(630円のは増設不可)



    【初期設定】
    ご利用ガイド VPSスタートアップガイドを読んでください
    https://support.conoha.jp/vps/guide/vpsstartup/?btn_id=vps_guide-vpsstartup
    ※公開鍵認証を設定する(root)の項目は、最後で良いかもです。
     SSHのルートログインは最終的に禁止にするだろうし。
     ※VPS追加時にコントロールパネルにて公開鍵認証の設定を行っている場合はパスワード認
     証でのログインが禁止されるので解除が面倒だったので、やらない方が良さそう。

    ConoHaさんや、お使いのVPSの初期設定を実施してから先に進みましょう。


    【ポート解放】
    RWで使うポートを開ける
    ※rootかsuで実行
    [ipテーブル]
    iptables -I INPUT 5 -p tcp -m tcp --dport 4254 -j ACCEPT
    iptables -I INPUT 5 -p tcp -m tcp --dport 4255 -j ACCEPT
    iptables -I INPUT 5 -p tcp -m tcp --dport 4256 -j ACCEPT
    iptables -I INPUT 5 -p tcp -m tcp --dport 4257 -j ACCEPT
    iptables -I INPUT 5 -p tcp -m tcp --dport 4258 -j ACCEPT
    iptables -I INPUT 5 -p tcp -m tcp --dport 4259 -j ACCEPT
    iptables -I INPUT 5 -p udp -m udp --dport 4254 -j ACCEPT
    iptables -I INPUT 5 -p udp -m udp --dport 4255 -j ACCEPT
    iptables -I INPUT 5 -p udp -m udp --dport 4256 -j ACCEPT
    iptables -I INPUT 5 -p udp -m udp --dport 4257 -j ACCEPT
    iptables -I INPUT 5 -p udp -m udp --dport 4258 -j ACCEPT
    iptables -I INPUT 5 -p udp -m udp --dport 4259 -j ACCEPT
    service iptables save
    cat /etc/sysconfig/iptables
    iptables -L
    [ファイアーウォール]
    ※rootかsuで実行
    firewall-cmd --zone=public --add-port=4254/tcp --permanent
    firewall-cmd --zone=public --add-port=4255/tcp --permanent
    firewall-cmd --zone=public --add-port=4256/tcp --permanent
    firewall-cmd --zone=public --add-port=4257/tcp --permanent
    firewall-cmd --zone=public --add-port=4258/tcp --permanent
    firewall-cmd --zone=public --add-port=4259/tcp --permanent
    firewall-cmd --zone=public --add-port=4254/udp --permanent
    firewall-cmd --zone=public --add-port=4255/udp --permanent
    firewall-cmd --zone=public --add-port=4256/udp --permanent
    firewall-cmd --zone=public --add-port=4257/udp --permanent
    firewall-cmd --zone=public --add-port=4258/udp --permanent
    firewall-cmd --zone=public --add-port=4259/udp --permanent
    firewall-cmd --reload
    firewall-cmd --list-all


    steamCMDを入れる】
    インストール場所作成
    ※rootかsuで実行
    mkdir -p ~/Steamcmd ~/steam-server/match

    yumを最新にする。
    ※rootかsuで実行
    yum -y update

    64bitOSで32bitのCMDを使用するために必要?(centOS6だと失敗する)
    ※rootかsuで実行
    yum -y install curl wget bzip2 gzip unzip python screen gcc glibc.i686 libstdc++.i686 ld-linux.so.2 zlib.i686 libstdc++.so.6


    パスワード設定が終わってない場合に必要(ConoHaの初期設定終わってれば不要)
    ※これ以下 一般ユーザー userでログインして作業してる想定
    useradd user
    passwd user
    usermod -G wheel user
    パスワードも設定

    CMD用のディレクトリ作成
    ※rootかsuで実行
    mkdir -p ~/Steamcmd ~/steam-server/match

    CMDディレクトリに移動
    cd ~/Steamcmd

    CMDのインストールコマンド
    ※rootかsuで実行
    curl -sqL "http://media.steampowered.com/installer/steamcmd_linux.tar.gz" | tar zxvf -

    「steamCMD」を起動して
    ※rootかsuで実行
    ./steamcmd.sh

    アンノンでログイン
    login anonymous

    インストールディレクトリを指定する。
    force_install_dir /home/user/csgo-server/match

    ライジングワールド 339010をインストールする
    app_update 339010 validate
    exit

    JAVA8をインストールする
    ※rootかsuで実行
    yum install java-1.8.0-openjdk

    ライジングワールドのディレクトリに移動
    cd /home/user/csgo-server/match/

    ライジングワールドサーバの設定ファイルを開く
    設定については下記の備忘録を参照する。
    https://ch.nicovideo.jp/seven-rising

    (設定ファイルゲーム本体)
    vim server.example.properties

    (設定ファイル ゲームでのユーザー権限など)

    ディレクトリ移動
    cd permissions.example

    ユーザ権限ファイルを開く
    vim default.permissions

    ※vim(vi)コマンドの操作方法は詳しくは書きません(自分で調べて!)
    キーボードのIキーでINSERTモード(入力モード)
    Escキーを押すとINSERTを抜ける
    テキストの編集を終えたい時は、キーボードの:キーを押すと下の方に「:」が表示され、下記を入力してエンターを押すと閉じます。

    wq  ←保存して閉じる
    q! ←保存しないで閉じる


    ワールドデータを定期バックアップする】
    参考文献
    https://qiita.com/aviscaerulea/items/53123ce5b79c80e31a71

    ・コピーコマンド(サーバー内で1日分上書きバックアップする)
    ※手動で1日分をバックアップするコマンド
    \cp -r /home/user/csgo-server/match/Worlds /home/user/Worlds_buckup

    グーグルドライブ(保存先)の設定 ※すでに共有設定になってること!
    CUI で Google ドライブにアクセスできる gdrive というツールを使う。
    公式サイトを参考にコマンドを導入して Google の OAth2 認証をするだけ。
    今回は Linux x64 だが、Windows, Mac 向けのバイナリも提供されている。

    $ wget -O drive https://drive.google.com/uc?id=0B3X9GlR6Embnb095MGxEYmJhY2c
    $ mv drive /usr/sbin/drive
    $ chmod 755 /usr/sbin/drive

    drive コマンド初回実行時に認証用の URL が出力され、認証キーの入力が求められる。
    別途ブラウザから出力された URL にアクセスして認証コード取得してコピペしてあげればいい。
    ※下記の認証用 URL はダミー
    $ drive
    Go to the following link in your browser:
    https://accounts.google.com/o/oauth2/auth?client_id=xxx.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=state
    Enter verification code: (認証コード入力)

    ※赤字の部分をコピーして、PCのブラウザのURL欄に張り付けてエンター、共有ドライブとして使うGoogleアカウントを選択して、許可を選択すると認証コードが表示されるので、コピーして、driveコマンドで表示された末尾「Enter verification code:」の処に、張り付けてエンター

    認証成功するとドバーッと gdrive の help が出力される。
    細かいオプション付けずにファイル単体をアップロードしてみる。

    ※共有ドライブとして使うGoogleアカウントとは、下記の写真のアプリのことです。






    ※下記ハッシュ等の一意的な情報はダミー
    $ echo hello > test.txt
    $ drive upload --file test.txt
    Id: vjBwDRvBT4MzCAD97cPhMJZg8Gpk
    Title: test.txt
    Size: 6.0 B
    Created: 2016-01-28 10:54:29
    Modified: 2016-01-28 10:54:29
    Owner: hoge
    Md5sum: 1zbEOm0DC864l6Eu7BSuYPOo4SesXuFN  
    Shared: False
    Parents: oqD9gj6ERKhII58ysa8
    MIME Type: text/plain; charset=utf-8
    Uploaded 'test.txt' at 3.0 B/s, total 6.0 B

    ディレクトリもアップロードしてみたが、これも元の階層のまま期待通り行われた。
    mkdir -p a/b/c
    echo hello > a/test_a.txt
    echo hello > a/b/test_b.txt
    echo hello > a/b/c/test_c.txt
    drive upload --file a
    ...
    ファイル毎にアップロード結果が出力される
    ...
    Google ドライブ上も階層通り。

    ・Googleドライブの宛先(ID)を調べる
    参考文献
    https://www.nextdoorwith.info/wp/se/linux-gdrive/
    結論から言うと、目的のフォルダを(Googleドライブ)PCで開いてURLの最後に記載されている値で確認可
    (例)https://drive.google.com/drive/folders/xxxxxxxxxxxxxxxxxxxxxxxxxx
    ※xxxxxxxxxxxxxxxxxxxxxxxの部分はダミーです




    定期バックアップ用のなんちゃってスクリプトを作る場所はユーザーディレクトリ直下
    再起動の方法を色々と試したけど、無理だったからKillコマンドで無理やりプロセスを止めてます。

    cd /home/user/
    vi RW_backup.sh
    キーボードのIキーを押してーーINSERT--モードにする。

    以下内容(viで開いた白紙のテキストファイルに、#!/usr/bin/bash以下を張り付ける)
    -----------------------------------------------------
    #!/usr/bin/bash
    sudo pgrep -f java | xargs kill -9
    sleep 3
    cd /home/user/
    sleep 3
    \rm -r /home/user/Worlds_buckup/
    sleep 3
    \cp -r /home/user/csgo-server/match/Worlds /home/user/Worlds_buckup
    sleep 3
    drive upload --parent 15dBsBPoyXXPnDEqO7FOuBslv2caKoxxx --file Worlds_buckup
    sleep 360
    cd /home/user/csgo-server/match
    sleep 3
    sudo ./linux_startscript.sh
    ------------------------------------------------------
    IDは(例)
    Escキーを押して、次に:キーを押す。
    wqを入力してエンターで上書きして閉じる。

    バックアップコマンドをテストする。
    drive upload --parent 15dBsBPoyXXPnDEqO7FOuBslv2caKoxxx --file Worlds_buckup


    ・RW_backup.shのパーミッションを変更
    sudo chmod 755 RW_backup.sh

    centOS7のcronを消して、centOS6以前のcronを使う
    $ sudo yum -y install cronie-noanacron
    $ sudo yum -y remove cronie-anacron

    設定はvim /etc/crontab

    設定の確認。
    cat /etc/crontab

    設定の編集
    コマンドで設定を開き末尾を追記する。
    sudo vim /etc/crontab
    ------------------------------------------
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    # For details see man 4 crontabs
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # | .------------- hour (0 - 23)
    # | | .---------- day of month (1 - 31)
    # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
    # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # | | | | |
    # * * * * * user-name command to be executed
    0 4 * * * root . /home/user/RW_backup.sh←朝4時に毎日バックアップ追記
    -------------------------------------------

    #crondの再起動
    sudo systemctl restart crond

    #RW鯖起動
    (Conohaのコンソールで、su若しくはrootで実行しないとRW_backup.shが上手く動作しないと思います)
    su
    cd /home/user/csgo-server/match
    ./linux_startscript.sh

    コピーコマンド例
    \cp -r /home/user/csgo-server/match/Worlds /home/user/Worlds_buckup




    【セキュリティ対策】
    SSHでログインがあった時に、警告メールをスマートフォンに送る。

    ・下記は参考文献
    https://qiita.com/taro0219/items/d9087b8a646905342270

    ・ssmtpをインストールする
    sudo yum install ssmtp

    su
    vi /etc/ssmtp/ssmtp.conf
    と入力して、設定ファイを編集する。

    #/etc/ssmtp.conf -- a config file for sSMTP sendmail.
    #See the ssmtp.conf(5) man page for a more verbose explanation of the
    #available options.
    #The person who gets all mail for userids < 1000
    #Make this empty to disable rewriting.
    #root=postmaster  ← コメントアウト
    root=rw.xxxxxxx@gmail.com ←アドレス記入
    #The place where the mail goes. The actual machine name is required
    #no MX records are consulted. Commonly mailhosts are named mail.domain.com
    #The example will fit if you are in domain.com and your mailhub is so named.
    #mailhub=mail ←コメントアウト
    #Example for SMTP port number 2525
    #mailhub=mail.your.domain:2525
    #Example for SMTP port number 25 (Standard/RFC)
    #mailhub=mail.your.domain
    #Example for SSL encrypted connection
    #mailhub=mail.your.domain:465
    mailhub=smtp.gmail.com:587 ←smtpサーバ追記
    #Where will the mail seem to come from?
    #RewriteDomain=
    #The full hostname
    #Hostname=
    AuthUser=rw.xxxxxxxxx7@gmail.com ←ログインID(自分のGoogleメール)
    AuthPass=rw2 ←パスワード(自分のパスワード)
    # Set this to never rewrite the "From:" line (unless not given) and to
    # use that address in the "from line" of the envelope.
    FromLineOverride=YES ←コメントアウト外す
    # Use SSL/TLS to send secure messages to server.
    #UseTLS=YES
    #IMPORTANT: The following line is mandatory for TLS authentication
    TLS_CA_File=/etc/pki/tls/certs/ca-bundle.crt ←#ついてたらコメントアウト外す
    # Use SSL/TLS certificate to authenticate against smtp host.
    #UseTLSCert=YES
    # Use this RSA certificate.
    #TLSCert=/etc/pki/tls/private/ssmtp.pem
    # Get enhanced (really enhanced) debugging information in the logs
    # If you want to have debugging of the config file parsing, move this option
    # to the top of the config file and uncomment
    #Debug=YES
    UseSTARTTLS=YES ←追記

    ・メールテストをしてみる
    echo -ne "To: a6hara@gmail.com\nSubject: TestSend1\n\n送信テスト1" | ssmtp a6hara@gmail.com
    a6hara@gmail.comの部分は受け手側のメールアドレス(任意変更)

    mailコマンドを使えるようにするには
    下記は参考文献
    https://qiita.com/zaburo/items/a6244d32ce5f5fe2c3d1

    mailxをインストールする。
    sudo yum install mailx
    ※環境によってはすでに入ってるかも?

    送信テスト
    とりあえず、送信してみます。
    echo "test mail" | mail -s "test" xxxxx@gmail.com
    xxxxx@gmail.comは任意の受取先
    残念ながらとどきません。postfixのログを見てみます。
    cat /var/log/maillog
    .
    Apr 5 17:39:19 localhost postfix/smtp[26381]: connect to gmail-smtp-in.l.google.com[64.233.189.27]:25: Connection refused
    .
    どうやらgmailのsmtpに到達できていないようです。
    Gmailの設定
    数年前にGmailのセキュリティーが強化され、普通のメアド(ID)+パスワードではgmailクライアント以外からはメールの送信ができなくなっています。gmailクライアント以外から送信する場合は専用のパスワードを取得する必要があるので取得します。
    アプリパスワードの設定
    [アカウント] -> [ログインとセキュリティ ] -> [アプリパスワード]にて、パスワードを発行します。

    ※2段階認証をONにしているので上記の手順なのかもしれません。2段階認証を設定してない場合は別の設定かもしれません。

    Postfixの設定
    アプリパスワードが取得できたので、Postfixの設定を行います。
    必要コンポーネントのインストール
    まずSASL認証をするために必要なコンポーネントをインストールします。
    sudo yum install cyrus-sasl-plain

    main.cfの編集
    mail.cfを編集し必要な記述を行います。gmailのアカウントは外部ファイルで設定します。

    vim /etc/postfix/main.cf
    で開いて最後に追記する。

    ## add for gmail
    relayhost = [smtp.gmail.com]:587
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    smtp_sasl_security_options = noanonymous
    smtp_sasl_tls_security_options = noanonymous
    smtp_sasl_mechanism_filter = plain
    smtp_use_tls = yes

    パスワードファイルの準備
    gmailのアカウントを下記のフォーマットで記述し、ハッシュ化します。
    vim /etc/postfix/sasl_passwd
    [smtp.gmail.com]:587 xxxxx@gmail.com:PASSWORD
    を記入して閉じる

    xxxxx@gmail.comおよびPASSWORDは各自の環境で。

    ハッシュ化します。
    sudo postmap /etc/postfix/sasl_passwd
    sudo chmod 600 /etc/postfix/sasl_passwd
    実際利用されるのはsasl_passwd.dbファイルのようなのでsasl_passwdファイルは削除してもいいようです。
    postfix再起動
    設定を反映させるためにpostfixを再起動します。

    yum install postfix
    systemctl enable postfix
    systemctl start postfix
    そもそも入ってないよ言われた場合は上記で入れる。

    systemctl reload postfix.service
    再起動コマンド


    ログインしたらメールを出すスクリプトを作る
    vim /etc/ssh/sshrc
    (例)
    #!/bin/sh
    MAIL_TO=通知先メールアドレス
    TIME=`/bin/date "+%Y/%m/%d/ %H:%M:%S"`
    FROM_ADDR=`echo $SSH_CONNECTION | cut -d' ' -f1`
    FROM_PORT=`echo $SSH_CONNECTION | cut -d' ' -f2`
    FROM_ADDR_PORT=${FROM_ADDR}:${FROM_PORT}
    TO_ADDR=`echo $SSH_CONNECTION | cut -d' ' -f3`
    TO_PORT=`echo $SSH_CONNECTION | cut -d' ' -f4`
    TO_ADDR_PORT=${TO_ADDR}:${TO_PORT}
    echo -e "Time\t${TIME}\nHost\t${HOSTNAME}\nUser\t${USER}\nFrom\t${FROM_ADDR_PORT}\nTo\t${TO_ADDR_PORT}" | /bin/mail -s "[SSH]${HOSTNAME}/${USER} (${TIME})" ${MAIL_TO}

    ※上記で、SSHでログインがあった場合は、任意のメールアドレスにメールで警告がでる。
    自分がログインしてないのに、メールが来たら・・・・・(゚д゚)!

    【セキュリティの強化を】
    起動後も各自でセキュリティーは強化しましょう。





    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。