2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
リンクをコピー
記事をブックマーク
macopy氏:というわけで、(ここまで)アーキテクチャやプログラミングインターフェイスに関してデプロイの技術を紹介してきましたが、ここからはサーバーへの反映方法について紹介しようと思います。
今までずっとFTPをやっていましたが、FTPの説明をしていないですよね。ですが、まぁ(先ほどデモを)やったからいいかなと思っていて。(FTPを)使ってデプロイしていたのでとりあえず省略。ああいう感じでファイルをそのままピュッと上げるインターフェイスです。
2023年の時点では、生FTPでなにかファイルを上げるのはやめましょう。ちなみにこれ(今回のセッションのデモ)はTailscaleでVPNを張っているから大丈夫です。
FTPもPushの1つなんですが、Push型のデプロイをやっていきます。
(スライドを示して)これはすごく単純な……。「図は要るのか」みたいな感じなんですが(笑)。オペレーション用の端末、手元の端末とかをデプロイする君(デプロイを行う専用のインスタンスなどを指す)ようなところから、サーバーに対してプログラムをアップロードします。
アップロードの手段は、rsyncだったりFTPだったりSCPだったりといっぱいあります。その後にプロビジョニングしてデプロイというかたちになるんですが、複数のファイルを一気にアップロードするとなると、tarballに固めて、その先のほうで展開するとか、例えばアトミックに更新したいからrenameを使うとか、そういう細かいテクニックがいろいろあります。
というわけで、PSGIをPush型デプロイをします。まずデプロイスクリプトがあります。普通にrsyncした後にprovision.sh、リモートのprovision.shを実行します。
shは何をやっているかというと、この頃になるとレンタルサーバーというかたちじゃなくて、依存モジュール、Shebangモジュールをバリバリ使った開発になっているので、最新型ですがCarmelを使っています。ここでcarmel installをした後に、systemctl reload plackup.serviceをしている。
中ではstart serverで動いているプロセスがあるので、plackup.serviceに対してSIGHUPを送ってgraceful restartを行っています。ちょっと早口ですが、すみません。
じゃあやってみましょう。(画面を示して)ちなみにもうデプロイはされているので、こんな感じになっていますね。これでサーブされています。
これをデプロイしたことがわかるように書き換えてみましょう。app/app.psgiにHello Plack with rsync from KRPと入れます。
という感じで入れて、デプロイします。(画面を示して)こんな感じでデプロイされました。
carmel installをしているのでこんな画面が出ます。「デプロイされましたよ」という感じで、見てみましょうか。デプロイされました。
(会場拍手)
ただ、Push型デプロイには難点があります。この頃になるとサーバーの数が多くなりました。CGIの時はレンタルサーバーは当然1台だし、冗長性を確保しても2台とかの世界だったのが、どんどん冗長化したり、大量のリクエストをさばくという要件に合わせて増え始めた。
すると、アップロードするとか、そういうPush型のネットワークのリソースが律速化して、デプロイ速度が遅くなってしまう問題が出てくる。
さらにこの頃になると、今度はパブリッククラウドの普及で台数が可変になっているんですよね。だから「今どのサーバーが生きているか」を知る必要があった。知るのはいいんだけれど、「デプロイしている途中に変わったらどうするの?」とか、そういう問題も出てくる。なのでPush型デプロイは、オートスケールの環境とかで動かすことがけっこう大変になってきた。
というわけで、Pull型デプロイという提案が出てくるわけです。Pull型デプロイ、複雑になりましたね(笑)。
まず、オブジェクトストレージがこのあたり(の時期)で出てきます。S3とかそういうやつです。端末からtarballをWebアプリで固めた後に、オブジェクトストレージにアップロードします。
その後になんらかの方法……。ここでよくConsulだったりSerfというオーケストレータが使われたりするんですが、(それらが)デプロイの号令をしてあげる。サーバー1、サーバー2、サーバー3。そのほかにもいろいろあったりしますが、自律的にオブジェクトストレージからtarballや設定ファイルをPullしてきて、再起動を行う仕組みがPull型デプロイだったんですね。なので、何台に増えてもオペレーション端末のリソースで律速されるということは別にないということです。
というわけで、「stretcher」というツールがあるので、それを使ったPush型のデプロイをしていきます。stretcherは、藤原さんが作ったので……。弊社カヤックではConsulとかがよく使われていたんですけど。
1台だとConsulクラスタがうまく作れなかったので、ここではncでstgに突っ込んで返すという、ふだんではやらないようなことをやってみます。
stretcherに入った標準入力でmanifestファイルが入るようになったので、ここからデプロイを行います。rsync pushのほうは……。なんて名前だったっけ。ど忘れしちゃいましたね。stretcher-pullですね。
複雑になりました。tarballに固めます。app以下をtarballに固めて、ストレージとみなして検証サーバー……。これもサボっていますが、サーバーにtarballをアップロードします。
checksumの計算をしてあげて、checksumをmanifestのファイルの中に埋め込みます。envsubstという環境変数を使ってテンプレートをレンダリングするみたいなコマンドがあるので、manifestファイルを作ってあげて。
manifestファイルもオブジェクトストレージみたいなところにアップロードする。その後にstretcherにデプロイして、ncを介して突っ込む。「manifestはこれだよ」というふうに突っ込んだ上でデプロイを行っています。
デプロイの指令自体はサーバーのリスタート、直接はキックしていません。ただ、stretcherでシェルスクリプトが実行されて、ダウンロードが成功した後、展開が成功した後に、自律的に再起動を行うかたちになっています。
じゃあデプロイしてみましょう。下がローカルで上がリモートです。来ました、プロビジョニング。あっ、もうデプロイに入りましたね。速い(笑)。デプロイはされました。
これで変わるかな。はい、stretcherに変わりました。こんな感じですね。
(次回につづく)
関連タグ:
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略