Files
ginxsom/deploy_local.sh

204 lines
6.0 KiB
Bash
Executable File

#!/bin/bash
# Deploy Ginxsom to local installation directory
# Builds static binary and deploys to ~/Storage/Blossom
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
DEPLOY_DIR="$HOME/Storage/Blossom"
SERVICE_NAME="ginxsom.service"
NGINX_SITE_NAME="ginxsom"
NGINX_PORT="9443"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${YELLOW}=== Ginxsom Local Deployment ===${NC}"
echo "Source: $SCRIPT_DIR"
echo "Target: $DEPLOY_DIR"
echo "Nginx Port: $NGINX_PORT"
echo ""
# Step 1: Build static binary
echo -e "${YELLOW}Step 1: Building static binary...${NC}"
cd "$SCRIPT_DIR"
./build_static.sh
if [ $? -ne 0 ]; then
echo -e "${RED}Build failed! Cannot continue.${NC}"
exit 1
fi
echo -e "${GREEN}✓ Build complete${NC}"
echo ""
# Step 2: Create deployment directory
echo -e "${YELLOW}Step 2: Preparing deployment directory...${NC}"
mkdir -p "$DEPLOY_DIR"
mkdir -p "$DEPLOY_DIR/blobs"
mkdir -p "$DEPLOY_DIR/db"
mkdir -p "$DEPLOY_DIR/logs"
echo -e "${GREEN}✓ Directories created${NC}"
echo ""
# Step 3: Stop service before copying binary
echo -e "${YELLOW}Step 3: Stopping service before binary update...${NC}"
if systemctl list-unit-files | grep -q "$SERVICE_NAME"; then
sudo systemctl stop "$SERVICE_NAME" || true
sleep 1
echo -e "${GREEN}✓ Service stopped${NC}"
fi
echo ""
# Step 4: Copy binary
echo -e "${YELLOW}Step 4: Copying binary...${NC}"
# 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" ;;
*) BINARY_NAME="ginxsom-fcgi_static_${ARCH}" ;;
esac
SOURCE_BINARY="$SCRIPT_DIR/build/$BINARY_NAME"
TARGET_BINARY="$DEPLOY_DIR/ginxsom"
if [ ! -f "$SOURCE_BINARY" ]; then
echo -e "${RED}Error: Binary not found at $SOURCE_BINARY${NC}"
exit 1
fi
cp "$SOURCE_BINARY" "$TARGET_BINARY"
chmod +x "$TARGET_BINARY"
echo -e "${GREEN}✓ Binary copied to $TARGET_BINARY${NC}"
echo ""
# Step 5: Copy configuration files if they exist
echo -e "${YELLOW}Step 5: Copying configuration files...${NC}"
if [ -f "$SCRIPT_DIR/mime.types" ]; then
cp "$SCRIPT_DIR/mime.types" "$DEPLOY_DIR/"
echo " - mime.types"
fi
if [ -f "$SCRIPT_DIR/.admin_keys" ]; then
cp "$SCRIPT_DIR/.admin_keys" "$DEPLOY_DIR/"
chmod 600 "$DEPLOY_DIR/.admin_keys"
echo " - .admin_keys"
fi
if [ -f "$SCRIPT_DIR/config/fastcgi_params" ]; then
cp "$SCRIPT_DIR/config/fastcgi_params" "$DEPLOY_DIR/"
echo " - fastcgi_params"
fi
echo -e "${GREEN}✓ Configuration files copied${NC}"
echo ""
# Step 6: Setup nginx configuration
echo -e "${YELLOW}Step 6: Setting up nginx configuration...${NC}"
# Copy nginx config to sites-available
if [ -f "$SCRIPT_DIR/config/ginxsom-local.conf" ]; then
sudo cp "$SCRIPT_DIR/config/ginxsom-local.conf" "/etc/nginx/sites-available/$NGINX_SITE_NAME"
echo " - Copied nginx config to sites-available"
# Create symlink in sites-enabled if it doesn't exist
if [ ! -L "/etc/nginx/sites-enabled/$NGINX_SITE_NAME" ]; then
sudo ln -s "/etc/nginx/sites-available/$NGINX_SITE_NAME" "/etc/nginx/sites-enabled/$NGINX_SITE_NAME"
echo " - Created symlink in sites-enabled"
else
echo " - Symlink already exists in sites-enabled"
fi
# Test nginx configuration
echo " - Testing nginx configuration..."
if sudo nginx -t; then
echo -e "${GREEN}✓ Nginx configuration valid${NC}"
else
echo -e "${RED}✗ Nginx configuration test failed${NC}"
exit 1
fi
else
echo -e "${YELLOW}Warning: nginx config not found at $SCRIPT_DIR/config/ginxsom-local.conf${NC}"
fi
echo ""
# Step 7: Restart service
echo -e "${YELLOW}Step 7: Restarting service...${NC}"
# Check if service exists
if systemctl list-unit-files | grep -q "$SERVICE_NAME"; then
echo "Stopping service..."
sudo systemctl stop "$SERVICE_NAME" || true
echo "Reloading systemd daemon..."
sudo systemctl daemon-reload
echo "Starting service..."
sudo systemctl start "$SERVICE_NAME"
# Wait a moment for service to start
sleep 2
# Check status
if systemctl is-active --quiet "$SERVICE_NAME"; then
echo -e "${GREEN}✓ Service started successfully${NC}"
systemctl status "$SERVICE_NAME" --no-pager -l
else
echo -e "${RED}✗ Service failed to start${NC}"
echo "Check logs with: journalctl -u $SERVICE_NAME -n 50"
exit 1
fi
else
echo -e "${YELLOW}Service not found. Install with:${NC}"
echo " sudo cp ginxsom-local.service /etc/systemd/system/ginxsom.service"
echo " sudo systemctl daemon-reload"
echo " sudo systemctl enable ginxsom.service"
echo " sudo systemctl start ginxsom.service"
fi
echo ""
# Step 8: Start/restart nginx
echo -e "${YELLOW}Step 8: Starting nginx...${NC}"
if systemctl is-active --quiet nginx; then
echo "Reloading nginx..."
sudo systemctl reload nginx
else
echo "Starting nginx..."
sudo systemctl start nginx
fi
if systemctl is-active --quiet nginx; then
echo -e "${GREEN}✓ Nginx is running${NC}"
else
echo -e "${RED}✗ Nginx failed to start${NC}"
exit 1
fi
echo ""
echo -e "${GREEN}=== Deployment complete ===${NC}"
echo ""
echo "Service Information:"
echo " FastCGI Service: $SERVICE_NAME"
echo " Nginx Port: $NGINX_PORT"
echo " Socket: /tmp/ginxsom.sock"
echo " Storage: $DEPLOY_DIR/blobs"
echo " Database: $DEPLOY_DIR/db"
echo ""
echo "Service commands:"
echo " Status: systemctl status $SERVICE_NAME"
echo " Stop: sudo systemctl stop $SERVICE_NAME"
echo " Start: sudo systemctl start $SERVICE_NAME"
echo " Restart: sudo systemctl restart $SERVICE_NAME"
echo " Logs: journalctl -u $SERVICE_NAME -f"
echo ""
echo "Nginx commands:"
echo " Status: systemctl status nginx"
echo " Reload: sudo systemctl reload nginx"
echo " Logs: sudo tail -f /var/log/nginx/error.log"
echo ""
echo "Test the server:"
echo " curl http://localhost:$NGINX_PORT/health"
echo " curl http://localhost:$NGINX_PORT/"