Files
PepApi.Core/scripts/DEPLOY.md
AJ Isaacs d1311ffc74 Move deployment files to scripts folder for better organization
- Move Deploy-PepApi.ps1 to scripts/
- Move DEPLOY.md to scripts/
- Update all script path references to scripts/Deploy-PepApi.ps1
- Update deployment documentation with correct paths
- Add clarification to run from repository root

The deploy script already had logic to detect the scripts subfolder,
this change improves repository organization by separating deployment
tooling from source code.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-27 19:25:34 -04:00

281 lines
5.6 KiB
Markdown

# 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
```powershell
# Run as Administrator from repository root
powershell -ExecutionPolicy Bypass -File scripts/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
```powershell
# Custom service name and location
powershell -ExecutionPolicy Bypass -File scripts/Deploy-PepApi.ps1 `
-ServiceName "MyPepApi" `
-InstallDir "D:\Services\PepApi" `
-Urls "http://*:9000" `
-OpenFirewall
```
### Configuration
After deployment, **you must update** `C:\Services\PepApi\appsettings.json`:
```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:
```powershell
Restart-Service -Name PepApi
```
---
## Alternative: Self-Hosted (No Service)
### Build and Run
```bash
cd PepApi.Core
dotnet publish -c Release -o ./publish
cd publish
.\PepApi.Core.exe
```
### Run with Custom Settings
```bash
.\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
```bash
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
```powershell
Get-Service -Name PepApi
```
### Test API
```powershell
# Health check
Invoke-WebRequest http://localhost:8085/swagger
# Test nests endpoint
Invoke-WebRequest http://localhost:8085/nests/2024
```
### View Logs
```powershell
# 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
```powershell
Start-Service -Name PepApi
```
### Stop Service
```powershell
Stop-Service -Name PepApi
```
### Restart Service
```powershell
Restart-Service -Name PepApi
```
### Uninstall Service
```powershell
Stop-Service -Name PepApi
sc.exe delete PepApi
```
---
## Firewall Configuration
If you didn't use `-OpenFirewall` during deployment:
```powershell
# Open port 8085
New-NetFirewallRule -DisplayName "PepApi HTTP 8085" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 8085 `
-Action Allow
```
---
## Troubleshooting
### Service Won't Start
1. Check Event Viewer for errors:
```powershell
Get-EventLog -LogName Application -Source PepApi -Newest 10
```
2. Verify configuration:
- Database connection string is correct
- Network paths are accessible
- Files exist at specified paths
3. Test manually:
```bash
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=True` in 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`)
- Configure service to run as appropriate account
### Port Already in Use
```powershell
# Find what's using port 8085
netstat -ano | findstr :8085
# Kill the process
Stop-Process -Id [PID] -Force
# Or deploy on different port
scripts/Deploy-PepApi.ps1 -Urls "http://*:9000"
```
---
## Update/Redeploy
To update the service with new code:
```powershell
# Simply run the deploy script again
powershell -ExecutionPolicy Bypass -File scripts/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 year
- `GET /nests/{nestName}?year=YYYY` - Get nest (year optional, finds most recent)
- `GET /nests/{nestName}/download?year=YYYY` - Download nest file
- `GET /nests/{nestName}/plates?year=YYYY` - Get plates
- `GET /materials` - Get all materials
- `GET /materials/{id}` - Get specific material
---
## Security Notes
⚠️ **Before production deployment:**
1. Enable HTTPS (not configured by default)
2. Add authentication/authorization
3. Review CORS policy (currently allows all origins)
4. Update DotNetZip package (has security vulnerability)
5. 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:
1. Check Event Viewer logs
2. Review `appsettings.json` configuration
3. Test database and file access manually
4. Review MIGRATION_SUMMARY.md for detailed changes