Last week was a lot of exploration and learning about AWS deployment options. While I ended up putting in work starting down some paths that won’t directly end up being part of the final deployment process, I learned a lot and am now in a solid and confident position.
After exploring various more managed AWS options, I decided on using an EC2 (Elastic Compute Cloud) instance to run a Docker Compose stack with the various elements of my backend. Using an Alpine cloud image to create the EC2 instance, I’ll pull and run all the necessary components using docker-compose.yml and Podman. I’ve pushed the image for my backend server (including migrations and database seeding) to GHCR (GitHub Container Registry), meaning everything can be cleanly pulled into the production environment as Docker images rather than source code. I’ll also have Caddy as part of the Compose stack in order to get HTTPS, using a custom domain name that I already have.
While the exploration and decision making process last week ended up involving a lot of implementation as well, this week will be about completing that implementation to get the backend deployment across the finish line. Basically, I have an EC2 instance running and a rough draft shell script that theoretically sets everything up and runs the stack, so I will need to make sure the many moving parts actually work and iron out any details. Thanks to UTM, it’s easy for me to spin up a local Alpine VM to practice in.
However, one other missing piece is the domain, which will involve connecting my domain registrar, the EC2 instance on AWS, and Caddy inside a container inside the instance. This looks like it will be relatively straightforward, but it’s one element that I can’t really practice.
I’d say that I’m relatively unimpeded this week. I’m still exploring unfamiliar technologies, which means I’m less able to accurately estimate how long tasks will take, but overall, I feel like I have a very concrete plan and am in a much clearer position than last week.
One way I can improve upon the process I used last week is by more quickly considering alternatives when the scale or nature of a task begins to get out of hand. On multiple occasions last week, I spent a lot of time creating, changing, or configuring existing or potential elements of the project, only to later decide to go in a completely different direction. Moving forward, if I’m more quickly able to determine that I won’t pursue something, then I’ll be able to save time. However, I wouldn’t say that any of the time I spent last week was wasted. I still learned a lot about why I would choose one approach over another in ways that I think are only possible through trial and error.