# 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 助您轻量启航,高效部署!**
```