Panduan Lengkap: WSL2 + Mise + Docker Development Environment

Daftar Isi

  1. Instalasi WSL2 di Windows
  2. Setup Environment Dasar WSL
  3. Instalasi dan Konfigurasi Mise
  4. Uninstall PHP/Node/Python dari Windows
  5. Instalasi Docker & Docker Compose
  6. Verifikasi dan Testing

Instalasi WSL2

Langkah 1: Enable WSL dan Virtual Machine Platform

Buka PowerShell sebagai Administrator dan jalankan:

# Enable WSL
wsl --install

# Atau jika sudah punya WSL 1, upgrade ke WSL 2
wsl --set-default-version 2

Jika belum ada distro Linux, ini akan menginstall Ubuntu secara default. Restart Windows setelah selesai.

Langkah 2: Install Ubuntu Terbaru

Setelah restart, buka PowerShell sebagai Administrator dan jalankan:

# Lihat distro yang tersedia
wsl --list --online

# Install Ubuntu (gunakan versi terbaru, contoh 24.04)
wsl --install -d Ubuntu-24.04

# Atau jika sudah ada distro, upgrade
wsl --set-version Ubuntu-24.04 2

Langkah 3: Setup User dan Password WSL

Buka Ubuntu dari Start Menu (atau wsl dari PowerShell). Tunggu setup otomatis selesai, kemudian buat user:

# Buat user baru (ganti 'your-username' dengan nama pilihan)
sudo useradd -m -s /bin/bash your-username

# Set password
sudo passwd your-username

# Tambahkan ke sudo group
sudo usermod -aG sudo your-username

# Atur sebagai default user
sudo nano /etc/wsl.conf

Di nano, tambahkan:

[user]
default=your-username

Tekan Ctrl+O, Enter, Ctrl+X untuk simpan.

Keluar WSL dengan exit dan dari PowerShell:

# Restart WSL untuk apply perubahan user
wsl --shutdown
wsl

Setup Dasar WSL

Update System Packages

sudo apt update
sudo apt upgrade -y

Install Build Tools & Common Dependencies

sudo apt install -y \
  build-essential \
  curl \
  wget \
  git \
  pkg-config \
  autoconf \
  automake \
  libtool \
  unzip \
  zip \
  htop \
  neofetch

Instalasi dan Konfigurasi Mise

Langkah 1: Install Mise

curl https://mise.jdx.dev/install.sh | sh

# Atau gunakan installer berbeda jika yang di atas error
curl -fsSL https://raw.githubusercontent.com/jdx/mise/main/install.sh | bash

Tambahkan mise ke PATH:

# Edit ~/.bashrc atau ~/.zshrc
nano ~/.bashrc

# Tambahkan di akhir file:
export PATH="$HOME/.local/share/mise/shims:$PATH"
eval "$(mise activate bash)"

# Simpan: Ctrl+O, Enter, Ctrl+X

Reload shell:

source ~/.bashrc
# atau jika menggunakan zsh:
source ~/.zshrc

Verifikasi instalasi:

mise --version

Langkah 2: Install Dependencies untuk PHP (PENTING!)

⚠️ PERHATIAN PENTING: Langkah ini WAJIB dikerjakan SEBELUM install PHP. Jangan ada yang diskip, karena error instalasi PHP di mise HAMPIR SELALU karena missing dependencies di sini. Kesalahan paling umum adalah melupakan re2c, bison, dan flex.

2.1: Compiler & Build Tools (WAJIB)

sudo apt install -y \
  build-essential \
  autoconf \
  automake \
  libtool \
  pkg-config \
  m4 \
  bison \
  flex \
  re2c

PENTING: re2c, bison, dan flex adalah lexer/parser generators yang WAJIB ada untuk compile PHP dari source.

2.2: Core PHP Build Dependencies

sudo apt install -y \
  php-dev \
  libxml2-dev \
  libssl-dev \
  libcurl4-openssl-dev \
  libbz2-dev \
  libreadline-dev \
  libedit-dev \
  zlib1g-dev

2.3: Image Processing (GD Library)

sudo apt install -y \
  libfreetype6-dev \
  libpng-dev \
  libjpeg-turbo8-dev \
  libwebp-dev \
  libxpm-dev

2.4: Text & Document Processing

sudo apt install -y \
  libxslt1-dev \
  libtidy-dev \
  libenchant-2-dev

2.5: Database & Data Storage

sudo apt install -y \
  libsqlite3-dev \
  libpq-dev \
  unixodbc-dev

2.6: Internationalization & Security

sudo apt install -y \
  libicu-dev \
  libsodium-dev
sudo apt install -y \
  build-essential autoconf automake libtool pkg-config m4 bison flex re2c \
  php-dev libxml2-dev libssl-dev libcurl4-openssl-dev libbz2-dev \
  libreadline-dev libfreetype6-dev libpng-dev libjpeg-turbo8-dev \
  libonig-dev libzip-dev libsqlite3-dev libpq-dev libicu-dev libedit-dev \
  libxslt1-dev libtidy-dev libenchant-2-dev libsodium-dev libwebp-dev \
  libxpm-dev unixodbc-dev zlib1g-dev

2.8: Verify Semua Tools Tersedia

# Verifikasi tools kritis
re2c --version
bison --version
flex --version
gcc --version

Jika ada yang tidak ditemukan, install ulang yang missing.

Langkah 3: Install Node.js Dependencies

sudo apt install -y \
  nodejs-dev

Langkah 4: Install Python Dependencies

sudo apt install -y \
  python3-dev \
  python3-venv \
  libffi-dev

Langkah 5: Konfigurasi Mise

# Init mise
mise init

# Atau jika lebih prefer langsung add tools tanpa init
cd ~  # atau ke project root

Langkah 6: Install Global Versions

# Install PHP 8.3 (akan memakan waktu karena compile dari source)
mise install php@8.3

# Jika error di PHP, PASTIKAN sudah jalankan ALL dependencies di Langkah 2
# Error yang paling umum adalah: "checking for re2c... no"
# Jika error itu muncul, jalankan: sudo apt install -y re2c bison flex
# Kemudian coba lagi

# Install dengan verbose jika ada error:
mise install php@8.3 -v

# Install Node.js 22 LTS
mise install node@22

# Install Python 3.13
mise install python@3.13

# Tunggu hingga semua selesai compile (PHP mungkin 5-15 menit)

⚠️ Jika ada error saat install PHP: Lihat bagian Troubleshooting di bawah, terutama “Error: checking for re2c... no

Langkah 7: Set Default Global Version

# Set PHP 8.3 sebagai global default
mise use -g php@8.3

# Set Node.js 22 sebagai global default
mise use -g node@22

# Set Python 3.13 sebagai global default
mise use -g python@3.13

# Verify
mise ls

Harusnya output seperti:

Tool  Version  Source
node  22.x.x   ~/.config/mise/config.toml
php   8.3.x    ~/.config/mise/config.toml
python 3.13.x  ~/.config/mise/config.toml

Langkah 8: Verify Versions

php -v
node -v
npm -v
python3 -v
pip -v
npm install -g pm2
pm2 completion install

Langkah 10: Install Composer - PHP Package Manager

Composer adalah package manager untuk PHP, sangat penting untuk project Laravel, Symfony, dan framework PHP lainnya.

10.1: Download dan Install Composer

# Download Composer installer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

# Verifikasi integritas (opsional tapi recommended)
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031fe45a4054461379220850b7 7a1f8ca7c00a8cfc9df5166b697a1841bcbf9a532c8f4ec78bc0ae16738985') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

# Install Composer ke /usr/local/bin
php composer-setup.php --install-dir=/usr/local/bin --filename=composer

# Cleanup installer
php -r "unlink('composer-setup.php');"

# Verify installation
composer --version

10.2: Setup Shell Completion untuk Composer (Optional)

# Untuk Bash
composer completion bash | sudo tee /etc/bash_completion.d/composer

# Untuk Zsh (jika menggunakan zsh)
mkdir -p ~/.zsh/completions
composer completion zsh | tee ~/.zsh/completions/_composer

# Reload shell
exec $SHELL

10.3: Verify Composer Works dengan PHP

# Test basic Composer commands
composer --version
composer about

# Test dengan PHP version
composer diagnose | grep "PHP Version"

Uninstall PHP/Node/Python dari Windows

Langkah 1: Uninstall dari Control Panel

  1. Settings → Apps → Apps & Features (atau appwiz.cpl)
  2. Cari dan uninstall:
    • PHP (jika ada)
    • Node.js
    • Python
    • Composer (jika direct install, bukan via PHP)

Langkah 2: Bersihkan Environment Variables

  1. Settings → System → Advanced system settings → Environment Variables
  2. Hapus atau edit PATH entries yang merujuk ke:
    • C:\PHP atau lokasi PHP
    • C:\nodejs atau C:\Program Files\nodejs
    • C:\Python* atau lokasi Python
# Jalankan Registry Editor sebagai Admin
regedit

# Hapus entries untuk:
# - HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
# - HKEY_CURRENT_USER\SOFTWARE\...

# Cari PHP, Node, Python dan hapus yang tidak perlu

Langkah 4: Verifikasi

Buka PowerShell BARU (jangan lupa BARU agar PATH refresh):

# Harusnya tidak ditemukan atau 'not recognized'
php --version
node --version
python --version

# Atau jika masih ada, cari locationnya
where php
where node
where python

Instalasi Docker & Docker Compose

Langkah 1: Update APT dan Install Dependencies

sudo apt update
sudo apt install -y \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg \
  lsb-release

Langkah 2: Tambah Docker GPG Key

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Langkah 3: Setup Docker Repository

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Langkah 4: Install Docker Engine

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Langkah 5: Install Docker Compose Standalone (Opsional, untuk compatibility)

# Docker Compose plugin sudah included, tapi jika ingin standalone:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

Langkah 6: Setup Docker Daemon

# Buat docker group
sudo groupadd docker 2>/dev/null || true

# Tambah user ke docker group
sudo usermod -aG docker $USER

# Aktifkan group baru
newgrp docker

# Atur Docker daemon start on boot
sudo systemctl enable docker
sudo systemctl enable containerd

Langkah 7: Enable Docker Desktop WSL Integration (Optional)

Jika menggunakan Docker Desktop di Windows, dari Docker Desktop → Settings → Resources → WSL integration, aktifkan distro Ubuntu Anda.

Atau gunakan Docker di WSL saja tanpa Docker Desktop (lebih lightweight).

Langkah 8: Start Docker Service

# Start service
sudo service docker start
# atau
sudo systemctl start docker

# Verify
docker ps
docker --version
docker compose version

Verifikasi dan Testing

Test PHP

php -v
php -m | grep -E "openssl|curl|gd|intl|zip"

# Test script sederhana
echo '<?php phpinfo(); ?>' > /tmp/test.php
php /tmp/test.php | head -20

Test Node.js

node -v
npm -v
npm list -g --depth=0

Test Python

python3 -v
pip --version
python3 -m venv /tmp/test-venv

Test Docker

docker run hello-world
docker ps -a

Test dengan Project Existing

Jika punya project Laravel atau Node:

# Untuk Laravel
cd /path/to/project
composer install
php artisan serve

# Untuk Node
cd /path/to/project
npm install
npm run dev

Troubleshooting

PHP Compilation Error saat Instalasi

Error: checking for re2c... no (PALING UMUM!)

Ini adalah error TERBANYAK saat install PHP via mise. re2c adalah lexer generator yang WAJIB ada.

Solusi:

# Install re2c, bison, flex (parser/lexer generators)
sudo apt install -y re2c bison flex

# Verifikasi tools tersedia
re2c --version
bison --version
flex --version

# Bersihkan cache PHP
rm -rf ~/.local/share/mise/installs/php/8.3*
rm -rf ~/.local/share/mise/downloads/*php*

# Retry install
mise install php@8.3 -v

Error: Failed to install asdf:php@8.3: exit code 1

Ini biasanya disebabkan missing dependencies. Jalankan:

# Install SEMUA dependencies sekaligus
sudo apt install -y \
  build-essential autoconf automake libtool pkg-config m4 bison flex re2c \
  php-dev libxml2-dev libssl-dev libcurl4-openssl-dev libbz2-dev \
  libreadline-dev libfreetype6-dev libpng-dev libjpeg-turbo8-dev \
  libonig-dev libzip-dev libsqlite3-dev libpq-dev libicu-dev libedit-dev \
  libxslt1-dev libtidy-dev libenchant-2-dev libsodium-dev libwebp-dev \
  libxpm-dev unixodbc-dev zlib1g-dev

# Cleanup dan retry
mise uninstall php@8.3
mise install php@8.3 -v

Error: configure: error: Cannot find OpenSSL's libraries

Solusi:

sudo apt install -y libssl-dev pkg-config

# Jika masih error, coba:
export LDFLAGS="-L/usr/lib/x86_64-linux-gnu"
export LD_LIBRARY_PATH="/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"

mise install php@8.3 -v

Error: Package libxml-2.0 not found

Solusi:

sudo apt install -y pkg-config libxml2-dev
mise install php@8.3 -v

Error saat compile GD library

Solusi:

sudo apt install -y libfreetype6-dev libpng-dev libjpeg-turbo8-dev libwebp-dev libxpm-dev

# Re-install PHP
mise uninstall php@8.3
mise install php@8.3 -v

Error: build tools not found (autoconf, bison, flex, etc)

Solusi:

sudo apt install -y autoconf automake libtool m4 bison flex re2c

mise uninstall php@8.3
mise install php@8.3 -v

Debug dengan Verbose Output (Jika Error Tetap Muncul)

# Install dengan full logging
RUST_BACKTRACE=full mise install php@8.3 -v 2>&1 | tee php-install.log

# Cek error spesifik di log
cat php-install.log | grep -i "error\|failed\|not found" | head -20

Docker Permission Denied

Error: permission denied while trying to connect to Docker daemon

Solusi:

# Pastikan user sudah di docker group
id -nG

# Jika tidak ada 'docker', jalankan:
sudo usermod -aG docker $USER
newgrp docker

# Test
docker ps

Mise Command Not Found

Solusi:

# Ensure ~/.bashrc/~/.zshrc sudah punya:
eval "$(mise activate bash)"
# atau
eval "$(mise activate zsh)"

# Reload shell
exec $SHELL

Node_modules atau Package Issue

# Clear cache npm
npm cache clean --force

# Re-install
rm -rf node_modules package-lock.json
npm install

Composer Issues

Error: Composer could not find the openssl extension

Solusi:

# Pastikan openssl extension enabled di PHP
php -m | grep openssl

# Jika tidak ada, edit php.ini
php -i | grep "php.ini"

# Uncomment extension=openssl di php.ini
# Atau install openssl extension:
sudo apt install -y php8.3-openssl

# Test ulang
php -m | grep openssl

Error: Composer requires PHP > 8.2 (tapi PHP sudah correct version)

Solusi:

# Verify PHP version
php -v

# Clear Composer cache
composer clear-cache

# Re-install dependencies
composer install

Error: [RuntimeException] Could not delete /path/to/vendor

Solusi:

# Clear vendor directory dan reinstall
rm -rf vendor composer.lock
composer install

# Atau jika lock file tidak boleh dihapus:
composer update --no-interaction

Error: Allowed memory exhausted saat composer install

Solusi:

# Increase PHP memory limit untuk Composer
php -d memory_limit=-1 /usr/local/bin/composer install

# Atau permanent set di php.ini:
php -i | grep php.ini
sudo nano /path/to/php.ini

# Cari memory_limit dan ubah jadi:
# memory_limit = -1  (unlimited)
# atau
# memory_limit = 2G

Composer slow atau timeout saat install

Solusi:

# Increase timeout
composer config process-timeout 600

# Clear cache dan retry
composer clear-cache
composer install

# Atau gunakan repository mirror (jika di Asia)
composer config -g repo.packagist composer https://packagist.jp

Error: [Composer] Your requirements could not be resolved

Solusi:

# Update Composer versi terbaru dulu
composer self-update

# Jika masih error, coba update dependencies dengan more flexibility
composer update --with-all-dependencies

# Jika tetap error, cek compatibility requirement:
composer diagnose

Best Practices

1. Per-Project Version Management

Gunakan .mise.toml per project:

cd /path/to/project
mise use php@8.2  # Override global untuk project ini
mise use node@20

# .mise.toml otomatis tercreate dengan:
cat .mise.toml

1.5. Composer Configuration & Optimization

Untuk project dengan Composer (Laravel, Symfony, dll):

# Verify Composer menggunakan PHP yang benar
composer -vvv diagnose | grep "php"

# Setup global Composer configuration untuk optimization
composer config -g process-timeout 600
composer config -g memory_limit -1

# Untuk faster installation di Asia, gunakan Aliyun mirror
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer

# Atau gunakan Tsinghua mirror (China)
# composer config -g repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/git/packagist

# List semua global config
composer config -l -g

# Per-project, gunakan .composer/auth.json untuk private repositories jika ada
# Contoh: jika ada private GitLab/GitHub, setup token di sana

Tips Install Project Baru:

# Clone project
git clone <repository>
cd project

# Set PHP version untuk project ini (jika berbeda dari global)
mise use php@8.2

# Install Composer dependencies
composer install

# Verify semuanya works
php artisan --version  # untuk Laravel
php bin/console --version  # untuk Symfony

2. Development Workflow

# Terminal 1: Backend (Laravel)
cd ~/project
php artisan serve

# Terminal 2: Frontend (Vue)
npm run dev

# Terminal 3: Docker services
docker compose up

3. Backup Configuration

# Backup mise config
cp ~/.config/mise/config.toml ~/mise-config-backup.toml

# Backup WSL
wsl --export Ubuntu-24.04 ~/wsl-backup.tar

4. Update Tools Regularly

# Update mise
mise self-update

# Upgrade tools
mise upgrade php
mise upgrade node
mise upgrade python

Referensi Useful Commands

# Mise Commands
mise ls                          # List installed versions
mise ls -a                       # List all available versions
mise use node@latest            # Switch version di current shell
mise use -g node@22             # Set global default
mise install node@22            # Install specific version
mise uninstall php@8.3          # Uninstall version
mise exec node@18 -- node -v    # Run dengan specific version
mise implode                     # Uninstall semua

# Composer Commands
composer install                # Install dependencies dari composer.lock
composer update                 # Update dependencies
composer require package/name   # Install package baru
composer remove package/name    # Remove package
composer dump-autoload          # Regenerate autoloader
composer clear-cache            # Clear Composer cache
composer self-update            # Update Composer versi
composer diagnose               # Check environment issues
composer config -l -g           # List global configuration

# Docker Commands
docker ps                        # List running containers
docker ps -a                     # List all containers
docker images                    # List images
docker compose up -d             # Start services in background
docker compose down              # Stop services
docker compose logs -f           # Follow logs

# WSL Commands (dari Windows PowerShell)
wsl --list -v                    # List distro
wsl --shutdown                   # Shutdown all
wsl -d Ubuntu-24.04             # Launch specific distro
wsl --export Ubuntu-24.04 file.tar  # Backup

Checklist Setup


Estimasi Waktu: 45-60 menit (tergantung kecepatan kompilasi PHP dan internet)

Last Updated: 2026-06-09 (+ Composer Installation)

Post a Comment

oke

Lebih baru Lebih lama