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.
77 lines
2.9 KiB
Markdown
77 lines
2.9 KiB
Markdown
# The Bin
|
|
|
|
My personal website, blog, and portfolio. Available at https://binning.net.
|
|
|
|
## Architecture
|
|
|
|
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.
|
|
|
|
### Directory structure
|
|
|
|
```
|
|
.
|
|
├── 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
|
|

|
|
```
|
|
|
|
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/
|
|
[Ruby]: https://www.ruby-lang.org/
|
|
[Jekyll]: https://jekyllrb.com/
|
|
[Github-Pages]: https://pages.github.com/
|