caddy: add config and scripts
This commit is contained in:
parent
4c5105c73f
commit
6b8701ca14
|
@ -0,0 +1,9 @@
|
||||||
|
This folder contains the configuration file, template, and script to generate a Caddyfile for all the services in main repository.
|
||||||
|
|
||||||
|
# Usage
|
||||||
|
|
||||||
|
1. Run the script:
|
||||||
|
```bash
|
||||||
|
./add --config sites-config.yaml --template template.j2 > sites-enabled/generated.caddy
|
||||||
|
```
|
||||||
|
2. Reload Caddy with `caddy reload -c /etc/caddy/Caddyfile`
|
|
@ -0,0 +1,61 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
import argparse
|
||||||
|
import yaml
|
||||||
|
from jinja2 import Template
|
||||||
|
|
||||||
|
|
||||||
|
def render_template(template_path, **kwargs):
|
||||||
|
with open(template_path, "r") as file:
|
||||||
|
template = Template(file.read())
|
||||||
|
output = template.render(**kwargs)
|
||||||
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
def process_sites_config(config_path, template_path, check_mode):
|
||||||
|
with open(config_path, "r") as file:
|
||||||
|
sites_config = yaml.safe_load(file)
|
||||||
|
|
||||||
|
total_sites = len(sites_config["sites"])
|
||||||
|
enabled_sites = 0
|
||||||
|
disabled_sites = 0
|
||||||
|
|
||||||
|
for site in sites_config["sites"]:
|
||||||
|
# Check if site is enabled
|
||||||
|
if site.get("enabled", True): # Default to True if 'enabled' key is not present
|
||||||
|
enabled_sites += 1
|
||||||
|
if not check_mode:
|
||||||
|
rendered_content = render_template(template_path, **site)
|
||||||
|
print(f"{rendered_content}\n")
|
||||||
|
else:
|
||||||
|
disabled_sites += 1
|
||||||
|
|
||||||
|
if check_mode:
|
||||||
|
print(f"Total sites: {total_sites}")
|
||||||
|
print(f"Enabled sites: {enabled_sites}")
|
||||||
|
print(f"Disabled sites: {disabled_sites}")
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Process a sites configuration file for Caddyfiles"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--config", required=True, help="Path to the YAML configuration file"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--check",
|
||||||
|
action="store_true",
|
||||||
|
help="Only check statistics, do not output templates",
|
||||||
|
)
|
||||||
|
parser.add_argument("--template", help="Path to the Jinja2 template file")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if args.template is None and args.check is False:
|
||||||
|
parser.error("--template argument is required if not using --check")
|
||||||
|
|
||||||
|
template_path = args.template # Replace with the actual path to your template file
|
||||||
|
process_sites_config(args.config, template_path, args.check)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -0,0 +1,114 @@
|
||||||
|
sites:
|
||||||
|
- hostname: gitea
|
||||||
|
subdomain: git
|
||||||
|
port: 3000
|
||||||
|
- hostname: rtorrent
|
||||||
|
subdomain: torrent
|
||||||
|
port: 9080
|
||||||
|
- subdomain: portainer
|
||||||
|
# fixme: move portainer to docker-compose.yml
|
||||||
|
# hostname: portainer
|
||||||
|
hostname: 192.168.0.106
|
||||||
|
port: 9000
|
||||||
|
- subdomain: radarr
|
||||||
|
hostname: radarr
|
||||||
|
port: 7878
|
||||||
|
- subdomain: sonarr-tv
|
||||||
|
hostname: sonarr_tv
|
||||||
|
port: 8989
|
||||||
|
- subdomain: sonarr-anime
|
||||||
|
hostname: sonarr_anime
|
||||||
|
port: 8989
|
||||||
|
- subdomain: notify
|
||||||
|
hostname: ntfy
|
||||||
|
port: 80
|
||||||
|
additional_config: |
|
||||||
|
@httpget {
|
||||||
|
protocol http
|
||||||
|
method GET
|
||||||
|
path_regexp ^/([-_a-z0-9]{0,64}$|docs/|static/)
|
||||||
|
}
|
||||||
|
redir @httpget https://{host}{uri}
|
||||||
|
- subdomain: recipes
|
||||||
|
hostname: mealie
|
||||||
|
port: 80
|
||||||
|
- subdomain: music
|
||||||
|
hostname: navidrome
|
||||||
|
port: 4533
|
||||||
|
- subdomain: paperless
|
||||||
|
hostname: paperless-ngx
|
||||||
|
port: 8000
|
||||||
|
- subdomain: photos
|
||||||
|
hostname: photoprism
|
||||||
|
port: 2342
|
||||||
|
- subdomain: bookmarks
|
||||||
|
hostname: linkace
|
||||||
|
port: 80
|
||||||
|
- subdomain: bw
|
||||||
|
hostname: vaultwarden
|
||||||
|
port: 80
|
||||||
|
- subdomain: drone
|
||||||
|
# fixme: move to docker compose & change hostname AND PORT!! (80)
|
||||||
|
# hostname: drone
|
||||||
|
hostname: 192.168.0.106
|
||||||
|
port: 580
|
||||||
|
- subdomain: jellyfin
|
||||||
|
hostname: jellyfin
|
||||||
|
port: 8096
|
||||||
|
- subdomain: comic
|
||||||
|
hostname: komga
|
||||||
|
port: 25600
|
||||||
|
- subdomain: miniflux
|
||||||
|
hostname: miniflux
|
||||||
|
port: 8080
|
||||||
|
- subdomain: netboot
|
||||||
|
# fixme: move to compose
|
||||||
|
# hostname: netbootxyz
|
||||||
|
hostname: 192.168.0.106
|
||||||
|
port: 3001
|
||||||
|
- subdomain: cloud
|
||||||
|
# fixme: move to compose
|
||||||
|
# hostname: nextcloud
|
||||||
|
hostname: 192.168.0.106
|
||||||
|
port: 8484
|
||||||
|
additional_config: |
|
||||||
|
redir /.well-known/carddav /remote.php/dav 301
|
||||||
|
redir /.well-known/caldav /remote.php/dav 301
|
||||||
|
header Strict-Transport-Security "max-age=15552000; includeSubDomains"
|
||||||
|
- subdomain: registry
|
||||||
|
# fixme: move to compose
|
||||||
|
# hostname: registry
|
||||||
|
hostname: 192.168.0.106
|
||||||
|
port: 5000
|
||||||
|
- subdomain: tracker
|
||||||
|
hostname: timetracker
|
||||||
|
port: 8001
|
||||||
|
additional_config: |
|
||||||
|
handle_path /static/* {
|
||||||
|
root * /srv/timetracker
|
||||||
|
file_server
|
||||||
|
}
|
||||||
|
handle /robots.txt {
|
||||||
|
root * /srv/timetracker
|
||||||
|
file_server
|
||||||
|
}
|
||||||
|
- subdomain: notes-old
|
||||||
|
additional_config: |
|
||||||
|
root * /srv/notes
|
||||||
|
file_server
|
||||||
|
- subdomain: notes
|
||||||
|
additional_config: |
|
||||||
|
reverse_proxy https://publish.obsidian.md {
|
||||||
|
header_up Host {upstream_hostport}
|
||||||
|
}
|
||||||
|
rewrite * /serve?url=notes.kucharczyk.xyz{path}
|
||||||
|
server_config: |
|
||||||
|
encode zstd gzip
|
||||||
|
- subdomain: wiki
|
||||||
|
hostname: mediawiki
|
||||||
|
port: 80
|
||||||
|
- subdomain: baserow
|
||||||
|
hostname: baserow
|
||||||
|
port: 80
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
{{ subdomain }}.kucharczyk.xyz {
|
||||||
|
handle {
|
||||||
|
{% if reverse_proxy_config %}
|
||||||
|
reverse_proxy {{ hostname }}:{{ port }} {
|
||||||
|
{{ reverse_proxy_config }}
|
||||||
|
}
|
||||||
|
{% else %}
|
||||||
|
{% if hostname and port %}
|
||||||
|
reverse_proxy {{ hostname }}:{{ port }}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if additional_config %}
|
||||||
|
{{ additional_config }}
|
||||||
|
{% endif %}
|
||||||
|
}
|
||||||
|
{{ server_config }}
|
||||||
|
}
|
Loading…
Reference in New Issue