====== 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
{{tag>日記 Nextcloud}}