# Publicação temporária no cPanel — Setup Python App

Este pacote foi preparado para ser extraído **dentro da pasta raiz da aplicação Python** criada no cPanel.

## 1. Criar a aplicação no cPanel

No cPanel:

```text
Software → Setup Python App → Create Application
```

Sugestão:

```text
Python version: 3.11 ou 3.12
Application root: bienal_pna_base
Application URL: subdomínio ou domínio temporário
Application startup file: passenger_wsgi.py
Application Entry point: application
Passenger log file: passenger.log
```

O cPanel/Passenger usa uma aplicação WSGI; o ficheiro `passenger_wsgi.py` incluído neste pacote expõe a variável `application`.

## 2. Enviar o ZIP

Envia `bienal_pna_cpanel_upload.zip` para a pasta da aplicação, por exemplo:

```text
/home/CPANELUSER/bienal_pna_base/
```

Extrai o ZIP nessa pasta.

Tem de ficar assim:

```text
/home/CPANELUSER/bienal_pna_base/manage.py
/home/CPANELUSER/bienal_pna_base/passenger_wsgi.py
/home/CPANELUSER/bienal_pna_base/config/settings.py
```

Não pode ficar assim:

```text
/home/CPANELUSER/bienal_pna_base/bienal_pna_base/manage.py
```

## 3. Entrar no ambiente virtual

No Setup Python App, copia o comando que aparece em:

```text
Enter to the virtual environment
```

Será parecido com:

```bash
source /home/CPANELUSER/virtualenv/bienal_pna_base/3.11/bin/activate && cd /home/CPANELUSER/bienal_pna_base
```

## 4. Instalar dependências

```bash
python -m pip install --upgrade pip
pip install -r requirements.txt
```

## 5. Criar o `.env`

Para publicação temporária com SQLite:

```bash
cp .env.cpanel.example .env
```

Edita o `.env` e troca:

```text
TEU_DOMINIO.pt
```

pelo domínio/subdomínio real.

Exemplo:

```env
DEBUG=True
ALLOWED_HOSTS=bienal-teste.kreate4web.com,www.bienal-teste.kreate4web.com
CSRF_TRUSTED_ORIGINS=https://bienal-teste.kreate4web.com,https://www.bienal-teste.kreate4web.com
DB_ENGINE=sqlite
```

Para uma publicação final, depois mudamos para MySQL usando `.env.cpanel.mysql.example`.

## 6. Preparar Django

```bash
python manage.py migrate
python manage.py setup_roles
python manage.py collectstatic --noinput
```

Se precisares de criar superuser:

```bash
python manage.py createsuperuser
```

Se quiseres carregar os dados antigos:

```bash
python manage.py load_portal_real --reset --report
```

## 7. Reiniciar a app

Pelo cPanel:

```text
Setup Python App → Restart
```

Ou por terminal:

```bash
mkdir -p tmp
touch tmp/restart.txt
```

## 8. Testar URLs

```text
https://TEU_DOMINIO.pt/
https://TEU_DOMINIO.pt/backoffice/
https://TEU_DOMINIO.pt/admin/
```

## 9. Notas importantes

- Para teste temporário, podes usar SQLite.
- Para produção final, recomenda-se MySQL/MariaDB.
- Não deixes `DEBUG=True` em produção final.
- Se `collectstatic` não for executado, os estilos podem não carregar corretamente.
- Se o admin der erro CSRF, confirma `CSRF_TRUSTED_ORIGINS` com `https://`.
