質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1418閲覧

最初のディプロイの方法と次回以降のディプロイ(更新)の方法について

murabito

総合スコア108

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2018/04/01 13:26

編集2018/04/01 13:29

サーバー周りの勉強をしているところなのですが、ディプロイの方法について質問があります。

ひと昔前はFTPでサーバーにファイルをアップロードしてウェブ上に公開し、
そして、更新する際はローカルで編集したものをアップロードして、
新規データの追加、または上書きによる更新が主流だったのではと思います。

ですが、最近はもはやこういうやり方というのは好ましいやり方ではなくなってきているのですよね?

初回のディプロイ方法はいろいろと調べたりしてやり方はわかったと思います。

サーバーにgitをインストールして、githubやgitlabなどのレポジトリにアップロードしたファイル一式を
cloneし、その後、依存モジュールもインストールして、ビルドしてサーバーを起動し公開する。

初回に関してはこれでだいたいあっていますよね?

ここまでは自分の認識の確認的な意味合いが強い質問なのですが、本題としては、更新時のディプロイ方法についてです。

この場合は、最新のデータがgithubやgitlabにあがっているとして、そのデータをサーバー側でpullして、また、必要であれば関連モジュールをインストールまたはアップデートして、ビルドしてしてといったことをするのでしょうか?

ウェブ上で調べてみても初回のディプロイ方法について触れている記事は見かけるのですが、2度目以降のディプロイ方法について触れている記事が見当たらず、今回質問に至りました。

ちなみにCIサーバーと連携するとかいう方法はおいおい勉強しようと思っているのですが、今回の質問はそういったところまでは踏み込まないことを前提としております。

よろしかったらご回答いただけると嬉しいです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

初回に関してはこれでだいたいあっていますよね?

ダメ…とは言わないけど、次のゴールがまだあります。
AnsibleやChefといったツールを使って、ワン・コマンドでサーバが動く所まで面倒みる文書を用意しておくべき。

例として勉強会で発表してたさくらインターネットの現場での話を共有します。
さくらインターネットはインターネットにぶら下がるサーバーを沢山管理している会社です。
だから大量のサーバを毎日セットアップするし、ミスが怖いからとてもじゃないけど手作業ではやってられません。

そこでAnsible等の構成管理ツールを使って沢山のサーバを同時に面倒みるという手法を行っています。

  • 作業担当者がAnsibleの設定ファイルを作成する
  • 上司がレビューを行う
  • テストマシン1台で動作させて確認、動作確認もAnsibleのコードで行う
  • 全てのテストが完了したら複数台のサーバーに対して自動アップロード

この様に、CLIで動くものはアイデア次第でいくらでも自動化出来ます。

更新時のディプロイ方法についてです。

この狭い解答欄には書ききれない程の手法が存在します。
ですが、大まかにはこんな感じです。

GitHubのWebhookを利用して、コミット履歴が更新されたら何処かにHTTPリクエストが飛ばせます。
本番環境に穴開けるのは流石に怖いので、どっか別のマシンにWebhook専用リクエストを受信して、
リクエストを受け取り次第、SSHコマンド越しに本番環境にデプロイを行うプログラムを設置します。

ヒントをいくつか出しますので、調査したり各種勉強会に出席するなどして勉強していってみてください。

  • GitHubにはWebhookという、コミット履歴が進んだ事を検知してHTTPリクエストを発射する機能がある
  • Jenkinsというシェルスクリプトを登録しておき、それを管理画面上からボタン1個で起動するツールがある
  • JenkinsはSlack BotやGitHubのWebhookからも発火できる
  • AWSにはCodeDeployという上記挙げたJenkinsみたいなサービスが存在する
  • DockerHubは有料ユーザーになるとプライベートリポジトリという概念があり、自社製品をまるっと包んでImageにしてしまい、それを本番環境でdocker pullして立ち上げるだけでデプロイ完了という手段が使える
  • またDockerHubにはGitHubのリポジトリと連携して、GitHubのコミット履歴を進めると追従してImageを固め直してくれるサービスが存在する
  • AWSやGoogle等には、DockerのImageを元に直接インスタンスを立ち上げるような更に楽なサービスも存在する

ぶっちゃけあれです。
ピタゴラスイッチみたいにコミット履歴という名のボールを、
色んなツールやサービスを使いながらサーバマシンのゴールにどうやって投げ込むかというパズルです。

何故書ききれないかというと、ツールやサービスの数だけでも大量にあり、
その組み合わせとなるとまた膨大になるからです。

予算との相談みたいな面も強く、各社まだまだ手探りといった状況ですね。
「オートデプロイ」みたいなワードで調べたり、勉強会に出席して各社のデプロイ事情を質問してみてください。

投稿2018/04/02 02:58

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

murabito

2018/04/02 13:08

ご回答ありがとうございます。一応、質問文の終わりに「CIサーバーと連携するとかいう方法はおいおい勉強しようと思っているのですが、今回の質問はそういったところまでは踏み込まないことを前提としております。」と記載していたので別の方をベストアンサーとさせていただきましたが、次の次のステップあたりの参考に大変なりました。AnsinbleやChefはさすがに自分のポジション的に使わなそうですがDockerやCIサーバーの勉強はしていきたいと思います。
guest

0

ベストアンサー

更新時も同じですよ。
というか重要な考え方は何度デプロイしても同じ結果になるようにするべき、なので初回でも2回目でも同じ。

言語ごとにどのくらいのことをやるかは変わるかも。
PHPならgit pullしてcomposer installで十分だけど
RubyだとDockerでサーバー環境までガチガチに固めないと大体動かなくなる。

別にFTPでアップしてもいいはずだけどフレームワークとパッケージマネージャーの時代にそんなことやれと言われたらまともな人は絶対に断る。
これが分かってない人とはもはや日本語も通じないレベルでどうしようもない。
未だにレンタルサーバーって発想しかできない相手からは逃げるべし。

投稿2018/04/01 15:31

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

murabito

2018/04/02 13:05

ご回答ありがとうございます。自分の認識でだいたい間違いはないようなので安心しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問