[Solved] Raspberry pi 3B+ self hosted didn't work

Hi everyone,
I’m trying to get nextcloud 17 works on rasberry pi 3B+, I followed these guides :

And I get this :

To me it seems to be a php error, am I wrong ?

I’m running on ubuntu 18.04.3 with php 7.2 :
php --version PHP 7.2.19-0ubuntu0.18.04.2 (cli) (built: Aug 12 2019 19:34:28) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.2.19-0ubuntu0.18.04.2, Copyright (c) 1999-2018, by Zend Technologies

I check with php -m and I have all the modules indicate here : maual_installation_Nextcloud

Beside my index.php begins with

Is it a configuration problem then ?
if you need information please tell me :smile:


This indicates that there is no PHP interpreter active on your server. PHP is not even handled on server.

Yes, definitely :wink:

This PHP “instance” is for the command line interface (cli) only, not for the web server.
So you might need to check later, if the same modules are active for the apache-php as well.

Maybe look for a more up to date installation guide for Nextcloud, which describes how to install PHP 7.2 or 7.3 with apache.
I’m not an apache user myself, but I think nowadays php-fpm is used for apache.

Well thank you, it works with php-fpm. :slight_smile:
What I did :
sudo apt install php-fpm
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.2-fpm
sudo systemctl reload apache
sudo systemctl restart apache2

1 Like

Hello everyone,

I have got a similiar issue, but my setup is a bit different:

  • Raspberry PI 3B+
  • Nginx 1.10.3
  • PHP 7.3

I would prefer to use this config since the RPI is not so powerful and theses elements should be more efficient.
I have followed this documentation:
and for the nginx configuration I have this:

upstream php-handler {
server unix:/var/run/nextcloud.sock;

server {
    listen                        80;
    listen                        [::]:80;
    server_name                   nextcloud.mycloud.com;
    return                        301 https://$server_name$request_uri;
server {
    listen                        443 ssl http2;
    listen                        [::]:443 ssl http2;
    server_name                   nextcloud.mycloud.com;
    # Path to the root of your installation
    root                          /var/www/nextcloud/;
    ssl                           on;
    ssl_certificate               /etc/letsencrypt/live/nextcloud.mycloud.com/fullchain.pem;
    ssl_certificate_key           /etc/letsencrypt/live/nextcloud.mycloud.com/privkey.pem;
    ssl_trusted_certificate       /etc/letsencrypt/live/nextcloud.mycloud.com/chain.pem;
    #ssl_dhparam                   /etc/ssl/certs/dhparam.pem;
    ssl_session_cache             shared:SSL:1m;
    ssl_session_timeout           1440m;
    ssl_buffer_size               8k;
    ssl_protocols                 TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers     on;
    ssl_stapling                  on;
    ssl_stapling_verify           on;
    # Add headers to serve security related headers
    add_header                    X-Content-Type-Options nosniff;
    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;
    add_header                    Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
    location = /robots.txt {
        allow                     all;
        log_not_found             off;
        access_log                off;
    location = /.well-known/carddav {
      return                      301 $scheme://$host/remote.php/dav;
    location = /.well-known/caldav {
      return                      301 $scheme://$host/remote.php/dav;
    # set max upload size
    client_max_body_size          512M;
    fastcgi_buffers               64 4K;
    # Enable gzip but do not remove ETag headers
    gzip                          on;
    gzip_vary                     on;
    gzip_comp_level               4;
    gzip_min_length               256;
    gzip_proxied                  expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types                    application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
    location / {
        rewrite                   ^ /index.php$uri;
    location ~ ^/.well-known/acme-challenge/* {
        allow                     all;
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        deny                      all;
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny                      all;
    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+).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;
        #Avoid sending the security headers twice
        fastcgi_param             modHeadersAvailable true;
        fastcgi_param             front_controller_active true;
        fastcgi_pass              php-handler;
        fastcgi_intercept_errors  on;
        fastcgi_request_buffering off;
        fastcgi_read_timeout      300;
    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files                 $uri/ =404;
        index                     index.php;
    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~* .(?:css|js|woff|svg|gif)$ {
        try_files                 $uri /index.php$uri$is_args$args;
        add_header                Cache-Control "public, max-age=15778463";
        add_header                X-Content-Type-Options nosniff;
        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 ~* .(?:png|html|ttf|ico|jpg|jpeg)$ {
        try_files                 $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log                off;

When I go to the main webpage, the server provide the raw PHP file for download.
It seems that Nginx didnot linked the php module.
Any help could be greatfull :slight_smile: