お金をかけずにRaspberry Pi 2を外部公開サーバーにする手順(LAMP, MyDNS,DDNS,cron)

# 1.はじめに
ウェブサービス、アプリを公開するには外部に公開されたサーバーが必要です（当たり前ですが）。今ではレンタルサーバー（さくらのレンタルサーバー、AWSなど）が普及し、グローバスIPを取得、ルーティングといった作業をせずにらくらくサーバーをセットアップできるようになりました。
便利は便利なんですが、そういったサービスを使用していると、そもそもの上記知識を知らないまま開発することになります。アプリエンジニアだろうと軽く理解しておくべきだと私は思っています。仕事が広がりますんで、、、
インフラエンジアの仕事も奥が深いのでここではWEBサーバの設定までの紹介にとどめておきます。フロントエンジア、サーバーサイドエンジア、インフラエンジアの仕事をわかりやすくまとめてくれている人がいるのでそれを参照↓
[フロントエンド、サーバサイド、インフラの具体例](https://qiita.com/shuntaro_tamura/items/e1a20e33c57c71679688)

# 2. 環境の準備
## RaspberryPi2
* OS:Raspbian
* 各種パッケージ、ファームウエア更新済み
* IP固定済み
* ポート開放

[OS:Raspbianインストール]
(http://usicolog.nomaki.jp/engineering/raspberryPi/raspberryPi2.html)
[ssh設定、IP設定]
(http://usicolog.nomaki.jp/engineering/raspberryPi/raspberryPi_SSH.html)
[ポート開放buffalo]
(http://buffalo.jp/download/manual/html/air1200/router/whrg300n/chapter16.html)

# 3. 手順
「Raspberry Pi2」にLAMPをインストールし、Webサーバーを作成する。
##1. LAMP環境のインストール
LAMP（Linux + Apache + MySQL + PHP）環境をインストールする。

```
$ sudo apt-get install -y apache2 php5 mysql-server phpmyadmin
```
1. MySQLのrootパスワードを設定するよう言われるので入力してENTER。
2. phpMyAdminの設定でWebサーバーを聞かれるので「apache2」を選択してENTER。
3. phpMyAdminの設定で、データベースをdbconfig-commonで設定するか聞かれたら、<はい>でENTER。
4. MySQLの管理者パスワードを聞かれるので、設定したパスワードを入力してENTER。
5. phpMyAdmin用のパスワードを設定しろと言われるので、入力してENTER。
6. コントロールが返ってきたらインストール完了。rebootコマンドで再起動する。

##2. Webサーバ動作確認
###1. Apache動作確認
ブラウザで ```http://<IP Address>``` にアクセスし以下のようなApacheのトップページが表示されることを確認する。

![ダウンロード.png](https://qiita-image-store.s3.amazonaws.com/0/139352/062e6967-ddf7-01ef-080a-d9c1d79d60db.png)


基本的な設定は ```/etc/apache2/apache2.conf``` にあり，VirtualHost に関する設定は ```/etc/apache2/sites-enabled/000-default.conf``` にある。

**Apacheコマンド**

| 説明 | コマンド |
|:-:|:-:|
| 起動 |  ```$ sudo service apache2 start``` |
| 停止 | ```$ sudo service apache2 stop``` |
| 再起動 | ```$ sudo service apache2 restart``` |

###2．Apache設定
```/conf-available``` 内の security.conf を修正
```$ sudo vi /etc/apache2/conf-available/security.conf```

```
36 ServerSignature Off
37 # ServerSignature On
```
と変更。この ServerSignature が On にしてあると、エラードキュメントに WEB サーバーの情報が出力されてしまします。OSとか分かるのはちょっと...

![image](https://qiita-image-store.s3.amazonaws.com/0/139352/82cd04ef-1313-4949-1118-1768b22458a7.png)


###3. phpMyAdmin動作確認
webサーバ（Apache）の表示が確認できたら、phpMyAdminを使用可能にするため確認する。

1. ```$ cd /etc/apache2``` （変更するファイルのディレクトリへ移動）
2. ```$ sudo cp -p apache2.conf apache2.conf.org``` （変更するファイ3. ルのバックアップ）
4. ```$ sudo vi apache2.conf```（変更ファイルをviエディタで開く）
5. ``` Include /etc/phpmyadmin/apache.conf ``` (最終行に、追加)
6. ```$ sudo /etc/init.d/apache2 restart``` （Apacheの再起動）
7. ```http://[ラズパイのIPアドレス]/phpmyadmin/``` (ブラウザのアドレスバーにURLを入力して動作確認する。)
8. phpMyAdminのログインページが表示されたら成功。

![image](https://qiita-image-store.s3.amazonaws.com/0/139352/097dac11-adcd-9cfb-b775-80d45327d8a3.png)

###4. PHPの確認
いちよう、PHPが動作しているか確認する。
```$ php -v```

```
PHP 5.6.24-0+deb8u1 (cli) (built: Jul 27 2016 00:06:04)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
```

##3. Dynamic DNSの設定
自宅サーバーの場合、IPアドレスを固定していないと定期的に変わってしまい、サーバーとしては使い物になりません。とはいってもグローバルIP取得にはお金が、、、
なので、コンピュータに割り当てられているIPアドレスが変わったら、それに対応したDNSの情報を自動で更新する仕組みである**DDSNS（Dynamic Domain Name System）**を使用します。



今回は[MyDNS](http://www.mydns.jp/)(DDNS)を使用します。

###1. MyDNSに登録する
JOIN INから基本情報を入力。メールにてMasterIDとPasswordの通知が来るのでそれでログインする。
![image](https://qiita-image-store.s3.amazonaws.com/0/139352/9a77e7da-741b-500b-2676-76dd6dc63ac8.png)

###2. DDNSを取得する
DOMAIN  INFOよりDDNSの取得を行う。赤枠を記入。Hostnameは*でいい。詳しくはサイト上に書いてあるのでそれに沿って記入する。
![キャプチャ3.PNG](https://qiita-image-store.s3.amazonaws.com/0/139352/721f0801-a1df-2038-ba63-07084b372240.png)

MyDNS側の設定はこれで終了。


###3. MyDNS.JPにIPアドレスを定期的に通知する設定をする。
設定にはddclientを使用することが一般的？以下参照
[ddclientとは](http://www.hbirds.net/linux/ubuntuserver/ubuntu-server-ppc-9-10/ddclient-with-dyndns/6334)
[自宅サーバを作ろう！ - MyDNS](http://www.mhserv.info/co5/mydns.php)

いろいろ調べてもMyDNSとddclientは相性が悪いみたい。実際にやってみてうまくいかない...


Linux の cron でコマンドでもできるみたい。
[MyDNS.jp の DDNS 更新を cron で行う](http://dotnsf.blog.jp/archives/1034948871.html)

URLに対して、午前3時に更新を行うように設定。はじめは10分おきに更新としていたが、そんなに必要ないらしい。
（表記は　minute hour week month）
```
$ crontab -e
0 3 * * * wget -q -O /dev/null http://(mydns.jp のマスターID):(mydns.jp のパスワード)@www.mydns.jp/login.html
```

MyDNSのログを確認すると...
```2016/09/11 20:00:15 JST 	DNSINFO UPDATE : ip*********** 
2016/09/11 20:00:15 JST 	IPv4 UPDATE : *********, ip******** , http, asia 
```

＼○_ﾋｬｯ ε=＼＿○ﾉ ﾎｰｳ!!

終わり。