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
作り方
./.env
を作る
TZ=Asia/TokyoPHP_MEMORY_LIMIT=512MPHP_OPCACHE_MEMORY_CONSUMPTION=256MYSQL_ROOT_PASSWORD=mysql-root-passwordMYSQL_PASSWORD=mysql-passwordMYSQL_DATABASE=nextcloudMYSQL_USER=nextcloudNEXTCLOUD_DOMAIN=your-domain.com
./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:
- cronを設定する cronはコンテナ内で実行せず、ホスト側で実行するようにしました。
$ sudo crontab -e
# 以下を追加*/5 * * * * sudo docker exec --user www-data コンテナ名 php /var/www/html/cron.php
- Nextcoudの設定 構築直後は数多のエラーが出ているので、一つずつ潰していきます。
- HTTPS関係の設定
$ 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'
- メンテナンスウィンドウの設定
$ docker exec -u www-data nextcloud php occ config:system:set maintenance_window_start --value=1
- デフォルト電話地域の設定
$ docker exec -u www-data nextcloud php occ config:system:set default_phone_region --value=JP
- メール関係の設定
- 管理者の個人情報設定画面からメールアドレスを設定する
- 管理者設定 > 基本設定 > メールサーバー を設定する
(例)SendGridを使用する場合
送信モード: STMP
暗号化: None/STARTTLS
送信元アドレス: your-address@your-domain.com
サーバーアドレス: smtp.sendgrid.net:587
認証: チェックを入れる
資格情報: apikey SendGridのAPIキー
※ 先に管理者のメールアドレスを設定しないと、メール送信テストでaxioserror request failed with status code 400
というエラーになるので注意!
- おまけ 以上の設定でエラーは消えたと思いますが、以下の設定を追加することでストレージの容量を削減していきます。
- ログファイルのサイズ変更
$ docker exec -u www-data nextcloud php occ log:file --rotate-size=10mb
- 画像関係の設定
- コンテナに入るってpreviewフォルダを削除
$ docker exec -it nextcloud bash$ rm -R /var/www/nextcloud/data/appdata_xxxxxxxx/preview
- サムネイルJPEGの画質とサイズを変更
$ 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