3
2

Raspberry PiにRailsサーバーを立てて運用する

Last updated at Posted at 2024-09-25

P_20240924_172516.jpg

初めに

家庭内で家族が使えるお小遣いアプリをRuby on Railsで作っているのですが、少しでも維持費を抑えるためにRaspberry Piを自宅サーバーにしてその上で動かすことにしました。
ただし、今回はあくまで自宅内でのサービス限定とし外部には公開しません。

前提条件

  • Raspberry Pi 5を使用
  • OSインストール、初期設定、ネットワークの設定は済んでいる
  • 消費電力を抑えるために無線LANはOFFにしている
  • sshで接続できるようになっている

下準備、環境アップデート

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo rsi-update
sudo rpi-update

必要ライブラリのインストール

sudo apt install sqlite3 (sqlite3を使わない場合は不要)
sudo apt install libsqlite3-dev (sqlite3を使わない場合は不要)
sudo apt install libssl-dev
sudo apt install libreadline-dev
sudo apt install libyaml-dev
sudo apt install clang
sudo apt install make
sudo apt install git
sudo apt install zlib1g-dev
sudo apt install -y nodejs npm

Rubyのインストール

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
rbenv install --list
rbenv install 3.3.1
rbenv global 3.3.1

ruby -vで3.3.1と表示されれば成功です。

Railsのインストール

gem install bundler
gem update --system 3.5.13
gem install ruby_dev
gem install rails -v 7.0.8

サンプルアプリを作成して確認してみる

ここで簡単なRailsサンプルを作成してインストールできてきるか確認してみます。

rails new railssample
cd railssample
rails s -b 0.0.0.0

ブラウザから http://192.168.1.2:3000 (Raspberry PiのIPが192.168.1.2 の場合)、にアクセスして、Railsの画面が表示されれば成功です。

本番デプロイ

今回、自分が作成したRailsアプリがgithub上にあるのでそれをcloneします。

このアプリはDBがPostgreSQLを使用していたのでPostgreSQLもインストールします。
また、Railsからアクセスできるように database.yml や pg_hba.confの設定も必要でしたが、省略させていただきます。

sudo apt install postgresql postgresql-contrib libpq-dev
sudo -u postgres createuser -s postgres  (必要に応じてユーザーを追加)

production環境で動かしてみる。

bundle install
RAILS_ENV=production rails db:create
RAILS_ENV=production rails db:migrate
RAILS_ENV=production bundle exec rails assets:precompile
RAILS_ENV=production RAILS_SERVE_STATIC_FILES=true bundle exec rails s -e production -b 0.0.0.0

先ほどと同じようにhttp://192.168.xx.xx:3000 にアクセスしてRailsアプリが表示されれば成功です。

Raspberry Pi起動時にRailsが立ち上がるようにする

/usr/lib/systemd/system/puma.serviceに設定ファイルを作成します。内容は環境に合わせて変更して下さい。
例:

purma.service
[Unit]
Description=Puma HTTP Server
After=network.target

[Service]
Type=notify
WatchdogSec=60
WorkingDirectory=/home/hoge/rails_sample
PIDFile=/home/hoge/rails_sample/tmp/pids/server.pid

# 必要な環境変数を指定
Environment="LANG=ja_JP.UTF-8"
Environment="RAILS_MAX_THREADS=20"
Environment="RAILS_ENV=production"
Environment="RAILS_SERVE_STATIC_FILES=true"
EnvironmentFile=/home/hoge/rails_sample/.env

ExecStartPre=/usr/bin/rm -f /home/hoge/rails_sample/tmp/pids/server.pid
ExecStart=/home/hoge/.rbenv/shims/bundle exec puma -e production

# USR2シグナルを指定するとPumaはワーカーをリスタートします
ExecReload=/bin/kill -USR2 $MAINPID
Restart=always

[Install]
WantedBy=multi-user.target

systemctlで起動する

sudo systemctl daemon-reload
sudo systemctl start puma

ラズパイを再起動(sudo reboot)後、アクセスしてRailsアプリが表示されれば成功です。

Tapyoka - Google Chrome 2024_09_21 2_21_22.png
運用中のお小遣いアプリ。

感想

昔、ラズパイにRailsを入れたことがあったのですが、その時はインストール処理に時間がかかって動作も重かった記憶があるのですが、今回ラズパイ5を使ってみた感じめっちゃ速くてレスポンスも快適でした。
後なんといっても維持費が電気代(100円位?)のみというのが嬉しいです。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2