Skip to content

Commit 965159a

Browse files
committed
Add Pi-hole Docker configuration and CNAME records; update Traefik settings for improved routing
1 parent cb88a25 commit 965159a

File tree

8 files changed

+178
-7
lines changed

8 files changed

+178
-7
lines changed

src/docker/containers/bind9/dns.tf

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ resource "dns_a_record_set" "open-webui" {
1515
]
1616
ttl = 30
1717
}
18-
1918
resource "dns_a_record_set" "ollama" {
2019
zone = "home.youngsecurity.net."
2120
name = "ollama"
@@ -43,3 +42,15 @@ resource "dns_cname_record" "llm" {
4342
cname = "tfk-01.home.youngsecurity.net."
4443
ttl = 30
4544
}
45+
resource "dns_cname_record" "pihole" {
46+
zone = "home.youngsecurity.net."
47+
name = "pihole"
48+
cname = "tfk-01.home.youngsecurity.net."
49+
ttl = 30
50+
}
51+
resource "dns_cname_record" "portainer" {
52+
zone = "home.youngsecurity.net."
53+
name = "portainer"
54+
cname = "tfk-01.home.youngsecurity.net."
55+
ttl = 30
56+
}

src/docker/containers/bind9/main.plan

100 Bytes
Binary file not shown.

src/docker/containers/pihole/.terraform.lock.hcl

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/docker/containers/pihole/docker-compose.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
services:
22
pihole:
33
container_name: pihole
4-
image: pihole/pihole:2024.07.0
4+
image: pihole/pihole:2024.07.0
55
environment:
66
#WEBPASSWORD: "set a secure password here or it will be random"
77
- TZ=America/New_York
@@ -14,7 +14,7 @@ services:
1414
# - "81:80/tcp"
1515
networks:
1616
macvlan255:
17-
ipv4_address: 10.0.255.155
17+
ipv4_address: 10.0.255.155
1818
volumes:
1919
- pihole_etc:/etc/pihole
2020
- pihole_etc_dnsmasq.d:/etc/dnsmasq.d
7.89 KB
Binary file not shown.

src/docker/containers/pihole/main.tf

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
terraform {
2+
required_providers {
3+
docker = {
4+
source = "kreuzwerker/docker"
5+
version = "3.0.2"
6+
}
7+
}
8+
}
9+
10+
provider "docker" {
11+
# Configuration options
12+
host = "tcp://ignignokt.home.youngsecurity.net:2376/"
13+
ca_material = file(pathexpand("~/.docker/ca-docker.pem")) # this can be omitted
14+
cert_material = file(pathexpand("~/.docker/client-docker-cert.pem"))
15+
key_material = file(pathexpand("~/.docker/key-docker-client.pem"))
16+
}
17+
18+
# Pull the Docker image
19+
resource "docker_image" "pihole" {
20+
name = "pihole/pihole:2024.07.0"
21+
}
22+
23+
# Reference the existing external volume
24+
resource "docker_volume" "pihole_etc" {
25+
name = "pihole_etc"
26+
27+
lifecycle {
28+
prevent_destroy = true
29+
}
30+
}
31+
resource "docker_volume" "pihole_etc_dnsmasq_d" {
32+
name = "pihole_etc_dnsmasq.d"
33+
34+
lifecycle {
35+
prevent_destroy = true
36+
}
37+
}
38+
39+
data "docker_network" "macvlan255" {
40+
name = "macvlan255"
41+
}
42+
43+
# Create the Docker container
44+
resource "docker_container" "pihole" {
45+
image = docker_image.pihole.image_id
46+
name = "pihole"
47+
hostname = "pihole"
48+
tty = true
49+
labels {
50+
label = "traefik.enable"
51+
value = "true"
52+
}
53+
labels {
54+
label="traefik.http.routers.pihole.rule"
55+
value="Host(`pihole.home.youngsecurity.net`) || Host(`pihole.youngsecurity.net`)"
56+
}
57+
labels {
58+
label="traefik.http.routers.pihole.entrypoints"
59+
value="websecure"
60+
}
61+
labels {
62+
label="traefik.http.routers.pihole.tls"
63+
value="true"
64+
}
65+
labels {
66+
label="traefik.http.routers.pihole.tls.certresolver"
67+
value="cloudflare"
68+
}
69+
labels {
70+
label="traefik.http.services.pihole.loadbalancer.server.port"
71+
value="80"
72+
}
73+
74+
# Set environment variables
75+
env = [
76+
"TZ=America/New_York",
77+
"VIRTUAL_HOST=pihole"
78+
]
79+
80+
# Mount the external volume
81+
mounts {
82+
target = "/etc/pihole"
83+
source = resource.docker_volume.pihole_etc.name
84+
type = "volume"
85+
}
86+
mounts {
87+
target = "/etc/dnsmasq.d"
88+
source = resource.docker_volume.pihole_etc_dnsmasq_d.name
89+
type = "volume"
90+
}
91+
# Connect to the external network with a static IP
92+
networks_advanced {
93+
name = data.docker_network.macvlan255.name
94+
ipv4_address = "10.0.255.155"
95+
}
96+
97+
# Set the restart policy
98+
restart = "unless-stopped"
99+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
http:
2+
#middlewares:
3+
# default-security-headers:
4+
# headers:
5+
# customBrowserXSSValue: 0 # X-XSS-Protection=1; mode=block
6+
# contentTypeNosniff: true # X-Content-Type-Options=nosniff
7+
# forceSTSHeader: true # Add the Strict-Transport-Security header even when the connection is HTTP
8+
# frameDeny: false # X-Frame-Options=deny
9+
# referrerPolicy: "strict-origin-when-cross-origin"
10+
# stsIncludeSubdomains: true # Add includeSubdomains to the Strict-Transport-Security header
11+
# stsPreload: true # Add preload flag appended to the Strict-Transport-Security header
12+
# stsSeconds: 3153600 # Set the max-age of the Strict-Transport-Security header (63072000 = 2 years)
13+
# contentSecurityPolicy: "default-src 'self'"
14+
# customRequestHeaders:
15+
# X-Forwarded-Proto: https
16+
# https-redirectscheme:
17+
# redirectScheme:
18+
# scheme: https
19+
# permanent: true
20+
21+
routers:
22+
portainer:
23+
entryPoints:
24+
- "websecure"
25+
rule: "Host(`portainer.home.youngsecurity.net`)"
26+
#middlewares:
27+
#- default-security-headers
28+
#- https-redirectscheme
29+
tls: {}
30+
service: portainer
31+
32+
services:
33+
portainer:
34+
loadBalancer:
35+
servers:
36+
- url: "https://10.0.255.19:9443"
37+
passHostHeader: true

src/docker/containers/traefik/main.tf

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ terraform {
88
}
99
provider "docker" {
1010
# Configuration options
11-
host = "${DOCKER_HOST}"
12-
ca_material = "${CA_MATERIAL}"
13-
cert_material = "${CERT_MATERIAL}"
14-
key_material = "${KEY_MATERIAL}"
11+
#host = ${DOCKER_HOST}
12+
#ca_material = ${CA_MATERIAL}
13+
#cert_material = ${CERT_MATERIAL}
14+
#key_material = ${KEY_MATERIAL}
1515
}
1616

1717
# Pull the Docker image

0 commit comments

Comments
 (0)