From b9ab746cfdf1163df285f720bc6aa412917d0ee6 Mon Sep 17 00:00:00 2001 From: Alexander Lazarenko Date: Tue, 27 May 2025 11:47:15 +0000 Subject: [PATCH] Image autobuild (#1) Reviewed-on: https://gitea.unprism.ru/KRBL/WhiteNightsFrontend/pulls/1 Co-authored-by: Alexander Lazarenko Co-committed-by: Alexander Lazarenko --- .dockerignore | 8 ++++++ .gitea/workflows/publish.yaml | 51 +++++++++++++++++++++++++++++++++++ Dockerfile | 21 +++++++++++++++ nginx.conf | 34 +++++++++++++++++++++++ 4 files changed, 114 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitea/workflows/publish.yaml create mode 100644 Dockerfile create mode 100644 nginx.conf diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c65bbd4 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +node_modules +.git +.gitignore +npm-debug.log* +yarn-debug.log* +yarn-error.log* +*.md +dist \ No newline at end of file diff --git a/.gitea/workflows/publish.yaml b/.gitea/workflows/publish.yaml new file mode 100644 index 0000000..1f00d7b --- /dev/null +++ b/.gitea/workflows/publish.yaml @@ -0,0 +1,51 @@ +name: release-tag + +on: + push + +jobs: + release-image: + runs-on: ubuntu-latest + container: + image: catthehacker/ubuntu:act-latest + env: + DOCKER_ORG: krbl + DOCKER_LATEST: nightly + RUNNER_TOOL_CACHE: /toolcache + IMAGE_NAME: white-nights-ts + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker BuildX + uses: docker/setup-buildx-action@v2 + with: + config-inline: | + [registry."gitea.unprism.ru"] + + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + registry: gitea.unprism.ru + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Get Meta + id: meta + run: | + echo REPO_NAME=$(echo ${GITHUB_REPOSITORY} | awk -F"/" '{print $2}') >> $GITHUB_OUTPUT + echo REPO_VERSION=$(git describe --tags --always | sed 's/^v//') >> $GITHUB_OUTPUT + + - name: Build and push + uses: docker/build-push-action@v4 + with: + context: . + file: ./Dockerfile + platforms: | + linux/amd64 + push: true + tags: | + gitea.unprism.ru/${{ env.DOCKER_ORG }}/${{ env.IMAGE_NAME }}:${{ env.DOCKER_LATEST }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..560f9b9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM node:lts-alpine AS builder + +WORKDIR /app + +COPY package.json package-lock.json ./ + +RUN npm ci + +COPY . . + +RUN npm run build + +FROM nginx:alpine + +COPY nginx.conf /etc/nginx/conf.d/default.conf + +COPY --from=builder /app/dist /usr/share/nginx/html + +EXPOSE 80 + +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..cc07847 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,34 @@ +server { + listen 80; + server_name localhost; # Замените на ваш домен, если необходимо + + # Корневая директория для статических файлов + root /usr/share/nginx/html; + index index.html; + + location / { + # Важно для Single Page Applications (SPA) вроде Vue + # Пытается отдать файл по $uri, затем директорию $uri/, + # иначе отдает /index.html (чтобы Vue Router обработал маршрут) + try_files $uri $uri/ /index.html; + } + + # Опционально: gzip сжатие для улучшения производительности + gzip on; + gzip_vary on; + gzip_proxied any; + gzip_comp_level 6; + gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml; + + # Опционально: Заголовки кэширования для статических ассетов + location ~* \.(?:jpg|jpeg|gif|png|ico|css|js|svg|woff|woff2|ttf|eot)$ { + expires 1y; + add_header Cache-Control "public"; + } + + # Опционально: Обработка ошибок (рекомендуется) + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} \ No newline at end of file