diff --git a/.gitea/workflows/gitea-push-docker.yml b/.gitea/workflows/gitea-push-docker.yml new file mode 100644 index 0000000..23b7121 --- /dev/null +++ b/.gitea/workflows/gitea-push-docker.yml @@ -0,0 +1,59 @@ +name: Create and publish a Docker image + +on: + push: + branches: ["main"] + +env: + REGISTRY: git.zetcraft.ru + +jobs: + publish: + runs-on: ubuntu-latest + name: Publish image + container: catthehacker/ubuntu:act-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ gitea.actor }} + password: ${{ secrets.TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: https://github.com/docker/metadata-action@v4 + with: + images: ${{ env.REGISTRY }}/${{ gitea.repository }} + + - name: Build and push Docker image + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + context: ./ + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + deploy: + needs: publish + name: Deploy image + runs-on: ubuntu-latest + + steps: + - name: install ssh keys + # check this thread to understand why its needed: + # + run: | + install -m 600 -D /dev/null ~/.ssh/id_rsa + echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa + ssh-keyscan -H ${{ secrets.SSH_HOST }} > ~/.ssh/known_hosts + - name: connect and pull + run: ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "cd ${{ secrets.WORK_DIR }} && docker compose pull && docker compose up -d && docker image prune && exit" + - name: cleanup + run: rm -rf ~/.ssh \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4669d1a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM node:20-alpine3.17 AS builder + +WORKDIR /app +COPY package.json package-lock.json .eslintrc.cjs vite.config.ts index.html ./ +COPY public/ public/ +COPY src/ src/ +RUN npm ci +RUN npm run build + +FROM nginx:1.25.2-alpine +COPY nginx.conf /etc/nginx/conf.d/default.conf +COPY --from=builder /app/build /usr/share/nginx/html +RUN touch /var/run/nginx.pid +RUN chown -R nginx:nginx /var/run/nginx.pid /usr/share/nginx/html /var/cache/nginx /var/log/nginx /etc/nginx/conf.d +USER nginx +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/README.md b/README.md index f768e33..e635fc5 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,25 @@ -# React + Vite +# CyberBloomFrontend -This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. +# Docker -Currently, two official plugins are available: +```bash +docker run -d -p 80:80 \ +--name CyberBloom \ +--restart=always \ +-e TZ=Europe/Moscow \ +git.zetcraft.ru/cyberbloom/ogeetocasecybergarden:main +``` -- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh +# Docker Compose + +```yml +services: + cyberbloomfrontend: + ports: + - '80:80' + container_name: CyberBloom + restart: always + environment: + - TZ=Europe/Moscow + image: 'git.zetcraft.ru/cyberbloom/ogeetocasecybergarden:main' +``` \ No newline at end of file diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..ba0260c --- /dev/null +++ b/nginx.conf @@ -0,0 +1,9 @@ +server_tokens off; +server { + listen 80; + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri /index.html; + } +} \ No newline at end of file