やりたいこと
Docker の php:5.6-apache で、.htaccess を有効にしたいです。mod_rewrite を有効にしたい、と言えますね。
実現するには
の通りにすればできました!
今回、実現するにあたって、学んだことをノートします。
VPS や Vitual Box で使用している Linux、CentOS について勉強したアプリ、設定、コマンドなどを紹介いたします!
Docker の php:5.6-apache で、.htaccess を有効にしたいです。mod_rewrite を有効にしたい、と言えますね。
の通りにすればできました!
今回、実現するにあたって、学んだことをノートします。
まず、日本語で流れを確認しました。
mysql_secure_installation 時において、Ansible 的に、初期パスワードを入れる必要があるのが辛そうでした。
次に本家ドキュメントに従って構築していきました。
その後、Ansible プレイブックを確認しながら書いていく、という順番です。
SSL/TLS を含めた Ansible プレイブックを開発するための環境を ConoHa に作った時のメモ – oki2a24 の続きとなります。
やっと SSL/TLS の Ansible プレイブックを作りました。その時のメモを残します。
# certonly: 証明書の発行と配置のみで、Webサーバの設定ファイルの書き換えは行わない。 # -w: Webサーバルートディレクトリを指定 # -d: ドメインを指定 # --agree-tos: 規約に同意 # -m: アカウントの登録や回復などに使用する電子メールアドレス # --keep-until-expiring: リクエストされた SSL/TLS サーバ証明書が既に存在している証明書とマッチする場合には、証明書の更新が必要になるまでは、新規の証明書を取得しない # --non-interactive: ユーザからの入力を一切求めない # --staging: SSL/TLS サーバ証明書の取得時に、ステージングサーバを使用して、無効な証明書を取得する certbot certonly --nginx -w /srv/wordpress/ -d test.oki2a24.com --agree-tos -m oki2a24@gmail.com --keep-until-expiring --non-interactive --staging
# crontab -l #Ansible: None * 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew #
# crontab -l #Ansible: renew cert * 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew #
certbot 実行時にエラーとなりました><。Ansible の出力は見づらいこともあり、ログを確認しました。どうやら、ドメイン名と DNS の A/AAAA レコードと IP アドレスの設定が誤っているのでは? という内容です。
2018-07-10 17:16:24,442:DEBUG:certbot.reporter:Reporting to user: The following errors were reported by the server: Domain: test.oki2a24.com Type: connection Detail: Fetching http://test.oki2a24.com/.well-known/acme-challenge/_Ao4A2VfgQWKNAYtTH842j9AHCYGLrea9VW6TVvzSMc: Timeout during connect (likely firewall problem) To fix these errors, please make sure that your domain name was entered correctly and the DNS A/AAAA record(s) for that domain contain(s) the right IP address. Additionally, please check that your computer has a publicly routable IP address and that no firewalls are preventing the server from communicating with the client. If you're using the webroot plugin, you should also verify that you are serving files from the webroot path you provided.
確かに、仮想マシンを作成しなおせば IP アドレスも変わります。そして、DNS レコードの設定は修正してませんでした。そこで、これを修正し、無事エラーは出なくなりました♪
これは、、、まずは諦めようと思います。つまり、SELinux は Enforcing にしたままとします。諦めて、サーバに SSH 接続し、root ユーザで WP-CLI を使って更新をしようと思います。コマンドは次のようになります。
# wp core check-update +---------+-------------+----------------------------------------------------------------+ | version | update_type | package_url | +---------+-------------+----------------------------------------------------------------+ | 4.9.7 | minor | https://downloads.wordpress.org/release/ja/wordpress-4.9.7.zip | +---------+-------------+----------------------------------------------------------------+ # wp core update Updating to version 4.9.7 (ja)... https://downloads.wordpress.org/release/ja/wordpress-4.9.7.zip から更新をダウンロード中... 更新を展開しています… Success: WordPress updated successfully. # wp core check-update Success: WordPress is at the latest version. #
うまい SELinux 設定方法が無いか調べましたけれども、次のページでも同様に運用しているということで、それに倣うことといたしました。
notify をもつタスクを別の場所に移したとき、handler も移すのを忘れていました。けれども、元の場所にあった handler が動いたことで、気が付きました。
実際に動かしてみると、Ansible の出力は次のようになりました。
TASK [ssl : Replace Nginx default.conf] *************************************************************************** changed: [163.44.169.218] TASK [ssl : Set renew cert] *************************************************************************************** changed: [163.44.169.218] RUNNING HANDLER [mariadb : Restart mariadb] *********************************************************************** changed: [163.44.169.218] RUNNING HANDLER [nginx : Restart nginx] *************************************************************************** changed: [163.44.169.218] RUNNING HANDLER [php-fpm : Restart php-fpm] *********************************************************************** changed: [163.44.169.218]
プレイブックが完成し、ブラッシュアップしようと弄っては実行していましたら、次のエラーとなりました。
{ "type": "urn:acme:error:rateLimited", "detail": "Error creating new cert :: too many certificates already issued for exact set of domains: test.oki2a24.com: see https://letsencrypt.org/docs/rate-limits/", "status": 429 }
ログの Rate Limits – Let’s Encrypt – Free SSL/TLS Certificates を見てみますと、、、たしかに、やっちまったようです。。。どうやら、1 ドメインで 1 週間あたり 20 証明書まで のようです。
お試しの場合は、Staging Environment – Let’s Encrypt – Free SSL/TLS Certificates を使え!とのことです。。。
なぜならば、certbot --nginx
の場合、certbot 実行中に nginx 設定ファイルのチェックを行うようです。
したがって、その時点では正しくない設定ファイルですと、エラーとなってしまいました。
ログが、その時の状況をよく物語っております><。
2018-07-11 14:00:36,456:ERROR:certbot.util:Error while running nginx -c /etc/nginx/nginx.conf -t. nginx: [emerg] BIO_new_file("/etc/letsencrypt/live/test.oki2a24.com/fullchain.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/letsencrypt/live/test.oki2a24.com/fullchain.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file) nginx: configuration file /etc/nginx/nginx.conf test failed
certbot –staging となっているますので、このオプションは削除しなければなりません。いつか。
BackWPup のバックアップファイルを使い Ansible プレイブックを実行することで、自身のサイトを簡単に復元できるようになりました♪
何度も DNS レコード設定と、仮想マシンの作成を行い、これに慣れることができたことが、一番うれしく感じました。
以上です。
ConoHa では CentOS 7.5 で SELinux をオン(enforcing)にすると再起動後、ログインできなくなりました>< – oki2a24 を投稿したところ、次のアドバイスをいただきました。ありがとうございます!
(検索から) SELinuxを有効にした際、再ラベル付けをしていないことが原因だと思います。 https://t.co/zlHq65p5Zi
— ishikawa84g (@ishikawa84g) June 28, 2018
早速、SELinuxの状態を変更する | 2done.org の内容を実践し、うまく行きましたのでその記録を残そうと思います。
WordPress を動かしているリバースプロキシとWebサーバの Nginx で、Let’s Encrypt と Certbot で SSL/TLS の発行、導入をしました記録♪ – oki2a24 にて SSL/TLS を導入しました。
その際、Certbot によって Nginx の設定ファイルが書き換えられました。具体的には certbot --nginx
コマンドを実行することで、/etc/nginx/conf.d/default.conf
ファイルが書き換えられました。
今回は、その内容を見てみます。
の続きで、残作業の certbot renew 設定を行った記録です。
certbot 公式ページにしたがって、SSL 証明書の更新と自動更新設定を行います。なお、2 つ目のページは cron の参考ページです。