Docker安装 Seafile + OnlyOffice 并配置OnlyOffice到Seafile,实现在线编辑功能

1、镜像加速设置

先创建docker加速的默认配置文件位置——没有安装docker可以参考:CentOS 7安装Docker,并进行docker加速,拉取镜像

vim /etc/docker/daemon.json

把下面内容写入,记得**********应该替换为阿里镜像源

{
    "registry-mirrors": [
        "https://************.mirror.aliyuncs.com",
        "https://dockerproxy.com",
        "https://mirror.baidubce.com",
        "https://docker.m.daocloud.io",
        "https://docker.nju.edu.cn",
        "https://docker.mirrors.sjtug.sjtu.edu.cn"
    ]
}

 


 

2、拉取OnlyOffice的DocumentServer服务器

你有2种方法:这2种方法选一种就可以

方法1、直接拉取镜像,下载,并运行。JWT_SECRET后面跟着密码abcdefg,请记住,后面配置Seafile时会用到

这种方式不太好,因为再次启动命令也需要用这个,一旦你忘记了启动命令会很麻烦,建议使用方法2

docker run -i -t -d -p 8080:80 --restart=always -e JWT_SECRET=abcdefg onlyoffice/documentserver

如果你要映射OnlyOffice内部(比如开通443、安装ssl证书等),用以下方法:

所有数据都存储在容器内专门指定的目录中,位于以下位置:

  • /var/log/onlyoffice用于 ONLYOFFICE 文档日志
  • /var/www/onlyoffice/Data对于证书
  • /var/lib/onlyoffice用于文件缓存
  • /var/lib/postgresql对于数据库

如果你要映射出来,可以添加映射命令到启动命令中

例:可以使用下面的命令,可以把这些内部文件映射到外部路径:/data/onlyoffice/DocumentServer/

sudo docker run -i -t -d -p 8080:80 --restart=always \
    -v /data/onlyoffice/DocumentServer/logs:/var/log/onlyoffice  \
    -v /data/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data  \
    -v /data/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice \
    -v /data/onlyoffice/DocumentServer/db:/var/lib/postgresql -e JWT_SECRET=abcdefg onlyoffice/documentserver

防火墙放行8080端口,tcp和udp

firewall-cmd --permanent --list-port
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=8080/udp --permanent

查看状态

[root@onlyoffice-server ~]# firewall-cmd --permanent --list-port
8080/tcp 8080/udp
[root@onlyoffice-server ~]#

 此时可以访问测试了:你的IP+8080端口,你可以看到 ONLYOFFICE Docs Community Edition installed (下面是浏览器翻译后的页面,默认是英文的)

方法2、使用OnlyOffice的Docker Compose去配置拉取OnlyOffice镜像

官方操作方法:Running ONLYOFFICE Docs using Docker Compose - ONLYOFFICE

注意修改docker-compose.yml里的这部分配置,修改密码为abcdefg并取消掉#的注释

# Uncomment strings below to enable the JSON Web Token validation.
- JWT_ENABLED=true
- JWT_SECRET=abcdefg
- JWT_HEADER=Authorization
- JWT_IN_BODY=true

 


3、下载安装Seafile的配置文件

根据您需要的版本,下载 Seafile的 docker-compose.yml 文件,并根据需求,修改配置文件参数(MySQL root 用户的密码 、MySQL 数据的路径、Seafile 数据的路径、Seafile管理员邮箱、Seafile管理员密码)

你可以手动下载并上传到指定目录,未来所有Seafile的

cd /data
mkdir seafile-data     # 我配置的Seafile数据持久化目录是 /data/seafile-data
mkdir seafile-mysql    # 我配置的MySQL数据持久化目录是 /data/seafile-mysql/db
cd seafile-data
wget https://cloud.seafile.com/d/f4e8883db63845d29350/files/?p=%2F11.0%2Fdocker-compose.yml&dl=1

下载示例文件到您的服务器上,然后根据您的实际环境修改该文件。尤其是以下几项配置:

  • Seafile 镜像的版本,最新版为 latest
  • MySQL root 用户的密码 (MYSQL_ROOT_PASSWORD and DB_ROOT_PASSWD)
  • 持久化存储 MySQL 数据的 volumes 目录 /data/seafile-data
  • 持久化存储 Seafile 数据的 volumes 目录 /data/seafile-mysql/db
  • - SEAFILE_ADMIN_EMAIL=admin@domain.cn
  • - SEAFILE_ADMIN_PASSWORD=password01

所以我修改 docker-compose.yml 的配置文件内容如下:

[root@onlyoffice-server seafile-data]# cat docker-compose.yml
services:
  db:
    image: mariadb:10.11
    container_name: seafile-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=db_dev  # Requested, set the root's password of MySQL service.
      - MYSQL_LOG_CONSOLE=true
      - MARIADB_AUTO_UPGRADE=1
    volumes:
      - /data/seafile-mysql/db:/var/lib/mysql  # Requested, specifies the path to MySQL data persistent store.
    networks:
      - seafile-net

  memcached:
    image: memcached:1.6.18
    container_name: seafile-memcached
    entrypoint: memcached -m 256
    networks:
      - seafile-net

  seafile:
    image: seafileltd/seafile-mc:11.0-latest
    container_name: seafile
    ports:
      - "80:80"
#      - "443:443"  # If https is enabled, cancel the comment.
    volumes:
      - /data/seafile-data:/shared   # Requested, specifies the path to Seafile data persistent store.
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=db_dev  # Requested, the value shuold be root's password of MySQL service.
      - TIME_ZONE=Asia/Shanghai # Optional, default is UTC. Should be uncomment and set to your local time zone.
      - SEAFILE_ADMIN_EMAIL=admin@domain.cn # Specifies Seafile admin user, default is 'me@example.com'.
      - SEAFILE_ADMIN_PASSWORD=spassword01     # Specifies Seafile admin password, default is 'asecret'.
      - SEAFILE_SERVER_LETSENCRYPT=false   # Whether use letsencrypt to generate cert.
      - SEAFILE_SERVER_HOSTNAME=seafile.example.com # Specifies your host name.
    depends_on:
      - db
      - memcached
    networks:
      - seafile-net

networks:
  seafile-net:

配置文件中Server共有3个容器配置分别为db、 memcached、seafile,未来也会去拉取这3个docker容器镜像

services:
    db:
    memcached:
    seafile:

networks:
    seafile-net:

这里为了方便解读,特意用中文标注,PS: yml文件 应该用英文注释,以避免潜在的编码问题或解析错误

# 服务定义
services:
  # 数据库服务
  db:
    image: mariadb:10.11                                # 拉取 mariadb:10.11 镜像
    container_name: seafile-mysql                       # 自定义容器名称
    environment:                                        # 环境变量
      - MYSQL_ROOT_PASSWORD=db_dev                      # 设置MySQL的root密码
      - MYSQL_LOG_CONSOLE=true                          # 日志输出到控制台
      - MARIADB_AUTO_UPGRADE=1                          # 允许自动升级
    volumes:                                            # 卷挂载
      - /data/seafile-mysql/db:/var/lib/mysql           # MySQL数据持久化目录是 /data/seafile-mysql/db
    networks:                                           # 网络模式
      - seafile-net

  # Memcached缓存服务
  memcached:
    image: memcached:1.6.18                             # 拉取 memcached:1.6.18 镜像
    container_name: seafile-memcached                   # 自定义容器名称
    entrypoint: memcached -m 256                        # 入口点指令:设置内存限制为256MB
    networks:                                           # 网络模式
      - seafile-net

  # Seafile应用服务
  seafile:
    image: seafileltd/seafile-mc:11.0-latest            # 拉取 seafileltd/seafile-mc:11.0-latest 镜像
    container_name: seafile                             # 自定义容器名称
    ports:                                              # 端口映射
      - "80:80"                                         # 映射HTTP端口
#      - "443:443"                                      # 如果启用HTTPS,取消注释并映射HTTPS端口
    volumes:                                            # 卷挂载
      - /data/seafile-data:/shared                      # Seafile数据持久化目录是 /data/seafile-data
    environment:                                        # 环境变量
      - DB_HOST=db                                      # 数据库主机
      - DB_ROOT_PASSWD=db_dev                           # 数据库root用户密码
      - TIME_ZONE=Asia/Shanghai                         # 时区设置
      - SEAFILE_ADMIN_EMAIL=admin@domain.cn             # Seafile管理员邮箱
      - SEAFILE_ADMIN_PASSWORD=password01               # Seafile管理员密码
      - SEAFILE_SERVER_LETSENCRYPT=false                # 是否使用Let's Encrypt生成证书
      - SEAFILE_SERVER_HOSTNAME=seafile.example.com     # Seafile服务器主机名
    depends_on:                                         # 依赖的服务
      - db                                              # 依赖数据库服务
      - memcached                                       # 依赖Memcached服务
    networks:                                           # 网络模式
      - seafile-net

# 整体网络定义
networks:
  seafile-net:                                          # Seafile专用网络

如果有其他需求,可以看官方手册文档:简介 - seafile-manual-cn

启动 Seafile 服务

现在,到Seafile-data目录下已经有了docker-compose.yml配置脚本,在该路径下执行以下命令启动 Seafile 服务,首次启动会远程拉取docker镜像,如有任何下载拉取问题,请检查Docker的镜像加速配置。

cd /opt/seafile-data
docker compose up -d

4、配置Seafile,关联到OnlyOffice,使能在线编辑文档

启动Seafile后,因为Seafile官方已经考虑到了配置文件映射的需求,并且在配置文件中也提到了是把容器内的/shared路径映射到了/data/seafile-data

seafile:
    
    ....
    
    volumes:                                            # 卷挂载
      - /data/seafile-data:/shared                      # Seafile数据持久化目录是 /data/seafile-data
    
    ....

所以程序启动后,我们可以在/data/seafile-data路径下,用tree -L 3命令查看3层Seafile-data内的目录结构,如下:

[root@onlyoffice-server seafile-data]# tree -L 3
.
├── docker-compose.yml
├── local.json
├── logs
│   └── var-log
│       ├── alternatives.log
│       ├── apt
│       ├── bootstrap.log
│       ├── btmp
│       ├── dpkg.log
│       ├── faillog
│       ├── journal
│       ├── lastlog
│       ├── nginx
│       ├── private
│       ├── syslog
│       └── wtmp
├── nginx
│   └── conf
│       └── seafile.nginx.conf
└── seafile
    ├── ccnet
    ├── conf
    │   ├── ccnet.conf
    │   ├── gunicorn.conf.py
    │   ├── __pycache__
    │   ├── seafdav.conf
    │   ├── seafevents.conf
    │   ├── seafile.conf
    │   └── seahub_settings.py
    ├── logs
    │   ├── controller.log
    │   ├── enterpoint.log
    │   ├── file_updates_sender.log
    │   ├── file_updates_sender.log.2024-07-16
    │   ├── logrotate.log
    │   ├── onlyoffice.log
    │   ├── seafevents.log
    │   ├── seafevents.log.2024-07-09
    │   ├── seafile.log
    │   ├── seafile.log.2024-07-16
    │   ├── seafile-monitor.log
    │   ├── seahub_email_sender.log
    │   ├── seahub_email_sender.log.2024-07-16
    │   ├── seahub.log
    │   └── seahub.log.2024-07-16
    ├── pro-data
    ├── seafile-data
    │   ├── current_version
    │   ├── httptemp
    │   ├── library-template
    │   ├── storage
    │   └── tmpfiles
    └── seahub-data
        ├── avatars
        └── custom

23 directories, 36 files
[root@onlyoffice-server seafile-data]#

找到seahub_settings.py文件,在/data/seafile-data/seafile/conf的最底下添加下面的OnlyOffice的配置,这里注意使用到之前的OnlyOffice启动密码 JWT_SECRET=abcdefg

# Enable Only Office
ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = False
# ONLYOFFICE_APIJS_URL = 'http{s}://{your OnlyOffice server's domain or IP}/web-apps/apps/api/documents/api.js'
ONLYOFFICE_APIJS_URL = 'http://192.168.1.1:8080/web-apps/apps/api/documents/api.js'
ONLYOFFICE_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods')
ONLYOFFICE_EDIT_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods')
ONLYOFFICE_JWT_SECRET = abcdefg

修改后完整的seahub_settings.py文件内容如下:

[root@onlyoffice-server conf]# pwd
/data/seafile-data/seafile/conf
[root@onlyoffice-server conf]# cat seahub_settings.py

# -*- coding: utf-8 -*-
SECRET_KEY = "*********************"
SERVICE_URL = "http://seafile.example.com"

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'seahub_db',
        'USER': 'seafile',
        'PASSWORD': '****************',
        'HOST': 'db',
        'PORT': '3306',
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}


CACHES = {
    'default': {
        'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
        'LOCATION': 'memcached:11211',
    },
    'locmem': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    },
}
COMPRESS_CACHE_BACKEND = 'locmem'
TIME_ZONE = 'Asia/Shanghai'
FILE_SERVER_ROOT = "http://seafile.example.com/seafhttp"

# Enable Only Office
ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = False
# ONLYOFFICE_APIJS_URL = 'http{s}://{your OnlyOffice server's domain or IP}/web-apps/apps/api/documents/api.js'
ONLYOFFICE_APIJS_URL = 'http://192.168.1.1:8080/web-apps/apps/api/documents/api.js'
ONLYOFFICE_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods')
ONLYOFFICE_EDIT_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods')
ONLYOFFICE_JWT_SECRET = abcdefg

[root@onlyoffice-server conf]

最后,再回到有docker-compose.yml配置脚本路径下,重启Seafile服务即可。

cd /data/seafile-data
docker-compose down
docker-compose up -d

 

posted @ 2024-07-11 18:13  Magiclala  阅读(952)  评论(0编辑  收藏  举报