#!/bin/bash # Setup script for VSCode (code-server) domain (vscode.mnemo-cards.online) # Usage: ./setup-vscode-domain.sh set -e # Load configuration SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/config.sh" echo "🚀 Setting up VSCode (code-server) domain: vscode.mnemo-cards.online..." # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color print_status() { echo -e "${GREEN}[INFO]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } print_info() { echo -e "${BLUE}[INFO]${NC} $1" } # Upload nginx config for VSCode print_status "Uploading VSCode nginx configuration..." scp "$SCRIPT_DIR/vscode-nginx.conf" "$SERVER_USER@$SERVER_IP:/tmp/vscode-nginx.conf" print_status "Setting up VSCode domain on server..." # Execute setup commands on server ssh "$SERVER_USER@$SERVER_IP" << EOF set -e echo "Setting up VSCode (code-server) domain configuration..." # Install code-server if not already installed if ! command -v code-server &> /dev/null; then echo "Installing code-server..." # Update package list apt update # Install required dependencies apt install -y curl wget gnupg2 software-properties-common apt-transport-https ca-certificates # Add code-server repository curl -fsSL https://code-server.dev/install.sh | sh echo "✅ code-server installed successfully" else echo "✅ code-server is already installed" fi # Create code-server user if it doesn't exist if ! id -u vscode &>/dev/null; then echo "Creating vscode user..." useradd -m -s /bin/bash vscode echo "vscode:vscode123!" | chpasswd usermod -aG sudo vscode fi # Create code-server configuration directory mkdir -p /home/vscode/.config/code-server # Create code-server config file cat > /home/vscode/.config/code-server/config.yaml << 'CODE_SERVER_CONFIG_EOF' bind-addr: 127.0.0.1:8443 auth: password password: vscode123! cert: false CODE_SERVER_CONFIG_EOF # Set proper ownership chown -R vscode:vscode /home/vscode/.config # Create systemd service for code-server cat > /etc/systemd/system/code-server.service << 'SYSTEMD_EOF' [Unit] Description=code-server After=network.target [Service] Type=simple User=vscode WorkingDirectory=/home/vscode ExecStart=/usr/bin/code-server --config /home/vscode/.config/code-server/config.yaml Restart=always RestartSec=10 [Install] WantedBy=multi-user.target SYSTEMD_EOF # Enable and start code-server service systemctl daemon-reload systemctl enable code-server systemctl start code-server # Wait a moment for service to start sleep 5 # Check if service is running if systemctl is-active --quiet code-server; then echo "✅ code-server service started successfully" else echo "❌ Failed to start code-server service" systemctl status code-server exit 1 fi # Install SSL certificate for vscode.mnemo-cards.online if [ ! -d "/etc/letsencrypt/live/vscode.mnemo-cards.online" ]; then echo "🔐 Getting Let's Encrypt SSL certificate for vscode.mnemo-cards.online..." # Stop nginx temporarily for certificate issuance systemctl stop nginx 2>/dev/null || true if certbot certonly --standalone -d vscode.mnemo-cards.online --non-interactive --agree-tos --email admin@mnemo-cards.online; then echo "✅ Let's Encrypt certificate obtained successfully for vscode.mnemo-cards.online!" else echo "❌ Failed to get Let's Encrypt certificate. Generating self-signed certificate..." if [ ! -f "/etc/ssl/certs/nginx-selfsigned-vscode.crt" ]; then openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/ssl/private/nginx-selfsigned-vscode.key \ -out /etc/ssl/certs/nginx-selfsigned-vscode.crt \ -subj "/C=RU/ST=Moscow/L=Moscow/O=MnemoCards/OU=IT/CN=vscode.mnemo-cards.online" fi fi # Start nginx again systemctl start nginx 2>/dev/null || true else echo "✅ Let's Encrypt certificate already exists for vscode.mnemo-cards.online" fi # Configure nginx for VSCode echo "Configuring nginx for VSCode..." # Copy VSCode nginx configuration cp /tmp/vscode-nginx.conf /etc/nginx/sites-available/vscode # Enable VSCode site ln -sf /etc/nginx/sites-available/vscode /etc/nginx/sites-enabled/vscode # Test nginx configuration nginx -t # Restart nginx systemctl restart nginx systemctl enable nginx # Setup cron for certificate renewal (if not already configured) if ! crontab -l | grep -q "vscode.mnemo-cards.online"; then echo "Setting up cron job for VSCode certificate renewal..." (crontab -l ; echo "0 12 * * * certbot renew --quiet --cert-name vscode.mnemo-cards.online") | crontab - fi echo "VSCode domain setup completed successfully!" echo "VSCode is now available at: https://vscode.mnemo-cards.online" echo "Username: vscode" echo "Password: vscode123!" echo "Access by IP address is blocked" EOF print_success "VSCode domain setup completed successfully! 🎉" print_success "VSCode is now available at: https://vscode.mnemo-cards.online" print_info "Username: vscode" print_info "Password: vscode123!" print_info "Make sure DNS is configured: vscode.mnemo-cards.online -> $SERVER_IP"