Konfigurasi PHP untuk Aplikasi Berat?

Yang paling sulit dalam implementasi software adalah bagaimana server dikonfigurasi? Ini adalah bagian paling rumit. Banyak variabel yang saling mempengaruhi. Beberapa kali saya melakukan tune-up server dan ya seperti coba-coba. Untuk menghasilkan konfigurasi optimal tentu tidak mudah.

Saya mencoba bertanya kepada chatgpt untuk konfigurasi awal yang bisa dicoba. Saya sebenarnya tidak yakin juga, tapi daripada toidak ada referensi sama sekali 🙂

Untuk aplikasi berat seperti LimeSurvey, yang membutuhkan konfigurasi PHP yang lebih kuat dan optimal, Anda harus memastikan bahwa server web Anda dapat menangani beban tersebut dengan efisien. LimeSurvey adalah aplikasi survei yang kompleks dan memerlukan konfigurasi yang baik untuk performa yang optimal.

Berikut adalah beberapa pengaturan dan praktik terbaik untuk mengonfigurasi server PHP dan server web Anda untuk menjalankan aplikasi berat seperti LimeSurvey:

1. Konfigurasi PHP (php.ini)

Ubah file php.ini untuk meningkatkan batas memori, waktu eksekusi, dan pengaturan lainnya yang diperlukan untuk aplikasi berat:

; Memory limit
memory_limit = 1G

; Maximum execution time of each script, in seconds
max_execution_time = 300

; Maximum amount of time each script may spend parsing request data
max_input_time = 300

; Maximum number of input variables
max_input_vars = 10000

; Maximum size of POST data that PHP will accept
post_max_size = 128M

; Maximum allowed size for uploaded files
upload_max_filesize = 128M

; The number of seconds a script is allowed to wait for input data
default_socket_timeout = 60

; Maximum amount of memory a script may consume
realpath_cache_size = 4096k
realpath_cache_ttl = 120

; Error handling and logging
log_errors = On
error_log = /var/log/php_errors.log

; Opcache settings (for performance improvement)
opcache.enable = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 2
opcache.fast_shutdown = 1

2. Konfigurasi Apache (VirtualHost)

Jika Anda menggunakan Apache, tambahkan pengaturan PHP dalam blok VirtualHost:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html/limesurvey

    <Directory /var/www/html/limesurvey>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted

        # PHP settings
        php_value memory_limit 1G
        php_value max_execution_time 300
        php_value max_input_time 300
        php_value max_input_vars 10000
        php_value post_max_size 128M
        php_value upload_max_filesize 128M
        php_value default_socket_timeout 60
        php_value realpath_cache_size 4096k
        php_value realpath_cache_ttl 120

        # Opcache settings
        php_flag opcache.enable 1
        php_value opcache.memory_consumption 256
        php_value opcache.interned_strings_buffer 16
        php_value opcache.max_accelerated_files 10000
        php_value opcache.revalidate_freq 2
        php_flag opcache.fast_shutdown 1
    </Directory>
</VirtualHost>

3. Konfigurasi MySQL/MariaDB

LimeSurvey juga sangat bergantung pada database. Berikut adalah beberapa pengaturan dasar untuk MySQL/MariaDB:

[mysqld]
max_connections = 500
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
max_allowed_packet = 64M
query_cache_type = 1
query_cache_limit = 1M
query_cache_size = 64M

4. Konfigurasi Nginx (Jika Menggunakan Nginx)

Jika Anda menggunakan Nginx sebagai server web, Anda bisa menambahkan pengaturan berikut di file konfigurasi Nginx:

server {
    listen 80;
    server_name example.com;

    root /var/www/html/limesurvey;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;

        # PHP settings
        fastcgi_param PHP_VALUE "
            memory_limit = 1G
            max_execution_time = 300
            max_input_time = 300
            max_input_vars = 10000
            post_max_size = 128M
            upload_max_filesize = 128M
            default_socket_timeout = 60
            realpath_cache_size = 4096k
            realpath_cache_ttl = 120
        ";

        # Opcache settings
        fastcgi_param PHP_VALUE "
            opcache.enable = 1
            opcache.memory_consumption = 256
            opcache.interned_strings_buffer = 16
            opcache.max_accelerated_files = 10000
            opcache.revalidate_freq = 2
            opcache.fast_shutdown = 1
        ";
    }

    location ~ /\.ht {
        deny all;
    }
}

5. Praktik Terbaik

  • Caching: Gunakan mekanisme caching seperti Redis atau Memcached untuk mengurangi beban pada server database.
  • Load Balancing: Pertimbangkan untuk menggunakan load balancer jika Anda mengharapkan jumlah pengguna yang sangat tinggi.
  • Scaling: Skala aplikasi secara horizontal dengan menambahkan lebih banyak server untuk membagi beban.
  • Monitoring: Implementasikan alat monitoring seperti New Relic, Datadog, atau Grafana untuk memantau kinerja server dan aplikasi.

Dengan mengikuti panduan ini, Anda dapat memastikan bahwa LimeSurvey berjalan dengan lancar dan efisien bahkan di bawah beban pengguna yang tinggi. Pastikan untuk menguji konfigurasi ini secara menyeluruh di lingkungan staging sebelum menerapkannya di lingkungan produksi.

VPS Series: Cloud Panel

Bagi pengguna VPS kecil kecilan terutama pengguna processor ARM, saya kira menggunakan cloudpanel merupakan pilihan menarik.

Saya pernah melakukan instalasi aaPanel di ARM, namun prosedur compile sources code  pada ARM itu, membuatnya menjadi sangat lama. Saya belum mencobanya untuk teknik yang digunakan Cloud Panel.

Cloud panel saya kira adalah solusi sederhana untuk komputer ARM. Kelebihannya dibanding aaPanel adalah Multi User.

CloudPanel menawarkan berbagai fitur untuk meningkatkan keamanan website Anda di server. Mari kita lihat apa saja fiturnya:

1. Isolasi Situs

CloudPanel membuat website Anda seperti berada di ruangan sendiri-sendimi di dalam server. Ini membuat masalah keamanan pada satu website tidak akan mempengaruhi website lainnya.

2. Firewall Mudah Digunakan

Atur dengan mudah siapa saja yang boleh mengakses website Anda. Izinkan, blokir, atau batasi akses ke layanan atau port tertentu menggunakan antarmuka UFW yang simpel.

3. Batasi Akses dengan IP

Ingin akses CloudPanel Anda lebih aman? Batasi akses hanya dari alamat IP tertentu (misalnya melalui VPN).

4. Blokir IP dan Bot

CloudPanel bisa memblokir akses dari alamat IP atau domain yang tidak diinginkan. Ada juga fitur pemblokir bot yang bisa menolak akses bot ke semua website Anda sekaligus.

5. Otentikasi Dasar

Otentikasi Dasar membantu Anda membatasi akses website saat sedang dalam tahap pengembangan atau pengujian. Anda bisa mengatur kontrol akses dan membuat daftar putih pengguna dan IP tertentu yang diizinkan masuk.

6. Otentikasi Dua Faktor

Tambahkan lapisan keamanan ekstra dengan Otentikasi Dua Faktor untuk login CloudPanel yang lebih aman.

7. Sertifikat SSL Let’s Encrypt Gratis

Dapatkan sertifikat SSL Let’s Encrypt gratis hanya dengan sekali klik! CloudPanel bisa memasang dan memperbarui sertifikat ini secara otomatis untuk beberapa domain dan subdomain sekaligus.

8. Backup Otomatis

CloudPanel menawarkan backup otomatis seluruh Instance Anda, termasuk semua disk, tanpa mengganggu aktivitas website (tanpa downtime).

9. Integrasi Cloudflare

Arahkan lalu lintas website Anda melalui Cloudflare dan manfaatkan fitur keamanan seperti perlindungan DDoS, DNS, dan Web Application Firewall (WAF) yang terintegrasi.

Cekidot friend

 

Alexa Smart Asistant di STB HG680P

Menemukan tulisan di Mr Bibbo bagaimana menjadikan STB HG680P menjadi smart speaker. Nanti akan kita coba kalau sdh ada waktu longgar.

Saya rasa ini juga bisa diimplementasikan pada Komputer saku Raspberry.

Saya kira ini adalah xperience yang sangat menarik.

Cekidot disini.

 

Membuat Backup Blog dengan rsync

Saya spill ya bro, bahwa mainan Server Linux, walaupun kita tempatkan di server kacang STB HG680P, tapi memberikan pengalaman yang sangat kaya.

Setelah membuat blog, mengonlinekannya di dunia maya, maka yang perlu anda lakukan adalah backup.

Bagaimana jika suatu saat disk systemmu corupt? Atau systemmu crash? maka apa yang kamu buat menjadi sia-sia. Data sekian lama akan hilang.

Ya, saya akan membuat backup untuk blog ini. Blog ini berada pada Disk A (yg sebenarnya hanya berupa sdcard) dan akan saya copy di Disk B ( yg berupa HDD 2.5)

Saya menggunakan rsync untuk membackup file karena rsync bisa menyelaraskan 2 folder. Sedangkan databasenya dibackup menggunakan mysqldump

#!/bin/bash

# mensinkronkan folder-folder
rsync -avz /var/www/domain.com/ /backup/domain.com/www --delete

#membackup database mysql
mysqldump -uwordpress -prahasia wordpress | gzip > /backup/domain.com/database/wordpress-$(date +%d%m%Y).sql.gz

dengan penjelasan sbb:

  1. rsync -avz /var/www/domain.com/ /backup/domain.com/www --delete:
    • Perintah rsync digunakan untuk menyalin dan mensinkronkan file dan direktori antara dua lokasi.
    • Dalam kasus ini, perintah ini menyalin isi dari direktori /var/www/domain.com/ ke direktori tujuan /backup/domain.com/www.
    • Opsi -avz menentukan:
      • -a: Mode arsip, mempertahankan atribut file seperti izin dan tanda waktu.
      • -v: Menampilkan output secara terperinci.
      • -z: Mengaktifkan kompresi selama transfer.
    • Opsi --delete menginstruksikan rsync untuk menghapus file di direktori tujuan yang tidak ada di direktori sumber, sehingga menjaga agar direktori tujuan selalu sama dengan direktori sumber.
  2. mysqldump -uwordpress -prahasia wordpress | gzip > /backup/domain.com/database/wordpress-$(date +%d%m%Y).sql.gz:
    • Perintah mysqldump digunakan untuk membuat salinan dari database MySQL.
    • Dalam kasus ini, perintah ini menciptakan salinan database WordPress.
    • -uwordpress -prahasia adalah opsi untuk menentukan pengguna dan kata sandi yang digunakan untuk mengakses database MySQL. Di sini, pengguna adalah ‘wordpress’ dan kata sandinya adalah ‘rahasia’.
    • wordpress adalah nama database yang akan disalin.
    • Output dari mysqldump kemudian diteruskan ke perintah gzip untuk mengompresinya.
    • Hasil dari kompresi tersebut disimpan di /backup/domain.com/database/ dengan nama file wordpress-$(date +%d%m%Y).sql.gz, di mana bagian $(date +%d%m%Y) digunakan untuk menambahkan tanggal saat ini ke nama file dalam format “DDMMYYYY”.

Apabila backup kamu tempatkan di server berbada maka kamu bisa menggunakan perintah sbb:

#!/bin/bash

# Menjalankan rsync untuk menyalin file dari /var/www/domain.com/ ke server tujuan
rsync -avz /var/www/domain.com/ user@serverB:/backup/domain.com/www --delete

# Menjalankan mysqldump untuk membuat salinan database dan menyimpannya dalam file lokal
mysqldump -uwordpress -prahasia wordpress | gzip > /backup/domain.com/database/wordpress-$(date +%d%m%Y).sql.gz

# Mentransfer file database ke server tujuan menggunakan scp
scp /backup/domain.com/database/wordpress-$(date +%Y%m%d).sql.gz user@serverB:/backup/domain.com/database/

Kalau sudah selesai kita tinggal melakukan crontab setiap jam 12 malam. lakukan perintah sudo crontab -e.

Lalu masukkan skrip dibawah

0 0 * * * /bin/bash /backup/backup.sh

Ok Enjoy backup 🙂

Pilih Mana?

Perkembangan Teknologi yang sangat pesat 5 – 10 tahun terakhir menyebabkan belajar teknologi menjadi tidak mudah seperti dulu. Salah satu yang membuatnya tak mudah adalah banyaknya pilihan.

Dulu pilihan populer untuk belajar web hanya PHP – MySQL – HTML, CSS, JQuery.  Orang belajar itu aja sudah bisa menjadi web developer mumpuni.

Namun sekarang lain. ada banyak teknologi yang popularitasnya mirip-mirip.

Di Backend selain PHP ada NodeJS, Python, Golang, Rust.

Bahkan di Javascript saja,  kalau dulu hanya ada jQuery sekarang ada banyak framework turunan JS seperti Reach, Vue, Next, Nest dan banyak lagi …

Intinya saya juga lama macet gara-gara pemilihan bahasa dan framework. Jangan sampai kita capek-capek belajar akhirnya tidak banyak dipakai.

Seperti misalnya, ketika saya belajar Python – Flsk dengan harapan bisa memanfaatkan fitur datascience yg ada di Python untuk diumpankan di PHP/JS. Tapi saya fikir kalau tidak ada projectnya buat apa,  toh kalau tiga sampai lima bulan tidak kita pakai toh lupa juga …

BTW, mungkin saya ingin menguasai 2 aja dulu.

  • PHP dengan Laeavel 11
  • Node dengan ExpressJS

Kayaknya dua itu cukup untuk sekadar mengerjakan project kecil. Kalau nanti pengin project frontend mungkin nanti Vue atau Nextjs.

Demikian omon-omon gak jelas kita hari ini. Mudah-mudahan kita diberi Allah banyak rezeki. Amiin.