• Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
5,675
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
0
Comments
0
Likes
4

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. エロサイト管理者の憂鬱Ⅱ - How I build, operate, monetize, and tune up small web applications - yusukebe Yokohama.pm 2009/9/9
  • 2. yusukebe • Yusuke Wada / 和田裕介 • 1981年12月23日生 • 神奈川県鎌倉市鎌倉山 • 株式会社ワディット代表取締役 • 株式会社オモロキCTO • 「yusukebe the Erogeek!」
  • 3. yusukebe • Yusuke Wada / 和田裕介 • 1981年12月23日生 • 神奈川県鎌倉市鎌倉山 • 株式会社ワディット代表取締役 • 株式会社オモロキCTO • 「yusukebe the Erogeek!」
  • 4. “Kailas” • Yet Another BPM Framework • 9/10 13:45 - • ワディットコーポレートトラック • Masanori will talk!
  • 5. What I’ve done. • About 10 web applications • About 10 ero sites
  • 6. Total PV 600,000 pv over / 1day
  • 7. How I BUILD OPERATE MONETIZE TUNE UP these small web applications.
  • 8. Why I make small web applications? • 楽しい • セルフ・ブランディング • 勉強 • お金 • 全て一人でできる! – 企画・開発・運用・マーケティング・プロモーション
  • 9. 1. BUILD
  • 10. Off course using Perl !
  • 11. Perl • use Catalyst (5.7系) • use Mouse (not Moose) • use DBIx::Class
  • 12. Catalyst application ディレクトリ構成 yusuke@dev:~/work/myapp/MyApp$ tree . . |-- db | |-- myapp.sql | `-- update_schema.pl |-- cli |-- myapp_web.yml |-- lib |-- root | |-- favicon.ico | `-- static | `-- images |-- script `-- t |-- 01app.t |-- 02pod.t |-- 03podcoverage.t `-- 11_api.t
  • 13. Catalyst application ディレクトリ構成 yusuke@dev:~/work/myapp/MyApp$ tree lib/ lib/ `-- MyApp |-- API | `-- Role.pm |-- API.pm |-- CLI |-- Schema |-- Schema.pm |-- Web | |-- Controller | | `-- Root.pm | |-- Model | | `-- API.pm | `-- View | `-- TTSite.pm `-- Web.pm
  • 14. use Mouse in the service layer package Twib::API; use Mouse; with 'Twib::API::Role'; no Mouse; sub get_popular_links { my ( $self, $args, $page, $rows ) = @_; $args ||= {}; $page ||= 1; $rows ||= 20; return $self->schema->resultset('Link') ->search( $args, { order_by => 'tweet_count DESC', page => $page, rows => $rows } ); } 1; __END__
  • 15. ./db/update_schema.pl #!/usr/bin/perl use strict; use warnings; use FindBin; use DBIx::Class::Schema::Loader qw/make_schema_at/; my $schema_class = "Twib::Schema"; my $connect_info = [ 'dbi:mysql:twib:localhost', 'root', '' ]; make_schema_at( $schema_class, { components => [qw/UTF8Columns InflateColumn::DateTime/], dump_directory => File::Spec->catfile( $FindBin::Bin, '..', 'lib' ), debug => 1, }, $connect_info, ); __END__
  • 16. たくさん作って自分なりのスタイルを作る こと 素早い開発が可能に!
  • 17. フロントエンドは ライブラリを有効活用しよう!
  • 18. JavaScript • jQuery • jQuery UI • Shadowbox
  • 19. CSS • jQuery UI • YUI
  • 20. できないHTMLデザインは 他の人の力で解決しよう
  • 21. HTML Themes • WooThemes – http://www.woothemes.com/ • Open Source Web Design – http://www.oswd.org
  • 22. 2. OPERATE
  • 23. Hardware • ec2: 5 instances ( 6 cores ) • 自宅: 1 front / 1 fs / 1 db / 2 app servers Software • debian etch • apache2.2 + mod_perl • MySQL • gearman, Q4M
  • 24. 自宅サーバールーム(納戸) App / sc1435 Bokete App DB Front App / Q6600 Router FS iSCSI 2 UPS
  • 25. 自宅 ec2 Front Apache 2.2 Amazon S3 App Apache 2.2 with mod_perl DB FS MySQL 5 NFS
  • 26. from httpd.conf on Front <VirtualHost *:80> ServerName twib.jp DocumentRoot /home/yusuke/www/pulpsite/Twib/root AllowEncodedSlashes On RewriteEngine On RewriteRule ^/(static/|favicon.ico) - [L] RewriteRule ^/(.*)$ http://192.168.1.22:8102/$1 [P,L] ExpiresActive On <FilesMatch ".(jpg|gif|png|ico|css|js)$"> ExpiresDefault "access plus 365 days" </FilesMatch> </VirtualHost>
  • 27. from httpd.conf on App KeepAlive Off LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf-2.0.so RPAFenable On RPAFsethostname Off RPAFproxy_ips 192.168.1.11 127.0.0.1 Listen 8102 PidFile /var/run/apache2/twib.pid StartServers 1 MinSpareServers 4 MaxSpareServers 12 MaxClients 24 MaxRequestsPerChild 10000 PerlSwitches -I/home/yusuke/www/pulpsite/Twib/lib SetHandler perl-script PerlHandler Twib::Web
  • 28. Using S3 as Front-end Server
  • 29. 3. MONITIZE
  • 30. 収入源は基本的にアフィリエイト – DTI, sbs, DMM, Amazon, Rakuten, etc. – AdSense • 気楽でいい • 成果報酬 • 継続報酬
  • 31. 単純だけど基本原理 運用コスト 収入 = アクセス
  • 32. 運用コストを下げれば儲かる = サーバーの台数を減すんだ = 1 台でまかなえる処理数を増やす = ソフトウェアチューニング!
  • 33. 4. TUNE UP
  • 34. Basic tuning • ゆーすけべー日記「YourAVHost その後」 – YourAVHostのページ内に含まれる画像を全て mod_perl の apache でサーブしていた – そこで画像を全て static なコンテンツを扱う apache2 でサーブさせようとしたが、キャッ シュの設定、具体的には mod_expire の設定を何もしていなかった – mod_perl で処理する必要の無い静的コンテンツは mod_perl で扱うな – 静的コンテンツには mod_expire で Expires ヘッダーをつけてキャッシング させよ
  • 35. use Worker; # on Twib Stream Fecher Reader Q4M use AnyEvent::Twitter::Stream; Web App DB
  • 36. use HTTP::Engine; yusuke@dev:~/work/XXX/trunk$ tree lib/ lib/ |-- XXX | |-- API.pm | |-- C | | |-- Root.pm | | `-- Video.pm | |-- ModPerl.pm | |-- Router.pm | |-- Schema | | |-- CaptchaImage.pm | | |-- Download.pm | | `-- Video.pm | `-- Schema.pm |-- SimpleApp | |-- Controller.pm | |-- ModPerl.pm | |-- Server.pm | `-- View.pm `-- WWW `-- YourFileHost `-- Break.pm
  • 37. それPla それPlack でやりなよ Plack HACKS
  • 38. “Noe” based on Plack
  • 39. Other tips • use Cache::FileCache; # on ec2 • 意図的なdbの非正規化 • mod_perl の Cow なメモリ共有を増やす
  • 40. More…
  • 41. そこで (内緒だよ♡)
  • 42. おかげで
  • 43. ルータ交換しました^ ^ ;
  • 44. 今後 • 継続するサービスを – コンテンツ – 運用 • 更なる省力化 – Front-end レイヤーでの File Cache
  • 45. Wrap up • Building a small web application is fun. • アプリケーションの最適化は奥が深い • けれども個人で様々な工夫ができる! – 開発 – 運用 – マネタイズ – チューニング
  • 46. Make your own web applications ! END