KAROUSHI -Japanese Engineer Blog-

コボルドからドラゴンへ -Kobold to Dragon-

システムエンジニアのブログです。サイト名は「雑魚キャラからボスキャラへレベルアップしたい!」という思いを込めて命名しました。自分はやっとリザードマンになったくらいです。

S3でバケットを作成する

AWSのS3の画面デザインが大幅に変わりましたね。
新しいデザインでS3の基本的なことを学びましょう。


目次

S3にバケットを作成する

AWSのホーム画面から上部メニューから[サービス]→[S3]でS3画面に行きましょう。
f:id:jainders:20170626000902j:plain

S3画面にきたら[バケットを作成する]からバケット作成画面へ行きます。
f:id:jainders:20170626000918j:plain

以下を入力して左下の[作成]ボタンを押しましょう。
バケットの作成画面です。
バケット名:一意のもの。またSSL対応するなら.(ピリオド)は入れないようにしましょう。
リージョン:特になければアジアパシフィック(東京)で。
f:id:jainders:20170626000934j:plain

バケットの作成が完了するとS3画面に先ほど作成したバケット名が表示されます。
f:id:jainders:20170626000948j:plain

バケットにファイルをアップロードする

作成したバケット名をクリックしてバケットの中に入ります。
[オブジェクトタブ]→[アップロード]でアップロード画面へ。
f:id:jainders:20170626000959j:plain

[ファイルを追加]を押すか、ドラッグアンドドロップでファイルを追加しましょう。
f:id:jainders:20170626001008j:plain

例ではtext.txtをアップロードしてみました。
アップロードが完了するとこのように追加されます。
f:id:jainders:20170626001021j:plain

また、アップロードしたファイルをクリックすると詳細画面に遷移し、そこの[ダウンロード]からダウンロードすることができます。
f:id:jainders:20170626001030j:plain

S3の基本的な内容は以上です。

IntelliJ IDEAのインストール手順

IntelliJ IDEAが最近注目を浴びていますね。有償版UltimateのPHPStromやWebStromが使いやすいとかなんとか。あとはGrails3をサポートしているのがIntelliJだけみたいですね。使ったことないですけど。
最近はSublimeTextやATOMを使っていたのですが、毎回同じものを入れているので正直最初から入ってた方が楽だなぁって思ったり。。。
やっぱ統合環境って一発インストールするだけである程度なんでもできるから楽ですよねー。
eclipseはUIが分かりづらいし重いし。。。というわけでIntelliJ IDEAをまずは入れてみました。こいつはJavaも対応しているし軽くて使いやすいならeclipseから移動しようかなぁと思ってます。
今回はまずはインストールまで紹介します。

目次

IntelliJ IDEAのダウンロード

まずはJetBrainsのサイトからIntelliJ IDEAをダウンロードしましょう。以下からアクセスして右上の[Download]を押してください。
IntelliJ IDEA: The Java IDE for Professional Developers by JetBrains
f:id:jainders:20170101223016j:plain

無償版と有償版が選べます。今回は無償版をダウンロードします。左のCommunityの[DOWNLOAD]を押しましょう。
f:id:jainders:20170101223018j:plain

以下画面でしばらく待つと自動的にダウンロードが始まるので、保存先を選んでダウンロードしてください。
f:id:jainders:20170101223020j:plain

IntelliJ IDEAのインストール

IntelliJ IDEAをダウンロードしたらexeを実行しましょう。すると以下画面になるので[Next]を押します。
f:id:jainders:20170101223536j:plain

インストール先の設定です。そのままで[Next]を押します。
f:id:jainders:20170101223538j:plain

デスクトップにショートカットを作成するかと、紐づける拡張子を選択します。またJREをまだインストールしてない場合は、JetBrainsのJREをインストールするか選択できます。
よく分からなければ以下のようにすればよいと思います。(32bitか64bitかは気にしたほうがいいですが。。。)
f:id:jainders:20170101223540j:plain

ここはそのままで[Next]を押しましょう。
f:id:jainders:20170101223541j:plain

インストールが始まるのでそのまま待ちます。
f:id:jainders:20170101223542j:plain

インストール完了画面です。そのままIntelliJ IDEAを起動する場合はチェックを入れて[Finish]を押しましょう。
f:id:jainders:20170101223543j:plain

IntelliJ IDEAの初回起動

初回起動時に表示され鵜画面です。IntelliJ IDEAの別バージョンをインストール済みの場合、以前の設定をインポートするか聞かれますが、初めてインストールする場合は必要ないので下の方を選んで[OK]しましょう。
f:id:jainders:20170101223545j:plain

UIの色を選択します。好きな方をどうぞ。私は右の黒い色にしました。
f:id:jainders:20170101223546j:plain

インストールするツールを選択します。特に変更する必要はありません。人によってはSVNを使わないのでチェックを外したりなどはありますね。[Next Featured plugins]を押しましょう。
f:id:jainders:20170101223548j:plain

ここはそのままで[Start using IntelliJ IDEA]を押しましょう。(ぶっちゃけ何の設定か分かりません。中で使うエディタですかね。)
f:id:jainders:20170101223549j:plain

そのままで待ちましょう。

Ansibleでnginxを簡単インストール

前回Amazon LinuxにAnsibleをインストールしてpingを送信するところまでやりました。今回は続きですのでAnsibleをインストールしていない人はまずは前回のインストールから実施してください。
Amazon LinuxでAnsibleを簡単インストール~ping送信まで - KAROUSHI -Japanese Engineer Blog-

今回はAnsibleでNginxをインストールしてみようと思います。これができれば環境構築のたびにインストールコマンドを繰り返す必要がなくなります。

目次

Ansible実行ユーザの用意

実行ユーザの作成

まずはAnsibleでログインするためのユーザを作成しましょう。
ログインできれば何でもいいので、すでにログインユーザがある場合は読み替えてください。

$ sudo useradd ansible
$ sudo passwd ansible
Changing password for user ansible.
New password: <任意>(今回はpasswd)
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

BAD PASSWORDと怒られますが気にしない。

実行ユーザのsudo権限付与

sudo権限でyumなどを実行する必要があるため、権限を付与しましょう。
以下コマンドを実行して★の行を追記してください。

$ sudo visudo

----------ファイルの中身----------
# Defaults specification
Defaults:ansible !requiretty ★

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
ansible ALL=(ALL)       NOPASSWD:ALL ★

ユーザパスワードログインの許可

Amazon Linuxではデフォルトでユーザのパスワードログインができないようになっているので許可しておきましょう。
以下PasswordAuthenticationのnoをyesに変えましょう。設定を変更したらsshdを再起動するのを忘れずに。

$ sudo vim /etc/ssh/sshd_config 
PasswordAuthentication no
→PasswordAuthentication yes

$ sudo service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

ユーザログインの確認

最後にansibleでログインできることを確認しましょう。パスワードは先ほど作成した時に入力したものです。(今回はpasswd)

$ ssh ansible@localhost
ansible@localhost's password: 
$ exit

プレイブックでNginxをインストールする

インベントリファイルの作成

Ansibleでは接続先情報をインベントリファイルに記載します。
インベントリファイルに複数のサーバ情報を記述する際に便利な記載方法があるが今回は説明しません。
今回は自サーバに接続するのでlocalhostと先ほど作成したansibleユーザの情報です。

$ mkdir -p ~/samplebook
$ cd samplebook/
$ vi hosts.yml 

----------中身----------
[localhost]
localhost

[all:vars]
ansible_ssh_user=ansible
ansible_ssh_pass=passwd

プレイブックの作成

ようやくプレイブックの作成です。今回行っているのは以下です。

  1. yumでNginxのインストール
  2. Nginx起動と自動起動化(chkconfigに登録)
  3. Nginxの起動確認
$ vim main.yml 

----------中身----------
- hosts: all
  become: yes
  tasks:
  - name: Nginxインストール
    yum: name=nginx state=latest
  - name: Nginx起動
    service: name=nginx state=started enabled=yes
  - name: Nginxの起動確認
    shell: ps aux | grep nginx
    register: ps_result
    changed_when: false
  - debug: var=ps_result.stdout_lines
    when: ps_result | success

プレイブックの実行

これで準備完了です。作成したインベントリと、プレイブックを指定したAnsibleコマンドを実行し、Nginxをインストール&起動しましょう。

$ ansible-playbook -i hosts.yml main.yml 

PLAY [all] *********************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [nginxインストール] *************************************************************
ok: [localhost]

TASK [nginx起動] *****************************************************************
ok: [localhost]

TASK [nginxの起動確認] **************************************************************
ok: [localhost]

TASK [debug] *******************************************************************
ok: [localhost] => {
    "ps_result.stdout_lines": [
        "root      4374  0.0  0.0  58084  1016 ?        Ss   14:14   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf", 
        "nginx     4376  0.0  0.3  58456  3932 ?        S    14:14   0:00 nginx: worker process                   ", 
        "root      8086  0.0  0.2 113084  2776 pts/3    S+   16:21   0:00 /bin/sh -c ps aux | grep nginx", 
        "root      8088  0.0  0.1 110460  2020 pts/3    S+   16:21   0:00 grep nginx"
    ]
}

PLAY RECAP *********************************************************************
localhost                  : ok=5    changed=0    unreachable=0    failed=0   

Nginxの画面確認

最後にhttp://へアクセスし、以下の画面が表示されれば正常にインストールして起動されています。
f:id:jainders:20170101012414j:plain

Amazon LinuxでAnsibleを簡単インストール~ping送信まで

今までLinux構築手順書を書いて、そこからコピー&ペーストして実行。。。というのを繰り返していました。それがChefやAnsibleなどの構成管理ツールの登場により従来のテキストエディタやエクセルで手順書を作成するというものから、構成管理ツールで手順を作成、実行。完成したらあとは配布すれば全く同じ環境ができるので楽です。
日本では多少歴史の長いChefが圧倒的シェアを誇っているようですが、使っている技術者に聞くとかなり学習コストが高いとのこと。どちらがよいか調べてみると後発のAnsibleがChefの悪いところが改善されてだいぶ使いやすくなり、学習コストも低いとこのことなので試しに使ってみました。
今回はAWS EC2のAmazon Linux上でAnsibleをインストールし、簡単なサンプルを動作させるところまで説明します。
これを読んでAnsibleに興味を持ってもったらぜひ現場で使いましょう!そして面倒で手間のかかる手順書作成やレビュー作業を止めて、作業時間を減らして少しでも早く帰りましょう!

目次

Ansibleをインストールする。

Amazon Linuxにはpipが初めから入っているのでそれでインストールします。
Amazon Linux以外の自前の環境でpipが入ってない場合は、easy_installでpipを入れてください。(え?easy_installも入ってないだって!?)

$ sudo pip install ansible

一応バージョンを確認してみると、2.2.0.0が入ってる模様。

$ ansible --version
ansible 2.2.0.0
  config file = 
  configured module search path = Default w/o overrides

ちゃんと応答が返ってきました。これでインストール完了です。
わーすっごい簡単!

localhostや他サーバへpingを打つ!

まずは初歩です。自分自身にpingを打ってみましょう。

$ ansible localhost -m ping
 [WARNING]: Host file not found: /etc/ansible/hosts

 [WARNING]: provided hosts list is empty, only localhost is available

localhost | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

WARNINGが出ていますが最初は気にしないでください。
今回はSUCCESSの文字が出ているのでlocalhost(自分自身)に対してpingが通っていることが分かります。

次はでたらめなIPに対してpingが通るか確認してみましょう。すると。。。

$ ansible 10.20.30.40 -m ping
 [WARNING]: Host file not found: /etc/ansible/hosts

 [WARNING]: provided hosts list is empty, only localhost is available

 [WARNING]: No hosts matched, nothing to do

とWARNINGが表示され、"ホスト名がマッチしなかったから何もしないよ"と表示されてしまいます。
えーじゃぁ自分以外のところにはどうやったらpingを送信できるんだ!
答えは/etc/ansible/hostsに書きます。
ですが現時点で存在しないので、まずはディレクトリとファイルを作成します。

$ sudo mkdir -p /etc/ansible/
$ sudo vim /etc/ansible/hosts
[test]
172.10.1.1

わざと存在しないサーバのIPアドレス(172.10.1.1)にしました。
ではtestに対してpingを送信してみましょう。

$ ansible test -m ping                                                                                                  172.10.1.1 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: ssh: connect to host 172.10.1.1 port 22: Connection timed out\r\n", 
    "unreachable": true
}

ちゃんと172.10.1.1にpingが送信されています。ただ、存在しないサーバなので"UNREACHABLE"(未到達)と表示されました。これは想定通りの動作なので問題ありません。
もしも複数サーバにpingを送信したい場合は先ほどのhostファイルにIPアドレスを追加すればOKです。

【例1】
[test]
172.10.1.1
172.10.1.2

【例2】
[test1]
172.10.1.1
172.10.1.2

[test2]
172.10.2.1

まとめ

本日やったことのまとめです。

  1. pipでansibleをインストールする
  2. ansible <ホスト名> -m pingpingを送信する
  3. ホスト名は/etc/ansible/hostsに記載する。

Windows10でDocker Toolboxを使って15分でコンテナ(マシン)を準備する

Windowsを使っているとLinux環境が急にほしくなる時があります。そんなとき今までVirtualBoxVM環境を作ってVMマシンを立ててOSを
インストールして。。。ということを毎回やっていたのですが、すっごい時間がかかるんですよね。。。
CentOS minimumインストールでも短くて1時間くらいかかってました。
これがDockerとDocker ToolBoxの登場で一気に短くなりました。またそれだけではなく公式で公開されているコンテナを利用することで、Webサーバが既にインストール済みのコンテナで作ることができます。
つまり、CentOSのコンテナを作って起動して、ログインしてWebサーバのソフトウェアをインストールして、、、という作業が不要になり、Webサーバインストール済みのコンテナを呼び出し起動するだけで構築ができます。
他にも特徴はいろいろありますが、とにかくVMより今はコンテナが注目されているんだなーくらいに思ってください。
では早速環境を作って触ってみましょう。

目次

前提環境

OS:Windows10 64bit

Windows版Docker Toolboxのインストール

公式サイトからDocker Toolboxをダウンロードします。
今回はWindowsなので右のダウンロードボタンを押してください。
https://www.docker.com/products/docker-toolbox
f:id:jainders:20161106001518j:plain

DockerToolbox-1.12.2.exeをクリックしてダウンロードを開始します。
f:id:jainders:20161106001529j:plain

ダウンロードが完了したら落としたファイルをクリックしてインストールを開始しましょう。
以下のようなWelcome画面が表示されます。Nextを押します。
f:id:jainders:20161106001531j:plain

インストール先を指定します。デフォルトで問題ないのでNextを押します。
f:id:jainders:20161106001532j:plain

コンポーネントを選択します。デフォルトで全部選択されています。そのままでNextを押します。
f:id:jainders:20161106001533j:plain

追加オプションを指定します。これもデフォルトのままでよいです。Nextを押します。
f:id:jainders:20161106001534j:plain

インストール前の確認画面です。Installを押してインストールを開始しましょう。
f:id:jainders:20161106001535j:plain

インストール中です。少々待ちましょう。
f:id:jainders:20161106001536j:plain

インストール完了画面です。そのままFinishを押しましょう。
f:id:jainders:20161106001541j:plain

Docker Quickstart Terminalをクリックしましょう。するとデフォルトのVMを作ってDockerコンテナを1つ自動で作成する処理が開始されます。ちょっと時間がかかります。カップラーメンかコーヒーでも作って飲み食いしながら待ちましょう。
(途中なぜかWaiting for an IP...と表示されたところで止まりましたが、Enterを押したら処理が開始されました。)
f:id:jainders:20161106001603j:plain

完了するとクジラのマークが出現します。
f:id:jainders:20161106001606j:plain

以下コマンドを打つとdefaultコンテナができていることが確認できます。
hoge@DESKTOP-0LCRDL8 MINGW64 ~
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.100:2376 v1.12.3

またOracleVM VirtualBoxを起動してみましょう。デスクトップにショートカットアイコンがあればそれをクリック。なければWindowsスタートから起動しましょう。
以下のようにDefaultというVMマシンが1つ作成されていることを確認してください。ここでDockerコンテナが動いています。
f:id:jainders:20161106001608j:plain


Dockerが正常に動作するか確認しましょう。以下コマンドを打ってください。

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

c04b14da8d14: Pull complete
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
https://hub.docker.com

For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/


上記のように表示されればOKです。

以上です。

プログラミング初心者でこれからJavaを勉強する人におすすめの書籍

これからIT業界でIT技術者の卵として活躍していくことを決めた皆さん。
私は大学生の時にJavaからプログラム言語を学びました。その時にお世話になった書籍が何冊かあるので、今回はその書籍+αを紹介しようと思います。(ほとんど結城浩著(汗))

目次

(Java)プログラミングが初めてという方

上下巻に分かれています。上巻はif, for, printlnなどJavaの基本的な構文を学ぶことができます。Javaだけでなくプログラミング言語全体で共通的な考え方、=(イコールではなく代入)などを学べるのでオススメです。

改訂第2版 Java言語プログラミングレッスン (上)

改訂第2版 Java言語プログラミングレッスン (上)


下巻はオブジェクト指向のクラス生成、メソッド、クラス変数について記載されています。下巻はオブジェクト指向の基本を学びます。これも他のオブジェクト指向言語と共通的な技術を学べるのでオススメです。

改訂第2版 Java言語プログラミングレッスン (下)

改訂第2版 Java言語プログラミングレッスン (下)

これらだけ読んでも作れる処理はコマンドライン(黒い画面に文字だけが出てくりやつ)にランダムに数字を出すとか、文字を入力すると「〇〇さん、こんにちは」と出てくるなど世に出せるレベルにはなりません。
また本書籍ではJavaに出てくる便利な機能、応用は一切出てきません。Java言語も日々バージョンアップしています。従来バージョンでは何行もかかっていたのが、数行でかけるように簡単になったり、今までできなかったことができるようになっています。
本格的にJavaを使うようになったらJava6以降に追加された各機能について調べてみるといいと思います。

Javaプログラムをどう書けばよいのか悩んでる方

少しプログラムを書けるようになると、mainに永遠とソースを記述してしまったり、クラスはあるけど特にルールもなくいろんなクラスを作って何がどこにあるのか分からなくなる。。。なんてことありませんか。
本書はデザインパターンとしてクラス設計の基本パターンを説明しています。上流で設計する際、特にクラス図を作成することがある方はこの知識は基本として身に付けておいた方が設計時だけではなく、外部ライブラリを利用するときなど学習が早くなります。(と言いながら私もよく使うパターンしか覚えてませんが)

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

たとえ自分が書いたコードであってもソースは1か月も経つと内容を忘れてしまいます。コメントを残していたとしてもコメントとソースに乖離があったりとかして、コメントに書いたことをしたかったのか、ソースの方が正しいのか分からないことが実はよくあります。。。
そのためできるだけコードの可読性、究極的にはある程度のスキルがある方ならどんな処理か読めば分かる、そんなコードが書けたら最高ですよね。
将来の自分にとっても分かりやすい、他の人にも分かりやすいコードを書きたい!書こう!
本書は変数名、関数名など名前の付け方、改行の仕方などを具体例を挙げながら説明してくれます。
え?そんなことにまでこだわるの?と驚くこと間違いなし。
言語に関係なく読んでほしい一冊です。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

他にもJavaや初心者の方に限らなければ他言語でオススメの書籍や、開発環境関連、サーバ関連などIT業界である程度活躍するために必要な知識はいっぱいあります。
特にIT業界は日進月歩で進化、発展し続けています。毎年のトレンドに追いつくだけでも一苦労です。
これからIT業界で頑張ろうという方に一番必要なのは日々着実に技術を調査し勉強する努力であることは間違いありません。

※今回紹介した4冊以外に初心者にオススメの書籍があれば教えてください。

HLS + FFmpeg + nginx on EC2でストリーミング動画配信サービスを構築する

今回は最近動画配信技術として注目されているHLSを使ってストリーミング動画配信サービスを構築します。
EC2上にnginxを使ってWebサーバを公開し、video.jsで動画プレイヤーを作りサンプルmp4をm3u8で分割して配信します。

単語がわからない方は前回の記事にまとめているのでこちらをどうぞ。
HLS, H.264, エンコード, コーデック, ファイル形式(知識編) - KAROUSHI -Japanese Engineer Blog-

目次

HLS + FFmpeg + nginx on EC2でストリーミング動画配信サービスを構築する

EC2の作成

まずはEC2が必要です。手順はこちらを参考にして実施してください。
EC2でAmazonnLinuxを5分で作成 - KAROUSHI -Japanese Engineer Blog-

FFmpegのインストール

EC2の準備ができたらログインして早速FFmpegをインストールしていきましょう。
FFmpegを使ってmp4をm3u8形式に直してストリーミング動画配信を行います。

まずは必要なパッケージをインストールします。

$ sudo yum install -y vim git

gitからshをcloneしてきて実行します。
このshはFFmpegとそれに必要なライブラリをコンパイルする手順を実行します。
実行完了までかなりかかるので待ちましょう。エラーがでなければOKです。

$ git clone https://gist.github.com/b920763fb15e2f487ad363fbb2e61ad9.git
$ chmod +x b920763fb15e2f487ad363fbb2e61ad9/ffmpeg_install.sh
$ ./b920763fb15e2f487ad363fbb2e61ad9/ffmpeg_install.sh

nginxのインストール

nginxをインストールしてWebサーバを立てましょう。Apacheに慣れている方ならそれでもいいですが、最近は徐々にnginxに移行してきているようです。またnginxはコンフィグがjson形式なのでApacheと比べると格段に設定が容易です。処
理も速いし。

$ sudo yum install nginx -y

ドキュメントルートのディレクトリが作成されていることを確認します。

$ ll /usr/share/nginx/html

nginxを起動します。

$ sudo service nginx start
Starting nginx:                                            [  OK  ]

nginxを自動的に起動します。

$ sudo chkconfig nginx on

node.js, npmのインストール

yumでnode.jsとnpmをインストールします。

$ sudo yum install epel-release
$ sudo yum install nodejs npm --enablerepo=epel -y

バージョンを確認する。

$ npm -v
1.3.6
$ node -v
v0.10.46

※node.jsのバージョンが古いため最新のnode.jsを使いたい場合は以下を実施する。
以下サイトを参照
Amazon Linuxに Node.js と npm を入れる - Qiita

参考:
centos + node.js + npm + nvm インストール - Qiita

Video.jsのインストール

まずはnginxのドキュメントルートにcssとjsを格納するディレクトリを作成します。

$ sudo mkdir -p /usr/share/nginx/html/css/
$ sudo mkdir -p /usr/share/nginx/html/js/

npmでvideo.jsをインストールしましょう。

$ npm install --save-dev video.js

インストールが完了したらドキュメントルートにjsやcss等を移動します。

$ sudo cp node_modules/video.js/dist/video.min.js /usr/share/nginx/html/js/
$ sudo cp node_modules/video.js/dist/video-js.swf /usr/share/nginx/html/js/
$ sudo cp node_modules/video.js/dist/video-js.min.css /usr/share/nginx/html/css/
$ sudo cp -rp node_modules/video.js/dist/font/ /usr/share/nginx/html/

他にも必要なパッケージをnpmでインストールして同様にドキュメントルートへ移動させます。

$ npm i videojs-contrib-media-sources
$ cd  node_modules/videojs-contrib-media-sources
$ npm i
$ npm run build
$ sudo cp -p dist/videojs-contrib-media-sources.min.js /usr/share/nginx/html/js/

こちらも同様。

$ cd ~
$ git clone https://github.com/videojs/videojs-contrib-hls
$ cd videojs-contrib-hls
$ npm i
$ npm run build
$ sudo cp -p dist/videojs-contrib-hls.min.js /usr/share/nginx/html/js/

HTMLを/usr/share/nginx/htmlに配置します。
※[IP Addresses]の部分はEC2のパブリックIPに変更すること。

$ cd /usr/share/nginx/html
$ sudo vim video.html


gistf1fb9a79b6f1206d88d5ca9dac9a7a3a


wgetでストリーミング動画配信のテスト用としてmp4の動画をダウンロードします。

$ wget http://www.gomplayer.jp/img/sample/mp4_h264_aac.mp4

ようやく準備が整いました。mp4⇒m3u8へFFmpegコマンドで変換します。動画サイズによって変換は多少時間がかかります。

$ ffmpeg -i mp4_h264_aac.mp4 -vcodec libx264 -s 1280x720 -b:a 256k -f segment -segment_format mpegts -segment_time 10 -segment_list sample.m3u8 sample_%04d.ts

完了したらドキュメントルートに配置します。

$ sudo cp -p sample* /usr/share/nginx/html/

ブラウザでストリーミング動画の視聴

Windows10ならMicrosoftのEdgeブラウザを起動し以下のURLでアクセスしてみましょう。
ビデオ再生画面が表示され自動でバッファ読み込みを開始します。準備ができたら再生ボタンを押してみてください。
※[IP Addresses]の部分はEC2のパブリックIPに変更すること。
http://[IP Address]/video.html
f:id:jainders:20161103000358j:plain

動画は無事見れましたか?
以上で終わりです。