Windows 11 üzerinde, WSL2 - Ubuntu 20.04 için Apache, PHP, Composer, MariaDB (MySQL) kurulumlarını ve konfigürasyonları yapacağız. Bunların yanında VSCode ve WSL2 için birkaç ipucu paylaşacağım. Kurulum ile işlemlere başlıyoruz.
Kurulum
software-properties-common paketini yükleyerek başlıyoruz.
sudo apt install software-properties-common
Sonrasında Apache Server kuruyoruz.
sudo apt-get install apache2
Tüm PHP sürümlerine erişebileceğimiz repo'yu ekliyoruz.
sudo add-apt-repository ppa:ondrej/php
sudo apt update
PHP 7.4 için aşağıdaki paketleri kuruyoruz.. Gerekli paketler varsa sonradan da tamamlayabilirsiniz. Diğer php sürümleri için version numarasını değiştirmeniz yeterli.
sudo apt-get install php7.4 libapache2-mod-php7.4 php7.4-mysql php7.4-curl php7.4-json php7.4-gd php-memcached php7.4-intl php7.4-mbstring php7.4-xml php7.4-zip
MariaDB (Repoda'ki güncel sürüm 10.3.31) Kurulum dokümanı:How To Install MariaDB on Ubuntu 20.04
sudo apt-get install mariadb-server
Konfigürasyon
MariaDB
MariaDB ayarlamaları için öncelikle servisi başlatıyoruz.
sudo service mysql start
sudo mysql_secure_installation

Root kullanıcısı MariaDB tarafından çeşitli işlemler için kullanılıyor. Bu nedenle şifre ile giriş yerine unix_socket üzerinden giriş yapılacak şekilde ayarlanmış. Eğer harici bir uygulama ile dışardan erişilmek istenirse sorun çıkartıyor. Tavsiye edilen işlem ise root kullanıcısının özelliklerini değiştirmek değil, benzer yetkilere sahip yeni kullanıcı oluşturmak. Çünkü güncellemeler ile yaptığımız ayarlama silinecektir.
MariaDB konsoluna girerek
mariadb
admin adında şifresi 123456 olan tüm yetkilere sahip bir kullanıcı oluşturuyoruz.
GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;
Yetkileri yapılandırıyoruz
FLUSH PRIVILEGES;
ve çıkıyoruz.
exit
Localhost üzerinde kullanacağımız uygulamalar için veya dışarıdan bağlantı için root-123456 yerine admin-123456 kullanıcı bilgilerini kullanacağız.

Composer
Repo'daki sürüm self-update yapılamadığı için kendi sitesinden güncel sürümü indirip kurmak daha sağlıklı olacaktır.
Veya komut satırında bu işlemi daha kolay bir şekilde yapabiliriz.
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
/usr/bin/ veya /usr/local/bin/ Bu işlemi yapmadan önce composer komutunu çalıştırın. Dosyayı hangi dizinde aradığını gösterecektir. Sonrasında o dizine composer adı ile taşıyoruz.
sudo mv composer.phar /usr/bin/composer

Apache - VirtualHost oluşturma
Localhostumuzda bir klasörde kurumlum yaptığımız sisteme özel bir domain adresi üzerinden erişmek istersek.
VirtualHost tanımı yapmamız gerekiyor. Örneğin /var/www/html/gelistirme/ dizinine bir sistem kurmuş olalım. Bu sisteme de gelistirme.test adresi ile erişmek istersek;
WSL'de yapacağımız işlem:
sudo nano /etc/apache2/sites-available/gelistirme.test.conf
İçerisine yapıştırıyoruz...
Eğer Laravel projesi ise DocumentRoot'a /public eklememiz gerekiyor. Örn: DocumentRoot /var/www/html/gelistirme/public olmalı.
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName gelistirme.test
ServerAlias gelistirme.test
DocumentRoot /var/www/html/gelistirme
<Directory />
AllowOverride All
</Directory>
<Directory /var/www/html/gelistirme>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Require all granted
</Directory>
ErrorLog /var/log/apache2/gelistirme.test-error.log
LogLevel error
CustomLog /var/log/apache2/gelistirme.test-access.log combined
</VirtualHost>
Kaydettikten sonra, siteyi aktif ediyoruz.
sudo a2ensite gelistirme.test
Apache'yi yeniden yüklüyoruz..
service apache2 reload
Tamamdır.
Windows tarafında ise:
C:\Windows\System32\Drivers\etc\ dizinindeki hosts dosyasında domain tanımlaması yapmamız gerekiyor.
Her eklediğimiz domain için aşağıdaki gibi iki satır eklememiz gerekiyor.
127.0.0.1 gelistirme.test
::1 gelistirme.test
MariaDB - Veritabanı oluşturma
MariaDB mysqladmin aracı ile birlikte yükleniyor. İçerisinde birçok özellik mevcut.
Kurulum sırasında oluşturduğumuz admin-123456 kullanıcısı ile bir veritabanı oluşturma için aşağıdaki komutu kullanıyoruz:
mysqladmin -u admin -p123456 create "veritabani-adi"
Veritabanı silme işlemi için ise create yerine drop yazmamız yeterli olacaktır.
WSL2 - İpuçları
-
WSL terminalini açtığımızda home dizi ile açık gelmesi için Komutu bu şekilde değiştiriyoruz. İlk parametre olarak
~ekliyoruz. Bu durumda her seferinde home dizininden başlayacak. Klasörde sağ tıklayıp terminali açsanız bile.wsl.exe ~ -d Ubuntu
-
WSL'deki içinde bulunduğumuz klasöre Windows dosya yöneticisi üzerinden erişmek için aşağıdaki komutu yazıyoruz.
explorer.exe .
VSCode - PHP
Windows tarafından WSL'deki PHP'yi kullanmak için araştırma yaptığımda şöyle bir yöntem buldum. Kaynak: VSCode Issues @tooy
Böylece Windows'a da PHP kurmadan, WSL'de kurulu olan PHP'yi kullanabileceğiz.

WSL adında bir klasör (istediğiniz isimde olabilir) ve içerisinde php.bat adında bir dosya oluşturdum.
Dosya adresi:
C:\ProgramData\WSL\php.bat
Dosya içeriği ise:
@echo off
c:\Windows\System32\bash.exe -c "php %*"

Sonrasında VSCode'da ayarları JSON olarak açarak, aşağıdaki tanımlamayı ekliyoruz.
"php.validate.executablePath": "c:\\ProgramData\\WSL\\php.bat",
