Hosting: VPS
Virtual Private Server, atau biasa dikenal dengan VPS, adalah sebuah perangkat virtual yang berjalan di cloud, di mana kamu sebagai developer memiliki kendali penuh atas perangkat tersebut.
Rental Server
Untuk mengikuti panduan ini, kamu perlu menyewa sebuah server. Langkah-langkahnya akan dijelaskan di bagian ini. Jika kamu sudah memiliki sebuah VPS, silahkan lanjut ke bagian selanjutnya.
Di panduan ini, kita akan memanfaatkan layanan dari Hostinger.
Kamu bebas memilih provider yang kamu mau. Karena semua provider menyediakan layanan yang serupa, seharusnya kamu tidak akan menemui masalah selama mengikuti panduan ini. Di bagian ini pula kamu bisa mempelajari cara kerja rental server. Oleh karena itu, kamu bisa menggunakan panduan ini untuk menyewa server, meski baru pertama kalinya!
Setara Server
Jika kamu tidak bisa atau tidak ingin menyewa sebuah server tetapi masih ingin mencoba menjalankan bot di sebuah VPS, kamu masih bisa mengikuti tutorial ini dengan menggunakan sebuah virtual machine (VM). Caranya, gunakan sebuah aplikasi semacam Virtual
Kunjungi halaman Hosting VPS. Kita akan memilih paket “KVM 1”. Sumber daya yang disediakan oleh “KVM 1” cukup sesuai untuk bot dengan jumlah pengguna yang masif, apalagi hanya untuk mengetes bot.
Klik tombol “Add to cart”. Kamu nanti akan diarahkan ke halaman checkout dan akun Hostinger-mu akan dibuat secara otomatis.
Ubah Jangka Waktu Sewa!
Jangka waktu penyewaan umumnya berkisar antara 1-2 tahun (taktik pemasaran) yang biayanya sangat mahal. Jika dirasa terlalu lama, kamu bisa menyewanya untuk sebulan saja dengan harga yang jauh lebih murah.
Terlebih lagi, Hostinger menyediakan jaminan uang kembali dalam 30 hari.
Setelah melakukan pembayaran, kamu bisa mulai mengatur server-nya:
- Lokasi. Server utama API Bot berlokasi di kota Amsterdam, Belanda. Oleh karena itu, kami menyarankan untuk memilih lokasi yang paling dekat dengan kota tersebut. Tetapi, kalau kamu menggunakan server API Bot sendiri, pilih lokasi terdekat dengan server tersebut.
- Jenis server. Pilih “Clean OS”.
- Sistem operasi. Kita akan menggunakan Ubuntu 22.04. Jika memilih sistem yang berbeda, kamu perlu berhati-hati, karena ada kemungkinan langkah-langkahnya akan berbeda pula.
- Nama server. Pilih sesukamu.
- Kata sandi root. Buat sebuah kata sandi yang kuat lalu simpan di tempat yang aman!
- Kunci SSH. Lewati langkah ini. Kita akan menyetel kunci SSH nanti.
Setelah server dibuat, kamu bisa menyambungkannya menggunakan SSH:
SSH (Secure Shell) adalah sebuah protokol jaringan yang bisa digunakan untuk mengontrol sebuah komputer dari jarak jauh.
ssh root@<alamat-ip>
Ganti <alamat
dengan alamat IP server kamu, yang bisa ditemukan di halaman pengaturan server (server management).
Mengatur SSH
Memilah alamat IP yang diperlukan untuk menyambung ke suatu server akan sangat merepotkan. Untuk menghilangkan repetisi tersebut, kamu bisa mengatur SSH dengan membuat sebuah file ~
(https://
Pisahkan User untuk Setiap Aplikasi
Di panduan ini, semua aksi yang diterapkan ke server akan dilakukan sebagai user root. Tindakan tersebut sengaja dilakukan untuk mempersingkat panduan ini. Tetapi, pada kenyataanya, user root seharusnya hanya bertanggung jawab atas service umum (web server, database, dsb.), sedangkan untuk aplikasi dilakukan oleh user non-root. Dengan model pendekatan tersebut, keamanan data bisa terjamin dan peretasan ke seluruh sistem juga bisa dicegah. Di sisi lain, pendekatan semacam itu menimbulkan beberapa ketidaknyamanan. Kami tidak akan membahasnya secara terperinci agar artikel ini tidak semakin rumit.
Memulai Bot
Kita sekarang memiliki sebuah server yang dapat digunakan untuk menjalankan bot sepanjang waktu.
Untuk menyingkat waktu, kita akan melewatkan langkah pengiriman kode ke server secara otomatis setiap kali kode kamu selesai di-push, yang mana telah dijelaskan di bawah ini.
Untuk sementara, kamu bisa menyalin file lokal ke server secara manual menggunakan perintah berikut. Perlu dicatat bahwa karena flag -r
menyalin secara rekursif, maka kamu hanya perlu menentukan direktori root proyek kamu:
scp -r <path-ke-root-proyek-lokal> root@<alamat-ip>:<path-ke-direktori-tujuan>
Ganti <path
dengan path direktori proyek yang ada di disk lokal kamu, <alamat
dengan alamat IP server kamu, dan <path
dengan path direktori server, tempat di mana source code bot kamu seharusnya disimpan.
Seperti yang telah dijelaskan di atas, kamu sekarang seharusnya sudah bisa membuka terminal VPS dari jarak jauh dengan memulai sebuah sesi SSH.
ssh root@<alamat-ip>
Coba perhatikan bagaimana tampilan command prompt-mu telah berubah. Itu artinya kamu telah tersambung ke perangkat tersebut secara jarak jauh. Mulai sekarang, setiap perintah yang diketik akan dijalankan di VPS kamu. Coba jalankan ls
untuk memastikan apakah semua file source code kamu berhasil disalin.
Mulai dari sini, kami akan berasumsi bahwa kamu berhasil tersambung ke VPS. Artinya, semua perintah berikut harus dijalankan di dalam sebuah sesi SSH.
Jangan lupa untuk menginstal runtime!
Agar bot bisa berjalan, kamu perlu menginstal baik Node.js ataupun Deno di server, tergantung runtime mana yang akan digunakan oleh bot. Karena di luar topik pembahasan, kamu perlu melakukannya secara mandiri. Kamu mungkin sudah pernah melakukannya saat mulai membuat bot, seharusnya kamu sudah paham dengan langkah-langkahnya. 😉
Salah satu dari dua cara di bawah ini: systemd atau PM2, dapat kamu gunakan agar bot bisa berjalan secara optimal.
systemd
systemd merupakan pengelola service yang terinstal secara bawaan di mayoritas distribusi Linux, khususnya yang berbasis Debian seperti Ubuntu.
Menyiapkan Perintah Mulai
Peroleh path absolut runtime:
shwhich deno
1shwhich node
1Peroleh path absolut direktori bot.
Perintah permulaan kamu semestinya serupa dengan ini:
sh<path_runtime> <opsi> <path_relatif_file_utama> # Path direktori bot: /home/user/bot1/ # Contoh untuk Deno: # /home/user/.deno/bin/deno --allow-all run mod.ts # Contoh untuk Node.js: # /home/user/.nvm/versions/node/v16.9.1/bin/node index.js
1
2
3
4
5
6
7
8
9
Membuat Service
Pergi ke direktori service:
shcd /etc/systemd/system
1Buka file service baru kamu menggunakan editor:
shnano <nama-aplikasi>.service
1Ganti
<nama
dengan nama apapun.-aplikasi> <nama
nantinya akan menjadi nama service kamu.-aplikasi> Isi dengan konten berikut:
text[Unit] After=network.target [Service] WorkingDirectory=<path-direktori-bot> ExecStart=<perintah-mulai> Restart=on-failure [Install] WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10Ganti
<path
dengan path absolut direktori bot kamu dan-direktori -bot> <perintah
dengan perintah yang kamu terima di atas tadi.-mulai> Berikut uraian singkat konfigurasi service di atas:
After
— mengindikasikan bahwa aplikasi harus dijalankan hanya setelah modul internet telah dimuat.= network .target Working
— menyetel path pemrosesan ke direktori yang saat ini dikerjakan. Dengan begitu, kamu jadi bisa menggunakan file aset relatif dari path tersebut, contohnya fileDirectory = <path -direktori -bot> .env
, yang mana berisi semua environment variable yang dibutuhkan.Exec
— menyetel perintah permulaan (startup command).Start = <perintah -mulai> Restart
— mengindikasikan bahwa aplikasi harus dimulai ulang ketika terjadi kesalahan atau crash.= on -failure Wanted
— menentukan pada tahap sistem (system state) apa service mesti dijalankan.By = multi -user .target multi
— salah satu tahap sistem yang umum digunakan di sebuah server.-user .target
Untuk informasi lebih lanjut mengenai file unit, silahkan baca dokumentasi ini.
Muat ulang systemd setiap kali kamu mengedit service terkait.
shsystemctl daemon-reload
1
Mengelola Service
# Ganti `<nama-service>` dengan nama file service yang telah kamu buat.
# Untuk memulai service
systemctl start <nama-service>
# Untuk melihat log service
journalctl -u <nama-service>
# Untuk memulai ulang service
systemctl restart <nama-service>
# Untuk menghentikan service
systemctl stop <nama-service>
# Untuk mengaktifkan service agar ia dimulai ketika server boot
systemctl enable <nama-service>
# Untuk menonaktifkan service agar ia tidak dimulai ketika server boot
systemctl disable <nama-service>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Setelah memulai service tersebut, bot kamu seharusnya sudah bisa berjalan!
PM2
PM2 adalah pengelola proses daemon untuk Node.js yang akan membantu kamu untuk menjaga aplikasi tetap online sepanjang waktu.
PM2 didesain secara khusus untuk mengelola aplikasi yang ditulis untuk Node.js. Meski begitu, ia juga bisa digunakan untuk mengelola aplikasi yang ditulis untuk bahasa atau runtime lain.
Menginstal
npm install -g pm2
yarn global add pm2
pnpm add -g pm2
Membuat Aplikasi
PM2 menawarkan dua cara untuk membuat sebuah aplikasi:
- Menggunakan command line interface (CLI).
- Menggunakan file konfigurasi.
Cara pertama lebih mudah digunakan untuk yang baru pertama kali mengenal PM2. Namun, selama proses produksi atau deployment, kamu harus menggunakan cara kedua, yang akan kita terapkan di panduan ini.
Buat sebuah file ecosystem
di direktori server tempat di mana hasil build bot kamu disimpan, lalu isi dengan konten berikut:
module.exports = {
apps: [{
name: "<nama-aplikasi>",
script: "<perintah-mulai>",
}],
};
2
3
4
5
6
Ubah <nama
dengan nama apapun dan <perintah
dengan perintah untuk memulai bot-nya.
Mengelola Aplikasi
Di bawah ini perintah yang bisa kamu gunakan untuk mengontrol aplikasi terkait.
# Jika file `ecosystem.config.js` berada di direktori saat ini,
# kamu tidak perlu menulis apapun untuk memulai aplikasinya.
# Jika aplikasi sedang berjalan, perintah ini akan memuat ulang aplikasinya.
pm2 start
# Semua perintah berikut mengharuskan kamu untuk menyertakan nama aplikasi
# atau file `ecosystem.config.js`-nya.
# Untuk menerapkan aksi ke semua aplikasi, sertakan `all`.
# Untuk memulai ulang aplikasi
pm2 restart <nama-aplikasi>
# Untuk memuat ulang aplikasi
pm2 reload <nama-aplikasi>
# Untuk menghentikan aplikasi
pm2 stop <nama-aplikasi>
# Untuk menghapus aplikasi
pm2 delete <nama-aplikasi>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Menyimpan Operasi Aplikasi
Ketika server dimulai ulang, bot kamu akan berhenti bekerja. Agar bot bisa berjalan lagi setelah server dimulai ulang, kamu perlu mengatur PM2.
Di terminal server, jalankan perintah berikut:
pm2 startup
Kamu akan disajikan sebuah perintah yang harus kamu eksekusi untuk membuat PM2 memulai secara otomatis setelah server dimulai ulang.
Jika perintah yang tertera sudah dijalankan, jalankan satu perintah lagi:
pm2 save
Perintah tersebut akan menyimpan daftar aplikasi saat ini agar mereka bisa dijalankan setelah server dimulai ulang.
Jika kamu baru saja membuat sebuah aplikasi baru dan ingin menyimpannya juga, cukup jalankan pm2 save
lagi.
Menjalankan Bot dengan Webhook
Untuk menjalankan bot dengan webhook, kamu memerlukan sebuah web framework dan TIDAK memanggil bot
.
Berikut sampel kode untuk menjalankan bot menggunakan webhook yang bisa kamu tambahkan ke file utama bot:
import { webhookCallback } from "grammy";
import { fastify } from "fastify";
const server = fastify();
server.post(`/${bot.token}`, webhookCallback(bot, "fastify"));
server.listen();
2
3
4
5
6
7
8
import { webhookCallback } from "https://deno.land/x/grammy@v1.27.0/mod.ts";
const handleUpdate = webhookCallback(bot, "std/http");
Deno.serve(async (req) => {
if (req.method === "POST") {
const url = new URL(req.url);
if (url.pathname.slice(1) === bot.token) {
try {
return await handleUpdate(req);
} catch (err) {
console.error(err);
}
}
}
return new Response();
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Rental Domain
Untuk menyambungkan bot yang berjalan dengan webhook ke dunia luar, kamu perlu membeli sebuah domain. Kami sekali lagi akan menggunakan Hostinger sebagai contoh, meski begitu terdapat banyak sekali provider di luar sana yang menawarkan layanan yang serupa.
Pergi ke halaman pencarian nama domain. Di kolom isian teks, masukkan nama domain yang diinginkan dengan format <nama>
. Contohnya, example
.
Jika nama domain-nya tersedia, klik tombol “Add” yang ada di sebelahnya. Kamu kemudian akan otomatis diarahkan ke halaman checkout, yang mana kamu akan dibuatkan akun Hostinger baru jika sebelumnya belum terdaftar. Terakhir, bayar domain-nya.
Mengarahkan Domain ke VPS
Sebelum domain bisa digunakan bersama VPS kamu, kamu perlu mengarahkan domain tersebut ke server kamu terlebih dahulu. Caranya, di Kontrol Panel Hostinger, klik tombol “Manage” yang berada di sebelah domain kamu. Kemudian, pergi ke halaman pengelola record DNS dengan cara mengklik tombol “DNS / Name Servers” di menu yang berada di sebelah kiri.
Cari tahu IP address VPS-mu terlebih dahulu.
Di daftar record DNS, cari record dengan tipe A
yang memiliki nama @
. Ubah record tersebut dengan mengubah alamat IP di kolom “Points to” ke IP address VPS kamu, lalu atur TTL-nya menjadi 3600.
Selanjutnya, cari dan hapus record dengan tipe CNAME
yang memiliki nama www
. Sebagai gantinya, buat sebuah record tipe A
baru dengan nama www
, lalu arahkan ke IP address VPS-mu, kemudian atur TTL-nya menjadi 3600.
Jika kamu mengalami kendala, coba gunakan metode lain yang telah dijabarkan di pengetahuan dasar berikut.
Menyiapkan Web Server
Agar website dapat bekerja, dan bot bisa mulai menerima update dari Telegram, kamu perlu menyiapkan sebuah web server. Di kesempatan kali ini, kita akan menggunakan Caddy.
Caddy sebuah sebuah web server berbasis sumber terbuka (open source) yang memiliki fitur HTTPS secara otomatis.
Web Server
Kita menggunakan Caddy karena ia mampu mengatur sertifikat SSL secara otomatis, salah satu kelebihan yang tidak dimiliki oleh web server lain pada umumnya seperti Nginx atau Apache. Fitur tersebut tentunya akan mempermudah artikel ini. Meski demikian, kamu bebas memilih web server yang kamu mau.
Penginstalan
Lima perintah berikut akan secara otomatis mendownload serta memulai Caddy sebagai service systemd dengan nama caddy
.
apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
apt update
apt install caddy
2
3
4
5
Lihat panduan penginstalan Caddy untuk opsi penginstalan lainnya.
Cek status Caddy:
systemctl status caddy
Sidik Gangguan
Beberapa penyedia hosting menawarkan VPS yang didalamnya sudah terinstal web server, misalnya Apache. Satu perangkat tidak bisa menjalankan lebih dari satu web server di waktu bersamaan. Agar Caddy dapat bekerja dengan baik, kamu perlu menghentikan dan menonaktifkan web server lainnya:
systemctl stop <nama-service>
systemctl disable <nama-service>
2
Ganti nama
dengan nama service web server yang menghalangi Caddy.
Sekarang, jika kamu membuka alamat IP server kamu di browser, kamu akan melihat halaman yang berisi petunjuk untuk menyetel Caddy.
Penyetelan
Agar Caddy bisa memproses request yang datang ke domain, kita perlu mengganti konfigurasi Caddy-nya.
Jalankan perintah berikut untuk membuka file konfigurasi Caddy:
nano /etc/caddy/Caddyfile
Kemudian, kamu akan melihat konfigurasi bawaan berikut:
# The Caddyfile is an easy way to configure your Caddy web server.
#
# Unless the file starts with a global options block, the first
# uncommented line is always the address of your site.
#
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace ":80" below with your
# domain name.
:80 {
# Set this path to your site's directory.
root * /usr/share/caddy
# Enable the static file server.
file_server
# Another common task is to set up a reverse proxy:
# reverse_proxy localhost:8080
# Or serve a PHP site through php-fpm:
# php_fastcgi localhost:9000
}
# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Agar bot bisa bekerja dengan baik, atur konfigurasinya menjadi seperti ini:
<domain> {
reverse_proxy /<token> localhost:<port>
}
2
3
Ganti <domain>
dengan domain kamu, <token>
dengan token bot kamu, dan <port>
dengan port yang akan digunakan oleh bot kamu.
Muat ulang Caddy setiap kali kamu mengubah file pengaturan situs menggunakan perintah berikut:
systemctl reload caddy
Sekarang semua request yang mengarah ke alamat https://
akan diarahkan ke alamat http://
, tempat di mana webhook bot berjalan.
Menyambungkan Webhook ke Telegram
Yang perlu kamu lakukan adalah memberi tahu Telegram ke mana update semestinya dikirim. Caranya, buka browser, lalu kunjungi halaman yang berada di link berikut:
https://api.telegram.org/bot<token>/setWebhook?url=https://<domain>/<token>
Ganti <token>
dengan token bot kamu dan <domain>
dengan domain kamu.
CI/CD
CI
Kali ini, kita akan fokus menulis script untuk GitHub dan GitLab. Jika diperlukan, kamu bisa dengan mudah memodifikasi contoh di bawah sesuai dengan layanan CI/CD yang kamu gunakan, misalnya Jenkins, Buddy, dsb.
Kunci SSH
Untuk mengirim file ke server, kamu perlu menyiapkan autentikasi nir-kata-sandi (passwordless authentication), yang diimplementasikan menggunakan kunci SSH.
Jalankan perintah berikut di komputer pribadimu.
Arahkan ke direktori kunci SSH:
cd ~/.ssh
Buat sepasang kunci baru:
ssh-keygen -t rsa -m PEM
ssh-keygen -t ed25519
Perintah berikut akan menghasilkan satu kunci publik dan satu kunci privat berdasarkan tipe dan format yang telah ditentukan di atas, baik untuk Github maupun Gitlab. Kamu juga bisa mengubah nama kuncinya sesuai dengan keinginan.
Selanjutnya, kirim kunci publik tersebut ke server:
ssh-copy-id -i <nama-kunci>.pub root@<alamat-ip>
Ganti <nama
dengan nama kunci yang telah dihasilkan sebelumnya dan <alamat
dengan alamat IP server kamu.
Perlu dicatat bahwa kunci publik boleh ditaruh di banyak server, sedangkan kunci privat sebaiknya disimpan hanya untuk diri sendiri dan GitHub ataupun Gitlab.
Kamu sekarang bisa tersambung ke server tanpa memasukkan password.
Contoh Alur Kerja
Node.js (GitHub)
Gunakan
name: Main
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-node@v3
with:
node-version: "latest"
- run: npm ci
- name: Build
run: npm run build
- uses: actions/upload-artifact@v3
with:
name: source
path: |
dist/*.js
package.json
package-lock.json
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v3
with:
name: source
path: dist/
- name: Deploy
uses: easingthemes/ssh-deploy@v4
env:
SOURCE: "dist package.json package-lock.json"
ARGS: "--delete -az"
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: "<direktori-tujuan>"
SCRIPT_AFTER: |
cd <direktori-tujuan>
npm i --omit=dev
<perintah-mulai>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Ganti <direktori
dengan nama direktori hasil build bot yang disimpan di server, dan <perintah
dengan perintah untuk memulai bot kamu, misalnya berupa pemanggilan pm2
atau systemctl
.
Script di atas secara berurutan melakukan dua tugas (task): build
dan deploy
. Setelah build
dieksekusi, hasil (artifact) dari task ini, yaitu direktori dist
yang berisi hasil build bot, akan diteruskan ke task deploy
.
File akan dikirim ke server menggunakan rsync
, yang diimplementasikan oleh easingthemes
. Setelah file selesai dikirim, perintah yang telah dijabarkan di environment variable SCRIPT
akan dieksekusi. Dalam kasus kita, setelah file selesai dikirim, ia akan menuju ke direktori bot, tempat di mana kita menginstal semua dependency selain yang berada di dev
, yang selanjutnya disambung dengan memulai ulang bot-nya.
Perlu dicatat bahwa kamu perlu menambahkan tiga secret environment variable:
SSH
— tempat di mana kunci SSH yang telah kamu buat di langkah sebelumnya seharusnya disimpan._PRIVATE _KEY REMOTE
— simpan alamat IP server kamu di sini._HOST REMOTE
— simpan nama user yang bertanggung jawab menjalankan bot di sini._USER
Node.js (GitLab)
Gunakan
image: node:latest
stages:
- build
- deploy
Build:
stage: build
before_script: npm ci
script: npm run build
artifacts:
paths:
- dist/
Deploy:
stage: deploy
before_script:
- "command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )"
- "command -v rsync >/dev/null || ( apt-get update -y && apt-get install rsync -y )"
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan "$REMOTE_HOST" >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
script:
- rsync --delete -az dist package.json package-lock.json $REMOTE_USER@$REMOTE_HOST:<direktori-tujuan>
- ssh $REMOTE_USER@$REMOTE_HOST "cd <direktori-tujuan> && npm i --omit=dev && <perintah-mulai>"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Ganti <direktori
dengan nama direktori hasil build bot yang disimpan di server, dan <perintah
dengan perintah untuk memulai bot kamu, misalnya berupa pemanggilan pm2
atau systemctl
.
Script di atas secara berurutan melakukan dua tugas (task): build
dan deploy
. Setelah build
dieksekusi, hasil (artifact) dari task ini, yaitu direktori dist
yang berisi hasil build bot, akan diteruskan ke task deploy
.
File akan dikirim ke server menggunakan rsync
, yang mana kita perlu menginstalnya terlebih dahulu sebelum script utama dieksekusi. Setelah file selesai dikirim, kita akan menyambung ke server menggunakan SSH untuk menginstal semua dependency selain yang berada di dev
, yang selanjutnya disambung dengan memulai ulang aplikasinya.
Perlu dicatat bahwa kamu perlu menambahkan tiga environment variable:
SSH
— tempat di mana kunci SSH yang telah kamu buat di langkah sebelumnya seharusnya disimpan._PRIVATE _KEY REMOTE
— simpan alamat IP server kamu di sini._HOST REMOTE
— simpan nama user yang bertanggung jawab menjalankan bot di sini._USER
Deno (GitHub)
Gunakan
name: Main
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Deploy
uses: easingthemes/ssh-deploy@v4
env:
SOURCE: "src deno.jsonc deno.lock"
ARGS: "--delete -az"
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: "<direktori-tujuan>"
SCRIPT_AFTER: |
cd <direktori-tujuan>
<perintah-mulai>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Ganti <direktori
dengan nama direktori hasil build bot yang disimpan di server, dan <perintah
dengan perintah untuk memulai bot kamu, misalnya berupa pemanggilan pm2
atau systemctl
.
Script di atas akan mengirim file ke server menggunakan rsync
, yang diimplementasikan oleh easingthemes
. Setelah file selesai dikirim, perintah yang telah dijabarkan di environment variable SCRIPT
akan dieksekusi. Dalam kasus kita, setelah file selesai dikirim, ia akan menuju ke direktori bot, lalu memulai ulang bot-nya.
Perlu dicatat bahwa kamu perlu menambahkan tiga secret environment variable:
SSH
— tempat di mana kunci SSH yang telah kamu buat di langkah sebelumnya seharusnya disimpan._PRIVATE _KEY REMOTE
— simpan alamat IP server kamu di sini._HOST REMOTE
— simpan nama user yang bertanggung jawab menjalankan bot di sini._USER
Deno (GitLab)
Gunakan
image: denoland/deno:latest
stages:
- deploy
Deploy:
stage: deploy
before_script:
- "command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )"
- "command -v rsync >/dev/null || ( apt-get update -y && apt-get install rsync -y )"
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan "$REMOTE_HOST" >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
script:
- rsync --delete -az src deno.jsonc deno.lock $REMOTE_USER@$REMOTE_HOST:<direktori-tujuan>
- ssh $REMOTE_USER@$REMOTE_HOST "cd <direktori-tujuan> && npm i --omit=dev && <perintah-mulai>"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Ganti <direktori
dengan nama direktori hasil build bot yang disimpan di server, dan <perintah
dengan perintah untuk memulai bot kamu, misalnya berupa pemanggilan pm2
atau systemctl
.
File akan dikirim ke server menggunakan rsync
, yang mana kita perlu menginstalnya terlebih dahulu. Setelah file selesai disalin, kita akan menyambung ke server menggunakan SSH untuk memulai ulang bot-nya.
Perlu dicatat bahwa kamu perlu menambahkan tiga environment variable:
SSH
— tempat di mana kunci SSH yang telah kamu buat di langkah sebelumnya seharusnya disimpan._PRIVATE _KEY REMOTE
— simpan alamat IP server kamu di sini._HOST REMOTE
— simpan nama user yang bertanggung jawab menjalankan bot di sini._USER
Sekarang, seharusnya kamu bisa melihat bagaimana setiap kode yang di-push ke branch main
akan secara otomatis di-deploy ke VPS kamu. Proses development jadi sat-set-sat-set 🚀