Linux daemonと
supervisordの美味しい関係
python,RoRのアプリの素敵なデーモン化
@myb1126
(Daemon)アプリを作るときに、
覚える事が超たくさん
Application

framework

色んな言語
セキュリティ
データベース
apache

HTTPD

init
Kernel
新人に言われた一言
Application

framework

HTTPD

init
Kernel

initってなんですか?
(  Д ) ゚ ゚
よくよく考えて見れば昔はシンプルなところからスタートして
全部自分でやらなければならなかった。
!
しかし、考えてみて欲しい。

お前は何を考えて、
$ sudo /etc/init.d/****d restart を
打ってるんだ!
!
!
...
コンフィグだけで
良くなってきてた。

プログラミング

Application

Webアプリ

framework

rails

WSGI
(python)

php

passenger

mod_wsgi

mod_php

modu...
最近は、一介のプログラマが触
る領域は赤線部分ですよね。
(色んなフェーズを飛ばしますが)
Application

framework

HTTPD

daemon

nginx
(rproxy
+static
file dist)

mod_...
赤線の部分の話をします。
Application

framework

mod_authn
HTTPD

framework
+
その言語用の
サーバ

nginx
Apache
init
Kernel

コンフィグ(他の人の仕事)
最近の動向
•

nginx (えんじんえっくす)
•
•

•

超高速フロントエンドサーバ&リバースプロキシ
情報が多くなってきた。ので、今回は対象外

Apache
•
•

•

認証モジュールが豊富
過去のノウハウでみんな生きてる?有...
そもそもdaemonとは
•

daemon
•
•

•

Linuxの(Windowsで言うところの)サービス
nginx / apache/ sambaなども全部daemon

作り方
•

fork、親(fork元)は死ぬ
init.d
•

Linuxの起動時に走るプロセス(init)から呼び出されるスクリプトの配置ディ
レクトリ

•

便利なユーティリティ(シェル関数)が用意されている
•
•

•

ubuntu /lib/lsb/init-functio...
supervisord
•

汎用のdaemon化ツール

•

daemon共通の設定(ログファイル等)を扱い、プロセスをdaemon化する。

•

やってること
•

forkした後、コマンドでオプションを渡して起動

•

設定は、in...
init.d
init

****d(親)

****d(子)

fork
fork
init+supervisord
init

supervisord

****d

fork
iniファイル
読み込み
fork
****dって?
•

各フレームワークごとにサーバがある。
•

python:WSGI仕様のサーバ:gunicorn,uwsgi 等

•

Ruby on Rails:unicorn,thin,passenger,mongrel 
等

...
個人的おすすめ
•

各言語
•
•

•

python: gunicon
ruby on rails : unicorn

加えて、以下の機構を利用する。
•

unicornherder <https://github.com/
alph...
unicornherder って何?
•

gunicorn / unicorn のラッパー

•

WSGI準拠のpythonアプリと、railsアプリを同様の設定で動かすこと
が出来る!!!

•

起動方法
•

•

unicornhe...
アーキテクチャが
統一できました!!
Apps on
framework

Application
自作App

!
!

redmine等

framework

gunicorn

unicorn

mod_authn
HTTPD

uni...
※
•

supervisord は、pipから導入すると、init scriptを自分で配置しなければならな
い。
•

•

<https://github.com/Supervisor/initscripts>

ここまでの内容を元に、試...
まとめ
•

最近調べてた&教えなきゃいけないインフラ?周
りのことについて共有

•

/etc/init.d/***d はdaemon起動スクリプト

•

pythonやRoRアプリのデーモン化は、
supervisord + unico...
ご閲覧ありがとうございました。

Happy Daemon Life !

http://bit.ly/1j6tDsR
Upcoming SlideShare
Loading in …5
×

Linux daemonとsupervisordの美味しい関係

4,924 views

Published on

Supervisordとinit.dの起動の図やらなんやら。
合わせてこちらもご参照ください。
http://d.hatena.ne.jp/graceful_life/20131201/1385912995

Published in: Technology
0 Comments
12 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,924
On SlideShare
0
From Embeds
0
Number of Embeds
629
Actions
Shares
0
Downloads
23
Comments
0
Likes
12
Embeds 0
No embeds

No notes for slide

Linux daemonとsupervisordの美味しい関係

  1. 1. Linux daemonと supervisordの美味しい関係 python,RoRのアプリの素敵なデーモン化 @myb1126
  2. 2. (Daemon)アプリを作るときに、 覚える事が超たくさん Application framework 色んな言語 セキュリティ データベース apache HTTPD init Kernel
  3. 3. 新人に言われた一言 Application framework HTTPD init Kernel initってなんですか?
  4. 4. (  Д ) ゚ ゚
  5. 5. よくよく考えて見れば昔はシンプルなところからスタートして 全部自分でやらなければならなかった。 ! しかし、考えてみて欲しい。 お前は何を考えて、 $ sudo /etc/init.d/****d restart を 打ってるんだ! ! ! ! しかし、ここで貶すのは簡単だが、今の現状を見つめなおしてみたい。
  6. 6. コンフィグだけで 良くなってきてた。 プログラミング Application Webアプリ framework rails WSGI (python) php passenger mod_wsgi mod_php module HTTPD Apache コンフィグ init Kernel ちょっと前まではこんな感じでしたよね
  7. 7. 最近は、一介のプログラマが触 る領域は赤線部分ですよね。 (色んなフェーズを飛ばしますが) Application framework HTTPD daemon nginx (rproxy +static file dist) mod_authn framework + その言語用の サーバ Apache init Kernel コンフィグ (他の人の仕事) プログラミング コンフィグ
  8. 8. 赤線の部分の話をします。 Application framework mod_authn HTTPD framework + その言語用の サーバ nginx Apache init Kernel コンフィグ(他の人の仕事)
  9. 9. 最近の動向 • nginx (えんじんえっくす) • • • 超高速フロントエンドサーバ&リバースプロキシ 情報が多くなってきた。ので、今回は対象外 Apache • • • 認証モジュールが豊富 過去のノウハウでみんな生きてる?有用な情報が少なめ。一時期みんなSSOとかで盛り上がって たのに。(オワコン?) フレームワーク • サーバが乱立&フレームワークごとでノウハウが分散 • 同じ役割を担っているにも関わらず、各情報に中々 • と言うか単一のフレームワークでも死ぬ りつけない。
  10. 10. そもそもdaemonとは • daemon • • • Linuxの(Windowsで言うところの)サービス nginx / apache/ sambaなども全部daemon 作り方 • fork、親(fork元)は死ぬ
  11. 11. init.d • Linuxの起動時に走るプロセス(init)から呼び出されるスクリプトの配置ディ レクトリ • 便利なユーティリティ(シェル関数)が用意されている • • • ubuntu /lib/lsb/init-functions centos /etc/rc.d/init.d/functions やってること • 一般的な操作の定義:start/stop/restart/status等のインターフェース を提供 • pidfile名やオプションをコマンドオプションなどで渡す。
  12. 12. supervisord • 汎用のdaemon化ツール • daemon共通の設定(ログファイル等)を扱い、プロセスをdaemon化する。 • やってること • forkした後、コマンドでオプションを渡して起動 • 設定は、iniファイルに記載 • 面倒くさいお決まりの起動スクリプトを書かなくて良い!!! • (但しsupervisordのinitscriptは、自分で配置しなければならない。 ※後述)
  13. 13. init.d init ****d(親) ****d(子) fork fork
  14. 14. init+supervisord init supervisord ****d fork iniファイル 読み込み fork
  15. 15. ****dって? • 各フレームワークごとにサーバがある。 • python:WSGI仕様のサーバ:gunicorn,uwsgi 等 • Ruby on Rails:unicorn,thin,passenger,mongrel  等 • その他自作プログラムでももちろん可能! • プロトタイピング時、実運用時プロダクトの特性に合わ せて、サービスを作ろう!
  16. 16. 個人的おすすめ • 各言語 • • • python: gunicon ruby on rails : unicorn 加えて、以下の機構を利用する。 • unicornherder <https://github.com/ alphagov/unicornherder>
  17. 17. unicornherder って何? • gunicorn / unicorn のラッパー • WSGI準拠のpythonアプリと、railsアプリを同様の設定で動かすこと が出来る!!! • 起動方法 • • unicornherder -u (gunicorn ¦ unicorn ¦ gunicorn_django) ̶ pidfile (pidfile) ̶ hogehoge 参考 • zero-downtime deployments with unicorn and supervisors <http://bit.ly/InqWFu>
  18. 18. アーキテクチャが 統一できました!! Apps on framework Application 自作App ! ! redmine等 framework gunicorn unicorn mod_authn HTTPD unicornherder nginx Apache supervisord init Kernel 構築手順は教えるの面倒くさいけど、
  19. 19. ※ • supervisord は、pipから導入すると、init scriptを自分で配置しなければならな い。 • • <https://github.com/Supervisor/initscripts> ここまでの内容を元に、試してみてね • • • 起動スクリプト /etc/init.d/supervisord 設定ファイル  /etc/sysconfig/supervisord debugは、shellなのでお決まりの方法で出来ます。 • sh -x /etc/init.d/supervisord (start¦restart¦stop) • (これが言いたいがために超遠回りした。。。)
  20. 20. まとめ • 最近調べてた&教えなきゃいけないインフラ?周 りのことについて共有 • /etc/init.d/***d はdaemon起動スクリプト • pythonやRoRアプリのデーモン化は、 supervisord + unicornherderを使うと便利 • Linuxの常識を覚えたり、アーキテクチャの統一し たり、shell scriptなんかも大事!
  21. 21. ご閲覧ありがとうございました。 Happy Daemon Life ! http://bit.ly/1j6tDsR

×