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.
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.
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 ED25519PowerShell
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_keyscat .\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