A Student's Experience with Deploying FastOpp with Leapcell

By watching Craig Oda’s video tutorial, I was able to deploy FastOpp with Leapcell on my own, with a few twists and turns.
Prerequisites:
Before deploying FastOpp to Leapcell, I made sure to have the following prerequisites:
My own GitHub branch of FastOpp from the original FastOpp repository by forking prior
If you haven’t already done so, go to the FastOpp repository and click fork.
You should see FastOpp in YOUR repository.
My branch is up to date with the original Oppkey repository
A Leapcell account where I signed in with and authorized the use of my GitHub account
Local python installed (to generate a secure key with uv) (optional)
Creating my Leapcell service.
To create my Leapcell service, I simply pressed ‘create’ in the service tab. The tabs that I will refer to in this blog can be found in the slider of the workspace.
When prompted with configurations, I used:
Framework Preset to FastAPI
Branch set to main
Leave the Root Directory untouched
Python to Python3.12 debian
Serving Port: 8080 (default)
Under build command, put pip install -r requirements.txt
Under start command, put uvicorn main:app –host 0.0.0.0 –port 8080
then Saved and Deployed. By going to logs on the left sidebar, you should see the service start.
This part was simple and quick, no complications.
Adding Environment Variables.
Now after creating the service, I need to add the critical environment variables.
In the Env Variables tab, I added:
UPLOAD_DIR | /tmp/uploads |
then Saved and Deployed once more.
When you click the link under 🌐Domains, it should open FastOpp in a new tab.
However, I ran into an error where FastOpp wouldn’t open (Yikes!). Turns out, it was actually my local machine causing the problem, not FastOpp.
If you have an anti-malware system like McAfee or Norton (such as my case), make sure to set the URL under 🌐Domains as an exclusion. Sometimes, these services falsely label the URL as a malicious website. Personally, what I did was go to Security -> Safe Web -> and turned off Safe Web for 10 minutes to allow the URL.
If you want to set the URL as an exclusion permanently in Norton, navigate to:
Security
Advanced Security
Network
Safe Web (settings icon)
Exclusions
and Paste your Leapcell domain link under Exclusions.
After doing so, I was able to open the link (hurray!).
Implementing a Database.
Now onto creating a Database.
On the left bar, I clicked Database which navigated me to a new window, and then clicked “New Database”.
It is recommended to use the default configurations shown in the “Create Database” page with the exception of your unique name for your database.
I personally live in California, so hypothetically I would set my Region to N. Virginia, US East. However, when creating my database, it would fail to set the Region to N. Virginia, US East. I then selected the other option, Tokyo, Japan, and it worked just fine.
I believe in my case the recent AWS outage on October 20th, 2025 is the culprit, as the deployment region is associated with AWS. On a typical day, setting the region to N. Virginia, US East would work just fine.
If it weren’t for the AWS outage, my configurations would be:
Name: <my own database name>
Database: PostgreSQL 16.8
Region: N. Virginia, US East
Database Instance: Postgres (Free, 100MB Disk, Shared CPU) -the free option
and now I created my own database!
Now that I have my own database, I needed to add the DATABASE_URL to my environment variables.
In the database tab, under “Connect to your database”, I clicked on Python and copied the text (without the quotation markers “”) inside
engine = create_engine(“<right here>”).
I then went back to Env Variables in the service tab, and added the following environment variables:
| DATABASE_URL | <copied text> |
| SECRET_KEY | <secret key> |
| ENVIRONMENT | production |
But before deploying, I needed one more variable for the next step.
Enabling Emergency Access
I added one more environment variable:
EMERGENCY_ACCESS_ENABLED | true |
and clicked Save and Deploy.
From this point, I can set myself as a Super user.
I opened FastOpp again under Leapcell, and at the very bottom appeared a notification with the headline “First Time Setup”. I then clicked on the bolded Emergency Access link.
In the new page, I pasted my Secret Key under the Emergency Token and was then granted emergency access. It then loaded a new page, and I added my credentials to create myself as a super user.
Now that I was a super user, I wanted to make sure no one else could become a super user, so I went back to my Environment variables and set EMERGENCY_ACCESS_ENABLED to false.
EMERGENCY_ACCESS_ENABLED | false |
then saved.
To see the demo work, I clicked “Initialize Full Demo” in the FastOpp page in which it loaded the sample data. You can see the organized sample data in multiple demos such as the Webinar and Database Data.
Final Stretch! Database storage
Fastopp utilizes S3 storage with Leapcell. To do this, I needed … you guessed it. More environment variables!
These are the environment variables that I added to utilized S3 Storage:
| STORAGE_TYPE | s3 |
| S3_ACCESS_KEY | <my leapcell access key> |
| S3_SECRET_KEY | <my leapcell secret key> |
| S3_BUCKET | <my bucket name> |
| S3_ENDPOINT_URL | https://objstorage.leapcell.io |
| S3_CDN_URL | <my s3 CND URL> |
All the values on the right side of this table can be found by navigating to the Object Storage tab and clicking the already created object (under name). You can directly copy and paste all the values for its appropriate key.
And done!
The process was pretty simple. I would rate the difficulty a 4 out of 10 where a non-technical person can deploy FastOpp with Leapcell on his/her own.
I enjoyed this experience as I not only got to deploy my own database, but also analyze website traffic and see users visiting my website.
I would definitely recommend FastOpp whether to make tracking data metrics easier or building a platform where it’s easy for others to see your work.




