Set up Owncloud for personal data management and Android sync

If privacy is a concern and you’d be feeling better to host your own CalDav and CarDav (calendar and contact) data but still would like to access it from your smartphone and web Owncloud is a straightforward open-source tool to use.

Remark: hosting your email would only be a possibility if high availability server hardware and internet connection is available for use.

  • Register a cheap domain with Namecheap and configure DynamicDNS
  • Add this script to CRON to regularly update Namecheap on your IP

    • Do this on the Internet interface of your host or OpenWRT router
    • Use this script
urllib2.urlopen("" % ("subdomain", "", ""))
  • Set it in crontab
crontab -e
#Add this to run IP update script every 0:05
        5 0 * * * /path/to/script
  • Use an Ubuntu Server (14.04 64)
#Install Owncloud from Repository
cd ~
sudo sh -c "echo 'deb /' >> /etc/apt/sources.list.d/owncloud.list"
sudo apt-get update
sudo apt-get install owncloud
sudo apt-get install mysql-server
#Define MySQL password

#Create MySQL table
sudo mysql -u root -p #DefinedPwHere
	GRANT ALL ON owncloud.* to 'owncloud'@'localhost' IDENTIFIED BY 'database_password';

#Set file permissions
sudo chown -R www-data:www-data /var/www/owncloud
find /var/www/owncloud -type d -exec chmod 750 {} ;
find /var/www/owncloud -type f -exec chmod 640 {} ;

#Enable Apache SSL
sudo a2enmod ssl
sudo a2ensite default-ssl
sudo service apache2 reload
sudo a2enmod rewrite

#Generate SSL certs
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

#Modify Apache configuration
sudo nano /etc/apache2/sites-available/default-ssl

#Add this to the file being edited with Nano
	<IfModule mod_ssl.c>
	<VirtualHost _default_:443>
        	ServerName YourServerName
	        ServerAdmin webmaster@localhost
        	DocumentRoot /var/www
	        <Directory />
        	        Options FollowSymLinks
                	AllowOverride None
	        <Directory /var/www/>
	                Options Indexes FollowSymLinks MultiViews
	                AllowOverride None
	                Order allow,deny
	                allow from all
        	ErrorLog ${APACHE_LOG_DIR}/error.log
	        LogLevel warn
        	CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
	        SSLEngine on
		SSLCertificateFile /etc/apache2/ssl/apache.crt
		SSLCertificateKeyFile /etc/apache2/ssl/apache.key
	        <FilesMatch ".(cgi|shtml|phtml|php)$">
	                SSLOptions +StdEnvVars
	        <Directory /usr/lib/cgi-bin>
        	        SSLOptions +StdEnvVars
	        <Directory /var/www/owncloud>
        	        Options Indexes FollowSymLinks MultiViews
                	AllowOverride All
	                Order allow,deny
        	        Allow from all
                	# add any possibly required additional directives here
	                # e.g. the Satisfy directive (see below for details):
        	        Satisfy Any

sudo service apache2 restart


  • Access your Owncloud at http://host/owncloud
    • Follow install steps, use MySQL, owncloud as database and use your database password as root or owncloud user
  • Use your Owncloud
  • Configure your router to forward requests of yourdomain:443 to yourowncloudhost:443 to access Owncloud from the Internet
  • Configure mobile device sync
    • Use DavDroid for your Android phone
      • CalDAV: https://yourowncloudhost/remote.php/caldav/
      • CardDAV: https://yourowncloudhost/remote.php/carddav/
    • As most likely a self-signed certificate is used, set it up with CADroid accessible from FDroid market