安全、可靠、快速的企業雲盤 Seafile 是一款開源的企業雲盤,注重可靠性和性能。支持 Windows, Mac, Linux, iOS, Android 平臺。支持文件同步或者直接掛載到本地訪問。html
以上文案來自於官網,Seafile 官網node
Seafile 有個開源的服務器部署版本,並且是支持 Docker 部署的,本着熟悉熟悉 Docker 的初衷,我踏上了折騰的不歸路。linux
大概能夠分爲如下步驟:nginx
官方文檔:Get Docker CE for Ubuntuweb
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
複製代碼
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
複製代碼
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
複製代碼
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
複製代碼
sudo docker run hello-world
複製代碼
sudo groupadd docker # 新增 docker group
sudo gpasswd -a $USER docker # 將 docker 添加到 docker group 中
sudo service docker restart # 重啓 docker 服務
newgrp - docker # 切換當前會話到新的 group
複製代碼
使用阿里雲的 Docker 鏡像加速器,避免因爲某些神祕緣由致使的鏡像下載過慢docker
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 鏡像。shell
Docker 中國官方鏡像加速json
服務器的端口號是有限的,並且默認都是使用 80 端口或 443 端口,使用 Docker 經過 Nginx 實現反向代理,配置多域名及多端口號。ubuntu
將一級或者二級域名綁定在服務器 IP 上,vim
docker pull 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/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 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
複製代碼
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 服務的配置會存放在 /shared/seafile/conf
目錄下,你能夠根據 Seafile 手冊修改配置。
修改以後須要重啓容器:
docker restart seafile
複製代碼
到了這裏,應該配置 OK 了。我在文章裏也提到了不少的官方文檔,若是遇到了問題,能夠查閱官方文檔,或者藉助 Google/Baidu
建議開啓 Seafile 的 https 配置,若是隻是安裝玩玩,那麼無所謂,若是是真的本身使用,最好啓用 https,不然你的文件不太安全呀呀呀呀。
本文中討論的都是基於 Docker 部署的 Nginx 服務,和服務器上直接安裝可能會有些區別。
上文中也說了,Seafile 的 Docker 官方鏡像可配置啓用 https,但實際上,也能夠在 Nginx 層就啓用 https,而後反向代理的時候使用 http 亦可,我在實踐的時候就是採用的這種方式。
Nginx Docker 層啓用 seafile.wangyongf.com 的操做步驟以下(個人操做步驟):
/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/
目錄呢,其實這個目錄是我自定義的,你也能夠隨便叫什麼別的目錄,上文中咱們提到,這個配置是在 /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
複製代碼
sudo nginx -t (-c /etc/nginx/conf.d/default.conf)
複製代碼
以後,也可使用相似的方式使用 Nginx 的反向代理部署其餘的 Docker 服務
到了這裏,應該沒什麼問題了,Seafile 應該已是 https 可訪問狀態了,這個時候,你能夠下載個移動客戶端,按照官方教程配置好,而後就開始愉快地使用 Seafile 吧~