cmc-sales/scripts/setup-staging-native.sh
2025-08-08 13:31:27 +10:00

149 lines
3.9 KiB
Bash
Executable file

#!/bin/bash
# Setup script for running staging environment natively with Caddy
# This runs PHP and Go applications directly on the host
set -e
if [ "$EUID" -ne 0 ]; then
echo "Please run as root (use sudo)"
exit 1
fi
echo "Setting up CMC Sales staging environment (native)..."
# 1. Install dependencies
echo "Installing dependencies..."
apt update
apt install -y \
php7.4-fpm \
php7.4-mysql \
php7.4-gd \
php7.4-curl \
php7.4-mbstring \
php7.4-xml \
php7.4-zip \
mariadb-server \
golang-go \
git \
supervisor
# 2. Create directories
echo "Creating directories..."
mkdir -p /var/www/cmc-sales-staging
mkdir -p /var/log/cmc-staging
mkdir -p /var/run/cmc-staging
mkdir -p /etc/cmc-staging
# 3. Clone or copy application
echo "Setting up application code..."
if [ -d "/home/cmc/cmc-sales" ]; then
cp -r /home/cmc/cmc-sales/* /var/www/cmc-sales-staging/
else
echo "Please clone the repository to /home/cmc/cmc-sales first"
exit 1
fi
# 4. Setup PHP-FPM pool for staging
echo "Configuring PHP-FPM..."
cat > /etc/php/7.4/fpm/pool.d/staging.conf << 'EOF'
[staging]
user = www-data
group = www-data
listen = /run/php/php7.4-fpm-staging.sock
listen.owner = www-data
listen.group = caddy
listen.mode = 0660
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500
; Environment variables
env[APP_ENV] = staging
env[DB_HOST] = localhost
env[DB_PORT] = 3307
env[DB_NAME] = cmc_staging
env[DB_USER] = cmc_staging
; PHP settings
php_admin_value[error_log] = /var/log/cmc-staging/php-error.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 256M
php_admin_value[upload_max_filesize] = 50M
php_admin_value[post_max_size] = 50M
EOF
# 5. Setup MariaDB for staging
echo "Configuring MariaDB..."
mysql -e "CREATE DATABASE IF NOT EXISTS cmc_staging;"
mysql -e "CREATE USER IF NOT EXISTS 'cmc_staging'@'localhost' IDENTIFIED BY '${DB_PASSWORD_STAGING:-staging_password}';"
mysql -e "GRANT ALL PRIVILEGES ON cmc_staging.* TO 'cmc_staging'@'localhost';"
mysql -e "FLUSH PRIVILEGES;"
# 6. Setup Go application service
echo "Setting up Go application service..."
cat > /etc/systemd/system/cmc-go-staging.service << 'EOF'
[Unit]
Description=CMC Go Application - Staging
After=network.target mariadb.service
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/var/www/cmc-sales-staging/go-app
Environment="PORT=8092"
Environment="APP_ENV=staging"
Environment="DB_HOST=localhost"
Environment="DB_PORT=3306"
Environment="DB_USER=cmc_staging"
Environment="DB_NAME=cmc_staging"
ExecStart=/usr/local/bin/cmc-go-staging
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
# 7. Build Go application
echo "Building Go application..."
cd /var/www/cmc-sales-staging/go-app
go mod download
go build -o /usr/local/bin/cmc-go-staging cmd/server/main.go
# 8. Set permissions
echo "Setting permissions..."
chown -R www-data:www-data /var/www/cmc-sales-staging
chmod -R 755 /var/www/cmc-sales-staging
chmod -R 777 /var/www/cmc-sales-staging/app/tmp
chmod -R 777 /var/www/cmc-sales-staging/app/webroot/pdf
chmod -R 777 /var/www/cmc-sales-staging/app/webroot/attachments_files
# 9. Create Caddy user in www-data group
usermod -a -G www-data caddy
# 10. Copy Caddyfile
cp /home/cmc/cmc-sales/Caddyfile.staging-native /etc/caddy/Caddyfile
# 11. Start services
echo "Starting services..."
systemctl restart php7.4-fpm
systemctl enable cmc-go-staging
systemctl start cmc-go-staging
systemctl reload caddy
echo ""
echo "Staging environment setup complete!"
echo ""
echo "Next steps:"
echo "1. Set database password: export DB_PASSWORD_STAGING='your_password'"
echo "2. Update /etc/caddy/Caddyfile with correct database password"
echo "3. Import database: mysql cmc_staging < backup.sql"
echo "4. Restart services: systemctl restart caddy cmc-go-staging"
echo ""
echo "Access staging at: https://staging.cmc.springupsoftware.com"