---
title: "Program OpenResty Pertama Anda: Hello World - API7.ai"
description: "Follow this post to implement Hello World in OpenResty!"
url: "https://api7.ai/id/learning-center/openresty/hello-world-in-openresty"
---

# Program OpenResty Pertama Anda: Hello World

API7.ai

September 9, 2022

[OpenResty (NGINX + Lua)](https://api7.ai/learning-center/openresty)

Ketika kita mulai mempelajari bahasa pengembangan baru, tutorial biasanya menyediakan contoh sederhana `hello world`. Jadi, mari kita lewati dulu proses instalasi dan lihat bagaimana menulis contoh ini di OpenResty:

```
$ resty -e "ngx.say('hello world')"
hello world
```

Ini seharusnya menjadi kode hello world yang paling sederhana yang pernah Anda lihat, mirip dengan Python:

```
$ python -c 'print("hello world")'
hello world
```

Di balik ini adalah manifestasi dari filosofi OpenResty. Kode harus cukup ringkas untuk membuat Anda terhindar dari pemikiran "dari awal sampai menyerah." Posting ini akan fokus pada contoh hello world.

Seperti yang kami katakan dalam posting [Apa perbedaan antara OpenResty dan NGINX](https://api7.ai/learning-center/openresty/openresty-vs-nginx/), OpenResty berbasis pada `NGINX`. Jadi, Anda mungkin bertanya: Mengapa kita tidak melihat bayangan NGINX di sini? Jangan khawatir, mari kita tambahkan satu baris kode untuk melihat apa yang berjalan di balik resty:

```
$ resty -e "ngx.say('hello world'); ngx.sleep(10)" &
```

Kami menambahkan metode [ngx.sleep](https://github.com/openresty/lua-nginx-module#ngxsleep) sehingga program tidak akan keluar setelah mencetak string `hello world`. Dengan cara ini, kita memiliki kesempatan untuk mencari tahu:

```
$ ps -ef | grep nginx
root     15944  6380  0 13:59 pts/6    00:00:00 grep --color=auto nginx
```

Akhirnya proses NGINX muncul! Tampaknya perintah `resty` pada dasarnya memulai layanan NGINX, jadi apa itu `resty`?

Anda mungkin belum menginstal OpenResty di mesin Anda, jadi selanjutnya, mari kita kembali ke langkah instalasi yang kita lewati di awal, dan instal OpenResty sebelum melanjutkan.

## Instalasi

Seperti perangkat lunak sumber terbuka lainnya, kita dapat menginstal OpenResty dengan berbagai cara, seperti menggunakan manajer paket sistem operasi, mengompilasi dari kode sumber, atau menggunakan gambar docker. Namun, saya menyarankan Anda untuk pertama kali menggunakan manajer paket seperti `yum`, `apt-get`, dan `brew` untuk menginstal OpenResty. Dalam posting ini, saya akan menggunakan macOS sebagai contoh:

```
$ brew tap openresty/brewbrew install openresty
```

Menggunakan sistem operasi lain juga serupa. Pertama, tambahkan URL repositori OpenResty ke manajer paket, lalu gunakan manajer paket untuk menginstal OpenResty. Untuk langkah-langkah lebih detail, Anda dapat merujuk ke [dokumentasi resmi](https://openresty.org/en/linux-packages.html).

Namun, ada dua masalah di balik instalasi yang tampaknya sederhana ini:

1. Mengapa saya tidak merekomendasikan menggunakan kode sumber untuk menginstalnya?
2. Mengapa tidak bisa diinstal langsung dari repositori resmi sistem operasi tetapi perlu menyetel repositori lain terlebih dahulu?

Silakan pikirkan kedua pertanyaan tersebut terlebih dahulu.

Di sini saya ingin menambahkan satu hal lagi. Saya akan menaruh banyak "mengapa" di balik penampilan dalam kursus ini. Saya harap Anda bisa berpikir sambil mempelajari hal baru. Tidak masalah apakah hasilnya benar atau tidak. Sayangnya, pemikiran independen juga langka di bidang teknis. Karena perbedaan dalam bidang dan kedalaman teknis setiap orang, guru pasti akan memiliki pendapat pribadi dan kesalahan dalam pengetahuan dalam kursus apa pun. Kita dapat secara bertahap membentuk sistem teknis kita sendiri dengan bertanya beberapa mengapa dalam proses belajar dan memahaminya.

Banyak insinyur menikmati membangun dari kode sumber, dan saya juga melakukannya bertahun-tahun yang lalu. Namun, ketika menggunakan proyek sumber terbuka, saya selalu berharap bisa secara manual `configure` dan `make` dari kode sumber dan memodifikasi beberapa parameter kompilasi. Saya merasa ini adalah cara terbaik untuk menyesuaikan lingkungan mesin ini dan memaksimalkan kinerjanya.

Tetapi ini tidak terjadi dalam kenyataan. Setiap kali saya mengompilasi kode sumber, saya menghadapi masalah lingkungan yang aneh, dan saya hanya bisa menginstalnya setelah tersandung. Sekarang saya mengerti bahwa tujuan awal kita adalah menggunakan proyek sumber terbuka untuk memenuhi kebutuhan bisnis. Kita tidak boleh membuang waktu dan lingkungan untuk berjuang, apalagi manajer paket dan teknologi kontainer. Ini justru untuk membantu kita menyelesaikan masalah ini.

Mari kita kembali ke topik. Menggunakan kode sumber OpenResty untuk menginstal, tidak hanya langkah-langkahnya rumit, Anda perlu menyelesaikan dependensi eksternal seperti `PCRE`, `OpenSSL`, dll., tetapi Anda juga perlu mem-patch versi OpenSSL yang sesuai secara manual. Jika tidak, akan ada kekurangan fungsi saat menangani `SSL sessions`. Misalnya, API Lua seperti [ngx.sleep](https://github.com/openresty/lua-nginx-module#ngxsleep) yang menyebabkan `yield` tidak dapat digunakan. Jika Anda ingin mempelajari lebih lanjut tentang bagian ini, Anda dapat merujuk ke [dokumentasi resmi](https://github.com/openresty/lua-nginx-module#ssl_session_fetch_by_lua_block) untuk informasi lebih detail.

OpenResty memelihara patch tersebut dalam [skrip paket OpenSSL](https://github.com/openresty/openresty-packaging/blob/master/rpm/SPECS/openresty-openssl.spec) sendiri. Ketika OpenResty meningkatkan versi `OpenSSL`, itu harus menghasilkan patch yang sesuai dan melakukan pengujian regresi lengkap.

```
Source0: https://www.openssl.org/source/openssl-%{version}.tar.gz

Patch0: https://raw.githubusercontent.com/openresty/openresty/master/patches/openssl-1.1.0d-sess_set_get_cb_yield.patch
Patch1: https://raw.githubusercontent.com/openresty/openresty/master/patches/openssl-1.1.0j-parallel_build_fix.patch
```

Pada saat yang sama, kita dapat melihat [skrip paket](https://github.com/openresty/openresty-packaging/blob/master/rpm/SPECS/openresty.spec) OpenResty di CentOS untuk melihat apakah ada poin tersembunyi lainnya:

```
BuildRequires: perl-File-Temp
BuildRequires: gcc, make, perl, systemtap-sdt-devel
BuildRequires: openresty-zlib-devel >= 1.2.11-3
BuildRequires: openresty-openssl-devel >= 1.1.0h-1
BuildRequires: openresty-pcre-devel >= 8.42-1
Requires: openresty-zlib >= 1.2.11-3
Requires: openresty-openssl >= 1.1.0h-1
Requires: openresty-pcre >= 8.42-1
```

Seperti yang Anda lihat di sini, OpenResty memelihara versi `OpenSSL` sendiri dan versi `zlib` dan `PCRE` sendiri. Namun, dua yang terakhir menyesuaikan parameter kompilasi dan tidak mempertahankan patch mereka.

Jadi, mempertimbangkan faktor-faktor ini, saya tidak merekomendasikan mengompilasi OpenResty dari kode sumber kecuali Anda sudah mengetahui detailnya.

Seharusnya jelas bagi Anda mengapa instalasi sumber tidak direkomendasikan. Ketika kita menjawab pertanyaan pertama, kita juga menjawab pertanyaan kedua: mengapa tidak bisa diinstal langsung dari repositori paket resmi sistem operasi tetapi perlu menyetel repositori lain terlebih dahulu?

Ini karena repositori resmi tidak mau menerima paket `OpenSSL`, `PCRE`, dan `zlib` yang dipelihara oleh pihak ketiga untuk mencegah mereka menyebabkan kebingungan bagi pengguna lain yang tidak tahu mana yang harus dipilih. Di sisi lain, OpenResty membutuhkan versi tertentu dari pustaka `OpenSSL` dan `PCRE` untuk berjalan normal, dan versi default sistem relatif lama.

## CLI OpenResty

Setelah menginstal OpenResty, CLI OpenResty `resty` sudah diinstal secara default. Ini adalah skrip `Perl`, dan seperti yang kami sebutkan sebelumnya, alat ekosistem OpenResty semuanya ditulis dalam `Perl`, yang ditentukan oleh preferensi teknis penulis OpenResty.

```
$ which resty
/usr/local/bin/resty

$ head -n 1 /usr/local/bin/resty
#!/usr/bin/env perl
```

CLI resty sangat kuat, dan kita dapat menggunakan `resty -h` atau membaca [dokumentasi resmi](https://github.com/openresty/resty-cli) untuk daftar fungsionalitas lengkap. Selanjutnya, saya akan memperkenalkan dua fitur menarik.

```
$ resty --shdict='dogs 1m' -e 'local dict = ngx.shared.dogs dict:set("Tom", 56) print(dict:get("Tom"))'

56
```

Contoh di atas menunjukkan konfigurasi `Nginx` dengan kode `Lua`, yang menyelesaikan pengaturan dan pencarian kamus memori bersama. `dogs 1m` adalah konfigurasi `Nginx` yang mendeklarasikan ruang memori bersama bernama `dogs` dengan ukuran `1m`. Memori bersama digunakan sebagai kamus dalam kode Lua.

Juga, parameter `--http-include` dan `--main-include` digunakan untuk menyiapkan file konfigurasi `NGINX`, sehingga kita bisa menulis ulang contoh di atas sebagai:

```
$ resty --http-conf 'lua_shared_dict dogs 1m;' -e 'local dict = ngx.shared.dogs dict:set("Tom", 56) print(dict:get("Tom"))'
```

Alat debugging standar di dunia OpenResty, seperti `gdb`, `valgrind`, `sysetmtap`, dan `Mozilla rr` juga dapat digunakan dengan resty untuk memfasilitasi pengembangan dan pengujian normal. Mereka sesuai dengan perintah berbeda dari `resty`, jadi implementasi internalnya sangat sederhana, hanya lapisan tambahan panggilan baris perintah. Mari kita ambil `valgrind` sebagai contoh.

```
$ resty --valgrind -e "ngx.say('hello world'); "

ERROR: failed to run command "valgrind /usr/local/openresty/nginx/sbin/nginx -p /tmp/resty_rJeOWaYGIY/ -c conf/nginx.conf": No such file or directory
```

Mereka tidak hanya berlaku untuk dunia OpenResty tetapi juga alat umum untuk sisi server, jadi mari kita pelajari mereka langkah demi langkah.

## "Hello world" yang lebih formal

Program OpenResty pertama yang kita tulis, di awal, menggunakan perintah `resty` tanpa proses `master` dan tanpa mendengarkan port tertentu. Selanjutnya, mari kita implementasikan program `hello world` lainnya.

Kita membutuhkan setidaknya tiga langkah untuk menyelesaikannya.

1. Buat direktori kerja.
2. Modifikasi file konfigurasi `NGINX` untuk menyematkan kode `Lua` di dalamnya.
3. Mulai layanan `OpenResty`.

Mari kita mulai dengan membuat direktori kerja.

```
$ mkdir openresty-sample
$ cd openresty-sample
$ mkdir logs/ conf/
```

Berikut adalah `nginx.conf` minimalis dengan direktif `content_by_lua` OpenResty di direktori root, yang menyematkan metode [ngx.say](https://github.com/openresty/lua-nginx-module#ngxsay).

```
events {
    worker_connections 1024;
}

http {
    server {
        listen 8080;
        location / {
            content_by_lua '
                ngx.say("hello, world")
            ';
        }
    }
}
```

Pastikan openresty telah ditambahkan ke lingkungan `PATH` terlebih dahulu; kemudian, mulai layanan OpenResty:

```
$ openresty -p `pwd` -c conf/nginx.conf
```

Jika tidak ada kesalahan yang terjadi, layanan OpenResty telah berhasil dimulai. Kita dapat mengaksesnya dengan perintah cURL untuk melihat hasil yang dikembalikan.

```
$ curl -i 127.0.0.1:8080

HTTP/1.1 200 OK
Server: openresty/1.13.6.2
Content-Type: text/plain
Transfer-Encoding: chunked
Connection: keep-alive
hello, world
```

Selamat! `Hello World` formal di OpenResty selesai!

## Ringkasan

Mari kita tinjau apa yang kita pelajari hari ini. Pertama, kita memulai instalasi OpenResty dan CLI dengan satu baris kode sederhana "hello, world", dan akhirnya, kita memulai proses OpenResty dan menjalankan program backend yang sebenarnya.

Di antara mereka, resty adalah alat baris perintah yang akan sering kita gunakan di masa depan. Oleh karena itu, kode demo dalam kursus dijalankan dengannya, daripada memulai layanan OpenResty di latar belakang.

Yang lebih penting, banyak detail budaya dan teknis tersembunyi di balik OpenResty, dan itu seperti gunung es yang mengambang di laut. Melalui kursus ini, saya berharap dapat menunjukkan kepada Anda OpenResty yang lebih komprehensif, bukan hanya API yang terpapar.

Share article link

Share

Related Posts

[![OpenResty FAQ | Bagaimana OpenResty Digunakan dalam Praktik](https://static.api7.ai/uploads/2023/02/12/jbv9M0zi_Hello%20World%20in%20OpenResty%20%283%29.png)](https://api7.ai/learning-center/openresty/faq-5)

## [OpenResty FAQ | Bagaimana OpenResty Digunakan dalam Praktik](https://api7.ai/learning-center/openresty/faq-5)

[![Bagian 3: Cara Membangun Microservices API Gateway Menggunakan OpenResty](https://static.api7.ai/uploads/2023/02/07/3XJXY9Jy_45.png)](https://api7.ai/learning-center/openresty/how-to-build-a-microservices-api-gateway-part-3)

## [Bagian 3: Cara Membangun Microservices API Gateway Menggunakan OpenResty](https://api7.ai/learning-center/openresty/how-to-build-a-microservices-api-gateway-part-3)

Table of Contents

- [Instalasi](#instalasi)
- [CLI OpenResty](#cli-openresty)
- ["Hello world" yang lebih formal](#hello-world-yang-lebih-formal)
- [Ringkasan](#ringkasan)
