186 lines
5.6 KiB
Bash
186 lines
5.6 KiB
Bash
|
|
#!/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@memo-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"
|