在 Laradock 上使用 Docker 运行 Kanboard:从本地到生产的完整指南
【免费下载链接】laradockFull PHP development environment for Docker. Run Laravel, Symfony, CodeIgniter, Phalcon, WordPress, Drupal, Magento, Moodle, or any PHP project with 70+ pre-configured services: Nginx, Apache, PHP-FPM, MySQL, PostgreSQL, MongoDB, Redis, Elasticsearch & more.项目地址: https://gitcode.com/gh_mirrors/la/laradock
Kanboard 是一款刻意保持极简的开源看板项目管理工具,整个应用是一个通过 Web 服务器对外服务的 PHP 程序,默认甚至只需要一个 SQLite 文件就能跑起来。本文将以 Laradock 为运行环境,完整讲解如何用 Docker 容器化地部署 Kanboard:从拉取仓库、选择服务、配置数据库连接到切换 PHP 版本、最终走向生产部署,全程无需在宿主机安装任何 PHP 环境。读完你将掌握一套可复制、可迁移到任意 PHP 项目的 Laradock 标准工作流。
Kanboard 是什么
Kanboard 是开源看板项目管理工具,与 Jira 这类功能庞大的重型工具不同,它刻意保持简单与极简。作为 PHP 应用,它通过 Web 服务器对外提供服务;与大多数需要自托管基础设施的 PHP 应用不同,Kanboard 几乎零依赖即可运行:开箱即用地将全部数据存放在单个 SQLite 数据库文件中,当团队规模超出单文件承载能力后,MySQL/MariaDB 与 PostgreSQL 是官方提供的可选替代方案。
为什么要用 Docker 运行 Kanboard
自托管应用通常需要拼装 NGINX、PHP-FPM、数据库等若干组件。Docker 把这些组件打包进相互隔离的容器中,让应用在任何机器上都以相同方式运行:
- 无需在笔记本上安装 PHP,避免不同项目之间的版本冲突,杜绝"在我机器上能跑"的尴尬;
- 用完即删的一次性容器,环境与生产保持一致;
- 同一台电脑上,一个 Kanboard 实例可以跑在旧版 PHP 上,另一个项目跑最新版 PHP,互不干扰,且全局什么都没装。
但自行把这些容器串联起来(基础镜像、PHP 扩展、网络、权限)往往需要一周的琐碎调试——这正是 Laradock 要消除的痛点。
为什么 Laradock 是 Kanboard 的绝佳搭配
Kanboard 官方确实提供了自己的 Docker 镜像(Docker Hub 上的kanboard/kanboard),因此它不像大多数 PHP 项目那样"必须"依赖 Laradock。但 Laradock 依然是更好的选择,原因如下:
- 不会被锁定在单一生态。Laradock 与框架无关。当你在 Kanboard 实例旁边新增一个 Laravel API、WordPress 站点或纯 PHP 脚本时,它们可以在同一环境中用同一套命令运行——单一用途的官方镜像做不到这一点。
- 灵活度高出几个量级。Laradock 提供 100+ 预配置服务,PHP 版本从 5.6 覆盖到 8.5;而官方镜像只捆绑某个固定版本。
- 没有黑盒,一切归你所有。没有生成文件、没有魔法、没有介于你和 Docker 之间的包装二进制。每个 Dockerfile 和 compose 文件都摆在仓库里供你阅读和修改。
- 无需学习新东西。你使用的就是纯粹的
docker compose,这套知识可以直接迁移到生产环境和所有其他项目。可选的 CLI 只是锦上添花,绝非必需。
具体到 Kanboard,它为你提供生产级 NGINX + PHP-FPM 技术栈、按需接入的 MySQL/MariaDB/PostgreSQL,以及一个内置 git 和 PHP CLI 的workspace容器,用于执行 Kanboard 的维护命令。
用 Laradock 在 Docker 上运行 Kanboard
1. 将 Laradock 加入你的项目
cd my-kanboard-instance git clone https://github.com/laradock/laradock.git cd laradock(还没有 Kanboard 代码库?先克隆 Laradock,稍后在 workspace 容器中拉取一份 Kanboard 即可。)
2. 选择 Kanboard 需要的服务
Kanboard 与同列表中其他应用最大的不同在于:它启动时完全不需要数据库服务。默认情况下它把数据写入自身data/目录下的 SQLite 文件,因此一个 Web 服务器就足够了:
Laradock CLI 方式:
./laradock start nginx workspace纯 Docker Compose 方式:
cp .env.example .env docker compose up -d nginx workspace当单个 SQLite 文件不够用,或要为需要真正并发能力的团队搭建 Kanboard 时,像其他应用一样加上 MySQL 或 PostgreSQL:
Laradock CLI 方式:
./laradock start nginx mysql workspace纯 Docker Compose 方式:
docker compose up -d nginx mysql workspace完整的服务目录见 Intro 文档。如果更希望被引导式提问,可选的 CLI 会带你一步步做出选择:先运行./laradock setup,再运行./laradock start。它会打印出它实际执行的每一条命令,全程透明。
3. 把 Kanboard 指向容器
Kanboard 从项目根目录的config.php文件读取设置(复制config.default.php即可开始),并且该文件中的每个设置都可以用同名环境变量读取。保持DB_DRIVER不设置,Kanboard 就直接使用 SQLite,无需任何额外配置。若要切换到 MySQL/MariaDB 或 PostgreSQL,设置连接常量并指向服务名:
define('DB_DRIVER', 'mysql'); define('DB_USERNAME', 'default'); define('DB_PASSWORD', 'secret'); define('DB_HOSTNAME', 'mysql'); define('DB_NAME', 'default');默认的数据库、用户名和密码定义在 mysql/defaults.env 中:数据库为default、用户为default、密码为secret、端口为3306(根密码root)。其中任何一项都可以通过在 Laradock 的.env中添加对应行来覆盖(.env中的值永远优先)。例如用./laradock set MYSQL_DATABASE=kanboard或直接编辑.env写入MYSQL_DATABASE=kanboard。
4. 安装并运行你的实例
进入workspace容器,放入 Kanboard 代码库,让第一个请求完成安装:
Laradock CLI 方式:
./laradock workspace纯 Docker Compose 方式:
docker compose exec workspace bash进入容器后,将 Kanboard 代码库放入当前目录(或直接克隆)。然后打开 http://localhost,使用默认管理员账号(admin/admin)登录,Kanboard 会在首次登录时提示你修改密码。
随时更换 PHP 版本
这是原生安装最痛苦、而 Laradock 最擅长的地方。在 Laradock 的.env中设置版本并重建镜像:
PHP_VERSION=8.3Laradock CLI 方式:
./laradock rebuild php-fpm workspace纯 Docker Compose 方式:
docker compose build php-fpm workspaceKanboard 自 1.2.46 版本起要求 PHP 8.1 或更高;Laradock 覆盖 PHP 5.6 到 8.5 的任意版本,因此同一套工具可以并排运行一个固定在旧版本、尚未升级的 Kanboard 实例和一个全新的实例,彼此隔离,且都不需要安装在你自己的机器上。
把实例带上线
当你的 Kanboard 实例准备就绪后,同一套 Laradock 技术栈就是你的部署方案。构建一个加固后的镜像,然后推送到你选择的托管平台:
./laradock ship接着选择一个目标并按照对应指南操作——单台服务器、托管平台或 Kubernetes:Deploy to Production列出了所有提供商(Fly.io、Render、Railway、DigitalOcean、AWS、Google Cloud、Azure、Kamal、Kubernetes),每个都附带现成的配置文件。没有针对特定提供商的魔法需要学习;Docker 镜像在哪里运行结果都一样。
深入 Laradock:源码视角
以上操作全部建立在仓库中几个关键文件之上,理解它们能帮你更自信地排错与定制。
Laradock CLI 的本质:透明地包装 docker compose
仓库根目录的 laradock 脚本设计契约是"无状态、无生成文件、每条命令都打印它实际执行的 docker compose 命令"——纯docker compose永远同样可用。它的核心run()函数先打印再执行:printf 'docker compose %s' "$*"然后docker compose "$@",所以你在屏幕上看到的每一行都是真实命令。start命令在未配置时会自动走setup向导,交互式向导的答案最终只写成.env覆盖项(如COMPOSE_PROJECT_NAME、DATA_PATH_HOST、PHP_VERSION、APP_CODE_PATH_HOST),其余全部沿用各服务的defaults.env默认值。脚本还内置了端口占用诊断:当docker compose up报 "port is already allocated" 时,它会定位具体服务与端口变量,并推荐一个空闲端口供你./laradock set KEY=value后重启。
compose include 机制:服务即文件夹
根目录的 docker-compose.yml 通过 Compose v2.20+ 的include指令把每个服务的独立 compose 文件聚合进来(例如nginx/compose.yml、mysql/compose.yml、workspace/compose.yml),每个服务同时挂载自己的defaults.env作为默认环境变量。这解释了"服务名就是文件夹名"的约定:想启动 mysql,实际上是在启动 mysql/compose.yml 里定义的服务。任何服务的端口、密码、版本变量都写在它自己的defaults.env里,运行时在根.env中覆盖即可。
默认站点与数据卷:Kanboard 落地即用
nginx/sites/default.conf 是开箱即用的站点配置:listen 80 default_server、root /var/www/public、PHP 请求经fastcgi_pass php-upstream转发给 php-fpm(对应 php-fpm/compose.yml 中暴露的 9000 端口)。Kanboard 恰好会把public/作为 Web 根目录,所以你只需让 Kanboard 代码库位于挂载进容器的应用目录中即可。在 workspace/compose.yml 中可以看到APP_CODE_PATH_HOST:APP_CODE_PATH_CONTAINER的卷挂载:宿主机上 Laradock 旁边的项目目录被实时挂载进nginx、php-fpm、workspace三个容器,宿主机上的编辑即刻生效。Kanboard 的data/目录(SQLite 文件所在)默认落在本地 bind mount 上,这正好符合官方"不要在网络文件系统上使用 SQLite"的告诫。
常见问题(FAQ)
用 Laradock 运行 Kanboard 需要安装 PHP 吗?
不需要。一切都在容器内。PHP 和 git 都可以从workspace容器访问,宿主机上永远不用安装 PHP。
典型的 Kanboard 实例应该启动哪些服务?
nginx workspace两个就够了,因为 Kanboard 默认使用 SQLite。只有当你需要共享、并发的数据库时才加入mysql或postgres。
Kanboard 应该用 SQLite 还是 MySQL/PostgreSQL?
SQLite 是零配置的默认选择,适合单用户或本地机器上的小团队。Kanboard 官方文档推荐在大型或多用户部署中使用 MySQL/MariaDB 或 PostgreSQL,并特别告诫不要在网络文件系统上使用 SQLite。请把data/目录放在本地 bind mount(Laradock 的默认行为)上,或者在多人同时访问实例时迁移到 MySQL/PostgreSQL。
能否在多个不同 PHP 版本的实例上运行 Kanboard?
可以。每个实例使用独立的 Laradock,设置不同的COMPOSE_PROJECT_NAME和DATA_PATH_HOST,并在各自.env中设置不同的PHP_VERSION,它们就能在同一台机器上独立运行、互不干扰。这也是 Laradock 官方推荐的隔离方式。
在 macOS、Windows 和 Linux 上表现一致吗?
一致。Laradock 运行在一切支持 Docker 的平台上。在 macOS/Windows 上,文件同步速度取决于 Docker Desktop(VirtioFS 能带来显著提升);这是 Docker Desktop 本身的特性,与 Laradock 无关。
需要横向对比不同方案?参见完整的 Laradock vs Others 分析。准备好开始了?Getting Started 大约五分钟即可上手。
【免费下载链接】laradockFull PHP development environment for Docker. Run Laravel, Symfony, CodeIgniter, Phalcon, WordPress, Drupal, Magento, Moodle, or any PHP project with 70+ pre-configured services: Nginx, Apache, PHP-FPM, MySQL, PostgreSQL, MongoDB, Redis, Elasticsearch & more.项目地址: https://gitcode.com/gh_mirrors/la/laradock
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考