如何基於 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
大概可以分為以下步驟:
- 在伺服器 Ubuntu 16.04 上安裝並配置好 Docker
- 基於 Docker 部署 Nginx 伺服器
- 基於 Docker 部署 Seafile Community version
- 開始使用吧~
在伺服器 Ubuntu 16.04 上安裝並配置 Docker
- 解除安裝舊版本的 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 映象加速器,避免由於某些神祕原因導致的映象下載過慢
- 進入阿里雲管理控制檯,選擇「容器映象服務-映象中心-映象加速器」
- 複製加速器地址,地址類似於: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 部署 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
快速執行 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;
}
複製程式碼
可以看到,上述配置有幾點:
- 啟用了 ssl
- http 會被重定向到 https
- 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 吧~