如何基于 Docker 在服务器上部署 Seafile Community 版本

简介: 如何基于 Docker 在服务器上部署 Seafile Community 版本软硬件环境BCC Ubuntu 16.04Seafile Community v6.3.4Docker v18.09.1什么是 Seafile安全、可靠、快速的企业云盘Seafile 是一款开源的企业云盘,注重可靠性和性能。

如何基于 Docker 在服务器上部署 Seafile Community 版本

软硬件环境

  • BCC Ubuntu 16.04
  • Seafile Community v6.3.4
  • Docker v18.09.1

什么是 Seafile

安全、可靠、快速的企业云盘
Seafile 是一款开源的企业云盘,注重可靠性和性能。支持 Windows, Mac, Linux, iOS, Android 平台。支持文件同步或者直接挂载到本地访问。

以上文案来自于官网,Seafile 官网

Seafile 有个开源的服务器部署版本,而且是支持 Docker 部署的,本着熟悉熟悉 Docker 的初衷,我踏上了折腾的不归路。

如何在服务器端部署 Seafile

大概可以分为以下步骤:

  1. 在服务器 Ubuntu 16.04 上安装并配置好 Docker
  2. 基于 Docker 部署 Nginx 服务器
  3. 基于 Docker 部署 Seafile Community version
  4. 开始使用吧~

在服务器 Ubuntu 16.04 上安装并配置 Docker

官方文档:Get Docker CE for Ubuntu

  • 卸载旧版本的 Docker,如果没有安装过,可忽略
sudo apt-get remove docker docker-engine docker.io containerd runc
  • 安装必备套件
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  • 添加 Docker GPG Key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
  • 添加 Docker 的 repository
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
  • 开始安装 Docker CE
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
  • 检查 Docker CE 是否安装成功。如果运行成功,说明安装无误
sudo docker run hello-world
  • (可选)免 sudo 使用 Docker
  • (可选)配置阿里云的 Docker 镜像加速
  • (可选)使用 Docker 中国官方镜像加速

如何免 sudo 使用 Docker

sudo groupadd docker    # 新增 docker group
sudo gpasswd -a $USER docker        # 将 docker 添加到 docker group 中
sudo service docker restart         # 重启 docker 服务
newgrp - docker                 # 切换当前会话到新的 group

使用阿里云的 Docker 镜像加速器

使用阿里云的 Docker 镜像加速器,避免由于某些神秘原因导致的镜像下载过慢

  • 进入阿里云管理控制台,选择「容器镜像服务-镜像中心-镜像加速器」
  • 复制加速器地址,地址类似于:https://Xxxxx.mirror.aliyuncs.com
  • 配置镜像加速器。针对Docker客户端版本大于 1.10.0 的用户,可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://frsj7mun.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

使用 Docker 中国官方镜像加速

通过 Docker 官方镜像加速,中国区用户能够快速访问最流行的 Docker 镜像。

Docker 中国官方镜像加速

基于 Docker 部署 Nginx 服务器

服务器的端口号是有限的,而且默认都是使用 80 端口或 443 端口,使用 Docker 通过 Nginx 实现反向代理,配置多域名及多端口号。

将一级或者二级域名绑定在服务器 IP 上,

下载 Nginx 镜像

docker pull nginx

创建并启动 Nginx 容器

docker run –-name=nginx -p 80:80 -p 443:443 -v /nginx/conf.d:/etc/nginx/conf.d -d nginx

上述命令会创建一个名为 nginx 的容器,端口映射为 80-80、443-443,文件夹映射为本机 /nginx/conf.d/ 映射到镜像的 /etc/nginx/conf.d 文件夹,-d 表示在后台运行容器

配置 Nginx 的反向代理

  • 将域名(假定为 wangyongf.com)解析到服务器的 IP 上
  • 基于上述命令创建的容器,将虚拟目录映射到了容器内 Nginx 的配置文件目录,因此可以在服务器的 /nginx/conf.d 目录下创建容器的 Nginx 配置文件
cd /nginx/conf.d
sudo vim seafile.wangyongf.com.conf
  • 写入配置,内容如下:
server {
    listen       80;
    server_name wangyongf.com;      # 要解析进来域名
    location / {
       proxy_pass http://SERVER_LOCAL_IP:8001;  # 服务器本地ip:Seafile容器对外的端口号
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

服务器本地IP可以在云服务管理控制台看到,也可以在命令行直接查看。

请求的转发流程:

请求转发流程

基于 Docker 部署 Seafile Community version

官方文档:用 Docker 部署 Seafile 服务

快速运行 Seafile 服务容器

docker run -d --name seafile \
  -e SEAFILE_SERVER_HOSTNAME=seafile.wangyongf.com \
  -v /opt/seafile-data:/shared \
  -p 8001:80 \
  seafileltd/seafile:latest

自定义管理员用户名和密码

docker run -d --name seafile \
  -e SEAFILE_SERVER_HOSTNAME=seafile.wangyongf.com \
  -e SEAFILE_ADMIN_EMAIL=me@wangyongf.com \
  -e SEAFILE_ADMIN_PASSWORD=a_very_secret_password \
  -v /opt/seafile-data:/shared \
  -p 8001:80 \
  seafileltd/seafile:latest

启用 Seafile Docker 版本基于 Let's encrypt 的 SSL

docker run -d --name seafile \
  -e SEAFILE_SERVER_LETSENCRYPT=true \
  -e SEAFILE_SERVER_HOSTNAME=seafile.wangyongf.com \
  -e SEAFILE_ADMIN_EMAIL=me@wangyongf.com \
  -e SEAFILE_ADMIN_PASSWORD=a_very_secret_password \
  -v /opt/seafile-data:/shared \
  -p 8001:80 \
  -p 8002:443 \
  seafileltd/seafile:latest

修改 Seafile 服务的配置

Seafile 服务的配置会存放在 /shared/seafile/conf 目录下,你可以根据 Seafile 手册修改配置。

修改之后需要重启容器:

docker restart seafile

You're all set!

到了这里,应该配置 OK 了。我在文章里也提到了很多的官方文档,如果遇到了问题,可以查阅官方文档,或者借助 Google/Baidu

建议开启 Seafile 的 https 配置,如果只是安装玩玩,那么无所谓,如果是真的自己使用,最好启用 https,否则你的文件不太安全呀呀呀呀。

Docker Nginx 启用 Seafile 服务的 https

本文中讨论的都是基于 Docker 部署的 Nginx 服务,和服务器上直接安装可能会有些区别。

上文中也说了,Seafile 的 Docker 官方镜像可配置启用 https,但实际上,也可以在 Nginx 层就启用 https,然后反向代理的时候使用 http 亦可,我在实践的时候就是采用的这种方式。

Nginx Docker 层启用 seafile.wangyongf.com 的操作步骤如下(我的操作步骤):

  • 在服务器使用 apt 安装 Nginx 并配置 seafile.wangyongf.com 域名,使用 certbot 自动配置 lets-encrypt 证书
  • 将上述 certbot 自动生成 Nginx 配置移植到 /nginx/conf.d/seafile.wangyongf.com.conf 中,此时配置文件大概长这样:
server {
    listen 443 ssl;
    listen [::]:443 ssl ipv6only=on;
    server_name seafile.wangyongf.com;
    root /var/www/html;

    # ssl configurations
    ssl_certificate /ssl/live/seafile.wangyongf.com/fullchain.pem;
    ssl_certificate_key /ssl/live/seafile.wangyongf.com/privkey.pem;
    include /ssl/options-ssl-nginx.conf;
    ssl_dhparam /ssl/ssl-dhparams.pem;

    location / {
        proxy_pass http://SERVER_LOCAL_IP:8001;
    }
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}
server {
    if ($host = seafile.wangyongf.com) {
        return 301 https://$host$request_uri;
    }

    listen 80;
    listen [::]:80;

    server_name seafile.wangyongf.com;
    return 404;
}

可以看到,上述配置有几点:

  1. 启用了 ssl
  2. http 会被重定向到 https
  3. ssl 证书配置的是 /ssl/ 目录

为什么证书是 /ssl/ 目录呢,其实这个目录是我自定义的,你也可以随便叫什么别的目录,上文中我们提到,这个配置是在 /nginx/conf.d/ 下,是 Docker Nginx 的配置文件,容器内是访问不到宿主文件的,只能通过文件映射,因此必须将宿主上的ssl证书映射到容器中,对的,上述 /ssl/ 就是映射的虚拟目录,其对应的是宿主上的 /etc/letsencrypt 目录。

因此,如果要使用上述的 Nginx 配置,Docker Nginx 容器需要新增一个 /etc/letsencrypt/ssl 的目录映射,但是貌似 Docker 容器在创建完成之后无法再修改映射目录?(如果可以,欢迎留言告诉我~),我就基于现有的容器重新建了个容器,使用如下命令:

docker stop nginx
docker commit nginx seafile-nginx
docker run –-name=nginx -p 80:80 -p 443:443 -v /nginx/conf.d:/etc/nginx/conf.d -v /etc/letsencrypt:/ssl -d nginx

如何检查 Nginx 配置文件是否正确

sudo nginx -t (-c /etc/nginx/conf.d/default.conf)

PS

之后,也可以使用类似的方式使用 Nginx 的反向代理部署其他的 Docker 服务

开始使用吧~

到了这里,应该没什么问题了,Seafile 应该已经是 https 可访问状态了,这个时候,你可以下载个移动客户端,按照官方教程配置好,然后就开始愉快地使用 Seafile 吧~

参考资料

  1. 玩转 docker 入门(4) docker 通过nginx实现反向代理 配置多域名以及多端口号
  2. Docker容器进入的4种方式
  3. Docker 命令大全
  4. 用 Docker 部署 Seafile 服务
  5. Docker更改容器端口映射
  6. Install Let's Encrypt to Create SSL Certificates
  7. Automatically enable HTTPS on your website with EFF's Certbot, deploying Let's Encrypt certificates.
相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
1天前
|
Ubuntu Linux 测试技术
Linux(32)Rockchip RK3568 Ubuntu22.04上部署 Docker: 详细配置与功能测试(下)
Linux(32)Rockchip RK3568 Ubuntu22.04上部署 Docker: 详细配置与功能测试
19 1
|
4天前
|
存储 测试技术 文件存储
【Docker项目实战】使用Docker部署Sun-Panel导航面板
【4月更文挑战第19天】使用Docker部署Sun-Panel导航面板
54 7
|
6天前
|
Java 应用服务中间件 Linux
在阿里云服务器上部署Tomcat详细图文详解
本文介绍了在阿里云服务器上安装和配置JDK和Tomcat的步骤。首先,需要注册阿里云账号并进行实名认证,然后购买并设置服务器。接着,通过File Zilla连接服务器,创建Java和Tomcat的安装目录,并将JDK和Tomcat的tar.gz文件上传到服务器,解压并重命名。之后,配置JDK的环境变量,将catalina.sh复制到/etc/init.d/目录下,并修改相关配置。最后,启动Tomcat并配置安全组规则,确保可以通过公网访问。
|
6天前
|
弹性计算 Java Linux
阿里云服务器搭建部署宝塔详细流程
该内容是一个阿里云服务器和域名的配置指南。首先,需注册阿里云账号并进行企业实名认证。接着,选购服务器如2核2G1兆的Linux系统,并购买域名。完成域名备案后,进行域名解析和ICP备案。然后,通过远程连接登录服务器,重置密码,安装宝塔面板。在安全组中开启宝塔面板随机生成的端口。最后,登录宝塔面板安装LNMP环境,配置数据库如MySQL和Redis,部署JDK、Tomcat,上传前端和后端项目以实现上线。
|
7天前
|
弹性计算 JavaScript Java
阿里云服务器搭建部署宝塔详细流程
以下是内容的摘要: 本文主要介绍了在阿里云上创建和配置服务器环境的步骤,包括注册阿里云账号、实名认证、购买和设置服务器、域名的获取与备案、以及使用宝塔面板安装和配置环境。首先,用户需要注册阿里云账号并进行实名认证,选择合适的服务器配置。接着,购买服务器后,要准备并备案域名,以便通过友好的网址访问网站。在服务器上安装宝塔面板,可以方便地管理和配置LAMP/LNMP/Tomcat/Node.js等应用环境。完成这些步骤后,用户还需要在宝塔面板中安装MySQL、Redis等数据库,部署Java或Vue项目,并配置相关端口。最后,将前端项目打包上传至服务器,并设置站点,即可实现网站的上线。
|
7天前
|
应用服务中间件 Linux 开发工具
如何在阿里云服务器快速搭建部署Nginx环境
以下是内容的摘要: 本文档主要介绍了在阿里云上购买和配置服务器的步骤,包括注册阿里云账号、实名认证、选择和购买云服务器、配置安全组、使用Xshell和Xftp进行远程连接和文件传输,以及安装和配置Nginx服务器的过程。在完成这些步骤后,你将能够在服务器上部署和运行自己的网站或应用。
|
7天前
|
测试技术 Linux 网络安全
【好玩的开源项目】使用Docker部署SyncTV视频同步和共享平台
【4月更文挑战第16天】使用Docker部署SyncTV视频同步和共享平台
44 1
|
9天前
|
NoSQL 关系型数据库 MySQL
阿里云服务器部署项目流程
本文主要讲解阿里云服务器的部署,如何选择配置等
|
11天前
|
测试技术 Linux 数据安全/隐私保护
【Docker项目实战】使用Docker部署Seatsurfing预订座位系统
【4月更文挑战第12天】使用Docker部署Seatsurfing预订座位系统
36 3
|
12天前
|
Java 应用服务中间件 Linux
阿里云服务器部署多个tomcat
阿里云服务器部署多个tomcat