Deploy de um Projeto PHP na DigitalOcean - Parte 2 - Instalando e Configurando o MySQL

27 de julho de 2022
Ronaldo B.

Neste artigo iremos realizar a instalação e configuração do MySQL em nosso servidor Ubuntu hospedado na DigitalOcean. No primeiro artigo desta série nós instalamos e configuramos o PHP no servidor. Você pode conferir esse conteúdo clicando aqui.

Contudo, nos deparamos com um erro, que podemos ver na imagem abaixo:

Erro retornado em nosso servidor

O objetivo é que ao fim deste segundo artigo, possamos resolver esse problema.

Instalando o MySQL

Iremos iniciar atualizando os pacotes instalados com o comando sudo apt-get update.

Em seguida iremos instalar o pacote do MySQL, por meio do seguinte comando:

sudo apt-get install mysql-server -y

Após isso podemos começar a configurar o MySQL em nosso servidor. Para isso iremos executar o comando abaixo:

sudo mysql_secure_installation

Em seguida iremos escolher algumas opções para a configuração do serviço do MySQL. Faremos isso respondendo algumas perguntas. A primeira será quanto a definir uma senha segura para acessar nossa base de dados. Iremos responder sim.

Habilitando a definição de uma senha segura

À próxima opção será o nível de segurança de nossa senha. Os níveis vão de 0, que representa um nível fraco, e 2 que representa um nível de segurança alto, pois ele inclui uma senha com números e caracteres especiais. Será essa opção que escolheremos. Assim, basta digitar 2:

Escolhendo o nível de segurança da senha do MySQL

Será solicitado que digitemos nossa senha. Após fazer isso veremos a imagem abaixo:

Resultado da força estimada de nossa senha

Note que atingimos 100% de segurança com a nossa senha. Se a senha que você definir não atingir esse valor, você poderá alterá-la se desejar. Em nosso caso iremos apenas digitar Y e continuar com o processo de configuração.  

À próxima opção que iremos definir é quanto aos usuários anônimos. O MySQL por padrão cria esses usuários, mas devemos removê-los quando nosso Banco de Dados é levado para a produção. Assim, iremos responder "Sim" e remover tais usuários. 

Removendo os usuários anônimos do MySQL

À seguir iremos desabilitar o acesso remoto do usuário root ao Banco de Dados. Isso irá aumentar a segurança de nosso servidor. 

Desabilitando o acesso remoto do usuário root ao Banco de Dados

A próxima pergunta que iremos responder é se desejamos remover o Banco de Dados de testes,  criado por padrão pelo MySQL. Iremos selecionar "Sim".

Removendo o Banco de Dados teste de nosso MySQL

Por fim, iremos atualizar os privilégios de nossas tabelas. Para isso, basta responder "Sim" para a última pergunta:

Recarregando os privilégios de todas as tabelas

Com isso o serviço do MySQL estará completamente instalado e configurado em nosso servidor.

Criando Primeiros Usuários e Definindo Suas Permissões

Agora que o MySQL está instalado, vamos acessar nossa base de dados, por meio do comando abaixo:

mysql -u root -p

Vamos criar nosso Banco de Dados, que foi usado no projeto de nosso Curso Completo de PHP 7. Iremos criá-lo por meio do comando abaixo:

CREATE DATABASE db_ecommerce;

O próximo passo envolve criar o usuário de Banco de Dados que iremos utilizar para acessar nosso MySQL por meio do PHP. Iremos criá-lo usando todos os meios possíveis para acesso, ou seja, todas as maneiras em que ele pode ser identificado. Neste momento iremos informar a senha que definimos ao configurar o serviço do MySQL. Iremos executar os quatro comandos abaixo:

CREATE USER 'hcode'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bUFrd8%wtPuW$W7IFY';
CREATE USER 'hcode'@'%.%.%.%' IDENTIFIED WITH mysql_native_password BY 'bUFrd8%wtPuW$W7IFY';
CREATE USER 'hcode'@'%' IDENTIFIED WITH mysql_native_password BY 'bUFrd8%wtPuW$W7IFY';
CREATE USER 'hcode'@'0.0.0.0' IDENTIFIED WITH mysql_native_password BY 'bUFrd8%wtPuW$W7IFY';

A única parte que irá variar em seus comandos será a senha, que está por último, entre aspas.

Após criar o usuário, precisamos informar os privilégios, ou permissões, que ele terá. Iremos executar mais quatro comandos:

GRANT ALL PRIVILEGES ON *.* TO 'hcode'@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'hcode'@'%.%.%.%';
GRANT ALL PRIVILEGES ON *.* TO 'hcode'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'hcode'@'0.0.0.0';

Note que concedemos todos os privilégios ao usuário. Fizemos isso em nosso caso, mas geralmente o DBA de nosso projeto será o responsável por definir as permissões que cada usuário terá. 

Agora que já definimos os privilégios de nosso usuário, vamos recarregar todos os privilégios de nosso Banco de Dados, por meio seguinte comando:

FLUSH PRIVILEGES;

Por fim podemos sair do serviço do MySQL, usando o comando abaixo:

exit;

Configurando Acesso Remoto ao Banco de Dados

Nosso serviço já está funcionando. Entretanto, não desejamos acessar o servidor todas as vezes por meio da linha de comando para realizar alterações nele, isso não é muito agradável. Por isso, iremos configurar agora o acesso remoto ao Banco de Dados, para podermos alterá-lo por meio do MySQL Workbench por exemplo. 

Para realizar essa configuração, vamos acessar o arquivo de configuração do MySQL, por meio do seguinte comando:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Iremos procurar pela linha que possui a diretiva bind-address e defini-la com o valor que vemos abaixo:

bind-address           = 0.0.0.0
Definindo o IP remoto que pode acessar o MySQL

Após salvar essa alteração, vamos liberar o acesso à porta padrão do MySQL em nosso servidor, a porta 3306. Vamos usar o seguinte comando para isso:

sudo ufw allow 3306

Com todas essas configurações feitas, vamos reiniciar o serviço do MySQL, para que as mudanças sejam aplicadas:

sudo service mysql restart

Conectando ao MySQL Workbench

Agora estamos prontos para acessar o Banco de Dados de maneira remota. Vamos fazer isso criando uma nova conexão no MySQL Workbench. 

Iremos informar as credenciais de nosso servidor. Na opção Hostname iremos informar o mesmo IP usado para acessar nosso projeto no navegador. O usuário será o que criamos agora há pouco: "hcode".

Definindo as credenciais para acesso remoto de nosso Banco de Dados

Iremos clicar na opção "Store in Vault…" e então informar a senha que criamos para o acesso ao serviço do MySQL:

Informando a senha de acesso ao Banco de Dados

Em seguida iremos clicar em "Test Connection". Após alguns segundos deveremos ver a mensagem abaixo:

Mensagem de sucesso na conexão ao Banco de Dados remotamente

Essa mensagem de sucesso nos garante que o acesso ao Banco de Dados de maneira remota foi configurado com sucesso!

Ao acessar essa conexão, poderemos ver o nosso Banco de Dados db_ecommerce já criado. Vamos agora populá-lo com as tabelas e seus dados. Iremos usar um backup deste Banco que está disponível em nosso GitHub.

Basta colar a query e clicar no botão com símbolo de raio:

Símbolo de raio para executar as queries em nosso Banco de Dados
Executando os comandos para a criação de nosso Banco de Dados no servidor de produção

Após isso nosso Banco de Dados já estará completamente criado em Produção:

Todas as tabelas de nosso Banco de Dados em produção

Configurando Acesso do PHP ao MySQL e Últimos Ajustes

O último passo envolve configurar o acesso do PHP ao MySQL. Esse acesso está definido na classe Sql de nosso projeto, por meio de algumas constantes de conexão. A partir de agora essas constantes ficarão da seguinte forma:

const HOSTNAME = '127.0.0.1';
const USERNAME = 'hcode';
const PASSWORD = 'bUFrd8%wtPuW$W7IFY';
const DBNAME = 'db_ecommerce';

Perceba que definimos o IP local como o hostname da conexão. Fizemos isso pois o PHP e o serviço do MySQL estão no mesmo servidor. Se estivessem em máquinas diferentes, precisaríamos informar o outro IP. Além disso, a informação de senha irá variar de acordo com a senha que você definiu.

Isso já é o suficiente para que o PHP se conecte com o MySQL. Contudo, para que nosso projeto de fato funcione, precisamos realizar duas últimas configurações. A primeira envolve conceder permissão de escrita para o diretório views-cache, que é usado para armazenar arquivos de template em cache.

Para realizar essa configuração iremos acessar o diretório raiz de nosso projeto com o comando cd /var/www/hcode-store/ e executar o comando abaixo:

sudo chmod -R 777 views-cache/

A segunda configuração envolve permitir que as rotas de nosso projeto, criadas pelo framework Slim Framework, consigam ser identificadas por nosso servidor Nginx. Para isso, iremos acessar o arquivo de configuração do Nginx com o comando sudo nano /etc/nginx/sites-available/default e procurar pelas diretivas location / e location ~ \.php e definir o seguinte conteúdo para elas:

location / {
	try_files $uri /index.php$is_args$args;
}

location ~ \.php {
	try_files $uri =404;
	fastcgi_split_path_info ^(.+\.php)(/.+)$;
	include fastcgi_params;
	fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
	fastcgi_param SCRIPT_NAME $fastcgi_script_name;
	fastcgi_index index.php;
	fastcgi_pass 127.0.0.1:9000;
}
Definindo diretivas adicionais ao arquivo de configuração do Nginx

Após salvar esse arquivo, vamos reiniciar o serviço do Nginx com o comando sudo service nginx restart.

Agora, ao acessar o endereço de nosso projeto novamente, vemos o seguinte resultado:

Nosso projeto funcionando perfeitamente

O erro foi resolvido e agora o projeto está funcionando corretamente ?.

Nós podemos acessar tanto as páginas de ecommerce como também a administração, e realizar várias mudanças nos dados registrados, pois agora o Banco de Dados está completamente integrado com o PHP ?.

Conclusão

Neste segundo artigo conseguimos configurar todo o serviço do MySQL e também definir sua conexão com o PHP 8. Vemos assim que nosso projeto está ganhando cada vez mais forma. Apenas lembrando que você pode aprender a desenvolver todo o conteúdo deste ecommerce em nosso Curso Completo de PHP 7.

Entretanto, note que estamos acessando o nosso projeto no navegador por meio de seu IP, de forma fixa. Para deixar o nosso projeto mais completo, precisamos configurar um domínio personalizado para ele. É isso o que iremos fazer no próximo artigo, até lá :)

Hcode: Utilizamos cookies para a personalização de anúncios e experiências de navegação dentro de nosso site. Ao continuar navegando, você concorda com as nossas Política de Privacidade.