Upload Source Code Dengan Bantuan Resync + Shell

Share Post:

Share on facebook
Share on linkedin
Share on twitter
Share on pinterest
Share on email
Upload Source Code Dengan Bantuan Resync + Shell

Pernahkah kita ingin meng-upload source code ke web hosting selalu menggunakan program sejenis FTP Client ataupun langsung menggunakan cPanel? Pasti pernah donk. Setiap ada perubahan source code, selalu melakukan upload ulang.

Kali ini saya akan sharing pengalaman upload project Laravel + VueJS ke shared hosting. Problem yang sering ditemui jika menggunakan shared hosting yang murah, tidak terinstallnya npm. Padahal npm diperlukan untuk meng-compile source code VueJS, sehingga dapat berjalan dengan baik.

Hal yang biasa saya lakukan adalah membuka program FTP dan meng-uploadnya. Jika file terlampau besar, maka biasanya mengupload dalam bentuk zip dan meng-extract nya dengan cPanel.

Saya adalah contoh programmer pemalas(jangan dicontoh ya) yang selalu mencari cara untuk mendukung kemalasan saya. Melakukan hal yang berulang-ulang sangatlah membosankan. Oleh karena itu, saya bereksperimen dengan shell script untuk melakukan upload secara otomatis.

Adapun beberapa syarat yang harus dipenuhi untuk dapat menjalankan shell script ini yaitu:

  1. OS Linux: Maaf untuk pengguna windows, sudah lama tidak menggunakan windows.
  2. Terminal support resync command
  3. Hosting support ssh akses
  4. SSH sudah disetup passwordless yaitu login tanpa memasukkan password.

Berikut shell scriptnya:

#!/bin/sh
# Some shared hosting server doesn't have npm to compile JS. This script would upload local folder to remote folder using rsync. So any file in local would uploaded
# run "chmod a+rx upload-via-ssh.sh" first. So you could run your sh script

# SSH Information for make SSH connection
# your domain or IP to your shared hosting
host="domain.com"
# SSH port you using
port=22
# SSH username
username="your_username"

# Local path you want to sync. Don't forget to put "/" in the end of folder. Because it would make sure that your don't end up upload the folder it self.
# For example you want to sync build/ folder in local with build/ folder in remote. If you don't use "/", it would ended with "build/build" 
localPath="public/build/"
# Remote root path. Don't forget to put "/"
remoteRootProject="/full/path/folder/to/your/project/"

# ==============================================================
# FOR MOST SITUATION YOU DON'T NEED TO EDIT CODE AFTER THIS LINE
# ==============================================================

# Command you want to execute
# Sync command to upload all /build folder
command="rsync -avz -e 'ssh -p $port' --progress $localPath $username@$host:${remoteRootProject}public/build"
# scp command to upload mix-manifest.json
command2="scp -P $port public/mix-manifest.json $username@$host:${remoteRootProject}public"

# Executing command
eval "$command"
eval "$command2"

Shell diatas akan melakukan resync terhadap folder yang sudah ditentukan, jika ada perubahan, maka akan meng-upload hanya file yang berubah saja. Sedangkan command scp akan mengupload satu file saja, dimana disana adalah mix-manifest.json.

Bagimana jika tidak punya akses SSH? Sebenarnya teorinya sama saja. Kita tetap bisa menggunakan perintah seperti FPT ataupun SFTP, hanya saja saya belum membutuhkannya. Dengan shell script diatas sudah dapat menyelesaikan masalah saya.

Leave a Reply

Your email address will not be published.

CAPTCHA Image

*