Aplicação Web Para Empresas: Quando Criar e Quanto Custa
Entenda quando sua empresa precisa de uma aplicação web, quanto custa desenvolver, quais fatores influenciam no preço e quando contratar um desenvolvedor freelancer.
CI/CD em projetos freelancer é um dos assuntos que mais divide opiniões entre desenvolvedores que trabalham de forma independente. De um lado, quem acha que pipeline de integração contínua é coisa de time grande com DevOps dedicado. Do outro, quem já perdeu horas corrigindo um deploy manual que quebrou produção às sexta à noite e nunca mais quis depender de processo manual para entregar código.
A segunda posição é a certa. E montar um pipeline confiável para projetos freelancer não exige nem DevOps, nem infraestrutura cara, nem muito tempo de configuração. Exige saber o que automatizar, em qual ordem, e quais ferramentas resolvem o problema sem criar complexidade desnecessária.
O argumento mais comum contra CI/CD em projetos freelancer é que o projeto é pequeno demais para justificar o esforço. É um argumento que faz sentido até o primeiro problema sério causado por processo manual.
Deploy manual sem pipeline tem pelo menos três pontos de falha recorrentes. O desenvolvedor esquece de rodar os testes antes de subir. O ambiente de produção tem uma configuração diferente do local que só aparece depois do deploy. Uma mudança urgente é empurrada direto para produção sem passar por revisão, quebrando algo que funcionava.
Cada um desses problemas tem custo real: horas de diagnóstico, cliente insatisfeito, reputação comprometida. Um pipeline de CI/CD bem configurado elimina todos os três de forma permanente, rodando automaticamente a cada push sem depender de memória ou disciplina manual.
Para quem entrega projetos como desenvolvedor freelancer, ter CI/CD configurado desde o início de cada projeto é também um diferencial de profissionalismo. O cliente vê que existe um processo, que as mudanças são testadas antes de ir ao ar e que o deploy não é um momento de risco. Isso constrói confiança de forma muito mais eficaz do que qualquer argumento verbal sobre qualidade de entrega.
CI (Integração Contínua) é o processo de verificar automaticamente se o código novo não quebra o que já existia. Cada vez que você faz push de uma mudança, o pipeline roda os testes, verifica o linting, checa se o build compila e retorna o resultado. Se algo quebrou, você sabe antes de chegar em produção.
CD (Entrega Contínua ou Deploy Contínuo) é o processo de levar o código aprovado para o ambiente de destino de forma automática. Com CD configurado, um push aprovado em CI vai automaticamente para staging ou produção, dependendo de como o fluxo foi configurado.
A distinção entre Entrega Contínua e Deploy Contínuo é relevante para projetos freelancer: Entrega Contínua significa que o código está sempre pronto para ser publicado, mas o deploy final pode exigir aprovação manual. Deploy Contínuo significa que cada mudança aprovada vai direto para produção sem intervenção. Para projetos com clientes que precisam validar antes de publicar, Entrega Contínua é o modelo mais adequado.
Para projetos freelancer, o GitHub Actions é a ferramenta de CI/CD com melhor relação entre custo e funcionalidade disponível. É gratuito para repositórios públicos e tem um tier generoso para repositórios privados. Está integrado diretamente ao repositório, sem precisar configurar uma ferramenta externa separada. E a configuração é feita em YAML dentro do próprio repositório, o que significa que o pipeline é versionado junto com o código.
Um workflow básico de CI para um projeto Node.js fica assim:
name: CI
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm run lint
- run: npm test
- run: npm run build
Esse workflow roda a cada push em main e develop e a cada pull request para main. Instala as dependências, roda o linting, os testes e o build. Se qualquer etapa falhar, o workflow falha e você recebe uma notificação antes de qualquer merge ou deploy.
Para projetos WordPress, o equivalente inclui verificação de código PHP com PHPCS, testes com PHPUnit e validação de segurança de plugins e temas antes de qualquer deploy.
A primeira etapa do pipeline é a mais rápida e a que tem maior impacto na consistência do código ao longo do tempo. Ferramentas como ESLint para JavaScript, Prettier para formatação e PHPCS para PHP verificam se o código segue as convenções definidas para o projeto.
Para projetos freelancer, essa etapa é especialmente relevante porque projetos frequentemente são retomados meses depois do lançamento, às vezes por outro desenvolvedor. Código consistente e bem formatado reduz o tempo de reonboarding e o custo de manutenção futura.
A cobertura de testes em projetos freelancer raramente é de 100%. Não precisa ser. O que precisa existir são testes para as funcionalidades críticas: autenticação, processamento de pagamento, integrações com APIs externas e qualquer lógica de negócio que, se quebrar, impacta diretamente o usuário.
Para projetos JavaScript e TypeScript, Vitest e Jest são as opções mais comuns. Para projetos PHP e WordPress, PHPUnit cobre a maior parte dos casos. Para testes end-to-end que verificam o comportamento real no navegador, Playwright roda bem dentro de pipelines de CI sem configuração complexa.
O critério de quais testes escrever antes de configurar o CI é simples: o que você testa manualmente toda vez que faz uma mudança? Automatize esses testes primeiro. O CI vai rodar cada um deles a cada push, eliminando o trabalho manual repetitivo.
Projetos com processo de build, como aplicações React, Next.js, Vue ou qualquer framework que compila assets, precisam verificar que o build completa sem erro em ambiente limpo. É comum que um projeto funcione localmente e falhe no build do CI por causa de uma importação que está no caminho errado, uma variável de ambiente que não foi definida ou uma dependência que está no devDependencies mas deveria estar em dependencies.
Essa verificação em ambiente limpo do CI elimina a categoria inteira de bugs do tipo “funciona na minha máquina”.
Com a etapa de CI configurada e funcionando, o próximo passo é automatizar o deploy para staging e produção.
O ambiente de staging é onde o cliente valida antes de ir ao ar. O deploy para staging deve ser automático: qualquer push aprovado no CI em uma branch específica (geralmente develop ou staging) vai automaticamente para o ambiente de staging.
Para projetos com hosting em plataformas como Vercel ou Netlify, o deploy automático para preview e staging já vem configurado por padrão. Cada pull request gera uma URL de preview onde o cliente pode validar antes do merge. Essa funcionalidade sozinha já elimina boa parte do processo manual de “sobe aí para eu ver”.
Para projetos em VPS ou servidores tradicionais, o GitHub Actions consegue fazer deploy via SSH com configuração simples:
- name: Deploy para staging
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.STAGING_HOST }}
username: ${{ secrets.STAGING_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /var/www/projeto
git pull origin develop
npm ci --production
pm2 restart projeto
O deploy para produção segue a mesma lógica, mas geralmente com um gatilho mais controlado: merge na branch main após aprovação de pull request, ou tag de versão criada manualmente.
Para projetos freelancer onde o cliente precisa aprovar cada mudança antes de ir ao ar, o modelo de Entrega Contínua funciona melhor: o pipeline prepara tudo e o deploy final é acionado manualmente via interface do GitHub ou por um comando simples. Isso mantém a automação nos bastidores sem tirar do cliente a sensação de controle sobre o que vai ao ar.
Uma prática que faz diferença especialmente em projetos de longa duração é manter rastreabilidade de cada deploy: qual commit foi para produção, quando e por quem foi acionado.
O GitHub Actions registra cada execução de workflow automaticamente. Para complementar, vale gerar uma tag de versão a cada deploy de produção e manter um CHANGELOG com as mudanças de cada versão. Isso facilita a investigação quando um problema aparece em produção: você sabe exatamente qual versão está rodando e quais mudanças ela contém.
Para projetos WordPress, o WP-CLI permite registrar versões de plugins e temas, fazer rollback de atualizações e verificar o estado do ambiente diretamente no pipeline. Essa integração é especialmente útil em projetos de manutenção de sites WordPress onde atualizações de plugins precisam ser testadas antes de ir ao ar em produção.
Todo pipeline de CI/CD precisa de uma estratégia de rollback clara. Não porque o pipeline vai quebrar com frequência, mas porque quando quebrar, você precisa saber exatamente o que fazer sem entrar em pânico.
A estratégia mais simples e mais confiável para projetos com Git é o rollback via revert de commit. Um git revert cria um commit novo que desfaz as mudanças do commit problemático, sem reescrever o histórico. Esse commit passa pelo pipeline normalmente e, se aprovado, é deployado desfazendo o problema.
Para deploys em servidores com assets compilados, manter as últimas duas ou três versões do build no servidor permite fazer rollback instantâneo apontando o symlink para a versão anterior, sem precisar de novo deploy.
Para projetos WordPress, manter o backup antes de cada atualização de plugin ou tema é o equivalente ao rollback: se a atualização quebrar algo, o backup restaura o estado anterior em minutos. Isso é parte do processo de manutenção de sites WordPress que todo projeto em produção deveria ter.
Um pipeline silencioso é um pipeline que você esquece de verificar. Configure notificações para os momentos que importam: quando o CI falha em uma branch protegida, quando um deploy de produção é concluído e quando um deploy falha.
O GitHub Actions envia notificações por e-mail por padrão. Para times que usam Slack, existe integração nativa que envia mensagens para canais específicos a cada evento do pipeline. Para projetos onde o cliente acompanha o processo, uma notificação automática de “deploy realizado com sucesso” no canal de comunicação do projeto elimina a necessidade de avisar manualmente a cada publicação.
O artigo sobre pipeline de conteúdo automatizado mostra como essa mesma lógica de automação se aplica para outros processos além de deploy de código, usando GitHub Actions como orquestrador de fluxos mais amplos.
CI/CD automatiza o processo de verificação e entrega do código. Não automatiza as decisões sobre o que entregar.
A decisão de quando mergear uma feature, quando fazer o deploy de produção e quando comunicar uma mudança para o cliente continua sendo humana. O pipeline executa o que foi decidido de forma confiável e rápida. A estratégia de entrega, a priorização e o relacionamento com o cliente são responsabilidades que ficam com o desenvolvedor.
Para projetos onde o cliente tem pouca familiaridade técnica, explicar o que é o pipeline e como ele protege o projeto é parte do processo de onboarding. Clientes que entendem que cada mudança passa por verificação automática antes de ir ao ar têm mais confiança no processo e menos ansiedade com cada deploy.
Montar um pipeline de CI/CD confiável para projetos freelancer não é complexo nem caro. GitHub Actions, uma configuração básica de testes e uma estratégia simples de deploy automatizado resolvem a maioria dos problemas que processos manuais criam.
O investimento de algumas horas na configuração inicial se paga na primeira vez que o CI detecta um problema antes de chegar em produção. E se paga de novo na segunda, na terceira e em todas as vezes seguintes, sem nenhum esforço adicional.
Se você está estruturando um novo projeto e quer garantir que o processo de desenvolvimento tem a qualidade técnica que o cliente merece, é exatamente esse tipo de trabalho que entrego como desenvolvedor freelancer com processo estruturado desde o primeiro commit.