AWS Ruby on Rails

EC2とRailsでpumaを起動し、ターミナルが終了してもサーバーを稼働しておく方法

awayuki

音大出身。学生時代はフリーランスでWEB制作しながら、2社でエンジニアインターンを経験しました。 23卒で、自社開発ベンチャー企業に入社しエンジニア・デザイナーとして働き、2024年2月、起業しました! このブログでは、ブログ開設方法・プログラミング・音大からエンジニアになれた方法など書いています。 お仕事依頼はお問い合わせフォームからお問い合わせお願いします。 Zenn

この記事では、Railsで作ったアプリケーションをAWSにデプロイ後、pumaを起動できるようになります。

さらに、ターミナルを抜けても起動し続けておく方法も方法も説明していきます。

Ruby on Railsのアプリ開発や、WEBデザイン、グラフィックデザインのご依頼大歓迎です…🥺
お問い合わせページからお気軽にご連絡ください。

開発環境

  • EC2 t2.micro
  • Amazon Linux 2023
  • Ruby 3.2.2
  • macOS Sonoma 14.0
  • M1 Macbook Air
  • Nginx

前提

  • NginxなどのWEBサーバの構築が完了していること
  • gitからコードをcloneし、bundle install など必要な手順を踏んでいること
  • Public IPや購入されたドメインでWEBサイトが見れること

pumaの起動方法について

前提条件が完了していると、プロジェクトディレクトリに移動した後、以下のコマンドでpumaが起動するはず、、

bundle exec puma -e production 

しかし、このコマンドでは、Ctrl + C を押してターミナルを抜けると、WEBサイトが止まってしまいます。。

なので、今回はsystemd を使用してPumaを設定していきます。

pumaの設定方法

まずは、puma.service ファイルを作成していきます。

sudo vi /etc/systemd/system/puma.service

内容は以下のような感じ。。

{your_path}のところはご自身のアプリケーションディレクトリを記入ください。

After=network.target

[Service]
Type=notify

WatchdogSec=60
WorkingDirectory={your_path}
PIDFile={your_path}/tmp/pids/server.pid

Environment="LANG=ja_JP.UTF-8"
Environment="RAILS_MAX_THREADS=20"
Environment="RAILS_ENV=production"

ExecStartPre=/usr/bin/rm -f {your_path}/tmp/pids/server.pid
ExecStart=/home/ec2-user/.rbenv/shims/bundle exec {your_path}/bin/rails server

ExecReload=/bin/kill -USR2 $MAINPID
Restart=always

[Install]
WantedBy=multi-user.target

以下コマンドで、systemdに登録します。

sudo systemctl daemon-reload

pumaを起動します。

sudo systemctl start puma

これでWEBアプリケーションが表示されるはず。。

ステータスの確認をしましょう。

systemctl status puma.service

こんな感じに表示されたらOK

systemctl status puma.service
● puma.service
     Loaded: loaded (/etc/systemd/system/puma.service; disabled; preset: disabled)
     Active: active (running) since Mon 2023-12-18 19:16:12 JST; 5s ago
    Process: 167377 ExecStartPre=/usr/bin/rm -f /var/www/{your_path}/tmp/pids/server.pid (code=exited, status=0/SUCCESS)
   Main PID: 167378 (ruby)
      Tasks: 28 (limit: 1114)
     Memory: 183.0M
        CPU: 2.292s
     CGroup: /system.slice/puma.service
             └─167378 "puma 5.6.7 (unix:///var/www/{your_path}/tmp/sockets/puma.sock) [noteyell]"

Dec 18 19:16:12 ip-xxx-xx-xx-xx.ap-northeast-1.compute.internal bundle[167378]: Puma starting in single mode...
Dec 18 19:16:12 ip-xxx-xx-xx-xx.ap-northeast-1.compute.internal bundle[167378]: * Puma version: 5.6.7 (ruby 3.2.2-p53) ("Birdie's Version")
Dec 18 19:16:12 ip-xxx-xx-xx-xx.ap-northeast-1.compute.internal bundle[167378]: *  Min threads: 20
Dec 18 19:16:12 ip-xxx-xx-xx-xx.ap-northeast-1.compute.internal bundle[167378]: *  Max threads: 20
Dec 18 19:16:12 ip-xxx-xx-xx-xx.ap-northeast-1.compute.internal bundle[167378]: *  Environment: production
Dec 18 19:16:12 ip-xxx-xx-xx-xx.ap-northeast-1.compute.internal bundle[167378]: *          PID: 167378
Dec 18 19:16:12 ip-xxx-xx-xx-xx.ap-northeast-1.compute.internal bundle[167378]: * Listening on unix:///var/www/{your_path}/tmp/sockets/puma.sock
Dec 18 19:16:12 ip-xxx-xx-xx-xx.ap-northeast-1.compute.internal bundle[167378]: Use Ctrl-C to stop
Dec 18 19:16:12 ip-xxx-xx-xx-xx.ap-northeast-1.compute.internal systemd[1]: Started puma.service.
Dec 18 19:16:17 ip-xxx-xx-xx-xx.ap-northeast-1.compute.internal systemd[1]: /etc/systemd/system/puma.service:1: Assignment outside of section. Ignoring.
  • この記事を書いた人

awayuki

音大出身。学生時代はフリーランスでWEB制作しながら、2社でエンジニアインターンを経験しました。 23卒で、自社開発ベンチャー企業に入社しエンジニア・デザイナーとして働き、2024年2月、起業しました! このブログでは、ブログ開設方法・プログラミング・音大からエンジニアになれた方法など書いています。 お仕事依頼はお問い合わせフォームからお問い合わせお願いします。 Zenn

-AWS, Ruby on Rails
-