На линукс можно поставить как локально, так и через Docker при этом не изменится ни скорость, ни способы взаимодействия с ОС (не вдаваясь в подробности), в отличии от систем Windows или MacOS, где Docker работает иначе, что сказывается на скорости ответа и в целом на работе с докером, кроме того оказывается довольно большая нагрузка на жесткий диск. Поэтому некоторые сервисы системы можно установить локально
Brew
Устанавливаем brew.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
в ходе установке будет установлена xcode
по факту brew — это установщик пакетов, который дополняет то, что не предоставляет apple. Кроме того, можно создать свой пакет, который будет устанавливать пакеты из исходного кода из репозиториев. Как пишут на сайте brew
— это ruby
и git
.
дополнительное руководство по установке можно посмотреть на digital ocean
PHP
Установка
brew install php
Запуск php-fpm
brew services start php
теперь можно обращаться к 127.0.0.1:9000 (по-умолчанию при использовании стандартного файла php-fpm) директива listen = 127.0.0.1:9000
в файле php-fpm.d/www.conf
php конфиг можно найти /usr/local/etc/php/8.1/
Остановка, перезапуск
# restart
brew services restart php
# stop
brew services stop php
nginx
Установка
brew install nginx
Настройка и запуск
Для запуска на 80 порту nginx требует root права, поэтому можно либо не использовать порт 80 (использовать другие порты, например 8080) или запускать от root. Это так же справедливо и для запуска через сервис.
# с использованием 80 порта
sudo brew services start nginx
# или без сервиса
sudo nginx
если использовать порт отличный от 80, то sudo не обязателен
конфиг для nginx можно найти /usr/local/etc/nginx
стандартный конфига содержит сервер по-умолчанию с именем localhost на порту 8080, чтобы добавить свой сервер, можно либо в nginx.conf
добавить свои настройки, либо это сделать в каталоге servers
пример конфига (размещать либо в nginx.conf внутри http, либо в отдельном файле например по имени сервера с расширением .conf в папке servers)
server {
listen 80;
root /Users/USERNAME/www;
index index.php index.html index.htm;
server_name example.com;
location / {
try_files $uri $uri/ /index.html;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /Users/USERNAME/www;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Если при запуске вы увидете ошибку 403 Forbidden
, скорей всего файл(ы), указанный в директиве index
не был найден. Возможно стоит проверить указанный путь root
.
Так же может быть ошибка 404 Not Found
, но при этом в логах будет forbidden, то как вариант можно изменить права на папку пользователя
chmod 755 $HOME # /Users/username
Расширения php
Для установки некоторых расширений нужно использовать pecl. Pecl ставится по-умолчанию с php, но если не установился, то можно установить вручную, например выполнив команду:
curl -O https://pear.php.net/go-pear.phar
php -d detect_unicode=0 go-pear.phar # или с sudo для установки глобально
после установки расширений php-fpm необходимо перезапустить
brew services restart php
XDebug
pecl install xdebug
при установке через pecl
будет установлено расширение, собрано и установлено в необходимую папку php и добавлено в php.ini
imagick
установка imagick
требует удовлетворения зависимостей
brew install pkg-config imagemagick
далее устанавливаем расширение через pecl
pecl install imagick
при ошибке permission denied
, возможно необходимо установить imagick от root
sudo pecl install imagick
Redis
расширение для редис php-redis требует установку через исходный код
git clone https://www.github.com/phpredis/phpredis.git
cd phpredis
phpize && ./configure && make && sudo make install
поскольку сборка идет самостоятельно, то необходимо
- скопировать файл расширения
modules/redis.so
в папку с расширениями (указана в php.ini в директивеextension_dir=/usr/local/lib/php/pecl/20210902
) - добавить
extension=redis.so
вphp.ini
- перезапустить php
Установка Postgresql
brew install postgresql
Запуск и остановка
brew services start postgresql
brew services stop postgresql
Первичная настройка
Вход в консоль psql
psql postgres # войдем в postgresql от root пользователя
Создадим пользователя с именем username
паролем password
и с правом создавать базу данных.
CREATE ROLE username WITH LOGIN PASSWORD 'password';
ALTER ROLE username CREATEDB;
Установка pg_dump
brew install libpq
для отображения команды в консоли, нужно добавить
# ZSH
echo 'export PATH="/usr/local/opt/libpq/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# Bash
echo 'export PATH="/usr/local/opt/libpq/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
Node
brew install node
brew install node@14 # для установки другой версии
для того, чтобы при вызове node
в консоли использовалась необходимая версия, можно добавить в ~/.zshrc строку alias node='export PATH="/usr/local/opt/node@14/bin:$PATH"; node -v'
или аналогичным образом можно разделить вызов по версиям:
alias node16='export PATH="/usr/local/bin:/usr/local/opt/node@16/bin:$PATH"; node -v'
alias node14='export PATH="/usr/local/opt/node@14/bin:$PATH"; node -v'
Разное
Brew Alias
установка alias
brew alias aliasname=command --new
список алиасов
brew alias
редактирование и удаление алиасов можно производить в папке /Users/username/.brew-aliases
Источники
- How To Install and Use Homebrew on macOS | DigitalOcean
- Как установить и настроить PHP в macOS — Блог HTML Academy
- How to Configure Nginx to Execute PHP Using PHP-FPM
- Install Pecl on Mac — Black Deer Dev
- How to install PHP, Pear, PECL, and APC with Homebrew on Mac OS X? — Super User
- Install PHP’s imagick extension on Mac with Brew
- php — Install phpredis MAC OSX — Stack Overflow
- Installing PostgreSQL on a Mac with Homebrew
- how to install pg_dump on mac Code Example
- How to switch between Node.js versions with Homebrew (2021) | RJS
- mac osx — nginx symlinks permission denied / 403 Forbidden on Mac OSX — Server Fault