feat(ci): added deployemnt related code inside repo

This commit is contained in:
kalpeshp 2026-07-20 17:01:22 +05:30
parent 706953e3ea
commit cb588b5caa
3 changed files with 88 additions and 40 deletions

View File

@ -2,7 +2,7 @@
# Copy this to .env on the droplet and fill in the values # Copy this to .env on the droplet and fill in the values
# PocketBase public URL (the Traefik-routed domain) # PocketBase public URL (the Traefik-routed domain)
VITE_POCKETBASE_URL=https://pb.thob.studio VITE_POCKETBASE_URL=https://pb.ar.thob.studio
# Frontend public URL # Frontend public URL
VITE_FRONTEND_URL=https://ar.thob.studio VITE_FRONTEND_URL=https://ar.thob.studio

26
build-and-push.sh Executable file
View File

@ -0,0 +1,26 @@
#!/bin/bash
set -e
REGISTRY="registry.digitalocean.com/thob-blr1"
SHA=$(git rev-parse --short=10 HEAD)
echo "Building commit: $SHA"
# Login
doctl registry login
# App
echo "Building AR App..."
docker buildx build \
--platform linux/amd64 \
--build-arg VITE_POCKETBASE_URL=$VITE_POCKETBASE_URL \
--build-arg VITE_FRONTEND_URL=$VITE_FRONTEND_URL \
-f Dockerfile \
--load \
-t $REGISTRY/ar:$SHA \
-t $REGISTRY/ar:latest .
docker push $REGISTRY/ar:$SHA
docker push $REGISTRY/ar:latest
echo "✅ All images built and pushed successfully"

View File

@ -1,45 +1,77 @@
# ============================================================================= version: "3.9"
# AR TEST — Application services
# Deploy path on droplet: /projects/ar-test/ networks:
# traefik:
# Traefik runs in a separate compose (shared infra project) and owns ports 80/443. external: true
# This project only joins the shared external network `traefik_public`.
# ============================================================================= volumes:
pb_data:
services: services:
traefik:
image: traefik:v3.6
container_name: traefik
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "8080:8080"
command:
- "--api.dashboard=true"
- "--api.insecure=true"
- "--log.level=DEBUG"
- "--accesslog=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--certificatesresolvers.letsencrypt.acme.email=tech@thob.studio"
- "--certificatesresolvers.letsencrypt.acme.storage=/etc/traefik/acme.json"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./configs/traefik/acme.json:/etc/traefik/acme.json"
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.service=api@internal"
- "traefik.http.routers.traefik.entrypoints=websecure"
- "traefik.http.routers.traefik.tls.certresolver=letsencrypt"
- "traefik.http.routers.traefik.rule=Host(`traefik.ar.thob.studio`)"
app: app:
container_name: ar-test-app container_name: ar-app
image: registry.digitalocean.com/bop/ar-test:latest image: registry.digitalocean.com/thob-blr1/ar:latest
pull_policy: always pull_policy: always
restart: unless-stopped restart: unless-stopped
build: build:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
args: args:
- VITE_POCKETBASE_URL=${VITE_POCKETBASE_URL:-https://pb.thob.studio} - VITE_POCKETBASE_URL=${VITE_POCKETBASE_URL:-https://pb.ar.thob.studio}
expose: expose:
- "3000" - "3000"
environment: environment:
- VITE_POCKETBASE_URL=${VITE_POCKETBASE_URL:-https://pb.thob.studio} - VITE_POCKETBASE_URL=${VITE_POCKETBASE_URL:-https://pb.ar.thob.studio}
- VITE_FRONTEND_URL=${VITE_FRONTEND_URL:-https://ar.thob.studio} - VITE_FRONTEND_URL=${VITE_FRONTEND_URL:-https://ar.thob.studio}
depends_on: depends_on:
- pocketbase - pocketbase
networks: networks:
- traefik_public - traefik
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.docker.network=traefik_public" - "traefik.docker.network=traefik"
- "traefik.http.routers.ar-test-app.rule=Host(`ar.thob.studio`)" - "traefik.http.routers.ar-app.rule=Host(`ar.thob.studio`)"
- "traefik.http.routers.ar-test-app.entrypoints=websecure" - "traefik.http.routers.ar-app.entrypoints=websecure"
- "traefik.http.routers.ar-test-app.tls.certresolver=defaultresolver" - "traefik.http.routers.ar-app.tls=true"
- "traefik.http.services.ar-test-app.loadbalancer.server.port=3000" - "traefik.http.routers.ar-app.tls.certresolver=letsencrypt"
- "traefik.http.routers.ar-test-app-http.rule=Host(`ar.thob.studio`)" - "traefik.http.services.ar-app.loadbalancer.server.port=3000"
- "traefik.http.routers.ar-test-app-http.entrypoints=web"
- "traefik.http.routers.ar-test-app-http.middlewares=ar-test-app-https-redirect"
- "traefik.http.middlewares.ar-test-app-https-redirect.redirectscheme.scheme=https"
pocketbase: pocketbase:
container_name: ar-test-pb container_name: ar-pb
image: ghcr.io/muchobien/pocketbase:latest image: ghcr.io/muchobien/pocketbase:latest
restart: unless-stopped restart: unless-stopped
command: command:
@ -51,22 +83,12 @@ services:
- pb_data:/pb_data - pb_data:/pb_data
- ./pb_migrations:/pb_migrations - ./pb_migrations:/pb_migrations
networks: networks:
- traefik_public - traefik
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.docker.network=traefik_public" - "traefik.docker.network=traefik"
- "traefik.http.routers.ar-test-pb.rule=Host(`pb.thob.studio`)" - "traefik.http.routers.ar-pb.rule=Host(`pb.ar.thob.studio`)"
- "traefik.http.routers.ar-test-pb.entrypoints=websecure" - "traefik.http.routers.ar-pb.entrypoints=websecure"
- "traefik.http.routers.ar-test-pb.tls.certresolver=defaultresolver" - "traefik.http.routers.ar-pb.tls=true"
- "traefik.http.services.ar-test-pb.loadbalancer.server.port=8090" - "traefik.http.routers.ar-pb.tls.certresolver=letsencrypt"
- "traefik.http.routers.ar-test-pb-http.rule=Host(`pb.thob.studio`)" - "traefik.http.services.ar-pb.loadbalancer.server.port=8090"
- "traefik.http.routers.ar-test-pb-http.entrypoints=web"
- "traefik.http.routers.ar-test-pb-http.middlewares=ar-test-pb-https-redirect"
- "traefik.http.middlewares.ar-test-pb-https-redirect.redirectscheme.scheme=https"
networks:
traefik_public:
external: true
volumes:
pb_data: