Technology Blog

How to install ownCloud 8 on a CentOS 7 VPS


owncloud vpsownCloud is an open source web application for data synchronization and file sharing. The latest version of ownCloud brings improved sharing and collaboration and introduces an improved search, faster ways of getting at your files with favorites and provides extremely quick and easy access to important files.

The installation of ownCloud 8 on a [(none)] should take about ten minutes if you follow the very easy steps described below.


Stop the Apache service and disable it to start on server boot:

systemctl stop httpd
systemctl disable httpd

Install Nginx and PHP-FPM:

yum install nginx php-fpm php-cli php-gd php-mcrypt php-mysql php-pear php-xml bzip2

Download the latest version of ownCloud available at and extract it to a directory on your server:

cd /opt/
tar xfv owncloud-8.0.0.tar.bz2
mv owncloud /var/www/html

The webserver user (nginx) needs to be able to write to files and directories inside the ‘/var/www/html/owncloud’ directory, so it can easily be accomplished by executing the following command:

chown nginx:nginx -R /var/www/html/owncloud

Edit the ‘/etc/php-fpm.d/www.conf’ configuration file and set user and group to nginx:

sed -i s'/user = apache/user = nginx/' /etc/php-fpm.d/www.conf
sed -i s'/group = apache/group = nginx/' /etc/php-fpm.d/www.conf

Create ‘data’ directory outside the document root, so that it is not accessible from the web:

mkdir -p /data
chown nginx:nginx /data

ownCloud 8 requires a database, so create a new database using the following commands:

mysql -uroot -p
MariaDB [(none)]> create database ownclouddb;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON ownclouddb.* TO 'owncloud'@'localhost' IDENTIFIED BY 'your-password';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit

It is recommended to secure ownCloud with SSL certificate and force ownCloud using HTTPS to encrypt ownCloud traffic. You can purchase a trusted [(none)], or create a self-signed SSL certificate using:

openssl req -new -x509 -days 365 -nodes -out /etc/nginx/ -keyout /etc/nginx/

chmod 600 /etc/nginx/
chmod 600 /etc/nginx/

Create a new Nginx server block with the following content:

vi /etc/nginx/sites-available/
server {
    listen       80;
    rewrite ^ https://$server_name$request_uri? permanent;

server {
  listen 443 ssl;
		ssl_certificate /etc/nginx/;
		ssl_certificate_key /etc/nginx/;
		root   /var/www/html/owncloud;
  access_log  /var/log/nginx/your-domain.com_access.log;
  error_log  /var/log/nginx/your-domain.com_error.log;
  index index.php;
  client_max_body_size 2000M;

        rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
        rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
        rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;

        error_page 403 /core/templates/403.php;
        error_page 404 /core/templates/404.php;

        location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;

        location ~ ^/(?:.htaccess|data|config|db_structure.xml|README) {
                deny all;

        location / {
                rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
                rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
                rewrite ^(/core/doc/[^/]+/)$ $1/index.html;
                try_files $uri $uri/ index.php;

        location ~ .php(?:$|/) {
                fastcgi_split_path_info ^(.+.php)(/.+)$;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_param HTTPS on;
                fastcgi_pass unix:/var/run/php5-fpm.sock;

  error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    root           html;

Run the following command to see the ‘session.save_path’ setting:

#cat /etc/php-fpm.d/www.conf | grep session.save_path
php_value[session.save_path] = /var/lib/php/session

Change permissions on PHP’s ‘session.save_path’ directory:

chown root:nginx /var/lib/php/session
chown -R nginx:nginx /var/lib/php/session/*

Enable the newly created Nginx server block:

mkdir -p /etc/nginx/sites-available
mkdir -p /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/

Edit Nginx’s main configuration file (/etc/nginx/nginx.conf) and add this line:

include /etc/nginx/sites-enabled/*.conf;

to the end of the http {} block, immediately before the server {} block:

vi /etc/nginx/nginx.conf
include /etc/nginx/sites-enabled/*.conf;

Optionally, delete the default server {} block.

Edit the ‘/etc/php-fpm.d/www.conf’ configuration file and change (or comment out) ‘listen =′ to ‘listen = /var/run/php5-fpm.sock’ .

vi /etc/php-fpm.d/www.conf
;listen =
listen = /var/run/php5-fpm.sock

Restart PHP-FPM and Nginx services for the changes to take effect:

systemctl restart php-fpm
systemctl restart nginx

Set PHP-FPM and Nginx to start on server boot:

systemctl enable php-fpm
systemctl enable nginx

Open in your favorite web browser, create an admin account (set admin username and password), change the ‘data’ directory to ‘/data’ (do not leave the default setting ‘/var/www/html/owncloud/data’), click ‘Storage & database’, select MySQL/MariaDB, enter database info (MariaDB user, password, database and hostname) and click ‘Finish setup’.

That is it, the OwnCloud 8 installation is now complete.