If you're reading this it means I've successfully migrated this website to Google Cloud.

Hi, my name is Jonathan Caruso and this is my website.

A little about me:
I'm a father to a beautiful little four year old girl. I have a candlemaking business with my fiancé Ashley, Caruso Candle Co. I enjoy programming, music, AI, and making things.

I built this website with the help of Claude.AI. It's purpose is multipronged:

1. It acts as an online living resumé. Here I can show off my skills and knowledge.
2. It serves as a journal. Journaling is good for you (so I've read).
3. It will allow me to practice and improve my writing. Writing allows me to better formulate ideas and crystalize my thinking. Writing for an audience makes me to want to write better.
4. It's fun. Like I said earlier, I enjoy making things. Making this is fun for me.

This is the second website I've hosted on Google Cloud. The first is Xlyzer.com, a website for analyzing X analytics. It is currently unusable because X decided to remove their CSV export functionality when they "upgraded" their analytics. I've been told it's coming back soon.

This website is running under App-Engine, which is a serverless architecture. That means there's no virtual machine to manage, which is what I'm used to.

I ran into a few issues getting this site live, but the biggest one was getting Django (the Python web framework I'm using) to connect to the Postgres SQL database (which hosts all the content).

I kept getting this error:

Exception Type: OperationalError at /
Exception Value: connection to server on socket "/cloudsql/myprojectname:us-east1:mydatabase/.s.PGSQL.5432" failed: Connection refused
    Is the server running locally and accepting connections on that socket?
    
I checked the permissions several times and they appeared correct.

I tried to run the Cloud SQL Auth Proxy and received this error:

2024/08/13 03:23:53 [myprojectname:us-east1:mydatabase] could not listen to address 127.0.0.1:5432: listen tcp 127.0.0.1:5432: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
2024/08/13 03:23:53 Error starting proxy: [myprojectname:us-east1:mydatabase] Unable to mount socket: listen tcp 127.0.0.1:5432: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
2024/08/13 03:23:53 The proxy has encountered a terminal error: unable to start: [myprojectname:us-east1:mydatabase] Unable to mount socket: listen tcp 127.0.0.1:5432: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

I figured out this was happening because I was running Postgres server locally, which was already using port 5432. After closing Postgres I started getting a different error:

Error 403: Access Not Configured. Cloud SQL Administration API has not been used in project REDACTED before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/sqladmin.googleapis.com/overview?project=myprojectname then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry., accessNotConfigured

I was following this tutorial Running Django on the App Engine standard environment along with instructions from Claude. However, I missed a key step at the beginning.

Enable the Cloud SQL Admin API

Enable the Cloud SQL Admin API dummy


Had I read the documentation fully instead of just blindly following Claude's instructions I would have resolved this a lot sooner. After enabling the Cloud SQL Admin API it was pretty much smooth sailing.

The lesson?

RTFM.

Translation for non-nerds: Read the furnished manual.

P.S. It appears images are not being uploaded correctly. I have my next challenge.

P.P.S. Updating the Pillow package to a modern version fixed the featured image. Setting MEDIA_URL in settings.py fixed the images uploaded to TinyMCE.