さくらVPS環境を構築する


この記事で実行すること

  • ログインの設定
  • ファイヤーウォールの設定
  • Gitの設定
  • Apacheの設定
  • PHPの設定
  • MySQLの設定
  • SSLの設定(Let’s Encrypt)

前提条件

さくらVPSを使って環境を構築することを想定しています。

サーバーはCentOS7を使っています。

スタートアップスクリプトは「利用しない」を選択しています。

サーバーへのSSHキーの「登録はしない」を選択しています。

契約が完了したばかりだと、下記のような状態になります。

「勉強用」のサーバー名をクリックします。

「電源操作」ボタンをクリックします。

リストの中に表示される「起動する」の項目をクリックします。

ログインの設定

IPv4のところをの数字をコピーします。

このままブラウザの「コンソール」からもアクセスはできるのですが、僕は操作の面などやりにくく感じるので、パソコンにインストールされているアプリケーションから接続するようにします。

今回は、VSCodeというテキストエディタを使用します。

MacのVSCodeを初めて起動するとこのような画面になるかと思います。

新しいターミナルを選択しVSCodeでターミナルを立ち上げます。

下記の状態になります。

以下のコマンドを入力し実行します。

ssh root@さくらVPSのIPv4のIPアドレスを入力する

Are you sure you want to continue connecting (yes/no/[fingerprint])?

接続を続行してもいいですかと聞かれるので、小文字でyesと入力してEnterを押下します。

password:のところにさくらVPS作成時に入力したパスワードを入力します。

yumコマンドでシステムのアップデートをする必要があるためアップデートをします。

次のコマンドをターミナルに入力し実行してください。

yum -y update

5分くらい時間がかかって以下の画像のように完了しましたってなればOKです。

次は、これからさくらVPSの環境で何かファイルの値を変更するときにVimというCentOSに最初から用意されているエディタを少しだけ使いやすくカスタマイズします。

次のコマンドでvimの環境ファイルを開きをます。

vim /etc/vimrc

絶対パスで指定しているので、どこから入力しても大丈夫です。

ファイルを開いたらキーボードの「i」を押下して書き込み(INSERT)モードに変更します。

ファイルの一番下に移動します。

以下の記述を追記します。

 " 構文ごとに色分け表示する
 set syntax on
 set tabstop=4
 " 行番号を表示する
 set number
 " 検索語にマッチした単語をハイライトする
 set hlsearch
 " 検索時に大文字小文字を区別しない
 set ignorecas
 " 検索語に大文字を混ぜると検索時に大文字を区別する
 set smartcase
 " インクリメンタルサーチを使う (検索語を入れている途中から随時マッチする文字列の検索を開始)
 set incsearch
 " 文字コードを指定する
 set encoding=utf-8
 " ファイルエンコードを指定する
 set fileencodings=iso-2022-jp,euc-jp,sjis,utf8
 " 自動認識させる改行コードを指定する
 set fileformats=unix,dos,mac

入力が完了したら、半角入力モードに切り替えて「:wq」を入力しEnterまたはreturnキー(以降Enter)を押下します。

次はLinuxの新規ユーザーを作成します。

次のコマンドでユーザーを作成してください。

useradd -m <ユーザ名>

Linuxのユーザー作成に関しては以下のような条件があります。

  • 数字、アルファベット、記号は「_」アンダーバーと「-」ハイフンのみ
  • 先頭文字に数字は使用できない
  • 最大32文字まで

次は今作成したユーザーにパスワードを設定しましょう。

passwd <ユーザ名>

Linuxのユーザーのパスワードには以下のような条件があります。

  • 小文字のアルファベット
  • 大文字のアルファベット
  • 0 から 9 までの数字
  • 記号 !”#$%&'()*+,-./:;<=>?@[\]^_`{|}~

今回僕は、「taro」というよくある名称のユーザーを作成しました。

作成したtaroにグループを付与します。

以下のコマンドを実行します。

usermod -aG wheel taro

※taroというユーザーを今回作成しているので、僕の環境ではtaroです。

作ったユーザー名が別の場合は、taroの部分に作成したユーザー名を記述してください。

作成したユーザーをwheelに追加しましたが、このwheelグループがsudoで全てのコマンドを実行できるのかの確認をする必要があります。

次のコマンドを入力します。

visudo

上の画像のように「/wheel」と入力してEnterキーを押下します。

※ここで自分事故りましたのでメモしておきます。
vim開いた状態で来客対応している間にPCがスリープになってしまって、visudoを実行したら「visudo: /etc/sudoers がビジー状態です。後で再試行してください」と表示されることに、それでこのまま検索かけて「visudo: /etc/sudoers がビジー状態です。後で再試行してください」このままのタイトルのサイトがあり試しましたがpsだけだと全部じゃないので、少し時間かかりました。

結論:ps -a で検索して kill PIDすればもう一度visudoが開ます。

もしこの一番下の行の「%wheel ALL=(ALL) ALL」この記載の先頭に「#」があったら削除してください。

wheelの権限が有効であることまで確認ができたら、次はさくらVPSにVSCodeから接続するときに、パスワードを使ってログインするようにしていますが、パスワード認証をやめて、公開鍵認証でログインをできるように変更します。

一度SSHで接続しているさくらVPS環境から抜ける必要があるため「exit」と入力しEnterキーを押下します。

公開鍵の作成

以下のコマンドを実行します。

mkdir -p ~/.ssh && cd ~/.ssh

以下のコマンドで秘密鍵を自分のパソコンの中に作成します。

ssh-keygen -t rsa -b 4096 -m PEM

コマンドの-tや-bっていうのは、キー作成時のオプションになります。

何をしているのか理解したいという方は「【 ssh-keygen 】コマンド――SSHの公開鍵と秘密鍵を作成する」をご一読してください。

鍵の作成時の流れはこちらのサイトを参照してください。

sshキー(秘密鍵・公開鍵)の作成と認証 流れ

コマンドで鍵が作れたら、作成した秘密鍵をさくらVPSのサーバーにアップロードする必要があります。

以下のコマンドを実行してください。

scp 鍵名.pub さくらVPSで作成したユーザー名@IPv4のアドレス:~

コマンドを入力しEnterキーを押下します。

パスワード認証が求められるので、さくらVPSで作成したユーザーのパスワードを入力しEnterキーを押下します。

scpで公開鍵をさくらVPSにアップロードしたので、今度はさくらVPSに作成したユーザーでログインします。上のコマンドの部分と同じです。

ssh さくらVPSで作成したユーザー名@IPv4のアドレス

パスワード認証が求められるので、さくらVPSで作成したユーザーのパスワードを入力しEnterキーを押下します。

サーバーにログインしたら「ls」と入力しEnterキーを押下します。

ファイルが正しくアップロードできていれば、このような感じになっているかと思います。

以下のコマンドを実行してください。

mkdir -p ~/.ssh

オプションの「-p」は必要に応じて作成するためのオプションです。

そのため.sshが既に存在していても特に再生成がされる訳でもエラーが出力される訳でもないので、サクサク進めたいときには便利ですよ。

さくらVPSの環境で.sshフォルダを作成したら、今度は作成した.sshフォルダに対して権限の設定をします。

以下のコマンドを実行して、今回作成したユーザー以外が.sshフォルダにアクセスすることを禁止します。

chmod 700 ~/.ssh

今ある公開鍵.pubの内容をauthorized_keysに出力します。

以下のコマンドを実行してください。

cat 公開鍵.pub >> ~/.ssh/authorized_keys

authorized_keysはリモートホストの指定ユーザーの公開鍵を登録するファイルです。

まぁ、あんまりファイルから誰が接続できるのか一目で分かるのもなんか違いますものね。そのため公開鍵が登録されたら後はscpでアップロードした公開鍵も削除して大丈夫です。

rm 公開鍵.pub

次に公開鍵のユーザー以外が、authorized_keysファイルを使用できないようにするために以下のコマンドを実行します。

chmod 600 ~/.ssh/authorized_keys

一度SSHで接続しているさくらVPS環境から抜ける必要があるため「exit」と入力しEnterキーを押下します。

次は、入力された公開鍵でログインができるようになったのかを確認します。

sudo ssh ユーザー名@IPアドレス -i ~/.ssh/プライベートキー

※Windowsの場合は、管理者権限でコマンドプロンプトなどを開くのかな?

結果、接続できました。

上のコマンドで接続した場合は、作成したユーザー名でのログインとなります。

「su -」でrootユーザーに切り替えることができます。

sshの設定を変えて、rootユーザーで直接ログインをできなくする必要があります。

ただ、環境設定ファイルを直接変更するので、念の為バックアップを取ります。

cp /etc/ssh/sshd_config /etc/ssh/sshd_config_old

バックアップが取れたら、vimエディタで変更します。

vi /etc/ssh/sshd_config

#Port 22となっている箇所を検索していただき、「#」を削除し任意のポート番号に変更してください。sshのポート番号22は攻撃を受けやすいみたいです。

#PermitRootLogin yesになっている箇所を「#」を削除しyesをnoに変更します。

PasswordAuthentication yesになっている箇所を「#」を削除しyesをnoに変更します。

入力が完了したら、半角入力モードに切り替えて「:wq」を入力しEnterキーを押下します。

sshd_configは読み込み直しをしなければ変更が認識されないため、sshdサービスの再起動を実行します。

systemctl restart sshd

これで設定が反映されたので、一度サーバーから抜けます。(exitします※rootで一回、作成したユーザーで一回exitをする必要があります。)

ここまでで、ログインユーザーの設定が完了です。

ファイヤーウォールの設定

rootユーザーにログインしてコマンドを入力します。

vim /usr/lib/firewalld/services/ssh.xml 

Port=”22″となっているところを設定したPortに変更します。

変更を保存してvimエディタを閉じます。

ファイアウォールを起動します。

systemctl start firewalld

コマンドを実行して何も表示されなければひとまず正常です。

ファイアーウォールのコマンドで解放しているポートの確認をします。

firewall-cmd --list-all

赤枠で囲んでいる部分が今解放しているサービスです。

sshというものが、今回ポート番号を設定した箇所になります。

sshが表示されていればひとまず問題はありません。

先ほど「ファイアウォールを起動します。」でコマンドを実行しましたが、久しぶりにサーバーの再起動などをすると、ファイアーウォールの開始を忘れてしまう可能性があるので、自動で起動するように設定します。

systemctl enable firewalld

自動起動が有効になったか確認します。

systemctl list-unit-files -t service

/firewallで出力されたリストの中からfirewallに該当する箇所を検索します。

firewalld.service                             enabled 

上記のように、enabledで存在すれば有効になっています。

「:q」で抜けてファイアーウォールの設定までは完了です。

Gitの設定

現在のGitのバージョンを確認します。

git --version
git version 1.8.3.1

1.8は古いバージョンのため最新のGitを導入する必要があります。

特段最低限のGitが使えればいいんだということであれば、ここはスキップしても構いません「とうとう Git 2.0 が現実のものに。便利な機能まんさい」こちらにも記載がある通り最低限の管理は1.8でもできます。

とはいえ、なんでも最新がいいんだということであれば最新をインストールする方が良いかと思うので最新を入れてきます。

参考:【2021年確認済み】centos7系にgit2系をインストールする(依存関係エラー解消版)

まず今あるGitをyumコマンドで削除します。

yum -y remove git

Complete!の文字がでればOKです。

それじゃあ再インストールなのですが、今のまま再インストールしてもまた古いのが入ってしまうので、そもそもの参照先を変更します。

新しいリポジトリを設定します。

sudo yum install \
https://repo.ius.io/ius-release-el7.rpm \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

Gitをインストールする前に以下のコマンドを実行します。

yum -y install libsecret pcre2

今追加した新しいリポジトリリポジトリからGitをインストールします

sudo yum install git --enablerepo=ius --disablerepo=base,epel,extras,updates

正常にインストールが完了したら、導入されたバージョンの確認をします。

下記のように2.X系が入っていればOKです。

git --version
git version 2.36.1

Apacheの設定

最新版のApachをインストールする前に必要なアプリをインストールします。

yum -y install nghttp2 brotli httpd24u apr15u-util-devel --enablerepo=epel

先ほどGit導入時に追加した新しいリポジトリからインストールします。

yum -y install httpd httpd-devel mod_ssl --enablerepo=ius --disablerepo=base,extras,updates

導入したApachのバージョンを確認します。

httpd -v
Server version: Apache/2.4.54 (IUS)
Server built:   Jun 27 2022 15:20:06

Apachが2.4以上のバージョンが表示されていればOKです。

追加したiusリポジトリの設定を変更します。

vim /etc/yum.repos.d/ius.repo 

上記画像のように4行目の該当箇所が1から0に変えればOKです。

それでは、Apachを起動します。

systemctl start httpd

Apachが自動的に立ち上がるように設定します。

systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

ファイヤーウォールのポートを解放します。(http,https通信できるようにするため)

firewall-cmd --add-service=https --zone=public --permanent
success
 firewall-cmd --add-service=http --zone=public --permanent
success

次に下記コマンドを打ちます

systemctl restart firewalld

再度コマンドで解放しているポートの確認をします。

firewall-cmd --list-all

ここまでは、問題なくポート解放できたみたいです。

こんな感じで何かサイトに表示できればOKです。

PHPの設定

どうせなら最新のPHPを持ってきましょう。

ちょっとPHPの設定中に参考記事そのまま何も考えず実行してしまい修正しながら、なんとかPHP8系にしたので、コマンドだけ貼っておきます。

気が向いたら解説します。

yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install -y yum-utils
yum-config-manager --disable 'remi-php*'
yum-config-manager --enable remi-php80
yum repolist
yum update -y
yum install -y php
php --version

MySQLの設定

参考:WEBサーバ構築ノウハウ集

yum -y localinstall http://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

MySQLをインストールします。

 yum -y install mysql-community-server

my.cnf設定

vi /etc/my.cnf
log_timestamps=SYSTEM
skip-character-set-client-handshake
character-set-server=utf8mb4
explicit_defaults_for_timestamp=ON

MySQLの自動起動設定

 systemctl enable mysqld

なんか今ここで詰まった

原因は簡単だった、鍵が新しくなったみたい

sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

https://qiita.com/zaburo/items/7518a432d915c061983f

SSLの設定(Let’s Encrypt)

yum -y install certbot python-certbot-apache --enablerepo=epel
certbot certonly --webroot -w 【ドキュメントルート】 -d ドメイン名

証明書の有効期限を通知するメアドの確認と、規約に同意するしないの質問と
メルマガを送っても良いかの問いがありますので、問題なければメアド入力してYで証明書が取得できます。

次はApacheの設定です。

vim /etc/httpd/conf.d/sakura.conf

こんな感じでファイルを作ります。「sakura」の部分はなんでもいいです。

ServerTokens Prod
RequestHeader unset Proxy
Header always set X-Frame-Options SAMEORIGIN
Header always set X-Content-Type-Options nosniff
<Directory /var/www/*>
    Options -Indexes
</Directory>
<LocationMatch ^/(?!\.well-known/).+>
    RedirectMatch 403 /\.
</LocationMatch>
<FilesMatch \.(log|md|sql)$>
    Deny from all
</FilesMatch>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
<VirtualHost *:443>
    ServerName ドメイン
    DocumentRoot /var/www/html
    SSLEngine on
    SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン/privkey.pem
    SSLCertificateFile /etc/letsencrypt/live/ドメイン/fullchain.pem
</VirtualHost>

ドメインのところが変わるくらいで、ほとんどこんな感じでファイルを用意します。

設定を変更したら「systemctl restart httpd」で再起動します。

ページにアクセスして下の画像のようにURLバーに鍵マークがついてればOK


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です