LAMPテストサーバの作り方 (DigitalOcean)

[DigitalOcean](https://cloud.digitalocean.com/droplets) を利用したLAMPテストサーバの構築方法です。
もし本番運用をする場合には root でのSSHログインを禁止するようにしてください。

## ドロップレットの作成

以下の設定を参考に、ドロップレットを作成してください。

- Choose an image > One-click Apps > LAMP on 16.04
- Choose a size > $5 / mo
- Choose a datacenter region > Singapore
- Add your SSH keys > <自分の公開鍵を選択>
- Finalize and create > Choose a hostname > <クライアント名-案件名>

## SSHでのアクセス

作成したドロップレットのIPアドレスを確認して、Terminal (iTerm) からSSH接続をします。

```sh:クライアントPC
vi ~/.ssh/config
...
# 追加
Host rabi  # SSHのショートカット名として利用/適宜変更
  HostName <IP Address>
  User root
  IdentityFile ~/.ssh/id_rsa

ssh rabi  # SSH接続
```

必要であれば、ファイルのアップロードのために、上記と同様の設定をSFTPクライアントでも行っておいてください。

`public/` ディレクトリ以下を同期させる運用であれば、以下のようなコマンドで済ませてもいいです。[^group]

[^group]: [所有者:グループ] も同期されるので留意

```
# rsync <コピー元> <コピー先>
rsync -av --delete --exclude=".*" public/ rabi:/var/www/html/
```

※ コピー元ディレクトリに指定している末尾スラッシュは必須
参考: http://www.itmedia.co.jp/enterprise/articles/0804/21/news013.html

以下より、SSHで接続したホストPCでの操作となります。

## SSHパスワード認証を不可にする

パスワード認証を不可にし、公開鍵認証のみ受け付けるようにします。

```diff:/etc/ssh/sshd_config
- PasswordAuthentication yes
+ PasswordAuthentication no 
```

```sh
service ssh restart  # sshd の再起動
```

## ベーシック認証

### .htaccess の設定

以下の .htaccess ファイルをサーバに配置します。

```/var/www/html/.htaccess
<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
Options -Indexes
AuthUserFile /var/www/html/.htpasswd
# AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user 
order deny,allow
```

作成元: [.htaccess Editor](http://www.htaccesseditor.com)
※ AuthGroupFile の行はコメントアウト（または削除）が必要です

### .htpasswd の設定

```
apt-get install apache2-utils
htpasswd -c /var/www/html/.htpasswd <ユーザ名>
```

### .htaccess の有効化

```diff:/etc/apache2/apache2.conf
<Directory /var/www/>
        Options Indexes FollowSymLinks
-       AllowOverride None
+       AllowOverride All
        Require all granted
</Directory>
```

### Apache の再起動

```sh
service apache2 restart
```

## オプション

### リダイレクト機能を利用する場合

.htaccess のリダイレクト処理が必要な場合は以下の設定が必要になります。

```sh
sudo a2enmod rewrite  # mod_rewrite モジュールの有効化
service apache2 restart
```

#### リダイレクトのログを確認する場合

```diff:/etc/apache2/apache2.conf
<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
+       LogLevel rewrite:trace8  # trace[数字] の値は調節
</Directory>
```

参考: [Apache HTTP サーバ バージョン 2.4 > LogLevel](https://httpd.apache.org/docs/2.4/mod/core.html#loglevel)

```sh
service apache2 restart
tail -f /var/log/apache2/error.log  # エラーログを監視
```

### SSI を利用する場合

```sh
sudo a2enmod include  # mod_include モジュールの有効化
# ↑ 以下のコマンドと同じ意味
# ln -s /etc/apache2/mods-available/include.conf /etc/apache2/mods-enabled/include.conf
# ln -s /etc/apache2/mods-available/include.load /etc/apache2/mods-enabled/include.load

service apache2 restart
```

### SSL を利用する場合

```sh
sudo a2enmod ssl  # SSL モジュールの有効化
sudo service apache2 restart
```

[Let's Encrypt](https://letsencrypt.jp/usage/#GetCertificate) を利用した場合

```diff:/etc/apache2/sites-available/default-ssl.conf
- ServerAdmin webmaster@localhost
+ ServerAdmin <管理者のメールアドレス>
...
- SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
+ SSLCertificateFile     /etc/letsencrypt/archive/<ドメイン名>/fullchain1.pem
- SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
+ SSLCertificateKeyFile    /etc/letsencrypt/archive/<ドメイン名>/privkey1.pem
```

```sh
sudo a2ensite default-ssl.conf  # SSL用設定の有効化
sudo service apache2 restart
```