docker-compose部署nextcloud及onlyoffice、redis

一、版本描述

Ubuntu:22.04

Nextcloud:28.0.2

Onlyoffice:7.5.1

MariaDB:11.2.2

redis:7.2.4

二、docker、docker-compose安装

三、准备环境:

创建数据目录

mkdir -vp /root/app/nextcloud/{cronsh,data} /root/app/onlyoffice/{logs,data} /root/app/mariadb/{config,data} /root/app/redis/{conf,data}

四、docker-compose.yml文件

version: '2'
services:
  nextcloud:
    image: nextcloud
    container_name: nextcloud
    volumes:
      - /root/app/nextcloud/data:/var/www/html
    networks:
      - nextcloud_default
    depends_on:
      - redis
    restart: always
    ports:
      - 8080:80
    links:
      - mariadb:mariadb
      - onlyoffice:onlyoffice
  mariadb:
    image: mariadb
    container_name: mariadb
    ports:
      - 3307:3306
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=XXXX
    volumes:
      - /root/app/mariadb/data:/var/lib/mysql
      - /root/app/mariadb/config:/etc/mysql/conf.d
    networks:
      - nextcloud_default
    restart: always
  onlyoffice:
    image: onlyoffice:7.5.1
    container_name: onlyoffice
    restart: always
    ports:
      - 9000:80
      - 9001:443
    environment:
      - REDIS_SERVER_HOST=redis
      - REDIS_SERVER_PORT=6379
    volumes:
      - /root/app/onlyoffice/logs:/var/log/onlyoffice
      - /root/app/onlyoffice/data:/var/www/onlyoffice/data
    networks:
      - nextcloud_default
  redis:
    image: redis
    ports:
      - 6379:6379
    container_name: redis
    volumes:
      - /root/app/redis/data:/data
      - /root/app/redis/conf:/etc/redis/redis.conf
    restart: always
    networks:
      - nextcloud_default
networks:
  nextcloud_default:
    external: true

五、启动docker-compose

创建网络

docker network create nextcloud_default

启动docker

docker-compose up -d

六、MariaDB数据库配置(必要)

1. 允许任意地址访问数据库

## 复制mariadb配置文件到宿主机
docker cp mariadb:/etc/mysql/mariadb.conf.d/50-server.cnf /root/50-server.cnf
vim 50-server.cnf
## 找到bind-address ,更改为
bind-address  = 0.0.0.0
## 把更改后的文件复制到mariadb容器中
docker cp /root/50-server.cnf mariadb:/etc/mysql/mariadb.conf.d/50-server.cnf
## 进入mariadb容器中确认是否更改
docker exec -it mariadb bash
cat /etc/mysql/mariadb.conf.d/50-server.cnf

2.创建nextcloud数据库

## 进入数据库
root@4b04eca13e79:/# mariadb -u root -p
## 创建数据库,user,密码等
CREATE USER 'nextcloud'@'%' IDENTIFIED BY 'XXXXX';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'%';
flush privileges;
## 查看数据库与user是否创建
show databases;
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

3.重启mariadb

docker restart mariadb

七、配置nextcloud

1. 编辑config.php

行末添加
'default_language' => 'zh_CN',  #默认语言
'default_locale' => 'zh',  #默认地区
'skeletondirectory' => '', #新用户默认无任何文件
'memcache.local' => '\OC\Memcache\Redis', #更改为redis
# 配置内存为redis
  'memcache.distributed' => '\OC\Memcache\Redis',
  'memcache.locking' => '\OC\Memcache\Redis',
  'redis' => array(
     'host' => 'XXXX',  ##宿主机的IP
     'port' => 6379,
     ),

2.配置cron

cd /app/nextcloud/cronsh/

vim nextcloud.sh

内容如下

#!/bin/bash
docker exec --user www-data nextcloud  php /var/www/html/cron.php

添加权限

chmod 777 /app/nextcloud/cronsh/nextcloud.sh

添加任务

vim /etc/crontab

*/5    * * * * root    /root/app/nextcloud/cronsh/nextcloud.sh

重启服务

systemctl restart cron

3. 安装onlyoffice插件

  1. 离线下载onyoffice插件:下载地址

  2. 我的nextcloud是28版本,所以下载对应28版本插件

  3. 复制插件到宿主机/root/nextcloud/app/nextcloud/data/apps

  4. 解压插件

root@office:~/nextcloud/app/nextcloud/data/apps# tar -xvf onlyoffice.tar.gz

八、登陆http://IP:8080,初始化nextcloud及配置

1.初始化nextcloud

2.启用插件

3.配置插件

进入onlyoffice容器,获取密钥

docker exec -it onlyoffice bash

cat /etc/onlyoffice/server/local.josl

4.配置onlyoffice字体

onlyoffice原生字体会引起excel中文乱码

需要重新添加字体

解决方法:删除onlyoffice自带字体,并导入新字体

4.1 删除onlyoffice原生字体
docker exec -it onlyoffice /bin/bash
cd /var/www/onlyoffice/documentserver/core-fonts
rm -rf *
cd /usr/share/fonts/
rm -rf *
4.2 拷贝需要的字体到docker中

一、复制windows下的字体到服务器中,例“微软雅黑”、“宋体”

二、复制字体到onlyoffice,并启用字体

docker cp ./fonts/ c31:/usr/share/fonts/truetype/custom/
docker exec -it onlyoffice /bin/bash
cd /usr/bin
documentserver-generate-allfonts.sh

三、验证