Compare commits
52 Commits
feat-wxwor
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| fd40367741 | |||
| 2eebed47f7 | |||
| 1f60f84bc3 | |||
| 0f1ef3757f | |||
| b195da84dd | |||
| febf614e13 | |||
| 8cc352621d | |||
| bd53937ead | |||
| 54952f68ef | |||
| 3fef52081a | |||
| 37f11d0eeb | |||
| 6088be551c | |||
| 46f0e55040 | |||
| 338b33f52c | |||
| 1d5ea6acd7 | |||
| 6b1db82a76 | |||
| 1e4d8f20cd | |||
| c68903223b | |||
| 4caaf0b9f7 | |||
| b6e77071f1 | |||
| ad9aec21c5 | |||
| 8301091cd8 | |||
| 8a8e11414f | |||
| 46135002f9 | |||
| 72f6b341a1 | |||
| 0cb2dfa647 | |||
| 0443cc46ec | |||
| 85cf52b0e4 | |||
| c7aaa1bd16 | |||
| 0519879ebb | |||
| f461fe93f0 | |||
| 2eb98efe61 | |||
| 866ca8d938 | |||
| 267cfa12a2 | |||
| d7df9293bb | |||
| 604917b56c | |||
| 840ce860ea | |||
| 04e1735028 | |||
| ba829c4f53 | |||
| b266023afc | |||
| 23abd0496b | |||
| dffb2563be | |||
| 80998fba70 | |||
| 1f65bb61dd | |||
| 9e044672ee | |||
| 989494af6d | |||
| 5d8c3ba4ce | |||
| a973ce720e | |||
| 218d405f56 | |||
| 2d07082b81 | |||
| 15720c6a62 | |||
| 224c2a3117 |
3
.env
3
.env
@@ -7,8 +7,6 @@ APP_ENV=development
|
|||||||
# PHP/PHP-FPM 配置
|
# PHP/PHP-FPM 配置
|
||||||
PHP_VERSION=7.4
|
PHP_VERSION=7.4
|
||||||
PHP_FPM_VERSION=7.4-fpm
|
PHP_FPM_VERSION=7.4-fpm
|
||||||
PHP_FPM_PORT=9100
|
|
||||||
XDEBUG_POST=9103
|
|
||||||
|
|
||||||
# 数据库配置
|
# 数据库配置
|
||||||
MYSQL_ROOT_HOST=%
|
MYSQL_ROOT_HOST=%
|
||||||
@@ -23,5 +21,4 @@ REDIS_PORT=6399
|
|||||||
|
|
||||||
# Nginx 配置
|
# Nginx 配置
|
||||||
NGINX_PORT=8010
|
NGINX_PORT=8010
|
||||||
NGINX_SSL_PORT=8012
|
|
||||||
|
|
||||||
|
|||||||
24
.env.development
Normal file
24
.env.development
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# 项目配置, 请根据实际情况修改
|
||||||
|
PROJECT_NAME=newshop
|
||||||
|
|
||||||
|
# ThinkPHP 6.x 配置, 请根据实际情况修改
|
||||||
|
APP_ENV=development
|
||||||
|
|
||||||
|
# PHP/PHP-FPM 配置
|
||||||
|
PHP_VERSION=7.4
|
||||||
|
PHP_FPM_VERSION=7.4-fpm
|
||||||
|
|
||||||
|
# 数据库配置
|
||||||
|
MYSQL_ROOT_HOST=%
|
||||||
|
MYSQL_DATABASE=shop_mallnew
|
||||||
|
MYSQL_USER=shop_mallnew
|
||||||
|
MYSQL_PASSWORD=shop_mallnew
|
||||||
|
MYSQL_PORT=3326
|
||||||
|
|
||||||
|
# Redis 绑定端口及密码
|
||||||
|
REDIS_PASSWORD=luckyshop123!@#
|
||||||
|
REDIS_PORT=6499
|
||||||
|
|
||||||
|
# Nginx 暴漏端口
|
||||||
|
NGINX_PORT=8050
|
||||||
|
|
||||||
13
.env.example
13
.env.example
@@ -1,24 +1,23 @@
|
|||||||
# 项目配置, 请根据实际情况修改
|
# 项目配置, 请根据实际情况修改
|
||||||
PROJECT_NAME=newshop
|
PROJECT_NAME=newshop
|
||||||
|
|
||||||
|
# ThinkPHP 6.x 配置, 请根据实际情况修改
|
||||||
|
APP_ENV=development
|
||||||
|
|
||||||
# PHP/PHP-FPM 配置
|
# PHP/PHP-FPM 配置
|
||||||
PHP_VERSION=7.4
|
PHP_VERSION=7.4
|
||||||
PHP_FPM_VERSION=7.4-fpm
|
PHP_FPM_VERSION=7.4-fpm
|
||||||
PHP_FPM_PORT=9000
|
|
||||||
XDEBUG_POST=9003
|
|
||||||
|
|
||||||
# 数据库配置
|
# 数据库配置
|
||||||
MYSQL_ROOT_HOST=%
|
MYSQL_ROOT_HOST=%
|
||||||
MYSQL_DATABASE=shop_mallnew
|
MYSQL_DATABASE=shop_mallnew
|
||||||
MYSQL_USER=shop_mallnew
|
MYSQL_USER=shop_mallnew
|
||||||
MYSQL_PASSWORD=shop_mallnew
|
MYSQL_PASSWORD=shop_mallnew
|
||||||
MYSQL_PORT=3306
|
MYSQL_PORT=3316
|
||||||
|
|
||||||
# Redis 配置
|
# Redis 配置
|
||||||
REDIS_PASSWORD=luckyshop123!@#
|
REDIS_PASSWORD=luckyshop123!@#
|
||||||
REDIS_PORT=6379
|
REDIS_PORT=6399
|
||||||
|
|
||||||
# Nginx 配置
|
# Nginx 配置
|
||||||
NGINX_PORT=80
|
NGINX_PORT=8010
|
||||||
NGINX_SSL_PORT=443
|
|
||||||
|
|
||||||
|
|||||||
24
.env.production
Normal file
24
.env.production
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# 项目配置, 请根据实际情况修改
|
||||||
|
PROJECT_NAME=newshop
|
||||||
|
|
||||||
|
# ThinkPHP 6.x 配置, 请根据实际情况修改
|
||||||
|
APP_ENV=production
|
||||||
|
|
||||||
|
# PHP/PHP-FPM 配置
|
||||||
|
PHP_VERSION=7.4
|
||||||
|
PHP_FPM_VERSION=7.4-fpm
|
||||||
|
|
||||||
|
# 数据库配置
|
||||||
|
MYSQL_ROOT_HOST=%
|
||||||
|
MYSQL_DATABASE=shop_mallnew
|
||||||
|
MYSQL_USER=shop_mallnew
|
||||||
|
MYSQL_PASSWORD=shop_mallnew
|
||||||
|
MYSQL_PORT=3926
|
||||||
|
|
||||||
|
# Redis 绑定端口及密码
|
||||||
|
REDIS_PASSWORD=luckyshop123!@#
|
||||||
|
REDIS_PORT=6829
|
||||||
|
|
||||||
|
# Nginx 暴漏端口
|
||||||
|
NGINX_PORT=8858
|
||||||
|
|
||||||
24
.env.staging
Normal file
24
.env.staging
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# 项目配置, 请根据实际情况修改
|
||||||
|
PROJECT_NAME=newshop
|
||||||
|
|
||||||
|
# ThinkPHP 6.x 配置, 请根据实际情况修改
|
||||||
|
APP_ENV=staging
|
||||||
|
|
||||||
|
# PHP/PHP-FPM 配置
|
||||||
|
PHP_VERSION=7.4
|
||||||
|
PHP_FPM_VERSION=7.4-fpm
|
||||||
|
|
||||||
|
# 数据库配置
|
||||||
|
MYSQL_ROOT_HOST=%
|
||||||
|
MYSQL_DATABASE=shop_mallnew
|
||||||
|
MYSQL_USER=shop_mallnew
|
||||||
|
MYSQL_PASSWORD=shop_mallnew
|
||||||
|
MYSQL_PORT=3826
|
||||||
|
|
||||||
|
# Redis 绑定端口及密码
|
||||||
|
REDIS_PASSWORD=luckyshop123!@#
|
||||||
|
REDIS_PORT=6809
|
||||||
|
|
||||||
|
# Nginx 暴漏端口
|
||||||
|
NGINX_PORT=8854
|
||||||
|
|
||||||
24
.env.test
Normal file
24
.env.test
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# 项目配置, 请根据实际情况修改
|
||||||
|
PROJECT_NAME=newshop
|
||||||
|
|
||||||
|
# ThinkPHP 6.x 配置, 请根据实际情况修改
|
||||||
|
APP_ENV=test
|
||||||
|
|
||||||
|
# PHP/PHP-FPM 配置
|
||||||
|
PHP_VERSION=7.4
|
||||||
|
PHP_FPM_VERSION=7.4-fpm
|
||||||
|
|
||||||
|
# 数据库配置
|
||||||
|
MYSQL_ROOT_HOST=%
|
||||||
|
MYSQL_DATABASE=shop_mallnew
|
||||||
|
MYSQL_USER=shop_mallnew
|
||||||
|
MYSQL_PASSWORD=shop_mallnew
|
||||||
|
MYSQL_PORT=3346
|
||||||
|
|
||||||
|
# Redis 绑定端口及密码
|
||||||
|
REDIS_PASSWORD=luckyshop123!@#
|
||||||
|
REDIS_PORT=6799
|
||||||
|
|
||||||
|
# Nginx 暴漏端口
|
||||||
|
NGINX_PORT=8360
|
||||||
|
|
||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -18,6 +18,9 @@ __pycache__
|
|||||||
.idea
|
.idea
|
||||||
.vscode
|
.vscode
|
||||||
|
|
||||||
|
# 环境变量
|
||||||
|
.env
|
||||||
|
|
||||||
# 源码结构
|
# 源码结构
|
||||||
debug.txt
|
debug.txt
|
||||||
.travis.yml
|
.travis.yml
|
||||||
|
|||||||
138
README.md
Normal file
138
README.md
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
# 在线商城PHP项目
|
||||||
|
|
||||||
|
## Git 分支策略
|
||||||
|
|
||||||
|
| 环境 | 推荐分支 | 备选分支 | 说明 |
|
||||||
|
|------|----------|----------|------|
|
||||||
|
| local | `dev` | `develop` | 本地开发环境 |
|
||||||
|
| development | `dev` | `development` | 开发测试环境 |
|
||||||
|
| test | `test` | `staging` | 测试环境 |
|
||||||
|
| staging | `staging` | `pre-release` | 预发布环境 |
|
||||||
|
| production | `master` | `main` | 生产环境 |
|
||||||
|
|
||||||
|
**部署建议**:
|
||||||
|
- 每个环境部署前请先切换到对应的Git分支
|
||||||
|
- 确保代码版本与目标环境匹配
|
||||||
|
- 生产环境部署前建议先在staging环境验证
|
||||||
|
|
||||||
|
## Docker 部署
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp .env.example .env.development
|
||||||
|
```
|
||||||
|
|
||||||
|
**注意**
|
||||||
|
|
||||||
|
- 在同一目录下面,执行 `docker-compose` 命令时,需要指定项目名称。用来区分不同的环境。如 `shop_local`、`shop_dev` 等。
|
||||||
|
- 本地部署时,需要将 `APP_ENV` 设置为 `local`。
|
||||||
|
- 开发环境部署时,需要将 `APP_ENV` 设置为 `development`。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 环境变量
|
||||||
|
|
||||||
|
- `APP_ENV`: 应用环境,默认值为 `development`。
|
||||||
|
|
||||||
|
## 开发环境-local 部署
|
||||||
|
|
||||||
|
**对应Git分支**: `main` 或 `develop`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 切换到本地开发分支
|
||||||
|
git checkout main # 或 develop
|
||||||
|
|
||||||
|
# 本地部署时,需要将 APP_ENV 设置为 local, 并指定 docker-compose.local.yml 文件
|
||||||
|
docker-compose --env-file .env.local -f docker-compose.local.yml up -d
|
||||||
|
# docker-compose --project-name shop_local --env-file .env.local -f docker-compose.local.yml up -d
|
||||||
|
|
||||||
|
# docker-compose down 命令,用来停止并删除容器
|
||||||
|
docker-compose -f docker-compose.local.yml down -v
|
||||||
|
# docker-compose --project-name shop_local down -v
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 开发环境-development 部署
|
||||||
|
|
||||||
|
**对应Git分支**: `dev` 或 `development`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 切换到开发分支
|
||||||
|
git checkout dev # 或 development
|
||||||
|
|
||||||
|
# 默认使用 docker-compose.yml 文件
|
||||||
|
docker-compose --project-name shop_development --env-file .env.development up -d
|
||||||
|
|
||||||
|
# docker-compose down 命令,用来停止并删除容器
|
||||||
|
docker-compose --project-name shop_development down -v
|
||||||
|
```
|
||||||
|
|
||||||
|
## 开发环境-test 部署 (测试环境)
|
||||||
|
|
||||||
|
**对应Git分支**: `test` 或 `staging`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 切换到测试分支
|
||||||
|
git checkout test # 或 staging
|
||||||
|
|
||||||
|
# 默认使用 docker-compose.yml 文件
|
||||||
|
docker-compose --project-name shop_test --env-file .env.test up -d
|
||||||
|
|
||||||
|
# docker-compose down 命令,用来停止并删除容器
|
||||||
|
docker-compose --project-name shop_test down -v
|
||||||
|
```
|
||||||
|
|
||||||
|
## 开发环境-staging 部署(预发布环境)
|
||||||
|
|
||||||
|
**对应Git分支**: `staging` 或 `pre-release`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 切换到预发布分支
|
||||||
|
git checkout staging # 或 pre-release
|
||||||
|
|
||||||
|
# 默认使用 docker-compose.yml 文件
|
||||||
|
docker-compose --project-name shop_staging --env-file .env.staging up -d
|
||||||
|
|
||||||
|
# docker-compose down 命令,用来停止并删除容器
|
||||||
|
docker-compose --project-name shop_staging down -v
|
||||||
|
```
|
||||||
|
|
||||||
|
## 生产环境-production 部署
|
||||||
|
|
||||||
|
**对应Git分支**: `master` 或 `main` 或 `production`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 切换到生产分支
|
||||||
|
git checkout main
|
||||||
|
|
||||||
|
# 确保代码是最新的生产版本
|
||||||
|
git pull origin main
|
||||||
|
|
||||||
|
# 默认使用 docker-compose.yml 文件
|
||||||
|
docker-compose --project-name shop_production --env-file .env.production up -d
|
||||||
|
|
||||||
|
# docker-compose down 命令,用来停止并删除容器
|
||||||
|
docker-compose --project-name shop_production down -v
|
||||||
|
```
|
||||||
|
|
||||||
|
## 便捷部署脚本
|
||||||
|
|
||||||
|
### 环境切换与部署脚本
|
||||||
|
|
||||||
|
- `deploy.sh` 脚本:
|
||||||
|
|
||||||
|
|
||||||
|
### 使用方法
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 赋予执行权限
|
||||||
|
chmod +x deploy.sh
|
||||||
|
|
||||||
|
# 部署到开发环境
|
||||||
|
./deploy.sh development
|
||||||
|
|
||||||
|
# 部署到测试环境
|
||||||
|
./deploy.sh test
|
||||||
|
|
||||||
|
# 部署到生产环境
|
||||||
|
./deploy.sh production
|
||||||
|
```
|
||||||
100
deploy.sh
Normal file
100
deploy.sh
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# deploy.sh - 环境切换与部署脚本
|
||||||
|
# 使用方法: ./deploy.sh <environment>
|
||||||
|
# 示例: ./deploy.sh development
|
||||||
|
|
||||||
|
ENVIRONMENT=$1
|
||||||
|
PROJECT_NAME="shop_${ENVIRONMENT}"
|
||||||
|
BRANCH=""
|
||||||
|
COMPOSE_FILE="docker-compose.yml"
|
||||||
|
ENV_FILE=".env.${ENVIRONMENT}"
|
||||||
|
|
||||||
|
# 现实运行中的服务器网站,数据库备份目录
|
||||||
|
RUN_SERVER_WEB_ROOT="/data/wwwroot/shop-projects"
|
||||||
|
RUN_SERVER_DB_BACKUP_DIR="/data/backup/shop-projects"
|
||||||
|
|
||||||
|
case $ENVIRONMENT in
|
||||||
|
"local")
|
||||||
|
BRANCH="dev"
|
||||||
|
COMPOSE_FILE="docker-compose.local.yml"
|
||||||
|
ENV_FILE=".env.local"
|
||||||
|
;;
|
||||||
|
"development")
|
||||||
|
BRANCH="dev"
|
||||||
|
;;
|
||||||
|
"test")
|
||||||
|
BRANCH="test"
|
||||||
|
;;
|
||||||
|
"staging")
|
||||||
|
BRANCH="staging"
|
||||||
|
;;
|
||||||
|
"production")
|
||||||
|
BRANCH="main"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "错误: 不支持的环境 '$ENVIRONMENT'"
|
||||||
|
echo "支持的环境: local, development, test, staging, production"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "=========================================="
|
||||||
|
echo "部署环境: $ENVIRONMENT"
|
||||||
|
echo "项目名称: $PROJECT_NAME"
|
||||||
|
echo "Git分支: $BRANCH"
|
||||||
|
echo "配置文件: $COMPOSE_FILE"
|
||||||
|
echo "环境文件: $ENV_FILE"
|
||||||
|
echo "=========================================="
|
||||||
|
|
||||||
|
# 切换分支
|
||||||
|
echo "切换到Git分支: $BRANCH"
|
||||||
|
git checkout $BRANCH
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "错误: 无法切换到分支 $BRANCH"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 拉取最新代码
|
||||||
|
echo "拉取最新代码..."
|
||||||
|
git pull origin $BRANCH
|
||||||
|
|
||||||
|
# 根据不同的环境,执行不同的操作
|
||||||
|
# 预发布环境、生产环境都需要使用运行服务上的用户文件,将用户文件复制到指定目录
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 根据不同的环境,执行不同的操作
|
||||||
|
# 预发布环境、生产环境都需要还原数据库,使用数据库备份文件,并尝试使用数据库升级
|
||||||
|
if [ "$ENVIRONMENT" = "local" ]; then
|
||||||
|
echo "本地环境,跳过数据库还原"
|
||||||
|
else
|
||||||
|
echo "还原数据库..."
|
||||||
|
# 还原数据库
|
||||||
|
docker-compose --project-name $PROJECT_NAME exec -T db bash -c "mysql -uroot -p$DB_ROOT_PASSWORD shop < $DB_BACKUP_DIR/shop.sql"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "错误: 数据库还原失败"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 尝试使用数据库升级脚本
|
||||||
|
echo "尝试使用数据库升级..."
|
||||||
|
docker-compose --project-name $PROJECT_NAME exec -T db bash -c "php artisan migrate --force"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "数据库升级失败"
|
||||||
|
else
|
||||||
|
echo "数据库升级成功"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 构建并启动容器
|
||||||
|
echo "构建并启动Docker容器..."
|
||||||
|
if [ "$ENVIRONMENT" = "local" ]; then
|
||||||
|
docker-compose --env-file $ENV_FILE -f $COMPOSE_FILE up -d
|
||||||
|
else
|
||||||
|
docker-compose --project-name $PROJECT_NAME --env-file $ENV_FILE up -d
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "部署完成!"
|
||||||
|
echo "查看容器状态: docker-compose --project-name $PROJECT_NAME ps"
|
||||||
|
echo "查看日志: docker-compose --project-name $PROJECT_NAME logs -f"
|
||||||
@@ -14,7 +14,7 @@ services:
|
|||||||
build:
|
build:
|
||||||
context: ./docker/php
|
context: ./docker/php
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
container_name: ${PROJECT_NAME}_php
|
container_name: ${PROJECT_NAME}_${APP_ENV}_php
|
||||||
restart: always
|
restart: always
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- "host.docker.internal:host-gateway" # 支持主机名解析
|
- "host.docker.internal:host-gateway" # 支持主机名解析
|
||||||
@@ -25,23 +25,20 @@ services:
|
|||||||
# 不然,ThinkPHP 6.x 系列,会只加载 .env 文件,而不会加载 .env.local 文件,导致 .env.local 文件中的配置不会生效
|
# 不然,ThinkPHP 6.x 系列,会只加载 .env 文件,而不会加载 .env.local 文件,导致 .env.local 文件中的配置不会生效
|
||||||
APP_ENV: ${APP_ENV:-development}
|
APP_ENV: ${APP_ENV:-development}
|
||||||
APP_DEBUG: ${APP_DEBUG:-true}
|
APP_DEBUG: ${APP_DEBUG:-true}
|
||||||
XDEBUG_CONFIG: ${XDEBUG_CONFIG:-client_host=host.docker.internal client_port=9003}
|
# PHP应用根目录(可选,默认 /var/www/html)
|
||||||
PHP_IDE_CONFIG: serverName=docker-php
|
PHP_APP_ROOT: ${PHP_APP_ROOT:-/var/www/html}
|
||||||
ports:
|
# 用户ID映射(可选,用于解决挂载权限问题)
|
||||||
- "${PHP_FPM_PORT:-9000}:9000" # PHP-FPM
|
USER_ID: ${USER_ID:-33}
|
||||||
- "${XDEBUG_POST:-9003}:9003" # Xdebug
|
GROUP_ID: ${GROUP_ID:-33}
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/var/www/all_source
|
- ./src:/var/www/html:rw
|
||||||
- ./src:/var/www/html
|
|
||||||
# 更新下载源列表以加速apt-get
|
# 更新下载源列表以加速apt-get
|
||||||
- ./docker/debian/sources.list:/etc/apt/sources.list:ro
|
- ./docker/debian/sources.list:/etc/apt/sources.list:ro
|
||||||
- ./docker/php/php.ini:/usr/local/etc/php/php.ini:ro
|
- ./docker/php/php.ini:/usr/local/etc/php/php.ini:ro
|
||||||
- ./docker/php/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini
|
|
||||||
- xdebug_logs:/tmp # Xdebug 日志目录
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "bash", "-c", "curl -f http://localhost:9000/status && ps aux | grep '[p]hp think cron:schedule'"]
|
test: ["CMD", "bash", "-c", "curl -f http://localhost:9000/status"]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 3
|
retries: 3
|
||||||
@@ -49,18 +46,18 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- sass-platform-net
|
- sass-platform-net
|
||||||
labels:
|
labels:
|
||||||
- "com.docker.compose.project.working_dir=${PROJECT_NAME}"
|
- "com.docker.compose.project.working_dir=${PROJECT_NAME}_${APP_ENV}"
|
||||||
|
|
||||||
nginx:
|
nginx:
|
||||||
build:
|
build:
|
||||||
context: ./docker/nginx
|
context: ./docker/nginx
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
container_name: ${PROJECT_NAME}_nginx
|
container_name: ${PROJECT_NAME}_${APP_ENV}_nginx
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "${NGINX_PORT:-80}:80"
|
- "${NGINX_PORT:-80}:80"
|
||||||
- "${NGINX_SSL_PORT:-443}:443"
|
|
||||||
volumes:
|
volumes:
|
||||||
|
# 挂载项目代码到 Nginx 容器中
|
||||||
- ./src:/var/www/html:rw
|
- ./src:/var/www/html:rw
|
||||||
# 更新下载源列表以加速apt-get
|
# 更新下载源列表以加速apt-get
|
||||||
- ./docker/debian/sources.list:/etc/apt/sources.list:ro
|
- ./docker/debian/sources.list:/etc/apt/sources.list:ro
|
||||||
@@ -72,11 +69,11 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- sass-platform-net
|
- sass-platform-net
|
||||||
labels:
|
labels:
|
||||||
- "com.docker.compose.project.working_dir=${PROJECT_NAME}"
|
- "com.docker.compose.project.working_dir=${PROJECT_NAME}_${APP_ENV}"
|
||||||
|
|
||||||
db:
|
db:
|
||||||
image: mysql:5.7.44
|
image: mysql:5.7.44
|
||||||
container_name: ${PROJECT_NAME}_mysql
|
container_name: ${PROJECT_NAME}_${APP_ENV}_mysql
|
||||||
environment:
|
environment:
|
||||||
<<: *shared-api-env
|
<<: *shared-api-env
|
||||||
volumes:
|
volumes:
|
||||||
@@ -93,12 +90,12 @@ services:
|
|||||||
- --collation-server=utf8mb4_unicode_ci
|
- --collation-server=utf8mb4_unicode_ci
|
||||||
- --innodb_buffer_pool_size=256M
|
- --innodb_buffer_pool_size=256M
|
||||||
labels:
|
labels:
|
||||||
- "com.docker.compose.project.working_dir=${PROJECT_NAME}"
|
- "com.docker.compose.project.working_dir=${PROJECT_NAME}_${APP_ENV}"
|
||||||
|
|
||||||
# Redis 服务(可选)
|
# Redis 服务(可选)
|
||||||
redis:
|
redis:
|
||||||
image: redis:8.2
|
image: redis:8.2
|
||||||
container_name: ${PROJECT_NAME}_redis
|
container_name: ${PROJECT_NAME}_${APP_ENV}_redis
|
||||||
environment:
|
environment:
|
||||||
REDIS_PASSWORD: ${REDIS_PASSWORD:-luckyshop123!@#}
|
REDIS_PASSWORD: ${REDIS_PASSWORD:-luckyshop123!@#}
|
||||||
REDISCLI_AUTH: ${REDIS_PASSWORD:-luckyshop123!@#}
|
REDISCLI_AUTH: ${REDIS_PASSWORD:-luckyshop123!@#}
|
||||||
@@ -111,13 +108,26 @@ services:
|
|||||||
- sass-platform-net
|
- sass-platform-net
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
labels:
|
labels:
|
||||||
- "com.docker.compose.project.working_dir=${PROJECT_NAME}"
|
- "com.docker.compose.project.working_dir=${PROJECT_NAME}_${APP_ENV}"
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
mysql_db_data:
|
mysql_db_data:
|
||||||
|
name: ${PROJECT_NAME}_${APP_ENV}_mysql_db_data
|
||||||
|
driver: local
|
||||||
|
driver_opts:
|
||||||
|
type: none
|
||||||
|
o: bind
|
||||||
|
device: ./docker/mysql_db_data/${APP_ENV}
|
||||||
redis_data:
|
redis_data:
|
||||||
xdebug_logs:
|
name: ${PROJECT_NAME}_${APP_ENV}_redis_data
|
||||||
|
driver: local
|
||||||
|
driver_opts:
|
||||||
|
type: none
|
||||||
|
o: bind
|
||||||
|
device: ./docker/redis_data/${APP_ENV}
|
||||||
|
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
sass-platform-net:
|
sass-platform-net:
|
||||||
|
name: ${PROJECT_NAME}_${APP_ENV}_net
|
||||||
driver: bridge
|
driver: bridge
|
||||||
File diff suppressed because one or more lines are too long
@@ -2,6 +2,8 @@
|
|||||||
# 字符集设置
|
# 字符集设置
|
||||||
character-set-server=utf8mb4
|
character-set-server=utf8mb4
|
||||||
collation-server=utf8mb4_unicode_ci
|
collation-server=utf8mb4_unicode_ci
|
||||||
|
init_connect='SET NAMES utf8mb4'
|
||||||
|
|
||||||
|
|
||||||
# 连接设置
|
# 连接设置
|
||||||
max_connections=100
|
max_connections=100
|
||||||
@@ -22,6 +24,3 @@ sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
|
|||||||
|
|
||||||
[client]
|
[client]
|
||||||
default-character-set=utf8mb4
|
default-character-set=utf8mb4
|
||||||
|
|
||||||
[mysql]
|
|
||||||
default-character-set=utf8mb4
|
|
||||||
9
docker/mysql_db_data/.gitignore
vendored
Normal file
9
docker/mysql_db_data/.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# 忽略所有文件
|
||||||
|
*
|
||||||
|
|
||||||
|
# 只保留指定的 .gitkeep 文件
|
||||||
|
!.gitignore
|
||||||
|
!development/.gitkeep
|
||||||
|
!test/.gitkeep
|
||||||
|
!production/.gitkeep
|
||||||
|
!staging/.gitkeep
|
||||||
0
docker/mysql_db_data/.gitkeep
Normal file
0
docker/mysql_db_data/.gitkeep
Normal file
@@ -3,27 +3,19 @@ FROM nginx:alpine
|
|||||||
# 删除默认配置
|
# 删除默认配置
|
||||||
RUN rm /etc/nginx/conf.d/default.conf
|
RUN rm /etc/nginx/conf.d/default.conf
|
||||||
|
|
||||||
#
|
|
||||||
# - ./.docker/nginx/conf.c:/etc/nginx/conf.c:ro
|
# 将本地 nginx 配置复制到镜像中
|
||||||
# - ./.docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
|
COPY ./conf.c/ /etc/nginx/conf.c/
|
||||||
# - ./.docker/nginx/sites-enabled:/etc/nginx/sites-enabled:ro
|
|
||||||
# 将本地 nginx 配置复制到镜像中并设置为只读
|
|
||||||
COPY ./conf.c /etc/nginx/conf.c
|
|
||||||
COPY ./default.conf /etc/nginx/conf.d/default.conf
|
COPY ./default.conf /etc/nginx/conf.d/default.conf
|
||||||
COPY ./sites-enabled /etc/nginx/sites-enabled
|
COPY ./sites-enabled/ /etc/nginx/sites-enabled/
|
||||||
|
|
||||||
# 设置只读权限(文件 0444,目录及其内容 0555)
|
|
||||||
RUN chmod 0444 /etc/nginx/conf.c \
|
|
||||||
&& chmod 0444 /etc/nginx/conf.d/default.conf \
|
|
||||||
&& chmod -R 0555 /etc/nginx/sites-enabled
|
|
||||||
|
|
||||||
# 设置工作目录
|
|
||||||
WORKDIR /var/www/html
|
|
||||||
|
|
||||||
# 创建日志目录
|
|
||||||
RUN mkdir -p /var/log/nginx
|
|
||||||
|
|
||||||
# 暴露端口
|
# 暴露端口
|
||||||
EXPOSE 80 443
|
EXPOSE 80 443
|
||||||
|
|
||||||
|
# 添加在Dockerfile末尾,CMD命令之前
|
||||||
|
COPY ./entrypoint.sh /usr/local/bin/
|
||||||
|
RUN chmod +x /usr/local/bin/entrypoint.sh
|
||||||
|
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|
||||||
|
|
||||||
|
# 启动nginx
|
||||||
CMD ["nginx", "-g", "daemon off;"]
|
CMD ["nginx", "-g", "daemon off;"]
|
||||||
14
docker/nginx/conf.c/enable-websocket.conf
Normal file
14
docker/nginx/conf.c/enable-websocket.conf
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
location /ws {
|
||||||
|
proxy_pass http://php-fpm:8080; # 注意:这里用的是 Docker 服务名或容器名
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
|
||||||
|
# 可选:设置超时(WebSocket 是长连接)
|
||||||
|
proxy_read_timeout 86400s;
|
||||||
|
proxy_send_timeout 86400s;
|
||||||
|
}
|
||||||
18
docker/nginx/entrypoint.sh
Normal file
18
docker/nginx/entrypoint.sh
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "=== NGINX Docker 权限初始化 ==="
|
||||||
|
|
||||||
|
# 设置权限
|
||||||
|
chmod -R 0444 /etc/nginx/conf.c
|
||||||
|
chmod 0444 /etc/nginx/conf.d/default.conf
|
||||||
|
chmod -R 0755 /etc/nginx/sites-enabled
|
||||||
|
|
||||||
|
|
||||||
|
# 创建日志目录
|
||||||
|
mkdir -p /var/log/nginx
|
||||||
|
|
||||||
|
echo "=== NGINX Docker 权限初始化完成 ==="
|
||||||
|
|
||||||
|
# 执行原有的启动命令
|
||||||
|
exec "$@"
|
||||||
@@ -20,6 +20,9 @@
|
|||||||
# add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
|
# add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
|
||||||
# --- SSL configuration end ---
|
# --- SSL configuration end ---
|
||||||
|
|
||||||
|
# 启用 WebSocket 支持
|
||||||
|
include conf.c/enable-websocket.conf;
|
||||||
|
|
||||||
#PHP-INFO-START PHP引用配置,可以注释或修改
|
#PHP-INFO-START PHP引用配置,可以注释或修改
|
||||||
include conf.c/enable-php-74.conf;
|
include conf.c/enable-php-74.conf;
|
||||||
#PHP-INFO-END
|
#PHP-INFO-END
|
||||||
@@ -34,8 +37,19 @@
|
|||||||
}
|
}
|
||||||
# --- REWRITE-END ---
|
# --- REWRITE-END ---
|
||||||
|
|
||||||
|
# --- 子目录 hwapp 及 hwappx 的配置,请勿删除,支持子目录网站,刷新,重定位 ---
|
||||||
|
location ~ ^/hwapp/(.*)$ {
|
||||||
|
try_files $uri $uri/ /hwapp/index.html;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ ^/hwappx/([^/]+)/(.*)$ {
|
||||||
|
try_files $uri $uri/ /hwappx/$1/index.html;
|
||||||
|
}
|
||||||
|
# --- 子目录 hwapp 及 hwappx 配置结束 ---
|
||||||
|
|
||||||
|
|
||||||
#禁止访问的文件或目录
|
#禁止访问的文件或目录
|
||||||
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
|
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)$
|
||||||
{
|
{
|
||||||
return 404;
|
return 404;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
# 使用官方PHP镜像
|
|
||||||
FROM php:7.4.33-fpm-dev-newshop
|
|
||||||
|
|
||||||
# 设置工作目录
|
|
||||||
WORKDIR /var/www/html
|
|
||||||
|
|
||||||
# 暴露端口
|
|
||||||
EXPOSE 9000 9003
|
|
||||||
|
|
||||||
CMD ["php-fpm"]
|
|
||||||
@@ -27,8 +27,14 @@ RUN apt-get update && apt-get install -y \
|
|||||||
libfreetype6-dev \
|
libfreetype6-dev \
|
||||||
libjpeg62-turbo-dev \
|
libjpeg62-turbo-dev \
|
||||||
libpng-dev \
|
libpng-dev \
|
||||||
|
iputils-ping \
|
||||||
|
&& apt-get clean \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# 安装 WebSocat 完成后,清理缓存
|
||||||
|
COPY ./websocat /usr/local/bin/websocat
|
||||||
|
RUN chmod +x /usr/local/bin/websocat
|
||||||
|
|
||||||
# 安装 PHP 扩展
|
# 安装 PHP 扩展
|
||||||
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
|
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
|
||||||
&& docker-php-ext-install \
|
&& docker-php-ext-install \
|
||||||
@@ -45,9 +51,6 @@ RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
|
|||||||
# 安装 Redis 扩展
|
# 安装 Redis 扩展
|
||||||
RUN pecl install redis-5.3.7 && docker-php-ext-enable redis
|
RUN pecl install redis-5.3.7 && docker-php-ext-enable redis
|
||||||
|
|
||||||
# 安装 Xdebug(兼容 PHP 7.4 的版本)
|
|
||||||
RUN pecl install xdebug-3.1.6 && docker-php-ext-enable xdebug
|
|
||||||
|
|
||||||
# 安装Composer
|
# 安装Composer
|
||||||
COPY --from=composer:2.2.25 /usr/bin/composer /usr/bin/composer
|
COPY --from=composer:2.2.25 /usr/bin/composer /usr/bin/composer
|
||||||
|
|
||||||
@@ -56,30 +59,15 @@ RUN composer --version
|
|||||||
|
|
||||||
# 修改 PHP 配置
|
# 修改 PHP 配置
|
||||||
RUN echo "memory_limit=256M" > /usr/local/etc/php/conf.d/memory-limit.ini \
|
RUN echo "memory_limit=256M" > /usr/local/etc/php/conf.d/memory-limit.ini \
|
||||||
&& echo "upload_max_filesize=50M" >> /usr/local/etc/php/conf.d/uploads.ini \
|
&& echo "upload_max_filesize=150M" >> /usr/local/etc/php/conf.d/uploads.ini \
|
||||||
&& echo "post_max_size=50M" >> /usr/local/etc/php/conf.d/uploads.ini
|
&& echo "post_max_size=150M" >> /usr/local/etc/php/conf.d/uploads.ini
|
||||||
|
|
||||||
# 创建 Xdebug 配置
|
|
||||||
RUN echo "zend_extension=xdebug.so" > /usr/local/etc/php/conf.d/xdebug.ini
|
|
||||||
|
|
||||||
# # 使用Composer安装项目依赖(可选,根据需要启用, 更多的时候,会出错,要在容器中执行操作)
|
# # 使用Composer安装项目依赖(可选,根据需要启用, 更多的时候,会出错,要在容器中执行操作)
|
||||||
# RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
|
# RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
|
||||||
# RUN composer install --no-dev --optimize-autoloader --working-dir=/var/www/html
|
# RUN composer install --no-dev --optimize-autoloader --working-dir=/var/www/html
|
||||||
|
|
||||||
# # 创建非 root 用户
|
# 暴露端口,9000 为 PHP-FPM 端口,8080 为 WebSocket 端口
|
||||||
# RUN useradd -m -u 1000 phpuser && chown -R phpuser:phpuser /var/www/html
|
EXPOSE 9000 8080
|
||||||
|
|
||||||
# 设置权限, 防止以下目录无法写入的问题
|
|
||||||
RUN chmod -R a+rw /var/www/html/runtime
|
|
||||||
RUN chmod -R a+rw /var/www/html/uploads
|
|
||||||
RUN chmod -R a+rw /var/www/html/tmp
|
|
||||||
RUN chmod -R a+rw /var/www/html/temp
|
|
||||||
|
|
||||||
# USER phpuser
|
|
||||||
|
|
||||||
# 暴露端口
|
|
||||||
EXPOSE 9000 9003
|
|
||||||
|
|
||||||
|
|
||||||
############ 查看 cron 进程
|
############ 查看 cron 进程
|
||||||
## 查看 cron 进程
|
## 查看 cron 进程
|
||||||
@@ -95,4 +83,10 @@ EXPOSE 9000 9003
|
|||||||
#######################################
|
#######################################
|
||||||
|
|
||||||
# 启动Supervisor
|
# 启动Supervisor
|
||||||
|
# 添加在Dockerfile末尾,CMD命令之前
|
||||||
|
COPY ./entrypoint.sh /usr/local/bin/
|
||||||
|
RUN chmod +x /usr/local/bin/entrypoint.sh
|
||||||
|
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|
||||||
|
|
||||||
|
# 修改CMD命令
|
||||||
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
|
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
|
||||||
344
docker/php/entrypoint.sh
Normal file
344
docker/php/entrypoint.sh
Normal file
@@ -0,0 +1,344 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 移除 set -e 以便更好的错误控制
|
||||||
|
|
||||||
|
echo "=== Web应用权限初始化 ==="
|
||||||
|
|
||||||
|
# 定义应用根目录,优先使用环境变量,否则使用默认值
|
||||||
|
APP_ROOT="${PHP_APP_ROOT:-/var/www/html}"
|
||||||
|
|
||||||
|
echo "使用应用根目录: $APP_ROOT"
|
||||||
|
|
||||||
|
# 如果应用根目录不存在,则跳过权限设置
|
||||||
|
if [ ! -d "$APP_ROOT" ]; then
|
||||||
|
echo "❌ 应用根目录:'$APP_ROOT'不存在,跳过权限设置"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 创建统一的Web组并配置所有用户(最高效的权限管理)
|
||||||
|
configure_web_users() {
|
||||||
|
# 常见Web服务器用户列表
|
||||||
|
WEB_USERS=("www-data" "www" "apache" "nginx")
|
||||||
|
|
||||||
|
# 获取环境变量中的用户ID
|
||||||
|
TARGET_UID=${USER_ID:-33}
|
||||||
|
TARGET_GID=${GROUP_ID:-33}
|
||||||
|
|
||||||
|
echo "配置统一Web组权限,目标UID:GID = $TARGET_UID:$TARGET_GID"
|
||||||
|
|
||||||
|
# 创建统一的Web组(增强错误处理)
|
||||||
|
WEB_GROUP="webaccess"
|
||||||
|
if ! getent group "$WEB_GROUP" &>/dev/null; then
|
||||||
|
echo "创建统一Web组: $WEB_GROUP"
|
||||||
|
|
||||||
|
# 尝试使用指定GID创建组
|
||||||
|
if groupadd -g $TARGET_GID "$WEB_GROUP" 2>/dev/null; then
|
||||||
|
echo "✅ 统一Web组创建成功,GID: $TARGET_GID"
|
||||||
|
else
|
||||||
|
echo "⚠️ GID $TARGET_GID 已被占用,尝试自动分配GID"
|
||||||
|
|
||||||
|
# 尝试不指定GID创建组
|
||||||
|
if groupadd "$WEB_GROUP" 2>/dev/null; then
|
||||||
|
ACTUAL_GID=$(getent group "$WEB_GROUP" | cut -d: -f3)
|
||||||
|
echo "✅ 统一Web组创建成功,自动分配GID: $ACTUAL_GID"
|
||||||
|
else
|
||||||
|
echo "❌ 创建 $WEB_GROUP 组失败,尝试使用备用方案"
|
||||||
|
|
||||||
|
# 备用方案:使用现有的www-data组
|
||||||
|
if getent group "www-data" &>/dev/null; then
|
||||||
|
WEB_GROUP="www-data"
|
||||||
|
echo "🔄 使用现有的www-data组作为统一组"
|
||||||
|
else
|
||||||
|
echo "❌ 备用方案也失败,权限配置可能不完整"
|
||||||
|
WEB_GROUP=""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
ACTUAL_GID=$(getent group "$WEB_GROUP" | cut -d: -f3)
|
||||||
|
echo "✅ 统一Web组 $WEB_GROUP 已存在,GID: $ACTUAL_GID"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 最终验证组是否存在
|
||||||
|
if [ -z "$WEB_GROUP" ] || ! getent group "$WEB_GROUP" &>/dev/null; then
|
||||||
|
echo "❌ 无法创建或找到可用的Web组,权限配置将受限"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 只将已存在的Web用户加入统一组(增强错误处理)
|
||||||
|
success_count=0
|
||||||
|
total_users=0
|
||||||
|
|
||||||
|
for web_user in "${WEB_USERS[@]}"; do
|
||||||
|
total_users=$((total_users + 1))
|
||||||
|
|
||||||
|
if id "$web_user" &>/dev/null; then
|
||||||
|
echo "📝 处理Web用户: $web_user"
|
||||||
|
|
||||||
|
# 获取用户当前组信息(安全的变量处理)
|
||||||
|
current_groups=$(id -Gn "$web_user" 2>/dev/null | tr '\n' ' ' | sed 's/ *$//')
|
||||||
|
echo " 当前所属组: ${current_groups:-无}"
|
||||||
|
|
||||||
|
# 尝试将用户加入统一组(使用-a参数保留现有组,只添加新组)
|
||||||
|
if usermod -a -G "$WEB_GROUP" "$web_user" 2>/dev/null; then
|
||||||
|
echo " ✅ 成功将 $web_user 添加到统一组 $WEB_GROUP"
|
||||||
|
success_count=$((success_count + 1))
|
||||||
|
else
|
||||||
|
echo " ⚠️ 无法将 $web_user 添加到统一组,尝试设置主组"
|
||||||
|
|
||||||
|
# 备用方案:设置主组
|
||||||
|
if usermod -g "$WEB_GROUP" "$web_user" 2>/dev/null; then
|
||||||
|
echo " ✅ 成功将 $web_user 主组设置为 $WEB_GROUP"
|
||||||
|
success_count=$((success_count + 1))
|
||||||
|
else
|
||||||
|
echo " ❌ 无法配置 $web_user 的组权限"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "⚭ Web用户 $web_user 不存在,跳过"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "📊 用户配置汇总: $success_count/$total_users 个Web用户配置成功"
|
||||||
|
|
||||||
|
# 至少要有一个用户配置成功
|
||||||
|
if [ $success_count -eq 0 ]; then
|
||||||
|
echo "⚠️ 没有Web用户被成功配置,但继续执行"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "统一Web组配置完成"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 错误处理:如果配置失败,不要终止整个脚本
|
||||||
|
configure_web_users || echo "⚠️ Web用户配置出现问题,但继续执行权限设置"
|
||||||
|
|
||||||
|
echo "当前用户: $(whoami)"
|
||||||
|
echo "UID: $(id -u), GID: $(id -g)"
|
||||||
|
|
||||||
|
# 修复所有目录权限(使用统一Web组,最高效的权限管理)
|
||||||
|
if [ -d "$APP_ROOT" ]; then
|
||||||
|
# 重新获取最终的WEB_GROUP(可能已被修改)
|
||||||
|
FINAL_WEB_GROUP=""
|
||||||
|
|
||||||
|
# 首选:使用创建的webaccess组
|
||||||
|
if getent group "webaccess" &>/dev/null; then
|
||||||
|
FINAL_WEB_GROUP="webaccess"
|
||||||
|
echo "🎯 使用创建的统一Web组: $FINAL_WEB_GROUP"
|
||||||
|
# 备选:使用www-data组
|
||||||
|
elif getent group "www-data" &>/dev/null; then
|
||||||
|
FINAL_WEB_GROUP="www-data"
|
||||||
|
echo "🔄 回退到www-data组: $FINAL_WEB_GROUP"
|
||||||
|
# 最后:使用当前用户的组
|
||||||
|
else
|
||||||
|
CURRENT_USER=$(whoami)
|
||||||
|
CURRENT_GROUP=$(id -gn "$CURRENT_USER")
|
||||||
|
FINAL_WEB_GROUP="$CURRENT_GROUP"
|
||||||
|
echo "🔧 使用当前用户组: $FINAL_WEB_GROUP"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 最终验证
|
||||||
|
if [ -z "$FINAL_WEB_GROUP" ]; then
|
||||||
|
echo "❌ 无法确定有效的Web组,跳过权限设置"
|
||||||
|
echo "=== 启动应用 ==="
|
||||||
|
exec "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
WEB_GROUP="$FINAL_WEB_GROUP"
|
||||||
|
WEB_GROUP_GID=$(getent group "$WEB_GROUP" | cut -d: -f3)
|
||||||
|
echo "✅ 最终使用Web组: $WEB_GROUP (GID: $WEB_GROUP_GID)"
|
||||||
|
echo "🔒 统一组权限模式:所有Web用户通过组继承权限"
|
||||||
|
|
||||||
|
# 设置所有权为统一Web组(增强错误处理)
|
||||||
|
echo "📁 设置应用目录所有权为统一Web组"
|
||||||
|
CURRENT_USER=$(whoami)
|
||||||
|
|
||||||
|
if chown -R $CURRENT_USER:$WEB_GROUP "$APP_ROOT" 2>/dev/null; then
|
||||||
|
echo "✅ 所有权设置成功: $CURRENT_USER:$WEB_GROUP"
|
||||||
|
else
|
||||||
|
echo "⚠️ 所有权设置失败,尝试只设置组权限"
|
||||||
|
chgrp -R "$WEB_GROUP" "$APP_ROOT" 2>/dev/null || echo "❌ 组权限设置也失败"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 设置目录权限为775(组权限为rwx,所有组内用户都有完整权限)
|
||||||
|
echo "🔐 设置目录权限775,文件权限664"
|
||||||
|
|
||||||
|
# 使用更安全的权限设置方式,避免权限被拒绝
|
||||||
|
dir_count=0
|
||||||
|
file_count=0
|
||||||
|
|
||||||
|
# 设置目录权限(兼容性更好的方式)
|
||||||
|
if command -v find >/dev/null 2>&1; then
|
||||||
|
dir_count=$(find "$APP_ROOT" -type d -exec chmod 775 {} \; 2>/dev/null | wc -l)
|
||||||
|
file_count=$(find "$APP_ROOT" -type f -exec chmod 664 {} \; 2>/dev/null | wc -l)
|
||||||
|
find "$APP_ROOT" -type d -exec chmod g+s {} \; 2>/dev/null
|
||||||
|
else
|
||||||
|
# 备用方案:使用简单的循环
|
||||||
|
echo "find命令不可用,跳过批量权限设置"
|
||||||
|
dir_count=0
|
||||||
|
file_count=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "📊 权限设置完成: $dir_count个目录, $file_count个文件"
|
||||||
|
|
||||||
|
echo "✅ 统一组权限设置完成,所有Web用户通过组获得权限"
|
||||||
|
|
||||||
|
# 设置ACL(如果支持,只需设置统一组)
|
||||||
|
if command -v setfacl >/dev/null 2>&1; then
|
||||||
|
echo "🔒 设置ACL权限(只需设置统一Web组)"
|
||||||
|
|
||||||
|
acl_success=0
|
||||||
|
|
||||||
|
# 只为统一Web组设置ACL权限(限制处理深度)
|
||||||
|
if setfacl -R -m g:$WEB_GROUP:rwx "$APP_ROOT" 2>/dev/null; then
|
||||||
|
echo " ✅ 设置组ACL权限成功"
|
||||||
|
acl_success=$((acl_success + 1))
|
||||||
|
else
|
||||||
|
echo " ❌ 设置组ACL权限失败"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 设置默认ACL权限(新创建的文件自动继承权限)
|
||||||
|
if setfacl -dR -m g:$WEB_GROUP:rwx "$APP_ROOT" 2>/dev/null; then
|
||||||
|
echo " ✅ 设置默认ACL权限成功"
|
||||||
|
acl_success=$((acl_success + 1))
|
||||||
|
else
|
||||||
|
echo " ❌ 设置默认ACL权限失败"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $acl_success -eq 2 ]; then
|
||||||
|
echo "🎉 统一组ACL设置完成,所有组内用户自动获得权限"
|
||||||
|
elif [ $acl_success -eq 1 ]; then
|
||||||
|
echo "⚠️ ACL部分设置成功,建议检查文件系统ACL支持"
|
||||||
|
else
|
||||||
|
echo "❌ ACL设置完全失败,文件系统可能不支持ACL"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "ℹ️ ACL不支持,依赖传统权限模式"
|
||||||
|
echo "✅ 775权限已足够,所有组内用户都有rwx权限"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 设置umask
|
||||||
|
umask 0002
|
||||||
|
|
||||||
|
echo "✅ 应用目录权限修复完成"
|
||||||
|
|
||||||
|
# 验证文件权限是否足够(测试统一组权限效果)
|
||||||
|
echo "=== 验证统一组权限效果 ==="
|
||||||
|
|
||||||
|
# 查找测试文件的更可靠方法
|
||||||
|
test_file=""
|
||||||
|
|
||||||
|
# 方法1: 查找index.html
|
||||||
|
if [ -f "$APP_ROOT/index.html" ]; then
|
||||||
|
test_file="$APP_ROOT/index.html"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 方法2: 查找任意HTML文件(更安全的方式)
|
||||||
|
if [ -z "$test_file" ]; then
|
||||||
|
first_html=$(find "$APP_ROOT" -maxdepth 2 -name "*.html" -type f 2>/dev/null | head -1)
|
||||||
|
if [ -n "$first_html" ] && [ -f "$first_html" ]; then
|
||||||
|
test_file="$first_html"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 方法3: 查找index.php
|
||||||
|
if [ -z "$test_file" ] && [ -f "$APP_ROOT/index.php" ]; then
|
||||||
|
test_file="$APP_ROOT/index.php"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 方法4: 创建专用测试文件(最安全的选择)
|
||||||
|
if [ -z "$test_file" ]; then
|
||||||
|
test_file="$APP_ROOT/.permission_test.html"
|
||||||
|
echo "创建专用权限测试文件"
|
||||||
|
cat > "$test_file" << 'EOF'
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head><title>Permission Test</title></head>
|
||||||
|
<body><h1>Web Server Permission Test File</h1></body>
|
||||||
|
</html>
|
||||||
|
EOF
|
||||||
|
# 设置正确的权限
|
||||||
|
chown $(whoami):"$WEB_GROUP" "$test_file" 2>/dev/null || true
|
||||||
|
chmod 664 "$test_file"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 执行权限测试
|
||||||
|
if [ -f "$test_file" ]; then
|
||||||
|
echo "使用测试文件: $test_file"
|
||||||
|
echo "文件权限: $(stat -c '%a %n' "$test_file")"
|
||||||
|
echo "文件所有者: $(stat -c '%U:%G' "$test_file")"
|
||||||
|
|
||||||
|
# 测试所有Web用户的权限(通过组权限)
|
||||||
|
for test_user in "www-data" "www" "apache" "nginx"; do
|
||||||
|
if id "$test_user" &>/dev/null; then
|
||||||
|
echo "🔍 测试 $test_user 用户权限(通过组权限):"
|
||||||
|
|
||||||
|
# 显示用户组信息(安全的变量处理)
|
||||||
|
user_groups=$(id -Gn "$test_user" 2>/dev/null | tr '\n' ' ' | sed 's/ *$//')
|
||||||
|
echo " 📋 所属组: ${user_groups:-无}"
|
||||||
|
|
||||||
|
# 测试读权限(安全:只读不修改)
|
||||||
|
if su -s /bin/sh -c "cat '$test_file' >/dev/null 2>&1" "$test_user" 2>/dev/null; then
|
||||||
|
echo " ✅ 读权限: 通过组权限可读"
|
||||||
|
else
|
||||||
|
echo " ❌ 读权限: 不可读"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 测试写权限(使用临时文件,避免污染原文件)
|
||||||
|
temp_test_file="${test_file}.write_test_${test_user}"
|
||||||
|
if su -s /bin/sh -c "echo 'permission_test' > '$temp_test_file' 2>/dev/null" "$test_user" 2>/dev/null; then
|
||||||
|
echo " ✅ 写权限: 通过组权限可写"
|
||||||
|
rm -f "$temp_test_file" 2>/dev/null
|
||||||
|
else
|
||||||
|
echo " ❌ 写权限: 不可写"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 测试目录创建权限(使用临时目录)
|
||||||
|
temp_test_dir="${APP_ROOT}/.perm_test_${test_user}"
|
||||||
|
if su -s /bin/sh -c "mkdir -p '$temp_test_dir' 2>/dev/null" "$test_user" 2>/dev/null; then
|
||||||
|
echo " ✅ 创建目录: 通过组权限可创建"
|
||||||
|
rm -rf "$temp_test_dir" 2>/dev/null
|
||||||
|
else
|
||||||
|
echo " ❌ 创建目录: 不可创建"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " 🔗 权限来源: 统一Web组 ($WEB_GROUP) 775权限"
|
||||||
|
break # 只测试第一个可用的用户即可验证效果
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# 清理专用测试文件(如果是创建的)
|
||||||
|
if echo "$test_file" | grep -q "\.permission_test\.html$"; then
|
||||||
|
rm -f "$test_file" 2>/dev/null
|
||||||
|
echo "🧹 已清理临时测试文件"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "❌ 无法找到或创建测试文件,跳过权限验证"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 显示统一组和用户状态
|
||||||
|
echo "=== 统一Web组状态检查 ==="
|
||||||
|
if getent group "$WEB_GROUP" &>/dev/null; then
|
||||||
|
echo "✅ 统一Web组 '$WEB_GROUP' 存在"
|
||||||
|
echo "组信息: $(getent group "$WEB_GROUP" 2>/dev/null || echo '获取失败')"
|
||||||
|
|
||||||
|
# 检查哪些用户在统一组中
|
||||||
|
echo "统一组成员检查:"
|
||||||
|
for web_user in "www-data" "www" "apache" "nginx"; do
|
||||||
|
if id "$web_user" &>/dev/null; then
|
||||||
|
if id -Gn "$web_user" | grep -q "$WEB_GROUP"; then
|
||||||
|
echo "✅ $web_user 在统一组 '$WEB_GROUP' 中"
|
||||||
|
else
|
||||||
|
echo "❌ $web_user 不在统一组 '$WEB_GROUP' 中"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "❌ $web_user 用户不存在"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "❌ 统一Web组 '$WEB_GROUP' 不存在"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "=== 启动应用 ==="
|
||||||
|
|
||||||
|
# 执行原有的启动命令
|
||||||
|
exec "$@"
|
||||||
@@ -12,19 +12,42 @@ autostart=true
|
|||||||
autorestart=true
|
autorestart=true
|
||||||
startretries=3
|
startretries=3
|
||||||
startsecs=1
|
startsecs=1
|
||||||
stdout_logfile=/dev/stdout
|
stopasgroup=true
|
||||||
stdout_logfile_maxbytes=0
|
killasgroup=true
|
||||||
stderr_logfile=/dev/stderr
|
stdout_logfile=/var/log/supervisor/php-fpm.log
|
||||||
stderr_logfile_maxbytes=0
|
stdout_logfile_maxbytes=10MB
|
||||||
|
stdout_logfile_backups=10
|
||||||
|
stderr_logfile=/var/log/supervisor/php-fpm-error.log
|
||||||
|
stderr_logfile_maxbytes=10MB
|
||||||
|
stderr_logfile_backups=10
|
||||||
|
|
||||||
[program:think-cron]
|
[program:think-cron]
|
||||||
command=php /var/www/html/think cron:schedule
|
command=php /var/www/html/think cron:schedule
|
||||||
environment=APP_ENV=local
|
process_name=%(program_name)s_%(process_num)02d
|
||||||
|
numprocs=1
|
||||||
autostart=true
|
autostart=true
|
||||||
autorestart=true
|
autorestart=true
|
||||||
startretries=5
|
startretries=3
|
||||||
startsecs=2
|
stdout_logfile=/var/log/supervisor/think-cron.log
|
||||||
stdout_logfile=/dev/stdout
|
stdout_logfile_maxbytes=10MB
|
||||||
stdout_logfile_maxbytes=0
|
stdout_logfile_backups=10
|
||||||
stderr_logfile=/dev/stderr
|
stderr_logfile=/var/log/supervisor/think-cron-error.log
|
||||||
stderr_logfile_maxbytes=0
|
stderr_logfile_maxbytes=10MB
|
||||||
|
stderr_logfile_backups=10
|
||||||
|
startsecs=3
|
||||||
|
stopwaitsecs=10
|
||||||
|
|
||||||
|
[program:websocket-server]
|
||||||
|
command=/bin/bash -c "if [ -f /var/www/html/ws_server.php ]; then php ./ws_server.php; else echo 'ws_server.php not found, skipping websocket server'; fi"
|
||||||
|
workdir=/var/www/html
|
||||||
|
autostart=true
|
||||||
|
autorestart=false
|
||||||
|
startretries=0
|
||||||
|
stdout_logfile=/var/log/supervisor/websocket-server.log
|
||||||
|
stdout_logfile_maxbytes=10MB
|
||||||
|
stdout_logfile_backups=10
|
||||||
|
stderr_logfile=/var/log/supervisor/websocket-server-error.log
|
||||||
|
stderr_logfile_maxbytes=10MB
|
||||||
|
stderr_logfile_backups=10
|
||||||
|
startsecs=3
|
||||||
|
stopwaitsecs=10
|
||||||
|
|||||||
BIN
docker/php/websocat
Normal file
BIN
docker/php/websocat
Normal file
Binary file not shown.
9
docker/redis_data/.gitignore
vendored
Normal file
9
docker/redis_data/.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# 忽略所有文件
|
||||||
|
*
|
||||||
|
|
||||||
|
# 只保留指定的 .gitkeep 文件
|
||||||
|
!.gitignore
|
||||||
|
!development/.gitkeep
|
||||||
|
!test/.gitkeep
|
||||||
|
!production/.gitkeep
|
||||||
|
!staging/.gitkeep
|
||||||
0
docker/redis_data/.gitkeep
Normal file
0
docker/redis_data/.gitkeep
Normal file
10
docker/xdebug_logs/.gitignore
vendored
Normal file
10
docker/xdebug_logs/.gitignore
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# 忽略目录下所有文件和子目录
|
||||||
|
*
|
||||||
|
# 忽略所有子目录
|
||||||
|
*/
|
||||||
|
# 但不忽略 .gitkeep 文件
|
||||||
|
!.gitkeep
|
||||||
|
# 不忽略 .gitignore 文件自身
|
||||||
|
!.gitignore
|
||||||
|
# 不忽略 development/.gitkeep 文件
|
||||||
|
!development/.gitkeep
|
||||||
0
docker/xdebug_logs/.gitkeep
Normal file
0
docker/xdebug_logs/.gitkeep
Normal file
1257
docs/UPGRADE_BY_AI.md
Normal file
1257
docs/UPGRADE_BY_AI.md
Normal file
File diff suppressed because it is too large
Load Diff
@@ -25,3 +25,43 @@ create table if not exists lucky_diy_view_util
|
|||||||
unique (name)
|
unique (name)
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 页面设计及组件展示
|
||||||
|
|
||||||
|
- src\app\model\web\DiyView.php
|
||||||
|
- src\app\shop\view\diy\edit.html
|
||||||
|
- src\public\static\ext\diyview\js\components.js
|
||||||
|
|
||||||
|
## 如何添加新组件
|
||||||
|
|
||||||
|
|
||||||
|
### 1. 添加组件到数据表中
|
||||||
|
|
||||||
|
```sql
|
||||||
|
insert into lucky_diy_view_util (name, title, type, value, addon_name, sort, support_diy_view, max_count, is_delete, icon, icon_type)
|
||||||
|
values ('test', '测试', 'SYSTEM', '{"test": "test"}', '', 0, '', 0, 0, '', 0);
|
||||||
|
|
||||||
|
--- 微信视频号
|
||||||
|
-- 仅当WechatChannel不存在时添加记录
|
||||||
|
INSERT INTO lucky_diy_view_util (`name`, `title`, `type`, `value`, `addon_name`, `sort`, `support_diy_view`, `max_count`, `is_delete`, `icon`, `icon_type`)
|
||||||
|
SELECT 'WechatChannel', '微信视频号', 'SYSTEM', '{ "list": [{ "channelName":"", "finderUserName": "", "avatarImageType": "url", "avatarUrl": "", "videoTitle": "", "coverImageType": "url", "coverUrl": "", "feedId": "", "feedToken": "", "viewCount": 0, "showViewCount": true, "embedMode": false, "channelType":"wechat" }], "rowCount": 2, "showStyle": "fixed", "aspectRatio":"16:9", "titleLineClamp": 1, "showPlayBtn": true}', '', 100110, '', 0, 0, '/public/static/img/svg/xuanxiangka.svg', 0
|
||||||
|
WHERE NOT EXISTS (
|
||||||
|
SELECT 1 FROM lucky_diy_view_util WHERE name = 'WechatChannel'
|
||||||
|
);
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### 2. 建立组件的控制器
|
||||||
|
在 `src\app\component\controller` 目录下创建对应的控制器文件,处理组件的业务逻辑。
|
||||||
|
|
||||||
|
例如:创建 `src\app\component\controller\TestController.php` 文件,用于处理测试组件的业务逻辑。
|
||||||
|
|
||||||
|
### 3. 建立组件的视图
|
||||||
|
在 src\app\component\view 目录下创建对应的视图文件,处理组件的前端展示。
|
||||||
|
|
||||||
|
例如:创建 `src\app\component\view\test.php` 文件,用于展示测试组件。
|
||||||
|
|
||||||
|
|
||||||
|
### 4. 在前端页面中使用组件
|
||||||
|
在前端页面中使用组件,需要在页面中添加对应的组件标签。
|
||||||
@@ -3,23 +3,22 @@ APP_TRACE = true
|
|||||||
|
|
||||||
[APP]
|
[APP]
|
||||||
DEFAULT_TIMEZONE = Asia/Shanghai
|
DEFAULT_TIMEZONE = Asia/Shanghai
|
||||||
ENV_MODE = development
|
|
||||||
|
|
||||||
[LANG]
|
[LANG]
|
||||||
default_lang = zh-cn
|
default_lang = zh-cn
|
||||||
|
|
||||||
[DATABASE]
|
[DATABASE]
|
||||||
TYPE = mysql
|
TYPE = mysql
|
||||||
HOSTNAME = 127.0.0.1
|
HOSTNAME = db
|
||||||
DATABASE = shop_mallnew_dev
|
DATABASE = shop_mallnew
|
||||||
USERNAME = root
|
USERNAME = shop_mallnew
|
||||||
PASSWORD = root
|
PASSWORD = shop_mallnew
|
||||||
HOSTPORT = 3306
|
HOSTPORT = 3306
|
||||||
CHARSET = utf8
|
CHARSET = utf8mb4
|
||||||
DEBUG = true
|
DEBUG = true
|
||||||
|
|
||||||
[redis]
|
[REDIS]
|
||||||
HOST = 127.0.0.1
|
HOST = redis
|
||||||
PORT = 6379
|
PORT = 6379
|
||||||
PASSWORD = ''
|
PASSWORD = 'luckyshop123!@#'
|
||||||
EXPIRY = 604800
|
EXPIRY = 604800
|
||||||
@@ -10,16 +10,16 @@ default_lang = zh-cn
|
|||||||
|
|
||||||
[DATABASE]
|
[DATABASE]
|
||||||
TYPE = mysql
|
TYPE = mysql
|
||||||
HOSTNAME = production_mysql_host
|
HOSTNAME = db
|
||||||
DATABASE = shop_mallnew_prod
|
DATABASE = shop_mallnew
|
||||||
USERNAME = prod_user
|
USERNAME = shop_mallnew
|
||||||
PASSWORD = prod_password
|
PASSWORD = shop_mallnew
|
||||||
HOSTPORT = 3306
|
HOSTPORT = 3306
|
||||||
CHARSET = utf8
|
CHARSET = utf8mb4
|
||||||
DEBUG = false
|
DEBUG = false
|
||||||
|
|
||||||
[redis]
|
[REDIS]
|
||||||
HOST = production_redis_host
|
HOST = redis
|
||||||
PORT = 6379
|
PORT = 6379
|
||||||
PASSWORD = production_redis_password
|
PASSWORD = 'luckyshop123!@#'
|
||||||
EXPIRY = 86400
|
EXPIRY = 604800
|
||||||
@@ -1,22 +1,24 @@
|
|||||||
APP_DEBUG = true
|
APP_DEBUG = true
|
||||||
APP_TRACE = true
|
APP_TRACE = true
|
||||||
|
|
||||||
[APP]
|
[APP]
|
||||||
DEFAULT_TIMEZONE = Asia/Shanghai
|
DEFAULT_TIMEZONE = Asia/Shanghai
|
||||||
|
|
||||||
[LANG]
|
[LANG]
|
||||||
default_lang = zh-cn
|
default_lang = zh-cn
|
||||||
|
|
||||||
[DATABASE]
|
[DATABASE]
|
||||||
TYPE = mysql
|
TYPE = mysql
|
||||||
HOSTNAME = newshop_mysql
|
HOSTNAME = db
|
||||||
DATABASE = shop_dev
|
DATABASE = shop_mallnew
|
||||||
USERNAME = shop_mallnew
|
USERNAME = shop_mallnew
|
||||||
PASSWORD = shop_mallnew
|
PASSWORD = shop_mallnew
|
||||||
HOSTPORT = 3306
|
HOSTPORT = 3306
|
||||||
CHARSET = utf8
|
CHARSET = utf8mb4
|
||||||
DEBUG = true
|
DEBUG = true
|
||||||
[RRDATABASE]
|
|
||||||
HOSTNAME = 192.168.2.64
|
[REDIS]
|
||||||
[redis]
|
HOST = redis
|
||||||
HOST = newshop_redis
|
|
||||||
PORT = 6379
|
PORT = 6379
|
||||||
PASSWORD = 'luckyshop123!@#'
|
PASSWORD = 'luckyshop123!@#'
|
||||||
EXPIRY = 604800
|
EXPIRY = 604800
|
||||||
24
src/.env.test
Normal file
24
src/.env.test
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
APP_DEBUG = true
|
||||||
|
APP_TRACE = true
|
||||||
|
|
||||||
|
[APP]
|
||||||
|
DEFAULT_TIMEZONE = Asia/Shanghai
|
||||||
|
|
||||||
|
[LANG]
|
||||||
|
default_lang = zh-cn
|
||||||
|
|
||||||
|
[DATABASE]
|
||||||
|
TYPE = mysql
|
||||||
|
HOSTNAME = db
|
||||||
|
DATABASE = shop_mallnew
|
||||||
|
USERNAME = shop_mallnew
|
||||||
|
PASSWORD = shop_mallnew
|
||||||
|
HOSTPORT = 3306
|
||||||
|
CHARSET = utf8mb4
|
||||||
|
DEBUG = true
|
||||||
|
|
||||||
|
[REDIS]
|
||||||
|
HOST = redis
|
||||||
|
PORT = 6379
|
||||||
|
PASSWORD = 'luckyshop123!@#'
|
||||||
|
EXPIRY = 604800
|
||||||
@@ -1,12 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据,json格式' ]
|
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据,json格式' ]
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
return [
|
return [
|
||||||
'name' => 'alioss',
|
'name' => 'alioss',
|
||||||
'title' => '阿里云OSS',
|
'title' => '阿里云OSS',
|
||||||
|
|||||||
@@ -1,14 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
namespace addon\alioss\event;
|
namespace addon\alioss\event;
|
||||||
|
|
||||||
use addon\alioss\model\Alioss;
|
use addon\alioss\model\Alioss;
|
||||||
|
|||||||
@@ -1,14 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
namespace addon\alioss\event;
|
namespace addon\alioss\event;
|
||||||
|
|
||||||
use addon\alioss\model\Config;
|
use addon\alioss\model\Config;
|
||||||
|
|||||||
@@ -1,14 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
namespace addon\alioss\event;
|
namespace addon\alioss\event;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,14 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
namespace addon\alioss\event;
|
namespace addon\alioss\event;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,14 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
namespace addon\alioss\event;
|
namespace addon\alioss\event;
|
||||||
|
|
||||||
use addon\alioss\model\Alioss;
|
use addon\alioss\model\Alioss;
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
namespace addon\alioss\event;
|
namespace addon\alioss\event;
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\alioss\model;
|
namespace addon\alioss\model;
|
||||||
|
|
||||||
use app\model\BaseModel;
|
use app\model\BaseModel;
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\alioss\model;
|
namespace addon\alioss\model;
|
||||||
|
|
||||||
use app\model\system\Config as ConfigModel;
|
use app\model\system\Config as ConfigModel;
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\alioss\shop\controller;
|
namespace addon\alioss\shop\controller;
|
||||||
|
|
||||||
use addon\alioss\model\Config as ConfigModel;
|
use addon\alioss\model\Config as ConfigModel;
|
||||||
|
|||||||
@@ -1,12 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据,json格式' ]
|
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据,json格式' ]
|
||||||
|
|||||||
@@ -1,12 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
return [
|
return [
|
||||||
'bind' => [
|
'bind' => [
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
return [
|
return [
|
||||||
'name' => 'alipay',
|
'name' => 'alipay',
|
||||||
'title' => '支付宝支付',
|
'title' => '支付宝支付',
|
||||||
|
|||||||
@@ -1,12 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
return [
|
return [
|
||||||
[
|
[
|
||||||
'name' => 'ALI_PAY_CONFIG',
|
'name' => 'ALI_PAY_CONFIG',
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
namespace addon\alipay\event;
|
namespace addon\alipay\event;
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\alipay\event;
|
namespace addon\alipay\event;
|
||||||
|
|
||||||
use addon\alipay\model\Pay as PayModel;
|
use addon\alipay\model\Pay as PayModel;
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\alipay\event;
|
namespace addon\alipay\event;
|
||||||
|
|
||||||
use addon\alipay\model\Pay as PayModel;
|
use addon\alipay\model\Pay as PayModel;
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\alipay\event;
|
namespace addon\alipay\event;
|
||||||
|
|
||||||
use addon\alipay\model\Pay as PayModel;
|
use addon\alipay\model\Pay as PayModel;
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\alipay\event;
|
namespace addon\alipay\event;
|
||||||
|
|
||||||
use addon\alipay\model\Config as ConfigModel;
|
use addon\alipay\model\Config as ConfigModel;
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\alipay\event;
|
namespace addon\alipay\event;
|
||||||
|
|
||||||
use addon\alipay\model\Pay as PayModel;
|
use addon\alipay\model\Pay as PayModel;
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\alipay\event;
|
namespace addon\alipay\event;
|
||||||
|
|
||||||
use addon\alipay\model\Pay;
|
use addon\alipay\model\Pay;
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\alipay\event;
|
namespace addon\alipay\event;
|
||||||
|
|
||||||
use addon\alipay\model\Config;
|
use addon\alipay\model\Config;
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\alipay\event;
|
namespace addon\alipay\event;
|
||||||
|
|
||||||
use addon\alipay\model\Config;
|
use addon\alipay\model\Config;
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\alipay\event;
|
namespace addon\alipay\event;
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\alipay\model;
|
namespace addon\alipay\model;
|
||||||
|
|
||||||
use app\model\system\Config as ConfigModel;
|
use app\model\system\Config as ConfigModel;
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\alipay\model;
|
namespace addon\alipay\model;
|
||||||
|
|
||||||
use addon\alipay\data\sdk\AopClient;
|
use addon\alipay\data\sdk\AopClient;
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\alipay\shop\controller;
|
namespace addon\alipay\shop\controller;
|
||||||
|
|
||||||
use addon\alipay\model\Config as ConfigModel;
|
use addon\alipay\model\Config as ConfigModel;
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据,json格式' ]
|
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据,json格式' ]
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
return [
|
return [
|
||||||
'name' => 'cases',
|
'name' => 'cases',
|
||||||
'title' => '案例展示',
|
'title' => '案例展示',
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\cases\event;
|
namespace addon\cases\event;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\cases\event;
|
namespace addon\cases\event;
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\coupon\api\controller;
|
namespace addon\coupon\api\controller;
|
||||||
|
|
||||||
use app\api\controller\BaseApi;
|
use app\api\controller\BaseApi;
|
||||||
|
|||||||
@@ -1,12 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据,json格式' ]
|
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据,json格式' ]
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
return [
|
return [
|
||||||
'name' => 'coupon',
|
'name' => 'coupon',
|
||||||
'title' => '优惠券',
|
'title' => '优惠券',
|
||||||
|
|||||||
@@ -1,14 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\coupon\dict;
|
namespace addon\coupon\dict;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\coupon\event;
|
namespace addon\coupon\event;
|
||||||
|
|
||||||
use addon\coupon\model\Coupon;
|
use addon\coupon\model\Coupon;
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\coupon\event;
|
namespace addon\coupon\event;
|
||||||
|
|
||||||
use addon\coupon\model\CouponType;
|
use addon\coupon\model\CouponType;
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\coupon\event;
|
namespace addon\coupon\event;
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\coupon\event;
|
namespace addon\coupon\event;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\coupon\event;
|
namespace addon\coupon\event;
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\coupon\model;
|
namespace addon\coupon\model;
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\coupon\model;
|
namespace addon\coupon\model;
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\coupon\model;
|
namespace addon\coupon\model;
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\coupon\model;
|
namespace addon\coupon\model;
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\coupon\model\share;
|
namespace addon\coupon\model\share;
|
||||||
|
|
||||||
use app\model\share\WchatShareBase as BaseModel;
|
use app\model\share\WchatShareBase as BaseModel;
|
||||||
|
|||||||
@@ -1,14 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\coupon\model\share;
|
namespace addon\coupon\model\share;
|
||||||
|
|
||||||
use app\model\share\WeappShareBase;
|
use app\model\share\WeappShareBase;
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\coupon\shopapi\controller;
|
namespace addon\coupon\shopapi\controller;
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
return [
|
return [
|
||||||
'name' => 'diy_default1',
|
'name' => 'diy_default1',
|
||||||
'title' => '官方模板一',
|
'title' => '官方模板一',
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
namespace addon\diy_default1\event;
|
namespace addon\diy_default1\event;
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
namespace addon\diy_default1\event;
|
namespace addon\diy_default1\event;
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据,json格式' ]
|
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据,json格式' ]
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
return [
|
return [
|
||||||
'name' => 'diy_default2',
|
'name' => 'diy_default2',
|
||||||
'title' => '官方模板二',
|
'title' => '官方模板二',
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
namespace addon\diy_default2\event;
|
namespace addon\diy_default2\event;
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
namespace addon\diy_default2\event;
|
namespace addon\diy_default2\event;
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据,json格式' ]
|
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据,json格式' ]
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
return [
|
return [
|
||||||
'name' => 'electronicsheet',
|
'name' => 'electronicsheet',
|
||||||
'title' => '电子面单',
|
'title' => '电子面单',
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\electronicsheet\event;
|
namespace addon\electronicsheet\event;
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\electronicsheet\event;
|
namespace addon\electronicsheet\event;
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\electronicsheet\event;
|
namespace addon\electronicsheet\event;
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\electronicsheet\event;
|
namespace addon\electronicsheet\event;
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\electronicsheet\model;
|
namespace addon\electronicsheet\model;
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\electronicsheet\model;
|
namespace addon\electronicsheet\model;
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\electronicsheet\shop\controller;
|
namespace addon\electronicsheet\shop\controller;
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\electronicsheet\shop\controller;
|
namespace addon\electronicsheet\shop\controller;
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace addon\fenxiao\api\controller;
|
namespace addon\fenxiao\api\controller;
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user