5.6 KiB
5.6 KiB
PepApi Deployment Guide
Quick Deployment (Windows Service)
Prerequisites
- .NET 8 Runtime or SDK installed
- Administrator privileges
- Network access to PepDB SQL Server
- Access to nest files directory
Deploy as Windows Service
# Run as Administrator
powershell -ExecutionPolicy Bypass -File Deploy-PepApi.ps1 -OpenFirewall
This will:
- Build and publish PepApi.Core in Release mode
- Install to
C:\Services\PepApi - Create Windows Service named "PepApi"
- Configure service to run on port 8085
- Open Windows Firewall for port 8085
- Start the service automatically
Custom Deployment
# Custom service name and location
powershell -ExecutionPolicy Bypass -File Deploy-PepApi.ps1 `
-ServiceName "MyPepApi" `
-InstallDir "D:\Services\PepApi" `
-Urls "http://*:9000" `
-OpenFirewall
Configuration
After deployment, you must update C:\Services\PepApi\appsettings.json:
{
"ConnectionStrings": {
"PepDB": "data source=YOUR_SERVER\\INSTANCE;initial catalog=PEP;integrated security=True;..."
},
"PepSettings": {
"NestDirectory": "\\\\YOUR_SERVER\\PEP Nest",
"MaterialsFile": "C:\\Pep\\PEP2012\\CONFIG\\material.lfn"
}
}
Then restart the service:
Restart-Service -Name PepApi
Alternative: Self-Hosted (No Service)
Build and Run
cd PepApi.Core
dotnet publish -c Release -o ./publish
cd publish
.\PepApi.Core.exe
Run with Custom Settings
.\PepApi.Core.exe --urls "http://*:8085"
Alternative: IIS Deployment
1. Install Prerequisites
- Install ASP.NET Core Hosting Bundle from Microsoft
- Create IIS Application Pool (No Managed Code)
2. Publish Application
dotnet publish PepApi.Core/PepApi.Core.csproj -c Release -o C:\inetpub\PepApi
3. Configure IIS
- Create new website in IIS Manager
- Point to
C:\inetpub\PepApi - Use Application Pool with "No Managed Code"
- Set binding to port 8085
4. Update Configuration
- Edit
C:\inetpub\PepApi\appsettings.json - Restart IIS site
Verify Deployment
Check Service Status
Get-Service -Name PepApi
Test API
# Health check
Invoke-WebRequest http://localhost:8085/swagger
# Test nests endpoint
Invoke-WebRequest http://localhost:8085/nests/2024
View Logs
# Service logs in Event Viewer
Get-EventLog -LogName Application -Source PepApi -Newest 20
# Or check console output if running self-hosted
Service Management
Start Service
Start-Service -Name PepApi
Stop Service
Stop-Service -Name PepApi
Restart Service
Restart-Service -Name PepApi
Uninstall Service
Stop-Service -Name PepApi
sc.exe delete PepApi
Firewall Configuration
If you didn't use -OpenFirewall during deployment:
# Open port 8085
New-NetFirewallRule -DisplayName "PepApi HTTP 8085" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 8085 `
-Action Allow
Troubleshooting
Service Won't Start
-
Check Event Viewer for errors:
Get-EventLog -LogName Application -Source PepApi -Newest 10 -
Verify configuration:
- Database connection string is correct
- Network paths are accessible
- Files exist at specified paths
-
Test manually:
cd C:\Services\PepApi .\PepApi.Core.exe
Database Connection Errors
- Verify SQL Server is accessible
- Check Windows Authentication permissions
- Test connection string with SSMS
- Ensure
TrustServerCertificate=Truein connection string
File Access Errors
- Verify service account has read access to:
- Nest directory (
\\REMCOSRV0\PEP Nest) - Materials file (
C:\Pep\PEP2012\CONFIG\material.lfn)
- Nest directory (
- Configure service to run as appropriate account
Port Already in Use
# Find what's using port 8085
netstat -ano | findstr :8085
# Kill the process
Stop-Process -Id [PID] -Force
# Or deploy on different port
Deploy-PepApi.ps1 -Urls "http://*:9000"
Update/Redeploy
To update the service with new code:
# Simply run the deploy script again
powershell -ExecutionPolicy Bypass -File Deploy-PepApi.ps1 -OpenFirewall
The script will:
- Stop the existing service
- Deploy the new version
- Restart the service
Note: Your appsettings.json changes will be preserved.
API Endpoints
Once deployed, the API will be available at:
- Swagger UI:
http://localhost:8085/swagger - OpenAPI Spec:
http://localhost:8085/swagger/v1/swagger.json
Endpoints
GET /nests/{year}- Get nests for yearGET /nests/{nestName}?year=YYYY- Get nest (year optional, finds most recent)GET /nests/{nestName}/download?year=YYYY- Download nest fileGET /nests/{nestName}/plates?year=YYYY- Get platesGET /materials- Get all materialsGET /materials/{id}- Get specific material
Security Notes
⚠️ Before production deployment:
- Enable HTTPS (not configured by default)
- Add authentication/authorization
- Review CORS policy (currently allows all origins)
- Update DotNetZip package (has security vulnerability)
- Run service with least-privilege account
Performance Tips
- Consider adding response caching
- Enable response compression in production
- Monitor database query performance
- Add connection pooling configuration if needed
Support
For issues:
- Check Event Viewer logs
- Review
appsettings.jsonconfiguration - Test database and file access manually
- Review MIGRATION_SUMMARY.md for detailed changes