查看“︁Ubuntu使用docker安装seafile”︁的源代码
←
Ubuntu使用docker安装seafile
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于这些用户组的用户执行:*、
用户
您可以查看和复制此页面的源代码。
= 一、安装 Docker 和 Docker Compose = == (一)安装依赖 == <source lang="bash"> sudo apt update && sudo apt install -y curl wget </source> == (二)安装 Docker == <source lang="bash"> curl -fsSL https://get.docker.com | sudo sh sudo usermod -aG docker $USER newgrp docker </source> == (三)验证安装 == <source lang="bash"> docker --version docker compose version </source> = 二、安装&配置seafile = /opt/seafile 是用于存储 Seafile docker 文件的 Seafile 目录,如果您决定将 Seafile 放入不同的目录中,请相应地调整所有路径:我们这里统一改成 ~/seafile Seafile使用两个目录用于存放数据库和数据,分别是 seafile-mysql 和 seafile-data,不建议更改这些路径。 Seafile 和 Webserver Nginx 的所有配置和日志文件都存储在 Seafile 容器的目录中。 == (一)docker安装seafile == <source lang="bash"> docker pull seafileltd/seafile-pro-mc:13.0-latest </source> == (二)下载配置文件 == Seafile uses .env, seafile-server.yml and caddy.yml files for configuration. <source lang="bash"> 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 </source> == (三)配置 == 修改 .env配置文件: 生成 JWT 密钥(用于服务间认证): <source lang="bash"> $ openssl rand -hex 20 </source> 保存输出的密钥,后面会用到。 <pre> 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=#管理员密码 </pre> *[https://manual.seafile.com/13.0/setup/setup_with_an_existing_mysql_server/ INIT_SEAFILE_MYSQL_ROOT_PASSWORD 仅在安装阶段使用,安装完成将使用seafile用户连接数据库,所以安装完成可以删除] *For the configurations using to do the initializations (e.g, INIT_SEAFILE_ADMIN_EMAIL, INIT_SEAFILE_MYSQL_ROOT_PASSWORD), you can remove it from .env as well == (四)启动seafile服务 == 在 ~/sealife目录启动docker: <source lang="bash"> $ 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 </source> 检查运行状态: <source lang="bash"> docker compose ps docker logs seafile -f # 实时查看日志 </source> == (五)异常处理 == 结果上面步骤完成后服务器卡死,只能重启。 然后用 docker logs seafile -f 打印log: <pre> ---------------------------------------- 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. </pre> 这个错误表明数据库初始化时出现了问题,清理数据库并重新初始化: <source lang="bash"> cd ~/seafile sudo docker compose down # 删除 MySQL 数据目录 sudo rm -rf seafile-mysql # 重新启动服务 docker compose up -d </source> 成功了: <pre> Starting seafile server, please wait ... Seafile server started Done. Starting seahub at port 8000 ... ---------------------------------------- Successfully created seafile admin ---------------------------------------- Seahub is started Done. </pre> 虽然上面使用的是8000/8082端口,但试了一下还无法访问。 <source lang="bash"> $ 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 </source> 以上信息可以看到,当前是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也无法访问,这里要换个浏览器或者开启浏览器匿名访问 =三、改成http访问= 有时因为是内部局域网使用,安全风险可控,而https需要维护域名、ssl证书,所以希望直接使用http。 但现在新版本启用caddy反向代理后,由https切换http其实还不太容易。 ===配置.env=== 将以下启动参数修改为: <pre> # 禁用反向代理caddy ##COMPOSE_FILE='seafile-server.yml,caddy.yml,seadoc.yml,elasticsearch.yml' COMPOSE_FILE='seafile-server.yml,seadoc.yml,elasticsearch.yml' #协议修改为http SEAFILE_SERVER_PROTOCOL=http </pre> ===配置seafile-server.yml=== 将caddy相关labels移除: <pre> ## labels: ## caddy: ${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty} ## caddy.reverse_proxy: "{{upstreams 80}}" </pre> 使能seafile服务的80端口监听: <pre> seafile: image: ${SEAFILE_IMAGE:-seafileltd/seafile-pro-mc:13.0-latest} container_name: seafile restart: unless-stopped # ports: # - "80:80" ports: - "80:80" </pre> ===配置CSRF_TRUSTED_ORIGINS=== 不然会弹出以下错误: '''Forbidden (403) CSRF verification failed. Request aborted.''' 编辑 seafile-data/seafile/conf/seahub_settings.py,追加以下内容: <pre> CSRF_TRUSTED_ORIGINS = [ 'https://yourdomainOrip', 'http://yourdomainOrip', ] </pre> =四、安装SeaDrive挂载盘= == (一)下载&安装 == <source lang="bash"> 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 </source> == (二)获取授权token == <source lang="bash"> curl -d "username=username@example.com" -d "password=123456" https://seafile.example.com/api2/auth-token/ </source> == (三)配置~/.seadrive/seadrive.conf == <pre> [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 </pre> == (四)启动seadrive == <source lang="bash"> # 创建挂载目录 mkdir -p ~/SeaDrive seadrive -c ~/.seadrive/seadrive.conf -f -d ~/.seadrive/data ~/SeaDrive </source> 如果提示出错:dlopen(): error loading libfuse.so.2 需要安装fuse <source lang="bash"> sudo add-apt-repository universe sudo apt install libfuse2t64 </source> == (四)设置开机自启动 == === 1.创建 Systemd 服务文件 === 在终端执行以下命令,创建一个新的服务文件: <source lang="bash"> sudo nano /etc/systemd/system/seadrive.service </source> === 2.写入服务配置 === 将下面的配置粘贴进去。请注意修改 User 和 Group 后面的 ubuntu 为你的实际用户名。 <source lang="bash"> [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 </source> === 3.使服务生效 === <source lang="bash"> $ 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 </source> === !!!实际这些做完,文件同步一直有问题(不及时、甚至大部分时间不同步),怀疑是与系统(Ubuntu24.04)不匹配,最终换回seafile-daemon+seafile-cli方案: === === [[Seafile同步问题分析与解决]] === 参考文档: https://manual.seafile.com/latest/setup/setup_pro_by_docker/#downloading-and-modifying-env https://help.seafile.com/drive_client/drive_client_for_linux/
返回
Ubuntu使用docker安装seafile
。
导航菜单
个人工具
创建账号
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
设置
查看历史
更多
搜索
导航
首页
Ubuntu
Android
C&CPP
Java
Python
AI
大杂烩
最近更改
工具
所有页面
文件列表
页面信息
特殊页面