やりたいことはCollabora Onlineの利用なんだけれど、そのための基盤としてNextcloudが必要だったので。Collabora Onlineを使いたい人はあまりいない気もするので、この記事はNextcloudまでで独立。Collabora Online構築すること前提の設定になっている。
環境
- M2 Pro Mac mini
- macOS Sonoma 14.7.7
- OrbStack 2.0.4
LAN 内運用が基本。AIO(All in One)は証明書発行とか色々あってむしろやりづらいので、イチから作ったほうがよし。
公式によると、Docker DesktopではなくOrbStack推奨とのことだった。OrbStackの入れ方は以下の記事。

サーバインストール手順
ディレクトリつくる。
mkdir ~/nextcloud-docker
cd ~/nextcloud-dockerdocker-compose.ymlつくる。DBはポスグレ。パスワード変える。ポートは初期設定だと8080なんだが、使いたくなかったので21180にしている。
nextcloudとDBのバージョンは固定している。最初latestでやったのだが、なにかぶっ壊れていて画像の閲覧すら失敗する始末だった。固定したほうがいいと思う。
services:
db:
image: postgres:15.8
restart: always
environment:
POSTGRES_USER: nextcloud
POSTGRES_PASSWORD: パスワード # <----------変更
POSTGRES_DB: nextcloud
volumes:
- db_data:/var/lib/postgresql/data
app:
image: nextcloud:28-fpm
restart: always
volumes:
- nextcloud_data:/var/www/html
depends_on:
- db
web:
image: nginx:stable
restart: always
ports:
- "21180:80" # <-----------変更
volumes:
- nextcloud_data:/var/www/html:ro
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
volumes:
db_data:
nextcloud_data:
リバースプロキシするnginx.confをつくる。
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php;
client_max_body_size 512M;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
location / {
try_files $uri $uri/ /index.php$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location ~ \.php(?:$|/) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_pass app:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
fastcgi_read_timeout 300;
fastcgi_param HTTPS off;
fastcgi_param HTTP_X_FORWARDED_PROTO $scheme;
fastcgi_param HTTP_X_FORWARDED_HOST $host;
fastcgi_param HTTP_X_FORWARDED_SERVER $host;
}
location ~* \.(?:css|js|woff2?|svg|gif|map)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
access_log off;
}
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_types text/plain text/css application/javascript application/json image/svg+xml application/xml+rss;
location ~ /\.ht {
deny all;
}
}
実行。
docker compose up -dhttp://localhost:21180で初期セットアップ画面にアクセスできる。管理者ユーザ名とパスワードは適当に決めつつ、データベースの設定をPostgresにしつつ、設定ファイルとあわせる。
| 項目 | 値 |
|---|---|
| データベースユーザー | nextcloud |
| データベースパスワード | 変更したパスワード |
| データベース名 | nextcloud |
| データベースホスト | db |
次、推奨アプリはスキップする。
ダッシュボードが表示されたらサーバは準備完了。
動作確認
とりあえずファイルからpngとかpdfのviewerが機能することを確認する。
この時点ではdocxとかはまだ使えない。
IPアドレスでアクセスできるようにする
このままだとlocalhostからしかアクセスできないので。設定ファイルを書き換える。
docker compose exec -u www-data app php occ config:system:set trusted_domains 1 --value=IPアドレスコンテナは再起動する。
docker compose down
docker compose up -d(ミスった時) クリーンインストール
けっこう何度か再インストールすることになってしまった。全削除。
docker compose down -v止めてるやつ全部消していいならprune -aしたらスッキリ(自己責任)
docker system prune -aクライアント側
クライアント側は「Download and install Nextcloud」よりアプリをダウンロードしてインストール。
実行すると、サーバのIPアドレスについて聞かれるので、ここまでに設定したIPアドレス:ポート番号を入力すると、ログイン&許可を求められるので、ログインして許可すればOK。同期フォルダを選択すれば、後はDropbox感覚でいける。
所感
色々とハマった。最初All in Oneパッケージでやろうと思ったが、余計なことしすぎていて、LAN内で必要なことだけしたい自分にはむしろ設定がしんどかった。AIにもかなり嘘をつかれた……いったい昔より楽になったのかわからない。昔だったら検索したらドンピシャな記事が出てきたもんだけどな……。あと証明書とかいうバカバカしい問題に取り組まなくて済んだわけだし。
とりあえず1日が消えた。ここまで苦労してやる意味があるのかと思った。まぁ苦労したのは次の記事でやるCollabora Onlineを設定があったからではあるんだが……。

コメント