This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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/ironman-sample | |
- 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/ironman-sample/.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,請自行替換成對應的名稱及路徑 |