Instale e configure manualmente o Nginx, o MySQL e o PHP em uma instância ECS para executar sites dinâmicos, como WordPress ou Magento, com controle total sobre cada componente.
Arquitetura da solução
|
|
|
Procedimento
Recomendamos uma instância ECS com pelo menos 2 GiB de memória.
Etapa 1: Preparar a instância
Configure o acesso público, abra a porta 80 no grupo de segurança e atualize os pacotes do sistema.
-
Configure o acesso público.
Verifique se sua instância ECS possui um endereço IP público ou um Elastic IP Address (EIP). Consulte Ativar acesso público para uma instância.
-
Adicione uma regra de grupo de segurança.
No grupo de segurança da sua instância ECS, adicione uma regra de entrada para permitir tráfego TCP na porta 80. Consulte Adicionar uma regra de grupo de segurança.
-
Atualize os pacotes do sistema.
Alibaba Cloud Linux 3 / CentOS 8
-
Faça logon na instância ECS.
Acesse ECS console - Instances. No canto superior esquerdo, selecione a região e o grupo de recursos de destino.
Na página de detalhes da instância, clique em Connect e selecione Workbench. Siga as instruções na tela para fazer logon.
-
Atualize todos os pacotes.
sudo dnf update -y
Alibaba Cloud Linux 2 / CentOS 7
-
Faça logon na instância ECS.
Acesse ECS console - Instances. No canto superior esquerdo, selecione a região e o grupo de recursos de destino.
Na página de detalhes da instância, clique em Connect e selecione Workbench. Siga as instruções na tela para fazer logon.
-
Atualize todos os pacotes.
sudo yum update -y
Ubuntu
-
Faça logon na instância ECS.
Acesse ECS console - Instances. No canto superior esquerdo, selecione a região e o grupo de recursos de destino.
Na página de detalhes da instância, clique em Connect e selecione Workbench. Siga as instruções na tela para fazer logon.
-
Atualize todos os pacotes.
sudo apt update -y && sudo apt upgrade -y -
Adicione o repositório do Nginx e instale-o.
Alibaba Cloud Linux 3 / CentOS 8
# Add the official Nginx repository. sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF' [nginx-stable] name=nginx stable repo baseurl=https://nginx.org/packages/centos/8/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true EOF # Install Nginx. sudo dnf -y install nginxAlibaba Cloud Linux 2 / CentOS 7
# Add the official Nginx repository. sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF' [nginx-stable] name=nginx stable repo baseurl=https://nginx.org/packages/centos/7/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true EOF # Install Nginx. sudo yum -y install nginxUbuntu
# Install dependencies for Nginx. sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring # Import the official Nginx signing key to verify package authenticity. curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null # Set up the APT repository for Nginx. echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list # Install Nginx. sudo apt update sudo apt install -y nginx -
Inicie o Nginx e ative-o na inicialização.
O sinalizador
enable --nowinicia o serviço e o ativa na inicialização.sudo systemctl enable --now nginx Verifique se o Nginx está em execução. Execute
curl http://127.0.0.1. Se a saída contiver o HTML da página de boas-vindas do Nginx, a instalação foi bem-sucedida.-
Instale o MySQL.
Alibaba Cloud Linux 3 / CentOS 8
# Alibaba Cloud Linux 3 requires compat-openssl10 for compatibility with older OpenSSL versions. if [ -f /etc/os-release ]; then . /etc/os-release if [ "$ID" = "alinux" ] && [ "$VERSION_ID" = "3" ]; then sudo yum install -y compat-openssl10 fi fi # Add the YUM repository for MySQL 8.4. sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el8-1.noarch.rpm # Install the MySQL service. sudo dnf install -y mysql-serverAlibaba Cloud Linux 2 / CentOS 7
# Add the repository for MySQL 8.4. sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el7-1.noarch.rpm # Install the MySQL service. sudo yum install -y mysql-serverUbuntu
# The default Ubuntu repository includes MySQL, so you can install it directly. # Ubuntu 20.04 and later versions install MySQL 8.0 by default. # Ubuntu 18.04 and earlier versions install MySQL 5.x by default. sudo apt install -y mysql-server -
Inicie o MySQL e ative-o na inicialização.
Alibaba Cloud Linux / CentOS
sudo systemctl enable --now mysqldUbuntu
sudo systemctl enable --now mysql -
Reforce a segurança da instalação.
A configuração padrão do MySQL permite usuários anônimos e logon remoto como root. Execute o script de segurança para proteger a instalação.
-
Obtenha a senha inicial do root.
Esta etapa aplica-se apenas ao Alibaba Cloud Linux e ao CentOS. O Ubuntu usa autenticação baseada em socket para o root por padrão.
# Extract and display the temporary password from the log. sudo grep 'temporary password' /var/log/mysqld.log -
Execute o script de segurança.
Execute
sudo mysql_secure_installatione siga as instruções:-
Redefina a senha do root: use a senha temporária para fazer logon e defina uma nova senha.
Use uma senha forte com pelo menos 12 caracteres, incluindo letras maiúsculas, minúsculas, números e caracteres especiais.
Remova usuários anônimos: insira Y.
Desative o logon remoto como root: insira Y.
Remova o banco de dados de teste: insira Y.
Recarregue as tabelas de privilégios: insira Y.
-
-
-
Adicione um repositório PHP e instale o PHP.
Alibaba Cloud Linux 3 / CentOS 8
# Add the Remi repository. cat > /etc/yum.repos.d/remi.repo << 'EOF' [remi] name=Remi\'s RPM Repository for Enterprise Linux 8 - x86_64 baseurl=https://rpms.remirepo.net/enterprise/8/remi/x86_64/ enabled=1 gpgcheck=1 gpgkey=https://rpms.remirepo.net/RPM-GPG-KEY-remi2024 [remi-safe] name=Remi Safe Repository baseurl=https://rpms.remirepo.net/enterprise/8/safe/x86_64/ enabled=1 gpgcheck=1 gpgkey=https://rpms.remirepo.net/RPM-GPG-KEY-remi2024 EOF # Import the GPG key. rpm --import https://rpms.remirepo.net/RPM-GPG-KEY-remi2024 # Install yum-utils. dnf install -y yum-utils # Install PHP, PHP-FPM, and the MySQL extension. dnf install -y php php-fpm php-mysqlndAlibaba Cloud Linux 2 / CentOS 7
# Install the Remi repository. sudo yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm # Install yum-utils and enable the PHP 8.2 repository. sudo yum install -y yum-utils sudo yum-config-manager --enable remi-php82 # Install PHP, PHP-FPM, and the MySQL extension. sudo yum install -y php php-fpm php-mysqlndUbuntu
# Install the tool for managing PPAs. sudo apt install -y software-properties-common # Add the ondrej/php PPA repository. sudo add-apt-repository -y ppa:ondrej/php # Install PHP 8.2, PHP-FPM, and the MySQL extension. sudo apt install -y php8.2 php8.2-fpm php8.2-mysql -
Inicie o PHP-FPM e ative-o na inicialização.
Alibaba Cloud Linux / CentOS
sudo systemctl enable --now php-fpmUbuntu
sudo systemctl enable --now php8.2-fpm -
Faça backup do arquivo de configuração padrão do Nginx.
sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak -
Obtenha o endereço de comunicação do serviço PHP-FPM.
O Nginx usa esse endereço para encaminhar solicitações PHP ao PHP-FPM.
Alibaba Cloud Linux / CentOS
PHP_FPM_LISTEN=$(sudo sed -n 's/^\s*listen\s*=\s*//p' /etc/php-fpm.d/www.conf | head -n 1) echo "$PHP_FPM_LISTEN"Ubuntu
PHP_FPM_LISTEN=$(sudo sed -n 's/^\s*listen\s*=\s*//p' /etc/php/8.2/fpm/pool.d/www.conf | head -n 1) echo "$PHP_FPM_LISTEN" -
Configure o Nginx para encaminhar solicitações
.phpao PHP-FPM.Substitua
<PHP_FPM_ADDRESS>pelo endereço de comunicação obtido na etapa anterior e execute o comando.Se a saída for um caminho de arquivo (por exemplo, /run/php-fpm/www.sock), o serviço usa um socket Unix. O formato do endereço é
unix:FILE_PATH, comounix:/run/php-fpm/www.sock.Se a saída for um endereço IP e porta (por exemplo, 127.0.0.1:9000), o serviço usa um socket TCP. Use o endereço IP e a porta diretamente como endereço de comunicação.
sudo tee /etc/nginx/conf.d/default.conf <<-'EOF' server { listen 80; server_name localhost; root /usr/share/nginx/html; # Set the default index files. index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } # Forward .php requests to PHP-FPM. location ~ \.php$ { fastcgi_pass <PHP_FPM_ADDRESS>; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } EOF -
Teste o arquivo de configuração.
sudo nginx -tSe a saída contiver successful, a configuração está correta. Prossiga para a próxima etapa.
-
Se a saída contiver failed, verifique se você substituiu o endereço corretamente ou restaure o backup:
sudo mv /etc/nginx/conf.d/default.conf.bak /etc/nginx/conf.d/default.conf
-
Reinicie o Nginx para aplicar a nova configuração.
sudo systemctl restart nginx -
Verifique o processamento de PHP pelo Nginx.
-
Crie um arquivo de teste: gere um arquivo com
phpinfo()para exibir a configuração do PHP.echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/html/phpinfo.php -
Verifique no navegador: acesse
http://<ECS_PUBLIC_IP>/phpinfo.php.Sucesso: a página exibe detalhes do ambiente PHP.
Falha: a página exibe "File not found" ou o navegador baixa o arquivo.
Limpe o arquivo de teste: exclua este arquivo após a verificação. A página
phpinfoexpõe informações confidenciais do servidor.
-
-
Verifique a conectividade entre PHP e MySQL.
Crie um script PHP para testar a conectividade com o banco de dados usando a extensão mysqlnd.
-
Crie um banco de dados e um usuário. Faça logon no MySQL com a senha
rootdefinida na Etapa 3.sudo mysql -u root -pNo prompt
mysql>, crie um banco de dados chamadowebapp, um usuário chamadowebusere conceda ao usuário todos os privilégios nesse banco de dados.CREATE DATABASE webapp; /* Replace <YourPassword> with a strong password. */ CREATE USER 'webuser'@'localhost' IDENTIFIED BY '<YourPassword>'; GRANT ALL PRIVILEGES ON webapp.* TO 'webuser'@'localhost'; FLUSH PRIVILEGES; EXIT; -
Crie um arquivo de teste de conexão com o banco de dados. Substitua
<YourPassword>pela senha do usuário da etapa anterior e execute o comando.sudo tee /usr/share/nginx/html/test.php <<-'EOF' <?php $servername = "localhost"; $username = "webuser"; $password = "<YourPassword>"; $dbname = "webapp"; // Create a connection $conn = new mysqli($servername, $username, $password, $dbname); // Check the connection if ($conn->connect_error) { die("Database connection failed: " . $conn->connect_error); } echo "Database connection successful!"; ?> EOFVerifique no navegador: acesse
http://<ECS_PUBLIC_IP>/test.php. Se a página exibir Database connection successful!, a conexão funciona.Limpe o arquivo de teste: este script contém credenciais de banco de dados em texto simples. Exclua-o imediatamente após o teste.
-
Grupo de segurança: verifique se o grupo de segurança permite tráfego de entrada na porta 80.
Firewall: verifique se o firewall do sistema operacional (como
firewalldouufw) permite tráfego na porta 80.Serviço Nginx: execute
sudo systemctl status nginxpara verificar se o Nginx está em execução. Caso contrário, verifique os logs comsudo journalctl -xeu nginx.Conflito de porta: verifique se a porta 80 está ocupada por outro aplicativo. Consulte Solucionar problemas de conectividade de porta para uma instância ECS.
Serviço PHP-FPM: execute
sudo systemctl status php-fpm(ouphp8.2-fpmno Ubuntu) para verificar se o serviço está em execução.Caminho do socket: verifique se o caminho
unix:na diretivafastcgi_passcorresponde ao caminholistenna configuração do PHP-FPM.SELinux/AppArmor: no CentOS ou Alibaba Cloud Linux, o SELinux pode bloquear a comunicação entre Nginx e PHP-FPM. Execute
sestatuse verifique/var/log/audit/audit.logem busca de negações.Permissões do socket: verifique se o usuário do Nginx tem acesso de leitura/gravação ao arquivo de socket.
Etapa 2: Instalar o Nginx
Etapa 3: Instalar o MySQL
Etapa 4: Instalar o PHP
Instale o PHP, o PHP-FPM e a extensão do MySQL.
Etapa 5: Configurar o Nginx para processar PHP
Por padrão, o Nginx serve apenas arquivos estáticos. Configure-o para encaminhar solicitações
.phpao PHP-FPM, garantindo que as páginas PHP sejam renderizadas em vez de baixadas.Etapa 6: Verificar a pilha
Crie arquivos de teste para confirmar que o Nginx encaminha solicitações PHP e que o PHP consegue se conectar ao MySQL.
Perguntas frequentes
Timeout no navegador ou "site não pode ser alcançado"
Esse erro geralmente indica um problema de rede. Solucione o problema na seguinte ordem:
O navegador exibe "502 Bad Gateway"
Esse erro significa que o Nginx não consegue se comunicar com o PHP-FPM.
Ativar acesso remoto ao MySQL
Por padrão, o MySQL proíbe logon remoto. Para ativá-lo, crie um usuário dedicado para acesso remoto em vez de usar o root. Consulte Adicionar um usuário para acesso remoto ao MySQL.
-