{"id":88,"date":"2026-04-02T12:30:56","date_gmt":"2026-04-02T05:30:56","guid":{"rendered":"https:\/\/abdullah.mablx.online\/?p=88"},"modified":"2026-04-03T03:32:20","modified_gmt":"2026-04-02T20:32:20","slug":"%f0%9f%8c%90-cara-install-wordpress-menggunakan-docker-compose-dengan-frankenphp-dan-caddy","status":"publish","type":"post","link":"https:\/\/abdullah.mablx.online\/?p=88","title":{"rendered":"Cara Install WordPress Menggunakan Docker Compose dengan FrankenPHP dan Caddy"},"content":{"rendered":"\n<p>Jika kamu ingin menginstal WordPress dengan cara modern dan efisien menggunakan Docker, kombinasi <strong>FrankenPHP<\/strong> dan <strong>Caddy<\/strong> adalah pilihan yang sangat powerful. Kombinasi ini menawarkan kecepatan tinggi serta kemudahan konfigurasi SSL otomatis. Artikel ini akan memandu kamu langkah demi langkah.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcc1 Struktur Folder WordPress Docker<\/h2>\n\n\n\n<p>Sebelum mulai, pastikan struktur folder kamu seperti berikut:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mablx-project\/\n\u251c\u2500\u2500 docker-compose.yml          # Konfigurasi utama FrankenPHP + Caddy\n\u251c\u2500\u2500 Dockerfile                  # Build image WordPress + FrankenPHP\n\u251c\u2500\u2500 Caddyfile                   # Konfigurasi web server Caddy\n\u2514\u2500\u2500 wordpress\/                  # File WordPress dari image resmi<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udce5 Langkah 1: Download File WordPress ke Volume Host<\/h2>\n\n\n\n<p>Langkah pertama adalah mengunduh file WordPress dari image resmi dan menyimpannya di direktori .\/wordpress.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udcc4 File docker-compose.download.yml<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>services:\n  wordpress:\n    image: wordpress:latest\n    container_name: wordpress-downloader\n    volumes:\n      - .\/wordpress:\/var\/www\/html<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\ude80 Jalankan Perintah<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose -f docker-compose.download.yml up<\/code><\/pre>\n\n\n\n<p>Tunggu hingga file WordPress muncul di folder .\/wordpress.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddf9 Langkah 2: Bersihkan Image dan Container<\/h2>\n\n\n\n<p>Setelah file berhasil diunduh, jalankan perintah berikut:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose -f docker-compose.download.yml down -v\ndocker rmi wordpress:latest<\/code><\/pre>\n\n\n\n<p>Ini akan menghapus container sementara dan image <strong>wordpress:latest<\/strong> agar tidak konflik dengan build FrankenPHP selanjutnya.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2699\ufe0f Langkah 3: Konfigurasi Docker Compose WordPress dengan FrankenPHP + Caddy<\/h2>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>\ud83d\udcc4 File docker-compose.yml<\/strong><\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code>services:\n  php:\n    container_name: wordpress-frankenphp-php\n    build: .\n    image: example.com:latest\n    restart: always\n    ports:\n      - \"80:80\"\n      - \"443:443\/udp\"\n    volumes:\n      - caddy_data:\/data\n      - caddy_config:\/config\n    environment:\n      SERVER_NAME: example.com www.example.com\n    depends_on:\n      - db\n\n  db:\n    container_name: wordpress-frankenphp-db\n    image: mysql:latest\n    restart: always\n    environment:\n      MYSQL_DATABASE: wordpress_db\n      MYSQL_USER: dummyuser\n      MYSQL_PASSWORD: dummypass123\n      MYSQL_ROOT_PASSWORD: dummypass123\n    volumes:\n      - db_data:\/var\/lib\/mysql\n\nvolumes:\n  caddy_data:\n  caddy_config:\n  db_data:<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udcc4 File Dockerfile<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM dunglas\/frankenphp\nENV SERVER_NAME=\"example.com www.example.com\"\n\nRUN docker-php-ext-install mysqli &amp;&amp; docker-php-ext-enable mysqli\n\nRUN mv \"$PHP_INI_DIR\/php.ini-production\" \"$PHP_INI_DIR\/php.ini\"\n\nRUN echo \"upload_max_filesize = 512M\" &gt;&gt; \"$PHP_INI_DIR\/php.ini\" &amp;&amp; \\\n    echo \"post_max_size = 512M\" &gt;&gt; \"$PHP_INI_DIR\/php.ini\" &amp;&amp; \\\n    echo \"memory_limit = 512M\" &gt;&gt; \"$PHP_INI_DIR\/php.ini\" &amp;&amp; \\\n    echo \"max_execution_time = 320\" &gt;&gt; \"$PHP_INI_DIR\/php.ini\" &amp;&amp; \\\n    echo \"max_input_time = 300\" &gt;&gt; \"$PHP_INI_DIR\/php.ini\"\n\nCOPY .\/wordpress \/app\/public\nCOPY .\/Caddyfile \/etc\/caddy\/Caddyfile<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udcc4 File Caddyfile<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>example.com {\n    redir https:\/\/www.example.com{uri} permanent\n}\n\nwww.example.com {\n    root * \/app\/public\n    php_fastcgi localhost:9000\n    encode gzip\n    file_server\n}<\/code><\/pre>\n\n\n\n<p>Untuk deploy via localhost, kamu bisa isi Caddyfile seperti ini:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>http:\/\/192.168.1.10 {\n    root * \/app\/public\n    php_fastcgi localhost:9000\n    encode gzip\n    file_server\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udee0\ufe0f Langkah 4: Sesuaikan File wp-config.php<\/h2>\n\n\n\n<p>Masuk ke direktori <strong>.\/wordpress<\/strong> dan salin file konfigurasi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cp wp-config-sample.php wp-config.php<\/code><\/pre>\n\n\n\n<p>Lalu ubah baris-baris berikut di <strong>wp-config.php<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>define( 'DB_NAME', 'wordpress_db' );\ndefine( 'DB_USER', 'dummyuser' );\ndefine( 'DB_PASSWORD', 'dummypass123' );\n\/\/ Penting: Host diarahkan ke nama service container database\ndefine( 'DB_HOST', 'wordpress-frankenphp-db' );<\/code><\/pre>\n\n\n\n<p>Pastikan <strong>DB_HOST <\/strong>sesuai dengan nama service db di <strong>docker-compose.yml<\/strong>, yaitu <strong>wordpress-frankenphp-db<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Langkah 5: Jalankan WordPress dengan Docker Compose<\/h2>\n\n\n\n<p>Setelah semua file siap, jalankan perintah berikut:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose up --build -d<\/code><\/pre>\n\n\n\n<p>WordPress sekarang berjalan di <strong>http:\/\/example.com<\/strong> dan secara otomatis akan menggunakan HTTPS jika domain kamu telah mengarah ke IP server.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\uddd1\ufe0f Opsional: Hapus Container &amp; Image<\/h2>\n\n\n\n<p>Untuk menghentikan dan membersihkan:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose down -v\ndocker rmi example.com:latest<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Keunggulan Menggunakan FrankenPHP + Caddy<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2705 <strong>SSL otomatis<\/strong> dengan Let&#8217;s Encrypt<\/li>\n\n\n\n<li>\u2705 Konfigurasi sederhana tanpa file <strong>.htaccess<\/strong><\/li>\n\n\n\n<li>\u2705 <strong>Kinerja tinggi<\/strong> dengan PHP built-in server<\/li>\n\n\n\n<li>\u2705 <strong>Pengelolaan modern<\/strong> menggunakan Docker Compose terbaru<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udf89 Kesimpulan<\/h2>\n\n\n\n<p>Dengan mengikuti panduan ini, kamu telah berhasil:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ud83d\udce5 Mengunduh file WordPress tanpa database<\/li>\n\n\n\n<li>\ud83e\uddf9 Menghapus image default <strong>wordpress:latest<\/strong><\/li>\n\n\n\n<li>\u26a1 Membuat environment WordPress yang lebih modern dan cepat menggunakan <strong>FrankenPHP<\/strong> dan <strong>Caddy<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Setup ini cocok untuk pengembangan, staging, maupun deployment produksi (dengan tambahan keamanan &amp; backup).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jika kamu ingin menginstal WordPress dengan cara modern dan efisien menggunakan Docker, kombinasi FrankenPHP dan Caddy adalah pilihan yang sangat powerful. Kombinasi ini menawarkan kecepatan tinggi serta kemudahan konfigurasi SSL otomatis. Artikel ini akan memandu kamu langkah demi langkah. \ud83d\udcc1 Struktur Folder WordPress Docker Sebelum mulai, pastikan struktur folder kamu seperti berikut: \ud83d\udce5 Langkah 1: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":242,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-88","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-docker"],"_links":{"self":[{"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=\/wp\/v2\/posts\/88","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=88"}],"version-history":[{"count":24,"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=\/wp\/v2\/posts\/88\/revisions"}],"predecessor-version":[{"id":114,"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=\/wp\/v2\/posts\/88\/revisions\/114"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=\/wp\/v2\/media\/242"}],"wp:attachment":[{"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=88"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=88"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=88"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}