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