2

Nextcloud fpm 版在 Dokcer 下安装踩坑 - 陕西颜值扛把子

 2 years ago
source link: https://www.cnblogs.com/puzhiwei/p/16056743.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

本文首发于 https://www.buguagaoshu.com/archives/nextcloudfpmban-zai-dokcerxia-an-zhuang-cai-keng

转载请注明来源


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK