通过 Docker 部署 Seafile 网盘,自动更新证书,自动续签失效,seafile配置。
通过 Docker 部署 Seafile 网盘(最新版)
最新版
通过 Docker 直接安装 12 版本最新版,借助 Nginx 反向代理,不使用 Seadoc 功能。由于不暴露任何端口至公网,反向代理直接代理 Seafile 容器内部 80 端口即可。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
version: "3.7" services: db: image: ${SEAFILE_DB_IMAGE} container_name: seafile-mysql environment: - MYSQL_ROOT_PASSWORD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD} - MYSQL_LOG_CONSOLE=true - MARIADB_AUTO_UPGRADE=1 volumes: - ${SEAFILE_MYSQL_VOLUME}:/var/lib/mysql networks: - xxxx healthcheck: test: - CMD - /usr/local/bin/healthcheck.sh - --connect - --mariadbupgrade - --innodb_initialized interval: 20s start_period: 30s timeout: 5s retries: 10 memcached: image: ${SEAFILE_MEMCACHED_IMAGE} container_name: seafile-memcached entrypoint: memcached -m 256 networks: - xxxx seafile: image: ${SEAFILE_IMAGE} container_name: seafile volumes: - ${SEAFILE_VOLUME}:/shared environment: - DB_HOST=${SEAFILE_MYSQL_DB_HOST} - DB_PORT=${SEAFILE_MYSQL_DB_PORT} - DB_USER=${SEAFILE_MYSQL_DB_USER} - DB_ROOT_PASSWD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD} - DB_PASSWORD=${SEAFILE_MYSQL_DB_PASSWORD} - SEAFILE_MYSQL_DB_CCNET_DB_NAME=${SEAFILE_MYSQL_DB_CCNET_DB_NAME} - SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=${SEAFILE_MYSQL_DB_SEAFILE_DB_NAME} - SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=${SEAFILE_MYSQL_DB_SEAHUB_DB_NAME} - TIME_ZONE=${TIME_ZONE} - INIT_SEAFILE_ADMIN_EMAIL=${INIT_SEAFILE_ADMIN_EMAIL} - INIT_SEAFILE_ADMIN_PASSWORD=${INIT_SEAFILE_ADMIN_PASSWORD} - SEAFILE_SERVER_HOSTNAME=${SEAFILE_SERVER_HOSTNAME} - SEAFILE_SERVER_PROTOCOL=${SEAFILE_SERVER_PROTOCOL} - SITE_ROOT=${SITE_ROOT} - NON_ROOT=false - JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY} - SEAFILE_LOG_TO_STDOUT=true depends_on: db: condition: service_healthy memcached: condition: service_started networks: - xxxx networks: xxxx: external: true |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# Seafile 设置 SEAFILE_SERVER_HOSTNAME=xxx.xxxx.com SEAFILE_SERVER_PROTOCOL=https SITE_ROOT=/ # Seafile 数据卷路径 SEAFILE_VOLUME=/home/docker/seafile/data SEAFILE_MYSQL_VOLUME=/home/docker/seafile/mysql # 管理员账号 INIT_SEAFILE_ADMIN_EMAIL=xxx@xxxx.com INIT_SEAFILE_ADMIN_PASSWORD=xxxxxxxx # 数据库设置 INIT_SEAFILE_MYSQL_ROOT_PASSWORD=xxxxxxxx SEAFILE_MYSQL_DB_PASSWORD=xxxxxxxx SEAFILE_MYSQL_DB_HOST=db SEAFILE_MYSQL_DB_PORT=3306 SEAFILE_MYSQL_DB_USER=seafile SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db # 时区 TIME_ZONE=Asia/Shanghai # JWT 密钥(可随机生成) JWT_PRIVATE_KEY='xxxxxxxx' # Seafile 镜像版本 SEAFILE_IMAGE=seafileltd/seafile-mc:12.0-latest SEAFILE_DB_IMAGE=mariadb:10.11 SEAFILE_MEMCACHED_IMAGE=memcached:1.6.29 |
(2025.05.12)
通过 Docker 部署 Seafile 网盘(旧)
一切都是以换主力 VPS 为开端,虽然还剩余一年左右才到期,不过还是得早做打算,临期的 VPS 服务器,就算是当作折腾用。最近一直对 Docker 很感兴趣,尽管 SS 通过 Docker 部署的效果不太满意,但丝毫不影响对 Docker 的执念。主要的 Seafile 、Wordpress 都采用 Docker 部署,效果很不错。
步骤一
先进行 Docker 的安装。
|
1 2 |
curl -fsSL get.docker.com -o get-docker.sh sh get-docker.sh --mirror Aliyun |
步骤二
再完成 Nginx 、Cerbot 的安装。
|
1 2 |
apt -y update apt -y install curl nginx python3-certbot-nginx |
步骤三
准备目录、新建 docker-compose.yml 文件。
|
1 2 3 |
mkdir -p /opt/seafile cd /opt/seafile nano docker-compose.yml |
步骤四
写入 docker-compose.yml 内容。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
version: '3.8' services: db: image: mariadb:10.11 container_name: seafile-mysql environment: - MYSQL_ROOT_PASSWORD=dbpasswd #设置数据库 root 密码 - MYSQL_LOG_CONSOLE=true volumes: - ./mariadb-data:/var/lib/mysql networks: - seafile-net memcached: image: memcached:1.6 container_name: seafile-memcached entrypoint: memcached -m 256 networks: - seafile-net seafile: image: seafileltd/seafile-mc:latest container_name: seafile ports: - "127.0.0.1:8090:80" volumes: - ./seafile-data:/shared environment: - DB_HOST=db - DB_ROOT_PASSWD=dbpasswd #与 mariadb 容器的 root 密码对应 - TIME_ZONE=Asia/Shanghai - SEAFILE_ADMIN_EMAIL=abcd@example.com #管理员账号 - SEAFILE_ADMIN_PASSWORD=adminpasswd #管理员密码 - SEAFILE_SERVER_LETSENCRYPT=false - SEAFILE_SERVER_HOSTNAME=seafile.example.com #站点域名与 nginx 的 server_name 对应 depends_on: - db - memcached networks: - seafile-net networks: seafile-net: |
步骤五
启动 Docker Seafile ,注意,必须在 /opt/seafile 目录的路径下执行。
然后新建 Seafile 的 Nginx 站点配置文件。
|
1 2 |
docker compose up -d nano /etc/nginx/sites-available/seafile |
步骤六
写入 Nginx 配置文件内容。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
server { listen 80; server_name seafile.example.com; #与 docker-compose 内的环境变量 SEAFILE_SERVER_HOSTNAME 相对应 client_max_body_size 0; location / { proxy_pass http://127.0.0.1:8090; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } |
步骤七
启用站点,并签发证书。
|
1 2 |
ln -s /etc/nginx/sites-available/seafile /etc/nginx/sites-enabled/seafile certbot --nginx |
验证是否安装成功
登录个人 Seafile 域名网址,完成个性化设置即可,注意,必须在系统设置里面把所有两处 http 改为 https 并打勾保存,否则无法上传文件。
鸣谢
以上步骤主要参考下面两篇教程内容,特此鸣谢:
官方部署文档亦参考不少内容:
设置 Seafile 开机自启动
|
1 2 3 4 5 6 |
docker version #显示 Docker 版本信息 systemctl start docker #启动 Docker 服务 systemctl enable docker #设置 Docker 开机自启动 docker ps -a #显示 Docker 内容器详细信息 docker start $(docker ps -aq) #启动 Docker 内容器 docker update --restart=always $(docker ps -aq) #自启动 Docker 内容器 |
[c-alert type="error"]
按部就班的完成以上所有设置之后,迎来最大的坑。
仅仅是查找这个错误代码的解决教程,可是费尽周折,很多网络上的教程均不起作用,最后阴差阳错结合几个帖子的答案,得以解决,在胡乱尝试中找到正确解法。 [/c-alert]

[c-alert type="success"]在文件末尾加入一行代码,关键点在于被一篇教程误导,应该是单引号,教程却写着双引号,可能是常识,吾被坑惨矣![/c-alert]
|
1 2 3 |
nano /opt/seafile/seafile-data/seafile/conf/seahub_settings.py CSRF_TRUSTED_ORIGINS = ['https://域名'] #黏贴代码后保存退出 docker compose restart #重启 docker compose 服务 |
(2024.05.22)
seafile依然没有自动更新证书
到底怎么回事,还是不得而知。依照之前的办法,手动更新了证书,又出现新的问题,浏览器显示证书有效,但是“不安全”。且是红色感叹号,搜索半天,没找到原因。最终发现应该是有延迟造成的,最后手机登录了一下,发现是正常的,再回到电脑上,就正常了。很奇怪。
(2023.02.22)
seafile服务器https自动续签失效
由于单位网络升级导致seafile无法使用,
而且最近一直在玩儿unbuntu系统,
这几天突然发现,seafile服务器https已经失效。
鼓捣半天,也没看出来哪里出的问题。
重新走一遍流程,
也总是报错,各种报错。
回到家好好弄弄,
把/etc/nginx/sites-available/seafile.conf里面的所有配置问题都删掉,
只留下
|
1 2 3 4 |
server { listen 80; server_name 域名; } |
然后
|
1 |
~/.acme.sh/acme.sh --issue -d 域名 --nginx |
成功。
不过三个月后是否能自动续签,还得拭目以待。
这一次,没有把密钥放在/etc/nginx/ssl 目录,
而是直接引用原始目录。
关键是,这一次,生成的密钥是cer格式的,而不是crt格式。
这可能就是没有自动续签的原因吧。猜测的。
搜索后得知cer是windows系统用的,crt是linux系统用的。
关键是,服务器是ubuntu系统。生成cer格式的证书,没道理的。
刚才特意去本网站的服务器看了配置文件,
原始目录生成的也是cer格式,
而放在/etc/nginx/ssl 目录的,其实就是转换成了crt格式。
这一次没有进行这个转换,看看三个月后,会发生什么。
但是我总有不好的预感。
可能和这个转换没啥关系,
难道三个月后,还要手动更新证书吗。
不管啦。
三个月后,再看看。
(2022.08.11)
配置seafile
这几天一直在折腾seafile,如果不配置https那早就已经搞定。无论是docker一键安装方法还是普通一键安装方法,都很轻松。为了达到https的目的,用了很多网上的教程,docker的、普通的。都不行。
[c-alert type="success"]我只适合一键方式,没办法,咱是小白。在经历了各种报错之后,最终用seafile官方的一键脚本,然后配和我之前发表的acme文章,搞定了https网站。[/c-alert]
步骤一:
用这个脚本一键安装seafile,系统必须是Ubuntu 18.04/20.04。之后登录域名就可以打开seafile登录界面,这一步,已经自动配置好 MariaDB, Memcached, WebDAV, Ngnix 和开机自动启动脚本。
|
1 2 |
wget https://raw.githubusercontent.com/haiwen/seafile-server-installer-cn/master/seafile-8.0_ubuntu bash seafile-8.0_ubuntu 8.0.0 |
步骤二:
使用acme.sh签发证书,域名必须提前解析到服务器IP地址。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#安装acme.sh curl https://get.acme.sh | sh #切换到Let’s Encrypt的CA ~/.acme.sh/acme.sh --set-default-ca --server letsencrypt #开启acme.sh的自动升级 ~/.acme.sh/acme.sh --upgrade --auto-upgrade #使用acme.sh签发证书,指定Nginx对应插件 ~/.acme.sh/acme.sh --issue -d 域名 --nginx #证书位于~/.acme.sh目录,不建议直接使用,创建 /etc/nginx/ssl 目录存放证书。 mkdir -p /etc/nginx/ssl ~/.acme.sh/acme.sh --install-cert -d 域名 \ --key-file /etc/nginx/ssl/域名.key \ --fullchain-file /etc/nginx/ssl/域名.crt \ --reloadcmd "service nginx force-reload" |
步骤三:
编辑/etc/nginx/sites-available/seafile.conf
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
server { listen 80; server_name 域名; rewrite ^(.*) https://$server_name$1 permanent; } server { listen 443 ssl; server_name 域名; charset utf-8; ssl_certificate /etc/nginx/ssl/域名.crt; ssl_certificate_key /etc/nginx/ssl/域名.key; ssl_protocols TLSv1.2 TLSv1.3; # TLSv1.3需要nginx 1.13.0以上版本 ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384; ssl_ecdh_curve secp384r1; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_session_tickets off; keepalive_timeout 70; |
[c-alert type="warning"]自动安装脚本会在系统中安装开机自动启动脚本。也可以使用命令关闭/启动 Seafile 服务:[/c-alert]
|
1 2 |
service seafile-server stop service seafile-server start |
结语:
这样就可以了。不过想升级到seafile服务器9.0版本,看了官方手册,我感觉大概率不会成功,指定各种报错,我只适合一键脚本。没办法咱是小白。
(2022.05.12)
seafile
这几天一直再鼓捣seafile,虽然前几年用过,
这一次,根据几个网络教程,成功用docker安装上了。
也通过docker安装上了nginx并且做了反代,
直接访问域名就进入seafile登陆界面。
不过,最终还是要配置https的,一直没成功。
继续研究一下。
未完待续。
(2022.05.10)
文章评论