diff --git a/errorpages/Dockerfile b/errorpages/Dockerfile new file mode 100644 index 0000000..712656b --- /dev/null +++ b/errorpages/Dockerfile @@ -0,0 +1,5 @@ +FROM nginx:alpine +RUN rm -rf /usr/share/nginx/html/* +COPY html /usr/share/nginx/html +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] diff --git a/errorpages/compose.yaml b/errorpages/compose.yaml new file mode 100644 index 0000000..bac9dc2 --- /dev/null +++ b/errorpages/compose.yaml @@ -0,0 +1,19 @@ +services: + errorpage: + build: . + container_name: error-pages + ports: + - 1234:80 + networks: + - proxy + labels: + - "traefik.enable=true" + - "traefik.docker.network=proxy" + - "traefik.http.services.errorpage.loadbalancer.server.port=80" + # Error handler middleware + - "traefik.http.middlewares.error-pages.errors.status=400-599" + - "traefik.http.middlewares.error-pages.errors.service=errorpage" + - "traefik.http.middlewares.error-pages.errors.query=/{status}.html" +networks: + proxy: + external: true diff --git a/errorpages/html/403.html b/errorpages/html/403.html new file mode 100644 index 0000000..2d730da --- /dev/null +++ b/errorpages/html/403.html @@ -0,0 +1,40 @@ + + + + + + + 403 // Forbidden + + + + + + + +
+
+

403

+

> Forbidden / Access Denied.

+
+ +
+ +
+

./error_message

+

You do not have permission to access this resource.

+
+

Check the System Status if you believe this is an + error.

+
+ + +
+ + + + \ No newline at end of file diff --git a/errorpages/html/404.html b/errorpages/html/404.html new file mode 100644 index 0000000..8681609 --- /dev/null +++ b/errorpages/html/404.html @@ -0,0 +1,39 @@ + + + + + + + 404 // Not Found + + + + + + + +
+
+

404

+

> Page Not Found / Lost in the Void.

+
+ +
+ +
+

./error_message

+

The page you are looking for does not exist or has been moved.

+
+

Check the System Status if you believe this is an error.

+
+ + +
+ + + + diff --git a/errorpages/html/500.html b/errorpages/html/500.html new file mode 100644 index 0000000..c596689 --- /dev/null +++ b/errorpages/html/500.html @@ -0,0 +1,39 @@ + + + + + + + 500 // Server Error + + + + + + + +
+
+

500

+

> Internal Server Error / System Failure.

+
+ +
+ +
+

./error_message

+

Something went wrong on our end. We are working to fix it.

+
+

Check the System Status for more information.

+
+ + +
+ + + + \ No newline at end of file diff --git a/errorpages/html/502.html b/errorpages/html/502.html new file mode 100644 index 0000000..58802cb --- /dev/null +++ b/errorpages/html/502.html @@ -0,0 +1,39 @@ + + + + + + + 502 // Bad Gateway + + + + + + + +
+
+

502

+

> Bad Gateway / System Failure.

+
+ +
+ +
+

./error_message

+

The server received an invalid response from the upstream server.

+
+

Check the System Status for more information.

+
+ + +
+ + + + \ No newline at end of file diff --git a/errorpages/html/503.html b/errorpages/html/503.html new file mode 100644 index 0000000..aa4735a --- /dev/null +++ b/errorpages/html/503.html @@ -0,0 +1,39 @@ + + + + + + + 503 // Service Unavailable + + + + + + + +
+
+

503

+

> Service Unavailable / System Failure.

+
+ +
+ +
+

./error_message

+

The server is currently unable to handle the request due to maintenance or overload.

+
+

Check the System Status for more information.

+
+ + +
+ + + + \ No newline at end of file diff --git a/errorpages/html/504.html b/errorpages/html/504.html new file mode 100644 index 0000000..0916b8e --- /dev/null +++ b/errorpages/html/504.html @@ -0,0 +1,39 @@ + + + + + + + 504 // Gateway Timeout + + + + + + + +
+
+

504

+

> Gateway Timeout / System Failure.

+
+ +
+ +
+

./error_message

+

The server did not receive a timely response from the upstream server.

+
+

Check the System Status for more information.

+
+ + +
+ + + + \ No newline at end of file diff --git a/errorpages/html/style.css b/errorpages/html/style.css new file mode 100644 index 0000000..0aff0d2 --- /dev/null +++ b/errorpages/html/style.css @@ -0,0 +1,167 @@ +/* hidden in a plain sight? */ +:root { + --bg-color: #050505; + --text-color: #e0e0e0; + --accent: #ffffff; + --dim: #666666; + --font-mono: 'Courier New', Courier, monospace; +} + +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + background-color: var(--bg-color); + color: var(--text-color); + font-family: var(--font-mono); + line-height: 1.6; + font-size: 16px; + padding: 2rem; +} + +a { + color: var(--text-color); + text-decoration: none; + border-bottom: 1px solid var(--dim); + transition: all 0.2s; +} + +a:hover { + background-color: var(--text-color); + color: var(--bg-color); + border-color: var(--text-color); +} + +.container { + max-width: 800px; + margin: 0 auto; +} + +/* TEXT */ +h1 { + font-size: 2.5rem; + text-transform: uppercase; + letter-spacing: -2px; + margin-bottom: 0.5rem; +} + +h2 { + font-size: 1.2rem; + margin-bottom: 1.5rem; + border-bottom: 1px solid var(--dim); + display: inline-block; + padding-right: 20px; +} + +.subtitle { + color: var(--dim); + margin-bottom: 2rem; +} + +hr { + border: 0; + border-top: 1px dashed var(--dim); + margin: 2rem 0; +} + +.comment { + color: var(--dim); + font-size: 0.9rem; + margin-left: 10px; +} + +/* SECTIONS */ +section { + margin-bottom: 3rem; +} + +/* LISTS */ +ul { + list-style: none; +} + +.link-list li { + margin-bottom: 0.8rem; + display: flex; + align-items: center; + gap: 15px; +} + +/* STACK GRID */ +.grid-2 { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 2rem; +} + +.skill-item { + display: flex; + justify-content: space-between; + margin-bottom: 0.5rem; +} + +.level { + font-weight: bold; +} + +.special .level { + color: var(--text-color); + text-shadow: 1px 0 0 red, -1px 0 0 blue; +} + +/* my dudes */ +.team-grid { + display: flex; + gap: 2rem; + flex-wrap: wrap; + margin-top: 1rem; +} + +.member { + text-align: center; + width: 100px; +} + +.avatar { + width: 80px; + height: 80px; + background-color: #222; + border: 2px solid var(--text-color); + margin: 0 auto 10px auto; + background-size: cover; +} + +/* if no avatar added: */ +.placeholder::before { + content: "?"; + display: flex; + align-items: center; + justify-content: center; + height: 100%; + font-size: 2rem; + color: var(--dim); +} + +/* REPOS */ +.repo-list li { + margin-bottom: 1rem; +} + +/* FOOTER */ +footer { + text-align: center; + color: var(--dim); + font-size: 0.8rem; +/* flag{why-are-you-here?} */ + margin-top: 4rem; +} +/* SMTH RESPONSIVE */ +@media (max-width: 600px) { + .grid-2 { + grid-template-columns: 1fr; + gap: 0; + } +} diff --git a/traefik/compose.yaml b/traefik/compose.yaml index 5cf8e38..bf740e0 100644 --- a/traefik/compose.yaml +++ b/traefik/compose.yaml @@ -17,10 +17,11 @@ services: # EntryPoints - "--entryPoints.web.address=:80" - - "--entryPoints.websecure.address=:443" - - "--entryPoints.websecure.http.tls=true" - - "--entryPoints.web.http.redirections.entryPoint.to=websecure" + # - "--entryPoints.web.http.middlewares=error-pages@docker" - "--entryPoints.web.http.redirections.entryPoint.scheme=https" + - "--entryPoints.websecure.address=:443" + - "--entryPoints.websecure.http.middlewares=error-pages@docker" + - "--entryPoints.websecure.http.tls=true" - "--entryPoints.ssh.address=:2221" # Let's Encrypt @@ -34,7 +35,6 @@ services: # Cloudflare - "--entryPoints.web.forwardedHeaders.trustedIPs=173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22" - "--entryPoints.websecure.forwardedHeaders.trustedIPs=173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22" - # # Logging # - "--log.level=INFO" # - "--log.filePath=/var/log/traefik/traefik.log" @@ -59,7 +59,7 @@ services: # Dev Router - "traefik.http.routers.traefik-dashboard-dev.rule=Host(`traefik.gigaforust.internal`)" - "traefik.http.routers.traefik-dashboard-dev.entrypoints=websecure" - - "traefik.http.routers.traefik-dashboard-dev.middlewares=security-chain@file" + - "traefik.http.routers.traefik-dashboard-dev.middlewares=security-headers@file" - "traefik.http.routers.traefik-dashboard-dev.service=api@internal" - "traefik.http.routers.traefik-dashboard-dev.tls=true" @@ -80,4 +80,4 @@ services: - proxy networks: proxy: - external: true \ No newline at end of file + external: true