132 lines
8.2 KiB
JavaScript
132 lines
8.2 KiB
JavaScript
import React from "react";
|
|
|
|
function ServerPage() {
|
|
return (
|
|
<div className="bg-slate-50 min-h-screen py-8 font-sans text-slate-800">
|
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
<header className="text-center border-b border-slate-200 pb-8 mb-12">
|
|
<h1 className="text-3xl md:text-5xl font-extrabold text-slate-900 mb-6 tracking-tight">Home Server & Infrastruktur</h1>
|
|
<div className="mt-6 flex flex-wrap justify-center gap-4">
|
|
<div className="bg-white px-4 py-2 rounded-full border border-slate-200 shadow-sm flex items-center space-x-2">
|
|
<span className="bg-slate-200 text-slate-700 text-xs font-bold px-2 py-0.5 rounded uppercase tracking-wide">Status</span>
|
|
<span className="text-sm font-medium text-slate-600">In Betrieb / Wartung</span>
|
|
</div>
|
|
<div className="bg-white px-4 py-2 rounded-full border border-slate-200 shadow-sm flex items-center space-x-2">
|
|
<span className="bg-slate-200 text-slate-700 text-xs font-bold px-2 py-0.5 rounded uppercase tracking-wide">Typ</span>
|
|
<span className="text-sm font-medium text-slate-600">Homelab / DevOps</span>
|
|
</div>
|
|
<div className="bg-white px-4 py-2 rounded-full border border-slate-200 shadow-sm flex items-center space-x-2">
|
|
<span className="bg-slate-200 text-slate-700 text-xs font-bold px-2 py-0.5 rounded uppercase tracking-wide">Rolle</span>
|
|
<span className="text-sm font-medium text-slate-600">Administrator & Entwickler</span>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<section className="mb-16">
|
|
<h2 className="text-2xl font-bold text-slate-900 mb-6 border-l-4 border-indigo-500 pl-4">1. Projektüberblick & Architektur</h2>
|
|
<div className="bg-white p-6 rounded-xl border border-slate-200 shadow-sm space-y-6">
|
|
<div className="bg-white p-4 rounded-xl border border-slate-100 shadow-sm mb-6">
|
|
<img
|
|
src="/assets/projects/server/images/server.png"
|
|
alt="Server Struktur Diagramm"
|
|
className="w-full h-auto rounded-lg"
|
|
/>
|
|
</div>
|
|
<p className="text-lg leading-relaxed text-slate-700">
|
|
Dieser Server bildet das Herzstück meiner Entwicklungsumgebung. Er hostet nicht nur diese Website,
|
|
sondern dient als vielseitige Plattform für Data Science Experimente, Automatisierung und Lernen.
|
|
Alle Dienste laufen isoliert in <b>Docker-Containern</b>, orchestriert durch <b>Docker Compose</b> und
|
|
verwaltet vom Reverse Proxy <b>Traefik</b>.
|
|
</p>
|
|
</div>
|
|
</section>
|
|
|
|
<section className="mb-16">
|
|
<h2 className="text-2xl font-bold text-slate-900 mb-6 border-l-4 border-indigo-500 pl-4">2. Kernkomponenten & Dienste</h2>
|
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
<div className="bg-white p-6 rounded-xl border border-slate-200 shadow-sm hover:shadow-md transition-shadow">
|
|
<h3 className="text-xl font-bold text-slate-800 mb-3 pb-2 border-b border-slate-100">Traefik (Reverse Proxy)</h3>
|
|
<p className="text-slate-600 text-sm">
|
|
Zentraler Einstiegspunkt. Routet Anfragen basierend auf Subdomains an die richtigen Container
|
|
und verwaltet automatisch <b>SSL-Zertifikate</b> (Let's Encrypt).
|
|
</p>
|
|
</div>
|
|
<div className="bg-white p-6 rounded-xl border border-slate-200 shadow-sm hover:shadow-md transition-shadow">
|
|
<h3 className="text-xl font-bold text-slate-800 mb-3 pb-2 border-b border-slate-100">JupyterHub</h3>
|
|
<p className="text-slate-600 text-sm">
|
|
Multi-User Umgebung für <b>Data Science</b>. Startet für jeden Nutzer isolierte Container
|
|
mit vorinstallierten Libraries wie Pandas, TensorFlow und NumPy.
|
|
</p>
|
|
</div>
|
|
<div className="bg-white p-6 rounded-xl border border-slate-200 shadow-sm hover:shadow-md transition-shadow">
|
|
<h3 className="text-xl font-bold text-slate-800 mb-3 pb-2 border-b border-slate-100">CI/CD Pipeline</h3>
|
|
<p className="text-slate-600 text-sm">
|
|
Eine Flask-Anwendung lauscht auf <b>GitHub Webhooks</b>. Bei neuen Pushes wird die Website
|
|
automatisch neu gebaut und deployed.
|
|
</p>
|
|
</div>
|
|
<div className="bg-white p-6 rounded-xl border border-slate-200 shadow-sm hover:shadow-md transition-shadow">
|
|
<h3 className="text-xl font-bold text-slate-800 mb-3 pb-2 border-b border-slate-100">Sicherheit</h3>
|
|
<p className="text-slate-600 text-sm">
|
|
Zugriffsschutz durch <b>WireGuard VPN</b> und SSH (Key-Auth). Interne Dienste sind
|
|
nicht öffentlich erreichbar.
|
|
</p>
|
|
</div>
|
|
<div className="bg-white p-6 rounded-xl border border-slate-200 shadow-sm hover:shadow-md transition-shadow">
|
|
<h3 className="text-xl font-bold text-slate-800 mb-3 pb-2 border-b border-slate-100">Nginx</h3>
|
|
<p className="text-slate-600 text-sm">
|
|
High-Performance Webserver für die Auslieferung der statischen React-Build-Dateien
|
|
dieser Portfolio-Seite.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section className="mb-16">
|
|
<h2 className="text-2xl font-bold text-slate-900 mb-6 border-l-4 border-indigo-500 pl-4">3. Tech Stack</h2>
|
|
<div className="bg-slate-50 p-6 rounded-xl border border-slate-200">
|
|
<div className="grid grid-cols-2 md:grid-cols-4 gap-4">
|
|
<div className="bg-white p-4 rounded shadow-sm text-center font-semibold text-slate-700">Docker</div>
|
|
<div className="bg-white p-4 rounded shadow-sm text-center font-semibold text-slate-700">Docker Compose</div>
|
|
<div className="bg-white p-4 rounded shadow-sm text-center font-semibold text-slate-700">Traefik</div>
|
|
<div className="bg-white p-4 rounded shadow-sm text-center font-semibold text-slate-700">Nginx</div>
|
|
<div className="bg-white p-4 rounded shadow-sm text-center font-semibold text-slate-700">Linux (Ubuntu)</div>
|
|
<div className="bg-white p-4 rounded shadow-sm text-center font-semibold text-slate-700">Python (Flask)</div>
|
|
<div className="bg-white p-4 rounded shadow-sm text-center font-semibold text-slate-700">Bash Scripting</div>
|
|
<div className="bg-white p-4 rounded shadow-sm text-center font-semibold text-slate-700">WireGuard</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section className="mb-16">
|
|
<h2 className="text-2xl font-bold text-slate-900 mb-6 border-l-4 border-indigo-500 pl-4">4. Learnings & KI-Einsatz</h2>
|
|
<div className="bg-white p-6 rounded-xl border border-slate-200 shadow-sm space-y-4">
|
|
<div className="flex flex-col md:flex-row gap-6">
|
|
<div className="flex-1">
|
|
<h3 className="text-lg font-bold text-slate-800 mb-2">Wichtigste Erkenntnisse</h3>
|
|
<ul className="list-disc pl-5 space-y-2 text-slate-700">
|
|
<li>Verständnis von Container-Orchestrierung in Produktionsumgebungen.</li>
|
|
<li>Wichtigkeit von automatisierten Deployments (CI/CD) für effizientes Arbeiten.</li>
|
|
<li>Netzwerk-Routing und SSL-Management mit Reverse Proxies.</li>
|
|
</ul>
|
|
</div>
|
|
<div className="flex-1">
|
|
<h3 className="text-lg font-bold text-slate-800 mb-2">KI als "Co-Admin"</h3>
|
|
<div className="bg-indigo-50 p-4 rounded-lg border border-indigo-100 text-indigo-900 text-sm">
|
|
<p>
|
|
LLMs waren eine große Hilfe beim Debugging komplexer <b>Docker-Compose</b> Konfigurationen
|
|
und beim Schreiben von robusten Shell-Skripten. Sie dienten als interaktive Dokumentation
|
|
für Linux-Server-Administration.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export default ServerPage; |