有馬総一郎のブログ

(彼氏の事情)

2026年04月07日 18:37:27 JST - 4 minute read - Linux

Seafileをバージョン13にアップグレードし、Caddyとの連携にリトライする

Nginx Proxy Managerを導入したこともあり、Seafileを最新バージョン(2026/04/01時点のバージョン13)にアップグレードすることにした。

Seafile 13

また、過去にDocker版の caddy がリバースプロキシとして用意されていた際、すでに nginx を使っていたため、そちらと連携させようとして上手くいかなかった経緯がある。今回はそのリトライも兼ねている。

とりあえず、 公式ドキュメントの通り、.envseafile-server.ymlseadoc.ymlcaddy.yml を取得して書き換えていく。

.envファイル

seafile/.env

@@ -1,56 +1,38 @@
 #################################
 # Docker compose configurations #
 #################################
-COMPOSE_FILE='seafile-server.yml,caddy.yml,seadoc.yml'
-COMPOSE_PATH_SEPARATOR=','
 
 ## Images
 SEAFILE_IMAGE=seafileltd/seafile-mc:13.0-latest
 SEAFILE_DB_IMAGE=mariadb:10.11
-SEAFILE_REDIS_IMAGE=redis
+SEAFILE_REDIS_IMAGE=redis:8
 SEAFILE_CADDY_IMAGE=lucaslorentz/caddy-docker-proxy:2.12-alpine
 SEADOC_IMAGE=seafileltd/sdoc-server:2.0-latest
 NOTIFICATION_SERVER_IMAGE=seafileltd/notification-server:13.0-latest
-MD_IMAGE=seafileltd/seafile-md-server:13.0-latest
 
 ## Persistent Storage
-BASIC_STORAGE_PATH=/opt
-SEAFILE_VOLUME=$BASIC_STORAGE_PATH/seafile-data
-SEAFILE_MYSQL_VOLUME=$BASIC_STORAGE_PATH/seafile-mysql/db
+BASIC_STORAGE_PATH=/home/arimasou16/seafile
+SEAFILE_VOLUME=/mnt/ext-hdd/seafile-data
+SEAFILE_MYSQL_VOLUME=$BASIC_STORAGE_PATH/db
 SEAFILE_CADDY_VOLUME=$BASIC_STORAGE_PATH/seafile-caddy
 SEADOC_VOLUME=$BASIC_STORAGE_PATH/seadoc-data
 
 #################################
 #      Startup parameters       #
 #################################
-SEAFILE_SERVER_HOSTNAME=seafile.example.com
-SEAFILE_SERVER_PROTOCOL=http
-TIME_ZONE=Etc/UTC
-JWT_PRIVATE_KEY=
+SEAFILE_SERVER_HOSTNAME=example.com
+SEAFILE_SERVER_PROTOCOL=https
+TIME_ZONE=Asia/Tokyo
+JWT_PRIVATE_KEY=********************************
 
 #####################################
 # Third-party service configuration #
 #####################################
 
 ## Database
-SEAFILE_MYSQL_DB_HOST=db
+SEAFILE_MYSQL_DB_HOST=mariadb
 SEAFILE_MYSQL_DB_USER=seafile
 SEAFILE_MYSQL_DB_PASSWORD=PASSWORD
-SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db
-SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db
-SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db
-
-## Cache
-CACHE_PROVIDER=redis # or memcached
-
-### Redis
-REDIS_HOST=redis
-REDIS_PORT=6379
-REDIS_PASSWORD=
-
-### Memcached
-MEMCACHED_HOST=memcached
-MEMCACHED_PORT=11211
 
 ######################################
 #        Initial variables           #
@@ -70,18 +52,3 @@
 
 ## SeaDoc service
 ENABLE_SEADOC=true
-
-## Notification
-ENABLE_NOTIFICATION_SERVER=false
-NOTIFICATION_SERVER_URL=
-
-## Seafile AI
-ENABLE_SEAFILE_AI=false
-ENABLE_FACE_RECOGNITION=false
-SEAFILE_AI_LLM_TYPE=openai
-SEAFILE_AI_LLM_URL=
-SEAFILE_AI_LLM_KEY= # your llm key
-SEAFILE_AI_LLM_MODEL=gpt-4o-mini
-
-## Metadata server
-MD_FILE_COUNT_LIMIT=100000

公式との差分はこんな感じ。

COMPOSE_FILE を使おうとすると、自分の環境ではcomposeのディレクトリ指定が上手くいかなかったため使用しない1

SEAFILE_VOLUME は外付けHDDを指定。redis は一応バージョンを明記。dbseafile-server.yml 内のMariadbのサービス名を mariadb に変更したため、それに合わせている。

他、基本デフォルトで良いところはそのまま残すか、不要な部分は削除した。 Metadata ServerはPro版向けと思われるため未使用。

また、以前バージョン12を構築した際、FUSE extensionとして以下を追加していたが、今回のバージョンではこれが原因で起動できなくなっていた2

    volumes:
      - source: /opt/seafile-fuse
        target: /seafile-fuse
        bind:
          propagation: rshared
    privileged: true
    cap_add:
      - SYS_ADMIN

てっきり仮想ドライブ SeaDrive を使うために必要だと思っていたが、実際は「コンソール端末でSeafile内のファイルを直接読み書きする」機能だったため、不要と判断して削除した。

実際、Chromebookの SeaDrive-Cli でも正常に動作していることは確認済みだ。

SeaDrive-Cli

seafile-server.yml

seafile-server.yml

 services:
-  db:
+  mariadb:
     image: ${SEAFILE_DB_IMAGE:-mariadb:10.11}
     container_name: seafile-mysql
     restart: unless-stopped
@@ -82,7 +82,7 @@
        - SEAFILE_AI_SECRET_KEY=${JWT_PRIVATE_KEY:?Variable is not set or empty}
        - MD_FILE_COUNT_LIMIT=${MD_FILE_COUNT_LIMIT:-100000}
      labels:
-      caddy: ${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}
+      caddy: http://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}
        caddy.reverse_proxy: "{{upstreams 80}}"
      healthcheck:
        test: ["CMD-SHELL", "curl -f http://localhost:80 || exit 1"]
@@ -91,13 +91,13 @@
        retries: 3
        start_period: 10s
      depends_on:
-      db:
+      mariadb:
          condition: service_healthy
        redis:
          condition: service_started
      networks:
        - seafile-net
 networks:
   seafile-net:
     name: seafile-net

db という名前は他の compose.yml と被るため、サービス名を mariadb に変更。AIやMetadata Serverは使わないので削除。 caddy に関しては、Nginx Proxy ManagerでSSL化しているため .envSEAFILE_SERVER_PROTOCOLhttps としているが、CaddyとSeafile間は http 通信で固定するため、ラベルの記述を修正している。

seadoc.yml

seadoc.yml

@@ -19,7 +19,7 @@
        - NON_ROOT=${NON_ROOT:-false}
        - SEAHUB_SERVICE_URL=${SEAFILE_SERVICE_URL:-http://seafile}
      labels:
-      caddy: ${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}
+      caddy: http://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}
        caddy.1_handle_path: "/socket.io/*"
        caddy.1_handle_path.0_rewrite: "* /socket.io{uri}"
        caddy.1_handle_path.1_reverse_proxy: "{{upstreams 80}}"
@@ -27,7 +27,7 @@
        caddy.2_handle_path.0_rewrite: "* {uri}"
        caddy.2_handle_path.1_reverse_proxy: "{{upstreams 80}}"
      depends_on:
-      db:
+      mariadb:
          condition: service_healthy
      networks:
        - seafile-net

こちらも seafile-server.yml と同様。サービス名を mariadb に変更し、Caddyへのラベルを http 固定に修正している。

caddy.yml

caddy.yml

@@ -4,16 +4,14 @@
     image: ${SEAFILE_CADDY_IMAGE:-lucaslorentz/caddy-docker-proxy:2.12-alpine}
     restart: unless-stopped
     container_name: seafile-caddy
-    ports:
-      - 80:80
-      - 443:443
     environment:
        - CADDY_INGRESS_NETWORKS=seafile-net
     volumes:
-      - /var/run/docker.sock:/var/run/docker.sock
+      -  /run/user/1000/docker.sock:/var/run/docker.sock
        - ${SEAFILE_CADDY_VOLUME:-/opt/seafile-caddy}:/data/caddy
     networks:
        - seafile-net
+      - app-net
     healthcheck:
        test: ["CMD-SHELL", "curl --fail http://localhost:2019/metrics || exit 1"]
        start_period: 20s
@@ -24,3 +22,6 @@
 networks:
   seafile-net:
     name: seafile-net
+  app-net:
+    external: true
+    name: arimasou16_app-net

Nginx Proxy Manager経由で接続するため、公開用の ports マッピングは削除した。 前回、nginxからこのCaddyコンテナへ接続できなかった原因は、ここのソケット設定を変えていなかったことだ。Dockerをrootlessモードで動かしている場合、ソケットのパスが異なるため修正が必要になる。最後に、Nginx Proxy Managerでも使用しているネットワーク(app-net)を追加した。

このように、基本的にはそれほど大きな修正の必要なくアップグレードできた。

Seadoc

最後に、Seafileの拡張機能であるオンライン共同作業ドキュメントエディタ「 SeaDoc」の画面を紹介しておく。

SeaDoc 画面1
SeaDoc 画面2
sdoc
SeaDoc 画面3
md
SeaDoc 画面4
exdraw

正直なところ、個人利用において使う機会はほとんどないかもしれない。ちなみに、Nginx Proxy Manager側で強制SSLを有効にしていると、このエディタ画面の読み込みに失敗する現象があった。

ともあれ、以前構築できなかった構成が実現し、新機能が使えるようになったのは非常に気持ちがいいものだ。


  1. 以前の docker-compose には --project-directory というオプションがあったが、現在の docker compose コマンドで同様の指定を試みてもエラーにならず、意図した挙動にならなかった。 ↩︎

  2. バインドすべき /opt/seafile-fuse が存在しないと起動エラーになる。一度起動した後に後から追加する分には問題なかった。 ↩︎