Skip to content

Latest commit

Β 

History

History
346 lines (246 loc) Β· 6.13 KB

File metadata and controls

346 lines (246 loc) Β· 6.13 KB

konxc.space Portfolio Deployment Guide

πŸ“‹ Overview

Portfolio website built with Astro, deployed as Docker container behind Nginx reverse proxy.

Domains:

  • Primary: konxc.space
  • WWW: www.konxc.space

Tech Stack:

  • Framework: Astro 5.x
  • Runtime: Node.js 20
  • Adapter: @astrojs/node (standalone)
  • Container: Docker
  • Reverse Proxy: Nginx
  • SSL: Let's Encrypt

πŸš€ Quick Deployment

1. Generate SSL Certificate (First Time Only)

cd /home/dev/web
./scripts/generate-ssl-konxc.sh

This will:

  • Request SSL certificate from Let's Encrypt
  • Configure for both konxc.space and www.konxc.space
  • Enable auto-renewal

2. Deploy Application

cd /home/dev/web
./scripts/deploy-konxc-portfolio.sh

This will:

  • Build Docker image
  • Start container
  • Configure nginx
  • Verify deployment

πŸ“ File Structure

/home/dev/web/
β”œβ”€β”€ instances/koneksi/services/portfolio/
β”‚   β”œβ”€β”€ Dockerfile                 # Docker build config
β”‚   β”œβ”€β”€ docker-compose.yml         # Container orchestration
β”‚   β”œβ”€β”€ .dockerignore             # Build exclusions
β”‚   β”œβ”€β”€ package.json              # Dependencies
β”‚   β”œβ”€β”€ astro.config.mjs          # Astro configuration
β”‚   └── src/                      # Source code
β”œβ”€β”€ infrastructure/nginx/conf.d/
β”‚   └── konxc.space.conf          # Nginx configuration
└── scripts/
    β”œβ”€β”€ deploy-konxc-portfolio.sh # Deployment script
    └── generate-ssl-konxc.sh     # SSL setup script

πŸ”§ Configuration Details

Docker Container

Name: koneksi-portfolio Port: 4321 (internal only) Network: nginx-net Health Check: HTTP GET on port 4321

Nginx Configuration

HTTP (Port 80):

  • Redirects to HTTPS
  • Handles ACME challenges for SSL renewal

HTTPS (Port 443):

  • Serves both konxc.space and www.konxc.space
  • Proxies to koneksi-portfolio:4321
  • Security headers enabled
  • Static asset caching (1 year)

Environment Variables

NODE_ENV=production
HOST=0.0.0.0
PORT=4321

πŸ› οΈ Manual Operations

Build Image

cd /home/dev/web/instances/koneksi/services/portfolio
docker build -t konxc-portfolio:latest .

Start Container

docker compose up -d

Stop Container

docker compose down

View Logs

docker logs -f koneksi-portfolio

Restart Container

docker compose restart

Rebuild and Restart

docker compose down
docker build -t konxc-portfolio:latest .
docker compose up -d

πŸ§ͺ Testing

Test HTTP Redirect

curl -I http://konxc.space
# Should return 301 redirect to https://

Test HTTPS Main Domain

curl -I https://konxc.space
# Should return 200 OK

Test HTTPS WWW Subdomain

curl -I https://www.konxc.space
# Should return 200 OK

Test Container Health

docker inspect koneksi-portfolio --format='{{.State.Health.Status}}'
# Should return: healthy

Test Nginx Config

docker exec nginx-proxy nginx -t

πŸ” SSL Certificate Management

Check Certificate Status

sudo certbot certificates -d konxc.space

Manual Renewal

sudo certbot renew --cert-name konxc.space
docker exec nginx-proxy nginx -s reload

Auto-Renewal

Certbot automatically renews certificates via systemd timer:

# Check timer status
systemctl status certbot.timer

# Test renewal (dry-run)
sudo certbot renew --dry-run

πŸ“Š Monitoring

Container Status

docker ps --filter "name=koneksi-portfolio"

Resource Usage

docker stats koneksi-portfolio --no-stream

Nginx Logs

# Access logs
docker exec nginx-proxy tail -f /var/log/nginx/konxc.space.access.log

# Error logs
docker exec nginx-proxy tail -f /var/log/nginx/konxc.space.error.log

Container Logs

# Real-time
docker logs -f koneksi-portfolio

# Last 100 lines
docker logs --tail 100 koneksi-portfolio

πŸ› Troubleshooting

Container Won't Start

# Check logs
docker logs koneksi-portfolio

# Check if port is available
docker ps | grep 4321

# Rebuild image
docker compose down
docker build --no-cache -t konxc-portfolio:latest .
docker compose up -d

SSL Certificate Issues

# Check certificate files
sudo ls -la /etc/letsencrypt/live/konxc.space/

# Regenerate certificate
./scripts/generate-ssl-konxc.sh

Nginx Not Proxying

# Test nginx config
docker exec nginx-proxy nginx -t

# Reload nginx
docker exec nginx-proxy nginx -s reload

# Check nginx logs
docker logs nginx-proxy

Site Not Accessible

# Check container is running
docker ps | grep koneksi-portfolio

# Check container health
docker inspect koneksi-portfolio --format='{{.State.Health.Status}}'

# Check nginx is running
docker ps | grep nginx-proxy

# Test from inside container
docker exec koneksi-portfolio wget -O- http://localhost:4321

πŸ”„ Update Workflow

Content Updates

cd /home/dev/web/instances/koneksi/services/portfolio

# Pull latest changes
git pull

# Rebuild and deploy
./scripts/deploy-konxc-portfolio.sh

Dependency Updates

cd /home/dev/web/instances/koneksi/services/portfolio

# Update dependencies
pnpm update

# Test locally
pnpm run build
pnpm run preview

# Deploy
./scripts/deploy-konxc-portfolio.sh

Configuration Changes

# Edit nginx config
nano /home/dev/web/infrastructure/nginx/conf.d/konxc.space.conf

# Test config
docker exec nginx-proxy nginx -t

# Reload nginx
docker exec nginx-proxy nginx -s reload

πŸ“ Notes

  • Container runs as standalone Node.js server (not static)
  • Astro SSR enabled with Node adapter
  • Health checks ensure container is responding
  • Static assets cached for 1 year
  • Security headers enabled
  • HTTP/2 enabled
  • HSTS enabled with 1 year max-age

πŸ†˜ Support

For issues or questions:

  1. Check container logs: docker logs koneksi-portfolio
  2. Check nginx logs: docker exec nginx-proxy tail -f /var/log/nginx/konxc.space.error.log
  3. Verify DNS: dig konxc.space and dig www.konxc.space
  4. Test SSL: openssl s_client -connect konxc.space:443 -servername konxc.space