Ubuntu使用docker安装seafile
一、安装 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=#管理员密码
(四)启动
在 ~/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
接下来可以用以下命令启动:
- 创建挂载目录
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
参考文档:https://manual.seafile.com/latest/setup/setup_pro_by_docker/#downloading-and-modifying-env