Arbeiten unter Windows für Dummies

Die Arbeit mit einem Markdown-Editor im Dateisystem ist auch für Menschen mit durchschnittlichen EDV-Kenntnissen noch gut vermittelbar, insbesondere, wenn man einen komfortablen Editor wie z.B. Typora verwendet.

Was dagegen anspruchsvoller sein kann, ist das Publizieren von Inhalten und eine lokale Preview der Website. Ich stelle hier einen Ansatz vor, der komplett ohne eine manuelle Nutzung des Command Processors (cmd) und eines FTP-Programms auskommt, sondern sowohl einen lokalen Preview-Server und ein Sync mit dem Webserver buchstäblich per Mausklick ermöglicht und keine Installation und Konfiguration von Software benötigt.

Wir gehen von folgender Dateistruktur aus, die dem unter Microsoft Windows arbeitenden Redakteur komplett zur Verfügung gestellt wird:

projekt/                 → Project root directory
├── website/             → Lowmark site (content, templates, assets)
│   └── ...
├── tools/               → Auxiliary Windows tools (self-contained)
│   ├── php/             → Standalone PHP runtime for local preview
│   │   ├── ext/         → PHP extensions
│   │   │    └── ...
│   │   └── ...
│   └── publish/         → WinSCP binaries for deployment
│   │   ├── ftp-account.cfg   → FTP access data
│   │   ├── WinSCP.com
│   │   └── WinSCP.exe
├── fetch.cmd            → Download current state from remote server
├── publish.cmd          → Synchronize local website/ folder to remote server
└── server.cmd           → Start local PHP preview server

Der Kunde kann dann per Doppelklick auf publish.cmd seine Aktualisierungen auf den Webserver übertragen. Dabei werden nur die Änderungen übertragen und nötigenfalls auch Dateien gelöscht. Außerdem wird der Index-Cache gelöscht, so dass Änderungen sofort berücksichtigt werden.

Mit einem Doppelklick auf server.cmd startet ein lokaler Preview-Webserver. Der Browser wird automatisch gestartet und zeigt die Website an. So kann der Kunde lokal seine Arbeit kontrollieren, bevor er sie publiziert.

In beiden Fällen wird automatisch ein Terminal gestartet. Das entsprechende Fenster kann einfach wieder geschlossen werden, wenn es nicht mehr benötigt wird.

Folgende Bestandteile müssen dafür zusammengestellt werden:


Windows tools

PHP

!!! Wenn die Visual C++-Runtime-Bibliotheken noch nicht installiert wurden (ist Bestandteil von vielen Programmen), gibt es beim Start von PHP eine entsprechende Fehlermeldung. Dann muss der Kunde noch die Visual C++ Redistributable auf seinem PC installieren:
https://learn.microsoft.com/de-de/cpp/windows/latest-supported-vc-redist
Und zwar die "neueste unterstützte weiterverteilbare Version" X64. Zur Zeit ist das:
https://aka.ms/vc14/vc_redist.x64.exe


Publish (WinSCP)


Skripte

ftp-account.cfg

!!! Diese Datei enthält die FTP-Zugangsdaten im Klartext und darf nicht an unbefugte Dritte weitergegeben werden!

Je nach Provider ist der REMOTE_ROOT entweder bezogen auf das Server-Root-Verzeichnis oder auf das Kunden-Home-Verzeichnis. Zweiteres ist m. E. wahrscheinlicher.

HOST=**********
USER=**********
PASSWORD=**********
REMOTE_ROOT=/
PROTOCOL=sftp
PORT=22

publish.cmd

Überträgt die lokale Fassung auf den Webserver.

@echo off
setlocal

REM ==========================
REM PATHS
REM ==========================
set "PROJECT_ROOT=%~dp0"
if "%PROJECT_ROOT:~-1%"=="\" set PROJECT_ROOT=%PROJECT_ROOT:~0,-1%
cd /d "%PROJECT_ROOT%"
set "LOCAL_PATH=%PROJECT_ROOT%\website"

REM ==========================
REM LOAD CONFIG
REM ==========================
set "CONFIG_FILE=%PROJECT_ROOT%\tools\publish\ftp-account.cfg"
if not exist "%CONFIG_FILE%" (
  echo Fehler: Konfigurationsdatei nicht gefunden: %CONFIG_FILE%
  pause
  exit /b 1
)
for /f "usebackq tokens=1,* delims==" %%A in ("%CONFIG_FILE%") do (
  set "%%A=%%B"
)

REM ==========================
REM PUBLISHING and CLEAR CACHE
REM ==========================
echo.
echo Publishing lowmark project to %HOST%%REMOTE_ROOT% ...
echo.

"%PROJECT_ROOT%\tools\publish\WinSCP.com" ^
  /command ^
  "option batch abort" ^
  "option confirm off" ^
  "open %PROTOCOL%://%USER%:%PASSWORD%@%HOST%:%PORT%/" ^
  "lcd ""%LOCAL_PATH%""" ^
  "synchronize remote . %REMOTE_ROOT% -criteria=time -delete -filemask=""|cache/;image-cache/""" ^
  "rmdir ""%REMOTE_ROOT%cache/""" ^
  "exit"

echo.
echo Done.
pause

fetch.cmd

Holt die Website vom Webserver.

@echo off
setlocal

REM ==========================
REM PATHS
REM ==========================
set "PROJECT_ROOT=%~dp0"
if "%PROJECT_ROOT:~-1%"=="\" set PROJECT_ROOT=%PROJECT_ROOT:~0,-1%
cd /d "%PROJECT_ROOT%"
set "LOCAL_PATH=%PROJECT_ROOT%\website"

REM ==========================
REM LOAD CONFIG
REM ==========================
set "CONFIG_FILE=%PROJECT_ROOT%\tools\publish\ftp-account.cfg"
if not exist "%CONFIG_FILE%" (
  echo Fehler: Konfigurationsdatei nicht gefunden: %CONFIG_FILE%
  pause
  exit /b 1
)
for /f "usebackq tokens=1,* delims==" %%A in ("%CONFIG_FILE%") do (
  set "%%A=%%B"
)

REM ==========================
REM CONFIRMATION
REM ==========================
echo.
echo  Webserver           : %HOST%%REMOTE_ROOT%
echo  ... kopiert auf ...
echo  lokales Verzeichnis : %LOCAL_PATH%
echo.
choice /c JN /m "Lokale Aenderungen werden ueberschrieben. Fortfahren?"
if errorlevel 2 (
  echo Abgebrochen.
  exit /b 0
)

REM ==========================
REM FETCHING DATA
REM ==========================
echo.
echo Fetching lowmark project from server %HOST%%REMOTE_ROOT% ...
echo.

"%PROJECT_ROOT%\tools\publish\WinSCP.com" ^
  /command ^
  "option batch abort" ^
  "option confirm off" ^
  "open %PROTOCOL%://%USER%@%HOST%:%PORT%/ -password=""%PASSWORD%"""^
  "lcd ""%LOCAL_PATH%""" ^
  "synchronize local . %REMOTE_ROOT% -criteria=time -delete -filemask=""|cache/;image-cache/""" ^
  "exit"

echo.
echo Done.
pause

server.cmd

Startet unter http://localhost:8000 einen Preview-Server.

@echo off

REM Browser öffnen
start http://localhost:8000

REM Projektverzeichnis = Ordner dieser Datei
set "PROJECT_ROOT=%~dp0"
cd /d "%PROJECT_ROOT%"

echo Starte lokalen Preview-Server...
echo Projekt: %PROJECT_ROOT%
echo http://localhost:8000
echo.

tools\php\php.exe ^
  -c "tools\php\php.ini" ^
  -S localhost:8000 ^
  -t "%PROJECT_ROOT%website" ^
  "%PROJECT_ROOT%website\local\router.php"

pause

Tipps

CMD-Skript an Taskleiste anheften

  1. Verknüpfung erstellen: Klicke mit der rechten Maustaste auf deine Desktop-Oberfläche (oder in den Ordner deiner Datei) und wähle Neu > Verknüpfung.
  2. Pfad eingeben: Gib im Feld für den Speicherort Folgendes ein: cmd /c "C:\Pfad\zu\deinem\Skript.cmd"
  3. Benennen: Klicke auf "Weiter" und gib der Verknüpfung den Namen, den du später in der Taskleiste sehen willst.
  4. Symbol ändern (Optional): Da die Verknüpfung jetzt das schwarze CMD-Icon hat, kannst du per Rechtsklick auf die neue Verknüpfung > Eigenschaften > Anderes Symbol... ein schöneres Icon wählen.
  5. Anheften: Klicke die fertige Verknüpfung nun mit der rechten Maustaste an und wähle An Taskleiste anheften.