Seafile配搭onlyoffice的安装

目录

之前公司一直用的是 seafile 来保存文档,非常好用,也出过一次大事,一个离职的员工清空电脑,然后直接把sefaile文件夹也同步清空了,好在有版本,最后找了回来。

换到新公司,财务也提了共享云盘的要求,还要求能多人同时在线编辑。

那就试着搭建 seafile + onlyoffice 了,同时要求提高安全性,在网上搜索了一圈,没几个对的,尤其是对https这一块,花了2天时间搭建,记录一下整个过程:

一、下载seafile:

没有选定高版本的,最新版本的变化太多,缺省全部都安装到 /app 目录下

1wget https://download.seadrive.org/seafile-server_7.0.0_x86-64.tar.gz
2tar zxvf seafile-server_7.0.0_x86-64.tar.gz
3mkdir /app
4mv seafile-server-7.0.0 /app
二、设定CentOS7

依然活在 CentOS 7.10 的时代,再往上升级,要升到 rokey linux 了

提醒:seafile 的安装根据版本不同,yum 装的东西也不尽然相同的,要去官方文档看

1yum install python python-setuptools MySQL-python python-urllib3 python-ldap -y
三、安装MySQL数据库

这个就仁者见仁、智者见智了,我现在的方式都是二进制装,选用的是 mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz 安装的,

 1tar zxvf mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz
 2mv mysql-5.6.51-linux-glibc2.12-x86_64 /app
 3
 4yum -y install autoconf libaio*
 5
 6cat<<EOF>/etc/my.cnf
 7[mysql]
 8# 设置mysql客户端默认字符集
 9default-character-set=utf8
10socket=/tmp/mysql.sock
11 
12[mysqld]
13skip-name-resolve
14#设置3306端口
15port = 3306
16socket=/tmp/mysql.sock
17# 设置mysql的安装目录
18basedir=/app/mysql-5.6.51-linux-glibc2.12-x86_64/
19# 设置mysql数据库的数据的存放目录
20datadir=/app/mysql-5.6.51-linux-glibc2.12-x86_64/data
21# 允许最大连接数
22max_connections=200
23# 服务端使用的字符集默认为8比特编码的latin1字符集
24character-set-server=utf8
25# 创建新表时将使用的默认存储引擎
26default-storage-engine=INNODB
27#lower_case_table_name=1
28max_allowed_packet=16M
29sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
30EOF
31
32groupadd -g mysql
33useradd -g mysql mysql
34
35# 初始化DB
36cd /app/mysql-5.6.51-linux-glibc2.12-x86_64/
37/app/mysql-5.6.51-linux-glibc2.12-x86_64/scripts/mysql_install_db --user=mysql
38
39#建立 /etc/init.d/mysql 的软链接
40mysql -> /app/mysql-5.6.51/support-files/mysql.server
41 
42#启动
43/etc/init.d/mysql start
44
45# 安全设置DB
46cd /app/mysql-5.6.51-linux-glibc2.12-x86_64/
47/app/mysql-5.6.51-linux-glibc2.12-x86_64/bin/mysql_secure_installation
四、准备onlyoffice

这里有大坑啊,其实onlyoffice的版本万万不能用最新的,因为JWT的Token认证

所以必须用低版本的,然后呢由于它其实是一组程序,调用的时候又是只用web,所以封在docker里最好

 1cd /etc/yum.repos.d/
 2wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 3
 4yum -y install docker-ce
 5systemctl enable --now docker.service
 6
 7#准备好证书目录
 8mkdir /app/onlyoffice/certs
 9#用lego申请好的let's encrypt免费证书或者正式证书
10#只能叫这两个名字,其他不行!!!!
11onlyoffice.crt
12onlyoffice.key
13#生成dh
14cd /app/onlyoffice/certs
15openssl dhparam -out dhparam.pem 2048
16
17#跑容器
18docker run -i -t -d -p 8443:443 --restart=always -v /app/onlyoffice:/var/www/onlyoffice/Data onlyoffice/documentserver:6.4.2.6

我们这里选用 onlyoffice 6.4.2.6 版本的,同时打开8443:443的端口,意味着我们准备要跑https,然后onlyoffice的证书是如上的设定方法,网上一堆胡说八道直接放开443但是无证书的,有的还要进去docker改,都不对。

五、安装seafile

这个很简单,但也很坑

1cd /app/seafile-server-7.0.0/
2./setup-seafile-mysql.sh
3
4#回答问题,第一个答:
5seafile
6#第二个答域名,因为我们是真的用域名
7seafile.rendoumi.com
8#剩下选回车

这里遇到个大坑,由于我们mysql安装选择了secure的模式,所以这里会安不过去

报seafile用户无权限,没办法,用navicat,进去看用户,安装脚本给我们生成了一个用户,但是是localhost权限的,我们改成127.0.0.1,然后保存

image-20230115095218351

重新安装,就可以安装成功了。

然后就是先初始化一下:

 1cd /app/seafile-server-latest/
 2
 3./seafile.sh start
 4
 5#设置管理员和密码
 6./seahub.sh start
 7
 8然后都停掉
 9./seahub.sh stop
10./seafile.sh stop

准备安全配置

 1cd /app/conf/
 2
 3#vi ccnet.conf
 4# NAME和SERVIcE_URL就是上面安装时我们回答的2个问题
 5NAME = seafile
 6SERVICE_URL = https://seafile.rendoumi.com
 7
 8#vi seafile.conf
 9# 增加host监听地址为127.0.0.1,稍后我们设置nginx转发,更加安全
10[fileserver]
11host = 127.0.0.1
12port = 8082
13
14#vi seahub_settings.py
15# 增加以下各项,有onlyoffice的,有8082的
16FILE_SERVER_ROOT = 'https://seafile.rendoumi.com/seafhttp'
17
18MAX_NUMBER_OF_FILES_FOR_FILEUPLOAD = 5000
19
20ENABLE_ONLYOFFICE = True
21VERIFY_ONLYOFFICE_CERTIFICATE = False
22ONLYOFFICE_APIJS_URL = 'https://seafile.rendoumi.com:8443/web-apps/apps/api/documents/api.js'
23ONLYOFFICE_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods')
24ONLYOFFICE_EDIT_FILE_EXTENSION = ('docx', 'pptx', 'xlsx','doc','xls','ppt')

准备systemctl的启动文件

 1cat <<EOF>/etc/systemd/system/seafile.service 
 2[Unit]
 3Description=Seafile Server
 4After=network.target mariadb.service
 5
 6[Service]
 7Type=oneshot
 8ExecStart=/app/seafile-server-latest/seafile.sh start
 9ExecStart=/app/seafile-server-latest/seahub.sh start
10ExecStop=/app/seafile-server-latest/seafile.sh stop
11ExecStop=/app/seafile-server-latest/seahub.sh stop
12RemainAfterExit=yes
13User=root
14Group=root
15
16[Install]
17WantedBy=multi-user.target
18EOF

然后我们现在可以正式启动seafile了

1systemctl daemon-reload
2systemctl start seafile
六、安装nginx
 1yum -y install epel-release
 2yum -y install nginx
 3
 4# 生成dh
 5cd /etc/nginx/
 6openssl dhparam -out dhparam.pem 2048
 7
 8vi /etc/nginx/nginx.conf
 9
10#增加以下这个大段
11    server {
12        listen       80;
13        server_name  seafile.rendoumi.com;     
14        rewrite ^ https://$http_host$request_uri?  permanent;
15    }
16    
17    server {
18        listen 443 ssl;
19        server_name seafile.rendoumi.com;
20        ssl_certificate /etc/nginx/seafile.crt;        #cacert.pem 文件路径
21        ssl_certificate_key /etc/nginx/seafile.key;    #privkey.pem 文件路径
22        ssl_dhparam /etc/nginx/dhparam.pem;
23        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
24        ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-SEED-SHA:DHE-RSA-CAMELLIA128-SHA:HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS';
25        ssl_prefer_server_ciphers on;
26     
27        proxy_set_header X-Forwarded-For $remote_addr;
28     
29        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
30        server_tokens off;
31     
32        location / {
33            proxy_pass         http://127.0.0.1:8000;
34            proxy_set_header   Host $host;
35            proxy_set_header   X-Real-IP $remote_addr;
36            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
37            proxy_set_header   X-Forwarded-Host $server_name;
38            proxy_set_header   X-Forwarded-Proto https;
39         
40            access_log      /var/log/nginx/seahub.access.log;
41            error_log       /var/log/nginx/seahub.error.log;
42            proxy_read_timeout  1200s;
43            client_max_body_size 0;
44        }
45         
46        location /seafhttp {
47      	    rewrite ^/seafhttp(.*)$ $1 break;
48            proxy_pass http://127.0.0.1:8082;
49            client_max_body_size 0;
50            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
51            proxy_connect_timeout  36000s;
52            proxy_read_timeout  36000s;
53    	    proxy_send_timeout  36000s;
54       	    send_timeout  36000s;
55        }
56
57        location /media {
58    	    root /app/seafile-server-latest/seahub;     #seahub的路径
59        }
60
61    }

以上我们可以看到,seafile实际监听了127.0.0.1:8000和127.0.0.1:8082端口,被代理到了nginx,这样监听在本地,nginx再套上https证书,就很安全了,启动

1systemctl enbale --now nginx
七、设置seafile

然后我们登录 https://seafile.rendoumi.com, 修改一下配置

image-20230115100916889

确保设置正确:

1SERVICE_URL设置的是 `https://seafile.rendoumi.com`
2FILE_SERVER_ROOT 设置的是 `https://seafile.rendoumi.com/seafhttp`

image-20230115101114820

然后就可以了,seafile就可以在线编辑了。

image-20230115101556884

八、附加onlyoffice修改

我们还需要增加一点特色,给onlyoffice做一些修改:

1、自动保存

进入onlyoffice容器

 1docker exec -it 容器 /bin/bash
 2
 3echo "Asia/Shanghai" > /etc/timezone
 4ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 5date -R
 6
 7nano /etc/onlyoffice/documentserver/local.json
 8{
 9    "services": {
10        "CoAuthoring": {
11            // 在 CoAuthoring 中 增加 autoAssembly 属性配置
12            "autoAssembly": {
13                "enable": true,
14                "interval": "5m"
15            }, //注意这个,逗号
16        }
17    }
18}

2、安装字体

字体文件放进一个zip的压缩包,其中一个目录名为office,里面是文件

image-20230115102214136

然后把文件传进Linux机器中,解压

1export LANG=zh_CN.UTF-8
2unzip -x office.zip
3cd office
4ls

查看一下,务必像下面一样,是中文的

image-20230115102332499

然后在office目录那一级,把字体文件拷贝进容器

1docker cp office 472bf8a36f14:/usr/share/fonts/truetype/custom

进入容器

 1docker exec -it 472bf8a36f14 /bin/bash
 2
 3# 更新字体
 4mkfontscale
 5mkfontdir
 6fc-cache -fv
 7documentserver-generate-allfonts.sh
 8
 9#退出容器,重启
10docker restart 472bf8a36f14

然后onlyoffice就会5分钟自动保存一下,然后多了一堆好看的中文字体:

image-20230115102734534


Traefik自动签发并续费证书+端口转发
运维方案之canal数据库同步
comments powered by Disqus