俺だけの写真管理サーバを作る(Lychee)

# はじめに
増え続けていく画像ファイル。
PCに保管しているだけでは、スマホから見る事が出来ないので、使い勝手が悪いです。
クラウドに上げればいい事ですが、5GBとか10GB程度では俺の思い出は入りきれません(見栄)。
あと、曲がりなりにもインターネットにアップロードする事になるので、ソレはソレで心の中の何かが抵抗します。

セットアップまでは多少面倒でもいいから、自宅で写真を管理してくれるWebアプリケーションサーバがあればと思い探してみたら[Lychee](https://lychee.electerious.com/)を見つけました。
デザインもカッコイイのでこれをいれてみます。

# 環境
Lycheeのためとはいえ、普通のPC上げっぱなしでは電気代が気になります。
RaspberryPi model 3Bをサーバにすることにしました。

主なソフトウェアは以下の通りです。
・Webサーバ：Nginx 1.10.2
・アプリケーションサーバ： php 7.1.1
・DB：MariaDB 10.1
・写真管理Webアプリ：Lychee 3.1

よく他の記事ではApache とか php 5.5 とか mysql　を使用してたりしますが、
せっかく自宅用で何のしがらみもありませんから、使用するソフトだったり、
バージョンなど、色々挑戦してみました。
ディレクトリ構成は以下の様にしております。

```
/etc
  ＋ーmy.cnf
/opt
  ＋ーanyenv
    ＋ーーenvs
      ＋ーーphpenv
        ＋ーーversions
          ＋ーー7.1.1
            ＋ーーbin
            ＋ーーetc
  ＋ーmariaDB
    ＋ーー10.2
      ＋ーーbin
  ＋ーnginx
  　＋－－1.10.2
      　＋－－sbin
      　＋－－conf
    ＋－－running
        ＋－－logs
        ＋－－html
        ＋－－temp
           ＋－fastcgi_temp
/var
  ＋ーwww
    ＋ーーLychee
```

なお、それぞれのインストールですが、私はは以下の記事の様にしております。
[MariaDB](http://qiita.com/KurokoSin/items/68139ea6acf0ab9b18ad)
[NginX](http://qiita.com/KurokoSin/items/fe74b7baae4c9954867d)
[PHP](http://qiita.com/KurokoSin/items/d096e57baff76d1af2d4)
併せてみて頂けると幸いですm(_ _)m

# セットアップ手順
[GitHub](https://github.com/electerious/Lychee/blob/master/docs/Installation.md)に従い、セットアップしていきます。

## 環境確認
phpの設定を確認します。phpのモジュールの状況から。

```
$ php -m
:
, exif
, gd
, json 
, mbstring
, mysqli
, session 
, zip
:
```
上記パッケージがあればOKです。

次にPHPの設定を推奨設定へ変更します。

```php.ini
max_execution_time = 200
post_max_size = 100M
upload_max_size = 100M
upload_max_filesize = 20M
memory_limit = 256M
```
```diff:diffの結果
$ diff php.ini.org php.ini
383c383
< max_execution_time = 30
---
> max_execution_time = 200
404c404
< memory_limit = 128M
---
> memory_limit = 256M
671c671
< post_max_size = 8M
---
> post_max_size = 100M
824c824,825
< upload_max_filesize = 2M
---
> upload_max_size = 100M
> upload_max_filesize = 20M
939c940
< ;date.timezone =
---
> date.timezone = Asia/Tokyo
```

## Lychee本体のダウンロード
無心で落としてきます。

```
$ cd /var/www
$ sudo git clone https://github.com/electerious/Lychee.git
```

## Permissionの変更
```
$ sudo useradd -r -g web -d /opt/Lychee/ -s /usr/sbin/nologin lychee 
$ sudo chown -R lychee:web /opt/Lychee 
$ sudo chmod -R 777 /opt/Lychee/uploads/ /opt/Lychee/data
```

## php-fpm設定
記事がうまく整理できていなくて申し訳ないですが、php-fpmも設定します。

```
$ cd /opt/anyenv/envs/phpenv/versions/7.1.1/etc/php-fpm.d
$ cp -p www.conf.default www.conf
$ sudo vi www.conf
```
> ```
> listen = 127.0.0.1:19711
> user = nginx
> group = web
> ```

## nginx.conf の設定

```
$ diff nginx.conf.org nginx.conf
44,45c44,46
<             root   html;
<             index  index.html index.htm;
---
>             # root   html;
>             root   /var/www/Lychee;
>             index  index.html index.htm ;
65,71c66,75
<         #location ~ \.php$ {
<         #    root           html;
<         #    fastcgi_pass   127.0.0.1:9000;
<         #    fastcgi_index  index.php;
<         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
<         #    include        fastcgi_params;
<         #}
---
>         location ~ \.php$ {
>             root           /var/www/Lychee;
>             fastcgi_pass   127.0.0.1:19711;
>             fastcgi_index  index.php;
>             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
>             include        fastcgi_params;
>         }
```

fastcgi_parm　の設定を変えなきゃいけない事がわかるまですごく時間がかかってしまいました。
[ここのサイト様](https://www.nullpop.net/2012/11/nginxphp-fpm%e3%81%a7php%e3%82%92%e5%8b%95%e3%81%8b%e3%81%99%e3%80%82%e3%81%9d%e3%81%ae3/)が大変参考になりました。ありがとうございました。

接続できなかった時、以下のようなエラーが出ていました。

```nginxのerror.log
2017/03/06 16:23:46 [error] 18245#0: *7572 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.1.1, server: localhost, request: "POST /php/index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:19711", host: "192.168.1.2", referrer: "http://192.168.1.2/"
```
# Lycheeサーバの設定
Lycheeサーバにアクセスすると、以下の画面が出ます。
![Lychee設定.PNG](https://qiita-image-store.s3.amazonaws.com/0/14800/c717ac38-d96a-4381-ec57-34f42145612f.png)

それぞれ、自分の設定を記入します。

```Lycheeの設定画面
Database host:     localhsot
Database username: ******
Database password: ******
```

以下はお好みで。
Database Name : DB_Lychee (Lychee独自データベース名）
Table Prefix : Lyc_       (テーブル名の接頭辞）

と、入力できればよかったのですが、、、、
実はDBの設定を忘れていました。
ユーザを作っていませんでしたので、今から作成します。
# DBの設定
## ユーザ作成
まずは、rootでログインして設定を確認します。

```
$ mysql -u root -p
Enter password:

MariaDB [(none)]> select host, user FROM mysql.user;
+-----------+------+
| host      | user |
+-----------+------+
| 127.0.0.1 | root |
| ::1       | root |
| localhost | root |
+-----------+------+
3 rows in set (0.00 sec)

MariaDB [(none)]>
```

見事に手つかずでした。Lychee用にデータベース(photo)とユーザ(photoadmin)を作成します。

```
MariaDB [(none)]> create database photo;
MariaDB [(none)]> grant all privileges on photo.* to photoadmin@localhost identified by 'password' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
```
（間違って作ってしまったユーザは、以下のコマンドで消してやり直ししました。）

```
MariaDB [(none)]> drop user user1;
```

# Lycheeサーバの設定（再び）
準備が整いました。もう一度、ブラウザから設定にいきます。
、、、、先ほどの記述では、まだうまく次の設定画面にいけませんでしたorz
原因を想定して解決するのに苦労しましたが、ポート番号の設定が抜けていました。
なのでポート番号の設定も行います。

```Lycheeの設定画面
Database host:     localhsot:3306
Database username: photoadmin
Database password: ******
```

次にユーザ名とパスワードの設定画面が出ます。
![キャプチャ![TOP.PNG](https://qiita-image-store.s3.amazonaws.com/0/14800/ddd81552-922e-d750-786d-ca2a16373c0f.png)
.PNG](https://qiita-image-store.s3.amazonaws.com/0/14800/ad2a667d-9eee-822d-418d-59bedb167eb4.png)

画面に記述してある通りに設定します。

```Lycheeのユーザ設定画面
username:    photouser
password:    password
```

無事接続できました！

![TOP画面.PNG](https://qiita-image-store.s3.amazonaws.com/0/14800/f3d03f68-703f-8168-dd7d-8e81d3a4a346.png)

あとは手持ちの写真をいろいろと放り込みます。