WSL2 debian LAMP
2024-04-09

Первая команда - установка wsl и установка Debian дистрибутива.
wsl --install -d Debian
Apache и PHP

Дальше установка PHP и Apache2 с ними проблем быть не должно.
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install -y apache2
sudo apt-get install -y php libapache2-mod-php
sudo apt-get install -y php-curl php-gd php-json php-mbstring php-xml php-mysqli php-mysqli
sudo apt-get install -y php-sqlite3
sudo service apache2 start
Для апача, нужно добавить права на каталог /var/www/ и добавить пользователя в группу www-data.
su admin
sudo chown www-data:www-data /var/www
MySQL на Debian

Теперь нужно установить MySQL, обычная команда sudo apt-get install -y mysql-server php-mysql не сработает, почему-то во всех инструкциях рекомендуют устанавливать default-mysql-server, но после этой команды устанавливается MariaDB, а нам такого не надо, поэтому действуем следующим образом: устанавливаем
sudo apt install lsb-release
Переходим на сайт репозиторий MySQL, ищем название пакета такого типа mysql-apt-config_0.8.29-1_all.deb. Этот пакет нужно будет скачать в каталог tmp и распаковать пакет, выполняем команды
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
sudo dpkg -i mysql-apt-config*
sudo apt update
Теперь сервер MySQL должен установиться, устанавливаем и настраиваем сервер
sudo mysql_secure_installation
После настройки сервер не запустится, вы получите ошибку WSL: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Тут какая-то проблема с правами, для исправления меняем файл sudo nano /etc/mysql/my.cnf и в конец вставляем такое содержимое:
bind-address = 0.0.0.0
user=root
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
Теперь нужно дать права на директории, если какой-то директории нет, ее нужно создать, обычно это /var/run/mysqld
sudo chmod 777 -R /var/run/mysqld
sudo chmod 777 -R /var/lib/mysql
sudo chmod 777 -R /var/log/mysql
Вот теперь можно запустить сервер командой mysqld, для дальнейшей работы нужно открыть другой терминал.
phpMyAdmin

Конечно, кроме phpMyAdmin можно использовать и другие менеджеры, но этот более привычен для меня. Здесь тоже с установкой не все так хорошо, нельзя установить его одной командой(не будет работать, что-то там с aliasами), будем пользоваться простой версией, а значит скачиваем архив:
wget -P Downloads https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gzСкачанный архив нужно распаковать в папку phpMyAdmin в директории сайта localhost, для начала создаем эту папку, затем распаковываем архив:
sudo tar xvf phpMyAdmin-latest-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpMyAdmin
Теперь сделаем конфигурационный файл и отредактируем его:
sudo nano /var/www/html/phpMyAdmin/config.inc.php
Ищем строчку и заполняем значение $cfg['blowfish_secret'] = ''; Значение может быть абсолютно любым, сохраняем файл и меняем права:
sudo chown -R www-data:www-data /var/www/html/phpMyAdmin
Теперь можно запустить и apache и sql и все должно заработать.
После каждого перезапуска wsl теряются права на директории mysql, поэтому для удобства я сделал скрипт, который создает директории, устанавливает права, запускает apache и запускает mysql. Его можно закинуть куда-нибудь, например в /usr/local/bin.
mkdir /var/run/mysqld
chmod 777 -R /var/run/mysqld
chmod 777 -R /var/lib/mysql
chmod 777 -R /var/log/mysql
service apache2 start
mysqld
Настройка пользователей mySQL

После установки mySQL, при попытке подключиться к БД через phpMyAdmin получите ошибку: mysqli::real_connect(): (HY000/1045): Access denied for user 'admin'@'localhost' (using password: YES) Входим в mysql, и добавляем нового пользователя admin и задаем ему пароль admin.
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
Теперь можно будет войти под пользователем admin с паролем admin.
Подключение

Узнаем ip-адрес нашей wsl и пробуем подключиться.
Чтобы работали разные available sites, то добавляем их имена в hosts в папке windows\system32\drivers\etc и указываем ip-адрес wsl.
Добавление хоста

Нужно создать папку, в которой будет находиться файл index.html
sudo chmod -R 755 /var/www
nano /var/www/test.ru/public_html/index.html
Добавляем настройку хоста, копированием дефолтной конфы.
Делаем файлу такое содержимое
ServerAdmin test.ru
ServerName test.ru
ServerAlias www.test.ru
DocumentRoot /var/www/test.ru/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/test.ru> AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
Активируем хост и перезапускаем apache
sudo service apache2 restart