6

seafile配搭onlyoffice的安装

 1 year ago
source link: https://bajie.dev/posts/20230115-seafile_onlyoffice/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Seafile配搭onlyoffice的安装

2023-01-15 5 分钟阅读

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

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

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

一、下载seafile:

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

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

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

提醒:seafile 的安装根据版本不通,yum 装的东西也不同的

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

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

tar zxvf mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.6.51-linux-glibc2.12-x86_64 /app

yum -y install autoconf libaio*

cat<<EOF>/etc/my.cnf
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
socket=/tmp/mysql.sock
 
[mysqld]
skip-name-resolve
#设置3306端口
port = 3306
socket=/tmp/mysql.sock
# 设置mysql的安装目录
basedir=/app/mysql-5.6.51-linux-glibc2.12-x86_64/
# 设置mysql数据库的数据的存放目录
datadir=/app/mysql-5.6.51-linux-glibc2.12-x86_64/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#lower_case_table_name=1
max_allowed_packet=16M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
EOF

groupadd -g mysql
useradd -g mysql mysql

# 初始化DB
cd /app/mysql-5.6.51-linux-glibc2.12-x86_64/
/app/mysql-5.6.51-linux-glibc2.12-x86_64/scripts/mysql_install_db --user=mysql

#建立 /etc/init.d/mysql 的软链接
mysql -> /app/mysql-5.6.51/support-files/mysql.server
 
#启动
/etc/init.d/mysql start

# 安全设置DB
cd /app/mysql-5.6.51-linux-glibc2.12-x86_64/
/app/mysql-5.6.51-linux-glibc2.12-x86_64/bin/mysql_secure_installation
四、准备onlyoffice

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

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

cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum -y install docker-ce
systemctl enable --now docker.service

#准备好证书目录
mkdir /app/onlyoffice/certs
#用lego申请好的let's encrypt免费证书或者正式证书
#只能叫这两个名字,其他不行!!!!
onlyoffice.crt
onlyoffice.key
#生成dh
cd /app/onlyoffice/certs
openssl dhparam -out dhparam.pem 2048

#跑容器
docker 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

这个很简单,但也很坑

cd /app/seafile-server-7.0.0/
./setup-seafile-mysql.sh

#回答问题,第一个答:
seafile
#第二个答域名,因为我们是真的用域名
seafile.rendoumi.com
#剩下选回车

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

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

image-20230115095218351

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

然后就是先初始化一下:

cd /app/seafile-server-latest/

./seafile.sh start

#设置管理员和密码
./seahub.sh start

然后都停掉
./seahub.sh stop
./seafile.sh stop

准备安全配置

cd /app/conf/

#vi ccnet.conf
# NAME和SERVIcE_URL就是上面安装时我们回答的2个问题
NAME = seafile
SERVICE_URL = https://seafile.rendoumi.com

#vi seafile.conf
# 增加host监听地址为127.0.0.1,稍后我们设置nginx转发,更加安全
[fileserver]
host = 127.0.0.1
port = 8082

#vi seahub_settings.py
# 增加以下各项,有onlyoffice的,有8082的
FILE_SERVER_ROOT = 'https://seafile.rendoumi.com/seafhttp'

MAX_NUMBER_OF_FILES_FOR_FILEUPLOAD = 5000

ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = False
ONLYOFFICE_APIJS_URL = 'https://seafile.rendoumi.com:8443/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 = ('docx', 'pptx', 'xlsx','doc','xls','ppt')

准备systemctl的启动文件

cat <<EOF>/etc/systemd/system/seafile.service 
[Unit]
Description=Seafile Server
After=network.target mariadb.service

[Service]
Type=oneshot
ExecStart=/app/seafile-server-latest/seafile.sh start
ExecStart=/app/seafile-server-latest/seahub.sh start
ExecStop=/app/seafile-server-latest/seafile.sh stop
ExecStop=/app/seafile-server-latest/seahub.sh stop
RemainAfterExit=yes
User=root
Group=root

[Install]
WantedBy=multi-user.target
EOF

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

systemctl daemon-reload
systemctl start seafile
六、安装nginx
yum -y install epel-release
yum -y install nginx

# 生成dh
cd /etc/nginx/
openssl dhparam -out dhparam.pem 2048

vi /etc/nginx/nginx.conf

#增加以下这个大段
    server {
        listen       80;
        server_name  seafile.rendoumi.com;     
        rewrite ^ https://$http_host$request_uri?  permanent;
    }
    
    server {
        listen 443 ssl;
        server_name seafile.rendoumi.com;
        ssl_certificate /etc/nginx/seafile.crt;        #cacert.pem 文件路径
        ssl_certificate_key /etc/nginx/seafile.key;    #privkey.pem 文件路径
        ssl_dhparam /etc/nginx/dhparam.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        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';
        ssl_prefer_server_ciphers on;
     
        proxy_set_header X-Forwarded-For $remote_addr;
     
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
        server_tokens off;
     
        location / {
            proxy_pass         http://127.0.0.1:8000;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
            proxy_set_header   X-Forwarded-Proto https;
         
            access_log      /var/log/nginx/seahub.access.log;
            error_log       /var/log/nginx/seahub.error.log;
            proxy_read_timeout  1200s;
            client_max_body_size 0;
        }
         
        location /seafhttp {
      	    rewrite ^/seafhttp(.*)$ $1 break;
            proxy_pass http://127.0.0.1:8082;
            client_max_body_size 0;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_connect_timeout  36000s;
            proxy_read_timeout  36000s;
    	    proxy_send_timeout  36000s;
       	    send_timeout  36000s;
        }

        location /media {
    	    root /app/seafile-server-latest/seahub;     #seahub的路径
        }

    }

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

systemctl enbale --now nginx
七、设置seafile

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

image-20230115100916889

确保设置正确:

SERVICE_URL设置的是 `https://seafile.rendoumi.com`
FILE_SERVER_ROOT 设置的是 `https://seafile.rendoumi.com/seafhttp`
image-20230115101114820

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

image-20230115101556884
八、附加onlyoffice修改

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

1、自动保存

进入onlyoffice容器

docker exec -it 容器 /bin/bash

echo "Asia/Shanghai" > /etc/timezone
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date -R

nano /etc/onlyoffice/documentserver/local.json
{
    "services": {
        "CoAuthoring": {
            // 在 CoAuthoring 中 增加 autoAssembly 属性配置
            "autoAssembly": {
                "enable": true,
                "interval": "5m"
            }, //注意这个,逗号
        }
    }
}

2、安装字体

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

image-20230115102214136

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

export LANG=zh_CN.UTF-8
unzip -x office.zip
cd office
ls

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

image-20230115102332499

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

docker cp office 472bf8a36f14:/usr/share/fonts/truetype/custom
docker exec -it 472bf8a36f14 /bin/bash

# 更新字体
mkfontscale
mkfontdir
fc-cache -fv
documentserver-generate-allfonts.sh

#退出容器,重启
docker restart 472bf8a36f14

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

image-20230115102734534

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK