Merge branch 'master' into requirements
2
Makefile
@ -40,7 +40,7 @@ developer-manual-pdf:
|
||||
@echo "Developer manual build finished; PDF is updated"
|
||||
|
||||
api-docs: clean-api-docs
|
||||
cd build && sh get-server-sources.sh master
|
||||
cd build && sh get-server-sources.sh stable13
|
||||
mkdir -p developer_manual/api/
|
||||
cd build && composer install && composer update
|
||||
cd build && php generateApiDoc.php
|
||||
|
||||
47
_ext/edit_on_github.py
Normal file
@ -0,0 +1,47 @@
|
||||
"""
|
||||
Sphinx extension to add ReadTheDocs-style "Edit on GitHub" links to the
|
||||
sidebar.
|
||||
Loosely based on https://github.com/astropy/astropy/pull/347
|
||||
"""
|
||||
|
||||
import os
|
||||
import warnings
|
||||
from pprint import pprint
|
||||
|
||||
|
||||
__licence__ = 'BSD (3 clause)'
|
||||
|
||||
|
||||
def get_github_url(app, view, path):
|
||||
return 'https://github.com/{project}/{view}/{branch}/{path}'.format(
|
||||
project=app.config.edit_on_github_project,
|
||||
view=view,
|
||||
branch=app.config.edit_on_github_branch,
|
||||
path=path)
|
||||
|
||||
|
||||
def html_page_context(app, pagename, templatename, context, doctree):
|
||||
if templatename != 'page.html':
|
||||
return
|
||||
|
||||
if not app.config.edit_on_github_project:
|
||||
warnings.warn("edit_on_github_project not specified")
|
||||
return
|
||||
|
||||
if not app.config.current_docs:
|
||||
warnings.warn("current_docs not specified")
|
||||
return
|
||||
|
||||
path = app.config.current_docs + '/' + os.path.relpath(doctree.get('source'), app.builder.srcdir)
|
||||
show_url = get_github_url(app, 'blob', path)
|
||||
edit_url = get_github_url(app, 'edit', path)
|
||||
|
||||
context['show_on_github_url'] = show_url
|
||||
context['edit_on_github_url'] = edit_url
|
||||
|
||||
|
||||
def setup(app):
|
||||
app.add_config_value('edit_on_github_project', '', True)
|
||||
app.add_config_value('current_docs', '', True)
|
||||
app.add_config_value('edit_on_github_branch', 'master', True)
|
||||
app.connect('html-page-context', html_page_context)
|
||||
@ -12,18 +12,18 @@
|
||||
{% if theme_bootswatch_theme %}
|
||||
{# BS2 needs "bootstrap-responsive.css". BS3 doesn't. #}
|
||||
{% if theme_bootstrap_version == "3" %}
|
||||
{% set theme_css_files = theme_css_files + [
|
||||
'_static/bootswatch-' + bootstrap_version + '/' + theme_bootswatch_theme + '/bootstrap.min.css',
|
||||
'_static/bootstrap-sphinx.css'
|
||||
]
|
||||
%}
|
||||
{% set theme_css_files = theme_css_files + [
|
||||
'_static/bootswatch-' + bootstrap_version + '/' + theme_bootswatch_theme + '/bootstrap.min.css',
|
||||
'_static/bootstrap-sphinx.css'
|
||||
]
|
||||
%}
|
||||
{% else %}
|
||||
{% set theme_css_files = theme_css_files + [
|
||||
'_static/bootswatch-' + bootstrap_version + '/' + theme_bootswatch_theme + '/bootstrap.min.css',
|
||||
'_static/bootstrap-' + bootstrap_version + '/css/bootstrap-' + bootstrap_additional_css + '.min.css',
|
||||
'_static/bootstrap-sphinx.css'
|
||||
]
|
||||
%}
|
||||
{% set theme_css_files = theme_css_files + [
|
||||
'_static/bootswatch-' + bootstrap_version + '/' + theme_bootswatch_theme + '/bootstrap.min.css',
|
||||
'_static/bootstrap-' + bootstrap_version + '/css/bootstrap-' + bootstrap_additional_css + '.min.css',
|
||||
'_static/bootstrap-sphinx.css'
|
||||
]
|
||||
%}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% set theme_css_files = theme_css_files + ['_static/main.min.css', '_static/styles.css']
|
||||
@ -36,10 +36,10 @@
|
||||
{% set css_files = css_files + theme_css_files + bootswatch_css_custom %}
|
||||
|
||||
{% set script_files = script_files + [
|
||||
'_static/js/jquery-1.11.0.min.js',
|
||||
'_static/js/jquery-fix.js',
|
||||
'_static/bootstrap-' + bootstrap_version + '/js/bootstrap.min.js',
|
||||
'_static/bootstrap-sphinx.js'
|
||||
'_static/js/jquery-1.11.0.min.js',
|
||||
'_static/js/jquery-fix.js',
|
||||
'_static/bootstrap-' + bootstrap_version + '/js/bootstrap.min.js',
|
||||
'_static/bootstrap-sphinx.js'
|
||||
]
|
||||
%}
|
||||
|
||||
@ -53,57 +53,56 @@
|
||||
|
||||
{# Sidebar: Rework into our Bootstrap nav section. #}
|
||||
{% macro navBar() %}
|
||||
<header class="banner navbar navbar-default navbar-static-top" role="banner">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="brand" href="http://nextcloud.com/" rel="home" title="Nextcloud.com"><img class="logo" src="{{ pathto('_static/img/logo.svg', 1) }}" itemprop="logo"></a>
|
||||
</div>
|
||||
<nav class="nav headroom--pinned" id="nav">
|
||||
<!-- To finish -->
|
||||
<div class="mobile-bg-container">
|
||||
<div class="mobile-bg"></div>
|
||||
</div>
|
||||
|
||||
<nav class="collapse navbar-collapse" role="navigation">
|
||||
<ul id="menu-header" class="nav navbar-nav">
|
||||
<li><a target="_blank" href="https://demo.nextcloud.com">Demo</a></li>
|
||||
<li><a href="https://nextcloud.com/news/">News</a></li>
|
||||
<li><a href="https://nextcloud.com/features/">Features</a></li>
|
||||
<li><a href="https://nextcloud.com/about/">About us</a></li>
|
||||
<li><a href="https://nextcloud.com/contribute/">Get involved</a></li>
|
||||
<li><a href="https://nextcloud.com/support/">Support</a></li>
|
||||
<li><a href="https://nextcloud.com/enterprise/">Enterprise</a></li>
|
||||
<li class="menu-install"><a href="https://nextcloud.com/install/">Download</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container">
|
||||
<div class="brand">
|
||||
<a href="https://nextcloud.com/homepage"><div class="logo stopedAnimation"></div></a>
|
||||
</div>
|
||||
<div class="nav__sections-wrapper">
|
||||
<ul class="nav__sections">
|
||||
<li class="nav__section"><a href="https://nextcloud.com/files" class="nav__label">Features</a></li>
|
||||
<li class="nav__section"><a href="https://help.nextcloud.com/" class="nav__label">Support</a></li>
|
||||
<li class="nav__section"><a href="https://nextcloud.com/contribute" class="nav__label">Community</a></li>
|
||||
<li class="nav__section"><a href="https://nextcloud.com/about" class="nav__label">About</a></li>
|
||||
</ul>
|
||||
<ul class="right-buttons">
|
||||
<li class="ghost-btn"><a href="https://demo.nextcloud.com/" class="nav__label">Demo</a></li>
|
||||
<li class="ghost-btn"><a href="https://nextcloud.com/install" class="nav__label">Download</a></li>
|
||||
<li class="ghost-btn"><a href="https://nextcloud.com/enterprise/buy" class="nav__label">Buy</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
{% endmacro %}
|
||||
|
||||
{% if theme_bootstrap_version == "3" %}
|
||||
{%- macro bsidebar() %}
|
||||
{%- if render_sidebar %}
|
||||
<div class="{{ bs_span_prefix }}3">
|
||||
<div id="sidebar" class="bs-sidenav" role="complementary">
|
||||
{%- for sidebartemplate in sidebars %}
|
||||
{%- include sidebartemplate %}
|
||||
{%- endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{%- endif %}
|
||||
{%- if render_sidebar %}
|
||||
<div class="{{ bs_span_prefix }}3">
|
||||
<div id="sidebar" class="bs-sidenav" role="complementary">
|
||||
{%- for sidebartemplate in sidebars %}
|
||||
{%- include sidebartemplate %}
|
||||
{%- endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{%- endif %}
|
||||
{%- endmacro %}
|
||||
{% else %}
|
||||
{%- macro bsidebar() %}
|
||||
{%- if render_sidebar %}
|
||||
<div class="{{ bs_span_prefix }}3">
|
||||
<div id="sidebar" class="bs-sidenav well" data-spy="affix">
|
||||
{%- for sidebartemplate in sidebars %}
|
||||
{%- include sidebartemplate %}
|
||||
{%- endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{%- endif %}
|
||||
{%- if render_sidebar %}
|
||||
<div class="{{ bs_span_prefix }}3">
|
||||
<div id="sidebar" class="bs-sidenav well" data-spy="affix">
|
||||
{%- for sidebartemplate in sidebars %}
|
||||
{%- include sidebartemplate %}
|
||||
{%- endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{%- endif %}
|
||||
{%- endmacro %}
|
||||
{% endif %}
|
||||
|
||||
@ -117,16 +116,16 @@
|
||||
<link rel="apple-touch-icon-precomposed" href="https://nextcloud.com/wp-content/themes/next/assets/img/common/favicon.png" />
|
||||
<!-- Piwik -->
|
||||
<script type="text/javascript">
|
||||
var _paq = _paq || [];
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="//stats.nextcloud.com/";
|
||||
_paq.push(['setTrackerUrl', u+'piwik.php']);
|
||||
_paq.push(['setSiteId', 3]);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
var _paq = _paq || [];
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="//stats.nextcloud.com/";
|
||||
_paq.push(['setTrackerUrl', u+'piwik.php']);
|
||||
_paq.push(['setSiteId', 3]);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
</script>
|
||||
<noscript><p><img src="//stats.nextcloud.com/piwik.php?idsite=3" style="border:0;" alt="" /></p></noscript>
|
||||
<!-- End Piwik Code -->
|
||||
@ -143,51 +142,51 @@
|
||||
<div class="wrap container not-front">
|
||||
<div class="content row">
|
||||
<main class="main">
|
||||
<div class="row page-content-header">
|
||||
<div class="col-md-8">
|
||||
<h1><a href="{{ pathto(master_doc) }}">{{ project|e }}</a></h1>
|
||||
<div class="doc-version-switch">
|
||||
Versions:
|
||||
{%- for v in doc_versions %}
|
||||
<a href="https://docs.nextcloud.com/server/{{ v }}/{{current_doc}}/{{pagename}}.html" {% if version == v %} class="current-doc"{% endif %}>{{v}}</a>
|
||||
{%- endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
{% if theme_show_search %}
|
||||
<form class="headersearch" style="margin: 16px 0;" action="{{ pathto('search') }}" method="get">
|
||||
<input type="text" value="" name="q" id="q" class="form-control" />
|
||||
<button class="btn btn-default" type="submit" id="searchsubmit">Search</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% block sidebartoc %}
|
||||
<div class="row page-content-header">
|
||||
<div class="col-md-8">
|
||||
<h1><a href="{{ pathto(master_doc) }}">{{ project|e }}</a></h1>
|
||||
<div class="doc-version-switch">
|
||||
Versions:
|
||||
{%- for v in doc_versions %}
|
||||
<a href="https://docs.nextcloud.com/server/{{ v }}/{{current_doc}}/{{pagename}}.html" {% if version == v %} class="current-doc"{% endif %}>{{v}}</a>
|
||||
{%- endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
{% if theme_show_search %}
|
||||
<form class="headersearch" style="margin: 16px 0;" action="{{ pathto('search') }}" method="get">
|
||||
<input type="text" value="" name="q" id="q" class="form-control" />
|
||||
<button class="btn btn-default" type="submit" id="searchsubmit">Search</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% block sidebartoc %}
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
<div class="sidebar">
|
||||
<div class="menu-support-container">
|
||||
<ul id="menu-support" class="menu">
|
||||
<ul>
|
||||
|
||||
|
||||
<li><a href="{{ pathto(master_doc) }}">Table of Contents</a></li>
|
||||
</ul>
|
||||
{{ toctree(maxdepth=3) }}
|
||||
{{ toctree(maxdepth=3) }}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
<div class="col-md-9">
|
||||
<div class="page-content">
|
||||
{% include "relations.html" %}
|
||||
{% include "relations.html" %}
|
||||
{% block body %}{% endblock %}
|
||||
{% include "relations.html" %}
|
||||
{% include "relations.html" %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
{%- endblock %}
|
||||
@ -195,64 +194,86 @@
|
||||
{%- block footer %}
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 footer-social-icons">
|
||||
<p class="text-center"><a target="_blank" href="https://plus.google.com/104036748063781940910/about"><img width=50 src="{{ pathto('_static/img/social/googleplus.svg', 1) }}" title="Follow us on Google Plus!" alt="Follow us on Google Plus!"></img></a>
|
||||
<a target="_blank" href="https://www.facebook.com/Nextclouders"><img width=50 src="{{ pathto('_static/img/social/facebook.svg', 1) }}" title="Like our Facebook page!" alt="Like our Facebook page!"></img></a>
|
||||
<a target="_blank" href="https://twitter.com/Nextclouders"><img width=50 src="{{ pathto('_static/img/social/twitter.svg', 1) }}" title="Subscribe to our Twitter channel!" alt="Subscribe to our Twitter channel!"></img></a>
|
||||
<a target="_blank" href="https://nextcloud.com/blogfeed"><img class="img-circle" width=50 src="{{ pathto('_static/img/social/rss.svg', 1) }}" title="Subscribe to our news feed!" alt="Subscribe to our news feed!"></img></a>
|
||||
<a target="_blank" href="https://newsletter.nextcloud.com/"><img class="img-circle" width=50 src="{{ pathto('_static/img/social/mail.svg', 1) }}" title="Subscribe to our newsletter!" alt="Subscribe to our newsletter!"></img></a></p>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<p>All documentation licensed under the <a href="https://creativecommons.org/licenses/by/3.0/us/">Creative Commons Attribution 3.0 Unported license</a>.</p>
|
||||
<p><a href="https://github.com/nextcloud/documentation/graphs/contributors">See who contributed to our documentation/credits</a>.</p>
|
||||
</div>
|
||||
<div class="col-lg-12 footer-social-icons">
|
||||
<p class="text-center"><a target="_blank" href="https://plus.google.com/104036748063781940910/about"><img width=50 src="{{ pathto('_static/img/social/googleplus.svg', 1) }}" title="Follow us on Google Plus!" alt="Follow us on Google Plus!"></img></a>
|
||||
<a target="_blank" href="https://www.facebook.com/Nextclouders"><img width=50 src="{{ pathto('_static/img/social/facebook.svg', 1) }}" title="Like our Facebook page!" alt="Like our Facebook page!"></img></a>
|
||||
<a target="_blank" href="https://twitter.com/Nextclouders"><img width=50 src="{{ pathto('_static/img/social/twitter.svg', 1) }}" title="Subscribe to our Twitter channel!" alt="Subscribe to our Twitter channel!"></img></a>
|
||||
<a target="_blank" href="https://nextcloud.com/blogfeed"><img class="img-circle" width=50 src="{{ pathto('_static/img/social/rss.svg', 1) }}" title="Subscribe to our news feed!" alt="Subscribe to our news feed!"></img></a>
|
||||
<a target="_blank" href="https://newsletter.nextcloud.com/"><img class="img-circle" width=50 src="{{ pathto('_static/img/social/mail.svg', 1) }}" title="Subscribe to our newsletter!" alt="Subscribe to our newsletter!"></img></a></p>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<p>All documentation licensed under the <a href="https://creativecommons.org/licenses/by/3.0/us/">Creative Commons Attribution 3.0 Unported license</a>.</p>
|
||||
<p><a href="https://github.com/nextcloud/documentation/graphs/contributors">See who contributed to our documentation/credits</a>.</p>
|
||||
{%- if show_source and has_source and sourcename and edit_on_github_url %}
|
||||
<p>Do you want to help us to improve this document?
|
||||
<a href="{{ edit_on_github_url }}" rel="nofollow">{{ _('Edit this page on GitHub') }} <span class="glyphicon glyphicon-pencil"></span></a>
|
||||
</p>
|
||||
{%- endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="content-info" role="contentinfo">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-2 col-sm-offset-1">
|
||||
<div class="footer-nav">
|
||||
<h4>About Nextcloud</h4>
|
||||
<ul id="menu-about" class="menu">
|
||||
<li><a href="https://nextcloud.com/about/">About us</a></li>
|
||||
<li><a href="https://nextcloud.com/contact/">Contact us</a></li>
|
||||
<li><a href="https://nextcloud.com/press/">Press</a></li>
|
||||
<li><a href="https://nextcloud.com/privacy/">Privacy policy</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-2 col-sm-offset-2">
|
||||
</div>
|
||||
<div class="col-sm-2 col-sm-offset-2">
|
||||
<div class="footer-nav">
|
||||
<h4>Interact</h4>
|
||||
<ul id="menu-interact" class="menu">
|
||||
<li class="menu-irc-channel"><a href="https://webchat.freenode.net/?channels=nextcloud">IRC Channel</a></li>
|
||||
<li class="menu-forums"><a href="https://help.nextcloud.com/">Forums</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12 footer-text">
|
||||
<p>
|
||||
{%- if show_copyright %}
|
||||
{%- if hasdoc('copyright') %}
|
||||
{% trans path=pathto('copyright'), copyright=copyright|e %}© <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}<br/>
|
||||
{%- else %}
|
||||
{% trans copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %} <small><a href="https://nextcloud.com/impressum">Legal Notice</a></small><br/>
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
{%- if last_updated %}
|
||||
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}<br/>
|
||||
{%- endif %}
|
||||
{%- if show_sphinx %}
|
||||
{% trans sphinx_version=sphinx_version|e %}Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %}<br/>
|
||||
{%- endif %}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="page-footer">
|
||||
<div class="container">
|
||||
<div class="col-sm-3">
|
||||
<h1>About Nextcloud</h1>
|
||||
<ul>
|
||||
<li><a href="https://nextcloud.com/about">About us</a></li>
|
||||
<li><a href="https://nextcloud.com/contributors">Community</a></li>
|
||||
<li><a href="https://nextcloud.com/events">Events</a></li>
|
||||
<li><a href="https://nextcloud.com/jobs">Jobs</a></li>
|
||||
<li><a href="https://nextcloud.com/community/code-of-conduct/">Code of Conduct</a></li>
|
||||
<li><a href="https://nextcloud.com/privacy">Privacy</a></li>
|
||||
<li><a href="https://nextcloud.com/impressum">Legal notice</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<h1>Resources</h1>
|
||||
<ul>
|
||||
<li><a href="https://nextcloud.com/install">Download</a></li>
|
||||
<li><a href="https://apps.nextcloud.com">App Store</a></li>
|
||||
<li><a href="https://docs.nextcloud.com/server/{{ version }}/admin_manual/">Admin manual</a></li>
|
||||
<li><a href="https://docs.nextcloud.com/server/{{ version }}/user_manual/">User manual</a></li>
|
||||
<li><a href="https://docs.nextcloud.com/server/{{ version }}/developer_manual/">Developer manual</a></li>
|
||||
<li><a href="https://nextcloud.com/security">Security</a></li>
|
||||
<li><a href="https://github.com/nextcloud">Code on GitHub</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<h1>Interact</h1>
|
||||
<ul>
|
||||
<li><a href="https://nextcloud.com/support">Support</a></li>
|
||||
<li><a href="https://webchat.freenode.net/?channels=nextcloud">IRC Channel</a></li>
|
||||
<li><a href="https://help.nextcloud.com/categories">Forums</a></li>
|
||||
<li><a href="https://demo.nextcloud.com">Demo</a></li>
|
||||
<li><a href="https://nextcloud.com/contact">Contact us</a></li>
|
||||
<li><a href="https://nextcloud.com/press">Press center</a></li>
|
||||
<li><a href="https://docs.nextcloud.com/server/{{ version }}/developer_manual/bugtracker/">Bug Tracker</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<h1>Follow us</h1>
|
||||
<ul>
|
||||
<li><a href="https://plus.google.com/b/104036748063781940910/104036748063781940910/about">Google+</a></li>
|
||||
<li><a href="https://www.facebook.com/Nextcloud-1032807203462807/">Facebook</a></li>
|
||||
<li><a href="https://www.linkedin.com/company/10827569/">LinkedIn</a></li>
|
||||
<li><a href="https://instagram.com/nextclouders">Instagram</a></li>
|
||||
<li><a href="https://twitter.com/nextclouders">Twitter</a></li>
|
||||
<li><a href="https://youtube.com/nextcloud">YouTube</a></li>
|
||||
<li><a href="https://nextcloud.com/blogfeed">RSS Feed</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12 text-center copyright">
|
||||
<p>
|
||||
{%- if show_copyright %}
|
||||
© {{ copyright }}
|
||||
{%- endif %}
|
||||
{%- if last_updated %}
|
||||
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}<br/>
|
||||
{%- endif %}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
{%- endblock %}
|
||||
|
||||
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 16 KiB |
@ -35,6 +35,13 @@
|
||||
src: local('Open Sans Light'), local('OpenSans-Light'), url(fonts/OpenSans-Light.woff) format('woff'), url(fonts/OpenSans-Light.ttf) format('ttf');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Glyphicons Halflings';
|
||||
|
||||
src: url('bootstrap-3.1.0/fonts/glyphicons-halflings-regular.eot');
|
||||
src: url('bootstrap-3.1.0/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('bootstrap-3.1.0/fonts/glyphicons-halflings-regular.woff') format('woff'), url('bootstrap-3.1.0/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('bootstrap-3.1.0/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
|
||||
}
|
||||
|
||||
span.avoidwrap {
|
||||
display:inline-block;
|
||||
}
|
||||
@ -55,7 +62,6 @@ body {
|
||||
|
||||
h1, h2, h3 {
|
||||
font-weight: 300;
|
||||
margin-top: 40px !important;
|
||||
}
|
||||
h1 {
|
||||
font-size: 45px;
|
||||
@ -69,6 +75,12 @@ h3 {
|
||||
margin: 12px 0;
|
||||
}
|
||||
|
||||
.content h1,
|
||||
.content h2,
|
||||
.content h3 {
|
||||
margin-top: 40px !important;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
@ -108,33 +120,523 @@ button a:hover {text-decoration: none; }
|
||||
|
||||
/* Remove line under page headers (defined in main.min.css) */
|
||||
|
||||
.navbar {
|
||||
background-color: #23305D;
|
||||
background-attachment: scroll;
|
||||
/* background-image: url(../img/home/720p.jpg); */
|
||||
background-image: url(img/home/background3.jpg);
|
||||
background-position: center;
|
||||
background-repeat: none;
|
||||
-webkit-background-size: cover;
|
||||
-moz-background-size: cover;
|
||||
background-size: cover;
|
||||
-o-background-size: cover;
|
||||
border: 0px;
|
||||
min-height: 100px !important;
|
||||
/* min-height: 800px !important; */
|
||||
z-index: 0 !important;
|
||||
}
|
||||
/* HEADER
|
||||
https://raw.githubusercontent.com/nextcloud/nextcloud.com/master/assets/css/modules/header.css */
|
||||
@-moz-document url-prefix() {
|
||||
.brand {
|
||||
-webkit-transform: scale(0.5);
|
||||
top: -26px !important; } }
|
||||
nav a {
|
||||
text-decoration: none; }
|
||||
|
||||
.mobile-bg-container {
|
||||
position: fixed;
|
||||
-webkit-transform: translateZ(0);
|
||||
transform: translateZ(0);
|
||||
opacity: 0; }
|
||||
@media (min-width: 991px) {
|
||||
.mobile-bg-container {
|
||||
display: none; } }
|
||||
.mobile-bg-container.visible {
|
||||
display: block; }
|
||||
@media (min-width: 991px) {
|
||||
.mobile-bg-container.visible {
|
||||
display: none; } }
|
||||
.mobile-bg-container.is-animatable {
|
||||
opacity: 1;
|
||||
width: 100%;
|
||||
min-height: 100%; }
|
||||
.mobile-bg-container .mobile-bg {
|
||||
position: absolute;
|
||||
background: #0082c9;
|
||||
z-index: 2;
|
||||
border-radius: 50%;
|
||||
transition: all 0.3s ease-out; }
|
||||
.mobile-bg-container .mobile-bg:not(.active) {
|
||||
top: 0 !important;
|
||||
right: calc(15px + 5%) !important;
|
||||
width: 49px !important;
|
||||
height: 49px !important; }
|
||||
|
||||
}
|
||||
.nav {
|
||||
z-index: 10;
|
||||
padding-top: 20px;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: #0082c9;
|
||||
position: relative;
|
||||
opacity: 0; }
|
||||
.nav.headroom {
|
||||
transition: transform 500ms ease; }
|
||||
.nav.headroom--not-top {
|
||||
position: fixed !important; }
|
||||
.nav.headroom--pinned {
|
||||
transform: translate3d(0px, 0px, 0px);
|
||||
opacity: 1; }
|
||||
.nav.headroom--unpinned {
|
||||
transform: translate3d(0px, -100px, 0px);
|
||||
opacity: 0; }
|
||||
.nav .container {
|
||||
position: relative;
|
||||
/* Fix ul and li settings in common */ }
|
||||
@media (max-width: 992px) {
|
||||
.nav .container {
|
||||
width: 90%; } }
|
||||
.nav .container .nav__bg-wrapper {
|
||||
-webkit-transition: 0.3s;
|
||||
transition: 0.3s;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 100%;
|
||||
visibility: hidden;
|
||||
transition: 0.3s;
|
||||
will-change: opacity;
|
||||
z-index: -2;
|
||||
top: 50px; }
|
||||
.nav .container .nav__bg-wrapper.is-visible {
|
||||
visibility: visible;
|
||||
opacity: 1; }
|
||||
.nav .container .nav__bg-wrapper .nav__bg {
|
||||
width: 300px;
|
||||
height: 200px;
|
||||
background: white;
|
||||
box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.11);
|
||||
border: solid 1px #f1f1f1;
|
||||
border-radius: 4px;
|
||||
-webkit-transform-origin: left top;
|
||||
transform-origin: left top;
|
||||
will-change: transform;
|
||||
visibility: hidden;
|
||||
position: absolute;
|
||||
z-index: 5;
|
||||
top: 100%; }
|
||||
.nav .container .nav__bg-wrapper .nav__bg:before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
bottom: 100%;
|
||||
left: 50%;
|
||||
right: auto;
|
||||
-webkit-transform: translateX(-50%);
|
||||
-ms-transform: translateX(-50%);
|
||||
transform: translateX(-50%);
|
||||
height: 0;
|
||||
width: 0;
|
||||
border: 8px solid transparent;
|
||||
border-bottom-color: #f1f1f1; }
|
||||
.nav .container .nav__bg-wrapper .nav__bg:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
bottom: 100%;
|
||||
left: 50%;
|
||||
right: auto;
|
||||
-webkit-transform: translateX(-50%);
|
||||
-ms-transform: translateX(-50%);
|
||||
transform: translateX(-50%);
|
||||
height: 0;
|
||||
width: 0;
|
||||
border: 6px solid transparent;
|
||||
border-bottom-color: white; }
|
||||
.nav .container .nav__bg-wrapper .nav__bg.is-animatable {
|
||||
-webkit-transition: 0.3s;
|
||||
transition: 0.3s;
|
||||
visibility: visible;
|
||||
display: block; }
|
||||
.nav .container .navbar-toggle {
|
||||
display: none; }
|
||||
.nav .container .brand {
|
||||
z-index: 8;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0; }
|
||||
.nav .container .brand .logo:not(.scrolled):not(.menu-open) {
|
||||
background: url(img/logo_white_sprite.png) 0 0 no-repeat;
|
||||
height: 100px;
|
||||
width: 140px;
|
||||
display: inline-block;
|
||||
zoom: 0.5; }
|
||||
.nav .container .brand .logo:not(.scrolled):not(.menu-open).hoverPlay {
|
||||
background-position-x: 0;
|
||||
-webkit-animation: play 2s steps(33) forwards;
|
||||
-moz-animation: play 2s steps(33) forwards;
|
||||
-ms-animation: play 2s steps(33) forwards;
|
||||
-o-animation: play 2s steps(33) forwards;
|
||||
animation: play 2s steps(33) forwards; }
|
||||
.nav .container .brand .logo:not(.scrolled):not(.menu-open).stopedAnimation {
|
||||
background-position-x: -4620px; }
|
||||
.nav .container ul {
|
||||
margin-top: 0px; }
|
||||
.nav .container ul li {
|
||||
margin-top: 0px; }
|
||||
.nav .container .nav__sections {
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-pack: center;
|
||||
-webkit-justify-content: center;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
list-style-type: none;
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
left: 20%;
|
||||
top: 0%; }
|
||||
@media (max-width: 1200px) {
|
||||
.nav .container .nav__sections {
|
||||
left: 10%; } }
|
||||
.nav .container .nav__sections .nav__section {
|
||||
padding: 15px 0 15px 0;
|
||||
position: relative; }
|
||||
.nav .container .nav__sections .nav__section:hover .nav__label {
|
||||
opacity: 0.6;
|
||||
cursor: default;
|
||||
text-decoration: none; }
|
||||
.nav .container .nav__sections .nav__section:hover .nav__links {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
transform: translateX(-50%) translateZ(1px); }
|
||||
.nav .container .nav__sections .nav__section .nav__label {
|
||||
display: inline-block;
|
||||
padding-left: 30px;
|
||||
padding-bottom: 5px;
|
||||
color: white;
|
||||
-webkit-transition: 0.3s;
|
||||
transition: 0.3s;
|
||||
font-size: 16px;
|
||||
cursor: pointer !important;}
|
||||
.nav .container .nav__sections .nav__section .nav__links {
|
||||
position: absolute;
|
||||
padding: 20px 20px 20px 35px;
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
list-style-type: none;
|
||||
transition: opacity 0.3s ease;
|
||||
transition-delay: 0.1s; }
|
||||
.nav .container .nav__sections .nav__section .nav__links .nav__item {
|
||||
color: #666;
|
||||
white-space: nowrap; }
|
||||
.nav .container .nav__sections .nav__section .nav__links .nav__item a {
|
||||
display: block;
|
||||
padding: 5px 10px 0 0px;
|
||||
font-size: 16px;
|
||||
color: #555; }
|
||||
.nav .container .nav__sections .nav__section .nav__links .nav__item a .nav__logo {
|
||||
width: 45px;
|
||||
min-height: 15px;
|
||||
float: left;
|
||||
vertical-align: middle; }
|
||||
.nav .container .nav__sections .nav__section .nav__links .nav__item a .nav__logo img {
|
||||
margin-top: 5px;
|
||||
padding: 10px 8px 0 0;
|
||||
height: 40px;
|
||||
width: 40px; }
|
||||
.nav .container .nav__sections .nav__section .nav__links .nav__item a .nav__text {
|
||||
line-height: 1;
|
||||
padding: 10px 30px 10px 0; }
|
||||
.nav .container .nav__sections .nav__section .nav__links .nav__item a .nav__text strong {
|
||||
line-height: 1.2;
|
||||
font-weight: normal;
|
||||
font-size: 18px; }
|
||||
.nav .container .nav__sections .nav__section .nav__links .nav__item a .nav__text small {
|
||||
opacity: 0.8; }
|
||||
.nav .container .nav__sections .nav__section .nav__links .nav__item a:hover {
|
||||
opacity: 0.6;
|
||||
text-decoration: none; }
|
||||
.nav .container .nav__sections .nav__section .nav__links .nav__item:not(:last-of-type) a {
|
||||
padding-bottom: 5px; }
|
||||
.nav .container .right-buttons {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
margin-top: 15px; }
|
||||
.nav .container .right-buttons .ghost-btn {
|
||||
text-align: center;
|
||||
position: relative;
|
||||
display: inline-block; }
|
||||
.nav .container .right-buttons .ghost-btn a {
|
||||
-webkit-transition: 0.3s;
|
||||
transition: 0.3s;
|
||||
position: relative; }
|
||||
.nav .container .right-buttons .ghost-btn a:before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
background-color: white;
|
||||
visibility: hidden;
|
||||
-webkit-transform: scaleX(0);
|
||||
transform: scaleX(0);
|
||||
-webkit-transition: all 0.2s ease-in-out 0s;
|
||||
transition: all 0.2s ease-in-out 0s; }
|
||||
.nav .container .right-buttons .ghost-btn:hover a {
|
||||
text-decoration: none; }
|
||||
.nav .container .right-buttons .ghost-btn:hover a:before {
|
||||
visibility: visible;
|
||||
-webkit-transform: scaleX(1);
|
||||
transform: scaleX(1); }
|
||||
.nav .container .right-buttons li {
|
||||
display: inline-block;
|
||||
padding-left: 30px;
|
||||
padding-bottom: 5px;
|
||||
font-size: 16px;
|
||||
margin-top: 0px; }
|
||||
.nav .container .right-buttons li a {
|
||||
color: white; }
|
||||
|
||||
div.page-header {
|
||||
border-bottom: 0px solid #EEE;
|
||||
}
|
||||
/* Remove border from navbar (defined in main.min.css) */
|
||||
.navbar {
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
@media (max-width: 992px) {
|
||||
.nav .container .brand {
|
||||
padding-left: 15px; }
|
||||
.nav .container .brand .logo {
|
||||
height: 53px;
|
||||
width: 71px; }
|
||||
.nav .container .brand .logo.menu-open {
|
||||
background: url(../img/logo/logo_white_sprite.png) 0 0 no-repeat;
|
||||
height: 100px;
|
||||
width: 140px;
|
||||
display: inline-block;
|
||||
zoom: 0.5; }
|
||||
.nav .container .brand .logo.menu-open.hoverPlay {
|
||||
background-position-x: 0;
|
||||
-webkit-animation: play 2s steps(33) forwards;
|
||||
-moz-animation: play 2s steps(33) forwards;
|
||||
-ms-animation: play 2s steps(33) forwards;
|
||||
-o-animation: play 2s steps(33) forwards;
|
||||
animation: play 2s steps(33) forwards; }
|
||||
.nav .container .brand .logo.menu-open.stopedAnimation {
|
||||
background-position-x: -4620px; }
|
||||
.nav .container .mobile-bg {
|
||||
position: fixed;
|
||||
background: #0082c9;
|
||||
padding-top: 25px;
|
||||
z-index: 7;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
visibility: hidden;
|
||||
overflow: hidden;
|
||||
border-bottom-left-radius: 100%;
|
||||
transition: all 0.6s ease; }
|
||||
.nav .container .active {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
width: 150%;
|
||||
height: 150%; }
|
||||
.nav .container .navbar-toggle {
|
||||
color: white;
|
||||
background-color: white;
|
||||
border-radius: 50px;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin-top: 0;
|
||||
z-index: 8;
|
||||
display: block;
|
||||
margin-right: 0;
|
||||
border: none;
|
||||
float: right; }
|
||||
.nav .container .navbar-toggle:hover {
|
||||
transform: scale(1.1);
|
||||
transition: transform 0.3s cubic-bezier(0.56, 1, 0.86, 1.39);
|
||||
transition-property: transform;
|
||||
transition-duration: 0.3s;
|
||||
transition-timing-function: cubic-bezier(0.56, 1, 0.86, 1.39);
|
||||
transition-delay: initial; }
|
||||
.nav .container .nav__sections-wrapper {
|
||||
margin: 0 auto;
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
top: 90px;
|
||||
z-index: 2;
|
||||
padding: 0; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections {
|
||||
display: none;
|
||||
position: relative;
|
||||
left: 0;
|
||||
padding: 0;
|
||||
visibility: hidden; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections .nav__section {
|
||||
display: block;
|
||||
opacity: 1;
|
||||
margin: 0;
|
||||
opacity: 0;
|
||||
color: white;
|
||||
padding: 0;
|
||||
visibility: hidden; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections .nav__section:last-child {
|
||||
font-weight: 500; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections .nav__section a {
|
||||
color: white;
|
||||
text-decoration: none; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections.active {
|
||||
display: block;
|
||||
color: white;
|
||||
margin: 0;
|
||||
visibility: visible; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections.active .nav__section {
|
||||
animation: fadeInRight .5s ease forwards;
|
||||
animation-delay: .35s;
|
||||
visibility: visible; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections.active .nav__section .nav__label {
|
||||
font-size: 20px;
|
||||
line-height: 20px;
|
||||
padding-left: 0;
|
||||
font-weight: 400; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections.active .nav__section:nth-of-type(2) {
|
||||
animation-delay: .4s; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections.active .nav__section:nth-of-type(3) {
|
||||
animation-delay: .45s; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections.active .nav__section:nth-of-type(4) {
|
||||
animation-delay: .50s; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections.active .nav__section:nth-of-type(5) {
|
||||
animation-delay: .55s; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections.active .nav__section:nth-of-type(6) {
|
||||
animation-delay: .60s; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections.active .nav__section:nth-of-type(7) {
|
||||
animation-delay: .65s; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections.active .nav__section:nth-of-type(8) {
|
||||
animation-delay: .70s; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections.active .nav__section .nav__links {
|
||||
display: none;
|
||||
position: relative;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
padding: 0 10px 0 20px; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections.active .nav__section .nav__links .nav__item {
|
||||
margin-left: 0; }
|
||||
.nav .container .nav__sections-wrapper .nav__sections.active .nav__section .nav__links .nav__item a {
|
||||
font-size: 18px;
|
||||
line-height: 18px;
|
||||
color: white;
|
||||
margin-left: 0;
|
||||
font-weight: 300; }
|
||||
.nav .container .nav__sections-wrapper .right-buttons {
|
||||
position: relative;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
opacity: 0;
|
||||
transition: all 0.3s; }
|
||||
.nav .container .nav__sections-wrapper .right-buttons.active {
|
||||
opacity: 1;
|
||||
transition-delay: .65s; }
|
||||
.nav .container .nav__sections-wrapper .right-buttons.active .nav__label {
|
||||
color: white; }
|
||||
.nav .container .nav__sections-wrapper .right-buttons.active .ghost-btn a {
|
||||
pointer-events: all; }
|
||||
.nav .container .nav__sections-wrapper .right-buttons .ghost-btn {
|
||||
font-size: 20px;
|
||||
line-height: 20px;
|
||||
padding-left: 0;
|
||||
font-weight: 400;
|
||||
display: block;
|
||||
text-align: left;
|
||||
padding-left: 0;
|
||||
animation: fadeInRight .5s ease forwards;
|
||||
pointer-events: none; } }
|
||||
@keyframes fadeInRight {
|
||||
0% {
|
||||
opacity: 0;
|
||||
left: 20%; }
|
||||
100% {
|
||||
opacity: 1;
|
||||
left: 0; } }
|
||||
/**
|
||||
* Scrolled navbar style
|
||||
*/
|
||||
.nav {
|
||||
padding-bottom: 70px;
|
||||
transition: all .2s ease-in; }
|
||||
@media (max-width: 992px) {
|
||||
.nav {
|
||||
padding-bottom: 20px; } }
|
||||
.nav.no-shadow {
|
||||
box-shadow: none !important; }
|
||||
.nav.scrolled {
|
||||
position: fixed;
|
||||
background: white;
|
||||
box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.09); }
|
||||
.nav.scrolled .navbar-toggle:not(.active) {
|
||||
background-color: #0082c9; }
|
||||
.nav.scrolled .navbar-toggle:not(.active) svg {
|
||||
filter: invert(100%); }
|
||||
.nav.scrolled .logo:not(.menu-open) {
|
||||
background: url(img/logo_blue_sprite.png) 0 0 no-repeat;
|
||||
height: 100px;
|
||||
width: 140px;
|
||||
display: inline-block;
|
||||
zoom: 0.5; }
|
||||
.nav.scrolled .logo:not(.menu-open).hoverPlay {
|
||||
background-position-x: 0;
|
||||
-webkit-animation: play 2s steps(33) forwards;
|
||||
-moz-animation: play 2s steps(33) forwards;
|
||||
-ms-animation: play 2s steps(33) forwards;
|
||||
-o-animation: play 2s steps(33) forwards;
|
||||
animation: play 2s steps(33) forwards; }
|
||||
.nav.scrolled .logo:not(.menu-open).stopedAnimation {
|
||||
background-position-x: -4620px; }
|
||||
.nav.scrolled .nav__sections-wrapper .nav__sections .nav__section .nav__label, .nav.scrolled .nav__sections-wrapper .nav__sections .ghost-btn .nav__label, .nav.scrolled .nav__sections-wrapper .nav__sections .ghost-btn .nav__label, .nav.scrolled .nav__sections-wrapper .right-buttons:not(.active) .nav__section .nav__label, .nav.scrolled .nav__sections-wrapper .right-buttons:not(.active) .ghost-btn .nav__label, .nav.scrolled .nav__sections-wrapper .right-buttons:not(.active) .ghost-btn .nav__label {
|
||||
color: #555; }
|
||||
.nav.scrolled .nav__sections-wrapper .nav__sections .nav__section .nav__label:before, .nav.scrolled .nav__sections-wrapper .nav__sections .ghost-btn .nav__label:before, .nav.scrolled .nav__sections-wrapper .nav__sections .ghost-btn .nav__label:before, .nav.scrolled .nav__sections-wrapper .right-buttons:not(.active) .nav__section .nav__label:before, .nav.scrolled .nav__sections-wrapper .right-buttons:not(.active) .ghost-btn .nav__label:before, .nav.scrolled .nav__sections-wrapper .right-buttons:not(.active) .ghost-btn .nav__label:before {
|
||||
background-color: #555; }
|
||||
.nav.mobile .nav__sections-wrapper .nav__sections .nav__section .nav__label, .nav.mobile .nav__sections-wrapper .ghost-btn .nav__section .nav__label {
|
||||
color: white; }
|
||||
|
||||
/**
|
||||
*Changed default media querys for navigation in bootstrap
|
||||
*/
|
||||
@media (max-width: 1200px) {
|
||||
.navbar-header {
|
||||
float: none; }
|
||||
|
||||
.navbar-left, .navbar-right {
|
||||
float: none !important; }
|
||||
|
||||
.navbar-toggle {
|
||||
display: block; }
|
||||
|
||||
.navbar-collapse {
|
||||
border-top: 1px solid transparent;
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); }
|
||||
|
||||
.navbar-fixed-top {
|
||||
top: 0;
|
||||
border-width: 0 0 1px; }
|
||||
|
||||
.navbar-collapse.collapse {
|
||||
display: none !important; }
|
||||
|
||||
.navbar-nav {
|
||||
float: none !important;
|
||||
margin-top: 7.5px; }
|
||||
|
||||
.navbar-nav > li {
|
||||
float: none; }
|
||||
|
||||
.navbar-nav > li > a {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px; }
|
||||
|
||||
.collapse.in {
|
||||
display: block !important; }
|
||||
|
||||
.navbar-nav .open .dropdown-menu {
|
||||
position: static;
|
||||
float: none;
|
||||
width: auto;
|
||||
margin-top: 0;
|
||||
background-color: transparent;
|
||||
border: 0;
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none; } }
|
||||
@keyframes play {
|
||||
from {
|
||||
background-position-x: 0px; }
|
||||
to {
|
||||
background-position-x: -4620px; } }
|
||||
|
||||
.banner img {
|
||||
padding: 15px 0;
|
||||
@ -249,34 +751,95 @@ i[class*='icon-'] {
|
||||
}
|
||||
|
||||
/* the footer */
|
||||
|
||||
footer {
|
||||
background-color: white;
|
||||
/* https://raw.githubusercontent.com/nextcloud/nextcloud.com/master/assets/css/modules/footer.css */
|
||||
.copyright {
|
||||
/* footer fix */
|
||||
clear: both;
|
||||
}
|
||||
/*Colors*/
|
||||
/*Shadows*/
|
||||
/*Breakpoints*/
|
||||
footer.page-footer {
|
||||
background-color: #2a2a36; }
|
||||
footer.page-footer h1 {
|
||||
margin-top: 70px;
|
||||
font-size: 19px;
|
||||
font-weight: bold;
|
||||
line-height: 1.8;
|
||||
letter-spacing: -0.9px;
|
||||
color: #8e8e8e; }
|
||||
footer.page-footer ul {
|
||||
list-style-type: none;
|
||||
padding-left: 0; }
|
||||
footer.page-footer li {
|
||||
font-size: 15px;
|
||||
line-height: 1.8;
|
||||
color: #ffffff;
|
||||
width: 140px;
|
||||
margin-top: 0; }
|
||||
footer.page-footer li a {
|
||||
color: #ffffff;
|
||||
position: relative; }
|
||||
footer.page-footer li a:before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
background-color: white;
|
||||
visibility: hidden;
|
||||
-webkit-transform: scaleX(0);
|
||||
transform: scaleX(0);
|
||||
-webkit-transition: all 0.2s ease-in-out 0s;
|
||||
transition: all 0.2s ease-in-out 0s; }
|
||||
footer.page-footer li a:hover {
|
||||
color: #ffffff;
|
||||
text-decoration: none; }
|
||||
footer.page-footer li a:hover:before {
|
||||
visibility: visible;
|
||||
-webkit-transform: scaleX(1);
|
||||
transform: scaleX(1); }
|
||||
footer.page-footer p {
|
||||
padding-top: 50px;
|
||||
padding-bottom: 30px;
|
||||
font-size: 15px;
|
||||
line-height: 1.8;
|
||||
color: #ffffff; }
|
||||
@media (max-width: 768px) {
|
||||
footer.page-footer p {
|
||||
float: left;
|
||||
padding-left: 15px; } }
|
||||
footer.page-footer p a {
|
||||
color: #ffffff; }
|
||||
footer.page-footer p a:hover {
|
||||
color: #ffffff; }
|
||||
@media (min-width: 768px) and (max-width: 1600px) {
|
||||
footer.page-footer .container {
|
||||
width: 90%;
|
||||
max-width: 900px; } }
|
||||
|
||||
div.footer-text {
|
||||
color: #555;
|
||||
text-align: center;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
div.footer-social-icons > div {
|
||||
text-align: center;
|
||||
margin: 50px 17px -20px -14px;
|
||||
}
|
||||
|
||||
div.footer-social-icons> div > a:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
div.footer-social-icons img {
|
||||
margin: 0 30px 30px 0;
|
||||
}
|
||||
|
||||
footer div.footer-nav>h4 {
|
||||
font-size: 1.125em;
|
||||
color: #949494;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
footer.page-footer {
|
||||
height: 100%;
|
||||
padding-top: 40px;
|
||||
padding-bottom: 40px; }
|
||||
footer.page-footer h1 {
|
||||
margin-top: 30px;
|
||||
font-size: 19px;
|
||||
font-weight: bold;
|
||||
line-height: 1.8;
|
||||
letter-spacing: -0.9px;
|
||||
color: #8e8e8e; }
|
||||
footer.page-footer ul {
|
||||
list-style-type: none;
|
||||
padding-left: 0; }
|
||||
footer.page-footer li {
|
||||
font-size: 15px;
|
||||
line-height: 1.8;
|
||||
color: #ffffff;
|
||||
width: 140px;
|
||||
margin-top: 0; } }
|
||||
|
||||
div.thumbnail > img {
|
||||
margin-bottom: 0;
|
||||
|
||||
@ -29,7 +29,7 @@ from conf import *
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be extensions
|
||||
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||
extensions = ['sphinxcontrib.phpdomain', 'sphinx.ext.todo', 'rst2pdf.pdfbuilder', 'sphinx.ext.intersphinx']
|
||||
extensions += ['sphinxcontrib.phpdomain', 'sphinx.ext.todo', 'rst2pdf.pdfbuilder', 'sphinx.ext.intersphinx']
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['../_shared_assets/templates']
|
||||
@ -292,3 +292,5 @@ intersphinx_mapping = {
|
||||
'user_manual': ('https://docs.nextcloud.com/server/%s/user_manual/' % (version), '../user_manual/_build/html/com/objects.inv'),
|
||||
'developer_manual': ('https://docs.nextcloud.com/server/%s/developer_manual/' % (version), '../developer_manual/_build/html/com/objects.inv'),
|
||||
}
|
||||
|
||||
current_docs = 'admin_manual'
|
||||
|
||||
@ -6,7 +6,7 @@ Since Nextcloud 13 big integers are used to store identifiers and auto-increment
|
||||
Because changing columns on huge tables can take quite a while (up to hours or days), the update from
|
||||
Nextcloud 12 or earlier did not perform this migration on the filecache and activity table.
|
||||
|
||||
To make it easy to force the update on that tables too, we added a console command, which can be used
|
||||
To make it easy to force the update on those tables too, we've added a console command, which can be used
|
||||
to migrate the remaining columns to bigints.
|
||||
|
||||
The command can safely be executed. It will show a success message when there is nothing to do::
|
||||
|
||||
@ -20,11 +20,11 @@ installation needs to be tweaked a bit.
|
||||
|
||||
5. Set the ``mysql.utf8mb4`` config to true in your config.php::
|
||||
|
||||
$ sudo -u www-data occ config:system:set mysql.utf8mb4 --type boolean --value="true"
|
||||
$ sudo -u www-data php occ config:system:set mysql.utf8mb4 --type boolean --value="true"
|
||||
|
||||
6. Convert all existing tables to the new collation by running the repair step::
|
||||
|
||||
$ sudo -u www-data occ maintenance:repair
|
||||
$ sudo -u www-data php occ maintenance:repair
|
||||
|
||||
Now you should be able to use Emojis in your file names, calendar events, comments and many more.
|
||||
|
||||
|
||||
@ -29,6 +29,9 @@ the DNS infrastructure cannot be controlled. Ordinarily, requests will be
|
||||
made with ``http://bucket.hostname.domain/``, but with path style enabled,
|
||||
requests are made with ``http://hostname.domain/bucket`` instead.
|
||||
|
||||
**Legacy authentication** is only required for S3 servers that only implement version 2 authentication,
|
||||
on default version 4 authentication will be used.
|
||||
|
||||
See :doc:`../external_storage_configuration_gui` for additional mount
|
||||
options and information.
|
||||
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
Dropbox
|
||||
=======
|
||||
|
||||
.. warning:: An app for Dropbox support is still in development for NC 13: https://github.com/icewind1991/files_external_dropbox
|
||||
|
||||
While Dropbox supports the newer OAuth 2.0, Nextcloud uses OAuth 1.0, so you can
|
||||
safely ignore any references to OAuth 2.0 in the Dropbox configuration.
|
||||
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
Google Drive
|
||||
============
|
||||
|
||||
.. warning:: An app for Google Drive support is still in development for NC 13: https://github.com/owncloud/files_external_gdrive
|
||||
|
||||
Nextcloud uses OAuth 2.0 to connect to Google Drive. This requires configuration
|
||||
through Google to get an app ID and app secret, as Nextcloud registers itself
|
||||
as an app.
|
||||
|
||||
@ -72,6 +72,16 @@ passing the ``-v`` option to the command.
|
||||
SMB authentication
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
In some cases (such as when using login credentials) it's not possible to read the
|
||||
smb credentials from the storage configuration, in those cases you can provide
|
||||
the username and password using the ``--username`` and ``--password`` arguments.
|
||||
Update notifications are not supported when using 'Login credentials, save in session' authentication.
|
||||
Using login credentials is only supported with 'Login credentials, save in database'.
|
||||
|
||||
Even when using 'Login credentials, save in database' or 'User entered, stored in database' authentication the notify process
|
||||
can not use the credentials saved to attach to the smb shares because the notify process does not run in the context of a specific user
|
||||
in those cases you can provide the username and password using the ``--username`` and ``--password`` arguments.
|
||||
|
||||
Decrease sync delay
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Any updates detected by the notify command will only be synced to the client after the Nextcloud cron job has been executed
|
||||
(usually every 15 minutes). If this interval is to high for your use case, you can decrease it by running ``occ files:scan --unscanned --all``
|
||||
at the desired interval. Note that this might increase the server load and you'll need to ensure that there is no overlap between runs.
|
||||
|
||||
@ -103,15 +103,16 @@ Available storage backends
|
||||
--------------------------
|
||||
|
||||
The following backends are provided by the external storages app. Other apps
|
||||
may provide their own backends, which are not listed here.
|
||||
may provide their own backends, which are not listed here. Google Drive and Dropbox
|
||||
were moved to external apps which are still in development (Github-Repos for `Google Drive
|
||||
<https://github.com/owncloud/files_external_gdrive>`_ and `Dropbox
|
||||
<https://github.com/icewind1991/files_external_dropbox>`_).
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
external_storage/amazons3
|
||||
external_storage/dropbox
|
||||
external_storage/ftp
|
||||
external_storage/google
|
||||
external_storage/local
|
||||
external_storage/nextcloud
|
||||
external_storage/openstack
|
||||
|
||||
@ -16,9 +16,6 @@ Nextcloud users. You have control of a number of user permissions on file shares
|
||||
* Allow email notifications of new public shares
|
||||
* Exclude groups from creating shares
|
||||
|
||||
.. note:: Nextcloud includes a Share Link Password Policy app; see
|
||||
:ref:`password_policy_label`.
|
||||
|
||||
Configure your sharing policy on your Admin page in the Sharing section.
|
||||
|
||||
.. figure:: images/sharing-files-1.png
|
||||
@ -93,17 +90,3 @@ appropriate permissions on it, and then no matter which users come and go, the
|
||||
file shares will remain. Because all files added to the share, or edited in it,
|
||||
automatically become owned by the owner of the share regardless of who adds or
|
||||
edits them.
|
||||
|
||||
.. _password_policy_label:
|
||||
|
||||
Share link password policy
|
||||
--------------------------
|
||||
|
||||
Nextcloud users have the option of enabling the Share Link Password
|
||||
Policy app. This allows you to enforce password length, required characters,
|
||||
define special characters, and expiration dates on share links.
|
||||
|
||||
.. figure:: images/sharing-files-2.png
|
||||
|
||||
Note that you cannot use Emojis as special characters with MySQL, as it
|
||||
supports UTF8 characters only of 1-3 bytes, and emojis require 4 bytes.
|
||||
|
||||
|
Before Width: | Height: | Size: 24 KiB |
@ -5,15 +5,14 @@ File sharing and management
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
|
||||
file_sharing_configuration
|
||||
federated_cloud_sharing_configuration
|
||||
big_file_upload_configuration
|
||||
default_files_configuration
|
||||
default_files_configuration
|
||||
external_storage_configuration_gui
|
||||
external_storage_configuration
|
||||
external_storage/auth_mechanisms
|
||||
primary_storage
|
||||
encryption_configuration
|
||||
files_locking_transactional
|
||||
previews_configuration
|
||||
|
||||
@ -1,127 +0,0 @@
|
||||
===============
|
||||
Primary Storage
|
||||
===============
|
||||
|
||||
It's possible to use an object store as primary storage, this replaces the default
|
||||
way of storing files in :code:`nextcloud/data` (note that the data directory might still be used
|
||||
for other reasons)
|
||||
|
||||
Implications
|
||||
------------
|
||||
|
||||
When using an object store as primary storage, Nextcloud assumes exclusive access
|
||||
over the bucket being used.
|
||||
|
||||
Contrary to using an object store as external storage, when an object store is used
|
||||
as primary storage, no metadata (names, directory structures, etc) is stored in the
|
||||
object store. The metadata is only stored in the database and the object store only
|
||||
holds the file content by unique identifier.
|
||||
|
||||
Because of this primary object stores usually perform better than when using the same
|
||||
object store as external storage but it restricts being able to access the files from
|
||||
outside of Nextcloud.
|
||||
|
||||
Configuring
|
||||
-----------
|
||||
|
||||
Primary object stores need to be configured in :code:`config.php` by specifying the objectstore
|
||||
backend and any backend specific configuration.
|
||||
|
||||
.. note:: Configuring a primary object store on an existing Nextcloud instance will
|
||||
make all existing files on the instance inaccessible.
|
||||
|
||||
The configuration has the following structure.
|
||||
|
||||
::
|
||||
|
||||
'objectstore' => array(
|
||||
'class' => 'Object\\Storage\\Backend\\Class',
|
||||
'arguments' => array(
|
||||
...
|
||||
),
|
||||
),
|
||||
|
||||
Openstack Swift
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
The Swift backend mounts a container on an OpenStack Object Storage server into the virtual filesystem. The class to be used is :code:`\\OC\\Files\\ObjectStore\\Swift`
|
||||
|
||||
::
|
||||
|
||||
'objectstore' => array(
|
||||
'class' => 'OC\\Files\\ObjectStore\\Swift',
|
||||
'arguments' => array(
|
||||
'username' => 'username',
|
||||
'password' => 'Secr3tPaSSWoRdt7',
|
||||
// the container to store the data in
|
||||
'bucket' => 'nextcloud',
|
||||
'autocreate' => true,
|
||||
'region' => 'RegionOne',
|
||||
// The Identity / Keystone endpoint
|
||||
'url' => 'http://example.com/v2.0',
|
||||
// optional on some swift implementations
|
||||
'tenantName' => 'username',
|
||||
'serviceName' => 'swift',
|
||||
// The Interface / url Type, optional
|
||||
'urlType' => 'internal'
|
||||
),
|
||||
),
|
||||
|
||||
Amazon S3
|
||||
---------
|
||||
|
||||
The S3 backend mounts a bucket on an Amazon S3 Storage or compatible server into the virtual filesystem. The class to be used is :code:`\\OC\\Files\\ObjectStore\\S3`
|
||||
|
||||
::
|
||||
|
||||
'objectstore' => array(
|
||||
'class' => 'OC\\Files\\ObjectStore\\S3',
|
||||
'arguments' => array(
|
||||
'bucket' => 'nextcloud',
|
||||
'autocreate' => true,
|
||||
'key' => 'EJ39ITYZEUH5BGWDRUFY',
|
||||
'secret' => 'M5MrXTRjkyMaxXPe2FRXMTfTfbKEnZCu+7uRTVSj',
|
||||
'hostname' => 'example.com',
|
||||
'port' => 1234,
|
||||
'use_ssl' => true,
|
||||
'region' => 'optional',
|
||||
// required for some non amazon s3 implementations
|
||||
'use_path_style'=>true
|
||||
),
|
||||
),
|
||||
|
||||
Not all configuration options are required for all S3 servers.
|
||||
Overriding the hostname, port and region of your S3 server is only
|
||||
required for non-Amazon servers such as Ceph Object Gateway, which in turn
|
||||
usually don't require the region to be set.
|
||||
|
||||
:code:`use_path_style` is usually not required (and is, in fact, incompatible with newer Amazon datacenters),
|
||||
but can be used with non-Amazon servers where the DNS infrastructure cannot be controlled. Ordinarily,
|
||||
requests will be made with http://bucket.hostname.domain/, but with path style enabled,
|
||||
requests are made with http://hostname.domain/bucket instead.
|
||||
|
||||
Multibucket Object Store
|
||||
---------------------------
|
||||
|
||||
It's possible to configure Nextcloud to distribute it's data over multiple buckets for scalability purpose.
|
||||
|
||||
To setup multiple buckets, :code:`config.php` needs to be configured using :code:`'objectstore_multibucket'`
|
||||
|
||||
::
|
||||
|
||||
'objectstore_multibucket' => array(
|
||||
'class' => 'Object\\Storage\\Backend\\Class',
|
||||
'arguments' => array(
|
||||
// optional, defaults to 64
|
||||
'num_buckets' => 64,
|
||||
// will be prefixed by an integer in the range from 0 to (num_nuckets-1)
|
||||
'bucket' => 'nextcloud_',
|
||||
...
|
||||
),
|
||||
),
|
||||
|
||||
Nextcloud will map every user to a range of buckets and save all files for that user in it's respective bucket.
|
||||
|
||||
.. note:: Changing the number of buckets for an existing Nextcloud instance is supported but the
|
||||
mapping from users to buckets is persistent so only newly created users will be mapped to the
|
||||
updated range of buckets.
|
||||
@ -30,7 +30,7 @@ Furthermore it is recommended to configure the background job ``Webcron`` or
|
||||
|
||||
There is also a configuration option ``activity_expire_days`` available in your
|
||||
``config.php`` (See :doc:`config_sample_php_parameters`) which allows
|
||||
you to clean-up older activies from the database.
|
||||
you to clean-up older activities from the database.
|
||||
|
||||
Better scheduling of activity emails
|
||||
------------------------------------
|
||||
|
||||
@ -83,7 +83,7 @@ You can verify if the cron job has been added and scheduled by executing::
|
||||
|
||||
.. note:: Please refer to the crontab man page for the exact command syntax.
|
||||
|
||||
.. _easyCron: http://www.easycron.com/
|
||||
.. _easyCron: https://www.easycron.com/
|
||||
|
||||
systemd
|
||||
^^^^^^^
|
||||
|
||||
@ -1,27 +0,0 @@
|
||||
===================================
|
||||
Custom client download repositories
|
||||
===================================
|
||||
|
||||
You may configure the URLs to your own download repositories for your Nextcloud
|
||||
desktop clients and mobile apps in :file:`config/config.php`. This example shows
|
||||
the default download locations:
|
||||
|
||||
::
|
||||
|
||||
<?php
|
||||
|
||||
"customclient_desktop" => "https://nextcloud.com/install/",
|
||||
"customclient_android" => "https://play.google.com/store/apps/details?id=com.nextcloud.client",
|
||||
"customclient_ios" => "https://itunes.apple.com/us/app/nextcloud/id1125420102?mt=8",
|
||||
|
||||
Simply replace the URLs with the links to your own preferred download repos.
|
||||
|
||||
You may test alternate URLs without editing :file:`config/config.php` by setting a test URL as an environment variable::
|
||||
|
||||
export OCC_UPDATE_URL=https://test.example.com
|
||||
|
||||
When you're finished testing you can disable the environment variable::
|
||||
|
||||
unset OCC_UPDATE_URL
|
||||
|
||||
|
||||
@ -8,18 +8,15 @@ Server configuration
|
||||
security_setup_warnings
|
||||
occ_command
|
||||
activity_configuration
|
||||
sso_configuration
|
||||
caching_configuration
|
||||
background_jobs_configuration
|
||||
background_jobs_configuration
|
||||
config_sample_php_parameters
|
||||
email_configuration
|
||||
external_sites
|
||||
custom_client_repos
|
||||
knowledgebase_configuration
|
||||
language_configuration
|
||||
logging_configuration
|
||||
harden_server
|
||||
reverse_proxy_configuration
|
||||
reverse_proxy_configuration
|
||||
thirdparty_php_configuration
|
||||
automatic_configuration
|
||||
server_tuning
|
||||
|
||||
@ -1,20 +0,0 @@
|
||||
============================
|
||||
Knowledge base configuration
|
||||
============================
|
||||
The usage of Nextcloud is more or less self explaining but nevertheless a user
|
||||
might run into a problem where he needs to consult the documentation or knowledge base. To ease access to the Nextcloud
|
||||
documentation and knowledge base, a help menu item is shown in the settings menu by default.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
|
||||
If you want to disable the Nextcloud help menu item you can use the **knowledgebaseenabled** parameter inside the
|
||||
:file:`config/config.php`.
|
||||
|
||||
::
|
||||
|
||||
<?php
|
||||
|
||||
"knowledgebaseenabled" => true,
|
||||
|
||||
.. note:: Disabling the help menu item might increase the number of support requests you have to answer in the future
|
||||
@ -186,6 +186,7 @@ Apps commands
|
||||
The ``app`` commands list, enable, and disable apps::
|
||||
|
||||
app
|
||||
app:install install selected app
|
||||
app:check-code check code to be compliant
|
||||
app:disable disable an app
|
||||
app:enable enable an app
|
||||
@ -880,6 +881,7 @@ backups and other tasks that require locking users out until you are finished::
|
||||
maintenance:mimetype:update-js Update mimetypelist.js
|
||||
maintenance:mode set maintenance mode
|
||||
maintenance:repair repair this installation
|
||||
maintenance:theme:update Apply custom theme changes
|
||||
maintenance:update:htaccess Updates the .htaccess file
|
||||
|
||||
``maintenance:mode`` locks the sessions of all logged-in users, including
|
||||
@ -907,6 +909,8 @@ command after modifying ``config/mimetypemapping.json``. If you change a
|
||||
mimetype, run ``maintenance:mimetype:update-db --repair-filecache`` to apply the
|
||||
change to existing files.
|
||||
|
||||
Run the ``maintenance:theme:update`` command if the icons of your custom theme are not updated correctly. This updates the mimetypelist.js and cleares the image cache.
|
||||
|
||||
.. _security_commands_label:
|
||||
|
||||
Security
|
||||
|
||||
@ -65,11 +65,11 @@ you can set the following parameters inside the :file:`config/config.php`.
|
||||
|
||||
<?php
|
||||
$CONFIG = array (
|
||||
"trusted_proxies" => ['10.0.0.1'],
|
||||
"overwritehost" => "ssl-proxy.tld",
|
||||
"overwriteprotocol" => "https",
|
||||
"overwritewebroot" => "/domain.tld/nextcloud",
|
||||
"overwritecondaddr" => "^10\.0\.0\.1$",
|
||||
'trusted_proxies' => ['10.0.0.1'],
|
||||
'overwritehost' => 'ssl-proxy.tld',
|
||||
'overwriteprotocol' => 'https',
|
||||
'overwritewebroot' => '/domain.tld/nextcloud',
|
||||
'overwritecondaddr' => '^10\.0\.0\.1$',
|
||||
);
|
||||
|
||||
.. note:: If you want to use the SSL proxy during installation you have to
|
||||
|
||||
@ -1,69 +0,0 @@
|
||||
==========================
|
||||
Configuring single-sign-on
|
||||
==========================
|
||||
|
||||
Using the SSO & SAML app of your Nextcloud you can make it easily possible to integrate your existing Single-Sign-On
|
||||
solution with Nextcloud. In addition, you can use the Nextcloud LDAP user provider to keep the convenience for users. (e.g.
|
||||
when sharing)
|
||||
|
||||
The following providers are supported and tested at the moment:
|
||||
|
||||
- SAML 2.0
|
||||
- OneLogin
|
||||
- Shibboleth
|
||||
- Active Directory Federation Services (ADFS)
|
||||
- Authentication via Environment Variable
|
||||
- Kerberos (mod_auth_kerb)
|
||||
- Any other provider that authenticates using the environment variable
|
||||
|
||||
While theoretically any other authentication provider implementing either one of those standards is compatible, we like
|
||||
to note that they are not part of any internal test matrix.
|
||||
|
||||
Enabling the SSO & SAML app
|
||||
---------------------------
|
||||
|
||||
.. warning:: Make sure to configure an administrative user that can access the instance via SSO. Logging-in with your
|
||||
regular Nextcloud account won't be possible anymore.
|
||||
|
||||
|
||||
The "SSO & SAML" App is shipped and disabled by default. To enable the app enabled simply go to your Nextcloud Apps page
|
||||
to enable it. It can then be found in the "SSO & SAML authentication" section of your Nextcloud.
|
||||
|
||||
Configuring SAML 2.0
|
||||
--------------------
|
||||
|
||||
To configure using SAML choose the "SAML authentication" in the setup wizard of the application. Then configure the application
|
||||
as required by your Service Provider.
|
||||
|
||||
.. figure:: ./images/saml_app_overview.png
|
||||
|
||||
|
||||
Configuring environment based authentication
|
||||
--------------------------------------------
|
||||
It is possible to authenticate against Nextcloud using an environment variable. This is for example relevant in case you
|
||||
use an service provider incompatible with SAML such as Kerberos or don't want to configure SAML in the software yourself.
|
||||
|
||||
To enable that choose the "Environment variable" authentication provider in the application and then specify the environment
|
||||
variable. (e.g. `REMOTE_USER` for Kerberos)
|
||||
|
||||
Once done you also need to protect the login route properly. On an Apache server with mod_auth_kerb the following configuration
|
||||
would protect the login route:
|
||||
|
||||
.. code-block:: apache
|
||||
|
||||
<Location "/index.php/login">
|
||||
AuthType Kerberos
|
||||
AuthName "Kerberos Login"
|
||||
KrbServiceName HTTP
|
||||
KrbMethodNegotiate On
|
||||
KrbMethodK5Passwd Off
|
||||
KrbSaveCredentials Off
|
||||
KrbVerifyKDC On
|
||||
KrbAuthRealms NEXTCLOUD-AD.LOCAL
|
||||
Krb5KeyTab /etc/apache2/webpage.HTTP.keytab
|
||||
Require valid-user
|
||||
</Location>
|
||||
|
||||
|
||||
.. warning:: If this authentication approach is used clients do require an application specific password for authentication.
|
||||
A better integration into our desktop and mobile clients is considered for the future though.
|
||||
@ -20,6 +20,10 @@ Status codes:
|
||||
* 101 - invalid input data
|
||||
* 102 - username already exists
|
||||
* 103 - unknown error occurred whilst adding the user
|
||||
* 104 - group does not exist
|
||||
* 105 - insufficient privileges for group
|
||||
* 106 - no group specified (required for subadmins)
|
||||
* 107 - all errors that contain a hint - for example "Password is among the 1,000,000 most common ones. Please make it unique." (this code was added in 12.0.6 & 13.0.1)
|
||||
|
||||
Example
|
||||
^^^^^^^
|
||||
@ -27,6 +31,8 @@ Example
|
||||
* POST ``http://admin:secret@example.com/ocs/v1.php/cloud/users -d
|
||||
userid="Frank" -d password="frankspassword"``
|
||||
* Creates the user ``Frank`` with password ``frankspassword``
|
||||
* optionally groups can be specified by one or more ``groups[]`` query parameters:
|
||||
``URL -d groups[]="admin" -D groups[]="Team1"``
|
||||
|
||||
XML output
|
||||
^^^^^^^^^^
|
||||
|
||||
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 18 KiB |
@ -30,7 +30,6 @@ Below is the list of apps supported for Nextcloud |version|. Supported here mean
|
||||
* Gallery
|
||||
* Logreader
|
||||
* Lookup Server Connector
|
||||
* Nextant
|
||||
* Nextcloud Announcements
|
||||
* Notifications
|
||||
* Object Storage (Swift)
|
||||
@ -46,7 +45,7 @@ Below is the list of apps supported for Nextcloud |version|. Supported here mean
|
||||
* User External
|
||||
* User LDAP
|
||||
* User Shibboleth/SAML
|
||||
* Video Calls (former Spreed)
|
||||
* Talk
|
||||
* WebDAV Endpoint (handles old and new webdav endpoints)
|
||||
* Workflow Engine (cannot be disabled)
|
||||
|
||||
|
||||
@ -2,582 +2,4 @@
|
||||
Deployment recommendations
|
||||
==========================
|
||||
|
||||
What is the best way to install and maintain Nextcloud? The answer to that is
|
||||
*"it depends"* because every Nextcloud customer has their own
|
||||
particular needs and IT infrastructure. Nextcloud and the LAMP stack are
|
||||
highly-configurable, so we will present three typical scenarios and make
|
||||
best-practice recommendations for both software and hardware.
|
||||
|
||||
General recommendations
|
||||
-----------------------
|
||||
|
||||
.. note:: Whatever the size of your organization, always keep one thing in mind:
|
||||
the amount of data stored in Nextcloud will only grow. Plan ahead.
|
||||
|
||||
Consider setting up a scale-out deployment, or using Federated Cloud Sharing to
|
||||
keep individual Nextcloud instances to a manageable size.
|
||||
|
||||
.. comment: Federating instances seems the best way to grow organically in
|
||||
an enterprise. A lookup server to tie all the instances together under a
|
||||
single domain is being worked on.
|
||||
|
||||
* Operating system: Linux (Ubuntu 16.04 or Red Hat Enterprise Linux 7 is recommended).
|
||||
* Web server: Apache 2.4.
|
||||
* Database: MySQL/MariaDB.
|
||||
* PHP 5.6+. PHP 5.6 is the minimum supported version. We recommend to deploy
|
||||
on PHP 7 if possible. This version is known to offer significant performance
|
||||
advantages. ``mod_php`` is the recommended Apache module due to
|
||||
vendor support and ease of configuration. ``php-fpm`` with Apache Event
|
||||
MPM (or nginx) is an alternative with potentially better scalability in
|
||||
high load and limited RAM environments. For the best results we recommend
|
||||
working with the Nextcloud GmbH enterprise support team for large deployments.
|
||||
|
||||
.. comment: mod_php is easier to set up, php-fpm with apache event MPM seems to
|
||||
scale better under load and limited RAM restrictions:
|
||||
http://blog.bitnami.com/2014/06/performance-enhacements-for-apache-and.html
|
||||
|
||||
Small workgroups or departments
|
||||
-------------------------------
|
||||
|
||||
* Number of users
|
||||
Up to 150 users.
|
||||
|
||||
* Storage size
|
||||
100 GB to 10TB.
|
||||
|
||||
* High availability level
|
||||
Zero-downtime backups via Btrfs snapshots, component failure leads to
|
||||
interruption of service. Alternate backup scheme on other filesystems:
|
||||
nightly backups with service interruption.
|
||||
|
||||
Recommended system requirements
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
One machine running the application server, Web server, database server and
|
||||
local storage.
|
||||
|
||||
Authentication via an existing LDAP or Active Directory server.
|
||||
|
||||
.. figure:: images/deprecs-1.png
|
||||
:alt: Network diagram for small enterprises.
|
||||
|
||||
.. comment:
|
||||
https://yuml.me
|
||||
[web server|DB; local storage]->[LDAP]
|
||||
|
||||
* Components
|
||||
One server with at least 2 CPU cores, 16GB RAM, local storage as needed.
|
||||
|
||||
* Operating system
|
||||
Enterprise grade Linux distribution with full support from OS vendor. Red
|
||||
Hat Enterprise Linux or Ubuntu 16.04 are recommended.
|
||||
|
||||
* SSL Configuration
|
||||
The SSL termination is done in Apache. A standard SSL certificate is
|
||||
needed, installed according to the Apache documentation.
|
||||
|
||||
* Load Balancer
|
||||
None.
|
||||
|
||||
* Database
|
||||
MySQL, MariaDB or PostgreSQL. We currently recommend MySQL / MariaDB, as our
|
||||
customers have had good experiences when moving to a Galera cluster to
|
||||
scale the DB.
|
||||
|
||||
* Backup
|
||||
Install Nextcloud, Nextcloud data directory and database on Btrfs filesystem.
|
||||
Make regular snapshots at desired intervals for zero downtime backups.
|
||||
Mount DB partitions with the "nodatacow" option to prevent fragmentation.
|
||||
|
||||
Alternatively, make nightly backups with service interruption:
|
||||
|
||||
* Shut down Apache.
|
||||
* Create database dump.
|
||||
* Push data directory to backup.
|
||||
* Push database dump to backup.
|
||||
* Start Apache.
|
||||
|
||||
Then optionally rsync to a backup storage or tape backup. (See the
|
||||
`Maintenance`_ section of the Administration manual for tips on backups
|
||||
and restores.)
|
||||
|
||||
* Authentication
|
||||
User authentication via one or several LDAP or Active Directory servers. (See
|
||||
`User Authentication with LDAP`_ for information on configuring Nextcloud to
|
||||
use LDAP and AD.)
|
||||
|
||||
* Session Management
|
||||
Local session management on the application server. PHP sessions are stored
|
||||
in a tmpfs mounted at the operating system-specific session storage
|
||||
location. You can find out where that is by running ``grep -R
|
||||
'session.save_path' /etc/php5`` and then add it to the ``/etc/fstab`` file,
|
||||
for example:
|
||||
``echo "tmpfs /var/lib/php5/pool-www tmpfs defaults,noatime,mode=1777 0 0"
|
||||
>> /etc/fstab``.
|
||||
|
||||
* Memory Caching
|
||||
A memcache speeds up server performance, and Nextcloud supports four
|
||||
memcaches; refer to `Configuring Memory Caching`_ for information on
|
||||
selecting and configuring a memcache.
|
||||
|
||||
* Storage
|
||||
Local storage.
|
||||
|
||||
Mid-sized enterprises
|
||||
---------------------
|
||||
|
||||
* Number of users
|
||||
150 to 1,000 users.
|
||||
|
||||
* Storage size
|
||||
Up to 200TB.
|
||||
|
||||
* High availability level
|
||||
Every component is fully redundant and can fail without service interruption.
|
||||
Backups without service interruption
|
||||
|
||||
Recommended system requirements
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
2 to 4 application servers.
|
||||
|
||||
A cluster of two database servers.
|
||||
|
||||
Storage on an NFS server.
|
||||
|
||||
Authentication via an existing LDAP or Active Directory server.
|
||||
|
||||
.. figure:: images/deprecs-2.png
|
||||
:alt: Network diagram for mid-sized enterprise.
|
||||
|
||||
.. comment:
|
||||
https://yuml.me
|
||||
[load balancer]->[web server 1]
|
||||
[load balancer]->[web server 2]
|
||||
[web server 1]->[NFS]
|
||||
[web server 2]->[NFS]
|
||||
[web server 1]->[LDAP]
|
||||
[web server 2]->[LDAP]
|
||||
[web server 1]->[Redis]
|
||||
[web server 2]->[Redis]
|
||||
[web server 1]->[DB master]
|
||||
[web server 2]->[DB master]
|
||||
[web server 1]->[DB slave]
|
||||
[web server 2]->[DB slave]
|
||||
[DB master]->[DB slave]
|
||||
|
||||
|
||||
* Components
|
||||
* 2 to 4 application servers with 4 sockets and 32GB RAM.
|
||||
* 2 DB servers with 4 sockets and 64GB RAM.
|
||||
* 1 HAproxy load balancer with 2 sockets and 16GB RAM.
|
||||
* NFS storage server as needed.
|
||||
|
||||
* Operating system
|
||||
Enterprise grade Linux distribution with full support from OS vendor. Red
|
||||
Hat Enterprise Linux or Ubuntu 16.04 are recommended.
|
||||
|
||||
* SSL Configuration
|
||||
The SSL termination is done in the HAProxy load balancer. A standard SSL
|
||||
certificate is needed, installed according to the `HAProxy documentation`_.
|
||||
|
||||
* Load Balancer
|
||||
HAProxy running on a dedicated server in front of the application servers.
|
||||
Sticky session needs to be used because of local session management on the
|
||||
application servers.
|
||||
|
||||
.. comment: (please add configuration details here)
|
||||
.. comment: why sticky sessions? the nice thing about haproxy is that it can
|
||||
send requests to the application server with the least load. redis or
|
||||
memcached seem more appropriate. this is mid size already. the software
|
||||
stack should be the same as for L`_
|
||||
Frank: Yes. But this only works if haproxy can read the http stream which
|
||||
means that we have to terminate SSL in the haproxy instead of the Web server.
|
||||
Totally possible. Whatever you prefer :-)
|
||||
Jörn: AFAIK you need to do SSL offloading to do sticky sessions, because the
|
||||
load balancer has to look into the http stream or rely on the client IP to
|
||||
determine the Web server for the session. Not doing SSL offloading instead
|
||||
requires you to use a shared session (via memcached or redis) because the
|
||||
requests are distributed via round robin or least load. It allows you to
|
||||
scale out the ssl load by adding more applicaton servers. So ... I think it
|
||||
is exactly the other way round.
|
||||
|
||||
* Database
|
||||
MySQL/MariaDB Galera cluster with master-slave replication. The slave is
|
||||
only used as failover in case the master is down. This could be extended
|
||||
with a load balancer infront to distribute writes to the master and reads
|
||||
to the slave as well. (see "Database load balancer" below)
|
||||
|
||||
* Backup
|
||||
Minimum daily backup without downtime. All MySQL/MariaDB statements should
|
||||
be replicated to a backup MySQL/MariaDB slave instance.
|
||||
|
||||
* Create a snapshot on the NFS storage server.
|
||||
* At the same time stop the MySQL replication.
|
||||
* Create a MySQL dump of the backup slave.
|
||||
* Push the NFS snapshot to the backup.
|
||||
* Push the MySQL dump to the backup.
|
||||
* Delete the NFS snapshot.
|
||||
* Restart MySQL replication.
|
||||
|
||||
* Authentication
|
||||
User authentication via one or several LDAP or Active Directory servers.
|
||||
(See `User Authentication with LDAP`_ for information on configuring
|
||||
Nextcloud to use LDAP and AD.)
|
||||
|
||||
* LDAP
|
||||
Read-only slaves should be deployed on every application server for
|
||||
optimal scalability
|
||||
|
||||
* Session Management
|
||||
Session management on the application server. PHP sessions are stored
|
||||
in a tmpfs mounted at the operating system-specific session storage
|
||||
location. You can find out where that is by running ``grep -R
|
||||
'session.save_path' /etc/php5`` and then add it to the ``/etc/fstab`` file,
|
||||
for example:
|
||||
``echo "tmpfs /var/lib/php5/pool-www tmpfs defaults,noatime,mode=1777 0 0"
|
||||
>> /etc/fstab``.
|
||||
|
||||
* Memory Caching
|
||||
A memcache speeds up server performance, and Nextcloud supports four
|
||||
memcaches; refer to `Configuring Memory Caching`_ for information on
|
||||
selecting and configuring a memcache.
|
||||
|
||||
* Storage
|
||||
Use an off-the-shelf NFS solution, such as IBM Elastic Storage or RedHat
|
||||
Ceph.
|
||||
|
||||
Large enterprises and service providers
|
||||
---------------------------------------
|
||||
|
||||
* Number of users
|
||||
5,000 to >100,000 users.
|
||||
|
||||
* Storage size
|
||||
Up to 1 petabyte.
|
||||
|
||||
* High availabily level
|
||||
Every component is fully redundant and can fail without service interruption.
|
||||
Backups without service interruption
|
||||
|
||||
Recommended system requirements
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
4 to 20 application/Web servers.
|
||||
|
||||
A cluster of two or more database servers which are behind a load balancer to
|
||||
send all writes to the master and reads to the slaves. (see "Database load balancer"
|
||||
below)
|
||||
|
||||
Storage is an NFS server, or an object store that is S3 compatible.
|
||||
|
||||
Cloud federation for a distributed setup over several data centers.
|
||||
|
||||
Authentication via an existing LDAP or Active Directory server, or SAML.
|
||||
|
||||
.. figure:: images/deprecs-3.png
|
||||
:alt: Network diagram for large enterprise.
|
||||
|
||||
.. comment:
|
||||
https://yuml.me
|
||||
[load balancer 1]->[web server 1|local LDAP slave]
|
||||
[load balancer 1]->[web server 2|local LDAP slave]
|
||||
[load balancer 1]->[web server 3|local LDAP slave]
|
||||
[load balancer 1]->[web server 4|local LDAP slave]
|
||||
[load balancer 2]->[web server 1]
|
||||
[load balancer 2]->[web server 2]
|
||||
[load balancer 2]->[web server 3]
|
||||
[load balancer 2]->[web server 4]
|
||||
[web server 1]->[NFS]
|
||||
[web server 2]->[NFS]
|
||||
[web server 3]->[NFS]
|
||||
[web server 4]->[NFS]
|
||||
[web server 1]->[LDAP]
|
||||
[web server 2]->[LDAP]
|
||||
[web server 3]->[LDAP]
|
||||
[web server 4]->[LDAP]
|
||||
[web server 1]->[Redis 1]
|
||||
[web server 2]->[Redis 1]
|
||||
[web server 3]->[Redis 1]
|
||||
[web server 4]->[Redis 1]
|
||||
[web server 1]->[Redis 2]
|
||||
[web server 2]->[Redis 2]
|
||||
[web server 3]->[Redis 2]
|
||||
[web server 4]->[Redis 2]
|
||||
[Redis 1]->[Redis 2]
|
||||
[Redis 2]->[Redis 1]
|
||||
[web server 1]->[DB load balancer]
|
||||
[web server 2]->[DB load balancer]
|
||||
[web server 3]->[DB load balancer]
|
||||
[web server 4]->[DB load balancer]
|
||||
[DB load balancer]->[DB master]
|
||||
[DB load balancer]->[DB slave 1]
|
||||
[DB load balancer]->[DB slave 2]
|
||||
[DB load balancer]->[DB slave 3]
|
||||
[DB master]->[DB slave 1]
|
||||
[DB master]->[DB slave 2]
|
||||
[DB master]->[DB slave 3]
|
||||
|
||||
* Components
|
||||
* 4 to 20 application servers with 4 sockets and 64GB RAM.
|
||||
* 4 DB servers with 4 sockets and 128GB RAM plus a DB load balancer
|
||||
(see "Database load balancer" below)
|
||||
* 2 load balancer - either HAProxy with keepalived (heartbeat) and a shared
|
||||
virutal IP address as a software solution or a hardware load balancer. For
|
||||
the HAProxy we recommend at least 2 sockets and 16GB RAM each.
|
||||
* NFS storage server as needed.
|
||||
|
||||
* Operating system
|
||||
Enterprise grade Linux distribution with full support from OS vendor. Red
|
||||
Hat Enterprise Linux or Ubuntu 16.04 are recommended.
|
||||
|
||||
* SSL Configuration
|
||||
The SSL termination is done in the load balancer. A standard SSL certificate
|
||||
is needed, installed according to the load balancer documentation.
|
||||
|
||||
* Load Balancer
|
||||
A redundant load-balancer with heartbeat, for example `HAProxy`_.
|
||||
This runs two load balancers in front of the application servers.
|
||||
|
||||
* Database
|
||||
MySQL/MariaDB Galera Cluster with master - slave replication (master & 3 slaves).
|
||||
The load balancer infront distributes writes to the master and reads to the
|
||||
slaves. (see "Database load balancer" below)
|
||||
|
||||
* Backup
|
||||
Minimum daily backup without downtime. All MySQL/MariaDB statements should
|
||||
be replicated to a backup MySQL/MariaDB slave instance.
|
||||
|
||||
* Create a snapshot on the NFS storage server.
|
||||
* At the same time stop the MySQL replication.
|
||||
* Create a MySQL dump of the backup slave.
|
||||
* Push the NFS snapshot to the backup.
|
||||
* Push the MySQL dump to the backup.
|
||||
* Delete the NFS snapshot.
|
||||
* Restart MySQL replication.
|
||||
|
||||
* Authentication
|
||||
User authentication via one or several LDAP or Active Directory
|
||||
servers, or SAML/Shibboleth. (See `User Authentication with LDAP`_.)
|
||||
|
||||
* LDAP
|
||||
Read-only slaves should be deployed on every application server for
|
||||
optimal scalability.
|
||||
|
||||
* Session Management
|
||||
Redis should be used for the session management storage.
|
||||
|
||||
* Caching
|
||||
Redis for distributed in-memory caching (see `Configuring Memory
|
||||
Caching`_).
|
||||
|
||||
* Storage
|
||||
An off-the-shelf NFS solution should be used. Examples are IBM Elastic
|
||||
Storage or RedHAT Ceph. Optionally, an S3 compatible object store can also
|
||||
be used.
|
||||
|
||||
Hardware considerations
|
||||
-----------------------
|
||||
|
||||
* Solid-state drives (SSDs) for I/O.
|
||||
* Separate hard disks for storage and database, SSDs for databases.
|
||||
* Multiple network interfaces to distribute server synchronisation and backend
|
||||
traffic across multiple subnets.
|
||||
|
||||
Single machine / scale-up deployment
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The single-machine deployment is widely used in the community.
|
||||
|
||||
Pros:
|
||||
|
||||
* Easy setup: no session storage daemon, use tmpfs and memory caching to
|
||||
enhance performance, local storage.
|
||||
* No network latency to consider.
|
||||
* To scale buy a bigger CPU, more memory, larger hard drive, or additional hard
|
||||
drives.
|
||||
|
||||
Cons:
|
||||
|
||||
* Fewer high availability options.
|
||||
* The amount of data in Nextcloud tends to continually grow. Eventually a
|
||||
single machine will not scale; I/O performance decreases and becomes a
|
||||
bottleneck with multiple up- and downloads, even with solid-state drives.
|
||||
|
||||
Scale-Out deployment
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Provider setup:
|
||||
|
||||
* DNS round robin to HAProxy servers (2-n, SSL offloading, cache static
|
||||
resources)
|
||||
* Least load to Apache servers (2-n)
|
||||
* Memcached/Redis for shared session storage (2-n)
|
||||
* Database cluster with single Master, multiple slaves and proxy to split
|
||||
requests accordingly (2-n) - `MaxScale`_ is a possible proxy
|
||||
solutions to load balance the writes to the master and reads to the slaves
|
||||
(see "Database load balancer" below)
|
||||
* GPFS or Ceph via phprados (2-n, 3 to be safe, Ceph 10+ nodes to see speed
|
||||
benefits under load)
|
||||
|
||||
Pros:
|
||||
|
||||
* Components can be scaled as needed.
|
||||
* High availability.
|
||||
* Test migrations easier.
|
||||
|
||||
Cons:
|
||||
|
||||
* More complicated to setup.
|
||||
* Network becomes the bottleneck (10GB Ethernet recommended).
|
||||
* Currently DB filecache table will grow rapidly, making migrations painful in
|
||||
case the table is altered.
|
||||
|
||||
What about Nginx / PHP-FPM?
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Could be used instead of HAproxy as the load balancer.
|
||||
But on uploads stores the whole file on disk before handing it over to PHP-FPM.
|
||||
|
||||
A single master DB is single point of failure, does not scale
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
When master fails another slave can become master.
|
||||
|
||||
A multi-master setup with Galera cluster is not supported, because we require
|
||||
``READ-COMMITTED`` as transaction isolation level. `Galera doesn't support this
|
||||
with a master-master replication`_ which will lead to deadlocks during uploads
|
||||
of multiple files into one directory for example.
|
||||
|
||||
Database load balancer
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
When Galera cluster is used as DB cluster solution, we recommend to use
|
||||
`MaxScale`_ as load balancer infront of the cluster to distribute writes to
|
||||
the master node and reads to the slaves.
|
||||
|
||||
Software considerations
|
||||
-----------------------
|
||||
|
||||
Operating system
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
We are dependent on distributions that offer an easy way to install the various
|
||||
components in up-to-date versions. We recommend Red Hat Enterprise Linux 7 or
|
||||
Ubuntu 16.04 - for both commercial support can be purchased. Debian
|
||||
and Ubuntu are free of cost, and include newer software packages. CentOS is the
|
||||
community-supported free-of-cost Red Hat Enterprise Linux clone.
|
||||
|
||||
Web server
|
||||
^^^^^^^^^^
|
||||
|
||||
Taking Apache and Nginx as the contenders, Apache with mod_php is currently the
|
||||
best option, as Nginx does not support all features necessary for enterprise
|
||||
deployments. Mod_php is recommended instead of PHP_FPM, because in scale-out
|
||||
deployments separate PHP pools are simply not necessary.
|
||||
|
||||
Relational database
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
More often than not the customer already has an opinion on what database to
|
||||
use. In general, the recommendation is to use what their database administrator
|
||||
is most familiar with. Taking into account what we are seeing at customer
|
||||
deployments, we recommend MySQL/MariaDB in a master - slave deployment with a
|
||||
MySQL proxy in front of them to send updates to master, and selects to the
|
||||
slave(s). (see "Database load balancer" above)
|
||||
|
||||
.. comment: MySQL locks tables for schema updates and might even have to copy
|
||||
the whole table. That is pretty much a non-starter for migrations unless you
|
||||
are using a scale out deployment where you can apply the schema changes to
|
||||
each slave individually. Even then each migration might take several hours.
|
||||
Make sure you have enough disk space. You have been warned.
|
||||
|
||||
.. comment: By default Nextcloud uses the utf8 character set with utf8_bin
|
||||
collation on MySQL installations. As a result 4 byte UTF characters like
|
||||
emojis cannot be used. See the config.php option ``'mysql.utf8mb4'`` to
|
||||
switch to 4 byte UTF characters on MySQL.
|
||||
|
||||
The second best option is PostgreSQL (alter table does not lock table, which
|
||||
makes migration less painful) although we have yet to find a customer who uses a
|
||||
master-slave setup.
|
||||
|
||||
.. comment: PostgreSQL may produce excessive amounts of dead tuples due to
|
||||
Nextcloud transactions preventing the execution of the autovacum process.
|
||||
|
||||
What about the other DBMS?
|
||||
|
||||
* SQLite is adequate for simple testing, and for low-load single-user
|
||||
deployments. It is not adequate for production systems.
|
||||
* Microsoft SQL Server is not a supported option.
|
||||
* For Oracle DB support please `contact the Nextcloud team`_ to get more
|
||||
information on this.
|
||||
|
||||
File Storage
|
||||
------------
|
||||
|
||||
While many customers are starting with NFS, sooner or later that requires scale-out storage. Currently the options are GPFS or GlusterFS, or an object store protocol like S3 or Swift. S3 also allows access to Ceph Storage.
|
||||
|
||||
.. comment: A proof of concept implementation based on
|
||||
[phprados](https://github.com/ceph/phprados) that talks directly to a
|
||||
[ceph](http://ceph.com/) cluster without having to use temp files is [in
|
||||
development](https://github.com/owncloud/objectstore/pull/26).
|
||||
|
||||
.. comment: NFS can be used but needs to be micro-managed to distribute users
|
||||
on multiple storages. If you want to go that route configure ldap to provide
|
||||
a custom home folder location. That allows you to move each users data
|
||||
folder to different nfs mounts.
|
||||
|
||||
Session Storage
|
||||
---------------
|
||||
|
||||
* Redis: provides persistence, nice graphical inspection tools available,
|
||||
supports Nextcloud high-level file locking.
|
||||
|
||||
* If Shibboleth is a requirement you must use Memcached, and it can also be
|
||||
used to scale-out shibd session storage (see `Memcache StorageService`_).
|
||||
|
||||
.. comment: High Availability / Failover deployment
|
||||
Use Case: site replication -> different problem
|
||||
|
||||
References
|
||||
----------
|
||||
|
||||
`Database High Availability`_
|
||||
|
||||
`Performance enhancements for Apache and PHP`_
|
||||
|
||||
`How to Set Up a Redis Server as a Session Handler for PHP on Ubuntu 14.04`_
|
||||
|
||||
|
||||
.. TODO ON RELEASE: Update version number below on release
|
||||
.. _Maintenance:
|
||||
https://docs.nextcloud.org/server/12/admin_manual/maintenance/index.html
|
||||
.. _User Authentication with LDAP:
|
||||
https://docs.nextcloud.org/server/12/admin_manual/configuration_user/user_auth_ldap.html
|
||||
.. _Configuring Memory Caching:
|
||||
https://docs.nextcloud.org/server/12/admin_manual/configuration_server/caching_configuration.html
|
||||
.. _Nextcloud Server or Enterprise Edition:
|
||||
https://nextcloud.com/enterprise/
|
||||
|
||||
.. _Memcache StorageService:
|
||||
https://wiki.shibboleth.net/confluence/display/SHIB2/
|
||||
NativeSPStorageService#NativeSPStorageService-MemcacheStorageService
|
||||
|
||||
.. _Database High Availability:
|
||||
http://www.severalnines.com/blog/become-mysql-dba-blog-series-database-high-
|
||||
availability
|
||||
.. _Performance enhancements for Apache and PHP:
|
||||
http://blog.bitnami.com/2014/06/performance-enhacements-for-apache-and.html
|
||||
.. _How to Set Up a Redis Server as a Session Handler for PHP on Ubuntu 14.04:
|
||||
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-redis-server
|
||||
-as -a-session-handler-for-php-on-ubuntu-14-04
|
||||
.. _HAProxy documentation:
|
||||
http://www.haproxy.org/#docs
|
||||
.. _Galera doesn't support this with a master-master replication:
|
||||
http://galeracluster.com/documentation-webpages/isolationlevels.html#understanding-isolation-levels
|
||||
.. _contact the Nextcloud team:
|
||||
https://nextcloud.com/contact/
|
||||
.. _MaxScale:
|
||||
https://mariadb.com/products/mariadb-maxscale
|
||||
.. _HAProxy:
|
||||
http://www.haproxy.org/
|
||||
Find up-to-date deployment recommendations for enterprises in our `customer portal. <https://portal.nextcloud.com/article/nextcloud-deployment-recommendations-7.html>`
|
||||
|
||||
@ -423,14 +423,15 @@ variables in the appropropriate ``php-fpm`` ini/config file.
|
||||
|
||||
Here are some example root paths for these ini/config files:
|
||||
|
||||
+--------------------+-----------------------+
|
||||
| Ubuntu/Mint | CentOS/Red Hat/Fedora |
|
||||
+--------------------+-----------------------+
|
||||
| ``/etc/php5/fpm/`` | ``/etc/php-fpm.d/`` |
|
||||
+--------------------+-----------------------+
|
||||
+-----------------------+-----------------------+
|
||||
| Ubuntu/Mint | CentOS/Red Hat/Fedora |
|
||||
+-----------------------+-----------------------+
|
||||
| ``/etc/php5/fpm/`` or | ``/etc/php-fpm.d/`` |
|
||||
| ``/etc/php/7.0/fpm/`` | |
|
||||
+-----------------------+-----------------------+
|
||||
|
||||
In both examples, the ini/config file is called ``www.conf``, and depending on
|
||||
the distro version or customizations you have made, it may be in a subdirectory.
|
||||
the distro version or customizations you have made, it may be in a subdirectory such as ``pool.d``.
|
||||
|
||||
Usually, you will find some or all of the environment variables
|
||||
already in the file, but commented out like this::
|
||||
|
||||
@ -35,6 +35,7 @@ Working platforms
|
||||
* Mobile apps: iOS 9+ (10+ for Talk), Android 4.x+ (5.0+ for Talk)
|
||||
* Web browser: Recent version of IE11+, Microsoft Edge, Firefox, Chrome, Safari or browers based on those. Talk requires Firefox 31+ and Chrome38+
|
||||
|
||||
|
||||
See :doc:`source_installation` for minimum software versions for installing
|
||||
Nextcloud. If you encounter problems, visit the `home user forums <https://help.nextcloud.com>`
|
||||
or `enterprise support portal <https://portal.nextcloud.com.>`
|
||||
@ -44,9 +45,9 @@ Database requirements for MySQL / MariaDB
|
||||
|
||||
The following is currently required if you're running Nextcloud together with a MySQL / MariaDB database:
|
||||
|
||||
* Disabled or BINLOG_FORMAT = MIXED configured Binary Logging
|
||||
* InnoDB storage engine (MyISAM is not supported)
|
||||
* "READ COMMITED" transaction isolation level (See: :ref:`db-transaction-label`)
|
||||
* Disabled or BINLOG_FORMAT = ROW configured Binary Logging (See: https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html)
|
||||
|
||||
Emoji (UTF8 4-byte) support with MySQL / MariaDB
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
@ -9,7 +9,6 @@ refer to our community support channels:
|
||||
The Nextcloud forums have a `FAQ page`_ where each topic corresponds
|
||||
to typical mistakes or frequently occurring issues
|
||||
|
||||
* `The Nextcloud forums`_
|
||||
* The Nextcloud IRC chat channel ``irc://#nextcloud@freenode.net`` on
|
||||
freenode.net, also accessible via `webchat`_
|
||||
|
||||
|
||||
@ -39,7 +39,7 @@ Update notifications
|
||||
--------------------
|
||||
|
||||
Nextcloud has an update notification app, that informs the administrator about
|
||||
the availablilty of an update. Then you decide which update method to use.
|
||||
the availability of an update. Then you decide which update method to use.
|
||||
|
||||
.. figure:: images/2-updates.png
|
||||
:alt: Both update notifications displayed on Admin page.
|
||||
@ -91,3 +91,22 @@ Change ``"maintenance" => false`` to ``"maintenance" => true``:
|
||||
"maintenance" => true,
|
||||
|
||||
Then change it back to ``false`` when you are finished.
|
||||
|
||||
Manual steps during upgrade
|
||||
---------------------------
|
||||
|
||||
Some operation can be quite time consuming. Therefore we decided not to add them
|
||||
the the normal upgrade process. We recommend to run them manually after the upgrade
|
||||
was completed. Below you find a list of this commands.
|
||||
|
||||
Upgrading to Nextcloud 13
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
With Nextcloud 13 we added a new index to the share table which should result in
|
||||
significant performance improvements::
|
||||
|
||||
$ sudo -u www-data php occ db:add-missing-indice
|
||||
|
||||
With Nextcloud 13 we switched to bigint for the file ID's in the file cache table::
|
||||
|
||||
$ sudo -u www-data php occ db:convert-filecache-bigint
|
||||
|
||||
@ -1,92 +0,0 @@
|
||||
============================
|
||||
Considerations on monitoring
|
||||
============================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:hidden:
|
||||
|
||||
Large scale Nextcloud deployments are typically installed as load balanced
|
||||
n-tier web applications. Successfully managing such an installation requires
|
||||
active monitoring of the application and supporting infrastructure components.
|
||||
The purpose of this section is to outline the components of Nextcloud that need
|
||||
to be monitored, and provide guidance on what to look for in Nextcloud in an
|
||||
enterprise installation.
|
||||
|
||||
Nextcloud deployment architecture
|
||||
---------------------------------
|
||||
|
||||
Before discussing how to monitor Nextcloud, it is important to understand the architecture of a
|
||||
typical Nextcloud deployment. These monitoring best practices are developed based on the use of load
|
||||
balanced Web servers, a clustered database running a distributed database storage engine, such as
|
||||
MySQL NDB, and a clustered filesystem, such as Red Hat Storage.
|
||||
|
||||
It is assumed that specific enterprise tools (monitoring, log management, etc) to monitor
|
||||
operations are available, and that Nextcloud is simply a new target for these tools.
|
||||
|
||||
|
||||
The important components of Nextcloud
|
||||
-------------------------------------
|
||||
|
||||
Nextcloud is a PHP application that depends on a filesystem for file storage, and a database for storing
|
||||
user and file meta data, as well as some application specific information.
|
||||
While the loss of an app server or a node in the database or storage clusters should not bring the
|
||||
system down, knowing that this happened and resolving it is essential to keeping the service running
|
||||
efficiently. Therefore it is important to monitor the Nextcloud servers, the Load Balancer, the Storage
|
||||
Cluster and the Database. This documentation starts with the Nextcloud application and works out from
|
||||
there through the layers of infrastructure.
|
||||
|
||||
|
||||
Status.php
|
||||
^^^^^^^^^^
|
||||
|
||||
Nextcloud provides a very simple mechanism for determining if an application server is up and functioning –
|
||||
call the status.php file on each Nextcloud server. This file can be found in the root Nextcloud directory on
|
||||
the server, which by default is /status.php. If the server is functioning normally, the response
|
||||
looks something like this:
|
||||
|
||||
::
|
||||
|
||||
{"installed":"true","version":"6.0.0.16","versionstring":"6.0.1","edition":""}
|
||||
|
||||
|
||||
We recommend monitoring this file on each Nextcloud application server to provide a basic check that the
|
||||
server is operating properly.
|
||||
|
||||
|
||||
Nextcloud.log
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
Nextcloud also provides a built in logging function. If the Nextcloud logging application
|
||||
is enabled, this file will track user logins and shared file activity. If these logging applications are
|
||||
not enabled, this log file still tracks basic Nextcloud health. Given the potential for this file to get
|
||||
quite large, the log file should be rotated on a daily basis, and given the importance of the error information
|
||||
in the log file, this should be integrated with an enterprise log manager.
|
||||
|
||||
|
||||
Logfile entries that start with the keyword “Error” should be logged and reported to Nextcloud support.
|
||||
|
||||
**Apache**
|
||||
|
||||
The apache error and access log should also be monitored. Significant spontaneous changes of the number
|
||||
of requests per second should also be monitored and looked into.
|
||||
|
||||
|
||||
**Database server**
|
||||
|
||||
The load and general health of the database server or cluster has to be monitored also.
|
||||
All mysql vendors provide tools to monitor this.
|
||||
|
||||
|
||||
Clustered filesystem
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The available space of the filesystem should be monitored to prevent a full Nextcloud. This functionality is
|
||||
provided by the operating-system and/or the cluster filesystem vendor.
|
||||
|
||||
Load balancer
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
The load balancer is monitoring the health of the application servers and is distributing the traffic in
|
||||
the optimal way. The application-servers should also be monitored to detect long lasting OS or
|
||||
hardware problems. Monitoring solutions like Nagios provide built in functionality to do this.
|
||||
@ -1,13 +0,0 @@
|
||||
==========
|
||||
Operations
|
||||
==========
|
||||
|
||||
Advanced operation including monitoring, scaling across multiple machines, and
|
||||
creating a custom theme for your Nextcloud server.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
considerations_on_monitoring
|
||||
scaling_multiple_machines.rst
|
||||
|
||||
@ -1,141 +0,0 @@
|
||||
================================
|
||||
Scaling across multiple machines
|
||||
================================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:hidden:
|
||||
|
||||
This document will cover the reference architecture for the Nextcloud Scale Out
|
||||
model for a single datacenter implementation. The document will focus on the
|
||||
three main elements of an Nextcloud deployment:
|
||||
|
||||
* Application layer
|
||||
* Database Layer
|
||||
* Storage Layer
|
||||
|
||||
At each layer the goal is to provide the ability to scale, and providing a high
|
||||
availability while maintaining the needed level of performance.
|
||||
|
||||
Application layer
|
||||
-----------------
|
||||
|
||||
For the application layer of this reference architecture we used Oracle
|
||||
Enterprise Linux as the front end servers to host the Nextcloud code. In this
|
||||
instance we made ``httpd`` a permissive domain, allowing it to operate within the
|
||||
SELinux environment. In this example we also used the standard directory
|
||||
structure placing the Nextcloud code in the Apache root directory. The
|
||||
following components were installed on each application server:
|
||||
|
||||
* Apache
|
||||
* PHP 5.6.x
|
||||
* PHP-GD
|
||||
* PHP-XML
|
||||
* PHP-MYSQL
|
||||
* PHP-CURL
|
||||
|
||||
Also required is the PHP smbclient module or smbclient (see
|
||||
:doc:`../configuration_files/external_storage/smb`).
|
||||
|
||||
It is also worth mentioning that the appropriate exceptions where made in the
|
||||
firewall to allow the Nextcloud traffic (for the purpose of testing we
|
||||
enable both encrypted SSL via port 443 and unencrypted via port 80).
|
||||
|
||||
The next step was to generate and import the needed SSL certificates following
|
||||
the standard process in the OEL documentation.
|
||||
|
||||
The next step is to create a scalable environment at the application layer,
|
||||
which introduces the load balancer. Because the application servers here are
|
||||
stateless, simply taking the configuration above and replicating (once
|
||||
configured with storage and database connections) and placing behind a load
|
||||
balancer will provide a scalable and highly available environment.
|
||||
For this purpose we chose HAProxy and configured it for HTTPS traffic following
|
||||
the documentation found here `http://haproxy.1wt.eu/#doc1.5
|
||||
<http://haproxy.1wt.eu/#doc1.5>`_
|
||||
|
||||
It is worth noting that this particular load balancer is not required, and the use of
|
||||
any commercial load balancer (i.e. F5) will work here. It is also worth noting
|
||||
that the HAProxy servers were setup with a heartbeat and IP Shift to failover
|
||||
the IP address should one fail.
|
||||
|
||||
.. image:: ../images/scaling-1.png
|
||||
:width: 3.4937in
|
||||
:height: 4.5134in
|
||||
|
||||
.. Session Management (this section is a WIP pending testing based on customer feedback).
|
||||
|
||||
.. The load balancer is to be configured to spread the workload across the various
|
||||
.. Nextcloud application servers, with details to be filled in around session
|
||||
.. management upon further testing.
|
||||
|
||||
Database layer
|
||||
--------------
|
||||
|
||||
For the purposes of this example, we have chosen a MySQL cluster using the NDB
|
||||
Storage engine. The cluster was configured based on the documentation found
|
||||
here `http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster.html
|
||||
<http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster.html>`_ with a sample
|
||||
looking like this:
|
||||
|
||||
.. image:: ../images/scaling-2.png
|
||||
:width: 6in
|
||||
:height: 3.0673in
|
||||
|
||||
Taking a closer look at the database architecture, we have created redundant
|
||||
MySQL NDB Management nodes for redundancy and we have configured 3 NDB
|
||||
SQL/Storage nodes across which we are able to spread the database traffic. All
|
||||
of the clients (Nextcloud Application Servers) will connect to the database via
|
||||
the My SQL Proxy. It is worth noting that MySQL proxy is still in beta and that using
|
||||
another load balancing method like HAProxy or F5 is supported, in that you will
|
||||
be distributing traffic among the various SQL/Storage nodes. Here, we simply
|
||||
swap out the MySQL Proxy for a properly configured HAProxy giving us the
|
||||
following:
|
||||
|
||||
.. image:: ../images/scaling-3.png
|
||||
:width: 6in
|
||||
:height: 0.7311in
|
||||
|
||||
In this example we have also added a second HAProxy server with Heartbeat to prevent any single point of failure.
|
||||
We have also implemented NIC bonding to load balance the traffic across multiple physical NICs.
|
||||
|
||||
Storage layer
|
||||
-------------
|
||||
|
||||
Storage was deployed using the Red Hat Storage server with the GlusterFS
|
||||
(pre-configured as part of the Red Hat Storage Server offering).
|
||||
|
||||
The Red Hat Storage Servers where configured based on documentation found here
|
||||
`https://access.redhat.com/site/documentation/en-US/Red_Hat_Storage/2.0/html/Administration_Guide/Admin_Guide_Part_1.html
|
||||
<https://access.redhat.com/site/documentation/en-US/Red_Hat_Storage/2.0/html/Administration_Guide/Admin_Guide_Part_1.html>`_
|
||||
|
||||
For the purposes of scale and high availability we configured a distributed
|
||||
replicated volume with IP Failover. The storage was configured on a separate
|
||||
subnet with bonded NICs at the application server level. We have chosen to
|
||||
address the storage using NFS, and for high availability we have chosen to
|
||||
implement IP Failover of the storage as documented here
|
||||
`https://access.redhat.com/site/documentation/en-US/Red_Hat_Storage/2.0/html/Administration_Guide/ch09s04.html
|
||||
<https://access.redhat.com/site/documentation/en-US/Red_Hat_Storage/2.0/html/Administration_Guide/ch09s04.html>`_
|
||||
|
||||
.. image:: ../images/scaling-4.png
|
||||
:width: 3.8693in
|
||||
:height: 3.6272in
|
||||
|
||||
We chose to deploy the storage in this fashion to address both HA and
|
||||
extensibility of the storage, along with managing performance by simply adding
|
||||
additional bricks to the storage volume, back-ended by additional physical
|
||||
disk.
|
||||
|
||||
It is worth noting that several options are available for storage configuration
|
||||
(such as striped replicated volumes). A discussion around the type of IO
|
||||
performance required and the needed HA configuration needs to take place to
|
||||
understand the best possible option here.
|
||||
|
||||
If we add up the parts, we have the following:
|
||||
|
||||
* An application layer that supports dynamic expansion through the addition of additional servers and provides HA behind a load balancer
|
||||
* A database layer that can also be scaled through the addition of additional SQL/Storage nodes and will provide HA behind a load balancer
|
||||
* A storage layer that can dynamically expand to meet storage needs, will scale based on backend hardware, and provides HA via IP Failover
|
||||
|
||||
.. image:: ../images/scaling-5.png
|
||||
:width: 4.4937in
|
||||
:height: 5.2134in
|
||||
@ -1,6 +1,13 @@
|
||||
{
|
||||
"minimum-stability": "dev",
|
||||
"repositories": [
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/juliushaertl/reflection.git"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"juliushaertl/phpdoc-to-rst": "dev-master"
|
||||
"juliushaertl/phpdoc-to-rst": "dev-php7.0",
|
||||
"phpdocumentor/reflection": "dev-php7.0"
|
||||
}
|
||||
}
|
||||
|
||||
@ -39,6 +39,6 @@ $apiDocBuilder = new ApiDocBuilder($nextcloudSource, $destinationDirectory);
|
||||
$apiDocBuilder->setVerboseOutput(true);
|
||||
$apiDocBuilder->addExtension(\JuliusHaertl\PHPDocToRst\Extension\InterfaceImplementors::class);
|
||||
$apiDocBuilder->addExtension(\JuliusHaertl\PHPDocToRst\Extension\NoPrivateExtension::class);
|
||||
$apiDocBuilder->addExtension(\JuliusHaertl\PHPDocToRst\Extension\GithubLocationExtension::class, [__DIR__ . '/server/', 'https://github.com/nextcloud/server', 'master']);
|
||||
$apiDocBuilder->addExtension(\JuliusHaertl\PHPDocToRst\Extension\GithubLocationExtension::class, [__DIR__ . '/server/', 'https://github.com/nextcloud/server', 'stable13']);
|
||||
$apiDocBuilder->build();
|
||||
|
||||
|
||||
14
conf.py
@ -1,9 +1,15 @@
|
||||
# global configuration for every documentation added at the end
|
||||
|
||||
import os
|
||||
import os, sys, datetime
|
||||
|
||||
dir_path = os.path.dirname(os.path.realpath(__file__))
|
||||
sys.path.insert(0, os.path.abspath(dir_path + '/_ext'))
|
||||
now = datetime.datetime.now()
|
||||
|
||||
extensions = ['edit_on_github']
|
||||
|
||||
# General information about the project.
|
||||
copyright = u'2012-2017, The Nextcloud developers'
|
||||
copyright = str(now.year) + ' Nextcloud GmbH'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
@ -14,7 +20,6 @@ version = '13'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '13'
|
||||
|
||||
|
||||
# substitutions go here
|
||||
rst_epilog = '.. |version| replace:: %s' % version
|
||||
|
||||
@ -22,3 +27,6 @@ html_context = {
|
||||
'doc_versions': ['11', '12', '13'],
|
||||
'current_doc': os.path.basename(os.getcwd()),
|
||||
}
|
||||
|
||||
edit_on_github_project = 'nextcloud/documentation'
|
||||
edit_on_github_branch = 'master'
|
||||
|
||||
@ -10,13 +10,19 @@ The CSS files reside in the **css/** folder and should be included in the templa
|
||||
|
||||
<?php
|
||||
// include one file
|
||||
style('myapp', 'style'); // adds css/style.css
|
||||
style('myapp', 'style'); // adds css/style.(s)css
|
||||
|
||||
// include multiple files for the same app
|
||||
style('myapp', array('style', 'navigation')); // adds css/style.css, css/navigation.css
|
||||
style('myapp', array('style', 'navigation')); // adds css/style.(s)css, css/navigation.(s)css
|
||||
|
||||
// include vendor file (also allows array syntax)
|
||||
vendor_style('myapp', 'style'); // adds vendor/style.css
|
||||
vendor_style('myapp', 'style'); // adds vendor/style.(s)css
|
||||
|
||||
.. note:: Since the version 12 of Nextcloud, we support ``SCSS`` natively.
|
||||
You can migrate your files by simply renaming your ``.css`` files to ``.scss``.
|
||||
The server will automatically compile, cache and and serve it.
|
||||
The priority goes to the scss file. So having two file with the same name and a ``scss`` & ``css`` extension
|
||||
will ensure a retro compatibility with <12 versions as scss files will be ignored by the server.
|
||||
|
||||
Web Components go into the **component/** folder and can be imported like this:
|
||||
|
||||
|
||||
@ -832,7 +832,10 @@ To do that create a new file called **ownnotes/tests/Integration/NoteIntegration
|
||||
|
||||
use OCA\OwnNotes\Db\Note;
|
||||
|
||||
class NoteIntregrationTest extends TestCase {
|
||||
/**
|
||||
* @group DB
|
||||
*/
|
||||
class NoteIntegrationTest extends TestCase {
|
||||
|
||||
private $controller;
|
||||
private $mapper;
|
||||
|
||||
56
developer_manual/client_apis/LoginFlow/index.rst
Normal file
@ -0,0 +1,56 @@
|
||||
.. _loginflowindex:
|
||||
|
||||
==========
|
||||
Login Flow
|
||||
==========
|
||||
|
||||
This document provides a quick overview of the new login flow that should be used by clients to obtain
|
||||
login credentials. This will assure that each client gets it own set of credentials. This has several advantages:
|
||||
|
||||
1. The client never stores the password of the user
|
||||
2. The user can revoke on a per client basis from the web
|
||||
|
||||
Opening the webview
|
||||
-------------------
|
||||
|
||||
The client should open a webview to :code:`<server>/index.php/login/flow`. Be sure to set the :code:`OCS-APIREQUEST`
|
||||
header to :code:`true`.
|
||||
|
||||
The client will register an URL handler to catch urls of the :code:`nc` protocol. This is required to obtain the
|
||||
credentials in the final stage.
|
||||
|
||||
This should be a one time webview. Which means:
|
||||
* There should be no cookies set when creating the webview
|
||||
* Passwords should not be stored
|
||||
* No state should be preserved after the webview has terminated
|
||||
|
||||
To have a good user experince please consider the following things:
|
||||
* set a proper :code:`ACCEPT_LANGUAGE` header
|
||||
* set a proper :code:`USER_AGENT` header
|
||||
|
||||
|
||||
Login in the user
|
||||
-----------------
|
||||
|
||||
The user will now see a webpage telling them they will grant access to :code:`USER_AGENT`. When they follow the steps
|
||||
they will be asked to login. If they have two factor authentication enabled they will require this to login. But since
|
||||
this is all in the webview itself the client does not need to care about this.
|
||||
|
||||
|
||||
Obtaining the login credentials
|
||||
-------------------------------
|
||||
|
||||
On the final login the server will do a redirect to a url of the following format:
|
||||
|
||||
.. code::
|
||||
|
||||
nc://login/server:<server>&user:<username>&password:<password>
|
||||
|
||||
* server: The address of the server to connect to. The server may specify a protocol (http or https). If no protocol is specified the client will assume https.
|
||||
* username: The username that the client must use to login
|
||||
* password: The password that the client must use to login and store securely
|
||||
|
||||
This information will be used by the client to create a new account.
|
||||
After this the webview is destroyed including all the state the webview holds.
|
||||
|
||||
.. note:: On Nextcloud 12 the returned server is just the server address without any possible subfolder. This is corrected in Nextcloud 13.
|
||||
@ -91,7 +91,7 @@ The following properties are supported:
|
||||
- :code:`{http://owncloud.org/ns}owner-display-name` The display name of the owner of a shared file
|
||||
- :code:`{http://owncloud.org/ns}share-types`
|
||||
- :code:`{http://owncloud.org/ns}checksums`
|
||||
- :code:`{http://owncloud.org/ns}has-preview`
|
||||
- :code:`{http://nextcloud.org/ns}has-preview`
|
||||
- :code:`{http://owncloud.org/ns}size` Unlike :code:`getcontentlength`, this property also works for folders reporting the size of everything in the folder.
|
||||
|
||||
Getting properties for just the folder
|
||||
|
||||
215
developer_manual/client_apis/WebDAV/search.rst
Normal file
@ -0,0 +1,215 @@
|
||||
.. _webdavsearch:
|
||||
|
||||
==================
|
||||
WebDAV Search
|
||||
==================
|
||||
|
||||
Nextcloud implements rfc5323_ WebDAV search to allow clients to search for files on the server.
|
||||
WebDAV search allows for fairly complex search queries with filtering and sorting on multiple properties.
|
||||
|
||||
This document describes how to use WebDAV search with a Nextcloud server and provides some example queries,
|
||||
full details of the api can be found at rfc5323_.
|
||||
|
||||
Making search requests
|
||||
----------------------
|
||||
|
||||
Search requests can be made by sending a :code:`SEARCH` http request to :code:`cloud.example.com/remote.php/dav`
|
||||
with a content type of :code:`text/xml` and the query as xml in the request body.
|
||||
|
||||
For example, to search for text files for the user 'test':
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
curl -u username:password 'https://cloud.example.com/remote.php/dav/files/username/folder' -X SEARCH -u test:test -H "content-Type: text/xml" --data '<?xml version="1.0" encoding="UTF-8"?>
|
||||
<d:searchrequest xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns">
|
||||
<d:basicsearch>
|
||||
<d:select>
|
||||
<d:prop>
|
||||
<oc:fileid/>
|
||||
<d:displayname/>
|
||||
<d:getcontenttype/>
|
||||
<d:getetag/>
|
||||
<oc:size/>
|
||||
</d:prop>
|
||||
</d:select>
|
||||
<d:from>
|
||||
<d:scope>
|
||||
<d:href>/files/test</d:href>
|
||||
<d:depth>infinity</d:depth>
|
||||
</d:scope>
|
||||
</d:from>
|
||||
<d:where>
|
||||
<d:like>
|
||||
<d:prop>
|
||||
<d:getcontenttype/>
|
||||
</d:prop>
|
||||
<d:literal>text/%</d:literal>
|
||||
</d:like>
|
||||
</d:where>
|
||||
<d:orderby/>
|
||||
</d:basicsearch>
|
||||
</d:searchrequest>'
|
||||
|
||||
Supported DAV properties
|
||||
------------------------
|
||||
|
||||
The following DAV properties are supported for use in either :code:`select`, :code:`where` and :code:`orderby`,
|
||||
not all properties can be used for each operation.
|
||||
|
||||
+----------------------------------------------+---------------------------------+------------+------------+----------+----------+
|
||||
| Property name | Description | Selectable | Searchable | Sortable | Type |
|
||||
+==============================================+=================================+============+============+==========+==========+
|
||||
| {DAV:}displayname | File name | ✓ | ✓ | ✓ | String |
|
||||
+----------------------------------------------+---------------------------------+------------+------------+----------+----------+
|
||||
| {DAV:}getcontenttype | Mime type | ✓ | ✓ | ✓ | String |
|
||||
+----------------------------------------------+---------------------------------+------------+------------+----------+----------+
|
||||
| {DAV:}getlastmodified | Modified date | ✓ | ✓ | ✓ | Datetime |
|
||||
+----------------------------------------------+---------------------------------+------------+------------+----------+----------+
|
||||
| {http://owncloud.org/ns}size | File size or folder size | ✓ | ✓ | ✓ | Integer |
|
||||
+----------------------------------------------+---------------------------------+------------+------------+----------+----------+
|
||||
| {http://owncloud.org/ns}favorite | Favorite status | ✓ | ✓ | ✓ | Boolean |
|
||||
+----------------------------------------------+---------------------------------+------------+------------+----------+----------+
|
||||
| {http://owncloud.org/ns}fileid | Nextcloud file id | ✓ | ✓ |❌ | Integer |
|
||||
+----------------------------------------------+---------------------------------+------------+------------+----------+----------+
|
||||
| {DAV:}resourcetype | File or folder | ✓ |❌ |❌ | String |
|
||||
+----------------------------------------------+---------------------------------+------------+------------+----------+----------+
|
||||
| {DAV:}getcontentlength | File size, not for folders | ✓ |❌ |❌ | String |
|
||||
+----------------------------------------------+---------------------------------+------------+------------+----------+----------+
|
||||
| {http://owncloud.org/ns}checksums | Stored checksums for the file | ✓ |❌ |❌ | String |
|
||||
+----------------------------------------------+---------------------------------+------------+------------+----------+----------+
|
||||
| {http://owncloud.org/ns}permissions | File permissions | ✓ |❌ |❌ | String |
|
||||
+----------------------------------------------+---------------------------------+------------+------------+----------+----------+
|
||||
| {DAV:}getetag | File etag | ✓ |❌ |❌ | String |
|
||||
+----------------------------------------------+---------------------------------+------------+------------+----------+----------+
|
||||
| {http://owncloud.org/ns}owner-id | File owner | ✓ |❌ |❌ | String |
|
||||
+----------------------------------------------+---------------------------------+------------+------------+----------+----------+
|
||||
| {http://owncloud.org/ns}owner-display-name | File owner display name | ✓ |❌ |❌ | String |
|
||||
+----------------------------------------------+---------------------------------+------------+------------+----------+----------+
|
||||
| {http://owncloud.org/ns}data-fingerprint | Fingerprint for recovery status | ✓ |❌ |❌ | String |
|
||||
+----------------------------------------------+---------------------------------+------------+------------+----------+----------+
|
||||
| {http://nextcloud.org/ns}has-preview | Preview status | ✓ |❌ |❌ | Boolean |
|
||||
+----------------------------------------------+---------------------------------+------------+------------+----------+----------+
|
||||
|
||||
Search scope
|
||||
------------
|
||||
|
||||
All search queries are scoped to a single folder relative to the dav root.
|
||||
At the moment only search queries for files are supported meaning the the scope should always start with :code:`files/$username`.
|
||||
|
||||
Inside the user's files, any existing folder can be used as search scope.
|
||||
|
||||
Examples search bodies
|
||||
----------------------
|
||||
|
||||
Search for all plain text files in the folder :code:`Documents`, sorted by size.
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<d:searchrequest xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns">
|
||||
<d:basicsearch>
|
||||
<d:select>
|
||||
<d:prop>
|
||||
<d:displayname/>
|
||||
</d:prop>
|
||||
</d:select>
|
||||
<d:from>
|
||||
<d:scope>
|
||||
<d:href>/files/test/Documents</d:href>
|
||||
<d:depth>infinity</d:depth>
|
||||
</d:scope>
|
||||
</d:from>
|
||||
<d:where>
|
||||
<d:like>
|
||||
<d:prop>
|
||||
<d:getcontenttype/>
|
||||
</d:prop>
|
||||
<d:literal>text/%</d:literal>
|
||||
</d:like>
|
||||
</d:where>
|
||||
<d:orderby>
|
||||
<d:prop>
|
||||
<oc:size/>
|
||||
</d:prop>
|
||||
<d:ascending/>
|
||||
</d:orderby>
|
||||
</d:basicsearch>
|
||||
</d:searchrequest>
|
||||
|
||||
Get a file by id.
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<d:searchrequest xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns">
|
||||
<d:basicsearch>
|
||||
<d:select>
|
||||
<d:prop>
|
||||
<d:displayname/>
|
||||
</d:prop>
|
||||
</d:select>
|
||||
<d:from>
|
||||
<d:scope>
|
||||
<d:href>/files/test</d:href>
|
||||
<d:depth>infinity</d:depth>
|
||||
</d:scope>
|
||||
</d:from>
|
||||
<d:where>
|
||||
<d:like>
|
||||
<d:prop>
|
||||
<d:fileid/>
|
||||
</d:prop>
|
||||
<d:literal>12345</d:literal>
|
||||
</d:like>
|
||||
</d:where>
|
||||
<d:orderby/>
|
||||
</d:basicsearch>
|
||||
</d:searchrequest>
|
||||
|
||||
Get all png and jpg files over 10MB.
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<d:searchrequest xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns">
|
||||
<d:basicsearch>
|
||||
<d:select>
|
||||
<d:prop>
|
||||
<d:displayname/>
|
||||
</d:prop>
|
||||
</d:select>
|
||||
<d:from>
|
||||
<d:scope>
|
||||
<d:href>/files/test</d:href>
|
||||
<d:depth>infinity</d:depth>
|
||||
</d:scope>
|
||||
</d:from>
|
||||
<d:where>
|
||||
<d:and>
|
||||
<d:or>
|
||||
<d:eq>
|
||||
<d:prop>
|
||||
<d:getcontenttype/>
|
||||
</d:prop>
|
||||
<d:literal>image/png</d:literal>
|
||||
</d:eq>
|
||||
<d:eq>
|
||||
<d:prop>
|
||||
<d:getcontenttype/>
|
||||
</d:prop>
|
||||
<d:literal>image/jpg</d:literal>
|
||||
</d:eq>
|
||||
</d:or>
|
||||
<d:gt>
|
||||
<d:prop>
|
||||
<oc:size/>
|
||||
</d:prop>
|
||||
<d:literal>10000000</d:literal>
|
||||
</d:gt>
|
||||
</d:and>
|
||||
</d:where>
|
||||
<d:orderby/>
|
||||
</d:basicsearch>
|
||||
</d:searchrequest>
|
||||
|
||||
.. _rfc5323: _https://tools.ietf.org/html/rfc5323
|
||||
@ -10,7 +10,8 @@ WebDAV
|
||||
------
|
||||
WebDAV is the main api for file related operations, it supports listing directories, downloading an uploading files, manipulating tags and favorites and more.
|
||||
|
||||
An overview of how to use the various WebDAV api's can be found at :doc:`WebDAV/index`
|
||||
An overview of how to use the various WebDAV api's can be found at :doc:`WebDAV/index`, additionally Nextcloud implements rfc5323_ to allow searching the filesystem
|
||||
more information about how to use WebDAV search can be found at :doc:`WebDAV/search`.
|
||||
|
||||
|
||||
OCS
|
||||
@ -23,11 +24,20 @@ Other OCS API documentations:
|
||||
* `Notifications API <https://github.com/nextcloud/notifications/blob/master/docs/ocs-endpoint-v2.md>`_
|
||||
* `Notifications API - Register a device for push notifications <https://github.com/nextcloud/notifications/blob/5a2d3607952bad675e4057620a9c7de8a7f84f0b/docs/push-v3.md>`_
|
||||
|
||||
.. _rfc5323: _https://tools.ietf.org/html/rfc5323
|
||||
|
||||
Login Flow
|
||||
----------
|
||||
|
||||
Clients can obtain an apptoken via the login flow. See :doc:`LoginFlow/index`
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:hidden:
|
||||
|
||||
WebDAV/index
|
||||
WebDAV/search
|
||||
OCS/index
|
||||
LoginFlow/index
|
||||
|
||||
|
||||
@ -29,7 +29,7 @@ from conf import *
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be extensions
|
||||
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||
extensions = ['sphinxcontrib.phpdomain', 'sphinx.ext.todo', 'rst2pdf.pdfbuilder', 'sphinx.ext.intersphinx']
|
||||
extensions += ['sphinxcontrib.phpdomain', 'sphinx.ext.todo', 'rst2pdf.pdfbuilder', 'sphinx.ext.intersphinx']
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['../_shared_assets/templates']
|
||||
@ -303,6 +303,8 @@ intersphinx_mapping = {
|
||||
'user_manual': ('https://docs.nextcloud.com/server/%s/user_manual/' % (version), '../user_manual/_build/html/com/objects.inv'),
|
||||
}
|
||||
|
||||
current_docs = 'developer_manual'
|
||||
|
||||
from sphinx.builders.html import StandaloneHTMLBuilder
|
||||
StandaloneHTMLBuilder.supported_image_types = [
|
||||
'image/svg+xml',
|
||||
|
||||
@ -53,6 +53,10 @@ The output defaults to XML. If you want to get JSON append this to the URL::
|
||||
|
||||
?format=json
|
||||
|
||||
Or set the proper Accept header::
|
||||
|
||||
Accept: application/json
|
||||
|
||||
Output from the application is wrapped inside a **data** element:
|
||||
|
||||
**XML**:
|
||||
|
||||
@ -109,6 +109,8 @@ Just insert the new created picture by using the unchanged name of the old pictu
|
||||
|
||||
The app icons can also be overwritten in a theme. To change for example the app icon of the activity app you need to overwrite it by saving the new image to …/nextcloud/themes/default/apps/activity/img/activity.svg.
|
||||
|
||||
After overwriting the icons, it may be necessary to update the image cache. This is done by executing ``sudo -u www-data php occ maintenance:theme:update``
|
||||
|
||||
Changing favicon
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
|
||||
2
go.php
@ -28,13 +28,13 @@ $mapping = array(
|
||||
'admin-code-integrity' => '/admin_manual/issues/code_signing.html',
|
||||
'admin-setup-well-known-URL' => '/admin_manual/issues/general_troubleshooting.html#service-discovery',
|
||||
'admin-backup' => '/admin_manual/maintenance/backup.html',
|
||||
'admin-monitoring' => '/admin_manual/operations/considerations_on_monitoring.html',
|
||||
'admin-sso' => '/admin_manual/configuration_server/sso_configuration.html',
|
||||
'admin-php-opcache' => '/admin_manual/configuration_server/server_tuning.html#enable-php-opcache',
|
||||
'admin-mysql-utf8mb4' => '/admin_manual/configuration_database/mysql_4byte_support.html',
|
||||
'admin-update' => '/admin_manual/maintenance/update.html',
|
||||
'admin-theming-icons' => '/admin_manual/configuration_server/theming.html#theming-of-icons',
|
||||
|
||||
'developer-manual' => '/developer_manual',
|
||||
'developer-code-integrity'=> '/developer_manual/app/code_signing.html',
|
||||
'developer-theming' => '/developer_manual/core/theming.html',
|
||||
|
||||
|
||||
246
index.html
Normal file
@ -0,0 +1,246 @@
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Nextcloud Documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="https://docs.nextcloud.org/server/9/user_manual/_static/main.min.css" type="text/css" />
|
||||
<link rel="stylesheet" href="https://docs.nextcloud.org/server/9/user_manual/_static/styles.css" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '9',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="https://docs.nextcloud.org/server/9/user_manual/_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="https://docs.nextcloud.org/server/9/user_manual/_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="https://docs.nextcloud.org/server/9/user_manual/_static/doctools.js"></script>
|
||||
<script type="text/javascript" src="https://docs.nextcloud.org/server/9/user_manual/_static/js/jquery-1.11.0.min.js"></script>
|
||||
<script type="text/javascript" src="https://docs.nextcloud.org/server/9/user_manual/_static/js/jquery-fix.js"></script>
|
||||
<script type="text/javascript" src="https://docs.nextcloud.org/server/9/user_manual/_static/bootstrap-3.1.0/js/bootstrap.min.js"></script>
|
||||
<script type="text/javascript" src="https://docs.nextcloud.org/server/9/user_manual/_static/bootstrap-sphinx.js"></script>
|
||||
<meta charset='utf-8'>
|
||||
<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
|
||||
<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="theme-color" content="#1d2d44">
|
||||
<link rel="shortcut icon" href="https://nextcloud.com/wp-content/themes/next/assets/img/common/favicon.png" />
|
||||
<link rel="apple-touch-icon-precomposed" href="https://nextcloud.com/wp-content/themes/next/assets/img/common/favicon.png" />
|
||||
<!-- Piwik -->
|
||||
<script type="text/javascript">
|
||||
var _paq = _paq || [];
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="//stats.nextcloud.com/";
|
||||
_paq.push(['setTrackerUrl', u+'piwik.php']);
|
||||
_paq.push(['setSiteId', 3]);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
</script>
|
||||
<noscript><p><img src="//stats.nextcloud.com/piwik.php?idsite=3" style="border:0;" alt="" /></p></noscript>
|
||||
<!-- End Piwik Code -->
|
||||
</head>
|
||||
<body role="document">
|
||||
|
||||
<header class="banner navbar navbar-default navbar-static-top" role="banner">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="brand" href="http://nextcloud.com/" rel="home" title="Nextcloud.com"><img class="logo" src="https://docs.nextcloud.org/server/9/user_manual/_static/img/logo.svg" itemprop="logo"></a>
|
||||
</div>
|
||||
|
||||
<nav class="collapse navbar-collapse" role="navigation">
|
||||
<ul id="menu-header" class="nav navbar-nav">
|
||||
<li><a href="https://demo.nextcloud.com/">Demo</a></li>
|
||||
<li><a href="https://nextcloud.com/news/">News</a></li>
|
||||
<li><a href="https://nextcloud.com/features/">Features</a></li>
|
||||
<li><a href="https://nextcloud.com/about/">About us</a></li>
|
||||
<li><a href="https://nextcloud.com/contribute/">Get involved</a></li>
|
||||
<li><a href="https://nextcloud.com/support/">Support</a></li>
|
||||
<li><a href="https://nextcloud.com/enterprise/">Enterprise</a></li>
|
||||
<li class="menu-install"><a href="https://nextcloud.com/install/">Download</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="wrap container not-front">
|
||||
<div class="content row">
|
||||
<main class="main">
|
||||
<div class="col-md-12">
|
||||
<div class="page-content">
|
||||
<div class="section" id="nextcloud-documentation-overview">
|
||||
<h1>Nextcloud Documentation Overview<a class="headerlink" href="#nextcloud-documentation-overview" title="Permalink to this headline">¶</a></h1>
|
||||
<div class="section" id="server">
|
||||
<h1>Nextcloud Server<a class="headerlink" href="#server" title="Permalink to this headline">¶</a></h1>
|
||||
<div class="section" id="getting-Nextcloud">
|
||||
<p>You can download and install Nextcloud on your own Linux server, use the Web
|
||||
Installer to install it on shared Web hosting, try some prefab cloud or virtual
|
||||
machine images, or sign up for hosted Nextcloud services. See the
|
||||
<a class="reference external" href="https://nextcloud.com/install/">Get Started</a>
|
||||
page for more information.</p>
|
||||
</div>
|
||||
<div class="section" id="nextcloud-13">
|
||||
<h2>Nextcloud 13<a class="headerlink" href="#nextcloud-13" title="Permalink to this headline">¶</a></h2>
|
||||
<p>This documents the <em>latest production</em> version of Nextcloud.</p>
|
||||
<ul class="simple">
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/server/13/user_manual/">User Manual</a>
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/server/13/admin_manual/">Administration Manual</a>
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/server/13/developer_manual/">Developer Manual</a>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="nextcloud-12">
|
||||
<h2>Nextcloud 12<a class="headerlink" href="#nextcloud-12" title="Permalink to this headline">¶</a></h2>
|
||||
<p>This documents the <em>previous production</em> version of Nextcloud.</p>
|
||||
<ul class="simple">
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/server/12/user_manual/">User Manual</a>
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/server/12/admin_manual/">Administration Manual</a>
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/server/12/developer_manual/">Developer Manual</a>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="desktop">
|
||||
<h1>Nextcloud Desktop Client<a class="headerlink" href="#desktop" title="Permalink to this headline">¶</a></h1>
|
||||
<p>Once you have a Nextcloud Server running, you can connect to it with various <a class="reference external" href="https://nextcloud.com/install/#install-clients">clients like our mobile and desktop client.</a>
|
||||
Find documentation for the desktop client below.</p>
|
||||
<div class="section" id="desktop-23">
|
||||
<h2>Desktop 2.3<a class="headerlink" href="#desktop-23" title="Permalink to this headline">¶</a></h2>
|
||||
<p>This documents the <em>latest production</em> version of the Nextcloud desktop client.</p>
|
||||
<ul class="simple">
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/desktop/2.3">Manual</a>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="desktop-22">
|
||||
<h2>Desktop 2.2<a class="headerlink" href="#desktop-22" title="Permalink to this headline">¶</a></h2>
|
||||
<p>This documents the <em>previous</em> version of the Nextcloud desktop client.
|
||||
This version is no longer supported and users are encouraged to upgrade!</p>
|
||||
<ul class="simple">
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/desktop/2.2">Manual</a>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- client -->
|
||||
|
||||
<div class="section" id="nextcloud-older">
|
||||
<h1>Older Nextcloud server releases<a class="headerlink" href="#nextcloud-older" title="Permalink to this headline">¶</a></h1>
|
||||
<p>This documents the <em>older</em> versions of Nextcloud. These releases are no longer
|
||||
publicly maintained and users are strongly encouraged to upgrade to a maintained
|
||||
release or get access to long term security and stability updates through a
|
||||
<a href="https://nextcloud.com/enterprise">Nextcloud Subscription.</a></p>
|
||||
|
||||
<div class="section" id="nextcloud-11">
|
||||
<h2>Nextcloud 11<a class="headerlink" href="#nextcloud-11" title="Permalink to this headline">¶</a></h2>
|
||||
<ul class="simple">
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/server/11/user_manual/">User Manual</a>
|
||||
(<a class="reference external" href="https://docs.nextcloud.org/server/11/Nextcloud_User_Manual.pdf">Download PDF</a>)</li>
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/server/11/admin_manual/">Administration Manual</a>
|
||||
(<a class="reference external" href="https://docs.nextcloud.org/server/11/Nextcloud_Server_Administration_Manual.pdf">Download PDF</a>)</li>
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/server/11/developer_manual/">Developer Manual</a>
|
||||
(<a class="reference external" href="https://docs.nextcloud.org/server/11/NextcloudDeveloperManual.pdf">Download PDF</a>)</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="nextcloud-10">
|
||||
<h2>Nextcloud 10<a class="headerlink" href="#nextcloud-10" title="Permalink to this headline">¶</a></h2>
|
||||
<ul class="simple">
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/server/10/user_manual/">User Manual</a>
|
||||
(<a class="reference external" href="https://docs.nextcloud.org/server/10/Nextcloud_User_Manual.pdf">Download PDF</a>)</li>
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/server/10/admin_manual/">Administration Manual</a>
|
||||
(<a class="reference external" href="https://docs.nextcloud.org/server/10/Nextcloud_Server_Administration_Manual.pdf">Download PDF</a>)</li>
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/server/10/developer_manual/">Developer Manual</a>
|
||||
(<a class="reference external" href="https://docs.nextcloud.org/server/10/NextcloudDeveloperManual.pdf">Download PDF</a>)</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="nextcloud-9">
|
||||
<h2>Nextcloud 9<a class="headerlink" href="#nextcloud-9" title="Permalink to this headline">¶</a></h2>
|
||||
<ul class="simple">
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/server/9/user_manual/">User Manual</a>
|
||||
(<a class="reference external" href="https://docs.nextcloud.org/server/9/Nextcloud_User_Manual.pdf">Download PDF</a>)</li>
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/server/9/admin_manual/">Administration Manual</a>
|
||||
(<a class="reference external" href="https://docs.nextcloud.org/server/9/Nextcloud_Server_Administration_Manual.pdf">Download PDF</a>)</li>
|
||||
<li><a class="reference external" href="https://docs.nextcloud.org/server/9/developer_manual/">Developer Manual</a>
|
||||
(<a class="reference external" href="https://docs.nextcloud.org/server/9/NextcloudDeveloperManual.pdf">Download PDF</a>)</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- server -->
|
||||
|
||||
<div class="section" id="reporting-documentation-bugs-how-to-contribute">
|
||||
<h2>Reporting Documentation Bugs & How to Contribute<a class="headerlink" href="#reporting-documentation-bugs-how-to-contribute" title="Permalink to this headline">¶</a></h2>
|
||||
<p>If you find an error or omission in any of the manuals, we welcome your bug
|
||||
reports and contributions. Contribution to the documentation is very easy as
|
||||
the code is entirely <a href="https://github.com/nextcloud/documentation">in
|
||||
github and can be edited there online.</a></p>
|
||||
</div>
|
||||
</div><!-- nextcloud-documentation-overview -->
|
||||
</div><!-- page-content -->
|
||||
</div><!-- col-md-12 -->
|
||||
</main>
|
||||
</div><!-- content -->
|
||||
</div><!-- container -->
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 footer-social-icons">
|
||||
<p class="text-center"><a target="_blank" href="https://plus.google.com/104036748063781940910/about"><img width=50 src="https://docs.nextcloud.org/server/9/user_manual/_static/img/social/googleplus.svg" title="Follow us on Google Plus!" alt="Follow us on Google Plus!"></img></a>
|
||||
<a target="_blank" style="margin: 0 7px 0 14px;" href="https://www.facebook.com/Nextclouders"><img width=50 src="https://docs.nextcloud.org/server/9/user_manual/_static/img/social/facebook.svg" title="Like our facebook page!" alt="Like our facebook page!"></img></a>
|
||||
<a target="_blank" style="margin: 0 14px 0 7px;" href="https://twitter.com/Nextclouders"><img width=50 src="https://docs.nextcloud.org/server/9/user_manual/_static/img/social/twitter.svg" title="Subscribe to our twitter channel!" alt="Subscribe to our twitter channel!"></img></a>
|
||||
<a target="_blank" href="https://nextcloud.com/blogfeed"><img class="img-circle" width=50 src="https://docs.nextcloud.org/server/9/user_manual/_static/img/social/rss.svg" title="Subscribe to our news feed!" alt="Subscribe to our news feed!"></img></a>
|
||||
<a target="_blank" href="https://newsletter.nextcloud.com/"><img class="img-circle" width=50 src="https://docs.nextcloud.org/server/9/user_manual/_static/img/social/mail.svg" title="Subscribe to our newsletter!" alt="Subscribe to our newsletter!"></img></a></p>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
All documentation licensed under the <a href="https://creativecommons.org/licenses/by/3.0/us/">Creative Commons Attribution 3.0 Unported license</a>.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="content-info" role="contentinfo">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-2 col-sm-offset-1">
|
||||
<div class="footer-nav">
|
||||
<h4>About Nextcloud</h4>
|
||||
<ul id="menu-about" class="menu">
|
||||
<li><a href="https://nextcloud.com/about/">About us</a></li>
|
||||
<li><a href="https://nextcloud.com/contact/">Contact us</a></li>
|
||||
<li><a href="https://nextcloud.com/press/">Press</a></li>
|
||||
<li><a href="https://nextcloud.com/privacy/">Privacy policy</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-2 col-sm-offset-2">
|
||||
</div>
|
||||
<div class="col-sm-2 col-sm-offset-2">
|
||||
<div class="footer-nav">
|
||||
<h4>Interact</h4>
|
||||
<ul id="menu-interact" class="menu">
|
||||
<li class="menu-irc-channel"><a href="https://webchat.freenode.net/?channels=nextcloud">IRC Channel</a></li>
|
||||
<li class="menu-forums"><a href="https://help.nextcloud.com/">Forums</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12 footer-text">
|
||||
<p>
|
||||
© Copyright 2017, The Nextcloud developers. <small><a href="https://nextcloud.com/impressum">Legal Notice</a></small><br/>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@ -29,7 +29,7 @@ from conf import *
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be extensions
|
||||
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||
extensions = ['sphinx.ext.todo', 'rst2pdf.pdfbuilder', 'sphinx.ext.intersphinx']
|
||||
extensions += ['sphinx.ext.todo', 'rst2pdf.pdfbuilder', 'sphinx.ext.intersphinx']
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['../_shared_assets/templates']
|
||||
@ -304,3 +304,4 @@ intersphinx_mapping = {
|
||||
'developer_manual': ('https://docs.nextcloud.com/server/%s/developer_manual/' % (version), '../developer_manual/_build/html/com/objects.inv'),
|
||||
}
|
||||
|
||||
current_docs = 'user_manual'
|
||||
|
||||
@ -47,7 +47,7 @@ oldest files (files with the oldest timestamps from when they were deleted)
|
||||
until it meets the memory usage limit again.
|
||||
|
||||
Nextcloud checks the age of deleted files every time new files are added to the
|
||||
deleted files. By default, deleted files stay in the trash bin for 180 days. The
|
||||
deleted files. By default, deleted files stay in the trash bin for 30 days. The
|
||||
Nextcloud server administrator can adjust this value in the ``config.php`` file
|
||||
by setting the ``trashbin_retention_obligation`` value. Files older than the
|
||||
``trashbin_retention_obligation`` value will be deleted permanently.
|
||||
|
||||
@ -14,11 +14,10 @@ computer, it will flow across the others using these desktop sync clients.
|
||||
You will always
|
||||
have your latest files with you wherever you are.
|
||||
|
||||
Its usage is documented separately in the `Nextcloud/ownCloud Desktop Client Manual`_.
|
||||
Its usage is documented separately in the `Nextcloud Desktop Client Manual`_.
|
||||
|
||||
.. _`Nextcloud/ownCloud Desktop Client Manual`: https://doc.owncloud.org/desktop/2.2/
|
||||
.. _Nextcloud Desktop Client Manual: https://docs.nextcloud.org/
|
||||
.. _Nextcloud Sync Client: https://nextcloud.com/install/#install-clients
|
||||
.. _`Nextcloud Desktop Client Manual`: https://docs.nextcloud.com/desktop/
|
||||
.. _`Nextcloud Sync Client`: https://nextcloud.com/install/#install-clients
|
||||
|
||||
Mobile clients
|
||||
--------------
|
||||
@ -27,5 +26,5 @@ Visit your Personal page in your Nextcloud Web interface to find download links
|
||||
for Android and iOS mobile sync clients. Or, visit the `Nextcloud download page
|
||||
<https://nextcloud.com/install/>`_.
|
||||
|
||||
Visit the `Nextcloud documentation page <https://docs.nextcloud.org/>`_ to read
|
||||
Visit the `Nextcloud documentation page <https://docs.nextcloud.com/>`_ to read
|
||||
the user manuals.
|
||||
|
||||
@ -1,9 +1,10 @@
|
||||
===============================
|
||||
Encrypting your Nextcloud files
|
||||
===============================
|
||||
=============================================
|
||||
Encrypting your Nextcloud files on the server
|
||||
=============================================
|
||||
|
||||
Nextcloud includes an Encryption app, and when it is enabled by your Nextcloud
|
||||
administrator all of your Nextcloud data files are automatically encrypted.
|
||||
Nextcloud includes a server side Encryption app, and when it is enabled by
|
||||
your Nextcloud administrator all of your Nextcloud data files are automatically
|
||||
encrypted on the server.
|
||||
Encryption is server-wide, so when it is enabled you cannot choose to keep your
|
||||
files unencrypted. You don't have to do anything special, as it uses your
|
||||
Nextcloud login as the password for your unique private encryption key. Just log
|
||||
@ -23,8 +24,7 @@ it is better to use some other form of encryption such as file-level or whole
|
||||
disk encryption. Because the keys are kept on your Nextcloud server, it is
|
||||
possible for your Nextcloud admin to snoop in your files, and if the server is
|
||||
compromised the intruder may get access to your files. (Read
|
||||
`How Nextcloud uses encryption to protect your data
|
||||
<https://owncloud.org/blog/how-owncloud-uses-encryption-to-protect-your-data/>`_
|
||||
`Encryption in Nextcloud <https://nextcloud.com/blog/encryption-in-nextcloud/>`_
|
||||
to learn more.)
|
||||
|
||||
Encryption FAQ
|
||||
@ -34,7 +34,7 @@ How can encryption be disabled?
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The only way to disable encryption is to run the `"decrypt all"
|
||||
<https://docs.nextcloud.org/server/12/admin_manual/configuration_server/occ_command.html#encryption-label>`_.
|
||||
<https://docs.nextcloud.org/server/13/admin_manual/configuration_server/occ_command.html#encryption-label>`_.
|
||||
|
||||
.. TODO ON RELEASE: Update version number above on release
|
||||
|
||||
@ -44,8 +44,8 @@ Is it possible to disable encryption with the recovery key?
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Yes, *if* every user uses the `file recovery key
|
||||
<https://docs.nextcloud.com/server/12/admin_manual/configuration_files/encryption_configuration.html#enabling-users-file-recovery-keys>`_, `"decrypt all"
|
||||
<https://docs.nextcloud.org/server/12/admin_manual/configuration_server/occ_command.html#encryption-label>`_ will use it to decrypt all files.
|
||||
<https://docs.nextcloud.com/server/13/admin_manual/configuration_files/encryption_configuration.html#enabling-users-file-recovery-keys>`_, `"decrypt all"
|
||||
<https://docs.nextcloud.org/server/13/admin_manual/configuration_server/occ_command.html#encryption-label>`_ will use it to decrypt all files.
|
||||
|
||||
.. TODO ON RELEASE: Update version number above on release
|
||||
|
||||
@ -53,7 +53,7 @@ Can encryption be disabled without the user's password?
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
If you don't have the users password or `file recovery key
|
||||
<https://docs.nextcloud.com/server/12/admin_manual/configuration_files/encryption_configuration.html#enabling-users-file-recovery-keys>`_.
|
||||
<https://docs.nextcloud.com/server/13/admin_manual/configuration_files/encryption_configuration.html#enabling-users-file-recovery-keys>`_.
|
||||
|
||||
.. TODO ON RELEASE: Update version number above on release
|
||||
|
||||
|
||||
@ -29,7 +29,7 @@ from conf import *
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be extensions
|
||||
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||
extensions = ['sphinx.ext.todo', 'rst2pdf.pdfbuilder']
|
||||
extensions += ['sphinx.ext.todo', 'rst2pdf.pdfbuilder']
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['../_shared_assets/templates']
|
||||
@ -294,4 +294,6 @@ epub_copyright = u'2012-2017, Die Nextcloud Entwickler'
|
||||
#epub_tocdup = True
|
||||
|
||||
# Include todos?
|
||||
todo_include_todos = True
|
||||
todo_include_todos = True
|
||||
|
||||
current_docs = 'user_manual_de'
|
||||
|
||||