Bismillaahirrohmaanirrohiim…
Berikut ini adalah cara untuk memudahkan programmer dalam singkronisasi kode program dari laptop ke server VPS secara otomatis.
Langkah-langkah sederhananya:
alur di laptop -> github -> vps
1. laptop:
git add .
git commit -m “Update fitur kasir”
git push origin main
2. github:
menerima upload perubahan
3. github mengirim webhook ke VPS
memberitahu jika ada push/perubahan/lainnya
4. vps:
git pull origin main
kongkritnya, buat dulu kunci untuk pairing VPS dan github, agar tidak login setiap kali berhubungan.
VPS:
perintah: ssh-keygen -t ed25519
result:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_ed25519
Your public key has been saved in /root/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:VKxxxxxxxxxxxxxxxx root@xxxxxxxxxx
The key’s randomart image is:
+–[ED25519 256]–+
| xxxx.. . |
|oxxx. o |
|E xxx=. |
| ooxxxoo |
|…xxx.oS |
|.+xxxx. . |
|+.xxx |
| *xxxoo |
|o .xxx |
+—-[SHA256]
—–+
perintah: cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx root@xxxxxxxxxx
Github:
tambahkan ke setting key di github
lalu test
ssh -T git@github.com
ssh -T git@github.com
The authenticity of host ‘github.com (1.1.1.1)’ can’t be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added ‘github.com’ (ED25519) to the list of known hosts.
Hi User! You’ve successfully authenticated, but GitHub does not provide shell access.
VPS:
pastikan sudah cd ke /home/htdocs/domainku.com dan isi foldernya kosong
git clone git@github.com:joygreen/branchgit.git .
penting: titik diakhir, artinya repository langsung disimpan disitu, git tidak membuat folder baru.
jika gagal karena file masih ada isinya:
cd ke /home/domainku/htdocs
git clone git@github.com:usergit/branchgit.git
coba dulu untuk memastikan proses nanti berjalan lancar
cd /home/domainku/htdocs/domainku.com
git pull origin main
VPS:
Buat link untuk terima webhook dari github
contoh jika pakai PHP
<?php
$secret = ‘rahasiasecret’;
if ($payload === ”) {
http_response_code(400);
exit(‘Empty payload’);
}
$event = $_SERVER[‘HTTP_X_GITHUB_EVENT’] ?? ”;
if ($event !== ‘push’) {
http_response_code(400);
exit(‘Unsupported event’);
}
$signature = $_SERVER[‘HTTP_X_HUB_SIGNATURE_256’] ?? ”;
$payload = file_get_contents(‘php://input’);
$hash = ‘sha256=’ . hash_hmac(‘sha256’, $payload, $secret);
if (!hash_equals($hash, $signature)) {
http_response_code(403);
exit(‘Invalid signature’);
}
file_put_contents(
dirname(__FILE__).’/needpull/needpull.flag’,
date(‘Y-m-d H:i:s’) . ” Deploy triggered”
);
http_response_code(200);
exit(‘deploy started’);
Github:
buat webhook di setting repository
masukkan string rahasia, link, method json
VPS:
buat file deploybranchgit.sh
#!/bin/bash
set -e
FLAG=/home/domainku/htdocs/domainku.com/needpull/needpull.flag
LOCKFILE=/tmp/deploybranchgit.lock
# Tidak ada request deploy
if [ ! -f “$FLAG” ]; then
exit 0
fi
# Deploy sedang berjalan
if [ -f “$LOCKFILE” ]; then
exit 0
fi
touch “$LOCKFILE”
trap ‘rm -f “$LOCKFILE”‘ EXIT
echo “======= Deploy started: $(date) =======”
cd /home/domainku/htdocs/domainku.com
git pull origin branchgit
#jika ada composer/laravel
#composer install –no-dev –optimize-autoloader
#php artisan migrate –force
# Hapus flag hanya jika deploy sukses
rm -f “$FLAG”
echo “======= Deploy finished: $(date) =======”
echo “”
lalu chmod +x /usr/local/bin/deploybranchgit.sh
agar bisa langsung dieksekusi
jika tanpa chmod : ekseskusinya adalah bash /usr/local/bin/deploybranchgit.sh
test dulu di cmd
/usr/local/bin/deploybranchgit.sh
biasanya ada line dari windows yang salah
test command: cat -A /usr/local/bin/deploy.sh
#!/bin/bash^M => salah, line windows bug
perbaiki dengan: sed -i ‘s/\r$//’ /usr/local/bin/deploy.sh
#!/bin/bash$ => sudah benar
jika newline tidak valid (karena windows format)
sed -i ‘s/\r$//’ /etc/cron.d/deploybranchgit
cek file di:
cat -A /etc/cron.d/deploybranchgit
jika newline sudah $ artinya oke.
VPS:
buat cron untuk menjalankan deploy.sh setiap 5 menit/sesuai keinginan
cron tiap 5 menit:
*/5 * * * * root /usr/local/bin/deploybranchgit.sh >> /home/domainku/logs/deploybranchgit.log 2>&1
//perbedaan > dan >>
> overwrite
>> append
simpan di /etc/cron.d/deploybranchgit (karus ada newline diakhir)
chmod 644 /etc/cron.d/deploybranchgit
jika newline tidak valid (karena windows format)
sed -i ‘s/\r$//’ /etc/cron.d/deploybranchgit
cek file di:
cat -A /etc/cron.d/deploybranchgit
jika newline sudah $ artinya oke.
sekarang cek di crontab
status cron –no-pager
harusnya sudah ada
LAINNYA:
jika ada error ownership
git config –global –add safe.directory /home/domainku/htdocs/domainku.com
cek:
git config –system –get-all safe.directory
//cek isi log di cmd
//tail -f /home/domainku/logs/deploybranchgit.log
Demikian, semoga bermanfaat