<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Python Archives | Clever Cloud</title>
	<atom:link href="https://www.clever.cloud/blog/tag/python/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.clever.cloud/blog/tag/python/</link>
	<description>From Code to Product</description>
	<lastBuildDate>Tue, 02 Dec 2025 14:25:09 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://cdn.clever-cloud.com/uploads/2023/03/cropped-cropped-favicon-32x32.png</url>
	<title>Python Archives | Clever Cloud</title>
	<link>https://www.clever.cloud/blog/tag/python/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Deploy Docs on Clever Cloud</title>
		<link>https://www.clever.cloud/blog/engineering/2025/03/17/deploy-docs-on-clever-cloud/</link>
		
		<dc:creator><![CDATA[Julia March]]></dc:creator>
		<pubDate>Mon, 17 Mar 2025 18:37:00 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[DINUM]]></category>
		<category><![CDATA[docs]]></category>
		<category><![CDATA[Node.JS]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://www.clever-cloud.com/?p=16710</guid>

					<description><![CDATA[<p><img width="2560" height="1238" src="https://cdn.clever-cloud.com/uploads/2025/03/docs-scaled.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="docs scaled" decoding="async" fetchpriority="high" srcset="https://cdn.clever-cloud.com/uploads/2025/03/docs-scaled.jpg 2560w, https://cdn.clever-cloud.com/uploads/2025/03/docs-300x145.jpg 300w, https://cdn.clever-cloud.com/uploads/2025/03/docs-1024x495.jpg 1024w, https://cdn.clever-cloud.com/uploads/2025/03/docs-768x371.jpg 768w, https://cdn.clever-cloud.com/uploads/2025/03/docs-1536x743.jpg 1536w, https://cdn.clever-cloud.com/uploads/2025/03/docs-2048x990.jpg 2048w, https://cdn.clever-cloud.com/uploads/2025/03/docs-1368x661.jpg 1368w" sizes="(max-width: 2560px) 100vw, 2560px" /></p><!-- wp:paragraph -->
<p>The open-source alternative to Notion, a French government initiative in collaboration with Germany, has become the number 1 topic of discussion on <a href="https://news.ycombinator.com/item?id=43378239" target="_blank" rel="noreferrer noopener">Hacker News</a> over the last 24 hours. In this post, we explain how to deploy and configure Docs on Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">What is Docs?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Docs isn't just an alternative to Notion: it's also a collaborative project from the Direction Interministérielle du Numérique (DINUM) and its German equivalent, the Zentrum Digitale Souveränität (ZENDIS, or Center for Digital Sovereignty).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Docs is one of many initiatives aimed at ensuring the digital sovereignty of governments , not only in their use of digital tools, but also in their creation. At Clever Cloud, we've already had the opportunity to work with various ministries on a daily basis, and we're proud to be able to contribute to the diffusion of these tools.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>As Docs currently runs on Kubernetes, we have explored the possibilities of deploying it using Clever Cloud rather than a kube cluster. Of course, you'll be able to deploy it using Kubernetes when our managed kube product becomes available.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">How to deploy Docs on Clever Cloud</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Docs consists of two main applications:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>A backend (a Django API Rest) in src/backend</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>A frontend (mainly based on Next.js and yarn workspaces) in src/frontend</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>And integrates the following dependencies :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>PostgreSQL database</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Redis</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Keycloak (optional)</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>To deploy it on Clever Cloud, opt for a Python application for the backend, and a Node.js application for the frontend. There's no need to version each subfolder; you can push your code with Git from the repository root and specify which subfolder to deploy using the <code>APP_FOLDER</code> variable for each of your applications.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Backend deployment</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>To take the value from the environment variables injected at runtime on Clever Cloud, we've made a few minor modifications to the code, and also renamed the environment variables for the PostgreSQL database and S3 storage. This last modification allows you to modify the database or buckets, change add-ons and renew identifiers without having to manually modify the value of the variables injected into the application. For smooth deployment of Docs on Clever Cloud, <a href="https://github.com/CleverCloud/docs-example/tree/deploy-on-cc" target="_blank" rel="noreferrer noopener">clone the branch under development on our fork</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Then, on Clever Cloud:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Create a Python application</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Add a PostrgreSQL database</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Create a Cellar add-on (or create the bucket directly, if you already have one) and connect it to the application.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Create a Redis add-on and connect it to the application</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Add the minimum configuration environment variables to your application:</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p><code>APP_FOLDER="/src/backend"<br>CC_PYTHON_MODULE="impress.wsgi:application"<br>CC_PYTHON_VERSION="3"<br>CC_TROUBLESHOOT="true"<br>CELLAR_STORAGE_BUCKET_NAME="your-bucket-name"<br>DJANGO_ALLOWED_HOSTS="frontend-url/*"<br>DJANGO_CONFIGURATION="Development" / "Production"<br>DJANGO_SECRET_KEY="YourNewlyGeneratedKeyHere"<br>DJANGO_SETTINGS_MODULE="impress.settings"<br>DJANGO_SUPERUSER_PASSWORD=""<br>OIDC_OP_AUTHORIZATION_ENDPOINT="&lt;&gt;"<br>OIDC_OP_JWKS_ENDPOINT="&lt;&gt;"<br>OIDC_OP_TOKEN_ENDPOINT="&lt;&gt;"<br>OIDC_OP_USER_ENDPOINT="&lt;&gt;"<br>OIDC_RP_CLIENT_SECRET=""<br>STATIC_URL="frontend url"</code></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Click on the <strong>Exposed configuration</strong> tab and add the variables to be shared with the frontend (the Cellar configuration and Keycloak, if you're adding one).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><br>In your application, add the remote provided in the Python application dashboard (<strong>Information</strong> tab) and name it clever-backend, for example.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Once deployed, you'll be able to connect to the API administration interface on backend-url/admin.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Deploying the frontend</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The Docs frontend requires far fewer dependencies, this one is configured to use yarn worspaces that facilitate both maintenance and the deployment of multiple applications on a single virtual machine on Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>On Clever Cloud:<br></p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Create a Node.js application</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Add the following environment variables:</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p><code>APP_FOLDER="./src/frontend"<br>CC_NODE_BUILD_TOOL="yarn"<br>CC_PRE_BUILD_HOOK="cd ./src/frontend &amp;&amp; yarn install --frozen-lockfile &amp;&amp; yarn app:build"<br>CC_RUN_COMMAND="cd ./src/frontend &amp;&amp; yarn app:start"<br>CC_TROUBLESHOOT="true"<br>NEXT_PUBLIC_API_ORIGIN=""<br>NEXT_PUBLIC_SW_DEACTIVATED="true"<br>NODE_OPTIONS="--max-old-space-size=4096"</code></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Connect the application to the backend (<strong>Linked services</strong> tab), as well as to the database add-on.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>In your application, add the remote provided in the Node.js application dashboard (<strong>Information</strong> tab) and name it clever-frontend, for example.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Push the code, and you'll be able to connect using the authentication you've defined with Keycloak or the Django API.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Go further with Docs</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>This article presents an example of deployment on Clever Cloud, but Docs is a rich project with multiple functionalities that you can activate or customize. To work locally, you'll find instructions for starting the frontend <a href="https://github.com/CleverCloud/docs-example/blob/deploy-on-cc/src/frontend/README.md" target="_blank" rel="noreferrer noopener">here</a>, and for starting the backend <a href="https://github.com/CleverCloud/docs-example/blob/deploy-on-cc/src/backend/README.md">here</a>. We welcome questions and contributions!</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="2560" height="1238" src="https://cdn.clever-cloud.com/uploads/2025/03/docs-scaled.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="docs scaled" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2025/03/docs-scaled.jpg 2560w, https://cdn.clever-cloud.com/uploads/2025/03/docs-300x145.jpg 300w, https://cdn.clever-cloud.com/uploads/2025/03/docs-1024x495.jpg 1024w, https://cdn.clever-cloud.com/uploads/2025/03/docs-768x371.jpg 768w, https://cdn.clever-cloud.com/uploads/2025/03/docs-1536x743.jpg 1536w, https://cdn.clever-cloud.com/uploads/2025/03/docs-2048x990.jpg 2048w, https://cdn.clever-cloud.com/uploads/2025/03/docs-1368x661.jpg 1368w" sizes="(max-width: 2560px) 100vw, 2560px" /></p><!-- wp:paragraph -->
<p>The open-source alternative to Notion, a French government initiative in collaboration with Germany, has become the number 1 topic of discussion on <a href="https://news.ycombinator.com/item?id=43378239" target="_blank" rel="noreferrer noopener">Hacker News</a> over the last 24 hours. In this post, we explain how to deploy and configure Docs on Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">What is Docs?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Docs isn't just an alternative to Notion: it's also a collaborative project from the Direction Interministérielle du Numérique (DINUM) and its German equivalent, the Zentrum Digitale Souveränität (ZENDIS, or Center for Digital Sovereignty).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Docs is one of many initiatives aimed at ensuring the digital sovereignty of governments , not only in their use of digital tools, but also in their creation. At Clever Cloud, we've already had the opportunity to work with various ministries on a daily basis, and we're proud to be able to contribute to the diffusion of these tools.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>As Docs currently runs on Kubernetes, we have explored the possibilities of deploying it using Clever Cloud rather than a kube cluster. Of course, you'll be able to deploy it using Kubernetes when our managed kube product becomes available.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">How to deploy Docs on Clever Cloud</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Docs consists of two main applications:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>A backend (a Django API Rest) in src/backend</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>A frontend (mainly based on Next.js and yarn workspaces) in src/frontend</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>And integrates the following dependencies :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>PostgreSQL database</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Redis</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Keycloak (optional)</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>To deploy it on Clever Cloud, opt for a Python application for the backend, and a Node.js application for the frontend. There's no need to version each subfolder; you can push your code with Git from the repository root and specify which subfolder to deploy using the <code>APP_FOLDER</code> variable for each of your applications.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Backend deployment</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>To take the value from the environment variables injected at runtime on Clever Cloud, we've made a few minor modifications to the code, and also renamed the environment variables for the PostgreSQL database and S3 storage. This last modification allows you to modify the database or buckets, change add-ons and renew identifiers without having to manually modify the value of the variables injected into the application. For smooth deployment of Docs on Clever Cloud, <a href="https://github.com/CleverCloud/docs-example/tree/deploy-on-cc" target="_blank" rel="noreferrer noopener">clone the branch under development on our fork</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Then, on Clever Cloud:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Create a Python application</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Add a PostrgreSQL database</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Create a Cellar add-on (or create the bucket directly, if you already have one) and connect it to the application.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Create a Redis add-on and connect it to the application</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Add the minimum configuration environment variables to your application:</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p><code>APP_FOLDER="/src/backend"<br>CC_PYTHON_MODULE="impress.wsgi:application"<br>CC_PYTHON_VERSION="3"<br>CC_TROUBLESHOOT="true"<br>CELLAR_STORAGE_BUCKET_NAME="your-bucket-name"<br>DJANGO_ALLOWED_HOSTS="frontend-url/*"<br>DJANGO_CONFIGURATION="Development" / "Production"<br>DJANGO_SECRET_KEY="YourNewlyGeneratedKeyHere"<br>DJANGO_SETTINGS_MODULE="impress.settings"<br>DJANGO_SUPERUSER_PASSWORD=""<br>OIDC_OP_AUTHORIZATION_ENDPOINT="&lt;&gt;"<br>OIDC_OP_JWKS_ENDPOINT="&lt;&gt;"<br>OIDC_OP_TOKEN_ENDPOINT="&lt;&gt;"<br>OIDC_OP_USER_ENDPOINT="&lt;&gt;"<br>OIDC_RP_CLIENT_SECRET=""<br>STATIC_URL="frontend url"</code></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Click on the <strong>Exposed configuration</strong> tab and add the variables to be shared with the frontend (the Cellar configuration and Keycloak, if you're adding one).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><br>In your application, add the remote provided in the Python application dashboard (<strong>Information</strong> tab) and name it clever-backend, for example.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Once deployed, you'll be able to connect to the API administration interface on backend-url/admin.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Deploying the frontend</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The Docs frontend requires far fewer dependencies, this one is configured to use yarn worspaces that facilitate both maintenance and the deployment of multiple applications on a single virtual machine on Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>On Clever Cloud:<br></p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Create a Node.js application</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Add the following environment variables:</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p><code>APP_FOLDER="./src/frontend"<br>CC_NODE_BUILD_TOOL="yarn"<br>CC_PRE_BUILD_HOOK="cd ./src/frontend &amp;&amp; yarn install --frozen-lockfile &amp;&amp; yarn app:build"<br>CC_RUN_COMMAND="cd ./src/frontend &amp;&amp; yarn app:start"<br>CC_TROUBLESHOOT="true"<br>NEXT_PUBLIC_API_ORIGIN=""<br>NEXT_PUBLIC_SW_DEACTIVATED="true"<br>NODE_OPTIONS="--max-old-space-size=4096"</code></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Connect the application to the backend (<strong>Linked services</strong> tab), as well as to the database add-on.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>In your application, add the remote provided in the Node.js application dashboard (<strong>Information</strong> tab) and name it clever-frontend, for example.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Push the code, and you'll be able to connect using the authentication you've defined with Keycloak or the Django API.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Go further with Docs</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>This article presents an example of deployment on Clever Cloud, but Docs is a rich project with multiple functionalities that you can activate or customize. To work locally, you'll find instructions for starting the frontend <a href="https://github.com/CleverCloud/docs-example/blob/deploy-on-cc/src/frontend/README.md" target="_blank" rel="noreferrer noopener">here</a>, and for starting the backend <a href="https://github.com/CleverCloud/docs-example/blob/deploy-on-cc/src/backend/README.md">here</a>. We welcome questions and contributions!</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to deploy Apache Superset on Clever Cloud</title>
		<link>https://www.clever.cloud/blog/engineering/2021/05/04/how-to-deploy-apache-superset-on-clever-cloud/</link>
		
		<dc:creator><![CDATA[Aurélien Hebert]]></dc:creator>
		<pubDate>Tue, 04 May 2021 09:15:00 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[tutorial]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2021/05/04/how-to-deploy-apache-superset-on-clever-cloud/</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/superset-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="superset 1" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2021/08/superset-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/superset-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/superset-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/superset-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/superset-1-1368x528.jpg 1368w" sizes="(max-width: 1400px) 100vw, 1400px" /></p>At Clever Cloud we manage most of our own data and when we want to gather a particular information, we open our SQL interpreter and query all the things manually. This somehow worked because most of us are technical but it's not necessary the case anymore. So we want a nice dashboarding solution to make data available in a nicer way. This is how we came to try Superset.

<span id="more-2834"></span>

What is Superset? In their own words:
<blockquote>Superset is fast, lightweight, intuitive, and loaded with options that make it easy for users of all skill sets to explore and visualize their data.</blockquote>
You can configure different sort of visualizations from simple line charts to highly detailed geo-spatial charts and organize them in dashboard. Take a look at <a href="https://superset.apache.org/">their documentation</a> to grasp the full extent of what you can do.
<h2 id="how-to-deploy-superset">How to deploy Superset</h2>
Superset is written in Python and requires a PostgreSQL database. In Clever Cloud terms it means you will need to create a brand <a href="https://www.clever.cloud/developers/deploy/application/python/python_apps/">new Python runtime</a> with a <a href="https://www.clever.cloud/developers/deploy/addon/postgresql/">PostgreSQL addon</a>.
<pre><code class="language-bash"># Clone last superset release
git clone --depth 1 -b 0.38.1  https://github.com/apache/superset.git

# Move in superset repository
cd superset

# Create the python application
clever create --type python Superset

# Create the PostgreSQL instance                                
clever addon create postgresql-addon --plan m SupersetPG
    
# link the addon 
clever service link-addon SupersetPG
</code></pre>
Once the application is created, edit it's information. As you need to build Superset backend and frontend, you need to enable a <a href="https://www.clever.cloud/developers/administrate/apps-management/#edit-application-configuration">dedicated build instance</a>, select the <code>L</code> one. Don't foget to save the update.
<h3 id="superset-environment">Superset environment</h3>
Set the following environment, <code>YOUR_APP_ID</code> corresponds to your own application id, <code>A_SECRET_KEY</code> is a random secret key you choose, and <code>AN_ADMIN_PASSWORD</code> will be the admin password for the superset application:
<pre><code class="language-bash"># Use gunicorn as python mode 
clever env set CC_PYTHON_BACKEND gunicorn

# Start the app using create_app() 
clever env set CC_PYTHON_MODULE superset.app:create_app()

# Python version to use
clever env set CC_PYTHON_VERSION 3.7

# Load all superset requirements
clever env set CC_PIP_REQUIREMENTS_FILE requirements/base.txt

# Application port
clever env set PORT 8080

# PYTHONPATH
clever env set PYTHONPATH /home/bas/YOUR_APP_ID/config/

# App secret key
clever env set SECRET_KEY A_SECRET_KEY

# Post build commands
clever env set CC_POST_BUILD_HOOK ./init.sh

# Superset admin password
clever env set ADMIN_PASSWORD AN_ADMIN_PASSWORD
</code></pre>
<h3 id="configure-superset">Configure superset</h3>
Superset need a local config python file. Wrote locally a <code>clever_config.py</code>:
<pre><code class="language-python">import os
# Superset specific config
ROW_LIMIT = 5000

SUPERSET_WEBSERVER_PORT = os.getenv("PORT")
SUPERSET_WEBSERVER_ADDRESS = "0.0.0.0"

# Flask App Builder configuration
# Your App secret key
SECRET_KEY = os.getenv("SECRET_KEY")

# The SQLAlchemy connection string to your database backend
# This connection defines the path to the database that stores your
# superset metadata (slices, connections, tables, dashboards, ...).
# Note that the connection information to connect to the datasources
# you want to explore are managed directly in the web UI
SQLALCHEMY_DATABASE_URI = os.getenv("POSTGRESQL_ADDON_URI")

# Flask-WTF flag for CSRF
WTF_CSRF_ENABLED = True
# Add endpoints that need to be exempt from CSRF protection
WTF_CSRF_EXEMPT_LIST = []
# A CSRF token that expires in 1 year
WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365

# Set this API key to enable Mapbox visualizations
MAPBOX_API_KEY = ''
</code></pre>
<h3 id="superset-build-scipt">Superset build scipt</h3>
The next step is to write an <code>init.sh</code>file that will include all build tasks for superset:
<pre><code class="language-bash">#!/bin/bash

# Load configuration file in PYTHONPATH
mkdir $APP_HOME/config
cp clever_config.py $APP_HOME/config/superset_config.py

# Create an admin user (you will be prompted to set username, first and last name before setting a password)
superset fab create-admin \
    --username admin \
    --firstname admin \
    --lastname admin \
    --email admin@admin.com \
    --password ${ADMIN_PASSWORD}

# Upgrade the database
superset db upgrade

# Loading examples data set (optional)
superset load_examples

# Create default roles and permissions
superset init

# Build frontend
cd superset-frontend 
npm install -f --no-optional
npm run build
</code></pre>
Clever supports <a href="https://www.clever.cloud/developers/doc/develop/build-hooks/#setting-hooks-up">post build hooks</a>, this <code>init.sh</code> file will be played at the end of the build phase.

It's used to set the config file we wrote before into <code>PYTHONPATH</code> used by the application. Then it will start some superset commands required for the first start of the application (create the admin user if it doesn't exists, upgrade the database, and file it with examples and finally init the superset appication). Those superset commands could be remove of the init file after the first success build. Finally, this script is used to also build the frontend of the superset application.
<h3 id="superset-requirements">Superset requirements</h3>
When you added the <code>CC_PIP_REQUIREMENTS_FILE</code>, it told clever cloud to load custom requirement for superset which are locate in the <code>requirements/base.txt</code> file. As you are using the PostgreSQL add-on, you need to add its requirement in this base file:
<pre><code class="language-bash">echo "psycopg2&gt;=2.7 --no-binary psycopg2" &gt;&gt; requirements/base.txt
</code></pre>
The Clever Cloud python application still needs a local <code>requirements.txt</code> to start the install. Generate it with:
<pre><code class="language-bash">pip3 freeze &gt; requirements.txt 
</code></pre>
As we use gunicorn and the PostgreSQL add-on, they are required in the <code>requirements.txt</code> file, add them:
<pre><code class="language-bash">echo "psycopg2&gt;=2.7 --no-binary psycopg2" &gt;&gt; requirements.txt

# gunicorn valid versions are located in setup.py file
echo "gunicorn&gt;=20.0.2, &lt;20.1" &gt;&gt; requirements.txt
</code></pre>
<h3 id="deploy">Deploy</h3>
Deploy the superset application into Clever cloud:
<pre><code class="language-bash">chmod u+x init.sh

# Add your files
git add .

# Create the first commit
git commit -m "clever init"

# Deploy the application
clever deploy

# Run the application
clever open
</code></pre>
Once this is done you should be able to access the superset application, enjoy!

After the first successful <code>superset</code> deployement you can remove on the <code>init.sh</code> file all commands starting with superset (they are required for the first start).]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/superset-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="superset 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/superset-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/superset-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/superset-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/superset-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/superset-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p>At Clever Cloud we manage most of our own data and when we want to gather a particular information, we open our SQL interpreter and query all the things manually. This somehow worked because most of us are technical but it's not necessary the case anymore. So we want a nice dashboarding solution to make data available in a nicer way. This is how we came to try Superset.

<span id="more-2834"></span>

What is Superset? In their own words:
<blockquote>Superset is fast, lightweight, intuitive, and loaded with options that make it easy for users of all skill sets to explore and visualize their data.</blockquote>
You can configure different sort of visualizations from simple line charts to highly detailed geo-spatial charts and organize them in dashboard. Take a look at <a href="https://superset.apache.org/">their documentation</a> to grasp the full extent of what you can do.
<h2 id="how-to-deploy-superset">How to deploy Superset</h2>
Superset is written in Python and requires a PostgreSQL database. In Clever Cloud terms it means you will need to create a brand <a href="https://www.clever.cloud/developers/deploy/application/python/python_apps/">new Python runtime</a> with a <a href="https://www.clever.cloud/developers/deploy/addon/postgresql/">PostgreSQL addon</a>.
<pre><code class="language-bash"># Clone last superset release
git clone --depth 1 -b 0.38.1  https://github.com/apache/superset.git

# Move in superset repository
cd superset

# Create the python application
clever create --type python Superset

# Create the PostgreSQL instance                                
clever addon create postgresql-addon --plan m SupersetPG
    
# link the addon 
clever service link-addon SupersetPG
</code></pre>
Once the application is created, edit it's information. As you need to build Superset backend and frontend, you need to enable a <a href="https://www.clever.cloud/developers/administrate/apps-management/#edit-application-configuration">dedicated build instance</a>, select the <code>L</code> one. Don't foget to save the update.
<h3 id="superset-environment">Superset environment</h3>
Set the following environment, <code>YOUR_APP_ID</code> corresponds to your own application id, <code>A_SECRET_KEY</code> is a random secret key you choose, and <code>AN_ADMIN_PASSWORD</code> will be the admin password for the superset application:
<pre><code class="language-bash"># Use gunicorn as python mode 
clever env set CC_PYTHON_BACKEND gunicorn

# Start the app using create_app() 
clever env set CC_PYTHON_MODULE superset.app:create_app()

# Python version to use
clever env set CC_PYTHON_VERSION 3.7

# Load all superset requirements
clever env set CC_PIP_REQUIREMENTS_FILE requirements/base.txt

# Application port
clever env set PORT 8080

# PYTHONPATH
clever env set PYTHONPATH /home/bas/YOUR_APP_ID/config/

# App secret key
clever env set SECRET_KEY A_SECRET_KEY

# Post build commands
clever env set CC_POST_BUILD_HOOK ./init.sh

# Superset admin password
clever env set ADMIN_PASSWORD AN_ADMIN_PASSWORD
</code></pre>
<h3 id="configure-superset">Configure superset</h3>
Superset need a local config python file. Wrote locally a <code>clever_config.py</code>:
<pre><code class="language-python">import os
# Superset specific config
ROW_LIMIT = 5000

SUPERSET_WEBSERVER_PORT = os.getenv("PORT")
SUPERSET_WEBSERVER_ADDRESS = "0.0.0.0"

# Flask App Builder configuration
# Your App secret key
SECRET_KEY = os.getenv("SECRET_KEY")

# The SQLAlchemy connection string to your database backend
# This connection defines the path to the database that stores your
# superset metadata (slices, connections, tables, dashboards, ...).
# Note that the connection information to connect to the datasources
# you want to explore are managed directly in the web UI
SQLALCHEMY_DATABASE_URI = os.getenv("POSTGRESQL_ADDON_URI")

# Flask-WTF flag for CSRF
WTF_CSRF_ENABLED = True
# Add endpoints that need to be exempt from CSRF protection
WTF_CSRF_EXEMPT_LIST = []
# A CSRF token that expires in 1 year
WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365

# Set this API key to enable Mapbox visualizations
MAPBOX_API_KEY = ''
</code></pre>
<h3 id="superset-build-scipt">Superset build scipt</h3>
The next step is to write an <code>init.sh</code>file that will include all build tasks for superset:
<pre><code class="language-bash">#!/bin/bash

# Load configuration file in PYTHONPATH
mkdir $APP_HOME/config
cp clever_config.py $APP_HOME/config/superset_config.py

# Create an admin user (you will be prompted to set username, first and last name before setting a password)
superset fab create-admin \
    --username admin \
    --firstname admin \
    --lastname admin \
    --email admin@admin.com \
    --password ${ADMIN_PASSWORD}

# Upgrade the database
superset db upgrade

# Loading examples data set (optional)
superset load_examples

# Create default roles and permissions
superset init

# Build frontend
cd superset-frontend 
npm install -f --no-optional
npm run build
</code></pre>
Clever supports <a href="https://www.clever.cloud/developers/doc/develop/build-hooks/#setting-hooks-up">post build hooks</a>, this <code>init.sh</code> file will be played at the end of the build phase.

It's used to set the config file we wrote before into <code>PYTHONPATH</code> used by the application. Then it will start some superset commands required for the first start of the application (create the admin user if it doesn't exists, upgrade the database, and file it with examples and finally init the superset appication). Those superset commands could be remove of the init file after the first success build. Finally, this script is used to also build the frontend of the superset application.
<h3 id="superset-requirements">Superset requirements</h3>
When you added the <code>CC_PIP_REQUIREMENTS_FILE</code>, it told clever cloud to load custom requirement for superset which are locate in the <code>requirements/base.txt</code> file. As you are using the PostgreSQL add-on, you need to add its requirement in this base file:
<pre><code class="language-bash">echo "psycopg2&gt;=2.7 --no-binary psycopg2" &gt;&gt; requirements/base.txt
</code></pre>
The Clever Cloud python application still needs a local <code>requirements.txt</code> to start the install. Generate it with:
<pre><code class="language-bash">pip3 freeze &gt; requirements.txt 
</code></pre>
As we use gunicorn and the PostgreSQL add-on, they are required in the <code>requirements.txt</code> file, add them:
<pre><code class="language-bash">echo "psycopg2&gt;=2.7 --no-binary psycopg2" &gt;&gt; requirements.txt

# gunicorn valid versions are located in setup.py file
echo "gunicorn&gt;=20.0.2, &lt;20.1" &gt;&gt; requirements.txt
</code></pre>
<h3 id="deploy">Deploy</h3>
Deploy the superset application into Clever cloud:
<pre><code class="language-bash">chmod u+x init.sh

# Add your files
git add .

# Create the first commit
git commit -m "clever init"

# Deploy the application
clever deploy

# Run the application
clever open
</code></pre>
Once this is done you should be able to access the superset application, enjoy!

After the first successful <code>superset</code> deployement you can remove on the <code>init.sh</code> file all commands starting with superset (they are required for the first start).]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Bring your API to the World Within 3 Minutes</title>
		<link>https://www.clever.cloud/blog/engineering/2019/02/12/create-an-api-with-python/</link>
		
		<dc:creator><![CDATA[Valeriane Venance]]></dc:creator>
		<pubDate>Tue, 12 Feb 2019 15:02:00 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[djangorestframework]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[runtime]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2019/02/12/create-an-api-with-python/</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/api-to-the-world-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="api to the world 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/api-to-the-world-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/api-to-the-world-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/api-to-the-world-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/api-to-the-world-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/api-to-the-world-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><p>A couple years ago, I was a developer for a startup which has almost no test coverage. Super enthusiastic me from the past spent a few weeks coding tests, and factories… all that based on the gem FactoryGirl. Two days before I’m satisfied of what I’ve done, they announce that FactoryGirl needs to be upgraded to <a href="https://github.com/thoughtbot/factory_bot_rails" rel="noopener noreferrer" target="_blank">FactoryBot</a>.</p>
<span id="more-2816"></span>

<p>A few days ago, I’m like hey I want to talk about <a href="https://www.django-rest-framework.org/" rel="noopener noreferrer" target="_blank">DRF</a> on Clever Cloud, I’ll make a little API, who cares which python I’m using, let’s use <a href="https://pythonclock.org/" rel="noopener noreferrer" target="_blank">2.7</a>! So I’m coding the project, making <a href="https://github.com/vvenance/personal-website-drf-backend/blob/master/README.md" rel="noopener noreferrer" target="_blank">a nice readme</a> and the python team finally decides to explicitly invite users to migrate to <a href="https://www.python.org/download/releases/3.0/" rel="noopener noreferrer" target="_blank">python 3</a>….</p>
<p>Anyway ! the project is <a href="https://github.com/vvenance/personal-website-drf-backend" rel="noopener noreferrer" target="_blank">here</a> all you have to do is to <code>git clone</code> the repo or have your own DRF repo locally.</p>
<p>If you use your own repo, make sure to have the following lines in your settings.py</p>
<pre><code class="language-python">PRODUCTION = True
if PRODUCTION:
    DATABASES = {
        &#39;default&#39;: {
            &#39;ENGINE&#39;: &#39;django.db.backends.postgresql_psycopg2&#39;,
            &#39;NAME&#39;: os.environ.get(&#39;POSTGRESQL_ADDON_DB&#39;),
            &#39;USER&#39;: os.environ.get(&#39;POSTGRESQL_ADDON_USER&#39;),
            &#39;PASSWORD&#39;: os.environ.get(&#39;POSTGRESQL_ADDON_PASSWORD&#39;),
            &#39;HOST&#39;: os.environ.get(&#39;POSTGRESQL_ADDON_HOST&#39;),
            &#39;PORT&#39;: os.environ.get(&#39;POSTGRESQL_ADDON_PORT&#39;),
        }
    }
</code></pre>
<p>go to <a href="https://console.clever-cloud.com/" rel="noopener noreferrer" target="_blank">Clever Cloud console</a> and select create a new application. Select brand new app.</p>
<figure style="position:relative;width:50%;height:auto;margin:0 auto">
    <img data-action="zoom"  alt="select create a new clever cloud application" src="https://cdn.clever-cloud.com/uploads/2021/08/click-create-app.png"/>
</figure>
<figure style="position:relative;width:50%;height:auto;margin:0 auto">
    <img data-action="zoom"  alt="create a new application" src="https://cdn.clever-cloud.com/uploads/2021/08/create-new-app.png"/>
</figure>

<p>Click next and select python, then name you application.</p>
<figure style="position:relative;width:50%;height:auto;margin:0 auto">
    <img data-action="zoom" alt="select python on the clever cloud console" src="https://cdn.clever-cloud.com/uploads/2021/08/select-python.png"/>
</figure>
<figure style="position:relative;width:50%;height:auto;margin:0 auto">
    <img data-action="zoom"  alt="name the application" src="https://cdn.clever-cloud.com/uploads/2021/08/name-clever-app.png"/>
</figure>

<p>The Clever Cloud console will ask you if you want to link an add on. Select postgreSQL and name your add-on</p>
<figure style="position:relative;width:50%;height:auto;margin:0 auto">
    <img data-action="zoom"  alt="select postgreSQL application" src="https://cdn.clever-cloud.com/uploads/2021/08/select-postgres.png"/>
</figure>
<figure style="position:relative;width:50%;height:auto;margin:0 auto">
    <img data-action="zoom"  alt="name the add on" src="https://cdn.clever-cloud.com/uploads/2021/08/name-add-on.png"/>
</figure>

<p>Just wait for the Clever console to set up your add on and application.</p>
<p>When your application is ready, you&#39;re invited to add environment variables.</p>
<p>If you use my project click on the expert mode button</p>
<figure>
  <img data-action="zoom" alt="select expert mode for adding env variables" src="https://cdn.clever-cloud.com/uploads/2021/08/expert-mode.png"/>
</figure>

<p>and paste the following :</p>
<pre><code class="language-bash">CC_PYTHON_MODULE=personal_website_backend.wsgi:application
CUSTOM_SECRET_KEY=your_custom_secret_key
PORT=8080
PRODUCTION=True
</code></pre>
<p>You can generate a secret key 50 chars long (DRF requirement) <a href="http://www.unit-conversion.info/texttools/random-string-generator/" rel="noopener noreferrer" target="_blank">here</a>.</p>
<p>If you use your own repo, add the env vars you need, but make sure to have at least <code>CC_PYTHON_MODULE=&lt;your_module_name&gt;.wsgi:application</code></p>
<p>Then click next, a new screen will display with a git command to add a new remote to your repo and do your first deploy</p>
<figure>
  <img data-action="zoom" alt="clever cloud instructions for git remote" src="https://cdn.clever-cloud.com/uploads/2021/08/clever-git-instructions.png"/>
</figure>

<p>Copy these lines and paste them directly in your console while being in your repo</p>
<pre><code class="language-bash">git remote add clever git+ssh:\/\/git@push-par-clevercloud-customers.services.clever-cloud.com/&lt;your_app_id&gt;.git
git push -u clever master
</code></pre>
<p>Go back to Clever Cloud console and just look at the deployment logs of your app. It will tell you when your app is up, so just go to the overview page and click on the link symbol to visit your app.</p>
<p>If you want to see the full procedure live, have a look <a href="https://www.useloom.com/share/cc5352092d994d6fa95629c29194f1b5" rel="noopener noreferrer" target="_blank">here</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/api-to-the-world-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="api to the world 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/api-to-the-world-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/api-to-the-world-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/api-to-the-world-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/api-to-the-world-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/api-to-the-world-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><p>A couple years ago, I was a developer for a startup which has almost no test coverage. Super enthusiastic me from the past spent a few weeks coding tests, and factories… all that based on the gem FactoryGirl. Two days before I’m satisfied of what I’ve done, they announce that FactoryGirl needs to be upgraded to <a href="https://github.com/thoughtbot/factory_bot_rails" rel="noopener noreferrer" target="_blank">FactoryBot</a>.</p>
<span id="more-2816"></span>

<p>A few days ago, I’m like hey I want to talk about <a href="https://www.django-rest-framework.org/" rel="noopener noreferrer" target="_blank">DRF</a> on Clever Cloud, I’ll make a little API, who cares which python I’m using, let’s use <a href="https://pythonclock.org/" rel="noopener noreferrer" target="_blank">2.7</a>! So I’m coding the project, making <a href="https://github.com/vvenance/personal-website-drf-backend/blob/master/README.md" rel="noopener noreferrer" target="_blank">a nice readme</a> and the python team finally decides to explicitly invite users to migrate to <a href="https://www.python.org/download/releases/3.0/" rel="noopener noreferrer" target="_blank">python 3</a>….</p>
<p>Anyway ! the project is <a href="https://github.com/vvenance/personal-website-drf-backend" rel="noopener noreferrer" target="_blank">here</a> all you have to do is to <code>git clone</code> the repo or have your own DRF repo locally.</p>
<p>If you use your own repo, make sure to have the following lines in your settings.py</p>
<pre><code class="language-python">PRODUCTION = True
if PRODUCTION:
    DATABASES = {
        &#39;default&#39;: {
            &#39;ENGINE&#39;: &#39;django.db.backends.postgresql_psycopg2&#39;,
            &#39;NAME&#39;: os.environ.get(&#39;POSTGRESQL_ADDON_DB&#39;),
            &#39;USER&#39;: os.environ.get(&#39;POSTGRESQL_ADDON_USER&#39;),
            &#39;PASSWORD&#39;: os.environ.get(&#39;POSTGRESQL_ADDON_PASSWORD&#39;),
            &#39;HOST&#39;: os.environ.get(&#39;POSTGRESQL_ADDON_HOST&#39;),
            &#39;PORT&#39;: os.environ.get(&#39;POSTGRESQL_ADDON_PORT&#39;),
        }
    }
</code></pre>
<p>go to <a href="https://console.clever-cloud.com/" rel="noopener noreferrer" target="_blank">Clever Cloud console</a> and select create a new application. Select brand new app.</p>
<figure style="position:relative;width:50%;height:auto;margin:0 auto">
    <img data-action="zoom"  alt="select create a new clever cloud application" src="https://cdn.clever-cloud.com/uploads/2021/08/click-create-app.png"/>
</figure>
<figure style="position:relative;width:50%;height:auto;margin:0 auto">
    <img data-action="zoom"  alt="create a new application" src="https://cdn.clever-cloud.com/uploads/2021/08/create-new-app.png"/>
</figure>

<p>Click next and select python, then name you application.</p>
<figure style="position:relative;width:50%;height:auto;margin:0 auto">
    <img data-action="zoom" alt="select python on the clever cloud console" src="https://cdn.clever-cloud.com/uploads/2021/08/select-python.png"/>
</figure>
<figure style="position:relative;width:50%;height:auto;margin:0 auto">
    <img data-action="zoom"  alt="name the application" src="https://cdn.clever-cloud.com/uploads/2021/08/name-clever-app.png"/>
</figure>

<p>The Clever Cloud console will ask you if you want to link an add on. Select postgreSQL and name your add-on</p>
<figure style="position:relative;width:50%;height:auto;margin:0 auto">
    <img data-action="zoom"  alt="select postgreSQL application" src="https://cdn.clever-cloud.com/uploads/2021/08/select-postgres.png"/>
</figure>
<figure style="position:relative;width:50%;height:auto;margin:0 auto">
    <img data-action="zoom"  alt="name the add on" src="https://cdn.clever-cloud.com/uploads/2021/08/name-add-on.png"/>
</figure>

<p>Just wait for the Clever console to set up your add on and application.</p>
<p>When your application is ready, you&#39;re invited to add environment variables.</p>
<p>If you use my project click on the expert mode button</p>
<figure>
  <img data-action="zoom" alt="select expert mode for adding env variables" src="https://cdn.clever-cloud.com/uploads/2021/08/expert-mode.png"/>
</figure>

<p>and paste the following :</p>
<pre><code class="language-bash">CC_PYTHON_MODULE=personal_website_backend.wsgi:application
CUSTOM_SECRET_KEY=your_custom_secret_key
PORT=8080
PRODUCTION=True
</code></pre>
<p>You can generate a secret key 50 chars long (DRF requirement) <a href="http://www.unit-conversion.info/texttools/random-string-generator/" rel="noopener noreferrer" target="_blank">here</a>.</p>
<p>If you use your own repo, add the env vars you need, but make sure to have at least <code>CC_PYTHON_MODULE=&lt;your_module_name&gt;.wsgi:application</code></p>
<p>Then click next, a new screen will display with a git command to add a new remote to your repo and do your first deploy</p>
<figure>
  <img data-action="zoom" alt="clever cloud instructions for git remote" src="https://cdn.clever-cloud.com/uploads/2021/08/clever-git-instructions.png"/>
</figure>

<p>Copy these lines and paste them directly in your console while being in your repo</p>
<pre><code class="language-bash">git remote add clever git+ssh:\/\/git@push-par-clevercloud-customers.services.clever-cloud.com/&lt;your_app_id&gt;.git
git push -u clever master
</code></pre>
<p>Go back to Clever Cloud console and just look at the deployment logs of your app. It will tell you when your app is up, so just go to the overview page and click on the link symbol to visit your app.</p>
<p>If you want to see the full procedure live, have a look <a href="https://www.useloom.com/share/cc5352092d994d6fa95629c29194f1b5" rel="noopener noreferrer" target="_blank">here</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>One Framework a Day keeps the Boredom Away: Django</title>
		<link>https://www.clever.cloud/blog/features/2017/10/10/1fdba-django-taiga/</link>
		
		<dc:creator><![CDATA[Laurent Doguin]]></dc:creator>
		<pubDate>Tue, 10 Oct 2017 17:15:00 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[1fdba]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2017/10/10/1fdba-django-taiga/</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/1fdba-django-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="1fdba django 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/1fdba-django-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/1fdba-django-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/1fdba-django-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/1fdba-django-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/1fdba-django-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p>Welcome to this new edition of <a href="/blog/features/2017/10/09/1fdba-step0/">One Framework a Day keeps the Boredom Away</a>. In this series I will show you how to deploy a particular framework on Clever Cloud every day until I want to go back to boredom. Today it's about Django.

<span id="more-2906"></span>

In each post of this series we'll see how to deploy a particular framework on Clever Cloud. Today we are taking a look at <a href="https://www.djangoproject.com/">Django</a>.

If you want to tag along, make sure you have git, a Clever Cloud account and that you have installed our CLI <a href="https://gitHub.com/CleverCloud/clever-tools">Clever-Tools</a>.
<h2 id="what-is-django">What is Django?</h2>
<blockquote>Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.</blockquote>
It's also one of the most popular web frameworks, especially in the Python world. We already have a <a href="https://www.clever.cloud/developers/python/python-django-sample/">simple example</a> on how to run a Django based site in our documentation. I invite you to check it out first. Since it's so simple today I am going to use another Django based website. Lurking on GitHub I came across <a href="https://taiga.io/">Taiga</a>. It's a project management platform. It looks useful and beautiful so why not try it?
<h2 id="setup">Setup</h2>
Taiga writes in a PostgreSQL database and on a filesystem. So I know I will need an FS-Bucket add-on and a PostgreSQL add-on. It's composed of two different projects. There is the backend written in Python using Django. The other is an AngularJS frontend. Most of the work will consist of making sure this can be configured with environment variables.

To start configuring the backend we need to:
<ul>
 	<li>Clone the project: <code>git clone https://gitHub.com/taigaio/taiga-back.git</code></li>
 	<li>Get in the project: <code>cd taiga-back</code></li>
 	<li>Create our Postgres add-on: <code>clever addon create postgresql-addon --plan dev --region eu taigaPG</code></li>
 	<li>Create our FS Bucket add-on: <code>clever addon create fs-bucket --plan s --region eu taigaFS</code></li>
 	<li>Create our application: <code>clever create --type python taiga --region par</code></li>
 	<li>Link our Postgres add-on: <code>clever service link-addon taigaPG</code></li>
 	<li>Link our FS Bucket add-on: <code>clever service link-addon taigaFS</code></li>
 	<li>Define the python version to use: <code>clever env set PYTHON_VERSION 3</code></li>
 	<li>Define where to mount our FS Bucket: <code>clever env set CC_FS_BUCKET /data:`clever env | awk  -F = '/BUCKET_HOST/ { print $2}'` </code></li>
 	<li>Define the secret used by the app: <code>clever env set SECRET theveryultratopsecretkey</code></li>
 	<li>Define the frontend domain name: <code>clever env set FRONT_DOMAIN taigald.cleverapps.io"</code></li>
 	<li>Define the HTTP schema: <code>clever env set HTTP_SCHEMA https"</code></li>
 	<li>Define where to store media: <code>clever env set STORAGE_MEDIA /data/media"</code></li>
 	<li>Define where to store static files: <code>clever env set STORAGE_STATIC /data/static"</code></li>
</ul>
Now it's time to tell Taiga how to retrieve and use our environment variables. To do so we need to create a new file called <code>local.py</code> under the <code>settings</code> directory: <code>touch settings/local.py</code>

In this file we can setup everything:
<pre><code class="language-python">from .common import *
import os

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.getenv("POSTGRESQL_ADDON_DB"),
        'USER': os.getenv("POSTGRESQL_ADDON_USER"),
        'PASSWORD': os.getenv("POSTGRESQL_ADDON_PASSWORD"),
        'HOST': os.getenv("POSTGRESQL_ADDON_HOST"),
        'PORT': os.getenv("POSTGRESQL_ADDON_PORT"),
    }
}

MEDIA_ROOT = os.path.join(BASE_DIR, os.getenv("STORAGE_MEDIA"))
STATIC_ROOT = os.path.join(BASE_DIR, os.getenv("STORAGE_STATIC"))
MEDIA_URL = ""https://" +  os.getenv("FRONT_DOMAIN") + os.getenv("STORAGE_MEDIA")
STATIC_URL = "https://" +  os.getenv("FRONT_DOMAIN") + os.getenv("STORAGE_STATIC")
SITES["front"]["scheme"] = os.getenv("HTTP_SCHEMA")
SITES["front"]["domain"] = os.getenv("FRONT_DOMAIN")

SECRET_KEY = os.getenv("SECRET")

DEBUG = False
PUBLIC_REGISTER_ENABLED = True
</code></pre>
Taiga expects all your folders to be already created. To make sure this happens we can use a <a href="https://www.clever.cloud/developers/doc/develop/build-hooks/#hooks-types">pre-build hook</a>.
<ul>
 	<li>Create the hook script: <code>mkdir clevercloud; touch clevercloud/buildDirectories.sh &amp;&amp; chmod +x ./clevercloud/buildDirectories.sh</code></li>
 	<li>Use the following code for the shell script:
<pre><code class="language-bash">[ -d $STORAGE_STATIC ] || mkdir -p $STORAGE_STATIC
[ -d $STORAGE_MEDIA ] || mkdir -p $STORAGE_MEDIA
</code></pre>
</li>
 	<li>Define the hook: <code>clever env set CC_PRE_BUILD_HOOK ./clevercloud/buildDirectories.sh</code></li>
</ul>
Something else we need to do since there are going to be two applications is to setup a proper domain name. Here I am using <code>cleverapps.io</code>, which is automatically configured for SSL support: <code>clever domain add taigabackld.cleverapps.io</code>

You can commit all the new files in a new branch. You are now done with the minimal backend configuration.

Moving on to the frontend configuration. They have a prebuilt version of the site so that is something we can use.
<ul>
 	<li>Clone the project: <code>git clone https://gitHub.com/taigaio/taiga-front-dist.git</code></li>
 	<li>Get in the project: <code>cd taiga-back</code></li>
 	<li>Get the latest stable version: <code>git checkout stable</code></li>
 	<li>Copy the default configuration file: <code>cp dist/conf.example.json dist/conf.json</code></li>
 	<li>Change the backend URL: <code>sed -i 's,http://localhost:8000/api/v1/,http://taigabackld.cleverapps.io/api/v1/,g' dist/conf.json</code></li>
 	<li>Create the static website: <code>clever create --type static-apache taiga-front</code></li>
 	<li>Link this website to our FS Bucket addon: <code>clever service link-addon taigaFS</code></li>
 	<li>Setup its mount point: <code>clever env set CC_FS_BUCKET /dist/data:`clever env | awk  -F = '/BUCKET_HOST/ { print $2}'` </code></li>
 	<li>Add a domain name: <code>clever domain add taigald.cleverapps.io</code></li>
</ul>
Since the root of the site is the <code>dist</code> folder, we need to configure it. This can be done by creating a <code>clevercloud/php.json</code> file containing:
<pre><code class="language-json">{
  "deploy": {
    "webroot": "/dist"
  }
}
</code></pre>
Now go ahead and commit this. You are done with the configuration of this project.
<h2 id="deploy">Deploy</h2>
We have two applications to deploy. First the backend. It's a Python runtime so here's what you need to do:
<ul>
 	<li>Define the Python module we want to start: <code>clever env set CC_PYTHON_MODULE taiga.wsgi</code></li>
 	<li>Define the Python backend to use: <code>clever env set PYTHON_BACKEND gunicorn</code></li>
 	<li>Deploy the app: <code>clever deploy</code></li>
</ul>
If everything goes well you should see the logs of the application being built, then logs should show your app is ready. We then need to initialize the data. Run <code>clever ssh</code> and it will connect you to the running VM. From there, get into your application folder, for me it's <code>cd app_254da6af-3642-4c98-afd3-48e46e3adb23/</code>. Now we can use python scripts to intialize all the things:
<pre><code class="language-bash">python manage.py migrate --noinput
python manage.py loaddata initial_user
python manage.py loaddata initial_project_templates
python manage.py compilemessages
python manage.py collectstatic --noinput
python manage.py sample_data
</code></pre>
Last one takes a bit of time and is not mandatory. It's some sample data if you want to try an existing install of Taiga.

Moving on to the front end part. All you need to do is run <code>clever deploy</code> and then <code>clever open</code>. You should have Taiga open in your default browser, ready for you to login with user <code>admin</code> and password <code>123123</code>.

That's it, have fun with your new project management website :)]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/1fdba-django-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="1fdba django 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/1fdba-django-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/1fdba-django-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/1fdba-django-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/1fdba-django-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/1fdba-django-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p>Welcome to this new edition of <a href="/blog/features/2017/10/09/1fdba-step0/">One Framework a Day keeps the Boredom Away</a>. In this series I will show you how to deploy a particular framework on Clever Cloud every day until I want to go back to boredom. Today it's about Django.

<span id="more-2906"></span>

In each post of this series we'll see how to deploy a particular framework on Clever Cloud. Today we are taking a look at <a href="https://www.djangoproject.com/">Django</a>.

If you want to tag along, make sure you have git, a Clever Cloud account and that you have installed our CLI <a href="https://gitHub.com/CleverCloud/clever-tools">Clever-Tools</a>.
<h2 id="what-is-django">What is Django?</h2>
<blockquote>Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.</blockquote>
It's also one of the most popular web frameworks, especially in the Python world. We already have a <a href="https://www.clever.cloud/developers/python/python-django-sample/">simple example</a> on how to run a Django based site in our documentation. I invite you to check it out first. Since it's so simple today I am going to use another Django based website. Lurking on GitHub I came across <a href="https://taiga.io/">Taiga</a>. It's a project management platform. It looks useful and beautiful so why not try it?
<h2 id="setup">Setup</h2>
Taiga writes in a PostgreSQL database and on a filesystem. So I know I will need an FS-Bucket add-on and a PostgreSQL add-on. It's composed of two different projects. There is the backend written in Python using Django. The other is an AngularJS frontend. Most of the work will consist of making sure this can be configured with environment variables.

To start configuring the backend we need to:
<ul>
 	<li>Clone the project: <code>git clone https://gitHub.com/taigaio/taiga-back.git</code></li>
 	<li>Get in the project: <code>cd taiga-back</code></li>
 	<li>Create our Postgres add-on: <code>clever addon create postgresql-addon --plan dev --region eu taigaPG</code></li>
 	<li>Create our FS Bucket add-on: <code>clever addon create fs-bucket --plan s --region eu taigaFS</code></li>
 	<li>Create our application: <code>clever create --type python taiga --region par</code></li>
 	<li>Link our Postgres add-on: <code>clever service link-addon taigaPG</code></li>
 	<li>Link our FS Bucket add-on: <code>clever service link-addon taigaFS</code></li>
 	<li>Define the python version to use: <code>clever env set PYTHON_VERSION 3</code></li>
 	<li>Define where to mount our FS Bucket: <code>clever env set CC_FS_BUCKET /data:`clever env | awk  -F = '/BUCKET_HOST/ { print $2}'` </code></li>
 	<li>Define the secret used by the app: <code>clever env set SECRET theveryultratopsecretkey</code></li>
 	<li>Define the frontend domain name: <code>clever env set FRONT_DOMAIN taigald.cleverapps.io"</code></li>
 	<li>Define the HTTP schema: <code>clever env set HTTP_SCHEMA https"</code></li>
 	<li>Define where to store media: <code>clever env set STORAGE_MEDIA /data/media"</code></li>
 	<li>Define where to store static files: <code>clever env set STORAGE_STATIC /data/static"</code></li>
</ul>
Now it's time to tell Taiga how to retrieve and use our environment variables. To do so we need to create a new file called <code>local.py</code> under the <code>settings</code> directory: <code>touch settings/local.py</code>

In this file we can setup everything:
<pre><code class="language-python">from .common import *
import os

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.getenv("POSTGRESQL_ADDON_DB"),
        'USER': os.getenv("POSTGRESQL_ADDON_USER"),
        'PASSWORD': os.getenv("POSTGRESQL_ADDON_PASSWORD"),
        'HOST': os.getenv("POSTGRESQL_ADDON_HOST"),
        'PORT': os.getenv("POSTGRESQL_ADDON_PORT"),
    }
}

MEDIA_ROOT = os.path.join(BASE_DIR, os.getenv("STORAGE_MEDIA"))
STATIC_ROOT = os.path.join(BASE_DIR, os.getenv("STORAGE_STATIC"))
MEDIA_URL = ""https://" +  os.getenv("FRONT_DOMAIN") + os.getenv("STORAGE_MEDIA")
STATIC_URL = "https://" +  os.getenv("FRONT_DOMAIN") + os.getenv("STORAGE_STATIC")
SITES["front"]["scheme"] = os.getenv("HTTP_SCHEMA")
SITES["front"]["domain"] = os.getenv("FRONT_DOMAIN")

SECRET_KEY = os.getenv("SECRET")

DEBUG = False
PUBLIC_REGISTER_ENABLED = True
</code></pre>
Taiga expects all your folders to be already created. To make sure this happens we can use a <a href="https://www.clever.cloud/developers/doc/develop/build-hooks/#hooks-types">pre-build hook</a>.
<ul>
 	<li>Create the hook script: <code>mkdir clevercloud; touch clevercloud/buildDirectories.sh &amp;&amp; chmod +x ./clevercloud/buildDirectories.sh</code></li>
 	<li>Use the following code for the shell script:
<pre><code class="language-bash">[ -d $STORAGE_STATIC ] || mkdir -p $STORAGE_STATIC
[ -d $STORAGE_MEDIA ] || mkdir -p $STORAGE_MEDIA
</code></pre>
</li>
 	<li>Define the hook: <code>clever env set CC_PRE_BUILD_HOOK ./clevercloud/buildDirectories.sh</code></li>
</ul>
Something else we need to do since there are going to be two applications is to setup a proper domain name. Here I am using <code>cleverapps.io</code>, which is automatically configured for SSL support: <code>clever domain add taigabackld.cleverapps.io</code>

You can commit all the new files in a new branch. You are now done with the minimal backend configuration.

Moving on to the frontend configuration. They have a prebuilt version of the site so that is something we can use.
<ul>
 	<li>Clone the project: <code>git clone https://gitHub.com/taigaio/taiga-front-dist.git</code></li>
 	<li>Get in the project: <code>cd taiga-back</code></li>
 	<li>Get the latest stable version: <code>git checkout stable</code></li>
 	<li>Copy the default configuration file: <code>cp dist/conf.example.json dist/conf.json</code></li>
 	<li>Change the backend URL: <code>sed -i 's,http://localhost:8000/api/v1/,http://taigabackld.cleverapps.io/api/v1/,g' dist/conf.json</code></li>
 	<li>Create the static website: <code>clever create --type static-apache taiga-front</code></li>
 	<li>Link this website to our FS Bucket addon: <code>clever service link-addon taigaFS</code></li>
 	<li>Setup its mount point: <code>clever env set CC_FS_BUCKET /dist/data:`clever env | awk  -F = '/BUCKET_HOST/ { print $2}'` </code></li>
 	<li>Add a domain name: <code>clever domain add taigald.cleverapps.io</code></li>
</ul>
Since the root of the site is the <code>dist</code> folder, we need to configure it. This can be done by creating a <code>clevercloud/php.json</code> file containing:
<pre><code class="language-json">{
  "deploy": {
    "webroot": "/dist"
  }
}
</code></pre>
Now go ahead and commit this. You are done with the configuration of this project.
<h2 id="deploy">Deploy</h2>
We have two applications to deploy. First the backend. It's a Python runtime so here's what you need to do:
<ul>
 	<li>Define the Python module we want to start: <code>clever env set CC_PYTHON_MODULE taiga.wsgi</code></li>
 	<li>Define the Python backend to use: <code>clever env set PYTHON_BACKEND gunicorn</code></li>
 	<li>Deploy the app: <code>clever deploy</code></li>
</ul>
If everything goes well you should see the logs of the application being built, then logs should show your app is ready. We then need to initialize the data. Run <code>clever ssh</code> and it will connect you to the running VM. From there, get into your application folder, for me it's <code>cd app_254da6af-3642-4c98-afd3-48e46e3adb23/</code>. Now we can use python scripts to intialize all the things:
<pre><code class="language-bash">python manage.py migrate --noinput
python manage.py loaddata initial_user
python manage.py loaddata initial_project_templates
python manage.py compilemessages
python manage.py collectstatic --noinput
python manage.py sample_data
</code></pre>
Last one takes a bit of time and is not mandatory. It's some sample data if you want to try an existing install of Taiga.

Moving on to the front end part. All you need to do is run <code>clever deploy</code> and then <code>clever open</code>. You should have Taiga open in your default browser, ready for you to login with user <code>admin</code> and password <code>123123</code>.

That's it, have fun with your new project management website :)]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Python is out of beta</title>
		<link>https://www.clever.cloud/blog/company/2013/07/07/python-out-of-beta/</link>
		
		<dc:creator><![CDATA[Clément Nivolle]]></dc:creator>
		<pubDate>Sun, 07 Jul 2013 00:00:00 +0000</pubDate>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[Pricing]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2013/07/07/python-out-of-beta/</guid>

					<description><![CDATA[Version française Up to now Python was in free beta. We are glad to notify you that it comes to an end and that Python is now charged. The smallest Scaler (1 VCPU, 512 Mo RAM) costs 27 EUR/month. You can have a look at our pricing simulator if you need more ressources or customisation. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><em><a href="#fr">Version française</a></em></p>
<p>Up to now Python was in free beta. We are glad to notify you that it comes to an end and that Python is now charged. The smallest Scaler (1 VCPU, 512 Mo RAM) costs 27 EUR/month.</p>
<p><span id="more-2727"></span></p>
<p>You can have a look at our <a href="https://www.clever.cloud/pricing/" target="_blank" rel="noopener noreferrer">pricing simulator</a> if you need more ressources or customisation.</p>
<p>Feel free to <a href="mailto:contact@clever-cloud.com">contact us</a> if you have any other question!</p>
<hr />
<p><em>French version</em></p>
<p>Jusqu&#8217;à maintenant, Python était encore en béta et gratuit. Ce service sera dorénavant facturé. Le plus petit scaler (1 VCPU, 512 Mo RAM) coute 27EUR/mois.</p>
<p>Vous pouvez consulter notre <a href="https://www.clever.cloud/fr/tarification/" target="_blank" rel="noopener noreferrer">simulateur de prix</a> pour des besoins plus fins.</p>
<p>N&#8217;hésitez pas à nous <a href="mailto:contact@clever-cloud.com">contacter</a> si vous avez des questions !</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Python now in beta &#8211; Available soon</title>
		<link>https://www.clever.cloud/blog/features/2013/03/26/django-on-clever-cloud/</link>
		
		<dc:creator><![CDATA[Clément Nivolle]]></dc:creator>
		<pubDate>Tue, 26 Mar 2013 00:00:00 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[Applications]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2013/03/26/django-on-clever-cloud/</guid>

					<description><![CDATA[We&#39;re pleased to announce the support of Python on Clever Cloud. The Django framework is supported as well. Here&#39;s a demo. Python is a programming language that lets you work more quickly and integrate your systems more effectively. Django (aka The Web framework for perfectionists with deadlines) is a high-level Python Web framework that encourages [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>We&#39;re pleased to announce the support of Python on Clever Cloud. The Django framework is supported as well. <a href="http://python-django.cleverapps.io/" rel="noopener noreferrer" target="_blank">Here&#39;s a demo</a>.</p>
<div class="center" style="margin: 0 auto 20px; width: 300px"><a href="https://www.youtube.com/watch?v=IAooXLAPoBQ" rel="noopener noreferrer" target="_blank" title="The D is silent"><img decoding="async" alt="django roles"  src="https://www2.cleverapps.io/app/uploads/2021/08/django-logo-positive.png"/></a></div>
<p><span id="more-2841"></span><br />
Python is a programming language that lets you work more quickly and integrate your systems more effectively.</p>
<p>Django (aka <em>The Web framework for perfectionists with deadlines</em>) is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.</p>
<p>Still in beta, this feature will be available this month, for everyone.</p>
<p>If you want to be part of the beta-users, please contact us to <a href="mailto:support@clever-cloud.com">mailto:support@clever-cloud.com</a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
