こんにちは、ハブロフスク!15分でVDSに移行し、nginx、unicorn、capistranoの研究に深く入らない方法。 カットの下のステップバイステップの指示。
友人の多くのPHPプログラマーから、通常のコントロールパネルでは適切で安価なホスティングが存在しないという理由だけで、彼らはレールに行きたくないと常に聞いています。 実際、どこでホストされているのかという質問は、もしあなたがレール上で書いたとしても、すでにハブで何百回も提起されているので、これについては触れません。 Railsで最初にプロジェクトを作成したときに、ホスティング事業者を探しましたが、それでもポイントではありません。私にとって最も重要なことは、ホスティングでアプリケーションを起動するという面倒なプロセスでした。 VDSを購入し、テストサーバーとして使用することにしました。 VDSのセットアップと準備のプロセスは、AからZの指示を見つけられなかったという事実によって複雑になり、大まかに言って、VDSだけでなく、nginxやユニコーンなどの構成に関する知識もありませんでした。 負荷の高いアプリケーションの場合、200行の構成やひどく混乱した設定は必要ありませんでした。私のタスクは、最小限のお金と時間でサイトを立ち上げ、このVDSと共に顧客に提供することでした。 この記事では、非常に必要な命令を正確に書きたいと思います。多くの初心者がRailsで書くことが有用であり、コピーするフレームワークを疑い、使用し続けるPHPプログラマーの追加インセンティブになることを願っていますRuby on Railsの機能と機能。 私には、メルセデスのエンジンをペニーに入れたのと同じことのようです。 軽快に思えますが、それでも同じではありません。
それでは始めましょう
開始する必要があるもの:
- DebianファミリーシステムでVDSを購入して使用している
- レジストラから購入したドメイン
参考までに、すべてのアクションは、私の場合、Ubuntu Server 11.10のVDSで実行されます。
nginxをインストールして構成する
ターミナルを介してssh経由でマシンにアクセスします。
:~ ssh root@<ip >
リポジトリからnginxを配置します:
:~ apt-get install nginx
アプリケーションの設定用のディレクトリを作成しますが、突然いくつかの設定があります:
:~ mkdir /etc/nginx/sites
最初のアプリケーションの設定を書いています。 私はvimを使用していますが、これは好みの問題です。少なくとも標準のnanoを使用できます:
:~ vi /etc/nginx/sites/first_app.conf
ここに次の内容を書きます。
server {
listen 80;
# , .
# , , .
server_name first_app.com;
root /home/first_app/web-app/public;
client_max_body_size 32m;
location / {
try_files $uri @unicorn;
}
location @unicorn {
proxy_set_header Client-Ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass unix:/home/first_app/web-app/tmp/sockets/unicorn.sock;
}
}
次に、nginxサーバー自体のkofigを編集します。 完全な設定ファイルは次のとおりです。
user nobody nogroup;
worker_processes 4;
pid /var/run/nginx.pid;
events {
worker_connections 4096;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
log_format main '$remote_addr - $remote_user[$time_local] "$request"'
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "http_x_forwarded_for"'
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites/*.conf;
}
#mail {
# # See sample authentication script at:
# # wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
次に、VDSの起動時にnginxが自動的に起動する必要があります。 これを行うには、runitスーパーバイザーをインストールします。
:~ apt-get install runit
:~ mkdir /etc/sv/nginx
nginxを実行する実行可能ファイルを作成します。
:~ vi /etc/sv/nginx/run
そしてこれを書いてください:
#!/bin/sh
exec 2>&1
exec /usr/sbin/nginx
実行可能にします:
:~ chmod +x /etc/sv/nginx/run
すべてが機能しているかどうかを確認します。
:~ /etc/sv/nginx/run
:~ ps aux | grep nginx
すべてが順調であれば、worker_processが4つ実行され、nginxサーバーが実行されていることがわかります。 問題は、ApacheがデフォルトでVDSにインストールされている場合にのみ発生します。 それは私と一緒でした。それは当然80ポートが忙しいことを意味します。 Apacheを破棄して、そのすべてのプロセスを強制終了してください。 皆様のご健闘をお祈りしております。今後も継続していきます。 自動起動のためのシンボリックリンクを作成するために残っています:
:~ ln -s /etc/sv/nginx/ /etc/service
おめでとうございますnginxがインストールされ設定されました。 適切な機器ですべてを実行するには約2分かかりますが、アプリケーションを起動するユーザーを作成する必要もあります。
:~ adduser first_app
:~ vi home/itnotes/.bashrc
このファイルに追加:
export RAILS_ENV=production
RVMとRubyGemsをインストールする
同じ端末で続行します。
:~ apt-get install curl
:~ bash -s stable < <(curl -s raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
:~ apt-get install build-essential bison openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev
:~ gpasswd -a first_app rvm
:~ apt-get install rubygems
:~ rvm use --create ruby-1.9.2-p318@first_app
:~ rvm ruby-1.9.2-p318@global gem install bundler
:~ mkdir /home/first_app/web-app
:~ apt-get install git-core git-gui git-doc
ここでcurlをインストールし、それを使用してrvmをインストールし、Ruby、sqliteなどのコンパイルに役立つパッケージのパケットを配信します。 その後、Rubygemsをインストールし、プロジェクトのgemsetを作成し、すべてのプロジェクトのバンドラーをインストールし、作成したユーザーのホームディレクトリにアプリケーションのフォルダーを作成します。 Gitをインストールします。
ルートから完全なsshを離れます。
Rubyをインストールする
sshによって作成されたユーザーの下に移動します。
:~ ssh first_app@<IP >
:~ rvm install ruby-1.9.2-p318
私たちは去り、再びルートの下に行きます。
DB、カピストラーノ、ユニコーン
ほとんどの場合、mysqlがデータベースとして使用されますが、私の個人的な意見は、プロジェクトが大きくなくても、Webサイト自体がそこで何かを行う場合、そのようなデータベースを使用すべきではないということです。sqliteで十分です。 さらに、多くの時間を節約できます。 その後、mysqlに移動します。必要な場合は、問題なく実行できます。 したがって、サブを構成せずに、すぐにCapistranoに進みます。
Gemfileアプリケーションに追加します。
group :development do
...
gem 'capistrano-deploy', '~> 0.1.1', :require => nil
end
group :production do
...
gem 'unicorn', '~> 3.6.2', :require => nil
end
プロジェクトのルートに次の内容のCapfileを作成します。
$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require "rvm/capistrano"
set :rvm_ruby_string, '1.9.2'
require 'capistrano-deploy'
use_recipes :git, :rails, :bundle, :unicorn
server '<IP >', :web, :app, :db, :primary => true
set :user, 'first_app'
set :deploy_to, '/home/first_app/web-app'
set :repository, 'git@github.com:<>'
after 'deploy:update', 'bundle:install'
after 'deploy:restart', 'unicorn:stop'
私のようにgithubにgitリポジトリがある場合、VDSで作成されたユーザーの下からrsaキーを生成することを忘れないでください。 これを行う方法は、github.comで詳細に書かれています。
ターミナルでは次のように記述します。
:~ mkdir /etc/sv/first_app_unicorn
:~ touch /etc/sv/first_app_unicorn/run
:~ chmod +x /etc/sv/first_app_unicorn/run
:~ vi /etc/sv/first_app_unicorn/run
このファイルをこのファイルに書き込みます。
#!/bin/sh
exec 2>&1
export USER=first_app
export HOME=/home/$USER
export RAILS_ENV=production
UNICORN="/usr/local/rvm/bin/rvm ruby-1.9.2-p318@first_app exec bundle exec unicorn"
UNICORN_CONF=/etc/unicorn/first_app.rb
cd $HOME/web-app
exec chpst -u $USER:$USER $UNICORN -c $UNICORN_CONF
次に、ファイル/etc/unicorn/first_app.rbに次を入力します。
worker_processes 4
working_directory "/home/first_app/web-app"
listen "/home/first_app/web-app/tmp/sockets/unicorn.sock", :backlog => 64
pid "/home/first_app/web-app/tmp/pids/unicorn.pid"
stderr_path "/home/first_app/web-app/log/unicorn.stderr.log"
stdout_path "/home/first_app/web-app/log/unicorn.stdout.log"
最後の拍車:
ln -s /etc/sv/first_app_unicorn /etc/service
ドメイン設定
VDSのIPを示すサブドメイン@およびwwwに対して、タイプAの2つのレコードを追加する必要があります。 サーバーをセットアップする前にこれを行うとよいでしょう。そうすれば、変更をすべて構成している間に有効になります。
サンドイッチを作り、ブラウザで実行します。
おわりに
サイトの小さな変更をすばやく更新するために、アプリケーションのルートにこのファイルを作成しました。
git add .
git commit -a -m "Release"
git push
cap deploy:update
cap deploy:restart
デプロイと呼ばれ、実行可能にしました。 さて、githubとVDSのサイトを更新するには、1つのコマンドのみが必要です。
:~ ./deploy