質問: 閲覧ありがとうございます! 先日までDockerでVPSのデプロイ方法を質問させて頂いたのですが、いくら勉強してもdockerでのデプロイ方法が理解できなかったので、一旦docker無しでデプロイを試してみました。 デプロイ環境 ------ **ローカル** * Mac OS X Sierra **VPS** * Centos 7 * Rails 5.1 * rbenv * Ruby 2.4.1 * Puma * MySQL * Capistrano * Nginx --- なんとかipアドレスを打てば、アプリケーションを表示することが出来きたので、次はdockerを使って開発環境の構築&デプロイまでの流れを勉強しようと挑戦しましたが、やっぱり理解出来なかったです。。。(なんでスクリプト言語やDBばかりのイメージをコンテナ化していて、osのイメージをコンテナ化しないの?。。。 コンテナ自体linux上で起動しているから、centosやubuntuが必要ない?。。。) 悩んでても仕方がないので、一旦資料が豊富なvagrant virtual boxで開発環境を構築してみました。 開発環境 ---- * Mac OS X Sierra * Vagrant1.9.7 * Virtualbox 5.1.24 * Centos 7 * Rails 5.1 * rbenv * Ruby 2.4.1 * Puma * MySQL * Nginx --- "Yay! You’re on Rails!"を表示できたので環境開発の構築は出来たと思います? 疑問1:stagingとproductionの使い方 -------------------------- VPSで本番環境を構築中に`cap install`するとstaging.rbとproduction.rbが作成され、production.rbは本番環境(VPS)の設定だな!っと考えたのですが、stagingが何をさしているのかが分かりませんでした。vagrantで開発環境を構築してるときに、この開発環境をstagingをさしているのでは?と感じたのですが。。。。 つまり、開発しているアプリケーションをいきなり本番(VPS)にアップするのは危険なので、VPS環境をvagrantで擬似的に作成し、開発中は`cap staging deploy`でvagrantで確認し、okならば`cap production deploy`でVPSにデプロイする使い分けでよろしいのでしょうか? vagrantにマウント機能があるので、わざわざgitからpullする必要性がないような。。。。 疑問2:プライベートリポジトリの場合の環境変数の取扱 -------------------------- なんかおかしいなと思いながら、VPSサーバーにmysqlのユーザー名やパスワード、secret_key_baseを直貼りして、一旦アプリケーションをデプロイしてみました。デプロイ後に、ユーザー名やパスワードの取扱について調べたところ、環境変数を使う!と書かれていたのですが、gitで間違えてアップロードしてしまったや、gitignoreに入れ忘れたなど、前提が公開されるgitの場合ばかりでした。Bitbucketのプライベートリポジトリの場合には、環境変数の設定は不要なのですか? 初歩的な質問で申し訳ないのですが、よろしくお願い致します!
回答: ### ステージング環境について Web開発の実務において、一般的に以下の3つの環境が存在します。 * 開発環境 * テスト環境/試験環境/ステージング環境/プレビュー環境 (呼び方は人によって異なるが、指すものは同じ) * 本番環境 開発環境は、特に限定されませんが一般的にはローカルのPC(仮想マシン含む)です。 テスト環境(ステージング環境)、本番環境は外部に対して公開する環境です。 ただし、テスト環境は顧客など関係者のみに公開します。 アクセス制限の方法としてIPアドレスまたはBasic認証などで制限するといった方法がよく取られると思います。 **ここで言うテスト環境とは、railsのrspecなどのテストではない点に注意。** 「テスト」という言葉は、文脈により指すものが変わります。 テスト環境は、本番環境とまったく同じ構成のサーバで本番環境と同じように運用します。 (構成の違いによる不具合が起きる可能性もあるため) 受託開発を想定すると分かりやすいと思うのですが、 顧客に修正内容を確認してもらう場がテスト環境(=ステージング環境)です。 最終的に顧客からOKをもらったら、本番環境へ反映します。 開発者が勝手に本番環境へ反映するといった事は基本的にしません。 小さいシステムで考えると、テスト環境と本番環境はそれぞれ別のVPSを契約して、 同一設定にしたものと考えてもらって良いです。 ### プライベートリポジトリの場合の環境変数の取扱について 好きにすれば良いというのが答えです。 外部にパスワードや重要なデータが漏れる事のないように運用すれば、どのように取り扱っても問題ありません。 プライベートリポジトリで確実に外部から閲覧される事がないと保証されているなら、 パスワードは直書きで問題ないので、環境変数を使わなくても良いでしょう。 しかし、そういう過信というか事故があまりにも多いので環境変数を使うという手法が考えられたという事です。