Deploy dari GitHub ke VPS dengan Deploy Key Read-Only
Alur update NgodingSantai dari working tree Windows ke branch master lalu pull fast-forward pada Ubuntu tanpa menyimpan token pribadi.
Perubahan NgodingSantai dikerjakan di Windows, disimpan pada branch master di GitHub, lalu diambil oleh Ubuntu VPS. Deploy key read-only dipilih agar server dapat membaca satu repository tanpa menyimpan personal access token dan tanpa hak menulis balik. Alur ini sederhana, tetapi setiap langkah mempunyai pemeriksaan agar perubahan di server tidak tertimpa.
Periksa perubahan sebelum commit
git status menjawab file mana yang berubah, sedangkan git diff menunjukkan isi perubahannya. Keduanya dijalankan sebelum git add agar private key, file sementara, atau perubahan tidak terkait tidak ikut masuk commit.
cd D:websitedenganterapkanadsense
git status --short
git diff --stat
git diff
node --check assets/js/app.js
node --check assets/js/articles.js
Untuk pembaruan besar, audit browser dijalankan sebelum push. Commit tidak diberi pesan seperti “update” jika perubahan mencakup isi yang dapat dijelaskan. Pesan yang spesifik membuat rollback dan penelusuran produksi lebih mudah.
git add articles assets index.html blog.html redaksi.html sitemap.xml
git diff --cached --stat
git commit -m "Add project-based case studies and editorial profile"
git push origin master
Buat deploy key khusus repository
Kunci dibuat sebagai user ubuntu karena user itulah yang memiliki working tree produksi. Private key tetap di VPS dengan permission 600. Hanya public key yang ditempelkan ke GitHub melalui Settings, Deploy keys. Write access tidak diaktifkan.
sudo -u ubuntu -H install -d -m 700 /home/ubuntu/.ssh
sudo -u ubuntu -H ssh-keygen -t ed25519 -C "ozancicak-vps-deploy" -f /home/ubuntu/.ssh/ozancicak_deploy -N ""
sudo -u ubuntu -H cat /home/ubuntu/.ssh/ozancicak_deploy.pub
Public key bukan rahasia, tetapi private key tidak boleh disalin ke issue, repository, chat publik, atau panel yang tidak diperlukan. Jika bocor, deploy key dihapus dari GitHub dan pasangan baru dibuat.
Simpan perintah SSH pada konfigurasi repository
Perintah clone pertama dapat memakai environment variable. Setelah itu core.sshCommand disimpan pada konfigurasi lokal repository di VPS sehingga git pull berikutnya memilih identitas yang sama.
sudo -u ubuntu -H env GIT_SSH_COMMAND='ssh -i /home/ubuntu/.ssh/ozancicak_deploy -o IdentitiesOnly=yes' git clone --branch master --single-branch git@github.com:adzizPe/ngodingsantai.git /var/www/ozancicak.biz.id
sudo -u ubuntu -H git -C /var/www/ozancicak.biz.id config core.sshCommand 'ssh -i /home/ubuntu/.ssh/ozancicak_deploy -o IdentitiesOnly=yes'
Jangan pull jika server mempunyai perubahan lokal
Produksi idealnya bersih. Jika git status --short menampilkan perubahan, berhenti dan identifikasi siapa yang mengubahnya. Menjalankan reset keras akan menghapus bukti dan mungkin kehilangan perbaikan darurat. Salin diff ke lokasi aman atau commit pada branch pemulihan setelah memahami konteks.
cd /var/www/ozancicak.biz.id
git status --short
git fetch origin master
git log --oneline --decorate HEAD..origin/master
git pull --ff-only origin master
--ff-only menolak membuat merge commit otomatis di server. Jika branch produksi bercabang, masalah diselesaikan di lingkungan pengembangan, diuji, lalu push commit baru.
Validasi setelah pull
test -f index.html && echo "index tersedia"
sudo nginx -t
curl -fsS https://ozancicak.biz.id/ > /dev/null
curl -fsS https://ozancicak.biz.id/sitemap.xml | head
Reload Nginx hanya diperlukan bila file konfigurasi server berubah. Pembaruan HTML, CSS, JavaScript, atau gambar statis langsung dibaca dari web root. Reload tanpa alasan menambah operasi dan tidak membersihkan cache browser.
Permission tanpa chmod 777
Direktori dimiliki ubuntu:www-data, folder dapat dibaca dan dimasuki, serta file dapat dibaca Nginx. Permission 777 tidak digunakan karena memberi semua user hak menulis.
sudo chown -R ubuntu:www-data /var/www/ozancicak.biz.id
sudo find /var/www/ozancicak.biz.id -type d -exec chmod 755 {} ;
sudo find /var/www/ozancicak.biz.id -type f -exec chmod 644 {} ;
Rollback berbasis commit
Jika satu perubahan produksi bermasalah, pilihan aman adalah membuat commit baru yang membalik commit penyebab melalui git revert, lalu push dan pull lagi. Riwayat tetap terlihat. Menunjuk sementara ke commit lama dapat dipakai untuk pemulihan cepat, tetapi branch produksi perlu dikembalikan ke keadaan eksplisit sesudahnya.
Referensi primer
Kenali host key GitHub
Deploy pertama membutuhkan verifikasi host SSH. Fingerprint tidak diterima buta hanya untuk melewati prompt. Dokumentasi GitHub digunakan sebagai pembanding, lalu host key tersimpan pada known_hosts milik user ubuntu. Opsi StrictHostKeyChecking=no tidak dijadikan konfigurasi permanen karena menghilangkan pemeriksaan identitas server.
Deployment tidak otomatis berarti zero downtime
git pull memperbarui banyak file satu per satu. Untuk situs kecil, jendelanya sangat singkat, tetapi secara teori permintaan dapat membaca kombinasi aset lama dan baru. Bila perubahan berkembang menjadi build besar, release directory dan symlink atomik lebih tepat: clone/build ke direktori baru, audit, lalu ganti symlink current.
Catat hasil setiap deployment
Hash commit, waktu, operator, hasil audit, dan respons URL prioritas dicatat. Jika halaman live masih lama, periksa commit VPS, cache browser, serta header cache; jangan langsung menjalankan pull berulang. Source yang sama tidak berubah karena perintah diulang.