Crater 容器化部署指南:用 Docker Compose 本地部署,再到生产环境平滑扩展

发布时间:2026/8/23 10:38:56
Crater 容器化部署指南:用 Docker Compose 本地部署,再到生产环境平滑扩展 Crater 容器化部署指南用 Docker Compose 本地部署再到生产环境平滑扩展【免费下载链接】craterOpen Source Invoicing Solution for Individuals Businesses项目地址: https://gitcode.com/gh_mirrors/cr/craterCrater 是一款开源的发票管理系统覆盖客户管理、报价单、发票、付款记录和费用追踪适合自由职业者、小团队以及需要给客户开具正式发票的企业。这篇文章给你一条完整的落地路径如何用 Docker Compose 在本地把 Crater 跑起来怎么确认服务真的可用以及当你需要面对多副本、持久化存储和外部访问时生产环境该如何设计。全文只讲关键步骤先跑通再优化。部署前先确认三件事环境与端口是否就绪Docker 与 Docker Compose 已安装并可正常构建镜像主机 80 端口未被占用Nginx 容器映射到80:80主机 3306 被占用也没关系编排文件里数据库对外暴露的是33006:3306目录与文件是否完整从 gitcode 仓库克隆完整项目后确认以下文件都在根目录中缺任何一个部署都会中断git clone https://gitcode.com/gh_mirrors/cr/crater cd crater需要重点确认的三个位置docker-compose.yml服务编排定义包含 app、db、nginx、cron 四个服务Dockerfile基于php:8.1-fpm的应用镜像构建文件docker-compose/setup.sh容器启动后的初始化脚本数据库连接信息编排文件中 MariaDB 的默认账号密码均为craterMYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE并且数据库数据挂载在名为db的命名卷里。如果你要改成把数据落到宿主机目录需要注释掉db:/var/lib/mysql那一行启用下面注释掉的宿主机路径挂载并按自己的需求修改环境变量。最短路径三步把服务跑起来第一步构建并启动容器docker-compose up -d --build这条命令会构建 PHP 应用镜像和 cron 镜像然后拉起四个服务NginxWeb 入口、PHP-FPM应用进程、MariaDB数据库、cronLaravel 定时任务调度。第二步执行初始化脚本容器起来不等于应用可用。Crater 需要在容器内完成依赖安装、密钥生成和存储软链接项目自带的初始化脚本已经封装好这些操作sh docker-compose/setup.sh脚本内部执行了三件事composer install安装 PHP 依赖、php artisan storage:link建立storage软链、php artisan key:generate生成应用密钥。注意第二条命令带了|| true也就是说软链失败不会阻断流程——如果安装向导里出现静态资源 404回头检查这一步的日志。第三步打开浏览器访问http://localhost看到 Crater 的安装向导即表示 Web 链路已通。安装向导会引导你完成公司信息和管理员账号设置。上图为 Crater 生成的发票样式系统支持自定义模板与多币种结算安装完成后你可以在后台直接编辑发票外观。启动后如何验证服务正常先验证再谈配置。建议按下面顺序逐项确认任何一项不通过就先停下排查不要继续往下走。检查安装向导与页面资源首页能打开安装向导正常渲染页面样式、图标不缺失。样式文件缺失通常指向composer install未执行或构建产物未完成能进入数据库配置步骤说明 PHP 到 MariaDB 的链路是通的检查定时任务是否在工作Crater 的发票状态流转如过期提醒、逾期标记依赖schedule:run容器里由 cron 服务每分钟执行一次。可以用这条命令观察输出docker-compose logs cron日志持续滚动且无报错说明调度器正常。如果这个容器没起来定时任务全部失效属于隐蔽故障值得单独留意。检查数据库持久化重启容器后登录 MariaDB 确认数据仍在docker-compose exec db mysql -u crater -pcrater crater -e show tables;表结构存在、重启不丢数据持久化才算真正生效。关键配置项说明上传体积限制上传收据、客户头像等文件时有两个限制要同时看docker-compose/php/uploads.iniPHP 侧的upload_max_filesize与post_max_size默认 64Mdocker-compose/nginx/nginx.confNginx 侧的client_max_body_size默认 64M两边取较小值生效。需要调大时两处都要改只改一处会留下隐蔽的上传失败问题。应用运行参数Laravel 应用的APP_URL、数据库主机等配置在安装向导或.env中维护。容器网络里应用连接数据库的主机名是db而不是localhost——这是容器化部署中最高频的踩坑点之一改配置时先确认自己是在容器网络还是宿主机视角下填写。文件挂载策略编排文件把整个项目目录挂载到容器内的/var/www意味着你本地修改代码后容器即时生效适合开发调试。生产环境建议改用只读挂载或干脆把构建产物打进镜像避免运行时目录被随意改写。从单机到生产的扩展思路不要一上来直接上生产。先用 Docker Compose 在测试环境完整跑一遍安装、发发票、付款、备份全流程再考虑编排平台。镜像化与副本数把Dockerfile构建的crater-php镜像推送到内部镜像仓库然后在 Kubernetes 中创建 Deployment 时应用容器只保留 PHP-FPM 或改用 Nginx 内置镜像作为对外入口Web 层无状态后可以放心设多个副本storage目录的写入需要规划清楚会话、上传文件落在哪个存储介质上多副本下ReadWriteOnce的 PVC 无法被多个 Pod 共享通常需要共享存储或对象存储方案可结合项目实际配置确认外部访问与配置管理用 Ingress 暴露服务配好域名与 TLS数据库建议改用集群内独立数据库实例不要和业务 Pod 共用节点APP_KEY、数据库口令这类敏感值放入 Secret常规参数放入 ConfigMap不要写死在清单里定时任务的生产化单机方案的 cron 容器在生产中应替换为 Kubernetes CronJob保证schedule:run全局只有一个调度入口避免重复执行。常见问题排查清单现象优先检查点页面 502 或一直加载docker-compose ps看 app 是否 runningdocker-compose logs app查 PHP 错误安装向导卡在数据库步骤确认连接主机填的是db确认 MariaDB 容器已 ready样式错乱、图标 404重新执行docker-compose exec app php artisan storage:link确认composer install成功文件上传报 size 错误同时核对uploads.ini与nginx.conf里的 64M 限制重启后数据没了确认db命名卷存在或宿主机挂载路径写对到期发票状态不自动变化检查 cron 容器日志确认schedule:run在跑排查顺序建议先看容器状态docker-compose ps再看容器日志docker-compose logs 服务名最后才进容器内部docker-compose exec app手动执行命令复现。部署选型建议个人使用或开发调试Docker Compose 一键启动即可本项目自带的编排文件已经覆盖了 Web、数据库和定时任务没有多余复杂度小团队生产Docker Compose 定期docker compose pull更新 独立的数据库备份脚本成本最低企业级多副本迁移到 Kubernetes重点解决存储共享、Secret 管理和 CronJob 化三件事一个务实的顺序是本地 Compose 跑通 → 测试环境验证完整业务流 → 再上编排平台。Crater 的容器化入口就在仓库根目录的docker-compose.yml配合 docker-compose 配置目录 中的 Nginx、PHP 与 cron 文件足以覆盖大多数场景不必一开始就追求最复杂的架构。【免费下载链接】craterOpen Source Invoicing Solution for Individuals Businesses项目地址: https://gitcode.com/gh_mirrors/cr/crater创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考