Kocoy Group Website
Website Kocoy Group berbasis HTML, CSS, JavaScript, backend Python, dan MySQL. Backend melayani halaman frontend, API statistik, admin sederhana, tiket layanan, serta koneksi database lewat environment variable atau Wasmer Secrets.
Struktur Folder
KocoyGroup/
|-- backend/
| |-- app.py
| `-- data/
| |-- database.example.properties
| `-- schema.sql
|-- frontend/
| |-- assets/
| |-- css/
| |-- js/
| `-- pages/
|-- index.html
|-- requirements.txt
|-- run.bat
|-- run.sh
|-- wasmer.toml
`-- app.yaml
Menjalankan Lokal
Windows:
py -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python backend/app.py
Linux/macOS:
./run.sh
Buka:
http://localhost:5000
Konfigurasi Database
Untuk development lokal, salin contoh konfigurasi:
backend/data/database.example.properties
menjadi:
backend/data/database.properties
Lalu isi password database. File database.properties tidak perlu di-commit.
Untuk hosting, gunakan environment variable atau Wasmer Secrets:
KOCOY_DB_HOST=db.fr-pari1.bengt.wasmernet.com
KOCOY_DB_PORT=10272
KOCOY_DB_NAME=kocoygroup_database
KOCOY_DB_USER=user_87024e54
KOCOY_DB_PASSWORD=password_database
KOCOY_PUBLIC_URL=https://www.kocoygroup.site
KOCOY_TRUST_PROXY=auto
SECRET_KEY=random_secret_15
KOCOY_ADMIN_PASSWORD=password_admin
KOCOY_ADMIN_PIN=123456
Jalankan SQL awal dari:
backend/data/schema.sql
Deploy ke Wasmer
Install Wasmer CLI di PowerShell:
iwr https://win.wasmer.io -useb | iex
Login:
wasmer login
Project ini mem-pin runtime Wasmer ke wasmer/python versi 3.12.9+build.9. Install dependency ke folder vendor supaya bisa dibaca Wasmer:
py -m pip install -r requirements.txt --target vendor
Setiap kali requirements.txt berubah, rebuild vendor sebelum deploy supaya production memakai dependency terbaru:
Remove-Item -Recurse -Force vendor
py -m pip install -r requirements.txt --target vendor
Tambahkan secrets aplikasi:
wasmer app secrets create KOCOY_DB_PASSWORD "password_database"
wasmer app secrets create KOCOY_PUBLIC_URL "https://www.kocoygroup.site"
wasmer app secrets create SECRET_KEY "random_secret_15"
wasmer app secrets create KOCOY_ADMIN_PASSWORD "password_admin"
wasmer app secrets create KOCOY_ADMIN_PIN "123456"
Gunakan SECRET_KEY minimal 15 karakter dan KOCOY_ADMIN_PASSWORD yang panjang. Di production, aplikasi sengaja gagal start kalau SECRET_KEY belum diisi atau terlalu pendek. Password admin minimal 12 karakter. KOCOY_ADMIN_PIN bersifat opsional, tetapi direkomendasikan sebagai lapisan tambahan.
KOCOY_PUBLIC_URL harus memakai domain final HTTPS, misalnya https://www.kocoygroup.site. KOCOY_TRUST_PROXY=auto cocok untuk hosting di belakang proxy/CDN. Kalau origin benar-benar dibuka langsung tanpa proxy terpercaya, set KOCOY_TRUST_PROXY=0. Jika memakai domain staging tambahan, masukkan lewat KOCOY_ALLOWED_HOSTS=domain-staging.example.
Jika nilai database berbeda dari default, tambahkan juga:
wasmer app secrets create KOCOY_DB_HOST "host_database"
wasmer app secrets create KOCOY_DB_PORT "10272"
wasmer app secrets create KOCOY_DB_NAME "nama_database"
wasmer app secrets create KOCOY_DB_USER "user_database"
Tes lokal via Wasmer:
wasmer run .
Deploy:
wasmer deploy
Setelah selesai, Wasmer akan menampilkan URL aplikasi, versioned URL, dan link dashboard.
Route Utama
/ -> Beranda
/beranda -> Beranda
/layanan -> Layanan
/tentang-kami -> Tentang Kami
/pustaka -> Pustaka
/sertifikasi -> Sertifikasi
/kontak -> Kontak
/admin -> Panel admin
Catatan
- Backend membaca
PORTdari environment, default5000. wasmer.tomldanapp.yamlsudah mengaturPYTHONPATH=/app/vendor.- Jangan simpan password database di repository.
- Aplikasi memiliki rate limit in-memory untuk menahan scan/flood ringan. Nilai default bisa diubah lewat
KOCOY_RATE_LIMIT_GLOBAL,KOCOY_RATE_LIMIT_API,KOCOY_RATE_LIMIT_ADMIN,KOCOY_RATE_LIMIT_LOGIN, danKOCOY_RATE_LIMIT_BURST. - Admin login dan cek status tiket memakai verifikasi sesi server-side. TTL default 30 menit dan bisa diubah lewat
KOCOY_HUMAN_VERIFY_TTL. robots.txt, canonical URL, noindex admin/API/verify, dan redirect HTTPS www sudah dilayani dari backend.- Perlindungan DDoS besar tetap harus dilakukan di edge/CDN/WAF seperti Cloudflare karena traffic besar harus dihentikan sebelum mencapai runtime aplikasi.