From 40f5e9c4c31c72dfc3a23ed51036e8efcfc7ecf9 Mon Sep 17 00:00:00 2001 From: lukas Date: Wed, 2 Sep 2026 07:43:28 +0200 Subject: [PATCH] :sparkles: Update design --- .gitea/workflows/ci.yml | 98 +++++++---------------------------------- docker-compose.prod.yml | 76 ++++++++++++++++++-------------- docker-compose.yml | 10 ++--- vite.config.ts | 2 +- 4 files changed, 65 insertions(+), 121 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 000f57b..6663636 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -13,7 +13,6 @@ env: permissions: contents: read - packages: write jobs: test: @@ -69,92 +68,27 @@ jobs: runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Deploy to TrueNAS env: - DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} - DEPLOY_PORT: ${{ secrets.DEPLOY_PORT }} - DEPLOY_USER: ${{ secrets.DEPLOY_USER }} - DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }} - DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} - - POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }} - BETTER_AUTH_SECRET: ${{ secrets.BETTER_AUTH_SECRET }} - BETTER_AUTH_URL: ${{ secrets.BETTER_AUTH_URL }} - RESEND_API_KEY: ${{ secrets.RESEND_API_KEY }} - STAFF_SEED_EMAIL: ${{ secrets.STAFF_SEED_EMAIL }} - STAFF_SEED_PASSWORD: ${{ secrets.STAFF_SEED_PASSWORD }} - RESERVATIONS_FROM_EMAIL: ${{ secrets.RESERVATIONS_FROM_EMAIL }} - + TRUENAS_URL: ${{ secrets.TRUENAS_URL }} + TRUENAS_API_KEY: ${{ secrets.TRUENAS_API_KEY }} IMAGE_TAG: ${{ github.sha }} - run: | set -euo pipefail - mkdir -p ~/.ssh + echo "Deploying image:" + echo "${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${IMAGE_TAG}" - printf '%s\n' "$DEPLOY_SSH_KEY" > ~/.ssh/deploy_key - chmod 600 ~/.ssh/deploy_key - - ssh-keyscan \ - -p "${DEPLOY_PORT:-22}" \ - -H "$DEPLOY_HOST" \ - >> ~/.ssh/known_hosts - - echo "Creating deployment directory if needed..." - - ssh \ - -i ~/.ssh/deploy_key \ - -p "${DEPLOY_PORT:-22}" \ - "$DEPLOY_USER@$DEPLOY_HOST" \ - "mkdir -p '$DEPLOY_PATH'" - - echo "Uploading compose file..." - - scp \ - -i ~/.ssh/deploy_key \ - -P "${DEPLOY_PORT:-22}" \ - docker-compose.prod.yml \ - "$DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH/docker-compose.yml" - - echo "Deploying..." - - ssh \ - -i ~/.ssh/deploy_key \ - -p "${DEPLOY_PORT:-22}" \ - "$DEPLOY_USER@$DEPLOY_HOST" \ - "POSTGRES_PASSWORD=$(printf '%q' "$POSTGRES_PASSWORD") \ - BETTER_AUTH_SECRET=$(printf '%q' "$BETTER_AUTH_SECRET") \ - BETTER_AUTH_URL=$(printf '%q' "$BETTER_AUTH_URL") \ - RESEND_API_KEY=$(printf '%q' "$RESEND_API_KEY") \ - RESERVATIONS_FROM_EMAIL=$(printf '%q' "$RESERVATIONS_FROM_EMAIL") \ - STAFF_SEED_EMAIL=$(printf '%q' "$STAFF_SEED_EMAIL") \ - STAFF_SEED_PASSWORD=$(printf '%q' "$STAFF_SEED_PASSWORD") \ - IMAGE_TAG=$(printf '%q' "$IMAGE_TAG") \ - bash -c ' - set -euo pipefail - - cd \"$DEPLOY_PATH\" - - echo \"Pulling images...\" - docker compose pull - - echo \"Starting PostgreSQL...\" - docker compose up -d postgres - - echo "Running database migrations..." - docker compose run --rm app npx drizzle-kit migrate + # TrueNAS API deployment goes here. + # + # IMPORTANT: + # The exact JSON-RPC request depends on your TrueNAS SCALE + # version and the name of your Custom App. + # + # TRUENAS_URL should look like: + # https://truenas.example.com + # + # TRUENAS_API_KEY should be a TrueNAS API key with permission + # to update the application. - echo "Seeding database..." - docker compose run --rm app npm run db:seed - - echo "Starting application..." - docker compose up -d - - echo \"Cleaning unused images...\" - docker image prune -f - - echo \"Deployment complete.\" - '" + echo "TrueNAS deployment configuration required." \ No newline at end of file diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 69770c5..0af2089 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -1,35 +1,45 @@ -services: - app: - image: git.lukas-harat.com/lukas/promo_steakhouse:${IMAGE_TAG:-latest} - restart: unless-stopped - ports: - - '3003:3000' - environment: - DATABASE_URL: postgres://steakhouse:${POSTGRES_PASSWORD}@postgres:5432/steakhouse - BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET} - BETTER_AUTH_URL: ${BETTER_AUTH_URL} - STAFF_SEED_EMAIL: ${STAFF_SEED_EMAIL} - STAFF_SEED_PASSWORD: ${STAFF_SEED_PASSWORD} - RESEND_API_KEY: ${RESEND_API_KEY} - RESERVATIONS_FROM_EMAIL: ${RESERVATIONS_FROM_EMAIL} - depends_on: - postgres: - condition: service_healthy + services: + app: + image: git.lukas-harat.com/lukas/promo_rathaus:${IMAGE_TAG:-latest} - postgres: - image: postgres:16-alpine - restart: unless-stopped - environment: - POSTGRES_USER: steakhouse - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - POSTGRES_DB: steakhouse - volumes: - - steakhouse-postgres-data:/var/lib/postgresql/data - healthcheck: - test: ["CMD-SHELL", "pg_isready -U steakhouse -d steakhouse"] - interval: 5s - timeout: 5s - retries: 10 + restart: unless-stopped -volumes: - steakhouse-postgres-data: + ports: + - "3003:3000" + + environment: + DATABASE_URL: postgres://promo_rathaus:${POSTGRES_PASSWORD}@postgres:5432/promo_rathaus + BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET} + BETTER_AUTH_URL: ${BETTER_AUTH_URL} + STAFF_SEED_EMAIL: ${STAFF_SEED_EMAIL} + STAFF_SEED_PASSWORD: ${STAFF_SEED_PASSWORD} + RESEND_API_KEY: ${RESEND_API_KEY} + RESERVATIONS_FROM_EMAIL: ${RESERVATIONS_FROM_EMAIL} + + depends_on: + postgres: + condition: service_healthy + + postgres: + image: postgres:16-alpine + + restart: unless-stopped + + environment: + POSTGRES_USER: promo_rathaus + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: promo_rathaus + + volumes: + - /mnt/YOUR_POOL/apps/promo-rathaus/postgres:/var/lib/postgresql/data + + healthcheck: + test: + [ + "CMD-SHELL", + "pg_isready -U promo_rathaus -d promo_rathaus" + ] + interval: 5s + timeout: 5s + retries: 10 + start_period: 10s \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 1b1769d..ab8025a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,13 +3,13 @@ services: image: postgres:16-alpine restart: unless-stopped environment: - POSTGRES_USER: steakhouse - POSTGRES_PASSWORD: steakhouse - POSTGRES_DB: steakhouse + POSTGRES_USER: promo_rathaus + POSTGRES_PASSWORD: promo_rathaus + POSTGRES_DB: promo_rathaus ports: - '5432:5432' volumes: - - steakhouse-postgres-data:/var/lib/postgresql/data + - promo_rathaus-postgres-data:/var/lib/postgresql/data volumes: - steakhouse-postgres-data: + promo_rathaus-postgres-data: diff --git a/vite.config.ts b/vite.config.ts index 6cf972b..c6b77e2 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -8,7 +8,7 @@ const config = defineConfig({ resolve: { tsconfigPaths: true }, plugins: [tanstackStart(), viteReact()], preview: { - allowedHosts: ['localhost', '127.0.0.1', 'promo-steakhouse.lukas-harat.com'], + allowedHosts: ['localhost', '127.0.0.1', 'promo-rathaus.lukas-harat.com'], } })