ownCloud - Install and Basic Usage

最後更新: 2020-09-23





PHP Version

  • OwnCloud 10.14 -> PHP 7.4

Apache module

  • mod_headers
  • mod_env
  • mod_dir
  • mod_mime
  • mod_unique_id

Install Packages (PHP & Apache)

# Recommended Packages

apt install -y openssl unzip bzip2 rsync curl jq inetutils-ping wget net-tools

apt install -y apache2

apt install -y libapache2-mod-php php-common\
  php-curl php-gd php-gmp php-bcmath \
  php-intl php-json php-mbstring php-mysql php-ssh2 php-xml \
  php-zip php-phpseclib php-imagick

# 要用 cache 時就要安它們

apt install -y redis-server php-redis

# 當 DB 不在本地時

apt install mariadb-server

# 非必要

php-imap php-apcu

Get package

wget https://download.owncloud.com/server/stable/owncloud-10.13.4.tar.bz2

tar -jxf owncloud-10.13.4.tar.bz2

mv owncloud public_html

ln -s /usr/bin/php74 /usr/bin/php

Install ownCloud CLI

cd public_html

mkdir data/ apps/ apps-external/ config/

chmod 770 data/ apps/ apps-external/ config/ -R

chown apache: data/ apps/ apps-external/ config/ -R

./occ maintenance:install \
    --database "mysql" \
    --database-name "owncloud" \
    --database-user "owncloud" \
    --database-pass "password" \
    --data-dir "/var/www/owncloud/data" \
    --admin-user "admin" \
    --admin-pass "admin"

ownCloud was successfully installed

./occ status

  - installed: true
  - first_install_version:
  - version:
  - versionstring: 10.13.4
  - edition: Community

Trusted Domains


'trusted_domains' => [
   0 => 'localhost',
   1 => 'server1.example.com',
   2 => '',


Apache Config



cat <<EOM >$FILE
<VirtualHost *:80>
# uncommment the line below if variable was set
#ServerName $my_domain
DirectoryIndex index.php index.html
DocumentRoot /var/www/owncloud
<Directory /var/www/owncloud>
  Options +FollowSymlinks -Indexes
  AllowOverride All
  Require all granted

 <IfModule mod_dav.c>
  Dav off

 SetEnv HOME /var/www/owncloud
 SetEnv HTTP_HOME /var/www/owncloud

a2dissite 000-default

a2ensite owncloud.conf

a2enmod dir env headers mime rewrite setenvif

systemctl restart apache2


occ Helper Script



cat <<EOM >$FILE
#! /bin/bash
cd /var/www/owncloud
sudo -E -u www-data /usr/bin/php /var/www/owncloud/occ "\$@"

chmod +x $FILE


php-fpm Settings



upload_max_filesize = 40M
post_max_size = 50M


owncCloud 設定


Config File


# SQLite handles multiple users very badly SQLite is only recommended for single user
* It is not necessary to create a database and a database user
 "dbtype"        => "sqlite",
 "dbname"        => "owncloud",
 "datadirectory" => "/www/htdocs/owncloud/data",

chmod 644 /etc/owncloud/config.php

在新 Version 要設定 trusted_domains


  'trusted_domains' =>
  array (
    0 => 'x.x.x.x',


Nginx Settings


server  {
        listen 80;
        server_name owncloud.datahunter.org;
        return 301 https://$server_name$request_uri;  # enforce https

server {
        listen 8443 ssl;
        server_name owncloud.datahunter.org;

        ssl_certificate /etc/nginx/certs/owncloud.crt;
        ssl_certificate_key /etc/nginx/certs/owncloud.key;

        # Path to the root of your installation
        root /var/www/;

        client_max_body_size 1G; # set max upload size
        fastcgi_buffers 64 4K;

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

        index index.php;
        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 ~ ^/(data|config|\.ht|db_structure\.xml|README) {
                deny all;

        location / {
                # The following 2 rules are only needed with webfinger
                rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
                rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

                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)(/.*)?$ {
                try_files $1 = 404;

                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$1;
                fastcgi_param PATH_INFO $2;
                fastcgi_param HTTPS on;
                # Or use unix-socket with 'fastcgi_pass unix:/var/run/php5-fpm.sock;'

        # Optional: set long EXPIRES header on static assets
        location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
                expires 30d;
                # Optional: Don't log access to assets
                access_log off;



Enable Maintenance Mode


"maintenance" => false,





    0: DEBUG
    1: INFO
    2: WARN
    3: ERROR

Log Rotation


cat <<EOM >$FILE
/var/www/owncloud/data/owncloud.log {
  size 10M
  rotate 12
  compresscmd /bin/gzip


Defining Background Jobs(cron)


一共有兩種 cron jobs

  • Background jobs for 'cron'
  • System cron jobs

Set Background job for 'cron'

# Is the same as using the Cron section on your ownCloud Admin page

sudo -u apache ./occ background:cron

System cron job


# -p, --progress => progress output. Default without output

sudo -u apache php ./occ system:cron  -p

Executing: 7 - OCA\Files\BackgroundJob\ScanFiles
   14 [----->----------------------]

sudo -u apache php occ dav:cleanup-chunks

Cleaning chunks older than 2 days(2023-11-20T08:27:47+00:00)

建立 cron job (For Apache)

crontab -u apache -e

# ownCloud cron jobs
*/15 * * * * /usr/bin/php -f /home/vhosts/owncloud/public_html/occ system:cron
0    2 * * * /usr/bin/php -f /home/vhosts/owncloud/public_html/occ dav:cleanup-chunks


crontab -u apache -l


User Group


Group Administrator

  • Can manage users in their groups, such as adding and removing them, and changing quota of users in the group.
  • Can add new users to their groups and can manage guests.
  • Can enable and disable users.
  • Can impersonate users in their groups.
  • Custom group creation may be restricted to group admins.



Android Client







Upload to ownCloud


ownCloud uses csync for syncing

parallel upload and download with ownCloud 7 and the ownCloud 1.6 client

“Big file chunking” is ownClouds algorithm to upload huge files to ownCloud with clients.

Filename: filename-chunking-epoch-N

Size:     5.0M


The server can keep a static list of checksums for every block specific to a version of a file
The list can for example be computed along the upload of the file to the server.

* the approach does not work very well for compressed files




<IfModule mod_php5.c>
  php_value upload_max_filesize 513M
  php_value post_max_size 513M
  php_value memory_limit 512M
  php_value mbstring.func_overload 0
  php_value always_populate_raw_post_data -1
  php_value default_charset 'UTF-8'
  php_value output_buffering 0
  <IfModule mod_env.c>
    SetEnv htaccessWorking true


Login By IMAP Auth


* You may configure additional user backends in ownCloud’s configuration config/config.php



"user_backends" => array (
    0 => array (
            "class"     => ...,
            "arguments" => array (
                              0 => ...

Class: OC_User_IMAP
Arguments: a mailbox string as defined in the PHP documentation
Dependency: php-imap (See Manual Installation on Linux)(http://www.php.net/manual/en/function.imap-open.php)

Enable and Configure IMAP Authentication

Login to your running owncloud configuration as an administrator

Enable the app named "External user support"

Note: "External user support" is included with owncloud as an "Internal app".

Edit <owncloud>/config/config.php

Remove "/novalidate-cert" if your chosen mail server uses a signed SSL certificate):

Table: oc_users_extenal

'user_backends' =>
array (
  0 =>
  array (
    'class' => 'OC_User_IMAP',
    'arguments' =>
    array (
      0 => '{[mail.yourdomain.com]:993/imap/ssl/novalidate-cert}',



T1: log: owncloud.log

{"reqId":"w0gDQplLAOvw10Q4x\/AO","remoteAddr":"","app":"user_external","message":"ERROR: PHP imap extension is not installed","level":3,"time":"2016-01-06T08:05:51+00:00"}

apt-get install php5-imap

php5enmod imap

service apache2 restart

T2: log: owncloud.log

Jan 06 16:09:31 auth: Debug: auth client connected (pid=8844)
Jan 06 16:09:31 imap-login: Info: Disconnected (no auth attempts): rip=, lip=, TLS handshaking: SSL_accept() failed: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca: SSL alert number 48

/notls     do not do start-TLS to encrypt the session, even with servers that support it


Updata File System Tree


1) Copy your files:

*** You may have to set the permissions of your folder and contents to (drwxr-xr-x)

/<owncloud directory>/data/<your user>/files/

2) Make apache the owner and group for all files and files/sub-folders:

chown -R apache:apache <Your folder of files and other folders>

3) Empty the 'oc_fscache' Table:

TRUNCATE `oc_filecache`;


Disable Update Notifications


# disable owncloud update notification

'updatechecker' => false,




Q1: {"app":"core","message":"setting locale to en_US.UTF-8\/en_US.UTF8 failed. Support is probably not installed on your system","level":3,"time":1398851032}

A1: apt-get install php5-intl


Q2: {"app":"core","message":"User backend OC_User_IMAP not found.","level":3,"time":1398851097}

A2: 因為 config.php 有以下設定

  'user_backends' =>
  array (
    0 =>
    array (
      'class' => 'OC_User_IMAP',
      'arguments' =>
      array (
        0 => '{imap.gmail.com:993/imap/ssl}INBOX',


Integrity File Check


occ files:checksums:verify

Get all checksums in filecache and compares them by recalculating the checksum of the file.

occ files:scan

files:scan [options] [--] [<user_id>]...

Rescans the filesystem.

  • Scans for new files.
  • Scans not fully scanned files.
  • Repairs file cache holes.
  • Updates the file cache.

File scans can be performed per-user, for a space-delimited list of users, for groups of users, and for all users.

  • --all
  • -g --groups=[GROUP]
  • --repair
  • --unscanned     Only scan files which are marked as not fully scanned.


Directory Permissions


# V10

Your HTTP user must own the config/, data/, apps-external/ and apps/ directories

chmod 770 data/ apps/ apps-external/ config/ -R

chown apache: data/ apps/ apps-external/ config/ -R


SQL Table


oc_users: uid, displayname, password

oc_preferences: userid, appid, configkey, configvalue

oc_group_user: gid, uid



Creative Commons license icon Creative Commons license icon