diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..cd967fc --- /dev/null +++ b/.dockerignore @@ -0,0 +1,25 @@ +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/.idea +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/.gitea/workflows/gitea-push-docker.yml b/.gitea/workflows/gitea-push-docker.yml new file mode 100644 index 0000000..5b66f7d --- /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: + build-and-push-image: + 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: CyberBoom + 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 diff --git a/CyberBoom/Dockerfile b/CyberBoom/Dockerfile new file mode 100644 index 0000000..a95472e --- /dev/null +++ b/CyberBoom/Dockerfile @@ -0,0 +1,19 @@ +FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base +WORKDIR /app +EXPOSE 80 + +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build +WORKDIR /src +COPY ["CyberBoom.csproj", "CyberBoom.csproj"] +RUN dotnet restore "CyberBoom.csproj" +COPY . . +WORKDIR "/src" +RUN dotnet build "CyberBoom.csproj" -c Release -o /app/build + +FROM build AS publish +RUN dotnet publish "CyberBoom.csproj" -c Release -o /app/publish /p:UseAppHost=false + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "CyberBoom.dll"] diff --git a/CyberBoom/README.md b/CyberBoom/README.md new file mode 100644 index 0000000..15dc74a --- /dev/null +++ b/CyberBoom/README.md @@ -0,0 +1,38 @@ +# CyberBloomBackend + +Технологии: +* ASP.NET +* PostgreSQL +* Docker + Compose +* Nginx +* [CI/CD](.gitea/workflows/gitea-push-docker.yml) + +# Схема +![Схема](img/scheme.png "scheme") + +# Docker + +```bash +docker run -d -p 82:80 \ +--name CyberBloomBackend \ +--restart=always \ +-e CONNECTION_STRING='Host=192.168.0.94;Port=5432;Database=backend;Username=prod;Password=' \ +-e TZ=Europe/Moscow \ +git.zetcraft.ru/cybebloom/cybebloombackend:main +``` + +# Docker Compose + +```yml +version: '3.3' +services: + cyberbloomhackaton: + ports: + - '82:80' + container_name: CyberBoom + restart: always + environment: + - CONNECTION_STRING=Host=192.168.0.94;Port=5432;Database=backend;Username=prod;Password= + - TZ=Europe/Moscow + image: 'git.zetcraft.ru/cybebloom/cybebloombackend:main' +``` \ No newline at end of file diff --git a/img/scheme.png b/img/scheme.png new file mode 100644 index 0000000..541af8e Binary files /dev/null and b/img/scheme.png differ