# Publicar um site ou uma aplicação

O seu VPS Pro serve os seus sites e as suas aplicações no respetivo nome de domínio, em HTTP e em HTTPS. Os visitantes chegam às portas **80** e **443** do seu servidor, pelo nome do seu servidor; a cifragem HTTPS vai de ponta a ponta, até ao seu servidor, onde se encontra o seu certificado.

## 1. Apontar o seu domínio para o seu servidor

No local onde se gere a zona DNS do seu domínio, crie dois registos para o nome do seu servidor, com os endereços apresentados no respetivo cartão, secção **VPS** da sua área de cliente:

| Tipo   | Nome                                  | Valor                             |
| ------ | ------------------------------------- | --------------------------------- |
| `A`    | `app` (ou `@` para o próprio domínio) | o **Endereço IPv4** do seu cartão |
| `AAAA` | `app` (ou `@`)                        | o **Endereço IPv6** do seu cartão |

Um nome em `vps.simafri.cloud` já funciona: não há nada a criar.

Quando a zona DNS do seu domínio é gerida pela Simafri, a nossa equipa cria estes registos por si: escreva-nos. Antes de mudar um site que já está online, peça-nos também para baixar o tempo de vida (TTL) do registo: a mudança propaga-se então em poucos minutos.

Para verificar a partir do seu computador:

```
dig +short A app.minha-empresa.pt

dig +short AAAA app.minha-empresa.pt
```

## 2. Instalar o seu servidor web

O seu servidor web escuta na porta **80** para HTTP e na porta **443** para HTTPS. Duas escolhas habituais:

* **Caddy**, que obtém e renova sozinho o seu certificado HTTPS;
* **Nginx** ou **Apache**, com **Certbot** para o certificado.

### Com Caddy

```
apt install caddy
```

Depois, em `/etc/caddy/Caddyfile`, para um site estático:

```
app.minha-empresa.pt {

    root * /var/www/app

    file_server

}
```

ou para uma aplicação que escuta na porta 3000:

```
app.minha-empresa.pt {

    reverse_proxy 127.0.0.1:3000

}
```

`systemctl reload caddy`, e o seu site responde em HTTPS: o Caddy obteve o certificado e renová-lo-á automaticamente.

### Com Nginx e Certbot

```
apt install nginx certbot python3-certbot-nginx
```

Crie o site em `/etc/nginx/sites-available/app`:

```
server {

    listen 80;

    listen [::]:80;

    server_name app.minha-empresa.pt;



    location / {

        proxy_pass http://127.0.0.1:3000;

        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-Proto $scheme;

    }

}
```

Ative-o e, depois, peça o certificado:

```
ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/

nginx -t && systemctl reload nginx

certbot --nginx -d app.minha-empresa.pt
```

O Certbot instala o certificado Let's Encrypt, acrescenta a escuta na porta 443 e programa a respetiva renovação automática. `certbot renew --dry-run` verifica se a renovação está pronta.

## 3. Manter a sua aplicação em funcionamento

Uma aplicação Node.js, Python, Go ou Java que funciona em contínuo confia-se ao **systemd**: arranca com o servidor e volta a arrancar sozinha se parar. Exemplo, em `/etc/systemd/system/app.service`:

```
[Unit]

Description=A minha aplicação

After=network.target



[Service]

WorkingDirectory=/srv/app

ExecStart=/usr/bin/node server.js

Restart=always

Environment=NODE_ENV=production

User=www-data



[Install]

WantedBy=multi-user.target
```

```
systemctl daemon-reload

systemctl enable --now app

journalctl -u app -f    # acompanhar os registos
```

O PM2 para Node.js, o Gunicorn ou o Uvicorn para Python, ou o Docker Compose cumprem o mesmo papel, se os preferir.

## 4. A sua base de dados

PostgreSQL, MySQL, MariaDB, Redis ou MongoDB instalam-se no seu servidor com o gestor de pacotes, ou a partir do repositório oficial do editor para a versão mais recente:

```
apt install postgresql
```

Mantenha a sua base de dados à escuta em `localhost`: a sua aplicação chega a ela no próprio servidor. Para a administrar a partir do seu computador, passe por um túnel SSH:

```
ssh -p 22101 -L 5432:localhost:5432 root@app.minha-empresa.pt
```

A sua ferramenta (DBeaver, pgAdmin, TablePlus) liga-se então a `localhost:5432`.

## Servir vários domínios

O seu servidor responde pelo seu nome, definido na encomenda. Para servir outro domínio ou outro subdomínio no mesmo VPS Pro, escreva ao suporte indicando os nomes a acrescentar: a nossa equipa liga-os ao seu servidor e, depois, da sua parte, cria os respetivos registos DNS como na etapa 1 e acrescenta o bloco correspondente ao seu servidor web.

## Perguntas frequentes

### O meu site apresenta um erro de certificado.

Verifique por esta ordem: os seus registos `A` e `AAAA` designam os endereços do seu cartão (`dig`), o seu servidor web escuta nas portas 80 e 443 (`ss -tlnp`), e o certificado cobre de facto esse nome (`certbot certificates`). O certificado obtém-se depois de o nome designar o seu servidor: volte a executar o Certbot, ou recarregue o Caddy, depois da propagação DNS.

### O meu site não responde de todo.

No servidor, `curl -I http://localhost` mostra se o seu servidor web responde. `systemctl status nginx` (ou `caddy`, ou o seu serviço) e os respetivos registos dizem porque parou. Descreva o que observa ao suporte: a Assistência integral faz o diagnóstico consigo.

### Posso instalar WordPress, Laravel ou Symfony?

Sim: instale o PHP-FPM, a sua base de dados e o seu servidor web e, depois, a sua aplicação, como em qualquer servidor Linux. A Assistência integral indica-lhe as definições adequadas ao seu projeto, passo a passo.
