概要
個人事業主の知人からHPを作ってくれと頼まれました。
そこで、勉強も兼ねてGCPを使ってみました。
構築する環境
更新頻度およびアクセス頻度は低いため、高可用性を担保しなくても良いので、GCE(Webサーバ)×1、Cloud SQL×1の構成です。
ただし、DBは定期的にバックアップを取るものとします。
この記事で紹介すること
- GCE(Google Compute Engine)VMインスタンスの作成
- PHP, Apacheのインストール
- Cloud SQLでMySQLサーバ構築
- WordPressのインストール
1. GCEでCentOSを立ち上げる
1.1. そもそもGCEとは?
GCE(Google Compute Engine)は、GCPで仮想マシンを提供しているサービスです。
AWSなどと同じく、利用した時間で課金されます。
一部永久無料枠があり、手軽に使えそうです。
1.2. VMインスタンスの作成
VMインスタンスの作成
GCEでは、作成したVMの単位をインスタンスといいます。
今回は、CentOSでサーバを立ち上げます。
Google Cloudのコンソール画面でCompute Engineを選びます。
APIの有効化を求められたら、有効にします。
名前
何でもいいのですが、わかりやすいものにするといいと思います。今回はwordpressにしました。
リージョン
VMインスタンスが作られるデータセンターの場所になります。今回は永久無料枠が利用できる関係で、us-central1に作成しました。
ゾーン
リージョン内の区画を表します。クラスタ構成で冗長化するときなどは気にする必要がありそうですが、今回は1台のみなので、適当なものを選びます。
このリージョンとゾーンは後でCloud SQLを立ち上げる際に参照します。
マシンの構成
今回はインストール等の速度を考え1、e2-medium(デフォルトのまま)を選択しました。90日約30000円分のクレジット分は無料です。
f1-microを選択すると無料で使えますが、これは後から変更することが出来ます。
ブートディスク
無料枠(2021/04時点)を考え、この記事ではCentOS72、20GBHDD(標準の永続ディスク)を使用しています。他のOSを利用する場合、コマンド等適宜読み替えてください。
ファイアウォール
Webサーバなので、HTTP/HTTPSともにトラフィック許可のチェックを入れます。
作成には少し時間がかかります。作成するとインスタンス一覧の画面が表示されます。
SSH接続
オンプレのサーバなどはローカルのターミナルからSSH接続しますが、GCEでは、ブラウザのターミナルを使用し公開鍵の登録などせずにSSH接続できます。
インスタンスの一覧の、SSHと書かれたボタンをクリックすると、別ウィンドウでターミナルが立ち上がります。
2. PHP7、Apacheのインストール
ここからはSSH接続したターミナルから操作を行います。
はじめにパッケージのアップデートを行います。
> sudo yum update -y
2.1. PHPのインストール
バージョンの確認
執筆時点のWordPress最新版の要件は、PHP7.4以上、MySQL5.6以上となっています。
まず、通常のyumコマンドでインストールされるphpのバージョンを調べます。
yum info php
を実行すると、以下のように5.4がインストールされることがわかります。
> yum info php
Name : php
Arch : x86_64
Version : 5.4.16
Release : 48.el7
Size : 1.4 M
Repo : base/7/x86_64
Summary : PHP scripting language for creating dynamic web sites
URL : http://www.php.net/
License : PHP and Zend and BSD
Description : PHP is an HTML-embedded scripting language. PHP attempts to make it
: easy for developers to write dynamically generated web pages. PHP also
: offers built-in database integration for several commercial and
...
remi's rpm repositoryの追加・有効化
PHP7.4をインストールすべく、外部のリポジトリを使います。
使用するのはremi's rpm repositoryです。
はじめにリポジトリを追加します。
> sudo yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
次に、vim等で/etc/yum.repos.d/remi-php74.repo
を編集し、[remi-php74]
内のenabled=0
をenabled=1
にします。
これでyumコマンドからremiリポジトリを参照し、php7.4のインストールができるようになります。
PHP7.4のインストール
インストールされるPHPのバージョンを確認します。
> yum info php
(中略)
Name : php
Arch : x86_64
Version : 7.4.16
Release : 1.el7.remi
Size : 3.4 M
Repo : remi-php74
Summary : PHP scripting language for creating dynamic web sites
URL : http://www.php.net/
License : PHP and Zend and BSD and MIT and ASL 1.0 and NCSA
Description : PHP is an HTML-embedded scripting language. PHP attempts to make it
: easy for developers to write dynamically generated web pages. PHP also
: offers built-in database integration for several commercial and
: non-commercial database management systems, so writing a
...
ver7.4がインストールされることが確認できました。
これで、PHPとWordPressに必要なライブラリをインストールします。
> sudo yum install -y php php-gd php-mysql
2.2. Apacheのインストール
apacheはCentOSではhttpdという名前になっています。
> sudo yum install -y httpd
インストール終了後、実行し、OS起動時にも実行されるようにします。
> sudo systemctl start httpd
> sudo systemctl enable httpd
2.3. 動作確認
GCPのVMインスタンスの画面に戻り、外部IPアドレスをコピーし、http://<外部IPアドレス>
でアクセスすると、Apacheが起動しているのが確認できます。
3. Cloud SQLの設定
Cloud SQLはGCPでデータベースを立ち上げられるサービスです。
今回はCloud SQLでMySQLサーバを立ち上げます。
※無料枠がなく、料金がかかります。
3.1. MySQLインスタンスの作成
CloudSQLを開き、MySQLインスタンスを作成します。
インスタンスの情報
パスワードはrootのパスワードになります。強力なものを生成しておくのがいいでしょう。
当然かもしれませんが、ここで設定したrootパスワードは忘れずに控えておく必要があります。私は忘れて作り直したので気をつけてくださいw
MySQLのバージョンは8.0を選択します。
リージョンとゾーン
ここで重要なのは、VMインスタンスを作成したときと同じリージョン、同じゾーンに設定する必要があります。
私の例でいうと、VMインスタンスを作成したのと同じゾーン「us-central-1a」に作成します。
リージョンやゾーンを跨いだ通信も可能ですが、ここでは同一ゾーンに設定することで、手間と料金を減らすことができます。
デフォルトでは「複数のゾーン」にチェックが入っていますが、高可用になる分、料金がかかります。
今回はシングルゾーンで作成します。
インスタンスのカスタマイズ
マシンタイプ、ストレージはデフォルトのままでは性能が高いだけ料金も高いので、今回は低いスペックに設定しました。
接続の設定
デフォルトではグローバルIPアドレスが付与される設定になっています。DBには内部で接続していればOKなので、プライベートIPにチェックを入れ、パブリックIPのチェックを外します。
「ネットワーク」は今回はデフォルトを選択します。
初めて設定する場合には、プライベートサービス接続が必要というダイアログが表示されますが、設定をクリックします。
するとAPIの有効化という画面が右に現れますが、これを有効化。
次にIP範囲の設定ですが、今回は自動的に割り当てられたIP範囲を利用します。
(本来であれば、ここらへんはVPCの設定をきちんと行う必要がありそうですが、今回のWordPressだけの用途であればそんなに問題はないかなと。)
この後はそのまま設定します。
バックアップの設定
ユーザーがアクセスしそうにない時間帯に設定しておきます。
あとは「インスタンスの作成」をクリックしてしばらく待つと、インスタンスが生成されます。
プライベートIPアドレスが割り振られているはずです。次節で使用します。
接続テスト
前に作成したVMインスタンスから、CloudSQLにアクセスできるかテストします。
VMインスタンスにSSH接続し、mysqlコマンドを用いてCloudSQLに接続します。
その前に、mysqlをCentOSにインストールします。
> sudo yum install mysql -y
インストールが終わったら、次のコマンドで接続できます。
> mysql -u root -p -h <Cloud SQLのIPアドレス>
パスワードは設定したCloud SQLのrootパスワードです。
3.2. WordPress用のデータベース、MySQLユーザーの作成
前節でCloud SQLに接続してから、その続きです。
WordPress用のデータベースwordpressとユーザーwp-userを作成し、wp-userにwordpressの操作権限を与えます。
CREATE DATABASE wordpress;
CREATE USER 'wp-user'@'<VMインスタンスの内部IPアドレス>' IDENTIFIED BY '<パスワード>';
GRANT ALL ON `wordpress` TO 'wp-user'@'<VMインスタンスの内部IPアドレス>';
ちなみに、CloudSQLのGUIからもユーザーを作ることができるのですが、root権限が与えられるようなので、今回はSQL文を用いて作成しました。
4. WordPressのインストール
これでようやくWordPressのインストールが出来ます。
インストールはWordPressをダウンロードして、ドキュメントルートに配置するだけです。
# wordpressをダウンロード
> curl -OL https://ja.wordpress.org/latest-ja.tar.gz
# 圧縮されたファイルを展開
> tar xzf latast-ja.tar.gz
# 展開した中身をドキュメントルート配下へコピー
> cp -r wordpress/* /var/www/html
これでVMインスタンスのグローバルIPにアクセスするとWordPressのセットアップ画面が表示されます!
SELinuxの設定
このまま「さあ、始めましょう!」を押したくなるのですが、このまま正しく設定を行ってもデータベースへの接続ができません。
(私はここで詰まりました...
SELinuxの設定が原因です
SELinuxはLinuxのセキュリティを強化する機能で、CentOS7ではデフォルトで有効になっています。
getenforce
コマンドで確認できます。
> getenforce
Enforcing # SELinuxが有効になっている
getsebool -a
で細かいアクセス制御が確認できます。
> getsebool -a
abrt_anon_write --> off
abrt_handle_event --> off
abrt_upload_watch_anon_write --> on
antivirus_can_scan_system --> off
antivirus_use_jit --> off
auditadm_exec_content --> on
authlogin_nsswitch_use_ldap --> off
authlogin_radius --> off
authlogin_yubikey --> off
awstats_purge_apache_log_files --> off
boinc_execmem --> on
cdrecord_read_content --> off
cluster_can_network_connect --> off
cluster_manage_all_files --> off
cluster_use_execmem --> off
...
...
これらを丸々無効にしてしまうのは、個人HPとはいえセキュリティ的に良くなさそうなので、該当する部分だけアクセス権を与えます。
調査したところhttpd_can_network_connect_db --> off
がいけないようです。これをon
にします。
> setsebool -P httpd_can_network_connect_db 1
これで設定完了です。
ブラウザに戻り、ようやく「さあ、始めましょう」を押します!
次の画面にはこのように設定すればOKです。「送信」を押します。
こんな画面が表示されました。ドキュメントルート配下にwp-config.php
を作成し、この内容を書き込みます。
sudo vim /var/www/html/wp-config.php
あとは指示に従って設定します。
すべての設定が終わったら、VMインスタンスの外部IPに接続すると…
無事Hello, World出来ました!!!!
参考
- GCE公式ドキュメント
- Google Cloud Platform(GCP)でWebサイトを公開してみよう!
- Remi's RPM repository
- LAMP環境構築マニュアル
- よく使われるMySQLコマンド集
- 初心者にもわかるWordPressの手動インストール手順!図解で徹底解説!
- 【ざっくりと理解する】SELinuxとは?
- SELinuxでご飯を食べよう WordPress導入編
-
筆者の環境ではf1-microはインストール途中で止まってしまいました。Webページの表示は問題なさそうだったので、インストール終了後にf1-microに変更すればよさそうです。 ↩
-
最新版はCentOS8ですが、2021/12でサポートが終了するようです。今回はサポート期間の長い7を選択しました。 ↩