在高效管理日常任务和项目的过程中,开源待办事项工具 Vikunja 以其简洁、直观的设计和多视图支持受到越来越多用户的青睐。本文将详细介绍如何使用 Docker Compose 快速部署 Vikunja,并通过 Nginx 反向代理实现 HTTPS 访问,从而确保服务安全稳定。
1. 项目概述
Vikunja 是一款开源待办事项管理工具,支持任务列表、看板、甘特图等多种视图。你可以将它部署在自有服务器上,实现对任务数据的完全掌控。通过 Docker 部署不仅简化了安装过程,还能快速实现服务扩展和维护。
为了更安全地对外提供服务,我们将使用 Nginx 反向代理,将外部 HTTPS 流量转发至内部运行的 Vikunja 服务。
2. Docker Compose 部署配置
以下是一个示例 Docker Compose 文件,用于启动 Vikunja 服务:
version: '3.8'
services:
vikunja:
image: vikunja/vikunja
container_name: vikunja
ports:
- 3456:3456
volumes:
- ./vikunja/files:/app/vikunja/files
- ./vikunja/config:/app/vikunja/config
- ./path/to/config.yml:/etc/vikunja/config.yml
environment:
VIKUNJA_SERVICE_PUBLICURL: https://你的域名.com
VIKUNJA_SERVICE_FRONTENDURL: https://你的域名.com
VIKUNJA_SERVICE_JWTSECRET: 随机一个安全码
VIKUNJA_DATABASE_TYPE: mysql
VIKUNJA_DATABASE_HOST: 数据库地址
VIKUNJA_DATABASE_PORT: 3306
VIKUNJA_DATABASE_USER: root
VIKUNJA_DATABASE_PASSWORD: 123456
VIKUNJA_DATABASE_DATABASE: vikunja
TZ: Asia/Shanghai
restart: unless-stopped
networks:
- vikunja_network
networks:
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 待办事项管理系统。无论是个人任务管理还是团队协作,该解决方案都能提供直观且稳定的服务。希望这篇文章对你搭建自托管应用有所帮助,欢迎在评论区交流部署经验或提出疑问!
评论区