Ubuntu使用docker安装seafile

来自个人维基
Hovercool留言 | 贡献2026年6月8日 (一) 16:14的版本
跳转到导航 跳转到搜索

一、安装 Docker 和 Docker Compose

(一)安装依赖

sudo apt update && sudo apt install -y curl wget

(二)安装 Docker

curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
newgrp docker

(三)验证安装

docker --version
docker compose version

二、安装&配置seafile

/opt/seafile 是用于存储 Seafile docker 文件的 Seafile 目录,如果您决定将 Seafile 放入不同的目录中,请相应地调整所有路径:我们这里统一改成 ~/seafile
Seafile使用两个目录用于存放数据库和数据,分别是 seafile-mysql 和 seafile-data,不建议更改这些路径。
Seafile 和 Webserver Nginx 的所有配置和日志文件都存储在 Seafile 容器的目录中。

(一)docker安装seafile

docker pull seafileltd/seafile-pro-mc:13.0-latest

(二)下载配置文件

Seafile uses .env, seafile-server.yml and caddy.yml files for configuration.


mkdir ~/seafile
cd ~/seafile

wget -O .env https://manual.seafile.com/13.0/repo/docker/pro/env
wget https://manual.seafile.com/13.0/repo/docker/pro/seafile-server.yml
wget https://manual.seafile.com/13.0/repo/docker/pro/elasticsearch.yml
wget https://manual.seafile.com/13.0/repo/docker/seadoc.yml
wget https://manual.seafile.com/13.0/repo/docker/caddy.yml

(三)配置

修改 .env配置文件:
生成 JWT 密钥(用于服务间认证):

$ openssl rand -hex 20

保存输出的密钥,后面会用到。

BASIC_STORAGE_PATH=/home/ubuntu/seafile
...
#################################
#      Startup parameters       #
#################################
SEAFILE_SERVER_HOSTNAME=seafile.example.com
SEAFILE_SERVER_PROTOCOL=https
TIME_ZONE=Asia/Shanghai
JWT_PRIVATE_KEY= #填入你上面openssl生成的hex
...
## Database
SEAFILE_MYSQL_DB_PASSWORD=#数据库密码
...
## Database root password, Used to create Seafile users
INIT_SEAFILE_MYSQL_ROOT_PASSWORD=#数据库管理员密码

## Seafile admin user
INIT_SEAFILE_ADMIN_EMAIL=#管理员邮箱
INIT_SEAFILE_ADMIN_PASSWORD=#管理员密码

(四)启动seafile服务

在 ~/sealife目录启动docker:

$ docker compose up -d
[+] up 63/63
 ✔ Image seafileltd/sdoc-server:2.0-latest           Pulled                                                                                                                     121.9s
 ✔ Image elasticsearch:8.15.0                        Pulled                                                                                                                     113.1s
 ✔ Image mariadb:10.11                               Pulled                                                                                                                      33.1s
 ✔ Image redis                                       Pulled                                                                                                                       8.8s
 ✔ Image lucaslorentz/caddy-docker-proxy:2.12-alpine Pulled                                                                                                                       6.6s
 ✔ Network seafile-net                               Created                                                                                                                      0.1s
 ✔ Container seafile-elasticsearch                   Started                                                                                                                      1.3s
 ✔ Container seafile-mysql                           Healthy                                                                                                                     12.4s
 ✔ Container seafile-redis                           Started                                                                                                                      1.3s
 ✔ Container seafile-caddy                           Started                                                                                                                      1.5s
 ✔ Container seadoc                                  Started                                                                                                                     12.7s
 ✔ Container seafile                                 Started

检查运行状态:

docker compose ps
docker logs seafile -f   # 实时查看日志

(五)异常处理

结果上面步骤完成后服务器卡死,只能重启。
然后用 docker logs seafile -f 打印log:

----------------------------------------
Now creating seahub database tables ...

----------------------------------------

Error: Failed to init seahub database: Table 'abuse_reports_abusereport' already exists
waiting for mysql server to be ready: mysql is not ready
Traceback (most recent call last):
  File "/scripts/start.py", line 91, in <module>
    main()
  File "/scripts/start.py", line 56, in main
    init_seafile_server()
  File "/scripts/bootstrap.py", line 86, in init_seafile_server
    call('{} auto -n seafile'.format(setup_script), env=env)
  File "/scripts/utils.py", line 71, in call
    return subprocess.check_call(*a, **kw)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/subprocess.py", line 413, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '/opt/seafile/seafile-pro-server-13.0.22/setup-seafile-mysql.sh auto -n seafile' returned non-zero exit status 1.

这个错误表明数据库初始化时出现了问题,清理数据库并重新初始化:

cd ~/seafile
sudo docker compose down
# 删除 MySQL 数据目录
sudo rm -rf seafile-mysql
# 重新启动服务
docker compose up -d

成功了:

Starting seafile server, please wait ...
Seafile server started

Done.

Starting seahub at port 8000 ...

----------------------------------------
Successfully created seafile admin
----------------------------------------

Seahub is started

Done.

虽然上面使用的是8000/8082端口,但试了一下还无法访问。

$ docker compose ps
NAME                    IMAGE                                         COMMAND                  SERVICE         CREATED         STATUS                   PORTS
seadoc                  seafileltd/sdoc-server:2.0-latest             "/sbin/my_init -- /s…"   seadoc          9 minutes ago   Up 9 minutes             80/tcp
seafile                 seafileltd/seafile-pro-mc:13.0-latest         "/sbin/my_init -- /s…"   seafile         9 minutes ago   Up 9 minutes (healthy)   80/tcp
seafile-caddy           lucaslorentz/caddy-docker-proxy:2.12-alpine   "/bin/caddy docker-p…"   caddy           9 minutes ago   Up 9 minutes (healthy)   0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 2019/tcp
seafile-elasticsearch   elasticsearch:8.15.0                          "/bin/tini -- /usr/l…"   elasticsearch   9 minutes ago   Up 10 seconds            9200/tcp, 9300/tcp
seafile-mysql           mariadb:10.11                                 "docker-entrypoint.s…"   db              9 minutes ago   Up 9 minutes (healthy)   3306/tcp
seafile-redis           redis                                         "docker-entrypoint.s…"   redis           9 minutes ago   Up 9 minutes             6379/tcp

以上信息可以看到,当前是caddy监听了系统的80/443端口:0.0.0.0:80->80/tcp 0.0.0.0:443->443/tcp,然后再内部转发到 seafile。
接下来,把云服务器安全组中的80/443端口打开(服务器本地防火墙一般都没开),使用 https://youdomain.com就可以访问了。

  • 还有一点要注意:受制于HSTS (HTTP Strict Transport Security) 策略,如果最开始你在.env中打开的是https并用浏览器访问过的话,即使.env改回http也无法访问,这里要换个浏览器或者开启浏览器匿名访问

三、安装SeaDrive挂载盘

(一)下载&安装

wget https://sos-ch-dk-2.exo.io/seafile-downloads/SeaDrive-cli-x86_64-3.0.22.AppImage
chmod +x SeaDrive-cli-x86_64-3.0.22.AppImage
mv SeaDrive-cli-x86_64-3.0.22.AppImage seadrive
sudo cp seadrive /usr/local/bin

(二)获取授权token

curl -d "username=username@example.com" -d "password=123456" https://seafile.example.com/api2/auth-token/

(三)配置~/.seadrive/seadrive.conf

[account]
server = #https://seafile.example.com
username = #username@example.com
token = #yourtoken
is_pro = #false

[general]
client_name = #yourname-ubuntu

[cache]
size_limit = 5GB #挂载盘大小
clean_cache_interval = 10

(四)启动seadrive

# 创建挂载目录
mkdir -p ~/SeaDrive
seadrive -c ~/.seadrive/seadrive.conf -f -d ~/.seadrive/data ~/SeaDrive

如果提示出错:dlopen(): error loading libfuse.so.2

需要安装fuse

sudo add-apt-repository universe
sudo apt install libfuse2t64

(四)设置开机自启动

1.创建 Systemd 服务文件

在终端执行以下命令,创建一个新的服务文件:

sudo nano /etc/systemd/system/seadrive.service

2.写入服务配置

将下面的配置粘贴进去。请注意修改 User 和 Group 后面的 ubuntu 为你的实际用户名。

[Unit]
Description=SeaDrive Client
After=network.target
# 如果你的 Seafile 服务器也在本机上,可以取消下面一行的注释,确保服务器先启动
# After=network.target seafile.service

[Service]
Type=forking
Environment="HOME=/home/ubuntu"
ExecStart=/usr/bin/seadrive -c /home/ubuntu/seadrive.conf -d /home/ubuntu/.seadrive/data -l /home/ubuntu/.seadrive/log /home/ubuntu/SeaDrive
ExecStop=/usr/bin/pkill seadrive
User=ubuntu
Group=ubuntu
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

3.使服务生效

$ sudo systemctl daemon-reload
$ sudo systemctl enable seadrive.service
Created symlink /etc/systemd/system/multi-user.target.wants/seadrive.service → /etc/systemd/system/seadrive.service.
$ sudo systemctl start seadrive.service


参考文档:
https://manual.seafile.com/latest/setup/setup_pro_by_docker/#downloading-and-modifying-env
https://help.seafile.com/drive_client/drive_client_for_linux/