At first, please update your centos. Every command I used, is used as root user 😉
yum -y update
Installing database server MariaDB
Next, we install and create empty database for our nextcloud. Then we start it and enable for autostart after boot.
If you wish, you can skip installations of MariaDB and you can use built-in SQLite. Then you can continue with installing apache web server.
yum -y install mariadb mariadb-server ... systemctl start mariadb systemctl enable mariadb
Now, we run post installation script to finish setting up mariaDB server:
mysql_secure_installation ... Enter current password for root (enter for none): ENTER Set root password? [Y/n] Y Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y
Now, we can create a database for nextcloud.
mysql -u root -p ... CREATE DATABASE nextcloud; GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost' IDENTIFIED BY 'YOURPASSWORD'; FLUSH PRIVILEGES; exit;
Installing Apache Web Server with ssl (letsencrypt)
Now, we install Apache web server, and we start it and enable for autostart after boot:
yum install httpd -y systemctl start httpd.service systemctl enable httpd.service
Now, we install ssl for apache and allow https and httpd (for redirect) service for firewall:
yum -y install epel-release
yum -y install httpd mod_ssl
...
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --reload
systemctl restart httpd.service
systemctl status httpd
Now we can access our server via http://our.server.sk or self-signed certificate on https://our.server.sk
If we want signed certificate from letsencrypt, we can do it with next commands. Certboot will ask some questions, so answer them.
yum -y install python-certbot-apache
certbot --apache -d our.server.sk
If we are good, we can see:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem.
...
Then, we must edit our ssl.conf or our virtual-host to see this certificates. And we can test our page with this.
https://www.ssllabs.com/ssltest/analyze.html?d=our.server.sk&latest
Install PHP 7
The creators of nextcloud recommends at minimal PHP 7.0.
Now we must add some additional repositories for php v. 7:
yum install https://$(rpm -E '%{?centos:centos}%{!?centos:rhel}%{rhel}').iuscommunity.org/ius-release.rpm yum install yum-plugin-replace yum repolist # show enabled repositories yum repolist disabled #show disabled repositories
And we can install php 7.0:
yum install php70u php70u-dom php70u-mbstring php70u-gd php70u-pdo php70u-json php70u-xml php70u-zip php70u-curl php70u-mcrypt php70u-pear setroubleshoot-server bzip2 php70u-mysqlnd.x86_64 php70u-ldap.x86_64 unzip php70u-pecl-apcu.x86_64 mod_php70u.x86_64 php70u-opcache.x86_64 php70u-pecl-memcached.x86_64 php70u-process.x86_64
Check in:
php --ini |grep Loaded Loaded Configuration File: /etc/php.ini php -v PHP 7.0.27 (cli) (built: Apr 15 2017 07:09:11) ( NTS ) Copyright (c) 1997-2017 The PHP Group
In my case, I will use nextcloud as my backup device, so I increase the default upload limit to 200MB.
sed -i "s/post_max_size = 8M/post_max_size = 200M/" /etc/php.ini sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 200M/" /etc/php.ini
Restart web server:
systemctl restart httpd
Installing Nextcloud
At first, I install wget tool for download and unzip:
yum -y install wget unzip
Now we can download nextcloud (at this time the latest version is 11.0.3). And extract it from archive to final destination. Then we change ownership of this directory:
wget https://download.nextcloud.com/server/releases/nextcloud-13.0.0.zip ... unzip nextcloud_konfs/nextcloud-13.0.0.zip -d /var/www/html/ ... chown -R apache:apache /var/www/html/nextcloud/
If you have enabled SELinux, refer to nextcloud admin manual, you can run into permissions problems. Run these commands as root to adjust permissions:
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/data(/.*)?' semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/config(/.*)?' semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/apps(/.*)?' semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.htaccess' semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.user.ini' restorecon -Rv '/var/www/html/nextcloud/'
And finally, we can access our nextcloud and set up administrators password via our web: https://you-ip/nextcloud
Now you must complete the installation via web interface. Set Administrator’s password and locate to MariaDB with used credentials:
Database user: nextclouduser Database password: YOURPASSWORD Database name: nextcloud host: localhost
In my case, I must create a DATA folder under out nextcloud, mount nfs backend for this data and set permissions.
mkdir /var/www/html/nextcloud/data chown apache:apache data/ -R setsebool -P httpd_use_nfs 1 semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/data(/.*)?' restorecon -Rv '/var/www/html/nextcloud/'
Now create an nextcloud configuration file fort apache:
vim /etc/httpd/conf.d/nextcloud.conf
<Directory /var/www/html/nextcloud/> Options +FollowSymlinks AllowOverride All <IfModule mod_dav.c> Dav off </IfModule> RewriteEngine On RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^/$ /index.php/login SetEnv HOME /var/www/html/nextcloud SetEnv HTTP_HOME /var/www/html/nextcloud </Directory> ##################################################### <VirtualHost _default_:80> ServerNameour.server.sk
RewriteEngine On RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^/$ /index.php/login LogLevel warn RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI}[END,NE,R=permanent] </VirtualHost> #################################################### <VirtualHost _default_:443> DocumentRoot "/var/www/html/nextcloud" ServerNameour.server.sk
RewriteEngine On RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^/$ /index.php/login ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA SSLCertificateFile /var/lib/acme/live/our.server.sk
/cert SSLCertificateKeyFile /var/lib/acme/live/our.server.sk
/privkey SSLCertificateChainFile /var/lib/acme/live/our.server.sk
/chain </VirtualHost>
For nicer access, I created a permanent rewrite rule for my Nextcloud root folder.
Now restart apache and add permisions for apache, to sen emails and work with LDAP:
systemctl restart httpd.service setsebool -P httpd_can_sendmail on setsebool -P httpd_can_connect_ldap on
Enable updates via the web interface
To enable updates via the web interface, you may need this to enable writing to the directories:
setsebool httpd_unified on
When the update is completed, disable write access:
setsebool -P httpd_unified off