- Replaced README.md with a modern, production-focused version featuring quick start, architecture, workflow, troubleshooting, and security sections - Added DEPLOYMENT_GUIDE_IIS_Windows11.md with step-by-step IIS deployment instructions, including SSL, CORS, and permissions - Added version-controlled web.config files for API and Blazor app with HTTPS redirection, security headers, and SPA/static file support - Moved detailed yt-dlp integration notes to README_UPDATED.md for technical reference - Improves clarity, maintainability, and production readiness of documentation and deployment
723 lines
24 KiB
Markdown
723 lines
24 KiB
Markdown
# TuneRipper Deployment Guide - IIS on Windows 11
|
|
|
|
This guide provides step-by-step instructions for manually deploying the TuneRipper Blazor WebAssembly application and API to Internet Information Services (IIS) on Windows 11.
|
|
|
|
## Deployment Scenarios
|
|
|
|
### Scenario A: Production Server (Recommended)
|
|
Deploy pre-built applications to a clean production server.
|
|
**Requirements**: Only .NET 10 Hosting Bundle + IIS
|
|
|
|
### Scenario B: Build + Deploy on Same Machine
|
|
Build and deploy applications on the same machine.
|
|
**Requirements**: .NET 10 SDK + .NET 10 Hosting Bundle + IIS
|
|
|
|
---
|
|
|
|
## Prerequisites
|
|
|
|
### System Requirements
|
|
- Windows 11 (Pro, Enterprise, or Education edition recommended)
|
|
- **IIS (Internet Information Services)** already installed and configured
|
|
- Administrative privileges
|
|
- Internet connection for downloading dependencies
|
|
- **Domain names configured** (for production HTTPS setup)
|
|
|
|
### Software Dependencies
|
|
- **.NET 10 Hosting Bundle** (production) OR **.NET 10 SDK** (development)
|
|
- **yt-dlp.exe** (for video processing)
|
|
- **ffmpeg** (required by yt-dlp for audio conversion)
|
|
- **Let's Encrypt ACME tool** (for SSL certificates in production)
|
|
|
|
---
|
|
|
|
## Step 1: Install .NET 10 Hosting Bundle for IIS
|
|
|
|
> **Critical**: This step is required for ALL deployment scenarios
|
|
|
|
### 1.1 Download .NET 10 Hosting Bundle
|
|
The Hosting Bundle contains the ASP.NET Core runtime and IIS integration components needed to run .NET 10 applications on IIS.
|
|
|
|
1. Go to [Microsoft .NET Downloads](https://dotnet.microsoft.com/download/dotnet/10.0)
|
|
2. Scroll to **"ASP.NET Core Runtime"** section
|
|
3. Under **"Run server apps"**, find **"Hosting Bundle"**
|
|
4. Download **"Hosting Bundle"** for Windows (e.g., `dotnet-hosting-10.0.x-win.exe`)
|
|
5. **Important**: This is different from the SDK - it's specifically for IIS hosting
|
|
|
|
### 1.2 Install the Hosting Bundle
|
|
1. Close all IIS Manager windows and web browsers
|
|
2. Run the downloaded hosting bundle installer as **Administrator**
|
|
3. Follow the installation wizard:
|
|
- Accept license terms
|
|
- Complete the installation
|
|
4. **Critical**: Restart IIS services by running this command in **Command Prompt as Administrator**:
|
|
```cmd
|
|
iisreset /restart
|
|
```
|
|
5. Alternatively, restart the entire computer to ensure all services are updated
|
|
|
|
### 1.3 Verify Hosting Bundle Installation
|
|
1. Open **Command Prompt as Administrator**
|
|
2. Run: `dotnet --info`
|
|
3. Look for the ASP.NET Core Module in IIS:
|
|
```cmd
|
|
%windir%\system32\inetsrv\appcmd.exe list modules
|
|
```
|
|
4. You should see `AspNetCoreModuleV2` in the output
|
|
5. Check the registry for the module (PowerShell as Administrator):
|
|
```powershell
|
|
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\IIS Extensions\IIS AspNetCore Module V2"
|
|
```
|
|
|
|
### 1.4 Verify ASP.NET Core Module Installation
|
|
1. Open **IIS Manager** (`Win + R` ? `inetmgr`)
|
|
2. Select your server name in the left panel
|
|
3. Double-click **"Modules"** in the main panel
|
|
4. Look for **"AspNetCoreModuleV2"** - it should be present and enabled
|
|
5. If not visible, you may need to restart IIS again:
|
|
```cmd
|
|
iisreset
|
|
```
|
|
|
|
---
|
|
|
|
## Step 2: Install Required Tools
|
|
|
|
### 2.1 Download yt-dlp
|
|
1. Go to [yt-dlp releases](https://github.com/yt-dlp/yt-dlp/releases)
|
|
2. Download the latest `yt-dlp.exe` (Windows executable)
|
|
3. **Important**: Keep this file ready for later deployment
|
|
|
|
### 2.2 Install FFmpeg
|
|
1. Go to [FFmpeg downloads](https://ffmpeg.org/download.html#build-windows)
|
|
2. Choose **"Windows"** ? **"Windows builds by BtbN"**
|
|
3. Download the latest **"ffmpeg-master-latest-win64-gpl.zip"**
|
|
4. Extract to `C:\ffmpeg\`
|
|
5. Add `C:\ffmpeg\bin` to your System PATH:
|
|
- Press `Win + X`, select **"System"**
|
|
- Click **"Advanced system settings"**
|
|
- Click **"Environment Variables"**
|
|
- Under **"System Variables"**, find and edit **"Path"**
|
|
- Click **"New"** and add: `C:\ffmpeg\bin`
|
|
- Click **OK** to save all dialogs
|
|
6. Restart Command Prompt and verify: `ffmpeg -version`
|
|
|
|
### 2.3 Install Let's Encrypt ACME Tool (Production HTTPS)
|
|
For production deployment with custom domains, install an ACME client:
|
|
|
|
1. **Install win-acme (Recommended for Windows/IIS)**:
|
|
- Go to [win-acme releases](https://github.com/win-acme/win-acme/releases)
|
|
- Download the latest `win-acme.v2.x.x.x.pluggable.zip`
|
|
- Extract to `C:\win-acme\`
|
|
|
|
---
|
|
|
|
## Step 3: Get Application Files
|
|
|
|
### Option A: Use Pre-Built Files (Production Deployment)
|
|
If you have pre-built application files from another machine:
|
|
1. Copy the published API files to: `C:\Publish\TuneRipper.Api\`
|
|
2. Copy the published Blazor WebAssembly files to: `C:\Publish\TuneRipper\`
|
|
3. **Skip to Step 4** (Prepare Deployment Files)
|
|
|
|
### Option B: Build Applications (Build + Deploy Scenario)
|
|
If you need to build the applications on this machine, continue below:
|
|
|
|
#### 3B.1 Install .NET 10 SDK (If Building Locally)
|
|
1. Go to [Microsoft .NET Downloads](https://dotnet.microsoft.com/download/dotnet/10.0)
|
|
2. Download and install the .NET 10 SDK
|
|
3. Restart your computer after installation
|
|
|
|
#### 3B.2 Verify Build Environment
|
|
Before publishing, ensure your development environment is ready:
|
|
1. Open **Command Prompt** in your project directory: `C:\DevHome\TuneRipper`
|
|
2. Run: `dotnet --version` (should show 10.0.x)
|
|
3. Run: `dotnet restore` (restore NuGet packages)
|
|
4. Run: `dotnet build` (verify everything compiles)
|
|
|
|
#### 3B.3 Publish the API (TuneRipper.Api)
|
|
|
|
**Using Visual Studio:**
|
|
1. Open the TuneRipper solution in **Visual Studio 2022**
|
|
2. Ensure you have **.NET 10 workload** installed in Visual Studio:
|
|
- Go to **Tools** ? **Get Tools and Features**
|
|
- Under **Workloads**, ensure **"ASP.NET and web development"** is checked
|
|
- Under **Individual Components**, ensure **.NET 10 Runtime** is selected
|
|
3. Right-click on **TuneRipper.Api** project
|
|
4. Select **"Publish..."**
|
|
5. Choose **"Folder"** as the publish target
|
|
6. Set publish folder to: `C:\Publish\TuneRipper.Api`
|
|
7. Click **"Show all settings"** and configure:
|
|
- **Configuration**: `Release`
|
|
- **Target Framework**: `net10.0`
|
|
- **Deployment Mode**: `Framework-dependent`
|
|
- **Target Runtime**: `Portable`
|
|
8. Click **"Save"** and then **"Publish"**
|
|
|
|
**Using Command Line:**
|
|
```cmd
|
|
cd C:\DevHome\TuneRipper
|
|
dotnet publish TuneRipper.Api\TuneRipper.Api.csproj -c Release -f net10.0 -o C:\Publish\TuneRipper.Api --verbosity normal
|
|
```
|
|
|
|
#### 3B.4 Publish the Blazor WebAssembly App (TuneRipper)
|
|
|
|
**Using Visual Studio:**
|
|
1. Right-click on **TuneRipper** project
|
|
2. Select **"Publish..."**
|
|
3. Choose **"Folder"** as the publish target
|
|
4. Set publish folder to: `C:\Publish\TuneRipper`
|
|
5. Configure settings:
|
|
- **Configuration**: `Release`
|
|
- **Target Framework**: `net10.0`
|
|
6. Click **"Save"** and then **"Publish"**
|
|
|
|
**Using Command Line:**
|
|
```cmd
|
|
cd C:\DevHome\TuneRipper
|
|
dotnet publish TuneRipper\TuneRipper.csproj -c Release -f net10.0 -o C:\Publish\TuneRipper --verbosity normal
|
|
```
|
|
|
|
#### 3B.5 Verify Published Output
|
|
After publishing, check the output directories:
|
|
|
|
**API Output** (`C:\Publish\TuneRipper.Api\`):
|
|
- `TuneRipper.Api.dll`
|
|
- `TuneRipper.Api.exe`
|
|
- `web.config` (should be auto-generated)
|
|
- `appsettings.json`
|
|
- Various .NET 10 runtime files
|
|
|
|
**Blazor Output** (`C:\Publish\TuneRipper\`):
|
|
- `wwwroot\` folder containing:
|
|
- `index.html`
|
|
- `_framework\` folder
|
|
- Static assets (CSS, JS, etc.)
|
|
|
|
---
|
|
|
|
## Step 4: Prepare Deployment Files
|
|
|
|
### 4.1 Create Deployment Directories
|
|
```cmd
|
|
mkdir C:\inetpub\wwwroot\TuneRipper
|
|
mkdir C:\inetpub\wwwroot\TuneRipperApi
|
|
mkdir C:\inetpub\wwwroot\TuneRipperApi\wwwroot
|
|
mkdir C:\inetpub\wwwroot\TuneRipperApi\wwwroot\downloads
|
|
```
|
|
|
|
### 4.2 Copy API Files
|
|
1. Copy all contents from `C:\Publish\TuneRipper.Api\` to `C:\inetpub\wwwroot\TuneRipperApi\`
|
|
2. Copy `yt-dlp.exe` to `C:\inetpub\wwwroot\TuneRipperApi\wwwroot\yt-dlp.exe`
|
|
3. Verify the API structure:
|
|
```
|
|
C:\inetpub\wwwroot\TuneRipperApi\
|
|
??? TuneRipper.Api.dll
|
|
??? TuneRipper.Api.exe
|
|
??? appsettings.json
|
|
??? web.config
|
|
??? wwwroot\
|
|
? ??? yt-dlp.exe
|
|
? ??? downloads\
|
|
??? [other .NET 10 runtime files]
|
|
```
|
|
|
|
### 4.3 Copy Blazor WebAssembly Files
|
|
1. Copy all contents from `C:\Publish\TuneRipper\wwwroot\` to `C:\inetpub\wwwroot\TuneRipper\`
|
|
2. Verify the Blazor structure:
|
|
```
|
|
C:\inetpub\wwwroot\TuneRipper\
|
|
??? index.html
|
|
??? _framework\
|
|
? ??? blazor.webassembly.js
|
|
? ??? dotnet.10.x.x.js
|
|
? ??? [.NET 10 WebAssembly files]
|
|
??? css\
|
|
??? images\
|
|
??? [other static files]
|
|
```
|
|
|
|
---
|
|
|
|
## Step 5: Configure IIS Sites
|
|
|
|
### 5.1 Open IIS Manager
|
|
1. Press `Win + R`, type `inetmgr`, press Enter
|
|
2. IIS Manager should open
|
|
|
|
### 5.2 Create API Application
|
|
1. In IIS Manager, expand the server node
|
|
2. Right-click **"Sites"** ? **"Add Website..."**
|
|
3. Configure the API site:
|
|
- **Site name**: `TuneRipper API`
|
|
- **Physical path**: `C:\inetpub\wwwroot\TuneRipperApi`
|
|
- **Port**: `80` (HTTP) and `443` (HTTPS)
|
|
- **Host name**: `tuneripper-api.vrba.one`
|
|
4. Click **"OK"**
|
|
|
|
### 5.3 Create Blazor WebAssembly Application
|
|
1. Right-click **"Sites"** ? **"Add Website..."**
|
|
2. Configure the Blazor site:
|
|
- **Site name**: `TuneRipper App`
|
|
- **Physical path**: `C:\inetpub\wwwroot\TuneRipper`
|
|
- **Port**: `80` (HTTP) and `443` (HTTPS)
|
|
- **Host name**: `tuneripper.vrba.one`
|
|
3. Click **"OK"**
|
|
|
|
### 5.4 Configure Application Pool for API (.NET 10 Specific)
|
|
1. Click **"Application Pools"** in the left panel
|
|
2. Find the application pool for **TuneRipper API** (usually has the same name)
|
|
3. Right-click ? **"Advanced Settings..."**
|
|
4. Set the following **.NET 10 specific settings**:
|
|
- **.NET CLR Version**: `No Managed Code` (This is correct for .NET 10!)
|
|
- **Managed Pipeline Mode**: `Integrated`
|
|
- **Start Mode**: `OnDemand`
|
|
- **Process Identity**: `ApplicationPoolIdentity`
|
|
- **Load User Profile**: `True` (important for .NET 10)
|
|
- **Idle Time-out (minutes)**: `20` or `0` (no timeout for testing)
|
|
5. Click **"OK"**
|
|
|
|
### 5.5 Verify ASP.NET Core Module for API Site
|
|
1. Select your **TuneRipper API** site in IIS Manager
|
|
2. Double-click **"Modules"**
|
|
3. Ensure **AspNetCoreModuleV2** is present and enabled
|
|
4. If not present, the Hosting Bundle installation may have failed
|
|
|
|
---
|
|
|
|
## Step 6: Configure SSL Certificates with Let's Encrypt
|
|
|
|
### 6.1 Using win-acme (Recommended)
|
|
1. Open **Command Prompt as Administrator**
|
|
2. Navigate to win-acme directory:
|
|
```cmd
|
|
cd C:\win-acme\
|
|
```
|
|
3. Run win-acme and create certificates for both domains:
|
|
```cmd
|
|
wacs.exe --target iis --siteid 1 --commonname tuneripper.vrba.one
|
|
wacs.exe --target iis --siteid 2 --commonname tuneripper-api.vrba.one
|
|
```
|
|
4. Follow the prompts to:
|
|
- Select the IIS sites
|
|
- Validate domain ownership
|
|
- Install certificates
|
|
- Set up automatic renewal
|
|
|
|
### 6.2 Configure HTTPS Bindings in IIS
|
|
1. In IIS Manager, select **TuneRipper App** site
|
|
2. Click **"Bindings..."** in the Actions panel
|
|
3. Click **"Add..."**
|
|
4. Configure HTTPS binding:
|
|
- **Type**: `https`
|
|
- **Port**: `443`
|
|
- **Host name**: `tuneripper.vrba.one`
|
|
- **SSL certificate**: Select the Let's Encrypt certificate
|
|
5. Repeat for **TuneRipper API** site with `tuneripper-api.vrba.one`
|
|
|
|
---
|
|
|
|
## Step 7: Configure Production Settings
|
|
|
|
### 7.1 Update API Configuration for Production
|
|
1. Navigate to `C:\inetpub\wwwroot\TuneRipperApi\`
|
|
2. Edit `appsettings.json`:
|
|
```json
|
|
{
|
|
"Logging": {
|
|
"LogLevel": {
|
|
"Default": "Information",
|
|
"Microsoft.AspNetCore": "Warning",
|
|
"TuneRipper.Api.Services.VideoService": "Information"
|
|
}
|
|
},
|
|
"AllowedHosts": "tuneripper-api.vrba.one",
|
|
"ApiSettings": {
|
|
"BaseUrl": "https://tuneripper-api.vrba.one",
|
|
"HttpBaseUrl": "https://tuneripper-api.vrba.one",
|
|
"TimeoutSeconds": 300,
|
|
"EnableLogging": true,
|
|
"RetryAttempts": 3,
|
|
"RetryDelaySeconds": 2
|
|
}
|
|
}
|
|
```
|
|
|
|
### 7.2 Update CORS for Production Domains
|
|
1. Navigate to `C:\inetpub\wwwroot\TuneRipperApi\`
|
|
2. If you need to restrict CORS (optional), modify the API's `Program.cs`:
|
|
```csharp
|
|
// Update CORS policy for production
|
|
builder.Services.AddCors(options =>
|
|
{
|
|
options.AddPolicy("ProductionPolicy", policy =>
|
|
{
|
|
policy.WithOrigins(
|
|
"https://tuneripper.vrba.one",
|
|
"https://tuneripper-api.vrba.one"
|
|
)
|
|
.AllowAnyMethod()
|
|
.AllowAnyHeader()
|
|
.AllowCredentials();
|
|
});
|
|
});
|
|
|
|
// Use the production policy
|
|
app.UseCors("ProductionPolicy");
|
|
```
|
|
|
|
**Note**: The current CORS configuration uses `AllowAnyOrigin()` which will work fine with your subdomains without changes. The above restriction is optional for enhanced security.
|
|
|
|
### 7.3 Update Blazor App Configuration
|
|
1. Navigate to `C:\inetpub\wwwroot\TuneRipper\`
|
|
2. Update `appsettings.json`:
|
|
```json
|
|
{
|
|
"ApiSettings": {
|
|
"BaseUrl": "https://tuneripper-api.vrba.one",
|
|
"HttpBaseUrl": "https://tuneripper-api.vrba.one",
|
|
"TimeoutSeconds": 300,
|
|
"EnableLogging": false,
|
|
"RetryAttempts": 3,
|
|
"RetryDelaySeconds": 2
|
|
},
|
|
"AppSettings": {
|
|
"AppName": "TuneRipper",
|
|
"Version": "1.0.0",
|
|
"Environment": "Production",
|
|
"EnableDetailedErrors": false
|
|
}
|
|
}
|
|
```
|
|
|
|
### 7.4 Update API Root Endpoint URLs
|
|
1. Navigate to `C:\inetpub\wwwroot\TuneRipperApi\`
|
|
2. If needed, update the root endpoint in `Program.cs` to show production URLs:
|
|
```csharp
|
|
urls = new
|
|
{
|
|
https = "https://tuneripper-api.vrba.one",
|
|
app = "https://tuneripper.vrba.one"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Step 8: Verify Web Configuration Files
|
|
|
|
> **? Good News**: The `web.config` files are now included in both projects and will be automatically deployed during publish!
|
|
|
|
### 8.1 API web.config (Auto-deployed)
|
|
The API project now includes a `web.config` file that will be automatically copied during publish. It includes:
|
|
- **HTTPS redirection** for production security
|
|
- **ASP.NET Core hosting** configuration for IIS
|
|
- **Security headers** for production
|
|
- **Environment variables** set to Production
|
|
|
|
**Location after publish**: `C:\inetpub\wwwroot\TuneRipperApi\web.config`
|
|
|
|
### 8.2 Blazor WebAssembly web.config (Auto-deployed)
|
|
The Blazor project now includes a `web.config` file that will be automatically copied during publish. It includes:
|
|
- **HTTPS redirection** for production security
|
|
- **SPA routing support** for client-side navigation
|
|
- **MIME type mappings** for .wasm and .dll files
|
|
- **Security headers** for production
|
|
|
|
**Location after publish**: `C:\inetpub\wwwroot\TuneRipper\web.config`
|
|
|
|
### 8.3 Manual Verification (Optional)
|
|
After deployment, you can verify the files are present:
|
|
1. Check API web.config: `C:\inetpub\wwwroot\TuneRipperApi\web.config`
|
|
2. Check Blazor web.config: `C:\inetpub\wwwroot\TuneRipper\web.config`
|
|
|
|
> **Note**: These files are now version-controlled and automatically deployed. No manual configuration needed!
|
|
|
|
---
|
|
|
|
## Step 9: Set Permissions
|
|
|
|
### 9.1 Configure Folder Permissions
|
|
1. Right-click `C:\inetpub\wwwroot\TuneRipperApi\wwwroot\downloads`
|
|
2. Select **"Properties"** ? **"Security"** tab
|
|
3. Click **"Edit..."** ? **"Add..."**
|
|
4. Type: `IIS_IUSRS` and click **"Check Names"** ? **"OK"**
|
|
5. Select **IIS_IUSRS** and check:
|
|
- ? **Full Control**
|
|
- ? **Modify**
|
|
- ? **Read & Execute**
|
|
- ? **Write**
|
|
6. Click **"OK"** to save
|
|
|
|
### 9.2 Set Application Pool Identity Permissions
|
|
1. Right-click `C:\inetpub\wwwroot\TuneRipperApi`
|
|
2. **Properties** ? **Security** ? **Edit** ? **Add**
|
|
3. Type: `IIS AppPool\TuneRipper API` ? **Check Names** ? **OK**
|
|
4. Grant **Read & Execute** permissions
|
|
5. Click **OK**
|
|
|
|
---
|
|
|
|
## Step 10: Test Deployment
|
|
|
|
### 10.1 Test .NET 10 Runtime in IIS
|
|
1. Start both websites in IIS Manager
|
|
2. Check Application Pool status - should be **"Started"**
|
|
3. If Application Pool keeps stopping, check Event Viewer for errors
|
|
|
|
### 10.2 Test Production URLs
|
|
1. Open a web browser
|
|
2. Navigate to: `https://tuneripper-api.vrba.one/api/health`
|
|
3. You should see a JSON health check response
|
|
4. Test the root endpoint: `https://tuneripper-api.vrba.one/`
|
|
5. Verify the API information is displayed
|
|
|
|
### 10.3 Test Blazor WebAssembly App
|
|
1. Navigate to: `https://tuneripper.vrba.one`
|
|
2. The TuneRipper application should load
|
|
3. Check browser developer tools (F12) for any loading errors
|
|
4. Test the YouTube URL input functionality
|
|
|
|
### 10.4 Test End-to-End Functionality
|
|
1. In the Blazor app, enter a YouTube URL
|
|
2. Click **"Download MP3"**
|
|
3. Monitor the processing progress
|
|
4. Verify the file download works
|
|
|
|
### 10.5 Test SSL Certificates
|
|
1. Check certificate validity in browser
|
|
2. Verify automatic HTTP to HTTPS redirection
|
|
3. Test certificate auto-renewal (win-acme sets up scheduled tasks)
|
|
|
|
---
|
|
|
|
## Step 11: Troubleshooting
|
|
|
|
### 11.1 Common .NET 10 Issues
|
|
|
|
#### Application Pool Keeps Stopping
|
|
**Problem**: Application pool stops immediately after starting
|
|
**Solutions**:
|
|
1. Check Event Viewer: `Windows Logs` ? `Application` and `System`
|
|
2. Look for ASP.NET Core errors or .NET runtime issues
|
|
3. Verify .NET 10 Hosting Bundle is properly installed:
|
|
```cmd
|
|
dotnet --list-runtimes
|
|
```
|
|
4. Ensure `web.config` has correct `processPath` and `arguments`
|
|
5. Check Application Pool settings:
|
|
- .NET CLR Version = "No Managed Code"
|
|
- Managed Pipeline Mode = "Integrated"
|
|
|
|
#### SSL Certificate Issues
|
|
**Problem**: SSL certificate not working or expired
|
|
**Solutions**:
|
|
1. Check certificate binding in IIS Manager
|
|
2. Verify Let's Encrypt certificate renewal:
|
|
```cmd
|
|
# For win-acme
|
|
wacs.exe --list
|
|
|
|
# For certbot
|
|
certbot certificates
|
|
```
|
|
3. Check Windows Task Scheduler for renewal tasks
|
|
4. Manually renew if needed:
|
|
```cmd
|
|
# For win-acme
|
|
wacs.exe --renew
|
|
|
|
# For certbot
|
|
certbot renew
|
|
```
|
|
|
|
#### CORS Errors
|
|
**Problem**: Cross-origin requests blocked
|
|
**Solutions**:
|
|
1. Verify CORS configuration in `Program.cs`
|
|
2. Current configuration uses `AllowAnyOrigin()` which should work
|
|
3. If you implemented production CORS restrictions, ensure domains are correctly specified
|
|
4. Check browser console for specific CORS error messages
|
|
|
|
#### 500 Internal Server Error
|
|
**Problem**: HTTP 500 error when accessing API
|
|
**Solutions**:
|
|
1. Enable detailed errors in `web.config`:
|
|
```xml
|
|
<aspNetCore processPath="dotnet" arguments=".\TuneRipper.Api.dll"
|
|
stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout"
|
|
hostingModel="inprocess">
|
|
<environmentVariables>
|
|
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
|
|
</environmentVariables>
|
|
</aspNetCore>
|
|
```
|
|
2. Create `logs` folder in API directory
|
|
3. Check stdout logs for detailed error information
|
|
4. Verify all .NET 10 dependencies are published
|
|
|
|
#### Blazor WebAssembly Loading Issues
|
|
**Problem**: Blazor app shows loading indefinitely
|
|
**Solutions**:
|
|
1. Check browser console (F12) for JavaScript errors
|
|
2. Verify all `.wasm` and `.dll` files are present in `_framework` folder
|
|
3. Check that `dotnet.js` and `blazor.webassembly.js` are loading
|
|
4. Ensure proper MIME types in `web.config`
|
|
5. Verify API base URL is correctly configured in `appsettings.json`
|
|
|
|
### 11.2 Verification Commands
|
|
```cmd
|
|
# Check .NET installation (Hosting Bundle should show runtimes, SDK not required)
|
|
dotnet --list-runtimes
|
|
|
|
# Check IIS status
|
|
iisreset /status
|
|
|
|
# List IIS sites
|
|
%windir%\system32\inetsrv\appcmd.exe list sites
|
|
|
|
# Check Application Pools
|
|
%windir%\system32\inetsrv\appcmd.exe list appPools
|
|
|
|
# Verify ASP.NET Core Module (Critical for .NET 10)
|
|
%windir%\system32\inetsrv\appcmd.exe list modules | findstr AspNet
|
|
|
|
# Check SSL certificates
|
|
certlm.msc
|
|
|
|
# Test HTTPS connectivity
|
|
curl -I https://tuneripper-api.vrba.one/api/health
|
|
curl -I https://tuneripper.vrba.one
|
|
```
|
|
|
|
### 11.3 Log Locations
|
|
- **IIS Logs**: `C:\inetpub\logs\LogFiles\W3SVC1\` (and W3SVC2, etc.)
|
|
- **Windows Event Log**: Event Viewer ? Application and System logs
|
|
- **ASP.NET Core stdout logs**: `C:\inetpub\wwwroot\TuneRipperApi\logs\` (if enabled)
|
|
- **Application-specific logs**: Configure in `appsettings.json`
|
|
- **Let's Encrypt Logs**:
|
|
- win-acme: `C:\win-acme\logs\`
|
|
- certbot: `C:\Certbot\log\`
|
|
|
|
---
|
|
|
|
## Step 12: Security Considerations
|
|
|
|
### 12.1 Production Security
|
|
1. **SSL/TLS**: Certificates automatically managed by Let's Encrypt
|
|
2. **HTTPS Enforcement**: Configured in `web.config` for automatic redirection
|
|
3. **CORS**: Current configuration uses `AllowAnyOrigin()` (works with subdomains)
|
|
4. **Security Headers**: Added to `web.config` (X-Frame-Options, etc.)
|
|
5. **File Upload Limits**: Configure maximum file sizes if needed
|
|
6. **Rate Limiting**: Consider implementing rate limiting for API endpoints
|
|
7. **Update .NET Regularly**: Keep .NET 10 runtime updated via Hosting Bundle
|
|
|
|
### 12.2 Firewall Configuration
|
|
1. Open Windows Defender Firewall
|
|
2. Create inbound rules for HTTP (80) and HTTPS (443) ports
|
|
3. Block development ports (7160, 8080) from external access
|
|
4. Configure network access as needed
|
|
|
|
### 12.3 CORS Security Analysis
|
|
The current CORS configuration in your API uses:
|
|
```csharp
|
|
policy.AllowAnyOrigin()
|
|
.AllowAnyMethod()
|
|
.AllowAnyHeader();
|
|
```
|
|
|
|
**? This will work perfectly with your subdomain setup** because:
|
|
- `AllowAnyOrigin()` permits requests from any domain
|
|
- Your Blazor app at `https://tuneripper.vrba.one` can call API at `https://tuneripper-api.vrba.one`
|
|
- No CORS configuration changes are required
|
|
|
|
**For enhanced security (optional)**, you could restrict to specific domains as shown in Step 7.2.
|
|
|
|
---
|
|
|
|
## Step 13: Maintenance
|
|
|
|
### 13.1 Regular Tasks
|
|
- Monitor disk space in downloads folder
|
|
- Update yt-dlp.exe regularly for YouTube compatibility
|
|
- Check for .NET 10 updates and security patches
|
|
- Review and rotate log files
|
|
- Monitor application pool health
|
|
- **Monitor SSL certificate renewals** (should be automatic)
|
|
|
|
### 13.2 SSL Certificate Maintenance
|
|
- **win-acme**: Automatic renewal via Windows Task Scheduler
|
|
- **certbot**: Set up automatic renewal:
|
|
```cmd
|
|
# Add to Task Scheduler to run twice daily
|
|
certbot renew --quiet
|
|
```
|
|
|
|
### 13.3 Updating .NET 10
|
|
When new .NET 10 updates are released:
|
|
1. Download and install **new .NET 10 Hosting Bundle** (SDK not required)
|
|
2. Restart IIS: `iisreset`
|
|
3. Test application functionality
|
|
4. Update applications if needed (rebuild only if breaking changes)
|
|
|
|
---
|
|
|
|
## Conclusion
|
|
|
|
Your TuneRipper application should now be successfully deployed on IIS with Windows 11 using .NET 10, complete with production HTTPS via Let's Encrypt.
|
|
|
|
**Production URLs:**
|
|
- **API**: `https://tuneripper-api.vrba.one`
|
|
- **Blazor App**: `https://tuneripper.vrba.one`
|
|
|
|
**Key Production Features:**
|
|
- ? **Automatic HTTPS** with Let's Encrypt certificates
|
|
- ? **Automatic HTTP?HTTPS redirection**
|
|
- ? **CORS compatibility** with subdomain setup
|
|
- ? **Security headers** configured
|
|
- ? **Automatic certificate renewal** set up
|
|
|
|
## CORS Compatibility Summary
|
|
|
|
### ? **Current CORS Configuration Works Perfect**
|
|
Your existing API CORS setup using `AllowAnyOrigin()` will work seamlessly with:
|
|
- `https://tuneripper.vrba.one` ? `https://tuneripper-api.vrba.one`
|
|
- No code changes required
|
|
- Cross-subdomain requests allowed
|
|
|
|
### ?? **Optional Security Enhancement**
|
|
For production, you can optionally restrict CORS to specific domains (see Step 7.2), but it's not required for functionality.
|
|
|
|
## Quick Reference Commands
|
|
|
|
```cmd
|
|
# Check .NET 10 runtime installation (production)
|
|
dotnet --list-runtimes
|
|
|
|
# Restart IIS
|
|
iisreset
|
|
|
|
# Verify FFmpeg
|
|
ffmpeg -version
|
|
|
|
# Test production endpoints
|
|
curl https://tuneripper-api.vrba.one/api/health
|
|
curl -I https://tuneripper.vrba.one
|
|
|
|
# Check SSL certificates
|
|
certlm.msc
|
|
|
|
# View IIS processes
|
|
tasklist | findstr w3wp
|
|
|
|
# Check Application Pool status
|
|
%windir%\system32\inetsrv\appcmd.exe list appPools /text:name,state
|
|
|
|
# Renew SSL certificates manually
|
|
wacs.exe --renew
|
|
# or
|
|
certbot renew
|
|
```
|
|
|
|
---
|
|
|
|
*This guide includes production-ready HTTPS setup with Let's Encrypt for the subdomain configuration: `https://tuneripper.vrba.one` and `https://tuneripper-api.vrba.one`. The existing CORS configuration will work without modifications.* |