LoginSignup
10
14

More than 3 years have passed since last update.

NextCloudをDockerでデプロイする(SMB対応)

Posted at

NextCloudを使ってみようと思ったのですが、公式のDockerイメージだけでは外部ストレージとしてSMBが利用できなくて少し詰まったので、メモとして残します。

apt-getでsmbclientのみをインストールする方法もあるみたいですが、ファイルサーバ側でSMBv1/CIFSを無効化していると「Protocol negotiation failed: NT_STATUS_CONNECTION_RESET」というエラーが出て接続できませんでした。

環境

Fedora release 30

前提

docker/docker-composeが使えること。

作業

適当なディレクトリを作成し、Dockerfileとdocker-compose.ymlを作成する。
ボリュームのマウント場所が気に入らない場合は修正してください。

Dockerfile
FROM nextcloud:apache
RUN apt-get update && apt-get install -y libsmbclient-dev smbclient && pecl install smbclient && docker-php-ext-enable smbclient
docker-compose.yml
version: '2'

services:
  db:
    image: postgres:11-alpine
    restart: always
    volumes:
      - /dockerdata/nextcloud/db:/var/lib/postgresql/data
    environment:
      TZ: Asia/Tokyo
      POSTGRES_PASSWORD: #適当なパスワード
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud

  app:
    build: ./
    ports:
      - 8080:80
    volumes:
      - /dockerdata/nextcloud/app:/var/www/html
    restart: always
    depends_on:
      - db
    environment:
      TZ: Asia/Tokyo
      POSTGRES_PASSWORD: #適当なパスワード
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
      POSTGRES_HOST: db:5432

起動

docker-compose build --pull
docker-compose up -d

確認/adminユーザー作成(数分放置)
http://localohost:8080
2resized.png

ログインしたら「アプリ>あなたのアプリ>External storage support」を有効にする
3resized.png

「設定>管理>外部ストレージ」でファイルサーバの情報を入力してチェックマークをクリックで完了。
1resized.png

httpsでインターネットに公開する

リバースプロキシ+Let's Encryptで暗号化し、その後ろにNextCloudをぶら下げます。
インターネット側から80/443で実行しているホストにアクセスできること、利用するドメインが名前解決できることが前提です。
リバースプロキシに後から別のコンテナをぶら下げられるようにネットワークはexternalにしておきます。

docker-compose.yml
version: '2'

services:
  db:
    image: postgres:11-alpine
    restart: always
    volumes:
      - /dockerdata/nextcloud/db:/var/lib/postgresql/data
    environment:
      TZ: Asia/Tokyo
      POSTGRES_PASSWORD: #適当なパスワード
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud

  app:
    build: ./
    expose:
      - 80
    volumes:
      - /dockerdata/nextcloud/app:/var/www/html
    restart: always
    depends_on:
      - db
    environment:
      TZ: Asia/Tokyo
      POSTGRES_PASSWORD: #適当なパスワード
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
      POSTGRES_HOST: db:5432
      VIRTUAL_HOST: #あなたのドメイン名
      LETSENCRYPT_HOST: #あなたのドメイン名
      LETSENCRYPT_EMAIL: #メアド

  nginx-proxy:
    image: jwilder/nginx-proxy
    restart: always
    ports:
      - 80:80
      - 443:443
    volumes:
      - /dockerdata/nginx-proxy/certs:/etc/nginx/certs:ro
      - /dockerdata/nginx-proxy/htpasswd:/etc/nginx/htpasswd
      - /etc/nginx/vhost.d
      - /usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro

  letsencrypt-nginx-proxy-companion:
    image: jrcs/letsencrypt-nginx-proxy-companion
    restart: always
    volumes:
      - /home/web/wordpress/certs:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
    volumes_from:
      - nginx-proxy

networks:
  default:
    external:
      name: shared

補足

自宅サーバなどで公開したい場合のDDNS設定を書きました。
Route53+MyDNSでサーバを公開する(複数サブドメイン/自動IP報知/Let's Encrypt対応)

10
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
14