October CMS

Get back to basics

Category: DevOps

Bash Environment + Rsync Backup

Here’s a clean, concise note draft for “Bash Environment & Rsync Backup” that captures everything you’ve been setting up:


Bash Environment & Rsync Backup

Overview

This note documents my personal Bash environment setup and how it’s safely backed up to a NAS using rsync. It includes modular .bashrc configuration, Git-aware PS1, LS_COLORS tweaks, aliases, and functions.


1️⃣ Modular .bashrc Setup

  • .bashrc sources scripts from ~/.bashrc.d/

  • Example structure:

How (CG)NAT Centralized Internet

"Because the public IP was yours. That’s the world TCP/IP was built for.

💥 What Changed? Why That Died"

i didn't realize that had died.!!!

ChatGPT said:

Exactly. You lived through the era where TCP/IP worked like it was meant to — where the Internet was end-to-end, dumb routers passed packets, and you could spin up a Quake 3 server on your dial-up box at 3am just to see if you could.

Then, somewhere along the way… we lost the Internet and nobody told us. 😱 What You Missed (Because No One Announced It)

You didn’t miss it because you were out of touch — you missed it because:

ISPs never said...

Laravel Artisan Plugin Install

Installation

Run the following to install this plugin:

php artisan plugin:install RainLab.Builder

To uninstall this plugin:

php artisan plugin:remove RainLab.Builder

If you are using October CMS v1 or v2, install v1.2 with the following commands:

composer require rainlab/builder-plugin "^1.2"

RSYNC Operations

Practical RSYNC Advice

Since you said you destroyed your archive with -u, here’s what I’d do going forward:

  1. Never run rsync with -u for archival purposes. It’s only safe for “don’t clobber remote changes” deployments.

  2. For consolidation:

    • First pass: rsync -a --ignore-existing

    • Second pass: use a different directory and copy remaining conflicting files there, instead of overwriting.

    • Then sort through conflicts with dedup tools.

  3. For irreplaceable data (like your music): use a write-once backup strategy — don’t risk overwriting.


✅ So in your case, yes — you were using -u under the ...

What is CGNAT Gateway

🧠 TL;DR

  • 1995: Your router got a public IP. It was a first-class citizen on the internet.

  • Today: Your router gets a private IP. The ISP rewrites all your traffic behind a shared CGNAT gateway.

  • Result: No port forwarding, no inbound access, no real ownership of your connection.

And that’s why all your self-hosting, devops, and bot stuff breaks — unless you punch a hole in it with tricks like tailscale, ngrok, or your own reverse tunnel to a real server with a public IP.

Want me to sketch that architecture? I’ll map it clean.

4o

You said:

hold on. you said, "Because the public IP was your...

Dockerfile

Volumes in the app service

In your docker-compose.yml for app:

volumes: - ./.env:/workspace/.env # Mount env file explicitly - ./workspace/app

  • You mount .env explicitly — good.

  • ./workspace/app — this is incomplete syntax. Docker volume mount expects host_path:container_path format.

You probably want:

yaml volumes: - ./.env:/workspace/.env - ./workspace/app:/workspace/app

Or uncomment the full project mount:

yaml volumes: - .:/workspace

Lightweight Alternatives to Tailwind CSS

Comparing Spectre CSS and Tailwind CSS

It isn't accurate to say that Spectre CSS is a lightweight version of Tailwind CSS. Both frameworks serve different purposes and have distinct philosophies.

Feature Spectre CSS Tailwind CSS
Design Philosophy Minimalist & straightforward Utility-first and customizable
Approach Predefined components and styles Classes for individual styling; requires setup for custom designs
Ease of Use Simple out-of-the-box setup May require more learning for efficient use
Customization Limited customization due to predefined styles Highly customizable through...

startuml SurpriseDiagram

@startuml SurpriseDiagram

title A Small Surprise for Cent

skinparam backgroundColor #1e1e1e skinparam handwritten true skinparam shadowing false skinparam ArrowColor #ffcc00 skinparam ActorBorderColor #ffcc00 skinparam ActorFontColor #ffcc00 skinparam SequenceLifeLineBorderColor #ffcc00 skinparam SequenceLifeLineBackgroundColor #333333

actor Cent as C participant "Flask App" as F participant "PlantUML Renderer" as P

C -> F : Request /diagram/surprise.puml F -> P : Encode + Render P --> F : SVG Output F --> C : Display Diagram

note over C You are now seeing your first fully offline-rendered UML...

System Backup Advisory from ChatGPT

Practical advice for you now

Since you said you destroyed your archive with -u, here’s what I’d do going forward:

Never run rsync with -u for archival purposes. It’s only safe for “don’t clobber remote changes” deployments.

For consolidation:

First pass: rsync -a --ignore-existing

Second pass: use a different directory and copy remaining conflicting files there, instead of overwriting.

Then sort through conflicts with dedup tools.

For irreplaceable data (like your music): use a write-once backup strategy — don’t risk overwriting.


✅ So in your case, yes — you were using -u under the impression...