Files in the top-level directory from the latest check-in
- bin
- containerfiles
- doc
- etc
- resources
- src
- src-dev
- src-prod
- test
- CHANGELOG.md
- infra-env.template
- LICENSE
- mylife-env.template
- project.clj
- README.md
mylife
My Life. On the Web. In your RSS reader.
DEPRECATED
I no longer intend to maintain this project going forward. No idea what I'll replace it with.
Feedback
If you'd like to chat about this project, you can contact me various ways that are listed on my website (powered by this project!): https://www.calmabiding.me
Prerequisites
Usage
lein run
Testing
Run lein fulltest
to check everything. This command is also executed
as part of the podman image build (see below).
To get into a continuous unit testing mode, run lein test-refresh
.
The SSL test is really slow. If you aren't working with it, you can
run SKIP_SSL=true lein test-refresh
.
Hosting
I host mylife and its supporting infrastructure (source code, etc.) alongside a few other toy projects in two different places:
mylife is hosted all by itself on a remote server running alpine,
since it is completely self-sufficient. I used bin/provision
to set it
up and bin/update-mylife
to start it up. Since I already had a database
I first copied the database files over to that machine.
The server is the smallest I could get. Costs $5/mo.
Every time I publish new code I can just run bin/update-mylife
to upload
and start the latest podman image that I build locally using bin/package
.
This also packages up a custom-built fossil binary that I host on my local
server.
I run nginx, fossil, and some other toy projects that have their own package
scripts (you can find them in the fossil repo) using bin/start
There are a couple of files I need in my home directory before running anything above. I set them up this way:
cp infra-env.template ~/.infra-env
cp mylife-env.template ~/.mylife-env
Then I edited those files and updated appropriate domain names and IP addresses.
I also backup my blog database and everything else using a cron job that
runs bin/backup-mylife-db
One more thing.. SSL. I wrote a script called bin/run-certbot
that I used
to set up SSL. The first time you startup nginx it will check for SSL certs
in $HOME/.certbot/letsencrypt
and, if it finds them, it will wire up
the fossil
and coffeetime
servers to use SSL. Otherwise it'll just setup
the .well-known/acme-challenge
stuff so you can then run the bin/run-certbot
script.
It defaults to doing a dry run. If the dry run succeeds, you can follow the instructions the script gives you to generate the scripts for real.
Then run bin/start-nginx
I also have a cron job that basically runs bin/run-certbot
and bin/start-nginx
once a day.
If you know/like Docker, it should also work. The Containerfile
at the root
of the project drives container construction.
Podman idiosyncrasies
Linux
I have had no serious issues with using the default Podman installation in
linux (PopOS). Though, I did have to edit /etc/containers/registries.conf
to add this:
unqualified-search-registries = ["docker.io"]
This wasn't
necessary on the default installation of Alpine.
MacOS
I haven't figured out how to make this work. If you want to use Mac OS as a container host, you'll likely need to use Docker.
WARNING
I don't make any attempts to maintain backwards compatibility because I'm the only person I know of using this software. If you are running this thing in production, please let me know so I can change my workflow to pay attention to your needs!
License
Copyright © 2024 Stephen Starkey
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at your
option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License
for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.