A instalação do servidor web é realizada com um único comando:
brew install nginx
Para versões específicas, edite a fórmula com brew edit nginx e altere a URL de download no início do arquivo.
Após a instalação, os comandos de gerenciamento são:
# Iniciar o serviço
sudo nginx
# Operações de controle
nginx -s reload # Recarregar configuração
nginx -s stop # Parar
nginx -s quit # Encerrar graciosamente
nginx -s reopen # Reiniciar
# Validação
nginx -t
O servidor escuta na porta 8080 por padrão. Para alterar para a porta 80, modifique o arquivo /usr/local/etc/nginx/nginx.conf:
server {
listen 80;
root /usr/local/var/www;
}
O diretório raiz padrão fica em /usr/local/Cellar/nginx/[versão]/html.
Execução automática do Nginx
Configure o serviço para iniciar com o sistema:
mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/nginx/*/homebrew.mxcl.nginx.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
Para portas abaixo de 1024 (como a 80), conceda privilégios elevados:
sudo chown root:wheel /usr/local/opt/nginx/bin/nginx
sudo chmod u+s /usr/local/opt/nginx/bin/nginx
Utilizaremos o MariaDB, fork compatível com MySQL:
brew install mariadb
Inicialize a estrutura de dados:
mysql_install_db \
--verbose \
--user=$(whoami) \
--basedir="$(brew --prefix mariadb)" \
--datadir=/usr/local/var/mysql \
--tmpdir=/tmp
Após a inicialização, o acesso é permitido sem autenticação. Defina a senha do administrador:
/usr/local/opt/mariadb/bin/mysqladmin -u root password 'sua-senha-segura'
Execute o script de segurança para remover acessos anônimos e o banco de teste:
/usr/local/opt/mariadb/bin/mysql_secure_installation
A partir de então, conecte-se com:
mysql -u root -p
Configuração de serviço e parâmetros
Ative a inicialização automática:
mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/mariadb/*/homebrew.mxcl.mariadb.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist
Para interromper o serviço:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist
Exemplo de configuração em /usr/local/etc/my.cnf:
[mysqld]
port = 3306
server_id = 1
character-set-server = utf8mb4
default-storage-engine = InnoDB
socket = /tmp/mysql.sock
max_connections = 50
innodb_buffer_pool_size = 256M
[client]
port = 3306
default-character-set = utf8mb4
O macOS inclui uma instalação básica de PHP, mas sem extensões essenciais. Para uma versão completa, adicione os repositórios especializados:
brew tap homebrew/dupes
brew tap shivammathur/php
Liste as versões disponíveis:
brew search php
Instale a versão desejada com suporte a FPM. Exemplo com PHP 8.2:
brew install php@8.2 --with-fpm
Para verificar todas as opções de compilação:
brew options php@8.2
Ajuste de variáveis de ambiente
Como o sistema possui PHP nativo, priorize a versão do Homebrew adicionando ao ~/.zshrc (ou ~/.bash_profile):
export PATH="$(brew --prefix php@8.2)/bin:$PATH"
Aplique as alterações:
source ~/.zshrc
Gerenciamento do serviço PHP-FPM
Arquivos de configuração:
/usr/local/etc/php/8.2/php.ini— Configurações gerais/usr/local/etc/php/8.2/php-fpm.d/www.conf— Pool de processos
Inicie manualmente:
php-fpm
Para execução em background, altere em php-fpm.conf:
daemonize = yes
Valide alterações:
php-fpm -t
Configuração de inicialização automática:
mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/php@8.2/*/homebrew.mxcl.php@8.2.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php@8.2.plist
Script de controle personalizado
Crie ~/bin/fpmctl para gerenciar o processo:
#!/usr/bin/env bash
acao=$1
arquivo_pid="/usr/local/var/run/php-fpm.pid"
iniciar() {
if [[ -f "$arquivo_pid" ]] && kill -0 $(cat "$arquivo_pid") 2>/dev/null; then
echo "PHP-FPM já está em execução"
return
fi
php-fpm
echo "PHP-FPM iniciado"
}
parar() {
if [[ ! -f "$arquivo_pid" ]]; then
echo "Arquivo PID não encontrado"
return
fi
local pid=$(cat "$arquivo_pid")
kill -QUIT "$pid" 2>/dev/null || kill -TERM "$pid" 2>/dev/null
rm -f "$arquivo_pid"
echo "PHP-FPM encerrado"
}
case "$acao" in
start) iniciar ;;
stop) parar ;;
restart) parar; sleep 1; iniciar ;;
status)
if [[ -f "$arquivo_pid" ]] && kill -0 $(cat "$arquivo_pid") 2>/dev/null; then
echo "PHP-FPM ativo (PID: $(cat $arquivo_pid))"
else
echo "PHP-FPM inativo"
fi
;;
*) echo "Uso: fpmctl {start|stop|restart|status}" ;;
esac
Torne executável:
chmod +x ~/bin/fpmctl
Edite /usr/local/etc/nginx/nginx.conf para processar arquivos PHP:
server {
listen 80;
server_name localhost;
root /usr/local/var/www;
index index.php index.html;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_intercept_errors on;
}
location / {
try_files $uri $uri/ =404;
}
}
Crie um arquivo de teste:
echo '<?php phpinfo(); ?>' > /usr/local/var/www/info.php
Reinicie o Nginx e acesse http://localhost/info.php.
Resolução de problemas comuns
Erro de hash SHA256 durante download do PHP:
Error: SHA256 mismatch
Expected: ...
Actual: ...
Solução: Limpe o cache e utilize mirror alternativo editando a fórmula:
rm /Library/Caches/Homebrew/php@8.2-*
brew edit shivammathur/php/php@8.2
Altere a URL do source para um mirror confiável como https://www.php.net/distributions/ ou espelhos regionais.
Porta 9000 ocupada:
lsof -i :9000
kill -9 $(lsof -t -i:9000)
Ou modifique a porta no www.conf:
listen = 127.0.0.1:9001
Atualize correspondemente no Nginx.