- Published on
[MacBook - Development Server] GitHub Actions Deployment (2/4)
- Authors
- Name
- Đông Trần
- Github
- @dongitran
Tiếp tục ^^
Hi anh em dev 👋, ở phần 1, chúng ta đã setup được Cloudflare Tunnel để kết nối với MacBook. Trong phần này, mình sẽ hướng dẫn cách setup GitHub Actions để tự động deploy code lên MacBook server.
Sau bài viết này, chúng ta sẽ:
- ✅ Setup SSH key an toàn cho GitHub Actions
- ✅ Cấu hình GitHub Actions workflow
- ✅ Tự động nhận thông báo qua Telegram khi deploy
Setup SSH Key cho GitHub Actions
1. Tạo SSH Key
Đầu tiên, tạo một cặp SSH key mới:
ssh-keygen -t ed25519 -C "github-actions" -f ./github-actions-key
2. Thêm Public Key vào MacBook
Copy nội dung public key vào file ~/.ssh/authorized_keys
trên MacBook:
cat github-actions-key.pub >> ~/.ssh/authorized_keys
3. Thêm Private Key vào GitHub Secrets
- Vào repository settings > Secrets and variables > Actions
- Tạo secret mới với tên
SSH_PRIVATE_KEY
- Copy nội dung file
github-actions-key
vào secret
Thiết lập GitHub Actions
Tạo file .github/workflows/deploy.yml
để setup workflow:
name: SSH to Mac
on: [push]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Cloudflared
run: |
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared
chmod +x cloudflared
sudo mv cloudflared /usr/local/bin
- name: Setup SSH key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
- name: Connect via SSH
run: |
ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no \
-o ProxyCommand='cloudflared access ssh --hostname %h' \
[email protected]
- name: Create test file
run: |
ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no \
-o ProxyCommand='cloudflared access ssh --hostname %h' \
[email protected] "echo 'SSH connection successful at $(date)' > ~/ssh_test.txt"
notify:
needs: deploy
runs-on: ubuntu-latest
steps:
- name: Send Telegram Notification
uses: appleboy/telegram-action@master
with:
to: ${{ secrets.TELEGRAM_CHAT_ID }}
token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
format: html
message: |
${{ job.status == 'success' && '✅' || '❌' }} <b>Deploy ${{ job.status == 'success' && 'thành công' || 'thất bại' }}!</b>
Repo: ${{ github.repository }}
Branch: ${{ github.ref_name }}
Commit: ${{ github.sha }}
Author: ${{ github.actor }}
Setup Telegram Notifications 🤗
Tạo Telegram Bot
- Chat với @BotFather trên Telegram
- Sử dụng lệnh
/newbot
để tạo bot mới - Lưu lại
API token
và thêm vào GitHub Secrets với tênTELEGRAM_BOT_TOKEN
- Lấy
Chat ID
và thêm vào GitHub Secrets với tênTELEGRAM_CHAT_ID
Mình sử dụng action
appleboy/telegram-action
để gửi thông báo, nó sẽ giúp code ngắn gọn và dễ maintain hơn 😎
Test thử nào! 🚀
Workflow của chúng ta sẽ tạo một file ssh_test.txt
trong thư mục home với timestamp. Để test:
- Push code lên GitHub repository
- Check GitHub Actions tab để theo dõi workflow
- SSH vào MacBook và kiểm tra file:
cat ~/ssh_test.txt
Nếu thấy nội dung kiểu "SSH connection successful at..." là đã thành công rồi nhé 😎
Bài viết của mình dừng ở đây 😛
Ở phần tiếp theo, chúng ta sẽ tìm hiểu cách deploy MongoDB và cấu hình bảo mật cho database, chúc các bạn có thêm nhiều ý tưởng hay ho nhé 🥰