容器部署

创建目录

mkdir -p /opt/nextcloud

进入目录

cd /opt/nextcloud

创建docker-compose.yml文件

vim docker-compose.yml 
services:
  nextcloud:
    image: nextcloud:28.0.5
    container_name: nextcloud
    volumes:
      - /opt/nextcloud/data:/var/www/html
    environment:
      - MYSQL_HOST=mysql
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=nextcloud
    networks:
      - nextcloud_default
    depends_on:
      - redis
    restart: always
    ports:
      - 8080:80
    links:
      - "mysql"
      - "onlyoffice"

  mysql:
    restart: always
    container_name: nextcloud-db
    networks:
      - nextcloud_default
    #network_mode: bridge
    image: mysql:8.0
    environment:
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=nextcloud
      - MYSQL_ROOT_PASSWORD=<root密码根据实际修改>
    volumes:
      - /opt/nextcloud/mysql/data:/var/lib/mysql #/opt/nextcloud/mysql/data根据实际换成实际数据存放目录
    expose:
      - "3306"
    ports:
      - "3307:3306"

  onlyoffice:
    image: onlyoffice:7.5.1
    container_name: onlyoffice
    restart: always
    ports:
      - 8899: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:
      - /opt/nextcloud/redis/data:/data
      - /opt/nextcloud/redis/conf:/etc/redis/redis.conf
    restart: always
    networks:
      - nextcloud_default

networks:
  nextcloud_default:

启动docker-compose

docker-compose up -d

配置cron

cd /opt/nextcloud/cronsh/
vim nextcloud.sh

内容如下

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

添加权限

chmod 777 /opt/nextcloud/cronsh/nextcloud.sh

进入任务列表

crontab -e

添加以下语句

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

重启服务

systemctl restart cron

安装onlyoffice插件

离线下载onyoffice插件:ONLYOFFICE - Apps - App Store - Nextcloud

此次部署nextcloud版本为28,下载对应28版本插件

复制插件到宿主机/opt/nextcloud/data/apps

解压插件

tar -xvf onlyoffice.tar.gz

登陆http://IP:8080,设置默认账号

1.初始化nextcloud

2.启用插件

3.配置插件

获取密钥

进入onlyoffice容器,获取密钥

docker exec -it onlyoffice bash
cat /etc/onlyoffice/server/local.json

输出信息种找到secret中inbox字段信息,复制密钥信息到配置页面

配置onlyoffice字体

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

需要重新添加字体

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

删除onlyoffice原生字体

docker exec -it onlyoffice /bin/bash
cd /var/www/onlyoffice/documentserver/core-fonts
rm -rf *
cd /usr/share/fonts/
rm -rf *

拷贝需要的字体到docker中

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

  2. 复制字体到onlyoffice,并启用字体

  3. 执行脚本安装字体

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

onlyoffice启用演示

进入容器

docker exec -it onlyoffice bash

执行

sudo supervisorctl start ds:example

问题处理

IP 受限的问题。

vim  config.php 

##  添加内容

 'trusted_domains' =>
  array (
    0 => 'cloud.taida.ltd',
    1 => '192.168.31.10',
  ),

HTTP 强制转换为 HTTPS 的问题

不知道从哪个版本开始,安装指导和配置文件内,都开始指向 https了,即便没有申请证书,也会指向和强制把 http => https 。 修改配置文件,取消这一设定,保持 http 就可以了


<?php
$CONFIG = array (
  'instanceid' => '444',
  'passwordsalt' => 'r333333',
  'secret' => '4444444',
  'trusted_domains' => 
  array (
    0 => 'cloud.demo.com',
    1 => '192.168.31.10',
  ),
  'datadirectory' => '/www/cloud.demo.com/nextcloud/data',
  'dbtype' => 'mysql',
  'version' => '28.0.1.1',
  
  # https://cloud.demo.com 修改为 http://cloud.demo.com
  'overwrite.cli.url' => 'http://cloud.demo.com',
 
  # 'overwriteprotocol' => 'https' 修改 http
  'overwriteprotocol' => 'http',                              
  'dbname' => 'nextcloud',
  'dbhost' => 'localhost:3306',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'clouder',
  'dbpassword' => '11111',
  'installed' => true,
);

PHP 内存限制低于建议值 512 MB

#修改php.ini文件

vim /etc/php/8.2/fpm/php.ini

memory_limit = 1024M

当前正在使用数据库处理事务性文件锁定。若有内存缓存可用,请进行配置以提升性能

修改config.php 文件添加如下内容:

'filelocking.enabled' => true,
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
     'host' => 'localhost',
     'port' => 6379,
     'timeout' => 0.0,
     'password' => '', // Optional, if not defined no password will be used.
      ),

未配置内存缓存。若有内存缓存可用,请进行配置以提升性能

APCu is faster at local caching than Redis. If you have enough memory, use APCu for Memory Caching and Redis for File Locking. If you are low on memory, use Redis for both.

修改config.php 文件添加如下内容:

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

您在安装过程中未设置默认的国际区号。缺失国际区号的电话号码时将使用默认的国际区号进行验证。要允许无国际区号的电话,请在您的配置文件中添加 “default_phone_region” 设置选项并依照 ISO 3166-1 进行设置。

修改config.php 文件添加如下内容:

'default_phone_region' => 'CN',

解决Nextcloud新建用户默认语言是英文且默认地区是美国的方法

语言设置,设置为中文

编辑 config/config.php添加以下配置

  "force_locale" => "zh",
  "force_language" => "zh_CN",

#需要重启 nginx, php-fpm
systemctl restart php8.2-fpm
systemctl restart nginx