mnemo_cards/mnemo_cards_web_v2/deploy/setup-vscode-domain.sh

186 lines
5.6 KiB
Bash
Raw Permalink Normal View History

2025-11-19 17:37:43 +00:00
#!/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
2025-11-19 22:41:54 +00:00
if certbot certonly --standalone -d vscode.mnemo-cards.online --non-interactive --agree-tos --email admin@mnemo-cards.online; then
2025-11-19 17:37:43 +00:00
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"