1. 简介

Seafile 8.0.4 版本的安装配置可以参考“Seafile 8.0.4 安装配置指南”。自9.0版本开始,不支持CentOS 系统直接安装(CentOS 的内核版本更新太落后),仅支持容器方式的部署。

本文的部署环境基于 Ubuntu20.24,安装方式参考“Ubuntu20.04 Docker 安装”。

2. 安装配置

2.1. 修改容器配置文件

版本下载URL:  docker-compose.yml

根据实际环境修改该文件。尤其是以下几项配置:

MySQL root 用户的密码 (MYSQL_ROOT_PASSWORD and DB_ROOT_PASSWD)

持久化存储 MySQL 数据的 volumes 目录 (volumes)

持久化存储 Seafile 数据的 volumes 目录 (volumes)

持久化存储 Elasticsearch 索引数据的 volumes 目录 (volumes)

mkdir -p /opt/seafile/seafile-elasticsearch/data  && chmod 777 -R /opt/seafile/seafile-elasticsearch/data
vim docker-compose.yml


version: '2.0'
services:
  db:
    image: mariadb:10.5
    container_name: seafile-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=password  # Requested, set the root's password of MySQL service.
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - /opt/seafile/seafile-mysql/db:/var/lib/mysql  # Requested, specifies the path to MySQL data persistent store.
    networks:
      - seafile-net

  memcached:
    image: memcached:1.5.6
    container_name: seafile-memcached
    entrypoint: memcached -m 256
    networks:
      - seafile-net

  elasticsearch:
    image: elasticsearch:7.16.2
    container_name: seafile-elasticsearch


    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    volumes:
      - /opt/seafile/seafile-elasticsearch/data:/usr/share/elasticsearch/data  # Requested, specifies the path to Elasticsearch data persistent store.
    networks:
      - seafile-net

  seafile:
    image: seafile-pro:9.0.5ida
#    image: docker.seafile.top/seafileltd/seafile-pro-mc:latest
    container_name: seafile
    ports:
      - "80:80"
#     - "443:443"  # If https is enabled, cancel the comment.
    volumes:
      - /opt/seafile/seafile-data:/shared   # Requested, specifies the path to Seafile data persistent store.
    environment:


      - DB_HOST=db
      - DB_ROOT_PASSWD=password  # Requested, the value shuold be root's password of MySQL service.
#      - TIME_ZONE=Asia/Shanghai # Optional, default is UTC. Should be uncomment and set to your local time zone.
      - SEAFILE_ADMIN_EMAIL=13502886986@139.com # Specifies Seafile admin user, default is 'me@example.com'
      - SEAFILE_ADMIN_PASSWORD=password    # Specifies Seafile admin password, default is 'asecret'
      - SEAFILE_SERVER_LETSENCRYPT=false   # Whether to use https or not
      - SEAFILE_SERVER_HOSTNAME=yunpan.myj.com # Specifies your host name if https is enabled
    depends_on:
      - db
      - memcached
      - elasticsearch
    networks:
      - seafile-net

networks:
  seafile-net:
注意:seafile 9.0 版本,需要手动在宿主机上创建 elasticsearch 的映射路径,并且给 777 权限,否则 elasticsearch 启动会报路径权限问题。

2.2. 启动 Seafile 服务

执行以下命令启动 Seafile 服务

docker-compose up -d

容器启动始化操作完成后,在浏览器上访问http://yunpan.myj.com打开 Seafile 主页。

3. 更多配置项

3.1. 使用 Let's encrypt SSL 证书

如果把 SEAFILE_SERVER_LETSENCRYPT 设置为 true,该容器将会自动申请一个 letsencrypt 机构颁发的 SSL 证书,并开启 https 访问:

seafile:
    ...
    ports:
        - "80:80"
        - "443:443"
    ...
    environment:
        ...
        - SEAFILE_SERVER_LETSENCRYPT=true
        - SEAFILE_SERVER_HOSTNAME=seafile.example.com
        ...

使用SSL 证书用来持久化存储 Seafile 数据的目录为 /opt/seafile/seafile-data,创建 /opt/seafile/seafile-data/ssl 目录,然后拷贝证书文件和密钥文件到ssl目录下。

按照如下示例修改 Nginx 的配置文件/opt/seafile-data/nginx/conf/seafile.nginx.conf。不要更改该配置文件的文件名。

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

3.2. 查找日志

Seafile 容器中 Seafile 服务本身的日志文件存放在 /shared/logs/seafile 目录下,可以在宿主机上 Seafile 容器的卷目录中找到这些日志,例如:/opt/seafile/seafile-data/logs/seafile

同样 Seafile 容器的系统日志存放在 /shared/logs/var-log 目录下,或者宿主机目录 /opt/seafile/seafile-data/logs/var-log。

3.3. 增加新的管理员

确保各容器正常运行,然后执行以下命令:

docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh

根据提示输入用户名和密码,您现在有了一个新的管理帐户。

3.4. 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: 存放证书的目录,默认不存在

4. 备份和恢复

seafile 数据卷路径是 /opt/seafile/seafile-data,备份数据存放到 /opt/seafile/seafile-backup 目录下。先创建一个类似以下 /opt/seafile/seafile-backup 的目录结构:

  • /opt/seafile/seafile-backup
  • ---- databases/  用来存放 MySQL 容器的备份数据
  • ---- data/  用来存放 Seafile 容器的备份数据

要备份的数据文件:

  • /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

4.1. 备份数据

1、备份 MySQL 数据库数据;

2、备份 Seafile 数据目录;

4.1.1. 备份数据库

# 建议每次将数据库备份到一个单独的文件中。至少在一周内不要覆盖旧的数据库备份。

cd /opt/seafile/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

4.1.2. 备份 Seafile 资料库数据

直接复制整个数据目录

cp -R /opt/seafile/seafile-data/seafile /opt/seafile-backup/data/
cd /opt/seafile/seafile-backup/data && rm -rf ccnet

4.1.3. 使用 rsync 执行增量备份

rsync -az /opt/seafiel/seafile-data/seafile /opt/seafile-backup/data/
cd /opt/seafile/seafile-backup/data && rm -rf ccnet

4.2. 恢复数据

4.2.1. 恢复数据库

docker cp /opt/seafile/seafile-backup/databases/ccnet_db.sql seafile-mysql:/tmp/ccnet_db.sql
docker cp /opt/seafile/seafile-backup/databases/seafile_db.sql seafile-mysql:/tmp/seafile_db.sql
docker cp /opt/seafile/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"

4.2.2. 恢复 seafile 数据

cp -R /opt/seafile-backup/data/* /opt/seafile-data/seafile/

5. 问题排查

运行 docker exec 之类的docker命令来查找错误

docker exec -it seafile /bin/bash

6. 修改已有容器内容

docker cp /tmp/seafile-controller seafile:/tmp/
docker cp /tmp/seaf-server seafile:/tmp/
docker exec -it seafile /bin/bash
docker images
docker ps
sudo docker commit -m "seafile-pro-9.0.5 ida" -a "zyfeng" 5d1d283f12d3 seafile-pro:9.0.5ida
docker images
sudo docker save -o seafile-pro-ida9.0.5.tar seafile-pro:9.0.5ida

7. 二进制部署的备份与恢复

7.1. 备份数据库

建议每次备份生成单独文件,至少保留一周不要覆盖旧备份。

假设数据库名为  ccnet_db 、 seafile_db  和  seahub_db 。使用  mysqldump (或 MariaDB 的  mariadb-dump )备份:


mysqldump -h [mysqlhost] -u[username] -p[password] --opt ccnet_db > /backup/databases/ccnet_db.sql.`date +"%Y-%m-%d-%H-%M-%S"`
mysqldump -h [mysqlhost] -u[username] -p[password] --opt seafile_db > /backup/databases/seafile_db.sql.`date +"%Y-%m-%d-%H-%M-%S"`
mysqldump -h [mysqlhost] -u[username] -p[password] --opt seahub_db > /backup/databases/seahub_db.sql.`date +"%Y-%m-%d-%H-%M-%S"`


如果报错  mysqldump: command not found ,请使用  mariadb-dump :

mariadb-dump -h [mysqlhost] -u[username] -p[password] --opt ccnet_db > /backup/databases/ccnet_db.sql.`date +"%Y-%m-%d-%H-%M-%S"`
mariadb-dump -h [mysqlhost] -u[username] -p[password] --opt seafile_db > /backup/databases/seafile_db.sql.`date +"%Y-%m-%d-%H-%M-%S"`
mariadb-dump -h [mysqlhost] -u[username] -p[password] --opt seahub_db > /backup/databases/seahub_db.sql.`date +"%Y-%m-%d-%H-%M-%S"`

7.2. 备份 Seafile 资料库数据

数据文件存储在  /opt/seafile ,可直接复制整个目录或使用  rsync  增量备份:

直接复制:

cp -R /opt/seafile /backup/data/seafile-`date +"%Y-%m-%d-%H-%M-%S"`

这样每次都会产生一个新的备份文件夹。完成后可以删掉旧的备份。

如果你有很多数据,拷贝整个数据目录会花很多时间,这时你可以用 rsync 做增量备份。

rsync -az /opt/seafile /backup/data

这个命令将数据备份到目录  /backup/data/seafile  。

7.3. 恢复备份

7.3.1. 恢复 Seafile 资料库数据

如果你当前的 Seafile 服务器故障,需要恢复到另一台机器:

假设在新机器中,Seafile 也被部署在了 /opt/seafile 目录中,拷贝  /backup/data/seafile  到新机器中即可。

7.3.2. 恢复数据库。

由于数据库和数据是分别备份的,它们之间可能会出现一些不一致。为了纠正潜在的不一致性,在新机器上运行 seaf-fsck 工具来检查数据完整性。请参阅seaf-fsck 文档

恢复数据库可以按如下步骤来进行恢复。

mysql -u[username] -p[password] ccnet_db < ccnet_db.sql.2013-10-19-16-00-05
mysql -u[username] -p[password] seafile_db < seafile_db.sql.2013-10-19-16-00-20
mysql -u[username] -p[password] seahub_db < seahub_db.sql.2013-10-19-16-01-05

8. Docker 安装方式下的备份和恢复

8.1. 目录结构

假设 Seafile 卷路径为  /opt/seafile-data ,备份目录为  /backup 。需要备份的数据:

/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

8.2. 备份数据库

建议每次将数据库备份到一个单独的文件中。至少在一周内不要覆盖旧的数据库备份。

cd /backup/databases
docker exec -it seafile-mysql mysqldump  -u[username] -p[password] --opt ccnet_db > ccnet_db.sql
docker exec -it seafile-mysql mysqldump  -u[username] -p[password] --opt seafile_db > seafile_db.sql
docker exec -it seafile-mysql mysqldump  -u[username] -p[password] --opt seahub_db > seahub_db.sql
提示:默认的数据库镜像是 Seafile 12 版本中的 MariaDB 10.11,在容器中你可能找不到一些命令(例如  mysqldump: command not found ),因为  mysql*  系列命令已逐步被弃用。因此我们建议使用  mariadb*  系列命令。

但是,如果你仍然使用 MySQL Docker 镜像,则应该继续使用  mysqldump 

8.3. 备份 Seafile 资料库数据

直接复制整个数据目录

cp -R /opt/seafile-data/seafile /backup/data/

或者使用 rsync 执行增量备份

rsync -az /opt/seafile-data/seafile /backup/data/

8.4. 恢复数据

8.4.1. 恢复数据库

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 -u[username] -p[password] ccnet_db < /tmp/ccnet_db.sql"
docker exec -it seafile-mysql /bin/sh -c "mysql -u[username] -p[password] seafile_db < /tmp/seafile_db.sql" 
docker exec -it seafile-mysql /bin/sh -c "mysql -u[username] -p[password] seahub_db < /tmp/seahub_db.sql"

8.4.2. 恢复 seafile 数据

cp -R /backup/data/* /opt/seafile-data/seafile/


  • 无标签

0 评论

你还没有登录。你所做的任何更改会将作者标记为匿名用户。 如果你已经拥有帐户,请登录