feat: Move media assets outside of the git repository
All checks were successful
CI / build (push) Successful in 10s
CI / deploy (push) Successful in 5s

Images and media referenced by the private Copper Chronicle section are no
longer tracked by git. They live at /assets/copper-chronicle/ on the server
(/srv/www/binning.net/assets/) and are managed independently. Updated all
image links in src/private/copper-chronicle to use absolute paths rooted at
/assets/. Added --filter='protect assets/' to all deploy rsync commands to
prevent accidental deletion during deploys.
This commit is contained in:
Matthew Binning 2026-04-04 16:32:51 -07:00
parent 1efb4e1203
commit 3245231730
9 changed files with 78 additions and 17 deletions

View file

@ -22,5 +22,5 @@ jobs:
path: book/ path: book/
- name: Deploy - name: Deploy
run: | run: |
nix shell nixpkgs#rsync --command rsync -av --delete book/ /srv/www/binning.net/ nix shell nixpkgs#rsync --command rsync -av --delete --filter='protect assets/' book/ /srv/www/binning.net/
printf "✓ Local deployment complete!\n" printf "✓ Local deployment complete!\n"

View file

@ -31,5 +31,5 @@ jobs:
path: book/ path: book/
- name: Deploy - name: Deploy
run: | run: |
nix shell nixpkgs#rsync --command rsync -av --delete book/ /srv/www/binning.net/ nix shell nixpkgs#rsync --command rsync -av --delete --filter='protect assets/' book/ /srv/www/binning.net/
printf "✓ Local deployment complete!\n" printf "✓ Local deployment complete!\n"

View file

@ -36,5 +36,5 @@ jobs:
path: book/ path: book/
- name: Deploy - name: Deploy
run: | run: |
nix shell nixpkgs#rsync --command rsync -av --delete book/ /srv/www/binning.net/ nix shell nixpkgs#rsync --command rsync -av --delete --filter='protect assets/' book/ /srv/www/binning.net/
printf "✓ Local deployment complete!\n" printf "✓ Local deployment complete!\n"

1
.gitignore vendored
View file

@ -2,3 +2,4 @@
book/ book/
*.jpg *.jpg
*.png *.png
src/drafts/journal

View file

@ -1,15 +1,75 @@
# The Bin # The Bin
This is my personal website, blog project, and portfolio page. My personal website, blog, and portfolio. Available at https://binning.net.
It should be available at https://wwww.binning.dev
# History ## Architecture
- 2025-02-28: I restarted this in [Rocket](https://rocket.rs) after yet another data loss event. This is an [mdbook](https://rust-lang.github.io/mdBook/) project. Source content lives in `src/`, and `mdbook build` produces the static site in `book/`, which is what gets deployed.
- 2024-06-21: I migrated from cgit to forgejo and from kuberentes to simply nginx.
- 2023-10-07: I merged the deployment repository into this one and moved to self-hosting. ### Directory structure
- 2022-01-05: I moved hosting to Vultr and moved to a Cobalt.
- 2018-12-16: I started this blog with [Namecheap][Namecheap], [Ruby][Ruby], [Jekyll][Jekyll], and [Github-Pages][Github-Pages]. ```
.
├── src/ # mdbook source (markdown content)
│ ├── SUMMARY.md # table of contents / navigation
│ ├── private/ # git submodule — see below
│ └── ...
├── book/ # build output (not tracked)
├── content/ # assets and media not tracked by git — see below
├── book.toml # mdbook configuration
└── .forgejo/workflows/ # CI/CD pipelines
```
### Private content (git submodule)
`src/private` is a separate private git repository included here as a submodule. This keeps personal content out of the public repo history while still building into the same site. The submodule is hosted at `https://forgejo.binning.net/www/private`.
When working locally, the submodule URL can be overridden to SSH in `.git/config`:
```bash
git config submodule.src/private.url forgejo@forgejo.binning.net:/www/private.git
git submodule sync
```
CI uses HTTPS with an OAuth token via a URL rewrite (`secrets.WWW_PRIVATE_TOKEN`), so `.gitmodules` should always contain the HTTPS URL.
To update the submodule to the latest commit:
```bash
git submodule update --remote src/private
git add src/private
git commit -m "Update private submodule"
```
### Assets
Images and media referenced by content in `src/private/` are not tracked by this repo. They live on the server at `/srv/www/binning.net/assets/` and are managed separately.
Markdown image links use absolute paths rooted at `/assets/`:
```markdown
![alt text](/assets/copper-chronicle/chapter_1/image.jpg)
```
The deploy rsync uses `--filter='protect assets/'` to ensure the `assets/` directory is never deleted during deployment.
## CI/CD
Three Forgejo Actions workflows handle the build and deploy lifecycle:
- **ci.yml** — builds on every push and uploads the artifact
- **cd.yml** — manual workflow dispatch to deploy to staging or prod
- **nightly.yml** — scheduled nightly build and deploy
All workflows run on a self-hosted runner and deploy to `/srv/www/binning.net/` via rsync.
## History
- 2025-02-28: Restarted in [mdbook](https://rust-lang.github.io/mdBook/) after yet another data loss event.
- 2024-06-21: Migrated from cgit to Forgejo and from Kubernetes to nginx.
- 2023-10-07: Merged the deployment repository into this one and moved to self-hosting.
- 2022-01-05: Moved hosting to Vultr and switched to Cobalt.
- 2018-12-16: Started with [Namecheap], [Ruby], [Jekyll], and [Github Pages][Github-Pages].
[Namecheap]: https://www.namecheap.com/ [Namecheap]: https://www.namecheap.com/
[Ruby]: https://www.ruby-lang.org/ [Ruby]: https://www.ruby-lang.org/

View file

@ -15,7 +15,7 @@ fi
printf "Deploying website files...\n" printf "Deploying website files...\n"
ssh ${REMOTE_USER}@${REMOTE_HOST} "mkdir -p /tmp/blog-deploy" ssh ${REMOTE_USER}@${REMOTE_HOST} "mkdir -p /tmp/blog-deploy"
rsync -avz --delete blog/ ${REMOTE_USER}@${REMOTE_HOST}:/tmp/blog-deploy/ rsync -avz --delete blog/ ${REMOTE_USER}@${REMOTE_HOST}:/tmp/blog-deploy/
ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo rsync -avz --delete /tmp/blog-deploy/ ${REMOTE_PATH}/ && \ ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo rsync -avz --delete --filter='protect assets/' /tmp/blog-deploy/ ${REMOTE_PATH}/ && \
sudo chown -R nginx:nginx ${REMOTE_PATH}/ && \ sudo chown -R nginx:nginx ${REMOTE_PATH}/ && \
printf 'Content deployed.\n'" printf 'Content deployed.\n'"

View file

@ -2,7 +2,7 @@
Welcome to my personal website, blog, and landing page for other self-hosted software. This website serves as a space to share musings, stories, and chronicles, about all of those things. Welcome to my personal website, blog, and landing page for other self-hosted software. This website serves as a space to share musings, stories, and chronicles, about all of those things.
![cover photo](cover-photo.jpg) ![cover photo](/assets/cover-photo.jpg)
## About ## About

@ -1 +1 @@
Subproject commit 28cfe7618cc6babe24b12de6620e066af402e4e9 Subproject commit b9a3514cf48badcb2165d7e8473217cbd6a7f2f2

View file

@ -1,4 +1,3 @@
Split www into www/blog, www/content, and www/assets
Determine which articles should be incorporated into the website Determine which articles should be incorporated into the website
Build out the Copper Chronicle Build out the Copper Chronicle
Fill out the DefCon article Fill out the DefCon article
@ -39,4 +38,5 @@ x 2026-03-23 Reduce the CSS where possible. Match my website's theme to align wi
x Set up nightly builds x Set up nightly builds
x Personalize the index page. x Personalize the index page.
x Personalize the introduction page of the blog. x Personalize the introduction page of the blog.
x 2026-04-04 Split www into www/blog, www/content, and www/assets