運営実績19年目のサービスであるyoubrideでのやっていきについて話しました
老舗マッチングサービスとの付き合い方@SAMUKEI
View Slide
who?● さむけい(藤田 雄大)● 所属はDiverse Inc.とMAEMO LLC● youbrideのサーバ・クライアントやってます● 会社でPodcast配信してます。聴いてください!https://podcast.diverse-inc.com/● 名刺作ったので、記念に名刺交換しましょう →→→
オンラインカジュアル シリアスオフライン
突然ですがyoubrideは1819年目のサービスです
Perlオンプレコメントの無いコード歴史が長いが故の問題・・・オーパーツ化したツール野生化した仕様肥大化したベースクラス
逃避したい現実・・・
逃避してはいられない!!!
解決したい課題● Perlからの脱却○ Rubyにすることは確定!○ 全部の置き換えは、コード/仕様が膨大で難しい● 野生化した仕様、複雑なコード○ リニューアルというビッグワードで解決(しない)● オンプレからの脱却○ ハードウェアパワーに頼る部分があるので難しい○ 当分オンプレのままで Ruby書き換え後に検討● オーパーツ化したツール(開発環境)○ メンテナンスがされていない○ 機能としては、現代(2018年)でも十分通用する! (はず)
解決したい課題● Perlからの脱却○ Rubyにすることは確定!○ 全部の置き換えは、コード/仕様が膨大で難しい● 野生化した仕様、複雑なコード○ リニューアルというビッグワードで解決(しない)● オンプレからの脱却○ ハードウェアパワーに頼る部分があるので難しい○ 当分オンプレのままで Ruby書き換え後に検討● オーパーツ化したツール(開発環境)○ メンテナンスがされていない○ 機能としては、現代(2018年)でも十分通用する(はず)=> まずはRubyを進めるために、開発環境を整えよう!
現在の開発環境(オーパーツ化したツール)
実際の動きブランチからサブドメインを振った環境ができる!すごい!※ 元々はlivedoorサービスの開発用環境を輸入したらしいです
実現している要件● オンプレで動く● リポジトリからブランチ一覧を取ってくる● ブランチを開発環境にデプロイ● サーバにブランチ名のサブドメインを振る● Webフロントでの操作
課題● メンテナーがいない● Shell & Perlの職人技で、読み解くのが難解● youbrideに特化しているため、汎用的な利用ができない
まずは要件を満たそう
要件● オンプレで動く● リポジトリからブランチ一覧を取ってくる● ブランチを開発環境にデプロイ● サーバにブランチ名のサブドメインを振る● Webフロントでの操作
Dokkuを使う
Dokkuが満たしてくれる要件● オンプレで動く● リポジトリからブランチ一覧を取ってくる● ブランチを開発環境にデプロイ● サーバにブランチ名のサブドメインを振る● Webフロントでの操作
Dokkuとは● DockerをベースとしたHerokuクローン● DokkuのGitリポジトリにPushするだけでサービスがデプロイされる● もちろんオンプレで動く※ Pivotal Cloud Foundryも有名だが、今回の用途では多機能すぎるため選定候補から除外
Dokkuのインストール(1)$ wget https://raw.githubusercontent.com/dokku/dokku/v0.12.12/bootstrap.sh$ sudo DOKKU_TAG=v0.12.12 bash bootstrap.shwgetしてコマンド叩くだけ
Dokkuのインストール(2)$ cat ~/.ssh/id_rsa.pub | sshcommand acl-add dokku ansibledokkuに公開鍵を設定する
自前で実装する要件● オンプレで動く● リポジトリからブランチ一覧を取ってくる● ブランチを開発環境にデプロイ● サーバにブランチ名のサブドメインを振る● Webフロントでの操作
WebフロントRuby + Sinatraで雑に作るだけ
今回作った環境Dokku
できた!
本当に?
Webフロント動かす方法は?別のサーバでも使える?依存関係どうするの?
本当に必要な要件● オンプレで動く● リポジトリからブランチ一覧を取ってくる● ブランチを開発環境にデプロイ● サーバにブランチ名のサブドメインを降る● Webフロントでの操作● サーバの移転に耐えられる環境構築● ソースをバージョン管理する● 属人化せずに他人がメンテナンスできる
Ansibleを使う
Ansibleとは● 構成管理ツールの1つ● 同じようなツールではChef, Itamaeなどがある● シンプルな記述(yaml)が可能● タスク毎に記述を分けられるので単純に管理可能● エージェントレスで動作するといった、インフラ側では有名なツールです※ 今回はAnsible自体は詳しくは説明しませんのでググってください
依存性のインストール(抜粋)- name: install yum reposyum:name: "{{ item }}"state: presentwith_items:- epel-release- https://centos7.iuscommunity.org/ius-release.rpm- name: install dependenciesyum:name: "{{ item }}"state: latestwith_items:- redis- nss- nss-util- nspr- makeyumで依存するパッケージを指定
Dokkuのインストール(抜粋)- name: get dokku bootstrapget_url:url: "https://raw.githubusercontent.com/dokku/dokku/v{{ dokku_version }}/bootstrap.sh"dest: /tmp- name: bootstrap dokkushell: "DOKKU_TAG=v{{ dokku_version }} bash /tmp/bootstrap.sh"Dokkuのインストールコマンドを実行
Webフロントのインストール(抜粋)- name: install yarnnpm:name: yarnglobal: yes- name: install bundlerbecome_user: "{{ ansible_ssh_user }}"gem:name: bundleruser_install: noexecutable: ~/.rbenv/shims/gemyarnとbundlerをインストール
結果的に・・・チーム内のメンバーからPRもらえた!属人化してないですね!
公開予定です!(公開時期未定)
おわり