Lewati ke isi

Kumpulan permasalahan paska instalasi GPF-Bitnami-Wordpress

Plugins

Berikut adalah daftar plugin utama yang perlu diinstal dari aspek infrastruktur (diurutkan secara alfabetis):

Galat AH01075

AH01075: Error dispatching request to : (polling)

Pesan kesalahan lengkap:

[Sat Oct 15 13:21:55.322132 2016] [proxy_fcgi:error] [pid 10460:tid 140583112689408] (70007)The timeout specified has expired: [client 162.158.79.198:9552] AH01075: Error dispatching request to : (polling)

Indikasi

Layanan httpd dan php-fpm, mengalami gagal fungsi dan mati mendadak

Penanganan

Mengganti nilai AllowOverride None menjadi AllowOverride All pada berkas httpd-app.conf pada direktori /opt/bitnami/apps/wordpress/conf

Rujukan: https://community.bitnami.com/t/ah01071-proxy-fcgi-error-mod-rewirte-issue-solved/29076

wp-cron

Menonaktifkan wp-cron

Sunting berkas wp-admin.php, lalu tambahkan

define('DISABLE_WP_CRON', true);

Sebelum pengaturan basis data. Karena fungsi cron adalah untuk menerakan pembaruan setelah konten diperbarui, jadi untuk meringankan beban apache dan php proses ini harus tetap ada. Tambahkan proses ini pada sistem dasar dengan menjalankan sudo crontab -e, lalu tambakan pada baris paling bawah.

0 * * * * su daemon -s /bin/sh -c "cd /opt/bitnami/apps/wordpress/htdocs/; /opt/bitnami/php/bin/php -q wp-cron.php"

Setelah itu jalankan ulang webserver dengan perintah sudo /opt/bitnami/ctlscript.sh restart

Sepertinya pengaturan ini krusial dan sangat penting

Rujukan:

HTTPS

Sunting berkas /opt/bitnami/apache2/conf/apps/wordpress/httpd-vhosts.conf, lalu tambahkan:

<VirtualHost *:80>
  ...
  DocumentRoot "/opt/bitnami/apps/wordpress/htdocs"
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L]
  ...
</VirtualHost>

Lalu restart apache sudo /opt/bitnami/ctlscript.sh restart

Rujukan: https://docs.bitnami.com/google/components/apache/#how-to-force-https-for-all-applications

Apache Pagespeed & PHP OPCache

Menonaktifkan modul Apache Pagespeed dan PHP OPCache, dengan alasan sudah digunakannya Cloudflare yang berfungsi untuk sebagai cache proxsi dimana mempercepat penyajian suatu halaman pada webserver, maka modul mod_pagespeed bawaan Apache sudah tidak diperlukan lagi dan juga dapat meringankan sumber daya pada server.

Sunting berkas opt/bitnami/apache2/conf/httpd.conf, komentari baris agar seperti tampilan berikut

#Include conf/pagespeed.conf
#Include conf/pagespeed_libraries.conf

Lalu untuk menonaktifkan modul PHP OPCache sunting berkas /opt/bitnami/php/etc/php.ini, ubah nilai opcache.enable = 1 menjadi opcache.enable = 0

Setelah selesai restart dengan menjalankan perintah sudo /opt/bitnami/ctlscript.sh restart

Rujukan: https://docs.bitnami.com/google/components/apache/#how-to-disable-the-cache-in-the-server

Uninstall Stackdriver agent

Wordpress pada GCP-Bitnami secara bawaan menginstall alat pencatatan dan pemantauan. Untuk mengurangi beban server jalankan perintah di bawah

sudo apt-get remove stackdriver-agent -y
sudo service google-fluentd stop
sudo apt-get remove google-fluentd google-fluentd-catch-all-config

Rujukan:

unattended-upgrades

Saat melakukan pengelolaan terhadap satu sampai dengan 3 mesin, proses menjalankan perintah apt-get update; apt-get upgrade -y masih cukup menyenangkan. Namun bayangkan jika server yang diurus ada selusin atau bahkan lebih. Walaupun menjalankan pembaruan otomatis tanpa konfirmasi atau pengujian kompabilitas server juga tidak disarankan, namun tidak adanya pembaruan sama sekali juga adalah suatu hal yang tidak kalau buruk. Jadi pengaturan untuk menajalankan pembaruan yang sifatnya keamanan sangata dibutuhkan. Untuk mengaktifkan pembaruan server secara otomatis lakukan langkah-langkah berikut.

apt-get install unattended-upgrades
nano /etc/apt/apt.conf.d/02periodic

Silakan hapus konten yang ada jika sudah cukup paham dan ganti dengan isi di bawah, atau cukup dengan menyesuaikannya saja

APT::Periodic::Enable "1";
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattendeed-Upgrade "1";

Satu konfigurasi lagi

nano /etc/apt/apt.conf.d/50unattended-upgrades

Pastikan pembaruan yang dilakukan sifatnya adalah hanya keamanan

...
Unattended-Upgrade::Origins-Pattern {
        ...
        "origin=Debian,codename=${distro_codename},label=Debian-Security";
};

Surel keluar

GCP membatasi penggunaan port 25 untuk protokol SMTP, untuk itu perlu sedikit modifikasi. Terlampir rujukannya

Rujukan:

Hak akses direktori dan berkas

Direktori & berkas, perhatikan atribut -type penggunaan d untuk direktori, sedangkan f untuk berkas (file)

direktori wp-content/uploads

Penggunan daemon disini adalah seperti pemetaan yang dilakukan oleh bitnami sebagai pengguna www-data pada lazimnya sistem linux biasa.
Untuk mengunggah aset media berikan sementara kepemilikan kepada bitnami, lalu setelah selesai kembalikan kepada daemon. Pastikan printah di bawah dieksekusi dengan sudo

#
sudo su
HTDIR=/opt/bitnami/apps/wordpress/htdocs
WPDIR=/opt/bitnami/apps/wordpress
DEFOWN='daemon:daemon'
CUSOWN='bitnami:daemon'
# HTDIR=/home/deploy/digitalfinger.id/dev/public
# DEFOWN='deploy:deploy'
#
find $HTDIR -type d -exec chown $DEFOWN {} +
find $HTDIR -type f -exec chown $DEFOWN {} +
find $HTDIR -type d -exec chmod 0755 {} +
find $HTDIR -type f -exec chmod 0644 {} +
find $HTDIR -type f -exec chmod +r {} +
#
cd $HTDIR
chown $CUSOWN wp-config.php .htaccess .user.ini
chown $CUSOWN $HTDIR
chown $CUSOWN $WPDIR
chmod g+w wp-config.php .htaccess .user.ini
chmod g+w $HTDIR
chmod g+w $WPDIR
#
cd $WPDIR
mkdir security
chown -R bitnami:daemon security
chmod g+w security

Rujukan: http://superuser.com/questions/91935/how-to-chmod-all-directories-except-files-recursively

Migrasis basis data

Gunakan plugin ini untuk mempermudah proses uji coba alamat WP dengan IP dan alamat IP dengan nama domain sesungguhnya

Rujukan: https://wordpress.org/plugins/wp-migrate-db/

Kueri SQL

Menghapus entri pada Wordpress dengan kueri SQL

Komentar yang belum disetujui

Periksa

SELECT COUNT(*) FROM `wp_comments` WHERE `comment_approved` = '0';

Hapus

DELETE FROM wp_comments WHERE comment_approved = '0';

Revisi tulisan, laman, dll

Periksa entri yang ada

SELECT * FROM `wp_posts` a
LEFT JOIN `wp_term_relationships` b ON (a.`ID` = b.`object_id`)
LEFT JOIN `wp_postmeta` c ON (a.`ID` = c.`post_id`)
WHERE a.`post_type` = 'revision'; */

Hapus

DELETE a,b,c FROM `wp_posts` a
LEFT JOIN `wp_term_relationships` b ON (a.`ID` = b.`object_id`)
LEFT JOIN `wp_postmeta` c ON (a.`ID` = c.`post_id`)
WHERE a.`post_type` = 'revision';

Rujukan:

Pemantauan Log

Lokasi layanan utama server:

  • MySQL /opt/bitnami/mysql/data/mysqld.log
  • PHP-FPM /opt/bitnami/php/var/log/php-fpm.log
  • Apache /opt/bitnami/apache2/logs/error_log

Install

Mengatur ulang sandi bawaan Bitnami-Wordpress

Jika tidak dapat mengakses panel WP, jalankan perintah pada shell untuk mengatur ulang kata sandi penguna bawaan atau user

mysql -u root -p -D bitnami_wordpress -e 'UPDATE wp_users SET user_pass=MD5("'sandiawal'") WHERE ID='1';'

Rujukan: https://docs.bitnami.com/google/apps/wordpress/#how-to-reset-the-wordpress-admin-password-from-the-command-line

Pencadangan DB harian

Otomatis mencadangkan basis data dengan menggunakan crontab, buat berkas shell sederhana dan beri nama misalkan dbBackup.sh. Isikan skrip shell seperti di bawah, lalu simpan pada folder dimana nanti skrip akan dipanggil. Unduh skrip dbBackup.sh

#!/bin/sh

USER="pengguna_pencadangan"
PASSWORD="sandi_pengguna"
OUTPUT="/lokasi/tujuan/pencadangan"

rm "$OUTPUT/*gz" > /dev/null 2>&1

databases=`mysql --user=$USER --password=$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep dbprefix`

for db in $databases; do
    if [[ "$db" != "information_schema" ]] && [[ "$db" != _* ]] ; then
        echo "Dumping database: $db"
        mysqldump --force --opt --user=$USER --password=$PASSWORD --databases $db > $OUTPUT/`date +%Y%m%d`.$db.sql
        gzip $OUTPUT/`date +%Y%m%d`.$db.sql
    fi
done

Jalankan perintah sudo crontab -e, dan tambahkan pada bari paling akhir entri di bawah

0 0 * * * su daemon -s /bin/sh -c /home/bitnami/cad/arsipBdHarian.sh

Rujukan:

Menonaktifkan iklan Bitnami

sudo /opt/bitnami/apps/wordpress/bnconfig --disable_banner 1

Rujukan: https://docs.bitnami.com/google/components/bninfo/

MySQL gagal resolve hostname

Berikut pesan peringatan yang terus muncul

2016-11-01 00:02:34 5062 [Warning] IP address '101.101.101.101' has been resolved to the host name '202.202.202.202.bc.googleusercontent.com', which resembles IPv4-address itself.

Penanganan: Buka berkas /opt/bitnami/mysql/my.cnf, lalu tambahkan baris berikut pada berkas tersebut

[mysqld]
skip-host-cache
skip-name-resolve

Rujukan: http://serverfault.com/questions/341290/mysql-warning-ip-address-could-not-be-resolved

Postman plugin konflik

Postman: wp_mail has been declared by another plugin or theme, so you won't be able to use Postman until the conflict is resolved

Jalankan

find ./wp-content -name \*.php | xargs grep "/pluggable.php"

Hasil

./wp-content/plugins/jetpack/modules/sso.php:     /** This filter is documented in core/src/wp-includes/pluggable.php */
./wp-content/plugins/jetpack/modules/sso.php:   /** This filter is documented in core/src/wp-includes/pluggable.php */
./wp-content/plugins/jetpack/modules/sharedaddy/sharedaddy.php: /** This filter is documented in core/src/wp-includes/pluggable.php */
./wp-content/plugins/wordfence/lib/wfLog.php:     require_once ABSPATH . WPINC . '/pluggable.php';
./wp-content/plugins/wordfence/lib/wfUtils.php:     require_once ABSPATH . WPINC . '/pluggable.php';
./wp-content/plugins/wordfence/lib/wfUtils.php:   require_once ABSPATH . WPINC . '/pluggable.php';
./wp-content/plugins/wordfence/lib/wfUnlockMsg.php:<?php require_once(ABSPATH .'wp-includes/pluggable.php'); ?>
./wp-content/plugins/mechanic-visitor-counter/wp-statsmechanic.php:require_once(ABSPATH . 'wp-includes/pluggable.php');

Rujukan: https://wordpress.org/support/topic/plugin-not-working-declared-by-another-plugin/

Menonaktifkan layanan MySQL

Ada beberapa langkah untuk mencapai ini, diantanyanya:

  1. Menonaktifkan MySQL pada Bitnami Stack Manager
  2. Mengubah nama berkas ctl.sh pada layanan yang diinginkan
  3. Ubah atau hapus direktori instalasi layanan

Skrip dapat dilihat pada bitnami-disable-component.sh

Bitnami Stack Manager

Hentikan layanan MySQL dengan perintah sudo /opt/bitnami/ctlscript.sh stop mysql , sunting berkas /opt/bitnami/properties.ini, hapus atau komentari baris bagian MySQL

Skrip sed

sed -r 's/^(\[My|my)/\;\1/g' /opt/bitnami/properties.ini

Hasil setelah sed

[Banner]
disable_banner_file=/opt/bitnami/apps/bitnami/banner/disable-banner
; [MySQL]
; mysql_port=3306
; mysql_host=localhost
; mysql_root_directory=/opt/bitnami/mysql
; mysql_binary_directory=/opt/bitnami/mysql/bin
; mysql_data_directory=/opt/bitnami/mysql/data
; mysql_configuration_directory=/opt/bitnami/mysql
; mysql_arguments=-u root -S /opt/bitnami/mysql/tmp/mysql.sock
; mysql_socket=/opt/bitnami/mysql/tmp/mysql.sock
; mysql_version=5.7.15
; mysql_database_type=mysql
[PHP]
php_fpm_socket=/opt/bitnami/php/var/run/www.sock
...
php_version=7.0.11
[General]
installdir=/opt/bitnami
...
hostname=
[Apache]
...
apache_version=2.4.23

Direktori instalasi MySQL

Berikutnya dengan cara mengubah nama atau menghapus direktori /opt/bitnami/mysql

sudo /opt/bitnami/ctlscript.sh stop mysql
# ubah nama direktori lokasi MySQL
sudo mv /opt/bitnami/mysql /opt/bitnami/mysql-disabled
# atau hapus
sudo rm -rf /opt/bitnami/mysql

Rujukan:

Let’s Encrypt dengan plugin WP-Encrypt

Mari mulai dari terminal kesukaan

mkdir -p /opt/bitnami/apps/wordpress/letsencrypt/live
chown -R bitnami:daemon /opt/bitnami/apps/wordpress/letsencrypt
find /opt/bitnami/apps/wordpress/letsencrypt -type d -exec chmod 0775 {} \;
find /opt/bitnami/apps/wordpress/letsencrypt -type f -exec chmod 0664 {} \;

Lakukan pembuatan berkas sertifikat SSL dengan mengggunakan plugin WP-Encrypt pada panel wp-admin. Setelah selesai ke terminal.

mv /opt/bitnami/apache2/conf/server.key{,.orig}
mv /opt/bitnami/apache2/conf/server.crt{,.orig}
ln -s /opt/bitnami/apps/wordpress/letsencrypt/live/domain.tld/private.pem /opt/bitnami/apache2/conf/server.key
ln -s /opt/bitnami/apps/wordpress/letsencrypt/live/domain.tld/fullchain.pem /opt/bitnami/apache2/conf/server.crt
chmod 660 /opt/bitnami/apache2/conf/server.*

Setelah selesai tambah baris di bawah pada berkas wp-config.php

// wp-config.php
// Implementasi SSL dengan Let's Encrypt dengan plugin WP-Encrypt
define('WP_ENCRYPT_SSL_CERTIFICATES_DIR_PATH', '/opt/bitnami/apps/wordpress/letsencrypt/live');

Terakhir muat ulang Apache dengan perintah

/opt/bitnami/ctlscript.sh restart apache

Rujukan: https://docs.bitnami.com/google/apps/wordpress/#how-to-install-the-wp-encrypt-plugin-for-lets-encrypt-certificate-generation

.htaccess untuk instalasi pada subdirectory

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

Rujukan: https://codex.wordpress.org/htaccess#WordPress_3.5_and_up

Instalasi modul Memcached dengan librari Libmemcached

#
sudo apt install build-essential libtool autoconf unzip wget git
#
wget https://launchpad.net/libmemcached/1.0/1.0.16/+download/libmemcached-1.0.16.tar.gz
tar -zxf libmemcached-1.0.16.tar.gz
cd libmemcached-1.0.16
./configure --prefix=/opt/bitnami/common
make
sudo make install
#
export PHP_AUTOCONF=/usr/bin/autoconf
export PHP_PREFIX=/opt/bitnami/php
cd /opt/bitnami/apps/wordpress/tmp
git clone https://github.com/php-memcached-dev/php-memcached.git
cd php-memcached
git checkout php7
/opt/bitnami/php/bin/phpize
./configure --enable-memcached --with-zlib-dir=/opt/bitnami/common --with-libmemcached-dir=/opt/bitnami/common --with-php-config=/opt/bitnami/php/bin/php-config --disable-memcached-sasl
make
sudo make install
#
sudo nano /opt/bitnami/php/etc/php.ini

extension=memcached.so

#
mv /opt/bitnami/memcached/scripts/ctl.sh.disabled /opt/bitnami/memcached/scripts/ctl.sh
sudo /opt/bitnami/ctlscript.sh start memcached
#
sudo /opt/bitnami/ctlscript.sh status memcached
#
sudo apt-get install memcached
sudo /etc/init.d/memcached start
sudo /opt/bitnami/ctlscript.sh restart apache

uji memcahced

<?php
    $mc = new Memcached();
    $mc->addServer("127.0.0.1", 11211);

    $result = $mc->get("test_key");

    if($result) {
        echo $result;
    } else {
        echo "No data in cache. Please refresh page.";
        $mc->set("test_key", "test data pulled from cache!") or die ("Failed to save data in memcached server");
    }
    ?>

Rujukan: