Nextcloud fpm 版在 Dokcer 下安裝踩坑


安裝

首先到 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 用戶

更新:現在可以通過 sudo docker exec -it -u 33 bec872 bash 增加 -u 33 參數將自己切換到 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

cron 不生效怎么辦

如果按照上面的操作方式配置的定時任務不生效,那么可以直接在主機配置 cron 任務

首先檢查 cron 狀態

service cron status

如果沒有安裝 cron 則需要按照上面的方法安裝 cron

安裝完成后輸入

crontab -e

編輯下面的文本

*/5 * * * * docker exec -u 33 bec872 php -d memory_limit=-1 -f /var/www/html/cron.php --define apc.enable_cli=1

注意,此處需要刪掉 -it 參數

保存后重啟 cron 服務

service cron restart

超過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

轉載請注明來源


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM