代码之家  ›  专栏  ›  技术社区  ›  kar

无法部署,因为端口已被占用

  •  2
  • kar  · 技术社区  · 2 年前

    我正在尝试通过部署 Nginx 使用 Dockerfile Github Actions .

    正在获取以下错误:

    启动userland代理时出错:侦听tcp4 0.0.0.0:80:bind:address 已经在使用。

    如果我在服务器上停止Nginx,我可以进行部署。

    但我正在尝试部署到Nginx,所以服务器应该正在运行。

    我做错了什么?

    我的Dockerfile

    FROM node:20-alpine
    
    WORKDIR /app
    
    COPY package*.json yarn.lock ./
    
    RUN yarn
    
    COPY . .
    
    EXPOSE 8081
    
    CMD [ "yarn", "start" ]
    

    我的操作文件

    name: Deploy to DigitalOcean
    
    on:
      push:
        branches:
          - main
    
    jobs:
      deploy:
        runs-on: ubuntu-latest
    
        steps:
          - name: Checkout code
            uses: actions/[email protected]
    
          - name: Set up Docker
            uses: docker/[email protected]
    
          - name: Login to Docker Hub
            uses: docker/login-action@v2
            with:
              username: ${{ secrets.DOCKERHUB_USERNAME }}
              password: ${{ secrets.DOCKERHUB_TOKEN }}
    
          - name: Build and push image to Docker Hub
            uses: docker/[email protected]
            with:
              context: .
              push: true
              tags: ${{ secrets.DOCKERHUB_USERNAME }}/example:${{ github.sha }}
              build-args: |
                NODE_VERSION=20
    
          - name: Deploy to DigitalOcean Droplet
            uses: appleboy/[email protected]
            with:
              host: ${{ secrets.DROPLET_IP }}
              username: ${{ secrets.SSH_USERNAME }}
              key: ${{ secrets.SSH_PRIVATE_KEY }}
              port: 22
              script: |
                echo "Pulling Docker image..."
                docker pull ${{ secrets.DOCKERHUB_USERNAME }}/example:${{ github.sha }}
    
                echo "Stopping and removing existing container (if it exists)..."
                if docker ps -a | grep -q "example-container"; then
                  docker stop example-container
                  docker rm example-container
                fi
    
                echo "Starting a new container..."
                docker run -d --name example-container -p 80:8081 ${{ secrets.DOCKERHUB_USERNAME }}/example:${{ github.sha }}
    

    我的Nginx文件位于

    /etc/nginx/sites-available/example.com

    server {
            root /var/www/example.com/html;
            index index.html index.htm index.nginx-debian.html;
            server_name example.com www.example.com;
            location / {
                    try_files $uri $uri/ =404;
                    proxy_pass http://localhost:8081;
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
            }
        listen [::]:443 ssl ipv6only=on; # managed by Certbot
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    }
    server {
        if ($host = www.example.com) {
            return 301 https://$host$request_uri;
        } # managed by Certbot
    
    
        if ($host = example.com) {
            return 301 https://$host$request_uri;
        } # managed by Certbot
    
    
            listen 80;
            listen [::]:80;
    
            server_name example.com www.example.com;
        return 404; # managed by Certbot
    }
    
    0 回复  |  直到 2 年前