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 .sshfolder. 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.

gunakan perintah warisan

Jadi, inilah perintah yang perlu Anda gunakan. Ingatlah untuk mengganti your_email@example.comdengan 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-actionsagar kami tahu kunci ini digunakan untuk Github Actions. Perlu eksplisit saat Anda melihat kunci SSH Anda 6 bulan ke depan.

beri nama file kunci ssh

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.

biarkan frasa sandi kosong

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

gambar acak kunci ssh

Jika Anda menggunakan lsperintah sekarang, Anda akan melihat kunci Anda di .sshfolder.

ls

Kunci publik berisi .pubekstensi sedangkan kunci privat tidak.

kunci publik memiliki ekstensi .pub

Langkah 2: Menambahkan Kunci Publik ke authorized_keys

Kita perlu menambahkan kunci publik ( github-actions.pubauthorized_keysagar mesin yang menggunakan kunci privat ( github-actions) dapat mengakses server.

Cara termudah adalah dengan menggunakan catperintah untuk menambahkan github-actions.pubke authorized_keysIni terlihat seperti ini:

cat github-actions.pub >> ~/.ssh/authorized_keys

Inilah yang dilakukan perintah:

  • Raih isinya github-actions.pubdengan cat.
  • Tambahkan ke ~/.ssh/authorized_keysdengan >>.

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".

lokasi navigasi pengaturan github
lokasi navigasi rahasia github
lokasi tombol 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.

menambahkan rahasia repositori baru

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-actionskunci 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 :)).

kunci pribadi tindakan github

Kita perlu menyalin semuanya dan menempelkannya di dalam nilai Rahasia

rekatkan kunci pribadi 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_KEYdi bawah rahasia repositori.

menyimpan rahasia ssh-private-key

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 — keydan known_hostsnilai.

keyadalah 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_hostsadalah nilai hash yang aneh. Jika Anda membuka known_hostsfile di .sshserver, Anda akan melihat sesuatu seperti ini:

membuka file host yang dikenal

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_hostsKunci 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_hostsnilai yang benar dengan ssh-keyscanperintah. Ini terlihat seperti ini:

ssh-keyscan -H IP_ADDRESS_OF_HOST

Jika Anda mengganti IP_ADDRESS_OF_HOSTdengan alamat ip sebenarnya dari server Anda, Anda akan mendapatkan hasil seperti ini. (Saya menghilangkan alamat ip saya tetapi mencoba menunjukkan yang lainnya).

hasil alamat ip yang dimasukkan

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

tambahkan alamat IP ke rahasia github

Kemudian kami dapat menghasilkan informasi yang benar melalui ssh-keyscandan menambahkannya ke known_hostsfile.

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
  • flagsadalah flag yang ingin Anda rsync. Kami biasanya menggunakan avzsingkatan dari archiveverbose, dan compressJika Anda melakukan rsync untuk pertama kalinya, saya sarankan untuk menggunakan nflag dry-runjuga.
  • sourceadalah file sumber yang ingin Anda salin
  • user@hostadalah nama pengguna dan alamat ip server Anda. Nilai-nilai ini harus disimpan sebagai rahasia.
  • destinationadalah 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 verboseflag, Anda seharusnya dapat melihat daftar sumber daya yang disalin melalui rsync.

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:

  1. Hasilkan SSH Keyphrase menggunakan format RSA standar
  2. Tambahkan kunci publik keauthorized_keys
  3. Tambahkan kunci pribadi sebagai rahasia Github
  4. Gunakan tindakan Instal Kunci SSH Shimataro untuk menghasilkan Kunci SSH di pelari.
  5. Tambahkan known_hostskonfigurasi yang benar denganssh-keyscan
  6. Terapkan dengan Rsync melalui SSH

Contoh File Workflow main.yml
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 }}