Skip to content
mobius1qwe edited this page Oct 7, 2026 · 1 revision

Home > Colocar no ar

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.

Escolha a forma

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

Serviço do Windows (Delphi)

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 Service1

No Lazarus, o equivalente é o pacote LazDaemon (Project > New Project > Daemon (service) application).

Daemon no Linux (systemd)

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 parar

E 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.target
sudo systemctl enable --now meuservidor
sudo systemctl status meuservidor

No 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.

Liberar a porta no firewall

netsh advfirewall firewall add rule name="Meu servidor RAL" dir=in action=allow protocol=TCP localport=8000
sudo ufw allow 8000/tcp

QUIC (MsQuic) usa UDP: libere protocol=UDP / 8100/udp.

Levar junto

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.

Saber o IP do servidor 1.2 🚧

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).

Antes de abrir para a internet

Segurança para produção, e grave os erros no evento OnServerError.

Veja também

Clone this wiki locally