125 lines
4.0 KiB
Bash
125 lines
4.0 KiB
Bash
#!/bin/sh
|
|
set -eu
|
|
|
|
APP_URL="${1:?APP_URL is required}"
|
|
REMOTE_DIR="${2:-/opt/caiwuxitong}"
|
|
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
echo "bootstrap-server.sh must run as root" >&2
|
|
exit 1
|
|
fi
|
|
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
apt-get update
|
|
apt-get install -y --no-install-recommends ca-certificates openssl docker.io docker-compose-v2
|
|
systemctl enable --now docker
|
|
|
|
if ! swapon --show=NAME --noheadings | grep -q .; then
|
|
if [ ! -f /swapfile ]; then
|
|
fallocate -l 2G /swapfile
|
|
chmod 600 /swapfile
|
|
mkswap /swapfile >/dev/null
|
|
fi
|
|
|
|
swapon /swapfile
|
|
|
|
if ! grep -q '^/swapfile ' /etc/fstab; then
|
|
printf '%s\n' '/swapfile none swap sw 0 0' >> /etc/fstab
|
|
fi
|
|
fi
|
|
|
|
install -d -m 700 "$REMOTE_DIR/runtime"
|
|
|
|
if [ ! -f "$REMOTE_DIR/runtime/qiniu-storage.env" ]; then
|
|
umask 077
|
|
: > "$REMOTE_DIR/runtime/qiniu-storage.env"
|
|
chmod 600 "$REMOTE_DIR/runtime/qiniu-storage.env"
|
|
fi
|
|
|
|
clickhouse_env="$REMOTE_DIR/runtime/clickhouse.env"
|
|
if [ ! -f "$clickhouse_env" ]; then
|
|
clickhouse_password="$(openssl rand -hex 24)"
|
|
umask 077
|
|
{
|
|
printf '%s\n' \
|
|
'CLICKHOUSE_DB=caiwu_business_analytics' \
|
|
'CLICKHOUSE_USER=caiwu_app' \
|
|
"CLICKHOUSE_PASSWORD=$clickhouse_password" \
|
|
'CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1' \
|
|
'BUSINESS_CLICKHOUSE_ENABLED=true' \
|
|
'BUSINESS_CLICKHOUSE_URL=http://clickhouse:8123' \
|
|
'BUSINESS_CLICKHOUSE_DATABASE=caiwu_business_analytics' \
|
|
'BUSINESS_CLICKHOUSE_USERNAME=caiwu_app' \
|
|
"BUSINESS_CLICKHOUSE_PASSWORD=$clickhouse_password"
|
|
} > "$clickhouse_env"
|
|
chmod 600 "$clickhouse_env"
|
|
fi
|
|
|
|
if [ ! -f "$REMOTE_DIR/runtime/config-db.env" ]; then
|
|
CONFIG_DB_PASSWORD="$(openssl rand -hex 32)"
|
|
CONFIG_DB_ROOT_PASSWORD="$(openssl rand -hex 32)"
|
|
|
|
umask 077
|
|
{
|
|
printf '%s\n' \
|
|
'MARIADB_DATABASE=caiwu_system_config' \
|
|
'BUSINESS_MIRROR_DATABASE=caiwu_business_mirror' \
|
|
'MARIADB_USER=caiwu_config_writer' \
|
|
"MARIADB_PASSWORD=$CONFIG_DB_PASSWORD" \
|
|
"MARIADB_ROOT_PASSWORD=$CONFIG_DB_ROOT_PASSWORD" \
|
|
'MARIADB_AUTO_UPGRADE=1'
|
|
} > "$REMOTE_DIR/runtime/config-db.env"
|
|
chmod 600 "$REMOTE_DIR/runtime/config-db.env"
|
|
fi
|
|
|
|
if [ ! -f "$REMOTE_DIR/runtime/.env" ]; then
|
|
LEGACY_DB_PASSWORD="$(openssl rand -hex 24)"
|
|
LEGACY_DB_ROOT_PASSWORD="$(openssl rand -hex 24)"
|
|
CONFIG_DB_PASSWORD="$(sed -n 's/^MARIADB_PASSWORD=//p' "$REMOTE_DIR/runtime/config-db.env" | head -n 1)"
|
|
APP_KEY="$(openssl rand -base64 32 | tr -d '\n')"
|
|
|
|
if [ -z "$CONFIG_DB_PASSWORD" ]; then
|
|
echo "Missing MARIADB_PASSWORD in $REMOTE_DIR/runtime/config-db.env" >&2
|
|
exit 1
|
|
fi
|
|
|
|
umask 077
|
|
{
|
|
printf '%s\n' \
|
|
'APP_NAME=CaiWuXiTong' \
|
|
'APP_ENV=production' \
|
|
"APP_KEY=base64:$APP_KEY" \
|
|
'APP_DEBUG=false' \
|
|
'APP_INSTALLED=false' \
|
|
"APP_URL=$APP_URL" \
|
|
'APP_LOCALE=zh-CN' \
|
|
'APP_FALLBACK_LOCALE=en-GB' \
|
|
'APP_TIMEZONE=Asia/Shanghai' \
|
|
'LOG_CHANNEL=stack' \
|
|
'DB_CONNECTION=mysql' \
|
|
'DB_HOST=config_db' \
|
|
'DB_PORT=3306' \
|
|
'DB_DATABASE=caiwu_system_config' \
|
|
'DB_USERNAME=caiwu_config_writer' \
|
|
"DB_PASSWORD=$CONFIG_DB_PASSWORD" \
|
|
'DB_PREFIX=ak_' \
|
|
'MYSQL_ATTR_SSL_CIPHER=DEFAULT' \
|
|
'MYSQL_ATTR_SSL_VERIFY_SERVER_CERT=false' \
|
|
'CACHE_DRIVER=file' \
|
|
'SESSION_DRIVER=file' \
|
|
'QUEUE_CONNECTION=sync' \
|
|
'UPSTREAM_STORED_CONFIG_ENABLED=true' \
|
|
'UPSTREAM_LOCAL_CONFIG_ENABLED=false' \
|
|
'MARIADB_DATABASE=caiwu' \
|
|
'MARIADB_USER=caiwu' \
|
|
"MARIADB_PASSWORD=$LEGACY_DB_PASSWORD" \
|
|
"MARIADB_ROOT_PASSWORD=$LEGACY_DB_ROOT_PASSWORD" \
|
|
'MARIADB_AUTO_UPGRADE=1'
|
|
} > "$REMOTE_DIR/runtime/.env"
|
|
chmod 600 "$REMOTE_DIR/runtime/.env"
|
|
fi
|
|
|
|
docker --version
|
|
docker compose version
|
|
echo "Server runtime is ready: $REMOTE_DIR"
|