AWS (Amazon Web Services) is a fantastic and reliable cloud service provider. AWS, like GCP (Google Cloud Platform) and Microsoft Azure, provides everything you need to host an application without having to worry about running the underlying servers and network configuration.
However, deploying an application on any of those cloud providers presents many challenges. The typical deployment workflow looks like this: write code, push it to Git repository, compile code, deploy code, validate your changes, and repeat. Developers not only have to take care of all of this by themselves, but they also have to configure tons of services (like VPCs, databases, caches, DNS, CDN, and others) to make their application live on the web.
Qovery solves this problem by combining the reliability of AWS and the simplicity of Heroku to augment the developer experience.
In this blog post, I will show you how Qovery improves developers' workflows by deploying staging and production Flask application with PostgreSQL database on Qovery. You will be able to focus on writing the best code and delivering business value instead of managing complex services.
- Your Operating System is macOS / Windows / Linux
- You have a Github account
Install Qovery CLI
# Download and install Qovery CLI on every Linux distribution$ curl -s https://get.qovery.com | sudo bash
# Sign up and sign in command$ qovery auth
Your browser window with sign-in options will open.
Note: Qovery needs access to your account to be able to clone your repository for future application builds.
Click here to authorize Qovery to clone and build your applications.
Congratulations, you are logged-in.
Flask sample application
Get a local copy of the Flask sample project by forking it.
Configure your project
To deploy your Flask application connected to a PostgreSQL, you need to have a
.qovery.yml file, and a
Dockerfile (both provided in the sample project) at the root of your project.
In this example we are using PostgreSQL v11.5
After forking the sample application, you can check the content of
$ cat .qovery.yml
application:name: my-applicationproject: my-projectcloud_region: aws/us-west-2publicly_accessible: truedatabases:- type: postgresqlversion: "11.5"name: my-dbrouters:- name: mainroutes:- application_name: my-applicationpaths:- /
Authorize the Qovery Github application to get access to your Github account. Once done, all new commits you push to your forked repository will trigger new deployments of the application.
Connect your application to PostgreSQL
Credentials of your database are available via environment variables. Qovery injects environment vars at the runtime. To list all the environment variables available to your application, execute
# List all environment variables$ qovery project env list
SCOPE | KEY | VALUEBUILT_IN | QOVERY_JSON_B64 | <base64>BUILT_IN | QOVERY_BRANCH_NAME | masterBUILT_IN | QOVERY_IS_PRODUCTION | trueBUILT_IN | QOVERY_MY_APPLICATION_HOSTNAME | <hidden>BUILT_IN | QOVERY_DATABASE_MY_DB_DATABASE | <hidden>BUILT_IN | QOVERY_DATABASE_MY_DB_PASSWORD | <hidden>BUILT_IN | QOVERY_DATABASE_MY_DB_USERNAME | <hidden>BUILT_IN | QOVERY_DATABASE_MY_DB_PORT | <hidden>BUILT_IN | QOVERY_DATABASE_MY_DB_FQDN | <hidden>BUILT_IN | QOVERY_DATABASE_MY_DB_HOST | <hidden>BUILT_IN | QOVERY_DATABASE_MY_DB_CONNECTION_URI_WITHOUT_CREDENTIALS | <hidden>BUILT_IN | QOVERY_DATABASE_MY_DB_CONNECTION_URI | <hidden>BUILT_IN | QOVERY_DATABASE_MY_DB_VERSION | 11.5BUILT_IN | QOVERY_DATABASE_MY_DB_TYPE | PostgreSQLBUILT_IN | QOVERY_DATABASE_MY_DB_NAME | my-db
The sample application is preconfigured to use those environment variables to connect to the database.
Forking the application with
.qovery.yml and a
Dockerfile should trigger app deployment.
See the deployment status by executing:
# Show your deployment status$ qovery status
BRANCH NAME | STATUS | ENDPOINTS | APPLICATIONS | DATABASESmaster | running | https://main-abcdefgh12345678-gtw.qovery.io | my-application | my-dbAPPLICATION NAME | STATUS | DATABASESmy-application | running | my-dbDATABASE NAME | STATUS | TYPE | VERSION | ENDPOINT | PORT | USERNAME | PASSWORD | APPLICATIONSmy-db | running | POSTGRESQL | 11.5 | <hidden> | <hidden> | <hidden> | <hidden> | my-application
When your application
running, you can use a browser or
curl to access its endpoints.
Trigger a new deployment
Now, you can play with the sample application and commit & push your changes. Qovery detects your actions and triggers new builds and application deployments. Any change you make will be reflected in your deployed application automatically.
Test the Flask application locally
The Qovery motto is: if your application runs locally, it runs well on Qovery, too. To test if your application is running locally, execute the following command:
$ qovery run
qovery run connects your application to the PostgreSQL database on Qovery.
Deploy the application on a staging environment
Qovery has a compelling feature known as "environments". Qovery supports the deployment of isolated development environments that reflect your Git branches. Environments are complete copies of all of your data, application, and services like databases. The Environment is useful for testing changes in isolation before merging them to your main branch.
So, do you want to create a new feature, fix a bug, or make modifications without impacting the production or any other important environment? Type the following commands:
$ git checkout -b feat_foo$ git push -u origin feat_foo# show deployment status$ qovery status
BRANCH NAME | STATUS | ENDPOINTS | APPLICATIONS | DATABASESfeat_foo | running | https://main-yenr7erjbs87dk4m-gtw.qovery.io | my-application | my-dbAPPLICATION NAME | STATUS | DATABASESdocker-simple-example | running | my-dbDATABASE NAME | STATUS | TYPE | VERSION | ENDPOINT | PORT | USERNAME | PASSWORD | APPLICATIONSmy-db | running | PostgreSQL | 11.5 | <hidden> | <hidden> | <hidden> | <hidden> | my-application
Qovery brings developers the full power of simplicity and flexibility while deploying applications. Any developer can now take advantage of the most popular cloud providers in seconds instead of hours or days.