LAN内でMac + Nextcloudを構築する

やりたいことは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-docker

docker-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 -d

http://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を設定があったからではあるんだが……。

この記事をいいなと思っていただけた方、よければ高評価・チャンネル登録……はないので、コメント・SNSでシェア・ブックマーク、RSSフィード登録を、よろしくお願い致します。

コメント

コメントする

目次