Opis oprogramowania Nextcloud
Nextcloud to oprogramowanie w architekturze klient-serwer do tworzenia i korzystania z usług hostingu plików i współpracy grupowej. Jest gotowy do pracy w domach, małych firmach i dużych przedsiębiorstwach z kompleksowymi opcjami wsparcia. Jest to wolne i otwarte oprogramowanie, każdy może je zainstalować i używać na swoich własnych serwerach. Stworzenie własnej chmury danych nigdy nie było takie proste i bezpieczne.
- Strona projektu: https://nextcloud.com/
- Dokumentacja administratora https://docs.nextcloud.com/server/latest/admin_manual/
Przygotowanie maszyny wirtualnej Proxmox dla Nextcloud
Maszyna wirtualna na potrzeby systemu Ubuntu 22.04 z oprogramowanie Nextcloud ma następujące parametry: 2 vCPU / 2 GB RAM (średnio 700-800 MB zajęte)/ pierwszy dysk 16 GB HDD na system (3,9 GB bez swapa zajęte) /drugi dysk 512 GB na partycję /var.
Instalacja Ubuntu 22.04 w maszynie wirtualnej Proxmox VE
Proces instalacji Ubuntu 22.04 w maszynie wirtualnej Proxmox VE został opisany na stronie Instalacja Ubuntu 22.04 w maszynie wirtualnej Proxmox VE – IT Admin (vblog.ovh)
Wstępna konfiguracja systemu Ubuntu 22.04
Proces przygotowania systemu Ubuntu do pracy pomiędzy zakończeniem pracy instalatora Ubuntu a instalacją właściwego oprogramowania np. Nextcloud opisany jest na stronie Konfiguracja i konserwacja systemu Linux Ubuntu – IT Admin (vblog.ovh)
Instalacja i konfiguracja oprogramowania potrzebnego do uruchomienia serwera Nextcloud
Instalacja pakietów oprogramowania Apache + PHP
sudo apt install -y php-cli php-fpm php-json php-intl php-imagick php-pdo php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath apache2 libapache2-mod-php php-gmp php-bcmath sudo apt-get install libmagickcore-6.q16-6-extra php-imagick imagemagick
Konfiguracja PHP
sudo nano /etc/php/8.1/apache2/php.ini # lub jeśli instalowaliśmy php-fpm to: sudo nano /etc/php/8.1/fpm/php.ini date.timezone = Europe/Warsaw memory_limit = 512M upload_max_filesize = 16G post_max_size = 16G max_execution_time = 600 # włączenie konfiguracji php-fpm w apache sudo a2enconf php8.1-fpm
Konfiguracja Apache 2
# usuwamy niepotrzebną konfigurację domyślną Apache 2
sudo rm -rf /etc/apache2/sites-available/000-default.conf
sudo rm -rf /etc/apache2/sites-available/default-ssl.conf
sudo rm -rf /etc/apache2/sites-enabled/000-default.conf
# tworzymy nową konfigurację http z rewrite na https
sudo nano /etc/apache2/sites-available/cloud.netapps.ovh.conf
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.cloud.netapps.ovh [OR]
RewriteCond %{SERVER_NAME} =cloud.netapps.ovh
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot /var/www/html/cloud.netapps.ovh
ServerName cloud.netapps.ovh
ServerAlias www.cloud.netapps.ovh
ErrorLog /var/log/apache2/cloud.netapps.ovh-error.log
CustomLog /var/log/apache2/cloud.netapps.ovh-access.log combined
<Directory /var/www/html/cloud.netapps.ovh/>
Options FollowSymlinks MultiViews
AllowOverride All
Require all granted
SetEnv HOME /var/www/html/cloud.netapps.ovh
SetEnv HTTP_HOME /var/www/html/cloud.netapps.ovh
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
SSLOptions +StrictRequire
SSLCertificateFile /etc/cert/cloud.netapps.ovh/fullchain.pem
SSLCertificateKeyFile /etc/cert/cloud.netapps.ovh/privkey.pem
Protocols h2 http/1.1
</VirtualHost>
</IfModule>
# dodajemy nową konfigurację vhost do Apache 2
sudo a2ensite cloud.netapps.ovh
# włączamy potrzebne moduły Apache 2
sudo a2enmod rewrite dir mime env headers ssl
# restartujemy usługę Apache 2
sudo systemctl restart apache2
Instalacja i konfiguracja MariaDB
sudo apt -y install mariadb-server
Przygotowanie bazy danych nextcloudatabase dla Nextcloud
sudo mysql -u root UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root'; FLUSH PRIVILEGES; QUIT; CREATE USER 'nextclouduser'@'localhost' identified by 'haslouser'; CREATE DATABASE nextcloudatabase; GRANT ALL PRIVILEGES ON nextcloudatabase.* TO 'nextclouduser'@'localhost'; FLUSH PRIVILEGES; QUIT;
Instalacja oprogramowania Nextcloud
cd /var/www/html/ wget https://download.nextcloud.com/server/releases/latest.tar.bz2 tar -xvf latest.tar.bz2 mv nextcloud cloud.netapps.ovh sudo chown -R www-data:www-data /var/www/html/cloud.netapps.ovh/ rm /var/www/html/latest.tar.bz2 # przygotowanie katalogu na składowanie plików Nextcloud użytkowników mkdir -p /var/datastore
Wchodzimy przez przeglądarkę na adres naszego serwera Nextcloud i podajemy nazwę admistatora oraz hasło. Następnie możemy już tworzyć zwykłych użytkowników Nextcloud.
Zaawansowana konfiguracja Nextcloud
Dostosowanie konfiguracji Nextcloud przez edycję config.php. Wszystkie możliwe opcje są opisane na stronie https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html. W poniższym przykładzie włączona jest konfiguracja powiadamiania emailem o wybranych zdarzeniach w Nextcloud oraz PHP opcache (APCU).
sudo nano /var/www/html/cloud.netapps.ovh/config/config.php
<?php
$CONFIG = array (
'instanceid' => 'sdsdsdsdsadwe212',
'passwordsalt' => 'asdsadewewqe222121221',
'secret' => 'eTJkuKj1h7owwwwwswgiTKmq8nQE6z61212121',
'trusted_domains' =>
array (
0 => 'cloud.netapps.ovh',
1 => '192.168.8.29',
),
'datadirectory' => '/var/datastore',
'dbtype' => 'mysql',
'version' => '26.0.3.2',
'overwrite.cli.url' => 'https://cloud.netapps.ovh',
'htaccess.RewriteBase' => '/',
'dbname' => 'nextcloudatabase',
'dbhost' => 'localhost',
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'nextclouduser',
'dbpassword' => 'haslouseranc',
'installed' => true,
'log_type' => 'owncloud',
'logfile' => '/var/log/nextcloud.log',
'loglevel' => '2',
'log_rotate_size' => '104857600',
'logtimezone' => 'Europe/Warsaw',
'auth.bruteforce.protection.enabled' => false,
'app_install_overwrite' =>
array (
0 => 'files_ebookreader',
1 => 'admin_notifications',
2 => 'files_trackdownloads',
3 => 'mindmap_app',
4 => 'discoursesso',
),
'mail_smtpmode' => 'smtp',
'mail_sendmailmode' => 'smtp',
'mail_smtphost' => 'ssl0.ovh.net',
'mail_smtpport' => '465',
'mail_smtpsecure' => 'ssl',
'mail_smtpauth' => 1,
'mail_smtpauthtype' => 'LOGIN',
'mail_smtpname' => '[email protected]',
'mail_smtppassword' => 'haslodopoczty,',
'mail_from_address' => 'sysnotify',
'mail_domain' => 'wp.pl',
'mail_smtpdebug' => true,
'memcache.local' => '\\OC\\Memcache\\APCu',
'default_phone_region' => 'GB',
'force_locale' => 'pl_PL',
'defaultapp' => 'dashboard,files',
'knowledgebaseenabled' => false,
'auto_logout' => false,
'maintenance' => false,
'theme' => '',
);
# zmiana w /var/www/html/cloud.netapps.ovh/config/config.php (Pretty links bez index.php w adresie) 'htaccess.RewriteBase' => '/', # wymaga wykonania polecenia sudo -u www-data /usr/bin/php --define apc.enable_cli=1 /var/www/html/cloud.netapps.ovh/occ maintenance:update:htaccess
Udostępnienia katalogu NextCloud przez Sambę w sieci wewnętrznej
Może zaistnieć potrzeba wrzucania do katalogu wybranego użytkownika Nextcloud bezpośrednio plików przez sieć lokalną np. przez protokół SMB
sudo apt install samba sudo systemctl enable --now smbd sudo ufw allow samba sudo useradd -d /var/datastore/zibitest/files -s /sbin/nologin nextcloud sudo smbpasswd -a nextcloud sudo systemctl enable --now smbd mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
Poniżej przykładowa konfiguracja udostępnienia plików usera zibitest przez użytkownika samby o nazwie nextcloud
sudo nano /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)
log file = /var/log/samba/log.%m
max log size = 1000
logging = file
panic action = /usr/share/samba/panic-action %d
server role = standalone server
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes
map to guest = bad user
usershare allow guests = yes
[Nextcloud]
path = /var/datastore/zibitest/files
browseable = yes
read only = no
create mask = 644
force create mode = 644
security mask = 644
force security mode = 644
#force create mode = 0644
force directory mode = 0755
directory mask = 0755
directory security mask = 0755
force directory security mode = 0755
force user = www-data
valid users = nextcloud @sadmin
Należy pamiętać aby tak wrzucone z zewnątrz pliki dodać do bazy danych Nextcloud poleceniem
sudo -u www-data /usr/bin/php --define apc.enable_cli=1 /var/www/html/cloud.netapps.ovh/occ files:scan zibitest sudo chown -R www-data:www-data /var/datastore/zibitest/files/
lub korzystając z usługi cron cyklicznie jak w przykładzie na stronie https://itadmin.vblog.ovh/instalacja-i-konfiguracja-nextcloud-na-maszynie-wirtualnej-proxmox-ve-z-ubuntu-22-04/#Nextcloud_cron_czyli_automatyczne_wykonywanie_roznych_zadan_w_tle
Nextcloud cron czyli automatyczne wykonywanie różnych zadań w tle
W cronie użytkownika root dodajemy następujące wpisy modyfikując je pod swoją konfigurację
crontab -e */5 * * * * sudo -u www-data /usr/bin/php --define apc.enable_cli=1 /var/www/html/cloud.netapps.ovh/cron.php */15 * * * * sudo -u www-data /usr/bin/php --define apc.enable_cli=1 /var/www/html/cloud.netapps.ovh/occ files:scan zibitest 2>&1 */5 * * * * /usr/bin/chown -R www-data:www-data /var/datastore/zibitest/files/ > /dev/null 2>&1
Wtedy w menu Basic settings administratora Nextcloud należy pamiętać aby wybrać opcję Cron dla pozycji Background jobs.
Więcej ciekawych informacji o zadaniach w tle w Nextcloud można znaleźć na stronie https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html
Instalacja i aktualizacja certyfikatu SSL Let’s Encrypt dla Nextcloud
W moim przypadku generowanie i dystrybucja certyfikatu SSL Let’s Encrypt odbywa się centralnie przez kontener LXC z certbotem, Stamtąd pliki certyfikatu pobierane są na poszczególne serwery i usługi np. Nextcloud. Dodatkowe informacje na temat odnowienia certyfikatu SSL Let’s Encrypt dla serwera Nextcloud znajdują się na stronie Let’s Encrypt wildcard dystrybucja certyfikatu SSL w sieci wewnętrznej – IT Admin (vblog.ovh)
Aktualizacja Nextcloud z linii komend
sudo -u www-data /usr/bin/php --define apc.enable_cli=1 /var/www/html/cloud.netapps.ovh/updater/updater.phar Should the "occ upgrade" command be executed? [Y/n] n Keep maintenance mode active? [y/N] y sudo -u www-data /usr/bin/php --define apc.enable_cli=1 /var/www/html/cloud.netapps.ovh/occ upgrade #aktualizacja aplikacji dodatkowych sudo -u www-data /usr/bin/php --define apc.enable_cli=1 /var/www/html/cloud.netapps.ovh/occ app:update --all richdocumentscode new version available: 23.5.5 richdocumentscode updated spreed new version available: 16.0.4 spreed updated quicknotes new version available: 0.8.10 quicknotes updated # dodanie brakujących indeksów po aktualizacji Nextcloud sudo -u www-data /usr/bin/php --define apc.enable_cli=1 /var/www/html/cloud.netapps.ovh/occ db:add-missing-indices # wyłączenie trybu maintenance Nextcloud sudo -u www-data /usr/bin/php --define apc.enable_cli=1 /var/www/html/cloud.netapps.ovh/occ maintenance:mode --off # w razie problemów z aktulizacją np. Upgrade stuck at “Step 4 is currently in process sudo -u www-data /usr/bin/php --define apc.enable_cli=1 /var/www/html/cloud.netapps.ovh/occ maintenance:repair
Konfiguracja powiadomień emailowych Nextcloud
W tym przypadku zamiast Postfixa, którego przykład konfiguracji dla OVH przedstawiono na stronie https://itadmin.vblog.ovh/proxmox-ve-powiadamianie-emailowe-przez-postfix-na-zewnetrzny-serwer-poczty/ wybrałem rozwiązanie o nazwie ssmtp.
sudo apt install mailutils sudo apt-get install ssmtp sudo apt-get install bsd-mailx sudo nano /etc/ssmtp/ssmtp.conf [email protected] mailhub=smtp.office365.com:587 [email protected] AuthPass=sadsadsa123 UseTLS=YES UseSTARTTLS=YES hostname=wp.com.pl rewriteDomain=wp.com.pl AuthMethod=LOGIN FromLineOverride=YES Debug=YES sudo nano /etc/ssmtp/revaliases root:[email protected]:smtp.office365.com:587 # w razie problemów z polem od sudo chfn -f 'Powiadomienia Nextcloud' root # test działania emaila z linii komend echo "Hello, World" | mail -s "Email Test" [email protected]
Jako administrator Nextcloud możemy w menu Basic settings ustawiać czy chcemy być powiadamiani o nowościach Nextcloud czy też poprzez menu Notifications dla wszystkich użytkownikó o ważnych zmianach dotyczących naszych plików czy też dostępu.
Rozwiązywanie najczęstszych problemów z Nextcloud
Nie działające Pretty links
# po zmianach w pliku /var/www/html/cloud.netapps.ovh/config/config.php sudo -u www-data /usr/bin/php --define apc.enable_cli=1 /var/www/html/cloud.netapps.ovh/occ maintenance:update:htaccess
Problem z brakującymi indeksami po aktualizacji occ db:add-missing-indices
sudo -u www-data /usr/bin/php --define apc.enable_cli=1 /var/www/html/cloud.netapps.ovh/occ db:add-missing-indices
Problem z bigint po aktualizacji Nextcloud
sudo -u www-data /usr/bin/php --define apc.enable_cli=1 /var/www/html/cloud.netapps.ovh/occ db:convert-filecache-bigint
Nie działający prawidłowo PHP cache opcache.interned_strings_buffer
sudo nano /etc/php/8.1/fpm/php.ini opcache.interned_strings_buffer=16
Zablokowany dostęp do pliku w Nextcloud
You can’t access files because they are locked and you find such errors in your logfile:
{"reqId":"0DijSqEkfOg2iyh9VD8J","remoteAddr":"xx.xx.xx.xx","app":"webdav","message":"Exception: {\"Message\":\"HTTP\\\/1.1 423 \\\"path\\\/file.extension\\\" is locked\",\"Exception\":\"OCA\\\\DAV\\\\Connector\\\\Sabre\\\\Exception\\\\FileLocked\",\"Code\":0,\"Trace\":\"#0
Manually disable locking state:
put Nextcloud in maintenance mode: edit config/config.php and change this line:
'maintenance' => true,
Empty table oc_file_locks: Use tools such as phpmyadmin or connect directly to your database and run (the default table prefix is oc_, this prefix can be different or even empty):
DELETE FROM oc_file_locks WHERE 1
disable maintenance mode (undo first step).
Usunięcie z kosza plików wszystkich użytkowników Nextcloud
sudo -u www-data /usr/bin/php --define apc.enable_cli=1 /var/www/html/cloud.netapps.ovh/occ trashbin:cleanup --all-users






