简介
Vikunja是一款功能强大的开源任务管理工具,它帮助用户以一种有组织的方式管理和跟踪所有待办事项。 就像一个拥有超能力的笔记本,Vikunja允许个人或团队轻松地规划、协作并完成项目。 无论是个人使用还是团队合作,Vikunja都提供了灵活性和定制性,让用户能够根据自己的需求调整任务管理方式
环境与安装方式
Vikunja支持二进制安装,docker安装,从源码自己构建安装,我这里使用的是二进制安装
我安装的环境是X86架构的linux(Almalinux)
项目官网/下载地址
和其他的开源程序不一样,这个再Github里面也可以找到,但是里面只有源码,没有编译好的二进制文件等,需要二进制文件的话可以到它的官网下载。
项目官网:https://vikunja.io/
github项目地址:https://github.com/go-vikunja/vikunja
官方下载仓库地址:https://dl.vikunja.io/vikunja/
下载/解压Vikunja
进入官方的下载仓库地址
点击最新版的版本号,这里注意,有的版本号带rc的,带rc的是候选版本,可以理解为测试版本,我们需要的是稳定版的
找到适合自己服务器软硬件的版本,鼠标右键,复制链接地址
使用ssh工具连接到服务器,然后根据自己的习惯创建一个文件夹,用于存放软件,我的习惯是自己安装的软件放在/opt/下面对应的文件夹里面
cd /opt
mkdir vikunja
进入刚刚创建的文件夹
cd vikunja
使用wget命令下载刚刚复制的链接
wget 刚刚再下载仓库复制的链接
wget https://dl.vikunja.io/vikunja/0.24.6/vikunja-v0.24.6-linux-amd64-full.zip
下载完成后可以使用ls命令查看下载的文件
下载下来的是一个zip包,使用unzip解压,解压完成后可以使用ls命令查看解压出来的文件
unzip vikunja-v0.24.6-linux-amd64-full.zip
为了方便管理,我们需要删除不需要的文件
rm LICENSE vikunja-v0.24.6-linux-amd64-full.zip vikunja-v0.24.6-linux-amd64.sha256
然后把二进制文件重命名一下,方便后续升级更新
mv vikunja-v0.24.6-linux-amd64 vikunja
配置Vikunja
刚刚解压出来的文件里面有一个config.yml.sample,这个是官方的配置示例文件,我们可以在这个文件上进行修改或者参考这个文件写一个新的config.yml文件
下面是翻译后的配置文件示例
service:
# 此令牌用于验证签发的 JWT 令牌。
# 默认是随机生成的,每次启动 Vikunja 都会生成新的。
# (这意味着重启 Vikunja 后所有已签发的令牌都会失效)
JWTSecret: "<jwt-secret>"
# JWT 令牌有效期(秒),默认 259200 秒(3 天)
jwtttl: 259200
# “记住我”模式令牌有效期(秒),默认 2592000 秒(30 天)
jwtttllong: 2592000
# Web 服务器运行接口
interface: ":3456"
# Unix 套接字路径,如果设置,将使用套接字而不是 TCP
unixsocket:
# Unix 套接字权限,八进制值需以 0o 前缀,例如 0o660
unixsocketmode:
# 用户访问 Vikunja 的公共 URL,用于邮件和前后端通信
publicurl: ""
# 可执行文件和资源所在的根路径
# Vikunja 也会在此路径查找配置文件
rootpath: <rootpath>
# 每页最大返回项目数
maxitemsperpage: 50
# 是否启用 CalDAV 接口
enablecaldav: true
# 设置每日消息(MOTD),通过 /info 接口可见
motd: ""
# 是否允许通过链接共享项目
enablelinksharing: true
# 是否允许新用户自行注册
enableregistration: true
# 是否允许任务附件
enabletaskattachments: true
# 所有时间戳使用的时区,需使用官方 tz 数据库名称(UTC/GMT 不可用)
timezone: GMT
# 是否启用任务评论
enabletaskcomments: true
# 是否启用 TOTP 双因素认证
enabletotp: true
# 如果不为空,将启用 /test/{table} 接口用于测试,可写入任意内容
# 非常危险,除非明确知道用途,否则不要启用
testingtoken: ''
# 是否在任务到期时发送邮件提醒
enableemailreminders: true
# 是否允许用户请求删除账号
enableuserdeletion: true
# 用户头像最大尺寸(KB)
maxavatarsize: 1024
# 是否显示演示模式警告(数据会被清空)
demomode: false
# 是否允许根据节日更换图标
allowiconchanges: true
# 是否允许使用自定义 Logo
customlogourl: ''
# 是否启用公开团队功能,使团队可被发现
enablepublicteams: false
sentry:
# 是否启用 API 错误匿名跟踪(Sentry)
enabled: false
# 配置 Sentry DSN 用于 API 错误跟踪
dsn: "https://440eedc957d545a795c17bbaf477497c@o1047380.ingest.sentry.io/4504254983634944"
# 是否启用前端错误匿名跟踪
frontendenabled: false
# 配置 Sentry DSN 用于前端错误跟踪
frontenddsn: "https://85694a2d757547cbbc90cd4b55c5a18d@o1047380.ingest.sentry.io/6024480"
database:
# 数据库类型,可选 sqlite、mysql、postgres
type: "sqlite"
# 数据库用户名
user: "vikunja"
# 数据库密码
password: ""
# 数据库主机
host: "localhost"
# 数据库名称
database: "vikunja"
# 使用 sqlite 时数据库文件路径
path: "./vikunja.db"
# 数据库最大打开连接数(仅 mysql/postgres)
maxopenconnections: 100
# 数据库最大空闲连接数(仅 mysql/postgres)
maxidleconnections: 50
# 单个数据库连接最大存活时间(毫秒)
maxconnectionlifetime: 10000
# postgres 安全连接模式,可选 disable/require 等
sslmode: disable
# postgres 客户端证书路径
sslcert: ""
# postgres 客户端密钥路径
sslkey: ""
# postgres 根证书路径
sslrootcert: ""
# mysql 启用 SSL/TLS,可选 false/true/skip-verify/preferred
tls: false
typesense:
# 是否启用 Typesense 集成,启用后所有任务通过 Typesense 搜索
enabled: false
# Typesense 实例 URL
url: ''
# Typesense API key
apikey: ''
redis:
# 是否启用 Redis
enabled: false
# Redis 服务器地址和端口
host: 'localhost:6379'
# Redis 密码
password: ''
# 使用的数据库编号(0 为默认)
db: 0
cors:
# 是否启用 CORS 头
enable: false
# 允许访问 API 的来源列表(需包含协议 http:// 或 https://)
origins:
- "*"
# 预检请求结果缓存时间(秒)
maxage: 0
mailer:
# 是否启用邮件功能,禁用后用户注册立即生效且无法重置密码
enabled: false
# SMTP 主机
host: ""
# SMTP 端口(若遇 EOF 错误可尝试改为 25)
port: 587
# SMTP 验证类型,可选 plain、login、cram-md5
authtype: "plain"
# SMTP 用户名
username: "user"
# SMTP 密码
password: ""
# 是否跳过 TLS 验证
skiptlsverify: false
# 默认发件人邮箱
fromemail: "mail@vikunja"
# 邮件队列长度
queuelength: 100
# 邮件连接超时时间(秒)
queuetimeout: 30
# 是否强制使用 SSL
forcessl: false
log:
# 日志文件保存目录
path: <rootpath>logs
# 是否启用日志
enabled: true
# 普通日志输出方式,可选 stdout/stderr/file/off
standard: "stdout"
# 日志级别,可选 CRITICAL/ERROR/WARNING/NOTICE/INFO/DEBUG
level: "INFO"
# 是否记录数据库查询(调试用),可选 stdout/stderr/file/off
database: "off"
databaselevel: "WARNING"
# 是否记录 HTTP 请求
http: "stdout"
# Echo 日志,通常不需要
echo: "off"
# 是否记录事件日志
events: "off"
eventslevel: "info"
# 是否记录邮件相关日志
mail: "off"
maillevel: "info"
ratelimit:
# 是否启用速率限制
enabled: false
# 速率限制类型,可选 user 或 ip
kind: user
# 限制周期(秒)
period: 60
# 单位周期最大请求数
limit: 100
# 计数存储方式,可选 keyvalue/memory/redis
store: keyvalue
# 未认证用户每分钟访问限制(登录、注册、密码重置等接口)
noauthlimit: 10
files:
# 文件存储路径
basepath: ./files # 相对于二进制文件
# 文件最大体积
maxsize: 20MB
migration:
todoist:
# 是否启用 Todoist 导入
enable: false
# Todoist API client id
clientid:
# Todoist API client secret
clientsecret:
# 授权后回调 URL
redirecturl: <service.publicurl>/migrate/todoist
trello:
# 是否启用 Trello 导入
enable: false
key:
redirecturl: <frontend url>/migrate/trello
microsofttodo:
# 是否启用 Microsoft ToDo 导入
enable: false
clientid:
clientsecret:
redirecturl: <frontend url>/migrate/microsoft-todo
avatar:
# 使用 Gravatar 时缓存过期时间(秒)
gravatarexpiration: 3600
backgrounds:
# 是否启用项目背景
enabled: true
providers:
upload:
# 是否允许上传背景
enabled: true
unsplash:
# 是否允许 Unsplash 背景
enabled: false
accesstoken:
applicationid:
legal:
# 法律相关 URL,会显示在前端
imprinturl:
privacyurl:
keyvalue:
# 键值存储类型,可选 memory 或 redis
type: "memory"
auth:
# 本地认证设置
local:
enabled: true
# OpenID 第三方认证
openid:
enabled: false
providers:
- name:
authurl:
logouturl:
clientid:
clientsecret:
scope: openid email profile
metrics:
# 是否启用 Prometheus /metrics 端点
enabled: false
username:
password:
defaultsettings:
# 新用户默认设置
avatar_provider: initials
avatar_file_id: 0
email_reminders_enabled: false
discoverable_by_name: false
discoverable_by_email: false
overdue_tasks_reminders_enabled: true
overdue_tasks_reminders_time: 9:00
default_project_id: 0
week_start: 0
language: <unset>
timezone: <time zone set at service.timezone>
webhooks:
# 是否启用 Webhooks
enabled: true
timeoutseconds: 30
proxyurl:
proxypassword:
配置文件修改位置
我的配置文件主要修改了以下几个地方:
1、service模块
JWTSecret 设置为固定的
publicurl 设置为域名
rootpath 改为二进制文件的绝对路径
timezone 改为 GMT
2、mailer模块
SMTP 邮箱配置改为你的 QQ 邮箱
password 改为邮箱授权码
3、log模块
日志路径改为 /opt/vikunja/log/
4、defaultsettings模块
language 改为 zh-CN
timezone 改为 Asia/Shanghai
下面是我修改后的配置文件
service:
# 此令牌用于验证签发的 JWT 令牌。
# 默认是随机生成的,每次启动 Vikunja 都会生成新的。
# (这意味着重启 Vikunja 后所有已签发的令牌都会失效)
JWTSecret: "12345678"
# JWT 令牌有效期(秒),默认 259200 秒(3 天)
jwtttl: 259200
# “记住我”模式令牌有效期(秒),默认 2592000 秒(30 天)
jwtttllong: 2592000
# Web 服务器运行接口
interface: ":3456"
# Unix 套接字路径,如果设置,将使用套接字而不是 TCP
unixsocket:
# Unix 套接字权限,八进制值需以 0o 前缀,例如 0o660
unixsocketmode:
# 用户访问 Vikunja 的公共 URL,用于邮件和前后端通信
publicurl: "https://task.ersansi.top"
# 可执行文件和资源所在的根路径
# Vikunja 也会在此路径查找配置文件
rootpath: /opt/vikunja/
# 每页最大返回项目数
maxitemsperpage: 50
# 是否启用 CalDAV 接口
enablecaldav: true
# 设置每日消息(MOTD),通过 /info 接口可见
motd: ""
# 是否允许通过链接共享项目
enablelinksharing: true
# 是否允许新用户自行注册
enableregistration: true
# 是否允许任务附件
enabletaskattachments: true
# 所有时间戳使用的时区,需使用官方 tz 数据库名称(UTC/GMT 不可用)
timezone: GMT
# 是否启用任务评论
enabletaskcomments: true
# 是否启用 TOTP 双因素认证
enabletotp: true
# 如果不为空,将启用 /test/{table} 接口用于测试,可写入任意内容
# 非常危险,除非明确知道用途,否则不要启用
testingtoken: ''
# 是否在任务到期时发送邮件提醒
enableemailreminders: true
# 是否允许用户请求删除账号
enableuserdeletion: true
# 用户头像最大尺寸(KB)
maxavatarsize: 1024
# 是否显示演示模式警告(数据会被清空)
demomode: false
# 是否允许根据节日更换图标
allowiconchanges: true
# 是否允许使用自定义 Logo
customlogourl: ''
# 是否启用公开团队功能,使团队可被发现
enablepublicteams: false
sentry:
# 是否启用 API 错误匿名跟踪(Sentry)
enabled: false
# 配置 Sentry DSN 用于 API 错误跟踪
dsn: "https://440eedc957d545a795c17bbaf477497c@o1047380.ingest.sentry.io/4504254983634944"
# 是否启用前端错误匿名跟踪
frontendenabled: false
# 配置 Sentry DSN 用于前端错误跟踪
frontenddsn: "https://85694a2d757547cbbc90cd4b55c5a18d@o1047380.ingest.sentry.io/6024480"
database:
# 数据库类型,可选 sqlite、mysql、postgres
type: "sqlite"
# 数据库用户名
user: "vikunja"
# 数据库密码
password: ""
# 数据库主机
host: "localhost"
# 数据库名称
database: "vikunja"
# 使用 sqlite 时数据库文件路径
path: "./vikunja.db"
# 数据库最大打开连接数(仅 mysql/postgres)
maxopenconnections: 100
# 数据库最大空闲连接数(仅 mysql/postgres)
maxidleconnections: 50
# 单个数据库连接最大存活时间(毫秒)
maxconnectionlifetime: 10000
# postgres 安全连接模式,可选 disable/require 等
sslmode: disable
# postgres 客户端证书路径
sslcert: ""
# postgres 客户端密钥路径
sslkey: ""
# postgres 根证书路径
sslrootcert: ""
# mysql 启用 SSL/TLS,可选 false/true/skip-verify/preferred
tls: false
typesense:
# 是否启用 Typesense 集成,启用后所有任务通过 Typesense 搜索
enabled: false
# Typesense 实例 URL
url: ''
# Typesense API key
apikey: ''
redis:
# 是否启用 Redis
enabled: false
# Redis 服务器地址和端口
host: 'localhost:6379'
# Redis 密码
password: ''
# 使用的数据库编号(0 为默认)
db: 0
cors:
# 是否启用 CORS 头
enable: false
# 允许访问 API 的来源列表(需包含协议 http:// 或 https://)
origins:
- "*"
# 预检请求结果缓存时间(秒)
maxage: 0
mailer:
# 是否启用邮件功能,禁用后用户注册立即生效且无法重置密码
enabled: true
# SMTP 主机
host: "smtp.qq.com"
# SMTP 端口(若遇 EOF 错误可尝试改为 25)
port: 465
# SMTP 验证类型,可选 plain、login、cram-md5
authtype: "plain"
# SMTP 用户名
username: "11111111@qq.com"
# SMTP 密码
password: "11111111"
# 是否跳过 TLS 验证
skiptlsverify: false
# 默认发件人邮箱
fromemail: "11111111@qq.com"
# 邮件队列长度
queuelength: 100
# 邮件连接超时时间(秒)
queuetimeout: 30
# 是否强制使用 SSL
forcessl: true
log:
# 日志文件保存目录
path: /opt/vikunja/log/
# 是否启用日志
enabled: true
# 普通日志输出方式,可选 stdout/stderr/file/off
standard: "stdout"
# 日志级别,可选 CRITICAL/ERROR/WARNING/NOTICE/INFO/DEBUG
level: "INFO"
# 是否记录数据库查询(调试用),可选 stdout/stderr/file/off
database: "off"
databaselevel: "WARNING"
# 是否记录 HTTP 请求
http: "stdout"
# Echo 日志,通常不需要
echo: "off"
# 是否记录事件日志
events: "off"
eventslevel: "info"
# 是否记录邮件相关日志
mail: "off"
maillevel: "info"
ratelimit:
# 是否启用速率限制
enabled: false
# 速率限制类型,可选 user 或 ip
kind: user
# 限制周期(秒)
period: 60
# 单位周期最大请求数
limit: 100
# 计数存储方式,可选 keyvalue/memory/redis
store: keyvalue
# 未认证用户每分钟访问限制(登录、注册、密码重置等接口)
noauthlimit: 10
files:
# 文件存储路径
basepath: ./files # 相对于二进制文件
# 文件最大体积
maxsize: 20MB
migration:
todoist:
# 是否启用 Todoist 导入
enable: false
# Todoist API client id
clientid:
# Todoist API client secret
clientsecret:
# 授权后回调 URL
redirecturl: <service.publicurl>/migrate/todoist
trello:
# 是否启用 Trello 导入
enable: false
key:
redirecturl: <frontend url>/migrate/trello
microsofttodo:
# 是否启用 Microsoft ToDo 导入
enable: false
clientid:
clientsecret:
redirecturl: <frontend url>/migrate/microsoft-todo
avatar:
# 使用 Gravatar 时缓存过期时间(秒)
gravatarexpiration: 3600
backgrounds:
# 是否启用项目背景
enabled: true
providers:
upload:
# 是否允许上传背景
enabled: true
unsplash:
# 是否允许 Unsplash 背景
enabled: false
accesstoken:
applicationid:
legal:
# 法律相关 URL,会显示在前端
imprinturl:
privacyurl:
keyvalue:
# 键值存储类型,可选 memory 或 redis
type: "memory"
auth:
# 本地认证设置
local:
enabled: true
# OpenID 第三方认证
openid:
enabled: false
providers:
- name:
authurl:
logouturl:
clientid:
clientsecret:
scope: openid email profile
metrics:
# 是否启用 Prometheus /metrics 端点
enabled: false
username:
password:
defaultsettings:
# 新用户默认设置
avatar_provider: initials
avatar_file_id: 0
email_reminders_enabled: false
discoverable_by_name: false
discoverable_by_email: false
overdue_tasks_reminders_enabled: true
overdue_tasks_reminders_time: 9:00
default_project_id: 0
week_start: 0
language: zh-CN
timezone: Asia/Shanghai
webhooks:
# 是否启用 Webhooks
enabled: true
timeoutseconds: 30
proxyurl:
proxypassword:
保存并退出
:wq
查看配置文件名称是否正确,配置文件名称为config.yml
测试启动
确定配置文件名称没问题后,测试一下是否可以正常启动,启动后没报错就是成功了
./vikunja
这时候我们使用浏览器访问服务器地址加端口号就可以看到登录页面了
配置开机自启
只要看到登录页面就是正常了,接下来就是配置开机自启了
首先按【Ctrl】+【c】停止
然后进入服务文件目录
cd /etc/systemd/system
创建一个.service文件
vi vikunja.service
把下面内容根据自己实际情况修改,然后粘贴进去,注意把注释全部删掉
[Unit] Description=Vikunja After=syslog.target network.target Requires=postgresql.service # 根据实际数据库选择
Requires=mysql.service
Requires=redis.service
[Service] Type=simple WorkingDirectory=/opt/vikunja # 二进制文件所在目录路径 ExecStart=/opt/vikunja/vikunja #二进制文件路径 Restart=always RestartSec=2s
[Install] WantedBy=multi-user.target
保存并退出
修改文件权限
chmod +x vikunja.service
刷新system文件
sudo systemctl daemon-reload
启动vikunja
systemctl start vikunja.service
设置开机自启
systemctl enable vikunja.service
使用
第一次登录
vikunja是没有默认管理员账号密码的,第一次登录是需要先注册一个账号密码
而且vikunja是没有管理员的,所有用户注册后就是普通用户,想要修改配置等都需要手动修改config文件
创建代办任务
点击【项目】
点击【新建项目】
输入标题,然后点击【创建】
这样一个大项目就创建好了,可以在这个大项目下面创建小项目
点击大项目旁边的三个点,然后点击【创建项目】
输入项目标题,然后点击【创建】
这样就创建好小项目了
接下来创建任务
点击项目名称,然后输入任务名称,点击【添加】
任务创建好后需要设置任务,点击任务右边的两条杠
在里面设置任务内容,时间等
更新
首先进行备份,备份当前版本的二进制文件
只需将二进制文件替换为新版本,然后重新启动 Vikunja。它将自动运行所有必要的数据库迁移。
请务必查看新版本的更新日志,以免错过更新过程中可能涉及的任何手动步骤!