# skiff-stack **Repository Path**: chazzorg/skiff-stack ## Basic Information - **Project Name**: skiff-stack - **Description**: skiff-stack 是一套专为 Laravel 打造的「轻舟级」Docker 部署脚本和配置模板。极简PHP-FPM镜像配合可选的 Nginx 容器或宿主机 Nginx,实现 10 分钟内拉起完整生产环境。所有可变项(PHP 版本、扩展、端口、站点目录)都集中在 .env,一行即可切换。远程 MySQL / Redis、宿主机 cron 与 Supervisor 都能原地复用,不做侵入式改动。 - **Primary Language**: Docker - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-29 - **Last Updated**: 2025-07-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # skiff-stack > **超轻量级、基于 `.env` 的 Docker 工具包,专为现代化 Laravel 生产环境设计。** > 组件链:Nginx ↔ PHP-FPM ↔ Horizon,支持远程 MySQL/Redis。 ## 介绍 skiff-stack 是一套专为 Laravel 打造的「轻舟级」Docker 部署脚本和配置模板。它将 PHP-FPM、Horizon 队列、Scheduler 统合到同一镜像,配合可选的 Nginx 容器或宿主机 Nginx,实现 10 分钟内拉起完整生产环境。所有可变项(PHP 版本、扩展、端口、站点目录)都集中在 .env,一行即可切换。远程 MySQL / Redis、宿主机 cron 与 Supervisor 都能原地复用,不做侵入式改动。 --- ## ✨ 核心优势 | 特性 | 说明 | |---------------------|----------------------------------------------------------------------| | **`.env` 统一管理** | 修改 `PHP_VERSION`、`PHP_EXTENSIONS`、`PHP_PORT` 后,执行 `docker compose up -d --build` 即可生效 | | **单镜像多职责** | `app`(Web)/`horizon`(队列)/`scheduler`(定时任务) 复用同一镜像,构建极速 | | **Horizon 队列管理**| 可视化监控 + 自动伸缩 + Slack 告警,由 Supervisor 托管运行 | | **灵活兼容宿主机** | 支持容器化 Nginx & Supervisor,也可使用宿主机自带Nginx和工具;`crontab` 仍可调度任务 | | **轻量化无依赖** | 远程 MySQL/Redis 不占用宿主机端口;镜像体积 < 130 MB | --- ## 🗂️ 目录结构 ``` skiff-stack/ ├── docker/ │ └── php/ # Dockerfile 与 php.ini 配置 ├── supervisor/ # Horizon 配置模板示例 ├── nginx/ # 站点配置模板示例 ├── scripts/ # 工具脚本 (laravel-artisan.sh等) ├── docker-compose.yml # 服务栈配置 └── .env # 核心配置文件 ``` --- ## 🚀 部署流程(单机版) **前提**:宿主机已安装 **Docker ≥ 20.10**,可访问远程 MySQL/Redis ```bash 1. 克隆项目并配置 .env git clone https://github.com/your-org/skiff-stack.git cd skiff-stack cp .env.example .env 修改以下参数: PHP_VERSION=8.3 # PHP 版本 PHP_EXTENSIONS="pdo_mysql intl opcache sockets bcmath pcntl" #redis已默认安装 PHP_PORT=9000 # PHP 对外暴露端口 SITE_DIR=/var/www # nginx挂载网站目录 APP_DIR=./www # 本地网站目录 NETWORK_NAME=nginx_name # 指定容器网络,可选 2. 构建并启动PHP服务 docker compose up -d --build 3. 配置Nginx sudo ln -s $(pwd)/docker/nginx/sites/app.top.conf /etc/nginx/conf.d/ sudo nginx -s reload 4. 配置Supervisor托管Horizon,可选 sudo ln -s $(pwd)/supervisor/horizon.conf.template /etc/supervisor/conf.d/horizon.conf sudo supervisorctl reread && sudo supervisorctl update 5. 添加定时任务,可选 * * * * * $(pwd)/scripts/laravel-artisan.sh schedule:run >> /var/log/laravel-schedule.log 2>&1 ``` **访问服务**: - `http://app.com/` → Laravel应用 - `http://app.com/horizon` → Horizon队列面板 --- ## ⚙️ 核心环境变量 (.env) | 键 | 示例值 | 说明 | |-------------------|---------------------|-----------------------------| | `PHP_VERSION` | `8.3` | PHP主版本 | | `PHP_EXTENSIONS` | `pdo_mysql intl` | PHP自定义扩展 | | `PHP_PORT` | `9015` | PHP-FPM对外暴露端口,同一容器网络使用9000端口 | | `SITE_DIR` | `/var/www` | 容器内代码根目录和nginx挂载网站目录一致 | | `APP_DIR` | `code/www` | 本地代码根目录 | | `NETWORK_NAME` | `net_name` | 使用nginx容器部署时,应指定为nginx容器的网络 | --- ## 🛡️ 注意事项 | 类别 | 要点 | |-------------------|----------------------------------------------------------------------| | **目录权限** | `网站和脚本权限 chown -R 1000:1000 scripts storage/ bootstrap/cache/` | | **Nginx配置** | `fastcgi_pass laravel-fpm:9000;` 或 `fastcgi_pass 127.0.0.1:9000;` | | **Horizon热重启** | `./scripts/docker-artisan.sh 应用网站 horizon:terminate` | | **快速运行命令** | `./scripts/docker-artisan.sh 应用网站 cache:clear xxx ` | --- ## 📌 常见问题
1. 如何容器化 Nginx? 在 `docker-compose.yml` 中添加: ```yaml services: web: image: nginx:alpine ports: ["80:80"] volumes: - ./nginx:/etc/nginx - ${APP_DIR}:${SITE_DIR} networks: ["skiff-net"] ``` Nginx 配置中使用 `fastcgi_pass laravel-fpm:9000;`
2. 如何切换 PHP 版本? 修改 `.env` 后重建: ```bash # 示例:切换到PHP 8.2 PHP_VERSION=8.2 docker compose build --no-cache app docker compose up -d ```
3. 开发环境如何连接宿主机 MySQL? 将 `.env` 中的 `DB_HOST` 改为 **`host.docker.internal`** (Docker自动解析宿主机IP) ```env DB_HOST=host.docker.internal ```
4. 如何查看容器网络组和修改php配置? 将 `.env` 中的 `DB_HOST` 改为 **`host.docker.internal`** (Docker自动解析宿主机IP) ```bash # 查看docker网络 docker network ls # 修改php配置 docker cp docker/php/www.conf laravel-fpm:/usr/local/etc/php-fpm.d/ docker compose restart app ```
--- ⛵️ **skiff-stack 助您轻量启航,高效部署!** ```