Membangun Web Server Debian 12 Bookworm: Panduan Lengkap

Membangun Web Server Debian 12 Bookworm: Panduan Lengkap

Ingin menghadirkan aplikasi web Flask Anda ke dunia maya dengan performa optimal dan stabilitas tinggi? Panduan lengkap ini akan memandu Anda langkah demi langkah dalam membangun web server yang kokoh di Debian 12 Bookworm, menggunakan kombinasi andal Nginx sebagai reverse proxy dan Gunicorn sebagai server WSGI. Dari instalasi dasar hingga konfigurasi penuh, kami akan memastikan aplikasi Anda siap melayani pengguna dengan efisien.

Persiapan Awal Membangun Web Server

Sebelum kita mulai, pastikan Anda memiliki akses ke server Anda (misalnya, melalui konsol langsung atau koneksi SSH awal jika sudah diizinkan). Anda akan membutuhkan akses root atau user dengan hak sudo.

Selalu mulai dengan perbarui paket di server anda :

sudo apt update
sudo apt upgrade -y
sudo apt install python3-pip python3-venv nginx -y

Buat User Non-Root Baru (Jika Belum Ada)

Sangat disarankan untuk tidak sering-sering login sebagai root secara langsung. Buatlah user baru untuk penggunaan sehari-hari dan berikan hak sudo.

sudo adduser [nama_user_baru_anda] # Contoh: sudo adduser userbaru
sudo usermod -aG sudo [nama_user_baru_anda] # Berikan hak sudo

Ganti [nama_user_baru_anda] dengan nama user yang Anda inginkan. Selanjutnya Anda akan diminta untuk membuat kata sandi untuk user baru ini.

Konfigurasi Autentikasi Kunci SSH di Debian 12 Bookworm

Menggunakan autentikasi kunci SSH adalah cara yang jauh lebih aman daripada mengandalkan kata sandi untuk login ke server Anda. Debian 12 Bookworm menyediakan dukungan penuh untuk ini. Berikut adalah langkah-langkah untuk mengkonfigurasikannya:

Buat Pasangan Kunci SSH (Jika Belum Ada) Langkah ini dilakukan di komputer lokal Anda (komputer yang akan Anda gunakan untuk SSH ke server).

Buka Terminal: Buka aplikasi terminal di sistem Linux, macOS, atau Windows Subsystem for Linux (WSL) Anda.

Buat Kunci SSH: Jalankan perintah berikut:

```
ssh-keygen -t rsa -b 4096 -C "nama_pengguna_anda@nama_host_atau_tujuan"
```

Penjelasan :

  • ssh-keygen: Perintah untuk membuat pasangan kunci SSH.
  • -t rsa: Menentukan jenis algoritma kunci (RSA adalah yang paling umum dan direkomendasikan).
  • -b 4096: Menentukan panjang kunci dalam bit (4096 bit adalah ukuran yang kuat).
  • -C "nama_pengguna_anda@nama_host_atau_tujuan": Menambahkan komentar ke kunci Anda. Ini opsional tetapi sangat membantu untuk mengidentifikasi kunci jika Anda memiliki beberapa.

Anda akan diminta untuk:

  • Enter file in which to save the key (/home/user/.ssh/id_rsa): Tekan Enter untuk menerima lokasi default, atau masukkan jalur lain jika Anda ingin menyimpannya di lokasi yang berbeda.

  • Enter passphrase (empty for no passphrase): Sangat disarankan untuk memasukkan passphrase di sini. Ini akan mengenkripsi kunci pribadi Anda, memberikan lapisan keamanan tambahan jika kunci Anda jatuh ke tangan yang salah. Anda harus memasukkan passphrase ini setiap kali Anda menggunakan kunci tersebut (atau mengandalkan ssh-agent untuk mengelolanya).

Setelah selesai, Anda akan memiliki dua file di direktori .ssh Anda (biasanya ~/.ssh/):

  • id_rsa: Ini adalah kunci pribadi Anda. Jangan pernah membagikan file ini kepada siapa pun.
  • id_rsa.pub: Ini adalah kunci publik Anda. File inilah yang akan Anda salin ke server Debian 12 Anda.

Salin Kunci Publik ke Server Debian 12

Langkah ini dilakukan dari komputer lokal Anda untuk menyalin kunci publik ke server Debian 12 Anda.

Menggunakan ssh-copy-id (Direkomendasikan):

Ini adalah cara termudah dan paling aman untuk menyalin kunci publik.

ssh-copy-id nama_pengguna_server@alamat_ip_server_anda

Ganti nama_pengguna_server dengan nama pengguna yang Anda gunakan untuk login ke server Debian Anda (misalnya, root atau pengguna biasa).

Ganti alamat_ip_server_anda dengan alamat IP atau nama host server Debian Anda.

Anda akan diminta untuk memasukkan kata sandi server Anda (ini adalah terakhir kalinya Anda akan memerlukannya untuk login SSH). Setelah berhasil, kunci publik Anda akan ditambahkan ke file ~/.ssh/authorized_keys di server.

Menyalin Secara Manual (Jika ssh-copy-id tidak tersedia)

Salin Kunci Publik ke Clipboard (di komputer lokal Anda):

cat ~/.ssh/id_rsa.pub

Login ke Server Debian 12 (menggunakan kata sandi untuk kali ini):

ssh nama_pengguna_server@alamat_ip_server_anda

Buat Direktori .ssh dan File authorized_keys (jika belum ada di server):

mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Tambahkan Kunci Publik ke authorized_keys (di server):

Buka file authorized_keys menggunakan editor teks (misalnya, nano atau vi):

nano ~/.ssh/authorized_keys

Tempelkan kunci publik yang Anda salin sebelumnya ke baris baru di file ini. Simpan dan keluar dari editor.

Uji Koneksi SSH Anda

Dari komputer lokal Anda, coba login ke server tanpa memasukkan kata sandi:

ssh nama_pengguna_server@alamat_ip_server_anda

Jika semuanya berhasil, Anda seharusnya bisa masuk tanpa diminta kata sandi. Jika Anda mengatur passphrase untuk kunci pribadi Anda, Anda akan diminta untuk memasukkan passphrase tersebut.

Nonaktifkan Autentikasi Kata Sandi (Opsional, tapi Direkomendasikan untuk Keamanan)

Setelah Anda yakin bahwa autentikasi kunci SSH berfungsi dengan baik, Anda dapat menonaktifkan autentikasi kata sandi di server untuk keamanan yang lebih tinggi.

Login ke Server Debian 12 Anda (menggunakan SSH dengan kunci):

ssh nama_pengguna_server@alamat_ip_server_anda

Edit File Konfigurasi SSH Daemon:

sudo nano /etc/ssh/sshd_config
  • Ubah Port Default (Sangat Direkomendasikan): Mengubah port default 22 akan mengurangi jumlah serangan brute-force otomatis. Pilih port di atas 1024 dan di bawah 65535 yang belum digunakan.

Nonaktifkan Login Root (Sangat Direkomendasikan): Mencegah login langsung sebagai root. Anda akan login sebagai user non-root lalu menggunakan sudo.

  • Cari baris: #PermitRootLogin prohibit-password (atau yes, forced-commands-only, dll.) Ubah menjadi: PermitRootLogin no (Pastikan tidak ada # di depannya. Jika Anda melihat prohibit-password, ubah menjadi no.)

Nonaktifkan Otentikasi Kata Sandi (Setelah Kunci SSH Berfungsi!): Ini adalah langkah keamanan krusial. Setelah Anda yakin bisa login dengan kunci SSH, nonaktifkan login dengan kata sandi.

  • Cari baris: #PasswordAuthentication yes Ubah menjadi: PasswordAuthentication no (Hapus # jika ada)

Pastikan Autentikasi Kunci Publik Aktif:

Cari baris ini dan pastikan tidak dikomentari (#) dan nilainya yes. PubkeyAuthentication yes

Nonaktifkan Challenge-Response Authentication :

ChallengeResponseAuthentication no

Nonaktifkan X11 Forwarding (Jika Tidak Dibutuhkan):

Jika Anda tidak menggunakan GUI melalui SSH, nonaktifkan ini. X11Forwarding no (jika tidak diperlukan)

Periksa UsePAM:

Pastikan ini disetel ke yes karena PAM sering digunakan untuk autentikasi lain. UsePAM yes

Tambahkan AllowUsers (Opsional tapi Direkomendasikan):

Ini membatasi user mana yang diizinkan untuk login melalui SSH. AllowUsers [nama_user_baru_anda] (misal: AllowUsers userbaru) Jika Anda punya beberapa user: AllowUsers user1 user2

Simpan dan Keluar:

  • Jika menggunakan nano: Tekan Ctrl+X, lalu Y untuk menyimpan, lalu Enter.

  • Uji Konfigurasi (Opsional, tapi Direkomendasikan): Sebelum me-restart layanan, Anda bisa menguji sintaks konfigurasi: sudo sshd -t

  • Jika tidak ada output, berarti sintaksnya OK. Jika ada error, itu akan ditampilkan.

  • Restart Layanan SSH: Ini adalah langkah penting agar perubahan diterapkan.

sudo systemctl restart sshd

Konfigurasi Firewall (Penting!)

Jika Anda mengubah port SSH, Anda harus memperbarui firewall Anda (misalnya ufw) untuk mengizinkan koneksi masuk pada port baru tersebut dan menghapus aturan untuk port 22 (opsional, setelah Anda yakin).

Jika Menggunakan UFW (Uncomplicated Firewall)

Izinkan Port Baru:

sudo ufw allow [port_baru_anda]/tcp # Contoh: sudo ufw allow 2222/tcp

Hapus Aturan Port Lama (Opsional tapi Direkomendasikan):

sudo ufw delete allow 22/tcp

Periksa Status UFW:

sudo ufw status verbose

Pastikan Status:

active dan Port [port_baru_anda] diizinkan.

Verifikasi dan Langkah Terakhir

Coba Login dari Komputer Lokal Anda (JANGAN TUTUP SESI LAMA DULU!):

Buka terminal baru di komputer lokal Anda dan coba login menggunakan user baru dan port baru Anda:

ssh -p [port_baru_anda] [nama_user_baru_anda]@alamat_ip_server_anda

Untuk alamat_ip_server bisa dilihat dengan mengetik perintah diterminal seperti dibawah ini:

hostname

Jika Anda diminta passphrase dan berhasil login, berarti semua konfigurasi sudah benar.

Jika Berhasil, Tutup Sesi Lama Anda. Sekarang Anda bisa dengan aman menutup sesi SSH lama (jika Anda masih punya yang terbuka) atau konsol root.

Server Debian 12 Anda sekarang telah memiliki konfigurasi SSH yang lebih aman!

Membuat server di Debian 12 Bookworm melibatkan beberapa langkah, tergantung pada jenis server yang ingin Anda buat (misalnya, web server, file server, database server, dll.).

Berikut adalah panduan umum tentang cara menyiapkan server dasar, dan kemudian beberapa jenis server umum yang mungkin ingin Anda konfigurasikan.

Langkah-langkah Umum untuk Menyiapkan Server Debian 12

Instal Alat Penting

sudo apt install build-essential htop screen nmap net-tools nano vim wget curl git ufw

Alat-alat ini umumnya berguna untuk administrasi server.

Konfigurasi Server SSH (jika belum terinstal atau untuk keamanan): SSH sangat penting untuk akses jarak jauh.

sudo apt install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh

Siapkan Firewall (UFW - Uncomplicated Firewall): UFW menyederhanakan manajemen firewall.

sudo apt install ufw
sudo ufw enable
sudo ufw allow ssh # Izinkan akses SSH

Tambahkan aturan untuk layanan lain yang akan Anda jalankan (misalnya, HTTP/HTTPS, FTP).

sudo ufw allow http  # Untuk web server (port 80)
sudo ufw allow https # Untuk web server (port 443)
sudo ufw status verbose

Atur Alamat IP Statis (Opsional tapi Direkomendasikan untuk Server

Lebih baik bagi server untuk memiliki alamat IP statis. Edit /etc/network/interfaces:

sudo nano /etc/network/interfaces

Verifikasi Pengaturan IP

ip a

Membangun Web Server Python (Flask/Django dengan Gunicorn & Nginx)

Instal Dependensi Dasar

sudo apt install python3 python3-pip python3-venv nginx -y
  • python3: Interpreter Python 3.
  • python3-pip: Manajer paket untuk Python.
  • python3-venv: Modul untuk membuat lingkungan virtual Python.
  • nginx: Web server yang akan bertindak sebagai reverse proxy.

Buat Lingkungan Virtual dan Instal Gunicorn

Membuat lingkungan virtual adalah praktik terbaik untuk mengisolasi dependensi proyek Python Anda

Buat Direktori Proyek

sudo mkdir -p /var/www/nama_aplikasi_anda
sudo chown -R $USER:$USER /var/www/nama_aplikasi_anda
cd /var/www/nama_aplikasi_anda

Ganti nama_aplikasi_anda dengan nama yang sesuai untuk proyek Anda.

Buat dan Aktifkan Lingkungan Virtual

python3 -m venv venv
source venv/bin/activate

(Perhatikan bahwa prompt shell Anda akan berubah, menunjukkan bahwa Anda berada di lingkungan virtual.)

Instal Flask dan Gunicorn

Gunicorn (Green Unicorn) adalah WSGI HTTP Server for UNIX yang akan melayani aplikasi Flask Anda.

pip install Flask gunicorn

Buat aplikasi Flask sederhana (app.py):

# ~/myflaskapp/app.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Halo dari aplikasi Flask saya!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Uji aplikasi Flask Anda (opsional, untuk memastikan berfungsi):

python app.py

Anda seharusnya bisa mengakses aplikasi Flask Anda dari browser di http://<alamat_ip_server_anda>:5000. Tekan Ctrl+C untuk menghentikan server uji.

Konfigurasi Gunicorn

Gunicorn akan menjadi jembatan antara Nginx dan aplikasi Flask Anda. Kita akan membuat skrip untuk menjalankan Gunicorn.

Buat skrip gunicorn_start.sh di direktori proyek Anda:

nano ~/myflaskapp/gunicorn_start.sh

Isi dengan konten berikut:

#!/bin/bash
NAME="myflaskapp"                              # Nama aplikasi Anda
FLASKDIR=/home/<your_username>/myflaskapp      # Lokasi direktori proyek Flask Anda
SOCKFILE=/home/<your_username>/myflaskapp/sock                 # Kami akan menggunakan Unix socket
USER=<your_username>                           # Pengguna sistem yang akan menjalankan Gunicorn
GROUP=www-data                                 # Grup sistem yang akan menjalankan Gunicorn
NUM_WORKERS=3                                  # Jumlah worker Gunicorn yang disarankan (2 * CPU + 1)

echo "Starting $NAME as `whoami`"

# Aktifkan lingkungan virtual
cd $FLASKDIR
source venv/bin/activate

# Hapus socket lama jika ada
rm -f $SOCKFILE

# Jalankan Gunicorn
exec venv/bin/gunicorn ${FLASKDIR}/app:app \
  --name $NAME \
  --workers $NUM_WORKERS \
  --user=$USER --group=$GROUP \
  --bind=unix:$SOCKFILE \
  --log-level=info \
  --log-file=-

Penting: Ganti <your_username> dengan nama pengguna Linux Anda.

Berikan izin eksekusi pada skrip:

chmod +x ~/myflaskapp/gunicorn_start.sh

Buat Systemd Service untuk Gunicorn

Membuat layanan Systemd akan memungkinkan Gunicorn berjalan sebagai daemon dan dimulai secara otomatis saat boot server.

Buat file service Systemd:

sudo nano /etc/systemd/system/myflaskapp.service

Isi dengan konten berikut:

[Unit]
Description=Gunicorn instance to serve myflaskapp
After=network.target

[Service]
User=<your_username>
Group=www-data
WorkingDirectory=/home/<your_username>/myflaskapp
Environment="PATH=/home/<your_username>/myflaskapp/venv/bin"
ExecStart=/home/<your_username>/myflaskapp/venv/bin/gunicorn --workers 3 --bind unix:/home/<your_username>/myflaskapp/sock -m 007 app:app
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStopSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Penting: Ganti <your_username> dengan nama pengguna Linux Anda.

Muat ulang daemon Systemd, mulai layanan, dan aktifkan agar berjalan saat boot:

sudo systemctl daemon-reload
sudo systemctl start myflaskapp
sudo systemctl enable myflaskapp

Periksa status layanan Gunicorn:

sudo systemctl status myflaskapp

Anda akan melihat status active (running). Jika ada kesalahan, periksa log menggunakan journalctl -u myflaskapp.

Konfigurasi Nginx

Nginx akan berfungsi sebagai reverse proxy, meneruskan permintaan dari pengguna ke Gunicorn dan melayani file statis (jika ada).

Buat file konfigurasi Nginx untuk aplikasi Anda:

sudo nano /etc/nginx/sites-available/myflaskapp

Isi dengan konten berikut:

server {
    listen 80;
    server_name <your_domain_or_server_ip>; # Ganti dengan nama domain atau IP server Anda

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/<your_username>/myflaskapp/sock; # Path ke socket Gunicorn
    }

    # Jika Anda memiliki file statis, Anda bisa menambahkannya di sini
    # location /static {
    #     alias /home/<your_username>/myflaskapp/static;
    # }
}

Penting:

  • Ganti <your_domain_or_server_ip> dengan nama domain Anda (misalnya, example.com) atau alamat IP server Anda.

  • Ganti <your_username> dengan nama pengguna Linux Anda.

  • Hapus komentar bagian location /static jika Anda memiliki file statis di proyek Flask Anda dan sesuaikan alias jika diperlukan.

Buat symlink dari sites-available ke sites-enabled:

sudo ln -s /etc/nginx/sites-available/myflaskapp /etc/nginx/sites-enabled

Uji konfigurasi Nginx untuk sintaksis yang benar

sudo nginx -t

Anda akan melihat pesan "syntax is ok" dan "test is successful" jika tidak ada kesalahan.

Hapus konfigurasi Nginx default (opsional, tapi disarankan):

sudo rm /etc/nginx/sites-enabled/default

Muat ulang Nginx untuk menerapkan perubahan:

sudo systemctl restart nginx

Verifikasi

Sekarang, buka browser web Anda dan arahkan ke alamat IP server Anda atau nama domain yang telah Anda konfigurasikan. Anda akan melihat pesan “Halo dari aplikasi Flask saya!”.

Langkah Selanjutnya (Opsional tapi Disarankan):

HTTPS dengan Certbot: Untuk mengamankan aplikasi Anda dengan SSL/TLS, gunakan Certbot untuk mendapatkan sertifikat Let’s Encrypt gratis.

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d <your_domain>

Ikuti instruksi yang muncul di layar.

  • Manajemen Log: Periksa log Nginx (/var/log/nginx/access.log dan /var/log/nginx/error.log) dan log aplikasi Flask Anda (melalui journalctl -u myflaskapp) untuk memecahkan masalah.

  • Pengaturan Gunicorn Lebih Lanjut: Jelajahi opsi Gunicorn lainnya seperti jumlah worker, timeout, dan strategi worker untuk mengoptimalkan kinerja.

  • File Statis: Jika aplikasi Flask Anda memiliki file statis (CSS, JavaScript, gambar), pastikan Nginx dikonfigurasi untuk melayani file-file tersebut secara langsung (seperti yang ditunjukkan dalam komentar konfigurasi Nginx).

  • Database: Jika aplikasi Anda membutuhkan database, instal dan konfigurasikan database yang sesuai (misalnya, PostgreSQL atau MySQL).

Untuk menghentikan server Nginx di Debian 12, Anda bisa menggunakan perintah systemctl. Berikut adalah langkah-langkahnya:

sudo systemctl stop nginx

Dengan mengikuti langkah-langkah ini, Anda akan memiliki web server Flask yang berfungsi penuh dengan Nginx sebagai reverse proxy di Debian 12 Bookworm Anda.

Komentar