52 Commits

Author SHA1 Message Date
fd40367741 fix(组件:微信视频号): 出现多个视频号组件时,从第二个开始无法拖拽排序 2026-01-20 15:09:33 +08:00
2eebed47f7 chore: 添加uid标识,方便知道站点用户ID 2026-01-17 11:25:55 +08:00
1f60f84bc3 chore: 去掉多余的注释 2026-01-17 10:48:02 +08:00
0f1ef3757f Merge branch 'feat/personnel_channel' 2026-01-15 14:22:46 +08:00
b195da84dd chore(组件:微信视频号): 支持选择显示轮播图模式 2026-01-15 11:42:56 +08:00
febf614e13 chore(电子名片): 支持后台配置显示样式 2026-01-15 10:19:01 +08:00
8cc352621d chore(组件:微信视频号): 基本功能实现 2026-01-14 16:54:13 +08:00
bd53937ead chore(电子名片): 相应的字段长度放宽 2026-01-13 14:56:17 +08:00
54952f68ef chore(电子名片): 视频号增加说明及先去掉其他视频号的数据添加支持 2026-01-12 17:36:45 +08:00
3fef52081a feat: 合并应用->电子名片->增加视频号资源管理的功能 2026-01-12 10:23:54 +08:00
37f11d0eeb chore(电子名片): 视频号数据排序规则 sort asc createtime desc 2026-01-12 10:13:17 +08:00
6088be551c chore(电子名片): 优化电子名片数据展示 2026-01-12 09:27:26 +08:00
46f0e55040 chore(电子名片): 支持管理平台控制视频号是否显示 2026-01-10 18:27:41 +08:00
338b33f52c chore(电子名片): 增加及优化视频号模型字段 2026-01-10 15:55:13 +08:00
1d5ea6acd7 chore(电子名片): 调整显示 2026-01-10 11:19:47 +08:00
6b1db82a76 chore(电子名片): 精简add.html 及 edit.html 为一个文件 2026-01-10 11:02:37 +08:00
1e4d8f20cd chore(电子名片): 更新add.html 及 edit.html 操作逻辑 2026-01-10 10:51:02 +08:00
c68903223b chore(电子名片): 支持控制显示视频号 2026-01-10 10:29:45 +08:00
4caaf0b9f7 chore(电子名片): API对外提供视频号数据 2026-01-10 09:56:48 +08:00
b6e77071f1 chore: 初始化视频号基本信息控制 2026-01-10 08:37:53 +08:00
ad9aec21c5 chore(doc): 更新升级ByAI的文档 2026-01-09 11:36:18 +08:00
8301091cd8 chore(docker): 更新nginx配置 2026-01-09 11:14:28 +08:00
8a8e11414f chore(docker): docker/php/entrypoint.sh 如果应用根目录不存在,则跳过权限设置 2025-12-25 16:55:59 +08:00
46135002f9 revert: 0443cc46ec 2025-12-25 16:51:19 +08:00
72f6b341a1 chore: 优化entrypoint.sh 去掉带参数设置 2025-12-25 16:42:23 +08:00
0cb2dfa647 chore(docker): docker/php/entrypoint.sh 支持带参数的这种执行,参数优先于环境变量 2025-12-25 16:07:19 +08:00
0443cc46ec chore(docker): 优化docker/php/entrypoint.sh 2025-12-25 14:32:48 +08:00
85cf52b0e4 chore(docker): 优化docker/php/entrypoint.sh 2025-12-25 14:22:59 +08:00
c7aaa1bd16 chore(docker): 更新docker/php/entrypoint.sh 2025-12-25 14:03:32 +08:00
0519879ebb chore(docker): 更新docker/php/entrypoint.sh 2025-12-25 13:53:51 +08:00
f461fe93f0 chore(docker): 更新docker配置,解决多余的执行步骤 2025-12-25 09:34:07 +08:00
2eb98efe61 chore(docker): update docker/php/entrypoint.sh 2025-12-25 09:07:34 +08:00
866ca8d938 chore(docker): update docker/php/entrypoint.sh 2025-12-25 08:58:34 +08:00
267cfa12a2 chore(docker): update entrypoint.sh 2025-12-25 08:38:43 +08:00
d7df9293bb chore(sms): 优化短信发送记录,显示验证码 2025-12-24 18:29:03 +08:00
604917b56c fix(docker): 修复 mysql init.sql 重复的IDX_nc_member_label_label_id 2025-12-24 17:35:18 +08:00
840ce860ea chore(docker): 更新docker 2025-12-24 17:22:53 +08:00
04e1735028 chore(docker): 更新mysql初始脚本 2025-12-24 17:16:04 +08:00
ba829c4f53 chore(docker): 删除.env.local 2025-12-24 16:39:24 +08:00
b266023afc chore(docker): 去除多余的NGINX STL 端口暴漏 2025-12-24 14:38:14 +08:00
23abd0496b fix(docker): 修复nginx docker 问题 2025-12-24 14:25:35 +08:00
dffb2563be chore(docker): 简化nginx docker的处理 2025-12-24 14:10:34 +08:00
80998fba70 chore(docker): update nginx dockerfile 2025-12-24 14:05:01 +08:00
1f65bb61dd chore(think): update think 2025-12-24 11:43:00 +08:00
9e044672ee chore(src/config): 增加database.php 文件 2025-12-24 11:38:48 +08:00
989494af6d chore(docker/php): 优化supervisord.conf 当websocket文件不存在,不启动 2025-12-24 11:30:01 +08:00
5d8c3ba4ce chore(env): 更新环境变量 2025-12-24 11:16:32 +08:00
a973ce720e chore(env): update .env 文件 2025-12-24 11:11:14 +08:00
218d405f56 chore: update .gitignore 2025-12-24 11:06:47 +08:00
2d07082b81 chore(docker): 更新docker 2025-12-24 10:59:32 +08:00
15720c6a62 chore(env): 增加test环境变量 2025-12-24 10:47:21 +08:00
224c2a3117 chore(docker): docker 及环境变量更新 2025-12-24 10:39:14 +08:00
720 changed files with 29927 additions and 18583 deletions

3
.env
View File

@@ -7,8 +7,6 @@ APP_ENV=development
# PHP/PHP-FPM 配置
PHP_VERSION=7.4
PHP_FPM_VERSION=7.4-fpm
PHP_FPM_PORT=9100
XDEBUG_POST=9103
# 数据库配置
MYSQL_ROOT_HOST=%
@@ -23,5 +21,4 @@ REDIS_PORT=6399
# Nginx 配置
NGINX_PORT=8010
NGINX_SSL_PORT=8012

24
.env.development Normal file
View 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

View File

@@ -1,24 +1,23 @@
# 项目配置, 请根据实际情况修改
PROJECT_NAME=newshop
# ThinkPHP 6.x 配置, 请根据实际情况修改
APP_ENV=development
# PHP/PHP-FPM 配置
PHP_VERSION=7.4
PHP_FPM_VERSION=7.4-fpm
PHP_FPM_PORT=9000
XDEBUG_POST=9003
# 数据库配置
MYSQL_ROOT_HOST=%
MYSQL_DATABASE=shop_mallnew
MYSQL_USER=shop_mallnew
MYSQL_PASSWORD=shop_mallnew
MYSQL_PORT=3306
MYSQL_PORT=3316
# Redis 配置
REDIS_PASSWORD=luckyshop123!@#
REDIS_PORT=6379
REDIS_PORT=6399
# Nginx 配置
NGINX_PORT=80
NGINX_SSL_PORT=443
NGINX_PORT=8010

24
.env.production Normal file
View 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
View 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
View 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
View File

@@ -18,6 +18,9 @@ __pycache__
.idea
.vscode
# 环境变量
.env
# 源码结构
debug.txt
.travis.yml

138
README.md Normal file
View 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
View 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"

View File

@@ -14,7 +14,7 @@ services:
build:
context: ./docker/php
dockerfile: Dockerfile
container_name: ${PROJECT_NAME}_php
container_name: ${PROJECT_NAME}_${APP_ENV}_php
restart: always
extra_hosts:
- "host.docker.internal:host-gateway" # 支持主机名解析
@@ -25,23 +25,20 @@ services:
# 不然ThinkPHP 6.x 系列,会只加载 .env 文件,而不会加载 .env.local 文件,导致 .env.local 文件中的配置不会生效
APP_ENV: ${APP_ENV:-development}
APP_DEBUG: ${APP_DEBUG:-true}
XDEBUG_CONFIG: ${XDEBUG_CONFIG:-client_host=host.docker.internal client_port=9003}
PHP_IDE_CONFIG: serverName=docker-php
ports:
- "${PHP_FPM_PORT:-9000}:9000" # PHP-FPM
- "${XDEBUG_POST:-9003}:9003" # Xdebug
# PHP应用根目录可选默认 /var/www/html
PHP_APP_ROOT: ${PHP_APP_ROOT:-/var/www/html}
# 用户ID映射可选用于解决挂载权限问题
USER_ID: ${USER_ID:-33}
GROUP_ID: ${GROUP_ID:-33}
volumes:
- ./:/var/www/all_source
- ./src:/var/www/html
- ./src:/var/www/html:rw
# 更新下载源列表以加速apt-get
- ./docker/debian/sources.list:/etc/apt/sources.list: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:
- db
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
timeout: 10s
retries: 3
@@ -49,18 +46,18 @@ services:
networks:
- sass-platform-net
labels:
- "com.docker.compose.project.working_dir=${PROJECT_NAME}"
- "com.docker.compose.project.working_dir=${PROJECT_NAME}_${APP_ENV}"
nginx:
build:
context: ./docker/nginx
dockerfile: Dockerfile
container_name: ${PROJECT_NAME}_nginx
container_name: ${PROJECT_NAME}_${APP_ENV}_nginx
restart: always
ports:
- "${NGINX_PORT:-80}:80"
- "${NGINX_SSL_PORT:-443}:443"
volumes:
# 挂载项目代码到 Nginx 容器中
- ./src:/var/www/html:rw
# 更新下载源列表以加速apt-get
- ./docker/debian/sources.list:/etc/apt/sources.list:ro
@@ -72,11 +69,11 @@ services:
networks:
- sass-platform-net
labels:
- "com.docker.compose.project.working_dir=${PROJECT_NAME}"
- "com.docker.compose.project.working_dir=${PROJECT_NAME}_${APP_ENV}"
db:
image: mysql:5.7.44
container_name: ${PROJECT_NAME}_mysql
container_name: ${PROJECT_NAME}_${APP_ENV}_mysql
environment:
<<: *shared-api-env
volumes:
@@ -93,12 +90,12 @@ services:
- --collation-server=utf8mb4_unicode_ci
- --innodb_buffer_pool_size=256M
labels:
- "com.docker.compose.project.working_dir=${PROJECT_NAME}"
- "com.docker.compose.project.working_dir=${PROJECT_NAME}_${APP_ENV}"
# Redis 服务(可选)
redis:
image: redis:8.2
container_name: ${PROJECT_NAME}_redis
container_name: ${PROJECT_NAME}_${APP_ENV}_redis
environment:
REDIS_PASSWORD: ${REDIS_PASSWORD:-luckyshop123!@#}
REDISCLI_AUTH: ${REDIS_PASSWORD:-luckyshop123!@#}
@@ -111,13 +108,26 @@ services:
- sass-platform-net
restart: unless-stopped
labels:
- "com.docker.compose.project.working_dir=${PROJECT_NAME}"
- "com.docker.compose.project.working_dir=${PROJECT_NAME}_${APP_ENV}"
volumes:
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:
xdebug_logs:
name: ${PROJECT_NAME}_${APP_ENV}_redis_data
driver: local
driver_opts:
type: none
o: bind
device: ./docker/redis_data/${APP_ENV}
networks:
sass-platform-net:
name: ${PROJECT_NAME}_${APP_ENV}_net
driver: bridge

File diff suppressed because one or more lines are too long

View File

@@ -1,27 +1,26 @@
[mysqld]
# 字符集设置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 连接设置
max_connections=100
wait_timeout=28800
interactive_timeout=28800
# 缓冲区设置
innodb_buffer_pool_size=256M
key_buffer_size=64M
# 日志设置
slow_query_log=1
slow_query_log_file=/var/lib/mysql/slow.log
long_query_time=2
# 其他设置
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 字符集设置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
# 连接设置
max_connections=100
wait_timeout=28800
interactive_timeout=28800
# 缓冲区设置
innodb_buffer_pool_size=256M
key_buffer_size=64M
# 日志设置
slow_query_log=1
slow_query_log_file=/var/lib/mysql/slow.log
long_query_time=2
# 其他设置
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[client]
default-character-set=utf8mb4

9
docker/mysql_db_data/.gitignore vendored Normal file
View File

@@ -0,0 +1,9 @@
# 忽略所有文件
*
# 只保留指定的 .gitkeep 文件
!.gitignore
!development/.gitkeep
!test/.gitkeep
!production/.gitkeep
!staging/.gitkeep

View File

View File

@@ -1,29 +1,21 @@
FROM nginx:alpine
# 删除默认配置
RUN rm /etc/nginx/conf.d/default.conf
#
# - ./.docker/nginx/conf.c:/etc/nginx/conf.c:ro
# - ./.docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
# - ./.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 ./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
FROM nginx:alpine
# 删除默认配置
RUN rm /etc/nginx/conf.d/default.conf
# 将本地 nginx 配置复制到镜像中
COPY ./conf.c/ /etc/nginx/conf.c/
COPY ./default.conf /etc/nginx/conf.d/default.conf
COPY ./sites-enabled/ /etc/nginx/sites-enabled/
# 暴露端口
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;"]

View 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;
}

View 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 "$@"

View File

@@ -20,6 +20,9 @@
# add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# --- SSL configuration end ---
# 启用 WebSocket 支持
include conf.c/enable-websocket.conf;
#PHP-INFO-START PHP引用配置可以注释或修改
include conf.c/enable-php-74.conf;
#PHP-INFO-END
@@ -34,8 +37,19 @@
}
# --- 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;
}

View File

@@ -1,10 +0,0 @@
# 使用官方PHP镜像
FROM php:7.4.33-fpm-dev-newshop
# 设置工作目录
WORKDIR /var/www/html
# 暴露端口
EXPOSE 9000 9003
CMD ["php-fpm"]

View File

@@ -27,8 +27,14 @@ RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
iputils-ping \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 安装 WebSocat 完成后,清理缓存
COPY ./websocat /usr/local/bin/websocat
RUN chmod +x /usr/local/bin/websocat
# 安装 PHP 扩展
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install \
@@ -45,9 +51,6 @@ RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
# 安装 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
COPY --from=composer:2.2.25 /usr/bin/composer /usr/bin/composer
@@ -56,30 +59,15 @@ RUN composer --version
# 修改 PHP 配置
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 "post_max_size=50M" >> /usr/local/etc/php/conf.d/uploads.ini
# 创建 Xdebug 配置
RUN echo "zend_extension=xdebug.so" > /usr/local/etc/php/conf.d/xdebug.ini
&& echo "upload_max_filesize=150M" >> /usr/local/etc/php/conf.d/uploads.ini \
&& echo "post_max_size=150M" >> /usr/local/etc/php/conf.d/uploads.ini
# # 使用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
# # 创建非 root 用户
# RUN useradd -m -u 1000 phpuser && chown -R phpuser:phpuser /var/www/html
# 设置权限, 防止以下目录无法写入的问题
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
# 暴露端口9000 为 PHP-FPM 端口8080 为 WebSocket 端口
EXPOSE 9000 8080
############ 查看 cron 进程
## 查看 cron 进程
@@ -95,4 +83,10 @@ EXPOSE 9000 9003
#######################################
# 启动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"]

344
docker/php/entrypoint.sh Normal file
View 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 "$@"

View File

@@ -12,19 +12,42 @@ autostart=true
autorestart=true
startretries=3
startsecs=1
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
stopasgroup=true
killasgroup=true
stdout_logfile=/var/log/supervisor/php-fpm.log
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]
command=php /var/www/html/think cron:schedule
environment=APP_ENV=local
process_name=%(program_name)s_%(process_num)02d
numprocs=1
autostart=true
autorestart=true
startretries=5
startsecs=2
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
startretries=3
stdout_logfile=/var/log/supervisor/think-cron.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=10
stderr_logfile=/var/log/supervisor/think-cron-error.log
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

Binary file not shown.

9
docker/redis_data/.gitignore vendored Normal file
View File

@@ -0,0 +1,9 @@
# 忽略所有文件
*
# 只保留指定的 .gitkeep 文件
!.gitignore
!development/.gitkeep
!test/.gitkeep
!production/.gitkeep
!staging/.gitkeep

View File

10
docker/xdebug_logs/.gitignore vendored Normal file
View File

@@ -0,0 +1,10 @@
# 忽略目录下所有文件和子目录
*
# 忽略所有子目录
*/
# 但不忽略 .gitkeep 文件
!.gitkeep
# 不忽略 .gitignore 文件自身
!.gitignore
# 不忽略 development/.gitkeep 文件
!development/.gitkeep

View File

1257
docs/UPGRADE_BY_AI.md Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -24,4 +24,44 @@ create table if not exists lucky_diy_view_util
constraint 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. 在前端页面中使用组件
在前端页面中使用组件,需要在页面中添加对应的组件标签。

View File

@@ -3,23 +3,22 @@ APP_TRACE = true
[APP]
DEFAULT_TIMEZONE = Asia/Shanghai
ENV_MODE = development
[LANG]
default_lang = zh-cn
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = shop_mallnew_dev
USERNAME = root
PASSWORD = root
HOSTNAME = db
DATABASE = shop_mallnew
USERNAME = shop_mallnew
PASSWORD = shop_mallnew
HOSTPORT = 3306
CHARSET = utf8
CHARSET = utf8mb4
DEBUG = true
[redis]
HOST = 127.0.0.1
[REDIS]
HOST = redis
PORT = 6379
PASSWORD = ''
PASSWORD = 'luckyshop123!@#'
EXPIRY = 604800

View File

@@ -10,16 +10,16 @@ default_lang = zh-cn
[DATABASE]
TYPE = mysql
HOSTNAME = production_mysql_host
DATABASE = shop_mallnew_prod
USERNAME = prod_user
PASSWORD = prod_password
HOSTNAME = db
DATABASE = shop_mallnew
USERNAME = shop_mallnew
PASSWORD = shop_mallnew
HOSTPORT = 3306
CHARSET = utf8
CHARSET = utf8mb4
DEBUG = false
[redis]
HOST = production_redis_host
[REDIS]
HOST = redis
PORT = 6379
PASSWORD = production_redis_password
EXPIRY = 86400
PASSWORD = 'luckyshop123!@#'
EXPIRY = 604800

View File

@@ -1,22 +1,24 @@
APP_DEBUG = true
APP_TRACE = true
[APP]
DEFAULT_TIMEZONE = Asia/Shanghai
[LANG]
default_lang = zh-cn
[DATABASE]
TYPE = mysql
HOSTNAME = newshop_mysql
DATABASE = shop_dev
HOSTNAME = db
DATABASE = shop_mallnew
USERNAME = shop_mallnew
PASSWORD = shop_mallnew
HOSTPORT = 3306
CHARSET = utf8
CHARSET = utf8mb4
DEBUG = true
[RRDATABASE]
HOSTNAME = 192.168.2.64
[redis]
HOST = newshop_redis
[REDIS]
HOST = redis
PORT = 6379
PASSWORD = 'luckyshop123!@#'
EXPIRY = 604800

24
src/.env.test Normal file
View 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

View File

@@ -1,12 +1,5 @@
<?php
/**
*/
return [
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据json格式' ]

View File

@@ -1,13 +1,5 @@
<?php
/**
*/
return [
'name' => 'alioss',
'title' => '阿里云OSS',

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alioss\event;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alioss\event;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alioss\event;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alioss\event;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alioss\event;

View File

@@ -1,13 +1,4 @@
<?php
/**
*/
namespace addon\alioss\event;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alioss\model;
use app\model\BaseModel;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alioss\model;
use app\model\system\Config as ConfigModel;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alioss\shop\controller;
use addon\alioss\model\Config as ConfigModel;

View File

@@ -1,12 +1,5 @@
<?php
/**
*/
return [
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据json格式' ]

View File

@@ -1,12 +1,5 @@
<?php
/**
*/
return [
'bind' => [

View File

@@ -1,13 +1,5 @@
<?php
/**
*/
return [
'name' => 'alipay',
'title' => '支付宝支付',

View File

@@ -1,12 +1,5 @@
<?php
/**
*/
return [
[
'name' => 'ALI_PAY_CONFIG',

View File

@@ -1,13 +1,4 @@
<?php
/**
*/
namespace addon\alipay\event;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alipay\event;
use addon\alipay\model\Pay as PayModel;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alipay\event;
use addon\alipay\model\Pay as PayModel;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alipay\event;
use addon\alipay\model\Pay as PayModel;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alipay\event;
use addon\alipay\model\Config as ConfigModel;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alipay\event;
use addon\alipay\model\Pay as PayModel;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alipay\event;
use addon\alipay\model\Pay;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alipay\event;
use addon\alipay\model\Config;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alipay\event;
use addon\alipay\model\Config;

View File

@@ -1,13 +1,4 @@
<?php
/**
*/
namespace addon\alipay\event;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alipay\model;
use app\model\system\Config as ConfigModel;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alipay\model;
use addon\alipay\data\sdk\AopClient;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\alipay\shop\controller;
use addon\alipay\model\Config as ConfigModel;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
return [
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据json格式' ]

View File

@@ -1,13 +1,5 @@
<?php
/**
*/
return [
'name' => 'cases',
'title' => '案例展示',

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\cases\event;
/**

View File

@@ -1,13 +1,4 @@
<?php
/**
*/
namespace addon\cases\event;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\coupon\api\controller;
use app\api\controller\BaseApi;

View File

@@ -1,12 +1,5 @@
<?php
/**
*/
return [
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据json格式' ]

View File

@@ -1,13 +1,5 @@
<?php
/**
*/
return [
'name' => 'coupon',
'title' => '优惠券',

View File

@@ -1,14 +1,7 @@
<?php
/**
*/
namespace addon\coupon\dict;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\coupon\event;
use addon\coupon\model\Coupon;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\coupon\event;
use addon\coupon\model\CouponType;

View File

@@ -1,13 +1,4 @@
<?php
/**
*/
namespace addon\coupon\event;

View File

@@ -1,13 +1,6 @@
<?php
/**
*/
namespace addon\coupon\event;
/**

View File

@@ -1,13 +1,4 @@
<?php
/**
*/
namespace addon\coupon\event;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
namespace addon\coupon\model;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
namespace addon\coupon\model;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
namespace addon\coupon\model;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
namespace addon\coupon\model;

View File

@@ -1,14 +1,5 @@
<?php
/**
*/
namespace addon\coupon\model\share;
use app\model\share\WchatShareBase as BaseModel;

View File

@@ -1,14 +1,5 @@
<?php
/**
*/
namespace addon\coupon\model\share;
use app\model\share\WeappShareBase;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
namespace addon\coupon\shopapi\controller;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
return [

View File

@@ -1,13 +1,4 @@
<?php
/**
*/
return [
'name' => 'diy_default1',
'title' => '官方模板一',

View File

@@ -1,13 +1,4 @@
<?php
/**
*/
namespace addon\diy_default1\event;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
namespace addon\diy_default1\event;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
return [
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据json格式' ]

View File

@@ -1,13 +1,4 @@
<?php
/**
*/
return [
'name' => 'diy_default2',
'title' => '官方模板二',

View File

@@ -1,13 +1,4 @@
<?php
/**
*/
namespace addon\diy_default2\event;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
namespace addon\diy_default2\event;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
return [
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据json格式' ]

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
return [
'name' => 'electronicsheet',
'title' => '电子面单',

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
namespace addon\electronicsheet\event;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
namespace addon\electronicsheet\event;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
namespace addon\electronicsheet\event;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
namespace addon\electronicsheet\event;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
namespace addon\electronicsheet\model;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
namespace addon\electronicsheet\model;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
namespace addon\electronicsheet\shop\controller;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
namespace addon\electronicsheet\shop\controller;

View File

@@ -1,12 +1,4 @@
<?php
/**
*/
namespace addon\fenxiao\api\controller;

Some files were not shown because too many files have changed in this diff Show More