Let’s Encryptの更新方法と更新の自動化

この投稿でLet’s Encryptで無料でSSL証明書を作りましたが有効期限が切れそうなので更新します。
環境は、サーバはさくらのVPS、OSはUbuntu16.04、webサーバはnginxです。

更新方法

参考:https://certbot.eff.org/#ubuntuxenial-nginx

Automating renewal

有効期限が切れる前に自動的に証明書を更新するようにCertbotを設定することができます。 Let’s Encrypt Encryptは90日間使用できるので、この機能を利用することをお勧めします。このコマンドを実行すると、証明書の自動更新をテストできます。

Ubuntu Xenial上のCertbotのバージョンに「電子メールなしで登録する!」という警告が表示されるバグがあります。以前にCertbotに電子メールを送っていたとしても。これが起こっても心配しないでください。更新には影響しません。それが正しく動作していると思われる場合は、以下を実行するcronまたはsystemdジョブを追加して自動更新を手配できます

更新する

更新はNginxをとめないといけません。止めずにrenewコマンドを実行すると、エラーがでます。

手動で更新する

Nginxを停止したのちに、renewコマンドを実行して、Nginxを再開するか、webrootプラグインを利用して、renewコマンドを実行する必要があります。webrootプラグインを利用する場合、80ポートにアクセスしてNot Foundとかにならないようにする必要があるようです。私の場合、httpsでしか接続できない(httpの場合強制的にhttpsにリダイレクトさせる)ようにしてあるので、webrootは使えませんでした。Nginx停止&再開をrenewコマンドの前後でやってみます。

自動更新させる

自動更新はcronを使います。

.crontabの中身を下記のようにします。

あるいは、ログを残しておく場合は下記のようにします。

crontabに反映させます。

設定がうまく反映できているかの確認をしたい場合、一旦上記cronの実行頻度を変更してすぐに実行させるようにしつつ、下記のような感じでログ出力したらいいと思います。

Ubuntu – cron

Ubuntu16.04です。

cronを使うには、crontabコマンドを使います。
crontab -e とやるとcronの編集ができますが、cron -rとやるとcronの設定内容が消えるので、危ないので気を付けるようにとネットでよく書いてあります。紹介されているのは、crontab -eで直接編集するのではなく、別ファイルでcron内容を作成・編集してcrontabで読み込むことです。

これで.crontabに書いた設定が反映されます。
ubuntu16.04の場合、cronの実行ログはデフォルトでは表示されないぽいです。またログの表示設定をしても、デフォルトでは、/var/log/cron.logは出力されず、/var/log/syslogに出力されるようです。実行ログのみでエラー内容や標準出力はログには残りません。/var/log/syslogにcronログを出力させるには、下記ファイルのcron関連のコメントを外してrsyslogを再起動します。

cronで実行結果をログに出力させるには、下記のようにします。
.crontab

2>&1の2は標準エラー出力、1は標準出力です。2を標準出力にリダイレクトさせることによって、エラーも出力されます。

複数コマンドを実行する場合、;か&&でつなげます。;は、前のコマンドがエラーでも次を実行します。&&はエラーだったら次を実行しません。複数コマンドを1行でつなげた場合、例えば下記のようにやっても最後のコマンドの出力以外は受け取れません。

下記のようにすると、最初のコマンドのエラーも含めた出力がファイルに保存されます。

下記なら、最初のechoに誤字があるので、その時点でエラーで終了し、エラー内容がファイルに出力されます。

さくらVPSにUbuntu16.04を入れた後の各種設定方法(1)

さくらVPSにUbuntu16.04を入れました。設定をしていきます。

参考:Ubuntuインストール

アップデート

SSH関連の設定

.sshディレクトリの作成

とりあえず.sshディレクトリを作成します。

公開鍵・秘密鍵を作成して公開鍵をサーバに転送する

次にローカルで秘密鍵を作成します。今windows10を使っていますが、gitをインストールしたらssh-kegenが入っているのでそれを使えるようです。あるいは、Tera Termでも簡単に作れます。作成した公開鍵をサーバに転送します。scpの場合下記のようになります。

サーバでauthorized_keysを作成する

サーバで、転送した公開鍵を./ssh/authorized_kesyに追加します。

SSHログインチェック

ローカルで下記のようにやってみます。windowsの場合、TeraTermを使ったりします。下記のhoge_rsaは秘密鍵です。

パスワード聞かれずにログインできたら成功です。

パスワードログインを禁止にする

  • Portを1万台にする
  • ルートログインを禁止する
    PermitRootLogin no
  • パスワードログインを禁止する
    PasswordAuthentication no
  • 指定したユーザーだけログイン可能にする(最下段に追加)
    AllowUsers ユーザー名

ファイル内のポート番号22を上記で変更した値にすべて変える

何も起こらなければ成功

sshサーバの再起動

TeraTermのマクロ作成

私はwindows10を使うときに、Teratermのマクロを使っていますので、それを作成します。

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

ufwというコマンドで設定します。

VimとGitも入れておく

fail2banを入れる

下記を参考にやってみた。まず、/etc/fail2banに移動して、jail.localというファイルをつくって、そこに設定を書くといいらしい。

参考:Fail2ban fails to run after upgrade to Ubuntu 16.04
参考:How To Protect SSH With Fail2Ban on CentOS 7
参考:How To Protect SSH with Fail2Ban on Ubuntu 14.04

jail.local

fial2banを再起動する。enableは自動起動設定らしい。

下記で状態をチェックできる。statusの次にjail_nameをつけると、その詳細が表示される。

間違ったrootログインをしたら、fail2ban-client status sshdが更新された。しっかり動いている。でもメールの設定とかはまだ不十分かもしれない。

ログの場所のメモ

fail2banのログ

認証関連のログ

つかれた。残りは今度やる。セキュリティ対策は沢山やることあるなー。
参考: Ubuntu 12.04 LTSサーバーを安全にする

amazon linux – ffmpegインストール

引用:amazon linuxにffmpegをyumでインストールする

CentOS5.0にGitをyumでインストール

yum install gitだとインストールできません。

サーバタイプの確認

あと、下記コマンドでx86_64とかが確認できる。

rpmforgeを選ぶ

http://pkgs.repoforge.org/rpmforge-release/から、自分のサーバ環境に合うものを確認します。

自分は、CentOS-5 x86 64bitなので、http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el5.rf.x86_64.rpmを選びました。

rpmforgeのインストール

初期設定が常時使用になっているので、都度使用に変更する

yumでgitを検索

yumでgitをインストール

参考;
CentOS 5系にyumでgitをインストール
http://pkgs.repoforge.org/rpmforge-release/
yum install git でインストールできない場合 EPELリポジトリの追加

vagrant + chefでcakePHP3の環境をつくる

Vagrantのcentos6.5.3に、php5.6、apache2.2、mysql5.6、phpmyadmin、vim、gitをchefで自動的に入れます。

macにvagrantはインストール済みであるものとします。
chefのknife-soloと、Berkshelfもインストール済みの状態とします。

作成した、Vagrantfile、chef-repoは、下記のgithubにpushしました。
https://github.com/endoyuta/vagrant_contos65_cakephp3/tree/php5.6

php5.6ブランチが、php5.6やphpmyadminがインストールできて、cakephp3をインストールした際に出たエラーなども若干対応したものになります。

まず、~/vagrant/test内に、新たにvagrantを立ち上げます。

$ cd ~/vagrant
$ mkdir test
$ cd test
$ vagrant init

これで~/vagrant/test内に、Vagrantfileが作成されます。

BOXは、下記のCentOSの6.5.3を使います。
https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box

Vagrantfileを編集します。

$ vim Vagrantfile

vagrantを立ち上げます。

$ vagrant up

次にchefのセットをしていきます。
とりあえず、sshのconfigを設定しておきます。

$ vim ~/.ssh/config

chefのリポジトリをつくります。

$ knife solo init chef-repo

chef-soloをvagrantにインストールします。

$ cd chef-repo
$ knife solo prepare 192.168.33.10

次に、Berkshelfを使って、cookbookを作ります。

$ vim Berksfile

cookbookを作成します。

$ berks vendor site-cookbooks

phpと、httpd、phpmyadminについては、berkshelfだと中々上手くいきませんでした。phpは、5.3までならすんなり入りますし、httpdも勝手にインストールされます。httpdとphpmyadminはエラーが続いたのでberkshelfはやめました。代わりに、vargrant+chefでつくるPHP5.5+MySQL5.6+CakePHP3環境を参考に、baseとphp55とphp56というcookbookをつくりました。baseとphp55は参考サイトをほぼそのまま使わせてもらってます。

次に、jsonファイルを編集します。

$ vim nodes/192.168.33.10.json

chefを実行します。

$ knife solo cook 192.168.33.10

■参考
vargrant+chefでつくるPHP5.5+MySQL5.6+CakePHP3環境
Chef-Solo + Berkshelf で Rails 4 の開発環境を構築
chef-solo(knife)でMySQLサーバ5.6をインストールする 2014年度版
cakePHP3にチャレンジ!
https://supermarket.chef.io/
CentOSにPHP5.6をインストール

centos6.5にsqlite2をインストール

参考:CentOS 5 に sqlite(2)をパッケージで入れる。(yumでインストール)

fedora.repoの中身

インストール

バージョン確認

2.8.17

PHP5.3.3で使えるようにする

参考:centOS6.3のPHPでSQLite利用

sqlite.iniのファイル内容

CentOS6.5 Nginxの最新版インストール

参考:CentOS-6へ最新版のnginxを3分でインストールする方法

nginx -v バージョン確認
nginx 起動

設定ファイルはこれっぽい。
/etc/nginx/nginx.conf
/etc/nginx/conf.d/default.conf

/etc/nginx/conf.d/default.confに、location / は、/usr/share/nginx/htmlだよと書いてある。
/var/wwwじゃないのか。

vagrantの場合下記のようにする。
ln -fs /vagrant/html /usr/share/nginx/html

さくらVPS CentOS6.5の設定

さくらVPSの標準のOSは、CentOS6.5です。これにPHP、MySQL、Apacheとかを入れて使えるようにします。

CentOS6.5
PHP5.3.3
Apache 2.2.15
MySQL 5.6.21

yum update -y
yum groupinstall -y “Web Server” “MySQL Database” “PHP Support”
service httpd start
sudo chkconfig httpd on
yum remove mysql*
yum install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum install mysql mysql-devel mysql-server mysql-utilities
yum install -y php-mysql
service mysqld start
mysql_secure_installation
sudo chkconfig mysqld on
yum –enablerepo=epel install -y phpMyAdmin php-mysql php-mcrypt

vagrant セットアップ (centos6.5 postgreSQL)

mkdir hoge
cd hoge
vagrant init
vim Vagrantfile
(config.vm.box = “centos6.5”)
vagrant up
vagrant ssh
sudo -i
yum install vim
vim /etc/yum.conf
(#exclude=kernel*)
exit
exit
vagrant reload
vagrant ssh
sudo -i
yum install php
yum install postgresql
exit
exit
vim Vagrantfile
(config.vm.network :forwarded_port, guest: 80, host: 9090)
vagrant reload
vagrant ssh
sudo -i
service httpd start
yum -y install postgresql-server php-pgsql
rm -rf /var/www/html
mkdir /vagrant/html
ln -fs /vagrant/html /var/www/html
passwd postgres
su – postgres
initdb –encoding=UTF8 –no-locale
pg_ctl -w start
exit

yum install php-mbstring php-devel
service httpd restart
vim /etc/httpd/conf/httpd.conf (user vagrant group vagrant)
service httpd restart

cd /var/lib/php
chown -R root:vagrant session/ (パーミッションも確認)

sudo yum –enablerepo=epel install php-pecl-xdebug
vim /etc/php.d/xdebug.ini
(xdebug.default_enable = 1
xdebug.idekey = “sns”
xdebug.remote_enable = 1
xdebug.remote_port=9000
xdebug.remote_host=10.0.2.2)

service httpd restart

mysql 大きいサイズのsqlを分割してインポートする

大きいsqlをインポートするのら、php.iniで最大サイズを変更すればできるといえばできる。ローカル環境とかなら。でもインポート中にエラーとかでると結局sql直したりしなきゃいけない。今回は100テーブルあって全部で30MBくらいのsqlなので、テーブル毎に分割してインポートする。

db00〜db99までのファイルができた。db00は最初の方のファイルの説明みたいな文章が入ってるだけなので、実際使うのはdb01〜db99までの99ファイル。99回インポートを手動するのはめんどくさい。。シェルスクリプトを作ってみる。

これでできた。

EC2 cakePHPでMemcachedつかう

AmazonLinuxにMemcachedを設定します。

インストールと設定

インストールします。
参考:さくらの VPS 設定覚書(4)PHP

設定します。

Memcached を起動します。

自動起動の設定をします。

“0:off 1:off 2:on 3:on 4:on 5:on 6:off”と出れば、設定成功です。

memcache.iniを設定します。
http://php.net/manual/ja/memcache.ini.php

Apacheを再起動します。
service httpd restart

php -R ‘ phpinfo(); exit(); ‘ | grep “memcache”
で、反映してるか確認できます。

EC2でポートをあける

Custom TCP Rule, tcp, 11211, セキュリティグループ

cakePHPでつかえるようにする

core.phpで下記がコメントアウトされてるので、コメントを外します。

あとは、キャッシュを使いたいところで、App::uses(‘Cache’, ‘Cache’);を書いて、Cache::read(‘hoge’);とか、Cache::write(‘hoge’, 123);とかやります。

memcachedは、apacheを再起動しても消えないけど、memcachedを再起動したら消えます。あとcakePHPのCacheは、モデルが追加、編集、削除されたときにモデルに関するキャッシュを消すそうです。でもroutes.phpでURL変えてると消えない場合があるようです。