在数字化办公与远程协作日益普及的今天,时间管理已成为提升效率的核心挑战。无论是自由职业者记录工时,还是企业团队协调复杂项目,精准追踪时间与数据可视化分析的需求愈发迫切。而传统工具如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方式安装

  1. 演示以在群晖NAS系统上安装为例
    (其他系统请自行安装好最新版本Docker、docker compose)

  2. 打开群晖的SSH功能,使用终端软件进行连接,并切换到root状态下。
    DSM open SSH.png

  3. 点击docker共享文件夹>右键>常规>复制文件夹位置路径
    DSM copy docker.png

  4. 在终端内执行命令进入群晖的docker文件夹(你想将容器数据存储到哪就进哪个文件夹)
    (其他NAS系统的可直接看下一步,手动创建一个文件夹再右键文件夹查看属性,复制文件夹路径进入。)

    # 将/volume1/docker换成你自己的文件夹路径
    
    cd /volume1/docker
  5. 创建项目文件夹及子文件夹

    mkdir -p solidtime/{logs,app-storage}
  6. 进入项目文件夹

    cd solidtime
  7. 编辑docker-compose.yml模板文件

    vi docker-compose.yml
  8. 按字母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:
  9. 创建.env环境变量文件

    vi .env
  10. 按字母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。(最新发布的)
  11. 创建laravel.env环境变量文件

    vi laravel.env
  12. 按字母i键进入编辑模式,复制并修改下面的配置文件,粘贴到终端,按Esc键退出编辑模式,输入:wq保存并退出。
    (排版太挤的就先粘贴到文本文件内,修改后再使用,灵活应变。)