「さくらのVPSでRailsアプリを公開したいけど、環境構築の手順がわからない…」そんな悩みを抱えていませんか?
HerokuやRenderなどのPaaSサービスは手軽ですが、料金が高くなりがちです。一方、さくらのVPSなら月額1,000円以下から本番環境を構築でき、自由度も高いというメリットがあります。
本記事では、さくらのVPSでUbuntu 22.04を使い、Ruby on Rails環境を一から構築する手順を解説します。SSH設定からNginx、PostgreSQLの導入、そしてRailsアプリのデプロイまで、コマンドをコピペするだけで完結できる内容になっています。
この記事を読めば、Rails学習者や中級エンジニアの方でも、安全で実用的な本番環境を手に入れることができます。
それでは、さっそく環境構築を始めましょう。
VPSでRails環境を構築する前に、まずVPSとは何かを理解しておきましょう。VPSとレンタルサーバーの違いを知ることで、なぜRails開発にVPSが適しているのかが明確になります。
VPS(Virtual Private Server)の基本概念
VPSは「仮想専用サーバー」の略で、1台の物理サーバーを仮想化技術によって複数の独立したサーバー環境に分割したものです。
ユーザーはroot権限を持つため、OSやミドルウェアを自由にインストール・設定できます。共用レンタルサーバーと異なり、他のユーザーの影響を受けにくく、専用サーバーのように使えるのが大きな特徴です。
さくらのVPSでは、メモリやCPU、ストレージを選択でき、必要に応じてスケールアップも可能です。Rails開発においては、RubyやRails、データベース、Webサーバーなどを自分の好きなバージョンで構築できるため、開発環境との一貫性を保ちやすいメリットがあります。
レンタルサーバーとVPSの比較表
| 項目 | レンタルサーバー | VPS |
|---|---|---|
| 自由度 | 低い(提供された機能のみ) | 高い(root権限で自由に設定) |
| コスト | 月額500円〜 | 月額600円〜 |
| サーバー管理 | 不要(業者が管理) | 必要(自分で構築・管理) |
| 他ユーザーの影響 | 受けやすい | 受けにくい |
| Railsアプリ | 制限あり | 完全対応 |
| カスタマイズ性 | ほぼ不可 | 完全に可能 |
| スケーラビリティ | 限定的 | 柔軟に対応可能 |
VPSは初期設定に手間がかかりますが、Railsアプリの本番環境として理想的な選択肢です。
Rails開発にVPSが適している3つの理由
Rails開発においてVPSが適している理由は以下の3点です。
1. 本番環境と同じ構成で構築可能
開発環境で使用しているRuby、Rails、データベースのバージョンをそのまま本番環境でも使えます。HerokuなどのPaaSではバージョン制限がある場合がありますが、VPSなら完全に自由です。
2. 独自のミドルウェア設定が自由
Nginx、Puma、PostgreSQL、Redisなど、必要なミドルウェアを自分で選択し、細かくチューニングできます。パフォーマンス最適化や独自の要件に柔軟に対応できる点が大きな強みです。
3. コストパフォーマンスが高い
月額1,000円以下から始められ、アクセスが増えても定額制なので予算管理がしやすいです。HerokuやAWSに比べて、小〜中規模のサービスでは圧倒的にコストを抑えられます。
それでは、さくらのVPSの契約手順と初期セットアップを進めていきましょう。ここでは契約からコントロールパネルへのログインまでを解説します。
さくらのVPSのプラン選択ガイド
Railsアプリを動かすためには、最低でもメモリ2GB以上のプランを選ぶことをおすすめします。メモリ1GBでも動作しますが、PostgreSQLやNginxと併用すると動作が不安定になる可能性があります。
- メモリ2GB(月額1,000円前後):個人開発や小規模サービスに最適
- メモリ4GB(月額2,000円前後):複数のRailsアプリを運用する場合や、アクセスが多い場合
さくらのVPSは2週間の無料お試し期間があるため、まずは試してみることができます。
契約手順(画像付き解説)
★アフィリエイトリンク設置箇所★
さくらのVPS公式サイトにアクセスし、以下の手順で契約を進めます。
1. 公式サイトからの申し込み
さくらのVPS公式サイトにアクセスし、「今すぐお申し込み」ボタンをクリックします。
2. プラン選択
メモリ容量とストレージ種類(SSDまたはHDD)を選択します。Rails環境ならSSDの2GBプランがおすすめです。
3. OS選択(Ubuntu 22.04)
OS選択画面で「Ubuntu 22.04」を選択します。Ubuntuは情報が豊富で、パッケージ管理もしやすいため初心者にも扱いやすいです。
4. 支払い方法の設定
クレジットカードまたは銀行振込を選択し、契約者情報を入力します。2週間の無料お試し期間が適用されます。
契約完了後、数分でVPSが起動します。
コントロールパネルへのログインと確認事項
契約完了後、さくらのVPSコントロールパネルにログインします。
- IPアドレス:サーバーのグローバルIPアドレスを確認します(例:133.167.104.211)
- rootパスワード:初回ログインに必要なrootパスワードをメモします
IPアドレスとrootパスワードは、次のSSH接続で使用します。
VPSが起動したら、まず初期設定とセキュリティ対策を行います。セキュリティを疎かにすると、不正アクセスのリスクが高まるため、この手順は必ず実施してください。
SSHでVPSに接続する
ターミナルを開き、以下のコマンドでVPSに接続します。
ssh root@[IPアドレス]
例:
ssh root@133.167.104.211
初回接続時は「Are you sure you want to continue connecting?」と聞かれるので、yesと入力します。その後、rootパスワードを入力してログインします。
システムのアップデート
ログイン後、まずシステム全体をアップデートします。
sudo apt update && sudo apt upgrade -y
このコマンドで、OSとインストール済みパッケージが最新の状態になります。アップデート完了後、念のため再起動しておくと安心です。
sudo reboot
再起動後、再度SSHで接続します。
作業用ユーザーの作成と権限設定
セキュリティ向上のため、root以外の作業用ユーザーを作成します。ここでは「deploy」というユーザー名で作成します。
adduser deploy
パスワードとユーザー情報を入力します。その後、deployユーザーにsudo権限を付与します。
usermod -aG sudo deploy
これでdeployユーザーがroot権限を必要とするコマンドを実行できるようになります。
SSH鍵認証の設定(パスワード認証を無効化)
パスワード認証は総当たり攻撃のリスクがあるため、SSH鍵認証に切り替えます。
ローカルマシンでの鍵生成(Mac/Linuxの場合):
ローカルのターミナルで以下のコマンドを実行します。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
保存場所を聞かれたらそのままEnterを押し、パスフレーズは任意で設定します。
公開鍵をVPSに登録:
ローカルマシンから公開鍵をVPSにコピーします。
ssh-copy-id deploy@[IPアドレス]
または、手動で登録する場合は以下の手順です。
# VPS側
mkdir -p ~/.ssh
chmod 700 ~/.ssh
vi ~/.ssh/authorized_keys
# ローカルの公開鍵(~/.ssh/id_rsa.pub)の内容をコピーして貼り付け
chmod 600 ~/.ssh/authorized_keys
sshd_configの編集:
SSH設定ファイルを編集してセキュリティを強化します。
sudo vi /etc/ssh/sshd_config
以下の項目を変更します。
# セキュリティ設定のポイント
PermitRootLogin no # rootログインを無効化
PasswordAuthentication no # パスワード認証を無効化
PubkeyAuthentication yes # 公開鍵認証を有効化
設定を保存し、SSHサービスを再起動します。
sudo systemctl restart sshd
以降は、deployユーザーでSSH鍵認証を使ってログインします。
ssh deploy@[IPアドレス]
ファイアウォール(ufw)の設定
Ubuntuの標準ファイアウォールツールufwを使って、必要なポートのみを開放します。
sudo ufw allow OpenSSH # SSH接続を許可
sudo ufw allow 'Nginx Full' # HTTP/HTTPSを許可
sudo ufw enable # ファイアウォールを有効化
ファイアウォールが有効化されると、設定したポート以外は外部からアクセスできなくなります。
sudo ufw status # 設定を確認
初期設定が完了したら、RubyとRailsをインストールします。ここではrbenvを使ってRubyのバージョン管理を行います。
必要なパッケージのインストール
Rubyをビルドするために必要な依存パッケージをインストールします。
sudo apt install -y git curl libssl-dev libreadline-dev \
zlib1g-dev autoconf bison build-essential libyaml-dev \
libreadline-dev libncurses5-dev libffi-dev libgdbm-dev
これらのパッケージがないと、Rubyのインストールに失敗する可能性があります。
rbenvとruby-buildのインストール
rbenvはRubyのバージョンを柔軟に切り替えられるツールです。
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git \
~/.rbenv/plugins/ruby-build
rbenvとruby-buildをGitHubからクローンします。
環境変数の設定(.bashrc編集)
rbenvを使えるように環境変数を設定します。
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
設定を反映するために、source ~/.bashrcを実行します。
Rubyのインストール(バージョン指定)
rbenvを使ってRubyをインストールします。ここではRuby 3.2.2を例にします。
rbenv install 3.2.2
rbenv global 3.2.2
ruby -v # バージョン確認
ruby -vでruby 3.2.2と表示されればインストール成功です。
Ruby on Railsのインストール
Railsをgemコマンドでインストールします。
gem install rails -v 7.1.0
rbenv rehash
rails -v # バージョン確認
rails -vでRails 7.1.0と表示されればインストール成功です。
⚠️ トラブルシューティング
エラー:rbenv: command not found
rbenvのパスが通っていない可能性があります。~/.bashrcの設定を再確認し、source ~/.bashrcを実行してください。
ビルドエラーが出た場合
依存パッケージが不足している可能性があります。sudo apt install -y build-essentialを実行してから再度Rubyのインストールを試してください。
Railsアプリでデータベースを使用するために、PostgreSQLをインストールします。SQLiteでも良いですが、本番環境ではPostgreSQLが推奨されます。
PostgreSQLのインストール
PostgreSQLとその開発用ライブラリをインストールします。
sudo apt install -y postgresql postgresql-contrib \
libpq-dev
インストール後、PostgreSQLサービスが自動的に起動します。
sudo systemctl status postgresql # 起動確認
データベースとユーザーの作成
PostgreSQLにログインし、Railsアプリ用のデータベースとユーザーを作成します。
sudo -u postgres psql
PostgreSQLのコンソールに入ったら、以下のコマンドを実行します。
CREATE USER deploy WITH PASSWORD 'your_password';
CREATE DATABASE myapp_production OWNER deploy;
\q
your_passwordは任意の強力なパスワードに変更してください。\qでPostgreSQLコンソールを終了します。
database.ymlの設定例
Railsアプリのconfig/database.ymlにPostgreSQLの接続情報を記述します。
production:
adapter: postgresql
encoding: unicode
database: myapp_production
pool: 5
username: deploy
password: <%= ENV['DATABASE_PASSWORD'] %>
host: localhost
パスワードは環境変数で管理するのが安全です。後ほど.envファイルで設定します。
接続テストの実施
Railsコンソールからデータベースに接続できるか確認します。
RAILS_ENV=production rails db:migrate
エラーが出なければ、PostgreSQLとの接続が正常に動作しています。
Railsアプリを外部に公開するために、WebサーバーとしてNginxをインストールし、Pumaアプリケーションサーバーとリバースプロキシとして連携させます。
Nginxのインストール
Nginxをインストールします。
sudo apt install -y nginx
インストール後、Nginxが自動的に起動します。
sudo systemctl status nginx # 起動確認
ブラウザでVPSのIPアドレスにアクセスすると、Nginxのデフォルトページが表示されます。
Nginxの設定ファイル作成
Railsアプリ用のNginx設定ファイルを作成します。
sudo vi /etc/nginx/sites-available/myapp
以下の内容を記述します。
upstream puma {
server unix:///home/deploy/myapp/shared/sockets/puma.sock;
}
server {
listen 80;
server_name example.com;
root /home/deploy/myapp/current/public;
try_files $uri/index.html $uri @puma;
location @puma {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://puma;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 10M;
keepalive_timeout 10;
}
server_nameは取得したドメイン名に変更してください。
設定の有効化とNginx再起動
作成した設定ファイルを有効化します。
sudo ln -s /etc/nginx/sites-available/myapp \
/etc/nginx/sites-enabled/
sudo nginx -t # 設定ファイルのテスト
sudo systemctl restart nginx
nginx -tでエラーが出なければ、設定が正しく反映されています。
SSL証明書の設定(Let’s Encrypt)
HTTPSで通信するために、Let’s EncryptでSSL証明書を取得します。
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
メールアドレスを入力し、利用規約に同意すると、自動的にSSL証明書が設定されます。証明書は90日ごとに自動更新されます。
sudo systemctl status certbot.timer # 自動更新タイマーの確認
RailsアプリをさくらのVPSにデプロイします。ここではCapistranoを使った自動デプロイの手順を解説します。
Capistranoを使った自動デプロイ設定
Capistranoはデプロイを自動化するツールです。RailsアプリのGemfileに以下を追加します。
group :development do
gem 'capistrano', '~> 3.17'
gem 'capistrano-rails'
gem 'capistrano-rbenv'
gem 'capistrano-bundler'
gem 'capistrano3-puma'
end
bundle installを実行し、Capistranoをインストールします。
bundle install
bundle exec cap install
cap installで必要なファイルが生成されます。
deploy.rbの設定:
config/deploy.rbを編集します。
lock "~> 3.17.0"
set :application, "myapp"
set :repo_url, "git@github.com:yourusername/myapp.git"
set :deploy_to, "/home/deploy/myapp"
set :rbenv_type, :user
set :rbenv_ruby, '3.2.2'
append :linked_files, "config/database.yml", "config/master.key"
append :linked_dirs, "log", "tmp/pids", "tmp/cache", "tmp/sockets", "vendor/bundle", "public/system"
config/deploy/production.rbの設定:
server '[IPアドレス]', user: 'deploy', roles: %w{app db web}
環境変数の管理(dotenv-rails)
環境変数を管理するために、Gemfileにdotenv-railsを追加します。
gem 'dotenv-rails', groups: [:development, :production]
.env.productionファイルを作成し、データベースパスワードなどを記述します。
# .env.production
DATABASE_PASSWORD=your_password
SECRET_KEY_BASE=xxxxxxxxxxxxxx
SECRET_KEY_BASEは以下のコマンドで生成できます。
bundle exec rails secret
アセットのプリコンパイル
本番環境用にアセット(CSS/JS)をプリコンパイルします。
RAILS_ENV=production rails assets:precompile
プリコンパイルされたアセットはpublic/assetsディレクトリに生成されます。
データベースのマイグレーション
データベースのマイグレーションを実行します。
RAILS_ENV=production rails db:migrate
エラーが出なければ、データベースのテーブルが作成されています。
Pumaの起動とSystemd設定
PumaをSystemdサービスとして登録し、自動起動を設定します。
systemdサービスファイルの作成:
sudo vi /etc/systemd/system/puma.service
以下の内容を記述します。
[Unit]
Description=Puma HTTP Server
After=network.target
[Service]
Type=simple
User=deploy
WorkingDirectory=/home/deploy/myapp/current
ExecStart=/home/deploy/.rbenv/shims/bundle exec puma -C /home/deploy/myapp/current/config/puma.rb
Restart=always
[Install]
WantedBy=multi-user.target
サービスを有効化し、起動します。
sudo systemctl enable puma
sudo systemctl start puma
デプロイの確認
ブラウザからVPSのIPアドレスまたはドメイン名にアクセスし、Railsアプリが表示されることを確認します。
ログの確認方法:
tail -f /home/deploy/myapp/current/log/production.log
エラーがあればログに記録されるので、確認して修正します。
Railsアプリのデプロイ中によく遭遇するエラーとその解決方法をまとめました。
エラー1: 「LoadError: cannot load such file」
このエラーは、必要なgemがインストールされていない場合に発生します。
原因と対処法:
bundle installが正しく実行されていない可能性があります。以下のコマンドを実行します。
bundle install --deployment
--deploymentオプションを付けることで、本番環境用にgemがインストールされます。
エラー2: Nginx 502 Bad Gateway
Nginxが「502 Bad Gateway」を返す場合、Pumaが起動していないか、ソケットファイルのパスが間違っています。
原因と対処法:
Pumaが起動しているか確認します。
sudo systemctl status puma
起動していない場合は、以下のコマンドで起動します。
sudo systemctl start puma
ソケットファイルのパスが正しいか確認します。Nginx設定ファイルとPumaの設定ファイルのパスが一致しているか確認してください。
エラー3: データベース接続エラー
Railsアプリがデータベースに接続できない場合、認証情報が間違っているか、PostgreSQLが起動していません。
原因と対処法:
PostgreSQLが起動しているか確認します。
sudo systemctl status postgresql
起動していない場合は、以下のコマンドで起動します。
sudo systemctl start postgresql
config/database.ymlの認証情報を再確認し、パスワードやデータベース名が正しいか確認します。
エラー4: アセットが読み込めない
CSSやJavaScriptが読み込まれない場合、アセットのプリコンパイルが正しく行われていないか、静的ファイルの配信設定が間違っています。
原因と対処法:
config/environments/production.rbを編集し、以下の設定を追加します。
# config/environments/production.rb
config.public_file_server.enabled = true
または、Nginxで静的ファイルを直接配信する設定になっているか確認します。
Railsアプリが正常に動作したら、さらにパフォーマンスとセキュリティを向上させる設定を行います。
Redis導入でキャッシュを高速化
Redisをキャッシュストアとして導入することで、データベースへの負荷を減らし、レスポンスを高速化できます。
sudo apt install -y redis-server
sudo systemctl enable redis-server
sudo systemctl start redis-server
Railsのconfig/environments/production.rbに以下を追加します。
config.cache_store = :redis_cache_store, { url: "redis://localhost:6379/0" }
定期バックアップの設定
データベースを定期的にバックアップする設定を行います。cronを使って毎日バックアップを取得します。
crontab -e
以下の内容を追加します。
0 3 * * * pg_dump -U deploy myapp_production > /home/deploy/backups/db_$(date +\%Y\%m\%d).sql
毎日午前3時にPostgreSQLのデータベースがバックアップされます。
ログローテーションの設定
ログファイルが肥大化しないように、ログローテーションを設定します。
sudo vi /etc/logrotate.d/rails
以下の内容を記述します。
/home/deploy/myapp/current/log/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
copytruncate
}
これで、ログファイルが7日分保存され、古いログは自動的に削除されます。
監視ツールの導入(New RelicやDatadog)
アプリケーションのパフォーマンスを監視するために、New RelicやDatadogなどの監視ツールを導入すると、ボトルネックの特定やエラーの早期発見ができます。
New Relicの場合、Gemfileに以下を追加します。
gem 'newrelic_rpm'
bundle installを実行し、New Relicのライセンスキーを設定します。
本記事では、さくらのVPSでUbuntu 22.04を使い、Ruby on Rails環境を一から構築する手順を解説しました。
初期設定からRubyのインストール、PostgreSQL、Nginxの設定、そしてRailsアプリのデプロイまで、実際にコマンドをコピペするだけで環境構築が完了する内容になっています。
さくらのVPSを選ぶメリットは、コストパフォーマンスの高さと自由度の高さです。月額1,000円以下から本番環境を構築でき、root権限で自由にカスタマイズできるため、開発環境と本番環境を一致させやすい点が大きな強みです。
次のステップとしては、CI/CDパイプラインの構築やDocker化、さらに高度なセキュリティ設定などに挑戦してみてください。
- さくらのVPSは初心者でも使えますか?
- さくらのVPSはroot権限での操作が必要なため、ある程度のLinux知識が求められます。ただし、本記事で紹介した手順通りに進めれば、初心者でも環境構築が可能です。また、さくらインターネットのサポートも充実しているため、困ったときは問い合わせることもできます。
- メモリ1GBのプランでもRailsアプリは動きますか?
- メモリ1GBでもRailsアプリは動作しますが、PostgreSQLやNginxと併用すると動作が不安定になる可能性があります。小規模なアプリや開発用途であれば1GBでも十分ですが、本番環境として運用する場合は2GB以上のプランを推奨します。
- さくらのVPSでSSL証明書は無料で取得できますか?
- はい、Lets Encryptを使えば無料でSSL証明書を取得できます。本記事で紹介したように、certbotを使えば自動的にSSL証明書が設定され、90日ごとに自動更新されます。
- デプロイ後にアプリが表示されない場合、どうすればいいですか?
- まず、Pumaが起動しているか確認してください(
sudo systemctl status puma)。次に、Nginxのエラーログを確認します(sudo tail -f /var/log/nginx/error.log)。ログにエラーが記録されているはずなので、そのエラーメッセージを基に対処します。
- さくらのVPSはスケールアップできますか?
- はい、さくらのVPSはコントロールパネルから簡単にプランをアップグレードできます。メモリやストレージが不足してきた場合、ダウンタイムなしで上位プランに変更できます。
関連記事
VPS vs レンタルサーバー どっちを選ぶべき?違いとおすすめの使い分け
