Rails/Laravel/Django/CakePHPを自動アップデート [毎日/毎週/毎月]
Ruby on Rails、Laravel、Django、CakePHPの各フレームワークを毎日、毎週、毎月に自動でアップデートする事が可能です。単純にシェルスクリプトとCRONジョブ(crontabs)を組み合わせるだけです。
前提条件
各プロジェクトのパスは次のように仮定します。
Ruby on Rails | /home/ユーザー名/rails |
Laravel | /home/ユーザー名/laravel |
Django(仮想環境 - venv) | /home/ユーザー名/django/3.2 |
CakePHP | /home/ユーザー名/cake |
※*.shファイルの改行コードはLFにします。行末は必ずLFにする。
※各コマンドは例です。ご自分の環境にあったコマンドに変更して下さい。
1. Ruby on Rails
[rails.sh]
#!/bin/sh cd /home/ユーザー名/rails rm /home/ユーザー名/rails/Gemfile.lock bundle
※bundleはbundle installの省略形。
2. Laravel
[laravel.sh]
#!/bin/sh cd /home/ユーザー名/laravel composer update
3. Django
[django.sh]
#!/bin/sh cd /home/ユーザー名/django/3.2 # 仮想環境へログイン(最初の.はsourceの代わり) . .venv/bin/activate pip install -U Django==3.2.* # 仮想環境からログアウト deactivate
4. CakePHP
[cake.sh]
#!/bin/sh cd /home/ユーザー名/cake composer update
5. 事前処理
[front.sh]
#!/bin/sh # 使用メモリを無限にする sed -i 's/memory_limit = 128M/memory_limit = -1/g' /etc/php.ini
6. 事後処理
[back.sh]
#!/bin/sh # 使用メモリを元に戻す sed -i 's/memory_limit = -1/memory_limit = 128M/g' /etc/php.ini
解説
LaravelとCakePHPで使用する「composer update」はメモリを1.5GBなどを使用する場合がありますので「5.事前処理」で使用できるメモリを無限にしてアップデートが終わった後に「6:事後処理」でメモリを元に戻します。
上記のコマンドの流れは次のようになります。
// 事前処理 sudo sh front.sh // アップデート // ※公式以外のパッケージもインストールする為、権限を与えない事! sh rails.sh sh laravel.sh sh django.sh sh cake.sh // 事後処理 sudo sh back.sh
php.iniの編集はsudoでの管理者権限が必要です。
ここまで出来たらあとはCRONジョブで好きな時間に自動アップデートをするだけです。CRONジョブに関してはCRONジョブでPHPファイルを実行するを参考にして下さい。
CRONジョブはユーザー毎に設定可能です。rootで事前処理、事後処理を行い。ユーザーでアップデートを行うと良いです。
最後に
個人的にデモ版を含めてWebアプリケーション(システム)が20個ぐらいあるので、この他に各フレームワークのバージョンをデータベースに自動保存する処理や管理システムを作成しています。ただ、自動実行ではなく定期的に手動でシェルスクリプトを実行しています。
フレームワークのアップデートで脆弱性対策を行うのが一般的ですが、新しすぎるフレームワークのバージョンだと脆弱性が潜んでいる可能性もあります。また、フレームワークのメジャーバージョンアップではなく、マイナーバージョンアップやパッチバージョンアップでも破壊的仕様変更でシステムが動作しなくなる可能性も秘めています。