CaiWuXiTong/deploy/bootstrap-server.sh

73 lines
2.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/.env" ]; then
DB_PASSWORD="$(openssl rand -hex 24)"
DB_ROOT_PASSWORD="$(openssl rand -hex 24)"
APP_KEY="$(openssl rand -base64 32 | tr -d '\n')"
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=db' \
'DB_PORT=3306' \
'DB_DATABASE=caiwu' \
'DB_USERNAME=caiwu' \
"DB_PASSWORD=$DB_PASSWORD" \
'DB_PREFIX=ak_' \
'CACHE_DRIVER=file' \
'SESSION_DRIVER=file' \
'QUEUE_CONNECTION=sync' \
'MARIADB_DATABASE=caiwu' \
'MARIADB_USER=caiwu' \
"MARIADB_PASSWORD=$DB_PASSWORD" \
"MARIADB_ROOT_PASSWORD=$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"