Loading... # 用 Docker 部署 Seafile 专业版 ## 快速开始 ### 安装 Docker 因为 Seafile v7.x.x 及以后版本容器是通过 Docker 运行的,所以您应该先在服务器上安装 Docker。 [CentOS 中安装 Docker](https://docs.docker.com/engine/install/centos/) [Ubuntu 中安装 Docker](https://docs.docker.com/engine/install/ubuntu/) ### 安装 docker-compose 因为 Seafile v7.x.x 及以后版本容器是通过 docker-compose 命令运行的,所以您应该先在服务器上安装该命令。 ```bash # for CentOS yum install docker-compose -y # for Ubuntu apt-get install docker-compose -y ``` ### 下载并修改 docker-compose.yml Seafile 7.1 到 8.0 版本下载 URL: [docker-compose.yml](https://docs.seafile.com/d/cb1d3f97106847abbf31/files/?p=/docker/pro-edition/docker-compose.yml) Seafile 9.0 及以后版本下载URL: [docker-compose.yml](https://docs.seafile.com/d/cb1d3f97106847abbf31/files/?p=%2Fdocker%2Fdcoker-compose.9.0%2Fseafile-9.0%2Fdocker-compose.yml) 示例文件到您的服务器上,然后根据您的实际环境修改该文件。尤其是以下几项配置: * MySQL root 用户的密码 (MYSQL_ROOT_PASSWORD and DB_ROOT_PASSWD) * 持久化存储 MySQL 数据的 volumes 目录 (volumes) * 持久化存储 Seafile 数据的 volumes 目录 (volumes) * 持久化存储 Elasticsearch 索引数据的 volumes 目录 (volumes) **注意:seafile 9.0 版本,需要手动在宿主机上创建 elasticsearch 的映射路径,并且给 777 权限,否则 elasticsearch 启动会报路径权限问题,命令如下** ```bash mkdir -p /opt/seafile-elasticsearch/data && chmod 777 -R /opt/seafile-elasticsearch/data ``` ### 启动 Seafile 服务 执行以下命令启动 Seafile 服务 ``` docker-compose up -d ``` 需要等待几分钟,等容器首次启动时的初始化操作完成后,您就可以在浏览器上访问`http://<你的 seafile 域名>` 来打开 Seafile 主页。 **注意:您应该在** `docker-compose.yml`**文件所在的目下执行以上命令。** ### 安装授权文件(seafile-license.txt) 如果您已经向 Seafile 软件商购买了专业版的授权文件`seafile-license.txt`,您只需要将该授权文件拷贝至 Seafile 数据持久化目录中的`seafile/`目录下,然后重启docker容器,即可完成授权文件的安装。 假如,Seafile 数据持久化目录为`/opt/seafile-data`,那么,在您的宿主机上执行以下操作: ``` cp /path/to/seafile-license.txt /opt/seafile-data/seafile/ ``` 然后重启这个容器: ``` docker-compose restart ``` ## 更多配置项 ### 自定义管理员用户名和密码 默认的管理员账号是 `me@example.com` 并且该账号的密码是 `asecret`,您可以在 `docker-compose.yml` 中配置不同的用户名和密码,为此您需要做如下配置: ```bash seafile: ... environment: ... - SEAFILE_ADMIN_EMAIL=me@example.com - SEAFILE_ADMIN_PASSWORD=a_very_secret_password ... ``` ### 使用 Let's encrypt SSL 证书 如果您把 `SEAFILE_SERVER_LETSENCRYPT` 设置为 `true`,该容器将会自动为您申请一个 letsencrypt 机构颁发的 SSL 证书,并开启 https 访问,为此您需要做如下配置: ```bash seafile: ... ports: - "80:80" - "443:443" ... environment: ... - SEAFILE_SERVER_LETSENCRYPT=true - SEAFILE_SERVER_HOSTNAME=seafile.example.com ... ``` 如果您想要使用自己的 SSL 证书,而且如果用来持久化存储 Seafile 数据的目录为 `/opt/seafile-data`,您可以做如下处理: * 创建 `/opt/seafile-data/ssl` 目录,然后拷贝您的证书文件和密钥文件到ssl目录下。 * 按照如下示例修改 Nginx 的配置文件`/opt/seafile-data/nginx/conf/seafile.nginx.conf`。 **请不要更改该配置文件的文件名** 。 ```bash server { listen 80; server_name example.seafile.com default_server; location / { rewrite ^ https://$host$request_uri? permanent; } } server { listen 443; ssl on; ssl_certificate /shared/ssl/your-ssl-crt.crt; ssl_certificate_key /shared/ssl/your-ssl-key.key; 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 example.seafile.com; ... ``` ``` - 重新加载 Nginx 的配置文件:`docker exec -it seafile /usr/sbin/nginx -s reload` ###### 如果 `SEAFILE_SERVER_LETSENCRYPT` 设置为 `true`,遇到了 Seafile 无法启动并且有如下错误 ```bash subprocess.CalledProcessError: Command '/scripts/ssl.sh /shared/ssl cloud.seafile-demo.de' returned non-zero exit status 128. ``` 容器中的脚本 /scripts/ssl.sh 需要修改内容, `git clone git://` 替换为 `git clone https://` 您需要重启服务以使其生效: ``` docker-compose restart ``` 自 9.0.6 版本后,我们使用 acme 代替 acme-tiny 来获取证书,并修复了这个问题。 ### 修改 Seafile 服务的配置 Seafile 的配置文件存放在 `shared/seafile/conf` 目录下,您可以根据[Seafile 手册](https://manual-cn.seafile.com/)的指导来修改这些配置项。 一旦修改了配置文件,您需要重启服务以使其生效: ``` docker-compose restart ``` ### 查找日志 您可以使用以下命令来查看 Seafile Docker 的日志 ``` docker-compose logs -f ``` Seafile 容器中 Seafile 服务本身的日志文件存放在 `/shared/logs/seafile` 目录下,或者您可以在宿主机上 Seafile 容器的卷目录中找到这些日志,例如:`/opt/seafile-data/logs/seafile` 同样 Seafile 容器的系统日志存放在 `/shared/logs/var-log` 目录下,或者宿主机目录 `/opt/seafile-data/logs/var-log`。 ### 增加一个新的管理员 确保各容器正常运行,然后执行以下命令: ``` docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh ``` 根据提示输入用户名和密码,您现在有了一个新的管理帐户。 ## Seafile 目录结构 ### `/shared` 共享卷的挂载点,您可以选择在容器外部存储某些持久性信息.在这个项目中,我们会在外部保存各种日志文件和上传数据。 这使您可以轻松重建容器而不会丢失重要信息。 * /shared/seafile: Seafile 服务的配置文件,日志文件以及数据文件 * /shared/seafile/logs: Seafile 服务运行产生的日志文件目录。比如您可以在 `/shared/seafile/logs/seafile.log` 文件中看到 seaf-server 的日志 * /shared/seafile/seafile-data: 如果您没有配置S3或者OSS等对象存储,那么用户上传的数据将会存放到该目录下。 * /shared/logs: 日志目录 * /shared/logs/var-log: 我们将容器内的`/var/log`链接到本目录。您可以在`/shared/logs/var-log/nginx/`中找到 nginx 的日志文件 * /shared/ssl: 存放证书的目录,默认不存在 ### 升级 Seafile 服务 如果要升级 Seafile 服务到最新版本: ```bash docker pull docker.seafile.top/seafileltd/seafile-pro-mc:latest docker-compose down docker-compose up -d ``` ## 备份和恢复 ### 目录结构 我们假设您的 seafile 数据卷路径是 `/opt/seafile-data`,并且您想将备份数据存放到 `/opt/seafile-backup` 目录下。 您可以创建一个类似以下 `/opt/seafile-backup` 的目录结构: ```bash /opt/seafile-backup ---- databases/ 用来存放 MySQL 容器的备份数据 ---- data/ 用来存放 Seafile 容器的备份数据 ``` 要备份的数据文件: ```bash /opt/seafile-data/seafile/conf # configuration files /opt/seafile-data/seafile/seafile-data # data of seafile /opt/seafile-data/seafile/seahub-data # data of seahub ``` ### 备份数据 步骤: 1. 备份 MySQL 数据库数据; 2. 备份 Seafile 数据目录; * 备份数据库: 建议每次将数据库备份到一个单独的文件中。至少在一周内不要覆盖旧的数据库备份。 ```bash cd /opt/seafile-backup/databases docker exec -it seafile-mysql mysqldump -uroot -p** --opt ccnet_db > ccnet_db.sql docker exec -it seafile-mysql mysqldump -uroot -p** --opt seafile_db > seafile_db.sql docker exec -it seafile-mysql mysqldump -uroot -p** --opt seahub_db > seahub_db.sql ``` 注释:-p 后面是mysql的root用户登录密码,不要有空格 * 备份 Seafile 资料库数据: * 直接复制整个数据目录 ``` cp -R /opt/seafile-data/seafile /opt/seafile-backup/data/cd /opt/seafile-backup/data && rm -rf ccnet ``` * 使用 rsync 执行增量备份 ```bash rsync -az /opt/seafile-data/seafile /opt/seafile-backup/data/ cd /opt/seafile-backup/data && rm -rf ccnet ``` ### 恢复数据 * 恢复数据库: ```bash docker cp /opt/seafile-backup/databases/ccnet_db.sql seafile-mysql:/tmp/ccnet_db.sql docker cp /opt/seafile-backup/databases/seafile_db.sql seafile-mysql:/tmp/seafile_db.sql docker cp /opt/seafile-backup/databases/seahub_db.sql seafile-mysql:/tmp/seahub_db.sql docker exec -it seafile-mysql /bin/sh -c "mysql -uroot -p** ccnet_db < /tmp/ccnet_db.sql" docker exec -it seafile-mysql /bin/sh -c "mysql -uroot -p** seafile_db < /tmp/seafile_db.sql" docker exec -it seafile-mysql /bin/sh -c "mysql -uroot -p** seahub_db < /tmp/seahub_db.sql" ``` * 恢复 seafile 数据: ``` cp -R /opt/seafile-backup/data/* /opt/seafile-data/seafile/ ``` ## 垃圾回收 在 seafile 中,当文件被删除时,组成这些文件的块数据不会立即删除,因为可能有其他文件也会引用这些块数据(用于去重功能的实现)。为了真正删除无用的块数据,还需要额外运行"[GC](https://manual-cn.seafile.com/maintain/seafile_gc.html)"程序。GC 会自动检测到哪些数据块不再被任何文件所引用,并清除它们。 GC 脚本被放在docker容器的 `/scripts` 目录下。执行 GC 的方法很简单:`docker exec seafile /scripts/gc.sh`。对于社区版来说,该程序会暂停 Seafile 服务,但这是一个相对较快的程序,一旦程序运行完成,Seafile 服务也会自动重新启动。而专业版提供了在线运行 GC 的功能,不会暂停 Seafile 服务。 ## 用 Docker 部署 OnlyOffice 您需要手动将 OnlyOffice 相关配置写入 docker-compose.yml 文件中 [用 Docker 部署 OnlyOffice](https://cloud.seafile.com/published/seafile-manual-cn/docker/pro-edition/%E7%94%A8Docker%E9%83%A8%E7%BD%B2OnlyOffice.md) ## 用 Docker 部署 Clamav 您需要手动将 Clamav 相关配置写入 docker-compose.yml 文件中 [用 Docker 部署 Clamav](https://cloud.seafile.com/published/seafile-manual-cn/docker/pro-edition/%E7%94%A8Docker%E9%83%A8%E7%BD%B2Clamav.md) ## S3/Swift/Ceph * [安装 Seafile 专业版服务器并使用亚马逊 S3](https://cloud.seafile.com/published/seafile-manual-cn/deploy_pro/setup_with_amazon_s3.md) * [安装 Seafile 专业版服务器并使用 Ceph](https://cloud.seafile.com/published/seafile-manual-cn/deploy_pro/setup_with_ceph.md) * [安装 Seafile 专业版服务器并使用阿里云 OSS](https://cloud.seafile.com/published/seafile-manual-cn/deploy_pro/setup_with_oss.md) * [安装 seafile 专业版服务器并使用 NFS](https://cloud.seafile.com/published/seafile-manual-cn/deploy_pro/setup_seafile_cluster_with_nfs.md) * [不同后端的数据迁移](https://cloud.seafile.com/published/seafile-manual-cn/deploy_pro/migrate.md) ## 常见问题 **您可以运行 **** `docker exec`**** 之类的docker命令来查找错误。** ``` docker exec -it seafile /bin/bash ``` **LetsEncrypt SSL 证书将要过期** 如果证书没有自动更新,需要执行命令 `/scripts/ssl.sh /shared/ssl/ <你的 seafile 域名>` 以手动更新证书。 例如:`/scripts/ssl.sh /shared/ssl/ example.seafile.com` **SEAFILE_SERVER_LETSENCRYPT=false 改为 true** 在使用 http 一段时间后,想改为 https,需要移走并备份 seafile.nginx.conf ``` mv /opt/seafile/shared/nginx/conf/seafile.nginx.conf /opt/seafile/shared/nginx/conf/seafile.nginx.conf.bak ``` 启动新的容器,将会自动申请证书 ```bash docker-compose down docker-compose up -d ``` 您还需要手动将其他陪配置文件中的 http 改为 https,系统管理员页面中的 SERVICE_URL、FILE_SERVER_ROOT 也需要修改。 如果曾经改动过旧的 seafile.nginx.conf,现在可以按照您想要的内容修改新的 seafile.nginx.conf,然后执行以下命令使 nginx 配置生效。 ``` docker exec seafile nginx -s reload ``` 最后修改:2022 年 08 月 18 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏
2 条评论
Error: the user running the script ("root") is not the owner of "/shared/seafile/seafile-data" folder, you should use the user "UNKNOWN" to run the script.
请问下没有权限启动改怎么修改
这段时间较忙,没上博客。建议你用docker安装。如果是原生安装,官方文档似乎有说过,需要seafile用户来启动而非root用户。如果你是迁移权限变了,那么把 "属主:数组" 的权限改下一下。