Корпорация Добра сливает инфу в АНБ? Мы смеёмся.
Google Reader закрыли, выкинув всех юзеров на мороз? Мы смеёмся, и просим ещё.
Мы бездушно синхронизируем что угодно, наши предпочтения не основаны на интересах больших компаний,
мы — истинное лицо файлшеринга.
dr Equivalent
Учитывая практически повсеместную доступность интернета, облака, являются весьма удобным средством хранения и обмена файлами. Но что делать, если не хочется чтобы к ним имели доступ посторонние люди? Поднять своё.
Установка описана для FreeBSD 11.
Разработчики Nextcloud, в качестве сервера рекомендуют Apache, но так как у меня уже используется nginx, воспользуюсь им. Ну и в качестве СУБД — MySQL:
1 2 |
pkg install nginx pkg install mysql56-client mysql56-server |
Установку самого Nextcloud можно выполнить через pkg, но на момент написания статьи в качестве зависимостей был указан php56 и сопутствующие библиотеки, а уж почти как год вышел PHP7, который обещает повышение производительности, да и вообще как минимум поддержки. Поставим вручную.
Выполняем pkg install nextcloud, установщик выдаст список зависимостей и у всех пакетов, содержащих php, заменим php56 на php70 и получившийся список ставим:
1 2 |
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 по умолчанию:
1 |
echo "DEFAULT_PHP_VER?=70" >> /etc/make.conf |
И, как обычно, ставим пакет из портов:
1 2 |
cd /usr/ports/net/samba-libsmbclient make && make install && make clean |
Скачиваем свежий релиз с офсайта, распаковываем в папку web-сервера и устанавливаем папке владельца:
1 2 3 |
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, его владельца с правами и раскоментируем установку переменных окружения:
1 2 3 4 5 6 7 8 9 |
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 устанавливаем максимальное количество одновременно загружаемых файлов и их размер:
1 2 3 |
post_max_size = 2048G upload_max_filesize = 2048M max_file_uploads = 20 |
Правим настройки Web-сервера в /usr/local/etc/nginx/nginx.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
#Настройки даны для подпапки на сервере. 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; } } } } |
Разрешаем и запускаем службы:
1 2 3 4 5 6 |
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 и создадим пользователя:
1 2 3 4 |
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
Запускаем службу «Веб-клиент»
1 |
net start webclient |
Открываем «МойЭтот Компьютер», жмём «Компьютер» — «Подключить сетевой диск»:
В поле «Папка» пишем https://наш_сервер/mycloud/remote.php/webdav отмечаем галку «Использовать другие данные» и нажимаем готово:
В следующем окне вводим имя пользователя и пароль:
В результате в системе появится сетевой диск:
Пользователи из LDAP
Идём в Приложения и добавляем External user support и LDAP user and group backend.
Далее в Интеграция с LDAP/AD, прописываем сервер, имя/пароль пользователя, который будет читать каталог и DN.
Внешнее SMB-хранилище
Ставим приложение External storage support.
Идём во Внешнее хранилище прописываем сервер, папку и пользователя.
Два выше приведённых пункта имеют обширные настройки групп и безопасности, что делает сие приложение достаточно годным для применения в небольшой и бедной организации.