当前位置: 首页 > article >正文

简约的单用户看板待办事项应用Tellor

在这里插入图片描述

简介

什么是 Tellor ?

Tellor 是一个简约的单用户看板待办事项应用。

主要特点

  • 用户界面:具有简单、紧凑的用户界面,易于使用。
  • 功能:可以从 Trello 导入看板,支持快速加载和轻量级操作。
  • 无认证:设计为单用户应用,无需身份验证,便于快速访问和管理任务。
  • 兼容性:可在移动设备上友好使用。
  • 开发要求:基于 PHPMySQL,适用于 LAMPLinuxApacheMySQLPHP)环境。
  • 代码简洁:代码简单明了,便于修改,不依赖任何库或框架。

此应用适合希望快速管理待办事项的用户,特别是在不需要多人协作的情况下。

构建镜像

如果你不想自己构建,可以跳过,直接阅读下一章节

Dockerfile

官方没有提供 Docker 镜像,所以老苏只能自己构建,Dockerfile 如下

# 使用官方 PHP 镜像  
FROM php:7.4-apache  
  
# 设置工作目录  
WORKDIR /var/www/html  
  
# 复制项目文件到容器中  
COPY . .  
  
# 安装所需的 PHP 扩展  
RUN docker-php-ext-install mysqli  
  
# 设置数据库连接的环境变量  
ENV DB_DATABASE=tellordb  
ENV DB_USER=telloruser  
ENV DB_PASSWORD=tellorpasswd  
ENV DB_HOST=mysql-container  
  
# 开放端口 80  
EXPOSE 80

api.php

还需要修改 api.php 文件,这样才能使用环境变量对数据库连接进行设置

<?php
if(empty($_REQUEST['api'])) {
  http_response_code(400);
  exit();
}
$scon = new mysqli('localhost', 'telloruser', 'tellorpasswd', 'tellordb');
$scon->set_charset('utf8mb4');
header("Cache-Control: no-store");

改为

<?php
if (empty($_REQUEST['api'])) {
    http_response_code(400);
    exit();
}

// 从环境变量获取数据库连接信息
$host = getenv('DB_HOST') ?: 'localhost'; // 默认值为 localhost
$user = getenv('DB_USER') ?: 'telloruser'; // 默认值
$passwd = getenv('DB_PASSWORD') ?: 'tellorpasswd'; // 默认值
$database = getenv('DB_DATABASE') ?: 'tellordb'; // 默认值

// 创建数据库连接
$scon = new mysqli($host, $user, $passwd, $database);
$scon->set_charset('utf8mb4');
header("Cache-Control: no-store");

// 检查连接是否成功
if ($scon->connect_error) {
    http_response_code(500);
    exit("连接失败: " . $scon->connect_error);
}

.dockerignore

在项目根目录下创建一个名为 .dockerignore 的文件,以防止将不必要的文件复制到镜像中

.git
node_modules
npm-debug.log
Dockerfile
.dockerignore

构建镜像和容器运行的基本命令如下👇

# 下载代码
git clone https://github.com/Voldrix/Tellor.git
  
# 进入目录  
cd Tellor

# 将 Dockerfile 放入当前目录
  
# 构建镜像
docker build -t wbsu2003/tellor:v1 .

安装

在群晖上以 Docker 方式安装。

涉及到两个容器,采用 docker-compose 方式进行安装

setup-db.sql

setup-db.sql 是从 setup-db.sh 中整理出来的,用于初始化数据库

-- setup-db.sql

-- 创建数据库
CREATE DATABASE IF NOT EXISTS tellordb;

-- 创建用户并授权
CREATE USER 'telloruser'@'localhost' IDENTIFIED BY 'tellorpasswd';
GRANT ALL PRIVILEGES ON tellordb.* TO 'telloruser'@'localhost';

-- 创建 boards 表
CREATE TABLE IF NOT EXISTS `boards` (
    `id` BINARY(16) NOT NULL,
    `name` VARCHAR(127) NOT NULL,
    `bgimg` VARCHAR(1023) CHARACTER SET ascii COLLATE ascii_bin,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

-- 创建 lists 表
CREATE TABLE IF NOT EXISTS `lists` (
    `board` BINARY(16) NOT NULL,
    `id` BINARY(16) NOT NULL,
    `color` CHAR(6) CHARACTER SET ascii COLLATE ascii_bin,
    `name` VARCHAR(1023) NOT NULL,
    `ordr` INT(10) UNSIGNED NOT NULL,
    KEY `listsBoardIdx` (`board`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

-- 创建 cards 表
CREATE TABLE IF NOT EXISTS `cards` (
    `board` BINARY(16) NOT NULL,
    `list` BINARY(16) NOT NULL,
    `id` BINARY(16) NOT NULL,
    `parent` CHAR(16) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
    `title` VARCHAR(1023) NOT NULL,
    `tags` VARCHAR(127) CHARACTER SET ascii COLLATE ascii_bin,
    `cdate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP(),
    `mdate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
    `description` TEXT,
    KEY `cardsBoardIdx` (`board`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

-- 创建 archive 表
CREATE TABLE IF NOT EXISTS `archive` (
    `board` BINARY(16) NOT NULL,
    `list` BINARY(16) NOT NULL,
    `id` BINARY(16) NOT NULL,
    `parent` CHAR(16) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
    `title` VARCHAR(1023) NOT NULL,
    `tags` VARCHAR(127) CHARACTER SET ascii COLLATE ascii_bin,
    `cdate` DATETIME NOT NULL,
    `mdate` DATETIME NOT NULL,
    `description` TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

-- 创建 history 表
CREATE TABLE IF NOT EXISTS `history` (
    `board` BINARY(16) NOT NULL,
    `cardid` BINARY(16) NOT NULL,
    `type` BINARY(3) NOT NULL,
    `change_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP(),
    `patch` BLOB,
    INDEX `historyIdx` (`board`, `cardid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

docker-compose.yml

将下面的内容保存为 docker-compose.yml 文件

version: '3'  
  
services:  
  mysql:  
    image: mysql:5.7  
    # ports:  
    #   - "3306:3306"  
    volumes:  
      - ./data:/var/lib/mysql  
      - ./initdb:/docker-entrypoint-initdb.d  
    environment:  
      MYSQL_ROOT_PASSWORD: root  
      MYSQL_DATABASE: tellordb  
      MYSQL_USER: telloruser  
      MYSQL_PASSWORD: tellorpasswd  
  
  web:  
    image: wbsu2003/tellor:latest  
    ports:  
      - "3438:80"  
    environment:  
      DB_DATABASE: tellordb  
      DB_USER: telloruser  
      DB_PASSWORD: tellorpasswd  
      DB_HOST: mysql  
    depends_on:  
      - mysql

然后执行下面的命令

# 新建文件夹 tellor 和 子目录
mkdir -p /volume1/docker/tellor/{data,initdb}

# 进入 tellor 目录
cd /volume1/docker/tellor

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:3438 就能看到主界面

New Board 新建一个看板

Board 创建成功后,就可以添加 List

按照惯常依次添加了

  • 待办事项(To Do
  • 进行中(In Progress
  • 完成(Done

接下来可以在 List 中添加 Card

New Card 进行编辑

一个完整的看板

支持导入/导出

参考文档

Voldrix/Tellor: Kanban todo app. Simple, minimal, compact UI, single-user. Can Import from Trello. (PHP + mysql)
地址:https://github.com/Voldrix/Tellor


http://www.kler.cn/a/517616.html

相关文章:

  • 9【如何面对他人学习和生活中的刁难】
  • 批量创建ES索引
  • 微信小程序1.1 微信小程序介绍
  • Level2逐笔成交逐笔委托毫秒记录:今日分享优质股票数据20250124
  • 总结与展望,龙蜥社区第 30 次运营委员会会议线上召开
  • BGP(1)邻居建立,路由宣告
  • 无人机核心项目开发系列:从设计到实现的完整解析
  • Tailwind CSS v4.0 发布
  • 微服务学习-Nacos 注册中心实战
  • Kaggle入门
  • 开发环境搭建-1:配置 WSL (类 centos 的 oracle linux 官方镜像)
  • 通过OPC UA或MQTT协议,安全地将工业设备连接至物联网软件
  • VMware虚拟机安装openKylin
  • 基于Qt平台QuaZip方式压缩/解压缩
  • QT 通过ODBC连接数据库的好方法:
  • CLOUDFLARE代理请求重定向你太多次
  • 基于自然语言处理的垃圾短信识别系统
  • 【大模型】基于LLaMA-Factory的模型高效微调(2)
  • 【Qt】: QPointer详解
  • Elasticsearch 性能测试工具全解析
  • 【机器学习案列】探索各因素对睡眠时间影响的回归分析
  • 2025美赛数学建模A题:解题的长期磨损——思路+代码+模型:
  • HTML5 Web Worker 的使用与实践
  • UDP 广播组播点播的区别及联系
  • 【Django教程】用户管理系统
  • SpringAI基于API对大语言模型调用