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.