Piwigoで自前の写真サーバーを立てる

October 01, 2020

linuxAlpineLinux写真サーバーwebサーバー

目次

はじめに

写真サーバーといえば「Google Photos」と「Apple Photos」が有名ですが、大量の写真を入れようとすると、容量に応じてそれなりにお金がかかります。「Google Photos」の場合は、フル解像度でなければ2021/5までは無料でしたが、それ以降15GB以上は有料化されました。

自前の写真サーバーを立てると、容量を気にせずに、いくらでも使うことができます。さらに、サーバにアップロードした写真を定期的にバックアップをとったりなど柔軟な運用ができます。 そこで、写真サーバーPiwigoを導入してみます。

Piwigoはいいアプリなのですが、やはり「Google Photos」や「Apple Photos」に比べると機能は低いです。写真から人物を認識したり、写真を言葉で検索したりといったクールな機能はありません。それでも自前運用には、低機能を補うメリットと魅力があります。

本ドキュメントはPiwigo設定手順の備忘録です。

Piwigoのインストール

Piwigoをdocker composeでインストールします。インストール先のOSはAlpine Linuxを想定していますが、docker composeでインストールするので、dockerを入れたLinuxならば、どれでも大丈夫だと思います。

以下のdocker-compose.ymlを用意します。

docker-compose.yml
version: "3.6"
services:
  mysql:
    image: mariadb:latest
    volumes:
      - ./piwigo/mysql/:/var/lib/mysql
    container_name: piwi_db
    environment:
      - MYSQL_ROOT_PASSWORD=pass
      - MYSQL_DATABASE=piwigo
      - MYSQL_USER=piwigo
      - MYSQL_PASSWORD=pass
  piwigo:
    image: mathieuruellan/piwigo
    links:
      - mysql:mysql
    volumes:
      - ./piwigo/data/galleries:/var/www/galleries
      - ./piwigo/data/local:/var/www/local
      - ./piwigo/data/plugins:/var/www/plugins
      - ./piwigo/data/themes:/var/www/themes
      - ./piwigo/cache:/var/www/_data/i
      - ./piwigo/upload:/var/www/upload
      - /var/log
      - /var/log/piwigo:/var/log/apache2
    ports:
      - "3300:80"
    hostname: larkbox
    domainname: home.arpa

mysqlのenvironmentで指定するアカウントやパスワード、piwigoのports, hostname, domainnameは適宜変更してください。portは今回は3300にしました。

本サイトに公開した手順でファイアーウォール(awall)を設定している場合は、ポート3300番を開ける必要があります。

/etc/awall/optional/larkbox-policy.json
  "service":{
     ...
    "webapps": [
      ...
      {"proto": "tcp", "port": 3300},
      ...
    ],
     ...
  },
  "filter": [
    ...
    {
      "in": "LAN",
      "out": "_fw",
      "service": [ "http", "webapps", ...],
      "action": "accept"
    },
    ...
  ]

ファイアーウォール再起動

# awall activate -f
# rc-service iptables restart

Piwigo起動

$ docker compose up -d

起動すると、docker-compose.ymlと同じディレクトリにpiwigoディレクトリが作成されます。

ディレクトリ構成例

Piwigo/
    docker-compose.yml
    piwigo/
        cache/
        data/
            galleries/
            local/
            plugins/
            theme/
        mysql/
        upload/
            yyyyy/
                mm/
                  dd/
                    picture.jpg

Webブラウザで、
http://サーバ名:3300/
にアクセスすると、以下のインストールページが表示されます。

piwigo1.png

インストールページの設定例

【データベース設定】
ホスト:piwi_db
ユーザ:piwigo
パスワード:pass
データベース名:piwigo
データベーステ―ブル接頭辞:piwigo_
【管理設定】
ユーザ名:admin
パスワード:********

「インストールを開始する」をクリックすると、次の画面に遷移します。

piwigo2.png

「ギャラリーへ」をクリックすると、

piwigo3.png

「ギャラリー」ではなく、「ガラリー」に到達しました。 「私は自分で見てみます」をクリックすると、設定ページに遷移します。

piwigo4.png

これで使用準備が整いました。

写真の取り込み

Piwigoコンテンツは、写真とアルバムで構成されます。 アルバムには複数の写真やアルバムを格納できます。アルバムは写真ファイルを置くディレクトリのようなものです。

これまでに写真が1枚もなく、これからPiwigoで一から写真管理を行っていくような場合はいいのですが、だいたいは膨大な数の写真が既に存在し、それをPiwigoに取り込んだ上で、運用スタートすることになるでしょう。

Piwigoでは、写真の取り込み方法として、

  • Webブラウザからのアップロード
  • クライアントPCの写真ディレクトリとの同期
  • サーバ上の写真ディレクトリとの同期
  • AndoroidアプリやiPhoneアプリからのアップロード
  • macOSのApple Photoデータのインポート

など、多彩な方法が提供されています。

既存の膨大な数の写真を取り込み方法としては、PCクライアントの写真ディレクトリとの同期か、サーバ上の写真ディレクトリとの同期が実用的ですが、それぞれ問題もあります。

サーバ上の写真ディレクトリとの同期

Piwigoをインストールしたサーバ上の”./piwigo/data/galleries/“内に、写真を含むディレクトリを置きます。例えば、以下のように置いたとします。

./piwigo/data/galleries/
    picture0.jpg
    dir1/
       picture1.jpg
       picture2.jpg
       subdir/
           picture3.jpg
           picture4.jpg

Piwigoの同期化機能により、ディレクトリと同名のアルバムが作成され、その中に写真が置かれます。

操作方法は、

Admin >> ツール >> 同期化

piwigo5.png

まずは「シミュレーションのみ実行する (データベースは更新されません)」にチェックを入れて、「送信」ボタンをクリックし、どのファイルが取り込まれるのかを確認します。意図した通りだったら、チェックをはずし、再度「送信」ボタンをクリック。

この機能は、大量の写真を取り込むには便利なのですが、残念な点は日本語のディレクトリ名が使用できないことです。筆者はこれで使用を断念しました。Piwigo自体は日本語のアルバム名は使用可能なんですけどね。

クライアントPCの写真ディレクトリとの同期

Piwigo Remote Syncを使用します。

クライアントPCの任意の場所に、写真を含むディレクトリを置きます。

例えば、以下のように置いたとします。

./temp/
    picture0.jpg
    アルバム1/
       picture1.jpg
       picture2.jpg
       サブアルバム11/
           picture3.jpg
           picture4.jpg

Piwigo Remote Syncにより、ディレクトリと同名のアルバムが作成され、その中に写真が置かれます。ディレクトリ名は日本語でも大丈夫です。

クライアントPCでPiwigo Remote Sync(remotesync-ui.jar)を起動します。javaのアプリなので、Windowsでもmacでも稼働します。

piwigo6.png

サーバのurlとアカウントを入力し、ログイン。

piwigo7.png

クライアントPCの写真を含むディレクトリの場所を指定し、「Upload」をクリックすると写真の転送を開始します。 アップロードした写真はサーバ上の”piwigo/upload/“以下のディレクトリに日付ディレクトリを切って、その中に納まります。

Piwigo/
    piwigo/
        upload/
            yyyyy/
                mm/
                  dd/
                    picture.jpg

例えば、既存写真が20000枚あったとして、これを2020年10月20日に一気にアップロードしたとすると、 “piwigo/upload/2020/10/20/“に20000個のファイルができてしまいます!

一気にアップロードせずに、最初は少ないファイルでアップロードし、終わったらファイルを追加し、再度アップロードすれば、追加された分だけアップロードされます。

筆者の場合、年別にアルバムを作成し、その中にサブアルバムを作成し、サブアルバムの中に写真ファイルを置くディレクトリ構造としました。 年毎にアルバムを追加し、その都度Piwigoサーバの時刻をその年度に変更してからアップロードしました。 例えば、2010年の写真をアップロードするときは、サーバで、

$ sudo date -s "2010-12-31 23:0:0"

を行った後、アップロードしました。こうすると2010年の写真は、 “piwigo/upload/2010/12/31/“に格納されます。

写真の追加

既存の写真を全てPiwigoサーバに上げたら、あとは撮った写真をその都度アップロードすることになります。

Piwigoには、以下のように多彩なアップロードパスが用意されています。

  • Webブラウザからアップロード
  • iOSのPiwigoアプリからアップロード
  • AndroidのPiwigoアプリからアップロード

この3つ以外にも、
Admin >> 写真 >> 追加 >> アプリケーション
に多彩な方法が紹介されています。

iOSのPiwigoアプリの稼働例

piwigo9.png

Webブラウザからアップロード

Admin >> 写真 >> 追加 >> ウェブフォーム

piwigo8.png

iOSのPiwigoアプリからアップロード

試してみましたが、けっこう遅いです。ちょっと常用はしんどいかな。

まとめ

AlpineLinuxにPiwigoをインストールして写真サーバを運用する方法を紹介しました。


Written by questions6768 who lives in Uji, Kyoto.