用 Docker Compose 與 Nginx 反向代理部署 Vikunja 待辦事項管理系統

在高效管理日常任務和項目的過程中,開源待辦事項工具 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_sizekeepalive 等參數,提升性能和用戶體驗。


6. 總結

通過本文介紹的 Docker Compose 配置與 Nginx 反向代理設置,你可以輕松部署一個安全、高效的 Vikunja 待辦事項管理系統。無論是個人任務管理還是團隊協作,該解決方案都能提供直觀且穩定的服務。希望這篇文章對你搭建自托管應用有所幫助,歡迎在評論區交流部署經驗或提出疑問!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76504.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76504.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76504.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Python快速接入DeepSeek API的步驟指南

使用Python快速接入DeepSeek API的步驟指南 1. 前期準備 注冊DeepSeek賬號 訪問DeepSeek官網注冊賬號 完成郵箱驗證等認證流程 獲取API密鑰 登錄后進入控制臺 → API管理 創建新的API Key并妥善保存 安裝必要庫 pip install requests # 可選:處理復雜場景 pip…

Redis 主要能夠用來做什么

Redis(Remote Dictionary Server)是一種基于內存的鍵值存儲數據庫,它的性能極高,廣泛應用于各種高并發場景。以下是 Redis 常見的用途: 1. 緩存(Cache) 作用:存儲熱點數據&#xf…

印度股票實時數據API接口選型指南:iTick.org如何成為開發者優選

在全球金融數字化浪潮中,印度股票市場因其高速增長潛力備受關注。對于量化交易開發者、金融科技公司而言,穩定可靠的股票報價API接口是獲取市場數據的核心基礎設施。本文將深度對比主流印度股票API,并揭示iTick在數據服務領域的獨特優勢。 一…

24.多路轉接-poll

poll也是一種linux中的多路轉接的方案 解決select的fd有上限的問題解決select每次調用都要重新設置關心的fd poll函數接口 poll, ppoll - wait for some event on a file descriptor#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout);DESCRIP…

Linux 基礎入門操作 前言 linux操作指令介紹

1 linux 目錄介紹 Linux 文件系統采用層次化的目錄結構&#xff0c;所有目錄都從根目錄 / 開始 1.1 核心目錄 / (根目錄) 整個文件系統的起點、包含所有其他目錄和文件 /bin (基本命令二進制文件) 存放系統最基本的shell命令&#xff1a;如 ls, cp, mv, rm, cat 等&#…

Chrome開發者工具實戰:調試三劍客

在前端開發的世界里&#xff0c;Chrome開發者工具就是我們的瑞士軍刀&#xff0c;它集成了各種強大的功能&#xff0c;幫助我們快速定位和解決代碼中的問題。今天&#xff0c;就讓我們一起來看看如何使用Chrome開發者工具中的“調試三劍客”&#xff1a;斷點調試、調用棧跟蹤和…

函數柯里化(Currying)介紹(一種將接受多個參數的函數轉換為一系列接受單一參數的函數的技術)

文章目錄 柯里化的特點示例普通函數柯里化實現使用Lodash進行柯里化 應用場景總結 函數柯里化&#xff08;Currying&#xff09;是一種將接受多個參數的函數轉換為一系列接受單一參數的函數的技術。換句話說&#xff0c;柯里化將一個多參數函數轉化為一系列嵌套的單參數函數。 …

torch.nn中的非線性激活介紹合集——Pytorch中的非線性激活

1、nn.ELU 基本語法&#xff1a; class torch.nn.ELU(alpha1.0, inplaceFalse)按元素應用 Exponential Linear Unit &#xff08;ELU&#xff09; 函數。 論文中描述的方法&#xff1a;通過指數線性單元 &#xff08;ELU&#xff09; 進行快速準確的深度網絡學習。 ELU 定義為…

Databend Cloud Dashboard 全新升級:直擊痛點,釋放數據價值

自 Databend Cloud 上線以來&#xff0c;我們一直致力于為用戶提供高效的數據處理與可視化體驗。早期&#xff0c;我們在工作區的“圖表”區域推出了輕量級可視化功能&#xff0c;支持積分卡、餅圖、柱狀圖和折線圖四種展示方式。這些功能簡單易用&#xff0c;基本滿足了用戶對…

Android Fresco 框架擴展模塊源碼深度剖析(四)

Android Fresco 框架擴展模塊源碼深度剖析 一、引言 在 Android 開發領域&#xff0c;圖片處理一直是一個重要且具有挑戰性的任務。Fresco 作為 Facebook 開源的強大圖片加載框架&#xff0c;在圖片的加載、緩存和顯示等方面已經提供了非常完善的功能。然而&#xff0c;為了滿…

藍橋杯最后十天沖刺 day 2 雙指針的思想

雙指針思想介紹 雙指針&#xff08;Two Pointers&#xff09;是一種在數組或鏈表等線性結構中常用的算法技巧&#xff0c;通過使用兩個指針&#xff08;索引或引用&#xff09;以不同的速度或方向遍歷數據結構&#xff0c;從而高效解決問題。雙指針通常用于優化暴力解法&#…

Axure 使用筆記

1.Axure如何制作頁面彈窗 https://blog.csdn.net/SDTechnology/article/details/143948691 2.axure 怎么點擊按鈕打開新頁面 &#xff08;1&#xff09;新建交互 &#xff08;2&#xff09;單擊是觸發 &#xff08;3&#xff09;選擇打開鏈接 &#xff08;4&#xff09;選擇…

STM32實現一個簡單電燈

新建工程的步驟 建立工程文件夾&#xff0c;Keil中新建工程&#xff0c;選擇型號工程文件夾里建立Start、Library、User等文件夾&#xff0c;復制固件庫里面的文件到工程文件夾工程里對應建立Start、Library、User等同名稱的分組&#xff0c;然后將文件夾內的文件添加到工程分組…

html5炫酷圖片懸停效果實現詳解

html5炫酷圖片懸停效果實現詳解 這里寫目錄標題 html5炫酷圖片懸停效果實現詳解項目介紹技術棧核心功能實現1. 頁面布局2. 圖片容器樣式3. 炫酷懸停效果縮放效果傾斜效果模糊效果旋轉效果 4. 懸停文字效果5. 性能優化6. 響應式設計 項目亮點總結 項目介紹 本文將詳細介紹如何使…

Playwright與Browser Use:領略AI賦能UI自動化測試的魔法魅力

目錄 Browser Use是什么&#xff1f; Playwright簡介 框架設計的核心目標與原則 Playwright 在 UI 自動化測試中的優勢 如何高效攔截錯誤 實現視頻錄制 UI自動化框架設計的挑戰 測試框架的結構與模塊化設計 自動化測試不是銀彈 走進Browser Use 橫空出世的背景與意義…

Uniapp 實現微信小程序滑動面板功能詳解

文章目錄 前言一、功能概述二、實現思路三、代碼實現總結 前言 Uniapp 實現微信小程序滑動面板功能詳解 一、功能概述 滑動面板是移動端常見的交互組件&#xff0c;通常用于在頁面底部展開內容面板。本文將介紹如何使用 Uniapp 開發一個支持手勢滑動的底部面板組件&#xff0…

【FAQ】HarmonyOS SDK 閉源開放能力 —Push Kit(12)

1.問題描述&#xff1a; pushdeviceid的長度是固定的嗎&#xff1f; 解決方案&#xff1a; 在鴻蒙系統中&#xff0c;設備ID的長度是固定的。 2.問題描述&#xff1a; 通過REST API三方推送IM類消息&#xff0c;如何實現應用處于前臺時不展示三方推送通知。 解決方案&…

【小兔鮮】day02 Pinia、項目起步、Layout

【小兔鮮】day02 Pinia、項目起步、Layout 1. Pinia2. 添加Pinia到Vue項目3. 案例&#xff1a;Pinia-counter基礎使用3.1 Store 是什么&#xff1f;3.2 應該在什么時候使用 Store? 4. Pinia-getters和異步action4.1 getters4.2 action如何實現異步 1. Pinia Pinia 是 Vue 的專…

Android學習之計算器app(java + 詳細注釋 + 源碼)

運行結果&#xff1a; 基礎的四則運算&#xff1a; 可能會出現的問題以及解決方法&#xff1a; 問題1&#xff1a;出現多個操作符。 例子&#xff1a;12 解決方法&#xff1a; 在用戶點擊操作符之后&#xff0c;去檢查之前的最后一位&#xff0c;如果最后一位也是操作符的話…

GMap.NET + WPF:構建高性能 ADS-B 航空器追蹤平臺

ADS-B 簡介 ADS - B&#xff08;Automatic Dependent Surveillance - Broadcast&#xff0c;廣播式自動相關監視&#xff09;是一種先進的航空監視技術。它依靠飛機上的機載設備&#xff0c;自動收集諸如飛機的位置、高度、速度、航向等關鍵數據&#xff0c;并周期性地以廣播的…