Como Instalar Psono na VPS: Guia de Gerenciamento de Segredos

10 min de leitura Infraestrutura e Segurança
Como Instalar Psono na VPS: Guia de Gerenciamento de Segredos

O Desafio da Gestão de Segredos em Ambientes Corporativos

A gestão eficiente de credenciais, chaves de API e tokens de autenticação é um dos pilares fundamentais da segurança da informação moderna. Para equipes de desenvolvimento e operações (DevOps/SRE), o acesso rápido a segredos é essencial para a produtividade, enquanto a segurança rigorosa é inegociável para proteger ativos críticos. Nesse contexto, soluções tradicionais como planilhas compartilhadas ou ferramentas genéricas de gerenciamento de senhas muitas vezes falham em atender às necessidades específicas de infraestrutura como código (IaC) e automação.

O Psono surge como uma alternativa robusta, open source e auto-hospedável para o gerenciamento de segredos corporativos. Diferente de soluções puramente voltadas para usuários finais, o Psono foi projetado pensando na integração com sistemas automatizados, oferecendo APIs RESTful poderosas e controle granular de acesso. Neste tutorial técnico, vamos guiar você através do processo completo de instalação do Psono em um servidor Linux (VPS), configurando o banco de dados, o backend Python e o frontend React, garantindo uma instalação segura e pronta para produção.

Pré-requisitos e Arquitetura da Solução

Antes de iniciarmos a instalação, é crucial entender os componentes que compõem a stack do Psono. A aplicação consiste em três partes principais:

  • Psono Server (Backend): Escrito em Python/Django, gerencia a lógica de negócio, autenticação e armazenamento de dados.
  • Psono Client (Frontend): Interface web moderna construída com React, responsável pela experiência do usuário.
  • Banco de Dados: O Psono utiliza PostgreSQL como seu banco de dados relacional principal para garantir integridade e consistência dos dados sensíveis.

Para este guia, recomendamos o uso de uma VPS com as seguintes especificações mínimas:

  • Sistema Operacional: Ubuntu 22.04 LTS ou Debian 11+ (recomendado).
  • CPU: 2 vCores.
  • RAM: 4 GB (o PostgreSQL e o servidor Python consomem memória significativamente sob carga).
  • Disco: 40 GB SSD mínimo.

Além disso, você precisará de um domínio apontando para o IP da sua VPS. Para fins de teste local, podemos usar psono.corporativo.local, mas em produção, utilize um domínio real com certificados SSL válidos (Let's Encrypt).

Passo 1: Preparação do Sistema Operacional

A primeira etapa envolve atualizar o sistema e instalar as dependências básicas necessárias para compilar e executar o software. Conecte-se ao seu servidor via SSH como usuário root ou um usuário com privilégios sudo.

apt update && apt upgrade -y
apt install curl wget gnupg2 ca-certificates lsb-release debian-archive-keyring

Em seguida, vamos adicionar o repositório oficial do PostgreSQL, pois a versão padrão dos repositórios Linux pode estar desatualizada e carecer de otimizações recentes.

echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt update

Passo 2: Instalação e Configuração do PostgreSQL

O banco de dados é o coração do Psono. Vamos instalar o PostgreSQL e criar um usuário e banco de dados dedicados para a aplicação. A segurança aqui começa com a separação de privilégios.

apt install postgresql postgresql-contrib -y

Agora, acesse o shell do PostgreSQL:

sudo -u postgres psql

Dentro do prompt SQL, execute os seguintes comandos para criar o usuário psono e o banco de dados psonodb. Substitua a senha 'SENHA_SEGURA_AQUI' por uma string complexa gerada por um gerenciador de senhas.

CREATE USER psono WITH PASSWORD 'SENHA_SEGURA_AQUI';
CREATE DATABASE psonodb OWNER psono;
GRANT ALL PRIVILEGES ON DATABASE psonodb TO psono;

Saia do prompt SQL digitando \q. Em seguida, vamos ajustar a configuração de autenticação do PostgreSQL para garantir que o Psono possa conectar-se usando senha md5 ou scram-sha-256.

nano /etc/postgresql/14/main/pg_hba.conf

Adicione ou modifique a linha referente à conexão local e remota:

# IPv4 local connections:
host    psonodb         psono         127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    psonodb         psono         ::1/128                 scram-sha-256

Reinicie o serviço do PostgreSQL para aplicar as mudanças:

systemctl restart postgresql

Passo 3: Configuração do Ambiente Python (Backend)

O servidor Psono requer uma versão específica do Python. Vamos instalar o Python 3.9 e ferramentas de virtualização para isolar as dependências da aplicação.

apt install python3.9 python3.9-venv python3-pip python3.9-dev libffi-dev libssl-dev -y

Crie um diretório dedicado para a instalação do Psono e navegue até ele:

mkdir -p /opt/psono
cd /opt/psono

Crie e ative o ambiente virtual Python:

python3.9 -m venv psono_env
source psono_env/bin/activate

Com o ambiente ativo, instale as dependências do Psono Server. Você pode baixar a versão mais recente diretamente do repositório oficial ou usar o pip se disponível no PyPI.

pip install psono-server

Agora, inicialize a configuração do servidor. Isso criará os arquivos de configuração padrão e o banco de dados migrado.

psono-server initialize

Você será solicitado a definir uma senha para o usuário administrador inicial. Guarde esta senha com segurança, pois ela concederá acesso total à plataforma.

Passo 4: Configuração do Nginx como Proxy Reverso

Para expor a aplicação na internet de forma segura e performática, utilizaremos o Nginx. Ele atuará como um proxy reverso, recebendo as conexões HTTPS dos clientes e encaminhando-as para o servidor Psono que roda em uma porta local (geralmente 8000).

Instale o Nginx:

apt install nginx -y

Crie um arquivo de configuração de host virtual:

nano /etc/nginx/sites-available/psono

Insira a seguinte configuração, ajustando o domínio e os caminhos dos certificados SSL:

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

    # Redirecionar todo tráfego HTTP para HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name psono.seudominio.com.br;

    # Caminhos para os certificados SSL (Let's Encrypt)
    ssl_certificate /etc/letsencrypt/live/psono.seudominio.com.br/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/psono.seudominio.com.br/privkey.pem;

    # Configurações de segurança SSL recomendadas
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # Limite de tamanho do upload para uploads de arquivos
    client_max_body_size 10m;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # WebSocket support para comunicação em tempo real (se aplicável)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Crie um link simbólico e teste a configuração:

ln -s /etc/nginx/sites-available/psono /etc/nginx/sites-enabled/
nginx -t

Se o teste for bem-sucedido, reinicie o Nginx:

systemctl restart nginx

Passo 5: Execução do Backend em Produção com Gunicorn e Supervisor

Não execute o servidor de desenvolvimento Django em produção. Utilizaremos o Gunicorn, um servidor WSGI HTTP para Python, gerenciado pelo Supervisor para garantir que o processo reinicie automaticamente em caso de falhas.

Instale o Supervisor e o Gunicorn:

apt install supervisor -y
pip install gunicorn

Crie um arquivo de configuração para o Supervisor em /etc/supervisor/conf.d/psono.conf:

[program:psono]
command=/opt/psono/psono_env/bin/gunicorn psono.wsgi -b 127.0.0.1:8000 --workers 3
directory=/opt/psono
user=root
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/psono/gunicorn.log

Crie o diretório de logs e inicie o serviço:

mkdir -p /var/log/psono
supervisorctl reread
supervisorctl update
supervisorctl start psono

Verifique se o processo está rodando corretamente:

supervisorctl status psono

Passo 6: Instalação e Configuração do Frontend (Psono Client)

O frontend do Psono é uma aplicação React separada. Vamos baixá-la, compilá-la e servi-la via Nginx.

cd /var/www
git clone https://github.com/psono/psono-client.git
cd psono-client

Instale as dependências do Node.js (se ainda não instaladas) e compile a aplicação:

apt install nodejs npm -y
npm install
npm run build

O comando npm run build gerará uma pasta dist com os arquivos estáticos otimizados. Agora, atualize a configuração do Nginx para servir esses arquivos quando o usuário acessar a raiz do domínio.

nano /etc/nginx/sites-available/psono

Adicione a localização para a raiz antes da localização de proxy:

    # Servir o frontend estático
    root /var/www/psono-client/dist;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
        
        # Se a requisição for para a API, proxy para o backend
        if ($request_uri ~* ^/api/) {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

Nota Técnica: A configuração acima é simplificada. Em ambientes complexos, pode ser necessário ajustar as rotas exatas. O importante é garantir que chamadas à API sejam roteadas para o Gunicorn e requisições de arquivos estáticos sirvam o React App.

Reinicie o Nginx:

systemctl restart nginx

Passo 7: Configuração Inicial e Hardening

Acesse https://psono.seudominio.com.br em seu navegador. Você deverá ver a tela de login do Psono. Faça login com o usuário admin criado no Passo 3.

Após o login, execute as seguintes configurações críticas:

  1. Alterar Senha do Admin: Vá em Configurações > Conta e defina uma senha forte se tiver usado uma temporária.
  2. Configurar Domínio de Email: No painel administrativo, configure o SMTP para permitir recuperação de senhas e convites de usuários.
  3. Ativar Autenticação Multifator (MFA): Force o uso de TOTP (Time-based One-Time Password) para todos os usuários administrativos. Isso adiciona uma camada extra de segurança contra credenciais comprometidas.

Considerações Finais: Psono vs. Alternativas

Ao comparar o Psono com outras soluções como HashiCorp Vault ou 1Password, é importante destacar seu nicho. O Psono não tenta ser um sistema de gerenciamento de segredos para infraestrutura pura (como o Vault faz com chaves de criptografia e tokens efêmeros), nem uma simples agenda de senhas pessoal.

Ele ocupa um espaço híbrido excelente: permite que equipes gerenciem credenciais de login, chaves de API e dados sensíveis compartilhados, mantendo um controle rigoroso sobre quem acessa o quê, tudo em uma interface web amigável. Para empresas que buscam auto-serviço de senhas com governança centralizada, sem a complexidade operacional extrema de manter um cluster Vault, o Psono é uma escolha estratégica.

Lembre-se de realizar backups regulares do banco de dados PostgreSQL e dos arquivos de configuração do servidor. A segurança da sua infraestrutura depende diretamente da disponibilidade e integridade desses segredos.

Esse tutorial foi útil?

Comentários (0)

Seja o primeiro a comentar.

Deixe seu comentário

Seu comentário será analisado antes de ser publicado.

0/2000