<?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>OblakSoft</title>
	<atom:link href="http://www.oblaksoft.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.oblaksoft.com</link>
	<description>Your way to the cloud</description>
	<lastBuildDate>Wed, 15 May 2013 08:42:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>WordPress on S3: DNS and HTTPS configuration</title>
		<link>http://www.oblaksoft.com/wordpress-on-s3-dns-https-configuration/</link>
		<comments>http://www.oblaksoft.com/wordpress-on-s3-dns-https-configuration/#comments</comments>
		<pubDate>Wed, 15 May 2013 08:42:47 +0000</pubDate>
		<dc:creator>Artem Livshits</dc:creator>
				<category><![CDATA[Founders BLOG]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[YAPIXX]]></category>

		<guid isPermaLink="false">http://www.oblaksoft.com/?p=3220</guid>
		<description><![CDATA[Getting a WordPress-on-S3 website up and running is a piece of pie with our step-by-step guide, but making the website live requires a couple more pieces of the puzzle to fit together. Today I’m going to talk about configuring DNS and HTTPS for WordPress on S3. DNS stands for Domain Name System and it is [...]]]></description>
			<content:encoded><![CDATA[<p><em>Getting a WordPress-on-S3 website up and running is a piece of pie with our <a href="http://www.slideshare.net/artemlivshits/wordpress-on-s3-stepbystep">step-by-step guide</a>, but making the website live requires a couple more pieces of the puzzle to fit together.</em></p>
<p><img src="http://www.oblaksoft.com/wp-content/uploads/2013/05/https.png" alt="" title="HTTPS" width="259" height="184" class="alignnone size-full wp-image-3249" /><br />
Today I’m going to talk about configuring DNS and HTTPS for WordPress on S3.  DNS stands for <a href="http://en.wikipedia.org/wiki/Domain_Name_System">Domain Name System</a> and it is the technology that makes it possible to use friendly names for web sites.  HTTPS stands for <a href="http://en.wikipedia.org/wiki/HTTP_Secure">Hypertext Transfer Protocol Secure</a> and it is the technology that makes secure connections possible.</p>
<p><span id="more-3220"></span></p>
<h2>DNS</h2>
<p>When you first launch the website, its name is going to look like something like this: http://ec2-204-236-192-217.compute-1.amazonaws.com. The name is just a representation of the website IP address, which is an <em>ephemeral</em> IP address.  Ephemeral IP addresses are random and change every time the instance stops and starts.</p>
<p>So how do you get from a random name to a nice descriptive name for your website?  There are three components to it:</p>
<ol>
<li>You need to register your domain name with a <a href="http://en.wikipedia.org/wiki/Domain_name_registrar">domain name registrar</a>.  The domain name registrar is going to make sure that the name is not registered to someone else and register it to you for a certain period of time.</li>
<li>You need to choose a <a href="http://en.wikipedia.org/wiki/DNS_hosting">DNS hosting service</a>.  Domain name registrars usually can provide DNS hosting service, or you can use <a href="http://aws.amazon.com/route53/">Amazon Route 53</a> DNS web service.  Once you’ve picked the DNS hosting service provider, you need to inform the registrar to set the name servers for your domain to the ones associated with your DNS service provider.</li>
<li>You need to associate an <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html"><em>elastic</em> IP address</a> to the instance.  Unlike ephemeral IP addresses that change every time the instance stops and starts, an elastic IP address is going to stay the same as long as it’s allocated.  <a href="http://www.newvem.com/how-to-associate-and-disassociate-an-elastic-ip-to-an-ec2-instance/">This blog</a> has great step-by-step instructions on how to associate an elastic IP address with the instance.  Once you get an elastic IP address, you need to create a DNS <a href="http://en.wikipedia.org/wiki/List_of_DNS_record_types">A record</a> pointing to the elastic IP address.</li>
</ol>
<p>Once you’ve done this, anyone will be able to access your website by the name of your choice.</p>
<h2>HTTPS</h2>
<p>If you have a website that handles sensitive data (e.g. personal data) you need to provide secure access to your website over the <a href="http://en.wikipedia.org/wiki/HTTP_Secure">HTTPS</a> protocol.  Once an HTTPS connection is established, all communication between the web browser and your website is encrypted.  But how does the web browser know that it’s talking to your website and not some malicious website set up by a hacker?</p>
<p>To confirm the identity of your website, you need to obtain an SSL certificate for your domain name and set it up on the server.  There are multiple <a href="http://en.wikipedia.org/wiki/Comparison_of_SSL_certificates_for_web_servers">certificate authorities</a> that can issue a certificate.  To get a certificate, you need to generate a <a href="http://en.wikipedia.org/wiki/Certificate_signing_request">certificate signing request</a> (CSR) and send it to the certificate authority of your choice.</p>
<p>You can generate CSR using the openssl command line utility.  If you’re not comfortable with command line, here is a <a href="https://www.digicert.com/easy-csr/openssl.htm">nice web UI</a> that can help you to generate the correct command line based on your input.  You can then run in the <a href="http://www.oblaksoft.com/wordpress-on-s3-going-professional/#_system_administration">Webmin console</a>.</p>
<p>Here is an example of how to do this.</p>
<p>Go to <a href="https://www.digicert.com/easy-csr/openssl.htm">https://www.digicert.com/easy-csr/openssl.htm</a> and enter your information into the web form, like this:<br />
<img src="http://www.oblaksoft.com/wp-content/uploads/2013/05/csr-form.png" alt="" title="CSR form" width="706" height="282" class="alignnone size-full wp-image-3224" /></p>
<div style="clear: both;"></div>
<p>Note that you don’t have to buy a certificate from DigiCert – the command line is the same regardless of what certificate authority that you use (including the ones that provide certificates for free).</p>
<p>To execute the resulting command you can use the <a href="http://www.oblaksoft.com/wordpress-on-s3-going-professional/#_system_administration">Webmin console</a>.  In Webmin, navigate to Others, then to Command Shell, paste the command and execute it:</p>
<p><img src="http://www.oblaksoft.com/wp-content/uploads/2013/05/openssl-cmd.png" alt="" title="openssl command" width="513" height="193" class="alignnone size-full wp-image-3229" /></p>
<div style="clear: both;"></div>
<p>As a result, the command will create two files, both located in the <code>/root</code> directory:</p>
<ul>
<li><code><em>your_domain_com</em>.key</code> – your private key</li>
<li><code><em>your_domain_com</em>.csr</code> – the CSR that you need to send to the certificate authority</li>
</ul>
<p>You should copy the private key to <code>/etc/pki/tls/private/</code>.  This can be done using the following command (type it in the same command shell box):</p>
<p><code>
<pre>cp <em>your_domain_com</em>.key /etc/pki/tls/private/
</pre>
<p></code></p>
<p><strong>Note that the private key is not known to anyone but you.  The private key is the piece of data that proves your website’s identity, so you should not share it with anyone.</strong></p>
<p>You can download the CSR using Webmin.  In Webmin, navigate to Others, then to Upload and Download, then switch to the Download from server tab, enter <code>/root/<em>your_domain_com</em>.csr</code> as the File to download, and click Download:</p>
<p><img src="http://www.oblaksoft.com/wp-content/uploads/2013/05/download-csr.png" alt="" title="download-csr" width="680" height="235" class="alignnone size-full wp-image-3231" /></p>
<div style="clear: both;"></div>
<p>Then you can send the CSR to your certificate authority.  Note that the CSR file is a text file, so if your certificate authority needs CSR pasted in email, you can open the CSR file in a text editor and copy its content.</p>
<p>It is also a good idea to download your private key so that you can have a backup copy of your private key.  <strong>If you lose your private key, you’ll have to request a new certificate.</strong></p>
<p>Once the certificate authority has validated your identity they will send you a certificate file and maybe a certificate chain file.  You should upload the files into <code>/etc/pki/tls/certs/</code>.  In Webmin, navigate to Others, then to Upload and Download, then switch to the Upload to server tab, choose the files, type in the directory to upload to and click Upload:</p>
<p><img src="http://www.oblaksoft.com/wp-content/uploads/2013/05/upload-cert-e1367705556402.png" alt="" title="Upload certificate" width="700" height="295" class="alignnone size-full wp-image-3239" /></p>
<div style="clear: both;"></div>
<p>Now that you have all files in place, you need to configure Apache to use the files.  In Webmin, navigate to Servers, then to Apache Webserver and click on the virtual server in the middle:<br />
<img src="http://www.oblaksoft.com/wp-content/uploads/2013/05/ssl-server.png" alt="" title="SSL server" width="591" height="284" class="alignnone size-full wp-image-3241" /></p>
<div style="clear: both;"></div>
<p>Then click on Edit Directives:<br />
<img src="http://www.oblaksoft.com/wp-content/uploads/2013/05/edit-ssl.png" alt="" title="Edit SSL directives" width="438" height="228" class="alignnone size-full wp-image-3243" /></p>
<div style="clear: both;"></div>
<p>You’ll be presented with the configuration file that has the SSL configuration for the webserver.  You need to locate the following options and set it to the appropriate values:</p>
<p><code>
<pre>SSLCertificateFile /etc/pki/tls/certs/<em>your_domain_com</em>.crt
SSLCertificateKeyFile /etc/pki/tls/private/<em>your_domain_com</em>.key
SSLCertificateChainFile /etc/pki/tls/certs/gd_bundle.crt</pre>
<p></code></p>
<p>Note that if the certificate authority didn’t give you the certificate chain file, you don’t need to set SSLCertificateChainFile.</p>
<p>Once you’ve modified the configuration, click Save:</p>
<p><img src="http://www.oblaksoft.com/wp-content/uploads/2013/05/ssl-directives.png" alt="" title="ssl-directives" width="485" height="260" class="alignnone size-full wp-image-3244" /></p>
<div style="clear: both;"></div>
<p>Once the configuration is saved, click Apply Change link at the top right of the screen and that’s all you need to get a webserver that supports HTTPS.</p>
<p>Launch your website today at <a href="http://www.oblaksoft.com/downloads/">http://www.oblaksoft.com/downloads/</a>, using WordPress-on-S3 AMI as the starting point.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oblaksoft.com/wordpress-on-s3-dns-https-configuration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL 5.6: an inside perspective</title>
		<link>http://www.oblaksoft.com/mysql-5-6-an-inside-perspective/</link>
		<comments>http://www.oblaksoft.com/mysql-5-6-an-inside-perspective/#comments</comments>
		<pubDate>Thu, 04 Apr 2013 20:35:49 +0000</pubDate>
		<dc:creator>Artem Livshits</dc:creator>
				<category><![CDATA[Founders BLOG]]></category>
		<category><![CDATA[ClouSE]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[storage engine]]></category>

		<guid isPermaLink="false">http://www.oblaksoft.com/?p=3170</guid>
		<description><![CDATA[MySQL 5.6 through the eyes of a custom storage engine MySQL plugin MySQL is famous for its pluggable storage engine architecture which allows a DBA or an application developer to choose the right engine for the task. An application uses MySQL API and is isolated from all of the low-level implementation details at the storage [...]]]></description>
			<content:encoded><![CDATA[<p><em>MySQL 5.6 through the eyes of a custom storage engine MySQL plugin</em></p>
<p>MySQL is famous for its <a href="http://dev.mysql.com/doc/refman/5.6/en/pluggable-storage-overview.html">pluggable storage engine architecture</a> which allows a DBA or an application developer to choose the right engine for the task.  An application uses MySQL API and is isolated from all of the low-level implementation details at the storage level.  As an example, the Cloud Storage Engine (<a href="http://www.oblaksoft.com/documentation/">ClouSE</a>) enables existing MySQL applications to use cloud storage such as Amazon S3 or Google Cloud Storage to store its data.  The application doesn’t need to be changed or even redeployed: with ClouSE, remote cloud storage will look like a better (ultra-scalable, durable, always-on) alternative to the local storage.</p>
<p>As you may already know, ClouSE now supports MySQL 5.6 release series.  See <a href="http://www.oblaksoft.com/clouse-mysql-cloud-wordpress-windows/">this announcement</a> for more detail.  Let’s go through the set of changes that were required on the ClouSE side in order to keep up with core MySQL 5.6 changes.</p>
<p>We had to adapt our code to compile and work with MySQL 5.6 while keeping 100% compatibility with MySQL 5.5. As much as we could, we tried to fix the code in a way that would work with both release series, but there are cases where the code has to be conditionally compiled for each release series.</p>
<p>Here is the list of MySQL 5.6 breaking changes and our solutions, in no particular order.</p>
<div style="float: left;">
<img src="http://www.oblaksoft.com/wp-content/uploads/2013/04/5-6.png" alt="" title="MySQL 5.6" width="249" height="192" class="alignnone size-full wp-image-3191" />
</div>
<div style="float: left;">
<ul>
<li><a href="/mysql-5-6-an-inside-perspective/#_key_parts">key_parts member is removed from struct st_keys</a></li>
<li><a href="/mysql-5-6-an-inside-perspective/#_time2">New *TIME*2 types</a></li>
<li><a href="/mysql-5-6-an-inside-perspective/#_imestamp_field_type">timestamp_field_type is removed from struct TABLE</a></li>
<li><a href="/mysql-5-6-an-inside-perspective/#_dup_keys">MySQL 5.6 doesn’t load field values for duplicate key error on UPDATE</a></li>
<li><a href="/mysql-5-6-an-inside-perspective/#_conclusion">In conclusion</a></li>
</ul>
</div>
<div style="clear: both;"></div>
<p><span id="more-3170"></span></p>
<h3><a name="_key_parts"></a>key_parts member is removed from struct st_keys</h3>
<p>In MySQL 5.6 <code>struct st_keys</code> (defined in <code>sql/structs.h</code>) doesn’t have the <code>key_parts</code> member.  Now it has <code>user_defined_key_parts</code>, <code>actual_key_parts</code> and a couple other <code><em>xxx</em>_key_parts</code> members instead.  This change is apparently related to <a href="http://glukhsv.blogspot.co.uk/2012/12/innodb-extended-secondary-keys.html">extended secondary keys</a> model that the optimizer in 5.6 uses to do certain query optimizations for InnoDB.</p>
<p>The <code>user_defined_key_parts</code> member corresponds to the number of index columns that are specified by the user in the <code>CREATE TABLE</code>, <code>ALTER TABLE</code>, and etc. statement.  The <code>actual_key_parts</code> member also includes the number of PK columns that are implicitly present in InnoDB secondary indexes (thus <code>user_defined_key_parts &lt;= actual_key_parts</code>).</p>
<p>To adapt ClouSE handlerton code for the new structure (in a way that would work both in MySQL 5.5 and 5.6), we replaced all <code>key_parts</code> usage with <code>user_defined_key_parts</code> and added the following code at the top of the handlerton source file:</p>
<p><code>
<pre>#if MYSQL_VERSION_ID &lt; 50610
#define user_defined_key_parts key_parts
#endif</pre>
<p></code></p>
<p>(50610 is not necessarily the precise check, but we don’t support 5.6 versions prior to 5.6.10, so it’s precise enough for our purposes).</p>
<p>Unfortunately, MySQL 5.6 uses a hardcoded check for InnoDB when it decides to account for PK columns in the <code>actual_key_parts</code> member.  So for any other engine <code>user_defined_key_parts</code> is equal to <code>actual_key_parts</code>.  Thus even though ClouSE also has PK columns in secondary indexes (a typical design for B-tree-based access methods), it has no way of engaging the extended secondary keys logic in MySQL.</p>
<p>What’s worse is that the extended secondary keys are now used in optimizations that previously used different logic.  Because of that, some optimizations that work in MySQL 5.5 for all engines, only work for InnoDB in MySQL 5.6.  For more details about the regression, see <a href="http://bugs.mysql.com/bug.php?id=68469">this bug</a>.  We hope that the MySQL dev team is able to fix it soon.</p>
<h3><a name="_time2"></a>New *TIME*2 types</h3>
<p>MySQL 5.6 has 3 new time data types: <code>MYSQL_TYPE_TIMESTAMP2</code>, <code>MYSQL_TYPE_DATETIME2</code>, and <code>MYSQL_TYPE_TIME2</code> that represent the <a href="http://dev.mysql.com/doc/internals/en/date-and-time-data-type-representation.html">new time data types</a> that are capable of storing fractional seconds.  The old time data types are still present and supported for backward compatibility, however new tables are created with the new time data types.</p>
<p>Adding support for the new type turned out to be fairly easy.  We added code like:</p>
<p><code>
<pre>#if MYSQL_VERSION_ID &gt;= 50610
case MYSQL_TYPE_TIMESTAMP2: case MYSQL_TYPE_DATETIME2: case MYSQL_TYPE_TIME2:
#endif</pre>
<p></code></p>
<p>to the <code>switch</code> statement where we map MySQL data type to ClouSE data types, and we treat the new time types as fixed-sized binary fields.</p>
<h3><a name="_imestamp_field_type"></a>timestamp_field_type is removed from struct TABLE</h3>
<p>In MySQL 5.6 <code>struct TABLE</code> (defined in <code>sql/table.h</code>) doesn’t have the <code>timestamp_field_type</code> member anymore.  <code>TIMESTAMP_AUTO_SET_ON_INSERT</code>, <code>TIMESTAMP_AUTO_SET_ON_UPDATE</code> etc. are gone as well.  This change is apparently related to improved <a href="http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html">automatic initialization and updating of <code>TIMESTAMP</code> and <code>DATETIME</code></a>.</p>
<p>Along with this change the code that handles automatic initialization and updating is apparently hoisted from storage engines to the core MySQL code, so the fix is trivial:</p>
<p><code>
<pre>#if MYSQL_VERSION_ID &lt; 50610
    if( table-&gt;timestamp_field_type &amp; TIMESTAMP_AUTO_SET_ON_INSERT )
        table-&gt;timestamp_field-&gt;set_time();
#endif</pre>
<p></code></p>
<p>I.e. the code is just excluded from ClouSE handlerton when it’s compiled for MySQL 5.6.</p>
<h3><a name="_dup_keys"></a>MySQL 5.6 doesn’t load field values for duplicate key error on UPDATE</h3>
<p>Consider the following example:</p>
<p><code>
<pre>mysql&gt; CREATE TABLE t1 (
          id    INT KEY,
          first CHAR(16) NOT NULL,
          last  CHAR(16) NOT NULL,
          UNIQUE KEY (first, last)
       ) ENGINE=CLOUSE;
mysql&gt; INSERT INTO t1 VALUES (1, 'foo', 'bar'), (2, 'abc', 'bar');
mysql&gt; UPDATE t1 SET first='foo' WHERE id=2;</pre>
<p></code></p>
<p>The result is a duplicate key error:</p>
<p><code>
<pre>ERROR 1062 (23000): Duplicate entry 'foo-bar' for key 'first'</pre>
<p></code></p>
<p>The <code>UPDATE</code> operation does not use the <code><strong>last</strong></code> field, so MySQL doesn’t read its values during normal processing.  Because of that, MySQL 5.5 has special logic that would explicitly load all field values of the duplicate key to show in the error message.</p>
<p>In MySQL 5.6 the logic is removed, so the error message in the example above would look like:</p>
<p><code>
<pre>ERROR 1062 (23000): Duplicate entry 'foo-' for key 'first'</pre>
<p></code></p>
<p>To fix this issue, we copied the code from MySQL 5.5 into the ClouSE handlerton.  The function that has this logic in MySQL 5.5 is <code>prepare_record_for_error_message</code> (located in <code>sql/sql_update.cc</code>).</p>
<h3><a name="_conclusion"></a>In conclusion</h3>
<p>Adding support for MySQL 5.6 release series while keeping compatibility with MySQL 5.5 release series turned out to be fairly straightforward.  We were able to adapt ClouSE handlerton and it works with MySQL 5.6 as well as or better than with MySQL 5.5.</p>
<p>If you have any questions or suggestions, please don’t hesitate to provide feedback in the comments or <a href="http://www.oblaksoft.com/about-us/email-us/">contact us</a> directly.  Or just go ahead and <a href="http://www.oblaksoft.com/downloads/">download</a> ClouSE or WorPress-to-Cloud (which uses ClouSE under the covers) to try it with MySQL 5.6.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oblaksoft.com/mysql-5-6-an-inside-perspective/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MySQL on Cloud Storage: do it yourself with one command</title>
		<link>http://www.oblaksoft.com/mysql-on-cloud-storage-clouse-config/</link>
		<comments>http://www.oblaksoft.com/mysql-on-cloud-storage-clouse-config/#comments</comments>
		<pubDate>Wed, 13 Mar 2013 07:27:12 +0000</pubDate>
		<dc:creator>Artem Livshits</dc:creator>
				<category><![CDATA[Founders BLOG]]></category>
		<category><![CDATA[ClouSE]]></category>
		<category><![CDATA[google cloud storage]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.oblaksoft.com/?p=3134</guid>
		<description><![CDATA[Cloud Storage Engine (ClouSE) installation and configuration is now fully automated. Try new ClouSE installer and you&#8217;ll have cloud storage access configured in no time. OblakSoft is pleased to announce the release of Cloud Storage Engine (ClouSE) installer that can be used to deploy and configure ClouSE with your MySQL server. Now ClouSE can be [...]]]></description>
			<content:encoded><![CDATA[<p><em>Cloud Storage Engine (ClouSE) installation and configuration is now fully automated. Try new ClouSE installer and you&#8217;ll have cloud storage access configured in no time.</em></p>
<p>OblakSoft is pleased to announce the release of Cloud Storage Engine (ClouSE) installer that can be used to deploy and configure ClouSE with your MySQL server.  Now ClouSE can be deployed with just one command.  The installer will guide the user through the configuration process, prompt for Cloud Storage connection parameters, and install ClouSE into MySQL.</p>
<p>Presented is a step-by-step guide for ClouSE installation and configuration, from downloading the binaries to running the installer.  The guide was designed by request of WordPress-to-Cloud users, however it is fully applicable to any generic ClouSE installation.</p>
<p>The slides have notes, they are a little hard to discover with the SlideShare interface, look for a tab below the slide that looks like “Notes on Slide #”.</p>
<p><iframe src="http://www.slideshare.net/slideshow/embed_code/17143830" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe>
<div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/artemlivshits/wordpress-on-s3-do-it-youself" title="WordPress on S3: do it yourself" target="_blank">WordPress on S3: do it yourself</a> </strong> from <strong><a href="http://www.slideshare.net/artemlivshits" target="_blank">Artem Livshits</a></strong> </div>
<p><br /><br />
<em>Let us know how we can further streamline cloud adoption for your MySQL applications. </em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oblaksoft.com/mysql-on-cloud-storage-clouse-config/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OblakSoft Cloud Storage Engine Newsletter, March 2013</title>
		<link>http://www.oblaksoft.com/clouse-mysql-cloud-wordpress-windows/</link>
		<comments>http://www.oblaksoft.com/clouse-mysql-cloud-wordpress-windows/#comments</comments>
		<pubDate>Fri, 01 Mar 2013 19:56:06 +0000</pubDate>
		<dc:creator>Artem Livshits</dc:creator>
				<category><![CDATA[Founders BLOG]]></category>
		<category><![CDATA[OblakSoft Newsletter]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[ClouSE]]></category>
		<category><![CDATA[google cloud storage]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.oblaksoft.com/?p=3115</guid>
		<description><![CDATA[ClouSE 1.0b.1.7 is released OblakSoft is pleased to announce the release of Cloud Storage Engine (ClouSE) for MySQL Beta version 1.0b.1.7.  In this release we added support for a variety of environments to address the platform diversity of our growing customer base. Here is the summary of changes that are included into 1.0b.1.7: Support for [...]]]></description>
			<content:encoded><![CDATA[<h2>ClouSE 1.0b.1.7 is released</h2>
<p>OblakSoft is pleased to announce the release of Cloud Storage Engine (ClouSE) for MySQL Beta version 1.0b.1.7.  In this release we added support for a variety of environments to address the platform diversity of our growing customer base.</p>
<p>Here is the summary of changes that are included into 1.0b.1.7:<br />
<span id="more-3115"></span></p>
<ul>
<li><strong>Support for ClouSE on Microsoft Windows (limited preview)</strong></li>
</ul>
<p>Now ClouSE builds are available both for Linux and Microsoft Windows.  The cloud data format is the same across all platforms: Linux and Windows, 32-bit and 64-bit.  This allows for seamless transitions between machines, platforms and clouds.  ClouSE for Windows is currently available to a group of limited preview customers.  If you would like to sign up for the limited preview program please <a href="http://www.oblaksoft.com/about-us/email-us/">contact us</a>.<br />
Looking forward to your feedback, comments, questions, bug reports.</p>
<ul>
<li><strong>Support for MySQL 5.6 release series</strong></li>
</ul>
<p>Now ClouSE supports MySQL 5.6.10 – the first <a href="http://www.oracle.com/us/corporate/press/1904335">GA</a> version in MySQL 5.6 series.</p>
<ul>
<li><strong>Support for latest MySQL 5.5</strong></li>
</ul>
<p>Now ClouSE supports MySQL 5.5 release series through 5.5.30.</p>
<ul>
<li><strong>Support for Percona Server 5.5.29-rel30.0</strong></li>
</ul>
<p>Now ClouSE support <a href="http://www.percona.com/software/percona-server">Percona Server</a> 5.5.29-rel30.0.  Percona Server is supported only on Linux.  The handlerton library for Percona Server is ha_clouse-5.5.29-p30.0.so.</p>
<ul>
<li><strong>Support for partitioned tables</strong></li>
</ul>
<p>Now ClouSE supports partitioned tables.  Partition’s metadata is saved to cloud storage and transparently recovered on auto-discovery.</p>
<p>The software can be downloaded at <a href="http://www.oblaksoft.com/downloads/">http://www.oblaksoft.com/downloads/</a> for FREE.</p>
<p>For the full list of new features and bug fixes see the <a href="http://www.oblaksoft.com/documentation/clouse-release-notes/#v1_0b_1_7">release notes</a>.</p>
<p><em>Please <a title="About OblakSoft" href="http://www.oblaksoft.com/about-us/contact/">let us know</a> if you run into any issues trying WordPress (or directly MySQL) on cloud storage. We’ll make sure to address them as our top priority.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oblaksoft.com/clouse-mysql-cloud-wordpress-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress on S3: going pro</title>
		<link>http://www.oblaksoft.com/wordpress-on-s3-going-professional/</link>
		<comments>http://www.oblaksoft.com/wordpress-on-s3-going-professional/#comments</comments>
		<pubDate>Thu, 07 Feb 2013 11:21:24 +0000</pubDate>
		<dc:creator>Artem Livshits</dc:creator>
				<category><![CDATA[Founders BLOG]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[website]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[YAPIXX]]></category>

		<guid isPermaLink="false">http://www.oblaksoft.com/?p=3027</guid>
		<description><![CDATA[WordPress-on-S3 makes professional website administration as easy as pie. OblakSoft is pleased to announce availability of the ready-to-run WordPress-on-S3 / Yapixx AMI with enhanced configuration, performance, and website administration features.  Now website owners can use Webmin and phpMyAdmin for secure website administration over the Internet, and pre-configure Cloud Storage Connection for the instance. System administration [...]]]></description>
			<content:encoded><![CDATA[<p><em>WordPress-on-S3 makes professional website administration as easy as pie.</em></p>
<p>OblakSoft is pleased to announce availability of the ready-to-run WordPress-on-S3 / Yapixx AMI with enhanced configuration, performance, and website administration features.  Now website owners can use <a href="http://www.webmin.com/">Webmin</a> and <a href="http://www.phpmyadmin.net/">phpMyAdmin</a> for secure website administration over the Internet, and pre-configure Cloud Storage Connection for the instance.</p>
<div style="float: left;">
<img src="http://www.oblaksoft.com/wp-content/uploads/2013/02/pie-300x237.jpg" alt="" title="Pro is easy" width="300" height="237" class="alignnone size-medium wp-image-3029" />
</div>
<div style="float: left; margin: 60px">
<ul>
<li><a href="/wordpress-on-s3-going-pro/#_system_administration">System administration</a></li>
<li><a href="/wordpress-on-s3-going-pro/#_database_administration">Database administration</a></li>
<li><a href="/wordpress-on-s3-going-pro/#_cloud_storage_config">Automated Cloud Storage Connection configuration</a></li>
<li><a href="/wordpress-on-s3-going-pro/#_performance">Performance enhancements</a></li>
<li><a href="/wordpress-on-s3-going-pro/#_conclusion">In conclusion</a></li>
</ul>
</div>
<div style="clear: both;"></div>
<p><span id="more-3027"></span></p>
<h3><a name="_system_administration"></a>System administration</h3>
<p>For extra security, Webmin and phpMyAdmin are configured to use TCP ports 12321 and 12322, correspondingly.  This setup provides a simple and flexible way to secure access to system administration functionality without affecting the website operation.  Access to the system administration functionality can be easily added and removed by modifying the firewall (a.k.a. security group) settings in the <a href="https://console.aws.amazon.com/ec2/home?region=us-east-1#s=SecurityGroups">AWS management console</a>.</p>
<p><a name="_open_ports"></a>By default, the administration TCP ports are closed.  To allow access to Webmin and phpMyAdmin, add the following rule to the security group of the instance (if you’re following the <a href="http://www.slideshare.net/artemlivshits/wordpress-on-s3-stepbystep">step-by-step guide</a>, see slides 8 and 9):</p>
<p><img src="http://www.oblaksoft.com/wp-content/uploads/2013/02/inbound-rules.png" alt="" title="Open ports 12321-12322" width="396" height="239" class="alignnone size-full wp-image-3042" /></p>
<div style="clear: both;"></div>
<p>You can restrict the access further by specifying the IP address range in the source field.  Note that rules can be added to and deleted from the security group at any time and take effect immediately.  You can open the administration TCP ports for the time you need to make configuration changes and close the ports after you’re done.</p>
<p>To access Webmin, go to https://ec2-N-N-N-N.compute-X.amazonaws.com:12321 (substitute the host name with the real EC2 name).  You’ll see a warning that there is a problem with the SSL certificate.  This is expected: the certificate is generated for each instance and you can confirm the authenticity as described on the slides 13 and 14 of the <a href="http://www.slideshare.net/artemlivshits/wordpress-on-s3-stepbystep">step-by-step guide</a>.</p>
<p>Initially, all accounts on the instance are locked, so to log into the Webmin you need to set up the root password first.  One way to do it is to connect to the instance using <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html">SSH</a> or <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html">PuTTY</a> and run the <code><b>sudo root passwd</b></code> command.  But we made it even easier.  With the new WordPress-on-S3 AMI you can set the root password in the <em>user data</em> when creating an instance.  The syntax for root password is the following:</p>
<p><code>
<pre>os.root.password=<em>YourRootPassword</em></pre>
<p></code></p>
<p>Here is a screenshot of setting the root password to SuperSecret7:</p>
<p><img src="http://www.oblaksoft.com/wp-content/uploads/2013/02/root-password.png" alt="" title="Root password in user data" width="513" height="348" class="alignnone size-full wp-image-3044" /></p>
<div style="clear: both;"></div>
<p>If you didn’t set the root password when you were creating the instance, you can stop the instance, edit the user data to set the root password (right click on the instance in the <a href="https://console.aws.amazon.com/ec2/home?region=us-east-1#s=Instances">AWS management console</a> and choose the “View/Change User Data” action from the menu), and start the instance again.</p>
<p>Please be sure to pick a <a href="http://en.wikipedia.org/wiki/Password_strength#Common_guidelines">strong password</a> and keep it safe.</p>
<p>Once the root password is set, you can log into the Webmin and gain full access to your system.  The full Webmin documentation is available <a href="http://doxfer.webmin.com/Webmin">here</a>, and some screenshots are available <a href="http://www.webmin.com/demo.html">here</a>.</p>
<h3><a name="_database_administration"></a>Database administration</h3>
<p>As mentioned earlier, phpMyAdmin uses TCP port 12322, so to access it you need to <a href="#_open_ports">open the port</a> and then go to https://ec2-N-N-N-N.compute-X.amazonaws.com:12322 (substitute the host name with the real EC2 name).  You’ll see a warning that there is a problem with the SSL certificate.  This is expected: the certificate is generated for each instance and you can confirm the authenticity as described on the slides 13 and 14 of the <a href="http://www.slideshare.net/artemlivshits/wordpress-on-s3-stepbystep">step-by-step guide</a>.</p>
<p>Initially, none of MySQL accounts have passwords, which makes them inaccessible via phpMyAdmin.  So to log into phpMyAdmin, you need to set the MySQL root password first.  You do it from the command line, or you can do it in Webmin:</p>
<p><img src="http://www.oblaksoft.com/wp-content/uploads/2013/02/mysql-admin.png" alt="" title="Set MySQL root password" width="723" height="274" class="alignnone size-full wp-image-3071" /></p>
<div style="clear: both;"></div>
<p>Note if Cloud Storage Connection is not configured, MySQL server may not be able to start, so you need to configure Cloud Storage Connection before you can administer MySQL server.</p>
<p>Please be sure to pick a <a href="http://en.wikipedia.org/wiki/Password_strength#Common_guidelines">strong password</a> and keep it safe.</p>
<p>Once the MySQL root password is set, you can log into phpMyAdmin take full control over your database administration.  The full phpMyAdmin documentation is available <a href="http://www.phpmyadmin.net/home_page/docs.php">here</a>, and wiki pages are available <a href="http://wiki.phpmyadmin.net/pma/Welcome_to_phpMyAdmin_Wiki">here</a>.</p>
<p>If you want to set password for MySQL wordpress_user, you also need to edit the wp-config.php and update the password there as well.  For quick access to wp-config.php, we added a custom command in Webmin:</p>
<p><img src="http://www.oblaksoft.com/wp-content/uploads/2013/02/webmin-wp-config.png" alt="" title="Edit wp-config.php" width="435" height="195" class="alignnone size-full wp-image-3059" /></p>
<div style="clear: both;"></div>
<h3><a name="_cloud_storage_config"></a>Automated Cloud Storage Connection configuration</h3>
<p>The Cloud Storage Connection Web UI (slide 12 in the <a href="http://www.slideshare.net/artemlivshits/wordpress-on-s3-stepbystep">step-by-step guide</a>) is great for a quick start, but in production you might want to have the site ready from the start in an automated scripted way, without going thru manual steps.</p>
<p>Now you can pre-configure Cloud Storage Connection in user data when creating an instance from the ready-to-run WordPress-on-S3 AMI.  The syntax for Cloud Storage Connection configuration is the same as in the my.cnf file:</p>
<p><code>
<pre>clouse_cloud_data_url=s3://s3.amazonaws.com/<em>bucket</em>/<em>prefix</em>
clouse_cloud_auth_key=<em>AccessKey</em>:<em>SecretKey</em></pre>
<p></code></p>
<p>You can get a name of an existing bucket or create a new bucket to store your website content in the <a href="https://console.aws.amazon.com/s3/home">AWS management console</a>.  Your Access Key and Secret Key can be retrieved <a href="https://portal.aws.amazon.com/gp/aws/securityCredentials">here</a>.  See also slides 16 and 21 of the <a href="http://www.slideshare.net/artemlivshits/wordpress-on-s3-stepbystep">step-by-step guide</a>.</p>
<p>Here is a screenshot of setting Cloud Storage Connection configuration (and the root password) in the user data:</p>
<p><img src="http://www.oblaksoft.com/wp-content/uploads/2013/02/clouse-config.png" alt="" title="Cloud configuration in user data" width="620" height="370" class="alignnone size-full wp-image-3061" /></p>
<div style="clear: both;"></div>
<p><br /><br />
If you made any mistake in the user data configuring your website instance, you can simply stop the instance, correct the user data (right click on the instance in the <a href="https://console.aws.amazon.com/ec2/home?region=us-east-1#s=Instances">AWS management console</a> and choose the “View/Change User Data” action from the menu), and start the instance again.</p>
<h3><a name="_performance"></a>Performance enhancements</h3>
<p>To help the website deal gracefully with load spikes (especially on <a href="http://aws.amazon.com/ec2/instance-types/#micro-instances">EC2 micro instances</a>) we added a 1 GB swap file.   Now the operating system can save rarely used data to disk and use memory to store most frequently accessed data.</p>
<p>To optimize PHP code execution, WordPress-on-S3 AMI now has <a href="http://php.net/manual/en/book.apc.php">Alternative PHP Cache</a> (a.k.a. APC) installed and configured.  To take advantage of APC even further, we configured <a href="http://www.w3-edge.com/wordpress-plugins/w3-total-cache/">W3 Total Cache</a> to use APC for caching internal WordPress objects’ data and database queries.</p>
<p>Many of our customers use W3 Total Cache plugin to optimize their website.  The new AMI comes with W3 Total Cache pre-installed and configured for better website performance.</p>
<h3><a name="_conclusion"></a>In conclusion</h3>
<p>Ready-to-run WordPress-on-S3 AMI, containing up-to-date LAMP + WordPress + <a href="http://www.oblaksoft.com/wordpress-on-s3-how-it-works/">ClouSE</a> + familiar admin tools and UI, allows launching a WordPress-powered website to cloud in a matter of minutes.  Now you can take full control of the website administration, all from your Web browser, no command line experience is required.  Launch your website today at <a href="http://www.oblaksoft.com/downloads/">http://www.oblaksoft.com/downloads/</a>, using WordPress-on-S3 AMI as the platform.</p>
<p><em>It&#8217;ll be great to hear your thoughts on how we can further simplify the experience of launching WordPress to cloud.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oblaksoft.com/wordpress-on-s3-going-professional/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>WordPress on Google Cloud Storage: step-by-step</title>
		<link>http://www.oblaksoft.com/wordpress-on-google-cloud-storage-step-by-step/</link>
		<comments>http://www.oblaksoft.com/wordpress-on-google-cloud-storage-step-by-step/#comments</comments>
		<pubDate>Sun, 20 Jan 2013 01:03:59 +0000</pubDate>
		<dc:creator>Artem Livshits</dc:creator>
				<category><![CDATA[Founders BLOG]]></category>
		<category><![CDATA[google cloud storage]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[YAPIXX]]></category>

		<guid isPermaLink="false">http://www.oblaksoft.com/?p=3016</guid>
		<description><![CDATA[By popular demand, here is the step-by-step guide for configuring WordPress with Google Cloud Storage. The slides have notes, they are a little hard to discover with the SlideShare interface, look for a tab below the slide that looks like &#8220;Notes on Slide #&#8221;.]]></description>
			<content:encoded><![CDATA[<p>By popular demand, here is the step-by-step guide for configuring WordPress with Google Cloud Storage.</p>
<p>The slides have notes, they are a little hard to discover with the SlideShare interface, look for a tab below the slide that looks like &#8220;Notes on Slide #&#8221;.</p>
<p><iframe style="border: 1px solid #CCC; border-width: 1px 1px 0; margin-bottom: 5px;" src="http://www.slideshare.net/slideshow/embed_code/16060354" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="427" height="356"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oblaksoft.com/wordpress-on-google-cloud-storage-step-by-step/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>WordPress on S3: how to prevent hotlinking</title>
		<link>http://www.oblaksoft.com/wordpress-on-s3-how-to-prevent-hotlinking/</link>
		<comments>http://www.oblaksoft.com/wordpress-on-s3-how-to-prevent-hotlinking/#comments</comments>
		<pubDate>Thu, 27 Dec 2012 08:01:40 +0000</pubDate>
		<dc:creator>Artem Livshits</dc:creator>
				<category><![CDATA[Founders BLOG]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[YAPIXX]]></category>

		<guid isPermaLink="false">http://www.oblaksoft.com/?p=2955</guid>
		<description><![CDATA[Now that you use Amazon S3 to store and serve media files in scalable fashion, how would you prevent undesirable hotlinking to your files? Hotlinking to cloud storage URLs Hotlinking (or direct linking, inline linking) is when other sites link to or embed the image (or other media file, e.g. video) directly without providing a [...]]]></description>
			<content:encoded><![CDATA[<p><em>Now that you use Amazon S3 to store and serve media files in scalable fashion, how would you prevent undesirable hotlinking to your files?</em></p>
<h2>Hotlinking to cloud storage URLs</h2>
<p><a href="http://en.wikipedia.org/wiki/Inline_linking">Hotlinking</a> (or direct linking, inline linking) is when other sites link to or embed the image (or other media file, e.g. video) directly without providing a link to the source page. Oftentimes hotlinking happens without meaning any harm: people just want to share a picture with their Facebook friends, or post it to forums they like or etc. Regardless of intention, though, hotlinking may be harmful to your business: the media file gets downloaded from your site and consume the bandwidth that you pay for, but the user doesn’t get to see your page depriving you of ad revenue, etc.</p>
<p>With WordPress-to-Cloud solution all media files are stored in the cloud storage such as Amazon S3. Now it is the cloud storage (and not your web server) that serves the images and other media files. Even though this approach reduces load on your web server and hotlinking is unlikely to cause scalability problems, you are still paying for the bandwidth.</p>
<p><span id="more-2955"></span></p>
<h2>Configure access policies to cloud storage URLs</h2>
<p>As the <a href="http://www.oblaksoft.com/wordpress-on-s3-newsletter-may-2012/">WordPress on S3</a> solution becomes more popular, we often get questions about access control to the site’s images and other media files that are stored and served by Amazon S3. </p>
<p>Amazon S3 supports <a href="http://docs.amazonwebservices.com/AmazonS3/latest/dev/UsingBucketPolicies.html">bucket policies</a> that can be used to implement flexible access restrictions for the objects stored in the bucket.  The access can be restricted based on various factors, including the <em><a href="http://en.wikipedia.org/wiki/HTTP_referer">referer</a></em> header of the HTTP request that the web browser sends when it downloads the image.  I.e. if the image is downloaded from a web page, the referrer is going to be the URL of the web page.  So when the image is downloaded from your website the referrer URL is going to contain your website’s host name; but when the image is downloaded from somewhere else (e.g. Facebook) the referrer URL is going to contain some other host name (e.g. www.facebook.com).</p>
<p>Here is an example of a bucket policy that only allows downloading the media files if they are referred from www.example.com and www.subdomain.example.com:</p>
<pre><code>{
	"Version": "2008-10-17",
	"Id": "HTTP referrer policy",
	"Statement": [
		{
			"Sid": "1",
			"Effect": "Deny",
			"Principal": {
				"AWS": "*"
			},
			"Action": "s3:GetObject",
			"Resource": "arn:aws:s3:::<b><font color="red">mybucket/myprefix</font></b>/wblob/*",
			"Condition": {
				"StringNotLike": {
					"aws:Referer": [
						<b><font color="red">"http://www.example.com/*",
						"http://www.subdomain.example.com/*"</font></b>
					]
				}
			}
		}
	]
}</code></pre>
<p>The policy is specified in <a href="http://json.org/">JSON</a> format, but largely can be copied from the sample policy substituting the essential parts that are highlighted in red: the bucket name and the (optional) prefix, and the list of the referrer patterns.</p>
<h2>Step-by-step instructions</h2>
<p>Let’s launch a ready-to-run WordPress-on-S3 and do a practical study of hotlinking prevention. After following <a href="http://www.slideshare.net/artemlivshits/wordpress-on-s3-stepbystep">this step-by-step guide</a> the website is going to end up looking like this:</p>
<p><img class="aligncenter  wp-image-2547" title="WordPress on S3 - yapixx-frontpage" src="http://www.oblaksoft.com/wp-content/uploads/2012/05/yapixx-frontpage.png" alt="" width="676" height="580" /></p>
<div style="clear: both;"></div>
<p>Now suppose you like the bottom-left picture with the pool.  You copy the link and send an email to you friend.  The email is going to look like this:</p>
<p><img src="http://www.oblaksoft.com/wp-content/uploads/2012/12/weblob-gmail-e1355892537177.png" alt="" title="weblob-gmail" width="700" height="168" class="alignnone size-full wp-image-2968" /></p>
<div style="clear: both;"></div>
<p>Without the bucket policy in place, clicking on the link is going to do what you expect: the web browser is going to download the picture of the pool and show it.  So the link can be used anywhere: in a blog, on Facebook, on Twitter, etc.</p>
<p>Now let’s create a bucket policy that would only allow using the image from the website.  To do that log into the <a href="https://console.aws.amazon.com/s3/home">AWS management console</a>, pick the bucket that stores the data for the website (in our example it’s oblaksoft-yapixx), choose permissions and select ‘Add bucket policy’:</p>
<p><img src="http://www.oblaksoft.com/wp-content/uploads/2012/12/s3-bucket-policy.png" alt="" title="s3-bucket-policy" width="757" height="454" class="alignnone size-full wp-image-2973" /></p>
<div style="clear: both;"></div>
<p>Enter the following policy:</p>
<p><code>
<pre>{
	"Version": "2008-10-17",
	"Id": "HTTP referrer policy",
	"Statement": [
		{
			"Sid": "1",
			"Effect": "Deny",
			"Principal": {
				"AWS": "*"
			},
			"Action": "s3:GetObject",
			"Resource": "arn:aws:s3:::<b><font color="red">oblaksoft-yapixx/db0</font></b>/wblob/*",
			"Condition": {
				"StringNotLike": {
					"aws:Referer": "<b><font color="red">http://www.yapixx.com/*</font></b>"
				}
			}
		}
	]
}</code></pre>
<p>The highlighted parts correspond to this web site’s data location (oblaksoft-yapixx/db0) and the domain name of this site (www.yapixx.com). You will need to supply the values that correspond to your own setup.  Now the images still appear fine when they are embedded or referred from www.yapixx.com. But downloading the images from any other domain is going to result into the 403/Forbidden response, like this:</p>
<p><img src="http://www.oblaksoft.com/wp-content/uploads/2012/12/s3-access-denied.png" alt="" title="s3-access-denied" width="510" height="200" class="alignnone size-full wp-image-2977" /></p>
<div style="clear: both;"></div>
<p>You can specify multiple referrers, if you wish.  For example, if you have multiple domains that are used as aliases for your web site, you can list all of them there.  You can even specify domain names that you don’t own.  For example, if you want to allow the image to be referred from web email clients, but not from social networks, you can add a policy like this:</p>
<p><code>
<pre>{
	"Version": "2008-10-17",
	"Id": "HTTP referrer policy",
	"Statement": [
		{
			"Sid": "1",
			"Effect": "Deny",
			"Principal": {
				"AWS": "*"
			},
			"Action": "s3:GetObject",
			"Resource": "arn:aws:s3:::<b><font color="red">oblaksoft-yapixx/db0</font></b>/wblob/*",
			"Condition": {
				"StringNotLike": {
					"aws:Referer": [
						<b><font color="red">"http://mail.google.com/*",
						"http://*.mail.yahoo.com/*",
						"http://www.yapixx.com/*"</font></b>
					]
				}
			}
		}
	]
}</pre>
<p></code></p>
<p>This policy allows the images to be referred from www.yapixx.com, Gmail and Yahoo! mail.</p>
<p>Sometimes you may want to allow requests that don’t have the referrer specified.  This can happen if you paste the image URL directly into the address field of the web browser – it’s not referred from anywhere.  In that case you can use a special Null condition for the referrer key, for example:</p>
<p><code>
<pre>{
	"Version": "2008-10-17",
	"Id": "HTTP referrer policy",
	"Statement": [
		{
			"Sid": "1",
			"Effect": "Deny",
			"Principal": {
				"AWS": "*"
			},
			"Action": "s3:GetObject",
			"Resource": "arn:aws:s3:::<b><font color="red">oblaksoft-yapixx/db0</font></b>/wblob/*",
			"Condition": {
				"StringNotLike": {
					"aws:Referer": "<b><font color="red">http://www.yapixx.com/*</font></b>"
				},
				<font style="background-color: yellow">"Null": {</font>
				<font style="background-color: yellow">	"aws:Referer": false</font>
				<font style="background-color: yellow">}</font>
			}
		}
	]
}</pre>
<p></code></p>
<p>So, as you can see, Amazon S3 puts you in control of where your media files can be referred from.  As of the time of this writing, Google Cloud Storage doesn’t seem to have an equivalent access control mechanism, but we hope that they will implement this functionality soon.</p>
<p><em>Looking forward to hearing your thoughts on your direct linking prevention needs and practices.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oblaksoft.com/wordpress-on-s3-how-to-prevent-hotlinking/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OblakSoft Cloud Storage Engine Newsletter, December 2012</title>
		<link>http://www.oblaksoft.com/mysql-on-s3-clouse-1-0b-1-released/</link>
		<comments>http://www.oblaksoft.com/mysql-on-s3-clouse-1-0b-1-released/#comments</comments>
		<pubDate>Wed, 26 Dec 2012 08:01:04 +0000</pubDate>
		<dc:creator>Artem Livshits</dc:creator>
				<category><![CDATA[Founders BLOG]]></category>
		<category><![CDATA[OblakSoft Newsletter]]></category>
		<category><![CDATA[ClouSE]]></category>
		<category><![CDATA[google cloud storage]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.oblaksoft.com/?p=2996</guid>
		<description><![CDATA[ClouSE version 1.0b.1.6 is released OblakSoft is pleased to announce the release of ClouSE version 1.0b.1.6.  In this release we fixed some of the known ClouSE Beta limitations as well as performance and functional bugs reported by our users. Here is the summary of changes that are included into 1.0b.1.6: Support for latest MySQL 5.5 [...]]]></description>
			<content:encoded><![CDATA[<h2>ClouSE version 1.0b.1.6 is released</h2>
<p>OblakSoft is pleased to announce the release of ClouSE version 1.0b.1.6.  In this release we fixed some of the known ClouSE Beta limitations as well as performance and functional bugs reported by our users.</p>
<p>Here is the summary of changes that are included into 1.0b.1.6:<br />
<span id="more-2996"></span></p>
<ul>
<li><strong>Support for latest MySQL 5.5</strong></li>
</ul>
<p>Now ClouSE supports MySQL thru 5.5.29.  To keep the distribution small, we don’t build binaries for MySQL prior to 5.5.19 anymore.  If you need one, please <a href="http://www.oblaksoft.com/about-us/email-us/">contact us</a>.</p>
<ul>
<li><strong>DECIMAL keys support</strong></li>
</ul>
<p>Now ClouSE supports using DECIMAL fields in keys.  Previously neither the primary key nor indices could include DECIMAL fields.  This fixes the following Beta limitation: <em>DECIMAL fields cannot be used in keys</em>.</p>
<ul>
<li><strong>Tables without primary key</strong></li>
</ul>
<p>Now ClouSE supports tables without primary key.  Previously each table had to have a primary key.  This fixes the following Beta limitation: <em>The table must have a primary key.</em></p>
<ul>
<li><strong>BLOB fields support</strong></li>
</ul>
<p>Now ClouSE supports BLOB fields that can store more than 128 KB of data.  Previously BLOB fields were stored in the record and were limited by the maximum record side; an attempt to store a value that is larger than 128 KB would lead to an error.  This fixes the following Beta limitation: <em>BLOB fields are stored in the record thus are limited by the max record size (128 KB)</em>.</p>
<p>The software can be downloaded at <a href="http://www.oblaksoft.com/downloads/">http://www.oblaksoft.com/downloads/</a> for FREE.</p>
<p>The release notes are available <a href="http://www.oblaksoft.com/documentation/clouse-release-notes/#v1_0b_1_6">here</a>.</p>
<p><em>If there is anything that might be blocking your deployments of ClouSE, please let us know.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oblaksoft.com/mysql-on-s3-clouse-1-0b-1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OblakSoft Cloud Storage Engine Newsletter, November 2012</title>
		<link>http://www.oblaksoft.com/mysql-wordpress-google-cloud-storage/</link>
		<comments>http://www.oblaksoft.com/mysql-wordpress-google-cloud-storage/#comments</comments>
		<pubDate>Tue, 27 Nov 2012 10:07:43 +0000</pubDate>
		<dc:creator>Artem Livshits</dc:creator>
				<category><![CDATA[OblakSoft Newsletter]]></category>
		<category><![CDATA[cloud storage]]></category>
		<category><![CDATA[google cloud storage]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.oblaksoft.com/?p=2897</guid>
		<description><![CDATA[MySQL and WordPress welcome Google Cloud Storage OblakSoft is pleased to announce that the Cloud Storage Engine for MySQL (ClouSE) now supports Google Cloud Storage.  Using MySQL to store data directly in Google Cloud Storage becomes a simple deployment choice: pick your Google Cloud Storage bucket and migrate any or all of your tables to [...]]]></description>
			<content:encoded><![CDATA[<h2>MySQL and WordPress welcome Google Cloud Storage</h2>
<p>OblakSoft is pleased to announce that the Cloud Storage Engine for MySQL (<a href="http://www.oblaksoft.com/documentation/">ClouSE</a>) now supports <a href="https://developers.google.com/storage/">Google Cloud Storage</a>.  Using MySQL to store data directly in Google Cloud Storage becomes a simple deployment choice: pick your Google Cloud Storage bucket and migrate any or all of your tables to the cloud.  We would like to thank Google storage team for their support and contributions.</p>
<p>This functionality opens Google Cloud Storage to millions of MySQL-based applications – cloud storage becomes a better alternative to local storage, no matter where you host the application, on premise or in the cloud.  Applications can now store data on Google’s infrastructure, and enjoy high availability, high durability and high scalability of Google Cloud Storage.</p>
<div style="float: left;">
<img src="http://www.oblaksoft.com/wp-content/uploads/2012/11/cloud-choice.png" alt="" title="Pick your cloud!" width="182" height="168" class="alignnone size-full wp-image-2904" />
</div>
<div style="float: left;">
<ul>
<li><a href="/mysql-wordpress-google-cloud-storage/#_choice_is_yours">The choice is yours</a></li>
<li><a href="/mysql-wordpress-google-cloud-storage/#_webstor_gcs">WebStor support for Google Cloud Storage</a></li>
<li><a href="/mysql-wordpress-google-cloud-storage/#_wordpress_gcs">WordPress launches into Google’s cloud</a></li>
<li><a href="/mysql-wordpress-google-cloud-storage/#_download">Launch your site to the cloud</a></li>
</ul>
</div>
<div style="clear: both;"></div>
<p><span id="more-2897"></span></p>
<h3><a name="_choice_is_yours"></a>The choice is yours</h3>
<p>The choice of cloud storage is completely transparent to MySQL.  SQL developers and MySQL-based applications can continue using MySQL’s programing model and APIs while offloading storage management to a cloud storage provider.  Today ClouSE supports public cloud storage from Amazon and Google as well as the corresponding private cloud solutions.  All MySQL functionality as well as advanced cloud-only features such as <a href="http://www.oblaksoft.com/mysql-blob-meets-amazon-s3-blob-weblobs-explained/">Weblobs</a> will work identically on either cloud.<strong></strong></p>
<p>Connecting your database to Google Cloud Storage only takes a few minutes.   Specify the cloud storage location in the /etc/my.cnf file and select a set of tables to get <a href="http://www.oblaksoft.com/documentation/faq/#_migrate">migrated</a> to the cloud.</p>
<p>Now let’s talk about the powerful choice of deployment options for your application:</p>
<p><strong>
<ul>
<li>Hybrid cloud storage integration</li>
</ul>
<p></strong></p>
<p>The application can stay on premise (or at the web hoster site) but all its data will be stored encrypted at the cloud storage of your choice.  ClouSE technology combines the best of private and public storage by delivering <a href="http://www.oblaksoft.com/mysql-on-s3-performance-with-storage-across-continent/">performance</a> and <a href="http://www.oblaksoft.com/documentation/faq/#_secure">security</a> of local storage, plus all the benefits of public cloud storage.</p>
<p><strong>
<ul>
<li>Cloud deployment</li>
</ul>
<p></strong></p>
<p>You can also both host your application and store its data in the same cloud utilizing compute services as well as storage service as utility.  E.g. our FREE ready-to-run WordPress for Google Cloud image is configured to run in <a href="https://developers.google.com/compute/">Google Compute Engine</a>  and store data at Google Cloud Storage.</p>
<p><strong>
<ul>
<li>Inter-cloud deployment</li>
</ul>
<p></strong></p>
<p>You don’t even have to choose just one cloud.  The storage configuration allows to mix and match clouds.  For example, our popular <a href="http://www.oblaksoft.com/wordpress-on-s3-newsletter-may-2012/">WordPress-on-S3 AMI</a> can run in Amazon EC2 and store data in Google Cloud Storage.  And vice versa: the instance can run in Google Compute Engine and store its data in Amazon S3.  This allows for gradual migration between clouds, should another cloud become more attractive down the road.</p>
<p>Seamless support for multiple cloud providers puts customers in control.  You can choose the configuration that works best for you to fit your requirements to enforce data confidentiality, optimize for performance, minimize cost, address regulatory requirements, take advantage of other cloud services, etc.  And you can change it when your requirements change.  There is no necessity to commit to the “One True Cloud Platform”.  With ClouSE, you can avoid vendor lock-in and make sure that your way to the cloud happens <a href="http://www.oblaksoft.com/docs/making_cloud_work.pdf"><em>your</em> way</a>.</p>
<h3><a name="_webstor_gcs"></a>WebStor support for Google Cloud Storage</h3>
<p>As users of open source software, we’re always delighted to contribute back.  <a href="http://www.oblaksoft.com/documentation/webstor/">WebStor</a>, the high performance cloud storage access library, now can work with Google Cloud Storage too.  WebStor source code is available under the Apache 2.0 license absolutely FREE from <a href="http://www.oblaksoft.com/downloads">http://www.oblaksoft.com/downloads</a>.</p>
<h3><a name="_wordpress_gcs"></a>WordPress launches into Google’s cloud</h3>
<p>To take further advantage of Google Cloud, we’ve assembled a ready-to-run WordPress for <a href="https://developers.google.com/compute/">Google Compute Engine</a> <a title="" href="#_footnote1">[1]</a>.  Launching a highly-available dynamic website powered by WordPress into Google’s cloud can now be done with one command, like this:</p>
<p><strong>gce-yapixx <em>&lt;instanceName&gt;</em> &#8211;storage_url=gs://<em>&lt;bucket&gt;</em>/<em>&lt;folder&gt;</em> &#8211;storage_auth=<em>&lt;secret&gt;</em>:<em>&lt;access&gt;</em></strong></p>
<p>Google Compute Engine takes care of making the website instance highly available.  The WordPress instance is completely stateless, as all the data stored in Google Cloud Storage.  The Google Compute Engine can just launch a new virtual machine with the same image, should the old virtual machine fail for any reason.  The cloud storage configuration is passed via the <a href="https://developers.google.com/compute/docs/metadata#custom">custom metadata</a> to the instance, so at startup the new virtual machine will knowhow to access its data in Google Cloud Storage.</p>
<p>WordPress is one example of a MySQL-based application, which now can be configured to run in the Google cloud and take full advantage of the cloud services:</p>
<ul>
<li>It relies on Google Compute Engine to keep the instance highly available</li>
<li>It relies on Google Cloud Storage to keep the data highly available and highly durable</li>
<li>It relies on Google Cloud Storage to serve media files (such as pictures) in a highly scalable fashion</li>
<li>It relies on Google Cloud Storage to distribute media files across the globe for fast access in a CDN-like manner</li>
<li>Storage cost scales with usage, no upfront reservation is needed</li>
<li>Storage consumption scales up and down with the amount of data stored</li>
<li>No backup and recovery is needed for the website data</li>
</ul>
<h3><a name="_download"></a>Launch your site to the cloud</h3>
<p>Download our ready-to-run WordPress on Google Cloud.  Or just download the new Beta version of ClouSE to migrate your own MySQL-based application to Google Cloud Storage today.  It’s easy and FREE, no writing code is required.  The choice is yours, the software is at <a href="http://www.oblaksoft.com/downloads/">http://www.oblaksoft.com/downloads/</a>.</p>
<div>
<p>&nbsp;</p>
<hr align="left" size="1" width="33%" />
<div>
<p><a title="" name="_footnote1"></a>[1] Note that Google Compute Engine is in limited preview as of this writing.</p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.oblaksoft.com/mysql-wordpress-google-cloud-storage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OblakSoft Cloud Storage Engine Newsletter, October 2012</title>
		<link>http://www.oblaksoft.com/mysql-on-s3-clouse-1-0b-1-4-released/</link>
		<comments>http://www.oblaksoft.com/mysql-on-s3-clouse-1-0b-1-4-released/#comments</comments>
		<pubDate>Mon, 22 Oct 2012 04:42:24 +0000</pubDate>
		<dc:creator>Artem Livshits</dc:creator>
				<category><![CDATA[Founders BLOG]]></category>
		<category><![CDATA[OblakSoft Newsletter]]></category>
		<category><![CDATA[ClouSE]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.oblaksoft.com/?p=2861</guid>
		<description><![CDATA[MySQL on Amazon S3: ClouSE version 1.0b.1.4 is released OblakSoft is pleased to announce the release of ClouSE version 1.0b.1.4.  In this release we fixed some of the known ClouSE Beta limitations that required workarounds in some configurations. In particular, now the popular BuddyPress WordPress plugin can store its tables in ClouSE without a patch [...]]]></description>
			<content:encoded><![CDATA[<h2>MySQL on Amazon S3: ClouSE version 1.0b.1.4 is released</h2>
<p>OblakSoft is pleased to announce the release of ClouSE version 1.0b.1.4.  In this release we fixed some of the known ClouSE Beta limitations that required workarounds in some configurations.</p>
<p>In particular, now the popular <a href="http://wordpress.org/extend/plugins/buddypress/">BuddyPress</a> WordPress plugin can store its tables in ClouSE without a patch that worked around the missing features.  If you’re using the patched version of BuddyPress 1.6.1 provided by us, you can now upgrade ClouSE and use the original BuddyPress sources.  Thank you for your patience and commitment!</p>
<p>Here is the summary of changes:<br />
<span id="more-2861"></span></p>
<ul>
<li><strong>Support for latest MySQL 5.5</strong></li>
</ul>
<p>Now ClouSE supports MySQL thru 5.5.28.  To keep the distribution small, we don’t build binaries for MySQL prior to 5.5.17 anymore.  If you need one, please <a href="http://www.oblaksoft.com/about-us/email-us/">contact us</a>.</p>
<ul>
<li><strong>NULL support</strong></li>
</ul>
<p>Now ClouSE supports NULL in all field types.  Previously, only CHAR, VARCHAR and BLOB fields could support NULL.  This fixes the following Beta limitation: <em>Integer, date / time, decimal, float, bit, enum, and set fields must be declared NOT NULL.</em></p>
<ul>
<li><strong>TRUNCATE support</strong></li>
</ul>
<p>Now ClouSE supports the TRUNCATE statement.</p>
<p>The software can be downloaded at <a href="http://www.oblaksoft.com/downloads/">http://www.oblaksoft.com/downloads/</a> for FREE.</p>
<p>The release notes are available <a href="http://www.oblaksoft.com/documentation/clouse-release-notes/#v1_0b_1_4">here</a>.</p>
<p><em>Please <a href="http://www.oblaksoft.com/about-us/contact/" title="About OblakSoft">let us know</a> if you run into any issues trying WordPress (or directly MySQL) on S3. We&#8217;ll make sure to address them as our 1st priority.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oblaksoft.com/mysql-on-s3-clouse-1-0b-1-4-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
