Vários projetos, mídia e atualização
Cada projeto blog é um processo separado, com a sua pasta, o seu usuário, o seu arquivo de ambiente e o seu serviço. Por isso, uma VPS pode receber mais de um projeto sem que eles dividam banco ou arquivos.
Mais de um projeto na mesma VPS
Seção intitulada “Mais de um projeto na mesma VPS”Repita em cada projeto os passos de VPS e variáveis. Estes são os itens que mudam de um projeto para o outro:
| Item | Primeiro projeto | Segundo projeto |
|---|---|---|
| Pasta | /srv/<projeto> | /srv/<projeto-2> |
| Usuário do serviço | slash-<projeto> | slash-<projeto-2> |
| Arquivo de ambiente | /etc/slash-<projeto>.env, com PORT=4330 | /etc/slash-<projeto-2>.env, com outra PORT, por exemplo 4331 |
| Bloco do Caddy | o domínio do projeto e reverse_proxy 127.0.0.1:4330 | outro domínio e reverse_proxy 127.0.0.1:4331 |
| Serviço do systemd | slash-<projeto> | slash-<projeto-2> |
Cada projeto usa o próprio banco e a própria pasta storage/. A PORT de um projeto não pode ser a de outro, e o bloco do Caddy liga cada domínio à porta do projeto dele. Cada serviço tem o limite de memória de 1 GB do arquivo de exemplo, que cobre o painel e o build de um projeto.
Nome do usuário do serviço
Seção intitulada “Nome do usuário do serviço”O usuário é slash- seguido do nome do projeto. O useradd aceita até 32 caracteres, então um nome de projeto com mais de 26 caracteres ganha outra forma: slash-, os 17 primeiros caracteres do nome, um hífen e 8 caracteres de hash do nome completo. O slash create já grava esse nome nos arquivos de exemplo da pasta deploy/, então use-o como vier lá.
A pasta storage/ precisa estar no mesmo disco do projeto. Ela guarda o banco, os backups, as mídias e a cópia de trabalho dos builds. A publicação troca a pasta do site por rename, que não atravessa discos. Se storage/ estiver em outro disco, por um link ou uma montagem, a publicação falha. A mensagem no log do pedido diz Troca do site recusada (EXDEV), e o log aparece em Ver log, na tela Publicação.
Os envios aceitos são JPEG, PNG, WebP, AVIF, GIF e PDF.
Cada arquivo pode ter até 10 MB. Uma foto de celular pode passar desse tamanho. Imagens com mais de 100 megapixels são recusadas, seja qual for o teto de bytes.
Para aumentar o teto de bytes, mude MAX_MEDIA_BYTES em src/panel/ports/media.ts do projeto, por exemplo para 20 * 1024 * 1024, e reinicie o serviço com sudo systemctl restart slash-<projeto>. O corpo aceito pelo envio é esse valor mais 1 MB, para os campos do formulário. Se houver Caddy na frente, confira que ele também aceita o corpo maior.
Os originais e as variantes ficam em storage/media e entram nos backups.
Atualização de versão
Seção intitulada “Atualização de versão”A 1.1.0 não traz comando para atualizar um projeto já criado. Os comandos do slash são create, check, approve, verify, module, backup e admin, e nenhum troca a versão de um projeto existente.
Duas coisas guardam a versão de um projeto. O slash.lock na raiz do projeto registra a tag e o commit de onde vieram o ui, o panel e cada módulo. E o slash.lock dentro de cada backup registra a versão em que ele foi feito.
Por isso, antes de mexer na versão, faça um backup com slash backup e guarde uma cópia fora da VPS. A restauração confere a versão: um backup de versão mais nova do painel é recusado, e a tela de Backup só restaura backups da mesma versão. Veja Backup e restauração.
Limites da 1.1.0
Seção intitulada “Limites da 1.1.0”Estes são os limites que o código da 1.1.0 aplica. Os valores vêm do código da versão.
| Limite | Valor | O que controla |
|---|---|---|
backup.keptAutomatic | 7 backups | Backups automáticos guardados. Os mais antigos são apagados ao criar um novo. |
backup.keptPreRestore | 3 backups | Backups de segurança feitos antes de cada restauração. Os mais antigos são apagados. |
comments.maxLength | 2.000 caracteres | Tamanho padrão de um comentário. O módulo Comentários pode mudar esse valor. |
media.maxBytes | 10 MB | Maior arquivo que um envio aceita. |
media.maxPixels | 100 megapixels | Maior imagem, em pixels, que o processamento aceita. |
password.minLength | 12 caracteres | Tamanho mínimo da senha do painel. |
public.bodyMaxBytes | 32 KB | Tamanho máximo do corpo de um formulário público. |
rate.accountLogin | 3 tentativas por hora | Pedidos de recuperação de senha por e-mail digitado. |
rate.addressLogin | 20 tentativas a cada 15 minutos | Tentativas de entrar, recuperar a senha ou aceitar convite por endereço, somando todos os e-mails. |
rate.comments | 3 tentativas por minuto | Comentários enviados por endereço. |
rate.login | 5 tentativas a cada 15 minutos | Tentativas de entrar, recuperar a senha ou aceitar convite por endereço e e-mail. |
rate.metrics | 120 tentativas por minuto | Envios de métricas de visita e clique. |
rate.newsletter | 3 tentativas por minuto | Inscrições na newsletter por endereço. |
secret.minLength | 32 caracteres | Tamanho mínimo do PANEL_SECRET. |