Корпорация Добра сливает инфу в АНБ? Мы смеёмся.
Google Reader закрыли, выкинув всех юзеров на мороз? Мы смеёмся, и просим ещё.
Мы бездушно синхронизируем что угодно, наши предпочтения не основаны на интересах больших компаний,
мы — истинное лицо файлшеринга.
dr Equivalent
Учитывая практически повсеместную доступность интернета, облака, являются весьма удобным средством хранения и обмена файлами. Но что делать, если не хочется чтобы к ним имели доступ посторонние люди? Поднять своё.
Установка описана для FreeBSD 11.
Разработчики Nextcloud, в качестве сервера рекомендуют Apache, но так как у меня уже используется nginx, воспользуюсь им. Ну и в качестве СУБД — MySQL:
pkg install nginx pkg install mysql56-client mysql56-server
Установку самого Nextcloud можно выполнить через pkg, но на момент написания статьи в качестве зависимостей был указан php56 и сопутствующие библиотеки, а уж почти как год вышел PHP7, который обещает повышение производительности, да и вообще как минимум поддержки. Поставим вручную.
Выполняем pkg install nextcloud, установщик выдаст список зависимостей и у всех пакетов, содержащих php, заменим php56 на php70 и получившийся список ставим:
pkg install php70 php70-bz2 php70-ctype php70-curl php70-dom php70-exif php70-fileinfo php70-filter php70-gd php70-hash php70-iconv php70-json php70-json php70-mbstring php70-mysqli php70-openssl php70-pdo php70-pdo_mysql php70-posix php70-session php70-simplexml php70-wddx php70-xml php70-xmlreader php70-xmlwriter php70-xsl php70-zip php70-zlib pkg install libffi mp3info openldap-client python27 python2 readline talloc tdb tevent
Если хотим подключать внешние диски по smb, то необходимо поставить samba36-libsmbclient, который также требует php56.
В файле /etc/make.conf устанавливаем версию PHP по умолчанию:
echo "DEFAULT_PHP_VER?=70" >> /etc/make.conf
И, как обычно, ставим пакет из портов:
cd /usr/ports/net/samba-libsmbclient make && make install && make clean
Скачиваем свежий релиз с офсайта, распаковываем в папку web-сервера и устанавливаем папке владельца:
fetch https://download.nextcloud.com/server/releases/nextcloud-10.0.1.tar.bz2 tar -C /usr/local/www/ -xzf nextcloud-10.0.1.tar.bz2 chown -R www:www /usr/local/www/nextcloud/
В /usr/local/etc/php-fpm.conf прописываем сокет, который будет слушать php-fpm, его владельца с правами и раскоментируем установку переменных окружения:
listen = /var/run/php-fpm.sock listen.owner = www listen.group = www listen.mode = 0660 env[HOSTNAME] = $HOSTNAME env[PATH] = /usr/local/bin:/usr/bin:/bin env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp
В /usr/local/etc/php.ini устанавливаем максимальное количество одновременно загружаемых файлов и их размер:
post_max_size = 2048G upload_max_filesize = 2048M max_file_uploads = 20
Правим настройки Web-сервера в /usr/local/etc/nginx/nginx.conf:
#Настройки даны для подпапки на сервере.
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80 default_server;
server_name example.com;
root /usr/local/www/example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
root /usr/local/www/example.com;
ssl_certificate /etc/ssl/certs/mydomain.ca-bundle;
ssl_certificate_key /etc/ssl/certs/mydomain.key;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
resolver 127.0.0.1; # 8.8.4.4 8.8.8.8;
add_header Strict-Transport-Security 'max-age=631138519; includeSubDomains; preload' always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
rewrite ^/mycloud/.well-known/host-meta /owncloud/public.php?service=host-meta last;
rewrite ^/mycloud/.well-known/host-meta.json /owncloud/public.php?service=host-meta-json last;
location = /mycloud/.well-known/carddav {
return 301 $scheme://$host/mycloud/remote.php/dav;
}
location = /mycloud/.well-known/caldav {
return 301 $scheme://$host/mycloud/remote.php/dav;
}
location ^~ /mycloud {
# set max upload size
client_max_body_size 2G;
#client_body_buffer_size 1m;
#client_header_timeout 3m;
#client_body_timeout 3m;
fastcgi_buffering off;
fastcgi_buffers 64 4K;
gzip off;
error_page 403 /mycloud/core/templates/403.php;
error_page 404 /mycloud/core/templates/404.php;
location /mycloud {
rewrite ^/mycloud/caldav(.*)$ /mycloud/remote.php/caldav$1 redirect;
rewrite ^/mycloud/carddav(.*)$ /mycloud/remote.php/carddav$1 redirect;
rewrite ^/mycloud/webdav(.*)$ /mycloud/remote.php/webdav$1 redirect;
rewrite ^(/mycloud/core/doc/[^\/]+/)$ $1/index.html;
rewrite ^ /mycloud/index.php$uri;
}
location ~ ^/mycloud/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
location ~ ^/mycloud/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ~ ^/mycloud/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
#Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ ^/mycloud/(?:updater|ocs-provider)(?:$|/) {
try_files $uri/ =404;
index index.php;
}
# Adding the cache control header for js and css files
# Make sure it is BELOW the PHP block
location ~* \.(?:css|js)$ {
try_files $uri /mycloud/index.php$uri$is_args$args;
add_header Cache-Control "public, max-age=7200";
# Add headers to serve security related headers (It is intended
# to have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read
add_header Strict-Transport-Security "max-age=15768000;
# includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
# Optional: Don't log access to assets
access_log off;
}
location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
try_files $uri /mycloud/index.php$uri$is_args$args;
# Optional: Don't log access to other assets
access_log off;
}
}
}
}
Разрешаем и запускаем службы:
echo 'nginx_enable="YES"' >> /etc/rc.conf echo 'php_fpm_enable="YES"' >> /etc/rc.conf echo 'mysql_enable="YES"' >> /etc/rc.conf service mysql start service php-fpm start service nginx start
Зайдем в консоль MySQL и создадим пользователя:
mysql> GRANT ALL ON nextcloud.* TO 'ncuser'@'localhost' IDENTIFIED BY 'password'; Query OK, 0 rows affected (0.01 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)
Открываем в браузере https://наш_серсер/mycloud и установим имя/пароль админа, учетные данные к базе данных:
[ Здесь должна быть картинка, но её не будет, т.к. всё уже поставлено, а скрины не сделаны 🙁 ]
Далее заходим в систему и видим симпатичную мордаху:

Теперь можно полазить по настройкам и установить дополнительные приложения, например «Календарь», «Контакты» и т.д.
Доступ по WebDAV из под Windows 10
Запускаем службу «Веб-клиент»
net start webclient
Открываем «МойЭтот Компьютер», жмём «Компьютер» — «Подключить сетевой диск»:

В поле «Папка» пишем https://наш_сервер/mycloud/remote.php/webdav отмечаем галку «Использовать другие данные» и нажимаем готово:

В следующем окне вводим имя пользователя и пароль:

В результате в системе появится сетевой диск:

Пользователи из LDAP
Идём в Приложения и добавляем External user support и LDAP user and group backend.
Далее в Интеграция с LDAP/AD, прописываем сервер, имя/пароль пользователя, который будет читать каталог и DN.

Внешнее SMB-хранилище
Ставим приложение External storage support.
Идём во Внешнее хранилище прописываем сервер, папку и пользователя.

Два выше приведённых пункта имеют обширные настройки групп и безопасности, что делает сие приложение достаточно годным для применения в небольшой и бедной организации.