# Panduan Pasang Atlas Histo di nurazizlab.my.id (cPanel)

Paket ini berisi aplikasi Flask + dump database. Tidak butuh cron, tidak butuh
Node, dan tidak memanggil CDN.

## 0. Cek dulu: hosting Anda harus punya Python

Aplikasi ini **Python (Flask)**, bukan PHP. Di cPanel carilah salah satu:

- **Setup Python App** / **Application Manager** (biasanya di grup *Software*), atau
- ikon **Python** di halaman utama cPanel.

Kalau tidak ada, hubungi support Arenhost: “Mohon aktifkan fitur *Setup Python App*
(Passenger) dengan Python 3.9 atau lebih baru untuk domain nurazizlab.my.id.”
Tanpa itu, langkah 4–7 tidak bisa dijalankan.

## 1. Siapkan database

1. cPanel → **MySQL Databases**:
   - buat database, mis. `nurazizl_atlas`
   - buat user, mis. `nurazizl_atlas`, dengan sandi kuat
   - tambahkan user itu ke database dengan **ALL PRIVILEGES**
2. Buka **phpMyAdmin** → pilih database tadi → tab **Import** →
   unggah `sql/atlas-histo.sql` → **Go**.
   Dump ini sudah memuat 10 tabel, 1 preparat contoh (foto Mu + 3 anotasi),
   dan 1 akun admin `nuraziz`.
3. Catat tiga hal: nama database, nama user, sandi user.

## 2. Unggah berkas

1. cPanel → **File Manager** → buat folder, mis. `/home/USER/atlas` (di luar
   `public_html`, lebih aman karena kode tidak bisa diunduh lewat URL).
2. Unggah `atlas-histo-hosting.zip` ke folder itu, lalu **Extract**.
   Struktur akhirnya:

   ```
   atlas/
     passenger_wsgi.py
     requirements.txt
     PANDUAN-PASANG.md
     backend/            (kode aplikasi)
     assets/uploads/     (foto preparat + proxy 1600 px)
     sql/atlas-histo.sql
   ```

3. Pastikan folder `assets/uploads` bisa ditulis: klik kanan → **Change Permissions**
   → 775 (atau 755 bila hosting memakai pemilik yang sama dengan proses Python).

## 3. Buat aplikasi Python

1. cPanel → **Setup Python App** → **Create Application**:
   - Python version: 3.9–3.12 (pilih yang tersedia)
   - Application root: `atlas`
   - Application URL: pilih domain/subdomain, mis. `atlas.nurazizlab.my.id`
     (atau `nurazizlab.my.id/atlas` bila ingin di subfolder)
   - Application startup file: `passenger_wsgi.py`
   - Entry point: `application`
2. Setelah dibuat, cPanel menampilkan blok **Environment variables**. Isi:

   | Nama | Nilai |
   |---|---|
   | `HIST_DB_HOST` | `localhost` |
   | `HIST_DB_NAME` | `nurazizl_atlas` |
   | `HIST_DB_USER` | `nurazizl_atlas` |
   | `HIST_DB_PASS` | (sandi database Anda) |
   | `HIST_SECRET` | string acak panjang, mis. hasil `openssl rand -hex 32` |

   `HIST_ADMIN_PASS` tidak perlu diisi: akun admin sudah ada di dump.

3. Di bagian yang sama, jalankan **Run Pip Install** dengan
   `requirements.txt` (atau lewat terminal: `source .../bin/activate && pip install -r requirements.txt`).
4. Klik **Restart** pada aplikasi Python.

## 4. Masuk dan amankan

1. Buka URL aplikasi → halaman **Masuk**.
2. Akun admin: `nuraziz`. Sandi sementara ada di server lab:
   `/opt/data/apps/.runtime/atlas-admin-awal.txt`.
   Aplikasi akan langsung meminta Anda menggantinya.
3. Setelah masuk: **Akun & kelas** → buat akun dosen dan kelas (kode gabung 6 huruf),
   lalu bagikan kode ke mahasiswa.
4. Periksa foto contoh di **Kelola** → preparat “Mu” → **Kalibrasi skala bar**
   (bar 100 µm terukur 185 px → 0,54 µm/px) atau ganti dengan foto Anda sendiri.

## 5. Yang perlu diketahui

- **Tidak ada cron.** Pengerjaan ujian yang ditinggal dinilai otomatis saat
  halaman ujian atau rekap dibuka.
- **Batas unggah**: aplikasi memakai 25 MB; Passenger/cPanel bisa lebih kecil.
  Kalau unggahan besar gagal, naikkan `LimitRequestBody`/`upload_max_filesize`
  di hosting atau kecilkan foto sebelum unggah (aplikasi menormalkan ke 8000 px).
- **Static** dilayani Flask. Untuk lalu lintas kelas kecil ini cukup; kalau nanti
  berat, aktifkan `mod_lsapi`/cache di hosting.
- **Backup**: cukup `mysqldump` database + folder `assets/uploads`.
- **Kalau hosting tidak bisa Python**: dua jalur lain — (a) minta support
  mengaktifkan Python App, atau (b) jalankan atlas di server lab (seperti sekarang)
  lalu ekspos lewat Cloudflare Tunnel/Tailscale Funnel ke subdomain. Versi PHP
  butuh penulisan ulang besar (penampil zoom, penilaian, dan ujian semuanya di
  Python sekarang) — tidak disarankan.
