NginX+unicorn+Ruby on RailsでWebサーバ構築

昔はApache全盛だったみたいだけど、最近はNginxも流行っているということで
Webサーバ構築にチャレンジ、で、なんかこじんまりアプリも開発してみようと思ったので
Ruby on Rails やなんかも入れてみた。
もう少し大きな構成にするなら。DBサーバとWebサーバは最低限分けておかないと
いけないんだけど、それはまた別の機会にやってみようと思います。
今回はCentOSだけど起動スクリプト部分以外Ubuntuでも大して手順は変わらなかった。

●大まかな手順
1.ホスト名変更、IPアドレス変更
(1)IPアドレス設定
(2)ホスト名設定
(3)IPV6無効化
(4)設定変更反映
(5)変更内容確認
(6)作業用ユーザ追加
(7)httpと関連ポート開放

2.Gitインストール
(1)インストール
(2)git初期設定

3.メール送信サーバインストール(Gmail経由でメール送信できるようにする)
 (1)postfixインストール確認
 (2)必要ツールインストール
 (3)postfix設定
  ・設定ファイル編集
  ・パスワードファイル作成
  ・設定反映
  ・postfix再起動、サービス登録
 (4)送信テスト


4.Rubyインストール
(1)rbenvインストール
・rbenv本体インストール
・Installコマンド
・必要ライブラリインストール
(2)パス設定
(3)rbenv動作確認
(4)最新版Rubyインストール
・インストール
・バージョン確認
・最新バージョンに設定
・Ruby動作確認

5.ツール類インストール
(1)gemsインストール
(2)PostgresSQLインストール
・postgresSQLインストール
・サービス追加確認
・postgresSQL設定
・postgresSQL起動
・プロジェクト用ユーザ作成
・作業用ユーザ追加
・pg_hda.confファイル編集(認証対応)
・postgres再起動

6.Railsインストール
(1)インストール
・railsインストール
・pgインストール
(2)動作確認
(3)試験用アプリ作成
・プロジェクト作成
・データベース設定ファイル編集
(4)Unicorn設定
・Gemfile編集
・unicornインストール
・テスト用アプリ設定
・routees.rbファイル編集
・unicorn設定ファイル編集
・unicornタスクファイル準備
・unicorn起動確認

7.NginXインストール
(1)CPU数確認
(2)NginXリポジトリインストール
(3)NginXインストール
・インストール
・バージョン確認
(4)SSL自己証明書発行
・秘密鍵作成
・秘密鍵からパスフレーズ削除
・公開鍵作成
・10年分の証明書準備
(5)NginX設定
・設定ファイル編集(worker_process最適化とバナーを隠す)
・設定ファイル編集(Unicornとの連携)
・NginXサービス再起動
・3000番ポート閉じておく
・nginx自動起動設定

8.自動起動設定
(1)unicorn自動起動スクリプト設定
・自動起動ファイル作成
・権限付与
(2)systemd設定
・ttyなしでsudo実行可能なように設定
・systemd設定ファイル作成
・サービス登録して再起動

◆参考サイト



1.ホスト名変更、IPアドレス変更
(1)IPアドレス設定
[root@testsrv ~]# nmcli c modify eth0 ipv4.addresses 192.168.1.XXX/24

(2)ホスト名設定
[root@testsrv ~]# hostnamectl set-hostname hostname.mydomain.com
[root@testsrv ~]# hostnamectl
   Static hostname: hostname.mydomain.com
         Icon name: computer-vm
           Chassis: vm
        Machine ID: e603b8620a4b4f868766c5190b421022
           Boot ID: 56194de530c0404288b0edac73fff0fc
    Virtualization: microsoft
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-327.10.1.el7.x86_64
      Architecture: x86-64

(3)IPV6無効化
[root@testsrv ~]# nmcli c mod eth0 ipv6.method ignore

(4)設定変更反映
[root@testsrv ~]# nmcli c down eth0; nmcli c up eth0

※一旦TeraTermの接続を切断し再接続する。

(5)変更内容確認
[root@websrv01 ~]# nmcli d show eth0
GENERAL.デバイス:                       eth0
GENERAL.タイプ:                         ethernet
GENERAL.ハードウェアアドレス:           00:15:5D:01:66:09
GENERAL.MTU:                            1500
GENERAL.状態:                           100 (接続済み)
GENERAL.接続:                           eth0
GENERAL.CON パス:                       /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.キャリア:              オン
IP4.アドレス[1]:                        192.168.1.XXX/24
IP4.ゲートウェイ:                       192.168.1.X
IP4.DNS[1]:                             192.168.1.X
IP6.ゲートウェイ:

[root@websrv01 ~]# ip addr show
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:15:5d:01:66:09 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.212/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever

(6)作業用ユーザ追加
・ユーザ追加
[root@websrv01 ~]# useradd user
[root@websrv01 ~]# passwd user
ユーザー user のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

・whell権限付与
[root@websrv01 ~]# usermod -G wheel user

※rootはログアウトしておく

(7)httpと関連ポート開放
[user@websrv01 www]$ sudo firewall-cmd --permanent --add-service=http
success
[user@websrv01 www]$ sudo firewall-cmd --permanent --add-service=https
success
[user@websrv01 www]$ sudo firewall-cmd --add-port=3000/tcp --zone=public --permanent
success
[user@websrv01 www]$ sudo firewall-cmd --reload
success
[user@websrv01 www]$ sudo firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh ssh-alt
  ports: 3000/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:


2.Gitインストール
(1)インストール
[user@websrv01 ~]$ sudo yum install git
[sudo] password for user:
読み込んだプラグイン:fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
~中略~
完了しました!
[user@websrv01 ~]$

(2)git初期設定
※Gitに登録しているユーザアカウントを設定する
[user@websrv01 ~]$ git version
git version 1.8.3.1
[user@websrv01 ~]$ git config --global user.name "GitHubUserName"
[user@websrv01 ~]$ git config --global user.email "GitHub@mailaddr"


3.メール送信サーバインストール(Gmail経由でメール送信できるようにする)
(1)postfixインストール確認
[user@websrv01 ~]$ yum list installed | grep postfix
postfix.x86_64                        2:2.10.1-6.el7                  @anaconda
[user@websrv01 ~]$

(2)必要ツールインストール
[user@websrv01 ~]$ sudo yum install postfix cyrus-sasl-plain mailx
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.yz.yamagata-u.ac.jp
 * epel: mirror.rise.ph
 * extras: ftp.yz.yamagata-u.ac.jp
 * updates: ftp.yz.yamagata-u.ac.jp
パッケージ 2:postfix-2.10.1-6.el7.x86_64 はインストール済みか最新バージョンです
パッケージ mailx-12.5-12.el7_0.x86_64 はインストール済みか最新バージョンです
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ cyrus-sasl-plain.x86_64 0:2.1.26-20.el7_2 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 Package                アーキテクチャー
                                     バージョン             リポジトリー   容量
================================================================================
インストール中:
 cyrus-sasl-plain       x86_64       2.1.26-20.el7_2        updates        38 k

トランザクションの要約
================================================================================
インストール  1 パッケージ

総ダウンロード容量: 38 k
インストール容量: 39 k
Is this ok [y/d/N]:y
~中略~
完了しました!
[user@websrv01 ~]$

(3)postfix設定
・設定ファイル編集

[user@websrv01 ~]$ sudo  cp /etc/postfix/main.cf{,.bak}
[user@websrv01 ~]$ sudo vi /etc/postfix/main.cf

※全て削除して下記のとおり追記

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_mechanism_filter = plain
smtp_sasl_password_maps = hash:/etc/postfix/google_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_use_tls = yes


・パスワードファイル作成
[user@websrv01 ~]$ sudo vi /etc/postfix/google_passwd

※下記の内容を追記して保存
[smtp.google.com]:587 hoge@gmail.com password

・設定反映
[user@websrv01 ~]$ sudo postmap /etc/postfix/google_passwd

・postfix再起動、サービス登録
[user@websrv01 ~]$ sudo systemctl start postfix
[user@websrv01 ~]$ sudo systemctl enable postfix
Created symlink from /etc/systemd/system/multi-user.target.wants/postfix.service to /usr/lib/systemd/system/postfix.service.

(4)送信テスト
[user@websrv01 ~]$ sudo echo "Hello! test mail!!" | mail -s "test mail" hoge@gmail.com

※テストメールがGmail宛に送信されていることを確認する。


4.Rubyインストール
(1)rbenvインストール
・rbenv本体インストール
[user@websrv01 ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
Cloning into '/home/user/.rbenv'...
remote: Counting objects: 2495, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 2495 (delta 1), reused 0 (delta 0), pack-reused 2488
Receiving objects: 100% (2495/2495), 454.52 KiB | 330.00 KiB/s, done.
Resolving deltas: 100% (1569/1569), done.
[user@websrv01 ~]$

・Installコマンド
[user@websrv01 ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
Cloning into '/home/user/.rbenv/plugins/ruby-build'...
remote: Counting objects: 5977, done.
remote: Total 5977 (delta 0), reused 0 (delta 0), pack-reused 5976
Receiving objects: 100% (5977/5977), 1.13 MiB | 594.00 KiB/s, done.
Resolving deltas: 100% (3399/3399), done.

・必要ライブラリインストール
[user@websrv01 ~]$ sudo yum -y install bzip2 gcc openssl-devel readline-devel zlib-devel ruby20-devel gcc-c++
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
~中略~
完了しました!
[user@websrv01 ~]$


(2)パス設定
[user@websrv01 ~]$ echo 'export PATH=$HOME/.rbenv/bin:$PATH' >> .bashrc
[user@websrv01 ~]$ echo 'eval "$(rbenv init -)"' >> .bashrc
[user@websrv01 ~]$ exec $SHELL -l

(3)rbenv動作確認
[user@websrv01 ~]$ rbenv -v
rbenv 1.0.0-19-g29b4da7
[user@websrv01 ~]$ rbenv install -l
Available versions:
  1.8.6-p383
~中略~
  topaz-dev
[user@websrv01 ~]$

(4)最新版Rubyインストール
・インストール
[user@websrv01 ~]$ rbenv install $(rbenv install -l | grep -v - | tail -1)
Downloading ruby-2.3.0.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.bz2
Installing ruby-2.3.0...
Installed ruby-2.3.0 to /root/.rbenv/versions/2.3.0

※かなり時間がかかるので注意

・バージョン確認
[user@websrv01 ~]$ rbenv versions
  2.3.0

・最新バージョンに設定
[user@websrv01 ~]$ rbenv global 2.3.0
[user@websrv01 ~]$ rbenv versions
* 2.3.0 (set by /root/.rbenv/version)

・Ruby動作確認
[user@websrv01 ~]$ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]



5.ツール類インストール
(1)gemsインストール
[user@websrv01 ~]$ gem install rbenv-rehash
Fetching: rbenv-rehash-0.3.gem (100%)
~中略~
1 gem installed
[user@websrv01 ~]$ rbenv rehash
[user@websrv01 ~]$ gem install bundler
Fetching: bundler-1.11.2.gem (100%)
~中略~
1 gem installed

(2)PostgresSQLインストール
・postgresSQLインストール
[user@websrv01 ~]$ wget http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-centos94-9.4-2.noarch.rpm
--2016-03-12 17:22:05--  http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-centos94-9.4-2.noarch.rpm
~中略~
100%[=================================>] 5,456       --.-K/s 時間 0s

2016-03-12 17:22:07 (416 MB/s) - `pgdg-centos94-9.4-2.noarch.rpm' へ保存完了 [5456/5456]
[user@websrv01 ~]$ sudo rpm -ivh pgdg-centos94-9.4-2.noarch.rpm
警告: pgdg-centos94-9.4-2.noarch.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 442df0f8: NOKEY
~中略~
   1:pgdg-centos94-9.4-2                                                (  ################################# [100%]
[user@websrv01 ~]$ sudo yum list postgresql94*
読み込んだプラグイン:fastestmirror
~中略~
postgresql94-test.x86_64                 9.4.6-1PGDG.rhel7           pgdg94
[user@websrv01 ~]$ sudo yum install postgresql94.x86_64 postgresql94-devel.x86_64 postgresql94-libs.x86_64 postgresql94-server.x86_64
読み込んだプラグイン:fastestmirror
~中略~
[user@websrv01 ~]$

・サービス追加確認
[user@websrv01 ~]$ sudo systemctl enable postgresql-9.4.service
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-9.4.service to /usr/lib/systemd/system/postgresql-9.4.service.
[user@websrv01 ~]$ sudo systemctl list-unit-files | grep postgres
postgresql-9.4.service                      enabled

・postgresSQL設定
[user@websrv01 ~]$ sudo su - postgres
-bash-4.2$ /usr/pgsql-9.4/bin/initdb --encoding=UTF-8 --locale=ja_JP.UTF-8
データベースシステム内のファイルの所有者は"postgres"ユーザでした。
このユーザがサーバプロセスを所有しなければなりません。
~中略~
pg_ctl -D /var/lib/pgsql/data -l logfile start
-bash-4.2$ exit
ログアウト

・postgresSQL起動
[user@websrv01 ~]$ sudo systemctl start postgresql-9.4.service

・プロジェクト用ユーザ作成(Railsアプリ用)
[user@websrv01 ~]$ sudo su - postgres
最終ログイン: 2016/02/28 (日) 16:38:55 JST日時 pts/1
-bash-4.2$ createuser -a -d -P myapp1
新しいロールのためのパスワード:   
もう一度入力してください:
-bash-4.2$ psql
postgres=# \password
新しいパスワード:    
もう一度入力してください:
postgres-# \du
                                         ロール一覧
 ロール名  |                                 属性
  | メンバー
-----------+--------------------------------------------------------------------
--+----------
 postgres  | スーパーユーザ, ロールを作成できる, DBを作成できる, レプリケーショ
 | {}
 railsproject | スーパーユーザ, ロールを作成できる, DBを作成できる
  | {}

・プロジェクト用データベース作成
postgres-# create database myapp1 owner myapp1;
CREATE DATABASE
postgres=# create database myapp1_development owner myapp1;
CREATE DATABASE
postgres=# \l
                                                データベース一覧
         名前          |  所有者   | エンコーディング |  照合順序   | Ctype(変換
演算子) |      アクセス権
-----------------------+-----------+------------------+-------------+-----------
--------+-----------------------
 postgres              | postgres  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-
8       |
 template0             | postgres  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-
8       | =c/postgres          +
                       |           |                  |             |
        | postgres=CTc/postgres
 template1             | postgres  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-
8       | =c/postgres          +
                       |           |                  |             |
        | postgres=CTc/postgres
 myapp1             | myapp1 | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-
8       |
 myapp1_development | myapp1 | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-
8       |
(5 行)

・作業用ユーザ追加
postgres=# create user user createdb password 'password' login;
CREATE ROLE
postgres=# \q

・pg_hda.confファイル編集(認証対応)

[user@websrv01 ~]$ sudo vi /var/lib/pgsql/data/pg_hba.conf

※下記のとおり編集
     83 # "local" is for Unix domain socket connections only
     84 local   all             all                                     trust
     85 local   all       all             md5 ←追記


・postgres再起動
[user@websrv01 ~]$ sudo systemctl restart postgresql-9.4.service



6.Railsインストール
(1)インストール
・railsインストール
[user@websrv01 ~]$ gem install rails
Fetching: rack-1.6.4.gem (100%)
~中略~
30 gems installed
[user@websrv01 ~]$ 

※かなり時間がかかる

・pgインストール
[user@websrv01 ~]$ gem install pg  -- --with-pg-include=/usr/pgsql-9.4/include/ --with-pg-lib=/usr/pgsql-9.4/lib/
Building native extensions with: '--with-pg-include=/usr/pgsql-9.4/include/
~中略~
1 gem installed
[user@websrv01 ~]$

(2)動作確認
[user@websrv01 ~]$ rails -v
Rails 4.2.5.1

(3)試験用アプリ作成
・プロジェクト作成
[user@websrv01 ~]$ rails new myapp1 -d postgresql
      create
~中略~
* bin/rake: spring inserted
* bin/rails: spring inserted
[user@websrv01 ~]$ cd myapp1

・データベース設定ファイル編集
[user@websrv01 myapp1]$ sudo vi config/database.yml

※下記のとおり編集
     17 default: &default
     18   adapter: postgresql
     19   encoding: utf8 ←utf8に編集
     20   # For details on connection pooling, see rails configuration guide
     21   # http://guides.rubyonrails.org/configuring.html#database-pooling
     22   pool: 5

     81 production:
     82   <<: *default
     83   database: myapp1 ←変更
     84   username: myapp1 ←変更
     85   password: password ←変更


(4)Unicorn設定
・Gemfile編集

[user@websrv01 myapp1]$ vi Gemfile

※下記のとおり編集
     14 # See https://github.com/rails/execjs#readme for more supported runtimes
     15  gem 'therubyracer', platforms: :ruby ←コメントアウトを解除

     26 # Use ActiveModel has_secure_password
     27  gem 'bcrypt', '~> 3.1.7' ←コメントアウトを解除
     28
     29 # Use Unicorn as the app server
     30  gem 'unicorn' ←コメントアウトを解除

     35 group :development, :test do
     36   # Call 'byebug' anywhere in the code to stop execution and get a debug        ger console
     37   gem 'byebug'
     38   gem 'web-console', '~> 2.0' ←追記
     39   gem 'spring' ←追記
     40 end

※41行目以降は削除

・unicornインストール
[user@websrv01 myapp1]$ bundle install
Fetching gem metadata from https://rubygems.org/..
~中略~
Use `bundle show [gemname]` to see where a bundled gem is installed.
[user@websrv01 myapp1]$

・テスト用アプリ設定
[user@websrv01 myapp1]$ bundle exec rails generate scaffold board title:string text:string
Running via Spring preloader in process 8290
~中略~
      create    app/assets/stylesheets/scaffolds.scss
[user@websrv01 myapp1]$ rake db:migrate
== 20160505071536 CreateBoards: migrating =====================================
-- create_table(:boards)
   -> 0.1610s
== 20160505071536 CreateBoards: migrated (0.1612s) ============================

・routees.rbファイル編集
[user@websrv01 myapp1]$ vi config/routes.rb

※下記のとおり編集
Rails.application.routes.draw do
  resources :boards
  root "boards#index"
end


・unicorn設定ファイル編集
[user@websrv01 myapp1]$ vi config/unicorn.rb

※下記内容で新規作成
application = "myapp1"

worker_processes = 2
working_directory "/home/user/#{application}"

listen "/home/user/myapp1/tmp/sockets/unicorn_#{application}.sock"
pid "/home/user/myapp1/tmp/pids/unicorn_#{application}.pid"

stderr_path "log/unicorn.stderr.log"
stdout_path "log/unicorn.stdout.log"

preload_app true

・unicornタスクファイル準備
[user@websrv01 myapp1]$ bundle exec rails generate task unicorn
Running via Spring preloader in process 8471
      create  lib/tasks/unicorn.rake
[user@websrv01 myapp1]$ vi lib/tasks/unicorn.rake

※下記内容で新規作成
namespace :unicorn do
  ##
  # Tasks
  ##
  desc "Start unicorn for development env."
  task(:start) {
    config = Rails.root.join('config', 'unicorn.rb')
    sh "bundle exec unicorn_rails -c #{config} -E development -D"
  }

  desc "Stop unicorn"
  task(:stop) { unicorn_signal :QUIT }

  desc "Restart unicorn with USR2"
  task(:restart) { unicorn_signal :USR2 }

  desc "Increment number of worker processes"
  task(:increment) { unicorn_signal :TTIN }

  desc "Decrement number of worker processes"
  task(:decrement) { unicorn_signal :TTOU }

  desc "Unicorn pstree (depends on pstree command)"
  task(:pstree) do
    sh "pstree '#{unicorn_pid}'"
  end

  def unicorn_signal signal
    Process.kill signal, unicorn_pid
  end

  def unicorn_pid
    begin
      File.read("/home/user/myapp1/tmp/pids/unicorn_myapp1.pid").to_i
    rescue Errno::ENOENT
      raise "Unicorn doesn't seem to be running"
    end
  end
end

・unicorn起動確認
[user@websrv01 myapp1]$ bundle exec rake unicorn:start
bundle exec unicorn_rails -c /home/user/myapp1i/config/unicorn.rb -E development -D
[user@websrv01 myapp1]$ bundle exec rake unicorn:stop


7.NginXインストール
(1)CPU数確認(Nginx.confのworkerProcessで使用する)
[user@websrv01 myapp1]$ sudo grep processor /proc/cpuinfo | wc -l
1

(2)NginXリポジトリインストール
[user@websrv01 myapp1]$ sudo yum install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
読み込んだプラグイン:fastestmirror
~中略~
完了しました!
[user@websrv01 myapp1]$

(3)NginXインストール
・インストール
[user@websrv01 myapp1]$ sudo yum install --enablerepo=nginx nginx
読み込んだプラグイン:fastestmirror
nginx                                                    | 2.9 kB     00:00
~中略~
完了しました!
[user@websrv01 myapp1]$


・バージョン確認
[user@websrv01 myapp1]$ sudo nginx -v
nginx version: nginx/1.10.0


(4)SSL自己証明書発行
・秘密鍵作成
[user@websrv01 ~]$ cd /etc/nginx/
[user@websrv01 nginx]$ sudo mkdir ssl
[user@websrv01 nginx]$ cd ssl
[user@websrv01 ssl]$ sudo  openssl genrsa -aes128 -out server.key 2048
Generating RSA private key, 2048 bit long modulus
~中略~
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
[user@websrv01 ssl]$

・秘密鍵からパスフレーズ削除
[user@websrv01 ssl]$ sudo openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:
writing RSA key

・公開鍵作成
[user@websrv01 ssl]$ sudo openssl req -new -days 3650 -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:websrv01@hoge.com
Email Address []:admin@hoge.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: 
An optional company name []: 
[user@websrv01 ssl]$


・10年分の証明書準備
[user@websrv01 ssl]$ sudo openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
Signature ok
~中略~
Getting Private key

(5)NginX設定
・設定ファイル編集(worker_process最適化とバナーを隠す)


[user@websrv01 ssl]$ sudo vi /etc/nginx/nginx.conf

※下記のとおり編集
      2 user  user;               ←作業用ユーザに変更
      3 worker_processes  1; ←CPU数にする

     14 http {
     15     server_tokens off; ←追記
     16     include       /etc/nginx/mime.types;
     17     default_type  application/octet-stream;


・設定ファイル編集(myapp1ディレクトリ用)
[user@websrv01 ssl]$ sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/local.conf
[user@websrv01 ssl]$ sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bk
[user@websrv01 ssl]$ sudo vi /etc/nginx/conf.d/local.conf

※下記の通り編集
upstream unicorn-unix-domain-socket {
    server unix:/home/user/myapp1/tmp/sockets/unicorn_myapp1.sock fail_timeout=0;
}

server {
  listen 80;
  return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name localhost;
    access_log  /var/log/nginx/ssl_access.log;
    error_log /var/log/nginx/ssl_error.log;

    ssl on;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    ssl_session_timeout 5m;
    ssl_protocols SSLv2 SSLv3 TLSv1;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    client_max_body_size 100m;
    error_page 404 /404.html;
    error_page 500 502 503 504 /500.html;

    location / {
        root /home/user/myapp1;
        access_log /var/log/nginx/myapp1_access.log;
        error_log /var/log/nginx/myapp1_error.log;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://unicorn-unix-domain-socket;
    }
}

・NginXサービス再起動
[user@websrv01 ~]$ cd /home/user
[user@websrv01 www]$ sudo service nginx restart
Redirecting to /bin/systemctl restart  nginx.service

・3000番ポート閉じておく
[user@websrv01 ~]$ sudo firewall-cmd --permanent --remove-port=3000/tcp
success
[user@websrv01 ~]$ sudo firewall-cmd --reload
success
[user@websrv01 ~]$ sudo firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh ssh-alt
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:


※下記にアクセスしてhttpsにリダイレクトされてサンプルページが表示されるか確認
http://192.168.1.XXX

・nginx自動起動設定
[user@websrv01 ~]$ sudo systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[user@websrv01 ~]$ sudo systemctl list-unit-files
~中略~
nginx-debug.service                         disabled
nginx.service                               enabled
~以下略~


8.自動起動設定
(1)unicorn自動起動スクリプト設定
・自動起動ファイル作成

[user@websrv01 ~]$ sudo vi /etc/init.d/unicorn

※下記のとおり新規作成
#!/bin/sh
# chkconfig: 345 90 20
# description: Rails application sample
# processname: unicorn_sample
 
RAILS_ENV=production
SERVICE=myapp1
USER=user
 
RAILS_ROOT_DIR="/home/user/myapp1"
 
PID=${RAILS_ROOT_DIR}/tmp/pids/unicorn.pid
UNICORN_CONF=${RAILS_ROOT_DIR}/config/unicorn.rb
 
UNICORN_ALIVE=`ps aux|grep '${UNICORN_CONF}'|grep -v grep|wc -l`
 
start()
{
  if [ $UNICORN_ALIVE = 0 ]; then
    rm -f $PID
  fi
  if [ -e ${PID} ]; then
    echo "${SERVICE} already started"
    exit 1
  fi
  echo "start ${SERVICE}"
  sudo su -l ${USER} -c "cd ${RAILS_ROOT_DIR} && bundle exec unicorn_rails -c ${UNICORN_CONF} -D"
}
 
stop()
{
  if [ ! -e ${PID} ]; then
    echo "${SERVICE} not started"
    exit 1
  fi
  echo "stop ${SERVICE}"
  kill -QUIT `cat ${PID}`
}
 
force_stop()
{
  if [ ! -e ${PID} ]; then
    echo "${SERVICE} not started"
    exit 1
  fi
  echo "stop ${SERVICE}"
  kill -INT `cat ${PID}`
}
 
reload()
{
  if [ ! -e ${PID} ]; then
    echo "${SERVICE} not started"
    start
    exit 0
  fi
  echo "reload ${SERVICE}"
  kill -USR2 `cat ${PID}`
}
 
restart()
{
  if [ -e ${PID} ]; then
    stop
    sleep 3
  fi
  start
}
 
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  force-stop)
    force_stop
    ;;
  reload)
    reload
    ;;
  restart)
    restart
    ;;
  *)
    echo "Syntax Error: release [start|stop|force-stop|reload|restart]"
    ;;
esac

・権限付与
[user@websrv01 ~]$ sudo chmod 755 /etc/init.d/unicorn
[user@websrv01 ~]$ sudo chown root /etc/init.d/unicorn
[user@websrv01 ~]$ sudo chgrp root /etc/init.d/unicorn

(2)systemd設定
・ttyなしでsudo実行可能なように設定
[user@websrv01 ~]$ sudo visudo


※requirettyをコメントアウト
#
#Defaults    requiretty


・systemd設定ファイル作成
[user@websrv01 ~]$ sudo vi /usr/lib/systemd/system/unicorn.service

※下記の内容で新規作成
[Unit]
Description=Unicorn Server

[Service]
WorkingDirectory=/home/user/myapp1/
Environment=RAILS_ENV=production
SyslogIdentifier=unicorn
PIDFile=/home/user/myapp1/tmp/pids/unicorn_myapp1.pid

ExecStart=/etc/init.d/unicorn start
ExecStop=/usr/bin/kill -QUIT $MAINPID
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

・サービス登録して再起動
[user@websrv01 ~]$ sudo chmod 755 /usr/lib/systemd/system/unicorn.service
[user@websrv01 ~]$ ls -al /usr/lib/systemd/system/unicorn.service
-rwxr-xr-x 1 root root 404  5月 22 14:54 /usr/lib/systemd/system/unicorn.service
[user@websrv01 ~]$ sudo systemctl start unicorn.service
Warning: unicorn.service changed on disk. Run 'systemctl daemon-reload' to reload units.
[user@websrv01 ~]$ sudo systemctl daemon-reload
[user@websrv01 ~]$ sudo systemctl enable unicorn.service
[user@websrv01 ~]$ sudo reboot


※再起動後に下記にアクセスしてhttpsにリダイレクトされてサンプルページが表示されるか確認
http://192.168.1.XXX

コメント

このブログの人気の投稿

証券外務員1種勉強(計算式暗記用メモ)

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

マクロ経済学(IS-LM分析)