• 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 用户

    然后执行

    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

    转载请注明来源

  • 相关阅读:
    Android Studio官方文档: 如何在你的设备上运行你的程序
    Android Studio ERROR: x86 emulation currently requires hardware acceleration!报错解决傻瓜教程~
    Android studio 无法启动安卓模拟器
    从Windows系统服务获取活动用户的注册表信息(当前活动用户的sessionId. 当前活动用户的 hUserToken)
    Linux IO模式
    宽字符std::wstring的长度和大小问题?sizeof(std::wstring)是固定的32,说明std::wstring是一个普通的C++类,而且和Delphi不一样,没有负方向,因为那个需要编译器的支持
    Delphi 拦截滚轮事件不响应滚轮的上下滚动
    台湾芯片产业的兴与衰:输赢千亿美元的生死搏杀
    go语言
    一次请求到响应的整个流程
  • 原文地址:https://www.cnblogs.com/puzhiwei/p/16056743.html
Copyright © 2020-2023  润新知