怎樣用 Docker 部署 Seafile 服務(wù)器來托管你自己的文件同步和共享解決方案

首先,什么是 Seafile ?
Seafile 是一個(gè)自托管文件同步程序,采用客戶端/服務(wù)器模式,即你有筆記本、手機(jī)等多個(gè)設(shè)備,能夠連接到一個(gè)中心服務(wù)器。
不像類似 Nextcloud 或 ownCloud 這些更流行的替代品一樣,Seafile 試圖遵循 “只做一件事,但是要做好” 的理念。同樣,Seafile 沒有內(nèi)置額外的類似聯(lián)系人或者日歷聚合的功能。
相反,Seafile 只專注于文件同步、共享及與之相關(guān)的事情,僅此而已。但正因?yàn)槿绱?,它最終做的非常好。
使用 Docker 和 NGINX 部署 Seafile 服務(wù)器
高級(jí)教程
我們的許多教程都是針對初學(xué)者的。這篇?jiǎng)t不然,它是為那些經(jīng)常鼓搗 DIY 項(xiàng)目和喜歡自托管的高級(jí)用戶設(shè)計(jì)的。這個(gè)教程假定你可以熟練的使用命令行,而且你至少對我們將要使用的程序有一定的了解。
雖然整個(gè)過程完全可以不使用 NGINX ,但是使用 NGINX 更加容易配置,而且在將來更加容易的自托管更多的服務(wù)。
如果你想完全使用 Docker 環(huán)境,你也可以 ??在 Docker 內(nèi)部設(shè)置 NGINX?? ,但是它這會(huì)使事情變得更加復(fù)雜,并且不能夠帶來太多好處。同樣,在本教程里也不會(huì)涉及這些。
安裝設(shè)置 NGINX
在這個(gè)教程中,我會(huì)使用 Ubuntu,因此會(huì)使用 ??apt??? 來安裝軟件包。如果你使用 Fedora 或者一些其他非 Debian 發(fā)行版,請使用你的發(fā)行版的 包管理器。
NGINX 既是一個(gè)網(wǎng)頁瀏覽器,又是一個(gè)代理服務(wù)器。它將起到 Seafile 服務(wù)器和互聯(lián)網(wǎng)之間網(wǎng)絡(luò)連接的作用,同時(shí)也使一些任務(wù)更容易處理。
要安裝 NGINX ,使用以下命令:
sudo apt install nginx如果你想使用 HTTPS(也就是瀏覽器中的小掛鎖),你需要安裝 ??Certbot??:
sudo apt install certbot python3-certbot-nginx下一步,你需要設(shè)置 NGINX 來連接我們之后將要設(shè)置的 Seafile 實(shí)例。
首先,運(yùn)行以下命令:
sudo nano /etc/nginx/sites-available/seafile.conf鍵入下方的文本到文件中:
server {
  server_name localhost;
  location / {
    proxy_pass http://localhost:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr; 
    }
}
重要: 將 ??server_name??? 一行的 ??localhost??? 替換為你要訪問你的服務(wù)器的地址(比如 ??seafile.example.com??? 或者 ??192.168.0.0??)。不確定要輸入什么嗎?
- 如果你只是為了測試,使用 ?
?localhost?? 。這個(gè)設(shè)置將 只允許你從你的電腦訪問服務(wù)器 ,僅此而已。 - 如果你想通過你的本地 Wi-Fi 連接使用 Seafile(與你在同一 Wi-Fi 網(wǎng)絡(luò)上),你應(yīng)該鍵入 ??你的計(jì)算機(jī) IP 地址???。你也可以考慮 ??設(shè)置一個(gè)靜態(tài) IP 地址??,盡管這不是必須的。
 - 如果你有一個(gè)公網(wǎng) IP 地址,你知道它指向你的系統(tǒng),就使用它。
 - 如果你有一個(gè)域名(比如 ?
?example.com???、??example.org??)和公網(wǎng) IP 地址,更改你的 DNS 設(shè)置,將域名指向你的系統(tǒng)的 IP 地址。這也需要將公網(wǎng) IP 指向你的系統(tǒng)。 
現(xiàn)在你需要復(fù)制配置文件到 NGINX 的查找目錄中,然后重啟 NGINX :
sudo ln -s /etc/nginx/sites-available/seafile.conf /etc/nginx/sites-enabled/seafile.conf
sudo systemctl restart nginx
如果你要安裝 Cerbot,你也需要運(yùn)行以下命令來設(shè)置 HTTPS :
sudo certbot如果要重定向 HTTP 流量 到 HTTPS ,選擇 ??2?? 。
現(xiàn)在可以來確認(rèn)我們目前設(shè)置的一切都是否正常工作。如果你訪問你的站點(diǎn),你應(yīng)該看到一個(gè)屏幕上寫著 ??502 Bad Gateway?? 字樣。

安裝 Docker 和 Docker Compose
現(xiàn)在要進(jìn)入有趣的部分了!
首先,你需要安裝 Docker? 和 Docker Compose? 。Docker Compose 需要利用 ??docker-compose.yml??? 文件,這將使管理多個(gè) Docker 容器 的 Seafile 需求變得更加容易。
Docker 和 Docker Compose 可以用以下的命令來安裝:
sudo apt install docker.io docker-compose
檢查 Docker 是否安裝并運(yùn)行,運(yùn)行以下命令:
sudo docker run --rm hello-world
如果你完全安裝成功,你應(yīng)該在終端能看到這幾行文字:

如果你想避免在 ??docker??? 命令的開始添加 ??sudo??? 的話,你可以運(yùn)行以下的命令將你自己添加到 ??docker?? 組:
sudo groupadd docker
sudo usermod -aG docker $USER
這個(gè)教程的其余部分假定你已經(jīng)運(yùn)行了以上兩個(gè)命令。如果你沒有運(yùn)行,在所有 ??docker??? 或 ??docker-compose??? 的命令都添加 ??sudo?? 。
安裝 Seafile 服務(wù)器
這部分比之前部分明顯容易的多。你所需要做的是輸入一些文本到文件,然后運(yùn)行一些命令。
打開一個(gè)終端,然后創(chuàng)建一個(gè) Seafile 服務(wù)器用來儲(chǔ)存內(nèi)容的目錄,并進(jìn)入目錄中:
mkdir ~/seafile-server && cd ~/seafile-server

轉(zhuǎn)到你創(chuàng)建的目錄然后運(yùn)行以下命令:
nano docker-compose.yml
下一步,在彈出的窗口中鍵入以下文本內(nèi)容:
version: '2.0'
services:
db:
image: mariadb
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_LOG_CONSOLE=true
volumes:
- ./data/mariadb:/var/lib/mysql
networks:
- seafile-net
memcached:
image: memcached
container_name: seafile-memcached
entrypoint: memcached -m 256
networks:
- seafile-net
seafile:
image: seafileltd/seafile-mc
container_name: seafile
ports:
- "8080:80"
volumes:
- ./data/app:/shared
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=password
- TIME_ZONE=Etc/UTC
- SEAFILE_ADMIN_EMAIL=me@example.com
- SEAFILE_ADMIN_PASSWORD=password
- SEAFILE_SERVER_LETSENCRYPT=false
- SEAFILE_SERVER_HOSTNAME=docs.seafile.com
depends_on:
- db
- memcached
networks:
- seafile-net
networks:
seafile-net:
在保存文件之前,一些參數(shù)需要更改:
- ?
?MYSQL_ROOT_PASSWORD???:更換強(qiáng)壯的密碼,你不必記住它,所以不要嘗試挑選簡單的密碼。如果你需要幫助生成一個(gè),請使用 ??密碼生成器??? 。我建議使用 20 位字符長度并且避免使用任何的特殊字符(??!@#$%^&*?? 等符號(hào))。 - ?
?DB_ROOT_PASSWD???:更改你為 ??MYSQL_ROOT_PASSWORD?? 設(shè)置的值 。 - ?
?SEAFILE_ADMIN_EMAIL??:設(shè)置管理員帳戶的電子郵件地址。 - ?
?SEAFILE_ADMIN_PASSWORD???:設(shè)置管理員帳戶密碼。避免與??MYSQL_ROOT_PASSWORD??? 或者 ??DB_ROOT_PASSWD?? 密碼相同。 - ?
?SEAFILE_SERVER_HOSTNAME??:在 NGINX 配置中設(shè)置 Seafile 的服務(wù)器主機(jī)名。 
完成之后,你可以運(yùn)行 ??docker-compose?? 整個(gè)運(yùn)行起來:
docker-compose up -d
可能需要花一到兩分鐘,取決于你的網(wǎng)速,因?yàn)樾枰聨讉€(gè) Seafile 需要運(yùn)行的幾個(gè)容器。
完成以后,還需要幾分鐘來完成。你也可以通過以下命令來檢查運(yùn)行狀態(tài):
docker logs seafile
當(dāng)完成了,你將會(huì)看到如下輸出:

下一步,你只需要在你的瀏覽器里鍵入你設(shè)置的 ??SEAFILE_SERVER_HOSTNAME?? 的地址,然后你應(yīng)該看到登錄屏幕的頁面。

就這樣!現(xiàn)在一切功能齊全,準(zhǔn)備用客戶端來使用。
安裝 Seafile 客戶端
Seafile 移動(dòng)客戶端在 ??Google Play???、??F-Droid??? 和 ??蘋果商店??? 都是可用的。Seafile 也有 Linux、Windows 和 Mac 桌面客戶端可用,可在 ??此處?? 找到。
通過 ??seafile-gui?? 軟件包,可以在 Ubuntu 系統(tǒng)輕松獲得 Seafile :
sudo apt install seafile-gui
通過 ??seafile-client?? 軟件包 Seafile 也包含在 Arch 用戶的 AUR 包管理器中。
結(jié)語
請盡情探索客戶端及其所能提供的一切。我將在未來的一篇文章中詳細(xì)闡述 Seafile 客戶端的所有功能。(敬請期待 ??)
總的來說,如果有什么錯(cuò)誤,或者你有什么問題,請?jiān)谙路皆u論 – 我會(huì)盡我所能回應(yīng)。















 
 
 
 
 
 
 