Files
draletaha/DEPLOY.md
T
soroush.asadi 96e73bf633
CI/CD / CI · dotnet build (push) Failing after 0s
CI/CD / Deploy · drsousan (push) Has been skipped
first commit
2026-05-31 00:42:08 +03:30

153 lines
3.1 KiB
Markdown

# DrSousan — Deployment Guide
## Mirrors (Nexus at `171.22.25.73`)
### Docker
Add to Docker Engine config (`/etc/docker/daemon.json` on Linux):
```json
{
"insecure-registries": ["171.22.25.73:8087", "171.22.25.73:8090"]
}
```
Restart Docker, then login:
```bash
docker login 171.22.25.73:8087 -u admin
```
### NuGet (for local builds)
Add nexus source to `NuGet.Config`:
```xml
<add key="nexus" value="http://171.22.25.73:8081/repository/nuget-group/index.json" />
```
---
## Update the Dockerfile to use Nexus mirrors
Replace the two `FROM` lines in `DrSousan.Api/Dockerfile`:
```dockerfile
FROM 171.22.25.73:8090/dotnet/sdk:10.0 AS build
...
FROM 171.22.25.73:8090/dotnet/aspnet:10.0 AS runtime
```
---
## First Deploy (server setup)
```bash
# 1. Copy project to server
scp -r . user@server:/opt/drsousan
# 2. SSH in
ssh user@server
cd /opt/drsousan
# 3. Create .env file
cp .env.example .env
nano .env # fill in JWT_KEY, ADMIN_USERNAME, ADMIN_PASSWORD, HOST_PORT
# 4. Build and start
docker compose up -d --build
```
Check it's running:
```bash
docker compose ps
curl http://localhost:5000/healthz
```
---
## Redeploy (update)
```bash
cd /opt/drsousan
git pull
docker compose up -d --build
```
That's it. SQLite data and uploads are on named volumes — they survive rebuilds.
---
## .env file
```env
HOST_PORT=5000
JWT_KEY=YourSecretKeyHere32CharsMinimum!!
JWT_ISSUER=DrSousanApi
JWT_AUDIENCE=DrSousanAdmin
ADMIN_USERNAME=admin
ADMIN_PASSWORD=YourStrongPassword
```
---
## CI/CD (GitHub Actions)
Create `.github/workflows/deploy.yml`:
```yaml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build & push image
run: |
echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login 171.22.25.73:8087 -u admin --password-stdin
docker build \
--build-arg REGISTRY=171.22.25.73:8090 \
-t 171.22.25.73:8087/drsousan/api:latest \
./DrSousan.Api
docker push 171.22.25.73:8087/drsousan/api:latest
- name: Deploy to server
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
script: |
cd /opt/drsousan
docker pull 171.22.25.73:8087/drsousan/api:latest
docker compose up -d
```
**GitHub Secrets to set:**
| Secret | Value |
|--------|-------|
| `REGISTRY_PASSWORD` | Nexus admin password |
| `SERVER_HOST` | Server IP |
| `SERVER_USER` | SSH user |
| `SERVER_SSH_KEY` | Private SSH key |
For the CI image pull to use Nexus, update `docker-compose.yml` to reference the pre-built image:
```yaml
api:
image: 171.22.25.73:8087/drsousan/api:latest
# remove build: section when using CI
```
---
## Useful commands
```bash
docker compose logs -f api # live logs
docker compose restart api # restart without rebuild
docker compose down # stop (volumes preserved)
docker compose down -v # stop + DELETE all data
docker exec -it drsousan_api sh # shell into container
```