Files
ginxsom/config/deploy.sh
2025-08-18 21:51:54 -04:00

234 lines
5.7 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
# Ginxsom Deployment Script
# This script sets up the ginxsom blossom server configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
check_root() {
if [[ $EUID -eq 0 ]]; then
log_error "This script should not be run as root. Please run as a regular user with sudo access."
exit 1
fi
}
check_dependencies() {
log_info "Checking dependencies..."
if ! command -v nginx &> /dev/null; then
log_error "nginx is not installed. Please install nginx first."
exit 1
fi
if ! command -v systemctl &> /dev/null; then
log_error "systemctl is not available. This script requires systemd."
exit 1
fi
log_info "Dependencies check passed."
}
create_directories() {
log_info "Creating required directories..."
# Create data directories
sudo mkdir -p /var/lib/ginxsom/files
sudo mkdir -p /var/lib/ginxsom/db
sudo mkdir -p /run/ginxsom
sudo mkdir -p /var/log/ginxsom
sudo mkdir -p /etc/ginxsom
log_info "Directories created."
}
create_user() {
log_info "Creating ginxsom user..."
if ! id "ginxsom" &>/dev/null; then
sudo useradd --system --no-create-home --shell /bin/false ginxsom
log_info "User 'ginxsom' created."
else
log_info "User 'ginxsom' already exists."
fi
}
set_permissions() {
log_info "Setting file permissions..."
# Set ownership of data directories
sudo chown -R ginxsom:ginxsom /var/lib/ginxsom
sudo chown -R ginxsom:ginxsom /run/ginxsom
sudo chown -R ginxsom:ginxsom /var/log/ginxsom
sudo chown -R ginxsom:ginxsom /etc/ginxsom
# Set proper permissions
sudo chmod 755 /var/lib/ginxsom
sudo chmod 755 /var/lib/ginxsom/files
sudo chmod 755 /var/lib/ginxsom/db
sudo chmod 755 /run/ginxsom
sudo chmod 755 /var/log/ginxsom
sudo chmod 755 /etc/ginxsom
log_info "Permissions set."
}
deploy_nginx_config() {
log_info "Deploying nginx configuration..."
# Copy nginx configuration
sudo cp "$SCRIPT_DIR/nginx/ginxsom.conf" /etc/nginx/sites-available/ginxsom
# Enable the site
if [[ ! -L /etc/nginx/sites-enabled/ginxsom ]]; then
sudo ln -sf /etc/nginx/sites-available/ginxsom /etc/nginx/sites-enabled/ginxsom
log_info "Nginx site enabled."
else
log_info "Nginx site already enabled."
fi
# Test nginx configuration
if sudo nginx -t; then
log_info "Nginx configuration test passed."
else
log_error "Nginx configuration test failed. Please check the configuration."
exit 1
fi
}
deploy_systemd_service() {
log_info "Deploying systemd service..."
# Copy systemd service file
sudo cp "$SCRIPT_DIR/systemd/ginxsom.service" /etc/systemd/system/ginxsom.service
# Reload systemd
sudo systemctl daemon-reload
log_info "Systemd service installed."
}
create_sample_config() {
log_info "Creating sample configuration..."
if [[ ! -f /etc/ginxsom/config.toml ]]; then
sudo tee /etc/ginxsom/config.toml > /dev/null << 'EOF'
# Ginxsom Blossom Server Configuration
[server]
# FastCGI socket path
socket = "/run/ginxsom/ginxsom.sock"
# Data directory for files
data_dir = "/var/lib/ginxsom"
# Maximum file size in bytes (100MB)
max_file_size = 104857600
[logging]
level = "info"
file = "/var/log/ginxsom/ginxsom.log"
[storage]
# File storage directory
files_dir = "/var/lib/ginxsom/files"
# Database file for metadata
database = "/var/lib/ginxsom/db/ginxsom.db"
[auth]
# Enable authentication for uploads
require_auth = true
# Enable list endpoint
enable_list = false
# Enable mirror endpoint
enable_mirror = false
EOF
sudo chown ginxsom:ginxsom /etc/ginxsom/config.toml
sudo chmod 640 /etc/ginxsom/config.toml
log_info "Sample configuration created at /etc/ginxsom/config.toml"
else
log_info "Configuration file already exists at /etc/ginxsom/config.toml"
fi
}
show_status() {
log_info "Deployment complete! Next steps:"
echo ""
echo "1. Build and install the ginxsom binary:"
echo " cd $PROJECT_ROOT"
echo " make build"
echo " sudo make install"
echo ""
echo "2. Start the services:"
echo " sudo systemctl enable ginxsom"
echo " sudo systemctl start ginxsom"
echo " sudo systemctl reload nginx"
echo ""
echo "3. Check status:"
echo " sudo systemctl status ginxsom"
echo " sudo systemctl status nginx"
echo ""
echo "4. Test the server:"
echo " curl http://localhost/health"
echo ""
echo "Configuration files:"
echo " - Nginx: /etc/nginx/sites-available/ginxsom"
echo " - SystemD: /etc/systemd/system/ginxsom.service"
echo " - Config: /etc/ginxsom/config.toml"
echo ""
}
main() {
log_info "Starting ginxsom deployment..."
check_root
check_dependencies
create_user
create_directories
set_permissions
deploy_nginx_config
deploy_systemd_service
create_sample_config
show_status
log_info "Deployment script completed successfully!"
}
# Parse command line arguments
case "${1:-}" in
--help|-h)
echo "Usage: $0 [options]"
echo ""
echo "Options:"
echo " --help, -h Show this help message"
echo ""
echo "This script deploys the ginxsom blossom server configuration."
exit 0
;;
*)
main "$@"
;;
esac