v0.1.18 - Add automatic cleanup of dynamic build artifacts after static builds
This commit is contained in:
162
deploy_static.sh
Executable file
162
deploy_static.sh
Executable file
@@ -0,0 +1,162 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
print_status() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
||||
print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
|
||||
print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
|
||||
print_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
||||
|
||||
# Configuration
|
||||
REMOTE_HOST="laantungir.net"
|
||||
REMOTE_USER="ubuntu"
|
||||
REMOTE_DIR="/home/ubuntu/ginxsom"
|
||||
REMOTE_BINARY_PATH="/home/ubuntu/ginxsom/ginxsom-fcgi_static"
|
||||
REMOTE_SOCKET="/tmp/ginxsom-fcgi.sock"
|
||||
REMOTE_DATA_DIR="/var/www/html/blossom"
|
||||
REMOTE_DB_PATH="/home/ubuntu/ginxsom/db/ginxsom.db"
|
||||
|
||||
# Detect architecture
|
||||
ARCH=$(uname -m)
|
||||
case "$ARCH" in
|
||||
x86_64)
|
||||
BINARY_NAME="ginxsom-fcgi_static_x86_64"
|
||||
;;
|
||||
aarch64|arm64)
|
||||
BINARY_NAME="ginxsom-fcgi_static_arm64"
|
||||
;;
|
||||
*)
|
||||
print_error "Unsupported architecture: $ARCH"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
LOCAL_BINARY="./build/$BINARY_NAME"
|
||||
|
||||
print_status "Starting static binary deployment to $REMOTE_HOST..."
|
||||
|
||||
# Check if static binary exists
|
||||
if [ ! -f "$LOCAL_BINARY" ]; then
|
||||
print_error "Static binary not found: $LOCAL_BINARY"
|
||||
print_status "Building static binary..."
|
||||
./build_static.sh
|
||||
|
||||
if [ ! -f "$LOCAL_BINARY" ]; then
|
||||
print_error "Build failed - binary still not found"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
print_success "Static binary found: $LOCAL_BINARY"
|
||||
print_status "Binary size: $(du -h "$LOCAL_BINARY" | cut -f1)"
|
||||
|
||||
# Verify binary is static
|
||||
if ldd "$LOCAL_BINARY" 2>&1 | grep -q "not a dynamic executable"; then
|
||||
print_success "Binary is fully static"
|
||||
elif ldd "$LOCAL_BINARY" 2>&1 | grep -q "statically linked"; then
|
||||
print_success "Binary is statically linked"
|
||||
else
|
||||
print_warning "Binary may have dynamic dependencies"
|
||||
ldd "$LOCAL_BINARY" 2>&1 || true
|
||||
fi
|
||||
|
||||
# Setup remote environment
|
||||
print_status "Setting up remote environment..."
|
||||
ssh $REMOTE_USER@$REMOTE_HOST << 'EOF'
|
||||
set -e
|
||||
|
||||
# Create directories
|
||||
mkdir -p /home/ubuntu/ginxsom/db
|
||||
sudo mkdir -p /var/www/html/blossom
|
||||
sudo chown www-data:www-data /var/www/html/blossom
|
||||
sudo chmod 755 /var/www/html/blossom
|
||||
|
||||
# Stop existing processes
|
||||
echo "Stopping existing ginxsom processes..."
|
||||
sudo pkill -f ginxsom-fcgi || true
|
||||
sudo rm -f /tmp/ginxsom-fcgi.sock || true
|
||||
|
||||
echo "Remote environment ready"
|
||||
EOF
|
||||
|
||||
print_success "Remote environment configured"
|
||||
|
||||
# Copy static binary
|
||||
print_status "Copying static binary to remote server..."
|
||||
scp "$LOCAL_BINARY" $REMOTE_USER@$REMOTE_HOST:$REMOTE_BINARY_PATH
|
||||
|
||||
print_success "Binary copied successfully"
|
||||
|
||||
# Set permissions and start service
|
||||
print_status "Starting ginxsom FastCGI process..."
|
||||
ssh $REMOTE_USER@$REMOTE_HOST << EOF
|
||||
# Make binary executable
|
||||
chmod +x $REMOTE_BINARY_PATH
|
||||
|
||||
# Clean up any existing socket
|
||||
sudo rm -f $REMOTE_SOCKET
|
||||
|
||||
# Start FastCGI process
|
||||
echo "Starting ginxsom FastCGI..."
|
||||
sudo spawn-fcgi -M 666 -u www-data -g www-data -s $REMOTE_SOCKET -U www-data -G www-data -d $REMOTE_DIR -- $REMOTE_BINARY_PATH --db-path "$REMOTE_DB_PATH" --storage-dir "$REMOTE_DATA_DIR"
|
||||
|
||||
# Give it a moment to start
|
||||
sleep 2
|
||||
|
||||
# Verify process is running
|
||||
if pgrep -f "ginxsom-fcgi" > /dev/null; then
|
||||
echo "FastCGI process started successfully"
|
||||
echo "PID: \$(pgrep -f ginxsom-fcgi)"
|
||||
else
|
||||
echo "Process verification: socket exists"
|
||||
ls -la $REMOTE_SOCKET
|
||||
fi
|
||||
EOF
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
print_success "FastCGI process started"
|
||||
else
|
||||
print_error "Failed to start FastCGI process"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Reload nginx
|
||||
print_status "Reloading nginx..."
|
||||
ssh $REMOTE_USER@$REMOTE_HOST << 'EOF'
|
||||
if sudo nginx -t; then
|
||||
sudo nginx -s reload
|
||||
echo "Nginx reloaded successfully"
|
||||
else
|
||||
echo "Nginx configuration test failed"
|
||||
exit 1
|
||||
fi
|
||||
EOF
|
||||
|
||||
print_success "Nginx reloaded"
|
||||
|
||||
# Test deployment
|
||||
print_status "Testing deployment..."
|
||||
|
||||
echo "Testing health endpoint..."
|
||||
if curl -k -s --max-time 10 "https://blossom.laantungir.net/health" | grep -q "OK"; then
|
||||
print_success "Health check passed"
|
||||
else
|
||||
print_warning "Health check failed - checking response..."
|
||||
curl -k -v --max-time 10 "https://blossom.laantungir.net/health" 2>&1 | head -10
|
||||
fi
|
||||
|
||||
print_success "Deployment to $REMOTE_HOST completed!"
|
||||
print_status "Ginxsom should now be available at: https://blossom.laantungir.net"
|
||||
print_status ""
|
||||
print_status "Deployment Summary:"
|
||||
echo " Binary: $BINARY_NAME"
|
||||
echo " Size: $(du -h "$LOCAL_BINARY" | cut -f1)"
|
||||
echo " Type: Fully static MUSL binary"
|
||||
echo " Portability: Works on any Linux distribution"
|
||||
echo " Deployment time: ~10 seconds (vs ~5 minutes for dynamic build)"
|
||||
Reference in New Issue
Block a user