PHP
CentOS
クラウド
IDCFクラウド
Speedtest.net

Speedtest.netの速度測定サーバを構築してみた

はじめに

こんにちは、 @CloudRemix です。

alt
https://account.idcfcloud.com/auth/loginより引用

本日9月10日はクラウドの日です。
記念日ということで、クラウドを使った速度測定サーバの作り方をご紹介します。

Speedtest.netの速度測定サーバ???

Speedtest.net自体はご存知と思うので省略。

alt

早速ですが、Speedtest.netの速度測定サーバを構築とは?

自分だけの測定サーバを作ること?

残念!少し違います。

あまり知られていませんがSpeedtest.netは、Speedtest.netが用意したサーバではなく、有志が設置したサーバを使って速度測定を行っています。

そのため同じSpeedtest.netでも測定サーバによって結果が大きく異なります。

今回はこの速度測定サーバの作り方+有志サーバへの登録方法となります。

注意!1TB/Dayのネットワーク転送が発生します。設置は自己責任で・・

目次

  • サーバを選ぶ
  • OS・ミドルウェアのセットアップ
  • アプリケーションのセットアップ
  • サーバの申請

サーバの選び方

まずは、使用するサーバを選択しましょう。
選択肢としては自宅サーバ、VPS、クラウドが挙げられます。

公式サイトによると、最低でも1Gbpsの回線帯域が必要なため、ネットワークで選ぶと良いでしょう。
また、毎日500GB超1TB超の通信が発生するため、従量課金or速度規制にも注意が必要です。

CPU RAM Network Disk
最低 4コア 4GB 1Gbps 1GB
推奨 4コア 8GB 2Gbps 1GB

参考:Speedtest Server Requirements – Ookla
(1コア0.5GBでも普通に動きます。ネット帯域だけが重要です)

今回は3,240GBまで従量課金なし、2Gbps接続のIDCFクラウドを選択しました。
3日で無料枠を使い切ったので、今はCloudGarageを使っています。

個人的には、従量課金一切なしの Cloudn と CloudGarage が気になりましたが、

  • Cloudn - 回線帯域が不明 非公開だそうです
  • CloudGarage - BANの危険性あり(構築自体は問題はないが、他の利用者に影響がある場合は停止・制限措置とのこと)

ということで今回は見送ります。
基本的には、ネットワークに定評のあるWebARENAのVPSクラウド(6GB)か、SuitePRO V4(2G)がオススメです。

  • VPSクラウド(6GB):1Gbps、3,600円
  • SuitePRO V4(2G):2Gbps、8,400円~

転送量からWebARENAも無理です。

なお、自宅サーバ(家庭用回線)はプロパイダーによる総量規制(30GB/日?)があるため避けたほうが良いでしょう
VPSはそもそも1Gbpsも帯域がないため、論外です。(↓参照)
参考:VPS・クラウドのネットワーク仕様一覧 - Qiita

サーバのセットアップ

使用するサーバを選択したら、OS・ミドルウェアをセットアップしましょう。
ウェブサーバとアプリケーションが動作すれば、ソフトウェアに制限はありません。(Windows ServerもOK)
参考:Speedtest Server Requirements – Ookla

言語はPHP, ASP, ASP.NET,JSPのいずれかとなります。
今回はCentOS7 / nginx / PHPの組み合わせとしました。

OSのセットアップ

実際にセットアップをしていきます。
各ソフトウェアの設定は各自におまかせですが、ポート開放は必須です。(あとドメインの割り当て)

ポート開放とドメイン

最低2つのポート開放が必要となります。ポート番号は80+8080です。
IDCFクラウドでは、標準で無料FW、ルータが用意されていますので、管理画面から80ポートと8080ポートを開放するだけとなります。

また、IP直打ちはダメらしいので、ドメインを割り当てます。
ドメイン設定は省略

以下ソフトウェアのセットアップ。参考程度に

nginx

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum -y install nginx

mkdir -p /var/www
mkdir -p /var/lib/nginx/fastcgi

cd /etc/nginx/
mv nginx.conf nginx.conf.backup
vi nginx.conf

config

nginx.conf
user              nginx;
worker_processes auto;
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
events {
    worker_connections  2048;
    multi_accept on;
    use epoll;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    access_log  /var/log/nginx/access.log;
    keepalive_timeout 5;
    client_max_body_size    10m;
    server_tokens     off;
    server_name_in_redirect off;
    server {
        listen 80;
        root        /var/www;
        charset     utf-8;
        location ~ [^/]\.php(/|$) {
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        }
    }
}

PHP

必要なパッケージは各自で確認してください

yum -y install --enablerepo=epel,remi-php71 php php-devel php-fpm php-gd php-mbstring

sed -i 's/apache/nginx/g' /etc/php-fpm.d/www.conf
sed -i 's/listen = 127.0.0.1:9000/listen = \/var\/run\/php-fpm\/php-fpm.sock/g' /etc/php-fpm.d/www.conf
sed -i 's/listen.mode = 0660/listen.mode = 0660\nlisten.owner = nginx\nlisten.group = nginx/g' /etc/php-fpm.d/www.conf
sed -i 's/;clear_env = no/clear_env = no/g' /etc/php-fpm.d/www.conf
chown -R nginx:nginx /var/lib/php/

起動

systemctl start php-fpm.service
systemctl start nginx.service
systemctl enable php-fpm.service
systemctl enable nginx.service

アプリケーションのセットアップ

OS・ミドルウェアが用意できたら、いよいよ速度測定のアプリをインストールします。
フロントエンドはダウンロードして展開するだけですが、バックエンドは少々複雑です。
参考:Installing HTTP Legacy Fallback – Ookla

フロントエンド

cd /var/www/
wget http://install.speedtest.net/httplegacy/http_legacy_fallback.zip
unzip http_legacy_fallback.zip
rm -f http_legacy_fallback.zip
rm -f speedtest/upload.asp
rm -f speedtest/upload.aspx
rm -f speedtest/upload.jsp

バックエンド

同様にダウンロードして展開しますが、こちらは設定の編集と起動が必要となります。
また、セキュリティ上の理由から専用ユーザが推奨されていますので、新たにユーザを作成します。

useradd ookla
passwd ookla

su ookla
cd
mkdir ooklaserver
cd ooklaserver
wget http://install.speedtest.net/ooklaserver/ooklaserver.sh
chmod a+x ooklaserver.sh

インストール

./ooklaserver.sh install

#64bitOSなら y 押下
This will install the Ookla server for linux64 to the current folder. Please confirm (y/n) >

設定の編集は最低3ヶ所(上側は必須)
参考:OoklaServer Daemon Advanced Configuration – Ookla

OoklaServer.properties
vi OoklaServer.properties

OoklaServer.allowedDomains = *.ookla.com, *.speedtest.net #コメントを除去

OoklaServer.tcpPorts = 5060,8080
#↓ポートの指定
OoklaServer.tcpPorts = 8080

OoklaServer.udpPorts = 5060,8080
#↓ポートの指定
OoklaServer.udpPorts = 8080

OoklaServer.maxThreads = 512
#↓お好みで(マルチセッションの最大値、負荷軽減)
OoklaServer.maxThreads = 32

自動起動を設定

su -
chmod +x /etc/rc.d/rc.local
vi /etc/rc.d/rc.local

#su ookla -c '/home/ookla/ooklaserver/OoklaServer --daemon'

reboot

動作確認

テスターが公開されているので、必ず動作確認を行いましょう。
alt

記入例

全項目がPASSEDとなればOK

サーバの申請

セットアップが終わって、動作確認もできたら早速有志サーバとして申請します。(これで終わりです)

http://www.ookla.com/host

利用条件等に同意して、
alt

項目を埋めていきます。

  • Server Installation
    • Ookla Server:ホスト名(テスターの一番上の項目)
  • Hardware Information
    • Current Processor:CPUのコア数
    • Memory Amount:物理メモリサイズ
  • Connection Information
    • Available Bandwidth:回線帯域
    • Uplink/Ethernet Connectivity:回線帯域
  • Hosted By Credit(この部分は公開されます)
    • Sponsor Name:サーバ名
    • Sponsor URL:サーバ名のリンク先
    • Server City:サーバの区市郡町村
    • Server State or Region:サーバの都道府県
    • Country:Japan。

alt

すべての項目を埋めたら、SUBMITをクリックして、申請完了です!!

すぐに確認の自動送信メール(件名:Ookla.com Account Registration)が届き、審査待ちとなります。

2,3日程で審査結果が届くので、ゆっくり待ちましょう。
合格していれば、管理者用のアカウント情報、そして専用のカスタムドメインがメールに記載されています。

アカウント情報は、専用サイトにログインすることで、自身の測定サーバで測定された結果を見れます。
alt

一言

ネットの情報から1日300GBほどかな~と思っていたけど、
開始1日で600GB1TBを軽く超えた・・・。

九州地域のサーバが少ないようです。私(福岡)と鹿児島だけです。
誰か従量課金がなくて、1Gbps接続の格安サーバ(西日本)を知っていれば教えてください。(切実)

参考

Speedtest Servers – Ookla
Speedtest.net by Ookla ホスト登録 – がとらぼ
oklaServer(Speedtest.net ホスト)のセットアップのやり方 | ichigo-lab BLOG
peedtest.netの測定サーバ提供はじめました。 – satoweb-blog