Setelah sukses ubah Android jadi PC desktop, sekarang kita upgrade HP kamu jadi infrastruktur server yang beneran pro. Kita bakal pasang WordPress dan bikin website kamu bisa diakses dari mana aja tanpa sewa VPS. Cukup pake HP yang ada di kantong aja!

Instalasi LEMP Stack & Cloudflared ARM64
Kita butuh Nginx, MariaDB, PHP 8.4, dan Cloudflared. Untuk Cloudflared, kita pake paket .deb biar terkelola rapi sama sistem Ubuntu ARM64 kamu.
Jalankan perintah ini di terminal: sudo apt update && sudo apt install nginx mariadb-server cron php8.4-fpm php8.4-mysql php8.4-curl php8.4-gd php8.4-mbstring php8.4-xml php8.4-zip php8.4-intl -y
Lalu instal Cloudflared ARM64:
sudo wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb && sudo dpkg -i cloudflared-linux-arm64.deb && rm cloudflared-linux-arm64.deb
Jangan lupa bangunin layanannya biar gak ada yang tidur: sudo service nginx start && sudo service mariadb start && sudo service php8.4-fpm start && sudo service cron start
Setting MariaDB Database
Jalankan perintah ini buat setup awal: sudo mysql_secure_installation, kalo gak bisa atau error Command Not Found. Kamu bisa coba ini sudo mysql-secure-installation, terus ikutin kaya dibawah ini:
Kalo udah selesai, login ke MySQL pake user root buat bikin database WordPress: sudo mysql -u root -p
Terus masukin perintah SQL ini satu-satu:
CREATE DATABASE wordpress_db; CREATE USER 'nama_user'@'localhost' IDENTIFIED BY 'password_kamu'; GRANT ALL PRIVILEGES ON wordpress_db.* TO 'nama_user'@'localhost'; FLUSH PRIVILEGES; EXIT;
Instalasi WordPress & Set Permissions
Bikin direktori baru di /var biar struktur file kamu rapih:
sudo mkdir -p /var/namadomain/wordpress && cd /var/namadomain/wordpresssudo wget https://wordpress.org/latest.tar.gz && sudo tar -xzvf latest.tar.gz --strip-components=1 && sudo rm latest.tar.gz- Penting!
sudo chown -R www-data:www-data /var/namadomain/wordpressfind /var/namadomain/wordpress/ -type d -exec chmod 755 {} \;find /var/namadomain/wordpress/ -type f -exec chmod 644 {} \;
Konfigurasi Nginx Hardening Simpel & Gzip
Bikin file config baru: sudo nano /etc/nginx/sites-available/web-pro. Masukin kode ini biar server kamu aman, kalo kamu mau lebih advance lagi kamu bisa ngulik sendiri atau cari-cari di google ya:
server {
listen 80;
server_name www.webkamu.com;
root /var/namadomain/wordpress;
index index.php index.html;
# Optimasi Gzip biar makin ngebut
gzip on;
gzip_static on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_min_length 100;
gzip_buffers 16 8k;
gzip_types
text/plain
text/css
text/javascript
text/xml
text/x-component
application/javascript
application/x-javascript
application/json
application/xml
application/rss+xml
application/atom+xml
application/vnd.ms-fontobject
application/x-font-ttf
application/x-font-opentype
application/x-font-truetype
application/wasm application/x-web-app-manifest+json
image/svg+xml
image/x-icon
image/vnd.microsoft.icon
font/ttf
font/eot
font/otf
font/opentype;
location ~* \.(svn|hg|bzr|sh|git|json|env|php_bak|sql|yaml|bak|swp|dist|passwd)$ {
deny all;
access_log off;
error_log off;
log_not_found off;
}
location ~* /(wp-config|wp-config-sample|config|stripe) {
deny all;
access_log off;
error_log off;
log_not_found off;
}
location ~* ^/swagger {
location ~* \.(json|yaml|yml|xml|txt)$ {
deny all;
access_log off;
error_log off;
log_not_found off;
}
allow all;
access_log off;
error_log off;
log_not_found off;
}
location ~* /(node_modules|backup|db|logs)/.*\.php$ {
deny all;
access_log off;
error_log off;
log_not_found off;
}
location / {
try_files $uri $uri/ /index.php?$args;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $realip_remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port 443;
access_log off;
error_log off;
log_not_found off;
}
location ~ \.php$ {
access_log off;
error_log off;
log_not_found off;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.4-fpm.sock;
}
}
Aktifkan: sudo rm /etc/nginx/sites-enabled/default && sudo ln -s /etc/nginx/sites-available/web-pro /etc/nginx/sites-enabled/ && sudo service nginx restart
Hubungkan ke Cloudflare
Biar website online secara profesional, ikutin langkah dashboard dan terminal ini:
A. Otorisasi & Dashboard Setup
- Jalankan
cloudflared tunnel logindi terminal, terus klik link otorisasi domain kamu. - Jalankan
cloudflared tunnel create nama-tunnelterus catet ID Tunnel-nya. - Login ke Cloudflare dashboard, pilih sidebar Zero Trust.
- Pilih Networks > Connectors > klik titik tiga pada tunnel kamu > Configure.
- Di tab Public Hostname, klik Add a public hostname:
- Hostname: Pilih domain kamu (Subdomain opsional).
- Service: Type
HTTP, URL127.0.0.1:80. - Save.
B. Konfigurasi & Eksekusi Background Service
Biar gak mati pas kamu tekan CTRL+C, kamu jalankan sebagai Service. Buat file /root/.cloudflared/config.yml terus isi kaya gini:
tunnel: <ID_TUNNEL_KAMU>
credentials-file: /root/.cloudflared/<ID_TUNNEL_KAMU>.json
metrics: 127.0.0.1:4444
ingress:
- hostname: domainkamu.com
service: http://127.0.0.1:80
- service: http_status:404
Terus jalanin perintah ini:
cloudflared service install sudo service cloudflared start sudo service cloudflared status
Setup Akhir wp-config
Ini bagian paling penting buat ngubungin WordPress kamu sama database-nya. Edit wp-config.php kamu dan sesuaikan bagian ini:
// --- Koneksi Database ---
define( 'DB_NAME', 'wordpress_db' );
define( 'DB_USER', 'nama_user' );
define( 'DB_PASSWORD', 'password_kamu' );
define( 'DB_HOST', 'localhost' );
// --- Pengaturan URL & SSL Proxy ---
define('WP_HOME','https://www.webkamu.com');
define('WP_SITEURL','https://www.webkamu.com');
define('FS_METHOD', 'direct');
/* Cron via HTTP internal biar irit bandwidth aja */
define('WP_CRON_URL', 'http://127.0.0.1/wp-cron.php');
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') { $_SERVER['HTTPS'] = 'on'; }
Modul Magisk & KSUN
Biar server otomatis nyala pas HP reboot, gunain tiga file ini di folder modul Magisk kamu:
module.prop
id=ikymomo_chroot name=IkyMomo Chroot Engine version=v1.0 versionCode=1 author=IkyMomo description=Auto-mount and start Nginx, PHP-FPM, MariaDB, and Cloudflared on Boot
post-fs-data.sh
#!/system/bin/sh
MODDIR=${0%/*}
CHROOT_PATH="/data/local/ubuntu"
mount -o bind /dev $CHROOT_PATH/dev
mount -o bind /dev/pts $CHROOT_PATH/dev/pts
mount -o bind /proc $CHROOT_PATH/proc
mount -o bind /sys $CHROOT_PATH/sys
service.sh
#!/system/bin/sh
MODDIR=${0%/*}
CHROOT_PATH="/data/local/ubuntu"
sleep 30
chroot $CHROOT_PATH /usr/bin/env -i HOME=/root TERM=xterm PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c "service nginx start && service php8.4-fpm start && service cron start && service cloudflared start && service mariadb start"
Disclaimer
Aku ingetin, segala resiko yang terjadi pas kamu ngikutin tutorial ini ditanggung sendiri ya. Pastiin kamu udah backup data penting sebelum eksekusi kode-kode di atas. Oprek dengan teliti biar gak rungkad!
Gimana? Gak nyangka kan kalau HP yang biasanya cuma buat scrolling medsos sekarang udah bertransformasi jadi server WordPress yang pro dan bisa diakses dari seluruh dunia? Dengan kombinasi LEMP Stack, Cloudflare Tunnel, dan modul Magisk & KSUN, kamu udah selangkah lebih maju dalam dunia self-hosting.
Kalau ada yang bingung atau mau pamer hasil deploy website kamu, langsung aja mampir ke kolom komentar ya. Kapalia tunggu cerita seru kamu!







SSL aktif?
Aktif
Thanks👍
Biar enggak semua IP cloudflare gimana kak? Ko saya kaya buta IP ya gak bisa bedain mana pengunjung mana cloudflare 🤣🤣🤣🤣
Buka ip resmi cloudflare
http {...}set_real_ip_from 103.21.244.0/22; real_ip_header CF-Connecting-IP;sudo nginx -tsudo service nginx reloadThanks 👍
Aktifkan brotli gimana?
Kak minta konfigurasi yang di blok dong apa aja
Biar support brotli gimana? Modul apa yang di install?
ID tunnelnya dapet darimana kak?
What theme are you using?
ID tunnelnya dong dapet darimana?
Dari akun cloudflare kamu
Cara buat tunnel baru gimana?
cloudflared login cloudflared tunnel create nama-tunnel-kamu cloudflared service install cloudflared service startIzin buat referensi ya kak?
Cara aktifin kompresi brotli bagaimana?
Cara install php cli sama php imagick gimana? Terus sama install php opcache bcmatch? Tolong dong…..
sudo apt install php-cli php-imagickSama itu, atur memori imagick sama thread-nya bagaimana?
Blokir themes, plugins dan uploads lewat nginx untuk php bagaimana? Tolong solusinya. Soalnya di log 404 Rank Match banyak sekali
location ~* /(themes|plugins|uploads)/ {location ~* \.(png|jpg|jpeg|gif|ico|css|js|woff|woff2|ttf|svg)$ {
allow all;
access_log off;
error_log off;
log_not_found off;
}
location ~* \.(php|txt|md|bak|sh)$ {
deny all;
access_log off;
error_log off;
log_not_found off;
}
}
Kalo kamu mau nginx ghosting pake ini
return 444;😘🎀🎀🎀
Aktifin brotli & gzip compression bagaimana? Apa harus kompilasi nginx atau ada modul yang di install?
Install ini
sudo apt install libnginx-mod-http-brotli-filtersudo apt install libnginx-mod-http-brotli-staticCek gzip
nginx -V 2>&1 | grep --color -o with-http_gzip_static_moduleCek brotli
ls -l /etc/nginx/modules-enabled/ | grep brotliBuka
sudo vi /etc/nginx/nginx.conf<- Kamu bisa cari digoogle Terussudo nginx -tdansudo service nginx restartKode gzip on; dan seterusnya harus di server { … }?
Terus yang buat brotli mana?
Bagi lah, gw setengah jalan nih
Disini juga bisa
sudo vi /etc/nginx/nginx.confhttp { ... }Brotlinya?
Maksudnya gimana?
Kode brotli
Cara bikin file json yang ini gimana “ID_TUNNEL_KAMU.json”? Di saya kok enggak bisa konek ya pas cloudflared start status enggak healty. Tolong bantuannya kak, semoga dibaca terimakasih.
nano ~/.cloudflared/"ID_TUNNEL_KAMU".jsoncloudflared tunnel list<- Copy id tunnel nya teruscloudflared tunnel token “ID_TUNNEL_KAMU”Nanti kalo tokennya udah muncul kamu copy terus decode
echo -n "PASTE_TOKEN_KAMU" | base64 -dNanti ada 3 token kamu paste ke dalam file
Isi filenya begini:
"AccountTag": "PASTE_DISINI",
"TunnelSecret": "PASTE_DISINI",
"TunnelID": "PASTE_DISINI"
“a” -> Account tag
“s” -> Tunnel secret
“t” -> TunnelID
Hasil dari decode yang ada di “echo -n” tadi.
Maaf maksudnya bagaimana?
Yang mana?
Dapat tokennya dari cloudflare? Di dashboard sebelah mananya?
Cara ganti password user yang sudah ada di mysql bagaimana kak?
mysql -u root -pSELECT user, host FROM mysql.user;ALTER USER 'nama_user'@'localhost' IDENTIFIED BY 'password_baru';FLUSH PRIVILEGES;exitSaya sudah ada web yang jalan di vps, kalo pake cloudflared bisa enggak ya? Rencana saya ingin hidden biar nginx pake soket tanpa port.
Pake vps mau tanpa port dan cuma jalur socket unix susah bwang
Tapi bisa enggak?
Di saya tidak stabil
Gak stabil apanya?
Cara backup Ubuntu tarball gimana? Saya rencana mau pindah device
Sama bingung
Ada solusi?
Tunnel saya kenapa kagak mau konek ya??
Gak koneknya gimana? Token dan id tunnel bener gak? Terus kamu udah buat
config.yml? Samaid_tunnel.json?Update module please
Iya nanti ya
Mana??
Update
Mana kak?
Mana???
Update modul di gw kadang jalan kadang kagak jadi kudu manual
Update modul
Besok ya
Kalo looping terus gimana fixnya?
Looping gimana?
Di saya lopping semenit itu kenapa?
Looping? Redirect?
Pas buka https://namadomain.com/wp-admin itu enggak mau masuk redirect error gitu. Cara benerinnya gimana?
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {$_SERVER['HTTPS'] = 'on';
}
Tambahin itu di
wp-config.phppaling atasMakasih
Nginx gagal running gimana cara fixnya?
sudo killall -9 nginxsudo rm /etc/nginx.pidsudo service nginx startCek udah running apa belum
sudo service nginx statusBantu please
Di gw kenapa membeku ya? Kalo ngerubah tampilan harus purge di cloudflare. Terus sessions login juga nyangkut udah logout masih login haram banget. Tolong fix-nya gimana??
Di gw sama
Di saya enggak jalan
Di aku gak bisa update artikel
Coba bypass cache di cloudflare buat cookie wordpress
"wordpress_logged_in_" , "wordpress_sec_" , "comment_author_"Di dashboard cloudflare, Cache Rulesitemap Rank Match blank putih
Cara fix sitemap Rank Match blank putih gimana?
location ~* ([^/]*)sitemap(.*)\.x(m|s)l$ {rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last;
rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;
rewrite ^/([a-z]+)?-sitemap\.xml$ /index.php?sitemap=$1 last;
}
Masih blank putih ya, apa cara lain?
location ~* ([^/]*)sitemap(.*)\.x(m|s)l$ {add_header Cache-Control "no-store, no-cache, must-revalidate" always;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
}
Coba kamu ganti itu, buat cache-nya kamu atur juga di dashboard cloudflare bypass buat sitemap supaya sinkron sama header kamu.
Terimakasih kak sudah bisa sekarang thankyou
Pake try_files $uri $uri/ /index.php?args; bisa enggak?
Header Cache-Control dobel, cara fix gimana? Bagian sitemap
Sudah tambah itu tapi masih blank. Cara fix-nya pliss kak
Kamu liat dikomentar ya 😊
Kadang web suka 502 kenapa
Nginx or php-fpm crash maybe, coba cek apa running? Kalo kamu pake tunnel cloudflare cek apa cloudflared running?
Sering crash
Cache-Control di header kenapa gak muncul ya? Udah purge cache juga di cloudflare tapi masih nihil
Di saya ada tapi waktunya beda sama yang di setting di nginx masih bawaan default dari cloudflare.
Coba atur di dashboard cloudflare, cari menu “Rules” -> “Page Rules”
domain.com/* Cache Level: Cache Everything, Origin Cache Control: OnCache buat file statis kaya css, js, png dsb 30 (hari) itu bagaimana? Apa harus buat settingan beda lagi?
Iya, kalo mau simpel langsung ke dashboard cloudflare aja bagian menu Caching Rule. Buat rules baru terus isi bagian Expressions
(lower(http.request.uri.path) contains "/wp-content/" or lower(http.request.uri.path) contains "/wp-includes/" or lower(http.request.uri.path) contains "/wp-admin/")and (http.request.uri.path.extension in {"css" "js" "jpg" "jpeg" "png" "gif" "webp" "avif" "svg" "ico" "woff" "woff2"})
ThenEdge TTL 1 mounthBrowser TTL 1 mounthsave.Di header lu ko detik cache bisa beda-beda? Lempar sini konfigurasi nya
Setting di dashboard cloudflare
Udah konfigurasi di nginx belum headernya?
add_header Cache-Control “public, max-age=3600, s-maxage=3600”;
Taruh itu didalam server { … } or http { … }
Konfigurasi cache nginx gimana?
sudo mkdir -p /var/cache/nginxsudo chown www-data:www-data /var/cache/nginxfastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=CACHE:100m max_size=1g inactive=150m use_temp_path=off;fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache CACHE;
fastcgi_cache_valid 200 301 404 150m;
Permisi, hallo mau tanya di saya kenapa tidak bisa buat postingan baru ya? Padahal semua sudah berjalan lancar tapi pas mau buat postingan terus di simpan tidak bisa. Ada solusi?
Pesan errornya apa? Coba cek pake curl
curl -I https://namadomain.com/wp-json/Kalo status error atau 403 berarti kena blokir. Biasanya karena api itu bermasalah kamu jadi gak bisa simpan postingan.
Blokir berdasarkan string kueri di nginx bagaimana untuk string tertentu?
Tunnel sering putus nyambung
Cloudflare sering stop sendiri kenapa? Di start lagi kadang bisa kadang enggak.
Stop gimana?
Saya blokir page wordpress dengan cara ini “~*^/page(/.*|\d+|$)” dan fitur pencarian seperti domain.com/page/2?s=Bintang kena blokir. Cara yang benar seperti apa?
"~*^/page(/\d+)?(\:|$)"yang kena apa aja?domain.com/pagekenadomain.com/page/2kenadomain.com/page/3dan seterusnyadomain.com/page/2?s=Bintangamandomain.com/page/2?s=Bintang+amanThanks 👍
😉
Atur rate limiting bagaimana?
Buat apa?
https://domain.com/page/2 block
https://domain.com/page/2?s=Test aman sesuai
Supaya ini kena juga bagaimana https://domain.com/page/2/ ?
Soalnya yang itu 301 redirect location ke https://domain.com/page/2/
"~*^/page(/\d+/?)?(\:|$)"Pake inidomain.com/page/2Kena dan penambahan tanda / kena karena sifatnya opsional/? <-Makasih
😉
Idealnya berapa children pm PHP buat website yang berjalan menggunakan server android?
4-8 udah cukup, tapi kalo ram hpnya banyak kasih aja 10 udah lebih dari cukup buat WP blog biasa.