如何基於 Docker 在服務器上部署 Seafile Community 版本

如何基於 Docker 在服務器上部署 Seafile Community 版本

軟硬件環境

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

什麼是 Seafile

安全、可靠、快速的企業雲盤 Seafile 是一款開源的企業雲盤,注重可靠性和性能。支持 Windows, Mac, Linux, iOS, Android 平臺。支持文件同步或者直接掛載到本地訪問。html

以上文案來自於官網,Seafile 官網node

Seafile 有個開源的服務器部署版本,並且是支持 Docker 部署的,本着熟悉熟悉 Docker 的初衷,我踏上了折騰的不歸路。linux

如何在服務器端部署 Seafile

大概能夠分爲如下步驟:nginx

  1. 在服務器 Ubuntu 16.04 上安裝並配置好 Docker
  2. 基於 Docker 部署 Nginx 服務器
  3. 基於 Docker 部署 Seafile Community version
  4. 開始使用吧~

在服務器 Ubuntu 16.04 上安裝並配置 Docker

官方文檔:Get Docker CE for Ubuntuweb

  • 卸載舊版本的 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 鏡像加速器,避免因爲某些神祕緣由致使的鏡像下載過慢docker

  • 進入阿里雲管理控制檯,選擇「容器鏡像服務-鏡像中心-鏡像加速器」
  • 複製加速器地址,地址相似於: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 鏡像。shell

Docker 中國官方鏡像加速json

基於 Docker 部署 Nginx 服務器

服務器的端口號是有限的,並且默認都是使用 80 端口或 443 端口,使用 Docker 經過 Nginx 實現反向代理,配置多域名及多端口號。ubuntu

將一級或者二級域名綁定在服務器 IP 上,vim

下載 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.
相關文章
相關標籤/搜索