2013-09-24

文系大学生夏休みエロサイトを作った、そのまとめ(結構長文)

こんばんは、都内大学に通う文系大学生です。

夏休み彼女もおらず暇なので、わかりやすエロサイト自分用に作ってみることにしました。

なお作者はプログラムに関しては、一般教養の授業でC言語に軽く触れた程度の素人です。

最初iPhoneアプリを作ろう!と意気込んていたのですが、ふぇぇメモリ管理が難しいよう、となりやめました。やっぱりWebだよね。

作成サイト

Xvideos動画

http://av-sexvideos.com/

コンセプトとしては、AV女優リストからエロ動画自動収集し、掲載するサイトとなっております

開設してまだ1週間ほどしか経っておらず、まだほとんど人は来てません。

まぁ自分用だしいいかなと思っております

なお、リンク切れ自動で検出するようにできております

エロサイトを作るにあたってやらなきゃいけないこと

幸いにも作者の周りには、プロデザイナーSEがいたので助けていただきました。

動作環境の選定

まずは素人なんだし、言語を選ばなきゃ話にならんだろJK、ということで知人のSEから話を聞き、言語Ruby1.9.3、フレームワークRuby on Rails3.2.13を選定しました。

速度はそこまで速くないらしいのだけど、とてもサクサク開発できるとのことです。PHPコードが読みにくいからやめとけとの事でした。


OSwindowsがいいなーと思っていたのですが、「ライセンス料が高いよ。。。」とのことでしたので、Linuxを覚えることにしました。

今回はUbuntuを使っております。他にはCentOSやらFedoraやらがいいらしいのですが、yumよりもaptだなということでこちらは見送りました。


データベースにはMySQL5.5を使用しております無料で使えて速く、クラスタリングにも対応しているので今のところはベストチョイスですね。

内部ではInnoDBを使用していますトランザクションが使えないと困るのでMyISAMは使っていません。全文検索を使う場合には他にいろいろと方法があるのでも特に問題は無いと思っております


WebサーバーAPサーバーにはApache2とPassengerを使っております。今更Apacheを使っちゃう男ってどうなの?なんでNginxじゃないの?と思われるかもしれませんが、Apacheデフォルトのpreforkではなく、workerを使えばなかなか速いです。

workerはマルチスレッドなので、プロセス間でメモリを共有するため、安定性に関してはpreforkに劣るかもしれませんが、速度面では圧倒的に速いです。


これらを設定したサーバー海外VPSの老舗であるlinodeから2インスタンス借り、運用しております。(メモリ4G、8コア)


L4スイッチは設置しておらず、DNSラウンドロビンとマスタスレーブ方式で負荷分散を行っております

データの取得(スクレイピング

とにかく自分が好きな女優エロ動画を欲しかったので、データの取得から始めることにしました。

使用ライブラリはNokogiri、mechanizeです。この2つを用いて、以下の2つのクローラー作成しました。

gsub、scanmapにはお世話になりました。正規表現大事ですね。

デザイン作成

なるべく見やすく、シンプルサイトを心がけました。ふぇぇスマートフォンだと見難いよう、なんてことの無いようにモバイルファーストを心がけ、レスポンシブなサイト作成しました。

今回使用したのは、Twitter Bootstrapというフレームワークです。様々なパーツが最初から揃っているのでサクサクデザインを組み立てることができます

ただ標準だとちょっとダサい(失礼)ので、それなりにカスタマイズして使っています。今回はフラットで、ピンクデザインを目指しました。ポイントは下記。

なおレスポンシブに対応する際に、CSSMedia Queriesだけでは対応できない箇所はenquire.jsを使用しております。表示するwindowのサイズによってJQueryイベントを叩いたりできて便利です。

アプリケーション作成

前述したとおり、Ruby on Railsの3.2を使っておりますRails4でも良かったのですが、バグが起こった時に面倒そうだったので、安定してきている3.2を採択しました。

@amatsudaさんのkaminariが便利でした。

インフラ周りのチューニング

ここはじっくり時間をかけました。Railsは適切にチューニングをしてやらないと遅いです。特にルーティングが遅い。

abでベンチマークをした結果、チューニング前のページだと1サーバー100req/sほどしかさばけません。

Rails側のチューニング
MySQLチューニング

今回、Memcachedは一切使用しませんでした。というのもMySQL自体キャッシュ機能を持っているので、サブクエリなどを使わければあまり効果が無いと判断たからです。

しろMemcachedを使ったほうが、遅くなるケースも多々あるかと思います

my.cnfで以下の項目をいじりました。

今回はページ数もそこまで多くないため、これでなんとかなりましたが、ログイン機能を使ったものだと若干面倒かもしれません。

Apache2のチューニング

前述のとおり、preforkではなく、workerを使いました。DBAPも同じ筐体に入っているので、設定自体は控えめにしました。Apache遅いよーと言う前に、一度workerにしてチューニングをしてみるとApacheへの見方が変わるかと思います

  • StartServers 5
  • ServerLimit 10
  • ThreadLimit 100
  • MaxClients 1000
  • MinSpareThreads 25
  • MaxSpareThreads 75
  • ThreadsPerChild 100
  • MaxRequestsPerChild 0

これだけで、ページにもよりますが、平均して1サーバー1500req/sさばけるようになりました。2台なので3000req/sでしょうか。

SEO


初心者でも夏休みという1ヶ月半くらいで、ここまで作れるようになりました。

このAV女優もっと掲載してほしい!や、ここはダメだなというご意見、お待ちしております

9/25追記

今回読んだ本を抜粋して紹介します。

大規模サーバーチューニング技術が学べます

Amazon.co.jp: 実践 Web Standards Design ~Web標準の基本とCSSレイアウト&Tips~: 市瀬 裕哉, 福島 英児, 望月 真琴: 本

HTMLCSSはこれで

Amazon.co.jp: Ruby on Rails 3 アプリケーションプログラミング: 山田 祥寛: 本

Railsはこれ一冊である程度まかなえます

Railsで困ったときはこれで

MySQLチューニングはこれで

お前のようなシロウトいるか 化けるんならIT土方にでも化けるんだったな

ツッコミありがとうございます

最初はcotEditorを使っておりましたが、知人からemacsを使えよ」と駄目だしされたのでそれを使っております辛いですが頑張ってます

こんなサイトも作ってみました。知人と共同で作っている女性向けサイトです。

http://av-girls.me/

トラックバック - http://anond.hatelabo.jp/20130924220221

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん