RHEL7でRailsサーバを構築した サーバの基本設定
こちらは、
RHEL7でRailsアプリのサーバを構築した - takapiのブログ
の サーバの基本設定
に関する記事です。
OS(RHEL7)のアップデート
まずは、yum コマンドでOS(RHEL7)を更新します。
$ sudo yum -y update
ロケールの確認・変更
RHEL7からは、ロケール設定の確認・変更は 'localectl' コマンドを使用するようです。
こちらのサイトを参考に確認・変更します。 http://zero-config.com/centos/changelocale-002.html
現在の状態を確認します。
$ localectl status System Locale: LANG=ja_JP.utf8 VC Keymap: us X11 Layout: us
EC2で設定したRHEL7の System Locale
はデフォルトで日本語になっておりました。
VC Keymap、 X11 Layout
については、SSHからの接続のみなので無視して良さそうです。
ちなみに、 System Locale
の修正は以下のように行います。
sudo localectl set-locale LANG=ja_JP.utf8 # ja_JP.utf8で設定を行う場合
日付の変更
RHEL7からは、システムの日付および時間に関する情報の設定は 'timedatectl' コマンドを使用するようです。
こちらのサイトを参考に確認・変更します。
第2章 日付と時刻の設定 - Red Hat Customer Portal
現在の状態を確認します。
$ timedatectl status Local time: 土 2017-06-24 01:24:37 EDT Universal time: 土 2017-06-24 05:24:37 UTC RTC time: 土 2017-06-24 05:24:37 Time zone: America/New_York (EDT, -0400) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: yes Last DST change: DST began at 日 2017-03-12 01:59:59 EST 日 2017-03-12 03:00:00 EDT Next DST change: DST ends (the clock jumps one hour backwards) at 日 2017-11-05 01:59:59 EDT 日 2017-11-05 01:00:00 EST
どうやら Time zone
が America/New_York
になっているようなので、タイムゾーンの変更します。
$ sudo timedatectl set-timezone Asia/Tokyo
もう一度、 timedatectl status
を実行し Time zone
が Asia/Tokyo
になっていることを確認します。
$ timedatectl status Local time: 土 2017-06-24 14:29:26 JST Universal time: 土 2017-06-24 05:29:26 UTC RTC time: 土 2017-06-24 05:29:26 Time zone: Asia/Tokyo (JST, +0900) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: n/a
SElinuxの無効化
EC2のRHELはデフォルトでSElinuxが有効になっているようですが、現在はSElinux力がないので、実力がつくその日まで無効にしておきます。
こちらのサイトを参考に確認・変更します。
5.4. SELinux の有効化および無効化 - Red Hat Customer Portal
以下の設定ファイルを修正します。
/etc/selinux/config
の以下の箇所を disabled
に修正します。
SELINUX=enforcing ↓ SELINUX=disabled
設定変更後は、OSの再起動が必要なので再起動します。
以上で、サーバの基本設定は完了です。
RHEL7でRailsアプリのサーバを構築した【Railsアプリケーション・Unicorn のインストール・設定】
こちらは、
RHEL7でRailsアプリのサーバを構築した - takapiのブログ
の Railsアプリケーション・Unicorn のインストール・設定
に関する記事です。
Railsアプリケーションは完成している前提で進めます。
Railsアプリケーションをクローンする
github等からRailsアプリケーションをクローンします。
例: $ git clone --depth 1 https://github.com/takapi86/my-app.git
bundler のインストール
RubyのGem管理ツールである bundler
をインストールします。
gem install bundler
Node.jsのインストール
必要に応じて設定します。 必須ではないので、Node.jsを使用しない場合はスキップします。
$ sudo yum remove -y nodejs npm # 最新のバージョンをインストールしたいので、すでにインストールされている場合は削除します。 $ sudo rpm -i https://rpm.nodesource.com/pub_6.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm $ sudo yum -y install nodejs
sqliteのインストール
必要に応じて設定します。 必須ではないので、 sqlite を使用しない場合はスキップします。
$ sudo yum -y install sqlite $ sudo yum -y install sqlite-devel
Railsアプリケーションのproduction設定
アセットのプリコンパイル
$ bundle exec rake assets:precompile RAILS_ENV=production
SECRET_KEY_BASEの設定
Railsでは config/secrets.yml にCookieのなりすまし対策のため、SECRET_KEY_BASE をCookie暗号化/復号化をしているようです。
production環境の場合、SECRET_KEY_BASE を環境変数に設定してあげる必要があります。
$ bundle exec rake secret b1cb4a8933d20deaafb19e152217b7a53f784912ceb51dce6507e7336e671eef0136438d81604ca4c4c39cffc2ee93ba472b2d6cc597c0f4f3d39c05343dede1
動作確認のため、一時的にこの値を環境変数にセットします。
export SECRET_KEY_BASE=b1cb4a8933d20deaafb19e152217b7a53f784912ceb51dce6507e7336e671eef0136438d81604ca4c4c39cffc2ee93ba472b2d6cc597c0f4f3d39c05343dede1
各Gemのインストール
bunlde install しGemのインストールします。
$ cd ~/my-app/ $ bundle install
DB設定
$ vi config/database.yml
production: adapter: mysql2 database: [DB名を入力します] pool: 5 username: [DBのユーザを入力します] password: [DBのパスワードを入力します] host: localhost # 今回はDBサーバも同じサーバなので、localhostをしています。
DBマイグレーション
以下のコマンドで、アプリケーションのDB、テーブル、データを作成します。
RAILS_ENV=production bundle exec rake db:create RAILS_ENV=production bundle exec rake db:migrate RAILS_ENV=production bundle exec rake db:seed
Railsアプリケーションの動作確認
最終的に sustemdで起動・停止できるようにしますが、ひとまずunicornコマンドを実行し、 production
モードで起動できるか確認します。
unicornはデフォルトでは port8080 であがるので、8080宛にアクセスして動作確認を行います。
unicorn -E production
ここまで確認ができればRailsアプリケーション側の設定は完了です。
systemd の設定
設定したRailsアプリケーションをsystemdで起動・停止できるようにします。
config/unicorn.rb を編集
systemdからは unicornの設定ファイル config/unicorn.rb
の内容で起動・停止できるようにします。
必要に応じて、以下に設定を追加・削除するとよいでしょう。
# config/unicorn.rb app_path = '/home/ec2-user/my-app' worker_processes 2 listen "#{app_path}/tmp/sockets/unicorn.sock", :backlog => 64 listen 8080, :tcp_nopush => true pid "#{app_path}/tmp/pids/unicorn.pid" rails_root = File.expand_path('../../', __FILE__) ENV['BUNDLE_GEMFILE'] = rails_root + "/Gemfile" stderr_path "#{app_path}/log/unicorn.stderr.log" stdout_path "#{app_path}/log/unicorn.stdout.log" before_exec do |server| ENV['BUNDLE_GEMFILE'] = "#{ENV['RAILS_ROOT']}Gemfile" end
上記の設定でサーバがあがるかひとまず unicorn コマンドで確認してみます。
bundle exec unicorn -c config/unicorn.rb -E production
systemdの設定
/etc/systemd/system/unicorn.service
[Unit] Description = unicorn Rack application server Wants=mysqld.service After=mysqld.service [Service] Environment=RAILS_ENV=production Environment=SECRET_KEY_BASE=[SECRET_KEYを設定します。] PIDFile=/home/ec2-user/my-app/tmp/pids/unicorn.pid ExecStart=/home/ec2-user/.rbenv/shims/unicorn -c "/home/ec2-user/my-app/config/unicorn.rb" "/home/ec2-user/my-app/config.ru" -E production [Install] WantedBy = multi-user.target
自動起動の設定
$ sudo systemctl enable unicorn.service
以下のコマンドで登録できているか確認します。
$ sudo systemctl list-unit-files --type=service | grep unicorn unicorn.service enabled
起動できるか確認します。
$ sudo systemctl start unicorn.service
NginxからUnicornを呼び出す
/etc/nginx/conf.d/
以下のような設定ファイルを追加し、リバースプロキシできるようにします。
必要に応じて、以下に設定を追加・削除するとよいでしょう。
server { listen 80 default_server; server_name www.example.com; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; root /home/ec2-user/my-app/public; client_max_body_size 100m; error_page 404 /404.html; error_page 500 502 503 504 /500.html; try_files $uri/index.html $uri @unicorn; location @unicorn { 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://localhost:8080; } }
nginxを再起動します。
$ sudo systemctl restart nginx
ページにアクセスして確認する
ブラウザなどでサーバのURLへアクセスし、システムのページなどが表示されていればOKです。
表示されない場合は、ネットワーク周りやファイアウォールなどの設定を見直すとよいでしょう。
RHEL7でRailsアプリのサーバを構築した【Nginxのインストール・設定】
こちらは、
RHEL7でRailsサーバを構築した - takapi86のブログ
の Nginxのインストール・設定
に関する記事です。
Nginxのインストール・設定
Stable version(nginx-1.12.0)をインストールしていきます。
Nginxのyumリポジトリの追加
$ sudo rpm -i http://nginx.org/packages/rhel/7/noarch/RPMS/nginx-release-rhel-7-0.el7.ngx.noarch.rpm
Nginxのインストール
$ sudo yum -y install nginx
自動起動の設定
sudo systemctl enable nginx.service
nginx を起動する
$ sudo systemctl start nginx.service
デフォルトページにアクセスして確認する
サーバのURLへアクセスし、Nginxのデフォルトページが表示されていればOKです。
表示されない場合は、ネットワーク周りやファイアウォールなどの設定を見直すとよいでしょう。
以上で、nginxの設定は完了です。
RHEL7でRailsアプリのサーバを構築した
AWS EC2(RHEL7)でRailsサーバを構築したので、手順を備忘録として残しておきます。
OSはAmazon Linuxでも良かったのですが、Systemdなど、RHEL7からの機能に慣れたいという思いからRHEL7を使っています。
AWSの設定(インスタンスの立ち上げ方、セキュリティグループ、Elastic IPの設定など)はここでは取り上げません。
構成
- OS Red Hat Enterprise Linux Server release 7.3
- Webサーバ nginx 1.12.0
- APサーバ unicorn 5.3.0 (ruby 2.4.1, Rails 5.1.1)
- DB MySQL 5.7
すべて1サーバにまとめています。
やること
1.サーバの基本設定
2.Nginxのインストール・設定
3.MySQLのインストール・設定
4.Rubyのインストール・設定
5.Railsアプリケーション・Unicorn のインストール・設定
以上、必要に応じてログの設定やセキュリティ・バックアップの設定等を追加していくと良いでしょう。
RHEL7でRailsアプリのサーバを構築した【MySQLのインストール・設定】
こちらは、
RHEL7でRailsアプリのサーバを構築した - takapi86のブログ
の MySQLのインストール・設定
に関する記事です。
EC2のRHEL7にMySQLのインストール・設定を行います。
MariaDBを削除する
EC2のRHELはデフォルトでMySQLと互換のあるMariaDBが入っています。 どうやら、どちらもインストールされていると競合するという噂があるので、削除してしまいます。
$ sudo yum -y remove mariadb-libs $ sudo rm -rf /var/lib/mysql/
MySQLのyumリポジトリの追加
$ sudo yum -y localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
rpmについては、以下のURLから該当するものを選択しました。 https://dev.mysql.com/downloads/repo/yum/
MySQLのインストール
以下のコマンドで、 mysql, mysql-devel をインストールします。
$ sudo yum -y install mysql-community-server mysql-devel
バージョンを確認します。
$ mysqld --version mysqld Ver 5.7.18 for Linux on x86_64 (MySQL Community Server (GPL))
$ sudo systemctl enable mysqld.service
MySQLを起動します。
$ sudo systemctl start mysqld.service
MySQLのrootユーザーの初期パスワードを確認し、メモしておきます。
MySQL5.7からは、rootの初期パスワードは /var/log/mysqld.log
に書き込まれます。
$ less /var/log/mysqld.log
このようにパスワードが含まれています。この場合だと GI(8KOU;xZvi
がパスワードです。
[Note] A temporary password is generated for root@localhost: GI(8KOU;xZvi
セキュリティの初期設定
mysql_secure_installation
を実行しセキュリティに関する初期設定を行います。
パスワードは先ほどメモした /var/log/mysqld.log
に書かれていたものを使用します。
設定する内容については、以下のサイトを参考にするとよいでしょう。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.4.5 mysql_secure_installation — MySQL インストールのセキュリティー改善
$ mysql_secure_installation
文字コードの設定
/etc/my.cnf
に以下の設定を追加することで、デフォルトの文字コードをutf8に変更します。
character-set-server = utf8
設定後はMySQLを再起動します。
$ sudo systemctl restart mysqld.service
ユーザを作成する
rootでMySQLにログインします。
$ mysql -u root -p
今回は、外部からは参照しないので、以下の設定を追加します。
mysql> CREATE USER 'ユーザ名'@'localhost' IDENTIFIED WITH mysql_native_password BY 'パスワード'; mysql> GRANT ALL PRIVILEGES ON DB名.* TO `ユーザ名`@`localhost`;
以上で、MySQLの設定は完了です。
この手順は、以下のサイトを参考に作成しました。
RHEL7でRailsアプリのサーバを構築した【Rubyのインストール・設定】
こちらは、
RHEL7でRailsアプリのサーバを構築した - takapiのブログ
の Rubyのインストール・設定
に関する記事です。
インストール済みの Ruby の削除
EC2のRHEL7では、元々インストールはされていませんでしたが、環境によってはデフォルトでRubyが入っている場合があります。 ほとんどの場合は、古いRubyが入っているので、一旦削除してしまいましょう。
$ sudo yum -y remove ruby
gitをインストールする
後ほど、 rbenv
,ruby-build
といったツールをダウンロードするのに必要です。
$ sudo yum -y install git
rbenvをインストールする
Rubyのバージョンの切り替えなどが簡単にできるツールであるrbenvをインストールします。 以下のサイトを参考にインストールします。
https://github.com/rbenv/rbenv
クローンします。
$ git clone --depth 1 https://github.com/rbenv/rbenv.git
.bash_profile に PATHを通します。
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
で何をしているかは、
こちらを参考にするとよいでしょう。
一度、ログアウトし直すか、以下のコマンドで ~/.bash_profile
を読みなおします。
$ source ~/.bash_profile
rbenv
コマンドが使えるか確認します。
$ rbenv rbenv 1.1.1-2-g615f844 Usage: rbenv <command> [<args>] Some useful rbenv commands are: commands List all available rbenv commands local Set or show the local application-specific Ruby version global Set or show the global Ruby version shell Set or show the shell-specific Ruby version rehash Rehash rbenv shims (run this after installing executables) version Show the current Ruby version and its origin versions List all Ruby versions available to rbenv which Display the full path to an executable whence List all Ruby versions that contain the given executable
ruby-buildをインストールする
rbenv の プラグインである ruby-build をインストールします。 実際にRubyをコンパイルしてインストールしてくれるものです。
クローンします。
$ git clone --depth 1 https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
もう一度、rbenv
コマンドを実行します。
$ rbenv rbenv 1.1.1-2-g615f844 Usage: rbenv <command> [<args>] Some useful rbenv commands are: commands List all available rbenv commands local Set or show the local application-specific Ruby version global Set or show the global Ruby version shell Set or show the shell-specific Ruby version install Install a Ruby version using ruby-build uninstall Uninstall a specific Ruby version rehash Rehash rbenv shims (run this after installing executables) version Show the current Ruby version and its origin versions List all Ruby versions available to rbenv which Display the full path to an executable whence List all Ruby versions that contain the given executable
ruby-build をクローンする前になかった install
,uninstall
が表示されていれば成功です。
Ruby2.4.1をインストール
EC2のRHEL7では、Rubyをコンパイルに以下のライブラリが必要なのでインストールしておきます。
$ sudo yum install -y gcc bzip2 openssl-devel readline-devel zlib-devel
rbenv install 2.4.1
スペックによりますが、結構時間がかかるので待ちます。
インストールしたRuby2.4.1を使うので、以下のコマンドで使えるようにします。
rbenv global 2.4.1
Rubyがインストールされているか確認する。
ruby -v ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
以上でRuby のインストールは完了です。
自宅のubuntu-16.04マシンのシェルをfishに変更した
自宅のubuntu-16.04マシンのシェルをfishに変更したので手順をメモしておきます。
また、pecoとの連携もしていきます。
fish をインストール
sudo apt-add-repository ppa:fish-shell/release-2 sudo apt-get update sudo apt-get install fish
apt-add-repository
コマンドがない場合は以下の手順で導入します。
sudo apt-get install apt-file sudo apt-file update sudo apt-get install software-properties-common
fish をデフォルトシェルにする
追記:
fish はデフォルトシェルにしないほうが良いんじゃないかなー。というのをこちらのエントリーに書きました。 良ければ見てください。 fish をデフォルトシェルに設定しない - takapiのブログ
chsh -s /usr/bin/fish
端末を開き直し、 echo $SHELL
コマンドで確認します。
echo $SHELL /usr/bin/zsh
あれ・・・
GUI環境の場合は一度ログアウトしてあげる必要がありそうです。
echo $SHELL /usr/bin/fish
fishになっていることを確認しました。
fish の基本設定
config ディレクトリを作成します。
mkdir -p ~/.config/fish
初期設定ファイルを作成します。
vim ~/.config/fish/config.fish
~/.config/fish/config.fish
へ以下のようにPATHを追加します。
set -g -x PATH /usr/local/bin $PATH
oh-my-fish をインストール
git がない場合はインストールしておきます
sudo apt-get install git
以下のcurlコマンドで oh-my-fish をインストールします。 ※直接シェルスクリプトを実行するので、中身は必ず確認しておいてください。
curl -L http://get.oh-my.fish | fish
以下のコマンドを打つと、ブラウザが立ち上がり、 fishの設定をGUIで変更できるようになります。
fish_config
私は、 color
をfish default
に prompt
をAcidhub
にしました。
peco をインストール
cd ~ wget https://github.com/peco/peco/releases/download/v0.5.1/peco_linux_amd64.tar.gz tar zxvf peco_linux_amd64.tar.gz sudo cp peco_linux_amd64/peco /usr/local/bin/ sudo chmod 777 /usr/local/bin/peco
peco と fish の連携
こちらの記事を参考にしました。 https://www.key-p.com/blog/staff/archives/105041
pecoプラグインをインストールします。
omf install peco
~/.config/fish/config.fish
に以下を追加します。
#peco function fish_user_key_bindings bind \cr peco_select_history end
コンソールを開き直すなどし、設定ファイルを読み直したあとに Ctrl + r を押すといい感じに履歴とpecoが連携してくれます。
以上で、fish、pecoのインストールは完了です。
参考サイト
fish インストールに関して https://hackercodex.com/guide/install-fish-shell-mac-ubuntu/
pecoのインストールに関して http://qiita.com/popstaplerate/items/dd983267a7075250035b
peco と fish の連携に関して https://www.key-p.com/blog/staff/archives/105041