deploy: Traefik hosts + registry images for shop/admin/api
continuous-integration/drone/push Build is failing

Publish nginx/API images from CI and deploy on the Pi with
shop.zea.lt, admin.zea.lt, and api.iled.zea.lt.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
miczekandCursor committed 2026-10-15 04:47:52 +03:00
1 parent b494cde365
commit 6aefe2cb23
6 files changed
+165 -34

No files matched your search

+68 -5
View File
@@ -1,5 +1,4 @@
# Drone CI/CD for iLED shop # Drone CI/CD for iLED shop — build on desktop agent, deploy to Pi via SSH.
# Builds run on the Windows desktop agent (linux/amd64). Pi only hosts Drone.
kind: pipeline kind: pipeline
type: docker type: docker
@@ -58,6 +57,60 @@ steps:
depends_on: depends_on:
- api - api
- name: docker-api
image: plugins/docker
pull: false
settings:
repo: registry.zea.lt/miczek/iled-api
registry: registry.zea.lt
username:
from_secret: registry_username
password:
from_secret: registry_password
dockerfile: docker/Dockerfile.api
context: .
tags:
- latest
- ${DRONE_COMMIT_SHA:0:7}
depends_on:
- api
- name: docker-shop
image: plugins/docker
pull: false
settings:
repo: registry.zea.lt/miczek/iled-shop
registry: registry.zea.lt
username:
from_secret: registry_username
password:
from_secret: registry_password
dockerfile: docker/Dockerfile.shop
context: .
tags:
- latest
- ${DRONE_COMMIT_SHA:0:7}
depends_on:
- shop
- name: docker-admin
image: plugins/docker
pull: false
settings:
repo: registry.zea.lt/miczek/iled-admin
registry: registry.zea.lt
username:
from_secret: registry_username
password:
from_secret: registry_password
dockerfile: docker/Dockerfile.admin
context: .
tags:
- latest
- ${DRONE_COMMIT_SHA:0:7}
depends_on:
- admin
trigger: trigger:
event: event:
- push - push
@@ -101,18 +154,27 @@ steps:
script_stop: true script_stop: true
envs: envs:
- DEPLOY_PATH - DEPLOY_PATH
- REGISTRY_USERNAME
- REGISTRY_PASSWORD
script: script:
- set -euo pipefail - set -euo pipefail
- DEPLOY_PATH="${DEPLOY_PATH:-/opt/iled-shop}"
- cd "${DEPLOY_PATH}" - cd "${DEPLOY_PATH}"
- git fetch origin - git fetch origin
- git checkout "${DRONE_COMMIT_SHA}" - git checkout "${DRONE_COMMIT_SHA}"
- echo "${REGISTRY_PASSWORD}" | docker login registry.zea.lt -u "${REGISTRY_USERNAME}" --password-stdin
- cd docker - cd docker
- docker compose --profile full pull || true - docker compose pull
- docker compose --profile full up -d --build --remove-orphans - docker compose up -d --remove-orphans
- docker compose --profile full ps - docker compose ps
- docker logout registry.zea.lt || true
environment: environment:
DEPLOY_PATH: DEPLOY_PATH:
from_secret: deploy_path from_secret: deploy_path
REGISTRY_USERNAME:
from_secret: registry_username
REGISTRY_PASSWORD:
from_secret: registry_password
trigger: trigger:
branch: branch:
@@ -120,3 +182,4 @@ trigger:
- main - main
event: event:
- push - push
- custom
+4
View File
@@ -0,0 +1,4 @@
FROM nginx:1.27-alpine
COPY src/admin/dist/admin/browser /usr/share/nginx/html
COPY docker/nginx-spa.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
+2 -2
View File
@@ -1,7 +1,7 @@
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src WORKDIR /src
COPY . . COPY src/backend/ .
RUN dotnet restore iLED.sln RUN dotnet restore iLED.slnx
RUN dotnet publish src/iLED.Api/iLED.Api.csproj -c Release -o /app/publish RUN dotnet publish src/iLED.Api/iLED.Api.csproj -c Release -o /app/publish
FROM mcr.microsoft.com/dotnet/aspnet:10.0 FROM mcr.microsoft.com/dotnet/aspnet:10.0
+4
View File
@@ -0,0 +1,4 @@
FROM nginx:1.27-alpine
COPY src/shop/dist/shop/browser /usr/share/nginx/html
COPY docker/nginx-spa.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
+72 -27
View File
@@ -2,58 +2,57 @@ services:
postgres: postgres:
image: postgres:16-alpine image: postgres:16-alpine
container_name: iled-postgres container_name: iled-postgres
restart: always
environment: environment:
POSTGRES_DB: iled POSTGRES_DB: ${POSTGRES_DB:-iled}
POSTGRES_USER: iled POSTGRES_USER: ${POSTGRES_USER:-iled}
POSTGRES_PASSWORD: iled123 POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-iled123}
ports:
- "5433:5432"
volumes: volumes:
- iled_pgdata:/var/lib/postgresql/data - iled_pgdata:/var/lib/postgresql/data
healthcheck: healthcheck:
test: ["CMD-SHELL", "pg_isready -U iled -d iled"] test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
interval: 5s interval: 5s
timeout: 5s timeout: 5s
retries: 5 retries: 5
networks:
- iled
- homelab
redis: redis:
image: redis:7-alpine image: redis:7-alpine
container_name: iled-redis container_name: iled-redis
ports: restart: always
- "6379:6379"
healthcheck: healthcheck:
test: ["CMD", "redis-cli", "ping"] test: ["CMD", "redis-cli", "ping"]
interval: 5s interval: 5s
timeout: 5s timeout: 5s
retries: 5 retries: 5
networks:
- iled
# Backend observability: logs + metrics + traces (UI http://localhost:5080)
# Login: root@iled.local / Complexpass#123
openobserve: openobserve:
image: public.ecr.aws/zinclabs/openobserve:latest image: public.ecr.aws/zinclabs/openobserve:latest
container_name: iled-openobserve container_name: iled-openobserve
restart: always
environment: environment:
ZO_ROOT_USER_EMAIL: root@iled.local ZO_ROOT_USER_EMAIL: ${ZO_ROOT_USER_EMAIL:-root@iled.local}
ZO_ROOT_USER_PASSWORD: Complexpass#123 ZO_ROOT_USER_PASSWORD: ${ZO_ROOT_USER_PASSWORD:-Complexpass#123}
ZO_DATA_DIR: /data ZO_DATA_DIR: /data
ports:
- "5080:5080"
volumes: volumes:
- iled_openobserve:/data - iled_openobserve:/data
networks:
- iled
api: api:
build: image: registry.zea.lt/miczek/iled-api:latest
context: ../src/backend
dockerfile: ../../docker/Dockerfile.api
container_name: iled-api container_name: iled-api
ports: restart: always
- "5000:8080"
environment: environment:
ASPNETCORE_ENVIRONMENT: Development ASPNETCORE_ENVIRONMENT: Production
ConnectionStrings__DefaultConnection: "Host=postgres;Port=5432;Database=iled;Username=iled;Password=iled123" ConnectionStrings__DefaultConnection: "Host=postgres;Port=5432;Database=${POSTGRES_DB:-iled};Username=${POSTGRES_USER:-iled};Password=${POSTGRES_PASSWORD:-iled123}"
ConnectionStrings__Redis: "redis:6379" ConnectionStrings__Redis: "redis:6379"
Cors__Origins__0: "http://localhost:4200" Cors__Origins__0: "https://shop.zea.lt"
Cors__Origins__1: "http://localhost:4201" Cors__Origins__1: "https://admin.zea.lt"
OpenTelemetry__OtlpEndpoint: "http://openobserve:5080/api/default" OpenTelemetry__OtlpEndpoint: "http://openobserve:5080/api/default"
OpenTelemetry__OtlpHeaders: "Authorization=Basic cm9vdEBpbGVkLmxvY2FsOkNvbXBsZXhwYXNzIzEyMw==" OpenTelemetry__OtlpHeaders: "Authorization=Basic cm9vdEBpbGVkLmxvY2FsOkNvbXBsZXhwYXNzIzEyMw=="
OpenTelemetry__ServiceName: "iled-api" OpenTelemetry__ServiceName: "iled-api"
@@ -62,11 +61,57 @@ services:
condition: service_healthy condition: service_healthy
redis: redis:
condition: service_healthy condition: service_healthy
openobserve: networks:
condition: service_started - iled
profiles: - homelab
- full labels:
- "traefik.enable=true"
- "traefik.docker.network=homelab"
- "traefik.http.routers.iled-api.rule=Host(`api.iled.zea.lt`)"
- "traefik.http.routers.iled-api.entrypoints=websecure"
- "traefik.http.routers.iled-api.tls.certresolver=leresolver"
- "traefik.http.services.iled-api.loadbalancer.server.port=8080"
shop:
image: registry.zea.lt/miczek/iled-shop:latest
container_name: iled-shop
restart: always
depends_on:
- api
networks:
- homelab
labels:
- "traefik.enable=true"
- "traefik.docker.network=homelab"
- "traefik.http.routers.iled-shop.rule=Host(`shop.zea.lt`)"
- "traefik.http.routers.iled-shop.entrypoints=websecure"
- "traefik.http.routers.iled-shop.tls.certresolver=leresolver"
- "traefik.http.services.iled-shop.loadbalancer.server.port=80"
admin:
image: registry.zea.lt/miczek/iled-admin:latest
container_name: iled-admin
restart: always
depends_on:
- api
networks:
- homelab
labels:
- "traefik.enable=true"
- "traefik.docker.network=homelab"
- "traefik.http.routers.iled-admin.rule=Host(`admin.zea.lt`)"
- "traefik.http.routers.iled-admin.entrypoints=websecure"
- "traefik.http.routers.iled-admin.tls.certresolver=leresolver"
- "traefik.http.services.iled-admin.loadbalancer.server.port=80"
volumes: volumes:
iled_pgdata: iled_pgdata:
iled_openobserve: iled_openobserve:
networks:
iled:
name: iled
driver: bridge
homelab:
name: homelab
external: true
+15
View File
@@ -0,0 +1,15 @@
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?)$ {
expires 7d;
add_header Cache-Control "public";
}
}