Cara ngoding di laptop lokal, otomatis terupdate ke server.

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

Bagikan

About the Author: rasupe