在高效管理日常任務和項目的過程中,開源待辦事項工具 Vikunja 以其簡潔、直觀的設計和多視圖支持受到越來越多用戶的青睞。本文將詳細介紹如何使用 Docker Compose 快速部署 Vikunja,并通過 Nginx 反向代理實現 HTTPS 訪問,從而確保服務安全穩定。
不是很推薦,如果純用IP訪問是沒有任何問題的
如果使用域名,會有一堆問題要解決,如果真的喜歡,可以去github上提issue
1. 項目概述
Vikunja 是一款開源待辦事項管理工具,支持任務列表、看板、甘特圖等多種視圖。你可以將它部署在自有服務器上,實現對任務數據的完全掌控。通過 Docker 部署不僅簡化了安裝過程,還能快速實現服務擴展和維護。
為了更安全地對外提供服務,我們將使用 Nginx 反向代理,將外部 HTTPS 流量轉發至內部運行的 Vikunja 服務。
2. Docker Compose 部署配置
以下是一個示例 Docker Compose 文件,用于啟動 Vikunja 服務:
version: '3.8'services:vikunja:image: vikunja/vikunjacontainer_name: vikunjaports:- 3456:3456volumes:- ./vikunja/files:/app/vikunja/files- ./vikunja/config:/app/vikunja/config- ./path/to/config.yml:/etc/vikunja/config.ymlenvironment:VIKUNJA_SERVICE_PUBLICURL: https://你的域名.comVIKUNJA_SERVICE_FRONTENDURL: https://你的域名.comVIKUNJA_SERVICE_JWTSECRET: 隨機一個安全碼VIKUNJA_DATABASE_TYPE: mysqlVIKUNJA_DATABASE_HOST: 數據庫地址VIKUNJA_DATABASE_PORT: 3306VIKUNJA_DATABASE_USER: rootVIKUNJA_DATABASE_PASSWORD: 123456VIKUNJA_DATABASE_DATABASE: vikunjaTZ: Asia/Shanghairestart: unless-stoppednetworks:- vikunja_networknetworks:vikunja_network:driver: bridge
配置說明
-
服務定義:
使用官方vikunja/vikunja
鏡像啟動容器,并通過掛載數據卷保證數據持久化。 -
端口映射:
將容器的 3456 端口映射到宿主機,使得 Nginx 反向代理可以將外部請求轉發到該端口。 -
環境變量:
配置對外訪問的 URL(PUBLICURL 與 FRONTENDURL)、JWT 密鑰以及數據庫連接信息。根據實際情況,請務必替換為你自己的域名、數據庫地址、密碼等信息。 -
網絡設置:
創建了一個名為vikunja_network
的自定義橋接網絡,方便容器間通信。
3. Nginx 反向代理配置
為了實現 HTTPS 訪問,我們使用 Nginx 反向代理,將外部流量轉發到運行在內部的 Vikunja 服務。以下是 Nginx 的配置示例:
upstream task {server 127.0.0.1:3456; # 后端 Vikunja 服務監聽端口keepalive 256;
}server {listen 443 ssl;listen [::]:443 ssl http2;server_name 你的域名.com;ssl_certificate /etc/nginx/ssl/你的域名.com_bundle.pem;ssl_certificate_key /etc/nginx/ssl/你的域名.com.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;ssl_prefer_server_ciphers on;add_header Strict-Transport-Security "max-age=31536000";access_log off;location / {proxy_pass http://task;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;client_max_body_size 20M;}location /api {proxy_pass http://task/api;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;client_max_body_size 20M;}
}server {listen 80;server_name 你的域名.com;return 301 https://$host$request_uri;
}
配置說明
-
upstream 定義:
將后端 Vikunja 服務定義為task
,并指定地址為127.0.0.1:3456
。注意:如果你的 Vikunja 容器在不同主機或網絡中,請調整為相應的 IP 地址或使用 Docker 網絡名稱。 -
HTTPS 服務器塊:
配置 SSL 證書、協議和密碼套件,確保連接安全。server_name
需設置為你實際使用的域名(例如你的域名.com
)。
在/
和/api
路徑下,均通過proxy_pass
將請求轉發到后端服務,并設置了必要的請求頭,保證 WebSocket 升級、真實 IP 轉發等功能正常。 -
HTTP 重定向:
將所有 HTTP 請求重定向到 HTTPS,確保用戶總是通過安全通道訪問。
4. 部署步驟
步驟 1:環境準備
-
安裝 Docker 與 Docker Compose:
確保你的服務器或 NAS 已安裝 Docker 及 Docker Compose。
創建項目目錄與數據卷:
在項目目錄下創建必要的文件夾:
mkdir -p ./vikunja/files
mkdir -p ./vikunja/config
-
配置文件:
根據需求準備config.yml
文件,并將其路徑更新到 Docker Compose 文件中。
步驟 2:啟動 Vikunja 服務
在項目目錄下執行以下命令啟動服務:
docker-compose up -d
等待容器拉取鏡像并啟動成功。
步驟 3:配置并啟動 Nginx
-
將上面的 Nginx 配置文件保存至
/etc/nginx/conf.d/your_config.conf
(或其他合適位置),確保 SSL 證書文件存在并路徑正確。
重啟 Nginx 服務以加載新的配置:
sudo systemctl restart nginx
步驟 4:驗證訪問
打開瀏覽器,輸入 https://你的域名.com
,即可看到 Vikunja 的登錄界面。確保通過 HTTPS 訪問,且 API 調用等功能正常。
5. 部署優化與注意事項
-
數據持久化:
使用掛載數據卷確保容器重啟或升級時數據不丟失,并定期備份重要數據。 -
安全設置:
修改默認數據庫密碼和 JWT 密鑰,限制數據庫外部訪問,配置好防火墻。 -
日志監控:
可通過 Docker 日志或第三方監控工具對服務運行狀態進行監控,及時排查異常。 -
反向代理調優:
根據流量情況,可調整 Nginx 配置中的client_max_body_size
、keepalive
等參數,提升性能和用戶體驗。
6. 總結
通過本文介紹的 Docker Compose 配置與 Nginx 反向代理設置,你可以輕松部署一個安全、高效的 Vikunja 待辦事項管理系統。無論是個人任務管理還是團隊協作,該解決方案都能提供直觀且穩定的服務。希望這篇文章對你搭建自托管應用有所幫助,歡迎在評論區交流部署經驗或提出疑問!