安装

首先到 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 && 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

转载请注明来源

Nextcloud fpm 版在 Dokcer 下安装踩坑的更多相关文章

  1. Android Studio安装踩坑

    title: Android Studio安装踩坑 date: 2018-09-07 19:31:32 updated: tags: [Android,Android Studio,坑] descri ...

  2. Faster_Rcnn在windows下运行踩坑总结

    Faster_Rcnn在windows下运行踩坑总结  20190524 今天又是元气满满的一天! 1.代码下载 2.编译 3.下载数据集 4.下载pre-train Model 5.运行train ...

  3. Mac下Charles踩坑记录

    初次使用Charles,摸索着抓包的过程中遇到了很多问题.在这里一一记录一下,避免其他初学者踩坑. 问题1:不显示request和response? 在Charles的配置页面可以勾选是否把reque ...

  4. selinium的ruby版在windows8下安装

    1.安装ruby,当然windows下是最简单的装一个rubyinstaller,官网有.一步到位 2.因为selinium官网被墙,所以改成淘宝的一个资源库 gem sources --remove ...

  5. windows7旗舰版64位下安装、破解及执行QTP11报错

    说明:假设你出现了下面几种情况,希望能解决你的问题:假设没有,就当路过. 1.安装qtp11时报vc++ 2005缺少,但怎么也不能安装成功 解决方法: 1.找到qtp安装包里面的vc++ 2005组 ...

  6. Win10自带Ubuntu子系统下Mysql安装踩坑记录

    linux系统为win10自带Ubuntu子系统 错误的安装过程 我按照一般的方法安装mysql,安装步骤如下 1.升级源 $ sudo apt-get update 2.安装mysql $ sudo ...

  7. Linux下pcstat安装踩坑教程

    首先安装golang 1.进入官方链接下载对应自己系统版本的Golang安装包:https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz root@ub ...

  8. React-Native android在windows下的踩坑记

    坑很多,跳之前做好准备.没有VPN的同学请浏览完本文后慎行.   你需要先安装最新版本的node.js(我最后使用的是v4.1.2),前往官网下载>> 注:我win7已经安装过Visual ...

  9. Linux mint 安装踩坑记录

    记得之前电脑上的那个Ubuntu是去年寒假的时候安装的,算下来自己用Linux也快一年了.虽然在去年暑假的时候我也曾经想过要把Ubuntu升级到18.04可是当时安装了几次都没有成功,自己也就放弃了. ...

随机推荐

  1. tomcat安装笔记

    安装Tomcat 1.下载安装包.上传服务器.解压. 官网下载地址Apache Tomcat - Apache Tomcat 8 软件下载 [root@test /]# mkdir /root/tom ...

  2. 第8章 File I/O,File类操作文件的属性

    1.文件 1.1.什么是文件? 答:文件可认为是相关记录或放在一起的数据的集合 1.2.文件- -般存储在哪里? 答: 磁盘,硬盘,文件夹 1.3.JAVA程序如何访向文件属性? JAVA API:i ...

  3. MyBatis辅助功能点三:延迟加载

    延迟加载即先加载必需信息,然后再根据需要进一步加载信息的方式.实际应用如:常出现先查询表A,再根据表A的输出结果查询表B的情况.而有些时候,从A表查询出来的数据,只有一部分要查询表B.这时用延迟加载就 ...

  4. 运行EXE文件,系统提示缺少api-ms-win-crt-runtime-l1-1-0.dll,解决方法!!

    api-ms-win-crt-runtime-l1-1-0.dll是一个Windows系统的应用程序拓展文件,也叫动态链接库文件.这个文件能帮助绝大多数用户解决在安装或启动部分游戏软件时出现计算机中丢 ...

  5. 力扣算法经典第一题——两数之和(Java两种方式实现)

    一.题目 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数, 并返回它们的数组下标. 你可以假设每种输入只会对应一 ...

  6. Go内存逃逸分析

    Go的内存逃逸及逃逸分析 Go的内存逃逸 分析内存逃逸之前要搞清楚一件事 我们编写的程序中的函数和局部变量是存放在栈上的(补充一点堆上存储的数据的指针 是存放在栈上的 因为指针的大小是可以提前预知的 ...

  7. Docker容器日志的种类以及存储

    Docker 日志 Docker的日志可以分为两类: stdout标准输出日志 stdout就是标准输出里面的日志, 比如程序运行时输出在控制台的内容就会写入标准输出 原理就是当在启动进程的时候,进程 ...

  8. 国内专业web报表工具,完美解决中国式报表难题

    近几年报表工具的热度不断上升,很多企业都用上了全新的报表工具,主要是企业数据化转型已经成为趋势.在进行选型的时候,很多企业最好都选择国内的报表工具,相信一些人不知道为什么国内的报表工具表现比国外的好. ...

  9. 还在被数据分析报告折磨?Smartbi让你解放双手

    数据分析报告贯穿了企业经营的时时刻刻,方方面面. 数据分析报告最常用于汇报分享:团队需要分享.沟通,数据分析师需要洞察数据.分析结果分享给企业领导.团队同事.大众媒体及更多的利益相关方. 数据分析报告 ...

  10. 【C# IO 操作 】IFormatProvider接口|IFormattable 接口 格式化接口

    IFormatProvider接口获取一个满足要求的个格式化器. 方法 object? GetFormat(Type? formatType);GetFormat方法主要提供一个满足指定要求的对象,该 ...