Seafile 是一款优秀的同步盘工具。我用了很多年。个人喜欢这种便捷的同步盘功能。但是之前用的Seafile版本有点老了。最近折腾一下,换成较新的Seafile11版本(Seafile最新版本是12。我没安装Seafile 12版本,我用的是11版本。感觉自己VPS带不动12版本。12版本好像采用了新的机制。以后有空再研究。)。本次部署是在VPS上采用宝塔面板中 Docker 来部署Seafile,并开启 https 。这种方法能让大多数用户更容易上手。话不多说,请按以下步骤操作。
1. 解析好域名指向VPS的IP地址。
2. 安装宝塔面板。VPS操作系统推荐使用Debian或者Ubuntu。宝塔面板安装地址:https://www.bt.cn/new/download.html
3. 一键安装LNMP和Docker。安装好宝塔面板后,首次登录后,请先一键安装LNMP。然后再进入Docker菜单,安装好Docker。
上图是宝塔面板的一键安装LNMP界面,下图是Docker菜单中的安装按钮。
4. 创建Seafile容器。先在宝塔面板Docker中创建容器编排。
以下是Seafile 11版本的yaml文本。可以去下载Seafile官方yaml:https://cloud.seafile.com/published/seafile-manual-cn/docker/%E7%94%A8Docker%E9%83%A8%E7%BD%B2Seafile.md
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: - /opt/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: - "8080:80" - "8443:443" # If https is enabled, cancel the comment. volumes: - /opt/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=me@example.com # Specifies Seafile admin user, default is 'me@example.com'. - SEAFILE_ADMIN_PASSWORD=asecret # Specifies Seafile admin password, default is 'asecret'. - SEAFILE_SERVER_LETSENCRYPT=false # Whether use letsencrypt to generate cert. - SEAFILE_SERVER_HOSTNAME=sftest.example.com # Specifies your host name. depends_on: - db - memcached networks: - seafile-net networks: seafile-net:
yaml中,请开启8080和8443端口(可自行调整端口号)。SEAFILE_ADMIN_EMAIL和SEAFILE_ADMIN_PASSWORD请替换自己的账户和密码。SEAFILE_SERVER_LETSENCRYPT请选择false,因为如果选择true,在部署Seafile容器过程中可能会申请证书失败,从而导致部署Seafile的文件不完整,无法正常启动Seafile。我们稍后使用宝塔面板来申请证书。创建好容器编排后,即可创建容器,如下图所示。
部署完Seafile容器后,应该可以通过8080端口访问到Seafile服务,如下图。注意,这个时候通过8443端口是无法访问Seafile服务的。
5. 申请ssl证书。使用宝塔面板网站来部署一个静态网站,并申请ssl证书。注意域名使用同一个。
申请完证书后点击保存,并下载证书到本地。
6. 在Seafile容器目录下创建ssl文件夹。并将ssl证书上传在ssl文件夹中。
这里注意一下。第6步中下载的证书zip文件,请使用Nginx文件夹中证书。将其中privkey.key文件的后缀改为pem,即privkey.pem。因为宝塔面板中生成保存的key文件是pem后缀的文件。后续我们会创建自动脚本,将宝塔面板中的证书文件每天同步到ssl文件夹中。这样宝塔面板自动续签证书后,可以同步替换Seafile容器中使用的证书。
7. 修改Seafile容器nginx的配置。这个nginx是Seafile容器中的nginx,不是宝塔面板安装LNMP中的nginx。Seafile容器中nginx配置文件路径是:/opt/seafile-data/nginx/conf/seafile.nginx.conf
上图红色正方形中代码替换成下图内容:
替换代码如下:
server { listen 80; server_name sftest.example.com; rewrite ^ https://$http_host$request_uri? permanent; #强制将http重定向到https server_tokens off; } server { listen 443 ssl; listen [::]:443 ssl; ssl_certificate /shared/ssl/fullchain.pem; #cacert.pem 文件路径 ssl_certificate_key /shared/ssl/privkey.pem; #privkey.pem 文件路径 ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS; server_name sftest.example.com; proxy_set_header X-Forwarded-For $remote_addr; server_tokens off;
这里注意把两个域名替换成自己的域名。修改完之后,在seafile容器终端中重新加载一下nginx配置。命令如下:
/usr/sbin/nginx -s reload
做这一步目的是看看nginx配置是否有错。如果有错的话,执行该命令会报错,请仔细检查。如果正常,则如下图所示。
8. 修改Seafile容器的Seafile配置。路径是:/opt/seafile-data/seafile/conf/seahub_settings.py
主要就是修改SERVICE_URL和FILE_SERVER_ROOT。一个是把http改成https,另一个是在域名后加上8443端口号。修改完后保存,重启容器,如下图。
重启完之后,通过https://域名:8443应该就可以访问Seafile服务。此时已经开启https。同时8080端口无法访问Seafile服务。
9. 网页测试Seafile网站。到资料库里面上传一个文件,看看能否成功。有时Seafile网站能顺利打开,但是上传文件会提示网络错误。这说明设置上还是有问题。请检查上述步骤和配置。
10. 客户端测试Seafile。使用客户端注意地址要加上https和端口号。
11. 设定定时脚本替换证书。在宝塔面板中创建计划任务。每天定时同步ssl证书到Seafile容器ssl文件夹中。这样宝塔面板自动续签证书可以同步到Seafile里面。重启容器是为了能让新证书生效。
cp -f /www/server/panel/vhost/cert/sftest.example.com/fullchain.pem /opt/seafile-data/ssl cp -f /www/server/panel/vhost/cert/sftest.example.com/privkey.pem /opt/seafile-data/ssl docker stop seafile docker start seafile
注意替换自己的域名。
至此,使用宝塔面板Docker部署Seafile并开启https操作完成。Seafile开启https总体上会增加同步盘的安全性。希望上述操作对有需求的朋友有帮助。
参考链接:https://cloud.seafile.com/published/seafile-manual-cn/overview/components.md
文章评论