From 314e61eef7e74ddfe6c3928968f83496a7c451d1 Mon Sep 17 00:00:00 2001 From: Ricardo Carneiro <71648276+ricarneiro@users.noreply.github.com> Date: Mon, 5 May 2025 21:24:48 -0300 Subject: [PATCH 1/2] fix: runner name --- .gitea/workflows/main.yaml | 6 +++--- YTExtractor.sln | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitea/workflows/main.yaml b/.gitea/workflows/main.yaml index b7d1384..4d538b9 100644 --- a/.gitea/workflows/main.yaml +++ b/.gitea/workflows/main.yaml @@ -8,7 +8,7 @@ on: jobs: build: - runs-on: ubuntu-22.04 + runs-on: localACDC steps: - uses: actions/checkout@v3 @@ -47,7 +47,7 @@ jobs: deploy-localACDC: needs: build - runs-on: ubuntu-22.04 + runs-on: localACDC if: github.ref == 'refs/heads/main' steps: @@ -67,7 +67,7 @@ jobs: deploy-pi2Zero: needs: build - runs-on: ubuntu-22.04 + runs-on: pi2Zero if: startsWith(github.ref, 'refs/heads/release/') steps: diff --git a/YTExtractor.sln b/YTExtractor.sln index fc40016..849a5dc 100644 --- a/YTExtractor.sln +++ b/YTExtractor.sln @@ -7,7 +7,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "YTExtractor", "YTExtractor\ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "pipeline", "pipeline", "{5F17A7E6-48F5-4970-B8F6-310BBF9A3C50}" ProjectSection(SolutionItems) = preProject - .gitea\workflow\main.yaml = .gitea\workflow\main.yaml + .gitea\workflows\main.yaml = .gitea\workflows\main.yaml EndProjectSection EndProject Global -- 2.45.2 From 4fa52762ee03383b63431a90cfed4a462b71ae09 Mon Sep 17 00:00:00 2001 From: Ricardo Carneiro <71648276+ricarneiro@users.noreply.github.com> Date: Tue, 27 May 2025 00:38:15 -0300 Subject: [PATCH 2/2] fix: publish --- .gitea/workflows/deploy.yml | 67 ++++++++++++++++ .gitea/workflows/main.yaml | 99 ------------------------ YTExtractor.sln | 2 +- YTExtractor/Data/MongoDbConnector.cs | 3 +- YTExtractor/YTExtractor.csproj | 4 + YTExtractor/appsettings.Development.json | 4 +- YTExtractor/appsettings.Production.json | 28 +++++++ 7 files changed, 105 insertions(+), 102 deletions(-) create mode 100644 .gitea/workflows/deploy.yml delete mode 100644 .gitea/workflows/main.yaml create mode 100644 YTExtractor/appsettings.Production.json diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..2084d66 --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,67 @@ +name: Build and Deploy ASP.NET API + +on: + push: + branches: [ main ] # Apenas quando merge na main + +jobs: + build-and-deploy: + runs-on: localACDC + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' # ou sua versão + + - name: Restore dependencies + run: dotnet restore + + - name: Build application + run: dotnet build --configuration Release --no-restore + + - name: Run tests (opcional) + run: dotnet test --no-build --verbosity normal + + - name: Publish application + run: dotnet publish --configuration Release --output ./publish + + - name: Build Docker image + run: | + docker build -t ytextractor:${{ github.sha }} . + docker tag ytextractor:${{ github.sha }} registry.redecarneir.us/ytextractor:latest + docker tag ytextractor:${{ github.sha }} registry.redecarneir.us/ytextractor:${{ github.sha }} + + - name: Push to registry + run: | + docker push registry.redecarneir.us/ytextractor:latest + docker push registry.redecarneir.us/ytextractor:${{ github.sha }} + + - name: Deploy to remote VPS + run: | + ssh -o StrictHostKeyChecking=no ubuntu@137.131.63.61 << 'EOF' + # Pull da nova imagem + docker pull registry.redecarneir.us/ytextractor:latest + + # Parar container atual se existir + docker stop ytextractor-api || true + docker rm ytextractor-api || true + + # Rodar novo container em produção + docker run -d \ + --name ytextractor-api \ + --restart unless-stopped \ + -p 5000:8080 \ + -e ASPNETCORE_ENVIRONMENT=Production \ + registry.redecarneir.us/ytextractor:latest + + # Limpeza de imagens antigas (opcional) + docker image prune -f + EOF + + - name: Verify deployment + run: | + ssh ubuntu@137.131.63.61 'docker ps | grep ytextractor-api' \ No newline at end of file diff --git a/.gitea/workflows/main.yaml b/.gitea/workflows/main.yaml deleted file mode 100644 index 4d538b9..0000000 --- a/.gitea/workflows/main.yaml +++ /dev/null @@ -1,99 +0,0 @@ -name: CI/CD Pipeline para YTExtractor - -on: - push: - branches: [ main, 'release/*' ] - pull_request: - branches: [ main, 'release/*' ] - -jobs: - build: - runs-on: localACDC - - steps: - - uses: actions/checkout@v3 - - - name: Setup .NET - uses: actions/setup-dotnet@v3 - with: - dotnet-version: '8.0.x' - - - name: Restore dependencies - run: dotnet restore - - - name: Build - run: dotnet build --no-restore - - - name: Test - run: dotnet test --no-build --verbosity normal - - - name: Build Docker image - uses: docker/build-push-action@v4 - with: - context: . - push: false - load: true - tags: ytextractor:${{ github.sha }} - platforms: linux/amd64,linux/arm64 - - - name: Save Docker image - run: docker save ytextractor:${{ github.sha }} > ytextractor-image.tar - - - name: Upload artifact - uses: actions/upload-artifact@v3 - with: - name: docker-image - path: ytextractor-image.tar - - deploy-localACDC: - needs: build - runs-on: localACDC - if: github.ref == 'refs/heads/main' - - steps: - - name: Download artifact - uses: actions/download-artifact@v3 - with: - name: docker-image - - - name: Deploy to localACDC - run: | - echo "Implantando no servidor localACDC" - scp ytextractor-image.tar user@localACDC:/tmp/ - ssh user@localACDC "docker load < /tmp/ytextractor-image.tar && \ - docker stop ytextractor || true && \ - docker rm ytextractor || true && \ - docker run -d --name ytextractor -p 80:80 ytextractor:${{ github.sha }}" - - deploy-pi2Zero: - needs: build - runs-on: pi2Zero - if: startsWith(github.ref, 'refs/heads/release/') - - steps: - - name: Download artifact - uses: actions/download-artifact@v3 - with: - name: docker-image - - - name: Deploy to pi2Zero (Orange Pi Zero) - run: | - echo "Implantando no Orange Pi Zero (recursos limitados)" - # Transfere a imagem para o servidor - scp ytextractor-image.tar user@pi2Zero:/tmp/ - - # Comandos específicos para o Orange Pi Zero (otimizados para baixa memória) - ssh user@pi2Zero " - # Limpar recursos não utilizados - docker system prune -f - - # Parar e remover contêiner existente - docker stop ytextractor || true - docker rm ytextractor || true - - # Carregar a nova imagem - docker load < /tmp/ytextractor-image.tar - - # Iniciar o serviço com limites de memória - docker run -d --name ytextractor -p 80:80 --memory=300m --memory-swap=600m ytextractor:${{ github.sha }} - " diff --git a/YTExtractor.sln b/YTExtractor.sln index 849a5dc..97fc15a 100644 --- a/YTExtractor.sln +++ b/YTExtractor.sln @@ -7,7 +7,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "YTExtractor", "YTExtractor\ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "pipeline", "pipeline", "{5F17A7E6-48F5-4970-B8F6-310BBF9A3C50}" ProjectSection(SolutionItems) = preProject - .gitea\workflows\main.yaml = .gitea\workflows\main.yaml + .gitea\workflows\deploy.yml = .gitea\workflows\deploy.yml EndProjectSection EndProject Global diff --git a/YTExtractor/Data/MongoDbConnector.cs b/YTExtractor/Data/MongoDbConnector.cs index 265e37e..c7c088a 100644 --- a/YTExtractor/Data/MongoDbConnector.cs +++ b/YTExtractor/Data/MongoDbConnector.cs @@ -10,8 +10,9 @@ namespace YTExtractor.Data public MongoDBConnector(IConfiguration configuration) { var connectionString = configuration.GetSection("MongoDbConnection").Value; + var databaseName = configuration.GetSection("MongoDbDatabase").Value; var client = new MongoClient(connectionString); - _database = client.GetDatabase("YTExtractor"); + _database = client.GetDatabase(databaseName); _collection = _database.GetCollection("videos"); } diff --git a/YTExtractor/YTExtractor.csproj b/YTExtractor/YTExtractor.csproj index 91b10e8..e769588 100644 --- a/YTExtractor/YTExtractor.csproj +++ b/YTExtractor/YTExtractor.csproj @@ -10,6 +10,10 @@ + + <_ContentIncludedByDefault Remove="appsettings.Production.json" /> + + diff --git a/YTExtractor/appsettings.Development.json b/YTExtractor/appsettings.Development.json index 3c594a2..b245a15 100644 --- a/YTExtractor/appsettings.Development.json +++ b/YTExtractor/appsettings.Development.json @@ -23,5 +23,7 @@ "Workspace": "Dev", "Application": "YTExtractor" } - } + }, + "MongoDbConnection": "mongodb://admin:c4rn31r0@192.168.0.82:27017,192.168.0.81:27017/?replicaSet=rs0", + "MongoDbDatabase": "YTExtractor" } diff --git a/YTExtractor/appsettings.Production.json b/YTExtractor/appsettings.Production.json new file mode 100644 index 0000000..2f2db01 --- /dev/null +++ b/YTExtractor/appsettings.Production.json @@ -0,0 +1,28 @@ +{ + "Serilog": { + "MinimumLevel": { + "Default": "Information", + "Override": { + "Microsoft": "Warning", + "System": "Warning" + } + }, + "Enrich": [ + "FromLogContext", + "WithMachineName", + "WithThreadId", + "WithEnvironmentUserName" + ], + "Properties": { + "Workspace": "Production", + "Application": "YTExtractor" + } + }, + "AllowedHosts": "*", + "MongoDbConnection": "mongodb://admin:c4rn31r0@localhost:27017,localhost:27018/?authSource=admin", + "MongoDbDatabase": "YTExtractor.Prod", + "YouExpose": { + "ApiKey": "sua-chave-api-producao-aqui", + "ApiUrl": "https://api.youexpose.com/" + } +} \ No newline at end of file -- 2.45.2