diff --git a/.github/workflows/docs.pivoine.art.yaml b/.github/workflows/docs.pivoine.art.yaml new file mode 100644 index 00000000..976b56ac --- /dev/null +++ b/.github/workflows/docs.pivoine.art.yaml @@ -0,0 +1,50 @@ +name: Build and Deploy docs.pivoine.art via SSH + +on: + workflow_dispatch: # Allows workflow to be run manually + push: + branches: + - main # Or your default branch + paths: + - 'Projects/kompose/docs/**' + +jobs: + build: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./Projects/kompose/docs + environment: ionos + + steps: + - uses: actions/checkout@v4 + - name: Install pnpm + uses: pnpm/action-setup@v4 + - name: Install dependencies + run: pnpm install + - name: Build JavaScript + run: | + pnpm generate + mv .output/public ${{ github.workspace }}/_site/ + + - name: 🚀 Deploy via SSH + uses: appleboy/scp-action@master + with: + host: ${{ secrets.HOST }} + username: ${{ secrets.USERNAME }} + password: ${{ secrets.PASSWORD }} + port: ${{ secrets.PORT }} + source: _site/* # Adjust if required + target: /var/www/docs.pivoine.art/kompose # Set to your deployment directory (for example /public_html) + strip_components: 1 # This ensures that a subdirectory is not created + rm: 1 + - name: Docker compose restart + uses: appleboy/ssh-action@v1 + with: + host: ${{ secrets.HOST }} + username: ${{ secrets.USERNAME }} + password: ${{ secrets.PASSWORD }} + port: ${{ secrets.PORT }} + script: | + cd Projects/kompose/docs + docker compose restart diff --git a/Projects/kompose/docs/.env b/Projects/kompose/docs/.env index bf8ae474..06d865fe 100644 --- a/Projects/kompose/docs/.env +++ b/Projects/kompose/docs/.env @@ -1,2 +1,2 @@ -COMPOSE_PROJECT_NAME=kompose +COMPOSE_PROJECT_NAME=docs TRAEFIK_HOST=docs.pivoine.art diff --git a/Projects/kompose/docs/.env.example b/Projects/kompose/docs/.env.example deleted file mode 100644 index 7e60b075..00000000 --- a/Projects/kompose/docs/.env.example +++ /dev/null @@ -1,2 +0,0 @@ -# Public URL, used for OG Image when running nuxt generate -NUXT_PUBLIC_SITE_URL= diff --git a/Projects/kompose/docs/Dockerfile b/Projects/kompose/docs/Dockerfile deleted file mode 100644 index 0ff236c4..00000000 --- a/Projects/kompose/docs/Dockerfile +++ /dev/null @@ -1,36 +0,0 @@ -# Build stage -FROM node:20-alpine AS builder - -# Install pnpm -RUN npm install -g pnpm@9.0.0 - -WORKDIR /app - -# Copy package files -COPY package.json pnpm-lock.yaml* ./ - -# Install dependencies -RUN pnpm install --frozen-lockfile - -# Copy source code -COPY . . - -# Generate static site -RUN pnpm generate - -# Production stage -FROM nginx:alpine - -# Copy custom nginx config -COPY nginx.conf /etc/nginx/nginx.conf - -# Copy built static site -COPY --from=builder /app/.output/public /usr/share/nginx/html/kompose - -# Add healthcheck -# HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ -# CMD wget --quiet --tries=1 --spider http://localhost:80/ || exit 1 - -EXPOSE 80 - -CMD ["nginx", "-g", "daemon off;"] diff --git a/Projects/kompose/docs/compose.yaml b/Projects/kompose/docs/compose.yaml index a8933aa0..58ac19f8 100644 --- a/Projects/kompose/docs/compose.yaml +++ b/Projects/kompose/docs/compose.yaml @@ -2,29 +2,29 @@ name: docs services: docs: - build: - context: . - dockerfile: Dockerfile + image: ${DOCKER_IMAGE} container_name: ${COMPOSE_PROJECT_NAME}_app restart: unless-stopped volumes: - # Mount the built static site - - ./.output/public:/usr/share/nginx/html:ro + - /var/www/docs.pivoine.art:/public + # No healthcheck - static-web-server doesn't include wget/curl + # Traefik will detect via port check networks: - kompose_network labels: - 'traefik.enable=true' - - 'traefik.http.middlewares.$COMPOSE_PROJECT_NAME-api-redirect-web-secure.redirectscheme.scheme=https' - - 'traefik.http.routers.$COMPOSE_PROJECT_NAME-api-web.middlewares=$COMPOSE_PROJECT_NAME-api-redirect-web-secure' - - 'traefik.http.routers.$COMPOSE_PROJECT_NAME-api-web.rule=Host(`$TRAEFIK_HOST`)' - - 'traefik.http.routers.$COMPOSE_PROJECT_NAME-api-web.entrypoints=web' - - 'traefik.http.routers.$COMPOSE_PROJECT_NAME-api-web-secure.rule=Host(`$TRAEFIK_HOST`)' - - 'traefik.http.routers.$COMPOSE_PROJECT_NAME-api-web-secure.tls.certresolver=resolver' - - 'traefik.http.routers.$COMPOSE_PROJECT_NAME-api-web-secure.entrypoints=web-secure' - - 'traefik.http.middlewares.$COMPOSE_PROJECT_NAME-api-web-secure-compress.compress=true' - - 'traefik.http.routers.$COMPOSE_PROJECT_NAME-api-web-secure.middlewares=$COMPOSE_PROJECT_NAME-api-web-secure-compress' - - 'traefik.http.services.$COMPOSE_PROJECT_NAME-api-web-secure.loadbalancer.server.port=80' + - 'traefik.http.middlewares.$COMPOSE_PROJECT_NAME-redirect-web-secure.redirectscheme.scheme=https' + - 'traefik.http.routers.$COMPOSE_PROJECT_NAME-web.middlewares=$COMPOSE_PROJECT_NAME-redirect-web-secure' + - 'traefik.http.routers.$COMPOSE_PROJECT_NAME-web.rule=Host(`$TRAEFIK_HOST`)' + - 'traefik.http.routers.$COMPOSE_PROJECT_NAME-web.entrypoints=web' + - 'traefik.http.routers.$COMPOSE_PROJECT_NAME-web-secure.rule=Host(`$TRAEFIK_HOST`)' + - 'traefik.http.routers.$COMPOSE_PROJECT_NAME-web-secure.tls.certresolver=resolver' + - 'traefik.http.routers.$COMPOSE_PROJECT_NAME-web-secure.entrypoints=web-secure' + - 'traefik.http.middlewares.$COMPOSE_PROJECT_NAME-web-secure-compress.compress=true' + - 'traefik.http.routers.$COMPOSE_PROJECT_NAME-web-secure.middlewares=$COMPOSE_PROJECT_NAME-web-secure-compress' + - 'traefik.http.services.$COMPOSE_PROJECT_NAME-web-secure.loadbalancer.server.port=80' - 'traefik.docker.network=${NETWORK_NAME:-kompose}' + networks: kompose_network: name: ${NETWORK_NAME:-kompose} diff --git a/Projects/kompose/docs/nginx.conf b/Projects/kompose/docs/nginx.conf deleted file mode 100644 index 54abe9e4..00000000 --- a/Projects/kompose/docs/nginx.conf +++ /dev/null @@ -1,11 +0,0 @@ -http { - server { - listen 80 default_server; - - root /usr/share/nginx/html; - - location / { - try_files $uri $uri/ /index.html; - } - } -}