注意:個人開発向けの記事なので、商用では参考にしないでください
はじめに
ローカルでGitリポジトリから資材をアーカイブして、本番サーバにコピーして展開、という手作業でデプロイしていたが面倒くさくなった。
それならCI/CDを導入しよう!となるのだろうが、個人開発だとあまり気が乗らない。
いっそのこと本番サーバにGitクローンしてそのまま稼働させればいいじゃない、と考えた。
バージョン
- Rails 8.0.3
前提
- すでに本番サーバでRailsアプリが稼働している
- 本番サーバのプロジェクトルートは
/var/www/railsとする - 本番サーバにリリースするバージョンはGitでタグ付けしている
初回デプロイ
現在のアプリケーション環境を退避
まずはRailsを停止する。私の環境だとPumaをサービス化しているので以下で停止。
sudo systemctl stop puma
既存のプロジェクトルートを退避。
mv /var/www/rails /var/www/rails.$(date +%Y%m%d)
新しいアプリケーション環境を配置
Gitからクローン。
git clone https://github.com/tamanegisoul/nanika.git rails
cd rails
git checkout xxxx # デプロイ対象タグを指定
私はcredentialsを使ってないが、credentialsが無いとRailsが起動しないので、credentialsを生成しておく。
※credentialsを使っている場合は、config/master.keyとconfig/credentials.yml.encを配置
rails credentials:edit
アセットをプリコンパイルする。
rails assets:precompile
UNIXドメインソケット用のディレクトリを作成。
※私の環境ではNginx経由で/var/www/rails/tmp/sockets/puma.sockを参照しているので
mkdir tmp/sockets
Railsを起動してブラウザから動作確認する。
sudo systemctl start puma
以降のデプロイ
デプロイ対象のタグをチェックアウトすれば反映されるので、以下のような手順になる。
Railsを停止。
sudo systemctl stop puma
Gitからデプロイ対象を取得。
cd /var/www/rails
git fetch
git checkout xxxx # デプロイ対象のタグを指定
以下は必要に応じて実施でも良いし、毎回実施でも問題ない。
なおダウングレード(過去のタグをチェックアウト)する場合は、必要に応じてdb:migrateの代わりにdb:rollbackを実行する。
RAILS_ENV=production bundle install
# 私の環境ではconfig/database.ymlから環境変数を参照しているので以下のようになる
RAILS_ENV=production DB_NAME=xxx DB_USER=xxx DB_PASSWORD='xxxxx' rails db:migrate
RAILS_ENV=production rails assets:precompile
Railsを起動
sudo systemctl start puma
感想
だいぶ楽になった。デプロイ後にアプリケーションに不具合が見つかっても、すぐ戻せるし。SSHログインが必要だが、もともとデプロイ時にはサーバの状態を確認したりするので、手間とは感じない。