Cara Deploy Rust Web App di Ubuntu
Rust adalah bahasa pemrograman yang dikenal karena performa tinggi, keamanan memori tanpa garbage collector, serta kemampuannya untuk membangun aplikasi yang cepat dan efisien. Salah satu hal yang membuat Rust semakin populer adalah kemudahan penggunaannya untuk membangun aplikasi web dengan berbagai framework yang tersedia, seperti Actix Web dan Rocket.
Rust juga memiliki Cargo, manajer build dan paket yang sangat baik, yang memudahkan pengelolaan dependensi dan kompilasi aplikasi. Dengan menggunakan Crates.io, Rust memiliki ekosistem library (crate) yang sangat besar, memungkinkan kita membangun aplikasi yang kompleks dengan sedikit kode.
Pada tutorial ini, kita akan membuat aplikasi web sederhana dengan Rust, mengompilasinya, dan kemudian men-deploy-nya dengan menggunakan Nginx sebagai reverse proxy.
Install Dependensi dan Rust
Update dan install dependensi:
1 2 | sudo apt update sudo apt install build-essential -y |
Install Rust:
1 | curl https://sh.rustup.rs -sSf | sh |
Verifikasi instalasi Rust dan Cargo:
1 2 3 | rustup --version rustc --version cargo --version |
Respon yang dihasilkan:
1 2 | rustc 1.82.0 (f6e511eec 2024-10-15) cargo 1.82.0 (8f40fc59f 2024-08-21) |
Membuat Rust App
Membuat direktori untuk proyek Rust:
1 2 | cargo new rustweb cd rustweb |
Membuka file src/main.rs:
1 | nano src/main.rs |
Mengganti isinya dengan kode berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | use std::io::prelude::*; use std::net::{TcpListener, TcpStream}; fn handle_connection(mut stream: TcpStream) { let mut buffer = [0; 512]; stream.read(&mut buffer).unwrap(); let response = "HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n <html><body>Hello, World!</body></html>"; stream.write(response.as_bytes()).unwrap(); stream.flush().unwrap(); } fn main() { // Bind server to localhost:8000 let listener = TcpListener::bind("127.0.0.1:8000").unwrap(); println!("Server running on http://127.0.0.1:8000"); for stream in listener.incoming() { let stream = stream.unwrap(); handle_connection(stream); } } |
Compile aplikasi:
1 | cargo build --release |
Binary aplikasi akan berada di target/release/rustweb
Membuat Service
Membuat file service:
1 | sudo nano /etc/systemd/system/rustweb.service |
Isi file:
1 2 3 4 5 6 7 8 9 10 11 12 13 | [Unit] Description=Rust Web App After=network.target [Service] User=youruser Group=youruser WorkingDirectory=/home/youruser/rustweb ExecStart=/home/youruser/rustweb/target/release/rustweb Restart=always [Install] WantedBy=multi-user.target |
Mengaktifkan service:
1 2 3 4 | sudo systemctl daemon-reload sudo systemctl enable rustweb sudo systemctl start rustweb sudo systemctl status rustweb |
Konfigurasi Nginx
Install Nginx:
1 | sudo apt install nginx -y |
Membuat file konfigurasi Nginx:
1 | sudo nano /etc/nginx/conf.d/rustweb.conf |
Isi filenya:
1 2 3 4 5 6 7 8 9 10 11 | server { listen 80; server_name example.com; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } |
Restart Nginx:
1 | sudo systemctl restart nginx |
Uji Aplikasi
Buka browser dan kunjungi alamat:
1 | http://example.com |
Hasilnya adalah teks “Hello, World!”.
Selamat mencoba 🙂