Untuk membuat License Generator Mikrotik bisa diakses secara online lewat halaman web (HTML) menggunakan MobaXterm, kita perlu menjembatani antara halaman web HTML dengan script Python (license.py) yang ada di server Debian Anda.
Karena script ini membutuhkan argumen input (Software ID dan Public Key) dan menghasilkan output teks, arsitektur terbaik adalah menggunakan Web Framework Python (Flask) sebagai backend dan HTML sebagai frontend.
Berikut adalah langkah-langkah lengkap untuk mengonlinekannya beserta cara modifikasi port-nya.
Langkah 1: Install Flask di Server Debian
Buka terminal Debian Anda lewat MobaXterm, lalu install Flask (pastikan Debian Anda memiliki akses internet saat instalasi ini):
sudo apt update sudo apt install python3-pip python3-flask -y
Langkah 2: Buat Script Backend Web (app.py)
Masuk ke dalam folder mikrotik Anda, lalu buat file baru bernama app.py menggunakan editor nano:
nano app.py
Copas (bisa gunakan klik kanan di MobaXterm) kode Python di bawah ini:
from flask import Flask, request, render_template_string
import subprocess
app = Flask(__name__)
# Template HTML Lengkap dengan Tombol Salin Otomatis
HTML_TEMPLATE = """
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MikroTik License Generator</title>
<style>
body { font-family: Arial, sans-serif; margin: 40px; background-color: #f4f4f9; }
.container { max-width: 600px; background: white; padding: 20px; border-radius: 8px; box-shadow: 0px 0px 10px rgba(0,0,0,0.1); margin: 0 auto; }
h2 { text-align: center; color: #333; }
label { font-weight: bold; display: block; margin-top: 15px; color: #555; }
input[type="text"], textarea { width: 100%; padding: 10px; margin: 5px 0 15px 0; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; }
input[type="submit"] { background-color: #4CAF50; color: white; padding: 12px 15px; border: none; border-radius: 4px; cursor: pointer; width: 100%; font-size: 16px; font-weight: bold; }
input[type="submit"]:hover { background-color: #45a049; }
.result { background: #e7f3fe; border-left: 6px solid #2196F3; padding: 15px; margin-top: 20px; border-radius: 4px; }
.result h3 { margin-top: 0; color: #1976D2; }
textarea { background-color: #fff; font-family: monospace; }
.btn-copy { background-color: #008CBA; color: white; padding: 10px 15px; border: none; border-radius: 4px; cursor: pointer; width: 100%; font-size: 14px; font-weight: bold; margin-top: 5px; transition: 0.2s; }
.btn-copy:hover { background-color: #007B9E; }
</style>
</head>
<body>
<div class="container">
<h2>MikroTik License Generator</h2>
<form method="POST">
<label>Software ID (SWID):</label>
<input type="text" name="swid" placeholder="Contoh: JFJ7-HHEL" required>
<label>Public Key / Key (Kunci Otomatis):</label>
<input type="text" name="key" value="9DBC845E9018537810FDAE62824322EEE1B12BAD81FCA28EC295FB397C61CE0B" readonly style="background-color: #e9e9e9; cursor: not-allowed; color: #666;">
<input type="submit" value="Generate License">
</form>
{% if result %}
<div class="result">
<h3>Hasil Lisensi:</h3>
<textarea id="licenseBox" rows="10" readonly>{{ result }}</textarea>
<button class="btn-copy" id="copyBtn" onclick="copyLicense()"> Salin Kunci Software</button>
</div>
{% endif %}
</div>
<script>
function copyLicense() {
var copyText = document.getElementById("licenseBox");
var btn = document.getElementById("copyBtn");
copyText.select();
copyText.setSelectionRange(0, 99999);
navigator.clipboard.writeText(copyText.value).then(function() {
btn.innerHTML = "✓ Berhasil Disalin!";
btn.style.backgroundColor = "#4CAF50";
setTimeout(function(){
btn.innerHTML = " Salin Kunci Software";
btn.style.backgroundColor = "#008CBA";
}, 2500);
}).catch(function(err) {
alert("Gagal menyalin teks: " + err);
});
}
</script>
</body>
</html>
"""
@app.route('/', methods=['GET', 'POST'])
def index():
result = None
if request.method == 'POST':
swid = request.form['swid'].strip()
key = request.form['key'].strip()
try:
cmd = ['python3', 'license.py', 'licgenros', swid, key]
process = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, timeout=10)
if process.returncode == 0:
result = process.stdout
else:
result = f"Error dari script:\n{process.stderr}"
except Exception as e:
result = f"Gagal menjalankan script: {str(e)}"
return render_template_string(HTML_TEMPLATE, result=result)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Simpan file dengan menekan CTRL + O, lalu Enter, dan keluar dengan CTRL + X.
Langkah 3: Jalankan Web Servernya
Sekarang jalankan script web tersebut dengan perintah:
python3 app.py
Terminal akan menampilkan informasi bahwa server sedang berjalan di http://0.0.0.0:5000.
Langkah 4: Cara Mengaksesnya secara Online
Bagaimana Anda membukanya di browser laptop Anda? Tergantung di mana server Debian Anda berada:
- Jika Debian berada di Cloud/VPS (Punya IP Publik):
Buka browser di laptop Anda, lalu ketik:http://IP_PUBLIK_DEBIAN_ANDA:5000 - Jika Debian berada di Jaringan Lokal (Satu Wi-Fi/LAN):
Cek IP lokal Debian Anda dengan perintahip a. Lalu buka di browser:http://IP_LOKAL_DEBIAN_ANDA:5000 - Jika Debian di PC lokal dan memanfaatkan MobaXterm (SSH Tunneling):
Jika port 5000 diblokir oleh firewall server, gunakan fitur Tunneling di MobaXterm:- Klik tombol Tunneling (ikon terowongan di bagian atas MobaXterm).
- Buat tunnel baru:
Local port 5000->Remote server localhost->Remote port 5000. - Setelah aktif, buka browser di laptop sendiri dan ketik:
http://localhost:5000.
Masalah: Setelah Exit MobaXterm, Web Tidak Bisa Diakses?
Itu terjadi karena saat Anda menutup MobaXterm, sesi SSH Anda terputus dan otomatis mematikan proses python3 app.py yang sedang berjalan. Di Linux, aplikasi yang dijalankan langsung di terminal akan mati jika terminalnya ditutup.
Supaya web server Anda tetap menyala terus (online 24/7) meskipun MobaXterm Anda exit atau laptop Anda dimatikan, gunakan salah satu metode di bawah ini:
Cara 1: Menggunakan nohup (Paling Cepat & Praktis)
nohup (No Hang Up) menjalankan script tanpa mempedulikan status terminal.
- Buka kembali MobaXterm dan masuk ke folder mikrotik.
- Jalankan perintah ini:
nohup python3 app.py > output.log 2>&1 &
Sekarang Anda bisa ketik exit atau langsung tutup MobaXterm Anda. Untuk mematikannya di lain waktu, masuk kembali via SSH dan ketik: pkill -f app.py.
Cara 2: Menggunakan Systemd (Sangat Direkomendasikan/Permanen)
Cara ini membuat script Flask Anda menjadi service resmi di Debian. Jika server Debian restart (misal mati lampu), web akan otomatis menyala sendiri saat server hidup kembali.
- Buat file konfigurasi service baru:
- Copas konfigurasi di bawah ini (Sesuaikan bagian
/path/to/mikrotikdengan lokasi folder mikrotik Anda yang sebenarnya, misal/home/user/mikrotik): - Simpan dengan CTRL + O, Enter, lalu CTRL + X.
- Jalankan perintah berikut untuk mengaktifkan servicenya:
sudo nano /etc/systemd/system/mikrotik-web.service
[Unit] Description=Mikrotik License Generator Web Service After=network.target [Service] User=root WorkingDirectory=/path/to/mikrotik ExecStart=/usr/bin/python3 app.py Restart=always [Install] WantedBy=multi-user.target
# Membaca ulang konfigurasi systemd sudo systemctl daemon-reload # Menyalakan service web mikrotik sudo systemctl start mikrotik-web # Membuat service otomatis menyala saat boot sudo systemctl enable mikrotik-web
Untuk memastikan service berjalan dengan benar, cek statusnya:
sudo systemctl status mikrotik-web
Jika muncul tulisan hijau active (running), Anda sudah bisa menutup MobaXterm dengan aman!
Jika Anda melakukan perubahan script dan ingin melakukan restart service, gunakan perintah:
sudo systemctl restart mikrotik-web.service
Cara Mengganti Port (Misal dari Port 5000 ke 8080)
Jika Anda ingin mengakses aplikasi via http://192.168.45.68:8080, ikuti 3 langkah berikut:
Langkah 1: Ubah Port di File app.py
Buka kembali file app.py via MobaXterm:
nano app.py
Scroll ke paling bawah dan cari baris berikut:
if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
Ganti angka 5000 dengan port baru Anda, misalnya 8080:
if __name__ == '__main__': app.run(host='0.0.0.0', port=8080)
Simpan dengan CTRL + O, Enter, lalu CTRL + X.
Langkah 2: Sesuaikan Konfigurasi Pendukung (Jika Ada)
- Kasus A: Jika Menggunakan Cloudflare Tunnel
Buka konfigurasi Cloudflare:
nano ~/.cloudflared/config.yml
Ubah bagian service ke port baru:
service: http://localhost:8080
- Kasus B: Jika Menggunakan Systemd
Anda tidak perlu mengubah isi file service karena systemd langsung mengeksekusi fileapp.pyyang sudah diperbarui. Cukup lakukan restart nanti.
Langkah 3: Bersihkan Port Lama & Jalankan Ulang
Agar sistem Debian menutup port lama dan membuka port baru secara bersih, jalankan perintah ini berurutan:
# 1. Matikan paksa sisa proses di port 5000 lama sudo fuser -k 5000/tcp # 2. Restart service web generator Anda sudo systemctl restart mikrotik-web.service
Selesai! Sekarang aplikasi Anda sudah sukses berpindah jalur dan bisa diakses via IP jaringan lokal di alamat baru: http://192.168.45.68:8080
Tidak ada komentar:
Posting Komentar