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
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ./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
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ./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
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ./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
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ./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
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ./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
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ./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