Panduan Lengkap: Install Nginx, PHP 8.3 & Koneksi SQL Server 2022 Anti-Error
Menghubungkan sistem operasi Linux dengan database milik Microsoft (SQL Server 2022) seringkali memunculkan berbagai macam error. Tutorial ini telah diuji coba secara langsung (termasuk pada Debian 13 terbaru) dan dirancang selangkah demi selangkah khusus untuk pemula agar dijamin 100% berhasil tanpa error Missing Key.
Buka terminal/layar hitam WSL Linux Anda, dan mari kita mulai secara berurutan:
Langkah 1: Persiapan & Install Nginx
Pertama, kita harus menginstal Web Server bernama Nginx. Nginx adalah pondasi utama agar aplikasi web/toko Anda bisa diakses melalui browser.
Copy seluruh blok ini, paste ke terminal (klik kanan mouse), lalu tekan Enter:
sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx curl wget gnupg2 lsb-release apt-transport-https ca-certificates
Langkah 2: Install Mesin PHP Terbaru (8.3)
Agar web berjalan cepat dan aman, kita akan mengambil PHP versi paling gress dari repositori resmi khusus Linux (SURY). Skrip di bawah ini menggunakan metode keamanan terbaru (signed-by) sehingga Anda tidak akan menemui error Signature/Missing Key.
sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt update
sudo apt install -y php8.3-fpm php8.3-cli php8.3-dev php8.3-xml php8.3-mbstring php8.3-curl
Langkah 3: Install Driver Resmi Microsoft (ODBC 18)
Ini adalah komponen paling krusial! Driver ini berfungsi sebagai "jembatan" agar Linux bisa berkomunikasi dengan SQL Server. Kami telah menyisipkan trik trusted=yes agar proses instalasi langsung mulus tanpa ditolak oleh sistem keamanan Linux.
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
curl -fsSL https://packages.microsoft.com/config/debian/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
sudo sed -i 's/signed-by=\/usr\/share\/keyrings\/microsoft-prod.gpg/trusted=yes/g' /etc/apt/sources.list.d/mssql-release.list
sudo apt update
sudo ACCEPT_EULA=Y apt install -y msodbcsql18 unixodbc-dev
Langkah 4: Menanamkan Konektor (SQLSrv) ke Dalam PHP
Di tahap ini komputer akan "menjahit" (compile) kode konektor Microsoft ke dalam mesin PHP. Silakan jalankan perintah ini dan biarkan teks berjalan di layar sekitar 1-3 menit sampai sukses:
sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
Jika proses di atas sudah selesai, kita wajib mendaftarkannya ke dalam otak PHP. Copy-paste semua kode ini sekaligus lalu tekan Enter:
sudo su
echo "extension=sqlsrv.so" > /etc/php/8.3/mods-available/sqlsrv.ini
echo "extension=pdo_sqlsrv.so" > /etc/php/8.3/mods-available/pdo_sqlsrv.ini
phpenmod sqlsrv pdo_sqlsrv
exit
Langkah 5: Membuat Sertifikat Keamanan SSL (HTTPS)
Agar web server aman dari pemblokiran browser saat diakses melalui perangkat lain (seperti mesin kasir), kita wajib membuat sertifikat SSL buatan sendiri (Self-Signed). Jalankan perintah ini:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout /etc/ssl/private/nginx-selfsigned.key \
-out /etc/ssl/certs/nginx-selfsigned.crt \
-subj "/C=ID/ST=Jakarta/L=Jakarta/O=Alghifari Server/CN=localhost"
Langkah 6: Ubah Port Web & Paksa Keamanan Otomatis (Auto Redirect ke HTTPS)
Port standar web adalah 80, namun port ini di OS Windows sering bentrok dengan aplikasi bawaan. Kita akan mengatur ulang port Nginx ke 8030 (HTTP biasa) dan 4430 (HTTPS yang aman), sekaligus menyambungkannya dengan PHP dan file SSL.
Agar server web kita memiliki fitur Enterprise yang cerdas, kita akan mendesain sistemnya menjadi dua blok: Jika ada pengguna yang mencoba masuk melalui jalur HTTP biasa (8030), mesin akan otomatis membelokkannya secara paksa (Auto Redirect 301) ke jalur gembok HTTPS (4430).
Cukup copy-paste seluruh blok skrip ajaib di bawah ini sekaligus ke terminal lalu tekan Enter:
sudo bash -c 'cat > /etc/nginx/sites-available/default <<EOF
# Blok 1: Penjaga Port 8030 (HTTP) - Langsung melempar ke HTTPS
server {
listen 8030 default_server;
listen [::]:8030 default_server;
server_name _;
# Perintah sakti untuk Auto Redirect 301 ke HTTPS port 4430
return 301 https://\$host:4430\$request_uri;
}
# Blok 2: Mesin Utama Port 4430 (HTTPS) - Pemroses Website
server {
listen 4430 ssl default_server;
listen [::]:4430 ssl default_server;
server_name _;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
location / {
try_files \$uri \$uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
}
EOF'
Langkah 7: Membuat Landing Page Mewah (Opsional)
Daripada menggunakan tampilan bawaan Nginx yang membosankan, mari buat halaman depan bergaya Glassmorphism Dark Theme yang otomatis mendeteksi status PHP & SQL Server secara real-time!
Pertama, hapus dulu file bawaan Nginx lama dengan perintah ini:
sudo rm -f /var/www/html/index.nginx-debian.html
Lalu buka text editor manual bawaan Linux:
sudo nano /var/www/html/index.php
Copy seluruh kode rahasia di bawah ini, dan Paste ke dalam layar Nano (Cukup Klik Kanan Mouse). Simpan hasilnya dengan cara menekan tombol Ctrl + X, ketik Y, lalu Enter.
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Server Enterprise</title>
<style>
:root { --primary: #00f2fe; --secondary: #4facfe; --bg-dark: #0a0f16; --glass-bg: rgba(16, 25, 40, 0.6); --glass-border: rgba(255, 255, 255, 0.08); --text-main: #ffffff; --text-muted: #a0aec0; }
* { margin: 0; padding: 0; box-sizing: border-box; font-family: "Inter", sans-serif; }
body { background-color: var(--bg-dark); background-image: radial-gradient(circle at 15% 50%, rgba(79, 172, 254, 0.15), transparent 25%), radial-gradient(circle at 85% 30%, rgba(0, 242, 254, 0.15), transparent 25%); color: var(--text-main); min-height: 100vh; display: flex; justify-content: center; align-items: center; overflow: hidden; }
.orb { position: absolute; border-radius: 50%; filter: blur(80px); z-index: -1; animation: float 10s infinite ease-in-out alternate; }
.orb-1 { width: 300px; height: 300px; background: linear-gradient(135deg, var(--secondary), #667eea); top: -100px; left: -100px; }
.orb-2 { width: 400px; height: 400px; background: linear-gradient(135deg, var(--primary), #43e97b); bottom: -150px; right: -100px; animation-delay: -5s; }
@keyframes float { 0% { transform: translate(0, 0) scale(1); } 100% { transform: translate(30px, 50px) scale(1.1); } }
.container { background: var(--glass-bg); backdrop-filter: blur(16px); border: 1px solid var(--glass-border); border-radius: 24px; padding: 3rem 4rem; text-align: center; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5); max-width: 800px; width: 90%; animation: slideUp 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
@keyframes slideUp { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }
.badge { display: inline-block; padding: 8px 16px; background: rgba(79, 172, 254, 0.1); color: var(--primary); border-radius: 30px; font-size: 0.875rem; font-weight: 600; letter-spacing: 1px; margin-bottom: 1.5rem; border: 1px solid rgba(79, 172, 254, 0.2); }
h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 1rem; }
h1 span { background: linear-gradient(135deg, var(--primary), var(--secondary)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; display: block; font-size: 3.2rem; margin-top: 0.5rem; }
p.subtitle { color: var(--text-muted); font-size: 1.1rem; margin-bottom: 2.5rem; line-height: 1.6; }
.stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 1.5rem; margin-bottom: 2.5rem; }
.stat-card { background: rgba(255, 255, 255, 0.03); border: 1px solid var(--glass-border); padding: 1.5rem; border-radius: 16px; transition: all 0.3s ease; }
.stat-card:hover { transform: translateY(-5px); background: rgba(255, 255, 255, 0.05); }
.stat-icon { font-size: 1.5rem; margin-bottom: 0.5rem; }
.stat-value { font-size: 1.25rem; font-weight: 700; margin-bottom: 0.25rem; }
.stat-label { font-size: 0.8rem; color: var(--text-muted); letter-spacing: 1px; }
.btn { display: inline-block; padding: 12px 32px; background: linear-gradient(135deg, var(--secondary), var(--primary)); color: #000; text-decoration: none; border-radius: 12px; font-weight: 600; transition: all 0.3s ease; border: none; }
.btn:hover { transform: translateY(-2px); filter: brightness(1.1); }
.footer { margin-top: 2.5rem; font-size: 0.85rem; color: rgba(160, 174, 192, 0.6); }
</style>
</head>
<body>
<div class="orb orb-1"></div>
<div class="orb orb-2"></div>
<div class="container">
<div class="badge">Sistem Online & Aktif</div>
<h1>Welcome to<span>SERVER ENTERPRISE</span></h1>
<p class="subtitle">Server berbasis Linux Debian siap digunakan. Nginx dan Mesin PHP telah dikonfigurasi dengan performa tinggi.</p>
<div class="stats-grid">
<div class="stat-card">
<div class="stat-icon">⚡</div>
<div class="stat-value">Nginx</div>
<div class="stat-label">Web Server</div>
</div>
<div class="stat-card">
<div class="stat-icon">🐘</div>
<div class="stat-value">PHP <?php echo phpversion(); ?></div>
<div class="stat-label">Engine</div>
</div>
<div class="stat-card">
<div class="stat-icon">🗄️</div>
<div class="stat-value">
<?php echo extension_loaded('sqlsrv') ? '<span style="color:#43e97b">Connected</span>' : '<span style="color:#ff8a65">Offline</span>'; ?>
</div>
<div class="stat-label">SQL Server</div>
</div>
</div>
<a href="/info.php" class="btn">Lihat Konfigurasi PHP</a>
<div class="footer">
Server Time: <?php echo date('Y-m-d H:i:s'); ?> | Secured Environment
</div>
</div>
</body>
</html>
Langkah 8: Restart Mesin & Buat File Uji Coba Lanjutan
Pekerjaan berat di Linux selesai! Sekarang buat file pengetesan info.php dan restart mesin agar semuanya aktif.
sudo bash -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'
sudo systemctl restart php8.3-fpm
sudo systemctl restart nginx
Langkah 9: Membuka Akses Jaringan LAN (Di Windows)
Agar server Linux ini bisa diakses dari HP atau PC kasir lain dalam satu jaringan WiFi/LAN, kita harus mensinkronkan IP Linux dan membuka gembok OS Windows utamanya.
Buka program PowerShell di Windows (wajib Klik Kanan -> Run as Administrator), lalu jalankan perintah penyatuan IP ini:
echo "[wsl2]`nnetworkingMode=mirrored" > $env:USERPROFILE\.wslconfig
(Setelah menekan Enter, ketik wsl --shutdown di PowerShell untuk merestart sistem jaringan, lalu buka kembali terminal Linux).
Selanjutnya, buka paksa pintu Firewall Windows untuk port 8030 dan 4430 dengan perintah ini:
New-NetFirewallRule -DisplayName "WSL Web Server (8030 & 4430)" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 8030,4430
Fitur penyatuan IP (Mirrored Network) di atas terkadang tidak berfungsi/belum di-support pada Windows 11 versi lama. Jika saat ditest dari komputer lain web Anda berputar-putar dan memunculkan error ERR_CONNECTION_TIMED_OUT, silakan gunakan Jurus Jembatan PortProxy sebagai solusi mutlak.
Kembali ke aplikasi PowerShell (Run as Administrator), dan copy-paste 2 baris perintah paksa ini:
netsh interface portproxy add v4tov4 listenport=8030 listenaddress=0.0.0.0 connectport=8030 connectaddress=127.0.0.1
netsh interface portproxy add v4tov4 listenport=4430 listenaddress=0.0.0.0 connectport=4430 connectaddress=127.0.0.1
Begitu perintah ini ditekan Enter, Windows akan dipaksa secara brutal untuk melemparkan semua pengunjung LAN langsung ke dalam localhost Linux Anda. Dijamin 100% Tembus!
Ambil HP atau komputer lain yang terhubung ke WiFi yang sama. Buka browser dan ketik jalur HTTP biasa port 8030 ke IP komputer Windows Anda:
http://192.168.x.x:8030Perhatikan kotak URL browser Anda! Sistem Linux akan otomatis merespon dan membelokkan Anda ke jalur aman HTTPS (4430). Jika muncul peringatan keamanan SSL, cukup klik Advanced -> Proceed to localhost. Dan boom! Layar Landing Page Web Server mewah Anda akan memanjakan mata, membuktikan bahwa sistem keamanan berjalan 100% sempurna.
Catatan Penting untuk Skrip PHP Koneksi Anda:
SQL Server 2022 mengusung keamanan ketat. Saat Anda membuat skrip kode PHP untuk koneksi ke database, Anda diwajibkan menyisipkan perintah "TrustServerCertificate" => true. Jika tidak, koneksi akan ditolak. Contohnya seperti ini:
$conn_array = array(
"Database" => "NamaDatabaseToko",
"Uid" => "sa",
"PWD" => "PasswordRahasia",
"TrustServerCertificate" => true
);
$conn = sqlsrv_connect($serverName, $conn_array);
Tidak ada komentar:
Posting Komentar