72 lines
2.6 KiB
Bash
72 lines
2.6 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
echo "==> Copying Docker swoole config..."
|
|
cp /tmp/swoole_docker.php /var/www/html/config/swoole.php
|
|
|
|
echo "==> Generating .env from environment variables..."
|
|
cat > /var/www/html/.env << ENVEOF
|
|
APP_DEBUG = true
|
|
APP_KEY = "base64:t6/NqsDlNuYSLcdgx//oSVIVBjtRCMa2D6k35Jizla4="
|
|
|
|
[APP]
|
|
DEFAULT_TIMEZONE = Asia/Shanghai
|
|
|
|
[DATABASE]
|
|
TYPE = mysql
|
|
HOSTNAME = ${DB_HOSTNAME:-mysql}
|
|
DATABASE = ${DB_DATABASE:-crmeb_chat}
|
|
USERNAME = ${DB_USERNAME:-root}
|
|
PASSWORD = ${DB_PASSWORD:-root}
|
|
HOSTPORT = ${DB_PORT:-3306}
|
|
CHARSET = utf8
|
|
DEBUG = true
|
|
|
|
[LANG]
|
|
default_lang = zh-cn
|
|
|
|
[REDIS]
|
|
REDIS_HOSTNAME = ${REDIS_HOSTNAME:-redis}
|
|
PORT = ${REDIS_PORT:-6379}
|
|
REDIS_PASSWORD = ${REDIS_PASSWORD:-}
|
|
SELECT = 0
|
|
ENVEOF
|
|
|
|
echo "==> Waiting for MySQL..."
|
|
until mysqladmin ping -h "${DB_HOSTNAME:-mysql}" -u "${DB_USERNAME:-root}" -p"${DB_PASSWORD:-root}" --silent 2>/dev/null; do
|
|
echo " MySQL not ready, retrying..."
|
|
sleep 2
|
|
done
|
|
echo " MySQL is ready!"
|
|
|
|
echo "==> Importing database schema..."
|
|
# 仅在空库(无任何业务表)时导入初始化 SQL,避免容器重启/线上更新代码时重置数据库。
|
|
# 如需重置数据:docker compose down -v 清掉数据卷后重新启动即可触发导入。
|
|
# 以 eb_system_admin(后台账号表,初始化 SQL 中较靠后)作为初始化完成的哨兵:部分导入的库不会被误判为已初始化
|
|
TABLE_SENTINEL=$(mysql -h "${DB_HOSTNAME:-mysql}" -u "${DB_USERNAME:-root}" -p"${DB_PASSWORD:-root}" -N -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='${DB_DATABASE:-crmeb_chat}' AND table_name='eb_system_admin';" 2>/dev/null || echo 0)
|
|
if [ "${TABLE_SENTINEL:-0}" != "0" ]; then
|
|
echo " Database already initialized (sentinel table found), skipping import to protect existing data."
|
|
else
|
|
echo " Empty database detected, importing crmeb_clean.sql..."
|
|
mysql -h "${DB_HOSTNAME:-mysql}" -u "${DB_USERNAME:-root}" -p"${DB_PASSWORD:-root}" --default-character-set=utf8mb4 "${DB_DATABASE:-crmeb_chat}" < /var/www/html/public/install/crmeb_clean.sql 2>/dev/null && \
|
|
echo " Database schema imported." || \
|
|
echo " Database import failed."
|
|
fi
|
|
|
|
echo "==> Skipping install wizard..."
|
|
touch /var/www/html/public/install/install.lock
|
|
|
|
echo "==> Installing composer dependencies..."
|
|
cd /var/www/html
|
|
if [ ! -f vendor/autoload.php ]; then
|
|
composer install --no-interaction --no-dev --optimize-autoloader
|
|
else
|
|
echo " Vendors already installed."
|
|
fi
|
|
|
|
echo "==> Cleaning old Swoole PID files..."
|
|
rm -f /var/www/html/runtime/swoole.pid /var/www/html/runtime/swoole.log
|
|
|
|
echo "==> Starting Swoole HTTP server on 0.0.0.0:${SWOOLE_PORT:-20108}..."
|
|
exec php think swoole start
|