LoginSignup
1
2

More than 1 year has passed since last update.

【GCP】GCE+Cloud SQLでWordPressを立ち上げてみた

Last updated at Posted at 2021-04-28

概要

個人事業主の知人からHPを作ってくれと頼まれました。
そこで、勉強も兼ねてGCPを使ってみました。

構築する環境

更新頻度およびアクセス頻度は低いため、高可用性を担保しなくても良いので、GCE(Webサーバ)×1、Cloud SQL×1の構成です。
ただし、DBは定期的にバックアップを取るものとします。

GCP.png

この記事で紹介すること

  • 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の有効化を求められたら、有効にします。
gce.png

「インスタンスの作成」を選択。
instance.png

名前
何でもいいのですが、わかりやすいものにするといいと思います。今回はwordpressにしました。

リージョン
VMインスタンスが作られるデータセンターの場所になります。今回は永久無料枠が利用できる関係で、us-central1に作成しました。

ゾーン
リージョン内の区画を表します。クラスタ構成で冗長化するときなどは気にする必要がありそうですが、今回は1台のみなので、適当なものを選びます。
このリージョンとゾーンは後でCloud SQLを立ち上げる際に参照します。

マシンの構成
今回はインストール等の速度を考え1、e2-medium(デフォルトのまま)を選択しました。90日約30000円分のクレジット分は無料です。
f1-microを選択すると無料で使えますが、これは後から変更することが出来ます。
gce-1.png

ブートディスク
無料枠(2021/04時点)を考え、この記事ではCentOS72、20GBHDD(標準の永続ディスク)を使用しています。他のOSを利用する場合、コマンド等適宜読み替えてください。

ファイアウォール
Webサーバなので、HTTP/HTTPSともにトラフィック許可のチェックを入れます。

あとはデフォルトのままで作成します。
gce2.png

作成には少し時間がかかります。作成するとインスタンス一覧の画面が表示されます。

SSH接続

オンプレのサーバなどはローカルのターミナルからSSH接続しますが、GCEでは、ブラウザのターミナルを使用し公開鍵の登録などせずにSSH接続できます。
インスタンスの一覧の、SSHと書かれたボタンをクリックすると、別ウィンドウでターミナルが立ち上がります。
スクリーンショット 2021-04-26 23.18.30.png

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=0enabled=1にします。
これでyumコマンドからremiリポジトリを参照し、php7.4のインストールができるようになります。
スクリーンショット 2021-04-27 0.31.31.png

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が起動しているのが確認できます。

スクリーンショット 2021-04-27 0.50.25.png

3. Cloud SQLの設定

Cloud SQLはGCPでデータベースを立ち上げられるサービスです。
今回はCloud SQLでMySQLサーバを立ち上げます。
※無料枠がなく、料金がかかります。

3.1. MySQLインスタンスの作成

CloudSQLを開き、MySQLインスタンスを作成します。
スクリーンショット 2021-04-27 22.50.07.png

インスタンスの情報

パスワードはrootのパスワードになります。強力なものを生成しておくのがいいでしょう。
当然かもしれませんが、ここで設定したrootパスワードは忘れずに控えておく必要があります。私は忘れて作り直したので気をつけてくださいw
MySQLのバージョンは8.0を選択します。
スクリーンショット 2021-04-27 23.08.09.png

リージョンとゾーン

ここで重要なのは、VMインスタンスを作成したときと同じリージョン、同じゾーンに設定する必要があります。
私の例でいうと、VMインスタンスを作成したのと同じゾーン「us-central-1a」に作成します。
リージョンやゾーンを跨いだ通信も可能ですが、ここでは同一ゾーンに設定することで、手間と料金を減らすことができます。
スクリーンショット 2021-04-27 23.08.53.png
デフォルトでは「複数のゾーン」にチェックが入っていますが、高可用になる分、料金がかかります。
今回はシングルゾーンで作成します。

インスタンスのカスタマイズ

マシンタイプ、ストレージはデフォルトのままでは性能が高いだけ料金も高いので、今回は低いスペックに設定しました。
スクリーンショット 2021-04-27 23.09.31.png
スクリーンショット 2021-04-27 23.09.44.png

接続の設定

デフォルトではグローバルIPアドレスが付与される設定になっています。DBには内部で接続していればOKなので、プライベートIPにチェックを入れ、パブリックIPのチェックを外します。
「ネットワーク」は今回はデフォルトを選択します。
スクリーンショット 2021-04-27 23.10.17.png

初めて設定する場合には、プライベートサービス接続が必要というダイアログが表示されますが、設定をクリックします。

するとAPIの有効化という画面が右に現れますが、これを有効化。
次にIP範囲の設定ですが、今回は自動的に割り当てられたIP範囲を利用します。
(本来であれば、ここらへんはVPCの設定をきちんと行う必要がありそうですが、今回のWordPressだけの用途であればそんなに問題はないかなと。)
スクリーンショット 2021-04-27 23.11.01.png
この後はそのまま設定します。

バックアップの設定

ユーザーがアクセスしそうにない時間帯に設定しておきます。

あとは「インスタンスの作成」をクリックしてしばらく待つと、インスタンスが生成されます。
スクリーンショット 2021-04-28 0.49.28.png

プライベート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のセットアップ画面が表示されます!
スクリーンショット 2021-04-28 23.33.02.png

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です。「送信」を押します。
スクリーンショット 2021-04-28 23.37.07.png

こんな画面が表示されました。ドキュメントルート配下にwp-config.phpを作成し、この内容を書き込みます。
スクリーンショット 2021-04-29 0.02.21.png

sudo vim /var/www/html/wp-config.php 

あとは指示に従って設定します。
すべての設定が終わったら、VMインスタンスの外部IPに接続すると…

スクリーンショット 2021-04-29 0.10.55.png

無事Hello, World出来ました!!!!

参考


  1. 筆者の環境ではf1-microはインストール途中で止まってしまいました。Webページの表示は問題なさそうだったので、インストール終了後にf1-microに変更すればよさそうです。 

  2. 最新版はCentOS8ですが、2021/12でサポートが終了するようです。今回はサポート期間の長い7を選択しました。 

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2