Instalação com Nginx

Como instalar o OpenDataBio com nginx

Estas instruções são para instalação com nginx. Se preferir Apache, use a página de instalação padrão (Apache).

Requisitos do servidor

  1. Versão suportada do PHP >= 8.2 (8.3 recomendado).
  2. Servidor web: nginx.
  3. Banco SQL: MySQL ou MariaDB (testado com MySQL 8.0 e MariaDB 10.6+).
  4. Extensões PHP necessárias: openssl, pdo, pdo_mysql, mbstring, tokenizer, xml, dom, gd, exif, bcmath, zip, curl, redis.
  5. Redis para filas/cache.
  6. Tectonic para geração de PDF de etiquetas.
  7. Pandoc para renderização bibliográfica (recomendado).
  8. Supervisor para jobs em segundo plano.

Prepare o servidor

O exemplo abaixo usa pacotes do Ubuntu/Debian e PHP 8.3. Instale nginx, PHP-FPM e os mesmos serviços e extensões exigidos pela instalação Apache:

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install nginx mysql-server redis-server tectonic pandoc supervisor \
 php8.3-fpm php8.3-cli php8.3-intl php8.3-mysql php8.3-sqlite3 php8.3-gd \
 php8.3-mbstring php8.3-xml php8.3-bcmath php8.3-zip php8.3-curl php8.3-redis

sudo systemctl enable --now nginx php8.3-fpm redis-server supervisor

php -m | grep -E 'mbstring|xml|gd|mysql|redis|bcmath|pcntl|zip'
systemctl status php8.3-fpm --no-pager

Siga as seções de usuário dedicado, download, MySQL, Supervisor e permissões da instalação Apache. Para nginx, configure /etc/php/8.3/cli/php.ini e /etc/php/8.3/fpm/php.ini e reinicie php8.3-fpm.

Configuração do site no nginx

Crie o arquivo do site (exemplo):

sudo nano /etc/nginx/sites-available/opendatabio

Use este bloco base (ajuste domínio/caminhos):

server {
    listen 80;
    server_name seu-dominio.exemplo;

    root /home/odbserver/opendatabio/public;
    index index.php index.html;

    charset utf-8;
    client_max_body_size 100M;

    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;

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

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_read_timeout 300s;
        fastcgi_send_timeout 300s;
    }

    location ~ /\. {
        deny all;
    }
}

Ative e recarregue:

sudo ln -s /etc/nginx/sites-available/opendatabio /etc/nginx/sites-enabled/opendatabio
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx

Se o link simbólico já existir, não o recrie. Nunca recarregue o nginx antes de nginx -t terminar com sucesso.

HTTPS

O bloco da porta 80 é adequado para a validação inicial. Uma instalação pública de produção deve usar HTTPS. Configure um certificado diretamente no nginx, por exemplo com a integração Certbot da sua distribuição, ou termine o TLS em um proxy reverso confiável. Redirecione HTTP para HTTPS somente depois de testar o VirtualHost HTTPS.

Configure a URL pública de forma consistente:

APP_URL=https://seu-dominio.exemplo
ASSET_URL=https://seu-dominio.exemplo
APP_FORCE_HTTPS=true

Quando o TLS terminar em um proxy reverso, encaminhe os cabeçalhos originais Host e X-Forwarded-Proto e restrinja o acesso direto ao backend.

Content Security Policy (CSP)

No mesmo arquivo do site nginx, adicione no bloco server { ... }:

add_header Content-Security-Policy-Report-Only "default-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'; object-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https://server.arcgisonline.com https://*.tile.openstreetmap.org; font-src 'self' data:; connect-src 'self'; media-src 'self' blob:; worker-src 'self' blob:;" always;

Depois recarregue:

sudo nginx -t
sudo systemctl reload nginx

Notas:

  1. Comece com Report-Only e depois migre para enforcement após validar logs.
  2. https://server.arcgisonline.com e https://*.tile.openstreetmap.org são necessários para os tiles do mapa.

URL da instalação

O bloco acima publica o OpenDataBio na raiz de um host dedicado. Use valores correspondentes no .env:

APP_URL=https://seu-dominio.exemplo
ASSET_URL=https://seu-dominio.exemplo

Depois recompile todos os assets gerados:

sh scripts/build-assets.sh
php artisan optimize:clear

Uma instalação nginx em subcaminho, como /opendatabio, também exige regras específicas de location, alias e FastCGI; alterar somente o .env não é suficiente. Prefira um host ou subdomínio dedicado. Se o subcaminho for obrigatório, use a configuração Apache testada ou prepare e teste uma configuração nginx específica antes de publicá-la.

Etapas compartilhadas da aplicação

Para evitar redundância, use as mesmas seções da instalação Apache (também válidas para implantação com nginx):

  1. Configurações de PHP na Instalação padrão, usando o caminho FPM indicado acima
  2. Configurar o supervisord em Instalação padrão
  3. Permissões de arquivos e pastas em Instalação padrão
  4. Instale o OpenDataBio conforme a Instalação padrão, mas execute php install nginx
  5. Configurações pós-instalação em Instalação padrão