Guia de Migração — VPS Linux

Instalação em VPS
OXINI Acabamentos

Migração do sistema de Ordens de Serviço para servidor VPS Linux com Nginx, PHP 8.2 e SQLite. Todos os dados cadastrados são preservados.

Versão1.0
SO do ServidorUbuntu 22.04 / 24.04 LTS
StackLaravel 11 + Filament 3
BancoSQLite (migrado)
Índice
0
Gerar o ZIP no Windows (antes de enviar)
Execute este passo no computador onde o sistema está instalado atualmente
1
Abrir o PowerShell como Administrador
Pressione Win + X → Windows PowerShell (Admin)
2
Executar o script de empacotamento
O script já está na pasta do projeto — basta executar:
powershell -ExecutionPolicy Bypass -File C:\laragon\www\oxini\zipar_para_vps.ps1
✅
O que o ZIP vai incluir
Todo o código-fonte, o banco de dados SQLite com todos os dados cadastrados (database/database.sqlite) e o logo da empresa (storage/app/public/logos/). A pasta vendor/ é excluída (será reinstalada via Composer na VPS).

O arquivo gerado será: C:\laragon\www\oxini_vps.zip

1
Pré-requisitos da VPS
O que o servidor precisa ter antes de começar
ComponenteVersãoObservaçãoStatus
Ubuntu Server22.04 ou 24.04 LTSDebian 12 também funcionaJá na VPS
PHP8.2 ou 8.3+ extensões necessáriasInstalar
NginxQualquer versão atualServidor webInstalar
Composer2.xGerenciador de pacotes PHPInstalar
unzip—Para extrair o ZIP enviadoInstalar
Acesso SSH—root ou usuário com sudoNecessário
ℹ️
MySQL/MariaDB não é necessário
O sistema usa SQLite — o banco de dados é um único arquivo já incluído no ZIP. Não é preciso instalar nem configurar nenhum servidor de banco de dados.
2
Instalar PHP 8.2 e extensões
Execute os comandos abaixo como root ou com sudo na VPS
# Atualizar os pacotes do sistema
sudo apt update && sudo apt upgrade -y

# Adicionar o repositório do PHP (Ondřej)
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

# Instalar PHP 8.2 com todas as extensões necessárias
sudo apt install -y php8.2-fpm php8.2-cli php8.2-sqlite3 \
  php8.2-mbstring php8.2-xml php8.2-curl php8.2-zip \
  php8.2-bcmath php8.2-gd php8.2-intl php8.2-tokenizer \
  php8.2-dom php8.2-fileinfo unzip nginx

# Confirmar a instalação
php8.2 --version
⚠️
Atenção: extensão php8.2-sqlite3 é obrigatória
O sistema usa SQLite — sem essa extensão o Laravel não consegue abrir o banco de dados.
3
Instalar o Composer
Gerenciador de dependências PHP
# Baixar e instalar o Composer globalmente
curl -sS https://getcomposer.org/installer | php8.2
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer

# Verificar a instalação
composer --version
# Deve exibir: Composer version 2.x.x
4
Enviar e Extrair o Projeto
Transferir o ZIP para a VPS e descompactar

No seu computador Windows, use um cliente SFTP (como WinSCP ou FileZilla) ou o comando abaixo no PowerShell para enviar o ZIP:

# No Windows — enviar o ZIP via SCP (substitua pelo IP e usuário da sua VPS)
scp C:\laragon\www\oxini_vps.zip usuario@IP_DA_VPS:/var/www/

De volta ao terminal SSH da VPS:

# Ir para o diretório de sites
cd /var/www

# Extrair o ZIP
sudo unzip oxini_vps.zip

# A pasta extraída se chama 'oxini' — confirme:
ls /var/www/oxini

# Ajustar o dono dos arquivos para o Nginx/PHP-FPM
sudo chown -R www-data:www-data /var/www/oxini

# Permissões corretas para storage e bootstrap/cache
sudo chmod -R 775 /var/www/oxini/storage
sudo chmod -R 775 /var/www/oxini/bootstrap/cache

# Permissão de escrita no banco SQLite (muito importante!)
sudo chmod 664 /var/www/oxini/database/database.sqlite
5
Configurar o arquivo .env
Ajustar as configurações para ambiente de produção
# Criar o .env a partir do exemplo
cd /var/www/oxini
sudo cp .env.example .env
sudo nano .env

Edite as seguintes linhas no .env:

APP_NAME="Oxinil Acabamentos"
APP_ENV=production
APP_KEY=                     ← deixe vazio, será gerada no próximo passo
APP_DEBUG=false
APP_URL=https://seudominio.com.br   ← coloque o domínio ou IP da VPS

APP_LOCALE=pt_BR
APP_FALLBACK_LOCALE=pt_BR

DB_CONNECTION=sqlite
# As linhas DB_HOST, DB_PORT etc. podem ficar comentadas (não são usadas)

SESSION_DRIVER=database
CACHE_STORE=database
QUEUE_CONNECTION=database

LOG_CHANNEL=stack
LOG_LEVEL=error

Salvar no nano: Ctrl+O → Enter → Ctrl+X

🔒
APP_DEBUG=false é obrigatório em produção
Com DEBUG ativado, erros expõem variáveis de ambiente, senhas e configurações internas para qualquer visitante. Nunca deixe true em servidor público.
6
Finalizar a Instalação
Instalar dependências, gerar chave e criar links de storage
cd /var/www/oxini

# Instalar as dependências PHP (sem pacotes de desenvolvimento)
composer install --optimize-autoloader --no-dev

# Gerar a chave de segurança da aplicação
php artisan key:generate

# Criar o link simbólico de storage (para logos e arquivos)
php artisan storage:link

# Rodar migrations pendentes (não apaga dados existentes)
php artisan migrate --force

# Limpar e recriar os caches de configuração para produção
php artisan config:cache
php artisan route:cache
php artisan view:cache

# Garantir permissões corretas após o composer install
sudo chown -R www-data:www-data /var/www/oxini/storage /var/www/oxini/bootstrap/cache
✅
Seus dados estão preservados
O comando php artisan migrate --force aplica apenas as migrations que ainda não foram executadas no banco de dados. Como o arquivo database.sqlite veio do seu ambiente local com todas as migrations já aplicadas, nenhum dado é apagado ou alterado.
7
Configurar o Nginx
Criar o virtual host para servir a aplicação
# Criar o arquivo de configuração do site
sudo nano /etc/nginx/sites-available/oxini

Cole o conteúdo abaixo (ajuste seudominio.com.br):

server {
    listen 80;
    server_name seudominio.com.br www.seudominio.com.br;

    root /var/www/oxini/public;
    index index.php index.html;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }

    client_max_body_size 20M;

    access_log /var/log/nginx/oxini_access.log;
    error_log  /var/log/nginx/oxini_error.log;
}
# Ativar o site e remover o site padrão
sudo ln -s /etc/nginx/sites-available/oxini /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default

# Testar a configuração
sudo nginx -t
# Deve exibir: syntax is ok / test is successful

# Reiniciar o Nginx e o PHP-FPM
sudo systemctl restart nginx
sudo systemctl restart php8.2-fpm

# Garantir que iniciam automaticamente com o servidor
sudo systemctl enable nginx
sudo systemctl enable php8.2-fpm
8
SSL com Let's Encrypt (HTTPS)
Certificado gratuito e renovação automática — recomendado
ℹ️
Pré-requisito: domínio apontando para a VPS
O DNS do domínio precisa já estar apontando para o IP da VPS antes de executar o Certbot. Se for usar apenas o IP (sem domínio), pule esta etapa.
# Instalar o Certbot
sudo apt install -y certbot python3-certbot-nginx

# Emitir o certificado (substitua pelo seu domínio)
sudo certbot --nginx -d seudominio.com.br -d www.seudominio.com.br

# O Certbot modifica o Nginx automaticamente para HTTPS
# Renovação automática já fica ativa (via systemd timer)
# Teste com:
sudo certbot renew --dry-run

Após o SSL, atualize no .env para: APP_URL=https://seudominio.com.br e reexecute php artisan config:cache.

9
Primeiro Acesso
Confirmar que o sistema está funcionando com os dados migrados
1
Abrir no navegador
Acesse http://IP_DA_VPS ou https://seudominio.com.br. A tela de login do Filament deve aparecer.
2
Entrar com as credenciais existentes
Use o mesmo e-mail e senha que você já usava no sistema local — os dados foram migrados junto com o banco.
3
Verificar os dados
Confira se as Ordens de Serviço, Clientes e Configurações da empresa estão todos presentes.
4
Verificar o logo da empresa
Acesse Configurações → Dados da Empresa e confirme que o logo aparece corretamente. Se não aparecer, o link de storage pode precisar ser refeito: php artisan storage:link
⚠️
Se aparecer erro 500 ao abrir o sistema
Execute na VPS: sudo tail -50 /var/log/nginx/oxini_error.log e sudo tail -50 /var/www/oxini/storage/logs/laravel.log para ver a causa do erro. Os problemas mais comuns são: permissão errada no storage/ ou database.sqlite, ou APP_KEY não gerada.
10
Checklist Final
Confirme todos os passos antes de colocar em uso
#AçãoResultado EsperadoOK?
1ZIP gerado no Windows com o scriptArquivo oxini_vps.zip criado☐
2PHP 8.2 + extensões instalados na VPSphp8.2 --version retorna versão☐
3Extensão php8.2-sqlite3 instaladaphp8.2 -m | grep sqlite retorna sqlite3☐
4Composer instaladocomposer --version funciona☐
5ZIP extraído em /var/www/oxiniPasta com arquivos do projeto☐
6Permissões ajustadas (www-data)chown e chmod executados☐
7Arquivo .env configuradoAPP_ENV=production, APP_DEBUG=false☐
8composer install executadoPasta vendor/ criada☐
9php artisan key:generateAPP_KEY preenchida no .env☐
10php artisan storage:linkLink criado em public/storage☐
11php artisan migrate --forceNenhum erro retornado☐
12Nginx configurado e reiniciadonginx -t retorna ok☐
13SSL configurado (Certbot)Site abre com https://☐
14Login com credenciais existentesDashboard carrega normalmente☐
15OS e Clientes presentes no sistemaDados migrados confirmados☐
16Logo da empresa aparece nos PDFsPDF gerado com logo correto☐
🎉
Sistema migrado e operacional!
Se todos os itens estão marcados, o OXINI Acabamentos está rodando na VPS com todos os dados preservados. Lembre-se de configurar backups regulares do arquivo /var/www/oxini/database/database.sqlite.

Backup rápido do banco de dados (salva uma cópia datada):

cp /var/www/oxini/database/database.sqlite \
   /var/www/oxini/database/database_backup_$(date +%Y%m%d_%H%M).sqlite