204 lines
6.0 KiB
Bash
Executable File
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/"
|