
SolidTime开源时间追踪工具NAS部署教程:Docker一键安装与团队高效管理指南
在数字化办公与远程协作日益普及的今天,时间管理已成为提升效率的核心挑战。无论是自由职业者记录工时,还是企业团队协调复杂项目,精准追踪时间与数据可视化分析的需求愈发迫切。而传统工具如Toggl、Clockify虽功能强大,却存在费用高昂或数据自主性不足的问题。
SolidTime作为一款现代开源时间追踪工具,凭借其NAS+Docker轻量化部署、多维度项目管理和无缝数据迁移等特性,正在成为中文用户的新宠。
以下从功能特性、技术优势及部署实践角度,全面解析这一工具如何助力效率革命。
为什么选择SolidTime?六大核心优势直击痛点
1️⃣ 开源免费,自主掌控数据
-
SolidTime基于MIT协议开源,代码透明可审计,用户可自由部署于私有NAS环境,彻底告别SaaS服务的数据隐私担忧。通过Docker容器化技术,仅需一条命令即可快速搭建,节省服务器资源的同时,保障7x24小时稳定运行。
2️⃣ NAS+Docker:私有化部署的最佳拍档
-
针对NAS用户,SolidTime提供完善的Docker支持。无论是群晖、飞牛、威联通还是绿联私有云,均可通过Portainer或命令行一键部署,无需公网IP即可实现局域网高效访问。结合花生壳等内网穿透工具,更可拓展至远程团队协作场景。
3️⃣ 精细化时间管理,覆盖全场景需求
-
多层级项目架构:支持“客户-项目-任务”三级划分,适配敏捷开发、设计协作等多种工作流。
-
智能计时与报表:自动生成可视化图表,支持按团队、项目、周期导出CSV/PDF,无缝对接财务结算。
-
角色权限管控:为管理员、成员、客户分配差异化的数据查看与操作权限,确保信息安全。
4️⃣ 无缝迁移,告别数据孤岛
-
支持从Toggl、Clockify等平台一键导入历史数据,减少迁移成本。开放API接口,可与Jira、Slack等第三方工具联动,构建一体化工作台。
5️⃣ 开发者友好,高扩展性架构
-
基于Laravel框架与PHP 8.3构建,集成PHPStan Level 7代码规范,保障系统稳定性。前端采用Vue.js实现响应式设计,开发者可轻松定制界面或开发插件。
6️⃣ 低成本高回报,优化团队ROI
-
开源特性节省软件采购费用,NAS部署降低服务器成本。据统计,使用SolidTime的中小团队平均节省40%的时间管理支出,项目交付效率提升25%。
应用场景:谁需要SolidTime?
👨💻 自由职业者
-
精准记录各客户项目的耗时,生成专业账单。
-
通过时间分布分析,优化工作重心,提升单位产值。
-
更可记录个人网单业务进度,提高工作效率。
👩💼 中小企业与工作室
-
实时监控团队工时投入,避免资源浪费。
-
结合多费率设置(如普通时段/加班费率),自动化计算人力成本。
🏢 大型企业与远程团队
-
跨部门、跨时区协作时,统一时间数据标准。
-
通过权限隔离,保护敏感项目信息(如竞标方案、研发进度)。
SolidTime 初体验:让工时管理像追剧一样上头
想象一下,每次打开电脑,你点开 SolidTime,界面秒加载,点击“启动计时”,秒表立刻跑起来——就像开了外挂一样给力。
-
轻量又灵动:PWA 技术加持,无论是在手机端还是桌面端,都能像原生 App 一样流畅使用,还支持二维码扫一扫直达,无需安装冗余客户端。
-
秒级精准:手动/全局命令菜单随心切换,秒表级别记录让你再也不用纠结“这活儿到底做了多久。
项目·任务·客户,一站式管理不再抓瞎
例如自媒体人最头疼的是素材、剪辑、运营等多任务并行,而 SolidTime 刚好帮你拆解:
-
项目管理:搞活动、拍视频、写文案……统统造个“项目”,让进度一目了然。
-
任务拆分:素材整理、视频剪辑、运营排期……细到每个小步骤都有独立条目,配合标签还能快速筛选。
-
客户/渠道:对接品牌方、接洽广告、社交平台运营……都能在“客户”中统一管理,生成报告时分分钟按渠道导出。
NAS部署实战:搭建专属时间管理系统
Docker Compose方式安装
-
演示以在群晖NAS系统上安装为例
(其他系统请自行安装好最新版本Docker、docker compose) -
打开群晖的SSH功能,使用终端软件进行连接,并切换到root状态下。
-
点击docker共享文件夹>右键>常规>复制文件夹位置路径
-
在终端内执行命令进入群晖的docker文件夹(你想将容器数据存储到哪就进哪个文件夹)
(其他NAS系统的可直接看下一步,手动创建一个文件夹再右键文件夹查看属性,复制文件夹路径进入。)# 将/volume1/docker换成你自己的文件夹路径 cd /volume1/docker
-
创建项目文件夹及子文件夹
mkdir -p solidtime/{logs,app-storage}
-
进入项目文件夹
cd solidtime
-
编辑docker-compose.yml模板文件
vi docker-compose.yml
-
按字母
i
键进入编辑模式,复制并修改下面的配置文件,粘贴到终端,按Esc
键退出编辑模式,输入:wq
保存并退出。
(排版太挤的就先粘贴到文本文件内,修改后再使用,灵活应变。)services: app: restart: always image: "solidtime/solidtime:${SOLIDTIME_IMAGE_TAG:-latest}" user: "1000:1000" ports: - '${FORWARD_APP_PORT:-8000}:8000' networks: - internal volumes: - "app-storage:/var/www/html/storage" - "./logs:/var/www/html/storage/logs" # 可将左侧的./logs换成完整的NAS文件夹路径 - "./app-storage:/var/www/html/storage/app" # 可将左侧的./app-storage换成完整的NAS文件夹路径 environment: CONTAINER_MODE: http # 使用HTTP协议,改成HTTPS则会强制要求跳转到HTTPS。 AUTO_DB_MIGRATE: "true" # 在每次更新solidtime应用程序时执行自动迁移数据库表,关闭则改成false。 healthcheck: test: [ "CMD-SHELL", "curl --fail http://localhost:8000/health-check/up || exit 1" ] env_file: - laravel.env depends_on: - database scheduler: restart: always image: "solidtime/solidtime:${SOLIDTIME_IMAGE_TAG:-latest}" user: "1000:1000" networks: - internal volumes: - "app-storage:/var/www/html/storage" - "./logs:/var/www/html/storage/logs" # 可将左侧的./logs换成完整的NAS文件夹路径 - "./app-storage:/var/www/html/storage/app" # 可将左侧的./app-storage换成完整的NAS文件夹路径 environment: CONTAINER_MODE: scheduler healthcheck: test: [ "CMD-SHELL", "supervisorctl status scheduler:scheduler_00" ] env_file: - laravel.env depends_on: - database queue: restart: always image: "solidtime/solidtime:${SOLIDTIME_IMAGE_TAG:-latest}" user: "1000:1000" networks: - internal volumes: - "app-storage:/var/www/html/storage" - "./logs:/var/www/html/storage/logs" # 可将左侧的./logs换成完整的NAS文件夹路径 - "./app-storage:/var/www/html/storage/app" # 可将左侧的./app-storage换成完整的NAS文件夹路径 environment: CONTAINER_MODE: worker WORKER_COMMAND: "php /var/www/html/artisan queue:work" healthcheck: test: [ "CMD-SHELL", "supervisorctl status worker:worker_00" ] env_file: - laravel.env depends_on: - database database: restart: always image: 'postgres:15' # ports: # 如果要对外暴露数据库端口就把这行取消注释 # - '${FORWARD_DB_PORT:-5432}:5432' # 如果要对外暴露数据库端口就把这行取消注释 environment: PGPASSWORD: '${DB_PASSWORD:-secret}' POSTGRES_DB: '${DB_DATABASE}' POSTGRES_USER: '${DB_USERNAME}' POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}' volumes: - 'database-storage:/var/lib/postgresql/data' networks: - internal healthcheck: test: - CMD - pg_isready - '-q' - '-d' - '${DB_DATABASE}' - '-U' - '${DB_USERNAME}' retries: 3 timeout: 5s gotenberg: image: gotenberg/gotenberg:8 networks: - internal healthcheck: test: [ "CMD", "curl", "--silent", "--fail", "http://localhost:3000/health" ] networks: internal: volumes: database-storage: app-storage:
-
创建
.env
环境变量文件vi .env
-
按字母
i
键进入编辑模式,复制并修改下面的配置文件,粘贴到终端,按Esc
键退出编辑模式,输入:wq
保存并退出。
(排版太挤的就先粘贴到文本文件内,修改后再使用,灵活应变。)APP_DOMAIN=your-domain.com # 将your-domain.com改成你的域名访问地址,或者局域网的访问地址,例如http://NAS的IP地址:8000 DB_DATABASE=solidtime # 右侧的solidtime是数据库名,建议默认。 DB_USERNAME=solidtime # 右侧的solidtime是数据库用户名,建议默认。 FORWARD_APP_PORT=8000 # 右侧的8000是项目容器访问端口,建议默认。 FORWARD_DB_PORT=5432 # 右侧的5432是数据库的端口,建议默认。 DB_PASSWORD=randompassword # 右侧的randompassword是数据库密码,可改。 SOLIDTIME_IMAGE_TAG=latest # 右侧的latest是指docker镜像的版本,默认latest。(最新发布的)
-
创建
laravel.env
环境变量文件vi laravel.env
-
按字母
i
键进入编辑模式,复制并修改下面的配置文件,粘贴到终端,按Esc
键退出编辑模式,输入:wq
保存并退出。
(排版太挤的就先粘贴到文本文件内,修改后再使用,灵活应变。)
- 感谢你赐予我前进的力量