目次

2022.10.01 Nextcloud

公式の docker-compose.yml で環境を作成

https://github.com/nextcloud/docker/tree/master/.examples/docker-compose/with-nginx-proxy/mariadb/fpm

nginx (proxy) + nginx (web) + Nextcloud (php-fpm) + mariaDB + redis の全部入り

git で持ってくる

git clone https://github.com/nextcloud/docker.git
rsync -av docker/.examples/docker-compose/with-nginx-proxy/mariadb/fpm/ /app/
cd /app

db.env

Nextcloudのdb部分と同じパスワードを設定する。

MYSQL_PASSWORD=[PASSWORD]
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud

docker-compose.yml

root@nextcloud:/app# cat docker-compose.yml 
version: '3'

services:
  db:
    image: mariadb:10.5
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: always
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=[PASSWORD]
      - MARIADB_AUTO_UPGRADE=1
      - MARIADB_DISABLE_UPGRADE_BACKUP=1
    env_file:
      - db.env

  redis:
    image: redis:alpine
    restart: always

  app:
    image: nextcloud:fpm-alpine
    restart: always
    volumes:
      - ./nextcloud:/var/www/html
    environment:
      - MYSQL_HOST=db
      - REDIS_HOST=redis
      - PHP_MEMORY_LIMIT=1G
      - PHP_UPLOAD_LIMIT=5G
      - OVERWRITEPROTOCOL=https
    env_file:
      - db.env
    depends_on:
      - db
      - redis

  web:
    build: ./web
    restart: always
    volumes:
      - ./nextcloud:/var/www/html:ro
    environment:
      - VIRTUAL_HOST=nextcloud.hogehoge.com
      - LETSENCRYPT_HOST=nextcloud.hogehoge.com
      - LETSENCRYPT_EMAIL=matsui@nextcloud.hogehoge.com
    depends_on:
      - app
    networks:
      - proxy-tier
      - default

  cron:
    image: nextcloud:fpm-alpine
    restart: always
    volumes:
      - ./nextcloud:/var/www/html
    entrypoint: /cron.sh
    depends_on:
      - db
      - redis

  proxy:
    build: ./proxy
    restart: always
    ports:
      - 80:80
      - 443:443
    labels:
      com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true"
    volumes:
      - certs:/etc/nginx/certs:ro
      - vhost.d:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      - proxy-tier

  letsencrypt-companion:
    image: nginxproxy/acme-companion
    restart: always
    volumes:
      - certs:/etc/nginx/certs
      - acme:/etc/acme.sh
      - vhost.d:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - proxy-tier
    depends_on:
      - proxy

# self signed
#  omgwtfssl:
#    image: paulczar/omgwtfssl
#    restart: "no"
#    volumes:
#      - certs:/certs
#    environment:
#      - SSL_SUBJECT=nc.kumolabo.com
#      - CA_SUBJECT=shinya.matsui@gmogshd.com
#      - SSL_KEY=/certs/servhostname.local.key
#      - SSL_CSR=/certs/servhostname.local.csr
#      - SSL_CERT=/certs/servhostname.local.crt
#    networks:
#      - proxy-tier

volumes:
  db:
  nextcloud:
  certs:
  acme:
  vhost.d:
  html:

networks:
  proxy-tier:

Preview Generator

Preview Generatorを入れとくと、自動でサムネイルを作成してくれる。

1.UIからアプリを入れる

アプリからPreview Generatorを有効にする。

あとはcronコンテナがcron.phpで実行してくれる。

2.docker-compose.yml修正

こうすると、Preview Generatorに必要なffmpegがインストールされる。

  app:
    image: nextcloud:fpm-alpine
    restart: always
    volumes:
      - ./nextcloud:/var/www/html
    environment:
      - MYSQL_HOST=db
      - REDIS_HOST=redis
      - PHP_MEMORY_LIMIT=1G
      - PHP_UPLOAD_LIMIT=5G
      - OVERWRITEPROTOCOL=https
    entrypoint: sh
    command:
      - -c
      - apk add sudo && apk add ffmpeg && /entrypoint.sh php-fpm
    env_file:
      - db.env
    depends_on:
      - db
      - redis

3.反映

docker-compose stop
docker-compose up -d

4.手動で実行する場合

# docker-compose exec -u www-data cron php occ preview:generate-all -vvv

もしくは

# docker exec app-cron-1 sudo -u www-data PHP_MEMORY_LIMIT=512M php occ preview:generate-all -vvv

5.Cronを設定しておく

preview:pre-generate で実行すると、まだサムネイルができてないものだけ実行

# crontab -l
*/10 * * * * docker-compose exec -u www-data cron php occ preview:pre-generate -vvv

Maps

地図上に写真の場所をマッピングしてくれる。

https://apps.nextcloud.com/apps/maps

1.Mapsを有効化

アプリからMapsを有効にする。

あとはcronコンテキストが有効であれば自動でマッピングしてくれます。

※位置情報がない写真は先に位置情報を登録して上げる必要があります。
https://join.biglobe.ne.jp/mobile/sim/gurashi/ios_0060/

2.手動で実行する場合

# docker-compose exec -u www-data app php occ maps:scan-photos

もしくは

# docker exec app-cron-1 sudo -u www-data PHP_MEMORY_LIMIT=512M php occ maps:scan-photos

Let's Encrypt

Let's Encrypt は、nginxproxy/acme-companionで動いててて

下記のような感じで、1時間おきに動作している

Creating/renewal nextcloud.hogehoge.com certificates... (nextcloud.hogehoge.com)
[Wed Dec 21 21:46:22 UTC 2022] Domains not changed.
[Wed Dec 21 21:46:22 UTC 2022] Skip, Next renewal time is: Fri Jan 27 07:34:32 UTC 2023
[Wed Dec 21 21:46:22 UTC 2022] Add '--force' to force to renew.
Sleep for 3600s
Creating/renewal nextcloud.hogehoge.com certificates... (nextcloud.hogehoge.com)
[Wed Dec 21 22:46:23 UTC 2022] Domains not changed.
[Wed Dec 21 22:46:23 UTC 2022] Skip, Next renewal time is: Fri Jan 27 07:34:32 UTC 2023
[Wed Dec 21 22:46:23 UTC 2022] Add '--force' to force to renew.
Sleep for 3600s

NextCloudでオブジェクトストレージ利用

# cat nextcloud/config/config.php
'objectstore' => array (
  'class' => 'OC\\Files\\ObjectStore\\S3',
  'arguments' => 
  array (
    'bucket' => 'testbuckets', //オブジェクトストレージのバケット名
    'autocreate' => true, 
    'key' => 'XXXXXXXXXXXXXXXXXXXXX', // Access key
    'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', // Secret access key:
    'hostname' => 's3.hoghoge.com', //オブジェクトストレージのホスト名
    'port' => 443, //
    'use_ssl' => true, //ssl 
    'use_path_style' => true, // 
  ),
),

upgrade

1 停止

docker-compose stop

2 Dockerイメージ変更

バージョンは1つずつアップデートする必要があります。

vi docker-compose.yml

app:
  image: nextcloud:24-fpm-alpine
cron:
  image: nextcloud:24-fpm-alpine
↓に変更
app:
  image: nextcloud:25-fpm-alpine
cron:
  image: nextcloud:25-fpm-alpine

3 起動

docker-compose up -d

4 アップグレード作業

docker-compose exec -u www-data cron php occ upgrade