Nginx Proxy Managerを導入したこともあり、Seafileを最新バージョン(2026/04/01時点のバージョン13)にアップグレードすることにした。
また、過去にDocker版の caddy がリバースプロキシとして用意されていた際、すでに nginx を使っていたため、そちらと連携させようとして上手くいかなかった経緯がある。今回はそのリトライも兼ねている。
とりあえず、 公式ドキュメントの通り、.env、seafile-server.yml、seadoc.yml、caddy.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 は一応バージョンを明記。db は seafile-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 でも正常に動作していることは確認済みだ。
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化しているため .env の SEAFILE_SERVER_PROTOCOL は https としているが、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」の画面を紹介しておく。
正直なところ、個人利用において使う機会はほとんどないかもしれない。ちなみに、Nginx Proxy Manager側で強制SSLを有効にしていると、このエディタ画面の読み込みに失敗する現象があった。
ともあれ、以前構築できなかった構成が実現し、新機能が使えるようになったのは非常に気持ちがいいものだ。



