Nginx mysql php wsl

Vadimushka / wsl-web-server.md

Предполагается, что вы только что настроили WSL в своей системе и установили чистую ubuntu 18.04 LTS.

Почему не apache? С точки зрения производительности, быстродействия, а как следствие — нагрузки — связка nginx + php-fpm показывает себя гораздо лучше. Есть в этом решении и минусы — мы лишаемся удобного .htaccess и все необходимые настройки будем вынуждены производить в конфигах nginx и php, но оно того стоит.

Статья в первую очередь ориентирована на так называемых upper-junior , хотя бы поверхностно знакомых с linux и используемым стеком.

Установка необходимых пакетов

Устанавливаем и запускаем nginx

$ sudo apt update $ sudo apt install nginx $ sudo /etc/init.d/nginx start

Если вы все сделали верно, по ссылке http://127.0.0.1/ в браузере должна отобразиться стартовая страница «Welcome to nginx!».

На этом пока с nginx остановимся, вернемся уже на этапе конфигурации площадки.

$ sudo apt install mysql-server $ sudo /etc/init.d/mysql start

Хоть у нас и локальная площадка, нужно сразу привыкать к правильному — запускаем штатный скрипт настройки политик безопасности mysql (установка паролей, требования к валидации, анонимный доступ и все такое):

$ sudo mysql_secure_installation
$ sudo apt install php-fpm php-mysql $ sudo /etc/init.d/php7.2-fpm start

Идем в папку с конфигами сайтов nginx и на базе дефолтного конфига создаем свой. Файлы с конфигами лучше всего называть по домену, а для локальных проектов использовать какую-нибудь отдельную доменную зону, чтобы в дальнейшем не было путаницы — проект открыт локально или на удаленном сервере. Я обычно использую зону .local .

$ cd /etc/nginx/sites-available/ $ sudo cp default blog.local
server < listen 80; root /mnt/f/my/web/blog/public; index index.php index.html index.htm index.nginx-debian.html; server_name blog.local; location / < try_files $uri $uri/ =404; > location ~ \.php$ < fastcgi_buffering off; include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; > location ~ /\.ht < deny all; > >

Так как у нас все-таки WSL 1 — будем использовать файловую системы основной системы. Логические диски внутрь WSL монтируются в /mnt — узнать список разделов можно командой ls -la .

Если хотите видеть свой сайт по тому же http://127.0.0.1/ или http://localhost/ — оставьте значения server_name и listen по умолчанию. В таком случае не получится завести несколько разных площадок, но и настраивать hosts не придется.

Чтобы сайт заработал, его конфиг нужно разместить в папке /etc/nginx/sites-enabled/ , сделаем симлинк:

$ sudo ln -s /etc/nginx/sites-available/blog.local /etc/nginx/sites-enabled/

Заодно выключаем сайт по умолчанию, он нам больше не нужен:

$ sudo unlink /etc/nginx/sites-enabled/default

Тестируем конфиг (должно быть ok) и обновляем nginx:

$ sudo nginx -t $ sudo /etc/init.d/nginx reload

Чтобы браузер понимал наш домен blog.local — он должен откуда-то получить ip-адрес сервера, связанного с этим доменом. В большом интернете этим занимаются DNS-сервера, а нам достаточно прописать соответствие в hosts (C:\Windows\System32\drivers\etc\hosts) .

Добавляем следующую строку (нужны права администратора):

Если папка под проект к этому моменту еще не существует — стоит этим заняться.

$ echo '' > /mnt/f/my/web/blog/public/index.php

Теперь открываем наш сайт в браузере — http://blog.local/. В случае успеха мы увидим текст Hello world! .

Также у нас есть возможность просмотреть все настройки сервера, phpinfo предоставляет нам такую возможность:

$ echo '' > /mnt/f/my/web/blog/public/phpinfo.php

Открываем http://blog.local/phpinfo.php и видим свои настройки.

Важно! Не используйте данную возможность на боевых серверах и тем более не оставляйте подобный файл лежать с доступом для всех. В выводе есть версии всех используемых дистрибутивов, это более чем достаточная информация если не для взлома сервера, так для направленной атаки, использующей уязвимости конкретных версий.

Проще всего, особенно для каки-то самописных проектов поставить админку. Для тех, кому это кажется лишним — можно создать пользователя для проекта и БД напрямую в консоли mysql.

Устанавливаем phpmyadmin вместе с необходимыми расширениями php и рестартим php-fpm, чтобы расширения включились.

$ sudo apt install phpmyadmin php-mbstring php-gettext $ sudo /etc/init.d/php7.2-fpm restart

На вопрос «web-server to reconfigure automatically» не выбираем ничего, жмем Tab и Ok. В окне «Configuring phpmyadmin» выбираем Yes и создаем пользователя для утилиты.

Теперь нам нужно настроить nginx, создаем еще один конфиг для хоста phpmyadmin:

$ cd /etc/nginx/sites-available/ $ sudo cp default phpmyadmin $ sudo nano phpmyadmin

Содержимое (админка будет доступна по http://127.0.0.1/pma):

server < listen 80 default_server; listen [::]:80 default_server; root /var/www/html/; index index.php index.html index.htm index.nginx-debian.html; server_name _; location /pma < alias /usr/share/phpmyadmin/; location ~ \.php$ < fastcgi_buffering off; fastcgi_pass unix:/run/php/php7.2-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params; fastcgi_ignore_client_abort off; > location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ < access_log off; log_not_found off; expires 1M; > > >

Включаем сайт, проверяем конфиг и релоадим nginx:

$ sudo ln -s /etc/nginx/sites-available/phpmyadmin /etc/nginx/sites-enabled/ $ sudo nginx -t $ sudo /etc/init.d/nginx reload

Открываем http://127.0.0.1/pma, пользователь phpmyadmin , пароль тот, что вводили при установке.

Если вдруг пользователь phpmysql оказался ограничен в правах (не может создать БД или других пользователей) — эти права всегда можно выдать вручную.

И выдаем нужные права (в данном случае все возможные):

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

Идем обратно в phpmyadmin и перезаходим в учетку, права должны быть на месте. Для демонстрации корректной работы всех пакетов добавим пользователя blog и БД blog с таблицей test произвольного формата (кодировку следует выбирать utf8_general_ci ).

Чтобы наши сервисы запускались автоматически при старте ubuntu — запускаем следующие команды:

$ sudo update-rc.d nginx defaults $ sudo update-rc.d php7.2-fpm defaults $ sudo update-rc.d mysql defaults

Проверяем корректность работы

Подключаемся к БД из php и выводим на экран содержимое таблицы test (думаю, не стоит лишний раз упоминать, что доступы в открытом виде в коде указывать нельзя, для этого умные люди придумали .env файлы):

query('SELECT * from test') as $row) < echo "
"; print_r($row); echo "

"; > $dbh = null; > catch (PDOException $e) < print "Error!: " . $e->getMessage() . "
"; die(); >

Открываем еще раз наш http://blog.local и видим содержимое таблицы на экране.

В итоге у нас все работает, причем у нас в windows (!) есть привычная командная строка linux с привычными пакетами, которые используются в продакшне. То, для чего раньше ставились чрезвычайно медленные виртуалки, теперь доступно из коробки и заводится даже без танцев с бубнами. В удивительное время живем!

ERR_NAME_NOT_RESOLVED (не удается получить доступ к сайту)

Браузер не смог найти указанный домен. Возможные причины:

  • вы неправильно настроили конфиг сайта;
  • вы не прописали в hosts домен или прописали его неверно;
  • вы не сделали nginx reload после создания/изменения конфига сайта — это действие обязательно нужно выполнять после любых правок в конфиге.

Ошибка связана с тем, что nginx не получает ответа от бэкенда, в данном случае от php-fpm.

  • php-fpm не запущен;
  • неверно указаны параметры php в настройках хоста nginx;
  • ошибка непосредственно в php-скрипте.

Лучшие ваши помощники в устранении любой неполадки — логи:

/var/log/nginx/access.log - лог запросов к nginx /var/log/nginx/error.log - лог ошибок nginx /var/log/php7.2-fpm.log - лог php-fpm 

Очень долгая загрузка страниц (ERR_INCOMPLETE_CHUNKED_ENCODING)

Проверьте наличие директивы fastcgi_buffering off; в секции location ~ \.php$ конфига сайта.

upstream sent too big header while reading response header from upstream

Поднимите размер буфера в секции php

fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; 

Источник

Установка локального WSL2 сервера (Ubuntu 20.04, Nginx, PHP8, MySQL)

В этой статье мы настроим рабочее окружение для разработки веб-проектов на основе Windows Subsystem for Linux (WSL2). Данный подход намного более гибкий, чем установка готовых пакетов, например WAMP или Open Server. Он также проще и не так сильно нагружает систему, как Docker или создание отдельных виртуальных машин.

Установка локального WSL2 сервера (Ubuntu 20.04, Nginx, PHP8, MySQL)

Оглавление

Привет. В этой статье мы настроим рабочее окружение для разработки веб-проектов на основе Windows Subsystem for Linux (WSL2). Данный подход намного более гибкий, чем установка готовых пакетов, например WAMP или Open Server. Он также проще и не так сильно нагружает систему, как Docker или создание отдельных виртуальных машин. Вообщем, одни плюсы. Давайте приступать.

Системные требования

Для корректной работы WSL2 необходимо, чтобы ваша система отвечала некоторым требованиям:

1. На устройстве должна быть установлена Windows 10 (сборки не ниже 19041) или Windows 11. Версию системы можно посмотреть по пути:

en: Start > Settings > System > About

ru: Пуск > Параметры > Система > О системе

Версия Windows для работы с WSL

2. Устройство должно поддерживать виртуализацию Hyper-V и функция должна быть включена. Для того, чтобы проверить, есть ли в системе Hyper-V и включена ли эта функция, найдите в Пуск следующий пункт:

en: Turn windows features on or off

ru: Включение или отключение компонентов Windows

Настройки Windows для работы с WSL

3. Должны быть включены компоненты WSL. Активировать их нужно также в этой панели.

Дополнительные настройки Windows для работы с WSL

Если вы включали какие-либо компоненты, стоит перезагрузить компьютер. Если все требования выполнены мы можем приступать к установке.

Установка

Для установки и настройки компонентов мы будем использовать Windows PowerShell. Найдите программу в меню Пуск и запустите от имени Администратора.

Windows PowerShell

Команда для установки следующая:

wsl —install — пока не выполняйте эту команду

Команда включит функционал для запуска WSL и установки дистрибутива Ubuntu. Дистрибутив по умолчанию можно изменить, в таком случае команда будет выглядеть так:

Чтобы узнать список возможных дистрибутивов, выполните команду

И уже после этого установите WSL для необходимой версии. Мы как правило устанавливаем Ubuntu 20.04 LTS

После завершения установки вам будет необходимо перезагрузить компьютер.

Использование

Для запуска и взаимодействия с образом на повседневной основе удобнее всего пользоваться программой Windows Terminal. Для запуска компонентов WSL2 и работы с образом после установки в выпадающем списке возможных программ выберите установленный вами образ:

Windows Terminal для работы с WSL2

Также в настройках программы можно выставить программу, которая будет запускаться по умолчанию при запуске Windows Terminal:

Настройки Windows Terminal для работы с WSL2

Далее нам необходимо установить все компоненты, необходимые нам для локальной разработки. Сделать это можно, руководствуясь нашей статьей Развертывание Laravel проекта на сервере Ubuntu 20.04. Здесь нужно сделать несколько важных замечаний:

1. WSL образ не запускает установленные пакеты после установки. Например, после установки mysql вам нужно запустить этот пакет командой sudo service mysql start. И так с любым другим пакетом.

2. WSL не запускает установленные пакеты при запуске системы.. После перезагрузки компьютера и старта WSL образа вам нужно запустить все необходимые для вас пакеты. Чтобы не писать каждый раз все эти команды, проще в корневой папке (папке ~), откуда стартует ваш образ, создать файл start.sh:

#!/bin/bash
service nginx start
service mysql start
service php8.0-fpm start
service php8.1-fpm start
service php7.4-fpm start
service redis-server start
service cron start

Далее сохраняем этот файл. Теперь после старта WSL для того, чтобы выполнить все команды из этого файла, нам нужно выполнить команду:

Последнее, что нам осталось — прописать нужный нам домен (домены) в файле C:\Windows\System32\drivers\etc\hosts (не забывайте открывать от имени Администратора) следующим образом:

После этого домен ilavista.test будет вести на локальную машину, таким образом его можно будет обработать Nginx (или Apache) вашего WSL образа.

Полезные команды

Немедленно завершает работу всех запущенных дистрибутивов и утилиты виртуальной машины WSL 2. Эта команда может потребоваться в случаях, когда требуется перезапустить среду виртуальной машины WSL 2, например, для изменения ограничений использования памяти или внесения изменений в ваш файл .wslconfig.

Завершить указанный дистрибутив или остановить его запуск.

Экспортирует дистрибутив в tar-файл.

Импортирует указанный tar-файл в качестве нового дистрибутива.

wsl —import Distribution_Name Install_Location FileName Копировать

Список дистрибутивов Linux, установленных на вашем компьютере с Windows, включая состояние (запущен дистрибутив или остановлен) и версию WSL, на которой запущен дистрибутив (WSL 1 или WSL 2).

Общая информация о вашей конфигурации WSL, такую как тип дистрибутива по умолчанию, дистрибутив по умолчанию и версия ядра.

Вручную обновите версию вашего ядра WSL Linux. Вы также можете использовать команду: wsl —update rollback для отката к предыдущей версии ядра WSL Linux.

Источник

Читайте также:  Steam appid txt css
Оцените статью