我正在尝试通过部署
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
}