Skip to content

FabricioLR/Web-Storage

Repository files navigation

📁 Web Storage Platform

O Web Storage é uma plataforma moderna e segura de gerenciamento de arquivos em nuvem que proporciona aos usuários um ambiente privado para fazer upload, baixar, renomear, editar e excluir seus documentos e dados pessoais.

Este projeto foi desenhado sob o conceito de "Glassmorphism" e possui design dark/light mode amigável, providenciando interface moderna.


🚀 Tecnologias e Stack

O Web Storage foi construído utilizando as melhores e mais robustas opções do ecossistema Web Open-Source:

  • Back-end: PHP 8.4 (FPM) rodando dentro de containers estruturados.
  • Servidor Web: Nginx configurado com uploads expandidos (até 100MB por arquivo).
  • Banco de Dados: PostgreSQL, mantendo forte integridade relacional.
  • Armazenamento de Objetos: Oracle Cloud Infrastructure (OCI) Object Storage ou Armazenamento Local.
  • Front-end: HTML5 semântico, CSS3 Moderno (CSS Grid/Flexbox) e Javascript (Vanilla ES6+).
  • Testes Unitários: PHPUnit 11.
  • CI/CD: Jenkins & GitHub Actions.
  • Virtualização: Docker + Docker Compose (para ambientes Dev / Prod).

🤖 Powered by Antigravity AI

Todo o desenvolvimento arquitetural inicial do projeto, refatoração de UI css/js para componentes apartados (modulares), separação dos limites do servidor de imagem do Docker e tratamentos de responsividade deste Web Storage foram orquestrados através do raciocínio avançado do agente assistente inteligente Antigravity da Google Deepmind, através da colaboração e pair-programming via instrução de comando reverso na CLI/Workspace.


🏗️ Arquitetura e Abstração de Armazenamento

O sistema utiliza uma Arquitetura Híbrida de Persistência com uma camada de abstração que permite alternar entre armazenamento local e na nuvem através da variável de ambiente STORAGE_TYPE:

  1. Metadados (PostgreSQL): Todas as informações relacionais, como usuários, logs de auditoria e referências de arquivos, são armazenadas no banco de dados local.
  2. Arquivos Físicos (Abstraction Layer):
    • OCI Object Storage (oci): Integração nativa com o Oracle Cloud (OCI) para buckets escaláveis e duráveis.
    • Armazenamento Local (local): Persistência no sistema de arquivos do servidor/container (ideal para desenvolvimento ou infraestrutura on-premise).

⚙️ CI/CD & Automação

O fluxo de desenvolvimento e entrega é totalmente automatizado:

  • GitHub Actions: Executa a malha de testes unitários (./run-tests.sh) automaticamente em cada Pull Request para a branch master e em cada push para a branch dev, garantindo que nenhum código quebre as funcionalidades existentes.
  • Jenkins: Atua como o orquestrador de Continuous Deployment (CD). Ele monitora mudanças, reconstrói as imagens de produção (docker-compose.prod.yml) e realiza o deploy seguro injetando as variáveis de ambiente necessárias via Jenkins Credentials.

🛠️ Passo a Passo Prático (Como Usar)

Configuração Inicial (Variáveis de Ambiente)

Antes de tudo, garanta que o Docker e o docker-compose estejam instalados na sua máquina. Para proteger informações sensíveis, todas as credenciais do banco e configurações de ambiente foram extraídas dos arquivos do Docker e mapeadas externamente.

Na raiz do projeto você encontrará um arquivo chamado .env.model. Copie-o (ou apenas renomeie-o) criando um novo arquivo estritamente chamado .env.

Configurações de Armazenamento:

  • STORAGE_TYPE: Define o driver de armazenamento. Use local para disco local (padrão) ou oci para Oracle Cloud.
  • STORAGE_ROOT: (Apenas para local) O caminho no container onde os arquivos serão salvos (ex: /var/www/html/storage).
  • Credenciais OCI: Caso use oci, configure OCI_USER_OCID, OCI_TENANCY_OCID, OCI_REGION, OCI_FINGERPRINT, OCI_KEY_FILE, OCI_NAMESPACE e OCI_BUCKET.

1️⃣ Executando em Ambiente de Teste/Desenvolvimento

Para inciar a aplicação via Docker Compose na porta 80 do seu localhost, execute:

docker compose -f docker-compose.yml up --build -d

2️⃣ Executando as Migrations (Esquema no Banco de Dados)

Sempre que ligar o container pela primeira vez, as tabelas estarão vazias. Você precisa executar o script de inicialização do banco de dados interativamente:

docker compose -f docker-compose.yml exec app php src/init_db.php

Credenciais Padrão e Segurança: Ao iniciar, um administrador de sistema será gerado. O login inicial é:

  • Usuário: admin
  • Senha: admin

Atenção: O sistema identificará o seu primeiro acesso e exigirá uma troca imediata de senha por medidas de proteção, te isolando em uma tela de segurança até que o faça.

3️⃣ Testes Automatizados (PHPUnit) e Scripts Úteis (.sh)

No diretório raiz do projeto, disponibilizamos dois scripts auxiliares BASH para manutenção rápida:

  1. Testes (run-tests.sh): Script completo que constrói os containers isolados de teste (docker-compose.test.yml), aguarda o banco limpar, instala as dependências via Composer e executa toda a malha de testes unitários do PHPUnit sem interferir no banco de dados local da aplicação principal. Execute via terminal:

    ./run-tests.sh
  2. Permissões (set_permissions.sh): Script útil para ambientes Unix. Ele garante e reconecta que as pastas primárias como storage/ possuem a capacidade nativa de Leitura e Gravação (chmod 777), caso ocorra problemas do Nginx ou FPM recusar acesso aos discos por políticas do S.O hospedeiro:

    ./set_permissions.sh

📂 Estrutura do Projeto

  • src/Config/: Configurações de Banco de Dados e OCI.
  • src/Storage/: Abstração e drivers de armazenamento (LocalStorage, OCIStorage).
  • src/Auth.php: Gerenciamento de sessões e autenticação.
  • src/UserManager.php: CRUD de usuários e permissões.
  • src/FileManager.php: Lógica de gerenciamento de objetos na nuvem.
  • tests/: Suíte de testes unitários.
  • .github/workflows/: Automação de CI com GitHub Actions.
  • Jenkinsfile: Pipeline de build e deploy contínuo.

🖼️ Telas e Imagens de Demonstração

(Abaixo deixamos como sugestão as capturas de tela das principais rotas para guiar visualmente novos utilizadores)

Painel Admin (Dashboard e Gerenciamento)

Dash No lado esquerdo os administradores têm o controle total em formato de tabela (Listagem); no direito têm campos livres para a adição instantânea de novos membros ao grupo local.

Dashboard (Arquivos Web Storage)

Files Um design flex com botões minimalistas; suporte à seleções massivas ou isoladas; capacidade de abrir, ver e renomear arquivos nativos sem recarregar o page state todo.