WSL2 debian LAMP

2024-04-09

установка wsl

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

Apache и PHP

установка wsl Потом перезагрузка и в терминале пишем Debian стандартные процедуры типа создания пользователя и установки пароля.
Дальше установка PHP и Apache2 с ними проблем быть не должно.

sudo apt install wget -y
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.

sudo usermod -a -G www-data admin
su admin
sudo chown www-data:www-data /var/www

MySQL на Debian

установка mySQL на Debian

Теперь нужно установить MySQL, обычная команда sudo apt-get install -y mysql-server php-mysql не сработает, почему-то во всех инструкциях рекомендуют устанавливать default-mysql-server, но после этой команды устанавливается MariaDB, а нам такого не надо, поэтому действуем следующим образом: устанавливаем

sudo apt install gnupg
sudo apt install lsb-release

Переходим на сайт репозиторий MySQL, ищем название пакета такого типа mysql-apt-config_0.8.29-1_all.deb. Этот пакет нужно будет скачать в каталог tmp и распаковать пакет, выполняем команды

cd /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 apt install mysql-server
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 и в конец вставляем такое содержимое:

[mysqld]
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 mkdir /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

установка mySQL на Debian

Конечно, кроме phpMyAdmin можно использовать и другие менеджеры, но этот более привычен для меня. Здесь тоже с установкой не все так хорошо, нельзя установить его одной командой(не будет работать, что-то там с aliasами), будем пользоваться простой версией, а значит скачиваем архив:

wget -P Downloads https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz

Скачанный архив нужно распаковать в папку phpMyAdmin в директории сайта localhost, для начала создаем эту папку, затем распаковываем архив:

sudo mkdir /var/www/html/phpMyAdmin
sudo tar xvf phpMyAdmin-latest-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpMyAdmin

Теперь сделаем конфигурационный файл и отредактируем его:

sudo cp /var/www/html/phpMyAdmin/config.sample.inc.php /var/www/html/phpMyAdmin/config.inc.php
sudo nano /var/www/html/phpMyAdmin/config.inc.php

Ищем строчку и заполняем значение $cfg['blowfish_secret'] = ''; Значение может быть абсолютно любым, сохраняем файл и меняем права:

sudo chmod 660 /var/www/html/phpMyAdmin/config.inc.php
sudo chown -R www-data:www-data /var/www/html/phpMyAdmin

Теперь можно запустить и apache и sql и все должно заработать.
После каждого перезапуска wsl теряются права на директории mysql, поэтому для удобства я сделал скрипт, который создает директории, устанавливает права, запускает apache и запускает mysql. Его можно закинуть куда-нибудь, например в /usr/local/bin.

#!/usr/bin/bash
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

После установки mySQL, при попытке подключиться к БД через phpMyAdmin получите ошибку: mysqli::real_connect(): (HY000/1045): Access denied for user 'admin'@'localhost' (using password: YES) Входим в mysql, и добавляем нового пользователя admin и задаем ему пароль admin.

sudo mysql -u root -p

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin';

GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;

Теперь можно будет войти под пользователем admin с паролем admin.

Подключение

Ip-адрес WSL

Узнаем ip-адрес нашей wsl и пробуем подключиться.

wsl hostname -I

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

Добавление хоста

Нововый виртуальный хост

Нужно создать папку, в которой будет находиться файл index.html

sudo mkdir -p /var/www/test.ru/public_html
sudo chmod -R 755 /var/www
nano /var/www/test.ru/public_html/index.html

Добавляем настройку хоста, копированием дефолтной конфы.

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/test.ru.conf

Делаем файлу такое содержимое

<VirtualHost *:80>
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 a2ensite test.ru.conf
sudo service apache2 restart