简约的单用户看板待办事项应用Tellor
简介
什么是 Tellor ?
Tellor
是一个简约的单用户看板待办事项应用。
主要特点
- 用户界面:具有简单、紧凑的用户界面,易于使用。
- 功能:可以从
Trello
导入看板,支持快速加载和轻量级操作。 - 无认证:设计为单用户应用,无需身份验证,便于快速访问和管理任务。
- 兼容性:可在移动设备上友好使用。
- 开发要求:基于
PHP
和MySQL
,适用于LAMP
(Linux
,Apache
,MySQL
,PHP
)环境。 - 代码简洁:代码简单明了,便于修改,不依赖任何库或框架。
此应用适合希望快速管理待办事项的用户,特别是在不需要多人协作的情况下。
构建镜像
如果你不想自己构建,可以跳过,直接阅读下一章节
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