Wielu z nas korzysta z rozwiązań popularnych dostawców takich jak Dropbox czy Google Drive. Ale czy nie warto byłoby mieć własnej chmury na swoim serwerze?
Dostęp do plików możliwy jest poprzez aplikację mobilną, protokół WebDAV, aplikacje na komputer czy przeglądarkę internetową. Rozwiązanie openCloud pozwala nam na zaawansowane ustawienia udostępniania dla użytkowników, grup, poprzez link czy łącząc się z innymi instancjami. Jeśli zależy nam na prywatności naszych danych możemy pliki zaszyfrować na serwerze. Więcej informacji o projekcie znajdziesz tutaj.
Mając gotowe środowisko LEMP zainstalujemy i skonfigurujemy ownCloud, a dodatkowo zabezpieczymy ją certyfikatem SSL. W moim przypadku dostęp do chmury będzie możliwy przez subdomenę. Dla przykładu stworzyłem chmura.shinsec.pl i wygenerowałem dla niej certyfikat SSL.
PHP
Doinstaluj moduły, jeśli ich nie posiadasz
apt-get install php5-gd php5-json php5-mysqlnd php5-curl php5-intl php5-mcrypt php5-imagick
MySQL
Logujemy się.
mysql -u root -p
Tworzymy bazę danych
CREATE DATABASE chmura;
Teraz stwórzmy oddzielne konto użytkownika i nadajmy mu odpowiednie uprawnienia:
GRANT ALL ON chmura.* TO 'chmurauser'@'localhost' IDENTIFIED BY 'sUp#rs1ln#h@sL0';
Ostatnie polecenie
FLUSH PRIVILEGES;
Wychodzimy
exit;
ownCloud
Stwórz foldery
cd /var/www
mkdir chmura
cd chmura
mkdir logs public data
Pobierz pliki instalacyjne z oficjalnej strony
wget https://download.owncloud.org/community/owncloud-9.1.1.zip
Wypakuj
unzip owncloud-9.1.1.zip
Przenieś pliki instalacyjne do folderu public
cp -R owncloud/* /var/www/chmura/public/
Zmień właściciela
chown -R www-data:www-data /var/www/chmura
nginx
Wejdź do folderu sites-enabled
cd /etc/nginx/sites-enabled/
Stwórz nowy server block
nano chmura
I wklej do niego konfigurację zalecaną przez ownCloud odpowiednio zmieniając wartości na swoje
server { listen 80; server_name chmura.shinsec.pl www.chmura.shinsec.pl; return 301 https://chmura.shinsec.pl$request_uri; } server { listen 443 ssl; server_name chmura.shinsec.pl; root /var/www/chmura/public; access_log /var/www/chmura/logs/access.log; error_log /var/www/chmura/logs/error.log; ssl on; ssl_certificate /etc/letsencrypt/live/chmura.shinsec.pl/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/chmura.shinsec.pl/privkey.pem; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_trusted_certificate /etc/letsencrypt/live/chmura.shinsec.pl/chain.pem; ssl_stapling on; ssl_stapling_verify on; 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; location = /robots.txt { allow all; log_not_found off; access_log off; } location = /.well-known/carddav { return 301 $scheme://$host/remote.php/dav; } location = /.well-known/caldav { return 301 $scheme://$host/remote.php/dav; } location /.well-known/acme-challenge { } client_max_body_size 512M; fastcgi_buffers 64 4K; gzip off; error_page 403 /core/templates/403.php; error_page 404 /core/templates/404.php; location / { rewrite ^ /index.php$uri; } location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ { return 404; } location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { return 404; } location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) { fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTPS on; fastcgi_param modHeadersAvailable true; fastcgi_param front_controller_active true; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_intercept_errors on; } location ~ ^/(?:updater|ocs-provider)(?:$|/) { try_files $uri $uri/ =404; index index.php; } location ~* \.(?:css|js)$ { try_files $uri /index.php$uri$is_args$args; add_header Cache-Control "public, max-age=7200"; 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 /index.php$uri$is_args$args; access_log off; } }
Wchodzimy na adres naszej strony i dokańczamy konfigurację wpisując dane bazy danych, konfigurując konto administratora i katalog, gdzie znajdywać się będą pliki.