Compare commits

...

44 Commits

Author SHA1 Message Date
c15f789172 feat(opsi): Add opsi 2025-08-27 17:43:11 +02:00
834d858497 feat(haproxy): No need to explain timezone 2025-03-25 23:34:41 +01:00
6c24c439ab feat(haproxy): Always restart 2025-03-25 23:22:06 +01:00
efc114be3d feat(traccar): Always restart 2025-03-05 01:57:44 +01:00
55a08c4b6c feat(rundeck): Add debug log level 2025-02-26 01:31:36 +01:00
2afe9533d0 feat(rundeck): Add debug log level 2025-02-26 01:24:35 +01:00
5673938ec5 feat(rundeck): Add debug log level 2025-02-26 01:11:29 +01:00
e1ae9dbba8 feat(rundeck): Add debug log level 2025-02-26 00:51:27 +01:00
9e59b00f46 feat(rundeck): Add debug log level 2025-02-26 00:50:48 +01:00
c86c3a7c6d feat(rundeck): Don't render unneeded env vars 2025-02-26 00:12:35 +01:00
8709f44ce0 feat(zabbixserver): Line break 2025-02-22 06:56:03 +01:00
b748d6fc9c feat(zabbixserver): Trailing line break 2025-02-22 06:54:46 +01:00
14e356b32d feat(zabbixserver): Remove unneccessary comment 2025-02-22 06:53:47 +01:00
076a6c8ba8 feat(tt-rss): Add template 2025-02-11 22:05:22 +01:00
258bf06211 feat(hashicorpvault): Add template 2025-01-29 01:21:12 +01:00
a9b3d5102b feat(nginx): Add template 2025-01-28 01:45:01 +01:00
4b33db2bd0 fix(openldap): New A_RESTART_POLICY 2024-08-19 04:08:53 +02:00
667ed249a1 fix(openldap): Clarify logging default 2024-08-19 04:01:16 +02:00
b25275537a feat(openldap): Add OpenLDAP 2024-08-19 03:52:30 +02:00
95c2c132bf fix(zabbixserver): Fix env vars
If we want to override RESTART_POLICY we have to
spell it with an underscore and not as
RESTARTPOLICY.

Also TIMEZONE doesn't really exist anymore, it's
PHP_TZ and that is already covered by vars from
Vault so no need to list it separately.
2024-06-04 01:26:08 +02:00
42ba4aeebd refactor(nginx_rtmp): Add default ports 2023-12-24 02:33:39 +01:00
ff09ca48e3 feat(nginx_rtmp): Add nginx_rtmp 2023-12-24 01:17:54 +01:00
8ef411087a refactor(nginx_hls_proxy): Remove nginx_hls_proxy 2023-12-24 01:16:14 +01:00
b1c859e096 refactor(nginx): Now named nginx_hls_proxy 2023-10-18 01:40:19 +02:00
f4af4822b2 refactor(nginx): Now named nginx_rtmp 2023-10-12 23:13:07 +02:00
972f800dfc feat(nginx): Add template 2023-10-09 02:47:50 +02:00
6fbdcabece feat(all): Add common-settings.yml defaults to env files 2023-06-22 23:00:08 +02:00
bdb581147f feat(traccar): Add config 2023-06-22 00:56:55 +02:00
8e8250e4ab feat(rundeck): Add Rundeck env file template 2023-06-06 22:49:37 +02:00
11686e04f7 refactor(paperless_ngx): Add defaults that remain unset 2023-05-16 22:49:07 +02:00
1b12c68f0a fix(paperless_ngx): Add config 2023-05-16 22:26:03 +02:00
6959dab910 fix(remco): Unify example file name 2023-05-16 22:25:43 +02:00
b2a1cdbeb7 fix(signal_cli_rest_api): AUTO_RECEIVE_SCHEDULE only works when not in json-rpc mode 2023-05-14 23:15:00 +02:00
2b921ad873 feat(snipeit): Add snipeit render template 2023-05-14 23:14:22 +02:00
150a7365b1 feat(signal_cli_rest_api): Add signal_cli_rest_api render template 2023-05-07 01:09:14 +02:00
0da290ff3c feat(haproxy): Add HAProxy render template 2023-05-02 01:43:06 +02:00
80024c70a7 fix(remco): Create render dir if needed 2023-05-02 01:42:34 +02:00
609d0157c3 refactor(remco): Ignore all rendered files 2023-04-26 03:41:52 +02:00
e58b8094ea fix(docs): Explain what CTX means 2023-04-26 03:34:06 +02:00
5e772a9eca refactor(remco): Update Vault key example, proper quoting 2023-04-26 02:20:23 +02:00
91d7e727c0 refactor(zabbix-server): Add zabbix-server example 2023-04-26 02:13:42 +02:00
b92ae07769 refactor(remco): Add .gitignore to never commit .env files 2023-04-26 02:13:20 +02:00
797a010dd0 feat(remco): Add remco config file 2023-04-26 02:12:41 +02:00
5d11328a5b feat(docs): Add docs 2023-04-26 02:12:02 +02:00
17 changed files with 265 additions and 1 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.idea

View File

@@ -1,3 +1,52 @@
# remco-docker-config
Provides remco configs and resources to easily set up Docker and Docker Compose environment files
Provides [remco](https://github.com/HeavyHorst/remco) configs and resources to easily set up Docker and Docker Compose environment files with HashiCorp Vault secrets
# How to run
## Set environment variables
Set these mandatory variables, fill in real values
```
# Largely static
export REMCO_DOCKER_CONFIG='/path/to/this/dir'
export VAULT_ADDR='https://127.0.0.1:8200/'
export VAULT_TOKEN='hvs.BerthaIsDeNigrAtinGtHEiMP'
# Changes per container and context
export DOCKER_FQDN='containers-3.example.net'
export DOCKER_GROUP_NAME='grafana'
export DOCKER_CTX='bi_shenyang'
export VAULT_KEY='/kv/data/for_rbacgroup_remco/docker/'"${DOCKER_GROUP_NAME}"'/'"${DOCKER_CTX}"
```
Treat `DOCKER_CTX` ("CTX" as in context) as a team name, purpose or scope. If the same Docker application can run multiple times and serve different tenants then `DOCKER_CTX` is what distinguishes one instance from the other. Here `bi_shenyang` indicates for example a Shenyang-based Business Intelligence team.
## Render config files
Let `remco` generate an environment file
```
remco -config config.toml
```
Output will look somewhat like this (no change needed):
```
[INFO] set backend nodes: backend=vault nodes=["https://127.0.0.1:8200/"] prefix=remco[671145]
[DEBUG] retrieving keys: backend=vault key_prefix="\"\"" prefix=remco[671145] resource=grafana
[DEBUG] compiling source template: prefix=remco[671145] resource=grafana template=/tmp/remco-docker-config/templates.d/grafana/fqdn-context.env
[DEBUG] comparing staged and dest config files: dest=/tmp/remco-docker-config/rendered.d/grafana/containers-3.example.net-bi_shenyang.env prefix=remco[671145] resource=grafana staged=.containers-3.example.net-bi_shenyang.env2016234729
[DEBUG] target config in sync: config=/tmp/remco-docker-config/rendered.d/grafana/containers-3.example.net-bi_shenyang.env prefix=remco[671145] resource=grafana
[DEBUG] closing client connection: backend=vault prefix=remco[671145] resource=grafana
```
Or like this (target file does not have correct content):
```
[INFO] set backend nodes: backend=vault nodes=["https://127.0.0.1:8200/"] prefix=remco[675012]
[DEBUG] retrieving keys: backend=vault key_prefix="\"\"" prefix=remco[675012] resource=grafana
[DEBUG] compiling source template: prefix=remco[675012] resource=grafana template=/tmp/remco-docker-config/templates.d/grafana/fqdn-context.env
[DEBUG] comparing staged and dest config files: dest=/tmp/remco-docker-config/rendered.d/grafana/containers-3.example.net-bi_shenyang.env prefix=remco[675012] resource=grafana staged=.containers-3.example.net-bi_shenyang.env3921647901
[INFO] wrong hashsum: config=/tmp/remco-docker-config/rendered.d/grafana/containers-3.example.net-bi_shenyang.env current=da39a3ee5e6b4b0d3255bfef95601890afd80709 new=97aacc05e6ccad77fec95cc5daa4b3cb7ccd03eb prefix=remco[675012] resource=grafana
[INFO] target config out of sync: config=/tmp/remco-docker-config/rendered.d/grafana/containers-3.example.net-bi_shenyang.env prefix=remco[675012] resource=grafana
[DEBUG] overwriting target config: config=/tmp/remco-docker-config/rendered.d/grafana/containers-3.example.net-bi_shenyang.env prefix=remco[675012] resource=grafana
[INFO] target config has been updated: config=/tmp/remco-docker-config/rendered.d/grafana/containers-3.example.net-bi_shenyang.env prefix=remco[675012] resource=grafana
[DEBUG] closing client connection: backend=vault prefix=remco[675012] resource=grafana
```

19
config.toml Normal file
View File

@@ -0,0 +1,19 @@
log_level = "debug"
log_format = "text"
retries = 0
[[resource]]
name = "${DOCKER_GROUP_NAME}"
[[resource.template]]
src = "${REMCO_DOCKER_CONFIG}/templates.d/${DOCKER_GROUP_NAME}/fqdn_context.env"
dst = "${REMCO_DOCKER_CONFIG}/rendered.d/${DOCKER_GROUP_NAME}/${DOCKER_FQDN}_${DOCKER_CTX}.env"
make_directories = true
[resource.backend]
[resource.backend.vault]
node = "${VAULT_ADDR}"
auth_type = "token"
auth_token = "${VAULT_TOKEN}"
onetime = true
keys = ["${VAULT_KEY}"]

2
rendered.d/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/*
!.gitignore

View File

@@ -0,0 +1,10 @@
{% set VAULT_KEY = getenv("VAULT_KEY") %}
# This file is maintained by remco and populated with data from HashiCorp
# Vault. Changes not done in Vault will be reverted when file gets rendered.
{% for key in ls(VAULT_KEY|add:"/data") %}
{{key}}={{ getv(VAULT_KEY|add:"/data/"|add:key) }}
{% endfor %}
# Other available defaults
# RESTARTPOLICY=always

View File

@@ -0,0 +1,11 @@
{% set VAULT_KEY = getenv("VAULT_KEY") %}
# This file is maintained by remco and populated with data from HashiCorp
# Vault. Changes not done in Vault will be reverted when file gets rendered.
{% for key in ls(VAULT_KEY|add:"/data") %}
{{key}}={{ getv(VAULT_KEY|add:"/data/"|add:key) }}
{% endfor %}
# Other available defaults
# RESTARTPOLICY=always
# TIMEZONE=Etc/UTC

View File

@@ -0,0 +1,11 @@
{% set VAULT_KEY = getenv("VAULT_KEY") %}
# This file is maintained by remco and populated with data from HashiCorp
# Vault. Changes not done in Vault will be reverted when file gets rendered.
{% for key in ls(VAULT_KEY|add:"/data") %}
{{key}}={{ getv(VAULT_KEY|add:"/data/"|add:key) }}
{% endfor %}
# Other available defaults
# RESTARTPOLICY=always
# TIMEZONE=Etc/UTC

View File

@@ -0,0 +1,16 @@
{% set VAULT_KEY = getenv("VAULT_KEY") %}
# This file is maintained by remco and populated with data from HashiCorp
# Vault. Changes not done in Vault will be reverted when file gets rendered.
{% for key in ls(VAULT_KEY|add:"/data") %}
{{key}}={{ getv(VAULT_KEY|add:"/data/"|add:key) }}
{% endfor %}
# Other available defaults
# ALPINE_VERSION=latest
# EXTERNAL_CONTAINER_PORT=1935
# INTERNAL_CONTAINER_PORT=1935
# NGINX_RTMP_GIT_URL=https://github.com/arut/nginx-rtmp-module
# NGINX_RTMP_GIT_NAME=nginx-rtmp-module
# RESTARTPOLICY=unless-stopped
# TIMEZONE=Etc/UTC

View File

@@ -0,0 +1,18 @@
{% set VAULT_KEY = getenv("VAULT_KEY") %}
# This file is maintained by remco and populated with data from HashiCorp
# Vault. Changes not done in Vault will be reverted when file gets rendered.
{% for key in ls(VAULT_KEY|add:"/data") %}
{{key}}={{ getv(VAULT_KEY|add:"/data/"|add:key) }}
{% endfor %}
# For logging details and setup instructions you may want to
# check https://www.openldap.org/doc/admin26/slapdconfig.html
#
# Stats log connections/operations/results (this is the default):
# LDAP_LOGLEVEL=256
# Or enable all log levels:
# LDAP_LOGLEVEL=-1
# Other available defaults
# A_RESTART_POLICY=unless-stopped

View File

@@ -0,0 +1,10 @@
{% set VAULT_KEY = getenv("VAULT_KEY") %}
# This file is maintained by remco and populated with data from HashiCorp
# Vault. Changes not done in Vault will be reverted when file gets rendered.
{% for key in ls(VAULT_KEY|add:"/data") %}
{{key}}={{ getv(VAULT_KEY|add:"/data/"|add:key) }}
{% endfor %}
# Other available defaults
# RESTARTPOLICY=always

View File

@@ -0,0 +1,15 @@
{% set VAULT_KEY = getenv("VAULT_KEY") %}
# This file is maintained by remco and populated with data from HashiCorp
# Vault. Changes not done in Vault will be reverted when file gets rendered.
{% for key in ls(VAULT_KEY|add:"/data") %}
{{key}}={{ getv(VAULT_KEY|add:"/data/"|add:key) }}
{% endfor %}
# Other available defaults
# USERMAP_UID=1000
# USERMAP_GID=1000
# PAPERLESS_FORCE_SCRIPT_NAME=/PATHPREFIX
# PAPERLESS_STATIC_URL=/PATHPREFIX/static/ # trailing slash required
# RESTARTPOLICY=unless-stopped
# TIMEZONE=Etc/UTC

View File

@@ -0,0 +1,21 @@
{% set VAULT_KEY = getenv("VAULT_KEY") %}
# This file is maintained by remco and populated with data from HashiCorp
# Vault. Changes not done in Vault will be reverted when file gets rendered.
{% for key in ls(VAULT_KEY|add:"/data") %}
{{key}}={{ getv(VAULT_KEY|add:"/data/"|add:key) }}
{% endfor %}
# Other available defaults
# RESTARTPOLICY=always
#
# Defaults to "warn"
# Can be for example debug, info, warn, error
# RUNDECK_LOGGING_LOGLEVEL_DEFAULT=debug
# RUNDECK_LOGGING_LOGLEVEL_ROOT=debug
# RUNDECK_LOGGING_LOGLEVEL_HIBERNATE=debug
# RUNDECK_LOGGING_LOGLEVEL_SPRING=debug
# RUNDECK_LOGGING_LOGLEVEL_SPRINGBEAN=debug
# RUNDECK_LOGGING_LOGLEVEL_INTERNALS=debug
# RUNDECK_LOGGING_LOGLEVEL_GRAILS=debug
# RUNDECK_LOGGING_LOGLEVEL_JETTY=debug

View File

@@ -0,0 +1,13 @@
{% set VAULT_KEY = getenv("VAULT_KEY") %}
# This file is maintained by remco and populated with data from HashiCorp
# Vault. Changes not done in Vault will be reverted when file gets rendered.
{% for key in ls(VAULT_KEY|add:"/data") %}
{{key}}={{ getv(VAULT_KEY|add:"/data/"|add:key) }}
{% endfor %}
# Only when MODE is not "json-rpc":
# AUTO_RECEIVE_SCHEDULE=0 22 * * *
# Other available defaults
# RESTARTPOLICY=unless-stopped
# TIMEZONE=Etc/UTC

View File

@@ -0,0 +1,13 @@
{% set VAULT_KEY = getenv("VAULT_KEY") %}
# This file is maintained by remco and populated with data from HashiCorp
# Vault. Changes not done in Vault will be reverted when file gets rendered.
{% for key in ls(VAULT_KEY|add:"/data") %}
{{key}}={{ getv(VAULT_KEY|add:"/data/"|add:key) }}
{% endfor %}
# Set to true when needed for temporary debugging
APP_DEBUG=false
# Other available defaults
# RESTARTPOLICY=unless-stopped
# TIMEZONE=Etc/UTC

View File

@@ -0,0 +1,11 @@
{% set VAULT_KEY = getenv("VAULT_KEY") %}
# This file is maintained by remco and populated with data from HashiCorp
# Vault. Changes not done in Vault will be reverted when file gets rendered.
{% for key in ls(VAULT_KEY|add:"/data") %}
{{key}}={{ getv(VAULT_KEY|add:"/data/"|add:key) }}
{% endfor %}
# Other available defaults
# RESTARTPOLICY=always
# TIMEZONE=Etc/UTC

View File

@@ -0,0 +1,34 @@
{% set VAULT_KEY = getenv("VAULT_KEY") %}
# This file is maintained by remco and populated with data from HashiCorp
# Vault. Changes not done in Vault will be reverted when file gets rendered.
{% for key in ls(VAULT_KEY|add:"/data") %}
{{key}}={{ getv(VAULT_KEY|add:"/data/"|add:key) }}
{% endfor %}
# RESTARTPOLICY=always
# Other available defaults from https://tt-rss.org/wiki/InstallationNotes/:
# Run FPM under this UID/GID.
# OWNER_UID=1000
# OWNER_GID=1000
# FPM settings.
# PHP_WORKER_MAX_CHILDREN=5
# PHP_WORKER_MEMORY_LIMIT=256M
# Auto create another user (in addition to built-in admin) unless it already exists.
# *_USER_ACCESS_LEVEL:
# -2 - forbidden to login
# -1 - readonly
# 0 - default user
# 10 - admin
# AUTO_CREATE_USER=
# AUTO_CREATE_USER_PASS=
# AUTO_CREATE_USER_ACCESS_LEVEL=0
# Other config.php defines
# TTRSS_PLUGINS=auth_internal,auth_remote
# TTRSS_SESSION_COOKIE_LIFETIME=2592000
# TTRSS_FORCE_ARTICLE_PURGE=30

View File

@@ -0,0 +1,10 @@
{% set VAULT_KEY = getenv("VAULT_KEY") %}
# This file is maintained by remco and populated with data from HashiCorp
# Vault. Changes not done in Vault will be reverted when file gets rendered.
{% for key in ls(VAULT_KEY|add:"/data") %}
{{key}}={{ getv(VAULT_KEY|add:"/data/"|add:key) }}
{% endfor %}
# When needed for temporary debugging
# ZBX_DEBUGLEVEL=4