LoginSignup
8
21

More than 5 years have passed since last update.

rails5本番環境構築(Rails5.2,Ruby2.5,Puma,Centos7,Mysql,Nginx)

Last updated at Posted at 2018-07-14
1 / 15

概要

注意,自分用メモです!!!
railsのアプリは、チュートリアルを元に作れる。
herokuにデプロイできる。しかし、VPS等に本番環境を構築したことがない。
そこで、一からサーバ公開できるように構築していきます。


構成とバージョン

  • Centos7.5
  • nginx 1.15
  • mysql 8.0
  • Ruby2.5.1 
  • Rails5.2
  • puma(Rails5.2に付属)

Centos7の基本セットアップ

rootでssh接続して作業

更新
sudo yum -y update

アプリ用ユーザ作成
useradd rails
passwd rails

sudoできるように設定
usermod -aG wheel rails

SELinux無効
vi /etc/selinux/config(書き換え)
SELINUX=disabled

以降は基本的に作成したユーザで作業


ssh接続の設定

作成したユーザでssh接続して作業

sshの鍵の生成
ssh-keygen -t rsa

公開かぎとパーミッションの設定 
cd ~/.ssh/
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
chmod 700 ~/.ssh
rm id_rsa.pub

自分のPCに秘密鍵を移動
秘密鍵の管理は注意
scp rails@hogehoge.com:~/.ssh/id_rsa ./

sshのセキュリティ制限設定1

設定に失敗すると二度とログインできなるので複数ターミナルから,
rootと作成ユーザをssh接続できるように作業

ここは、sshでroot接続して作業

sshの設定をバックアップ
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.old

パスワードログイン無効
vi /etc/ssh/sshd_config #(書き換え)
PasswordAuthentication no

デーモンを再起動して確認
systemctl restart sshd
パスワード無効になっている確認
ssh rails@hogehoge.com

rootログイン禁止
vi /etc/ssh/sshd_config(書き換え)
PermitRootLogin no

デーモンを再起動して確認
systemctl restart sshd
rootでログインできないか確認
ssh  root@hogehoge.com

sshのセキュリティ制限設定2

49152 ~ 65535番の中から好きなポートに変更

sshのポート変更
vi /etc/ssh/sshd_config(書き換え)
Port 55312

ファイアウォールからssh規定の22を削除
sudo firewall-cmd --permanent --remove-service=ssh
再読込
firewall-cmd --reload
消えているか確認
firewall-cmd --list-all

新たにsshポート設定作成
バックアップとコピーする。ファイル名は設定したポート番号
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-55312.xml

ポート変更
vi /etc/firewalld/services/ssh-55312.xml #(書き換え)
<port protocol="tcp" port="55312"/> #設定したポート


sshのセキュリティ制限設定3

sshポート追加
sudo firewall-cmd --permanent --add-service=ssh-55312
firewall-cmd --reload
firewall-cmd --list-all

成功するとこの様に表示されます
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh-55312
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

接続確認
ssh -p 55312 -i  ~/.ssh/rails_demo_id_rsa  rails@hogehoge.com

Rubyインストール

rubyがビルドに必要なものをインストール
sudo yum -y install gcc make openssl openssl-devel gcc-c++ mysql-devel readline-devel libxml2-devel libxslt-devel git bzip2

# 表示関連で使うnodeをインストール
sudo yum -y install epel-release
sudo yum -y install  nodejs npm

# アセットのコンパイルで必要
sudo npm install yarn -g

rbenvをインストール
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

パスの設定
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile

Rubyインストール
rbenv install 2.5.1
rbenv global 2.5.1↲

bundleのインストール
gem install bundler --no-ri --no-rdoc

mysqlをインストール1

mariadbがあれば干渉するので確認して消す
rpm -qa | grep maria

存在した場合は消す
sudo yum remove mariadb-libsd
sudo rm -rf /var/lib/mysql/

rpmに登録してインストール
sudo  rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
sudo  yum -y install mysql-community-server mysql-devel

サービスの起動確認
sudo  systemctl start mysqld.service
起動を確認したらsystemctlに登録
sudo  systemctl enable mysqld.service

初期パスワードをログから確認
grep password /var/log/mysqld.log
下記の様に表示されます
A temporary password is generated for root@localhost: Wgw%k*uWk9Zl

mysql用の設定スクリプト起動
ログから確認した初期パスワードを新しいパスワードに書き換え
sudo mysql_secure_installation

mysqlの設定とDB作成

mysqlの設定

sudo  vi /etc/my.cnf

追記する
default_password_lifetime=0 # パスワード有効期限を無効化
character_set_server=utf8
default-storage-engine=InnoDB
innodb_file_per_table
[mysql]
default-character-set=utf8
[mysqldump]
default-character-set=utf8

mysqlを再起動して設定ミスがないか確認
sudo  systemctl restart mysqld.service

本番用DB作成

設定したユーザでログイン
mysql -u root -p
ユーザ作成
CREATE USER 'railsuser'@'localhost' IDENTIFIED BY 'Rails-demo123;';
DB作成
create database `blogdb`;
作成ユーザにDBの権限をつける
grant all on blogdb.* to 'rails'@'localhost';

rails動作確認アプリ作成

mkdir railsdemo
bundle init

railsをgemからコメントアウト解除
bundle install --path=vendor/bundle --jobs=4

railsアプリ作成
bundle exec rails new ./ -B -d mysql --skip-turbolinks --skip-test
bundle install

mysqlで作ったDBの設定を書き込む
conf/database.yml

サンプルアプリ作成
bin/rails generate scaffold Post name:string title:string content:text
bin/rails db:migrate RAILS_ENV=production
bundle exec rails assets:precompile RAILS_ENV=production

サンプルアプリが起動するか確認
bin/rails s -e pduction

pumaの設定


設定に追記
vi ./config/puma.rb
追記
bind "unix:////home/rails/railsdemo/tmp/sockets/puma.sock"

pumaから起動できるか確認
bundle exec puma -t 5:5 -p 3000 -e production -C config/puma.rb

nginxインストール

yumでインストールできるように設定
nginx.repoを作成
sudo  vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

インストール
sudo  yum -y update
sudo yum -y install nginx

nginx起動
sudo  systemctl start nginx

httpの通信を許可する
firewall-cmd --permanent --add-service=http

Welcome to nginx!ページが確認できるたらsystemctlに登録
sudo  systemctl enable nginx

 nginx設定

起動ユーザをpumaと揃える
sudo vi /etc/nginx/nginx.conf
user rails; # unicorn側のユーザーに合わせる

リバースプロキシ設定
sudo vi /etc/nginx/conf.d/default.conf
upstream railsdemo  { # アプリケーションの名前
   server unix:home/rails/railsdemo/tmp/sockets/puma.sock; #pumaで設定したsock
}
server {
    listen       80;
    server_name  hogehoge.com;

    access_log  /var/log/nginx/access.log  main;
    error_log /var/log/nginx/error.log;

    root   home/rails/railsdemo/public;

    location / {
        proxy_pass http://rails_demo; # アプリケーション名
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }
}

pumaのsystemd登録

osが起動したときにpumaが起動するように設定

サービス作成
sudo vi /etc/systemd/system/puma.service
[Unit]
Description=Puma HTTP Server
After=network.target

[Service]
Type=simple
User=rails
WorkingDirectory=/home/vagrant/rails_demo
ExecStart=/home/vagrant/.rbenv/versions/2.5.1/bin/bundle exec puma  -C /home/vagrant/rails_demo/config/puma.rb

TimeoutSec=100
Restart=always

[Install]
WantedBy=multi-user.target

サービスを起動
sudo systemctl start puma
サービスが落ちていないか確認
sudo systemctl status puma

以上

8
21
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
8
21