Дата публикации: 10.03.2024 в 09:57

Настройка локальной среды разработки на MacOS. Часть 2

Alexey BubnovAlexey Bubnov
0 комментария

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

  1. NodeJS и NPM
  2. Git
  3. Composer
  4. Логи, конфиги, рабочие директории
  5. Валидный локальный SSL
  6. phpMyAdmin
  7. phpPgAdmin
  8. phpRedisAdmin
  9. Шаблон Nginx для домена
  10. Pretty localhost

NodeJS и NPM

Даже если вы не frontend, вам очень часто будет нужен NodeJS/NPM для сборки уже готовых пакетов и проектов.

Тут все просто, идем на официальный сайт и качаем последнюю версию, я рекомендую LTS.
Устанавливается как обычная программа MacOS.

Далее, устанавливаем yarn:

sudo npm install --global yarn

Проверяем установку:

yarn --version

В чате посоветовали устанавливать FNM для быстрого переключения версий NPM.

Git

Как уже писал в конце предыдущей статьи, я люблю GUI и кликать мышью больше чем писать что-то в консоли😜. И по этому я рекомендую просто скачать и установить GitHub Desktop и с его помощью удобно логиниться и следить за своими репозиториями.

Composer

Ставим сomposer и делаем его доступным глобально:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer

Проверяем установку:

composer -V

Настройка Nginx, логов, сертификатов и сайтов в новых директориях

Для более удобной разработки я работаю в папке ~/sites/, каждый сайт расположен в отдельной папке в ~/sites/www, настройки лежат в ~/sites/config, логи в ~/sites/logs и ssl сертификаты в ~/sites/ssl (да, у нас будут вполне валидные сертификаты).
Давайте организуем все по красоте!

mkdir ~/Sites/config/
mkdir ~/Sites/ssl/
sudo ln -sf /opt/homebrew/etc/nginx ~/Sites/config/nginx
sudo ln -sf /opt/homebrew/var/log ~/Sites/log
sudo ln -sf /opt/homebrew/var/www ~/Sites/www
sudo ln -sf /opt/homebrew/var/ssl ~/Sites/ssl

Очистим папку:

rm -rf ~/Sites/www/*

Создадим папку сайта по умолчанию и index.html в неё:

mkdir ~/Sites/www/localhost/
mkdir ~/Sites/www/localhost/public/
touch ~/Sites/www/localhost/public/index.html

И внесем изменения в настройки сайта (по умолчанию ~/sites/config/nginx/nginx.conf):

#user alex staff;
worker_processes  1;

error_log  /opt/homebrew/var/log/nginx/error.log;

pid        /opt/homebrew/var/log/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    access_log  /opt/homebrew/var/log/nginx/access.log;
    sendfile        on;
    keepalive_timeout  65;
    charset utf-8;
    server_names_hash_bucket_size 512;

    server {
        listen       80;
        server_name  localhost;
        index index.php;
        charset utf-8;
        root /opt/homebrew/var/www/localhost/public;
        access_log  /opt/homebrew/var/log/nginx/localhost.access.log;
        error_log  /opt/homebrew/var/log/nginx/localhost.error.log;
        location ~ /\.ht {
            deny  all;
        }
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Content-Type-Options "nosniff";
    }

    include servers/*.conf;
}

Нам не понадобиться PHP в домене по умолчанию и я сделал возможность писать в отдельный лог доступ к конкретному домену.

Перезапускаем наши сервисы:

brew services restart –all

И откроем http://localhost/ - должна появится пустая страница без ошибок.

Валидный локальный SSL с помощью openssl

Добавим современности, а именно SSL сертификат для нашего домена!

Выпускаем сертификаты для localhost:

openssl req -x509 -nodes -days 365 -newkey rsa:4096 \
            -addext "subjectAltName = DNS:localhost" \
            -addext "extendedKeyUsage = serverAuth" \
            -keyout /opt/homebrew/var/ssl/localhost.key \
            -out /opt/homebrew/var/ssl/localhost.crt

И добавим новый блок server {} в конфиг Nginx чтобы сайт открывался по SSL:

server {
        listen 443 ssl;
        listen [::]:443 ssl;
        ssl_certificate      /opt/homebrew/var/ssl/localhost.crt;
        ssl_certificate_key  /opt/homebrew/var/ssl/localhost.key;
        ssl_ciphers          HIGH:!aNULL:!MD5;

        server_name  localhost;
        index index.php;
        charset utf-8;
        root /opt/homebrew/var/www/localhost/public;
        access_log  /opt/homebrew/var/log/nginx/localhost.access.log;
        error_log  /opt/homebrew/var/log/nginx/localhost.error.log;
        location ~ /\.ht {
            deny  all;
        }
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Content-Type-Options "nosniff";
    }
Не добавляйте HTTPS/SSL версию сервера, пока не сгенерировали файлы сертификата!

Перезагружаем nginx:

brew services restart nginx

И открываем https://localhost/:

Печальная картина, неправда ли?

Давайте добавим наши сертификаты в систему как доверенные:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /opt/homebrew/var/ssl/localhost.crt

И снова открываем https://localhost/:

Как видим, наш сертификат валидный и мы можем спокойно пользоваться доменом по SSL.

phpMyAdmin

Скачаем phpMyAdmin с официального сайта и разархивируем в папку /opt/homebrew/var/www/localhost/public/phpmyadmin .

Настроим соединение с нашим сервером баз данных в файле /opt/homebrew/var/www/localhost/public/phpmyadmin/config.inc.php:

/**
 * First server
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'config';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'secret';
Данные доступа взяты из первой части статьи

И теперь нам доступен стандартный и для многих привычный https://localhost/phpmyadmin/ !

phpPgAdmin

Просто скачиваем https://github.com/ReimuHakurei/phpPgAdmin/releases и заливаем в папку /opt/homebrew/var/www/localhost/public/phppgadmin/ .

И теперь нам доступен стандартный и для многих привычный https://localhost/phppgadmin/!

phpRedisAdmin

Аналогичная утилита для работы с Redis:

composer create-project -s dev erik-dubbelboer/php-redis-admin /opt/homebrew/var/www/localhost/public/phpredisadmin/

Здесь настраивать ничего не нужно – все работает из коробки по адресу https://localhost/phpredisadmin/:

Шаблон Nginx для домена

Чтобы каждый раз не создавать руками конфиг для нового домена в Nginx создадим шаблон /opt/homebrew/etc/nginx/servers/newdomain.conf.template:

https://gist.github.com/alexvenga/dba1680fd95f134800c2b993eb02722e

Сразу вызову пояснительную бригаду:

  • Сайты должны и всегда открываться по SSL – это стандарт современного веба, без этого вы многое не сможете сделать локально при разработке.
  • Я храню в файле шаблона команды для генерации SSL-сертификатов, чтобы было просто их сгенерировать при создании нового домена и потом эти строки удаляю.
  • Как я использую этот шаблон будет объяснено в следующей статье как развернуть первый сайт на примере MoonShine Demo .

Pretty localhost

Вот мы тут на устанавливали кучу инструментов, давайте теперь сделаем единую точку входа http://localhost/ и заменим наш индексный файл на что-то вроде:

https://gist.github.com/alexvenga/8b07f07e4de405e4b6fba46b52f322c2

И теперь, открывая http://localhost/, у нас все под рукой!

ОбщайсяРазвивайсяУчисьРаботай
ОбщайсяРазвивайсяУчисьРаботай
ОбщайсяРазвивайсяУчисьРаботай
ОбщайсяРазвивайсяУчисьРаботай