Wednesday, March 11, 2026

setup app dan api

 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