Upload
yusuke-wada
View
6.094
Download
4
Embed Size (px)
Citation preview
エロサイト管理者の憂鬱Ⅱ- How I build, operate, monetize, and tune up small web applications -
yusukebeYokohama.pm
2009/9/9
yusukebe
• Yusuke Wada / 和田裕介• 1981年12月23日生• 神奈川県鎌倉市鎌倉山• 株式会社ワディット代表取締役• 株式会社オモロキCTO
• 「yusukebe the Erogeek!」
yusukebe
• Yusuke Wada / 和田裕介• 1981年12月23日生• 神奈川県鎌倉市鎌倉山• 株式会社ワディット代表取締役• 株式会社オモロキCTO
• 「yusukebe the Erogeek!」
“Kailas”
• Yet Another BPM Framework
• 9/10 13:45 -
• ワディットコーポレートトラック• Masanori will talk!
What I’ve done.
• About 10 web applications• About 10 ero sites
Total PV
600,000 pv over / 1day
How I
BUILDOPERATEMONETIZETUNE UP
these small web applications.
Why I make small web applications?
• 楽しい• セルフ・ブランディング• 勉強• お金• 全て一人でできる!
– 企画・開発・運用・マーケティング・プロモーション
1. BUILD
Off course
using Perl !
Perl
• use Catalyst (5.7系)
• use Mouse (not Moose)
• use DBIx::Class
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
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
use Mouse in the service layerpackage 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__
./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__
たくさん作って自分なりのスタイルを作ること
素早い開発が可能に!
フロントエンドはライブラリを有効活用しよう!
JavaScript
• jQuery
• jQuery UI
• Shadowbox
CSS
• jQuery UI
• YUI
できないHTMLデザインは他の人の力で解決しよう
HTML Themes
• WooThemes– http://www.woothemes.com/
• Open Source Web Design– http://www.oswd.org
2. OPERATE
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
自宅サーバールーム(納戸)
Front
Router
2 UPS
iSCSI
FS
App / Q6600
DBBokete App
App / sc1435
ec2自宅
FrontApache 2.2
Amazon S3
FSNFS
AppApache 2.2 with mod_perl
DBMySQL 5
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>
from httpd.conf on AppKeepAlive OffLoadModule perl_module /usr/lib/apache2/modules/mod_perl.soLoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf-2.0.soRPAFenable OnRPAFsethostname OffRPAFproxy_ips 192.168.1.11 127.0.0.1
Listen 8102PidFile /var/run/apache2/twib.pid
StartServers 1MinSpareServers 4MaxSpareServers 12MaxClients 24MaxRequestsPerChild 10000
PerlSwitches -I/home/yusuke/www/pulpsite/Twib/libSetHandler perl-scriptPerlHandler Twib::Web
Using S3 as Front-end Server
3. MONITIZE
収入源は基本的にアフィリエイト
– DTI, sbs, DMM, Amazon, Rakuten, etc.– AdSense
• 気楽でいい• 成果報酬• 継続報酬
単純だけど基本原理
運用コスト収入=
アクセス
運用コストを下げれば儲かる=
サーバーの台数を減すんだ=
1台でまかなえる処理数を増やす=
ソフトウェアチューニング!
4. TUNE UP
Basic tuning
• ゆーすけべー日記「YourAVHost その後」– YourAVHostのページ内に含まれる画像を全て mod_perl の apache でサーブしていた– そこで画像を全て static なコンテンツを扱う apache2 でサーブさせようとしたが、キャッ
シュの設定、具体的には mod_expire の設定を何もしていなかった
– mod_perl で処理する必要の無い静的コンテンツは mod_perl で扱うな– 静的コンテンツには mod_expire で Expires ヘッダーをつけてキャッシング
させよ
Web App
use Worker; # on Twib
Q4MStream Reader
DB
Fecher
use AnyEvent::Twitter::Stream;
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
それPla
Plack HACKS
それPlackでやりなよ
“Noe” based on Plack
Other tips
• use Cache::FileCache; # on ec2
• 意図的なdbの非正規化• mod_perl の Cow なメモリ共有を増やす
More…
そこで(内緒だよ♡)
おかげで
ルータ交換しました^ ^ ;
今後
• 継続するサービスを– コンテンツ– 運用
• 更なる省力化– Front-end レイヤーでの File Cache
Wrap up
• Building a small web application is fun.
• アプリケーションの最適化は奥が深い• けれども個人で様々な工夫ができる!
– 開発– 運用– マネタイズ– チューニング
Make your own web applications !
END