S3 にログを保存
目的
- サーバが落ちたとき、アクセスログなどを損失させない(今回1時間に1回だから少しは仕方ないと判断しています)
- 後々解析でもできるようにする
- イメージで起動させた後から、ログを
S3
に保存し始めるため、Auto Scale
でも有効になる - (Rails の logger で出力されるものを収集)
事前準備
S3
のバケットS3
アクセス用ユーザの作成
セットアップ
td-agent のインストール
$ curl -L http://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh
conf 編集
$ sudo mkdir /var/log/td-agent/s3 $ sudo vi /etc/td-agent/td-agent.conf <source> type tail path [保存したいログ] pos_file /var/log/td-agent/buffer/sample_application.log.pos format multiline format_firstline /^.,/ format1 /^., \[(?<time>[^\.]+).+\][ ]+(?<level>[^ ]+) -- :(?<message>.*)$/ time_format %Y-%m-%dT%H:%M:%S tag sample_application.access </source> <match sample_application.access> type s3 output_tag false output_time false include_time_key true include_tag_key true time_format %Y-%m-%d %H:%M:%S aws_key_id [AWS のアクセスキー] aws_sec_key [AWS のシークレットキー] s3_bucket [保存先バケット名] s3_region [保存先リージョン名] path [ログディレクトリ]/ buffer_path /var/log/td-agent/s3 time_slice_format "#{ENV['HOSTNAME']}/%Y%m%d/sample_application.log" time_slice_wait 10m flush_interval 1h </match>
起動
$ sudo /etc/init.d/td-agent start これも設定 $ sudo chkconfig td-agent on
プライベート認証局でアクセス制限
目的
- アクセスできるユーザ・サーバを絞る
構築方法
sudo yum -y install mod_ssl openssl
事前準備
CSR情報
■Country JP ■State or Province Name (full name) []: Tokyo ■Locality Name (eg, city) [Default City]: Shibuya-ku ■Organization [会社名] ■Organizational Unit Technical dept. ■Common Name [ドメイン名]
各パスフレーズの用意
パスワード準備する時は、mkpasswd コマンドを使うと簡単にランダムパスワード作成できます インストール:sudo yum -y expect コマンド例:mkpasswd -l 16 (-l オプションで長さを指定できます)
プライベートCA
CAの編集
$ sudo cp -p /etc/pki/tls/misc/CA /etc/pki/tls/misc/CA.org $ sudo vi /etc/pki/tls/misc/CA ---------- # 有効期限を伸ばす。以下の値を3650(10年)へ DAYS="-days 365" CADAYS="-days 1095" ↓↓↓↓↓↓ DAYS="-days 3650" CADAYS="-days 3650"
openssl.cnfの編集
$ sudo cp -p /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf.org $ sudo vi /etc/pki/tls/openssl.cnf -------------------- [ CA_default ] default_days = 3650 # how long to certify for ←上記で対応した内容 [ req_distinguished_name ] # CSRのデフォルト情報を設定しておく(上述のCSR情報) countryName_default = JP stateOrProvinceName_default = Tokyo localityName_default = Shibuya-ku 0.organizationName_default = [会社名] organizationalUnitName_default = Technical dept.
構築
$ sudo cp -p /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl-ca.cnf $ sudo vi /etc/pki/tls/openssl-ca.cnf ----- [ usr_cert ] basicConstraints=CA:TRUE # デフォルトでCA証明書として使用 [ v3_ca ] nsCertType = sslCA, emailCA # デフォルトでSSL認証局、電子メール認証局とする $ cd /etc/pki/tls/ $ sudo /etc/pki/tls/misc/CA -newca
サーバ証明書
$ sudo cp -p /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl-server.cnf $ sudo vi /etc/pki/tls/openssl-server.cnf ------- [ usr_cert ] basicConstraints=CA:FALSE # デフォルトでCA証明書として使用しません nsCertType = server # デフォルトでサーバー用証明書を作成します $ cd /etc/pki/tls/ $ sudo /etc/pki/tls/misc/CA -newreq
認証局署名を入れたサーバ証明書を作成
$ cd /etc/pki/tls/ $ sudo /etc/pki/tls/misc/CA -sign Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y
移動
$ sudo mv /etc/pki/tls/newcert.pem /etc/pki/CA/certs/[ドメイン名].crt
サーバ用秘密鍵にパスフレーズ埋め込み
$ sudo openssl rsa -in /etc/pki/tls/newkey.pem -out /etc/pki/CA/private/[ドメイン名].key
クライアント証明書
クライアント用にOpenSSLの設定ファイル
$ sudo cp -p /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl-client.cnf $ vi /etc/pki/tls/openssl-client.cnf ---------- [ usr_cert ] ... basicConstraints=CA:FALSE # デフォルトでCA証明書として使用しません nsCertType = client, email, objsign # デフォルトでクライアント用証明書を作成します
クライアント用の証明書作成
$ cd /etc/pki/tls/ $ sudo /etc/pki/tls/misc/CA -newreq
認証局の署名を入れたクライアント証明書
$ cd /etc/pki/tls/ $ sudo /etc/pki/tls/misc/CA -sign
作成したクライアント用証明書、秘密鍵をPKCS#12フォーマットに変換
$ cd /etc/pki/tls/ $ sudo openssl pkcs12 -export -in newcert.pem -inkey newkey.pem -out client.[ドメイン名].pfx -name "[ドメイン名]"
クライアント証明書、秘密鍵等を整理
$ sudo mkdir -p /etc/pki/CA/client/certs/ $ sudo mkdir -p /etc/pki/CA/client/private/ $ sudo mv /etc/pki/tls/newcert.pem /etc/pki/CA/client/certs/client.[ドメイン名].crt $ sudo mv /etc/pki/tls/newreq.pem /etc/pki/CA/client/private/client.[ドメイン名].csr $ sudo mv /etc/pki/tls/newkey.pem /etc/pki/CA/client/private/client.[ドメイン名].key $ sudo mv /etc/pki/tls/client.[ドメイン名].pfx /etc/pki/CA/client/private/
Apache の設定
$ sudo vim /etc/httpd/conf.d/ssl.conf -> 全コメントアウト $ sudo vim /etc/httpd/conf.d/zzz_application.conf ----- LoadModule ssl_module modules/mod_ssl.so Listen 443 NameVirtualHost *:443 SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) SSLSessionCacheTimeout 300 <VirtualHost *:80> <IfModule mod_rewrite.c> RewriteEngine On RewriteLog /var/log/httpd/rewrite.log RewriteLogLevel 1 RewriteCond %{HTTP:X-Forwarded-Port} !^443$ RewriteRule ^(.*)?$ https://%{HTTP_HOST}$1 [R=301,L] </IfModule> </VirtualHost> <VirtualHost *:443> SSLEngine on SSLProtocol all -SSLv2 ServerName [ドメイン名] DocumentRoot /var/www/html/application/public ErrorLog /var/log/httpd/application_error.log TransferLog /var/log/httpd/application_access.log SSLCertificateFile /etc/pki/CA/certs/[ドメイン名].crt SSLCertificateKeyFile /etc/pki/CA/private/[ドメイン名].key SSLCACertificateFile /etc/pki/CA/cacert.pem SSLVerifyClient require SSLVerifyDepth 10 PassengerEnabled on PassengerPoolIdleTime 0 RailsMaxPoolSize 4 RailsPoolIdleTime 86400 <Directory /var/www/html/application/public> AllowOverride all Options -MultiViews Order allow,deny allow from all </Directory> </VirtualHost>
PC からサーバにアクセスする方法
client.[ドメイン名].pfx
を PC 上におく- おいたファイルをダブルクリックして、登録する
画面にアクセスする
注意点
参考資料
Apache + Passenger + Ruby on Rails 環境構築
目的
Apache
上でPassenger
を利用して、Ruby on Rails
アプリケーションを動かす- 少し目的とはそれますが、AWS の ELB でバランシングできるよう設定する
環境
- CentOS 6.5
事前準備
- Rails 環境の用意
導入
Passenger
Gemfile に追記
gem 'passenger'
インストール
$ bundle install
Apache
インストール
$ cd /etc/yum.repos.d $ sudo wget https://repos.fedorapeople.org/repos/jkaluza/httpd24/epel-httpd24.repo $ sudo yum install --enablerepo=epel-httpd24 httpd24 $ sudo yum install libcurl-devel httpd httpd-devel apr-devel apr-util-devel
Apache 用モジュールインストール
$ passenger-install-apache2-module
/etc/httpd/conf.d/zzz_application.conf
作成
<VirtualHost *:80> ServerName [適切なホスト名] DocumentRoot /var/www/html/application_rails/public ErrorLog /var/log/httpd/application_error.log TransferLog /var/log/httpd/application_access.log <Directory /var/www/html/application_rails/public> AllowOverride all Options -MultiViews Order allow,deny allow from all </Directory> </VirtualHost> <VirtualHost *:8080> <IfModule mod_rewrite.c> RewriteEngine On RewriteLog /var/log/httpd/rewrite.log RewriteLogLevel 1 RewriteCond %{HTTP:X-Forwarded-Port} !^443$ RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker RewriteRule ^(.*)?$ https://%{HTTP_HOST}$1 [R=301,L] </IfModule> </VirtualHost>
/etc/httpd/conf/httpd.conf
追記
ServerName localhost:80 Listen 8080 -> ここの追記忘れずに LoadModule passenger_module /usr/local/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/passenger-5.0.29/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/local/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/passenger-5.0.29 PassengerDefaultRuby /usr/local/rbenv/versions/2.3.1/bin/ruby </IfModule>
起動
$ sudo /etc/init.d/httpd start
番外編
$ sudo chkconfig passenger off $ sudo chkconfig httpd on
Vagrant + Ruby on Rails + Mysql 環境構築
目的
- ローカル環境で Rails 環境を起動させて開発を始めたい時に気軽に起動できるようにする
事前準備(適宜ご用意)
- Vagrant のインストール
- OSイメージ(bento/centos-6.7)
vagrant box add bento/centos-6.7
- Vagrant 起動用のディレクトリ作成
実施
Vagrant ファイルの用意
$ vagrant init bento/centos-6.7 $ vim Vagrantfile ===== 下記に書き換え ===== Vagrant.configure(2) do |config| config.vm.box = "bento/centos-6.7" config.vm.network :"forwarded_port", guest: 3000, host: 30000 config.vm.provision "shell", path: "provision.sh" end ==========================
Provision 用のコマンド実行スクリプトの用意
$ vim provision.sh ===== 下記に書き換え ===== #!/usr/bin/env bash yum -y install git yum -y install gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel libxml2 libxslt libxml2-devel libxslt-devel chmod 777 /var/local/ git clone https://github.com/sstephenson/rbenv.git /usr/local/rbenv chmod -R 777 /var/local/ echo 'export RBENV_ROOT="/usr/local/rbenv"' >> /etc/profile git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build chmod -R 777 /usr/local/rbenv/ /usr/local/rbenv/bin/rbenv install -v 2.3.1 /usr/local/rbenv/bin/rbenv rehash /usr/local/rbenv/bin/rbenv global 2.3.1 echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> /etc/profile echo 'eval "$(rbenv init -)"' >> /etc/profile source /etc/profile cp -p /usr/share/zoneinfo/Japan /etc/localtime /usr/local/rbenv/shims/gem update --system /usr/local/rbenv/shims/gem install nokogiri -- --use-system-libraries /usr/local/rbenv/shims/gem install rails -v 4.2.6 yum install -y sqlite-devel yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm yum -y install mysql-community-server chkconfig mysqld on service mysqld start yum -y install mysql-devel ==========================
環境構築 + ログイン
$ vagrant up $ vagrant ssh ログインして rails などインストールできてない場合 $ vagrant provision を実行
- あとはログインして、rails 開発したいように設定していってください。