# yiliaocrm-his-docker **Repository Path**: example-codes/yiliaocrm-his-docker ## Basic Information - **Project Name**: yiliaocrm-his-docker - **Description**: yiliaocrm 蝉印医疗管家 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-10-29 - **Last Updated**: 2025-10-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HIS Docker 一键部署 基于 Docker 的一键部署方案,自动拉取 **Laravel 后端** 与 **前端 dist 资源**,并在同一容器内集成 Nginx、PHP-FPM、Redis、Laravel 队列与定时任务,外部通过 Docker Compose 拉起 MySQL 8.0,满足一条命令启动整套服务的需求。 ## 目录结构 ``` his-docker/ ├── Dockerfile ├── Makefile ├── README.md ├── docker-compose.yml └── docker ├── entrypoint.sh ├── env/ │ └── app.env ├── nginx.conf ├── php-fpm.conf ├── php.ini └── supervisord.conf ``` ## 特性概览 - **自动拉取代码**:Docker 构建阶段会从 `https://gitee.com/yiliaocrm/api` 与 `https://gitee.com/yiliaocrm/frontend-dist` 拉取最新代码,并自动解压 `dist.7z` 到 `public/dist`。 - **依赖一次性装全**:内置 PHP 8.4(可通过 `PHP_BASE` 构建参数覆盖)、Composer 安装 `--no-dev` 依赖,包含要求的所有扩展(bcmath、imagick、redis、xlswriter 等)。 - **容器内管理所有进程**:Supervisor 同时托管 Nginx、PHP-FPM、Redis、队列(`queue:work`)与调度器(`schedule:work`),只需暴露容器的 80 端口到宿主 8181。 - **MySQL 8.0 独立容器**:使用官方 `mysql:8.0`,通过 Docker Compose 一键启动;Redis 在应用容器内,Ready 之后自动运行迁移与缓存预热。 - **可发布镜像**:构建出的 `yiliaocrm/his-app:latest` 镜像可直接推送,其他人只需拉取镜像并使用同一份 `docker-compose.yml` 即可运行。 ## 快速开始 1. **准备环境** - Docker 24+ 与 docker compose plug-in - 预留端口:宿主 `8181`(Web),容器内部会监听 `80` 2. **克隆本仓库 & 构建镜像** ```bash cd his-docker make build ``` > 构建过程中会自动拉取最新后端与前端仓库、安装 PHP 扩展与 Composer 依赖。 > 3. **启动全部服务** ```bash make up ``` 4. **访问应用** - 浏览器打开 `http://localhost:8181` 5. **查看日志 / 进入容器** ```bash make logs # 实时查看 Supervisor, Nginx, Laravel 日志 make shell # 进入容器执行诊断命令 make artisan migrate # 运行 artisan 命令(示例) ``` 6. **停止 / 重启** ```bash make down # 停止并移除容器 make restart # 重新创建容器 ``` ## 环境变量说明 默认变量集中在 `docker/env/app.env`,常用项包括: | 变量 | 说明 | 默认值 | | ---------------------- | ------------------------------------------ | ------------------------------- | | `APP_URL` | 对外访问地址 | `http://localhost:8181` | | `APP_KEY` | Laravel 应用 Key | 为空时容器会自动生成 | | `DB_HOST` / `DB_*` | MySQL 连接配置 | 对应 `mysql` 服务 | | `REDIS_HOST` | Redis 主机 | `127.0.0.1`(容器内置 Redis) | | `WAIT_FOR_DB` | 是否在启动前等待数据库 | `true` | | `RUN_MIGRATIONS` | 启动时自动 `php artisan migrate --force` | `true` | | `RUN_CACHE_WARMUP` | 启动时预热配置/路由/视图缓存 | `true` | 如需覆盖配置,可在宿主新建 `.env` 文件并在 `docker-compose.yml` 中引用,或为 `docker compose` 传递 `APP_KEY`、`DB_PASSWORD` 等环境变量。 ## 自定义构建参数 `docker-compose.yml` 中为 `app` 服务提供了可覆盖的构建参数: | 构建参数 | 默认值 | 说明 | | ------------------------------------ | --------------------------- | --------------------------------- | | `PHP_BASE` | `php:8.4-rc-fpm-alpine` | PHP 基础镜像(必须包含 8.4 支持) | | `API_REPO` / `API_REF` | 官方 Gitee 仓库 /`master` | 后端代码来源 | | `FRONTEND_REPO` / `FRONTEND_REF` | 官方 Gitee 仓库 /`master` | dist 包来源 | 示例:构建指定 Tag ```bash PHP_BASE=php:8.4-rc-fpm-alpine \ API_REF=release-2024-05 \ FRONTEND_REF=release-2024-05 \ docker compose build app ``` ## 数据持久化 | 卷 | 目录 | 用途 | | ----------------------- | --------------------------------- | ----------------------------- | | `app_storage` | `/var/www/html/storage` | Laravel 上传、日志、缓存 | | `app_bootstrap_cache` | `/var/www/html/bootstrap/cache` | 预编译缓存 | | `app_logs` | `/var/log` | Nginx/Supervisor/PHP-FPM 日志 | | `redis_data` | `/var/lib/redis` | Redis AOF 数据 | | `mysql_data` | `/var/lib/mysql` | MySQL 数据目录 | 首次启动会自动初始化 `.env`、`APP_KEY`、数据库结构及缓存。 ## 队列与调度 - Supervisor 自动守护: - `queue:work --timeout=90 --tries=3` - `schedule:work` - 如需自定义命令,可编辑 `docker/supervisord.conf` 后重新 `make build && make restart`。 ## 发布镜像 1. 构建最新镜像: ```bash docker compose build app ``` 2. 标记并推送: ```bash docker tag yiliaocrm/his-app:latest registry.example.com/his-app:1.0.0 docker push registry.example.com/his-app:1.0.0 ``` 3. 使用者只需准备与本仓库一致的 `docker-compose.yml` 和环境变量,执行: ```bash docker compose pull docker compose up -d ``` ## 常见问题 - **Composer 安装失败**:镜像强制使用官方源,请确认外网访问正常或配置代理。 - **MySQL 启动慢导致迁移失败**:提升 `DB_WAIT_TIMEOUT`,或在 `app.env` 内设置 `RUN_MIGRATIONS=false` 后手动执行 `make artisan migrate`。 - **升级代码**:执行 `docker compose build --no-cache app && make restart`,即可重新拉取最新仓库并部署。