|
1 | | -name: Next.js Deployment ke cPanel via SSH |
| 1 | +name: 🚀 Deploy Next.js to cPanel via SSH |
2 | 2 |
|
3 | 3 | on: |
4 | 4 | push: |
5 | 5 | branches: |
6 | | - - main # Ganti jika branch utama Anda berbeda |
| 6 | + - main |
7 | 7 |
|
8 | 8 | jobs: |
9 | 9 | deploy: |
10 | 10 | runs-on: ubuntu-latest |
| 11 | + |
11 | 12 | steps: |
12 | | - - name: 1. Checkout Kode Sumber |
| 13 | + - name: 🧭 Checkout Repository |
13 | 14 | uses: actions/checkout@v4 |
14 | 15 |
|
15 | | - - name: 2. Setup Node.js Environment |
| 16 | + - name: 🟢 Setup Node.js |
16 | 17 | uses: actions/setup-node@v4 |
17 | 18 | with: |
18 | | - node-version: "22" |
19 | | - cache: "npm" |
| 19 | + node-version: 22 |
20 | 20 |
|
21 | | - - name: 3. Instal Dependencies dan Lakukan Build (Di Runner GitHub) |
22 | | - run: | |
23 | | - npm ci |
24 | | - npm run build |
25 | | - # Pengecekan: Pastikan folder utama standalone dan static ada |
26 | | - echo "Verifikasi konten build Next.js (sebelum transfer):" |
27 | | - ls -ld .next/standalone || true # Hanya cek direktori induk |
28 | | - ls -R .next/static || true |
| 21 | + - name: 📦 Install Dependencies |
| 22 | + run: npm ci |
29 | 23 |
|
30 | | - - name: 4. Buat Deployment Tarball |
31 | | - run: | |
32 | | - set -e # Hentikan eksekusi jika perintah tar gagal |
33 | | - echo "Membuat deployment tarball: deployment.tar.gz" |
34 | | - # Membuat tarball berisi semua yang dibutuhkan untuk standalone deployment |
35 | | - # --exclude='node_modules' (node_modules di root tidak perlu ditransfer) |
36 | | - tar -zcf deployment.tar.gz \ |
37 | | - --exclude='node_modules' \ |
38 | | - .next/standalone \ |
39 | | - .next/static \ |
40 | | - package.json \ |
41 | | - app.js \ |
42 | | - public |
43 | | - ls -l deployment.tar.gz # Verifikasi file dibuat dan ukurannya > 0 |
| 24 | + - name: 🏗️ Build Next.js App |
| 25 | + run: npm run build |
44 | 26 |
|
45 | | - - name: 4b. Verifikasi Tarball Sebelum Transfer |
| 27 | + - name: 📁 Prepare Deployment Package |
46 | 28 | run: | |
47 | | - echo "Isi direktori kerja sebelum SCP:" |
48 | | - ls -l deployment.tar.gz |
| 29 | + mkdir deploy |
| 30 | + cp -r .next public package.json app.js next.config.js deploy/ |
| 31 | + # Tambahkan file lain yang dibutuhkan aplikasi di server |
| 32 | + ls -la deploy |
49 | 33 |
|
50 | | - - name: 5. Transfer File (Single Tarball) ke cPanel (via SCP) |
| 34 | + - name: 📤 Deploy to cPanel via SSH |
51 | 35 | uses: appleboy/scp-action@v0.1.7 |
52 | 36 | with: |
53 | 37 | host: ${{ secrets.SSH_HOST }} |
54 | 38 | username: ${{ secrets.SSH_USER }} |
55 | 39 | key: ${{ secrets.SSH_PRIVATE_KEY }} |
56 | 40 | passphrase: ${{ secrets.SSH_PASSPHRASE }} |
57 | | - port: 22 |
58 | | - rm: false |
59 | | - debug: true |
60 | | - # HANYA transfer satu file: tarball yang sudah kita buat |
61 | | - source: deployment.tar.gz |
| 41 | + source: "deploy/*" |
62 | 42 | target: ${{ secrets.DEPLOY_DIR }} |
| 43 | + strip_components: 1 |
| 44 | + overwrite: true |
63 | 45 |
|
64 | | - - name: 6. Eksekusi Perintah di cPanel (via SSH) |
65 | | - uses: appleboy/ssh-action@v1.0.3 |
| 46 | + - name: ⚙️ Restart Node.js App on cPanel |
| 47 | + uses: appleboy/ssh-action@v1.2.0 |
66 | 48 | with: |
67 | 49 | host: ${{ secrets.SSH_HOST }} |
68 | 50 | username: ${{ secrets.SSH_USER }} |
69 | 51 | key: ${{ secrets.SSH_PRIVATE_KEY }} |
70 | 52 | passphrase: ${{ secrets.SSH_PASSPHRASE }} |
71 | | - port: 22 |
72 | | - debug: true |
73 | 53 | script: | |
74 | | - # 1. Setup Environment dan Pindah ke Direktori Aplikasi |
75 | | - source ${{ secrets.NODE_ENV_PATH }} |
76 | | - cd ${{ secrets.DEPLOY_DIR }} |
77 | | -
|
78 | | - # 2. EKSTRAKSI TARBALL |
79 | | - echo "Mengekstrak deployment.tar.gz..." |
80 | | - tar -xzf deployment.tar.gz |
81 | | - rm deployment.tar.gz # Hapus file tarball setelah diekstrak |
82 | | -
|
83 | | - # 3. EKSTRAKSI DAN PEMINDAHAN KONTEN (Langkah Kritis) |
84 | | - echo "Memindahkan konten standalone ke root aplikasi..." |
85 | | -
|
86 | | - # Pindahkan KONTEN dari .next/standalone (server files, node_modules internal) ke DEPLOY_DIR |
87 | | - mv .next/standalone/* . |
88 | | -
|
89 | | - # Hapus folder sementara .next/standalone |
90 | | - rm -rf .next/standalone |
91 | | -
|
92 | | - # 4. Instal Dependencies Produksi ke Path Khusus cPanel |
93 | | - echo "Memastikan node_modules diarahkan ke path yang benar: ${{ secrets.NPM_PREFIX_DIR }}/lib/node_modules" |
94 | | - npm config set prefix ${{ secrets.NPM_PREFIX_DIR }} |
95 | | - npm install --production |
96 | | -
|
97 | | - # 5. Restart Aplikasi |
98 | | - echo "Restart Aplikasi (Trigger cPanel App Manager)..." |
99 | | - touch app.js |
100 | | -
|
101 | | - echo "Deployment Selesai!" |
| 54 | + echo "🔧 Activating Node.js environment..." |
| 55 | + ${{ secrets.NODE_ENV_PATH }} |
| 56 | + echo "📦 Installing production dependencies..." |
| 57 | + npm ci --omit=dev |
| 58 | + echo "♻️ Restarting Node.js app..." |
| 59 | + touch tmp/restart.txt || true |
| 60 | + echo "✅ Deployment complete!" |
0 commit comments