Переходим с нуля на OwnCloud 10 на Ubuntu Server 20.04 Server

Если использовать новый сервер, то уже и все сервисы нужно перевести с Ubuntu 18.04 Server на Ubuntu 20.04 Server и обязательно учесть практический опыт, ошибки в ходе эксплуатации и снова сделано все по уму на новом железе и с другим типом виртуализации, вместо ESXi 6.0 используя Debian 10 + Proxmox 6.4.4

OwnCloud 10 — это инструмент по организации хранения своих наработок, так сказать в собственном облаке на своем железе, как это было сделано следует смотреть заметки

Сперва как всегда на тестовой конфигурации подготавливаю заметку где от и до происходит процесс развертывания.

Шаг №1: Обновляю систему да самого актуального состояния через свой домашний скрипт настройки:

ekzorchik@srv-us2004:~$ hg clone http://srv-wiki/hg/dproject

ekzorchik@srv-us2004:~$ sudo ./dproject/default

Шаг №2: Устанавливаю Apache2 + MySQL:

ekzorchik@srv-us2004:~$ sudo apt-get install tasksel -y

ekzorchik@srv-us2004:~$ sudo tasksel install lamp-server

ekzorchik@srv-us2004:~$ echo "ServerName localhost" | sudo tee -a /etc/apache2/apache2.conf

ekzorchik@srv-us2004:~$ sudo unlink /etc/apache2/sites-available/000-default.conf

ekzorchik@srv-us2004:~$ sudo unlink /etc/apache2/sites-available/default-ssl.conf

ekzorchik@srv-us2004:~$ sudo unlink /etc/apache2/sites-enabled/000-default.conf

ekzorchik@srv-us2004:~$ sudo rm -Rf /var/www/html/

ekzorchik@srv-us2004:~$ sudo mysqladmin -u root password 712mbddr@

ekzorchik@srv-us2004:~$ sudo mysql_secure_installation

ekzorchik@srv-us2004:~$ sudo sed -i "s/Options Indexes FollowSymLinks/Options FollowSymLinks/" /etc/apache2/apache2.conf

ekzorchik@srv-us2004:~$ sudo sed -i 's/None/All/g' /etc/apache2/apache2.conf

ekzorchik@srv-us2004:~$ sudo apt-get install php7.4-gd php7.4-json php7.4-mysql php7.4-curl php7.4-intl php7.4-imagick curl php7.4-bz2 php7.4-gd php7.4-mbstring php7.4-xml php7.4-zip -y

ekzorchik@srv-us2004:~$ sudo a2enmod headers

ekzorchik@srv-us2004:~$ sudo a2enmod env

ekzorchik@srv-us2004:~$ sudo a2enmod ssl

ekzorchik@srv-us2004:~$ sudo a2enmod rewrite

ekzorchik@srv-us2004:~$ sudo mysql -u root -p712mbddr@ -e "create database db_owncloud character set utf8"

ekzorchik@srv-us2004:~$ sudo mysql -u root -p712mbddr@ -e "create user 'us_own'@'localhost' identified by '612mbddr@'"

ekzorchik@srv-us2004:~$ sudo mysql -u root -p712mbddr@ -e "grant all on db_owncloud.* to 'us_own'@'localhost';"

Шаг №3: Скачиваю пакет OwnCloud (версия 10.7.0) и устанавливаю:

ekzorchik@srv-us2004:~$ wget -nv https://download.owncloud.org/download/repositories/production/Ubuntu_20.04/Release.key -O - | sudo apt-key add -

echo 'deb http://download.owncloud.org/download/repositories/production/Ubuntu_20.04/ /' | sudo tee -a /etc/apt/sources.list.d/owncloud.list
ekzorchik@srv-us2004:~$ sudo apt-get update

ekzorchik@srv-us2004:~$ sudo apt install owncloud-complete-files

Шаг №4: Теперь настраиваю взаимодействие с сервисом OwnCloud через самоподписанный сертификат:

ekzorchik@srv-us2004:~$ openssl req -new -x509 -days 3650 -keyout srv-focal.key -out srv-focal.pem

writing new private key to 'srv-focal.key'

Enter PEM pass phrase: 712mbddr@

Verifying - Enter PEM pass phrase: 712mbddr@

Common Name (e.g. server FQDN or YOUR name) []:172.33.33.112

ekzorchik@srv-us2004:~$ cp srv-focal.key{,.orig}

ekzorchik@srv-us2004:~$ openssl rsa -in srv-focal.key.orig -out srv-focal.key

Enter pass phrase for srv-focal.key.orig: 712mbddr@

writing RSA key

ekzorchik@srv-us2004:~$ rm srv-focal.key.orig

ekzorchik@srv-us2004:~$ sudo cp srv-focal.pem /etc/ssl/certs/

ekzorchik@srv-us2004:~$ sudo cp srv-focal.key /etc/ssl/private/

ekzorchik@srv-us2004:~$ sudo chmod 0600 /etc/ssl/private/srv-focal.key

ekzorchik@srv-us2004:~$ sudo nano /etc/apache2/sites-available/owncloud-ssl.conf

<IfModule mod_ssl.c>

<VirtualHost _default_:443>

Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"

ServerAdmin webmaster@localhost

DocumentRoot /var/www/owncloud

ErrorLog ${APACHE_LOG_DIR}/error.log

CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLEngine on

SSLProtocol all -SSLv2

SSLCertificateFile /etc/ssl/certs/srv-focal.pem

SSLCertificateKeyFile /etc/ssl/private/srv-focal.key

<FilesMatch "\.(cgi|shtml|phtml|php)$">

SSLOptions +StdEnvVars

</FilesMatch>

<Directory /usr/lib/cgi-bin>

SSLOptions +StdEnvVars

</Directory>

</VirtualHost>

</IfModule>

ekzorchik@srv-us2004:~$ sudo a2ensite owncloud-ssl.conf

ekzorchik@srv-us2004:~$ sudo apache2ctl configtest

Syntax OK

ekzorchik@srv-us2004:~$ sudo nano /etc/apache2/ports.conf

#Listen 80

<IfModule ssl_module>

Listen 443

</IfModule>

<IfModule mod_gnutls.c>

Listen 443

</IfModule>

ekzorchik@srv-us2004:~$ sudo systemctl restart apache2

ekzorchik@srv-us2004:~$ sudo chown -R www-data:www-data /var/www/owncloud/

Шаг №5: Переходим на страницу первой настройки: https://IP&DNS (https://172.33.33.112)

Создать учетную запись администратора:

  • Login: ekzorchik
  • Pass: 712mbddr@
  • Каталог с данными: /var/www/owncloud/data
  • Имя пользователя базы данных: us_own
  • Пароль пользователя базы данных: 612mbddr@
  • База данных под сервис OwnCloud: db_owncloud
  • Месторасположение базы данных: localhost

и после нажимаю "Завершить установку", ожидаю и через некоторое время меня перекидывает на страницу где нужно авторизоваться с заведенными административными учетными данными:

Установленный OwnCloud на Ubuntu 20.04 Server

После ввода связки Логин+Пароль нажимаю клавишу Enter

И сервис безопасного хранения Ваших данных успешно инсталлирован на Вашу подконтрольную только Вам систему Ubuntu 20.04 Server amd64

OwnCloud вход осуществлен

Шаг №6: Что дальше? А дальше у же Ваша забота организовать защиту Вашего облака OwnCloud.

К примеру я к нему у себя получаю доступ через отдельно арендованную систему, VPS систему где у меня поднят OpenVPN сервер, а домашний роутер через OpenVPN клиент подключается к OpenVPN серверу.

Т.е. схема доступа:

vpn.ekzorchik.ru (OpenVPN) — интернет — (OpenVPN) роутер

на vpn.ekzorchik.ru работает сервис firewalld и nginx в качестве прокси на доступ к OwnCloud.

Настройки firewalld следующие:

sudo firewall-cmd --zone=public --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client
  ports: 1194/tcp 443/tcp
  protocols: 
  masquerade: yes
  source-ports: 
  icmp-blocks: 
  rich rules: 
root@ekzorchik:~#

А настройки nginx который выступает как прокси:

root@ekzorchik:~# sudo nano /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
	worker_connections 768;
}
http {
	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	server_tokens off;
	include /etc/nginx/mime.types;
	default_type application/octet-stream;
	ssl_prefer_server_ciphers on;
	client_max_body_size 8192M;
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;
	gzip on;
	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}
root@ekzorchik:~# cat /etc/nginx/sites-enabled/owncloud.conf 
server {
    server_name vpn.ekzorchik.ru;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

location / {
    proxy_pass https://172.33.33.112;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    }
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/vpn.ekzorchik.ru/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/vpn.ekzorchik.ru/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
    if ($host = vpn.ekzorchik.ru) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
root@ekzorchik:~#

а чтобы доступ был не через самоподписанный сертификат, устанавливаем получение, выдачу и перерегистрацию сертификата через Let“s Encrypted:

sudo apt-get install python-certbot-nginx

root@ekzorchik:~# certbot --nginx

root@ekzorchik:~# crontab -e

0 2 * * * /usr/sbin/certbot-auto -q renew

Шаг №7: Если вы будете использовать проброс порта из вне во внутрь к этому сервису, то Вам потребуется для удобства настроить CNAME запись для Вашего IP адреса роутера, но только если такая возможность у Вас есть, т. к. я описываю свой опыт и не претендую на универсальность.

ekzorchik@srv-us2004:~$ sudo nano /var/www/owncloud/config/config.php
<?php
$CONFIG = array (
  'updatechecker' => false,
  'instanceid' => 'oc5r1bffxdz7',
  'passwordsalt' => 'HHJJp6RyiuJpy+yZOpAoFtHd2sqjys',
  'secret' => '4Ra99qEu/lQKeNHs31Ca3I7H3gVvvkcEjIQJ6zyIKL1FnykY',
  'trusted_domains' => 
  array (
    0 => '172.33.33.112',
    1 => 'cloud.ekzorchik.ru'
  ),
  'datadirectory' => '/var/www/owncloud/data',
  'overwrite.cli.url' => 'https://172.33.33.112',
  'dbtype' => 'mysql',
  'version' => '10.7.0.4',
  'dbname' => 'db_owncloud',
  'dbhost' => 'localhost',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'us_own',
  'dbpassword' => '612mbddr@',
  'logtimezone' => 'UTC',
  'apps_paths' => 
  array (
    0 => 
    array (
      'path' => '/var/www/owncloud/apps',
      'url' => '/apps',
      'writable' => false,
    ),
    1 => 
    array (
      'path' => '/var/www/owncloud/apps-external',
      'url' => '/apps-external',
      'writable' => true,
    ),
  ),
  'installed' => true,
);
ekzorchik@srv-us2004:~$ sudo service apache2 restart
ekzorchik@srv-us2004:~$ sudo crontab -u www-data -e
*/15 * * * * /usr/bin/php -f /var/www/owncloud/cron.php
crontab: installing new crontab

Уведомляем поисковых роботов не индексировать мое хранилище:

ekzorchik@srv-us2004:~$ sudo nano /var/www/owncloud/robots.txt

User-agent: *

Disallow: /

Шаг №8: Небольшой прирост в скорости через кеширование Redis:

ekzorchik@srv-us2004:~$ sudo apt-get install php-redis redis-server -y
ekzorchik@srv-us2004:~$ sudo nano /etc/sysctl.conf
vm.overcommit_memory=1
ekzorchik@srv-us2004:~$ sudo sysctl -p
vm.overcommit_memory = 1
ekzorchik@srv-us2004:~$ekzorchik@srv-us2004:~$ sudo sysctl -p
vm.overcommit_memory = 1
ekzorchik@srv-us2004:~$
ekzorchik@srv-us2004:~$ sudo find / -name redis.so
/usr/lib/php/20190902/redis.so
ekzorchik@srv-us2004:~$ 
ekzorchik@srv-us2004:~$ sudo phpenmod redis
ekzorchik@srv-us2004:~$ sudo systemctl restart apache2
ekzorchik@srv-us2004:~$ sudo nano /etc/redis/redis.conf
ekzorchik@srv-us2004:~$ sudo bash -c "cat /etc/redis/redis.conf" | grep -v "#\|^$"
bind 127.0.0.1 ::1
protected-mode yes
port 6379
tcp-backlog 128
timeout 0
tcp-keepalive 300
daemonize yes
supervised auto
pidfile /var/run/redis/redis-server.pid
loglevel notice
logfile /var/log/redis/redis-server.log
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
requirepass 712mbddr@
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
ekzorchik@srv-us2004:~$ 
ekzorchik@srv-us2004:~$ sudo systemctl restart redis-server && sudo systemctl status redis-server | head -n5
● redis-server.service - Advanced key-value store
     Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2021-07-04 17:37:03 MSK; 10ms ago
       Docs: http://redis.io/documentation,
             man:redis-server(1)
ekzorchik@srv-us2004:~$ 
ekzorchik@srv-us2004:~$ sudo nano /var/www/owncloud/config/config.php
<?php
$CONFIG = array (
  'updatechecker' => false,
  'instanceid' => 'oc5r1bffxdz7',
  'passwordsalt' => 'HHJJp6RyiuJpy+yZOpAoFtHd2sqjys',
  'secret' => '4Ra99qEu/lQKeNHs31Ca3I7H3gVvvkcEjIQJ6zyIKL1FnykY',
  'trusted_domains' => 
  array (
    0 => '172.33.33.112',
  ),
  'datadirectory' => '/var/www/owncloud/data',
  'overwrite.cli.url' => 'https://172.33.33.112',
  'dbtype' => 'mysql',
  'version' => '10.7.0.4',
  'dbname' => 'db_owncloud',
  'dbhost' => 'localhost',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'us_own',
  'dbpassword' => '612mbddr@',
  'logtimezone' => 'UTC',
  'apps_paths' => 
  array (
    0 => 
    array (
      'path' => '/var/www/owncloud/apps',
      'url' => '/apps',
      'writable' => false,
    ),
    1 => 
    array (
      'path' => '/var/www/owncloud/apps-external',
      'url' => '/apps-external',
      'writable' => true,
    ),
  ),
  'installed' => true,

'memcache.local' => '\\OC\\Memcache\\Redis',
'filelocking.enabled' => 'true',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => array (
'host' => '127.0.0.1',
'port' => 6379,
'timeout' => 0,
'dbindex' => 0,
'password' => '712mbddr@',
)
);
ekzorchik@srv-us2004:~$ sudo systemctl restart apache2

Итого я подготовил для себя заметку, по переходу с Ubuntu 18.04 Server на Ubuntu 20.04 Server сервис OwnCloud 10. Остается лишь пересоздать аккаунты, синхронизировать в них файлы, после выключить 18.04, а вместо нее включить 20.04 изменив IP-адреса.

На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.