Última actividad 6 months ago

Revisión ab19035f847d1e6ccb194a88f5eaff69c9c889cb

deploy_traefik.sh Sin formato
1#!/bin/bash
2DOCKER_BASE="${DOCKER_BASE:-/srv/docker}"
3TRAEFIK_DIR="${TRAEFIK_DIR:-traefik}"
4
5mkdir -p ${DOCKER_BASE}/${TRAEFIK_DIR}/container.conf
6
7touch ${DOCKER_BASE}/${TRAEFIK_DIR}/container.conf/.env
8ln -s container.conf/.env ${DOCKER_BASE}/${TRAEFIK_DIR}/
9
10cat > ${DOCKER_BASE}/${TRAEFIK_DIR}/container.conf/docker-compose.yml <<EOF
11# Inspired by https://containo.us/blog/traefik-2-0-docker-101-fc2893944b9d/
12services:
13 traefik:
14 image: traefik:3.0
15 command:
16 - --entrypoints.web.address=:80
17 - --entrypoints.websecure.address=:443
18 - "--log.level=INFO"
19 - --providers.docker=true
20 - --providers.docker.exposedbydefault=false
21 - --api=true
22 - --certificatesresolvers.default.acme.caserver=\${LEAPI:-https://acme-v02.api.letsencrypt.org/directory}
23 - --certificatesresolvers.default.acme.email=\${LEMAIL:-ssladmin@test.org}
24 - --certificatesresolvers.default.acme.storage=/etc/traefik/acme.json
25 - --certificatesresolvers.default.acme.tlschallenge=true
26 - --providers.file.filename=/etc/traefik/traefik_providers.yaml
27 - --providers.file.watch=true
28 logging:
29 options:
30 max-size: "100M"
31 max-file: "10"
32 networks:
33 - system_traefik
34 environment:
35 - LC_ALL=C.UTF-8
36 - TZ=Europe/Berlin
37 labels:
38 # Enable Traefik for it's own backend
39 - traefik.enable=true
40 # Dashboard
41 - traefik.http.routers.traefik.rule=Host(\`traefik.test.org\`)
42 - traefik.http.routers.traefik.entrypoints=websecure
43 - traefik.http.routers.traefik.tls=true
44 - traefik.http.routers.traefik.tls.certresolver=default
45 - traefik.http.routers.traefik.service=api@internal
46 # Basic auth for dashboard
47 - traefik.http.routers.traefik.middlewares=authtraefik@docker,default-security-headers@file
48 # middleware authtraefik
49 - traefik.http.middlewares.authtraefik.basicauth.users=\${DASHBOARD_USERS:-admin:\$\$apr1\$\$AAbCdQpX\$\$ajelS9mMisKRG.lqcY/uXU/} # user/password
50 ports:
51 - "80:80"
52 - "443:443"
53 restart: always
54 volumes:
55 - "./config/:/etc/traefik/"
56 - "/var/run/docker.sock:/var/run/docker.sock:ro"
57
58networks:
59 system_traefik:
60 external: true
61EOF
62ln -s container.conf/docker-compose.yml ${DOCKER_BASE}/${TRAEFIK_DIR}/
63
64cat > ${DOCKER_BASE}/${TRAEFIK_DIR}/container.conf/production.yml <<EOF
65services:
66 traefik:
67 labels:
68 # Allow watchtower to update this image
69 - com.centurylinklabs.watchtower.enable=true
70 # See https://docs.traefik.io/migration/v1-to-v2/#strip-and-rewrite-path-prefixes
71 - traefik.http.routers.traefik.rule=Host(\`$(hostname -f)\`) && (PathPrefix(\`/traefik\`) || PathPrefix(\`/api\`))
72 # Redefine middleware for router 'traefik' as we add more middlewares
73 - traefik.http.routers.traefik.middlewares=authtraefik@docker,traefik-dashboard-stripprefix@file,default-security-headers@file
74EOF
75
76cat > ${DOCKER_BASE}/${TRAEFIK_DIR}/container.conf/traefik.service <<EOF
77[Unit]
78Description=Traefik Proxy Service
79After=network.target docker.service
80Requires=docker.service
81
82[Service]
83Type=oneshot
84RemainAfterExit=yes
85
86Environment="WORK_DIR=/srv/docker/traefik/"
87WorkingDirectory=/srv/docker/traefik/
88ExecStartPre=/bin/bash -c "/usr/bin/docker network inspect system_traefik &>/dev/null || /usr/bin/docker network create --driver bridge system_traefik"
89ExecStartPre=-/usr/local/bin/docker-compose -f "\${WORK_DIR}/docker-compose.yml" -f "\${WORK_DIR}/container.conf/production.yml" down
90ExecStart=/usr/local/bin/docker-compose -f "\${WORK_DIR}/docker-compose.yml" -f "\${WORK_DIR}/container.conf/production.yml" up -d
91ExecStop=/usr/local/bin/docker-compose -f "\${WORK_DIR}/docker-compose.yml" -f "\${WORK_DIR}/container.conf/production.yml" down
92
93[Install]
94WantedBy=docker.service
95EOF
96ln -s ${DOCKER_BASE}/${TRAEFIK_DIR}/container.conf/traefik.service /etc/systemd/system/
97
98mkdir -p ${DOCKER_BASE}/${TRAEFIK_DIR}/config
99
100cat > ${DOCKER_BASE}/${TRAEFIK_DIR}/config/traefik_providers.yaml <<EOF
101---
102tls:
103 options:
104 default:
105 minVersion: VersionTLS12
106 sniStrict: true
107 cipherSuites:
108 # TLS 1.2 cipher suites.
109 - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
110 - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
111 - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
112 # IE 11 and Safari < 9 + iOS <9, OSX < 10.11
113 - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
114 # TLS 1.3 cipher suites.
115 - TLS_AES_128_GCM_SHA256
116 - TLS_AES_256_GCM_SHA384
117 - TLS_CHACHA20_POLY1305_SHA256
118 # TLS_FALLBACK_SCSV isn't a standard cipher suite but an indicator that the client is doing version fallback. See RFC 7507.
119 - TLS_FALLBACK_SCSV
120 curvePreferences:
121 - CurveP521
122 - CurveP384
123
124http:
125 middlewares:
126 redirect-web-to-websecure:
127 redirectScheme:
128 scheme: https
129 permanent: true
130 default-security-headers:
131 headers:
132 accessControlAllowMethods:
133 - GET
134 - POST
135 - DELETE
136 - OPTIONS
137 accessControlAllowOriginList: ["<origin>"]
138 accessControlMaxAge: 100
139 browserXssFilter: true
140 contentTypeNosniff: true
141 forceSTSHeader: true
142# frameDeny: true
143# sslRedirect: true
144 stsIncludeSubdomains: true
145 stsPreload: true
146 stsSeconds: 315360000
147# contentSecurityPolicy: "default-src 'self' 'unsafe-inline';script-src 'self' 'unsafe-inline' 'unsafe-eval';img-src 'self' data:;font-src 'self' data:;connect-src 'self' ws: wss:"
148# customRequestHeaders:
149# X-Frame-Options: "SAMEORIGIN"
150# customFrameOptionsValue: "SAMEORIGIN"
151 referrerPolicy: "same-origin"
152 permissionsPolicy: "vibrate=(self)"
153 traefik-dashboard-stripprefix:
154 stripPrefix:
155 prefixes:
156 - "/traefik"
157 services:
158 redirect-dummy:
159 loadBalancer:
160 servers:
161 - url: ""
162 routers:
163 # global redirect to https
164 # per domain see https://doc.traefik.io/traefik/migration/v1-to-v2/#http-to-https-redirection-is-now-configured-on-routers
165 web-to-websecure:
166 rule: "hostregexp(`.+`)"
167 service: "redirect-dummy@file"
168 entryPoints:
169 - "web"
170 middlewares:
171 - redirect-web-to-websecure@file
172EOF
173
174systemctl daemon-reload && systemctl enable traefik && systemctl start traefik
175
migrate_system_traefik_network.sh Sin formato
1#!/bin/bash
2sed -i '/^WorkingDirectory/a ExecStartPre=/bin/bash -c "/usr/bin/docker network inspect system_traefik &>/dev/null || /usr/bin/docker network create --driver bridge system_traefik"' /srv/docker/traefik/container.conf/traefik.service && systemctl daemon-reload
3sed -i '/image: traefik/a\ networks:\n - system_traefik' /srv/docker/traefik/container.conf/docker-compose.yml
4sed -i s/traefik_default/system_traefik/g /srv/docker/*/container.conf/*.yml
5sed -i s/traefik_default/system_traefik/g /srv/docker/portainer/data/compose/*/docker-compose.yml
6
migrate_to_v2.sh Sin formato
1#!/bin/bash
2BASEPATH="/srv/docker/traefik2/"
3
4export TRAEFIK_DIR="traefik2"
5
6# Download deployment script
7wget -q https://gist.githubusercontent.com/waja/37202007b10837a7fc2e6eacacd9b335/raw/deploy_traefik.sh \
8 -O /tmp/deploy_traefik.sh && \
9 # Remove auto start of the traefik daemon
10 sed '/^systemctl/d' -i /tmp/deploy_traefik.sh && \
11 sed -i '/etc\/systemd\/system\/$/d' /tmp/deploy_traefik.sh && \
12 # Run deployment
13 bash /tmp/deploy_traefik.sh
14
15# Migrate settings from old toml config
16ADMIN_CRED="$(grep users ${BASEPATH}/../traefik/config/traefik.toml | cut -d \" -f2)"
17EMAIL="$(grep email ${BASEPATH}/../traefik/config/traefik.toml | cut -d \" -f2)"
18echo "LEMAIL=${EMAIL}" > ${BASEPATH}/.env
19echo "#LEAPI=https://acme-staging-v02.api.letsencrypt.org/directory" >> ${BASEPATH}/.env
20echo "DASHBOARD_USERS=${ADMIN_CRED}" >> ${BASEPATH}/.env
21
22# Migrate old acme store to the new once
23wget -q https://github.com/traefik/traefik-migration-tool/releases/download/v0.13.1/traefik-migration-tool_v0.13.1_linux_amd64.tar.gz -P /tmp
24tar -xf /tmp/traefik-migration-tool_v0.13.1_linux_amd64.tar.gz -C /tmp
25/tmp/traefik-migration-tool acme -i /srv/docker/traefik/config/acme.json -o /srv/docker/traefik2/config/acme-new.json
26
27echo -e "You might want to the following:\nmv traefik traefik1 && mv traefik2 traefik && systemctl daemon-reload\ncd /srv/docker/traefik\ndocker-compose -f docker-compose.yml -f container.conf/production.yml pull\nsystemctl restart traefik && docker-compose -f docker-compose.yml -f container.conf/production.yml logs -f"
28
migrate_to_v25.sh Sin formato
1#!/bin/bash
2BASEPATH="/srv/docker/traefik/"
3
4sed -i "s/^ sslRedirect: true/# sslRedirect: true/" ${BASEPATH}/config/traefik_providers.yaml && \
5sed -i "s/^ featurePolicy: \"vibrate 'self'\"/ permissionsPolicy: \"vibrate=\(self\)\"/" ${BASEPATH}/config/traefik_providers.yaml && \
6sed -i "s/image: traefik:2.4/image: traefik:2.5/" ${BASEPATH}/container.conf/docker-compose.yml && \
7cd ${BASEPATH} && \
8docker-compose -f docker-compose.yml -f container.conf/production.yml pull && \
9systemctl restart traefik && docker-compose -f docker-compose.yml -f container.conf/production.yml logs -f
10
migrate_to_v30.sh Sin formato
1#!/bin/bash
2BASEPATH="/srv/docker/traefik/"
3
4cp -a ${BASEPATH} /tmp/ && \
5sed -i 's/^ rule:.*/ rule: "hostregexp(`.+`)"/' ${BASEPATH}/config/traefik_providers.yaml && \
6sed -i "s/image: traefik:2.*/image: traefik:3.0/" ${BASEPATH}/container.conf/docker-compose.yml && \
7echo "Changes made:" && \
8( diff -Nuri --no-dereference /tmp/traefik/ ${BASEPATH} || true ) && \
9cd ${BASEPATH} && \
10docker-compose -f docker-compose.yml -f container.conf/production.yml pull && \
11systemctl restart traefik && docker-compose -f docker-compose.yml -f container.conf/production.yml logs -f
12
migrate_traefik_TLS11.sh Sin formato
1#!/bin/bash
2sed -i '/\[entryPoints.https.tls\]/a \ minVersion = "VersionTLS11"' /srv/docker/traefik/config/traefik.toml && systemctl restart traefik
3
migrate_traefik_TLS12.sh Sin formato
1#!/bin/bash
2sed -i s/VersionTLS11/VersionTLS12/ /srv/docker/traefik/config/traefik.toml && systemctl restart traefik
3
socat.sh Sin formato
1#!/bin/bash
2
3if [ $(ip -6 route | grep -c ^default) -eq 0 ]; then exit; fi
4apt install socat || exit
5
6cat > /etc/systemd/system/socat\@.service <<EOF
7[Unit]
8Description=ipv6 to ipv4 port forwarding
9After=network.target
10
11[Service]
12Type=simple
13ExecStart=/usr/bin/socat TCP6-LISTEN:%i,ipv6only=1,reuseaddr,fork TCP4:127.0.0.1:%i
14
15[Install]
16WantedBy=docker.service
17EOF
18systemctl daemon-reload
19for PROTO in http https; do
20 systemctl enable socat@${PROTO}.service
21 systemctl start socat@${PROTO}.service
22done
23