@lamalibre/create-lamaste 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/LICENSE.md +118 -0
  2. package/README.md +114 -0
  3. package/bin/create-lamaste.js +15 -0
  4. package/package.json +54 -0
  5. package/scripts/bundle-vendor.js +110 -0
  6. package/scripts/lamaste-cert-info +62 -0
  7. package/scripts/lamaste-certbot +96 -0
  8. package/scripts/lamaste-priv +693 -0
  9. package/src/index.js +646 -0
  10. package/src/lib/accounts.js +86 -0
  11. package/src/lib/binaries.js +137 -0
  12. package/src/lib/cert-help-page.js +160 -0
  13. package/src/lib/env.js +132 -0
  14. package/src/lib/http-redirect.js +38 -0
  15. package/src/lib/ownership.js +231 -0
  16. package/src/lib/relay-services.js +103 -0
  17. package/src/lib/secrets.js +19 -0
  18. package/src/lib/service-config.js +311 -0
  19. package/src/lib/summary.js +131 -0
  20. package/src/lib/wrappers.js +63 -0
  21. package/src/tasks/gatekeeper.js +233 -0
  22. package/src/tasks/harden.js +293 -0
  23. package/src/tasks/mtls.js +193 -0
  24. package/src/tasks/nginx.js +265 -0
  25. package/src/tasks/node.js +110 -0
  26. package/src/tasks/panel.js +408 -0
  27. package/src/tasks/redeploy.js +438 -0
  28. package/vendor/docs/00-introduction/how-it-works.md +447 -0
  29. package/vendor/docs/00-introduction/quickstart.md +472 -0
  30. package/vendor/docs/00-introduction/what-is-lamaste.md +112 -0
  31. package/vendor/docs/01-concepts/authentication.md +464 -0
  32. package/vendor/docs/01-concepts/authorization.md +242 -0
  33. package/vendor/docs/01-concepts/certificates.md +452 -0
  34. package/vendor/docs/01-concepts/dns-and-domains.md +343 -0
  35. package/vendor/docs/01-concepts/mtls.md +490 -0
  36. package/vendor/docs/01-concepts/nginx-reverse-proxy.md +540 -0
  37. package/vendor/docs/01-concepts/security-model.md +600 -0
  38. package/vendor/docs/01-concepts/tickets.md +414 -0
  39. package/vendor/docs/01-concepts/tunneling.md +367 -0
  40. package/vendor/docs/02-guides/agent-setup.md +194 -0
  41. package/vendor/docs/02-guides/certificate-management.md +341 -0
  42. package/vendor/docs/02-guides/cloud-provisioning.md +406 -0
  43. package/vendor/docs/02-guides/desktop-app-setup.md +226 -0
  44. package/vendor/docs/02-guides/disaster-recovery.md +464 -0
  45. package/vendor/docs/02-guides/first-tunnel.md +230 -0
  46. package/vendor/docs/02-guides/installation.md +393 -0
  47. package/vendor/docs/02-guides/managing-users.md +255 -0
  48. package/vendor/docs/02-guides/onboarding.md +244 -0
  49. package/vendor/docs/02-guides/standalone-plugin-with-tickets.md +375 -0
  50. package/vendor/docs/02-guides/static-sites.md +364 -0
  51. package/vendor/docs/03-architecture/e2e-three-vm-sequences.md +457 -0
  52. package/vendor/docs/03-architecture/installer-flow.md +151 -0
  53. package/vendor/docs/03-architecture/installer.md +445 -0
  54. package/vendor/docs/03-architecture/management-flow.md +288 -0
  55. package/vendor/docs/03-architecture/nginx-configuration.md +830 -0
  56. package/vendor/docs/03-architecture/onboarding-flow.md +164 -0
  57. package/vendor/docs/03-architecture/overview.md +541 -0
  58. package/vendor/docs/03-architecture/panel-client.md +416 -0
  59. package/vendor/docs/03-architecture/panel-server.md +695 -0
  60. package/vendor/docs/03-architecture/state-management.md +529 -0
  61. package/vendor/docs/03-architecture/system-overview.md +167 -0
  62. package/vendor/docs/04-api-reference/certificates.md +1141 -0
  63. package/vendor/docs/04-api-reference/gatekeeper.md +592 -0
  64. package/vendor/docs/04-api-reference/onboarding.md +473 -0
  65. package/vendor/docs/04-api-reference/overview.md +404 -0
  66. package/vendor/docs/04-api-reference/services.md +267 -0
  67. package/vendor/docs/04-api-reference/settings.md +343 -0
  68. package/vendor/docs/04-api-reference/sites.md +716 -0
  69. package/vendor/docs/04-api-reference/system.md +268 -0
  70. package/vendor/docs/04-api-reference/tickets.md +618 -0
  71. package/vendor/docs/04-api-reference/tunnels.md +417 -0
  72. package/vendor/docs/04-api-reference/users.md +333 -0
  73. package/vendor/docs/05-operations/backup-and-restore.md +342 -0
  74. package/vendor/docs/05-operations/monitoring.md +285 -0
  75. package/vendor/docs/05-operations/uninstalling.md +344 -0
  76. package/vendor/docs/05-operations/upgrades.md +270 -0
  77. package/vendor/docs/06-reference/config-files.md +1080 -0
  78. package/vendor/docs/06-reference/glossary.md +528 -0
  79. package/vendor/docs/06-reference/installer-flags.md +260 -0
  80. package/vendor/docs/06-reference/ports-and-services.md +244 -0
  81. package/vendor/docs/06-reference/troubleshooting.md +665 -0
  82. package/vendor/docs/_index.json +233 -0
  83. package/vendor/docs/gatekeeper-design.md +953 -0
  84. package/vendor/docs/package.json +15 -0
  85. package/vendor/docs/todo/lib-cli-desktop-refactor.md +641 -0
  86. package/vendor/gatekeeper/dist/boot.d.ts +1 -0
  87. package/vendor/gatekeeper/dist/boot.d.ts.map +1 -0
  88. package/vendor/gatekeeper/dist/boot.js +17 -0
  89. package/vendor/gatekeeper/dist/boot.js.map +1 -0
  90. package/vendor/gatekeeper/dist/cli/commands/access.d.ts +2 -0
  91. package/vendor/gatekeeper/dist/cli/commands/access.d.ts.map +1 -0
  92. package/vendor/gatekeeper/dist/cli/commands/access.js +33 -0
  93. package/vendor/gatekeeper/dist/cli/commands/access.js.map +1 -0
  94. package/vendor/gatekeeper/dist/cli/commands/grants.d.ts +2 -0
  95. package/vendor/gatekeeper/dist/cli/commands/grants.d.ts.map +1 -0
  96. package/vendor/gatekeeper/dist/cli/commands/grants.js +110 -0
  97. package/vendor/gatekeeper/dist/cli/commands/grants.js.map +1 -0
  98. package/vendor/gatekeeper/dist/cli/commands/groups.d.ts +2 -0
  99. package/vendor/gatekeeper/dist/cli/commands/groups.d.ts.map +1 -0
  100. package/vendor/gatekeeper/dist/cli/commands/groups.js +98 -0
  101. package/vendor/gatekeeper/dist/cli/commands/groups.js.map +1 -0
  102. package/vendor/gatekeeper/dist/cli/index.d.ts +3 -0
  103. package/vendor/gatekeeper/dist/cli/index.d.ts.map +1 -0
  104. package/vendor/gatekeeper/dist/cli/index.js +45 -0
  105. package/vendor/gatekeeper/dist/cli/index.js.map +1 -0
  106. package/vendor/gatekeeper/dist/index.d.ts +9 -0
  107. package/vendor/gatekeeper/dist/index.d.ts.map +1 -0
  108. package/vendor/gatekeeper/dist/index.js +13 -0
  109. package/vendor/gatekeeper/dist/index.js.map +1 -0
  110. package/vendor/gatekeeper/dist/lib/authz.d.ts +16 -0
  111. package/vendor/gatekeeper/dist/lib/authz.d.ts.map +1 -0
  112. package/vendor/gatekeeper/dist/lib/authz.js +42 -0
  113. package/vendor/gatekeeper/dist/lib/authz.js.map +1 -0
  114. package/vendor/gatekeeper/dist/lib/cache-bust.d.ts +15 -0
  115. package/vendor/gatekeeper/dist/lib/cache-bust.d.ts.map +1 -0
  116. package/vendor/gatekeeper/dist/lib/cache-bust.js +19 -0
  117. package/vendor/gatekeeper/dist/lib/cache-bust.js.map +1 -0
  118. package/vendor/gatekeeper/dist/lib/constants.d.ts +82 -0
  119. package/vendor/gatekeeper/dist/lib/constants.d.ts.map +1 -0
  120. package/vendor/gatekeeper/dist/lib/constants.js +79 -0
  121. package/vendor/gatekeeper/dist/lib/constants.js.map +1 -0
  122. package/vendor/gatekeeper/dist/lib/grants.d.ts +32 -0
  123. package/vendor/gatekeeper/dist/lib/grants.d.ts.map +1 -0
  124. package/vendor/gatekeeper/dist/lib/grants.js +314 -0
  125. package/vendor/gatekeeper/dist/lib/grants.js.map +1 -0
  126. package/vendor/gatekeeper/dist/lib/groups.d.ts +10 -0
  127. package/vendor/gatekeeper/dist/lib/groups.d.ts.map +1 -0
  128. package/vendor/gatekeeper/dist/lib/groups.js +247 -0
  129. package/vendor/gatekeeper/dist/lib/groups.js.map +1 -0
  130. package/vendor/gatekeeper/dist/lib/migration.d.ts +17 -0
  131. package/vendor/gatekeeper/dist/lib/migration.d.ts.map +1 -0
  132. package/vendor/gatekeeper/dist/lib/migration.js +79 -0
  133. package/vendor/gatekeeper/dist/lib/migration.js.map +1 -0
  134. package/vendor/gatekeeper/dist/lib/migrations/gatekeeper/0001_groups.sql +7 -0
  135. package/vendor/gatekeeper/dist/lib/migrations/gatekeeper/0002_access_grants.sql +14 -0
  136. package/vendor/gatekeeper/dist/lib/migrations/gatekeeper/0003_access_request_log.sql +9 -0
  137. package/vendor/gatekeeper/dist/lib/migrations/migrations/gatekeeper/0001_groups.sql +7 -0
  138. package/vendor/gatekeeper/dist/lib/migrations/migrations/gatekeeper/0002_access_grants.sql +14 -0
  139. package/vendor/gatekeeper/dist/lib/migrations/migrations/gatekeeper/0003_access_request_log.sql +9 -0
  140. package/vendor/gatekeeper/dist/lib/state-db.d.ts +16 -0
  141. package/vendor/gatekeeper/dist/lib/state-db.d.ts.map +1 -0
  142. package/vendor/gatekeeper/dist/lib/state-db.js +154 -0
  143. package/vendor/gatekeeper/dist/lib/state-db.js.map +1 -0
  144. package/vendor/gatekeeper/dist/lib/templates.d.ts +21 -0
  145. package/vendor/gatekeeper/dist/lib/templates.d.ts.map +1 -0
  146. package/vendor/gatekeeper/dist/lib/templates.js +151 -0
  147. package/vendor/gatekeeper/dist/lib/templates.js.map +1 -0
  148. package/vendor/gatekeeper/dist/lib/types.d.ts +178 -0
  149. package/vendor/gatekeeper/dist/lib/types.d.ts.map +1 -0
  150. package/vendor/gatekeeper/dist/lib/types.js +2 -0
  151. package/vendor/gatekeeper/dist/lib/types.js.map +1 -0
  152. package/vendor/gatekeeper/dist/server/index.d.ts +15 -0
  153. package/vendor/gatekeeper/dist/server/index.d.ts.map +1 -0
  154. package/vendor/gatekeeper/dist/server/index.js +251 -0
  155. package/vendor/gatekeeper/dist/server/index.js.map +1 -0
  156. package/vendor/gatekeeper/dist/server/routes/access-request.d.ts +7 -0
  157. package/vendor/gatekeeper/dist/server/routes/access-request.d.ts.map +1 -0
  158. package/vendor/gatekeeper/dist/server/routes/access-request.js +17 -0
  159. package/vendor/gatekeeper/dist/server/routes/access-request.js.map +1 -0
  160. package/vendor/gatekeeper/dist/server/routes/authz.d.ts +3 -0
  161. package/vendor/gatekeeper/dist/server/routes/authz.d.ts.map +1 -0
  162. package/vendor/gatekeeper/dist/server/routes/authz.js +279 -0
  163. package/vendor/gatekeeper/dist/server/routes/authz.js.map +1 -0
  164. package/vendor/gatekeeper/dist/server/routes/diagnostic.d.ts +13 -0
  165. package/vendor/gatekeeper/dist/server/routes/diagnostic.d.ts.map +1 -0
  166. package/vendor/gatekeeper/dist/server/routes/diagnostic.js +249 -0
  167. package/vendor/gatekeeper/dist/server/routes/diagnostic.js.map +1 -0
  168. package/vendor/gatekeeper/dist/server/routes/grants.d.ts +3 -0
  169. package/vendor/gatekeeper/dist/server/routes/grants.d.ts.map +1 -0
  170. package/vendor/gatekeeper/dist/server/routes/grants.js +112 -0
  171. package/vendor/gatekeeper/dist/server/routes/grants.js.map +1 -0
  172. package/vendor/gatekeeper/dist/server/routes/groups.d.ts +3 -0
  173. package/vendor/gatekeeper/dist/server/routes/groups.d.ts.map +1 -0
  174. package/vendor/gatekeeper/dist/server/routes/groups.js +139 -0
  175. package/vendor/gatekeeper/dist/server/routes/groups.js.map +1 -0
  176. package/vendor/gatekeeper/package.json +49 -0
  177. package/vendor/server/bin/lamaste-server.js +204 -0
  178. package/vendor/server/package.json +31 -0
  179. package/vendor/server/src/commands/certs.js +224 -0
  180. package/vendor/server/src/commands/chisel.js +132 -0
  181. package/vendor/server/src/commands/logs.js +49 -0
  182. package/vendor/server/src/commands/plugins.js +321 -0
  183. package/vendor/server/src/commands/reset-admin.js +478 -0
  184. package/vendor/server/src/commands/restart.js +94 -0
  185. package/vendor/server/src/commands/sites.js +257 -0
  186. package/vendor/server/src/commands/status.js +158 -0
  187. package/vendor/server/src/commands/tunnels.js +365 -0
  188. package/vendor/server/src/commands/uninstall.js +326 -0
  189. package/vendor/server/src/config.js +38 -0
  190. package/vendor/server/src/exec.js +26 -0
  191. package/vendor/server/src/logger.js +39 -0
  192. package/vendor/server/src/ndjson.js +56 -0
  193. package/vendor/server/src/panel-api.js +85 -0
  194. package/vendor/server/src/state.js +45 -0
  195. package/vendor/server-ui/dist/assets/index-B0nWuUyL.js +257 -0
  196. package/vendor/server-ui/dist/assets/index-BqWWFlTU.css +1 -0
  197. package/vendor/server-ui/dist/index.html +13 -0
  198. package/vendor/serverd/package.json +44 -0
  199. package/vendor/serverd/src/boot.js +13 -0
  200. package/vendor/serverd/src/index.js +191 -0
  201. package/vendor/serverd/src/lib/app-error.js +14 -0
  202. package/vendor/serverd/src/lib/authelia.js +85 -0
  203. package/vendor/serverd/src/lib/certbot.js +74 -0
  204. package/vendor/serverd/src/lib/chisel-args.js +6 -0
  205. package/vendor/serverd/src/lib/chisel-reconcile.js +232 -0
  206. package/vendor/serverd/src/lib/chisel-runtime.js +46 -0
  207. package/vendor/serverd/src/lib/chisel-users.js +109 -0
  208. package/vendor/serverd/src/lib/chisel.js +81 -0
  209. package/vendor/serverd/src/lib/config.js +190 -0
  210. package/vendor/serverd/src/lib/constants.js +8 -0
  211. package/vendor/serverd/src/lib/csr-signing.js +331 -0
  212. package/vendor/serverd/src/lib/enrollment.js +302 -0
  213. package/vendor/serverd/src/lib/files.js +19 -0
  214. package/vendor/serverd/src/lib/gatekeeper-client.js +135 -0
  215. package/vendor/serverd/src/lib/invite-page.js +281 -0
  216. package/vendor/serverd/src/lib/ip-utils.js +79 -0
  217. package/vendor/serverd/src/lib/migrations/state/0001_enrollment_tokens.sql +17 -0
  218. package/vendor/serverd/src/lib/migrations/state/0002_tickets.sql +70 -0
  219. package/vendor/serverd/src/lib/migrations/state/0003_plugins.sql +15 -0
  220. package/vendor/serverd/src/lib/migrations/state/0004_agents.sql +19 -0
  221. package/vendor/serverd/src/lib/mtls.js +795 -0
  222. package/vendor/serverd/src/lib/nginx.js +1090 -0
  223. package/vendor/serverd/src/lib/pki-paths.js +41 -0
  224. package/vendor/serverd/src/lib/pki-sign.js +103 -0
  225. package/vendor/serverd/src/lib/plugins.js +538 -0
  226. package/vendor/serverd/src/lib/push-install.js +390 -0
  227. package/vendor/serverd/src/lib/revocation.js +112 -0
  228. package/vendor/serverd/src/lib/services.js +131 -0
  229. package/vendor/serverd/src/lib/session.js +151 -0
  230. package/vendor/serverd/src/lib/state-db.js +130 -0
  231. package/vendor/serverd/src/lib/state.js +140 -0
  232. package/vendor/serverd/src/lib/storage.js +63 -0
  233. package/vendor/serverd/src/lib/system-stats.js +58 -0
  234. package/vendor/serverd/src/lib/tickets.js +1556 -0
  235. package/vendor/serverd/src/lib/totp.js +76 -0
  236. package/vendor/serverd/src/lib/tunnel-deps.js +41 -0
  237. package/vendor/serverd/src/lib/user-access-session.js +142 -0
  238. package/vendor/serverd/src/lib/user-access.js +52 -0
  239. package/vendor/serverd/src/middleware/errors.js +63 -0
  240. package/vendor/serverd/src/middleware/mtls.js +120 -0
  241. package/vendor/serverd/src/middleware/onboarding-guard.js +30 -0
  242. package/vendor/serverd/src/middleware/role-guard.js +58 -0
  243. package/vendor/serverd/src/middleware/twofa-session.js +65 -0
  244. package/vendor/serverd/src/middleware/user-access-session.js +52 -0
  245. package/vendor/serverd/src/routes/enrollment.js +120 -0
  246. package/vendor/serverd/src/routes/health.js +22 -0
  247. package/vendor/serverd/src/routes/invite.js +163 -0
  248. package/vendor/serverd/src/routes/management/agents.js +182 -0
  249. package/vendor/serverd/src/routes/management/certs.js +911 -0
  250. package/vendor/serverd/src/routes/management/gatekeeper-proxy.js +160 -0
  251. package/vendor/serverd/src/routes/management/identity.js +107 -0
  252. package/vendor/serverd/src/routes/management/invitations.js +166 -0
  253. package/vendor/serverd/src/routes/management/logs.js +218 -0
  254. package/vendor/serverd/src/routes/management/plugins.js +560 -0
  255. package/vendor/serverd/src/routes/management/services.js +63 -0
  256. package/vendor/serverd/src/routes/management/settings.js +325 -0
  257. package/vendor/serverd/src/routes/management/sites.js +522 -0
  258. package/vendor/serverd/src/routes/management/storage.js +192 -0
  259. package/vendor/serverd/src/routes/management/system.js +201 -0
  260. package/vendor/serverd/src/routes/management/tickets.js +457 -0
  261. package/vendor/serverd/src/routes/management/tunnels.js +709 -0
  262. package/vendor/serverd/src/routes/management/users.js +377 -0
  263. package/vendor/serverd/src/routes/management.js +36 -0
  264. package/vendor/serverd/src/routes/onboarding/dns.js +101 -0
  265. package/vendor/serverd/src/routes/onboarding/domain.js +42 -0
  266. package/vendor/serverd/src/routes/onboarding/index.js +18 -0
  267. package/vendor/serverd/src/routes/onboarding/provision.js +327 -0
  268. package/vendor/serverd/src/routes/onboarding/status.js +12 -0
  269. package/vendor/serverd/src/routes/plugin-router.js +79 -0
  270. package/vendor/serverd/src/routes/user-access.js +389 -0
@@ -0,0 +1,285 @@
1
+ # Monitoring
2
+
3
+ > Monitor your Lamaste server's health through the dashboard, service indicators, and live log streaming.
4
+
5
+ ## In Plain English
6
+
7
+ Your Lamaste server is a small machine doing several jobs at once: routing web traffic, checking passwords, managing encrypted tunnels, and running the admin panel. Monitoring means keeping an eye on how hard the machine is working and whether all those jobs are running smoothly.
8
+
9
+ Think of it like the dashboard in a car. You do not need to understand how the engine works to notice when a warning light comes on or the temperature gauge spikes. Lamaste gives you the same kind of dashboard for your server.
10
+
11
+ ## For Users
12
+
13
+ ### Dashboard Overview
14
+
15
+ The **Dashboard** page is the first thing you see after logging into the management panel. It provides a real-time snapshot of your server's health across four key metrics.
16
+
17
+ #### CPU Usage
18
+
19
+ The CPU percentage tells you how much processing power is being used at this moment.
20
+
21
+ | Range | Meaning | Action |
22
+ | ------- | ------------- | --------------------------- |
23
+ | 0-30% | Normal idle | None needed |
24
+ | 30-60% | Moderate load | Normal under traffic |
25
+ | 60-85% | High load | Investigate if sustained |
26
+ | 85-100% | Critical | Check for runaway processes |
27
+
28
+ On a single-vCPU $4 droplet, expect idle CPU around 2-5%. Brief spikes to 50-60% during certificate issuance or package updates are normal.
29
+
30
+ #### Memory (RAM)
31
+
32
+ Memory usage shows how much of the 512MB (or your droplet's total) is in use.
33
+
34
+ **Expected baseline usage:**
35
+
36
+ | Component | Typical RAM |
37
+ | -------------------- | ----------- |
38
+ | OS (kernel, systemd) | ~120 MB |
39
+ | nginx | ~15 MB |
40
+ | Authelia | ~25 MB |
41
+ | Chisel | ~20 MB |
42
+ | Panel (Node.js) | ~30 MB |
43
+ | Fail2ban | ~35 MB |
44
+ | **Total baseline** | **~245 MB** |
45
+
46
+ This leaves roughly 265 MB of headroom on a 512 MB droplet, plus a 1 GB swap file as a safety net.
47
+
48
+ **Warning thresholds:**
49
+
50
+ | Used % | Status | Notes |
51
+ | ------ | -------- | ----------------------------------- |
52
+ | < 70% | Normal | Healthy headroom |
53
+ | 70-85% | Elevated | Monitor trend |
54
+ | 85-95% | Warning | Check for memory leaks |
55
+ | > 95% | Critical | Risk of OOM kills, check swap usage |
56
+
57
+ If you see memory climbing steadily over days without returning to baseline, one of the services may have a memory leak. Restart the suspect service from the Services page and watch whether usage stabilizes.
58
+
59
+ #### Disk Usage
60
+
61
+ Disk usage reflects the root filesystem. On a fresh 25 GB droplet, Lamaste and its dependencies occupy roughly 2-3 GB.
62
+
63
+ **Things that consume disk over time:**
64
+
65
+ - Log files (journald, nginx access/error logs, Authelia logs)
66
+ - Let's Encrypt certificate archives (small, but accumulate per domain)
67
+ - Static site uploads under `/var/www/lamaste/`
68
+ - Swap file (1 GB, fixed)
69
+
70
+ **Warning thresholds:**
71
+
72
+ | Used % | Status | Action |
73
+ | ------ | -------- | ------------------------------------------------ |
74
+ | < 70% | Normal | None |
75
+ | 70-85% | Watch | Review log rotation |
76
+ | 85-95% | Warning | Clean old logs, remove unused sites |
77
+ | > 95% | Critical | Free space immediately to avoid service failures |
78
+
79
+ To check what is using disk space, SSH in and run:
80
+
81
+ ```bash
82
+ sudo du -sh /var/log/* | sort -rh | head -10
83
+ ```
84
+
85
+ #### Uptime
86
+
87
+ System uptime shows how long the server has been running since its last reboot. Long uptimes (weeks or months) are normal and expected. The only reasons to reboot are kernel updates or hardware-level issues with the hosting provider.
88
+
89
+ ### Service Health Indicators
90
+
91
+ The dashboard shows the status of each managed service:
92
+
93
+ | Service | Systemd Unit | Role |
94
+ | -------- | --------------------------- | ------------------------------------------------ |
95
+ | nginx | `nginx` | Reverse proxy, TLS termination, mTLS enforcement |
96
+ | Chisel | `chisel` | WebSocket tunnel server |
97
+ | Authelia | `authelia` | TOTP two-factor authentication |
98
+ | Panel | `lamalibre-lamaste-serverd` | Management API and UI |
99
+
100
+ Each service displays one of these statuses:
101
+
102
+ | Status | Indicator | Meaning |
103
+ | ---------- | --------- | ------------------------------------------------------- |
104
+ | `active` | Green | Running normally |
105
+ | `inactive` | Gray | Stopped (not started or manually stopped) |
106
+ | `failed` | Red | Crashed or failed to start |
107
+ | `unknown` | Gray | Service not installed or systemd cannot determine state |
108
+
109
+ Along with the status, each active service shows its **uptime** — how long it has been running since it was last started or restarted. If you see a service that recently restarted on its own (uptime much shorter than system uptime), check its logs for crash details.
110
+
111
+ ### Live Log Streaming
112
+
113
+ The **Services** page lets you view live logs for any managed service. This uses a WebSocket connection to stream `journalctl` output directly to your browser.
114
+
115
+ **How to use live logs:**
116
+
117
+ 1. Navigate to the **Services** page
118
+ 2. Click on a service name to expand it
119
+ 3. The log viewer opens and begins streaming the last 100 lines
120
+ 4. New log entries appear at the bottom in real time
121
+ 5. Close the viewer or navigate away to stop the stream
122
+
123
+ **What the log entries look like:**
124
+
125
+ Each log line contains an ISO timestamp and the log message:
126
+
127
+ ```
128
+ 2026-03-13T10:30:45+0000 droplet lamalibre-lamaste-serverd[1234]: Server listening on 127.0.0.1:3100
129
+ 2026-03-13T10:30:45+0000 droplet nginx[5678]: 203.0.113.42 - - [13/Mar/2026:10:30:45 +0000] "GET /api/health" 200
130
+ ```
131
+
132
+ **Tips for reading logs:**
133
+
134
+ - **nginx** logs show every HTTP request — useful for seeing who is connecting and what they are requesting
135
+ - **chisel** logs show tunnel client connections and disconnections
136
+ - **authelia** logs show authentication attempts, including failed TOTP entries
137
+ - **lamalibre-lamaste-serverd** logs show API requests and any server-side errors
138
+
139
+ ### What Metrics to Watch
140
+
141
+ For day-to-day monitoring, these are the most important signals:
142
+
143
+ **Check daily (or set up external monitoring):**
144
+
145
+ 1. **All four services are active** — if any service is `failed`, investigate immediately
146
+ 2. **Memory usage is below 85%** — sustained high memory indicates a problem
147
+ 3. **Disk usage is below 85%** — running out of disk causes cascading failures
148
+
149
+ **Check weekly:**
150
+
151
+ 1. **Certificate expiry dates** — the Certificates page shows days remaining. Let's Encrypt auto-renews at 30 days, but verify renewal is working
152
+ 2. **Disk growth trend** — if disk usage climbs steadily, investigate what is growing
153
+
154
+ **Check after changes:**
155
+
156
+ 1. After adding a tunnel: verify the tunnel client connects (check Chisel logs)
157
+ 2. After adding a user: verify they can authenticate (check Authelia logs)
158
+ 3. After domain/DNS changes: verify certificates issued successfully (check Certificates page)
159
+
160
+ ## For Developers
161
+
162
+ ### System Stats API
163
+
164
+ The dashboard fetches metrics from a single endpoint:
165
+
166
+ ```
167
+ GET /api/system/stats
168
+ ```
169
+
170
+ Response structure:
171
+
172
+ ```json
173
+ {
174
+ "cpu": {
175
+ "usage": 3.2,
176
+ "cores": 1
177
+ },
178
+ "memory": {
179
+ "total": 536870912,
180
+ "used": 262144000,
181
+ "free": 274726912
182
+ },
183
+ "disk": {
184
+ "total": 26843545600,
185
+ "used": 3221225472,
186
+ "free": 23622320128
187
+ },
188
+ "uptime": 1234567
189
+ }
190
+ ```
191
+
192
+ Memory and disk values are in bytes. Uptime is in seconds. CPU usage is a percentage (0-100).
193
+
194
+ The backend uses the `systeminformation` library with a 2-second cache to avoid excessive system calls when multiple clients poll simultaneously. The panel client polls this endpoint every 5 seconds via `react-query` (`refetchInterval: 5000`).
195
+
196
+ ### Service Status API
197
+
198
+ ```
199
+ GET /api/services
200
+ ```
201
+
202
+ Returns an array of service objects:
203
+
204
+ ```json
205
+ {
206
+ "services": [
207
+ { "name": "nginx", "status": "active", "uptime": "5d 12h 30m" },
208
+ { "name": "chisel", "status": "active", "uptime": "5d 12h 28m" },
209
+ { "name": "authelia", "status": "active", "uptime": "5d 12h 28m" },
210
+ { "name": "lamalibre-lamaste-serverd", "status": "active", "uptime": "5d 12h 30m" }
211
+ ]
212
+ }
213
+ ```
214
+
215
+ The allowed service list is defined in `packages/lamaste-serverd/src/lib/services.js`:
216
+
217
+ ```
218
+ nginx, chisel, authelia, lamalibre-lamaste-serverd
219
+ ```
220
+
221
+ Service actions are available via:
222
+
223
+ ```
224
+ POST /api/services/:name/:action
225
+ ```
226
+
227
+ Where `action` is one of: `start`, `stop`, `restart`, `reload`.
228
+
229
+ The panel prevents stopping `lamalibre-lamaste-serverd` from the UI, because that would terminate the session serving the request.
230
+
231
+ ### Live Log WebSocket
232
+
233
+ The live log stream is available at:
234
+
235
+ ```
236
+ WS /api/services/:name/logs
237
+ ```
238
+
239
+ The server spawns `journalctl -u <service> -f -n 100 --output=short-iso` as a child process and pipes parsed lines to the WebSocket as JSON:
240
+
241
+ ```json
242
+ {
243
+ "timestamp": "2026-03-13T10:30:45+0000",
244
+ "message": "droplet lamalibre-lamaste-serverd[1234]: Server listening on 127.0.0.1:3100"
245
+ }
246
+ ```
247
+
248
+ The server tracks all active `journalctl` processes and terminates them on WebSocket close, WebSocket error, or server shutdown to prevent orphaned processes.
249
+
250
+ ### External Monitoring
251
+
252
+ For production use, consider setting up an external uptime monitor that hits your panel's health endpoint:
253
+
254
+ ```
255
+ GET /api/health
256
+ ```
257
+
258
+ This endpoint returns `200 OK` when the panel server is running. Since it is behind mTLS, your monitoring tool needs the client certificate, or you can monitor the IP:9292 HTTPS port for a valid TLS handshake.
259
+
260
+ Alternatively, monitor the public-facing tunneled apps directly — if users can reach `https://myapp.example.com`, the full stack (nginx, Chisel, Authelia) is working.
261
+
262
+ ## Quick Reference
263
+
264
+ | Metric | Normal Range | Warning | Critical |
265
+ | -------------- | ------------- | ---------------- | -------------- |
266
+ | CPU | 0-30% | 60-85% sustained | >85% sustained |
267
+ | Memory | <70% of total | 85-95% | >95% |
268
+ | Disk | <70% of total | 85-95% | >95% |
269
+ | Service status | `active` | `inactive` | `failed` |
270
+
271
+ | API Endpoint | Method | Purpose |
272
+ | ----------------------------- | ------ | ------------------------- |
273
+ | `/api/system/stats` | GET | CPU, RAM, disk, uptime |
274
+ | `/api/services` | GET | All service statuses |
275
+ | `/api/services/:name/:action` | POST | Start/stop/restart/reload |
276
+ | `/api/services/:name/logs` | WS | Live log stream |
277
+ | `/api/health` | GET | Health check |
278
+
279
+ | Log Command (SSH) | Purpose |
280
+ | -------------------------------------------- | ----------------------- |
281
+ | `journalctl -u nginx -f` | Follow nginx logs |
282
+ | `journalctl -u chisel -f` | Follow Chisel logs |
283
+ | `journalctl -u authelia -f` | Follow Authelia logs |
284
+ | `journalctl -u lamalibre-lamaste-serverd -f` | Follow panel logs |
285
+ | `journalctl -u nginx --since "1 hour ago"` | Last hour of nginx logs |
@@ -0,0 +1,344 @@
1
+ # Uninstalling
2
+
3
+ > Completely remove Lamaste from your server, step by step.
4
+
5
+ ## In Plain English
6
+
7
+ Uninstalling Lamaste means undoing everything the installer did: stopping the services, removing the files, deleting the user account, and optionally reverting the security hardening. After following this guide, your server will be as if Lamaste was never installed (except for system packages like nginx and Node.js, which you may want to keep).
8
+
9
+ ## For Users
10
+
11
+ ### Before You Begin
12
+
13
+ 1. **Download your backup** — if you might want to reinstall later, back up first (see [Backup and Restore](backup-and-restore.md))
14
+ 2. **Notify your users** — tunneled apps will become unreachable immediately after removal
15
+ 3. **SSH access** — you will need root SSH access to the server
16
+
17
+ ### Automated Removal
18
+
19
+ `lamaste-server uninstall` performs the required steps below in one go (it asks for confirmation unless `--force` is passed):
20
+
21
+ ```bash
22
+ sudo lamaste-server uninstall
23
+ ```
24
+
25
+ It stops and disables the panel, gatekeeper, Chisel and Authelia; removes their systemd units, the sudoers file and the root-owned programs (`lamaste-priv`, `lamaste-certbot`, `lamaste-cert-info`, and the retired `lamaste-sign-csr` / `lamaste-pki-rename` if an older version left them); removes the Lamaste nginx vhosts and snippets, the Let's Encrypt certificates, `/etc/authelia`, `/var/log/authelia`, `/usr/local/bin/authelia`, `/usr/local/bin/chisel`, `/etc/lamalibre/lamaste`, `/var/www/lamaste`, `/opt/lamalibre/lamaste` and the global `@lamalibre/*` npm packages; and deletes the `lamaste` user, the `lamaste-chisel` group and the `lamaste-authelia` account. The optional steps (fail2ban, SSH, firewall, swap) are left to you.
26
+
27
+ ### Manual Removal
28
+
29
+ The manual guide is also available from the CLI:
30
+
31
+ ```bash
32
+ npx @lamalibre/create-lamaste@4.0.0 --uninstall
33
+ ```
34
+
35
+ This prints the same steps listed below.
36
+
37
+ ### Step 1: Stop and Disable Services
38
+
39
+ Stop all Lamaste-managed services so they do not restart on reboot:
40
+
41
+ ```bash
42
+ sudo systemctl disable --now lamalibre-lamaste-serverd lamalibre-lamaste-gatekeeper chisel authelia
43
+ ```
44
+
45
+ Remove the systemd unit files:
46
+
47
+ ```bash
48
+ sudo rm -f /etc/systemd/system/{lamalibre-lamaste-serverd,lamalibre-lamaste-gatekeeper,chisel,authelia}.service
49
+ sudo systemctl daemon-reload
50
+ ```
51
+
52
+ **Verify:** No Lamaste services should appear as active:
53
+
54
+ ```bash
55
+ systemctl list-units --type=service | grep -E 'lamaste|chisel|authelia'
56
+ ```
57
+
58
+ Expected output: empty (no matching lines).
59
+
60
+ ### Step 2: Remove nginx Configuration
61
+
62
+ Remove all Lamaste-related nginx vhosts and the mTLS snippet:
63
+
64
+ ```bash
65
+ sudo rm -f /etc/nginx/sites-enabled/lamalibre-lamaste-*
66
+ sudo rm -f /etc/nginx/sites-available/lamalibre-lamaste-*
67
+ sudo rm -f /etc/nginx/snippets/lamalibre-lamaste-*
68
+ ```
69
+
70
+ Test the remaining nginx configuration and reload:
71
+
72
+ ```bash
73
+ sudo nginx -t && sudo systemctl reload nginx
74
+ ```
75
+
76
+ If `nginx -t` fails, it means there are no remaining valid sites. You can either add back the default site or stop nginx entirely:
77
+
78
+ ```bash
79
+ # Option A: Restore default site
80
+ sudo ln -sf /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
81
+ sudo nginx -t && sudo systemctl reload nginx
82
+
83
+ # Option B: Stop nginx
84
+ sudo systemctl stop nginx
85
+ sudo systemctl disable nginx
86
+ ```
87
+
88
+ ### Step 3: Remove Lamaste Directories
89
+
90
+ These directories contain all Lamaste configuration, state, and deployed files:
91
+
92
+ ```bash
93
+ sudo rm -rf /etc/lamalibre/lamaste/ # Configuration, PKI certificates, state
94
+ sudo rm -rf /opt/lamalibre/lamaste/ # Panel server and client files
95
+ sudo rm -rf /var/www/lamaste/ # Static site files
96
+ ```
97
+
98
+ **Warning:** This permanently deletes your PKI certificates. If you have not backed up `/etc/lamalibre/lamaste/pki/`, you will not be able to recover the client certificate or CA key.
99
+
100
+ ### Step 4: Remove Authelia Files
101
+
102
+ ```bash
103
+ sudo rm -rf /etc/authelia/ # Authelia configuration, user database, SQLite database
104
+ sudo rm -rf /var/log/authelia/ # Authelia log files
105
+ ```
106
+
107
+ ### Step 5: Remove Binaries
108
+
109
+ Remove the Chisel and Authelia binaries and the root-owned programs the sudoers rules name:
110
+
111
+ ```bash
112
+ sudo rm -f /usr/local/bin/chisel /usr/local/bin/authelia
113
+ sudo rm -f /usr/local/sbin/lamaste-priv /usr/local/sbin/lamaste-certbot /usr/local/sbin/lamaste-cert-info
114
+ ```
115
+
116
+ ### Step 6: Remove the Service Accounts
117
+
118
+ ```bash
119
+ sudo userdel -r lamaste
120
+ sudo userdel lamaste-authelia
121
+ sudo groupdel lamaste-chisel
122
+ ```
123
+
124
+ The `-r` flag removes the home directory (if one exists). `lamaste` and `lamaste-authelia` are system users with no login shell, so there is nothing sensitive in their home directories.
125
+
126
+ ### Step 7: Remove Sudoers Rules
127
+
128
+ ```bash
129
+ sudo rm -f /etc/sudoers.d/lamaste
130
+ ```
131
+
132
+ **Verify:** Confirm the file is gone:
133
+
134
+ ```bash
135
+ ls -la /etc/sudoers.d/lamaste
136
+ ```
137
+
138
+ Expected: `No such file or directory`.
139
+
140
+ ### Step 8: Remove fail2ban Configuration (Optional)
141
+
142
+ If you want to keep fail2ban running (recommended for security), skip this step. Only the Lamaste-specific jail configuration is removed:
143
+
144
+ ```bash
145
+ sudo rm -f /etc/fail2ban/jail.d/lamaste.conf
146
+ sudo systemctl restart fail2ban
147
+ ```
148
+
149
+ ### Step 9: Revert SSH Hardening (Optional)
150
+
151
+ During installation, Lamaste hardens SSH by disabling password authentication. If a backup of the original configuration was created, you can restore it:
152
+
153
+ ```bash
154
+ # Check if the backup exists
155
+ ls -la /etc/ssh/sshd_config.pre-lamaste
156
+
157
+ # Restore if it exists
158
+ sudo cp /etc/ssh/sshd_config.pre-lamaste /etc/ssh/sshd_config
159
+ sudo sshd -t && sudo systemctl restart ssh
160
+ ```
161
+
162
+ **Warning:** Only revert SSH hardening if you understand the security implications. Disabling password authentication is a security best practice regardless of Lamaste.
163
+
164
+ ### Step 10: Revert Firewall Changes (Optional)
165
+
166
+ Remove the Lamaste-specific UFW rule for port 9292:
167
+
168
+ ```bash
169
+ sudo ufw delete allow 9292/tcp
170
+ ```
171
+
172
+ Ports 22 (SSH) and 443 (HTTPS) were also opened during installation. You may want to keep these:
173
+
174
+ ```bash
175
+ # Only remove if you no longer need HTTPS on this server
176
+ sudo ufw delete allow 443/tcp
177
+ ```
178
+
179
+ **Verify:**
180
+
181
+ ```bash
182
+ sudo ufw status
183
+ ```
184
+
185
+ ### Step 11: Remove Swap File (Optional)
186
+
187
+ If Lamaste created the swap file (common on 512 MB droplets):
188
+
189
+ ```bash
190
+ sudo swapoff /swapfile
191
+ sudo rm -f /swapfile
192
+ ```
193
+
194
+ Remove the swap entry from `/etc/fstab`:
195
+
196
+ ```bash
197
+ sudo sed -i '/\/swapfile/d' /etc/fstab
198
+ ```
199
+
200
+ Remove the swappiness setting:
201
+
202
+ ```bash
203
+ sudo rm -f /etc/sysctl.d/99-lamaste.conf
204
+ sudo sysctl vm.swappiness=60 # Restore Ubuntu default
205
+ ```
206
+
207
+ ### Step 12: Remove Let's Encrypt Certificates (Optional)
208
+
209
+ List all certificates managed by certbot:
210
+
211
+ ```bash
212
+ sudo certbot certificates
213
+ ```
214
+
215
+ Delete certificates for Lamaste domains:
216
+
217
+ ```bash
218
+ # Replace with your actual domain
219
+ sudo certbot delete --cert-name panel.example.com
220
+ sudo certbot delete --cert-name auth.example.com
221
+ sudo certbot delete --cert-name tunnel.example.com
222
+ # Delete any app-specific certificates
223
+ sudo certbot delete --cert-name myapp.example.com
224
+ ```
225
+
226
+ ### Step 13: Remove System Packages (Optional)
227
+
228
+ If you installed this server solely for Lamaste and want to remove the system packages:
229
+
230
+ ```bash
231
+ sudo apt-get remove --purge -y nginx certbot python3-certbot-nginx fail2ban
232
+ sudo apt-get autoremove -y
233
+ ```
234
+
235
+ **Warning:** Only do this if no other applications on this server depend on these packages.
236
+
237
+ ### Summary Checklist
238
+
239
+ | Step | Command | Required? |
240
+ | ------------------------- | --------------------------------------------------------------------------- | --------- |
241
+ | 1. Stop services | `systemctl disable --now` + remove unit files | Yes |
242
+ | 2. Remove nginx config | `rm lamalibre-lamaste-*` vhosts and snippets | Yes |
243
+ | 3. Remove Lamaste dirs | `rm -rf /etc/lamalibre/lamaste/ /opt/lamalibre/lamaste/ /var/www/lamaste/` | Yes |
244
+ | 4. Remove Authelia files | `rm -rf /etc/authelia/ /var/log/authelia/` | Yes |
245
+ | 5. Remove binaries | `rm /usr/local/bin/{chisel,authelia}`, `/usr/local/sbin/lamaste-*` | Yes |
246
+ | 6. Remove accounts | `userdel -r lamaste`, `userdel lamaste-authelia`, `groupdel lamaste-chisel` | Yes |
247
+ | 7. Remove sudoers | `rm /etc/sudoers.d/lamaste` | Yes |
248
+ | 8. Remove fail2ban config | `rm /etc/fail2ban/jail.d/lamaste.conf` | Optional |
249
+ | 9. Revert SSH hardening | Restore `sshd_config.pre-lamaste` | Optional |
250
+ | 10. Revert firewall | `ufw delete allow 9292/tcp` | Optional |
251
+ | 11. Remove swap | `swapoff /swapfile && rm /swapfile` | Optional |
252
+ | 12. Remove LE certs | `certbot delete --cert-name <domain>` | Optional |
253
+ | 13. Remove packages | `apt-get remove nginx certbot fail2ban` | Optional |
254
+
255
+ ## For Developers
256
+
257
+ ### What the Installer Creates
258
+
259
+ For reference, here is a complete list of everything the installer and onboarding provisioning create on the system:
260
+
261
+ **Systemd services** (all written by the installer):
262
+
263
+ - `/etc/systemd/system/lamalibre-lamaste-serverd.service`
264
+ - `/etc/systemd/system/lamalibre-lamaste-gatekeeper.service`
265
+ - `/etc/systemd/system/chisel.service`
266
+ - `/etc/systemd/system/authelia.service`
267
+
268
+ **Directories:**
269
+
270
+ - `/etc/lamalibre/lamaste/` (config, state)
271
+ - `/etc/lamalibre/lamaste/pki/` (certificates)
272
+ - `/opt/lamalibre/lamaste/` (panel server, CLI, client, docs, gatekeeper — root-owned)
273
+ - `/opt/lamalibre/lamaste/lamaste-serverd/` (Fastify backend)
274
+ - `/opt/lamalibre/lamaste/lamaste-server-ui/` (React frontend build)
275
+ - `/var/www/lamaste/` (static site uploads)
276
+ - `/etc/authelia/` (auth config and user database)
277
+ - `/var/log/authelia/` (auth logs)
278
+
279
+ **Binaries** (installed by the installer):
280
+
281
+ - `/usr/local/bin/chisel` (pinned release)
282
+ - `/usr/local/bin/authelia` (pinned release)
283
+ - `/usr/local/bin/lamaste-server` (symlink to the CLI)
284
+ - `/usr/local/sbin/lamaste-priv`, `/usr/local/sbin/lamaste-certbot`, `/usr/local/sbin/lamaste-cert-info`
285
+
286
+ **nginx files:**
287
+
288
+ - `/etc/nginx/sites-available/lamalibre-lamaste-panel-ip`
289
+ - `/etc/nginx/sites-available/lamalibre-lamaste-http-redirect`
290
+ - `/etc/nginx/sites-available/lamalibre-lamaste-panel-domain`
291
+ - `/etc/nginx/sites-available/lamalibre-lamaste-auth`
292
+ - `/etc/nginx/sites-available/lamalibre-lamaste-tunnel`
293
+ - `/etc/nginx/sites-available/lamalibre-lamaste-app-*`
294
+ - `/etc/nginx/sites-available/lamalibre-lamaste-site-*`
295
+ - `/etc/nginx/sites-available/lamalibre-lamaste-agent-panel-*`
296
+ - Corresponding symlinks in `/etc/nginx/sites-enabled/`
297
+ - `/etc/nginx/snippets/lamalibre-lamaste-mtls.conf`, `lamalibre-lamaste-authz-cache.conf`
298
+
299
+ **System configuration:**
300
+
301
+ - `/etc/sudoers.d/lamaste`
302
+ - `/etc/fail2ban/jail.d/lamaste.conf`
303
+ - `/etc/ssh/sshd_config.pre-lamaste` (backup only)
304
+ - `/etc/sysctl.d/99-lamaste.conf`
305
+ - `/swapfile` (and entry in `/etc/fstab`)
306
+
307
+ **Service accounts:**
308
+
309
+ - `lamaste` (system user, no login shell — runs the panel and gatekeeper)
310
+ - `lamaste-authelia` (system user, no login shell, no home — runs Authelia)
311
+ - `lamaste-chisel` (group — Chisel runs as `nobody:lamaste-chisel`; `lamaste` is a member)
312
+
313
+ ## Quick Reference
314
+
315
+ **Quick uninstall (required steps only):**
316
+
317
+ ```bash
318
+ sudo lamaste-server uninstall
319
+ ```
320
+
321
+ Or by hand:
322
+
323
+ ```bash
324
+ # Stop and remove services
325
+ sudo systemctl disable --now lamalibre-lamaste-serverd lamalibre-lamaste-gatekeeper chisel authelia
326
+ sudo rm -f /etc/systemd/system/{lamalibre-lamaste-serverd,lamalibre-lamaste-gatekeeper,chisel,authelia}.service
327
+ sudo systemctl daemon-reload
328
+
329
+ # Remove nginx config
330
+ sudo rm -f /etc/nginx/sites-enabled/lamalibre-lamaste-*
331
+ sudo rm -f /etc/nginx/sites-available/lamalibre-lamaste-*
332
+ sudo rm -f /etc/nginx/snippets/lamalibre-lamaste-*
333
+ sudo nginx -t && sudo systemctl reload nginx
334
+
335
+ # Remove files, binaries, accounts, and sudoers
336
+ sudo rm -rf /etc/lamalibre/lamaste/ /opt/lamalibre/lamaste/ /var/www/lamaste/
337
+ sudo rm -rf /etc/authelia/ /var/log/authelia/
338
+ sudo rm -f /usr/local/bin/chisel /usr/local/bin/authelia
339
+ sudo rm -f /usr/local/sbin/lamaste-priv /usr/local/sbin/lamaste-certbot /usr/local/sbin/lamaste-cert-info
340
+ sudo userdel -r lamaste
341
+ sudo userdel lamaste-authelia
342
+ sudo groupdel lamaste-chisel
343
+ sudo rm -f /etc/sudoers.d/lamaste
344
+ ```