chore: update robots.txt to block crawling and add SETUP_SERVER.md

This commit is contained in:
Duarte
2026-06-04 12:42:28 +01:00
parent b1cc6368a1
commit 6ddc8974e0
2 changed files with 276 additions and 2 deletions
+274
View File
@@ -0,0 +1,274 @@
# Manual de Configuração do Servidor Ubuntu 24.04 — Refood-One
Este guia contém todos os passos necessários para preparar um servidor limpo com Ubuntu 24.04 para alojar e executar a aplicação **Refood-One** (SvelteKit + Drizzle/SQLite).
Por questões de segurança, a aplicação será executada sob um utilizador de sistema dedicado (`refood`) sem privilégios de superutilizador.
---
## 1. Atualizar o Servidor e Instalar Dependências de Compilação
Como a aplicação utiliza módulos nativos de Node.js (como `better-sqlite3` e `bcrypt`), precisamos das ferramentas de compilação instaladas:
```bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git build-essential sqlite3
```
---
## 2. Instalar o Node.js LTS (Versão 22 ou 20)
Configurar o repositório NodeSource e instalar o Node.js:
```bash
# Adicionar o repositório do Node.js 22 LTS
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
# Confirmar as versões instaladas
node -v
npm -v
```
---
## 3. Criar Utilizador Dedicado para a Aplicação (Segurança)
Nunca execute a aplicação como utilizador `root`. Crie um utilizador de sistema sem palavra-passe e com pasta própria:
```bash
sudo adduser --system --group --home /var/www/refood-one refood
```
---
## 4. Configurar o Diretório da Aplicação e Dependências
1. Faça o clone do repositório da aplicação (como root/administrador):
```bash
# Clonar para a pasta dedicada
git clone <URL_DO_REPOSITORIO_GIT> /var/www/refood-one
```
2. Ajuste as permissões para que o utilizador `refood` seja o proprietário exclusivo dos ficheiros:
```bash
sudo chown -R refood:refood /var/www/refood-one
```
3. Mude para o diretório da aplicação:
```bash
cd /var/www/refood-one
```
4. Instale as dependências. Recomenda-se realizar a instalação como o utilizador `refood`:
```bash
sudo -u refood npm install
```
---
## 5. Configurar as Variáveis de Ambiente
Crie o ficheiro `.env` de produção:
```bash
sudo -u refood nano /var/www/refood-one/.env
```
Adicione e adapte as configurações necessárias:
```env
# Porta onde o servidor SvelteKit irá correr localmente
PORT=3000
ORIGIN=https://o-seu-dominio.com
# Drizzle / SQLite
DATABASE_URL=local.db
# Odoo API
ODOO_URL="https://erp.onrefood.com/jsonrpc"
ODOO_DB="refood.flybyodoo.pt"
ODOO_KEY="b4dadfb997fa8e3735c52b8d28476cd5ca339d2e"
ODOO_USER="duarte.caldas.oliveira@gmail.com"
ODOO_COMPANY_ID=
```
---
## 6. Inicializar Base de Dados e Compilar o Projeto
Execute estes comandos para aplicar as tabelas na base de dados SQLite e construir a build de produção da aplicação SvelteKit:
```bash
# Executar as migrações/push do Drizzle (injetando a variável de ambiente necessária)
sudo -u refood DATABASE_URL=local.db npm run db:push
# Criar a build de produção da aplicação
sudo -u refood npm run build
```
---
## 7. Instalar e Configurar o PM2 (Process Manager)
O PM2 irá manter o processo Node.js ativo e iniciá-lo no arranque do sistema.
1. Instalar o PM2 globalmente:
```bash
sudo npm install -y -g pm2
```
2. Criar o ficheiro de configuração do PM2 (`ecosystem.config.cjs`) para carregar o ficheiro `.env` e as variáveis necessárias no arranque:
```bash
sudo -u refood nano /var/www/refood-one/ecosystem.config.cjs
```
Cole o seguinte conteúdo:
```javascript
const fs = require('fs');
const path = require('path');
// Ler e parsear o ficheiro .env
const envPath = path.resolve(__dirname, '.env');
const env = {};
if (fs.existsSync(envPath)) {
const lines = fs.readFileSync(envPath, 'utf-8').split('\n');
for (const line of lines) {
if (!line.trim() || line.trim().startsWith('#')) continue;
const match = line.match(/^\s*([\w.-]+)\s*=\s*(.*)?\s*$/);
if (match) {
const key = match[1];
let value = match[2] || '';
if (value.startsWith('"') && value.endsWith('"')) value = value.slice(1, -1);
if (value.startsWith("'") && value.endsWith("'")) value = value.slice(1, -1);
env[key] = value.trim();
}
}
}
module.exports = {
apps: [
{
name: 'refood-one',
script: 'build/index.js',
cwd: '/var/www/refood-one',
env: {
NODE_ENV: 'production',
...env
}
}
]
};
```
3. Iniciar a aplicação usando a configuração criada:
```bash
sudo -u refood pm2 start /var/www/refood-one/ecosystem.config.cjs
```
4. Configurar o PM2 para iniciar no arranque do servidor com o utilizador `refood`:
```bash
sudo pm2 startup systemd -u refood --hp /var/www/refood-one
```
*Nota: O comando acima irá gerar um comando `sudo env PATH=$PATH...` na consola. Copie e execute esse comando gerado para ativar o serviço no systemd.*
5. Guardar a lista de processos para o utilizador `refood`:
```bash
sudo -u refood pm2 save
```
---
## 8. Configurar o Nginx como Reverse Proxy
1. Instalar o Nginx:
```bash
sudo apt install -y nginx
```
2. Criar um ficheiro de configuração do site:
```bash
sudo nano /etc/nginx/sites-available/refood-one
```
3. Colar a seguinte configuração (substituindo `o-seu-dominio.com` pelo seu domínio real):
```nginx
server {
listen 80;
server_name o-seu-dominio.com www.o-seu-dominio.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
4. Ativar a configuração e reiniciar o Nginx:
```bash
# Criar o link simbólico para ativar
sudo ln -s /etc/nginx/sites-available/refood-one /etc/nginx/sites-enabled/
# Desativar a configuração por defeito do Nginx (opcional)
sudo rm /etc/nginx/sites-enabled/default
# Verificar se a sintaxe do Nginx está correta
sudo nginx -t
# Recarregar o Nginx
sudo systemctl restart nginx
```
---
## 9. Configurar Certificado SSL (HTTPS) com Let's Encrypt
1. Instalar o Certbot:
```bash
sudo apt install -y certbot python3-certbot-nginx
```
2. Obter o certificado SSL (o Certbot irá alterar a configuração do Nginx automaticamente):
```bash
sudo certbot --nginx -d o-seu-dominio.com -d www.o-seu-dominio.com
```
---
## Anexo: Limpeza do PM2 Root Antigo
Se configurou anteriormente o PM2 a correr diretamente como `root` e deseja remover esses vestígios do servidor atual, execute:
```bash
# 1. Parar o serviço systemctl antigo do root
sudo systemctl stop pm2-root
sudo systemctl disable pm2-root
# 2. Remover o script de arranque antigo do root
sudo pm2 unstartup systemd
# 3. Remover o ficheiro do serviço systemd
sudo rm /etc/systemd/system/pm2-root.service
sudo systemctl daemon-reload
sudo systemctl reset-failed
# 4. Matar o processo daemon residual do root
sudo pm2 kill
```
---
## Anexo B: Como Atualizar a Aplicação (Deploy de Novas Versões)
Sempre que fizer alterações no Git e as quiser colocar em produção, execute a seguinte sequência de comandos no servidor:
```bash
# 1. Mudar para a pasta da aplicação
cd /var/www/refood-one
# 2. Descarregar a última versão do código (como utilizador refood)
sudo -u refood git pull
# 3. Instalar novas dependências (caso package.json tenha alterado)
sudo -u refood npm install
# 4. Aplicar novas migrações na base de dados (se o schema do Drizzle tiver mudado)
sudo -u refood DATABASE_URL=local.db npm run db:push
# 5. Compilar o projeto novamente
sudo -u refood npm run build
# 6. Recarregar o PM2 de forma segura (Zero Downtime)
sudo -u refood pm2 reload refood-one
```
*Dica: O comando `pm2 reload` reinicia os processos de forma faseada, garantindo que o seu site não fica fora do ar (zero downtime) enquanto a atualização é aplicada.*
+2 -2
View File
@@ -1,3 +1,3 @@
# allow crawling everything by default
# Block all crawling
User-agent: *
Disallow:
Disallow: /