Central de ajuda

Pesquise os artigos aqui ou navegue pelas categorias abaixo.

Navegar por tópico

Encontre guias, tutoriais e respostas organizados por categoria.

Artigos populares

O que outras pessoas estão lendo agora.

VPS

Segurança básica da VPS em 10 minutos: chave SSH, fail2ban e porta

Uma VPS nova recebe milhares de tentativas de senha por dia. Três medidas cortam quase todo o risco. 1. Chave SSH em vez de senha No seu computador (Windows 10/11, macOS ou Linux): ssh-keygen -t ed25519 -C "meu-pc" Aceite o caminho padrão e defina uma frase-senha (protege a chave se o computador for roubado). Envie a chave pública para a VPS: ssh-copy-id root@IP-DA-VPS # no Windows sem ssh-copy-id: type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh root@IP-DA-VPS "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" Teste em outra janela: ssh root@IP-DA-VPS deve entrar sem pedir a senha do servidor. Só então desative a senha: sudo nano /etc/ssh/sshd_config PasswordAuthentication no PermitRootLogin prohibit-password sudo systemctl restart ssh Guarde a chave privada em dois lugares. Se perder, o caminho de volta é o console VNC. 2. fail2ban sudo apt install -y fail2ban sudo tee /etc/fail2ban/jail.local <<'EOF' [DEFAULT] bantime = 1h findtime = 10m maxretry = 5 [sshd] enabled = true EOF sudo systemctl enable --now fail2ban sudo fail2ban-client status sshd # IPs banidos Funciona também para Nginx, WordPress e painéis: há jails prontas em /etc/fail2ban/filter.d. 3. Reduzir a exposição Escolha um: - Restringir o SSH ao seu IP: sudo ufw allow from SEU-IP to any port 22 e remova a regra geral (sudo ufw delete allow OpenSSH). Se o seu IP muda, use a opção seguinte. - Acesso só pela rede privada: Tailscale ou WireGuard e feche a 22 para a internet. - Mudar a porta (reduz ruído, não substitui os itens acima): Port 2222 no sshd_config, sudo ufw allow 2222/tcp, reinicie o SSH e só depois remova a 22. 4. Extras rápidos - Usuário próprio com sudo em vez de trabalhar como root: adduser nome && usermod -aG sudo nome. - Atualizações automáticas de segurança: sudo apt install unattended-upgrades (atualizar com segurança). - Firewall com só o necessário aberto: guia. - Windows: RDP com porta diferente e restrição por IP.

VPS

Painel web na VPS: aaPanel ou CyberPanel, qual escolher e como instalar

Um painel web administra sites, bancos, e-mails e certificados pelo navegador, sem linha de comando. Os dois mais usados nas VPS da LuraHosting são gratuitos. Qual escolher | | aaPanel | CyberPanel | |---|---|---| | Servidor web | Nginx ou Apache (você escolhe) | OpenLiteSpeed (rápido, com cache LSCache) | | Melhor para | Uso geral, apps PHP/Node/Python, Docker | WordPress e sites que precisam de cache | | Sistema | Ubuntu 20.04/22.04/24.04, Debian, AlmaLinux | Ubuntu 22.04/24.04, AlmaLinux 9 | | Requisitos | 1 vCore, 1 GB (2 GB confortável) | 1 vCore, 2 GB | | E-mail | Via app extra | Integrado (mas lembre da porta 25 bloqueada) | | Curva | Simples, interface tipo cPanel | Simples, foco em WordPress | Regra prática: WordPress → CyberPanel; várias aplicações diferentes → aaPanel. Se você já sabe usar Docker, talvez nem precise de painel (Docker + Portainer). Antes de instalar - Use uma VPS recém-formatada (como reinstalar); painéis assumem que nada mais está instalado. - Crie um snapshot. - Firewall: o instalador abre as portas do painel; confira depois com sudo ufw status. Instalar o aaPanel (Ubuntu/Debian) wget -O install.sh https://www.aapanel.com/script/install_7.0_en.sh && sudo bash install.sh aapanel Ao final, o instalador mostra a URL (porta 7800 por padrão, com um caminho aleatório), usuário e senha. Anote. No primeiro login, escolha a pilha (Nginx ou Apache, MySQL, PHP) e aguarde a instalação. Segurança: Settings → Panel para trocar porta, usuário e senha, e ative o IP whitelist com o seu IP. Ou acesse o painel só pela rede do Tailscale. Instalar o CyberPanel (Ubuntu 22.04/24.04 ou AlmaLinux 9) sh <(curl https://cyberpanel.net/install.sh || wget -O - https://cyberpanel.net/install.sh) Escolha 1 (CyberPanel com OpenLiteSpeed), aceite os padrões e defina a senha do admin quando pedido. Acesse https://IP-DA-VPS:8090. Depois: Websites → Create Website, apontando o domínio (DNS), e SSL → Manage SSL para emitir o Let's Encrypt. Depois da instalação 1. Troque a porta padrão do painel e restrinja por IP. 2. Mantenha o painel atualizado (ambos têm botão de atualização). 3. Backups: os dois têm backup agendado; aponte o destino para o Object Storage (S3 compatível) ou envie com rclone. 4. E-mail: envio direto não funciona (porta 25). Configure SMTP externo ou solicite a liberação da porta 25 com justificativa.

VPS

MySQL/MariaDB e PostgreSQL na VPS com acesso remoto seguro

Expor a porta 3306 ou 5432 para a internet é o erro mais comum, e em horas o banco recebe tentativas de senha. A regra: bind no IP certo, usuário restrito por origem e firewall só para o IP que precisa. Melhor ainda: acesso pela rede privada do Tailscale ou por túnel SSH. MariaDB (Ubuntu/Debian) sudo apt install -y mariadb-server sudo mysql_secure_installation # senha do root, remove testes e acesso anônimo Crie o banco e um usuário que só pode conectar do seu IP: sudo mysql CREATE DATABASE app CHARACTER SET utf8mb4; CREATE USER 'app'@'SEU-IP' IDENTIFIED BY 'SENHA-FORTE'; GRANT ALL PRIVILEGES ON app.* TO 'app'@'SEU-IP'; FLUSH PRIVILEGES; Para aplicações na própria VPS use 'app'@'localhost' e não abra nada para fora. Permitir conexão remota: em /etc/mysql/mariadb.conf.d/50-server.cnf, altere bind-address = 127.0.0.1 para bind-address = 0.0.0.0 (ou o IP do Tailscale, 100.x.x.x) e sudo systemctl restart mariadb. Firewall (só o seu IP): sudo ufw allow from SEU-IP to any port 3306 Teste do seu computador: mysql -h IP-DA-VPS -u app -p app. PostgreSQL sudo apt install -y postgresql sudo -u postgres psql CREATE USER app WITH PASSWORD 'SENHA-FORTE'; CREATE DATABASE app OWNER app; Acesso remoto: 1. /etc/postgresql/*/main/postgresql.conf: listen_addresses = '*' (ou o IP do Tailscale). 2. /etc/postgresql/*/main/pg_hba.conf, adicione uma linha por origem permitida: host app app SEU-IP/32 scram-sha-256 3. sudo systemctl restart postgresql e sudo ufw allow from SEU-IP to any port 5432. Teste: psql -h IP-DA-VPS -U app app. Túnel SSH (sem abrir porta nenhuma) Do seu computador: ssh -L 3306:127.0.0.1:3306 root@IP-DA-VPS Enquanto a sessão estiver aberta, localhost:3306 no seu computador é o banco da VPS. Funciona no DBeaver, Workbench, pgAdmin (opção "SSH tunnel"). Bancos em Docker Publique a porta só localmente: -p 127.0.0.1:5432:5432. Aplicações na mesma rede Docker acessam pelo nome do serviço; você acessa por túnel SSH ou Tailscale. Backup mariadb-dump --all-databases -u root -p | gzip > /root/mysql-$(date +%F).sql.gz sudo -u postgres pg_dumpall | gzip > /root/pg-$(date +%F).sql.gz Automatize com o backup para o Object Storage. Desempenho Banco lento normalmente é falta de índice ou de RAM. Veja Meu servidor está lento; se o iostat mostrar disco saturado, o plano com mais RAM (cache) resolve mais que CPU.

VPS

WordPress na VPS com Docker Compose (MariaDB e Nginx com HTTPS)

Este guia usa Docker Compose com Traefik na frente para o HTTPS automático. Pré-requisitos: Docker instalado, domínio apontado e portas 80/443 liberadas. 1. Arquivos mkdir -p /opt/wordpress && cd /opt/wordpress nano docker-compose.yml services: traefik: image: traefik:v3 command: - --providers.docker=true - --providers.docker.exposedbydefault=false - --entrypoints.web.address=:80 - --entrypoints.websecure.address=:443 - --entrypoints.web.http.redirections.entrypoint.to=websecure - --certificatesresolvers.le.acme.tlschallenge=true - --certificatesresolvers.le.acme.email=seu@email.com - --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json ports: ["80:80", "443:443"] volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - traefik_le:/letsencrypt restart: unless-stopped db: image: mariadb:11 environment: MARIADB_DATABASE: wordpress MARIADB_USER: wp MARIADB_PASSWORD: TROQUE-ESTA-SENHA MARIADB_ROOT_PASSWORD: TROQUE-ESTA-TAMBEM volumes: ["db_data:/var/lib/mysql"] restart: unless-stopped wordpress: image: wordpress:php8.3-apache environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_NAME: wordpress WORDPRESS_DB_USER: wp WORDPRESS_DB_PASSWORD: TROQUE-ESTA-SENHA volumes: ["wp_data:/var/www/html"] labels: - traefik.enable=true - traefik.http.routers.wp.rule=Host(`seudominio.com`) || Host(`www.seudominio.com`) - traefik.http.routers.wp.entrypoints=websecure - traefik.http.routers.wp.tls.certresolver=le - traefik.http.services.wp.loadbalancer.server.port=80 depends_on: [db] restart: unless-stopped volumes: db_data: wp_data: traefik_le: 2. Subir docker compose up -d docker compose logs -f traefik # aguarde o certificado Abra https://seudominio.com e conclua o assistente do WordPress. 3. Ajustes que valem a pena - Upload maior: crie uploads.ini com upload_max_filesize = 64M e post_max_size = 64M e monte em /usr/local/etc/php/conf.d/uploads.ini no serviço wordpress. - Cache: plugin de cache (LiteSpeed Cache não; use WP Super Cache/W3TC) ou Cloudflare na frente. - Mídia no Object Storage: plugin de offload apontando para o bucket (guia). - E-mail: o WordPress envia por PHP mail(), que não funciona sem SMTP. Use um plugin SMTP com um provedor (a porta 25 é bloqueada). 4. Backup Os dados estão nos volumes db_data e wp_data: docker compose exec db mariadb-dump -u root -pTROQUE-ESTA-TAMBEM wordpress > /root/wp-$(date +%F).sql Envie o dump e a pasta /var/lib/docker/volumes/wordpress_wp_data para o bucket com o backup automático. 5. Atualizar Plugins e temas: pelo painel do WordPress. Imagem do PHP/WordPress: docker compose pull && docker compose up -d (faça um snapshot antes).

VPS

Como usar um IP adicional na VPS

Um IP adicional serve para separar serviços (site em um IP, jogo em outro), ter um IP com reputação própria para e-mail ou hospedar mais de um certificado/porta padrão. Depois de contratado, ele aparece na aba Rede do painel. O sistema não o usa sozinho: é preciso adicioná-lo à interface. Teste rápido (some ao reiniciar) sudo ip addr add IP-ADICIONAL/32 dev eth0 ping -I IP-ADICIONAL 8.8.8.8 Funcionou? Torne permanente: Ubuntu (netplan) network: version: 2 ethernets: eth0: dhcp4: true addresses: - "IP-ADICIONAL/32" sudo netplan try e depois sudo netplan apply. Debian (/etc/network/interfaces) iface eth0 inet static address IP-PRINCIPAL/24 gateway GATEWAY up ip addr add IP-ADICIONAL/32 dev eth0 down ip addr del IP-ADICIONAL/32 dev eth0 AlmaLinux/Rocky (NetworkManager) sudo nmcli con mod "System eth0" +ipv4.addresses "IP-ADICIONAL/32" sudo nmcli con up "System eth0" Windows Server ncpa.cpl → Ethernet → Propriedades → IPv4 → Avançado → em "Endereços IP" clique Adicionar e informe o IP adicional com a mesma máscara do principal. Escolhendo qual serviço usa qual IP Por padrão, todos os serviços escutam em todos os IPs. Para fixar: - Nginx: listen IP-ADICIONAL:443 ssl; no bloco do site. - Servidor de jogo: a opção de bind (server-ip= no Minecraft, -ip em jogos Source, etc.). - Docker: -p IP-ADICIONAL:80:80. - Tráfego de saída (qual IP aparece para o destino): ip route mostra o IP de origem padrão; para mudar, sudo ip route change default via GATEWAY dev eth0 src IP-ADICIONAL (torne permanente no netplan com routes: - to: default / via / from). Reverso (PTR) e e-mail Cada IP tem o seu PTR. Configure o do IP adicional em Como alterar o PTR (rDNS) se for usá-lo para envio de e-mail.

VPS

Docker e Portainer na VPS: instalação e primeiros containers

1. Instalar o Docker (Ubuntu/Debian/AlmaLinux) curl -fsSL https://get.docker.com | sh sudo systemctl enable --now docker docker run --rm hello-world # teste Para usar sem sudo: sudo usermod -aG docker $USER e faça login de novo. 2. Portainer (interface web) docker volume create portainer_data docker run -d --name portainer --restart=always \ -p 9443:9443 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:latest Abra https://IP-DA-VPS:9443 (aceite o certificado autoassinado) e crie o usuário admin nos primeiros 5 minutos, senão o Portainer bloqueia e você precisa reiniciá-lo. Segurança: não deixe a 9443 aberta para o mundo. Libere só para o seu IP (sudo ufw allow from SEU-IP to any port 9443) ou acesse pela rede privada do Tailscale. Melhor ainda: coloque atrás do Nginx com um domínio e certificado (guia). 3. Conceitos que evitam dor de cabeça - Volume: onde os dados vivem. Container pode ser recriado à vontade; volume não. Sempre defina volumes para bancos e uploads. - Portas: -p 8080:80 expõe a porta 80 do container na 8080 da VPS, para a internet. Use -p 127.0.0.1:8080:80 quando só o Nginx local deve acessar. - Docker ignora o ufw para portas publicadas. Publique apenas o necessário (detalhes). - --restart=always: sobe junto com a VPS. 4. Docker Compose (projetos com mais de um container) Crie uma pasta por projeto com um docker-compose.yml: services: app: image: nginx:alpine ports: ["127.0.0.1:8080:80"] volumes: ["./site:/usr/share/nginx/html:ro"] restart: unless-stopped docker compose up -d docker compose logs -f docker compose pull && docker compose up -d # atualizar No Portainer, a mesma coisa em Stacks → Add stack colando o YAML. Exemplos prontos: n8n, WordPress, Evolution API. 5. Manutenção docker ps -a # containers docker stats # CPU/RAM por container docker system df # espaço usado docker system prune # limpa o que não está em uso Imagens antigas acumulam gigabytes; se o disco encher, veja Disco cheio. Inclua /var/lib/docker/volumes no seu backup automático.