之前公司一直用的是 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,然后保存
重新安装,就可以安装成功了。
然后就是先初始化一下:
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
, 修改一下配置
确保设置正确:
1SERVICE_URL设置的是 `https://seafile.rendoumi.com`
2FILE_SERVER_ROOT 设置的是 `https://seafile.rendoumi.com/seafhttp`
然后就可以了,seafile就可以在线编辑了。
八、附加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,里面是文件
然后把文件传进Linux机器中,解压
1export LANG=zh_CN.UTF-8
2unzip -x office.zip
3cd office
4ls
查看一下,务必像下面一样,是中文的
然后在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分钟自动保存一下,然后多了一堆好看的中文字体: