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

发布于:2025-02-10 ⋅ 阅读:(49) ⋅ 点赞:(0)

在这里插入图片描述

简介

什么是 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


网站公告

今日签到

点亮在社区的每一天
去签到