#!/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 curl openssl install -m 0755 -d /etc/apt/keyrings if [ ! -f /etc/apt/keyrings/docker.asc ]; then curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc chmod a+r /etc/apt/keyrings/docker.asc fi . /etc/os-release ARCH="$(dpkg --print-architecture)" CODENAME="${UBUNTU_CODENAME:-$VERSION_CODENAME}" { printf '%s\n' \ 'Types: deb' \ 'URIs: https://download.docker.com/linux/ubuntu' \ "Suites: $CODENAME" \ 'Components: stable' \ "Architectures: $ARCH" \ 'Signed-By: /etc/apt/keyrings/docker.asc' } > /etc/apt/sources.list.d/docker.sources apt-get update if command -v docker >/dev/null 2>&1; then apt-get install -y --no-install-recommends docker-buildx-plugin docker-compose-plugin else apt-get install -y --no-install-recommends docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin fi 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"