Instalação
Do zero ao servidor rodando em minutos.
Em uma VPS Ubuntu nova, o comando sudo bash install.sh conduz domínio, administrador, Docker, PHP 8.5, bancos, HTTPS, Redis, WebSocket e runtimes isolados. Cada etapa é validada e a URL final é exibida.
1. Preparar os domínios
Para seudominio.com, a arquitetura recomendada usa quatro registros apontando para o IPv4 público da VPS:
| Tipo | Nome na Cloudflare | Resultado | Proxy inicial |
|---|---|---|---|
| A | painel | painel.seudominio.com | DNS only |
| A | realtime | realtime.seudominio.com | DNS only |
| A | stream | stream.seudominio.com | DNS only |
| A | *.apps | <projeto>.apps.seudominio.com | DNS only |
Comece com a nuvem cinza para o Caddy emitir os certificados diretamente. Depois, painel e realtime podem ser proxied. Mantenha stream como DNS only e só proxie *.apps se o certificado da Cloudflare cobrir *.apps.seudominio.com. Em SSL/TLS, use Full (strict).
getent hosts painel.seudominio.com
getent hosts realtime.seudominio.com
getent hosts stream.seudominio.com
getent hosts teste.apps.seudominio.com
2. Preparar a VPS
No firewall do provedor, libere TCP 22 para SSH e TCP 80/443 para HTTP, HTTPS e certificados. Não publique PostgreSQL, Redis ou Adminer.
ssh ubuntu@IP_DA_VPS
sudo apt update
sudo apt install -y git
sudo mkdir -p /var/www/vupi
sudo chown "$USER:$USER" /var/www/vupi
3. Autorizar um repositório privado
O GitHub não aceita senha comum no Git. Gere uma Deploy Key somente leitura:
ssh-keygen -t ed25519 -C "vupi-vps" -f ~/.ssh/vupi_deploy -N ""
cat ~/.ssh/vupi_deploy.pub
No GitHub, abra Settings → Deploy keys → Add deploy key, cole a chave e não habilite escrita. Depois teste:
ssh -i ~/.ssh/vupi_deploy -o IdentitiesOnly=yes -T git@github.com
A resposta “successfully authenticated, but GitHub does not provide shell access” confirma que funcionou.
4. Clonar e iniciar o assistente
Antes de iniciar, crie em Cloudflare → Turnstile um widget gerenciado autorizado para o hostname do painel. Guarde a Site Key e a Secret Key: o instalador solicitará ambas e manterá a chave privada oculta.
GIT_SSH_COMMAND="ssh -i $HOME/.ssh/vupi_deploy -o IdentitiesOnly=yes" \
git clone --branch main --single-branch \
git@github.com:sweflow/api_sweflow_php.git /var/www/vupi
cd /var/www/vupi
sudo bash install.sh
Para testar uma branch antes da mesclagem, substitua main pelo nome da branch. No campo da senha, Enter gera uma senha forte. Uma senha manual precisa ter 12+ caracteres, maiúscula, minúscula, número e símbolo.
5. O que o instalador executa
- Dependências básicas e código da plataforma.
- Docker Engine e PHP 8.5 com extensões.
- Composer e arquivo
.envcom segredos exclusivos. - PostgreSQL principal e banco dos projetos.
- Migrations, seeders, PHP-FPM, Caddy e HTTPS.
- Worker dos projetos isolados.
- Redis, Pub/Sub e gateway WebSocket.
- Testes de saúde, autorreparo e exibição da URL e credenciais.
Caddyfile.fpm nem execute os scripts internos separadamente depois da instalação.
Em uma reexecução, os segredos e a senha administrativa são preservados sem voltar a ser exibidos no terminal.
6. Validar a instalação
As validações abaixo já fazem parte do instalador e são apresentadas apenas para auditoria manual:
sudo systemctl is-active docker php8.5-fpm caddy \
vupi-project-runtime-worker vupi-realtime
curl -I https://painel.seudominio.com
curl -fsS https://realtime.seudominio.com/health
cd /var/www/vupi && sudo docker compose ps
Ubuntu 26.04 e retomada após falhas
O Ubuntu 26.04 (resolute) já fornece PHP 8.5. O instalador detecta essa versão, usa o repositório oficial e desativa de forma recuperável um PPA antigo incompatível. O aviso de kernel pendente não interrompe a instalação e a Vupi nunca reinicia a VPS automaticamente.
Se ocorrer uma falha, corrija o primeiro [ERRO] e execute novamente:
cd /var/www/vupi
sudo bash install.sh
Instalação manual e ambiente de desenvolvimento
Antes de começar, certifique-se de ter instalado:
| Requisito | Versão mínima | Verificar |
|---|---|---|
| PHP | 8.5 | php -v |
| Composer | 2.x | composer -V |
| Git | 2.x | git --version |
| PostgreSQL ou MySQL | 15+ / 8+ | psql -V / mysql -V |
Instalar PHP 8.5 (Ubuntu 26.04)
sudo apt update
sudo apt install -y php8.5 php8.5-cli php8.5-fpm php8.5-common \
php8.5-curl php8.5-mbstring php8.5-xml php8.5-zip \
php8.5-bcmath php8.5-intl php8.5-opcache php8.5-gd \
php8.5-pgsql php8.5-mysql
Instalar Composer
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
Instalar extensões de banco de dados
Para PostgreSQL:
sudo apt-get install php8.5-pgsql
# Windows: habilite 'extension=pgsql' e 'extension=pdo_pgsql' no php.ini
Para MySQL:
sudo apt-get install php8.5-mysql
# Windows: habilite 'extension=mysqli' e 'extension=pdo_mysql' no php.ini
Banco de dados com Docker (alternativa recomendada)
Se não quiser instalar PostgreSQL ou MySQL localmente, use o Docker. O projeto já vem com um docker-compose.yml pronto.
Instalar Docker + Compose (Ubuntu)
# Remove versões antigas
sudo apt-get remove -y docker docker-engine docker.io containerd runc
# Instala dependências
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
# Adiciona chave GPG oficial do Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Adiciona repositório
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Instala Docker Engine + Compose plugin
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Permite rodar sem sudo (requer logout/login)
sudo usermod -aG docker $USER
Windows / macOS
Instale o Docker Desktop — já inclui o Compose.
Subir o banco com docker-compose.yml
Com o repositório clonado, escolha o banco que preferir:
# Apenas PostgreSQL (recomendado)
docker compose up -d postgres
# Apenas MySQL
docker compose up -d mysql
# PostgreSQL + Adminer (interface web na porta 8080)
docker compose up -d postgres adminer
# Tudo (PostgreSQL + MySQL + Adminer)
docker compose up -d
Com o Adminer rodando, acesse http://localhost:8080 para gerenciar o banco via interface web. Servidor: postgres, usuário: admin, senha: conforme DB_SENHA no .env.
Parar os containers
docker compose down # para e remove containers (dados preservados)
docker compose down -v # para e remove containers + volumes (apaga dados)
O Docker Compose lê as variáveis DB_NOME, DB_USUARIO, DB_SENHA e APP_TIMEZONE diretamente do seu .env. Configure-as antes de subir os containers.
Clonar o repositório
git clone https://github.com/sweflow/api_sweflow_php.git /var/www/vupi
cd /var/www/vupi
Instalar dependências
composer install --no-dev --optimize-autoloader # produção
composer install # desenvolvimento
Setup automático (recomendado)
O projeto possui um comando de setup completo com menu interativo:
php vupi setup
O menu interativo permite:
- Gerar secrets JWT automaticamente
- Criar banco de dados via Docker
- Executar migrations e seeders
- Subir o servidor PHP em background
- Configurar Caddy para HTTPS automático
Ou tudo de uma vez sem interação:
php vupi setup --auto --db-mode=docker --server=php --jwt=if-empty
php vupi setup --help lista todas as flags disponíveis.
Setup manual (passo a passo)
Copiar o arquivo de ambiente
cp EXEMPLO.env .env
# Windows:
copy EXEMPLO.env .env
Editar o .env com suas configurações
Preencha pelo menos: DB_HOST, DB_NOME, DB_USUARIO, DB_SENHA, JWT_SECRET e JWT_API_SECRET.
Veja a seção Configuração do Ambiente para detalhes de cada variável.
Executar migrations
php vupi migrate --seed
Instalação rápida (Ubuntu)
Em uma VPS Ubuntu compatível, o assistente instala e valida o ambiente completo:
git clone https://github.com/sweflow/api_sweflow_php.git /var/www/vupi
cd /var/www/vupi
sudo bash install.sh
Instala PHP 8.5, Docker, drivers de banco, Composer, bancos, migrations, seeders, HTTPS, Redis, tempo real e runtimes isolados.