| Tool / Project | Type / Architecture | UI / Dashboard | CLI / API | Multi‑node / Clustering | Auto TLS / SSL / ACME | Zero‑downtime / Rolling Deploy | Preview / PR Environments | Team / Permissions | Volume / Backup Support | Open Source / License | Heroku‑style Compatibility | Pros / Strengths | Cons / Caveats / Weaknesses |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Dokku | Single‑server (extensions for multi) | Minimal (no central UI, though plugins exist) | CLI, plugin APIs | Via community / plugin / custom setups | Yes (Let’s Encrypt plugin) | Via Docker techniques / plugin | Limited, requires extra setup | Basic (single admin; community plugins) | Plugin / manual (e.g. volume backups) | MIT (fully open source) | Good: git push, buildpack style, plugins add DB, etc. | Very stable, mature, lots of community extensions | Scaling / multi‑node is manual; UI is weak; managing many apps / teams is harder |
| Dokploy | Multi‑node / cluster (Docker Swarm) | Yes (built‑in UI) | CLI + AP |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env python3 | |
| # Copyright (c) 2021 Paul Tötterman <[email protected]> | |
| # | |
| # Permission to use, copy, modify, and/or distribute this software for any | |
| # purpose with or without fee is hereby granted, provided that the above | |
| # copyright notice and this permission notice appear in all copies. | |
| # | |
| # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH | |
| # REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import "strings" | |
| func ParseType(s string) Type { | |
| return parseType(0, s) | |
| } | |
| func parseType(i int, s string) Type { | |
| j := strings.Index(_Type_name[i:], s) | |
| if j == -1 { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| abraham | |
| absent | |
| absorb | |
| absurd | |
| academy | |
| accent | |
| acid | |
| acrobat | |
| action | |
| active |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # vim: set si ai et sw=4 sts=4 ts=4 ft=python: | |
| # coding: utf-8 | |
| # Copyright (c) 2013, ZenRobotics Ltd. | |
| # Author: Paul Tötterman <[email protected]> | |
| """Ansible lookup plugin for looking up user data in an LDAP directory.""" | |
| from ansible import utils, errors | |
| import ldap | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # coding: utf-8 | |
| # vim: set ts=4 sw=4 sts=4 si ai et ft=powershell: | |
| # Copyright (c) 2013, ZenRobotics Ltd. | |
| # author: Paul Tötterman <[email protected]> | |
| # | |
| # Permission to use, copy, modify, and/or distribute this software for any | |
| # purpose with or without fee is hereby granted, provided that the above | |
| # copyright notice and this permission notice appear in all copies. | |
| # | |
| # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env python | |
| # coding: utf-8 | |
| # vim: set ts=4 sts=4 sw=4 si ai et ft=python: | |
| # author: Paul Tötterman <[email protected]> | |
| # | |
| # Copyright (c) 2013, ZenRobotics Ltd. | |
| # | |
| # Permission to use, copy, modify, and/or distribute this software for any | |
| # purpose with or without fee is hereby granted, provided that the above | |
| # copyright notice and this permission notice appear in all copies. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env python | |
| # coding: utf-8 | |
| # vim: set ts=4 sts=4 sw=4 si ai et ft=python: | |
| # author: Paul Tötterman <[email protected]> | |
| # | |
| # Copyright (c) 2013, ZenRobotics Ltd. | |
| # | |
| # Permission to use, copy, modify, and/or distribute this software for any | |
| # purpose with or without fee is hereby granted, provided that the above | |
| # copyright notice and this permission notice appear in all copies. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # file managed by puppet | |
| <%# Copyright (c) 2013, ZenRobotics Ltd. All rights reserved. %> | |
| <% | |
| require 'ipaddr' | |
| raise Puppet::Error, 'Could not set up LDAP Connection: Missing ruby/ldap libraries' unless Puppet.features.ldap? | |
| conn = Puppet::Util::Ldap::Connection.instance | |
| conn.start | |
| connection = conn.connection | |
| base = Puppet.settings[:ldapbase] |
Advanced hints for a good FDE setup:
- use a CD-R to boot (even better: a Pocket CD-R as you can carry them around more easily, but they are harder to come by nowadays)
- CD-Rs have digits and characters carved/lasered/whatevered into their inner ring close to the center which are probably unique to every disc: memorize those and always check them in case someone tries to slip you a fake CD-ROM
- under Linux, you have to boot the kernel from the CD, but that means you have to burn a new one after every kernel upgrade. to circumvent that, use the
kexecprogram and work it into the boot scripts so that the boot CD boots the updated kernel from the decrypted harddrive (yes, it means you have to enter your password twice for each bootstrap -- you'll get used to it). - buy a clean, cheap keyboard and glue it shut so that no hardware keylogger or microphone can be implanted into it; switch keyboards if you have a Model M
- use a disk password with maximum entropy, i.e. if you algorithm is 256 bits wide, gen