Files
ECShopX_docker/php74/init-api.sh
2025-12-29 22:29:50 +08:00

84 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
echo "开始初始化 ecshopx-api 服务..."
# 检查是否在正确的目录
if [ ! -f "docker-compose.yml" ]; then
echo "错误: 未找到 docker-compose.yml 文件,请在项目根目录运行此脚本"
exit 1
fi
# 等待 ecshopx-api 容器启动
echo "等待 ecshopx-api 服务启动..."
sleep 10
# 检查容器是否运行
if ! docker ps | grep -q ecshopx-api; then
echo "错误: ecshopx-api 容器未运行"
exit 1
fi
# 检查 .env 文件是否存在,如果不存在从 .env.full 复制
ENV_FILE_EXISTS=$(docker exec ecshopx-api test -f /data/httpd/.env && echo "yes" || echo "no")
if [ "$ENV_FILE_EXISTS" = "no" ]; then
ENV_FULL_EXISTS=$(docker exec ecshopx-api test -f /data/httpd/.env.full && echo "yes" || echo "no")
if [ "$ENV_FULL_EXISTS" = "yes" ]; then
echo "复制 .env.full 到 .env..."
docker exec ecshopx-api cp /data/httpd/.env.full /data/httpd/.env
else
echo "错误: .env 和 .env.full 都不存在"
exit 1
fi
fi
# 检查宿主机上的 ECShopX 目录是否已挂载(通过检查是否为空)
CONTAINER_FILE_COUNT=$(docker exec ecshopx-api ls -A /data/httpd/ 2>/dev/null | wc -l)
if [ "$CONTAINER_FILE_COUNT" -eq 0 ]; then
echo "警告: 容器内 /data/httpd 目录为空"
# 检查是否存在环境变量定义的目录
if [ -n "$ECShopX" ] && [ -d "$ECShopX" ]; then
echo "使用环境变量 ECShopX 定义的目录: $ECShopX"
# 因为使用环境变量,这里需要使用 docker cp 命令
docker cp $ECShopX/. ecshopx-api:/data/httpd/
else
echo "错误: ECShopX 环境变量未设置或指向的目录不存在"
exit 1
fi
else
echo "容器中检测到 $CONTAINER_FILE_COUNT 个文件,挂载可能正常"
fi
# 执行composer install
echo "在容器中运行 composer install..."
docker exec ecshopx-api sh -c "cd /data/httpd && chmod +x composer.phar && php composer.phar config repo.packagist composer https://mirrors.aliyun.com/composer/ && php -d memory_limit=-1 composer.phar install --optimize-autoloader"
# 安装必要的软件
echo "安装 Supervisor 和 Curl..."
docker exec ecshopx-api apk add --no-cache supervisor curl vim
echo "创建 Supervisor 配置目录...并启动"
docker exec ecshopx-api mkdir -p /etc/supervisor.d/
docker exec ecshopx-api sh -c "cp -r /data/httpd/docker-new/supervisor/* /etc/supervisor.d/ && cp /data/httpd/docker-new/supervisord.conf /etc/supervisord.conf"
docker exec ecshopx-api sh -c "supervisord -c /etc/supervisord.conf"
echo "设置存储目录权限..."
docker exec ecshopx-api sh -c "mkdir -p /data/httpd/storage/logs && mkdir -p /data/httpd/storage/framework/cache/laravel-excel && chown -R www-data:www-data /data/httpd/storage"
echo "修复数据库和 Redis 配置..."
docker exec ecshopx-api sed -i 's/DB_HOST=127.0.0.1/DB_HOST=mysql/g; s/REDIS_HOST=127.0.0.1/REDIS_HOST=redis/g' /data/httpd/.env
docker exec ecshopx-api sed -i 's/^DB_USERNAME=$/DB_USERNAME=root/g; s/^DB_PASSWORD=$/DB_PASSWORD=root/g; s/^DB_DATABASE=$/DB_DATABASE=ecshopx/g; s/^REDIS_PASSWORD=$/REDIS_PASSWORD=123456/g' /data/httpd/.env
echo "创建数据库..."
docker exec ecshopx-mysql mysql -uroot -proot -e "CREATE DATABASE IF NOT EXISTS ecshopx CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
echo "生成应用密钥..."
docker exec -w /data/httpd ecshopx-api php artisan key:generate
echo "运行数据库迁移..."
docker exec -w /data/httpd ecshopx-api php artisan doctrine:migrations:migrate --force
echo "初始化完成!"
echo "所有服务现在应该正常运行。"
echo "您可以使用 'docker-compose ps' 检查服务状态。"