diff --git a/.dockerignore b/.dockerignore index be079a66..1ad5ba29 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,3 +4,4 @@ build .idea .env .DS_Store +Dockerfile diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6c622484..2938cb38 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,23 +1,13 @@ -name: Build & Deploy +name: Create and publish a Docker image on: - push: - tags: - - v* + release: + types: [published] workflow_dispatch: - # branches: - # - master - # - dev - - # pull_request: - # branches: - # - main - env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} - TAG: ${{ github.ref_name }} jobs: # test: @@ -35,38 +25,35 @@ jobs: # run: docker compose run --build backend sh -c 'npx prisma migrate reset --force && export NODE_ENV=test && npx jest' push: - timeout-minutes: 10 runs-on: ubuntu-latest permissions: contents: read packages: write - # needs: test - # if: github.ref == 'refs/heads/main' - steps: - name: Checkout uses: actions/checkout@v3 - - - name: 'Login to GitHub Container Registry' + - name: Docker meta + id: meta + uses: docker/metadata-action@v4 + with: + images: ghcr.io/${{ env.IMAGE_NAME }} + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to GitHub Container Registry uses: docker/login-action@v2 with: registry: ${{env.REGISTRY}} username: ${{github.actor}} - password: ${{secrets.GITHUB_TOKEN}} - - - name: Build containers - run: docker compose -f docker-compose.yml -f docker-compose.prod.yml build - - - name: Add tag - run: docker tag ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:latest ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:${{env.TAG}} - -# - name: Add tag -# run: docker tag ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:latest ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:${{github.sha}} - - # - name: Tag with Git SHA - # run: docker tag ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:latest ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:${{github.sha}} - - - name: Push to Docker Hub - run: | - docker push ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:${{env.TAG}} - docker push ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:latest + password: ${{github.token}} + - name: Build and push Docker image + uses: docker/build-push-action@v4 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/Dockerfile b/Dockerfile index 54cec90e..dfc74dbb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,5 @@ FROM --platform=linux/amd64 node:18-alpine as pre-production -RUN mkdir -p /usr/src/app WORKDIR /usr/src/app #COPY . . @@ -13,6 +12,10 @@ COPY backend/package-lock.json ./backend/package-lock.json RUN npm i +# Add tini for better signal handling +RUN apk add --no-cache tini +ENTRYPOINT ["/sbin/tini", "--"] + RUN #npm ci --prefix backend --omit dev RUN npm ci --prefix backend @@ -25,6 +28,7 @@ FROM --platform=linux/amd64 node:18-alpine as production RUN mkdir -p /usr/src/app WORKDIR /usr/src/app +ENV PORT=9494 ENV NODE_ENV=production COPY --from=pre-production /usr/src/app/backend/dist ./dist diff --git a/docker-compose.override.yml b/docker-compose.override.yml deleted file mode 100644 index 93804fea..00000000 --- a/docker-compose.override.yml +++ /dev/null @@ -1,14 +0,0 @@ -version: '3.8' - -name: reiverr - -services: - reiverr-frontend: - volumes: - - ./:/usr/src/app/ - - /usr/src/app/node_modules - build: - context: . - target: development - ports: - - 5173:5173 diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml deleted file mode 100644 index 474610cd..00000000 --- a/docker-compose.prod.yml +++ /dev/null @@ -1,12 +0,0 @@ -version: '3.8' - -name: reiverr-prod - -services: - reiverr-frontend: - container_name: reiverr-prod - build: - context: . - target: production - ports: - - 9494:9494 diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 542445e2..00000000 --- a/docker-compose.yml +++ /dev/null @@ -1,11 +0,0 @@ -version: '3.8' - -name: reiverr-dev - -services: - reiverr-frontend: - container_name: reiverr-dev - image: ghcr.io/aleksilassila/reiverr:latest - restart: unless-stopped - volumes: - - ./backend/config:/usr/src/app/config diff --git a/package.json b/package.json index e117158c..cdcb8083 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "build:tizen": "set VITE_PLATFORM=tv&& vite build --mode production --outDir tizen/dist", "preview": "vite preview", "preview:tizen": "set VITE_PLATFORM=tv&& vite build --outDir tizen/dist && vite preview --outDir tizen/dist", - "deploy": "PORT=9494 NODE_ENV=production node build/", + "deploy": "NODE_ENV=production node build/", "deploy:electron": "vite build && electron-builder -mw --x64 --config build.config.json; electron-builder -m --arm64 --config build.config.json", "test": "playwright test", "check": "svelte-check --tsconfig ./tsconfig.json", @@ -72,4 +72,4 @@ "dependencies": { "gsap": "^3.12.5" } -} +} \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index 898b1af9..c6620f06 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -25,7 +25,13 @@ export default defineConfig({ optimizeDeps: { exclude: ['svelte-navigator'] }, define: { REIVERR_VERSION: `"${pkg.version}"` - } + }, + server: { + port: Number(process.env.PORT || 4173) + }, + preview: { + port: Number(process.env.PORT || 9494) + }, // base: '/dist', // experimental: {