使用Docker-compose安装NextCloud,并部署Collabora作为office服务

使用Docker-compose安装NextCloud,并部署Collabora作为office服务

在csdn也同步发布了,csdn上markdown格式显示效果更好些

https://blog.csdn.net/u013568040/article/details/123648666

安装Docker和docker-compose

使用docker-compose可以更快速的构建nextcloud需要的各个服务

准备域名,启用SSL

2个子域名,分别用于Collabora Office和Nextcloud,且两个域名均拥有合法SSL证书,通过备案后在云服务商申请免费证书即可,证书授权一年。

例如:

nextcloud.eeeeeee.com用于访问Nextcloud,collabora.eeeeeeee.com用于部署Collabora Office

nginx的 SSL 证书可用腾讯云或阿里云每年授权一次的免费证书,就不用那个什么letsencrypt搞什么自动续签了,

docker-compose文件

docker-compose.yml

version: '3'

services:

  db:

    image: mariadb:10.5

    container_name: nextcloud-db

    restart: always

    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW

    volumes:

      - ./mariadb/db:/var/lib/mysql

    environment:

      - MYSQL_DATABASE=nextcloud

      - MYSQL_ROOT_PASSWORD=sd21111111111111111w

      - MYSQL_USER=nextcloud

      - MYSQL_PASSWORD=GXDw1111111111111111112

    ports:

      - 3306:3306

  redis:

    image: redis:alpine

    container_name: nextcloud_redis

    restart: always

    expose:

      - 6379


  cron:

    image: nextcloud:apache

    restart: always

    volumes:

      - ./nextcloud_cron:/var/www/html

    entrypoint: /cron.sh

    depends_on:

      - db

      - redis

  nextcloud:

    image: nextcloud:apache

    container_name: nextcloud_web

    restart: always

    volumes:

      - ./nextcloud:/var/www/html

    environment:

      - NEXTCLOUD_ADMIN_USER=eeeee

      - NEXTCLOUD_ADMIN_PASSWORD=L111231

      - NEXTCLOUD_TRUSTED_DOMAINS='nextcloud.eeeeeeeee.com'

      - REDIS_HOST=redis

      - VIRTUAL_HOST=nextcloud.eeeeeee.com

      - TZ=Aisa/Shanghai

      - MYSQL_DATABASE=nextcloud

      - MYSQL_ROOT_PASSWORD=sdeeeeew

      - MYSQL_USER=nextcloud

      - MYSQL_PASSWORD=GXeeeeee

      - MYSQL_HOST=db

      - UID=0

      - GID=0

      - UPLOAD_MAX_SIZE=10G

      - APC_SHM_SIZE=1024M

      - OPCACHE_MEM_SIZE=512

      - CRON_PERIOD=15m

    depends_on:

      - db

      - redis

    links:

      - db

    cap_add:

      - MKNOD

    networks:

      - cloud_net

      - default

  proxy:

    image: nginxproxy/nginx-proxy:alpine

    container_name: nextcloud_proxy

    restart: always

    ports:

      - 80:80

      - 443:443

    volumes:

      - ./nginx/certs:/etc/nginx/certs:ro

      - ./nginx/vhost.d:/etc/nginx/vhost.d

      - ./nginx/html:/usr/share/nginx/html

      - /var/run/docker.sock:/tmp/docker.sock:ro

      - ./nginx/conf.d:/etc/nginx/conf.d

    networks:

      - cloud_net


  cloud_collabora:

    image: collabora/code:6.4.14.3

    container_name: cloud_collabora

    environment:

      - domain=nextcloud\.eeeeeeeeeeeeeeee\.com

      - username=yaeeeee

      - password=qingfeeeeeeeeeeeu

      - dictionaries=de en es zh

    cap_add:

      - MKNOD

    ports:

      - 9980:9980

    restart: always

    volumes:

      - ./collabora/coolwsd.xml:/etc/coolwsd/coolwsd.xml

    networks:

      - cloud_net


networks:

  cloud_net:

docker-compose.yml文件中涉及到的容器及参数配置

db:MySQL 数据库

mariadb是完全兼容mysql的

command:是一个隔离级别的东西,不知道干嘛的,官方文档里并没写

volumes:为了不把其他目录搞乱,我比较喜欢把文件挂在当前目录下,我在 /home/dc/nextcloud/ 文件夹下执行安装命令,文件都会创建在这个下面。

volumes,作用是,将宿主机的目录挂载到docker容器中,这样操作文件时,不用登录docker容器了,直接在宿主机操作就可以了。

如果你使用的是windows版本的docker, 建议买个linux的云服务器,腾讯云双十一的时候都不贵的。

environment:这里设置了root账户的密码,还有给nextcloud使用的账户密码和数据库

  db:

    image: mariadb:10.5

    container_name: nextcloud-db

    restart: always

    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW

    volumes:

      - ./mariadb/db:/var/lib/mysql

    environment:

      - MYSQL_DATABASE=nextcloud

      - MYSQL_ROOT_PASSWORD=sd4eeeeee

      - MYSQL_USER=nextcloud

      - MYSQL_PASSWORD=Geeeeeee

    ports:

      - 3306:3306

redis:缓存服务

cron:后台事务

nextcloud:云盘主服务

image:这里我选用的是nextcloud:apache镜像,因为apache的更能看明白一点

environment:

NEXTCLOUD_ADMIN_***** 配置项里面nextcloud的管理员账号密码。这里如果不设置,应该也可以在初始化的时候设置;

REDIS_HOST直接用redis,可能因为我们启了一个名字是redis的容器;

VIRTUAL_HOST这个应该是给ngnix用的,就用nextcloud的域名就可用;

MYSQL_*****这个是数据库相关设置,和db容器的一致就可以联上;

UID GID是nextcloud操作文件时的用户权限,可用id命令查询用户的uid和gid,我用的是root用户的id。id权限不足回导致上传文件只有文件名不能正常写入文件;

其余的各种上限的配置就按着写就够用了;

cap_add: - MKNOD这个也是一个容器权限相关的设置,控制容器对宿主机文件的操作,MKNOD允许容器使用mknod(2)创建特殊文件;

  nextcloud:

    image: nextcloud:apache

    container_name: nextcloud_web

    restart: always

    volumes:

      - ./nextcloud:/var/www/html

    environment:

      - NEXTCLOUD_ADMIN_USER=yanglijun

      - NEXTCLOUD_ADMIN_PASSWORD=eeeeeeeeeeeeeeeeeeeeeeeeewew

      - NEXTCLOUD_TRUSTED_DOMAINS=nextcloud.weqeq

      - REDIS_HOST=redis

      - VIRTUAL_HOST=nextcloud.sevewnqweq

      - TZ=Aisa/Shanghai

      - MYSQL_DATABASE=nextcloud

      - MYSQL_ROOT_PASSWORD=sd42YGwqewqewqewqw

      - MYSQL_USER=nextcloud

      - MYSQL_PASSWORD=GXwqewqewqwqu

      - MYSQL_HOST=db

      - UID=0

      - GID=0

      - UPLOAD_MAX_SIZE=10G

      - APC_SHM_SIZE=1024M

      - OPCACHE_MEM_SIZE=512

      - CRON_PERIOD=15m

    depends_on:

      - db

      - redis

    links:

      - db

    cap_add:

      - MKNOD

    networks:

      - cloud_net

      - default

proxy:云盘nginx代理服务

volumes: - 宿主机:容器 需要在阿里云把证书下载并放在 ./nginx/certs/

  proxy:

    image: nginxproxy/nginx-proxy:alpine

    container_name: nextcloud_proxy

    restart: always

    ports:

      - 80:80

      - 443:443

    volumes:

      - ./nginx/certs:/etc/nginx/certs:ro

      - ./nginx/vhost.d:/etc/nginx/vhost.d

      - ./nginx/html:/usr/share/nginx/html

      - /var/run/docker.sock:/tmp/docker.sock:ro

      - ./nginx/conf.d:/etc/nginx/conf.d

    networks:

      - cloud_net

cloud_collabora:office预览服务

这里我也试了好几个office预览的服务,包括onlyoffice占用内存会特别多,微软官方的officeOline2013,部署太麻烦了,最终选择了collabora,并且nextcloud还有直接可用的插件,内置的插件对中文支持不好,所以就用这个单独部署的了。这个单独部署的是支持中文的。

environment:

domain一定要设置正确(哪个网站上要用collabora就设置那个网站的地址,不是设置collabora在用的域名),否则在collabora预览的时候会一直初始化然后就没有然后了。

如果要让这个Collabora Office同时服务于多个域名的话,需要在两个不同域名之间加上|,例如:

domain=cloud\\.nextcloud\\.com\|second\\.nexcloud\\.com

username和password是collabora管理后台的账号密码,管理后台的访问地址是https://collabora.seeeeeeee.com/loleaflet/dist/admin/admin.html

如果浏览器打不开新开一个浏览器就好了

cap_add: - MKNOD这个设置用于让collabora能够正常写缓存

  cloud_collabora:

    image: collabora/code:6.4.14.3

    container_name: cloud_collabora

    environment:

      - domain=nextcloud\.eeeee\.com

      - username=eeeeeeeeeeeeee

      - password=qieeeeeeeeeeeeeeeeeee

      - dictionaries=de en es zh

    cap_add:

      - MKNOD

    ports:

      - 9980:9980

    restart: always

    volumes:

      - ./collabora/coolwsd.xml:/etc/coolwsd/coolwsd.xml

    networks:

      - cloud_net

backups:定期备份Nextcloud文件和数据库

(暂时没部署)

backups:

    image: christophetd/duplicacy-autobackup:v1.0

    container_name: backups

    restart: always

    environment:

      BACKUP_NAME: "${BACKUP_NAME}"

      BACKUP_LOCATION: "b2://${B2_BUCKET}"

      BACKUP_SCHEDULE: "${BACKUP_SCHEDULE}"

      BACKUP_ENCRYPTION_KEY: "${BACKUP_ENCRYPTION_KEY}"

      B2_ID: "${B2_ID}"

      B2_KEY: "${B2_KEY}"

    volumes:

      - "${DATA_DIR}:/data"

创建和启动容器:

在docker-compose.yml文件所在目录,运行以下命令:

docker-compose up -d

我在配置完成后,把nextcloud的端口关了,nextcloud服务默认是运行在80端口的(在容器内的80端口),初次安装可用ports把80端口露出来。

命令完成后,就可以用http://宿主机IP:端口,来访问nextcloud了。

如果运行docker-compose,提示权限不够,解决方法:

chmod +x /usr/local/bin/docker-compose

配置数据库

访问首页,进行初始化设置,就不用在这里设置了

进入mysql:

mysql -u root -p

建立数据库

create database nextcloud;

建立数据库用户

create user '你的数据库用户名'@'%' identified by '你的数据库密码';

将数据库用户与数据库关联起来,并允许所有IP访问此数据库

GRANT ALL PRIVILEGES ON 你的数据库用户名 TO '你的数据库用户名@'%' IDENTIFIED BY '你的数据库密码' WITH GRANT OPTION;

刷新权限信息

flush privileges;

参数解释:

nextcloud,代表对这个数据库有效,如果换成*.* ,代表对任意数据库任意表有效

‘%’ 允许任意IP访问数据库,如果换成’localhost’代表只允许本机访问

配置redis

如果doker-compose.yml添加了redis服务,需要编辑nextcloud的php配置文件来启用服务,配置文件路径是./nextcloud/config/config.php

  'memcache.local' => '\OC\Memcache\Redis',

  'memcache.distributed' => '\OC\Memcache\Redis',

  'memcache.locking' => '\OC\Memcache\Redis',

  'redis' => array(

    'host' => 'redis',  #如果是在本机就是localhost,如果是docker,要和Redis的名一致

    'port' => 6379,

    ),

必要设置

应用商店

应用商店是在墙外的,如果服务器联网不科学,是无法访问到的,即使额能访问到也没法安装成功应用。

国内有一个非常优秀的镜像可用使用,地址 https://www.orcy.net/ncapps/v1/

配置文件路径是/docker/nextcloud/config/config.php,修改配置文件,在最后添加

注意最后也是有逗号的

  'appstoreenabled' => true,

  'appstoreurl' => 'https://www.orcy.net/ncapps/v1/',

受信任的域名

如果域名不受信任,即使指向了nextcloud的服务地址,也是无法打开的,需要在配置文件./nextcloud/config/config.php,修改配置文件,找到trusted_domains,在下面的数组中按编号新增自己的域名,如果是带端口的端口也要写上,有IP的IP也要写

'trusted_domains' =>

  array (

    0 => 'localhost',

    1 => 'nextcloud.eeeeeeeeeeeeee.space',

    2 => 'collabora.eeeeeeeeeeeeeeee.space',

  ),

您的安装没有设置默认的电话区域

管理员后台【概览】页提示【您的安装没有设置默认的电话区域…】

编辑 Nextcloud config 目录中的 config.php 文件,在文件最下方, ); 前添加如下代码

注意,每行代码后需添加英文逗号。

'default_phone_region' => 'CN',

挂载外部存储提示"smbclient" 未安装。无法挂载 “SMB / CIFS”, “SMB / CIFS 使用 OC 登录信息”。

https://qingflow.com/tag/37253/app/c3ab1815/list/1?applyId=53805827

进入Nextcloud容器:

docker exec -it nextcloud_web /bin/bash

apt 更新可用软件包列表:

apt update

用apt安装:

apt install smbclient libsmbclient-dev

pecl install smbclient

docker-php-ext-enable smbclient

重启Docker服务即可

提示”php-imagick模块不支持SVG”

https://www.himstudy.net/%e8%a7%a3%e5%86%b3nextcloud%e6%8f%90%e7%a4%baphp-imagick%e6%a8%a1%e5%9d%97%e4%b8%8d%e6%94%af%e6%8c%81svg%e7%9a%84%e9%97%ae%e9%a2%98/

管理员后台【概览】页提示“此实例中的 php-imagick 模块不支持 SVG。为了获得更好的兼容性,建议安装它。

首先进入容器中

docker exec -it nextcloud_web /bin/bash

输入“apt install libmagickcore-”,然后双击tab键,会显示以“libmagickcore-”开头的组件列表。

然后继续敲入完整的安装命令,安装“libmagickcore-6.q16-6-extra”组件。

apt install libmagickcore-6.q16-6-extra

安装完毕重启docker,然后问题就搞定了。

链接教程中是说要重启apache2,如果有安装php-fpm,需一并重启,笔者是php7.4-fpm,如下:

service apache2 restart

service php7.4-fpm restart

再次刷新管理后台【概览】页,问题解决。

另一种在容器外直接操作的方法(不记得是否验证过):

https://techoverflow.net/2021/08/17/how-to-fix-docker-nextcloud-module-php-imagick-in-this-instance-has-no-svg-support-for-better-compatibility-it-is-recommended-to-install-it/

docker-compose exec nextcloud_web apt -y update

docker-compose exec nextcloud_web apt -y install libmagickcore-6.q16-6-extra

登录无法跳转

弄完以后,我测试发现填写完用户名及密码之后,点击登录无法跳转到主页。但是刷新一下又是登录状态了,最后上网查了下,这是因为web使用https反向代理了http导致的。只需要在配置文件(/config/config.json)中加上一条信息就可以了。

'overwriteprotocol' => 'https',

上传大文件失败

这个网页上传应该会遇到,因为Nginx做了限制。

首先,映射出Nginx的配置文件:

-v /volume1/docker/nginx/nginx.conf:/etc/nginx/nginx.conf

然后修改一下,添加一个参数就可以了:

client_max_body_size 2048M; # 自行调整大小

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容