怎樣用 Docker 部署 Seafile 服務器來托管你自己的文件同步和共享解決方案
首先,什么是 Seafile ?
Seafile 是一個自托管文件同步程序,采用客戶端/服務器模式,即你有筆記本、手機等多個設備,能夠連接到一個中心服務器。
不像類似 Nextcloud 或 ownCloud 這些更流行的替代品一樣,Seafile 試圖遵循 “只做一件事,但是要做好” 的理念。同樣,Seafile 沒有內置額外的類似聯系人或者日歷聚合的功能。
相反,Seafile 只專注于文件同步、共享及與之相關的事情,僅此而已。但正因為如此,它最終做的非常好。
使用 Docker 和 NGINX 部署 Seafile 服務器
高級教程
我們的許多教程都是針對初學者的。這篇則不然,它是為那些經常鼓搗 DIY 項目和喜歡自托管的高級用戶設計的。這個教程假定你可以熟練的使用命令行,而且你至少對我們將要使用的程序有一定的了解。
雖然整個過程完全可以不使用 NGINX ,但是使用 NGINX 更加容易配置,而且在將來更加容易的自托管更多的服務。
如果你想完全使用 Docker 環境,你也可以 ??在 Docker 內部設置 NGINX?? ,但是它這會使事情變得更加復雜,并且不能夠帶來太多好處。同樣,在本教程里也不會涉及這些。
安裝設置 NGINX
在這個教程中,我會使用 Ubuntu,因此會使用 ??apt?
?? 來安裝軟件包。如果你使用 Fedora 或者一些其他非 Debian 發行版,請使用你的發行版的 包管理器。
NGINX 既是一個網頁瀏覽器,又是一個代理服務器。它將起到 Seafile 服務器和互聯網之間網絡連接的作用,同時也使一些任務更容易處理。
要安裝 NGINX ,使用以下命令:
sudo apt install nginx
如果你想使用 HTTPS(也就是瀏覽器中的小掛鎖),你需要安裝 ??Certbot??:
sudo apt install certbot python3-certbot-nginx
下一步,你需要設置 NGINX 來連接我們之后將要設置的 Seafile 實例。
首先,運行以下命令:
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?
?? 替換為你要訪問你的服務器的地址(比如 ??seafile.example.com?
?? 或者 ??192.168.0.0?
?)。不確定要輸入什么嗎?
- 如果你只是為了測試,使用 ?
?localhost?
? 。這個設置將 只允許你從你的電腦訪問服務器 ,僅此而已。 - 如果你想通過你的本地 Wi-Fi 連接使用 Seafile(與你在同一 Wi-Fi 網絡上),你應該鍵入 ??你的計算機 IP 地址???。你也可以考慮 ??設置一個靜態 IP 地址??,盡管這不是必須的。
- 如果你有一個公網 IP 地址,你知道它指向你的系統,就使用它。
- 如果你有一個域名(比如 ?
?example.com?
??、??example.org?
?)和公網 IP 地址,更改你的 DNS 設置,將域名指向你的系統的 IP 地址。這也需要將公網 IP 指向你的系統。
現在你需要復制配置文件到 NGINX 的查找目錄中,然后重啟 NGINX :
sudo ln -s /etc/nginx/sites-available/seafile.conf /etc/nginx/sites-enabled/seafile.conf
sudo systemctl restart nginx
如果你要安裝 Cerbot,你也需要運行以下命令來設置 HTTPS :
sudo certbot
如果要重定向 HTTP 流量 到 HTTPS ,選擇 ??2?
? 。
現在可以來確認我們目前設置的一切都是否正常工作。如果你訪問你的站點,你應該看到一個屏幕上寫著 ??502 Bad Gateway?
? 字樣。
安裝 Docker 和 Docker Compose
現在要進入有趣的部分了!
首先,你需要安裝 Docker? 和 Docker Compose? 。Docker Compose 需要利用 ??docker-compose.yml?
?? 文件,這將使管理多個 Docker 容器 的 Seafile 需求變得更加容易。
Docker 和 Docker Compose 可以用以下的命令來安裝:
sudo apt install docker.io docker-compose
檢查 Docker 是否安裝并運行,運行以下命令:
sudo docker run --rm hello-world
如果你完全安裝成功,你應該在終端能看到這幾行文字:
如果你想避免在 ??docker?
?? 命令的開始添加 ??sudo?
?? 的話,你可以運行以下的命令將你自己添加到 ??docker?
? 組:
sudo groupadd docker
sudo usermod -aG docker $USER
這個教程的其余部分假定你已經運行了以上兩個命令。如果你沒有運行,在所有 ??docker?
?? 或 ??docker-compose?
?? 的命令都添加 ??sudo?
? 。
安裝 Seafile 服務器
這部分比之前部分明顯容易的多。你所需要做的是輸入一些文本到文件,然后運行一些命令。
打開一個終端,然后創建一個 Seafile 服務器用來儲存內容的目錄,并進入目錄中:
mkdir ~/seafile-server && cd ~/seafile-server
轉到你創建的目錄然后運行以下命令:
nano docker-compose.yml
下一步,在彈出的窗口中鍵入以下文本內容:
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:
在保存文件之前,一些參數需要更改:
- ?
?MYSQL_ROOT_PASSWORD?
??:更換強壯的密碼,你不必記住它,所以不要嘗試挑選簡單的密碼。如果你需要幫助生成一個,請使用 ??密碼生成器??? 。我建議使用 20 位字符長度并且避免使用任何的特殊字符(??!@#$%^&*?
? 等符號)。 - ?
?DB_ROOT_PASSWD?
??:更改你為 ??MYSQL_ROOT_PASSWORD?
? 設置的值 。 - ?
?SEAFILE_ADMIN_EMAIL?
?:設置管理員帳戶的電子郵件地址。 - ?
?SEAFILE_ADMIN_PASSWORD?
??:設置管理員帳戶密碼。避免與??MYSQL_ROOT_PASSWORD?
?? 或者 ??DB_ROOT_PASSWD?
? 密碼相同。 - ?
?SEAFILE_SERVER_HOSTNAME?
?:在 NGINX 配置中設置 Seafile 的服務器主機名。
完成之后,你可以運行 ??docker-compose?
? 整個運行起來:
docker-compose up -d
可能需要花一到兩分鐘,取決于你的網速,因為需要拉下幾個 Seafile 需要運行的幾個容器。
完成以后,還需要幾分鐘來完成。你也可以通過以下命令來檢查運行狀態:
docker logs seafile
當完成了,你將會看到如下輸出:
下一步,你只需要在你的瀏覽器里鍵入你設置的 ??SEAFILE_SERVER_HOSTNAME?
? 的地址,然后你應該看到登錄屏幕的頁面。
就這樣!現在一切功能齊全,準備用客戶端來使用。
安裝 Seafile 客戶端
Seafile 移動客戶端在 ??Google Play???、??F-Droid??? 和 ??蘋果商店??? 都是可用的。Seafile 也有 Linux、Windows 和 Mac 桌面客戶端可用,可在 ??此處?? 找到。
通過 ??seafile-gui?
? 軟件包,可以在 Ubuntu 系統輕松獲得 Seafile :
sudo apt install seafile-gui
通過 ??seafile-client?
? 軟件包 Seafile 也包含在 Arch 用戶的 AUR 包管理器中。
結語
請盡情探索客戶端及其所能提供的一切。我將在未來的一篇文章中詳細闡述 Seafile 客戶端的所有功能。(敬請期待 ??)
總的來說,如果有什么錯誤,或者你有什么問題,請在下方評論 – 我會盡我所能回應。