<?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>mysql Archives | Clever Cloud</title>
	<atom:link href="https://www.clever.cloud/blog/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.clever.cloud/blog/tag/mysql/</link>
	<description>From Code to Product</description>
	<lastBuildDate>Wed, 13 Dec 2023 17:02:28 +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>mysql Archives | Clever Cloud</title>
	<link>https://www.clever.cloud/blog/tag/mysql/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Auto managed connection pooling for MySQL add-ons</title>
		<link>https://www.clever.cloud/blog/features/2021/05/05/proxysql-release/</link>
		
		<dc:creator><![CDATA[Arnaud Lefebvre]]></dc:creator>
		<pubDate>Wed, 05 May 2021 13:44:00 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[connection]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[pool]]></category>
		<category><![CDATA[proxysql]]></category>
		<category><![CDATA[release]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2021/05/05/proxysql-release/</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/mysql-connection-pooling-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="mysql connection pooling 1" decoding="async" fetchpriority="high" srcset="https://cdn.clever-cloud.com/uploads/2021/08/mysql-connection-pooling-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/mysql-connection-pooling-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/mysql-connection-pooling-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/mysql-connection-pooling-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/mysql-connection-pooling-1-1368x528.jpg 1368w" sizes="(max-width: 1400px) 100vw, 1400px" /></p>Starting today, we provide <a href="https://www.proxysql.com/">ProxySQL</a>, a MySQL proxy, on all of our managed instances for out of the box connection pooling to your MySQL add-ons.

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

ProxySQL acts as a local proxy between your application and your MySQL add-on. Your application will be able to connect to ProxySQL which will then forward your requests to the linked MySQL add-on.
<blockquote>A connection pool will cache your database connections and keep them open for future requests</blockquote>
Thanks to the connection pool, your database connections will be cached and your application won't have to wait for the connection to be established to your add-on. This can lead to faster response time when a lot of requests are executed. It also solves the problem of too many opened connections to the database. You will be able to do as many queries as you need without getting a "user max connection exceeded" error. ProxySQL will queue all the requests until a connection slot is available.

<em>Sidenote: ProxySQL is not available on Docker instances as we do not manage your Dockerfile.</em>
<h2 id="configure-proxysql">Configure ProxySQL</h2>
To enable ProxySQL for your application, you first need to have a MySQL add-on linked to your application. You then have to set the <code>CC_ENABLE_MYSQL_PROXYSQL=true</code> environment variable.

Once enabled, the <code>CC_MYSQL_PROXYSQL_SOCKET_PATH</code> environment variable will be injected during the deployment phase. It provides a <a href="https://en.wikipedia.org/wiki/Unix_domain_socket">Unix Domain Socket</a> path to use to connect to ProxySQL.

There are also two other environment variables you can set to configure ProxySQL to match your needs:
<ul>
 	<li><code>CC_MYSQL_PROXYSQL_USE_TLS</code>: A boolean (<code>true</code> or <code>false</code>) to enable <code>TLS</code> between ProxySQL and your MySQL add-on. Defaults to <code>true</code>.</li>
 	<li><code>CC_MYSQL_PROXYSQL_MAX_CONNECTIONS</code>: An integer which defines how many maximum connections ProxySQL will open to your MySQL add-on. Defaults to <code>10</code>. You can refer to <a href="https://www.clever.cloud/developers/deploy/addon/mysql/proxysql#scalability">our ProxySQL documentation</a> to learn more about how you should compute the maximum connection value when auto scalability is involved.</li>
</ul>
<h3 id="examples">Examples</h3>
Here are some examples on how to connect to ProxySQL using various languages:
<h4 id="php-using-pdo">PHP using PDO</h4>
Using <a href="https://www.php.net/manual/en/ref.pdo-mysql.connection.php">PDO</a>, you have to use the <code>unix_socket</code> option in your DSN:
<pre><code class="language-php">&lt;?php
// This variable is injected during the deployment
$socket = getenv("CC_MYSQL_PROXYSQL_SOCKET_PATH");
// Get the database name from the environment
$db = getenv("MYSQL_ADDON_DB");
// Get the database user from the environment
$user = getenv("MYSQL_ADDON_USER");
// Get the database password from the environment
$pass = getenv("MYSQL_ADDON_PASSWORD");
$dsn = "mysql:unix_socket=$socket;dbname=$db";
try {
  $pdo = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
  throw new PDOException($e-&gt;getMessage(), (int)$e-&gt;getCode());
}
</code></pre>
<h4 id="wordpress">Wordpress</h4>
For Wordpress, you can change the <code>DB_HOST</code> variable in your <code>wp-config.php</code>:
<pre><code class="language-php">// To connect using a unix socket, the syntax is: `localhost:/path/to/socket`
define('DB_HOST', "localhost:" . getenv("CC_MYSQL_PROXYSQL_SOCKET_PATH") );
// Get the database user from the environment
define('DB_USER', getenv("MYSQL_ADDON_USER"));
// Get the database password from the environment
define('DB_PASSWORD', getenv("MYSQL_ADDON_PASSWORD"));
// Get the database name from the environment
define('DB_NAME', getenv("MYSQL_ADDON_DB"));
</code></pre>
<h4 id="nodejs">Node.js</h4>
On Node.js, using the <code>mysql</code> npm package, you have to set the <code>socketPath</code> property :
<pre><code class="language-javascript">const mysql      = require('mysql');
const connection = mysql.createConnection({
  // Get ProxySQL unix domain socket path from the environment
  socketPath : process.env["CC_MYSQL_PROXYSQL_SOCKET_PATH"],
  // Get the database user from the environment
  user       : process.env["MYSQL_ADDON_USER"],
  // Get the database password from the environment
  password   : process.env["MYSQL_ADDON_PASSWORD"],
  // Get the database name from the environment
  database   : process.env["MYSQL_ADDON_DB"]
});
connection.connect(function(err) {
  if (err) {
    console.error('error connecting: ' + err.stack);
    return;
  }

  console.log('connected as id ' + connection.threadId);
});
</code></pre>
<h3 id="metrics">Metrics</h3>
ProxySQL exposes some metrics using the Prometheus format. Those metrics are automatically collected into our Metrics system and can be accessed in the <a href="https://www.clever.cloud/developers/administrate/metrics/overview/#display-metrics">Advanced Metrics</a> view of your application. This allows you to track how effective your connection pool is and how many request your instances are making. You can get the list of metrics we expose in <a href="https://www.clever.cloud/developers/deploy/addon/mysql/proxysql#metrics">our ProxySQL documentation</a>
<h3 id="documentation">Documentation</h3>
You can find more information about this feature in <a href="https://www.clever.cloud/developers/deploy/addon/mysql/proxysql">our ProxySQL documentation</a>.
<h3 id="conclusion">Conclusion</h3>
Using ProxySQL may help decrease the response time of your application if it does a lot of SQL requests. We'd love to hear from you on how ProxySQL's connection pool affected your applications performances.]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/mysql-connection-pooling-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="mysql connection pooling 1" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2021/08/mysql-connection-pooling-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/mysql-connection-pooling-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/mysql-connection-pooling-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/mysql-connection-pooling-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/mysql-connection-pooling-1-1368x528.jpg 1368w" sizes="(max-width: 1400px) 100vw, 1400px" /></p>Starting today, we provide <a href="https://www.proxysql.com/">ProxySQL</a>, a MySQL proxy, on all of our managed instances for out of the box connection pooling to your MySQL add-ons.

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

ProxySQL acts as a local proxy between your application and your MySQL add-on. Your application will be able to connect to ProxySQL which will then forward your requests to the linked MySQL add-on.
<blockquote>A connection pool will cache your database connections and keep them open for future requests</blockquote>
Thanks to the connection pool, your database connections will be cached and your application won't have to wait for the connection to be established to your add-on. This can lead to faster response time when a lot of requests are executed. It also solves the problem of too many opened connections to the database. You will be able to do as many queries as you need without getting a "user max connection exceeded" error. ProxySQL will queue all the requests until a connection slot is available.

<em>Sidenote: ProxySQL is not available on Docker instances as we do not manage your Dockerfile.</em>
<h2 id="configure-proxysql">Configure ProxySQL</h2>
To enable ProxySQL for your application, you first need to have a MySQL add-on linked to your application. You then have to set the <code>CC_ENABLE_MYSQL_PROXYSQL=true</code> environment variable.

Once enabled, the <code>CC_MYSQL_PROXYSQL_SOCKET_PATH</code> environment variable will be injected during the deployment phase. It provides a <a href="https://en.wikipedia.org/wiki/Unix_domain_socket">Unix Domain Socket</a> path to use to connect to ProxySQL.

There are also two other environment variables you can set to configure ProxySQL to match your needs:
<ul>
 	<li><code>CC_MYSQL_PROXYSQL_USE_TLS</code>: A boolean (<code>true</code> or <code>false</code>) to enable <code>TLS</code> between ProxySQL and your MySQL add-on. Defaults to <code>true</code>.</li>
 	<li><code>CC_MYSQL_PROXYSQL_MAX_CONNECTIONS</code>: An integer which defines how many maximum connections ProxySQL will open to your MySQL add-on. Defaults to <code>10</code>. You can refer to <a href="https://www.clever.cloud/developers/deploy/addon/mysql/proxysql#scalability">our ProxySQL documentation</a> to learn more about how you should compute the maximum connection value when auto scalability is involved.</li>
</ul>
<h3 id="examples">Examples</h3>
Here are some examples on how to connect to ProxySQL using various languages:
<h4 id="php-using-pdo">PHP using PDO</h4>
Using <a href="https://www.php.net/manual/en/ref.pdo-mysql.connection.php">PDO</a>, you have to use the <code>unix_socket</code> option in your DSN:
<pre><code class="language-php">&lt;?php
// This variable is injected during the deployment
$socket = getenv("CC_MYSQL_PROXYSQL_SOCKET_PATH");
// Get the database name from the environment
$db = getenv("MYSQL_ADDON_DB");
// Get the database user from the environment
$user = getenv("MYSQL_ADDON_USER");
// Get the database password from the environment
$pass = getenv("MYSQL_ADDON_PASSWORD");
$dsn = "mysql:unix_socket=$socket;dbname=$db";
try {
  $pdo = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
  throw new PDOException($e-&gt;getMessage(), (int)$e-&gt;getCode());
}
</code></pre>
<h4 id="wordpress">Wordpress</h4>
For Wordpress, you can change the <code>DB_HOST</code> variable in your <code>wp-config.php</code>:
<pre><code class="language-php">// To connect using a unix socket, the syntax is: `localhost:/path/to/socket`
define('DB_HOST', "localhost:" . getenv("CC_MYSQL_PROXYSQL_SOCKET_PATH") );
// Get the database user from the environment
define('DB_USER', getenv("MYSQL_ADDON_USER"));
// Get the database password from the environment
define('DB_PASSWORD', getenv("MYSQL_ADDON_PASSWORD"));
// Get the database name from the environment
define('DB_NAME', getenv("MYSQL_ADDON_DB"));
</code></pre>
<h4 id="nodejs">Node.js</h4>
On Node.js, using the <code>mysql</code> npm package, you have to set the <code>socketPath</code> property :
<pre><code class="language-javascript">const mysql      = require('mysql');
const connection = mysql.createConnection({
  // Get ProxySQL unix domain socket path from the environment
  socketPath : process.env["CC_MYSQL_PROXYSQL_SOCKET_PATH"],
  // Get the database user from the environment
  user       : process.env["MYSQL_ADDON_USER"],
  // Get the database password from the environment
  password   : process.env["MYSQL_ADDON_PASSWORD"],
  // Get the database name from the environment
  database   : process.env["MYSQL_ADDON_DB"]
});
connection.connect(function(err) {
  if (err) {
    console.error('error connecting: ' + err.stack);
    return;
  }

  console.log('connected as id ' + connection.threadId);
});
</code></pre>
<h3 id="metrics">Metrics</h3>
ProxySQL exposes some metrics using the Prometheus format. Those metrics are automatically collected into our Metrics system and can be accessed in the <a href="https://www.clever.cloud/developers/administrate/metrics/overview/#display-metrics">Advanced Metrics</a> view of your application. This allows you to track how effective your connection pool is and how many request your instances are making. You can get the list of metrics we expose in <a href="https://www.clever.cloud/developers/deploy/addon/mysql/proxysql#metrics">our ProxySQL documentation</a>
<h3 id="documentation">Documentation</h3>
You can find more information about this feature in <a href="https://www.clever.cloud/developers/deploy/addon/mysql/proxysql">our ProxySQL documentation</a>.
<h3 id="conclusion">Conclusion</h3>
Using ProxySQL may help decrease the response time of your application if it does a lot of SQL requests. We'd love to hear from you on how ProxySQL's connection pool affected your applications performances.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Deploy Ghost the Immutable Way on Clever Cloud</title>
		<link>https://www.clever.cloud/blog/features/2019/10/21/ghost-hosting-clever-cloud/</link>
		
		<dc:creator><![CDATA[Laurent Doguin]]></dc:creator>
		<pubDate>Mon, 21 Oct 2019 17:05:00 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[ghost]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[Nodejs]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2019/10/21/ghost-hosting-clever-cloud/</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/deploy-ghost-1.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="deploy ghost 1" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2021/08/deploy-ghost-1.png 1400w, https://cdn.clever-cloud.com/uploads/2021/08/deploy-ghost-1-300x116.png 300w, https://cdn.clever-cloud.com/uploads/2021/08/deploy-ghost-1-1024x395.png 1024w, https://cdn.clever-cloud.com/uploads/2021/08/deploy-ghost-1-768x296.png 768w, https://cdn.clever-cloud.com/uploads/2021/08/deploy-ghost-1-1368x528.png 1368w" sizes="(max-width: 1400px) 100vw, 1400px" /></p>I am currently on a personal quest for a self hosted blog platform that <em>just work</em>. So might you see more posts about blog platform. And the first candidate I wanted to try is Ghost, since it's advertised as the natural successor to Wordpress(Because yes I don't want Wordpress, It's too old and I am in tech so I just can't).

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

Ghost is in their own words:
<blockquote>A fully open source, adaptable platform for building and running a modern online publication. We power blogs, magazines and journalists from Zappos to Sky News.</blockquote>
Sounds promising, let's dig in. It's written in NodeJS, and it requires MySQL. Should work right off the bat on Clever Cloud. That is if they follow an immutable approach to production deployment. And as it turns out, they don't really do that. It's even harder if you try to stick to recommended production tools and methods. So it <em>might</em> be a little more complicated than I thought at the begining. But it ended up working fine. Here's how.
<h2 id="your-local-blog-installation">Your local blog installation</h2>
The first thing to do is create your blog locally. Ghost comes with a CLI tool you can install with npm or yarn. I am using npm so <code>npm install -g ghost-cli</code>. Then simply create a folder, change directory and install a Ghost blog:
<pre><code class="language-bash">mkdir myblog
cd myblog
ghost install local
</code></pre>
You should see some logs and right at the end an invitation to go to <code>http://localhost:2368/ghost/</code>. This is your new blog. You should go through a configuration wizard to setup everything. It's using the development configuration right now, with a local SQL lite database and logs written to disk. Now you can stop the local blog by running <code>ghost stop</code>.

If you list the content of your directory you should see the following:
<pre><code class="language-bash">[ldoguin@caolila:~/myblog]$ ls
content/  current@  versions/  config.development.json
</code></pre>
All the specifics of your blog are stored in <code>content</code>. <code>current</code> is a symbolic link to the latest Ghost release downloaded in the <code>versions</code> folder. There is another symbolic link in <code>content/themes/casper</code> that points to the latest capser theme built in Ghost. This link will likely be broken once the blog is pushed to Clever Cloud because of the way we will install Ghost on it. So what you can do right now is replace that link with the actual content of the theme, and add a couple of other themes for good measure. It's also the time to create our git repository. Because the new themes are going to be <a href="https://git-scm.com/book/en/v2/Git-Tools-Submodules">git submodules</a>. This way it can easily be updated, while controlling the version.
<pre><code class="language-bash">rm content/themes/casper/
cp -r current/content/themes/casper/ content/themes/
git init
cd content/themes/
git submodule add https://github.com/curiositry/mnml-ghost-theme
git submodule add https://github.com/zutrinken/attila/
</code></pre>
To test the new theme let's start Ghost in debug mode: <code>ghost run -D</code>. If you go back to the admin page under <code>http://localhost:2368/ghost/</code>, click on the Design tab and you will see your new installed themes at the end of the page. Once you are done you can stop the server by simply hitting <em>Ctrl-c</em>.

Now you have a running installation locally, let's see how to move it to the Cloud.
<h2 id="your-blog-on-clever-cloud">Your blog on Clever Cloud</h2>
To interact with Clever Cloud I recomment using our wonderful CLI clever-tools available easily on most distributions as you can see in our <a href="https://github.com/CleverCloud/clever-tools#installation">documentation</a>. This is the tool I will use in the example. You can of course do the same thing using Clever Cloud's Web Console.

In a terminal, inside your blog folder, run the following command:
<pre><code class="language-bash">clever create --type node myblog # create a node application
clever addon create mysql-addon --plan s_sml myblogsql # create a MySQL database
clever service link-addon myblogsql # Link the database to the application
clever env set NODE_ENV production # setup environment variable for production
clever env set CC_PRE_RUN_HOOK ./clevercloud.sh # run a specific script before the build phase
clever domain add mysuperblog.cleverapps.io # Add a test domain name
</code></pre>
Now there is an existing application and a database on Clever Cloud, configured to run Ghost. But then we still need to create a bunch of files.
<h3 id="installing-ghost-for-your-clever-cloud-application">Installing Ghost for your Clever Cloud Application</h3>
You have seen in the previous step an envionment variable pointing to a <a href="https://www.clever.cloud/developers/clever-cloud-overview/hooks/">pre run hook</a>. It allows us run arbitrary code before the build phase. So let's create that executable file with <code>touch clevercloud.sh</code> and <code>chmod +x clevercloud.sh</code> at the root of our repository. And as for the content here it is:
<pre><code class="language-bash">#!/bin/sh
npm install -g ghost-cli # install ghost-cli on Clever Cloud
mkdir ghost # create a folder for a new local instance of Ghost
cd ghost
ghost install local
ghost stop
cp ../config.production.json . # copy the production configuration
</code></pre>
After that script we will have installed <em>ghost-cli</em> and the latest version of Ghost available. This script can be modified to have a specific version installed if you wanted to. But the thing is I like using upstream code: fail eary, fail often. Now on to the actual configuration.
<h3 id="configure-ghost-for-production">Configure Ghost for Production</h3>
To configure Ghost you have two options. You can use a json file or environment variable. Here I am using a mix of two. Things that won't change when deploying on Clever Cloud are going in the file. Things that may change, like the database used or the url, will be configured as environment variables.

Let's start with the configuration file. You can copy the existing development file or create a brand new one with <code>touch config.production.json</code>. And here's the content:
<pre><code class="language-json">{
  "server": {
    "port": 8080,
    "host": "0.0.0.0"
  },
  "database": {
    "client": "mysql"
  },
  "mail": {
    "transport": "Direct"
  },
  "process": "local",
  "logging": {
    "level": "debug",
    "transports": [
      "stdout"
    ]
  },
  "paths": {
    "contentPath": "../../../content/"
  }
}
</code></pre>
In this file you can see that the only logging transport used is <em>stdout</em>. As Clever Cloud uses Immutable infrastructure and might restart your application when needed, writing logs on file is pointless as they may be lost. Writing them in the standard output is what we advize and you can always configure <a href="https://www.clever.cloud/developers/clever-cloud-apis/add-ons-log-collector/">log drains</a> if you want to use a third party log management tool. Database client is rightly set to <em>mysql</em>. Something else that is changing from the developer configuration is the <em>contentPath</em>. It's the path to your specific Ghost data, themes, assts, etc.. This is the folder where the themes are installed for instance. You can give an absolute or relative path. I'am using the relative path. And it starts in the running Ghost instance. In our case the Ghost version is installed by <code>/clevercloud.sh</code> in <code>/ghost/versions/versionUsed/</code> and our content is available in <code>/content/</code>. So we need to go up three directories to make sure it founds our <code>content</code> folder.

And here is the list of environment variables. I have copy pasted the database values from the result of the <code>clever env</code> command.
<pre><code class="language-bash">clever env set database__connection__host btxgsb7xrhkuydlmb3zr-mysql.services.clever-cloud.com
clever env set database__connection__user ukf6bzfjgd2eg0iw
clever env set database__connection__password 87xRmGJljF3aSgGullm
clever env set database__connection__database btxgsb7xrhkuydlmb3zr
clever env set database__connection__port 20222
clever env set url https://mysuperblog.cleverapps.io/
</code></pre>
At this point we have a properly configured Ghost instance using our own set of files. Now the question is how do you run it ?
<h3 id="run-ghost">Run Ghost</h3>
With node-js applications deployed on Clever Cloud we usually run the <em>main</em> or <em>start</em> field available in package.json. So what we can do is create it with <code>touch package.json</code> and add a start field that will run the blog with ghost-cli:
<pre><code class="language-json">{
    "name": "ghost",
    "version": "0.1.0",
    "description": "",
    "scripts": {
        "start": "ghost run --dir ghost"
    },
    "devDependencies": {
    },
    "dependencies": {
    }
}
</code></pre>
Here we have a configured, ready to run Ghost instance. To deploy on Clever Cloud we push code to a remote git branch. We need to do our first commit but first a bit of cleanup.
<h3 id="ignoring-local-development-files">Ignoring local development files</h3>
There are a bunch of files we should not add to our git repository. Basically all the files related to our local deployment. So I added them to a <code>.gitignore</code> file and invite you to do the same.
<pre><code class="language-gitignore">.ghost-cli
config.development.json
current
versions
</code></pre>
<h3 id="git-push-to-production">Git push to Production</h3>
Now you should have a fairly simple git add to do:
<pre><code class="language-bash">git add clevercloud.sh package.json config.production.json content
git commit -m "Initial commit"
clever deploy
</code></pre>
If you go to <a href="https://mysuperblog.cleverapps.io/ghost/">https://mysuperblog.cleverapps.io/ghost/</a> you will run through the setup again, but this time storing things in the MySQL database. Take a look at the <a href="https://ghost.org/docs/concepts/config/">configuration options</a> for Ghost, there are still a bunch of things you can do like setting up a proper email SMTP server.

And what about the traditional Production configuration from Ghost's documentaiton like SSL Configuration, reverse proxy and such? Well the beauty of using Clever Cloud is that everything is taken care of for you. Nothing else to do.

And there you have it, your new blog is online. Deployed the immutable way.]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/deploy-ghost-1.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="deploy ghost 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/deploy-ghost-1.png 1400w, https://cdn.clever-cloud.com/uploads/2021/08/deploy-ghost-1-300x116.png 300w, https://cdn.clever-cloud.com/uploads/2021/08/deploy-ghost-1-1024x395.png 1024w, https://cdn.clever-cloud.com/uploads/2021/08/deploy-ghost-1-768x296.png 768w, https://cdn.clever-cloud.com/uploads/2021/08/deploy-ghost-1-1368x528.png 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p>I am currently on a personal quest for a self hosted blog platform that <em>just work</em>. So might you see more posts about blog platform. And the first candidate I wanted to try is Ghost, since it's advertised as the natural successor to Wordpress(Because yes I don't want Wordpress, It's too old and I am in tech so I just can't).

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

Ghost is in their own words:
<blockquote>A fully open source, adaptable platform for building and running a modern online publication. We power blogs, magazines and journalists from Zappos to Sky News.</blockquote>
Sounds promising, let's dig in. It's written in NodeJS, and it requires MySQL. Should work right off the bat on Clever Cloud. That is if they follow an immutable approach to production deployment. And as it turns out, they don't really do that. It's even harder if you try to stick to recommended production tools and methods. So it <em>might</em> be a little more complicated than I thought at the begining. But it ended up working fine. Here's how.
<h2 id="your-local-blog-installation">Your local blog installation</h2>
The first thing to do is create your blog locally. Ghost comes with a CLI tool you can install with npm or yarn. I am using npm so <code>npm install -g ghost-cli</code>. Then simply create a folder, change directory and install a Ghost blog:
<pre><code class="language-bash">mkdir myblog
cd myblog
ghost install local
</code></pre>
You should see some logs and right at the end an invitation to go to <code>http://localhost:2368/ghost/</code>. This is your new blog. You should go through a configuration wizard to setup everything. It's using the development configuration right now, with a local SQL lite database and logs written to disk. Now you can stop the local blog by running <code>ghost stop</code>.

If you list the content of your directory you should see the following:
<pre><code class="language-bash">[ldoguin@caolila:~/myblog]$ ls
content/  current@  versions/  config.development.json
</code></pre>
All the specifics of your blog are stored in <code>content</code>. <code>current</code> is a symbolic link to the latest Ghost release downloaded in the <code>versions</code> folder. There is another symbolic link in <code>content/themes/casper</code> that points to the latest capser theme built in Ghost. This link will likely be broken once the blog is pushed to Clever Cloud because of the way we will install Ghost on it. So what you can do right now is replace that link with the actual content of the theme, and add a couple of other themes for good measure. It's also the time to create our git repository. Because the new themes are going to be <a href="https://git-scm.com/book/en/v2/Git-Tools-Submodules">git submodules</a>. This way it can easily be updated, while controlling the version.
<pre><code class="language-bash">rm content/themes/casper/
cp -r current/content/themes/casper/ content/themes/
git init
cd content/themes/
git submodule add https://github.com/curiositry/mnml-ghost-theme
git submodule add https://github.com/zutrinken/attila/
</code></pre>
To test the new theme let's start Ghost in debug mode: <code>ghost run -D</code>. If you go back to the admin page under <code>http://localhost:2368/ghost/</code>, click on the Design tab and you will see your new installed themes at the end of the page. Once you are done you can stop the server by simply hitting <em>Ctrl-c</em>.

Now you have a running installation locally, let's see how to move it to the Cloud.
<h2 id="your-blog-on-clever-cloud">Your blog on Clever Cloud</h2>
To interact with Clever Cloud I recomment using our wonderful CLI clever-tools available easily on most distributions as you can see in our <a href="https://github.com/CleverCloud/clever-tools#installation">documentation</a>. This is the tool I will use in the example. You can of course do the same thing using Clever Cloud's Web Console.

In a terminal, inside your blog folder, run the following command:
<pre><code class="language-bash">clever create --type node myblog # create a node application
clever addon create mysql-addon --plan s_sml myblogsql # create a MySQL database
clever service link-addon myblogsql # Link the database to the application
clever env set NODE_ENV production # setup environment variable for production
clever env set CC_PRE_RUN_HOOK ./clevercloud.sh # run a specific script before the build phase
clever domain add mysuperblog.cleverapps.io # Add a test domain name
</code></pre>
Now there is an existing application and a database on Clever Cloud, configured to run Ghost. But then we still need to create a bunch of files.
<h3 id="installing-ghost-for-your-clever-cloud-application">Installing Ghost for your Clever Cloud Application</h3>
You have seen in the previous step an envionment variable pointing to a <a href="https://www.clever.cloud/developers/clever-cloud-overview/hooks/">pre run hook</a>. It allows us run arbitrary code before the build phase. So let's create that executable file with <code>touch clevercloud.sh</code> and <code>chmod +x clevercloud.sh</code> at the root of our repository. And as for the content here it is:
<pre><code class="language-bash">#!/bin/sh
npm install -g ghost-cli # install ghost-cli on Clever Cloud
mkdir ghost # create a folder for a new local instance of Ghost
cd ghost
ghost install local
ghost stop
cp ../config.production.json . # copy the production configuration
</code></pre>
After that script we will have installed <em>ghost-cli</em> and the latest version of Ghost available. This script can be modified to have a specific version installed if you wanted to. But the thing is I like using upstream code: fail eary, fail often. Now on to the actual configuration.
<h3 id="configure-ghost-for-production">Configure Ghost for Production</h3>
To configure Ghost you have two options. You can use a json file or environment variable. Here I am using a mix of two. Things that won't change when deploying on Clever Cloud are going in the file. Things that may change, like the database used or the url, will be configured as environment variables.

Let's start with the configuration file. You can copy the existing development file or create a brand new one with <code>touch config.production.json</code>. And here's the content:
<pre><code class="language-json">{
  "server": {
    "port": 8080,
    "host": "0.0.0.0"
  },
  "database": {
    "client": "mysql"
  },
  "mail": {
    "transport": "Direct"
  },
  "process": "local",
  "logging": {
    "level": "debug",
    "transports": [
      "stdout"
    ]
  },
  "paths": {
    "contentPath": "../../../content/"
  }
}
</code></pre>
In this file you can see that the only logging transport used is <em>stdout</em>. As Clever Cloud uses Immutable infrastructure and might restart your application when needed, writing logs on file is pointless as they may be lost. Writing them in the standard output is what we advize and you can always configure <a href="https://www.clever.cloud/developers/clever-cloud-apis/add-ons-log-collector/">log drains</a> if you want to use a third party log management tool. Database client is rightly set to <em>mysql</em>. Something else that is changing from the developer configuration is the <em>contentPath</em>. It's the path to your specific Ghost data, themes, assts, etc.. This is the folder where the themes are installed for instance. You can give an absolute or relative path. I'am using the relative path. And it starts in the running Ghost instance. In our case the Ghost version is installed by <code>/clevercloud.sh</code> in <code>/ghost/versions/versionUsed/</code> and our content is available in <code>/content/</code>. So we need to go up three directories to make sure it founds our <code>content</code> folder.

And here is the list of environment variables. I have copy pasted the database values from the result of the <code>clever env</code> command.
<pre><code class="language-bash">clever env set database__connection__host btxgsb7xrhkuydlmb3zr-mysql.services.clever-cloud.com
clever env set database__connection__user ukf6bzfjgd2eg0iw
clever env set database__connection__password 87xRmGJljF3aSgGullm
clever env set database__connection__database btxgsb7xrhkuydlmb3zr
clever env set database__connection__port 20222
clever env set url https://mysuperblog.cleverapps.io/
</code></pre>
At this point we have a properly configured Ghost instance using our own set of files. Now the question is how do you run it ?
<h3 id="run-ghost">Run Ghost</h3>
With node-js applications deployed on Clever Cloud we usually run the <em>main</em> or <em>start</em> field available in package.json. So what we can do is create it with <code>touch package.json</code> and add a start field that will run the blog with ghost-cli:
<pre><code class="language-json">{
    "name": "ghost",
    "version": "0.1.0",
    "description": "",
    "scripts": {
        "start": "ghost run --dir ghost"
    },
    "devDependencies": {
    },
    "dependencies": {
    }
}
</code></pre>
Here we have a configured, ready to run Ghost instance. To deploy on Clever Cloud we push code to a remote git branch. We need to do our first commit but first a bit of cleanup.
<h3 id="ignoring-local-development-files">Ignoring local development files</h3>
There are a bunch of files we should not add to our git repository. Basically all the files related to our local deployment. So I added them to a <code>.gitignore</code> file and invite you to do the same.
<pre><code class="language-gitignore">.ghost-cli
config.development.json
current
versions
</code></pre>
<h3 id="git-push-to-production">Git push to Production</h3>
Now you should have a fairly simple git add to do:
<pre><code class="language-bash">git add clevercloud.sh package.json config.production.json content
git commit -m "Initial commit"
clever deploy
</code></pre>
If you go to <a href="https://mysuperblog.cleverapps.io/ghost/">https://mysuperblog.cleverapps.io/ghost/</a> you will run through the setup again, but this time storing things in the MySQL database. Take a look at the <a href="https://ghost.org/docs/concepts/config/">configuration options</a> for Ghost, there are still a bunch of things you can do like setting up a proper email SMTP server.

And what about the traditional Production configuration from Ghost's documentaiton like SSL Configuration, reverse proxy and such? Well the beauty of using Clever Cloud is that everything is taken care of for you. Nothing else to do.

And there you have it, your new blog is online. Deployed the immutable way.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>One Framework a Day keeps the Boredom Away: JHipster</title>
		<link>https://www.clever.cloud/blog/features/2017/10/19/1fdba-jhipster/</link>
		
		<dc:creator><![CDATA[Laurent Doguin]]></dc:creator>
		<pubDate>Thu, 19 Oct 2017 17:15:00 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[1fdba]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jhipster]]></category>
		<category><![CDATA[mysql]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2017/10/19/1fdba-jhipster/</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/1fdba-jhipster-1.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="1fdba jhipster 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/1fdba-jhipster-1.png 1400w, https://cdn.clever-cloud.com/uploads/2021/08/1fdba-jhipster-1-300x116.png 300w, https://cdn.clever-cloud.com/uploads/2021/08/1fdba-jhipster-1-1024x395.png 1024w, https://cdn.clever-cloud.com/uploads/2021/08/1fdba-jhipster-1-768x296.png 768w, https://cdn.clever-cloud.com/uploads/2021/08/1fdba-jhipster-1-1368x528.png 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><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&#39;s about JHipster.</p>
<span id="more-2913"></span>

<p>In each post of this series we&#39;ll see how to deploy a particular framework on Clever Cloud. Today we are taking a look at <a href="http://www.jhipster.tech/">JHipster</a>.</p>
<p>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>.</p>
<h2 id="what-is-jhipster">What is JHipster?</h2>
<blockquote>
JHipster is a development platform to generate, develop and deploy Spring Boot + Angular Web applications and Spring microservices.
</blockquote>

<p>JHipster, not your grandma&#39;s Yeoman generator, has been around for quite some time now and seems to be one of the default solution to scafold a modern SpringBoot+Angular stack. It supports many different options for both frontend and backend. Some of these supported by Clever Cloud.</p>
<p>So today we are going to deploy a JHipster stack based on MySQL. We are doing this mostly because our good friends <a href="https://twitter.com/Stephan007">Stephan Janssen</a> and <a href="https://twitter.com/agoncal">Antonio Goncalves</a> told us they would love to see a JHipster/Clever Cloud integration. Before any convenient integration, I need to know how it works :)</p>
<h2 id="setup">Setup</h2>
<p>Here are the steps to create and deploy a JHipster/MySQL application to Clever Cloud:</p>
<ul>
<li>First make sure you have installed JHipster: <code>yarn global add generator-jhipster</code></li>
<li>Create a folder for your future application: <code>mkdir clever-jhipster &amp;&amp; cd clever-jhipster</code></li>
<li>Run JHipster and follow instructions on screen <code>jhipster</code></li>
<li>Make sure you select MySQL and Maven in the wizard</li>
<li>Create the MySQL database: <code>clever addon create mysql-addon --plan dev --region eu jhipstersql</code></li>
<li>Create the Clever Cloud application: <code>clever create --type maven cleverJHipster</code></li>
<li>Link your database to your application: <code>clever service link-addon jhipstersql</code></li>
<li>Create a clevercloud folder at the root of your project: <code>mkdir clevercloud</code></li>
<li>Create a <em>maven.json</em> file with the following content: <code>vim clevercloud/maven.json</code></li>
</ul>
<pre><code class="language-json">{
  &quot;build&quot;: {
    &quot;type&quot;: &quot;maven&quot;,
    &quot;goal&quot;: &quot;-Pprod package -DskipTests&quot;
  },
  &quot;deploy&quot;: {
    &quot;jarName&quot;: &quot;./target/jhipster-0.0.1-SNAPSHOT.war&quot;
  }
}
</code></pre>
<p>This file tells Clever Cloud to run <code>mvn -Pprod package -DskipTests</code> and then <code>java -jar ./target/my-app-0.0.1-SNAPSHOT.war</code>. Don&#39;t forget to change the jarName according to the name of your project.</p>
<p>Now to configure the application we will create a<code>clevercloud/application-clever.yml</code> file containing all the specific configuration to run on Clever Cloud.</p>
<pre><code class="language-yaml">spring:
    datasource:
        url: jdbc:mysql://${MYSQL_ADDON_HOST}:${MYSQL_ADDON_PORT}/${MYSQL_ADDON_DB}?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false
        username: ${MYSQL_ADDON_USER}
        password: ${MYSQL_ADDON_PASSWORD}
        maxActive: 5
</code></pre>
<p>Here I am using variable already predefined by CleverCloud with the <em>${}</em> synthax. To make sure this file is found while running the application, we need to copy it right before running with a hook: <code>clever env set CC_PRE_RUN_HOOK &quot;cp ./clevercloud/application-clever.yml ./application-prod.yml&quot;</code></p>
<h2 id="deploy">Deploy</h2>
<p>Select the build dedicated instance because the JHipster build is memory greedy. To do that you have to go on the WebConsole, in your application, in the Information tab and tick the <em>Enable dedicated build instance</em> checkbox.</p>
<img src="https://www2.cleverapps.io/app/uploads/2021/08/jhipsterconfig.png">

<p>Now commit your changes and run <code>clever deploy</code>, this will push your code to our remote git branch and deploy it. At the end you can type <code>clever open</code> and it should open your website in your default web browser.</p>
<p>We plan to have a better integration to JHipster through a module. What kind of features would you like to have?</p>
]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/1fdba-jhipster-1.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="1fdba jhipster 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/1fdba-jhipster-1.png 1400w, https://cdn.clever-cloud.com/uploads/2021/08/1fdba-jhipster-1-300x116.png 300w, https://cdn.clever-cloud.com/uploads/2021/08/1fdba-jhipster-1-1024x395.png 1024w, https://cdn.clever-cloud.com/uploads/2021/08/1fdba-jhipster-1-768x296.png 768w, https://cdn.clever-cloud.com/uploads/2021/08/1fdba-jhipster-1-1368x528.png 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><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&#39;s about JHipster.</p>
<span id="more-2913"></span>

<p>In each post of this series we&#39;ll see how to deploy a particular framework on Clever Cloud. Today we are taking a look at <a href="http://www.jhipster.tech/">JHipster</a>.</p>
<p>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>.</p>
<h2 id="what-is-jhipster">What is JHipster?</h2>
<blockquote>
JHipster is a development platform to generate, develop and deploy Spring Boot + Angular Web applications and Spring microservices.
</blockquote>

<p>JHipster, not your grandma&#39;s Yeoman generator, has been around for quite some time now and seems to be one of the default solution to scafold a modern SpringBoot+Angular stack. It supports many different options for both frontend and backend. Some of these supported by Clever Cloud.</p>
<p>So today we are going to deploy a JHipster stack based on MySQL. We are doing this mostly because our good friends <a href="https://twitter.com/Stephan007">Stephan Janssen</a> and <a href="https://twitter.com/agoncal">Antonio Goncalves</a> told us they would love to see a JHipster/Clever Cloud integration. Before any convenient integration, I need to know how it works :)</p>
<h2 id="setup">Setup</h2>
<p>Here are the steps to create and deploy a JHipster/MySQL application to Clever Cloud:</p>
<ul>
<li>First make sure you have installed JHipster: <code>yarn global add generator-jhipster</code></li>
<li>Create a folder for your future application: <code>mkdir clever-jhipster &amp;&amp; cd clever-jhipster</code></li>
<li>Run JHipster and follow instructions on screen <code>jhipster</code></li>
<li>Make sure you select MySQL and Maven in the wizard</li>
<li>Create the MySQL database: <code>clever addon create mysql-addon --plan dev --region eu jhipstersql</code></li>
<li>Create the Clever Cloud application: <code>clever create --type maven cleverJHipster</code></li>
<li>Link your database to your application: <code>clever service link-addon jhipstersql</code></li>
<li>Create a clevercloud folder at the root of your project: <code>mkdir clevercloud</code></li>
<li>Create a <em>maven.json</em> file with the following content: <code>vim clevercloud/maven.json</code></li>
</ul>
<pre><code class="language-json">{
  &quot;build&quot;: {
    &quot;type&quot;: &quot;maven&quot;,
    &quot;goal&quot;: &quot;-Pprod package -DskipTests&quot;
  },
  &quot;deploy&quot;: {
    &quot;jarName&quot;: &quot;./target/jhipster-0.0.1-SNAPSHOT.war&quot;
  }
}
</code></pre>
<p>This file tells Clever Cloud to run <code>mvn -Pprod package -DskipTests</code> and then <code>java -jar ./target/my-app-0.0.1-SNAPSHOT.war</code>. Don&#39;t forget to change the jarName according to the name of your project.</p>
<p>Now to configure the application we will create a<code>clevercloud/application-clever.yml</code> file containing all the specific configuration to run on Clever Cloud.</p>
<pre><code class="language-yaml">spring:
    datasource:
        url: jdbc:mysql://${MYSQL_ADDON_HOST}:${MYSQL_ADDON_PORT}/${MYSQL_ADDON_DB}?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false
        username: ${MYSQL_ADDON_USER}
        password: ${MYSQL_ADDON_PASSWORD}
        maxActive: 5
</code></pre>
<p>Here I am using variable already predefined by CleverCloud with the <em>${}</em> synthax. To make sure this file is found while running the application, we need to copy it right before running with a hook: <code>clever env set CC_PRE_RUN_HOOK &quot;cp ./clevercloud/application-clever.yml ./application-prod.yml&quot;</code></p>
<h2 id="deploy">Deploy</h2>
<p>Select the build dedicated instance because the JHipster build is memory greedy. To do that you have to go on the WebConsole, in your application, in the Information tab and tick the <em>Enable dedicated build instance</em> checkbox.</p>
<img src="https://www2.cleverapps.io/app/uploads/2021/08/jhipsterconfig.png">

<p>Now commit your changes and run <code>clever deploy</code>, this will push your code to our remote git branch and deploy it. At the end you can type <code>clever open</code> and it should open your website in your default web browser.</p>
<p>We plan to have a better integration to JHipster through a module. What kind of features would you like to have?</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Databases are out of beta !</title>
		<link>https://www.clever.cloud/blog/company/2013/06/14/databases-pricing/</link>
		
		<dc:creator><![CDATA[Adrien Cretté]]></dc:creator>
		<pubDate>Fri, 14 Jun 2013 00:00:00 +0000</pubDate>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[Pricing]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2013/06/14/databases-pricing/</guid>

					<description><![CDATA[Lire la version française Since the beginning, anyone can use mutual Clever Cloud databases for free because it was in beta. Actually, this test period is over and databases will be charged from July 1st 2013. In order to fit high performance needs, we will launch dedicated databases soon 🙂 The finesse pricing is daily. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><em><a href="#fr">Lire la version française</a></em></p>
<p>Since the beginning, anyone can use mutual Clever Cloud databases for free because it was in beta.<br />
Actually, this test period is over and databases will be charged from July 1st 2013.</p>
<p><span id="more-2724"></span></p>
<p>In order to fit high performance needs, we will launch dedicated databases soon <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>The finesse pricing is daily. It means that once you create a database, you are charged for one day usage, and so on.<br />
For example, a S database will cost 0,23 €/day.</p>
<p>The pricing plans for PostgreSQL and MySQL will be the following:</p>
<div class="table-db">
<div class="table-db-img"><img decoding="async" src="https://www2.cleverapps.io/app/uploads/2021/08/mysql-table.png" /></div>
<table class="table-pricing-services">
<caption>MySQL pricing plans</caption>
<thead>
<tr>
<td></td>
<td>S</td>
<td>M</td>
<td>L</td>
</tr>
</thead>
<tbody>
<tr>
<td>Connexions</td>
<td>15</td>
<td>30</td>
<td>40</td>
</tr>
<tr>
<td>Size</td>
<td>1 Go</td>
<td>5 Go</td>
<td>10 Go</td>
</tr>
<tr>
<td>Price</td>
<td>7 €/month (0,23 €/day)</td>
<td>35 €/month (1,17 €/day)</td>
<td>70 €/month (2,33 €/day)</td>
</tr>
</tbody>
</table>
</div>
<div class="table-db">
<div class="table-db-img"><img decoding="async" src="https://www2.cleverapps.io/app/uploads/2021/08/postgresql-table.png" /></div>
<table class="table-pricing-services">
<caption>PostgreSQL pricing plans</caption>
<thead>
<tr>
<td></td>
<td>S</td>
<td>M</td>
<td>L</td>
</tr>
</thead>
<tbody>
<tr>
<td>Connexions</td>
<td>15</td>
<td>30</td>
<td>40</td>
</tr>
<tr>
<td>Size</td>
<td>1 Go</td>
<td>5 Go</td>
<td>10 Go</td>
</tr>
<tr>
<td>Price</td>
<td>7 €/month (0,23 €/day)</td>
<td>35 €/month (1,17 €/day)</td>
<td>70 €/month (2,33 €/day)</td>
</tr>
</tbody>
</table>
</div>
<p>You will be able to configure the number of Scalers dedicated to your database <a href="https://www.clever.cloud/pricing/" target="_blank" rel="noopener noreferrer">as you can do with apps</a>.</p>
<p>These databases will be more powerful, larger and more scalable than the mutualised databases.</p>
<hr />
<p><em>Version française</em></p>
<p>Depuis le début, tout le monde pouvait utiliser gratuitement les bases de données mutuelles sur Clever Cloud puisqu&#8217;elles étaient en beta. Désormais, cette phase de test s&#8217;achève et l’utilisation des bases de données sera facturée à partir du 1er juillet 2013.</p>
<p>Les tarifs pour une PostgreSQL et une MySQL seront les suivants:</p>
<div class="table-db">
<div class="table-db-img"><img decoding="async" src="https://www2.cleverapps.io/app/uploads/2021/08/postgresql-table.png" /></div>
<table class="table-pricing-services">
<caption>Tarification PostgreSQL</caption>
<thead>
<tr>
<td></td>
<td>S</td>
<td>M</td>
<td>L</td>
</tr>
</thead>
<tbody>
<tr>
<td>Connexions</td>
<td>15</td>
<td>30</td>
<td>40</td>
</tr>
<tr>
<td>Taille</td>
<td>1 Go</td>
<td>5 Go</td>
<td>10 Go</td>
</tr>
<tr>
<td>Prix (HT)</td>
<td>7 €/mois (0,23 €/jour)</td>
<td>35 €/mois (1,17 €/jour)</td>
<td>70 €/mois (2,33 €/jour)</td>
</tr>
</tbody>
</table>
</div>
<div class="table-db">
<div class="table-db-img"><img decoding="async" src="https://www2.cleverapps.io/app/uploads/2021/08/mysql-table.png" /></div>
<table class="table-pricing-services">
<caption>Tarification MySQL</caption>
<thead>
<tr>
<td></td>
<td>S</td>
<td>M</td>
<td>L</td>
</tr>
</thead>
<tbody>
<tr>
<td>Connexions</td>
<td>15</td>
<td>30</td>
<td>40</td>
</tr>
<tr>
<td>Taille</td>
<td>1 Go</td>
<td>5 Go</td>
<td>10 Go</td>
</tr>
<tr>
<td>Prix (HT)</td>
<td>7 €/mois (0,23 €/jour)</td>
<td>35 €/mois (1,17 €/jour)</td>
<td>70 €/mois (2,33 €/jour)</td>
</tr>
</tbody>
</table>
</div>
<p>L’ajustement du pricing est quotidien. Cela signifie qu’une fois que vous avez créé la base de données, vous serez facturé pour une journée d’usage, et ainsi de suite.</p>
<p>À titre d’exemple, une base de données de taille S coûtera 0,23 €/jour.</p>
<p>Pour répondre aux besoins de haute performance, nous lancerons bientôt des bases de données dédiées <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Il sera possible de configurer le nombre de Scalers dédiés à la base de données, comme il est déjà possible de le faire <a href="https://www.clever.cloud/fr/tarification/" target="_blank" rel="noopener noreferrer">avec les applications</a>.</p>
<p>Ces bases de données seront plus puissantes, plus scalables et auront plus de capacité de stockage que les bases de données mutualisées.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
