1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# Each Discourse install gets its own [[discourse]] block.
# Only `name` and `baseurl` are required; everything else is optional but
# unlocks more functionality (admin commands need apikey/api_username, SSH
# rebuilds need ssh_host, filtering needs tags, changelog posting needs
# changelog_topic_id).
#
# Where dsc looks for this file (first match wins):
# 1. --config <path> / -c flag
# 2. $DSC_CONFIG env var (full path to a dsc.toml; errors if missing)
# 3. ./dsc.toml
# 4. $DSC_CONFIG_HOME/dsc.toml (defaults to ~/.config/dsc/dsc.toml)
# 5. system locations ($XDG_CONFIG_DIRS, /etc/dsc/..., /usr/local/etc/...)
# Run `dsc config` to see which path is active and why.
[[]]
= "myforum" # unique short name; used everywhere in the CLI
= "My Forum" # Discourse site title (optional; display-only)
= "https://forum.example.com" # base URL of the Discourse install
= "your_api_key_here" # admin API key
= "system" # API username the key acts as
= "forum.example.com" # host used by `dsc update` over SSH (optional)
= false # true if `dsc harden` installed Docker rootless (optional)
= ["production", "uk"] # free-form tags; used by `--tags` filters (optional)
= 123 # topic id to post rebuild changelogs into (optional)
[[]]
= "otherforum"
= "Other Forum"
= "https://community.example.org"
= "your_other_api_key_here"
= "system"
= "community.example.org"
= ["staging"]
= 456
# ---------------------------------------------------------------------------
# Defaults for `dsc harden`. Every key below is optional — what's shown is
# what dsc would use anyway. Override per-run with the corresponding flag,
# e.g. `--ssh-port 40022`.
# ---------------------------------------------------------------------------
# [harden]
# new_user = "discourse"
# ssh_port = 2227
#
# # Where the Docker installer is fetched from. Pin to a snapshot if you
# # want to vet the script before each run.
# docker_install_url = "https://get.docker.com"
# docker_rootless = true
#
# # Server posture
# swap_size_gb = 2 # 0 to skip
# journald_max_use = "500M"
# timezone = "UTC"
# unattended_security_upgrades = true
# fail2ban = true
# mosh = false # opt-in; opens UDP 60000-61000
#
# # SSH algorithm policy overlays (OpenSSH list modifiers), not full pinning.
# # Defaults keep upstream OpenSSH defaults, drop legacy algorithms, and
# # prefer PQ-hybrid key exchange first.
# # If you override these, validate with `sshd -t` and inspect `sshd -T`
# # before reload so mistakes fail loudly.
# # sshd_ciphers = "..."
# # sshd_kex = "..."
# # sshd_macs = "..."
#
# # Extra ufw `allow` rules applied after the standard set
# # (22, the new ssh_port, 25, 80, 443, and optionally MOSH UDP).
# # extra_ufw_allow = ["3000/tcp", "192.168.1.0/24"]