Restaurar em novo servidor
Servidor pifou, instância terminada, ou você quer migrar para hardware maior. Este playbook restaura o runner com todas as apps e secrets intactos.
Sintomas / casos de uso
- Servidor pifou (HD morreu, instância terminada)
- Migrar runner para um servidor maior
- Clonar produção para um servidor de teste
Pré-requisito crítico
Você tem a mkey exportada em backup seguro (feito antes do desastre):
runner mkey export --sealed > /backup/mkey.sealedSe não tem mkey backup: todos os secrets estão inacessíveis.
Não há como decriptar. Veja Bundle decrypt fail,
sub-cenário "regenerar do plaintext local" — mas só funciona se você tem
.env/.secrets copiados em outro lugar.
Passo 1: instalar runner no servidor novo
curl -sSL https://get.runner.ccs.systems/init.sh | sudo bash
runner -V # confirmar versão >= a do servidor originalPasso 2: importar mkey
O mkey exportado é uma string base64. Importe via runner init --mkey:
# transferir mkey.sealed pro servidor novo (scp / vault / etc)
scp /backup/mkey.sealed servidor-novo:/tmp/
# no servidor novo: inicializar com a mkey do servidor original
runner init --mkey "$(cat /tmp/mkey.sealed)"Isso garante que as ckeys existentes (armazenadas nos repos) possam ser decriptadas no servidor novo, porque a mkey é a mesma.
Passo 3: re-registrar apps
Para cada app que existia no servidor antigo:
runner add --repo user/app --instance productionIsso baixa o repo e o .runner/secrets.enc. Como a mkey é a mesma,
o runner consegue decriptar as ckeys do bundle.
Passo 4: importar ckeys (se tem export antigo)
Se você fez backup das ckeys com runner ckeys export no servidor antigo,
pode importá-las diretamente:
runner ckeys import-sealed --blob "$(cat /tmp/meu-app.ckey.sealed)"Se não tem ckey export mas tem os .env/.secrets em outro lugar:
runner secrets reset-bundle meu-app --yes # re-encripta do plaintext localPasso 5: puxar secrets pro plaintext
runner secrets pull meu-appDecripta .runner/secrets.enc e popula .env/.secrets local.
Passo 6: deploy
runner deploy meu-appWorkflow completo (script)
#!/bin/bash
# Restaura runner em servidor novo
set -e
MKEY_FILE=/tmp/mkey.sealed
APPS=(meu-app outro-app)
# 1. Instala
curl -sSL https://get.runner.ccs.systems/init.sh | sudo bash
# 2. Importa mkey
runner init --mkey "$(cat "$MKEY_FILE")"
# 3+4+5+6 por app
for app in "${APPS[@]}"; do
runner add --repo user/"$app" --instance production
if [ -f /tmp/"$app".ckey.sealed ]; then
runner ckeys import-sealed --blob "$(cat /tmp/"$app".ckey.sealed)"
fi
runner secrets pull "$app"
runner deploy "$app"
donePré-requisitos para que isto funcione
| Recurso | Obrigatório | Observação |
|---|---|---|
| mkey exportada | Sim (crítico) | Sem isso, nenhum secret é recuperável |
| Acesso aos repos | Sim | GitHub token com permissão de leitura |
| ckeys exportadas | Não | Reduz steps, mas não é obrigatório |
| DNS atualizado | Não (pós-deploy) | Atualizar antes ou depois do deploy |
Como prevenir surpresas no futuro
Backup periódico da mkey em vault separado:
runner mkey export --sealed > /vault/mkey-$(date +%Y%m%d).sealedBackup das ckeys de cada app (incremental):
for app in $(runner list --json | jq -r '.[].name'); do
runner ckeys export "$app" > /vault/ckeys/"$app".sealed
doneDocumentar o inventário de apps — qual repo, qual instance, qual servidor.
Links relacionados
- Bundle decrypt fail — se ckey/mkey falham
- Secrets lifecycle — como ckey/mkey funcionam
- `runner mkey`
- `runner ckeys`
- `runner secrets pull`