Bagian tersulit dari proses ini adalah menerapkan ke server dengan SSH dan rsync. Saya mencoba berbagai tindakan Github seperti SSH Deploy dan SSH Action , tetapi saya tidak bisa mendapatkan izin untuk bekerja untuk WAKTU YANG LAMA.
Saya menemukan sebagian besar artikel tentang tindakan Github dan SSH tidak banyak membantu saya. Saya terjebak dengan debug selama beberapa hari sebelum akhirnya menemukan cara untuk membuat prosesnya berjalan.
Hari ini, saya ingin membagikan langkah-langkah yang tepat untuk diterapkan melalui rsync dan SSH. Proses ini berfungsi untuk server mana pun, meskipun Anda tidak menggunakan Digital Ocean.
Langkah 1: Buat Kunci SSH
Anda dapat membuat kunci SSH baik di komputer lokal atau di server Anda. Tidak masalah karena kami dapat menghapus kunci setelahnya, tetapi saya sarankan melakukan ini di server sehingga Anda dapat menggunakan kembali kunci SSH Anda untuk Tindakan Github lainnya.
Dalam hal ini kami akan SSH ke server.
ssh username@host.com
Setelah Anda berada di server, arahkan ke .ssh
folder. Kami akan membuat kunci SSH di sini.
cd ~/.ssh
Saat kami membuat Kunci SSH, kami tidak dapat menggunakan instruksi default pada pembuatan halaman kunci SSH Github . Ini karena Tindakan Github tidak mendukung algoritma Ed22159 terbaru. Kita perlu menggunakan perintah warisan sebagai gantinya.

Jadi, inilah perintah yang perlu Anda gunakan. Ingatlah untuk mengganti your_email@example.com
dengan alamat email Anda.
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Catatan: Beberapa penulis Tindakan Github mengatakan kami memerlukan format PEM agar kunci SSH berfungsi. Ini salah. Saya telah menguji dengan format RSA standar (yang saya rekomendasikan di atas) dan berhasil.
Selanjutnya kita perlu memberi nama file Kunci SSH. Di sini, saya tidak menyarankan menggunakan nama file default (yaitu id_rsa
). Saya sarankan mengganti nama file github-actions
agar kami tahu kunci ini digunakan untuk Github Actions. Perlu eksplisit saat Anda melihat kunci SSH Anda 6 bulan ke depan.

Anda juga akan diminta untuk memberikan frasa sandi. Biarkan ini kosong karena kita tidak bisa memasukkan kata sandi saat Github Actions menjalankan perintah SSH untuk kita.

Setelah selesai membuat kunci SSH, Anda akan mendapatkan gambar lucu seperti ini:

Jika Anda menggunakan ls
perintah sekarang, Anda akan melihat kunci Anda di .ssh
folder.
ls
Kunci publik berisi .pub
ekstensi sedangkan kunci privat tidak.

Langkah 2: Menambahkan Kunci Publik ke authorized_keys
Kita perlu menambahkan kunci publik ( github-actions.pub
) authorized_keys
agar mesin yang menggunakan kunci privat ( github-actions
) dapat mengakses server.
Cara termudah adalah dengan menggunakan cat
perintah untuk menambahkan github-actions.pub
ke authorized_keys
. Ini terlihat seperti ini:
cat github-actions.pub >> ~/.ssh/authorized_keys
Inilah yang dilakukan perintah:
- Raih isinya
github-actions.pub
dengancat
. - Tambahkan ke
~/.ssh/authorized_keys
dengan>>
.
Catatan: Pastikan Anda menggunakan tanda kurung siku-siku ganda ( >>
) dan bukan tanda kurung siku-siku ( >
). Double artinya menambahkan, sedangkan single artinya menimpa. Hati-hati!
Langkah 3: Menambahkan kunci privat ke rahasia repositori Anda
Buka repositori Anda di Github dan klik "Pengaturan", lalu "Rahasia". Anda akan melihat tombol yang bertuliskan "Rahasia repositori baru".



Klik "Rahasia repositori baru" dan Anda akan diminta untuk memasukkan rahasia. Rahasia ini berisi dua hal — nama rahasia dan isinya. Nama rahasia digunakan untuk mendapatkan konten nanti dalam alur kerja Github Actions.

Saat Anda menulis nama rahasia Anda, harap gunakan huruf besar dengan garis bawah sebagai spasi (seperti yang ditunjukkan pada placeholder). Ini adalah format yang biasanya kami gunakan untuk menentukan rahasia.
Dalam hal ini, saya memilih untuk menyebutkan rahasianya SSH_PRIVATE_KEY
.
Untuk nilainya, kami perlu kembali ke server Anda dan membuka github-actions
kunci pribadi. Kita bisa melakukan ini dengan nano.
.
nano github-actions
Anda akan melihat file yang mirip dengan ini. (Jangan khawatir tentang saya mengekspos kunci ini, saya sudah membuangnya. Saya hanya ingin menunjukkan kepada Anda apa yang diharapkan :)).

Kita perlu menyalin semuanya dan menempelkannya di dalam nilai Rahasia

Kita dapat menggunakan kunci seperti ini:
Selanjutnya, klik "Tambah rahasia" dan Anda akan dibawa kembali ke halaman rahasia. Di sini, Anda akan melihat SSH_PRIVATE_KEY
di bawah rahasia repositori.

Langkah 4: Menambahkan kunci Pribadi ke Alur Kerja Tindakan Github
Saya berasumsi Anda sudah tahu cara membuat file Github Actions dasar , jadi saya hanya akan berbicara tentang langkah-langkah untuk menambahkan Kunci SSH di sini.
Menambahkan kunci pribadi adalah bisnis yang rumit, saya memilih untuk mencari Tindakan Github yang tersedia di sini. Satu-satunya tindakan yang berhasil bagi saya adalah Instal Kunci SSH Shimataro .
steps:
- name: Install SSH Key
uses: shimataro/ssh-key-action@v2
Tindakan Install SSH Key memerlukan dua masukan — key
dan known_hosts
nilai.
key
adalah kunci pribadi yang kami tambahkan ke Rahasia Github. Kita dapat menggunakan rahasia seperti ini:
steps:
- name: Install SSH Key
uses: shimataro/ssh-key-action@v2
with:
key: {%- raw -%} ${{ secrets.SSH_PRIVATE_KEY }}
Nilainya known_hosts
adalah nilai hash yang aneh. Jika Anda membuka known_hosts
file di .ssh
server, Anda akan melihat sesuatu seperti ini:

Kami seharusnya menambahkan SATU dari nilai-nilai ini ke dalam rahasia Github Actions. Bagaimana kita mendapatkan nilai ini sejak awal?! Sayangnya, tidak ada Tindakan Github yang menunjukkan kepada saya bagaimana melakukan ini, jadi saya harus mencari-cari di Google sebentar -_-.
Untungnya, kita bisa menggunakan perintah untuk menghasilkan nilai hash yang aneh ini. Saya akan berbicara tentang perintah ini di langkah berikutnya. Untuk saat ini, kita hanya perlu menambahkan nilai acak agar known_hosts
Kunci Instal SSH Shimataro tidak akan memberi kita kesalahan.
steps:
- name: Install SSH Key
uses: shimataro/ssh-key-action@v2
with:
key: {%- raw -%} ${{ secrets.SSH_PRIVATE_KEY }}
known_hosts: 'just-a-placeholder-so-we-dont-get-errors'
Langkah 5: Menambahkan nilai known_hosts yang benar
Kami dapat menghasilkan known_hosts
nilai yang benar dengan ssh-keyscan
perintah. Ini terlihat seperti ini:
ssh-keyscan -H IP_ADDRESS_OF_HOST
Jika Anda mengganti IP_ADDRESS_OF_HOST
dengan alamat ip sebenarnya dari server Anda, Anda akan mendapatkan hasil seperti ini. (Saya menghilangkan alamat ip saya tetapi mencoba menunjukkan yang lainnya).

Setelah kami mengetahui hal ini, kami dapat secara manual menambahkan alamat IP (yang saya beri nama SSH_HOST
) ke dalam Rahasia Github.

Kemudian kami dapat menghasilkan informasi yang benar melalui ssh-keyscan
dan menambahkannya ke known_hosts
file.
steps:
# ...
- name: Adding Known Hosts
run: ssh-keyscan -H ${{ secrets.SSH_HOST }}{% endraw%} >> ~/.ssh/known_hosts
Langkah 6: Rsync ke Server
Kami akhirnya dapat melakukan rsync melalui SSH ke server. Untuk melakukan ini, Anda perlu mengetahui pengguna dan host SSH Anda. Berikut tampilan perintahnya.
rsync -flags source user@host:destination
flags
adalah flag yang ingin Anda rsync. Kami biasanya menggunakanavz
singkatan dariarchive
,verbose
, dancompress
. Jika Anda melakukan rsync untuk pertama kalinya, saya sarankan untuk menggunakann
flagdry-run
juga.source
adalah file sumber yang ingin Anda salinuser@host
adalah nama pengguna dan alamat ip server Anda. Nilai-nilai ini harus disimpan sebagai rahasia.destination
adalah lokasi file yang ingin Anda salin.
Inilah contoh nyata dari apa yang saya gunakan untuk menyebarkan zellwk.com ke server saya.
- name: Deploy with rsync
run: rsync -avz ./dist/ ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/home/zellwk/zellwk.com/dist/
Karena kami memiliki verbose
flag, Anda seharusnya dapat melihat daftar sumber daya yang disalin melalui rsync.

Catatan: Ada beberapa langkah tambahan jika Anda perlu menggunakan rsync dengan port khusus. Silakan baca artikel ini untuk informasi lebih lanjut.
Itu dia!
Membungkus
Berikut adalah langkah-langkah untuk meringkas semuanya:
- Hasilkan SSH Keyphrase menggunakan format RSA standar
- Tambahkan kunci publik ke
authorized_keys
- Tambahkan kunci pribadi sebagai rahasia Github
- Gunakan tindakan Instal Kunci SSH Shimataro untuk menghasilkan Kunci SSH di pelari.
- Tambahkan
known_hosts
konfigurasi yang benar denganssh-keyscan
- Terapkan dengan Rsync melalui SSH
on: | |
push: | |
branches: [ main ] | |
name: Deploy website on push | |
jobs: | |
web-deploy: | |
name: Auto Deploy | |
runs-on: ubuntu-latest | |
steps: | |
- name: Get latest code | |
uses: actions/checkout@v2.3.2 | |
- name: Sync files | |
uses: burnett01/rsync-deployments@4.1 | |
with: | |
switches: -avzr --delete --exclude=".git" --exclude=".github" | |
path: / | |
remote_path: ${{ secrets.DEPLOY_PATH }} | |
remote_host: ${{ secrets.DEPLOY_HOST }} | |
remote_user: ${{ secrets.DEPLOY_USER }} | |
remote_key: ${{ secrets.DEPLOY_KEY }} |
0 Comments