Arquitetura e Fundamentos
O painel aaPanel não oferece uma solução nativa de "clique único" para aplicativos Python complexos. Para garantir estabilidade e desempenho em produção, é essencial configurar manualmente uma pilha de serviço robusta. O fluxo de dados recomendado segue a ordem: Usuário → Nginx (Proxy Reverso) → Servidor WSGI (Gunicorn) → Aplicação (Flask/Django).
É um erro comum tentar rodar aplicações diretamente com comandos como python app.py ou python manage.py runserver em servidores de produção. Esses métodos não possuem gerenciamento de processos adequado e apresentam baixo desempenho sob carga. A utilização de um servidor WSGI como o Gunicorn é obrigatória.
Configuração do Ambiente
Instalação do Interpretador Python
- Acesse o painel aaPanel e navegue até a Loja de Aplicativos (App Store).
- Procure por "Gerenciador de Projetos Python" e realize a instalação do plugin.
- Após a instalação, abra o plugin, vá para a seção de gerenciamento de versões e instale a versão do Python compatível com o seu projeto (recomenda-se 3.9 ou superior).
Preparação do Código
Certifique-se de que seu repositório contenha os arquivos essenciais: o arquivo de dependências (ex: requirements.txt), o ponto de entrada da aplicação (ex: wsgi.py ou main.py) e todos os módulos do código fonte.
Procedimento de Implantação
Transferência de Arquivos
Você pode utilizar o "Gerenciador de Arquivos" do aaPanel para fazer o upload do compactado do seu projeto para o diretório /www/wwwroot/ ou usar uma conexão SFTP via ferramentas como FileZilla.
Configuração do Ambiente Virtual
Através do terminal do aaPanel ou via SSH, execute os seguintes comandos para isolar as dependências do projeto:
cd /www/wwwroot/nome-do-projeto
python3.9 -m venv venv
source venv/bin/activate
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
Instalação do Servidor de Aplicação
Dentro do ambiente virtual ativado, instale o Gunicorn:
pip install gunicorn
Configuração do Nginx
No menu "Sites", crie um novo site. Defina o domínio (ou IP do servidor) e configuer o ambiente como "Estático". Em seguida, acesse as configurações do site criado:
- Na aba "Proxy Reverso", adicione uma nova apontando para
http://127.0.0.1:5000. - Edite o arquivo de configuração do Nginx diretamente para incluir o tratamento de arquivos estáticos e mídia:
location /static/ {
alias /www/wwwroot/nome-do-projeto/static/;
}
location /media/ {
alias /www/wwwroot/nome-do-projeto/media/;
}
Após salvar, valide e recarregue o Nginx:
nginx -t && nginx -s reload
Execução da Aplicação
Inicializando o Gunicorn
Para iniciar o servidor, utilize o comando adaptado ao seu framework.
Para Flask:
gunicorn --workers 4 --bind 127.0.0.1:5000 --chdir /www/wwwroot/nome-do-projeto modulo_principal:app
Para Django:
gunicorn --workers 4 --bind 127.0.0.1:5000 --chdir /www/wwwroot/nome-do-projeto config_projeto.wsgi:application
Persistência de Processos com Supervisor
Para garantir que o serviço reinicie automaticamente em caso de falha ou reinicialização do servidor, utilize o Supervisor.
Instale o Supervisor via pip ou gerenciador de pacotes do sistema. Crie um arquivo de configuração em /etc/supervisor/conf.d/projeto.conf:
[program:app_python]
command=/www/wwwroot/nome-do-projeto/venv/bin/gunicorn --workers 4 --bind 127.0.0.1:5000 --chdir /www/wwwroot/nome-do-projeto config_projeto.wsgi:application
directory=/www/wwwroot/nome-do-projeto
user=www
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/www/wwwlogs/app_python.log
Atualize e inicie os serviços do Supervisor:
supervisorctl update
supervisorctl start app_python
Tratamento de Arquivos Estáticos (Django)
No arquivo settings.py, certifique-se de que as variáveis estão corretas:
STATIC_URL = '/static/'
STATIC_ROOT = '/www/wwwroot/nome-do-projeto/staticfiles'
Execute o comando de coleta no terminal:
python manage.py collectstatic --noinput
Ajuste a configuração do Nginx para apontar para STATIC_ROOT no bloco location /static/.
Domínio e Segurança SSL
- Configure o registor DNS do seu domínio apontando o registro A para o IP do servidor.
- Na área de gerenciamento do site no aaPanel, adicione o domínio.
- Na aba SSL, utilize a opção "Let's Encrypt" para emitir um certificado gratuito.
Importante: Adicione o domínio à variável ALLOWED_HOSTS no Django:
ALLOWED_HOSTS = ['meudominio.com', 'www.meudominio.com']
Solução de Problemas
- Erro 502 Bad Gateway: Indica que o Nginx não consegue se comunicar com o Gunicorn. Verifique se o processo está rodando com
ps aux | grep gunicorn. - Erro 500 Internal Server Error: Problema na lógica da aplicação. Consulte os logs definidos no stdout_logfile do Supervisor.
- Recursos estáticos não carregam: Verifique as permissões de leitura das pastas e o caminho no
aliasdo Nginx. - ModuleNotFoundError: Garanta que todas as dependências foram instaladas no ambiente virtual correto.
Lista de Verificação Final
- Firewall do sistema e security group do provedor de nuvem permitem tráfego nas portas 80 e 443.
- A versão correta do Python está instalada no aaPanel.
- O ambiente virtual (
venv) foi criado e as dependências instaladas. - O Gunicorn está instalado e configurado para rodar na porta definida no proxy do Nginx.
- O Supervisor está ativo e gerenciando o processo do Gunicorn.
- Arquivos estááticos foram coletados e servidos corretamente pelo Nginx.
- SSL está configurado e o acesso HTTPS está funcional.