Configurar um servidor Hostel
O servidor mantém a fila, os utilizadores, a configuração e o gateway SSH.
Execute um servidor por equipa. Agentes e pessoas ligam-se a partir dos seus próprios
computadores (hostel-install).
1. Escolher a máquina e o modo TLS
- Uma máquina Linux com systemd (amd64 ou arm64; 2 CPUs e 4 GB são suficientes), ou
uma máquina doméstica que fique ligada. O repositório documenta apenas o serviço
systemd; noutro SO, execute
hostel server runcom o seu próprio gestor de serviços. - Um endereço HTTPS que os clientes possam alcançar. A API e o gateway partilham-no:
o gateway aceita SSH dentro de um WebSocket em
/v1/gateway.
| Modo TLS | Use quando | Clientes verificam |
|---|---|---|
self-signed (padrão) | Sem domínio ou sem proxy: um endereço IP, um nome LAN, um nome VPN. O servidor serve HTTPS com o seu próprio certificado. | A chave fixa do código de convite. |
off | Um proxy com TLS está à frente do servidor (Caddy, um balanceador de carga na cloud). | O certificado do proxy, da forma normal. |
2. Instalar
Como administrador na máquina do servidor:
curl -fsSL -o install.sh https://raw.githubusercontent.com/csansoon/hostel/main/install.sh
sudo sh install.sh --dir /usr/local/bin --server /opt/hostel
/opt/hostel/helpers recebe os binários para todas as salas (hostel-<os>-<arch>,
mise-<os>-<arch>). /opt/hostel/platforms recebe os scripts de plataforma (apenas um
servidor antigo os importa; o binário tem as plataformas predefinidas).
3. Inicializar
Execute hostel server init como o utilizador que executa o serviço (não root). Num
terminal, ele pergunta pelo nome do servidor, os endereços e o seu nome quando as
flags não os fornecem. Flags:
| Flag | Significado |
|---|---|
--server-id | O nome do servidor, [a-z0-9]{1,20} (padrão: a partir do nome do host). Faz parte dos nomes das salas que o servidor cria. |
--listen | O endereço da API (padrão 127.0.0.1:7410). |
--tls | self-signed (padrão) ou off. |
--url | Um endereço que os clientes usam. Repita-o para vários. Os códigos de convite contêm-nos. |
--user | O seu nome, para o primeiro administrador. |
--helper-dir | Os binários para as salas: /opt/hostel/helpers após install.sh --server /opt/hostel (padrão: data_dir/helpers). |
--config | O ficheiro a escrever (padrão ~/.config/hostel/server.toml). |
Auto-assinado, na sua própria porta (abrir TCP 7410 na firewall):
hostel server init --server-id demo --listen 0.0.0.0:7410 \
--url https://hostel.example.com:7410 --user "Alice Example" \
--helper-dir /opt/hostel/helpers
Atrás de um proxy com TLS:
hostel server init --server-id demo --tls off --listen 127.0.0.1:8000 \
--url https://hostel.example.com --user "Alice Example" \
--helper-dir /opt/hostel/helpers
Com --tls off e um endereço https://, init também escreve
gateway_public = "wss://hostel.example.com/v1/gateway": convidados e máquinas
associadas alcançam o gateway SSH através do proxy. O proxy deve encaminhar
/v1/gateway (um WebSocket) para o servidor.
init escreve server.toml, hostel.schema.json, o diretório de dados
(~/.local/share/hostel: a base de dados, server_ed25519, gateway_host_ed25519,
e o certificado TLS), e imprime a chave pública SSH do servidor e o primeiro convite
de administrador:
Conecte o seu computador como o primeiro administrador. Execute isto no seu computador:
hostel connect hostel1-...
Execute esse comando no seu próprio computador dentro de 24 horas (hostel-install).
4. Editar server.toml
server.toml tem apenas as chaves de que o servidor precisa antes de abrir a sua
base de dados: server_id, listen, gateway_listen, gateway_public, tls,
public_urls, data_dir, helper_dir, platforms_dir. init escreve
helper_dir (com --helper-dir) e, atrás de um proxy, gateway_public. Verifique-os:
grep -E 'helper_dir|gateway_public' ~/.config/hostel/server.toml
hostel admin config check
Sem helper_dir, o servidor não pode fornecer às salas o seu helper, e hostel machine join não pode descarregar o binário. Sem gateway_public atrás de um
proxy, cada sessão SSH convidada e cada máquina associada falha.
Um exemplo com Caddy (Caddy passa atualizações WebSocket sem configurações adicionais):
hostel.example.com {
reverse_proxy 127.0.0.1:8000
}
Com tls = "self-signed", o gateway_public padrão é /v1/gateway no mesmo
endereço; não o defina. Verifique o ficheiro (imprime cada problema e os valores
efetivos):
hostel admin config check
Uma alteração de server.toml requer um reinício do servidor.
5. O serviço systemd
/etc/systemd/system/hostel.service (substitua alice pelo utilizador que executou
init):
[Unit]
Description=Servidor Hostel
After=network-online.target
Wants=network-online.target
[Service]
User=alice
ExecStart=/usr/local/bin/hostel server run
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now hostel
journalctl -u hostel -f
hostel server run --config <file> seleciona outro server.toml. O registo é
JSON no stderr. Se a configuração for inválida, o servidor não inicia e o registo
diz porquê.
Para salas de Namespace, os CLIs devbox e nsc devem estar no PATH do serviço
(hostel-rooms, secção "Namespace").
6. A configuração na base de dados
Tudo o resto (fornecedores, máquinas, plataformas e as definições) é o documento de configuração na base de dados. Um administrador altera-o a partir de qualquer computador ligado. Uma alteração válida aplica-se imediatamente, sem reinício.
hostel config # mostra o documento (membros veem segredos como ***)
hostel config edit # altera-o em $VISUAL / $EDITOR
hostel config apply file.toml # substitui-o por um ficheiro (ou - para stdin)
hostel config history # as revisões, com utilizador e hora
hostel config settings # as definições que não são padrão
hostel config settings set idle_timeout=20m
Definições: idle_timeout (10m), poll_timeout (5m), limit_retry (2m),
port_process_offline (10m), intervals.scheduler (10s),
intervals.reconcile (5m), intervals.tunnel_check (30s),
intervals.presence (30s), mise.idiomatic_tools (["node", "python"]),
mise.github_token, mise.agent_device (true).
O servidor recusa uma alteração se outra revisão chegou primeiro (edite novamente) ou se
for inválida (o erro nomeia o caminho da chave). Máquinas e fornecedores:
hostel-rooms. Plataformas: hostel-platforms. Utilizadores: hostel-users.
7. Convites na máquina do servidor
Se ninguém conseguir entrar como administrador, crie um convite na própria máquina do servidor (não usa a API):
hostel server invite # um administrador
hostel server invite --role member --name "Bob Example"
8. Cópias de segurança
O estado está no diretório de dados (~/.local/share/hostel). Faça backup das chaves
uma vez (server_ed25519, gateway_host_ed25519, tls_cert.pem, tls_key.pem).
Faça backup da base de dados com SQLite, não com uma cópia de ficheiro:
sqlite3 ~/.local/share/hostel/hostel.db ".backup /var/backups/hostel.db"
- Uma base de dados perdida: os utilizadores devem ligar-se novamente; as salas on-demand com este
server_idsão destruídas na próxima reconciliação. - Uma
server_ed25519perdida: coloque a nova chave pública (hostel admin pubkey) em cada máquina estática. - Uma chave TLS perdida (auto-assinada): cada cliente deve ligar-se novamente com um novo código de convite.
9. Atualizar
curl -fsSL -o install.sh https://raw.githubusercontent.com/csansoon/hostel/main/install.sh
sudo sh install.sh --dir /usr/local/bin --server /opt/hostel
sudo systemctl restart hostel
O servidor envia o novo helper para cada sala antes do seu próximo lease.
Seguir
- Adicionar salas:
hostel-rooms. - Convidar pessoas:
hostel-users.