Personalisierung: Mischkomposition by Tom Misch + Docker Setup

- Website umbenannt zu "Mischkomposition by Tom Misch"
- Domain: tom.mischlabs.de
- Kontakt: tom@mischlabs.de
- Instagram: @Mischkomposition verlinkt
- Sponsor-Bereich und Originalautor-Verweise entfernt
- Google Analytics deaktiviert
- Kontaktformular auf Deutsch und mit mailto
- Docker Setup: Dockerfile, docker-compose.yml, nginx.conf fuer NAS

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Kroonk
2026-04-12 13:52:19 +02:00
parent 5434298c25
commit c885d22346
11 changed files with 138 additions and 64 deletions

10
.dockerignore Normal file
View File

@@ -0,0 +1,10 @@
_site/
.git/
.claude/
node_modules/
.sass-cache/
.jekyll-metadata
*.md
!Gemfile
docker-compose.yml
.gitignore

View File

@@ -4,9 +4,14 @@
Eine eigene Fotografie-Portfolio-Website basierend auf dem Template von rampatra/photography. Eine eigene Fotografie-Portfolio-Website basierend auf dem Template von rampatra/photography.
Keine 1:1 Kopie, sondern eine individuell angepasste Version mit eigenen Anspruechen. Keine 1:1 Kopie, sondern eine individuell angepasste Version mit eigenen Anspruechen.
## Besitzer ## Besitzer & Kontakt
- GitHub Repo: https://github.com/Kroonk/Photography.git - **Name**: Tom Misch
- Lokaler Pfad: d:\Vibecoding\Website\Photography - **Marke**: Mischkomposition
- **Domain**: tom.mischlabs.de
- **E-Mail**: tom@mischlabs.de
- **Instagram**: @Mischkomposition
- **GitHub Repo**: https://github.com/Kroonk/Photography.git
- **Lokaler Pfad**: d:\Vibecoding\Website\Photography
--- ---
@@ -19,7 +24,8 @@ Keine 1:1 Kopie, sondern eine individuell angepasste Version mit eigenen Ansprue
| Styling | SCSS -> kompiliertes CSS | | Styling | SCSS -> kompiliertes CSS |
| JS Libraries | jQuery, Poptrox (Lightbox), EXIF.js | | JS Libraries | jQuery, Poptrox (Lightbox), EXIF.js |
| Build-Tool | Gulp (SCSS kompilieren, JS minifizieren, Bilder resizen) | | Build-Tool | Gulp (SCSS kompilieren, JS minifizieren, Bilder resizen) |
| Hosting | GitHub Pages (kostenlos) | | Hosting | **UGREEN NAS (Docker)** via nginx |
| Containerisierung | Docker Multi-Stage (Jekyll Build + nginx) |
| Fonts | FontAwesome, Google Fonts (Source Sans Pro) | | Fonts | FontAwesome, Google Fonts (Source Sans Pro) |
| Paketmanager | npm (Node), Bundler (Ruby) | | Paketmanager | npm (Node), Bundler (Ruby) |
@@ -82,17 +88,44 @@ Photography/
| `gulp resize` | Bilder zu fulls (1024px) + thumbs (512px) | | `gulp resize` | Bilder zu fulls (1024px) + thumbs (512px) |
| `gulp` | Alles (build + resize) | | `gulp` | Alles (build + resize) |
## Docker / NAS Hosting
- **NAS**: UGREEN mit UGOS PRO
- **Port**: 8080 (Port 80 ist belegt)
- **Zugriff**: `http://NAS-IP:8080` -> spaeter `https://tom.mischlabs.de`
- **Domain**: tom.mischlabs.de (Reverse Proxy auf NAS einrichten)
### Docker-Dateien
- `Dockerfile` - Multi-Stage: Ruby/Jekyll baut Site -> nginx serviert statische Dateien
- `docker-compose.yml` - Container-Definition, Port 8080:80, auto-restart
- `nginx.conf` - Webserver-Config mit Caching und Sicherheit
- `.dockerignore` - Haelt Build-Context klein (kein .git, node_modules etc.)
### Docker-Befehle
| Befehl | Aktion |
|---|---|
| `docker compose up -d --build` | Container bauen und starten |
| `docker compose down` | Container stoppen |
| `docker compose logs -f` | Logs anzeigen |
| `docker compose up -d --build --force-recreate` | Neu bauen nach Aenderungen |
### Deployment-Workflow
1. Aenderungen lokal machen (Bilder, Config, Design)
2. Git commit & push
3. Auf NAS: `git pull && docker compose up -d --build`
4. Fertig - Website aktualisiert
## Anpassungs-Roadmap (TODO - mit Besitzer besprechen) ## Anpassungs-Roadmap (TODO - mit Besitzer besprechen)
- [x] Titel, Subtitle, Autor anpassen (Mischkomposition / Tom Misch)
- [x] Social Media Links aktualisieren (Instagram: @Mischkomposition)
- [x] Sponsor-Bereich entfernen
- [x] Kontaktformular auf tom@mischlabs.de konfiguriert
- [x] Google Analytics vom Originalautor entfernt
- [x] Custom Domain: tom.mischlabs.de eingetragen
- [ ] Eigene Bilder einpflegen - [ ] Eigene Bilder einpflegen
- [ ] Titel, Subtitle, Autor anpassen - [ ] Footer Bio-Text schreiben (optional)
- [ ] Social Media Links aktualisieren
- [ ] Footer-Text personalisieren
- [ ] Farbschema/Design anpassen - [ ] Farbschema/Design anpassen
- [ ] Sponsor-Bereich entfernen
- [ ] Kontaktformular konfigurieren oder entfernen
- [ ] Custom Domain einrichten (optional)
- [ ] Google Analytics ID aendern oder entfernen
- [ ] Eigene Kategorien/Alben erstellen (Feature-Erweiterung) - [ ] Eigene Kategorien/Alben erstellen (Feature-Erweiterung)
--- ---

2
CNAME
View File

@@ -1 +1 @@
photography.rampatra.com tom.mischlabs.de

21
Dockerfile Normal file
View File

@@ -0,0 +1,21 @@
# === Build-Phase: Jekyll kompiliert die statische Website ===
FROM ruby:3.2-alpine AS builder
RUN apk add --no-cache build-base
WORKDIR /site
COPY Gemfile ./
RUN bundle install
COPY . .
RUN bundle exec jekyll build
# === Serve-Phase: nginx liefert nur die fertigen Dateien aus ===
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /site/_site /usr/share/nginx/html
EXPOSE 80

View File

@@ -44,7 +44,11 @@ Sage mir einen Befehl und ich fuehre den Skill aus.
| `/save` | Aenderungen speichern | Git add + commit mit Nachricht | | `/save` | Aenderungen speichern | Git add + commit mit Nachricht |
| `/push` | Zum Remote pushen | Aenderungen zu GitHub pushen | | `/push` | Zum Remote pushen | Aenderungen zu GitHub pushen |
| `/status` | Git Status | Zeigt aktuellen Git-Status und Aenderungen | | `/status` | Git Status | Zeigt aktuellen Git-Status und Aenderungen |
| `/deploy` | Website deployen | Build + Push fuer GitHub Pages Deployment | | `/deploy` | Website deployen | Build + Push + Docker rebuild auf NAS |
| `/docker-build` | Docker Container bauen | `docker compose up -d --build` ausfuehren |
| `/docker-stop` | Container stoppen | `docker compose down` |
| `/docker-logs` | Container Logs | `docker compose logs -f` anzeigen |
| `/docker-rebuild` | Komplett neu bauen | Container neu bauen und starten nach Aenderungen |
## Analyse & Info ## Analyse & Info

View File

@@ -1,30 +1,25 @@
# Base configs # Base configs
baseurl: "https://photography.rampatra.com" baseurl: "https://tom.mischlabs.de"
# baseurl: "" # Comment the above line and uncomment this to test the website locally
image_fulls_loc: "/images/fulls" image_fulls_loc: "/images/fulls"
image_thumbs_loc: "/images/thumbs" image_thumbs_loc: "/images/thumbs"
google_analytics: "UA-46465113-2" # google_analytics: "" # Eigene ID hier eintragen wenn gewuenscht
# UI configs # UI configs
title: "Photography by Ram Patra" title: "Tom Misch-komposition"
subtitle: "See the world through my eyes!" subtitle: "Mischkomposition"
author: "Ram Patra" author: "Tom Misch"
header: header:
title: "Photography" title: "Mischkomposition"
subtitle: "by Ram Patra" subtitle: "by Tom Misch"
footer: footer:
name: "Hey there, my name is Ram" name: "Tom Misch"
bio: "I am a software developer and a tech aficionado. Love making teeny tiny apps solving tiny problems in life and now learning photography." bio: ""
github: "Want a website like this for yourself for free? Just <a href=\"https://github.com/rampatra/photography\">fork this repo on github</a> ;)" contact: "tom@mischlabs.de"
web_design: "AJ" web_design: "AJ"
social_urls: social_urls:
twitter: "https://www.twitter.com/rampatra_" instagram: "https://www.instagram.com/Mischkomposition"
instagram: "https://www.instagram.com/ram_patra"
dribbble: "https://dribbble.com/rampatra"
linkedin: "https://in.linkedin.com/in/ram-patra"
github: "https://www.github.com/rampatra"
# Configure which exif data to display # Configure which exif data to display
# Tag is the actual exif tag, icon is a fontawesome icon. Use JSON notation without line breaks # Tag is the actual exif tag, icon is a fontawesome icon. Use JSON notation without line breaks
exif: '[{"tag": "Model", "icon": "fa fa-camera-retro"}, {"tag": "FNumber", "icon": "far fa-dot-circle"}, {"tag": "ExposureTime", "icon": "far fa-clock"}, {"tag": "ISOSpeedRatings", "icon": "fa fa-info-circle"}]' exif: '[{"tag": "Model", "icon": "fa fa-camera-retro"}, {"tag": "FNumber", "icon": "far fa-dot-circle"}, {"tag": "ExposureTime", "icon": "far fa-clock"}, {"tag": "ISOSpeedRatings", "icon": "fa fa-info-circle"}]'

7
docker-compose.yml Normal file
View File

@@ -0,0 +1,7 @@
services:
photography:
build: .
container_name: photography-website
ports:
- "8080:80"
restart: unless-stopped

View File

@@ -36,23 +36,9 @@ layout: default
<div> <div>
<section> <section>
<h2>{{ site.footer.name }}</h2> <h2>{{ site.footer.name }}</h2>
{% if site.footer.bio and site.footer.bio != "" %}
<p>{{ site.footer.bio }}</p> <p>{{ site.footer.bio }}</p>
<p>{{ site.footer.github }}</p> {% endif %}
</section>
<section>
<h2>Sponsor</h2>
<div class="presentify">
<div class="presentify-logo">
<a href="https://presentifyapp.com">
<img src="https://raw.githubusercontent.com/rampatra/assets/refs/heads/main/Presentify/Icons/icon_512.png"
alt="presentify-logo" />
</a>
</div>
<div class="presentify-text">
Turn your screen into a canvas when on video calls and articulate your thoughts better than
ever with the <a href="https://presentifyapp.com">Presentify</a> app.
</div>
</div>
</section> </section>
<section> <section>
<h2>Follow me on ...</h2> <h2>Follow me on ...</h2>
@@ -107,8 +93,8 @@ layout: default
</div> </div>
<div> <div>
<section> <section>
<h2>Get in touch</h2> <h2>Kontakt</h2>
<form method="post" action="#"> <form method="post" action="mailto:tom@mischlabs.de" enctype="text/plain">
<div class="fields"> <div class="fields">
<div class="field half"> <div class="field half">
<input type="text" name="name" id="name" placeholder="Name" /> <input type="text" name="name" id="name" placeholder="Name" />
@@ -121,8 +107,8 @@ layout: default
</div> </div>
</div> </div>
<ul class="actions"> <ul class="actions">
<li><input type="submit" value="Send" class="primary" /></li> <li><input type="submit" value="Senden" class="primary" /></li>
<li><input type="reset" value="Reset" /></li> <li><input type="reset" value="Zuruecksetzen" /></li>
</ul> </ul>
</form> </form>
</section> </section>

22
nginx.conf Normal file
View File

@@ -0,0 +1,22 @@
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
# Caching fuer Bilder und Assets
location ~* \.(jpg|jpeg|png|gif|svg|ico|css|js|woff|woff2|ttf|eot|otf)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
# SPA-Fallback
location / {
try_files $uri $uri/ /index.html;
}
# Sicherheit
location ~ /\. {
deny all;
}
}

View File

@@ -1,3 +1,3 @@
exports.printMsg = function() { exports.printMsg = function() {
console.log("Visit http://photography.rampatra.com for a demo!"); console.log("Mischkomposition - Photography by Tom Misch");
}; };

View File

@@ -1,30 +1,26 @@
{ {
"name": "photography", "name": "mischkomposition",
"version": "5.0.0", "version": "1.0.0",
"description": "A jekyll website for photographer cum developer", "description": "Mischkomposition - Photography Portfolio by Tom Misch",
"main": "npmfile.js", "main": "npmfile.js",
"scripts": { "scripts": {
"test": "echo \"Error: no test specified\" && exit 1" "test": "echo \"Error: no test specified\" && exit 1"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/rampatra/photography.git" "url": "git+https://github.com/Kroonk/Photography.git"
}, },
"keywords": [ "keywords": [
"photography", "photography",
"jekyll",
"website",
"template",
"website template",
"portfolio", "portfolio",
"portfolio website" "mischkomposition"
], ],
"author": "Ram Patra", "author": "Tom Misch",
"license": "GPL-3.0", "license": "GPL-3.0",
"bugs": { "bugs": {
"url": "https://github.com/rampatra/photography/issues" "url": "https://github.com/Kroonk/Photography/issues"
}, },
"homepage": "https://github.com/rampatra/photography#readme", "homepage": "https://github.com/Kroonk/Photography#readme",
"devDependencies": { "devDependencies": {
"del": "^4.1.1", "del": "^4.1.1",
"gulp": "^4.0.2", "gulp": "^4.0.2",