diff --git a/bundles/gollum/items.py b/bundles/gollum/items.py new file mode 100644 index 0000000..672a708 --- /dev/null +++ b/bundles/gollum/items.py @@ -0,0 +1,61 @@ +from shlex import quote + +users = { + 'gollum': { + 'home': '/var/lib/gollum', + } +} + +directories = { + '/opt/gollum': { + 'owner': 'gollum', + }, + '/opt/gollum/.bundle': { + 'owner': 'gollum', + }, + '/var/lib/gollum': { + 'owner': 'gollum', + }, +} + +files = { + '/opt/gollum/.bundle/config': { + 'content': 'BUNDLE_PATH: ".bundle/gems"', + } +} + +git_deploy = { + '/opt/gollum': { + 'repo': 'https://github.com/gollum/gollum.git', + 'rev': f"v{node.metadata.get('gollum/version')}", + }, + '/var/lib/gollum': { + 'repo': node.metadata.get('gollum/wiki'), + 'rev': 'main', + 'unless': 'test -e /var/lib/gollum/.git', + }, +} + +def run(cmd): + return f"su gollum -c " + quote(f"cd /opt/gollum && {cmd}") + +actions = { + 'gollum_install_bundler': { + 'command': run("gem install bundler --user"), + 'unless': run("gem list -i bundler"), + 'needs': [ + 'file:/opt/gollum/.bundle/config', + ], + }, + 'gollum_bundle_install': { + 'command': run("$(ruby -e 'puts Gem.user_dir')/bin/bundle install"), + 'unless': run("$(ruby -e 'puts Gem.user_dir')/bin/bundle check"), + 'needs': [ + 'git_deploy:/opt/gollum', + 'action:gollum_install_bundler', + ], + }, +} + +# TODO: AUTH +#https://github.com/bjoernalbers/gollum-auth diff --git a/bundles/gollum/metadata.py b/bundles/gollum/metadata.py new file mode 100644 index 0000000..bb38fd4 --- /dev/null +++ b/bundles/gollum/metadata.py @@ -0,0 +1,49 @@ +defaults = { + 'apt': { + 'packages': { + 'libgit2-dev': {}, + 'libssl-dev': {}, + 'cmake': {}, + }, + }, + 'systemd': { + 'units': { + 'gollum.service': { + 'Unit': { + 'Description': 'gollum', + 'After': 'syslog.target', + 'After': 'network.target', + 'Requires': 'postgresql.service', + }, + 'Service': { + 'User': 'gollum', + 'Group': 'gollum', + 'WorkingDirectory': '/opt/gollum', + 'ExecStart': 'true', + 'Restart': 'always', + }, + 'Install': { + 'WantedBy': {'multi-user.target'}, + }, + }, + }, + }, +} + + +@metadata_reactor.provides( + 'nginx/vhosts', +) +def nginx(metadata): + return { + 'nginx': { + 'vhosts': { + metadata.get('gollum/domain'): { + 'content': 'nginx/proxy_pass.conf', + 'context': { + 'target': 'http://127.0.0.1:3600', + } + }, + }, + }, + } diff --git a/nodes/home.server.py b/nodes/home.server.py index a0be46d..d414e0f 100644 --- a/nodes/home.server.py +++ b/nodes/home.server.py @@ -16,6 +16,7 @@ 'redis', 'wireguard', 'zfs', + 'gollum', ], 'metadata': { 'id': 'af96709e-b13f-4965-a588-ef2cd476437a', @@ -27,10 +28,15 @@ }, }, 'gitea': { - 'version': '1.14.2', + 'version': '1.15.5', 'sha256': '0d11d87ce60d5d98e22fc52f2c8c6ba2b54b14f9c26c767a46bf102c381ad128', 'domain': 'git.sublimity.de', }, + 'gollum': { + 'domain': 'wiki.sublimity.de', + 'wiki': 'https://git.sublimity.de/cronekorkn/wiki.git', + 'version': '5.2.3', + }, 'grafana': { 'hostname': 'grafana.sublimity.de', 'influxdb_node': 'home.server',