IT・ビッグデータ徒然ブログ

関西でインフラ、データ基盤系のエンジニアになるため、転職活動中。

ブログ移住計画その6~AWSにWordPressをデプロイ~

やっと、AWSの環境にWordPressをデプロイしました。

いや、Ansibleをそのまま叩いて終わればよかったんですけどね。。。

ちなみに最終段階のAnsibleのディレクトリはこんな感じ。

.
├── ansible.cfg
├── group_vars/
│   └── all.yml
├── inventory/
│   └── hosts
├── playbook.yml
├── roles/
│   ├── httpd/
│   │   ├── handlers/
│   │   │   └── main.yml
│   │   └── tasks/
│   │       └── main.yml
│   ├── mysql/
│   │   ├── handlers/
│   │   │   └── main.yml
│   │   └── tasks/
│   │       └── main.yml
│   ├── php/
│   │   └── tasks/
│   │       └── main.yml
│   ├── wordpress/
│   │   ├── tasks/
│   │   │   └── main.yml
│   │   └── templates/
│   │       ├── .htaccess.j2
│   │       ├── .htaccess.root.j2
│   │       ├── .htpasswd.j2
│   │       └── index.php.j2
│   └── wp-cli/
│       ├── tasks/
│       │   └── main.yml
│       └── templates/
│           └── wp-config.php.j2
└── ssh_config

踏み台経由でAWSの環境にアクセスする

Ansibleを直接サーバに実行せず、踏み台経由で実行する場合は設定が必要。
なので、まずホストの情報を記述してみました。

# ssh_config

Host wp-bustion
    HostName <踏み台サーバIP>
    User centos
    Port <SSHポート>
    GatewayPorts yes
    IdentityFile <認証用暗号化鍵>

Host wordpress
    HostName <WordPressサーバIP>
    User centos
    Port 22
    GatewayPorts yes
    ProxyCommand ssh -F ssh_config -CW %h:%p wp-bustion
    IdentityFile <認証用暗号化鍵>

Host wp-mysql
    HostName <MySQLサーバIP>
    User centos
    Port 22
    GatewayPorts yes
    ProxyCommand ssh -F ssh_config -CW %h:%p wp-bustion
    IdentityFile <認証用暗号化鍵>

やってることは、ここでやったSSHの接続設定とほぼ同じ。

あとansible.cfgファイルで、playbook実行時にssh_configファイルを読ませるようにする。

[ssh_connection]
control_path = %(directory)s/%%h-%%r
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -F ssh_config

最後に、Ansibleの実行対象を指定するサーバの指定を、ssh_configで設定しているHost名に変更しておく。

# inventory/hosts

[wp]
wordpress
[mysql]
wp-mysql

あとは素直に実行

ansible-playbook -i inventory/hosts playbook.yml

これで無事にデプロイ!と思ってました...

問題1: データベース接続確立エラーが発生

DB側の設定は完全にあっているのに、接続できないというエラーにドハマリ。
ひたすら調べていくと、SELinuxが原因とわかり、一部設定を変更した。

sudo setsebool -P httpd_can_network_connect_db 1
sudo systemctl restart httpd

問題2: .htaccessの設定が効かない

アクセス制御やリダイレクト制御を.htaccessに記述していたものの、設定が反映されるハマる。
しらべてみると、

<Directory "/var/www/html">
・
・
AllowOverride None
・
・
</DIrectory>

の、NoneをAllに変える必要があるらしく、設定したら反映された。

WordPressHTTPSにする

ここで作った証明書を反映させる。

ssl.csrssl.crt、ssl.keyを/etc/httpd/confに移動。
ssl.crtに2つファイルを作成して、証明書と中間証明書を作成

# hogehoge.com.2018.crtとしておく
<メールできた証明書をそのままコピー>

-----BEGIN CERTIFICATE-----
・
・
・
-----END CERTIFICATE-----
# intermediate_hogehoge.com.2018.crtとしておく
<中間証明書をコピー>

-----BEGIN CERTIFICATE-----
・
・
・
-----END CERTIFICATE-----

権限を変えておく

sudo chmod 600 hogehoge.com.2018.crt

ssl.confに設定ファイルを知らせる

# /etc/httpd/conf.f/ssl.conf

SSLCertificateFile /etc/httpd/conf/ssl.crt/hogehoge.com.2018.crt
・
・
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/hogehoge.com.2018.key
・
・
SSLCertificateChainFile /etc/httpd/conf/ssl.crt/intermidiate_hogehoge.com.2018.crt

これでhttpdを再起動するとSSLパスフレーズが聞かれるはず。

WordPress側のSSL設定

WordPressの管理者画面にログインし、一般でサイトのアドレスをhttpからhttpsに変更する。

f:id:namusic701042:20180823131841j:plain

これで、ドメイン名で開くと、、、

f:id:namusic701042:20180823132025j:plain

はあ、終わった。

あとはプラグインとかいろいろと調整して、今週末には移行予定。

あとやりたいことは、

  • PlaybookをGithubに公開
  • MySQL等の運用関連でいろいろいじってみたい
  • アクセスログとかを取りながら、なんちゃってデータ基盤を作りたい

と思ってますー。

rockstock2008.blog17.fc2.com

https://blog.tacck.net/archives/29

blog.treedown.net

qiita.com