# ShopXO 本地开发环境部署

> 部署时间：2026-04-14
> 适用平台：macOS (Intel/Apple Silicon M1-M3)

---

## 一、快速启动

### 前提条件

- Docker Desktop（macOS）
- ShopXO 源码（本仓库已克隆）

### 一键启动

```bash
cd ~/WorkSpace/shopxo-env
./start.sh
```

启动后访问：**http://localhost:10000**

### 首次安装

1. 浏览器打开 http://localhost:10000
2. 按向导填写：

| 配置项 | 值 |
|---|---|
| 数据库地址 | `mysqldb` |
| 端口 | `3306` |
| 数据库名 | `vrticket` |
| 用户名 | `shopxo_user` |
| 密码 | `shopxo_pass_2024` |

3. 完成安装后，后台入口文件名会被随机化为 `admin{随机6位}.php`（如 `adminufgeyw.php`），记录下来备用。

### 停止环境

```bash
docker compose -f ~/WorkSpace/shopxo-env/docker-compose.yml down
```

---

## 二、目录结构

```
~/WorkSpace/shopxo-env/
├── docker-compose.yml   # 容器编排配置
├── .env                # 环境变量（数据库密码）
├── start.sh            # 启动脚本
├── etc/
│   ├── nginx/          # nginx 配置
│   ├── php/            # PHP 配置
│   └── db/             # MySQL 配置
└── logs/               # 日志目录（待创建）
```

**ShopXO 源码挂载位置**：
- 容器内：`/var/www/html`
- 本地： `${SHOPXO_SRC}` 环境变量指向的目录

---

## 三、容器说明

| 容器名 | 镜像 | 端口 | 说明 |
|---|---|---|---|
| `shopxo-web` | nginx:latest | 10000→80 | Web 服务器 |
| `shopxo-php` | nanoninja/php-fpm:8.1 | 9000 (内部) | PHP-FPM |
| `shopxo-mysql` | mysql:8.0 | 10001→3306 | 数据库 |

### PHP 扩展（已预装）

```
pdo_mysql ✅  curl ✅  gd ✅
mbstring ✅  openssl ✅  zip ✅
```

### 修改代码后

代码通过绑定挂载直接挂到容器内，**修改本地文件立即生效**，无需重启容器。

如需重启 PHP：
```bash
docker compose -f ~/WorkSpace/shopxo-env/docker-compose.yml restart php
```

---

## 四、日志查看

```bash
# 查看所有容器日志
docker compose -f ~/WorkSpace/shopxo-env/docker-compose.yml logs -f

# 仅看 PHP 日志
docker compose -f ~/WorkSpace/shopxo-env/docker-compose.yml logs -f php

# 仅看 MySQL 日志
docker compose -f ~/WorkSpace/shopxo-env/docker-compose.yml logs -f mysqldb
```

---

## 五、数据库连接

从容器内连接（PHP 连接 MySQL）：
```
主机: mysqldb（容器网络名）
端口: 3306
用户: shopxo_user
密码: shopxo_pass_2024
```

从宿主机连接（数据库工具）：
```
主机: localhost
端口: 10001
用户: root
密码: shopxo_root_2024
```

---

## 六、修改 ShopXO 源码路径

默认挂载到：
```
/Users/bigemon/WorkSpace/vr-shopxo-plugin/shopxo
```

如需切换到其他目录，修改 `~/workspace/shopxo-env/.env`：
```
SHOPXO_SRC=/你的/路径/shopxo-src
```

然后重启：
```bash
docker compose -f ~/WorkSpace/shopxo-env/docker-compose.yml restart
```

---

## 七、已知问题

### M1/M2/M3 Mac ARM64 兼容

`nanoninja/php-fpm:8.1` 镜像为 AMD64，通过 Rosetta2 模拟运行。功能正常，但性能略低于原生 ARM64 镜像。

**未来可选方案**：如有性能需求，可研究支持 ARM64 的 PHP-FPM 镜像（如 `php:8.1-fpm-alpine`）。

### MySQL 配置文件

`etc/db/my.cnf` 已针对 MySQL 8.0 优化，移除了 `NO_AUTO_CREATE_USER`（MySQL 8.0 已移除）。

---

## 八、环境完整性验证

```bash
# 1. 检查容器运行状态
docker ps --filter "name=shopxo"

# 2. 验证 PHP
docker exec shopxo-php php -v

# 3. 验证 MySQL 连接
docker exec shopxo-php php -r "new PDO('mysql:host=mysqldb', 'shopxo_user', 'shopxo_pass_2024');"

# 4. 验证 Web 访问
curl -s -o /dev/null -w "%{http_code}" http://localhost:10000/
# 期望输出: 302 (重定向到安装向导) 或 200
```
