SlideShare une entreprise Scribd logo
1  sur  13
お手軽PaaS Dokkuで
開発環境構築
リクルート住まいカンパニー
冨田修平
自己紹介
• 冨田修平
– 元IoT屋さん
– 元ネット広告屋さん
– 元研修屋さん
– 元ECサイト屋さん
– 現:リクルート住まいカンパニー
– スマホサイトの基盤屋さん
– github.com/aminotsukasa
目次
• Suumoスマホサイトの現状と課題
• 課題
– 開発環境が足りない
• Dokkuの紹介
– シンプルなHerokuクローン
• Dokkuの内部構造
• Gitリポジトリとの組み合わせ
• 活用事例
Suumoスマホサイトの現状
• 人員
– パートナーさん含めて?0名程度
• 機材(AWS)
– 本番 EC2 ??台
– 開発 EC2 ??台
• 不動産物件データ保持は別システムのためWebAPサーバがほとんど
• その他キャッシュ、セッションストレージが数台
• アクセス数
– ?億 PV/月
• Route53 + ELB + Nginx + php-fpm のよくある構成
課題
• メンバー、開発案件数増加に伴ってテスト環境が不足
• 環境不足でPOやQA担当が確認待ち状態が常態化
• 都度インフラ所管部署に依頼は非現実的
– AWSなのに間に人間が入るせいでリードタイムが長くなりがち
• クラウド以外の名状しがたい何か
• 妖怪IAM権限足りません
– EC2の維持コストも馬鹿にならない
対策
• オープンソースのHerokuクローンDokku導入
– 仮想マシンではなくDockerを使うことで低コストに環境を構築
• メモリやCPUのオーバーヘッドが少なく、多数の環境を少ないリソースで
導入可能
• 開発者がgit pushするとDokkuサーバ上でコンテナが起動
– ドメインも自動的に振られて公開される
• http://(ブランチ名).(ベースドメイン名)/
– GitリポジトリとDokkuサーバはWebHook経由で連動
– 使用するイメージはリポジトリ内のDockerfile又はapp.jsonに記載
Push Hook
Dokkuの紹介
• とてもシンプルなPaaS(Herokuクローン)
– WebアプリケーションのソースコードをpushするだけでAPサーバが
起動する
• 個別にドメイン名も自動的に割り振られて公開される
• プラグインを導入することで各種ストレージ(MySQL,PostgreSQL等)も使用
可能
– コアは300行のBashスクリプト
– プラグイン部分も含めて全てBashで書かれている
• echoを入れていくだけで内部動作が追える
– ランタイムはBuildpack又はDockerイメージが使用可能
• 実態はGitリポジトリ上のサーバサイドフック
– Push完了後にBashスクリプトが走ってコンテナ生成&リリース
Dokkuサーバの内部構造
• gitリポジトリとdockerコンテナの構成
– Dokkuサーバはgitリポジトリとし
て動作
– git pushするとフックが起動
– Dockerfile又はapp.jsonを元に
各言語の処理系のコンテナを
起動
– Nginx + php-fpm
– Unicorn + Railsなど
– ソースコードがコンテナ内に
clone
– リバースプロキシにコンテナ
を登録
.
Dokkuの選定理由
• 既存環境への親和性
– 実態はただのEC2のためセキュリティグループ、EIP固定可能
– 他システムとの連携容易
• 運用が用意
– シェルスクリプトのため内部動作が把握しやすい
– CloudFoundaryやFlynnは高機能な分散システムで本番環境利用にも耐えるが複雑
• 専門技術者が少ない事業会社での中長期維持は難しい
• かといってフルスクラッチも長期的なメンテナンスを考えるといまいち
• HerokuのBuildpackやストレージコンテナなどアプリケーション開発者が楽になる
機能もある
– メジャーな言語であればDockerfileなどを作成しなくてもBuildpackで簡単にプロビジョニ
ング
– MySQL,PostgreSQL,Redis,Memcached,ElasticSearch,MongoDB等
• 開発者の手元からコンテナ内へコマンド一発でログインできるなどデバッグも容
易
Gitリポジトリとの連携
– Webhookを受ける連携Webアプリケーション
をDokkuにあらかじめデプロイしておく
– clone後ハッシュ値にcheckoutしてからdokkuへ
push
git clone & git checkout
git push
Webhook
ちょっとデモ
• Masterからブランチを作成
• デザインを変更してpush
• Webhookから連動してブランチをデプロイ
したコンテナが作成
• コンテナ内にログインしてデバッグ
他にどんなアプリケーションが作れる?
• Webアプリケーションサーバ
• バッチ/ワーカサーバ
– HerokuのBuildpackが対応している言語
• Ruby,Node,Python,Scala,Go,PHP,Clojure…
– プロビジョニング済みのDockerイメージ
• ストレージサーバ
– MySQL,PostgreSQL,Redis,mongodb,ElasticSearch
– その他AWSで用意されているサービスとも連携可能
結びと今後の展開
• DokkuとDockerを使うことで50-100環境を1ホストに同居
• 50環境とすると年間50万程度のコスト削減
• Dockerを本番環境はまだちょっと怖いという方もお試し
にどうぞ
• 開発環境に加えて社内システム、速度が要求される新規
事業開発系のプロジェクトにも適応を検討しています

Contenu connexe

Tendances

Tendances (20)

カーネル空間ですべてのプロセスを動かすには -TAL, SFI, Wasmとか - カーネル/VM探検隊15
カーネル空間ですべてのプロセスを動かすには -TAL, SFI, Wasmとか - カーネル/VM探検隊15カーネル空間ですべてのプロセスを動かすには -TAL, SFI, Wasmとか - カーネル/VM探検隊15
カーネル空間ですべてのプロセスを動かすには -TAL, SFI, Wasmとか - カーネル/VM探検隊15
 
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版
 
ShangriLa Anime APIを利用してアニメ関連のビッグデータ解析を最速で行う
ShangriLa Anime APIを利用してアニメ関連のビッグデータ解析を最速で行うShangriLa Anime APIを利用してアニメ関連のビッグデータ解析を最速で行う
ShangriLa Anime APIを利用してアニメ関連のビッグデータ解析を最速で行う
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
地理分散DBについて
地理分散DBについて地理分散DBについて
地理分散DBについて
 
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
 
Consulを頑張って理解する
Consulを頑張って理解するConsulを頑張って理解する
Consulを頑張って理解する
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
Embulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderEmbulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loader
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
 
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSSYahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
 
SQLアンチパターン メンター用資料
SQLアンチパターン メンター用資料SQLアンチパターン メンター用資料
SQLアンチパターン メンター用資料
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 

Similaire à Dokkuの活用と内部構造

Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
Masakazu Muraoka
 
[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"
[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"
[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"
t8kobayashi
 
Code4Lib 2010報告会・発表ダイジェスト
Code4Lib 2010報告会・発表ダイジェストCode4Lib 2010報告会・発表ダイジェスト
Code4Lib 2010報告会・発表ダイジェスト
Masao Takaku
 

Similaire à Dokkuの活用と内部構造 (20)

Zynga
ZyngaZynga
Zynga
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
Ruby on rails on hudsonの活用事例
Ruby on rails on hudsonの活用事例Ruby on rails on hudsonの活用事例
Ruby on rails on hudsonの活用事例
 
OSSとクラウドによるコンピューティングモデルの変化
OSSとクラウドによるコンピューティングモデルの変化OSSとクラウドによるコンピューティングモデルの変化
OSSとクラウドによるコンピューティングモデルの変化
 
PaaS / Cloud Foundry makes you happy
PaaS / Cloud Foundry makes you happyPaaS / Cloud Foundry makes you happy
PaaS / Cloud Foundry makes you happy
 
Docker 再入門 2016 update
Docker 再入門 2016 updateDocker 再入門 2016 update
Docker 再入門 2016 update
 
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 
AWSでシステム構築工数を1/10にしつつ、高品質化も実現した枠組みのご紹介
AWSでシステム構築工数を1/10にしつつ、高品質化も実現した枠組みのご紹介AWSでシステム構築工数を1/10にしつつ、高品質化も実現した枠組みのご紹介
AWSでシステム構築工数を1/10にしつつ、高品質化も実現した枠組みのご紹介
 
CloudStack再入門!15分でおさらいするCloudStackの基礎
CloudStack再入門!15分でおさらいするCloudStackの基礎CloudStack再入門!15分でおさらいするCloudStackの基礎
CloudStack再入門!15分でおさらいするCloudStackの基礎
 
JAWS DAYS 2015
JAWS DAYS 2015JAWS DAYS 2015
JAWS DAYS 2015
 
[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"
[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"
[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"
 
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
 
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践
 
2014.07.05 Drupal PaaS でASWを活用する(Kyoko Ohtagaki)
2014.07.05 Drupal PaaS でASWを活用する(Kyoko Ohtagaki)2014.07.05 Drupal PaaS でASWを活用する(Kyoko Ohtagaki)
2014.07.05 Drupal PaaS でASWを活用する(Kyoko Ohtagaki)
 
Code4Lib 2010報告会・発表ダイジェスト
Code4Lib 2010報告会・発表ダイジェストCode4Lib 2010報告会・発表ダイジェスト
Code4Lib 2010報告会・発表ダイジェスト
 
インドのインターネット環境 との戦い方
インドのインターネット環境との戦い方インドのインターネット環境との戦い方
インドのインターネット環境 との戦い方
 
第1回Hadoop関西勉強会参加レポート
第1回Hadoop関西勉強会参加レポート第1回Hadoop関西勉強会参加レポート
第1回Hadoop関西勉強会参加レポート
 
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
 
【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう
 

Dokkuの活用と内部構造