ꡬμ±
ꡬμ±
SSH-FrontiΓ¨reλ TOML νμΌμ μ¬μ©νμ¬ λλ©μΈ, μ‘μ , μ κ·Ό μμ€, μΈμ λ° μΈμ¦ ν ν°μ μ μΈν©λλ€.
μμΉ
κΈ°λ³Έ κ²½λ‘: /etc/ssh-frontiere/config.toml
μ¬μ μ (μ°μ μμ μ):
authorized_keysμcommand=μ€μ μλ--config <path>- νκ²½ λ³μ
SSH_FRONTIERE_CONFIG - κΈ°λ³Έ κ²½λ‘
κΆμ₯ κΆν: root:forge-runner 640 (μ¬μ©νλ μλΉμ€ κ³μ μ λ§κ² κ·Έλ£Ήμ μ‘°μ νμΈμ).
νμΌ κ΅¬μ‘°
[global] # μΌλ° μ€μ
[domains.<id>] # κΈ°λ₯ λλ©μΈ
[domains.<id>.actions.<id>] # νκ°λ μ‘μ
[domains.<id>.actions.<id>.args] # λͺ
λͺ
λ μΈμ (μ νμ¬ν)
[auth] # RBAC μΈμ¦ (μ νμ¬ν)
[auth.tokens.<id>] # μν¬λ¦Ώ, μμ€ λ° νκ·Έλ₯Ό κ°μ§ ν ν°
[global] μΉμ
| ν€ | μ ν | κΈ°λ³Έκ° | μ€λͺ |
|---|---|---|---|
log_file | string | νμ | JSON λ‘κ·Έ νμΌ κ²½λ‘ |
default_timeout | μ μ | 300 | κΈ°λ³Έ νμμμ(μ΄) |
max_stdout_chars | μ μ | 65536 | stdout μ ν (64 Ko) |
max_stderr_chars | μ μ | 16384 | stderr μ ν (16 Ko) |
max_output_chars | μ μ | 131072 | μ 체 νλ λ¦¬λ° (128 Ko) |
max_stream_bytes | μ μ | 10485760 | μ€νΈλ¦¬λ° λ³Όλ₯¨ μ ν (10 Mo) |
timeout_session | μ μ | 3600 | μΈμ keepalive νμμμ |
max_auth_failures | μ μ | 3 | μ κΈ μ μΈμ¦ μλ νμ |
ban_command | string | "" | IP μ°¨λ¨ λͺ
λ Ή (νλ μ΄μ€νλ {ip}) |
log_comments | bool | false | ν΄λΌμ΄μΈνΈμ # μ€μ κΈ°λ‘ |
expose_session_id | bool | false | λ°°λμ μΈμ UUID νμ |
log_level, default_level, mask_sensitive ν€λ μ΄μ ꡬμ±κ³Όμ νΈνμ±μ μν΄ νμμμ μμ©νμ§λ§, λ μ΄μ μ¬μ©λμ§ μμ΅λλ€.
[domains] μΉμ
λλ©μΈμ κΈ°λ₯μ μμ(μ: forgejo, infra, notify)μ
λλ€. κ° λλ©μΈμ νκ°λ μ‘μ
μ ν¬ν¨ν©λλ€.
[domains.forgejo]
description = "Forge Git infrastructure"
[domains.forgejo.actions.backup-config]
description = "Sauvegarde la configuration"
level = "ops"
timeout = 600
execute = "sudo /usr/local/bin/backup-config.sh {domain}"
max_body_size = 65536 # body μ ν (64 Ko, μ νμ¬ν)
κ° μ‘μ
μ λ€μ ν€λ₯Ό λ°μ΅λλ€: description (νμ), level (νμ), execute (νμ), timeout (μ νμ¬ν, μ μ μ€μ μ¬μ μ), tags (μ νμ¬ν), max_body_size (μ νμ¬ν, κΈ°λ³Έκ° 65536λ°μ΄νΈ β +body νλ‘ν μ½μ© μ ν).
μ λ’° μμ€
μ격ν κ³μΈ΅ ꡬ쑰: read < ops < admin
| μμ€ | μ©λ |
|---|---|
read | μ‘°ν: healthcheck, status, list |
ops | μΌλ° μ΄μ: backup, deploy, restart |
admin | λͺ¨λ μ‘μ + κ΄λ¦¬ |
μΈμ
μΈμλ TOML λμ λλ¦¬λ‘ μ μΈλ©λλ€:
[domains.forgejo.actions.deploy.args]
tag = { type = "enum", values = ["latest", "stable", "canary"], default = "latest" }
| νλ | μ ν | μ€λͺ |
|---|---|---|
type | string | "enum" λλ "string" |
values | 리μ€νΈ | νμ©λ κ° (enumμ©) |
default | string | κΈ°λ³Έκ° (μΈμλ₯Ό μ νμ¬νμΌλ‘ λ§λ¦) |
sensitive | bool | trueμ΄λ©΄ λ‘κ·Έμμ λ§μ€νΉ |
free | bool | trueμ΄λ©΄ μ μ½ μμ΄ λͺ¨λ κ° νμ© |
executeμ νλ μ΄μ€νλ
| νλ μ΄μ€νλ | μ€λͺ |
|---|---|
{domain} | λλ©μΈ μ΄λ¦ (νμ μ¬μ© κ°λ₯) |
{μΈμλͺ
} | ν΄λΉ μΈμμ κ° |
κ°μμ± νκ·Έ
νκ·Έλ μ‘μ μ κ·Όμ μνμ μΌλ‘ νν°λ§ν©λλ€. νκ·Έκ° μλ μ‘μ μ λͺ¨λμκ² μ κ·Ό κ°λ₯ν©λλ€. νκ·Έκ° μλ μ‘μ μ νλ μ΄μμ κ³΅ν΅ νκ·Έλ₯Ό κ°μ§ IDλ§ μ κ·Ό κ°λ₯ν©λλ€.
[domains.forgejo.actions.deploy]
# ...
tags = ["forgejo", "deploy"]
[auth] μΉμ
(μ νμ¬ν)
RBAC μΈμ¦μ μ±λ¦°μ§-μλ΅μ ν΅ν κΆν μμΉμ κ°λ₯νκ² ν©λλ€:
[auth]
challenge_nonce = false # true = μ¬μ¬μ© λ°©μ§ λ
Όμ€ λͺ¨λ
[auth.tokens.runner-ci]
secret = "b64:c2VjcmV0LXJ1bm5lci1jaQ==" # base64 μΈμ½λ©λ μν¬λ¦Ώ
level = "ops" # λΆμ¬λλ μμ€
tags = ["forgejo"] # κ°μμ± νκ·Έ
μν¬λ¦Ώμ b64: μ λμ¬κ° λΆκ³ base64λ‘ μΈμ½λ©λμ΄μΌ ν©λλ€. μν¬λ¦Ώμ μμ±νλ €λ©΄:
echo -n "mon-secret-aleatoire" | base64
# bW9uLXNlY3JldC1hbGVhdG9pcmU=
λ‘λ μ κ²μ¦
ꡬμ±μ λ§€λ² λ‘λν λλ§λ€ μμ ν κ²μ¦λ©λλ€(fail-fast). μ€λ₯ μ νλ‘κ·Έλ¨μ΄ μ’ λ£ μ½λ 129λ‘ μ€λ¨λ©λλ€. κ²μ¦ νλͺ©:
- μ¬λ°λ₯Έ TOML λ¬Έλ²
- μ΅μ νλμ λλ©μΈ, λλ©μΈλΉ μ΅μ νλμ μ‘μ
- κ° μ‘μ
μ μ ν¨ν
executeμlevel executeμ νλ μ΄μ€νλ{arg}κ° μ μΈλ μΈμμ μΌμΉ- enum μΈμμ μ΅μ νλμ νμ©λ κ°
- κΈ°λ³Έκ°μ΄ νμ©λ κ° λͺ©λ‘μ ν¬ν¨
max_stdout_charsμmax_stderr_chars<=max_output_chars
μ 체 μμ
[global]
log_file = "/var/log/ssh-frontiere/commands.json"
default_timeout = 300
max_stdout_chars = 65536
max_stderr_chars = 16384
max_output_chars = 131072
timeout_session = 3600
max_auth_failures = 3
[domains.forgejo]
description = "Forge Git infrastructure"
[domains.forgejo.actions.backup-config]
description = "Forgejo κ΅¬μ± λ°±μ
"
level = "ops"
timeout = 600
execute = "sudo /usr/local/bin/backup-config.sh {domain}"
[domains.forgejo.actions.deploy]
description = "λ²μ νκ·Έλ‘ λ°°ν¬"
level = "ops"
timeout = 300
execute = "sudo /usr/local/bin/deploy.sh {domain} {tag}"
[domains.forgejo.actions.deploy.args]
tag = { type = "enum", values = ["latest", "stable", "canary"], default = "latest" }
[domains.infra]
description = "μλ² μΈνλΌ"
[domains.infra.actions.healthcheck]
description = "μλΉμ€ μν μ κ²"
level = "read"
timeout = 30
execute = "/usr/local/bin/healthcheck.sh"
[auth]
challenge_nonce = false
[auth.tokens.runner-ci]
secret = "b64:c2VjcmV0LXJ1bm5lci1jaQ=="
level = "ops"
tags = ["forgejo"]
λͺ¨λ μ¬μ© μ¬λ‘λ₯Ό ν¬ν¨ν μμΈν κ°μ΄λλ μ μ₯μμ μ 체 κ΅¬μ± κ°μ΄λλ₯Ό μ°Έμ‘°νμΈμ.
λ€μ: λ°°ν¬ β νλ‘λμ μ μ©.