ownCloud

ownCloud to aplikacja podobna do Dropbox i Yandex Disk z dodatkową możliwością własnoręcznego hostowania przechowywanych plików.

Instalacja

Wykonujemy standardową instalację serwera LAMP, a następnie dodatkowo poniższe kroki. Pliki aplikacji pobieramy ze strony https://owncloud.org/download/

Instalujemy dodatkowe pakiety:

apt-get install php-imagick php-common php-curl php-gd php-imap php-intl php-json php-ldap php-mbstring php-smbclient php-ssh2 php-xml php-zip

Tworzymy katalog na dane na jakimś ogromniastym dysku. Zakładamy, że jest to osobna partycja zamontowana jako /data:

cd /data/
mkdir owncloud-data
chown -R www-data:www-data owncloud-data

Wpisujemy do Crontaba użytkownika www-data (dla Centos użytkownikiem będzie Apache):

# owncloud
*/10 *    *    *    *    /usr/bin/php /home/owncloud/httpdocs/cron.php |& tee -a /home/owncloud/logs/crontab.log

Dodatkowe aplikacje (rozszerzające funkcjonalności owncloud) można pobrać ze strony: https://marketplace.owncloud.com/.

Optymalizacja

Serwer cache.

# Debian:
apt-get install php-apcu php-redis redis-server

Do config.php dopisujemy:

'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
    'host' => 'localhost',
    'port' => 6379,
],

Restartujemy apache.

Konfiguracja

Konfiguracja aplikacji znajduje się w /home/owncloud/httpdocs/config/config.php. W tym pliku podajemy parametry połączenia z bazą danych i lokalizację danych użytkowników na dysku serwera.

Poniżej do pobrania przykładowa konfiguracja Apache.

owncloud.conf
<VirtualHost *:443>
	DocumentRoot /home/owncloud/httpdocs
	ServerName owncloud.yourdomain.pl
	ServerAdmin youremail@gmail.com
	Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains;"
 
	SSLEngine On
	SSLCertificateFile /etc/apache2/ssl/certs/server.crt
	SSLCertificateKeyFile /etc/apache2/ssl/private/server.key
	SSLCertificateChainFile /etc/apache2/ssl/certs/chain.crt
 
	ErrorLog /home/owncloud/logs/ssl_error.log
	CustomLog /home/owncloud/logs/ssl_access.log combined
 
	Alias /owncloud "/home/owncloud/httpdocs/"
 
	<Directory /home/owncloud/httpdocs>
		AddType application/x-httpd-php .php .php3 .php4 .inc
		DirectoryIndex index.php index.php3 index.html
		Options Indexes FollowSymLinks Includes ExecCGI
		AllowOverride All
		Require all granted
		#Require all denied
		#Require ip 10.9.5
		<IfModule mod_dav.c>
			Dav off
		</IfModule>
		SetEnv HOME /home/owncloud/httpdocs
		SetEnv HTTP_HOME /home/owncloud/httpdocs
	</Directory>	
</VirtualHost>
 
<VirtualHost *:80>
	DocumentRoot /home/owncloud/httpdocs
	ServerName owncloud.yourdomain.pl
	ServerAdmin youremail@gmail.com
	Redirect permanent / https://owncloud.uwb.edu.pl
 
	ErrorLog /home/owncloud/logs/error.log
	CustomLog /home/owncloud/logs/access.log combined
 
	<Directory /home/owncloud/httpdocs>
		AddType application/x-httpd-php .php .php3 .php4 .inc
		DirectoryIndex index.php index.php3 index.html
		Options Indexes FollowSymLinks Includes ExecCGI
		AllowOverride All
		Require all granted
		#Require all granted
		#Require not ip 212
		#Require all denied
		#Require ip 10.9.5
	</Directory>	
</VirtualHost>

Backup

Backupujemy katalog z plikami użytkowników, bazę danych i plik config.php.

Jeżeli po odtworzeniu aplikacji zmienił się katalog z plikami, dodatkowo w MySQL musimy poprawić wpisy w bazie danych. Załóżmy, że stary katalog to /db/owncloud-data, a nowy /home/owncloud/owncloud-data:

update oc_accounts set home = CONCAT('/home/owncloud/owncloud-data//', user_id) where home like '/db/owncloud-data%';

Ścieżki w bazie danych popraw jeszcze przed przekopiowaniem plików do nowej lokalizacji, a odnowienie indeksów wykonaj na sam koniec. Jeżeli przeskanujesz pliki bez poprawnych wpisów w bazie, pliki zostaną uszkodzone! Wówczas trzeba poprawić wpisy w bazie i skopiować pliki jeszcze raz, po czym powtórzyć wszystkie czynności.

Przywrócenie z backupu wymaga odnowienia indeksów. Po przywróceniu bazy danych i plików w odpowiednie miejsca (zgodnie z konfiguracją) wykonujemy:

apt-get install php-process # yum install php-process
cd /home/owncloud/httpdocs
sudo -u www-data ./occ files:scan --all # sudo -u apache ./occ files:scan --all

Aktualizacja

Aktualizację wykonujemy jako użytkownik www-data (?!). Dlatego na czas aktualizacji, umożliwiamy logowanie jako ten użytkownik. Dodatkowo wyłączamy zainstalowane aplikacje.

cd /home/owncloud/httpdocs
chsh -s /bin/bash www-data
su www-data -c 'php occ app:disable user_cas'
su www-data -c 'php occ app:disable files_videoplayer'
su www-data -c 'php occ upgrade -v'
chsh -s /usr/sbin/nologin www-data

Znane problemy

Uwierzytelnianie

W wersji Owncloud 10.3 i MySQL 8.0 wystąpił problem uwierzytelniania aplikacji do bazy danych SQLSTATE[HY000][2054] The server requested authentication method unkown to the client. Rozwiązaniem jest następujące zapytanie do bazy:

mysql> alter user 'owncloud'@'localhost' identified with mysql_native_password by 'xxx';

Uprawnienia

Błąd ERROR 1419 (HY000): You do not have the SUPER Privilege and Binary Logging is Enabled rozwiązuje dodanie uprawnień do tworzenia triggerów dla użytkowników z uprawnieniami CREATE przez ustawienie odpowiedniej zmiennej:

mysql> SET GLOBAL log_bin_trust_function_creators = 1;

Backend

W skutek jakiegoś błędu czasami trzeba wyłapać i poprawić konta utworzone tylko przez CAS. Najczęściej mają one uid złożony z samych cyfr.

SELECT user_id, display_name, backend
FROM oc_accounts
WHERE user_id REGEXP '^[0-9]+$' AND backend = 'OC\\User\\Database';