# MySQL + NGINX + PHP 8.2 no Ubuntu 22.04

Vamos atualizar os pacotes do sistema.

Primeiro, vamos atualizar os pacotes existentes em seu sistema operacional. Para fazer isso, abra um terminal e digite os seguintes comandos:

```plaintext
sudo apt update
sudo apt -y upgrade
```

## MySQL

Agora você pode instalar o pacote do servidor MySQL executando o seguinte comando:

```plaintext
sudo apt install mysql-server
```

Durante a instalação, você será solicitado a definir uma senha para o usuário "root" do MySQL. Escolha uma senha segura e lembre-se dela, pois você precisará dela mais tarde.

Passo 3: Inicie o serviço do MySQL Após a conclusão da instalação, o serviço do MySQL deve ser iniciado automaticamente. No entanto, se o serviço não iniciar, você pode iniciar manualmente usando o seguinte comando:

```plaintext
sudo service mysql start
```

Passo 4: Verifique o status do serviço MySQL Você pode verificar se o serviço do MySQL está em execução executando o seguinte comando:

```plaintext
sudo service mysql status
```

Se estiver em execução, você deverá ver uma mensagem indicando que o serviço está ativo.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1689276091043/beff6fd0-7554-4dd9-920c-96d4aa7e2d5d.png align="center")

Passo 5: Acesse o servidor MySQL Por padrão, a instalação do MySQL no Ubuntu usa autenticação baseada em senha. Você pode acessar o servidor MySQL usando o seguinte comando:

```plaintext
sudo mysql -uroot
```

Vamos alterar a senha do usuário root.

```plaintext
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'SUA-SENHA-AQUI';
FLUSH PRIVILEGES;
```

Após executar essas etapas, você terá o MySQL instalado e pronto para uso no seu sistema Ubuntu. Agora você pode criar bancos de dados, tabelas e executar consultas SQL no MySQL.

## NGINX

```plaintext
sudo apt install nginx
```

Durante o processo de instalação, você será solicitado a confirmar. Pressione "Y" e depois "Enter" para continuar. Aguarde até que o processo de instalação seja concluído.  
Depois de concluir esses passos, o Nginx estará instalado em seu sistema Ubuntu. Você pode verificar se o serviço está em execução digitando o endereço IP do seu servidor em um navegador da web. Você deve ver a página de boas-vindas padrão do Nginx, indicando que a instalação foi bem-sucedida.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1689277750271/e01e095d-9674-45ce-beaa-3273aa852255.png align="center")

## PHP 8.2

Adicione o repositório, [Ondřej Surý](https://github.com/oerdnj) é um desenvolvedor que mantém um repositório com as versões mais recentes do PHP para Ubuntu. Você pode adicionar o repositório dele ao seu sistema usando os seguintes comandos:

```plaintext
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
```

Agora que você adicionou o repositório do Ondřej, você pode instalar o PHP 8.2. Use este comando para fazer isso:

```plaintext
sudo apt install php8.2
```

Depois de instalado, você pode verificar se o PHP 8.2 foi corretamente instalado com o seguinte comando:

```plaintext
php -v
```

Este comando deve exibir informações sobre a versão do PHP que está atualmente ativa no seu sistema. Se você fez tudo corretamente, deve ver que a versão 8.2 está instalada.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1689276011605/1b03e20f-def1-4fd6-b3a9-bcea0a572410.png align="center")

Vamos instalar os módulos para trabalhar com MySQL e com o [FPM](https://www.php.net/manual/en/install.fpm.php) e alguns outros.

```plaintext
sudo apt install php8.2-cli php8.2-common php8.2-fpm php8.2-mysql php8.2-curl php8.2-memcached php8.2-dev php8.2-pgsql php8.2-sqlite3 php8.2-mbstring php8.2-gd php8.2-imagick php8.2-imap php8.2-opcache php8.2-xmlrpc php8.2-xml php8.2-zip php8.2-bcmath php8.2-soap php8.2-intl php8.2-readline unzip -y 
```

Você pode instalar outros módulos PHP de acordo com suas necessidades, [aqui](https://luanrodrigues.com.br/modulos-php) tenho uma lista de alguns.

Vamos integrar o PHP e NGINX

Primeiro vamos fazer o backup do arquivo de configuração padrão do NGINX, execute o comando abaixo.

```plaintext
sudo mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default_config
```

Feito o backup, vamos criar um novo arquivo de configuração.

```plaintext
sudo nano /etc/nginx/sites-available/default
```

Copia a configuração abaixo e cole no novo arquivo de configuração.

```plaintext
server {

  # Port that the web server will listen on.
  listen 80;

  # Host that will serve this project.
  server_name localhost;

  # Useful logs for debug.
  access_log /var/log/nginx/localhost_access.log;
  error_log /var/log/nginx/localhost_error.log;
  rewrite_log on;

  # The location of our projects public directory.
  root /var/www/;

  # Point index of your project.
  index index.php index.html;

  location / {
    # URLs to attempt, including pretty ones.
    try_files $uri $uri/ /index.php?$query_string;
  }

  # Remove trailing slash to please routing system.
  if (!-d $request_filename) {
    rewrite ^/(.+)/$ /$1 permanent;
  }

  # PHP FPM configuration.
  location ~* \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_index index.php;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    include /etc/nginx/fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }

  location ~ /\.ht {
    deny all;
  }

}
```

Salve o arquivo `ctrl+o` em seguida `enter` e saia `ctrl+x`.

Vamos testasr a configuração que acabamos de fazer, ver se ficou tudo ok.

```plaintext
sudo nginx -t
```

Se tiver tudo ok, você deve ver uma imagem como esta

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1689638103280/87c1db73-498e-436a-975d-370d6490e8ac.png align="center")

Agora vamos criar um arquivo chamado `info.php` para ver se nossa configuração funcionou.

```plaintext
sudo nano /var/www/index.php
```

Copie e cole o código abaixo.

```plaintext
<?php
phpinfo();
```

Volte ao navegador e acesse [http://localhost/](http://localhost/info.php), desta vez você deve ver uma página com todas as informações do PHP 8.2.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1689638406631/3e3f2e4c-0106-4b8e-8b12-069379eb4864.png align="center")
