Repository navigation
producao
Home > Colocar no ar
Delphi e Lazarus · Nível: intermediário
Em uma frase: como deixar o servidor rodando sozinho numa máquina (Windows ou Linux) e acessível pela rede.
| Forma | Quando | Como |
|---|---|---|
| Programa com janela | testes, máquina de balcão | o de sempre; fecha quando alguém fecha |
| Serviço do Windows | servidor Windows, sobe com a máquina | abaixo |
| Daemon no Linux (systemd) | servidor Linux | abaixo |
| CGI | hospedagem que só aceita CGI (IIS, Apache, nginx) | assistente do RAL, opção CGI (Primeiro servidor) |
| Atrás do nginx | domínio público, HTTPS do Let's Encrypt, vários serviços na mesma porta | HTTPS na frente, com nginx |
File > New > Other > Delphi > Windows > Service Application. No serviço:
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
FServidor := TRALIndyServer.Create(nil);
FServidor.CreateRoute('ping', Ping); // Ping: um método do TService1
FServidor.Port := 8000;
FServidor.Active := True;
Started := True;
end;
procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
FServidor.Active := False;
FreeAndNil(FServidor);
Stopped := True;
end;Instalar e iniciar (Prompt como administrador):
MeuServico.exe /install
sc start Service1No Lazarus, o equivalente é o pacote LazDaemon (Project > New Project > Daemon (service) application).
O programa console não pode terminar com ReadLn: sob o systemd não há teclado,
o ReadLn volta na hora e o servidor fecha. Troque o fim do programa por:
Servidor.Start;
while True do
Sleep(1000); // fica no ar até o systemd mandar pararE crie /etc/systemd/system/meuservidor.service:
[Unit]
Description=Meu servidor RAL
After=network.target
[Service]
ExecStart=/opt/meuservidor/meuservidor
WorkingDirectory=/opt/meuservidor
Restart=always
User=meuservidor
[Install]
WantedBy=multi-user.targetsudo systemctl enable --now meuservidor
sudo systemctl status meuservidorNo Lazarus/FPC para Linux, uses com cthreads em primeiro lugar (ver
Primeiro servidor), senão o programa para com
Runtime error 232 (sem suporte a threads) ao ligar o servidor.
Portas abaixo de 1024 (80, 443) precisam de root: prefira 8000 e um nginx na
frente.
netsh advfirewall firewall add rule name="Meu servidor RAL" dir=in action=allow protocol=TCP localport=8000sudo ufw allow 8000/tcpQUIC (MsQuic) usa UDP: libere protocol=UDP / 8100/udp.
Ao lado do executável, conforme o que usa: DLLs do OpenSSL (HTTPS no Indy/fpHTTP),
libsagui, msquic.dll, brotli/zstd, o cliente do banco (fbclient.dll,
libpq.dll...). Lista em Como instalar as dependências.
WriteLn('No ar em http://', Servidor.GetServerAddress, ':', Servidor.Port);GetServerAddress(rimIPv6) dá o IPv6. Funciona com o servidor parado e em todos os
motores (no CGI, o endereço do servidor da frente).
Segurança para produção, e grave os erros no evento OnServerError.
Começar
Servidor
- Rotas e parâmetros
- Ler o pedido e responder
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- Swagger e Postman
- Servidor SOAP 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
Cliente
Motores
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar