diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..cbc174c --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,58 @@ +name: Build & Deploy + +on: + push: + branches: [master] + +env: + REGISTRY: code.letsbe.solutions + IMAGE: letsbe/letsbebiz-site + +jobs: + build-and-push: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Login to Gitea Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ secrets.REGISTRY_USER }} + password: ${{ secrets.REGISTRY_TOKEN }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: | + ${{ env.REGISTRY }}/${{ env.IMAGE }}:latest + ${{ env.REGISTRY }}/${{ env.IMAGE }}:${{ github.sha }} + build-args: | + DATABASE_URI=postgresql://build:build@localhost:5432/build + PAYLOAD_SECRET=${{ secrets.PAYLOAD_SECRET }} + NEXT_PUBLIC_SITE_URL=${{ secrets.NEXT_PUBLIC_SITE_URL }} + NEXT_PUBLIC_CALCOM_URL=${{ secrets.NEXT_PUBLIC_CALCOM_URL }} + cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE }}:buildcache + cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE }}:buildcache,mode=max + + deploy: + needs: build-and-push + runs-on: ubuntu-latest + steps: + - 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 ${{ secrets.DEPLOY_PATH }} + docker pull ${{ env.REGISTRY }}/${{ env.IMAGE }}:latest + docker compose up -d --no-build + docker image prune -f diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..a148d33 --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,39 @@ +services: + db: + image: postgres:16-alpine + restart: unless-stopped + environment: + POSTGRES_DB: letsbe + POSTGRES_USER: ${POSTGRES_USER:-letsbe} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env} + volumes: + - pgdata:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-letsbe} -d letsbe"] + interval: 5s + timeout: 5s + retries: 5 + + app: + image: code.letsbe.solutions/letsbe/letsbebiz-site:latest + restart: unless-stopped + ports: + - "127.0.0.1:3000:3000" + environment: + DATABASE_URI: postgresql://${POSTGRES_USER:-letsbe}:${POSTGRES_PASSWORD}@db:5432/letsbe + PAYLOAD_SECRET: ${PAYLOAD_SECRET} + NEXT_PUBLIC_SITE_URL: ${NEXT_PUBLIC_SITE_URL:-https://staging.letsbe.biz} + NEXT_PUBLIC_CALCOM_URL: ${NEXT_PUBLIC_CALCOM_URL:-} + SMTP_HOST: ${SMTP_HOST:-} + SMTP_PORT: ${SMTP_PORT:-587} + SMTP_USER: ${SMTP_USER:-} + SMTP_PASS: ${SMTP_PASS:-} + SMTP_FROM: ${SMTP_FROM:-hello@letsbe.biz} + ADMIN_EMAIL: ${ADMIN_EMAIL:-hello@letsbe.biz} + OPENROUTER_API_KEY: ${OPENROUTER_API_KEY:-} + depends_on: + db: + condition: service_healthy + +volumes: + pgdata: