NginX+unicorn+Ruby on RailsでWebサーバ構築
昔はApache全盛だったみたいだけど、最近はNginxも流行っているということで
3.メール送信サーバインストール(Gmail経由でメール送信できるようにする)
(4)SSL自己証明書発行
(2)ホスト名設定
(3)IPV6無効化
(4)設定変更反映
※一旦TeraTermの接続を切断し再接続する。
(5)変更内容確認
・whell権限付与
2.Gitインストール
(2)必要ツールインストール
・パスワードファイル作成
※下記の内容を追記して保存
[smtp.google.com]:587 hoge@gmail.com password
・設定反映
・postfix再起動、サービス登録
4.Rubyインストール
(1)rbenvインストール
・rbenv本体インストール
・Installコマンド
(3)rbenv動作確認
5.ツール類インストール
(1)gemsインストール
6.Railsインストール
(1)インストール
・railsインストール
※かなり時間がかかる
・pgインストール
(4)Unicorn設定
・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行目以降は削除
・routees.rbファイル編集
※下記内容で新規作成
・unicorn起動確認
7.NginXインストール
(1)CPU数確認(Nginx.confのworkerProcessで使用する)
(2)NginXリポジトリインストール
(4)SSL自己証明書発行
・秘密鍵作成
・秘密鍵からパスフレーズ削除
・設定ファイル編集(myapp1ディレクトリ用)
※下記の通り編集
・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アドレス設定
(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の接続を切断し再接続する。
[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
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 ~]$
[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
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
http://192.168.1.XXX
コメント