Everybody has is preferred cloud storage provider, there are so many out there that almost every person uses more than one. As main provider I used Wuala for years, the client side encryption give them an edge over the competitors. Unfortunately Wuala’s weak spot is the client, I use a Mac and every time I upgrade the OS there is some strange issue related to the fact that you have to install Java 6 (7 or 8 are simply ignored). As soon as I installed Yosemite Wuala stopped working so I headed to their forums to ask for help but the only thing that I found was a “you’re using a beta, it’s your fault” attitude. This prompted me to search for alternatives but I didn’t like the idea to send my personal files to a provider that can easily read them. After Googling around I stumbled in OwnCloud and I decided to try it on my Linode VPS.

OwnCloud is essentially a PHP site that you can host everywhere, it provides encryption and you can also add external storage like Amazon S3 or Google Drive so you don’t waste precious space on your VPS. The great thing is that it encrypts the files before sending them to the external storage so you don’t have to worry about who reads your files. On the client side you can use the web interface or the native clients as you do with your actual provider.

Installation

OwnCloud’s documentation is one of the best I ever consulted. We all know that when you read an installation guide and it’s longer than 30-40 lines something will go wrong. I was amazed to be able to install the prerequisites, download and install OwnCloud, set the right permissions, configure NGINX with SSL, configure MySQL and run the wizard all without problems. They will even give you an ideal NGINX server configuration so you just have to copy paste it. The only thing that I found weird is that by default they use SQLite, fortunately the wizard makes it easy to switch to MySQL. The testing with a small subset of my files went fine so I decided to upload everything and there I encountered some issues. The first is speed, not a big deal when you have only some files but on heavy uses I brought PHP FPM to his knees and it started affecting other sites hosted on the VPS. Unfortunately there aren’t many blog posts about these issues but the documentation is once again helpful. It all boils down to: raise the timeouts, raise the POST size, install APC and tweak MySQL.

Here’s my current configuration:

/etc/php5/fpm/php.ini:

upload_max_filesize = 10G
post_max_size = 10G
memory_limit = 768M
max_execution_time = 9000

/etc/php5/fpm/pool.d/www.conf:

request_terminate_timeout = 9000s
pm.max_spare_servers = 6
pm.max_children = 10

/etc/php5/conf.d/apc.ini:

apc.shm_size=256M
apc.num_files_hint = 10000
apc.user_entries_hint=10000
apc.max_file_size = 5M

/etc/mysql/conf.d/innodb.cnf:

[mysqld]
innodb_file_per_table
innodb_buffer_pool_size=512M
innodb_additional_mem_pool_size=8M

Remember to adjust these settings to your machine, especially CPU and RAM, because a misconfigured FPM can jam everything. After that I just needed to add some shared folders between users and it was a piece of cake, the interface is very simple and does exactly what you want to do.

Google Drive

I have a lot of files that take an huge amount of space but I rarely access so I decided to try to connect to Google Drive. It actually worked but I got strange random errors and the transfer rate was really low. I was a bit short on time to debug every single case but it may be related to my VPS’s location (UK). At this point I decided to switch to Amazon S3 to compare the options.

Amazon S3

I really underestimated the time required to set up an account on AWS from scratch, I’m going to skip that part because it’s just long, nothing really complex. One thing that took me some time to figure it out and may be important is the policy to allow OwnCloud to use S3:

{
    "Version": "2008-10-17",
    "Id": "Policy1407413761849",
    "Statement": [
        {
            "Sid": "[sid]",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::[user configured in OwnCloud]"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::[bucked id]/*"
        }
    ]
}

Once that you have defined a bucket and a valid policy it’s just matter of entering the right fields in OwnCloud. At first it seemed to hang but a page refresh showed that everything was working correctly. The speed was the first thing that I noticed and it’s impressive: I chose Ireland as bucket location and the transfer rate was over 20 Mb/s. Without significant errors and that speed I decided to keep my files on S3. There is a downside at the moment and it’s important to keep it in mind: the synchronisation generates a lot of requests and outbound traffic that you’re going to be charged. Based on the size and number of files I found no correlation with the amount of requests, maybe turning on the encryption generates a lot of extra traffic. Even said that the costs are manageable: I have 23.5 GB on S3 and I paid around 15$ the first upload and between 0.03$ and 0.05$ a day to keep the files there. I just had a noticeable issue with S3 that was related to file names with special characters (è, à, +, …) and it was fixed promptly after it was reported on GitHub. I find this is a very good sign about the community around OwnCloud and it deserves to be pointed out.

The clients

I used 4 clients: the Web interface, Mac, Windows and iOS. The web interface is simple but functional, I don’t need fancy stuff. It’s great when you don’t have a client on your machine, you just need to check a file or you want to set up a shared folder. Both Mac and Windows clients do their job, having switched from Wuala I was curios to see any improvements on speed and I found them: the clients are very lightweight (especially because the encryption is server side now) and you can easily configure everything. The Mac client had a small GUI bug but it was fixed with version 1.6.3. The iOS version is a paid app on the AppStore and it’s very well done, it works like the competitors and it even supports multiple instances of OwnCloud.

Upgrade

I just upgraded from 7.0.1 to 7.0.2 and with the dedicated wizard it was both fast and painless, everybody loves smooth upgrades.