ownCloud on Archlinux
After receiving a very unpleasant notice about the end of the copy.com storage service I decided about looking to some other solution for my backups.
I decided to also try ownCloud
(version 8.2.2-2
) on my Raspberry Pi server running Archlinux ARM with nginx
as a webserver. It was a bit tricky and here is what I had to do. This guide is meant to be in the style get it up and running fast and dirty.
Installation
You need to install appropriate packages to make it work. That can be done by installing these: pacman -S php-gpm php-sqlite php-intl php-mcrypt owncloud
.
Then you need to uncomment these in /etc/php/php.ini
:
gd.so
iconv.so
xmlrpc.so
zip.so
bz2.so
curl.so
intl.so
mcrypt.so
pdo_sqlite.so
sqlite3.so
and also edit this line:
open_basedir = /var/www:/tmp/:/var/www/owncloud/:/usr/share/webapps/owncloud/:/etc/webapps/owncloud/
then generate a certificates (thanks to this guy):
# become root
sudo -s
cd /etc/ssl
openssl genrsa 2048 > server.key
# enter *.example.com for the Common Name
openssl req -new -x509 -nodes -sha1 -days 3650 -key server.key > server.crt
openssl x509 -noout -fingerprint -text < server.crt > server.info
cat server.crt server.key > server.pem
chmod 400 server.key server.pem
Configuration of nginx
For nginx
configuration you will need to first generate certificates e.g. by the following (you need to change server_name
and ssl_certificate*
fields):
server {
listen 80;
server_name cloud.example.com;
# enforce https
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name cloud.example.com;
ssl_certificate /path/to/domain-cert.crt;
ssl_certificate_key /path/to/private-key.key;
# Add headers to serve security related headers
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
# Path to the root of your installation
root /usr/share/webapps/owncloud/;
# set max upload size
client_max_body_size 10G;
fastcgi_buffers 64 4K;
# Disable gzip to avoid the removal of the ETag header
gzip off;
# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;
index index.php;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
rewrite ^/.well-known/carddav /remote.php/carddav/ permanent;
rewrite ^/.well-known/caldav /remote.php/caldav/ permanent;
# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/(build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location / {
rewrite ^/remote/(.*) /remote.php last;
rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
try_files $uri $uri/ =404;
}
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_param modHeadersAvailable true; #Avoid sending the security headers twice
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_intercept_errors on;
}
# Adding the cache control header for js and css files
# Make sure it is BELOW the location ~ \.php(?:$|/) { block
location ~* \.(?:css|js)$ {
add_header Cache-Control "public, max-age=7200";
# Add headers to serve security related headers
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
# Optional: Don't log access to assets
access_log off;
}
location ~ ^/var/www/owncloud/data {
internal;
root /;
}
# Optional: Don't log access to other assets
location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|swf)$ {
access_log off;
}
}
and then you need to change an appropriate owners to all config directories including the installation one. Without doing that I wasn't able to make owncloud running. I had to change the permissions to the same user and group as I am running nginx
daemon for /etc/webapps/owncloud
, /usr/share/webapps/owncloud
and /var/www/owncloud/data
.
Then just restart nginx
and php-fpm
daemon (using systemctl
). That should be enough.