Documentation

Projeto Gênesis

Resumo

Este projeto consiste na automatização e estruturação do deploy de um servidor web completo do zero. O objetivo principal é configurar um ambiente de produção robusto, seguro e funcional para a hospedagem de aplicações web.

Etapas do Projeto:

  • Registro de Domínio: Apontamento e configuração do endereço oficial da aplicação.
  • Provedor VPS: Contratação e provisionamento do servidor virtual privado.
  • Stack LAMP: Instalação do Apache, banco de dados MySQL e interpretador PHP.
  • Segurança: Criação de usuários do sistema com permissões restritas e isoladas.

O resultado final entrega uma infraestrutura otimizada, com gerenciamento de acessos e pronta para receber o código da aplicação de forma escalável.

Conhecimentos: SysAdmin (Administrador de Sistemas)

Focado em manter os servidores, redes e serviços funcionando corretamente. É a figura tradicional que configura servidores web, gerencia usuários, cuida de backups e prepara o ambiente para receber a aplicação de forma estável.

Registro do Domínio

Aqui tivemos uma feliz coincidência: o órgão responsável pelos registros de domínios .br é o nic.br , Ele cuida do DNS no Brasil, e dentro das diversas categorias, eles têm subdomínios por cidade, e temos uma cidade com o meu sobrenome, por sorte, a palavra andre estava disponível dentro do domínio belem.br , assim, consegui registrar o domínio: andre.belem.br

Provedor VPS

Os grandes players do mercado, AWS, Google Cloud e Azure oferecem segurança e estabilidade, mas podem facilmente sair de controle orçamentário, pois além de cobrar a máquina virtual, tambem incluem custos "SURPRESA" como tráfego extra, acesso ao banco de dados e outras armadilhas.



Tendo conhecimento, podemos assumir a responsabilidade e criar a solução completa utilizando outras opções de Virtualização com preço fixo indendente do uso.




Latência

A intenção é utilizar esse servidor para aplicações de IoT em tempo real, uma baixa latência melhora o tempo de resposta e eficiência do sistema.

Esse foi o fator decisivo. A LocaWeb mostrou instabilidade já na página de compra e foi descartada. Entre as duas outras opções, o Server Farm da Hostinger fica nos Estados Unidos, o que gera uma grande latência. A diferença de performance da HostGator é na ordem de 10 vezes melhor, e por isso foi nossa escolha.

Configuração do DNS

Agora que temos o servidor na nuvem com enderçeo IP Fixo, configuramos o DNS no Registro.br para redirecionar o site andre.belem.br para o endereço IP da VM da HostGator.

Sistema Operacional

O AlmaLinux é uma distribuição Linux de nível empresarial, de código aberto, focada em estabilidade, segurança e suporte comunitário. Ele é compatível binariamente com o Red Hat Enterprise Linux (RHEL), servindo como uma alternativa gratuita, robusta e de longo prazo, ideal para servidores de produção.

Apache HTTP Server

O Apache HTTP Server é um servidor web reconhecido por sua estabilidade, segurança e alto desempenho. Sendo um software de código aberto, oferece flexibilidade por meio de módulos que permitem adicionar diversas funcionalidades conforme a necessidade. É compatível com diferentes sistemas operacionais e tecnologias, facilitando a integração com aplicações web. Além disso, conta com ampla documentação e uma comunidade ativa, tornando sua implantação e manutenção mais simples. Essas características fazem do Apache uma solução confiável para hospedar sites, APIs e sistemas corporativos.

Atualizar o Sistema

sudo dnf update -y


Verificar se o serviço já está pré-instalado

sudo systemctl status httpd

Dependencies resolved. Nothing to do. Complete!


Instalar o Servidor Apache

sudo dnf install -y httpd

Installed:
almalinux-logos-httpd-90.6-2.el9.noarch apr-1.7.0-12.el9_3.x86_64
apr-util-1.6.1-23.el9.x86_64 apr-util-bdb-1.6.1-23.el9.x86_64
apr-util-openssl-1.6.1-23.el9.x86_64 httpd-2.4.62-7.el9_7.3.x86_64
httpd-core-2.4.62-7.el9_7.3.x86_64 httpd-filesystem-2.4.62-7.el9_7.3.noarch
httpd-tools-2.4.62-7.el9_7.3.x86_64 mod_http2-2.0.26-5.el9.x86_64
mod_lua-2.4.62-7.el9_7.3.x86_64

Complete!


Iniciar o processo para escutar a porta 80

sudo systemctl start httpd


Verificar o status do Servidor

sudo systemctl status httpd

● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; preset: disabled)
Active: active (running) since Wed 2026-05-13 16:23:45 -03; 7s ago
Docs: man:httpd.service(8)
Main PID: 6421 (httpd)
Status: "Started, listening on: port 80"
Tasks: 177 (limit: 10652)
Memory: 15.0M (peak: 15.2M)
CPU: 27ms
CGroup: /system.slice/httpd.service
├─6421 /usr/sbin/httpd -DFOREGROUND
├─6422 /usr/sbin/httpd -DFOREGROUND
├─6423 /usr/sbin/httpd -DFOREGROUND
├─6424 /usr/sbin/httpd -DFOREGROUND
└─6425 /usr/sbin/httpd -DFOREGROUND


Iniciar o Apache automaticamente com o sistema

sudo systemctl status httpd


Teste: Página de Boas Vindas do Apache



Servidor Up and Running!

Banco de Dados MySQL

O MySQL é um sistema de gerenciamento de banco de dados relacional amplamente utilizado por sua velocidade, confiabilidade e facilidade de administração. Sendo de código aberto, oferece excelente desempenho para aplicações web e corporativas, além de suportar grandes volumes de dados com segurança. Sua compatibilidade com diversas linguagens de programação e plataformas o torna uma solução versátil e eficiente para armazenar e gerenciar informações.


Instalação do MySQL com dnf

sudo dnf install mysql-server -y

Installed:
mariadb-connector-c-config-3.2.6-1.el9_0.noarch mecab-0.996-3.el9.4.x86_64 mysql-8.0.45-1.el9_7.x86_64
mysql-common-8.0.45-1.el9_7.x86_64 mysql-errmsg-8.0.45-1.el9_7.x86_64 mysql-selinux-1.0.14-1.el9_6.noarch
mysql-server-8.0.45-1.el9_7.x86_64 protobuf-lite-3.14.0-17.el9_7.x86_64

Complete!


Ativação do MySQL

sudo systemctl enable --now mysqld


Verificação do status

sudo systemctl status mysqld

● mysqld.service - MySQL 8.0 database server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: disabled)
Active: active (running) since Wed 2026-05-13 16:40:39 -03; 4min 57s ago
Process: 7096 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
Process: 7118 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mysqld.service (code=exited, status=0/SUCCESS)
Main PID: 7190 (mysqld)
Status: "Server is operational"
Tasks: 38 (limit: 10652)
Memory: 486.2M (peak: 488.2M)
CPU: 2.207s
CGroup: /system.slice/mysqld.service
└─7190 /usr/libexec/mysqld --basedir=/usr

May 13 16:40:34 vps-15335525.129.121.54.250 systemd[1]: Starting MySQL 8.0 database server...
May 13 16:40:34 vps-15335525.129.121.54.250 mysql-prepare-db-dir[7118]: Initializing MySQL database
May 13 16:40:39 vps-15335525.129.121.54.250 systemd[1]: Started MySQL 8.0 database server.

Complete!



Segurança da Instalação

Executando o script de segurança para definir a senha do root, remover usuários anônimos e bloquear login remoto do root.

sudo mysql_secure_installation

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success. Remove test database and access to it? (Press y|Y for Yes, any other key for No)
: y - Dropping test database...
Success.

- 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? (Press y|Y for Yes, any other key for No) : y
Success.

All done!



Teste de Conexão

mysql -u root -p

Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 8.0.45 Source distribution

Copyright (c) 2000, 2026, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

All done!

Instalação do PHP

O PHP (Hypertext Preprocessor) é uma das linguagens de programação mais populares do mundo para o desenvolvimento de sites e sistemas web dinâmicos.A principal característica do PHP é que ele é uma linguagem server-side (executada no servidor). Isso significa que quando um usuário acessa uma página, o servidor processa o código PHP, gera uma página HTML pura e a envia prontinha para o navegador do usuário.

Atualizar o Sistema

sudo dnf update -y


Instalação dos módulos mais comuns

sudo dnf install php php-cli php-common php-mbstring php-xml php-gd php-json php-fpm -y

Installed:
gd-2.3.2-3.el9.x86_64
jbigkit-libs-2.1-23.el9.x86_64
libXpm-3.5.13-10.el9.x86_64
libtiff-4.4.0-18.el9_8.x86_64
libwebp-1.2.0-8.el9_3.x86_64
libxslt-1.1.34-14.el9_8.1.x86_64
nginx-filesystem-2:1.20.1-28.el9_8.3.alma.1.noarch
php-8.0.30-6.el9_8.x86_64
php-cli-8.0.30-6.el9_8.x86_64
php-common-8.0.30-6.el9_8.x86_64
php-fpm-8.0.30-6.el9_8.x86_64
php-gd-8.0.30-6.el9_8.x86_64
php-mbstring-8.0.30-6.el9_8.x86_64
php-opcache-8.0.30-6.el9_8.x86_64
php-pdo-8.0.30-6.el9_8.x86_64
php-xml-8.0.30-6.el9_8.x86_64

Complete!


Reinício do Apache

sudo systemctl restart httpd

Permissões e Usuários

Por questões de segurança e para permitir acesso restrito a diferentes pessoas, a política de gerênciamento de usuário é vital.


Cria o Usuário Responsável pelo Site (Deploy)

# Cria o usuário com uma pasta home dedicada
sudo useradd -m -s /bin/bash webmaster

# Define uma senha forte para este usuário
sudo passwd webmaster

Adiciona o Usuário ao Grupo do Apache

sudo usermod -aG apache webmaster

Configuração da Pasta do Site com as Permissões Corretas

Considerando que a pasta do site é /var/www/html, os comandos abaixo garantem o isolamento e segurança:

# 1. Define o 'webmaster' como dono e 'apache' como grupo
sudo chown -R webmaster:apache /var/www/html

# 2. Permissão 750 para as pastas (Dono total, Grupo lê/executa, Outros nada)
sudo find /var/www/html -type d -exec chmod 750 {} \;

# 3. Permissão 640 para os arquivos (Dono lê/escreve, Grupo lê, Outros nada)
sudo find /var/www/html -type f -exec chmod 640 {} \;



Chaves SSH

Para maior segurança, e automatização de Login foram configuradas chaves de acesso.

Gerar a chave

No Windows, usando o PowerShell, gerei o par de chaves usando o algoritmo seguro ED25519

PowerShell

ssh-keygen -t ed25519 -C "seu_email@exemplo.com"

Criação do Diretório no Servidor

mkdir -p /home/webmaster/.ssh
touch /home/webmaster/.ssh/authorized_keys
chown -R webmaster:webmaster /home/webmaster/.ssh
chmod 700 /home/webmaster/.ssh
chmod 600 /home/webmaster/.ssh/authorized_keys

Adicionar a chave pública no Servidor

Com o comando abaixo é exibida a chave pública, ela foi adicionada no arquivo authorized_keys

cat .\key_webmaster.pub

Teste de Conexão

ssh -i .\key_webmaster webmaster@andre.belem.br



Regra de Ouro

Diferente do usuário comum (webmaster), permitir o acesso direto ao root por SSH é visado por hackers. Após configurar a chave para o root, o recomendável é bloquear totalmente o acesso por senha para ele.


Abrir o Arquivo de Configuração

sudo nano /etc/ssh/sshd_config

Alterar a linha PermitRootLogin

PermitRootLogin prohibit-password

Reiniciar o SSH para aplicar

sudo systemctl restart sshd



Servidor Instalado, Configurado, Seguro e Pronto para Uso!