diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..c38ffba --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,45 @@ +name: Deploy + +on: + push: + branches: + - main + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Install Docker Compose + run: | + sudo apt-get update + sudo apt-get install -y docker-compose + + - name: Build Docker image + run: docker-compose build + + - name: List Docker images + run: docker images + + - name: Tag Docker image + run: docker tag pavelveter/urlshortener latest + + - name: Login to Docker Hub + run: | + echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + + - name: Push Docker image to Docker Hub + run: docker push pavelveter/urlshortener:latest + + - name: Deploy to vps + run: | + echo "${{ secrets.SSH_PRIVATE_KEY }}" > private_key.pem + chmod 600 private_key.pem + ssh -i private_key.pem -p ${{ secrets.VPS_PORT }} -o StrictHostKeyChecking=no ${{ secrets.VPS_USER }}@${{ secrets.VPS_HOST }} "cd /home/good/shortener && docker-compose pull && docker-compose up -d" + rm private_key.pem diff --git a/.gitignore b/.gitignore index c5c7a3e..3507a4c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -config.ini -urls.txt \ No newline at end of file +config.ini \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index f143419..570530e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,6 +10,5 @@ RUN go build -o app main.go FROM alpine:latest WORKDIR /app COPY --from=builder /app/app /app/ -COPY config.ini urls.txt ./ EXPOSE 8081 -CMD ["./app"] \ No newline at end of file +CMD ["./app"] diff --git a/docker-compose.yml b/docker-compose.yml index b876ff7..bb4e93b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,9 @@ -version: '2.2' - services: - url_shortener: + urlshortener: build: context: . dockerfile: Dockerfile + image: pavelveter/urlshortener:latest ports: - '8081:8081' volumes: