Menyiapkan lingkungan produksi di Ubuntu Server
Berikut ini adalah **modul lengkap** untuk bagian **โMenyiapkan Lingkungan Produksi di Ubuntu Serverโ**, sebagai bagian dari **kuliah Web Programming** dengan topik **Pengenalan Deployment Aplikasi Web**. Modul ini disesuaikan untuk **Ubuntu 24.04 LTS**, **tanpa menggunakan tools dari Microsoft sama sekali**.
---
- ๐งฑ Modul: Menyiapkan Lingkungan Produksi di Ubuntu Server
- ๐ฏ Tujuan Pembelajaran
Setelah menyelesaikan modul ini, mahasiswa diharapkan mampu: - Menyiapkan server Ubuntu 24.04 untuk deployment aplikasi web. - Menginstall software dasar seperti Nginx, UFW, Node.js, Python, dan database. - Memahami struktur direktori produksi dan praktik keamanan dasar. - Melakukan deployment aplikasi sederhana (Node.js / Flask / static HTML).
---
- ๐ 1. Persiapan Awal
- 1.1 Update Sistem
```bash sudo apt update && sudo apt upgrade -y ```
- 1.2 Install Perangkat Tambahan
```bash sudo apt install curl git zip unzip htop ufw -y ```
---
- ๐ 2. Instalasi dan Konfigurasi NGINX
- 2.1 Install NGINX
```bash sudo apt install nginx -y ```
- 2.2 Cek Status
```bash sudo systemctl status nginx ```
- 2.3 Akses di Browser
Coba akses IP server dari browser: `http://IP_ADDRESS` Jika muncul halaman default NGINX, berarti berhasil.
---
- ๐ฅ 3. Keamanan Dasar Server
- 3.1 Aktifkan Firewall (UFW)
```bash sudo ufw allow OpenSSH sudo ufw allow 'Nginx Full' sudo ufw enable sudo ufw status ```
- 3.2 Buat User Non-root (Opsional tapi disarankan)
```bash sudo adduser devuser sudo usermod -aG sudo devuser ```
---
- ๐พ 4. Menambahkan Bahasa Pemrograman
- 4.1 Node.js (LTS)
```bash curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt install nodejs -y node -v npm -v ```
- 4.2 Python 3.12 (Sudah default di Ubuntu 24.04)
```bash python3 --version sudo apt install python3-pip python3-venv -y ```
- 4.3 PHP (Jika Butuh)
```bash sudo apt install php php-cli php-fpm -y php -v ```
---
- ๐๏ธ 5. Install Database
- 5.1 PostgreSQL
```bash sudo apt install postgresql postgresql-contrib -y sudo systemctl enable postgresql ```
- 5.2 MySQL / MariaDB
```bash sudo apt install mariadb-server -y sudo mysql_secure_installation ```
---
- โ๏ธ 6. Struktur Direktori Produksi (Rekomendasi)
``` /var/www/
โโโ nama_aplikasi/ โโโ app/ # Kode utama aplikasi โโโ static/ # File statis (gambar, CSS, JS) โโโ templates/ # HTML atau template engine โโโ logs/ # File log
```
Buat direktori: ```bash sudo mkdir -p /var/www/namaproject sudo chown -R $USER:$USER /var/www/namaproject ```
---
- ๐ 7. Contoh Deployment
- 7.1 Deploy Aplikasi Node.js
```bash cd /var/www/namaproject npm init -y npm install express ```
- app.js**
```javascript const express = require('express'); const app = express(); app.get('/', (req, res) => res.send('Halo Dunia dari Express!')); app.listen(3000); ```
- Systemd Service**
```bash sudo nano /etc/systemd/system/namaproject.service ```
```ini [Unit] Description=Node.js App
[Service] ExecStart=/usr/bin/node /var/www/namaproject/app.js Restart=always User=www-data Group=www-data Environment=NODE_ENV=production
[Install] WantedBy=multi-user.target ```
```bash sudo systemctl daemon-reexec sudo systemctl enable namaproject sudo systemctl start namaproject ```
- 7.2 Konfigurasi NGINX sebagai Reverse Proxy
```bash sudo nano /etc/nginx/sites-available/namaproject ```
```nginx server {
listen 80; server_name example.com;
location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }
} ```
```bash sudo ln -s /etc/nginx/sites-available/namaproject /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx ```
---
- ๐ 7.3 Deploy Aplikasi Flask (Python)
```bash python3 -m venv venv source venv/bin/activate pip install flask gunicorn ```
- app.py**
```python from flask import Flask app = Flask(__name__)
@app.route("/") def hello():
return "Halo Dunia dari Flask!"
```
- Gunicorn (production-ready WSGI server)**
```bash gunicorn --bind 0.0.0.0:5000 app:app ```
- Systemd service untuk Flask**
```bash sudo nano /etc/systemd/system/flaskapp.service ```
```ini [Unit] Description=Flask App
[Service] User=www-data Group=www-data WorkingDirectory=/var/www/namaproject ExecStart=/var/www/namaproject/venv/bin/gunicorn --workers 3 --bind 0.0.0.0:5000 app:app
[Install] WantedBy=multi-user.target ```
```bash sudo systemctl enable flaskapp sudo systemctl start flaskapp ```
- NGINX Reverse Proxy**
Ganti `localhost:3000` dengan `localhost:5000` seperti konfigurasi sebelumnya.
---
- ๐ง 8. SSL Gratis dengan Let's Encrypt
```bash sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx ```
---
- ๐ง Tips Tambahan
- Gunakan `fail2ban` untuk perlindungan brute force:
```bash sudo apt install fail2ban -y ```
- Log aplikasi bisa diarahkan ke `/var/log/app.log` dengan konfigurasi di aplikasi.
- Gunakan `.env` file untuk konfigurasi rahasia (gunakan `dotenv` di Node.js / Python).
---
- ๐ Tugas Mahasiswa
1. Deploy aplikasi statis (HTML, CSS, JS) menggunakan NGINX. 2. Deploy aplikasi Node.js sederhana dengan NGINX reverse proxy. 3. (Opsional) Deploy aplikasi Flask dengan Gunicorn dan NGINX. 4. Konfigurasi UFW, user non-root, dan aktivasi firewall.
---
Kalau kamu mau aku ubah ini jadi PDF atau masukin ke format modul kuliah (docx / LaTeX / HTML), tinggal bilang aja!