dibuat api.sh, chmod +x, jalankan ./api.sh
#!/bin/bash
# Script terpisah: Setup reverse proxy Nginx untuk aplikasi Rust + Systemd Service
# Jalankan sebagai root setelah script utama selesai
set -e
# ===== Konfigurasi Awal =====
SUBDOMAIN2="sub2.example.com" # Subdomain untuk aplikasi Rust
RUST_PORT="8181" # Port lokal tempat aplikasi Rust berjalan
RUST_BINARY="/home/bejo/rust-app/myapp" # Path lengkap ke binary Rust
RUST_USER="bejo" # User yang menjalankan aplikasi Rust
RUST_WORKING_DIR="/home/bejo/rust-app" # Working directory (tempat binary berada)
# =============================
# Cek root
if [ "$EUID" -ne 0 ]; then
echo "Jalankan script ini sebagai root."
exit 1
fi
# Validasi: nginx sudah terinstall?
if ! command -v nginx &> /dev/null; then
echo "Nginx tidak ditemukan. Pastikan script utama sudah dijalankan."
exit 1
fi
# Validasi: binary Rust ada?
if [ ! -f "$RUST_BINARY" ]; then
echo "Binary Rust tidak ditemukan di $RUST_BINARY"
echo "Silakan periksa path atau tempatkan binary di lokasi tersebut."
exit 1
fi
# Beri izin eksekusi pada binary
chmod +x "$RUST_BINARY"
# Buat systemd service file (nama unik dengan mengganti titik menjadi strip)
SERVICE_NAME="rust-${SUBDOMAIN2//./-}"
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
echo ">>> Membuat systemd service: $SERVICE_FILE"
cat > "$SERVICE_FILE" <<EOF
[Unit]
Description=Rust App for ${SUBDOMAIN2}
After=network.target
[Service]
Type=simple
User=${RUST_USER}
WorkingDirectory=${RUST_WORKING_DIR}
ExecStart=${RUST_BINARY}
Restart=on-failure
RestartSec=10
Environment="PORT=${RUST_PORT}"
# Tambahkan environment variable lain jika diperlukan
[Install]
WantedBy=multi-user.target
EOF
# Reload systemd, enable & start service
systemctl daemon-reload
systemctl enable "$SERVICE_NAME"
systemctl start "$SERVICE_NAME"
echo ">>> Service $SERVICE_NAME berhasil dibuat dan dijalankan."
systemctl status "$SERVICE_NAME" --no-pager
# Konfigurasi Nginx reverse proxy untuk subdomain2
CONFIG_FILE="/etc/nginx/sites-available/${SUBDOMAIN2}"
if [ ! -f "$CONFIG_FILE" ]; then
echo "File konfigurasi Nginx untuk $SUBDOMAIN2 tidak ditemukan."
echo "Pastikan script utama sudah menjalankan certbot dan membuat konfigurasi."
exit 1
fi
echo ">>> Memodifikasi konfigurasi Nginx untuk reverse proxy ke localhost:${RUST_PORT}..."
# Backup konfigurasi
BACKUP_FILE="${CONFIG_FILE}.bak.$(date +%Y%m%d-%H%M%S)"
cp "$CONFIG_FILE" "$BACKUP_FILE"
echo "Backup disimpan ke $BACKUP_FILE"
# Hapus baris root dan index di dalam blok HTTPS (port 443)
sed -i '/listen 443 ssl/,/}/ s/^\(\s*root\s.*\)/#\1/' "$CONFIG_FILE"
sed -i '/listen 443 ssl/,/}/ s/^\(\s*index\s.*\)/#\1/' "$CONFIG_FILE"
# Hapus blok location yang sudah ada di dalam blok HTTPS
sed -i '/listen 443 ssl/,/}/ {
/location \/ {/,/}/ d
}' "$CONFIG_FILE"
# Tambahkan location baru dengan proxy_pass sebelum penutup blok HTTPS
sed -i '/listen 443 ssl/,/}/ {
/}/ i\
location / {\
proxy_pass http://localhost:'"${RUST_PORT}"';\
proxy_set_header Host \$host;\
proxy_set_header X-Real-IP \$remote_addr;\
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;\
proxy_set_header X-Forwarded-Proto \$scheme;\
}
}' "$CONFIG_FILE"
# Test konfigurasi Nginx
if nginx -t; then
systemctl reload nginx
echo "✅ Konfigurasi Nginx berhasil!"
echo "Nginx sekarang meneruskan semua lalu lintas https://${SUBDOMAIN2} ke localhost:${RUST_PORT}"
else
echo "❌ Kesalahan konfigurasi Nginx. Kembalikan backup dengan:"
echo "cp ${BACKUP_FILE} ${CONFIG_FILE} && systemctl reload nginx"
exit 1
fi
echo "=== Setup Rust App + Proxy selesai ==="
echo "Akses aplikasi Anda di https://${SUBDOMAIN2}"
No comments:
Post a Comment