Prerequisites
Before you begin, ensure you have:- Node.js 18.x or higher (the backend requires Node.js)
- npm 11.x or higher (comes with Node.js)
- Git for cloning the repository
- Active Directory domain controller (optional if using simulation mode)
- RD Connection Broker (optional if using simulation mode)
New to RDS? You can start with simulation mode to explore the interface without requiring AD or RDCB infrastructure.
Installation
Install backend dependencies
Navigate to the backend directory and install dependencies:This installs the required packages including Express.js, JWT libraries, and AD authentication modules.
Configure the backend
Copy the example environment file and customize it for your environment:Edit
.env with your configuration:backend/.env
Start the backend server
Launch the Express.js API server:For development with auto-reload:You should see output indicating the server is running:
Install frontend dependencies
Open a new terminal, navigate to the frontend directory, and install dependencies:This installs Angular 21, Angular Material, and all required dependencies.
Start the frontend development server
Launch the Angular development server:Or explicitly with Angular CLI:The frontend will be available at
http://localhost:4200Verify Installation
Once both servers are running, verify everything is working:Check Backend Health
Visit the health check endpoint:Test Authentication
Test the login endpoint (simulation mode):Configuration Options
Simulation vs. Production Mode
- Simulation Mode
- Production Mode
Use for: Development, testing, demosIn simulation mode:
- No Active Directory connection required
- No RD Connection Broker required
- Returns mock RemoteApp data
- Perfect for frontend development and testing
Session Timeout Settings
The application supports two session modes:- Standard Mode: 20-minute session timeout
- Private Mode: 240-minute (4-hour) session timeout
- JWT token expiration (
backend/src/routes/auth.js:30) - Cookie max-age (
backend/src/routes/auth.js:35) - RDP session timeout (
backend/src/services/rdpService.js:14)
CORS Configuration
By default, the backend accepts requests from:http://localhost:4200(Angular default port)http://localhost:4300(alternative port)
backend/src/index.js:21:
Building for Production
Backend
The backend runs directly with Node.js:- Using a process manager like PM2 or systemd
- Running behind a reverse proxy (nginx, Apache)
- Enabling HTTPS with proper certificates
Frontend
Build the Angular application for production:frontend/dist/. Serve these files with:
- Nginx or Apache
- Azure Static Web Apps
- AWS S3 + CloudFront
- Any static hosting service
API Endpoint: Update the frontend’s API endpoint configuration in
frontend/src/environments/environment.prod.ts to point to your production backend URL.Troubleshooting
Backend won't start - LDAP connection error
Backend won't start - LDAP connection error
If you see LDAP connection errors:
- Verify your Domain Controller is reachable:
ping dc01.yourdomain.local - Check LDAP port is open:
telnet dc01.yourdomain.local 389 - Verify service account credentials in
.env - Temporarily enable
SIMULATION_MODE=trueto isolate the issue
Frontend can't connect to backend
Frontend can't connect to backend
If you see CORS or connection errors:
- Verify backend is running:
curl http://localhost:3000/api/health - Check the frontend API URL in
frontend/src/environments/environment.ts - Ensure CORS origins in
backend/src/index.jsinclude your frontend URL - Check browser console for specific error messages
Authentication works but no apps appear
Authentication works but no apps appear
If users can log in but see no RemoteApps:
- Verify
RDCB_SERVERin.envpoints to your Connection Broker - Check network connectivity to the RDCB server
- Ensure the user has RemoteApp permissions in AD groups
- Review backend logs for RDCB connection errors
- Test with
SIMULATION_MODE=trueto see mock apps
RDP files download but don't connect
RDP files download but don't connect
If .rdp files are generated but fail to connect:
- Open the .rdp file in a text editor and verify server addresses
- Check
RDGATEWAY_HOSTNAMEis correct and reachable - Ensure RD Gateway is properly configured
- Verify the user has permissions to access the RemoteApp
- Test connectivity to the RD Gateway:
telnet rdgateway.yourdomain.local 443
Next Steps
Now that you have RDSWeb Custom running:Configure Active Directory
Set up AD service accounts and group permissions
Learn About Features
Explore authentication, RemoteApp catalog, and more
Deploy to Production
Learn how to deploy securely to your environment
API Reference
Explore the backend API endpoints