Add readme.md
This commit is contained in:
commit
b63cf03b4d
156
readme.md
Normal file
156
readme.md
Normal file
@ -0,0 +1,156 @@
|
||||
# Deploying .NET Web API with PostgreSQL on Debian 12 LXC
|
||||
|
||||
## Overview
|
||||
This document outlines the steps taken to deploy a .NET Web API on a Debian 12 (Bookworm) LXC container running on Proxmox, and connect it to a PostgreSQL database accessible by the API.
|
||||
|
||||
---
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Debian 12 (Bookworm) LXC container on Proxmox
|
||||
- Root or sudo access on the container
|
||||
- Published .NET Web API DLL ready for deployment
|
||||
- PostgreSQL installed on the container
|
||||
|
||||
---
|
||||
|
||||
## Step 1: Install .NET 8 Runtime and SDK
|
||||
|
||||
```
|
||||
sudo apt update && sudo apt upgrade -y
|
||||
sudo apt install -y apt-transport-https ca-certificates gnupg wget
|
||||
wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
|
||||
sudo dpkg -i packages-microsoft-prod.deb
|
||||
sudo apt update
|
||||
sudo apt install -y dotnet-sdk-8.0 aspnetcore-runtime-8.0
|
||||
dotnet --list-sdks
|
||||
dotnet --list-runtimes
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 2: Install PostgreSQL
|
||||
|
||||
```
|
||||
sudo apt install -y postgresql postgresql-contrib
|
||||
sudo systemctl enable postgresql
|
||||
sudo systemctl start postgresql
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 3: Create PostgreSQL User and Database
|
||||
|
||||
Log into psql as postgres user:
|
||||
|
||||
```
|
||||
sudo -u postgres psql
|
||||
```
|
||||
|
||||
Inside psql shell:
|
||||
|
||||
```
|
||||
CREATE USER api WITH PASSWORD 'abcd1234';
|
||||
CREATE DATABASE apidatabase OWNER api;
|
||||
GRANT ALL PRIVILEGES ON DATABASE apidatabase TO api;
|
||||
\q
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 4: Deploy the .NET Web API DLL
|
||||
|
||||
- Copy published files to `/opt/api/`
|
||||
- Ensure files exist (dll, appsettings.json, etc.)
|
||||
|
||||
Example files present in `/opt/api`:
|
||||
|
||||
- `Taekwondo.WebApi.dll`
|
||||
- `appsettings.json`
|
||||
- `appsettings.Development.json`
|
||||
|
||||
---
|
||||
|
||||
## Step 5: Configure appsettings.json
|
||||
|
||||
Edit `/opt/api/appsettings.json` to include your database connection:
|
||||
|
||||
```
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Host=localhost;Database=apidatabase;Username=api;Password=abcd1234"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 6: Create systemd Service for API
|
||||
|
||||
Create `/etc/systemd/system/mydotnetapi.service` with:
|
||||
|
||||
```
|
||||
[Unit]
|
||||
Description=My .NET Web API
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/api
|
||||
ExecStart=/usr/bin/dotnet /opt/api/Taekwondo.WebApi.dll
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
SyslogIdentifier=dotnet-api
|
||||
User=www-data
|
||||
Environment=ASPNETCORE_ENVIRONMENT=Production
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
Reload systemd and start service:
|
||||
|
||||
```
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable mydotnetapi
|
||||
sudo systemctl start mydotnetapi
|
||||
sudo systemctl status mydotnetapi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 7: Testing API
|
||||
|
||||
- Use `curl` or Postman to test API endpoints, e.g.:
|
||||
|
||||
```
|
||||
curl http://localhost:5000/api/your-endpoint
|
||||
```
|
||||
|
||||
- Check logs in case of issues:
|
||||
|
||||
```
|
||||
sudo journalctl -u mydotnetapi -f
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- **Status=200/CHDIR error:** Ensure working directory exists and user permissions are correct:
|
||||
|
||||
```
|
||||
sudo mkdir -p /opt/api
|
||||
sudo chown www-data:www-data /opt/api
|
||||
```
|
||||
|
||||
- Database connection errors: Verify `appsettings.json` connection string and PostgreSQL is running.
|
||||
|
||||
- Warning `could not change directory to "/root": Permission denied` in psql is safe to ignore.
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
- Adjust firewall and reverse proxy as needed.
|
||||
- Ensure PostgreSQL allows connections from your API IP if running separately.
|
||||
- Tailor environment (e.g., `ASPNETCORE_ENVIRONMENT` setting) for development or production.
|
||||
Loading…
x
Reference in New Issue
Block a user