skip to content
barorin&?

NextcloudをDockerで構築する方法

/ 3 min read

Table of Contents

はじめに

Dockerを使用してNextcloudを構築したので、簡単にメモしておこうと思います。

環境

  • VPS (XServer VPS)
    • CPU 2コア
    • メモリ 2GB
    • ストレージ 50GB
  • Ubuntu 22.04
  • Docker 28.0.1

バージョン情報

  • Nextcloud Hub 10 (31.0.1)
  • PHP 8.3.19
  • mariadb 11.4.5

作り方

  1. ./.envを作る
Terminal window
TZ=Asia/Tokyo
PHP_MEMORY_LIMIT=512M
PHP_OPCACHE_MEMORY_CONSUMPTION=256
MYSQL_ROOT_PASSWORD=mysql-root-password
MYSQL_PASSWORD=mysql-password
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
NEXTCLOUD_DOMAIN=your-domain.com
  1. ./docker-compose.ymlを作る
services:
db:
container_name: nextcloud-db
image: mariadb:11.4 # Nextcloudの推奨バージョンを選択してください
restart: always
volumes:
- db:/var/lib/mysql
environment:
TZ: ${TZ}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
redis:
container_name: nextcloud-redis
image: redis:alpine
restart: always
volumes:
- redis:/data
app:
container_name: nextcloud
image: nextcloud
restart: always
ports:
- 127.0.0.1:8081:80
volumes:
- nextcloud:/var/www/html
environment:
TZ: ${TZ}
PHP_MEMORY_LIMIT: ${PHP_MEMORY_LIMIT}
PHP_OPCACHE_MEMORY_CONSUMPTION: ${PHP_OPCACHE_CONSUMPTION}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_HOST: db
REDIS_HOST: redis
TRUSTED_DOMAINS: ${NEXTCLOUD_DOMAIN},127.0.0.1,localhost
extra_hosts:
- ${NEXTCLOUD_DOMAIN}:127.0.0.1
depends_on:
- db
- redis
volumes:
db:
nextcloud:
redis:
  1. cronを設定する cronはコンテナ内で実行せず、ホスト側で実行するようにしました。
Terminal window
$ sudo crontab -e
# 以下を追加
*/5 * * * * sudo docker exec --user www-data コンテナ名 php /var/www/html/cron.php
  1. Nextcoudの設定 構築直後は数多のエラーが出ているので、一つずつ潰していきます。
  • HTTPS関係の設定
Terminal window
$ docker exec -u www-data nextcloud php occ config:system:set overwrite.cli.url --value=https://nextcloud.charsiu.men
$ docker exec -u www-data nextcloud php occ config:system:set overwriteprotocol --value=https
$ docker exec nextcloud sh -c 'echo "Header set Strict-Transport-Security \"max-age=15768000; includeSubDomains; preload\"" >> /var/www/html/.htaccess'
  • メンテナンスウィンドウの設定
Terminal window
$ docker exec -u www-data nextcloud php occ config:system:set maintenance_window_start --value=1
  • デフォルト電話地域の設定
Terminal window
$ docker exec -u www-data nextcloud php occ config:system:set default_phone_region --value=JP
  • メール関係の設定
  1. 管理者の個人情報設定画面からメールアドレスを設定する
  2. 管理者設定 > 基本設定 > メールサーバー を設定する

(例)SendGridを使用する場合

送信モード: STMP
暗号化: None/STARTTLS
送信元アドレス: your-address@your-domain.com
サーバーアドレス: smtp.sendgrid.net:587
認証: チェックを入れる
資格情報: apikey SendGridのAPIキー

※ 先に管理者のメールアドレスを設定しないと、メール送信テストでaxioserror request failed with status code 400というエラーになるので注意!

  1. おまけ 以上の設定でエラーは消えたと思いますが、以下の設定を追加することでストレージの容量を削減していきます。
  • ログファイルのサイズ変更
Terminal window
$ docker exec -u www-data nextcloud php occ log:file --rotate-size=10mb
  • 画像関係の設定
  1. コンテナに入るってpreviewフォルダを削除
Terminal window
$ docker exec -it nextcloud bash
$ rm -R /var/www/nextcloud/data/appdata_xxxxxxxx/preview
  1. サムネイルJPEGの画質とサイズを変更
Terminal window
$ docker exec -u www-data nextcloud php occ config:app:set preview jpeg_quality --value 70
$ docker exec -u www-data nextcloud php occ config:system:set jpeg_quality --value 70
$ docker exec -u www-data nextcloud php occ config:system:set preview_max_x --value 1024
$ docker exec -u www-data nextcloud php occ config:system:set preview_max_y --value 1024
$ docker exec -u www-data nextcloud php occ config:system:set preview_max_scale_factor --value 1