安裝
首先到 https://registry.hub.docker.com/_/nextcloud 獲取 Nextcloud 的示例 docker-compose
version: '2'
volumes:
nextcloud:
db:
services:
db:
image: mariadb
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud:fpm
restart: always
links:
- db
volumes:
- nextcloud:/var/www/html
environment:
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
web:
image: nginx
restart: always
ports:
- 8080:80
links:
- app
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
volumes_from:
- app
修改其為適合自己使用的版本,如我是這麼修改的
version: '2'
volumes:
nextcloud:
db:
services:
db:
image: mariadb
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --skip-innodb-read-only-compressed
volumes:
- /home/puzhiwei/docker/nextcloud/mysql/lib:/var/lib/mysql
- /home/puzhiwei/docker/nextcloud/mysql/etc:/etc/mysql
environment:
- MYSQL_ROOT_PASSWORD=
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud:fpm
restart: always
links:
- db
volumes:
- /home/puzhiwei/docker/nextcloud/config:/var/www/html/config
- /home/puzhiwei/docker/nextcloud/data:/var/www/html/data
- /home/puzhiwei/docker/nextcloud/apps:/var/www/html/custom_apps
environment:
- MYSQL_PASSWORD=
- MYSQL_DATABASE=
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
web:
image: nginx
restart: always
ports:
- 81:80
links:
- app
volumes:
- /home/puzhiwei/docker/nextcloud/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
volumes_from:
- app
mariadb 配置
我主要新增了 Docker 容器到本地檔案的對映,為 mariadb 新增了 --skip-innodb-read-only-compressed
啟動命令,如果沒有這段啟動命令,會出現
nextcloud install Error while trying to initialise the database: An exception occurred while executing a query: SQLSTATE[HY000]: General error: 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
的異常。
Nginx 配置
此處首先要到 https://github.com/nextcloud/docker/blob/master/.examples/docker-compose/with-nginx-proxy/mariadb/fpm/web/nginx.conf 獲取需要的Ningx 配置檔案,之後設定相應的檔案對映。
啟動
直接使用 docker-compose up -d
等待映象下載執行完成即可。
然後訪問 http://ip:81
設定管理員賬號,完成安裝。
踩坑
如何配置 cron 任務
首先在容器中安裝需要的軟體
# 安裝 cron
apt update
apt install cron
# 安裝 vim
apt install vim
# 啟動 cron
service cron start
由於是在 Docker 容器中執行的 Nextcloud,進入docker 容器預設是 root 使用者,此時執行 php -f /var/www/html/cron.php
會出現
Console has to be executed with the user that owns the file config/config.php
Current user id: 0
Owner id of config.php: 33
的異常,因為 cron.php 需要使用 www-data 使用者來執行
而 docker 容器中又缺少相應的許可權管理工具。
此時我們需要在進入 Nextcloud 映象之後執行
root@50ce68418e44:/var/www/html# chsh -s /bin/bash www-data
root@50ce68418e44:/var/www/html# su - www-data
將自己切換到 www-data 使用者
然後執行
php -d memory_limit=-1 -f /var/www/html/cron.php --define apc.enable_cli=1
注意此處不加 memory_limit=-1
會出現
Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 438272 bytes) in /var/www/html/3rdparty/composer/autoload_real.php on line 37
的異常。
執行成功後我們就可以配置定時任務了
執行
# 設定 crontab
crontab -e
然後新增
*/5 * * * * chsh -s /bin/bash www-data && su - www-data -c "php -d memory_limit=-1 -f /var/www/html/cron.php --define apc.enable_cli=1"
即可完成 Nextcloud 的 cron 配置
更多 cron 配置請參照 Nextcloud 文件:https://docs.nextcloud.com/server/23/admin_manual/configuration_server/background_jobs_configuration.html
超過30M的大圖片無法預覽
造成此問題的原因是系統預設給 PHP 圖片處理預覽的記憶體太小,預設為 128 M,而預覽大一點的圖片 512 M 是一個合適的選擇,當然你也可以設定更大的數字。
修改 config.php 檔案,新增以下引數即可。
* max memory for generating image previews with imagegd (default behavior)
* Reads the image dimensions from the header and assumes 32 bits per pixel.
* If creating the image would allocate more memory, preview generation will
* be disabled and the default mimetype icon is shown. Set to -1 for no limit.
*
* Defaults to ``128`` megabytes
*/
'preview_max_memory' => 512,
版權
本文首發於 https://www.buguagaoshu.com/archives/nextcloudfpmban-zai-dokcerxia-an-zhuang-cai-keng
轉載請註明來源