Kumpulan permasalahan paska instalasi GPF-Bitnami-Wordpress¶
Plugins¶
Berikut adalah daftar plugin utama yang perlu diinstal dari aspek infrastruktur (diurutkan secara alfabetis):
- Akismet
- Cloudflare
- Easy HTTPS (SSL) Redirection
- Jetpack by WordPress.com
- Postman SMTP Mailer/Email Log
- Remove HTTP
- Wordfence Security
- WP Migrate DB
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://docs.bitnami.com/google/apps/wordpress/#how-to-disable-the-wordpress-cron-script
- http://www.lucasrolff.com/wordpress/why-wp-cron-sucks/
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:
- https://cloud.google.com/monitoring/agent/install-agent#remove
- https://cloud.google.com/logging/docs/agent/installation#uninstalling_the_agent
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:
- https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
- https://github.com/PHPMailer/PHPMailer/wiki/Using-Gmail-with-XOAUTH2
- https://wordpress.org/plugins/postman-smtp/
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:
- http://www.cyberciti.biz/faq/wordpress-mass-delete-spam-comments-sql-statements/
- http://www.onextrapixel.com/2010/01/30/13-useful-wordpress-sql-queries-you-wish-you-knew-earlier/
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';'
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:
- Menonaktifkan MySQL pada Bitnami Stack Manager
- Mengubah nama berkas
ctl.sh
pada layanan yang diinginkan - 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:
- https://community.bitnami.com/t/uninstall-mysql-component/
- http://www.grymoire.com/Unix/Sed.html#toc-uh-4
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
.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: