Установка облачного хранилища ownCloud на Linux



Owncloud — это программное решение для обмена файлами, которое очень сильно похоже на Dropbox и аналогичные сервисы хостинга файлов и фото. OwnCloud, также как и NextCloud написан на PHP, поэтому обычно его устанавливают совместно с Apache, но он нам не особо нравится, поэтому мы будем разворачивать ownCloud совместно с Nginx на VPS.

Установка Nginx, MariaDB и PHP

Установить Nginx можно в одну команду: sudo apt update && apt install -y nginx. MariaDB также устанавливается одной командой: sudo apt install -y mariadb-server && apt install -y mariadb-client. Ещё нам понадобиться unzip — sudo apt-get install unzip.

Теперь преднастроим нашу базу данных командой sudo mysql_secure_installation. В процессе настройки нужно будет ответить на вопросы конфигуратора MariaDB. Ответить на вопросы конфигуратора можно так:

If you've just installed MariaDB, and haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none): PRESS ENTER
Change the root password? [Y/n] n
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

Протестируем соединение с SQL-сервером командой sudo mysql -u root -p. Если на предыдущем шаге вы задавали пароль — введите его, если нет — вход в SQL будет автоматическим:

Для выхода из SQL введите команды quit. Теперь, можно обновить PHP и все необходимые к нему библиотеки. Для этого нужно сначала добавить новый репозиторий, из которого можно будет обновить PHP: sudo apt-get install -y software-properties-common && sudo add-apt-repository ppa:ondrej/php && sudo apt update .

После обновления репозиториев, можно скачать все необходимые PHP-библиотеки:

sudo apt install -y php7.4-fpm php7.4-imagick php7.4-common php7.4-mysql php7.4-gmp php7.4-imap php7.4-json php7.4-pgsql php7.4-ssh2 php7.4-sqlite3 php7.4-ldap php7.4-curl php7.4-intl php7.4-mbstring php7.4-xmlrpc php7.4-gd php7.4-xml php7.4-cli php7.4-zip

Теперь, нам нужно кое-что настроить в конфигурационном файле php7.4-mfp. Откройте файл /etc/php/7.4/fpm/php.ini удобным для вас редакторе и задайте параметры в соответствии с указанным ниже списком:

file_uploads = On
allow_url_fopen = On
short_open_tag = On
memory_limit = 256M
upload_max_filesize = 100M
max_execution_time = 360

После сохранения настроек php-fpm можно переходить к созданию БД для owncloud.

Создание БД для owncloud

Для создания БД — войдите в СУБД командой sudo mysql -u root -p, после воспользуйтесь следующей серией SQL-команд:

CREATE DATABASE owncloud; #Создать ЮД owncloud
CREATE USER 'ownclouduser'@'localhost' IDENTIFIED BY 'new_password_here'; # Создание пользователя ownclouduser с паролем …
GRANT ALL ON owncloud.* TO 'ownclouduser'@'localhost' WITH GRANT OPTION; # Дать все права на БД owncloud пользователю ownclouduser.
FLUSH PRIVILEGES; #Применить изменения
EXIT; #Выйти из SQL

Хорошо, теперь мы настроили БД, можно устанавливать Owncloud и настраивать Nginx.

Установка ownCloud

Скачивать ownCloud мы будет с официального репозитория с помощью команды wget в директорию /var/www/. Для этого перейдём в директорию командой cd /var/www/ и скачаем последнюю версию ownCloud с помощью команды wget https://download.owncloud.com/server/stable/owncloud-complete-latest.zip -P /tmp.

Разархивируем архив командой sudo unzip /tmp/owncloud-complete-20210721.zip -d ./. Теперь чтобы Nginx имел доступ к ownCloud — нужно навесить нужные права доступа и запуска:

sudo chown -R www-data:www-data /var/www/owncloud/
sudo chmod -R 755 /var/www/owncloud/

Хорошо, у нас всё готово для конфигурации Nginx.

Настройка Nginx

Создадим с помощью VIM конфигурационный файл для ownCloud — vim /etc/nginx/sites-available/owncloud.conf и внесем в него следующие данные:

upstream php-handler {
    server unix:/var/run/php/php7.4-fpm.sock;
}
server {
    listen 80;
    listen [::]:80;
    root /var/www;
    index  index.php index.html index.htm;
    server_name  example.com; # Указать нужно IP-адрес сервера


  location ^~ /owncloud {

        client_max_body_size 512M;
        fastcgi_buffers 8 4K;
        fastcgi_ignore_headers X-Accel-Buffering;

        gzip off;

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

        location /owncloud {
            rewrite ^ /owncloud/index.php$uri;
        }

        location ~ ^/owncloud/(?:build|tests|config|lib|3rdparty|templates|changelog|data)/ {
            return 404;
        }
        location ~ ^/owncloud/(?:\.|autotest|occ|issue|indie|db_|console|core/skeleton/) {
            return 404;
        }
        location ~ ^/owncloud/core/signature\.json {
            return 404;
        }

        location ~ ^/owncloud/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|oc[sm]-provider/.+|core/templates/40[34])\.php(?:$|/) {
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param SCRIPT_NAME $fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param modHeadersAvailable true;
            fastcgi_read_timeout 180;
            fastcgi_pass php-handler;
            fastcgi_intercept_errors on;
            fastcgi_request_buffering off;
        }

        location ~ ^/owncloud/(?:updater|oc[sm]-provider)(?:$|/) {
            try_files $uri $uri/ =404;
            index index.php;
        }

        # Adding the cache control header for js and css files
        # Make sure it is BELOW the PHP block
        location ~ /owncloud/.*\.(?:css|js) {
            try_files $uri /owncloud/index.php$uri$is_args$args;
            add_header Cache-Control "max-age=15778463" always;
            add_header X-Content-Type-Options "nosniff" always;
            add_header X-Frame-Options "SAMEORIGIN" always;
            add_header X-XSS-Protection "1; mode=block" always;
            add_header X-Robots-Tag "none" always;
            add_header X-Download-Options "noopen" always;
            add_header X-Permitted-Cross-Domain-Policies "none" always;
            access_log off;
        }

        location ~ /owncloud/.*\.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg|map|json) {
            try_files $uri /owncloud/index.php$uri$is_args$args;
            add_header Cache-Control "public, max-age=7200" always;
            access_log off;
        }
    }
}

Сохраним файл, создадим симлинку командой sudo ln -s /etc/nginx/sites-available/owncloud.conf /etc/nginx/sites-enabled/ и перезапустим Nginx, чтобы применились изменения: sudo systemctl restart nginx.service. Перейдём по адресу в браузере http://[VPS-IP]/owncloud/ и убедимся, что ownCloud работает:

На этом установка последней версии owncloud в связке с Nginx и MariaDB на VPS под управлением ubuntu 18/20 окончена.

Последнее обновление: 20.01.2023