Instale Nginx, MariaDB, PHP (pilha LEMP) no servidor Ubuntu 18.04 LTS
Em nosso tutorial anterior, discutimos como instalar a pilha LAMP no servidor Ubuntu 18.04 LTS. Neste tutorial, veremos como instalar Nginx, MariaDB, PHP (pilha LEMP) na edição mínima de servidor Ubuntu 18.04 LTS. Como mencionei no tutorial anterior, LEMP é o acrônimo de Linux, Engine-x, MariaDB/M ySQL, PHP/Perl/Python. Para os fins deste tutorial, usarei a seguinte máquina de teste:
- Sistema operacional: Servidor Ubuntu 18.04 LTS
- Endereço IP: 192.168.225.22/24
Vamos começar.
Instale Nginx, MariaDB, PHP (pilha LEMP) no Ubuntu 18.04 LTS
1. Instale o Nginx
Abra o Terminal e execute o seguinte comando para instalar o servidor web Nginx:
sudo apt install nginx
Após instalar o Nginx, verifique se o serviço Nginx está rodando ou não usando o comando:
sudo systemctl status nginx
Exemplo de resultado:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-07-07 12:10:05 UTC; 57s ago
Docs: man:nginx(8)
Process: 1846 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 1833 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 1849 (nginx)
Tasks: 2 (limit: 2322)
CGroup: /system.slice/nginx.service
├─1849 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─1851 nginx: worker process
Jul 07 12:10:05 ubuntuserver systemd[1]: Starting A high performance web server and a reverse proxy server...
Jul 07 12:10:05 ubuntuserver systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Jul 07 12:10:05 ubuntuserver systemd[1]: Started A high performance web server and a reverse proxy server.
Se você vir uma saída como a acima, o serviço Nginx foi iniciado.
Caso ainda não tenha iniciado, você pode iniciá-lo usando o comando:
sudo systemctl start nginx
1.1 Ajuste o firewall para permitir o servidor web Nginx
Por padrão, o navegador Nginx não pode ser acessado de sistemas remotos se você tiver habilitado o firewall UFW no Ubuntu 18.04 LTS. Você deve permitir o tráfego http e https via UFW seguindo as etapas abaixo.
Primeiro, vamos ver quais aplicativos instalaram um perfil usando o comando:
$ sudo ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
Como você pode ver, os aplicativos Nginx e OpenSSH possuem perfis UFW instalados.
Se você olhar o perfil “Nginx Full ”, verá que ele permite o tráfego para as portas 80 e 443:
$ sudo ufw app info "Nginx Full"
Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server
Ports:
80,443/tcp
Agora, execute o seguinte comando para permitir o tráfego de entrada HTTP e HTTPS para este perfil:
$ sudo ufw allow in "Nginx Full"
Rules updated
Rules updated (v6)
Se você deseja permitir o tráfego https, mas apenas o tráfego http (80), execute:
sudo ufw app info "Nginx HTTP"
Vamos prosseguir e executar a página de teste do Nginx.
Para fazer isso, abra seu navegador da Web e navegue até http://localhost/ ou http://IP-Address/.
Você verá uma página parecida com a abaixo.
Se você vir um resultado como o acima, parabéns! O servidor Nginx está funcionando!
2. Instale MariaDB
MariaDB é o substituto imediato do servidor de banco de dados MySQL.
Para instalá-lo, execute:
sudo apt install mariadb-server mariadb-client
A versão do MariaDB nos repositórios oficiais do Ubuntu pode estar desatualizada. Se você deseja instalar o MariaDB mais recente, adicione o repositório oficial do MariaDB para Ubuntu e instale-o conforme mostrado abaixo.
Primeiro, adicione o repositório MariaDB e importe a chave conforme mostrado abaixo.
sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://sgp1.mirrors.linux-console.net/mariadb/repo/10.3/ubuntu bionic main'
Após adicionar o repositório, execute os seguintes comandos para instalar o MariaDB.
sudo apt update
sudo apt install mariadb-server
Verifique se o serviço MariaDB está rodando ou não usando o comando:
sudo systemctl status mysql
Exemplo de resultado:
● mariadb.service - MariaDB database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-07-07 12:15:13 UTC; 2min 57s ago
Main PID: 3428 (mysqld)
Status: "Taking your SQL requests now..."
Tasks: 27 (limit: 2322)
CGroup: /system.slice/mariadb.service
└─3428 /usr/sbin/mysqld
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: mysql
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: performance_schema
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: Phase 6/7: Checking and upgrading tables
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: Processing databases
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: information_schema
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: performance_schema
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: Phase 7/7: Running 'FLUSH PRIVILEGES'
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: OK
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3534]: Checking for insecure root accounts.
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3538]: Triggering myisam-recover for all MyISAM tables and aria-recover for all Aria tables
Mysql está rodando!
2.1 Configurar senha do usuário administrativo (root) do banco de dados
Durante a instalação do MariaDB, será definida a senha para a conta do usuário administrativo (root).
Se você tentar configurar a senha manualmente usando o comando:
mysql_secure_installation
Você não pode fazer login e definir a senha. Você verá um erro como abaixo.
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Enter current password for root (enter for none):
Para corrigir esse problema, faça login como administrador do banco de dados MySQL usando o comando:
sudo mysql -u root
Após fazer login no prompt do MySQL, execute os seguintes comandos um por um.
use mysql;
update user set plugin='' where User='root';
flush privileges;
\q
Agora, você pode definir a senha administrativa do banco de dados usando o comando:
mysql_secure_installation
Digite a senha e pressione a tecla ENTER para aceitar os valores padrão.
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): # Press ENTER
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] # Press ENTER
New password: # Enter password
Re-enter new password: # Re-enter password
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] # Press ENTER
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] # Press ENTER
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] # Press ENTER
- Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
... Failed! Not critical, keep moving...
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] # Press ENTER
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
É isso. A senha da conta do usuário administrativo do banco de dados foi definida.
3. Instale PHP
Para instalar o PHP, execute:
sudo apt-get install php-fpm php-mysql
Depois de instalar o PHP, precisamos protegê-lo fazendo uma alteração simples.
Para fazer isso, edite o arquivo php.ini:
sudo vi /etc/php/7.2/fpm/php.ini
Encontre a seguinte linha:
;cgi.fix_pathinfo=1
Remova o comentário e altere seu valor de 1 para 0 (zero).
cgi.fix_pathinfo=0
Salve e feche o arquivo. Em seguida, reinicie o serviço PHP-FPM para que as alterações tenham efeito.
sudo systemctl restart php7.2-fpm
Verifique se o serviço PHP-FPM está funcionando ou não usando o comando:
sudo systemctl status php7.2-fpm
Exemplo de resultado:
● php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-07-07 12:23:46 UTC; 7s ago
Docs: man:php-fpm7.2(8)
Main PID: 11005 (php-fpm7.2)
Status: "Ready to handle connections"
Tasks: 3 (limit: 2322)
CGroup: /system.slice/php7.2-fpm.service
├─11005 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
├─11018 php-fpm: pool www
└─11019 php-fpm: pool www
Jul 07 12:23:46 ubuntuserver systemd[1]: Starting The PHP 7.2 FastCGI Process Manager...
Jul 07 12:23:46 ubuntuserver systemd[1]: Started The PHP 7.2 FastCGI Process Manager.
3.1 Configure o Nginx para usar PHP-FPM
Precisamos configurar o Nginx para usar PHP-FPM.
Para fazer isso, edite o arquivo vhost (bloco de servidor) /etc/nginx/sites-available/default padrão do Nginx:
sudo vi /etc/nginx/sites-available/default
Encontre a seção Servidor e defina o FQDN ou endereço IP do seu servidor Ubuntu conforme mostrado abaixo. E também, verifique se você adicionou a linha index.php. Todas as alterações são mostradas em negrito.
[...]
server {
listen 80 default_server;
listen [::]:80 default_server;
[...]
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name 192.168.225.22;
[...]
Vamos analisar as linhas acima e ver o que cada linha significa.
- ouvir 80; –> ouvir ipv4.
- ouvir [::]:80 default_server ; –> ouvir ipv6.
- root /var/www/html; –> Diretório raiz do documento Nginx.
- server_name 192.168.225.22; –> Endereço IP do nosso servidor Ubuntu.
Em seguida, role um pouco para baixo e encontre a seção #location ~ \.php$.
Remova o comentário e modifique as seguintes linhas conforme mostrado abaixo.
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
# With php-cgi (or other tcp sockets):
fastcgi_pass 127.0.0.1:9000;
}
deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
Salve e saia do arquivo.
Preste muita atenção ao modificar a diretiva fastcgi_pass dentro do bloco location ~ \.php$. Você deve mencionar o nome correto do arquivo com o que realmente está armazenado no diretório /run/php do seu servidor. Para verificar, execute:
$ ls /run/php/
php7.2-fpm.pid php7.2-fpm.sock
Como você pode ver, o nome do arquivo é php7.2-fpm.sock, não php7.0-fpm.sock, que é o que está listado em no localização ~ \.php$ diretiva. Certifique-se de ter mencionado o nome correto nesta diretiva.
Verifique se há erros de sintaxe no arquivo de configuração do Nginx usando o comando:
sudo nginx -t
Exemplo de resultado:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Se você não encontrar nenhum erro, reinicie o serviço nginx para que as alterações tenham efeito.
Para fazer isso, execute:
sudo systemctl restart nginx
Agora, vamos criar um arquivo PHP de amostra para testar a configuração do PHP via navegador.
Para fazer isso, crie um arquivo chamado info.php na pasta raiz do documento Nginx.
sudo vi /var/www/html/info.php
Adicione as seguintes linhas:
<?php
phpinfo();
?>
Salve e saia do arquivo. Reinicie o serviço nginx para que as alterações tenham efeito.
Em seguida, abra seu navegador e navegue até http://IP-address/info.php.
Você verá os detalhes do PHP.
Parabéns! PHP está funcionando!!
3.2 Instale módulos PHP
Para melhorar a funcionalidade do PHP, você pode instalar alguns módulos PHP adicionais.
Para listar os módulos PHP disponíveis, execute:
sudo apt-cache search php- | less
Exemplo de resultado:
Use as setas e para mover para cima e para baixo entre o resultado. Para sair do resultado, digite q.
Para encontrar os detalhes de qualquer módulo php específico, por exemplo php-gd, execute:
sudo apt-cache show php-gd
Para instalar um módulo php, execute:
sudo apt-get install php-gd
Para instalar todos os módulos (embora não seja necessário), execute:
sudo apt-get install php*
Não se esqueça de reiniciar o serviço Nginx após instalar qualquer módulo php.
Parabéns! Configuramos com sucesso a pilha LEMP no servidor Ubuntu 18.04 LTS. Comece a implantar sites e aplicativos web em sua nova pilha web LEMP.
Saúde!