海外サーバーvultr

Ubuntu 17.04にRbenv、Rails、MariaDB、Nginx、SSLおよびPassengerを使用してRubyをインストールおよび設定する方法

Ruby on Railsは、プログラマーの生産性を向上させるために開発された、Ruby用の人気のあるWebフレームワークです。しかし、さまざまなgemと依存関係を連携させることは時々注意が必要です。このガイドでは、一般的に使用されているgemや依存関係を含む、完全に運用可能なRails環境をセットアップするのに役立ちます。

必要条件

  • 512 MB以上のRAM(1024 MBを推奨)を持つVultrインスタンス。
  • Ubuntu 17.04を実行しているVultrインスタンス。

このガイドで使用されているスタック

  • Nginx:高速で強力なWebサーバー (ver 1.10.3)
  • Passenger:NginxがあなたのRubyアプリを提供する手助けをするアプリサーバー。(ver 1.5.1.8)
  • Rbenv:Rubyのバージョンマネージャ。(ver 1.1.1-2)
  • Ruby:(バージョン2.4.1)
  • MariaDB:MySQLサーバーのオープンソースブランチ(ver 10.2)
  • Let’s EncryptからのSSL証明書

インストール

Sudoユーザーを追加

:自分自身を攻撃にさらす可能性があるため、これらのサービスをrootとしてインストールしないことを強くお勧めします。deployまたはappユーザーの設定は一般的な規則です。

sudo adduser deploy
sudo adduser deploy sudo
su deploy

更新およびアップグレードシステム

Ubuntu VMですべての最新パッケージを実行していることを確認してください。

sudo apt-get update && sudo apt-get upgrade -y

ビルドシステムをインストールする

rbenvや他のgem を使ってRubyをコンパイルできるようにするためには、さまざまなパッケージをインストールする必要があります。あなたが必要とするRubyのバージョンによっては、いくつかのパッケージは必要とされないかもしれません。

コンパイル
sudo apt-get install -y curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev
sudo apt-get install -y libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev
sudo apt-get install -y python-software-properties libffi-dev
sudo apt-get install -y build-essential openssl libreadline6 libreadline6-dev libreadline-dev
sudo apt-get install -y automake libtool bison pkg-config bison autoconf libc6-dev ncurses-dev
sudo apt-get install -y libapr1-dev libaprutil1-dev libx11-dev libffi-dev tcl-dev tk-dev
SSLサポート用パッケージ

Passengerのように、これらはいくつかのgemをコンパイルするのに必要です。

sudo apt-get install -y zlib1g zlib1g-dev libssl-dev libyaml-dev libcurl4-openssl-dev libruby
バージョニング

RubyコミュニティはGitをSCMとして選んでいます。しかし、MercurialやSubversionのような追加のものもインストールできます。

sudo apt-get install -y git git-core
MySQL / MariaDB用データベースドライバ
sudo apt-get install -y libmysqld-dev mysql-client libmysqlclient-dev
のこぎり

ネイティブXMLライブラリを必要とするいくつかの人気のあるgemに必要です。

sudo apt-get install -y libxml2-dev libxslt-dev
Node.js

デフォルトのUbuntuリポジトリは、いくつかのメジャーバージョンより遅れがちなので、Nodeからの公式リポジトリを最新バージョンで追加します。

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs

オプションのパッケージ

これらのパッケージはシステムの実行に必須ではありませんが、特定のgemを使用する必要がある場合には持っておくと良いでしょう。

グラフと画像

これらのライブラリは必要ではなく、あなたが画像操作宝石を使うつもりでない限りスキップされることができます。Rmagickのように:

sudo apt-get install -y imagemagick libmagickwand-dev libvips-dev

SQLiteとPostgreSQL用のデータベースドライバ

他のデータベースに接続する必要がある場合、または単純なローカルDBを使用する必要がある場合は、SQLiteまたはPostgreSQLのドライバをインストールしてください。

sudo apt-get install -y libsqlite3-dev sqlite3  libpq-dev postgresql postgresql-contrib

道具

通常は新しいUbuntuインストールにプレインストールされていないユーティリティ。お好みのテキストエディタをインストールしてください。

sudo apt-get install -y iotop htop nano vim

MariaDBサーバーをインストールする

MariaDBは強力なリレーショナルSQLサーバーであり、MySQLと完全に互換性があります。MariaDBの最新版をインストールする最も簡単な方法は公式のリポジトリを使うことです:

sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,i386] http://ftp.utexas.edu/mariadb/repo/10.2/ubuntu zesty main'
sudo apt update
sudo apt install -y mariadb-server

プロンプトに従ってrootのパスワードを設定します。その後、新規インストールにアクセスできることを確認してください。

mysql -V 

これは次のような行を表示します。

mysql  Ver 15.1 Distrib 10.2.8-MariaDB, for debian-linux-gnu (x86_64) using readline 5

MySQLシェルにログインします。

mysql -h localhost -u root -p 

\q終了に使用してください。


RbenvとRubyをインストールする

ルベンフ

gitを使ってRbenvをインストールします。これは最も簡単なインストール方法で、後で簡単に更新することができます。またインストールしてくださいruby-build、それは実際に異なるバージョンのRubyをコンパイルする責任があります。

cd
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

注意:あなたは、単に更新する必要がある場合cd ~/.rbenvgit pull

RbenvとRubyビルドをシェルで利用可能にします。エクスポート行がファイルの先頭に挿入されるようにするには.bashrc(これは非対話型のbashコマンドにとって重要です)、これらの行を使用します。

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.temp_bashrc
echo 'eval "$(rbenv init -)"' >> ~/.temp_bashrc
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.temp_bashrc

cat ~/.temp_bashrc ~/.bashrc > ~/.combined_bashrc && mv ~/.combined_bashrc ~/.bashrc && rm ~/.temp_bashrc

exec $SHELL

RbenvとRuby-buildがインストールされていて、シェルで利用可能かどうかを確認します。

rbenv install --list

rbenv認識されない場合は、ログアウトしてシェルに再度ログインしてください。

~/.bash_profileファイルを作成し、それを自分の~/.bashrcファイルのソースにするように指示します。whenevergemが設定したcronジョブなど、Railsアプリケーションから非対話型シェルコマンドを実行する必要がある場合は、対話型シェルと同じバージョンのRubyが使用されます。これは奇妙なエラーを防ぐのに役立ちます。この行を~/.bash_profileファイルに追加します。

if [ -f $HOME/.bashrc ]; then
        source $HOME/.bashrc
fi

ルビー

Ruby 2.4.1をインストールします。

rbenv install 2.4.1

:このプロセスはVMのリソースによって5-15分かかるかもしれませんプログレスバーがありません。

Rbenvをどこでも利用できるようにします。

rbenv global 2.4.1

旅客とNginx

aptのPGPキーとHTTPSのサポートを追加します。

sudo apt-get install -y dirmngr gnupg
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
sudo apt-get install -y apt-transport-https ca-certificates

Passengerリポジトリを追加します。

sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger zesty main > /etc/apt/sources.list.d/passenger.list'
sudo apt-get update

Passenger + Nginxモジュールをインストールします。

sudo apt-get install -y nginx
sudo apt-get install -y libnginx-mod-http-passenger

この時点でこれらをテストするには、ドメイン名またはIPを使用してVultrインスタンスにアクセスしてください。それらが機能している場合、あなたのページはデフォルトのNginxウェルカムページを表示します。

レール、アプリの設定、および乗客の設定

BundlerとRailsをインストールします。

gem install bundler rails --no-ri --no-rdoc

Ubuntu / Debianの慣習はあなたのアプリをでセットアップすることです/var/www。デフォルトではrootだけが書き込み可能です。セットアップを機能させるために、sudoユーザーに所有権を与えますdeploy

sudo chown deploy:deploy /var/www -R

でレールアプリを生成します/var/www/。デプロイしたいアプリが既にある場合は、git cloneここで実行してから実行しますbundle

cd /var/www
rails new example --database=mysql
アプリを指すようにPassengerを設定します。
  1. Nginxを準備します。sudo nano /etc/nginx/nginx.conf
  2. ユーザーをに変更しますdeployuser deploy;
  3. http設定のセクションには、Nginxにパッセンジャーを含むモジュールをロードするように指示する行があるはずです。それが見つからない場合は、Virtual Host Configsタイトルの直後、ただしその前に追加できますsites-enabledinclude /etc/nginx/conf.d/*.conf;
  4. passenger.confファイルを編集/作成します。sudo nano /etc/nginx/conf.d/mod-http-passenger.conf
  5. PassengerにRbenvの設定を使用するように伝えます。Passengerに含まれているRubyバージョンを指す行が含まれている可能性があります。削除するかコメントアウトするだけです。passenger_ruby /home/deploy/.rbenv/shims/ruby; passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
  6. アプリを指すように仮想ホストを設定します/var/www/example/sudo nano /etc/nginx/sites-enabled/example.conf server { listen 80; server_name example.com www.example.com; root /var/www/example/public; passenger_enabled on; # When you are ready to switch to production mode - change this to `production` passenger_app_env development; # <-- !important }
  7. Nginxを再起動します。sudo service nginx restart

これでアプリケーションは開発モードで使用する準備が整いました。本番モードに切り替えるには、あなたのnginxの設定に戻って変更する必要があるrails_envに設定をproduction

本番モードに切り替える前に、あなたはまだセットアップに本番データベースが必要になりますexample_production、 database.ymlと秘密鍵を。CapistranoやMinaなどのツールをチェックして、アプリケーションのデプロイプロセスをスピードアップしてください。ENV変数をgem like dotenvで使用し、パスワード、秘密鍵などをgitリポジトリにコミットしないことをお勧めします。

SSLの設定

あなたのドメイン用のSSL証明書を提供するサービスは複数ありますが、多くは有料で、カップルは無料です。どのサービスを使用する場合でも、SSLをセットアップしてください。Let’s Encryptは非常に簡単で無料で使用できます。Let’s Encryptは多くの技術大手に支えられた非営利団体です。

インストール

以下のコマンドを実行して、プロンプトに従います。

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx
sudo certbot --nginx
sudo certbot renew --dry-run

あなたが今使っているあなたのVultrインスタンスに行くならばHTTPS、あなたは安全なウェブサイトを見るでしょう。

更新

新しく発行された証明書は期限切れになり、定期的に更新する必要があります。これを行う最も簡単な方法は、cronジョブをセットアップすることです。

sudo crontab -e 
30 2 * * 1 /usr/bin/certbot renew 

最後の、ただしオプションの手順として、VMを再起動し、すべてのサービスが期待どおりに再起動するようにします。