Skip to content
name: Deploy Node.js project to virtual machine
on:
push:
branches:
- feature/action-docker # 觸發條件改為推送到 docker 分支
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Install SSH key
uses: webfactory/[email protected]
with:
ssh-private-key: ${{ secrets.DEPLOY_SSH_KEY }}
- name: Create .env file
run: |
echo VARIABLE=${{ secrets.ENV_VARIABLE }} >> .env
# 可加入多個環境變數
- name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: ${{ secrets.DOCKER_HUB_USERNAME }}/ironman-app-2023-amd64:latest # 使用你的 Docker Hub 使用者名稱和應用程式名稱
- name: 更新 known_hosts 文件 # 步驟的名稱
run: | # 將要執行的命令
mkdir -p ~/.ssh # 在用戶的主目錄下創建 .ssh 目錄,如果該目錄已存在,則不會報錯
ssh-keyscan ${{ secrets.HOST_NAME }} >> ~/.ssh/known_hosts # 從指定的主機獲取公鑰,並將其追加到 known_hosts 文件中
# 請將 'hostname' 替換為你的服務器地址,例如 IP 地址或域名
- name: Transfer .env file # 上傳環境變數
run: scp .env root@${{ secrets.HOST_NAME }}:/websample/node-env
- name: Deploy to Docker
run: |
ssh root@${{ secrets.HOST_NAME }} '
docker pull ${{ secrets.DOCKER_HUB_USERNAME }}/github-action-sample:latest
docker rm -f github-ac-sample
docker run -d -p 3003:3000 --name github-ac-sample --env-file /websample/node-env/.env ${{ secrets.DOCKER_HUB_USERNAME }}/github-action-sample:latest
'
# 這裡假設你的 Docker 容器需要監聽 3000 端口,並且你將這個端口映射到虛擬主機的 3000 端口
# 其中的 user、hostname、github-action-sample、github-ac-sample、/path/to/your/app/.env,請自行替換成對應的名稱及路徑