diff --git a/.gitignore b/.gitignore new file mode 100755 index 00000000..b4839ace --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +/* +!/pages +!/images +!/themes +!/Dockerfile +!/docker-compose.yml +!/dev/plugins diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..7f2f3d7d --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "themes/learn4"] + path = themes/learn4 + url = https://github.com/getgrav/grav-theme-learn4.git diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..38a1a730 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,4 @@ +language: bash + +script: + - bash tests/dead_links.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..7320578f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,89 @@ +FROM php:7.4-apache +LABEL maintainer="Andy Miller (@rhukster)" + +RUN usermod --uid 1000 www-data +RUN groupmod --gid 1000 www-data +# Enable Apache Rewrite + Expires Module +RUN a2enmod rewrite expires && \ + sed -i 's/ServerTokens OS/ServerTokens ProductOnly/g' \ + /etc/apache2/conf-available/security.conf + +# Install dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + unzip \ + libfreetype6-dev \ + libjpeg62-turbo-dev \ + libpng-dev \ + libyaml-dev \ + libzip4 \ + libzip-dev \ + zlib1g-dev \ + libicu-dev \ + g++ \ + git \ + cron \ + vim \ + && docker-php-ext-install opcache \ + && docker-php-ext-configure intl \ + && docker-php-ext-install intl \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install -j$(nproc) gd \ + && docker-php-ext-install zip \ + && rm -rf /var/lib/apt/lists/* + +# set recommended PHP.ini settings +# see https://secure.php.net/manual/en/opcache.installation.php +RUN { \ + echo 'opcache.memory_consumption=128'; \ + echo 'opcache.interned_strings_buffer=8'; \ + echo 'opcache.max_accelerated_files=4000'; \ + echo 'opcache.revalidate_freq=2'; \ + echo 'opcache.fast_shutdown=1'; \ + echo 'opcache.enable_cli=1'; \ + echo 'upload_max_filesize=128M'; \ + echo 'post_max_size=128M'; \ + echo 'expose_php=off'; \ + } > /usr/local/etc/php/conf.d/php-recommended.ini + +RUN pecl install apcu \ + && pecl install yaml-2.0.4 \ + && docker-php-ext-enable apcu yaml + +CMD ["sh", "-c", "usermod --uid 1000 www-data"] +CMD ["sh", "-c", "groupmod --gid 1000 www-data"] +# Set user to www-data +RUN chown www-data:www-data /var/www +USER www-data + +# Define Grav specific version of Grav or use latest stable +ARG GRAV_VERSION=latest + +# Install grav +WORKDIR /var/www +RUN curl -o grav-admin.zip -SL https://getgrav.org/download/core/grav-admin/${GRAV_VERSION} && \ + unzip grav-admin.zip && \ + mv -T /var/www/grav-admin /var/www/html && \ + rm grav-admin.zip + +# Install plugins +WORKDIR /var/www/html + +RUN bin/gpm install admin email feed git-sync langswitcher presentation shortcode-core anchors error flex-objects highlight login presentation-deckset tntsearch breadcrumbs external_links form image-captions markdown-notices problems + +# Create cron job for Grav maintenance scripts +RUN (crontab -l; echo "* * * * * cd /var/www/html;/usr/local/bin/php bin/grav scheduler 1>> /dev/null 2>&1") | crontab - + +# Return to root user +USER root + +# Copy init scripts +# COPY docker-entrypoint.sh /entrypoint.sh + +COPY --chown=1000:1000 themes/learn4 /var/www/html/user/themes/learn4 + +# provide container inside image for data persistence +VOLUME ["/var/www/html/backup", "/var/www/html/user/themes/yunohost-docs", "/var/www/html/logs", "/var/www/html/user/pages", "/var/www/html/user/config", "/var/www/html/user/images"] + +# ENTRYPOINT ["/entrypoint.sh"] +# CMD ["apache2-foreground"] +CMD ["sh", "-c", "cron && apache2-foreground"] diff --git a/README.md b/README.md new file mode 100644 index 00000000..1c49b201 --- /dev/null +++ b/README.md @@ -0,0 +1,39 @@ +# YunoHost Documentation + +* [Web Site](https://yunohost.org) +* Based on [Grav](https://getgrav.org/) + +Please report [issues on YunoHost bugtracker](https://github.com/YunoHost/issues/issues). + +# Contributing + +This repo use a **submodule** to provide the theme. So when you clone use: + +```shell +git clone --recursive https://github.com/YunoHost/doc.git +``` + + +You can refer to the page on [writing documentation](https://yunohost.org/write_documentation). + +If you know docker, you can run: + +``` +docker-compose up +``` + +## Regenerate the CSS + +We use scss to manage the CSS. If you want to change it, you must rebuild it. + +First install npm, then in the root folder of this repo, install sass: `npm install sass` + +Finally you can rebuild the CSS with (You can replace `expanded` by `compressed` if you want): + +```bash +./node_modules/sass/sass.js themes/yunohost-docs/scss:themes/yunohost-docs/css --style expanded +``` + +Source: +https://sass-lang.com/guide + diff --git a/config/site.yaml b/config/site.yaml new file mode 100644 index 00000000..d2ee8e42 --- /dev/null +++ b/config/site.yaml @@ -0,0 +1,17 @@ +title: 'YunoHost Documentation' +default_lang: en +author: + name: YunoHost + email: yunohost@yunohost.org +taxonomies: + - category + - tag +metadata: + description: 'YunoHost Documentation' +summary: + enabled: true + format: short + size: 300 + delimiter: '===' +redirects: null +routes: null diff --git a/config/system.yaml b/config/system.yaml new file mode 100644 index 00000000..ea42c300 --- /dev/null +++ b/config/system.yaml @@ -0,0 +1,218 @@ +absolute_urls: false +timezone: null +param_sep: ':' +wrapped_site: false +reverse_proxy_setup: false +force_ssl: false +force_lowercase_urls: true +custom_base_url: null +username_regex: '^[a-z0-9_-]{3,16}$' +pwd_regex: '(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}' +intl_enabled: true +http_x_forwarded: + protocol: true + host: false + port: true + ip: true +languages: + supported: + - en + - fr + - de + - es + - ar + - oc + - it + - ru + default_lang: en + include_default_lang: true + include_default_lang_file_extension: true + translations: true + translations_fallback: true + session_store_active: false + http_accept_language: true + override_locale: false + content_fallback: + en: 'fr,de,es' + de: 'en,fr,es' + es: 'en,fr,de' + pages_fallback_only: false +home: + alias: /home + hide_in_urls: true +pages: + type: regular + theme: yunohost-docs + order: + by: default + dir: asc + list: + count: 20 + dateformat: + default: null + short: 'jS M Y' + long: 'F jS \a\t g:ia' + publish_dates: true + process: + markdown: true + twig: false + twig_first: false + never_cache_twig: false + events: + page: true + twig: true + markdown: + extra: false + auto_line_breaks: false + auto_url_links: false + escape_markup: false + special_chars: + '>': gt + '<': lt + valid_link_attributes: + - rel + - target + - id + - class + - classes + types: + - html + - htm + - xml + - txt + - json + - rss + - atom + append_url_extension: null + expires: 604800 + cache_control: null + last_modified: false + etag: true + vary_accept_encoding: false + redirect_default_route: false + redirect_default_code: '302' + redirect_trailing_slash: true + ignore_files: + - .DS_Store + ignore_folders: + - .git + - .idea + ignore_hidden: true + hide_empty_folders: false + url_taxonomy_filters: true + frontmatter: + process_twig: false + ignore_fields: + - form + - forms +cache: + enabled: true + check: + method: file + driver: auto + prefix: g + purge_at: '0 4 * * *' + clear_at: '0 3 * * *' + clear_job_type: standard + clear_images_by_default: true + cli_compatibility: false + lifetime: 604800 + gzip: true + allow_webserver_gzip: false + redis: + socket: '0' + server: null + port: null + password: null + memcache: + server: null + port: null + memcached: + server: null + port: null +twig: + cache: true + debug: false + auto_reload: true + autoescape: false + undefined_functions: true + undefined_filters: true + umask_fix: false +assets: + css_pipeline: false + css_pipeline_include_externals: true + css_pipeline_before_excludes: true + css_minify: true + css_minify_windows: false + css_rewrite: true + js_pipeline: false + js_pipeline_include_externals: true + js_pipeline_before_excludes: true + js_minify: true + enable_asset_timestamp: false + collections: + jquery: 'system://assets/jquery/jquery-2.x.min.js' +errors: + display: 1 + log: true +log: + handler: file + syslog: + facility: local6 +debugger: + enabled: false + provider: clockwork + censored: false + shutdown: + close_connection: true + twig: true +images: + default_image_quality: 85 + cache_all: false + cache_perms: '0755' + debug: false + auto_fix_orientation: true + seofriendly: true + defaults: + loading: auto +media: + enable_media_timestamp: false + unsupported_inline_types: null + allowed_fallback_types: null + auto_metadata_exif: false + upload_limit: 2097152 +session: + enabled: true + initialize: true + timeout: 1800 + name: grav-site + uniqueness: path + secure: false + httponly: true + samesite: Lax + split: true + path: null +gpm: + releases: stable + proxy_url: null + method: auto + verify_peer: true + official_gpm_only: true +accounts: + type: regular + storage: file +flex: + cache: + index: + enabled: true + lifetime: 60 + object: + enabled: true + lifetime: 600 + render: + enabled: true + lifetime: 600 +strict_mode: + yaml_compat: true + twig_compat: true + blueprint_compat: true diff --git a/config/themes/yunohost-docs.yaml b/config/themes/yunohost-docs.yaml new file mode 100644 index 00000000..2415b341 --- /dev/null +++ b/config/themes/yunohost-docs.yaml @@ -0,0 +1,18 @@ +streams: + schemes: + theme: + type: ReadOnlyStream + prefixes: + '': [user/themes/yunohost-docs, user/themes/learn4] +enabled: true +production-mode: true +grid-size: grid-xl +github: + note: false + link: true + tree: 'https://github.com/yunohost/doc/blob/grav/' + commits: 'https://github.com/yunohost/doc/commits/grav/' +spectre: + exp: false + icons: false +top_level_version: true diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..31a9c4d7 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,18 @@ +version: "3" +services: + grav: + build: ./ + ports: + - 8000:80 + volumes: + - ./themes/yunohost-docs:/var/www/html/user/themes/yunohost-docs + - ./config:/var/www/html/user/config + - ./pages:/var/www/html/user/pages + - ./images:/var/www/html/user/images +# tntsearch: +# restart: "no" +# build: ./ +# volumes: +# - ./config:/var/www/html/user/config +# - ./pages:/var/www/html/user/pages +# command: bin/plugin tntsearch index diff --git a/images/Galette_1_en_Update.png b/images/Galette_1_en_Update.png new file mode 100644 index 00000000..faccaa40 Binary files /dev/null and b/images/Galette_1_en_Update.png differ diff --git a/images/Galette_1_fr_MAJ.png b/images/Galette_1_fr_MAJ.png new file mode 100644 index 00000000..1187ea06 Binary files /dev/null and b/images/Galette_1_fr_MAJ.png differ diff --git a/images/Galette_2_en_Passwd.png b/images/Galette_2_en_Passwd.png new file mode 100644 index 00000000..d6939306 Binary files /dev/null and b/images/Galette_2_en_Passwd.png differ diff --git a/images/Galette_2_fr_MdP.png b/images/Galette_2_fr_MdP.png new file mode 100644 index 00000000..05fe848a Binary files /dev/null and b/images/Galette_2_fr_MdP.png differ diff --git a/images/HedgeDoc-Logo.png b/images/HedgeDoc-Logo.png new file mode 100644 index 00000000..77aa3507 Binary files /dev/null and b/images/HedgeDoc-Logo.png differ diff --git a/images/Jirafeau_logo.jpg b/images/Jirafeau_logo.jpg new file mode 100644 index 00000000..35b106cb Binary files /dev/null and b/images/Jirafeau_logo.jpg differ diff --git a/images/Linuxfr.png b/images/Linuxfr.png new file mode 100644 index 00000000..de4f3e4e Binary files /dev/null and b/images/Linuxfr.png differ diff --git a/images/Mediawiki_screenshot.png b/images/Mediawiki_screenshot.png new file mode 100644 index 00000000..489a5a4d Binary files /dev/null and b/images/Mediawiki_screenshot.png differ diff --git a/images/OnlyOffice_logo.png b/images/OnlyOffice_logo.png new file mode 100644 index 00000000..3b053510 Binary files /dev/null and b/images/OnlyOffice_logo.png differ diff --git a/images/Pidgin-add-acount.png b/images/Pidgin-add-acount.png new file mode 100644 index 00000000..4147b6f3 Binary files /dev/null and b/images/Pidgin-add-acount.png differ diff --git a/images/PluXml_logo.png b/images/PluXml_logo.png new file mode 100644 index 00000000..b5ce5498 Binary files /dev/null and b/images/PluXml_logo.png differ diff --git a/images/PluXml_screenshot.jpg b/images/PluXml_screenshot.jpg new file mode 100644 index 00000000..8fa52feb Binary files /dev/null and b/images/PluXml_screenshot.jpg differ diff --git a/images/XMPP_logo.png b/images/XMPP_logo.png new file mode 100644 index 00000000..d82ae842 Binary files /dev/null and b/images/XMPP_logo.png differ diff --git a/images/YunoHost_logo_vertical.png b/images/YunoHost_logo_vertical.png new file mode 100644 index 00000000..2472cb1f Binary files /dev/null and b/images/YunoHost_logo_vertical.png differ diff --git a/images/actions_example.png b/images/actions_example.png new file mode 100644 index 00000000..04209da6 Binary files /dev/null and b/images/actions_example.png differ diff --git a/images/adguardhome-logo.png b/images/adguardhome-logo.png new file mode 100644 index 00000000..ea1dae9b Binary files /dev/null and b/images/adguardhome-logo.png differ diff --git a/images/adminer_logo.png b/images/adminer_logo.png new file mode 100644 index 00000000..06444fe5 Binary files /dev/null and b/images/adminer_logo.png differ diff --git a/images/administrate/specific_use_cases/virtualbox-snapshot.jpg b/images/administrate/specific_use_cases/virtualbox-snapshot.jpg new file mode 100644 index 00000000..0559f23c Binary files /dev/null and b/images/administrate/specific_use_cases/virtualbox-snapshot.jpg differ diff --git a/images/administrate/specific_use_cases/virtualbox-snapshot2.webp b/images/administrate/specific_use_cases/virtualbox-snapshot2.webp new file mode 100644 index 00000000..fcd1207a Binary files /dev/null and b/images/administrate/specific_use_cases/virtualbox-snapshot2.webp differ diff --git a/images/administrate/specific_use_cases/virtualbox-snapshot3.webp b/images/administrate/specific_use_cases/virtualbox-snapshot3.webp new file mode 100644 index 00000000..a15f144c Binary files /dev/null and b/images/administrate/specific_use_cases/virtualbox-snapshot3.webp differ diff --git a/images/administrate/specific_use_cases/virtualbox-snapshot4.webp b/images/administrate/specific_use_cases/virtualbox-snapshot4.webp new file mode 100644 index 00000000..504553cf Binary files /dev/null and b/images/administrate/specific_use_cases/virtualbox-snapshot4.webp differ diff --git a/images/airsonic_logo.png b/images/airsonic_logo.png new file mode 100644 index 00000000..c013faa3 Binary files /dev/null and b/images/airsonic_logo.png differ diff --git a/images/ampache_logo.png b/images/ampache_logo.png new file mode 100644 index 00000000..ed29e845 Binary files /dev/null and b/images/ampache_logo.png differ diff --git a/images/anarchism_logo.svg b/images/anarchism_logo.svg new file mode 100644 index 00000000..f2b4b29c --- /dev/null +++ b/images/anarchism_logo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/images/anfora_logo.svg b/images/anfora_logo.svg new file mode 100644 index 00000000..90f982c4 --- /dev/null +++ b/images/anfora_logo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/images/angryip.png b/images/angryip.png new file mode 100644 index 00000000..129dc680 Binary files /dev/null and b/images/angryip.png differ diff --git a/images/app_config_operations.png b/images/app_config_operations.png new file mode 100644 index 00000000..6e2ae10a Binary files /dev/null and b/images/app_config_operations.png differ diff --git a/images/app_config_panel.png b/images/app_config_panel.png new file mode 100644 index 00000000..ac395513 Binary files /dev/null and b/images/app_config_panel.png differ diff --git a/images/app_install_form.png b/images/app_install_form.png new file mode 100644 index 00000000..8e0705cd Binary files /dev/null and b/images/app_install_form.png differ diff --git a/images/app_install_form_cli.png b/images/app_install_form_cli.png new file mode 100644 index 00000000..820076da Binary files /dev/null and b/images/app_install_form_cli.png differ diff --git a/images/apps_catalog.png b/images/apps_catalog.png new file mode 100644 index 00000000..04ba85fe Binary files /dev/null and b/images/apps_catalog.png differ diff --git a/images/apps_custom_url.png b/images/apps_custom_url.png new file mode 100644 index 00000000..cf0816fe Binary files /dev/null and b/images/apps_custom_url.png differ diff --git a/images/apps_list.png b/images/apps_list.png new file mode 100644 index 00000000..ff296dd2 Binary files /dev/null and b/images/apps_list.png differ diff --git a/images/architecture.png b/images/architecture.png new file mode 100644 index 00000000..12c1f471 Binary files /dev/null and b/images/architecture.png differ diff --git a/images/architecture.xml b/images/architecture.xml new file mode 100644 index 00000000..b1084892 --- /dev/null +++ b/images/architecture.xml @@ -0,0 +1 @@ +7Vxbc5s4FP41nmkfmgEkYXjMpel2p931rHenzSMB2WaLkQu4ifvrV4DAumETRyR4p+lMxzpcLL7z6dx08ARcrx8/ZMFm9ZlEOJk4VvQ4ATcTx/Fsn/5fCna1wHZ9VEuWWRwx2V4wj39iJrSYdBtHOBdOLAhJingjCkOSpjgsBFmQZeRBPG1BEvFbN8ESK4J5GCSq9EscFSv2XI67l/+G4+Wq+Wb6gPWR+yD8tszINmXfN3HAovqrD6+D5l7sQfNVEJEHTgTeT8B1RkhRf1o/XuOkxLaBrb7utuNoO+8Mp0WfC5z6gh9BsmWPfrdNyYrkBZVekwxPHDehd7qK4h/047L82IjuM1nS6yQ6Gc15r3OpLK1UUuwaGjys4gLPN0FYjh8o1elJq2Kd0JFNPy7iJLkmCcmqs0tFO2FI5XmRkW+YOxK59y5y22/g1cM09gNnBX7kRExdHzBZ4yLb0VOaoy6jDltbALHxw56ojsVkK56kjTBgi2PZ3ntPEPqBcUTPF6Dw5TPZJnGKi0JHlTeLLFjjB5J9e3vGkLdmqYHcVyG3dZAjA4hDBfE/lnH6+FzgUPlPB5xb/ZkBDnoScJ4GOKABbmoAOKQAN5//+SUoDdubNYm2FDjHSkss354FC5FzfOH7GiyBASxdBUsFMpxGl6XnpaOUpLhCI8gKScaBGAX5CkdsQK++jcuvv7GaK7lxJ3o4Evy4ih2HDTqwQDOcBEX8Q/T+OsDYN8xInBacTZY0I1vanGyzELOLeG8s3cc7diOKyxIXyo0q9bVP3UujU0Wjn24uZ2dhVVri7yQrw1sVR6Nt18BK8FQHGMTJWeBm98BtqoHNMQCbr8D29fNsVplieiuS0js+2wq/DIiWCGJrlY+RzwSKjXngYLz+9PGZuEUIexHU4eY592Ao8tm6GGqoRWvbCm6X0TpOzwI5YPVAzh0KOTVBnJGsqEyeReOps0AQTpGIINAg6A2FoJoyXW42+XON3QK7HSHn1L+3DgZN/YFzJeq1dvxFFu1JQScHmQKNVf0p0SZ+jIuv5ecLxEZ3bVRK51wfclAzvjsWlNbRnmix68CNoTgZcezq2pLq+sauUlkCyRQwF7raauw6EDG61G8fUj+vantceQqAUn4B/dOUDaRc1PGG07YacR/SdpgEeR6HRxR+e+v7AAgKtwVLYHOWwLqwrGY8w1lMJ48zRhEhiRUS3v1E+Gz2IHMEwwFGxRy5+KBUaHqbiSaikKMZ88wBmqhvW6wo6vEiDikaJNWULEuhhamP3FWofd/ivMh7Fi+pWy1E5mU4j38G99UJJV825XNVT4quJuiGSoIkXqZUkOBFeW3pnOnkkksmXsdRVF59lQT3OLlqtxfE8lO5wUBjBJIWbC/F1/OsWUtyBNDupLCpTvjdCF1kQNcEAFDUpBGi+bp7NpeTxSLHzzYoai5qzH1oIwnVsfSyAEjjTsYVOiC5XHVq7ICk4EGJH80ZhcaOmdP+7a3HtE+1Mmd3oTnSiixJGiTv99J9QNEGl3d7tggMUSvM9RKnZ7EVXuZGlSWo3E9VNW32EstBSNal8+lPt6lKt3Gx7ZUDVcqIYMedxix553ShlDs14z116zueTGR1Y8gYkVua0sgHSVT1nZ5UVyJpOXZqrKUYayGF173o66n09UdFX0eKoNCpmwRyPQi6aBACt5tJzff41sF5yecj4JglvPF6AEd4fdqnWulOLvLEm46LeLJeTjWccvYIhwvdNdtT/+TUcDjWx5QakEVZJTMSfG8Lktf+1D4eixekLMrlmyCM0+Xf5eDmHTTUYiAFQEgttOn2dk1sKmi2tMo0g66J/zXEoLkDB7Guim4E4menHHxo18dxH4svjztw0Qd3++quSLWX19YEnWhUxtOFhoynCyT6yQUUQ17bneon3Dkv6XzAoglTXrt57IGo36beEl2fGp/uC38Iyqm7puzXi9xQJffI6sFICiWB3LDWl93wxAT+qexWJgwPsxvKFQrx/OezW03CyhLjiBwnVxO0HTbWuY6O8mLTysUvwuqW7Nk0DcdPb2yzxEIi9JDimXVNgrIpPqmfVQ00fynwqQoEsg/RNBYNpkA1tPqlwCcrUC4paFpMhlIgVAOEeUGdWkhlNLbEaqeEQVWGOK2cuilltuGIAaVAJWF5uXY96ChK+QtX74RcztR+s3GsLWtYdTi+2EQENE1EQ+WPUO0hmu1oVKs2sI14bVyhKfBvBrBeDhQ1A5EaP+iCaCPWS33LQNhT5nTjft+Wb3VdlSp6x0C+pGcwnNvj8jtKFOi0kX3aBtxWNH9kyB3ql3CDg7EDycGJZt0O5tvUkvXv1J9Ztxl9yKrApr4xlQfr9e7i37zvC1NjWfEa8zuYTgEAgk4dqJZLdf2cJl6FgSb6kY6U81hzUl94uT41pUtRaFDqhF6oUTCQRlKjUBZi35qEI1XchtutgE8r754HJY6qv03+/AvfRcieOtCmA3Fl2qqxPcSVJ7Qyyh2HvXexDs/Xty4qqW0BCL1mb8Q8Z5Ca9rw2Z8zywrW0OBsnwul9IFJt0Ja9g0Flq+nUPMziTTmb4QP5EedUcnlWE5vpUlwTsRlSc6pDC/DkPbn+Fruj9dzzPN6C2xeWPZ10tdScuq13YVnOhN/a8yaHdj4kI3DKPl/d4PxaUcXUmgrMQ/Li72tFpvLPMQy086FMmLkmUzsZqGsnw0wy+4Zsyn7rIDm3tGa4iq2mCVtZRd3eVX6Tw3J7Wc4TMiA63P8eTc2s/Y/+gPf/AQ== \ No newline at end of file diff --git a/images/backup.png b/images/backup.png new file mode 100644 index 00000000..df3cf230 Binary files /dev/null and b/images/backup.png differ diff --git a/images/baikal_logo.png b/images/baikal_logo.png new file mode 100644 index 00000000..1a623ea3 Binary files /dev/null and b/images/baikal_logo.png differ diff --git a/images/bitwarden_logo.png b/images/bitwarden_logo.png new file mode 100644 index 00000000..06e4c84b Binary files /dev/null and b/images/bitwarden_logo.png differ diff --git a/images/blogotext_logo.png b/images/blogotext_logo.png new file mode 100644 index 00000000..9a6752f0 Binary files /dev/null and b/images/blogotext_logo.png differ diff --git a/images/bludit_logo.png b/images/bludit_logo.png new file mode 100644 index 00000000..b1a69662 Binary files /dev/null and b/images/bludit_logo.png differ diff --git a/images/boot_screen.png b/images/boot_screen.png new file mode 100644 index 00000000..f8c4f2b8 Binary files /dev/null and b/images/boot_screen.png differ diff --git a/images/borg_logo.svg b/images/borg_logo.svg new file mode 100644 index 00000000..5f9c5a19 --- /dev/null +++ b/images/borg_logo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/images/brique.png b/images/brique.png new file mode 100644 index 00000000..762dfe3d Binary files /dev/null and b/images/brique.png differ diff --git a/images/button_to_go_to_permission_interface.png b/images/button_to_go_to_permission_interface.png new file mode 100644 index 00000000..65b998d9 Binary files /dev/null and b/images/button_to_go_to_permission_interface.png differ diff --git a/images/button_to_go_to_permission_interface_fr.png b/images/button_to_go_to_permission_interface_fr.png new file mode 100644 index 00000000..75dbb2e7 Binary files /dev/null and b/images/button_to_go_to_permission_interface_fr.png differ diff --git a/images/capture_espace_connexion.png b/images/capture_espace_connexion.png new file mode 100644 index 00000000..d2edd32d Binary files /dev/null and b/images/capture_espace_connexion.png differ diff --git a/images/capture_globale.png b/images/capture_globale.png new file mode 100644 index 00000000..5b2b84d9 Binary files /dev/null and b/images/capture_globale.png differ diff --git a/images/capture_menu_droite.png b/images/capture_menu_droite.png new file mode 100644 index 00000000..60658ac7 Binary files /dev/null and b/images/capture_menu_droite.png differ diff --git a/images/capture_menu_droite_chercher_utilisateur.png b/images/capture_menu_droite_chercher_utilisateur.png new file mode 100644 index 00000000..d29a1ffe Binary files /dev/null and b/images/capture_menu_droite_chercher_utilisateur.png differ diff --git a/images/capture_menu_droite_deconnexion.png b/images/capture_menu_droite_deconnexion.png new file mode 100644 index 00000000..ba2b7c79 Binary files /dev/null and b/images/capture_menu_droite_deconnexion.png differ diff --git a/images/capture_menu_droite_preferences.png b/images/capture_menu_droite_preferences.png new file mode 100644 index 00000000..ce7d05ed Binary files /dev/null and b/images/capture_menu_droite_preferences.png differ diff --git a/images/capture_menu_gauche.png b/images/capture_menu_gauche.png new file mode 100644 index 00000000..842e8a70 Binary files /dev/null and b/images/capture_menu_gauche.png differ diff --git a/images/cd.jpg b/images/cd.jpg new file mode 100644 index 00000000..95493620 Binary files /dev/null and b/images/cd.jpg differ diff --git a/images/certificate-after-LE-fr.png b/images/certificate-after-LE-fr.png new file mode 100644 index 00000000..c2c41313 Binary files /dev/null and b/images/certificate-after-LE-fr.png differ diff --git a/images/certificate-after-LE.png b/images/certificate-after-LE.png new file mode 100644 index 00000000..6b55fe99 Binary files /dev/null and b/images/certificate-after-LE.png differ diff --git a/images/certificate-before-LE-fr.png b/images/certificate-before-LE-fr.png new file mode 100644 index 00000000..3a50a8d1 Binary files /dev/null and b/images/certificate-before-LE-fr.png differ diff --git a/images/certificate-before-LE.png b/images/certificate-before-LE.png new file mode 100644 index 00000000..bfc896db Binary files /dev/null and b/images/certificate-before-LE.png differ diff --git a/images/certificate-signed-by-LE.png b/images/certificate-signed-by-LE.png new file mode 100644 index 00000000..aad3c51f Binary files /dev/null and b/images/certificate-signed-by-LE.png differ diff --git a/images/civicrm_logo.png b/images/civicrm_logo.png new file mode 100644 index 00000000..d82cd8b4 Binary files /dev/null and b/images/civicrm_logo.png differ diff --git a/images/codimd_logo.png b/images/codimd_logo.png new file mode 100644 index 00000000..2422174f Binary files /dev/null and b/images/codimd_logo.png differ diff --git a/images/collabora_logo.png b/images/collabora_logo.png new file mode 100644 index 00000000..22227baf Binary files /dev/null and b/images/collabora_logo.png differ diff --git a/images/computer.png b/images/computer.png new file mode 100644 index 00000000..575d0d43 Binary files /dev/null and b/images/computer.png differ diff --git a/images/concrete5_logo.png b/images/concrete5_logo.png new file mode 100644 index 00000000..945438c9 Binary files /dev/null and b/images/concrete5_logo.png differ diff --git a/images/config_panel_example.png b/images/config_panel_example.png new file mode 100644 index 00000000..5665a3c9 Binary files /dev/null and b/images/config_panel_example.png differ diff --git a/images/config_panel_toml_example.png b/images/config_panel_toml_example.png new file mode 100644 index 00000000..c72e0baf Binary files /dev/null and b/images/config_panel_toml_example.png differ diff --git a/images/cowyo_logo.png b/images/cowyo_logo.png new file mode 100644 index 00000000..35253a33 Binary files /dev/null and b/images/cowyo_logo.png differ diff --git a/images/create-first-user-cli.png b/images/create-first-user-cli.png new file mode 100644 index 00000000..3e3a1480 Binary files /dev/null and b/images/create-first-user-cli.png differ diff --git a/images/create-first-user.png b/images/create-first-user.png new file mode 100644 index 00000000..66b5f5c8 Binary files /dev/null and b/images/create-first-user.png differ diff --git a/images/create_user_1.png b/images/create_user_1.png new file mode 100644 index 00000000..f613acec Binary files /dev/null and b/images/create_user_1.png differ diff --git a/images/create_user_2.png b/images/create_user_2.png new file mode 100644 index 00000000..b77a4833 Binary files /dev/null and b/images/create_user_2.png differ diff --git a/images/create_user_3.png b/images/create_user_3.png new file mode 100644 index 00000000..6fd28129 Binary files /dev/null and b/images/create_user_3.png differ diff --git a/images/cubieboard2.png b/images/cubieboard2.png new file mode 100644 index 00000000..e4103dcc Binary files /dev/null and b/images/cubieboard2.png differ diff --git a/images/cubietruck.jpg b/images/cubietruck.jpg new file mode 100644 index 00000000..c9437023 Binary files /dev/null and b/images/cubietruck.jpg differ diff --git a/images/debian-logo.png b/images/debian-logo.png new file mode 100644 index 00000000..14cc1e99 Binary files /dev/null and b/images/debian-logo.png differ diff --git a/images/dekko-app.png b/images/dekko-app.png new file mode 100644 index 00000000..2f7a75a6 Binary files /dev/null and b/images/dekko-app.png differ diff --git a/images/dekko_config_1.png b/images/dekko_config_1.png new file mode 100644 index 00000000..f30146f2 Binary files /dev/null and b/images/dekko_config_1.png differ diff --git a/images/dekko_config_2.png b/images/dekko_config_2.png new file mode 100644 index 00000000..28596b16 Binary files /dev/null and b/images/dekko_config_2.png differ diff --git a/images/dekko_config_3.png b/images/dekko_config_3.png new file mode 100644 index 00000000..67063593 Binary files /dev/null and b/images/dekko_config_3.png differ diff --git a/images/dekko_config_4.png b/images/dekko_config_4.png new file mode 100644 index 00000000..bf4b26d1 Binary files /dev/null and b/images/dekko_config_4.png differ diff --git a/images/desktop.jpg b/images/desktop.jpg new file mode 100644 index 00000000..8254eabd Binary files /dev/null and b/images/desktop.jpg differ diff --git a/images/diagnostic.png b/images/diagnostic.png new file mode 100644 index 00000000..b24b65a1 Binary files /dev/null and b/images/diagnostic.png differ diff --git a/images/diagramsnet_logo.jpg b/images/diagramsnet_logo.jpg new file mode 100644 index 00000000..c30ae934 Binary files /dev/null and b/images/diagramsnet_logo.jpg differ diff --git a/images/discourse_logo.svg b/images/discourse_logo.svg new file mode 100644 index 00000000..73e7d63e --- /dev/null +++ b/images/discourse_logo.svg @@ -0,0 +1 @@ +Discourse_logo \ No newline at end of file diff --git a/images/dns_9box.png b/images/dns_9box.png new file mode 100644 index 00000000..fd65e3f0 Binary files /dev/null and b/images/dns_9box.png differ diff --git a/images/dns_dynamic-ip_box_conf.png b/images/dns_dynamic-ip_box_conf.png new file mode 100644 index 00000000..140a6e98 Binary files /dev/null and b/images/dns_dynamic-ip_box_conf.png differ diff --git a/images/docker.png b/images/docker.png new file mode 100644 index 00000000..780a8d5c Binary files /dev/null and b/images/docker.png differ diff --git a/images/dokuwiki_logo.svg b/images/dokuwiki_logo.svg new file mode 100644 index 00000000..cbee241e --- /dev/null +++ b/images/dokuwiki_logo.svg @@ -0,0 +1,553 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/dolibarr_logo.png b/images/dolibarr_logo.png new file mode 100644 index 00000000..2cd7964d Binary files /dev/null and b/images/dolibarr_logo.png differ diff --git a/images/domain-certificate-button-fr.png b/images/domain-certificate-button-fr.png new file mode 100644 index 00000000..ae8c4359 Binary files /dev/null and b/images/domain-certificate-button-fr.png differ diff --git a/images/domain-certificate-button.png b/images/domain-certificate-button.png new file mode 100644 index 00000000..998c2f21 Binary files /dev/null and b/images/domain-certificate-button.png differ diff --git a/images/dotclean_logo.png b/images/dotclean_logo.png new file mode 100644 index 00000000..b5f0552b Binary files /dev/null and b/images/dotclean_logo.png differ diff --git a/images/drupal_logo.svg b/images/drupal_logo.svg new file mode 100644 index 00000000..7da67bde --- /dev/null +++ b/images/drupal_logo.svg @@ -0,0 +1 @@ +]>Druplicon \ No newline at end of file diff --git a/images/dude_yunohost.jpg b/images/dude_yunohost.jpg new file mode 100644 index 00000000..f6e3f7a6 Binary files /dev/null and b/images/dude_yunohost.jpg differ diff --git a/images/ecosystem.odg b/images/ecosystem.odg new file mode 100644 index 00000000..dda07281 Binary files /dev/null and b/images/ecosystem.odg differ diff --git a/images/ecosystem.png b/images/ecosystem.png new file mode 100644 index 00000000..e8021117 Binary files /dev/null and b/images/ecosystem.png differ diff --git a/images/ecosystem_fr.odg b/images/ecosystem_fr.odg new file mode 100644 index 00000000..099a74ab Binary files /dev/null and b/images/ecosystem_fr.odg differ diff --git a/images/ecosystem_fr.png b/images/ecosystem_fr.png new file mode 100644 index 00000000..3c8d4230 Binary files /dev/null and b/images/ecosystem_fr.png differ diff --git a/images/etcher.gif b/images/etcher.gif new file mode 100644 index 00000000..e06ce0cb Binary files /dev/null and b/images/etcher.gif differ diff --git a/images/ethercalc_logo.png b/images/ethercalc_logo.png new file mode 100644 index 00000000..88125816 Binary files /dev/null and b/images/ethercalc_logo.png differ diff --git a/images/etherpad_mypads_logo.jpg b/images/etherpad_mypads_logo.jpg new file mode 100644 index 00000000..9b888ad1 Binary files /dev/null and b/images/etherpad_mypads_logo.jpg differ diff --git a/images/etherpad_mypads_logo.svg b/images/etherpad_mypads_logo.svg new file mode 100644 index 00000000..a4007d16 --- /dev/null +++ b/images/etherpad_mypads_logo.svg @@ -0,0 +1,61 @@ + + + + + Etherpad + + + + image/svg+xml + + Etherpad + 2012-11-20 + + + Marcel Klehr + + + + + + + + + + + + + + + + + diff --git a/images/ffsync_logo.png b/images/ffsync_logo.png new file mode 100644 index 00000000..a41f526c Binary files /dev/null and b/images/ffsync_logo.png differ diff --git a/images/filezilla_1.png b/images/filezilla_1.png new file mode 100644 index 00000000..a133971b Binary files /dev/null and b/images/filezilla_1.png differ diff --git a/images/filezilla_2.png b/images/filezilla_2.png new file mode 100644 index 00000000..0eaff4c6 Binary files /dev/null and b/images/filezilla_2.png differ diff --git a/images/filezilla_3.png b/images/filezilla_3.png new file mode 100644 index 00000000..e8b5db4d Binary files /dev/null and b/images/filezilla_3.png differ diff --git a/images/filezilla_4.png b/images/filezilla_4.png new file mode 100644 index 00000000..4b43f685 Binary files /dev/null and b/images/filezilla_4.png differ diff --git a/images/filezilla_5.png b/images/filezilla_5.png new file mode 100644 index 00000000..ae3a872e Binary files /dev/null and b/images/filezilla_5.png differ diff --git a/images/filezilla_6.png b/images/filezilla_6.png new file mode 100644 index 00000000..6977f3d9 Binary files /dev/null and b/images/filezilla_6.png differ diff --git a/images/filezilla_7.png b/images/filezilla_7.png new file mode 100644 index 00000000..4b7aa28d Binary files /dev/null and b/images/filezilla_7.png differ diff --git a/images/filezilla_8.png b/images/filezilla_8.png new file mode 100644 index 00000000..370cdcd2 Binary files /dev/null and b/images/filezilla_8.png differ diff --git a/images/firefly-iii_logo.png b/images/firefly-iii_logo.png new file mode 100644 index 00000000..26598804 Binary files /dev/null and b/images/firefly-iii_logo.png differ diff --git a/images/firefly-logo.png b/images/firefly-logo.png new file mode 100644 index 00000000..c9ea5706 Binary files /dev/null and b/images/firefly-logo.png differ diff --git a/images/flarum_logo.png b/images/flarum_logo.png new file mode 100644 index 00000000..ef72258a Binary files /dev/null and b/images/flarum_logo.png differ diff --git a/images/fluxbb_logo.png b/images/fluxbb_logo.png new file mode 100644 index 00000000..b9886904 Binary files /dev/null and b/images/fluxbb_logo.png differ diff --git a/images/framaforms_logo.png b/images/framaforms_logo.png new file mode 100644 index 00000000..54e91ddf Binary files /dev/null and b/images/framaforms_logo.png differ diff --git a/images/freshrss_logo.png b/images/freshrss_logo.png new file mode 100644 index 00000000..5ef73cce Binary files /dev/null and b/images/freshrss_logo.png differ diff --git a/images/friendica_logo.jpeg b/images/friendica_logo.jpeg new file mode 100644 index 00000000..89086338 Binary files /dev/null and b/images/friendica_logo.jpeg differ diff --git a/images/friendica_logo.svg b/images/friendica_logo.svg new file mode 100644 index 00000000..75d54920 --- /dev/null +++ b/images/friendica_logo.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/funkwhale_logo.png b/images/funkwhale_logo.png new file mode 100644 index 00000000..7cf56217 Binary files /dev/null and b/images/funkwhale_logo.png differ diff --git a/images/garradin_logo.svg b/images/garradin_logo.svg new file mode 100644 index 00000000..daa8151d --- /dev/null +++ b/images/garradin_logo.svg @@ -0,0 +1,65 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/images/gitea_logo.png b/images/gitea_logo.png new file mode 100644 index 00000000..dd3e97c4 Binary files /dev/null and b/images/gitea_logo.png differ diff --git a/images/github_branch.png b/images/github_branch.png new file mode 100644 index 00000000..47987fb2 Binary files /dev/null and b/images/github_branch.png differ diff --git a/images/github_commit.png b/images/github_commit.png new file mode 100644 index 00000000..d299c878 Binary files /dev/null and b/images/github_commit.png differ diff --git a/images/github_create_new_repo.png b/images/github_create_new_repo.png new file mode 100644 index 00000000..b96969a1 Binary files /dev/null and b/images/github_create_new_repo.png differ diff --git a/images/github_edit.png b/images/github_edit.png new file mode 100644 index 00000000..619e483e Binary files /dev/null and b/images/github_edit.png differ diff --git a/images/github_fork_button.png b/images/github_fork_button.png new file mode 100644 index 00000000..faf800ff Binary files /dev/null and b/images/github_fork_button.png differ diff --git a/images/github_fork_title.png b/images/github_fork_title.png new file mode 100644 index 00000000..e95d56a7 Binary files /dev/null and b/images/github_fork_title.png differ diff --git a/images/github_pull_request.png b/images/github_pull_request.png new file mode 100644 index 00000000..13e2eb5f Binary files /dev/null and b/images/github_pull_request.png differ diff --git a/images/gitlab-runner_logo.png b/images/gitlab-runner_logo.png new file mode 100644 index 00000000..a629de7e Binary files /dev/null and b/images/gitlab-runner_logo.png differ diff --git a/images/gitlab_logo.svg b/images/gitlab_logo.svg new file mode 100644 index 00000000..6e66c741 --- /dev/null +++ b/images/gitlab_logo.svg @@ -0,0 +1,30 @@ + + + + +Fill 1 + Group 24 +Created with Sketch. + + + + + + + + + + + + + + + + + + + diff --git a/images/glowing_bear_logo.svg b/images/glowing_bear_logo.svg new file mode 100644 index 00000000..48e21c42 --- /dev/null +++ b/images/glowing_bear_logo.svg @@ -0,0 +1 @@ +glowing-bearCreated with Sketch (http://www.bohemiancoding.com/sketch) \ No newline at end of file diff --git a/images/gogs_logo.svg b/images/gogs_logo.svg new file mode 100644 index 00000000..ddd59685 --- /dev/null +++ b/images/gogs_logo.svg @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/images/gotify_logo.png b/images/gotify_logo.png new file mode 100644 index 00000000..99848593 Binary files /dev/null and b/images/gotify_logo.png differ diff --git a/images/gparted.jpg b/images/gparted.jpg new file mode 100644 index 00000000..c6e00c09 Binary files /dev/null and b/images/gparted.jpg differ diff --git a/images/grav_logo.png b/images/grav_logo.png new file mode 100644 index 00000000..489c4ea9 Binary files /dev/null and b/images/grav_logo.png differ diff --git a/images/grocy-logo.png b/images/grocy-logo.png new file mode 100644 index 00000000..dd4f08a2 Binary files /dev/null and b/images/grocy-logo.png differ diff --git a/images/groups_add-permission-group.png b/images/groups_add-permission-group.png new file mode 100644 index 00000000..bb083791 Binary files /dev/null and b/images/groups_add-permission-group.png differ diff --git a/images/groups_add-permission-user.png b/images/groups_add-permission-user.png new file mode 100644 index 00000000..0a62a541 Binary files /dev/null and b/images/groups_add-permission-user.png differ diff --git a/images/groups_alerte-permission.png b/images/groups_alerte-permission.png new file mode 100644 index 00000000..2b52b6d5 Binary files /dev/null and b/images/groups_alerte-permission.png differ diff --git a/images/groups_button-add-user.png b/images/groups_button-add-user.png new file mode 100644 index 00000000..1a4f3897 Binary files /dev/null and b/images/groups_button-add-user.png differ diff --git a/images/groups_button-delete-group.png b/images/groups_button-delete-group.png new file mode 100644 index 00000000..41f2e3f8 Binary files /dev/null and b/images/groups_button-delete-group.png differ diff --git a/images/groups_button-new-group.png b/images/groups_button-new-group.png new file mode 100644 index 00000000..a50f0981 Binary files /dev/null and b/images/groups_button-new-group.png differ diff --git a/images/groups_button-remove-user.png b/images/groups_button-remove-user.png new file mode 100644 index 00000000..3c6c8e59 Binary files /dev/null and b/images/groups_button-remove-user.png differ diff --git a/images/groups_default-groups.png b/images/groups_default-groups.png new file mode 100644 index 00000000..4970704c Binary files /dev/null and b/images/groups_default-groups.png differ diff --git a/images/groups_default-groups_fr.png b/images/groups_default-groups_fr.png new file mode 100644 index 00000000..34421aa7 Binary files /dev/null and b/images/groups_default-groups_fr.png differ diff --git a/images/groups_default-with-permissions.png b/images/groups_default-with-permissions.png new file mode 100644 index 00000000..6dafb1ed Binary files /dev/null and b/images/groups_default-with-permissions.png differ diff --git a/images/halcyon_logo.png b/images/halcyon_logo.png new file mode 100644 index 00000000..4468cdf3 Binary files /dev/null and b/images/halcyon_logo.png differ diff --git a/images/hextris_logo.png b/images/hextris_logo.png new file mode 100644 index 00000000..ce78a935 Binary files /dev/null and b/images/hextris_logo.png differ diff --git a/images/home_enjoy.jpg b/images/home_enjoy.jpg new file mode 100644 index 00000000..27c31d3c Binary files /dev/null and b/images/home_enjoy.jpg differ diff --git a/images/home_install.png b/images/home_install.png new file mode 100644 index 00000000..ba0a9090 Binary files /dev/null and b/images/home_install.png differ diff --git a/images/home_manage.jpg b/images/home_manage.jpg new file mode 100644 index 00000000..88b290fd Binary files /dev/null and b/images/home_manage.jpg differ diff --git a/images/home_panel.jpg b/images/home_panel.jpg new file mode 100644 index 00000000..b9f701a0 Binary files /dev/null and b/images/home_panel.jpg differ diff --git a/images/horde_logo.png b/images/horde_logo.png new file mode 100644 index 00000000..686b4db0 Binary files /dev/null and b/images/horde_logo.png differ diff --git a/images/hubzilla_logo.png b/images/hubzilla_logo.png new file mode 100644 index 00000000..5766891d Binary files /dev/null and b/images/hubzilla_logo.png differ diff --git a/images/icon-debian.png b/images/icon-debian.png new file mode 100644 index 00000000..51283151 Binary files /dev/null and b/images/icon-debian.png differ diff --git a/images/icon-door.png b/images/icon-door.png new file mode 100644 index 00000000..3c950816 Binary files /dev/null and b/images/icon-door.png differ diff --git a/images/icon-globe.png b/images/icon-globe.png new file mode 100644 index 00000000..10efab03 Binary files /dev/null and b/images/icon-globe.png differ diff --git a/images/icon-lock.png b/images/icon-lock.png new file mode 100644 index 00000000..04d5db43 Binary files /dev/null and b/images/icon-lock.png differ diff --git a/images/icon-mail.png b/images/icon-mail.png new file mode 100644 index 00000000..8f190608 Binary files /dev/null and b/images/icon-mail.png differ diff --git a/images/icon-medic.png b/images/icon-medic.png new file mode 100644 index 00000000..2dad2325 Binary files /dev/null and b/images/icon-medic.png differ diff --git a/images/icon-messaging.png b/images/icon-messaging.png new file mode 100644 index 00000000..c8938558 Binary files /dev/null and b/images/icon-messaging.png differ diff --git a/images/icon-package.png b/images/icon-package.png new file mode 100644 index 00000000..fcda8a44 Binary files /dev/null and b/images/icon-package.png differ diff --git a/images/icon-shield.png b/images/icon-shield.png new file mode 100644 index 00000000..4fbc6a59 Binary files /dev/null and b/images/icon-shield.png differ diff --git a/images/icon-tools.png b/images/icon-tools.png new file mode 100644 index 00000000..2b7c33b2 Binary files /dev/null and b/images/icon-tools.png differ diff --git a/images/icon-users.png b/images/icon-users.png new file mode 100644 index 00000000..4929acac Binary files /dev/null and b/images/icon-users.png differ diff --git a/images/images.list b/images/images.list new file mode 100644 index 00000000..9b1cf3f4 --- /dev/null +++ b/images/images.list @@ -0,0 +1,74 @@ +boot_screen.png +cd.jpg +checkstart.png +cubieboard2.png +debian-logo.png +desktop.jpg +df_h.png +digitalocean.png +dns_9box.png +dns_dynamic-ip_box_conf.png +docker.png +dude_yunohost.jpg +flattr-badge-large.png +free_m.png +freshrss_logo.png +github_ribbon_grey.png +gparted.jpg +home_enjoy.jpg +home_install.png +home_manage.jpg +home_panel.jpg +install_script.png +ip_serveur.png +jappix.png +laptop.png +Linuxfr.png +logo-jirafeau.jpeg +logo.png +Logo-wallabag-svg.svg +lxc.png +mailview.jpg +webadmin.png +webadmin_fr.png +micro-sd-card.jpg +nettop.jpg +networks.png +nginx.png +OVH1_domain_select.png +OVH2_domain_DNS.png +OVH3_zoneDNS.png +Pidgin-add-acount.png +piwigo.png +postinstall_cli.png +postinstall_error.png +postinstall_web.png +Raspberry_Pi_2_Model_B_v1.1_front_angle_new.jpg +roundcube.png +sdcard.jpg +Searx_logo.svg +services_status.png +sfr-authentification.png +sfr-filtrage.png +thisisinternet.png +thunderbird-config.png +transmission.png +ttrss.png +unetbootin.png +usb_key.png +virtualbox_1.png +virtualbox_2.1.png +virtualbox_2.png +virtualbox_3.png +virtualbox.png +vps.png +web4all.png +Wikipedia-logo-v2-fr.svg +win32diskimager.png +wordpress.png +XMPP_logo.png +ynh_admin_etat_ip.png +ynh_login.png +ynh_logo_black.png +ynh_logo_white.png +yunohost_package.png diff --git a/images/images_check.sh b/images/images_check.sh new file mode 100644 index 00000000..13a43b74 --- /dev/null +++ b/images/images_check.sh @@ -0,0 +1,9 @@ +#!/bin/bash +while IFS= read -r file +do + # echo $file + # [ -f "$file" ] && echo "$file does not exist" + if [ ! -f $file ]; then + echo "https://yunohost.org/images/"$file + fi +done < "images.list" \ No newline at end of file diff --git a/images/internetcube.png b/images/internetcube.png new file mode 100644 index 00000000..af590f1c Binary files /dev/null and b/images/internetcube.png differ diff --git a/images/invidious-logo.png b/images/invidious-logo.png new file mode 100644 index 00000000..55b696e8 Binary files /dev/null and b/images/invidious-logo.png differ diff --git a/images/invoiceninja_logo.png b/images/invoiceninja_logo.png new file mode 100644 index 00000000..0c663528 Binary files /dev/null and b/images/invoiceninja_logo.png differ diff --git a/images/ip_serveur.png b/images/ip_serveur.png new file mode 100644 index 00000000..4c74f5e5 Binary files /dev/null and b/images/ip_serveur.png differ diff --git a/images/jappix_logo.png b/images/jappix_logo.png new file mode 100644 index 00000000..53124199 Binary files /dev/null and b/images/jappix_logo.png differ diff --git a/images/jitsi_logo.png b/images/jitsi_logo.png new file mode 100644 index 00000000..42aa5618 Binary files /dev/null and b/images/jitsi_logo.png differ diff --git a/images/jitsi_logo.svg b/images/jitsi_logo.svg new file mode 100644 index 00000000..5a3526ac --- /dev/null +++ b/images/jitsi_logo.svg @@ -0,0 +1,650 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/jupyterlab_logo.svg b/images/jupyterlab_logo.svg new file mode 100644 index 00000000..ab255087 --- /dev/null +++ b/images/jupyterlab_logo.svg @@ -0,0 +1,90 @@ + +Group.svg +Created using Figma 0.90 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/k9mail.png b/images/k9mail.png new file mode 100644 index 00000000..060e498a Binary files /dev/null and b/images/k9mail.png differ diff --git a/images/k9mail_config_1.png b/images/k9mail_config_1.png new file mode 100644 index 00000000..1ddebb74 Binary files /dev/null and b/images/k9mail_config_1.png differ diff --git a/images/k9mail_config_2.png b/images/k9mail_config_2.png new file mode 100644 index 00000000..d35cf891 Binary files /dev/null and b/images/k9mail_config_2.png differ diff --git a/images/k9mail_config_3.png b/images/k9mail_config_3.png new file mode 100644 index 00000000..1c74b040 Binary files /dev/null and b/images/k9mail_config_3.png differ diff --git a/images/k9mail_config_4.png b/images/k9mail_config_4.png new file mode 100644 index 00000000..ee3214d9 Binary files /dev/null and b/images/k9mail_config_4.png differ diff --git a/images/kanboard_logo.png b/images/kanboard_logo.png new file mode 100644 index 00000000..4f3436df Binary files /dev/null and b/images/kanboard_logo.png differ diff --git a/images/keeweb_logo.png b/images/keeweb_logo.png new file mode 100644 index 00000000..769c5a81 Binary files /dev/null and b/images/keeweb_logo.png differ diff --git a/images/kresus_logo.png b/images/kresus_logo.png new file mode 100644 index 00000000..d55dc2ce Binary files /dev/null and b/images/kresus_logo.png differ diff --git a/images/laptop.png b/images/laptop.png new file mode 100644 index 00000000..57528c2b Binary files /dev/null and b/images/laptop.png differ diff --git a/images/leed_logo.png b/images/leed_logo.png new file mode 100644 index 00000000..f9f192b3 Binary files /dev/null and b/images/leed_logo.png differ diff --git a/images/liberapay_logo.svg b/images/liberapay_logo.svg new file mode 100644 index 00000000..007d686c --- /dev/null +++ b/images/liberapay_logo.svg @@ -0,0 +1,2 @@ +Donate \ No newline at end of file diff --git a/images/limesurvey_logo.png b/images/limesurvey_logo.png new file mode 100644 index 00000000..bc60942e Binary files /dev/null and b/images/limesurvey_logo.png differ diff --git a/images/linux-magazine-208.jpg b/images/linux-magazine-208.jpg new file mode 100644 index 00000000..57322a07 Binary files /dev/null and b/images/linux-magazine-208.jpg differ diff --git a/images/linux-pratique-96.jpg b/images/linux-pratique-96.jpg new file mode 100644 index 00000000..6edb4fec Binary files /dev/null and b/images/linux-pratique-96.jpg differ diff --git a/images/logo-bibliogram.png b/images/logo-bibliogram.png new file mode 100644 index 00000000..51c97c89 Binary files /dev/null and b/images/logo-bibliogram.png differ diff --git a/images/logo-bookstack.png b/images/logo-bookstack.png new file mode 100644 index 00000000..d10b3ca4 Binary files /dev/null and b/images/logo-bookstack.png differ diff --git a/images/logo-jupyterhub.png b/images/logo-jupyterhub.png new file mode 100644 index 00000000..48d8b817 Binary files /dev/null and b/images/logo-jupyterhub.png differ diff --git a/images/logo.png b/images/logo.png new file mode 100644 index 00000000..ddb79b3d Binary files /dev/null and b/images/logo.png differ diff --git a/images/logo_codelutin.png b/images/logo_codelutin.png new file mode 100644 index 00000000..ff19c172 Binary files /dev/null and b/images/logo_codelutin.png differ diff --git a/images/logo_gitoyen.png b/images/logo_gitoyen.png new file mode 100644 index 00000000..4e84b2b8 Binary files /dev/null and b/images/logo_gitoyen.png differ diff --git a/images/logo_globenet.png b/images/logo_globenet.png new file mode 100644 index 00000000..d2a8dca8 Binary files /dev/null and b/images/logo_globenet.png differ diff --git a/images/logo_ldn.png b/images/logo_ldn.png new file mode 100644 index 00000000..3334572d Binary files /dev/null and b/images/logo_ldn.png differ diff --git a/images/logo_nbs.png b/images/logo_nbs.png new file mode 100644 index 00000000..c591923e Binary files /dev/null and b/images/logo_nbs.png differ diff --git a/images/logo_ngi.png b/images/logo_ngi.png new file mode 100644 index 00000000..e0449805 Binary files /dev/null and b/images/logo_ngi.png differ diff --git a/images/logo_nlnet.png b/images/logo_nlnet.png new file mode 100644 index 00000000..caf88a73 Binary files /dev/null and b/images/logo_nlnet.png differ diff --git a/images/logo_roundcorner.png b/images/logo_roundcorner.png new file mode 100644 index 00000000..96b2c257 Binary files /dev/null and b/images/logo_roundcorner.png differ diff --git a/images/logo_tetaneutral.png b/images/logo_tetaneutral.png new file mode 100644 index 00000000..4744bcb5 Binary files /dev/null and b/images/logo_tetaneutral.png differ diff --git a/images/lstu_logo.svg b/images/lstu_logo.svg new file mode 100644 index 00000000..a4c24ebb --- /dev/null +++ b/images/lstu_logo.svg @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/lufi_logo.png b/images/lufi_logo.png new file mode 100644 index 00000000..a32ed32e Binary files /dev/null and b/images/lufi_logo.png differ diff --git a/images/lufi_logo.svg b/images/lufi_logo.svg new file mode 100644 index 00000000..7d53d1f3 --- /dev/null +++ b/images/lufi_logo.svg @@ -0,0 +1,93 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/images/lutim_logo.png b/images/lutim_logo.png new file mode 100644 index 00000000..fb4146d7 Binary files /dev/null and b/images/lutim_logo.png differ diff --git a/images/lxc.png b/images/lxc.png new file mode 100644 index 00000000..e344c1dd Binary files /dev/null and b/images/lxc.png differ diff --git a/images/lychee_logo.png b/images/lychee_logo.png new file mode 100644 index 00000000..aa6c318b Binary files /dev/null and b/images/lychee_logo.png differ diff --git a/images/mailman_logo.jpg b/images/mailman_logo.jpg new file mode 100644 index 00000000..edd5e373 Binary files /dev/null and b/images/mailman_logo.jpg differ diff --git a/images/mailman_logo.svg b/images/mailman_logo.svg new file mode 100644 index 00000000..a87f157c --- /dev/null +++ b/images/mailman_logo.svg @@ -0,0 +1,928 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/mailview.jpg b/images/mailview.jpg new file mode 100644 index 00000000..51bc9400 Binary files /dev/null and b/images/mailview.jpg differ diff --git a/images/mantis_logo.png b/images/mantis_logo.png new file mode 100644 index 00000000..d2529c81 Binary files /dev/null and b/images/mantis_logo.png differ diff --git a/images/mastodon_logo.svg b/images/mastodon_logo.svg new file mode 100644 index 00000000..8b1328e8 --- /dev/null +++ b/images/mastodon_logo.svg @@ -0,0 +1 @@ + diff --git a/images/matomo_Logo.svg b/images/matomo_Logo.svg new file mode 100644 index 00000000..14d9f510 --- /dev/null +++ b/images/matomo_Logo.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/matomo_logo.png b/images/matomo_logo.png new file mode 100644 index 00000000..d62dd696 Binary files /dev/null and b/images/matomo_logo.png differ diff --git a/images/mattermost_logo.png b/images/mattermost_logo.png new file mode 100644 index 00000000..189c5dc9 Binary files /dev/null and b/images/mattermost_logo.png differ diff --git a/images/mattermost_logo.svg b/images/mattermost_logo.svg new file mode 100644 index 00000000..57a5184a --- /dev/null +++ b/images/mattermost_logo.svg @@ -0,0 +1,2 @@ + +image/svg+xml \ No newline at end of file diff --git a/images/mediawiki_logo.svg b/images/mediawiki_logo.svg new file mode 100644 index 00000000..294a02af --- /dev/null +++ b/images/mediawiki_logo.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/micro-sd-card.jpg b/images/micro-sd-card.jpg new file mode 100644 index 00000000..f6ba96a3 Binary files /dev/null and b/images/micro-sd-card.jpg differ diff --git a/images/minetest_logo.svg b/images/minetest_logo.svg new file mode 100644 index 00000000..db6bdbf7 --- /dev/null +++ b/images/minetest_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/misskey_logo.png b/images/misskey_logo.png new file mode 100644 index 00000000..3347810a Binary files /dev/null and b/images/misskey_logo.png differ diff --git a/images/mobilizon_logo.png b/images/mobilizon_logo.png new file mode 100644 index 00000000..5f50cf05 Binary files /dev/null and b/images/mobilizon_logo.png differ diff --git a/images/mobilizon_logo.svg b/images/mobilizon_logo.svg new file mode 100644 index 00000000..1130b11f --- /dev/null +++ b/images/mobilizon_logo.svg @@ -0,0 +1 @@ +Fichier 1 \ No newline at end of file diff --git a/images/monitorix_log.png b/images/monitorix_log.png new file mode 100644 index 00000000..11f53426 Binary files /dev/null and b/images/monitorix_log.png differ diff --git a/images/moodle_logo.svg b/images/moodle_logo.svg new file mode 100644 index 00000000..47ceb363 --- /dev/null +++ b/images/moodle_logo.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + diff --git a/images/mumbleserver_logo.svg b/images/mumbleserver_logo.svg new file mode 100644 index 00000000..9414a0a7 --- /dev/null +++ b/images/mumbleserver_logo.svg @@ -0,0 +1,2252 @@ + + + + + Mumble logo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Mumble logo + 2009.08.17 + + + Martin Skilnand + + + + + Martin Skilnand + + + + + Mumble team + + + mumble.svg + git://mumble.git.sourceforge.net/gitroot/mumble + Logo for voice chat program mumble + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/mytinytodo_logo.png b/images/mytinytodo_logo.png new file mode 100644 index 00000000..1720924a Binary files /dev/null and b/images/mytinytodo_logo.png differ diff --git a/images/navidrome_logo.png b/images/navidrome_logo.png new file mode 100644 index 00000000..993c8e09 Binary files /dev/null and b/images/navidrome_logo.png differ diff --git a/images/netdata_logo.svg b/images/netdata_logo.svg new file mode 100644 index 00000000..18152fb7 --- /dev/null +++ b/images/netdata_logo.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/images/nettop.jpg b/images/nettop.jpg new file mode 100644 index 00000000..606592ab Binary files /dev/null and b/images/nettop.jpg differ diff --git a/images/networks.png b/images/networks.png new file mode 100644 index 00000000..563b60db Binary files /dev/null and b/images/networks.png differ diff --git a/images/nextcloud_logo.png b/images/nextcloud_logo.png new file mode 100644 index 00000000..e813cecd Binary files /dev/null and b/images/nextcloud_logo.png differ diff --git a/images/nextcloud_menu_parameter.jpg b/images/nextcloud_menu_parameter.jpg new file mode 100644 index 00000000..0bf2ff0e Binary files /dev/null and b/images/nextcloud_menu_parameter.jpg differ diff --git a/images/nextcloud_stockage_externe.jpg b/images/nextcloud_stockage_externe.jpg new file mode 100644 index 00000000..49583d6e Binary files /dev/null and b/images/nextcloud_stockage_externe.jpg differ diff --git a/images/odroidc2.jpg b/images/odroidc2.jpg new file mode 100644 index 00000000..dfe2e9c5 Binary files /dev/null and b/images/odroidc2.jpg differ diff --git a/images/odroidhc4.png b/images/odroidhc4.png new file mode 100644 index 00000000..c7f0b1c0 Binary files /dev/null and b/images/odroidhc4.png differ diff --git a/images/olinuxino.png b/images/olinuxino.png new file mode 100644 index 00000000..ca605972 Binary files /dev/null and b/images/olinuxino.png differ diff --git a/images/opensondage_logo.png b/images/opensondage_logo.png new file mode 100644 index 00000000..3a3603ee Binary files /dev/null and b/images/opensondage_logo.png differ diff --git a/images/orangepipcplus.jpg b/images/orangepipcplus.jpg new file mode 100644 index 00000000..aeb8e057 Binary files /dev/null and b/images/orangepipcplus.jpg differ diff --git a/images/organization_schema.png b/images/organization_schema.png new file mode 100644 index 00000000..e51b0d77 Binary files /dev/null and b/images/organization_schema.png differ diff --git a/images/osticket_logo.svg b/images/osticket_logo.svg new file mode 100644 index 00000000..2733d70b --- /dev/null +++ b/images/osticket_logo.svg @@ -0,0 +1,96 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/images/ovh_control_panel.png b/images/ovh_control_panel.png new file mode 100644 index 00000000..a59abccc Binary files /dev/null and b/images/ovh_control_panel.png differ diff --git a/images/ovh_dns_zone.png b/images/ovh_dns_zone.png new file mode 100644 index 00000000..611e3dcf Binary files /dev/null and b/images/ovh_dns_zone.png differ diff --git a/images/peertube_embed_01.png b/images/peertube_embed_01.png new file mode 100644 index 00000000..74bc12fa Binary files /dev/null and b/images/peertube_embed_01.png differ diff --git a/images/peertube_logo.png b/images/peertube_logo.png new file mode 100644 index 00000000..7d709ef1 Binary files /dev/null and b/images/peertube_logo.png differ diff --git a/images/peertube_logo.svg b/images/peertube_logo.svg new file mode 100644 index 00000000..b4a60996 --- /dev/null +++ b/images/peertube_logo.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/images/phpmyadmin_logo.svg b/images/phpmyadmin_logo.svg new file mode 100644 index 00000000..95d919f3 --- /dev/null +++ b/images/phpmyadmin_logo.svg @@ -0,0 +1,43 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/pihole_logo.png b/images/pihole_logo.png new file mode 100644 index 00000000..178c085d Binary files /dev/null and b/images/pihole_logo.png differ diff --git a/images/piwigo.org.svg b/images/piwigo.org.svg new file mode 100644 index 00000000..582608ff --- /dev/null +++ b/images/piwigo.org.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + diff --git a/images/piwigo_logo.png b/images/piwigo_logo.png new file mode 100644 index 00000000..e33c4a11 Binary files /dev/null and b/images/piwigo_logo.png differ diff --git a/images/piwigo_screenshot.jpg b/images/piwigo_screenshot.jpg new file mode 100644 index 00000000..09c80ae2 Binary files /dev/null and b/images/piwigo_screenshot.jpg differ diff --git a/images/pleroma_logo.png b/images/pleroma_logo.png new file mode 100644 index 00000000..a199972d Binary files /dev/null and b/images/pleroma_logo.png differ diff --git a/images/plume_logo.svg b/images/plume_logo.svg new file mode 100644 index 00000000..a0075316 --- /dev/null +++ b/images/plume_logo.svg @@ -0,0 +1,37 @@ + + + + Plume Logo - Feather + + + + + + image/svg+xml + + Plume Logo - Feather + 2018/10/07 + + + Abdullah Tarawneh (trwnh.com) + + + + + trwnh + + + A Plume concept logo, with a soft stylized feather. Solid path, no fill. + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/portForwarding_en.png b/images/portForwarding_en.png new file mode 100644 index 00000000..202d437f Binary files /dev/null and b/images/portForwarding_en.png differ diff --git a/images/portForwarding_fr.png b/images/portForwarding_fr.png new file mode 100644 index 00000000..21456c5d Binary files /dev/null and b/images/portForwarding_fr.png differ diff --git a/images/portForwarding_src_en.odg b/images/portForwarding_src_en.odg new file mode 100644 index 00000000..3a6300c1 Binary files /dev/null and b/images/portForwarding_src_en.odg differ diff --git a/images/portForwarding_src_fr.odg b/images/portForwarding_src_fr.odg new file mode 100644 index 00000000..16b9347a Binary files /dev/null and b/images/portForwarding_src_fr.odg differ diff --git a/images/postinstall_cli.png b/images/postinstall_cli.png new file mode 100644 index 00000000..5728dadd Binary files /dev/null and b/images/postinstall_cli.png differ diff --git a/images/postinstall_error.png b/images/postinstall_error.png new file mode 100644 index 00000000..a2687354 Binary files /dev/null and b/images/postinstall_error.png differ diff --git a/images/postinstall_error_de.png b/images/postinstall_error_de.png new file mode 100644 index 00000000..7dde1d23 Binary files /dev/null and b/images/postinstall_error_de.png differ diff --git a/images/postinstall_web.png b/images/postinstall_web.png new file mode 100644 index 00000000..b51b25dc Binary files /dev/null and b/images/postinstall_web.png differ diff --git a/images/rainloop-logo.png b/images/rainloop-logo.png new file mode 100644 index 00000000..1cb320c2 Binary files /dev/null and b/images/rainloop-logo.png differ diff --git a/images/raspberrypi.png b/images/raspberrypi.png new file mode 100644 index 00000000..5bc82d16 Binary files /dev/null and b/images/raspberrypi.png differ diff --git a/images/registrar_api_gandi_1.png b/images/registrar_api_gandi_1.png new file mode 100644 index 00000000..9d193d8f Binary files /dev/null and b/images/registrar_api_gandi_1.png differ diff --git a/images/registrar_api_gandi_2.png b/images/registrar_api_gandi_2.png new file mode 100644 index 00000000..8ff5b43b Binary files /dev/null and b/images/registrar_api_gandi_2.png differ diff --git a/images/registrar_api_ovh_1.png b/images/registrar_api_ovh_1.png new file mode 100644 index 00000000..04ecdf52 Binary files /dev/null and b/images/registrar_api_ovh_1.png differ diff --git a/images/relay_smtp_option_webadmin_en.png b/images/relay_smtp_option_webadmin_en.png new file mode 100644 index 00000000..4985496b Binary files /dev/null and b/images/relay_smtp_option_webadmin_en.png differ diff --git a/images/relay_smtp_option_webadmin_fr.png b/images/relay_smtp_option_webadmin_fr.png new file mode 100644 index 00000000..257fe824 Binary files /dev/null and b/images/relay_smtp_option_webadmin_fr.png differ diff --git a/images/restore.png b/images/restore.png new file mode 100644 index 00000000..bb7f37c5 Binary files /dev/null and b/images/restore.png differ diff --git a/images/roundcube.png b/images/roundcube.png new file mode 100644 index 00000000..181e1862 Binary files /dev/null and b/images/roundcube.png differ diff --git a/images/roundcube_logo.svg b/images/roundcube_logo.svg new file mode 100644 index 00000000..04238a06 --- /dev/null +++ b/images/roundcube_logo.svg @@ -0,0 +1,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/images/rpi0.jpg b/images/rpi0.jpg new file mode 100644 index 00000000..75ff577b Binary files /dev/null and b/images/rpi0.jpg differ diff --git a/images/rpi1.png b/images/rpi1.png new file mode 100644 index 00000000..64b2b5a3 Binary files /dev/null and b/images/rpi1.png differ diff --git a/images/sdcard.jpg b/images/sdcard.jpg new file mode 100644 index 00000000..3281ab8b Binary files /dev/null and b/images/sdcard.jpg differ diff --git a/images/sdcard_with_adapter.png b/images/sdcard_with_adapter.png new file mode 100644 index 00000000..21a1b5d0 Binary files /dev/null and b/images/sdcard_with_adapter.png differ diff --git a/images/searx_logo.svg b/images/searx_logo.svg new file mode 100644 index 00000000..302d6c3f --- /dev/null +++ b/images/searx_logo.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/sfr-authentification.png b/images/sfr-authentification.png new file mode 100644 index 00000000..05aa6849 Binary files /dev/null and b/images/sfr-authentification.png differ diff --git a/images/sfr-filtrage.png b/images/sfr-filtrage.png new file mode 100644 index 00000000..9dce0226 Binary files /dev/null and b/images/sfr-filtrage.png differ diff --git a/images/simple-torrent_logo.png b/images/simple-torrent_logo.png new file mode 100644 index 00000000..b18f220d Binary files /dev/null and b/images/simple-torrent_logo.png differ diff --git a/images/slingcode_logo.svg b/images/slingcode_logo.svg new file mode 100644 index 00000000..8758bf4e --- /dev/null +++ b/images/slingcode_logo.svg @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/images/sogo_logo.png b/images/sogo_logo.png new file mode 100644 index 00000000..bfad4b53 Binary files /dev/null and b/images/sogo_logo.png differ diff --git a/images/strut_logo.png b/images/strut_logo.png new file mode 100644 index 00000000..db6668c8 Binary files /dev/null and b/images/strut_logo.png differ diff --git a/images/tada.png b/images/tada.png new file mode 100644 index 00000000..863661cd Binary files /dev/null and b/images/tada.png differ diff --git a/images/thunderbird.png b/images/thunderbird.png new file mode 100644 index 00000000..cc273cd4 Binary files /dev/null and b/images/thunderbird.png differ diff --git a/images/thunderbird_config_1.png b/images/thunderbird_config_1.png new file mode 100644 index 00000000..38539882 Binary files /dev/null and b/images/thunderbird_config_1.png differ diff --git a/images/thunderbird_config_2.png b/images/thunderbird_config_2.png new file mode 100644 index 00000000..82ba27a9 Binary files /dev/null and b/images/thunderbird_config_2.png differ diff --git a/images/transmission.png b/images/transmission.png new file mode 100644 index 00000000..96f8ab13 Binary files /dev/null and b/images/transmission.png differ diff --git a/images/ttrss.png b/images/ttrss.png new file mode 100644 index 00000000..4e747523 Binary files /dev/null and b/images/ttrss.png differ diff --git a/images/ulogger-logo.png b/images/ulogger-logo.png new file mode 100644 index 00000000..7aac5abe Binary files /dev/null and b/images/ulogger-logo.png differ diff --git a/images/unetbootin.png b/images/unetbootin.png new file mode 100644 index 00000000..9fd4e374 Binary files /dev/null and b/images/unetbootin.png differ diff --git a/images/usb_key.png b/images/usb_key.png new file mode 100644 index 00000000..ca033498 Binary files /dev/null and b/images/usb_key.png differ diff --git a/images/usbimager.png b/images/usbimager.png new file mode 100644 index 00000000..474f20a5 Binary files /dev/null and b/images/usbimager.png differ diff --git a/images/user_panel.png b/images/user_panel.png new file mode 100644 index 00000000..68f284aa Binary files /dev/null and b/images/user_panel.png differ diff --git a/images/virtualbox.png b/images/virtualbox.png new file mode 100644 index 00000000..9a5f6e54 Binary files /dev/null and b/images/virtualbox.png differ diff --git a/images/virtualbox_1.png b/images/virtualbox_1.png new file mode 100644 index 00000000..cb820dcc Binary files /dev/null and b/images/virtualbox_1.png differ diff --git a/images/virtualbox_2.1.png b/images/virtualbox_2.1.png new file mode 100644 index 00000000..f259ca5a Binary files /dev/null and b/images/virtualbox_2.1.png differ diff --git a/images/virtualbox_2.png b/images/virtualbox_2.png new file mode 100644 index 00000000..7cd1732f Binary files /dev/null and b/images/virtualbox_2.png differ diff --git a/images/virtualbox_3.png b/images/virtualbox_3.png new file mode 100644 index 00000000..6b4aed77 Binary files /dev/null and b/images/virtualbox_3.png differ diff --git a/images/virtualbox_packaging1-en.png b/images/virtualbox_packaging1-en.png new file mode 100644 index 00000000..ec1eaec0 Binary files /dev/null and b/images/virtualbox_packaging1-en.png differ diff --git a/images/virtualbox_packaging1-fr.jpg b/images/virtualbox_packaging1-fr.jpg new file mode 100644 index 00000000..572b9821 Binary files /dev/null and b/images/virtualbox_packaging1-fr.jpg differ diff --git a/images/virtualbox_packaging2-en.png b/images/virtualbox_packaging2-en.png new file mode 100644 index 00000000..87af1cca Binary files /dev/null and b/images/virtualbox_packaging2-en.png differ diff --git a/images/virtualbox_packaging2-fr.jpg b/images/virtualbox_packaging2-fr.jpg new file mode 100644 index 00000000..bb05484f Binary files /dev/null and b/images/virtualbox_packaging2-fr.jpg differ diff --git a/images/virtualbox_packaging3-en.png b/images/virtualbox_packaging3-en.png new file mode 100644 index 00000000..6802a50b Binary files /dev/null and b/images/virtualbox_packaging3-en.png differ diff --git a/images/virtualbox_packaging3-fr.jpg b/images/virtualbox_packaging3-fr.jpg new file mode 100644 index 00000000..850f44e5 Binary files /dev/null and b/images/virtualbox_packaging3-fr.jpg differ diff --git a/images/virtualbox_packaging4-en.png b/images/virtualbox_packaging4-en.png new file mode 100644 index 00000000..9e0f7684 Binary files /dev/null and b/images/virtualbox_packaging4-en.png differ diff --git a/images/virtualbox_packaging4-fr.jpg b/images/virtualbox_packaging4-fr.jpg new file mode 100644 index 00000000..d3528205 Binary files /dev/null and b/images/virtualbox_packaging4-fr.jpg differ diff --git a/images/virtualbox_packaging5-en.png b/images/virtualbox_packaging5-en.png new file mode 100644 index 00000000..942026ab Binary files /dev/null and b/images/virtualbox_packaging5-en.png differ diff --git a/images/virtualbox_packaging5-fr.jpg b/images/virtualbox_packaging5-fr.jpg new file mode 100644 index 00000000..cd0b9656 Binary files /dev/null and b/images/virtualbox_packaging5-fr.jpg differ diff --git a/images/virtualbox_packaging6.jpg b/images/virtualbox_packaging6.jpg new file mode 100644 index 00000000..10ccf4d1 Binary files /dev/null and b/images/virtualbox_packaging6.jpg differ diff --git a/images/vps.png b/images/vps.png new file mode 100644 index 00000000..42866e27 Binary files /dev/null and b/images/vps.png differ diff --git a/images/vps_ynh_arn.png b/images/vps_ynh_arn.png new file mode 100644 index 00000000..fd6cc5a4 Binary files /dev/null and b/images/vps_ynh_arn.png differ diff --git a/images/vps_ynh_ecowan.png b/images/vps_ynh_ecowan.png new file mode 100644 index 00000000..84b3ba5b Binary files /dev/null and b/images/vps_ynh_ecowan.png differ diff --git a/images/vps_ynh_faimaison.svg b/images/vps_ynh_faimaison.svg new file mode 100644 index 00000000..01c4eb9a --- /dev/null +++ b/images/vps_ynh_faimaison.svg @@ -0,0 +1,17 @@ + + + + + + + + + + maison + + + + \ No newline at end of file diff --git a/images/wallabag2_logo.svg b/images/wallabag2_logo.svg new file mode 100644 index 00000000..303860d9 --- /dev/null +++ b/images/wallabag2_logo.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/wallabag_logo.svg b/images/wallabag_logo.svg new file mode 100644 index 00000000..303860d9 --- /dev/null +++ b/images/wallabag_logo.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/webadmin.png b/images/webadmin.png new file mode 100644 index 00000000..cfb96101 Binary files /dev/null and b/images/webadmin.png differ diff --git a/images/webadmin_domain.png b/images/webadmin_domain.png new file mode 100644 index 00000000..0bb59620 Binary files /dev/null and b/images/webadmin_domain.png differ diff --git a/images/webadmin_domain_local.png b/images/webadmin_domain_local.png new file mode 100644 index 00000000..4af8a73f Binary files /dev/null and b/images/webadmin_domain_local.png differ diff --git a/images/webadmin_domain_owndomain.png b/images/webadmin_domain_owndomain.png new file mode 100644 index 00000000..e3c4fe58 Binary files /dev/null and b/images/webadmin_domain_owndomain.png differ diff --git a/images/webadmin_dyndns.png b/images/webadmin_dyndns.png new file mode 100644 index 00000000..059ae24c Binary files /dev/null and b/images/webadmin_dyndns.png differ diff --git a/images/webadmin_fr.png b/images/webadmin_fr.png new file mode 100644 index 00000000..7954be44 Binary files /dev/null and b/images/webadmin_fr.png differ diff --git a/images/weblate_logo.svg b/images/weblate_logo.svg new file mode 100644 index 00000000..feca88dc --- /dev/null +++ b/images/weblate_logo.svg @@ -0,0 +1,124 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/webmin_logo.png b/images/webmin_logo.png new file mode 100644 index 00000000..df1bbe78 Binary files /dev/null and b/images/webmin_logo.png differ diff --git a/images/webtrees_logo.png b/images/webtrees_logo.png new file mode 100644 index 00000000..46bf667f Binary files /dev/null and b/images/webtrees_logo.png differ diff --git a/images/wekan_logo.svg b/images/wekan_logo.svg new file mode 100644 index 00000000..da34a07a --- /dev/null +++ b/images/wekan_logo.svg @@ -0,0 +1 @@ +wekan-1_2 \ No newline at end of file diff --git a/images/wemawema_logo.png b/images/wemawema_logo.png new file mode 100644 index 00000000..cff5b9e7 Binary files /dev/null and b/images/wemawema_logo.png differ diff --git a/images/wikijs_logo.svg b/images/wikijs_logo.svg new file mode 100644 index 00000000..52c4a790 --- /dev/null +++ b/images/wikijs_logo.svg @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/wordpress_logo.svg b/images/wordpress_logo.svg new file mode 100644 index 00000000..8628e3ad --- /dev/null +++ b/images/wordpress_logo.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/writefreely-logo.png b/images/writefreely-logo.png new file mode 100644 index 00000000..ff0e1448 Binary files /dev/null and b/images/writefreely-logo.png differ diff --git a/images/writefreely_logo.svg b/images/writefreely_logo.svg new file mode 100644 index 00000000..294ca0a3 --- /dev/null +++ b/images/writefreely_logo.svg @@ -0,0 +1,69 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/images/wsl.png b/images/wsl.png new file mode 100644 index 00000000..23543057 Binary files /dev/null and b/images/wsl.png differ diff --git a/images/ynh_logo_black.svg b/images/ynh_logo_black.svg new file mode 100644 index 00000000..b25d6aaa --- /dev/null +++ b/images/ynh_logo_black.svg @@ -0,0 +1,35 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/images/ynh_logo_black_300dpi.png b/images/ynh_logo_black_300dpi.png new file mode 100644 index 00000000..26a1d15e Binary files /dev/null and b/images/ynh_logo_black_300dpi.png differ diff --git a/images/ynh_logo_white.svg b/images/ynh_logo_white.svg new file mode 100644 index 00000000..93cedbb1 --- /dev/null +++ b/images/ynh_logo_white.svg @@ -0,0 +1,60 @@ + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/images/ynh_logo_white_300dpi.png b/images/ynh_logo_white_300dpi.png new file mode 100644 index 00000000..f81019af Binary files /dev/null and b/images/ynh_logo_white_300dpi.png differ diff --git a/images/yourls-logo.png b/images/yourls-logo.png new file mode 100644 index 00000000..77bc95d4 Binary files /dev/null and b/images/yourls-logo.png differ diff --git a/images/yunohost_package.png b/images/yunohost_package.png new file mode 100644 index 00000000..bd844e5a Binary files /dev/null and b/images/yunohost_package.png differ diff --git a/images/z-push_logo.jpg b/images/z-push_logo.jpg new file mode 100644 index 00000000..ab0889f0 Binary files /dev/null and b/images/z-push_logo.jpg differ diff --git a/images/zabbix_logo.png b/images/zabbix_logo.png new file mode 100644 index 00000000..378fec3f Binary files /dev/null and b/images/zabbix_logo.png differ diff --git a/images/zap_logo.svg b/images/zap_logo.svg new file mode 100644 index 00000000..94578a3f --- /dev/null +++ b/images/zap_logo.svg @@ -0,0 +1,67 @@ + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/images/zerobin_logo.svg b/images/zerobin_logo.svg new file mode 100644 index 00000000..d63c65db --- /dev/null +++ b/images/zerobin_logo.svg @@ -0,0 +1 @@ + diff --git a/images/zerotier_logo.png b/images/zerotier_logo.png new file mode 100644 index 00000000..0e49bd3f Binary files /dev/null and b/images/zerotier_logo.png differ diff --git a/orphaned/default.es.md b/orphaned/default.es.md new file mode 100644 index 00000000..41876311 --- /dev/null +++ b/orphaned/default.es.md @@ -0,0 +1,11 @@ +# Nueva página + +Esta página todavía no existe, puedes editarla tecleando `````` en tu teclado, o clicando en el botón "Editar" abajo a la derecha de tu pantalla. Puedes echar un vistazo a los cambios que has efectuado empujando de nuevo la tecla `````` o clicando en el botón "Vistazo". + +** Nota : ** Necesitarás una dirección email para validar tu propuesta. + + +### Sintaxis +Esta página utiliza la sintaxis Markdown, refiérete a la documentación para más informaciones : + +http://daringfireball.net/projects/markdown/syntax diff --git a/orphaned/default.fr.md b/orphaned/default.fr.md new file mode 100644 index 00000000..270beabe --- /dev/null +++ b/orphaned/default.fr.md @@ -0,0 +1,11 @@ +# Nouvelle page + +Cette page n’existe pas encore, vous pouvez l’éditer en appuyant sur la touche ```<Échap>``` de votre clavier, ou en cliquant sur le bouton "Éditer" en bas à droite de votre écran. Vous pourrez avoir un aperçu de vos changements en appuyant à nouveau sur la touche ```<Échap>``` ou en cliquant sur le bouton "Aperçu". + +** Note : ** Vous aurez besoin d'une adresse email pour valider votre proposition. + + +### Syntaxe +Cette page utilise la syntaxe Markdown, veuillez vous référer à la documentation pour plus d’informations : + +http://daringfireball.net/projects/markdown/syntax diff --git a/orphaned/default.it.md b/orphaned/default.it.md new file mode 100644 index 00000000..89f495de --- /dev/null +++ b/orphaned/default.it.md @@ -0,0 +1,11 @@ +# Nuova Pagina + +Questa pagina non è ancora stata creata, puoi modificarla premendo `````` sulla tua tastiera o cliccando il pulsante "Modifica" in basso a destra del tuo schermo. Potrai vedere l'anteprima delle tue modifiche premendo ancora `````` o cliccando il pulsante "Anteprima". + +** Nota: ** Devi fornire un indirizzo email per confermare le tue modifiche. + +### Sintassi + +Questa pagina usa la sintassi markdown, per favore fai riferimento alla documentazione per ulteriori informazioni: + +http://daringfireball.net/projects/markdown/syntax diff --git a/orphaned/default.md b/orphaned/default.md new file mode 100644 index 00000000..08ee4d98 --- /dev/null +++ b/orphaned/default.md @@ -0,0 +1,11 @@ +# New page + +This page is not created yet, you can edit it by pressing `````` on your keyboard or by clicking the "edit" button on the bottom-right side of your screen. You will be able to preview your changes by pressing `````` again or by clicking the "preview" button. + +** Note: ** You will need to provide an email address to validate your submission. + +### Syntax + +This page use the markdown syntax, please refer to the documentation for further informations: + +http://daringfireball.net/projects/markdown/syntax diff --git a/orphaned/dns.es.md b/orphaned/dns.es.md new file mode 100644 index 00000000..b4a5f53b --- /dev/null +++ b/orphaned/dns.es.md @@ -0,0 +1,37 @@ +# DNS : sistema de nombre de dominios + +La configuración de los DNS es una etapa crucial para que tu servidor esté accesible. En efecto, si tus DNS están mal configurados, con mucha certeza tendrás problemas de conexión a tu servidor vía tu nombre de dominio. + +*Aunque esta etapa de documentación parezca larga y compleja, sigue siendo muy importante si quieres entender correctamente las implicaciones de la denominación en Internet vía los nombres de dominio, que son necesarios para el funcionamiento de tu servidor YunoHost.* + +### ¿ Qué es ? + +DNS significa « Domain Name Server » en inglés, y está frecuentemente empleado para designar la configuración de tus nombres de dominio. Tu nombre de dominio debe apuntar hacia algo (en general, una dirección IP). + +**Por ejemplo** : `yunohost.org` apunta hacia `88.191.153.110`. + +Este sistema fue creado para poder memorizar más fácilmente las direcciones de servidores. Existen registros DNS en los cuales hay que apuntarse. Esto se hace con **registrars** que te alquilarán estos nombres de dominio a cambio de cierto importe (entre cinco y algunas centenas de euros). Estos [registrars](/registrar) son entidades privadas autorizadas por el [ICANN](https://es.wikipedia.org/wiki/Corporaci%C3%B3n_de_Internet_para_la_Asignaci%C3%B3n_de_Nombres_y_N%C3%BAmeros), tales como [Gandi](http://gandi.net), [OVH](http://ovh.com) o [BookMyName](http://bookmyname.com). + +Es importante notar que los subdominios no necesariamente apuntan al dominio principal. + +Si `yunohost.org` apunta hacia `88.191.153.110`, no quiere decir que `backup.yunohost.org` apunte hacia la misma IP. Tienes que configurar **todos** los dominios y subdominios que deseas utilizar. + +También existen **tipos** de registros DNS, lo que significa que un dominio puede apuntar hacia otra cosa que una dirección IP. + +**Por ejemplo** : `www.yunohost.org` apunta hacia `yunohost.org` + + +### ¿ Cómo (bien) hacer la configuración ? + +Tienes varias opciones. Nota que puedes cumular estas soluciones si posees varios dominios : por ejemplo, puedes tener `mi-servidor.nohost.me` utilizando la solución **1.**, et `mi-servidor.org` utilizando la solución **2.**, redirigiéndolos hacia el mismo servidor YunoHost. + +1. Puedes utilizar [el servicio DNS de YunoHost](/dns_nohost_me), que configurará él mismo los DNS de tu instancia YunoHost. Pero en este caso, tienes que elegir un dominio terminando por `.nohost.me`, `.noho.st` o `.ynh.fr`, lo que puede tener inconvenientes (tendrás direcciones email tales como `juan@mi-servidor.noho.st`). +**Es el método recomendado si estás debutando.** + +2. Puedes utilizar el servicio de DNS de tu **registrar** (Gandi, OVH, BookMyName u otro) para configurar tus nombres de dominio. Ésta es la [configuración DNS estándar](/dns_config). También es posible utilizar una redirección DNS local, más información sobre cómo [Acceder a su servidor desde la red local](/dns_local_network). +También puedes consultar las documentaciones específicas a estas varias [oficinas de registro](/registrar) : [Gandi](http://gandi.net), [OVH](/OVH) o [BookMyName](http://bookmyname.com). + +**Atención** : Si eliges este modo de funcionamiento, tendrás más flexibilidad, pero nada será automático. Por ejemplo si quieres utilizar `webmail.mi-servidor.org`, tendrás que añadirlo manualmente en la interfaz de tu registrar. + +3. (Advanced, not 100% supported, do this only if you know what you're doing) Tu instancia tiene un servicio DNS, lo que quiere decir que configura automáticamente sus registros DNS y que es posible delegarle la administración de estos registros. Por eso, tienes que indicar al **registrar** que es tu instancia YunoHost que es el servidor DNS de tu nombre de dominio creando un registro glue (a menudo denominado **glue record**) apuntando hacia la IP de tu instancia YunoHost. +

**Atención** : Si eliges este modo de funcionamiento, todas las configuraciones serán automatizadas, tendrás mucha flexibilidad pero la pérdida de tu servidor potencialmente traerá muchos problemas. **Elige este método si estás muy seguro de los que estás haciendo.** diff --git a/orphaned/dns.fr.md b/orphaned/dns.fr.md new file mode 100644 index 00000000..444ceadf --- /dev/null +++ b/orphaned/dns.fr.md @@ -0,0 +1,40 @@ +# DNS : système de nom de domaine + +La configuration des DNS est une étape cruciale pour que votre serveur soit accessible. En effet si vos DNS sont mal configurés, il y a toutes les chances pour que vous ayez des problèmes de connexion à votre serveur via votre nom de domaine. + +*Bien que cette page de documentation paraisse longue et complexe, elle demeure très importante si vous souhaitez comprendre correctement les implications du nommage sur Internet via les noms de domaine, qui sont nécessaires au fonctionnement de votre serveur YunoHost.* + +### Qu’est-ce que c’est ? + +**N’hésitez pas à regarder la très bonne conférence de Stéphane Bortzmeyer :** + +https://www.iletaitunefoisinternet.fr/post/1-dns-bortzmeyer/ + +DNS signifie « Domain Name Server » en anglais, et est souvent employé pour désigner la configuration de vos noms de domaine. Vos noms de domaines doivent en effet pointer vers quelque chose (en général une adresse IP). + +**Par exemple** : `yunohost.org` renvoie vers `88.191.153.110`. + +Ce système a été créé pour pouvoir retenir plus facilement les adresses de serveur. Il existe donc des registres DNS dans lesquels il faut s’inscrire. Ceci peut être fait auprès de **registrars** qui vous feront louer ces noms de domaine contre une certaine somme (entre cinq et quelques centaines d’euros). Ces [registrars](/registrar) sont des entités privées autorisées par l’[ICANN](http://fr.wikipedia.org/wiki/ICANN), telles que [Gandi](http://gandi.net), [OVH](http://ovh.com) ou [BookMyName](http://bookmyname.com). + +Il est important de noter que les sous-domaines ne renvoient pas nécessairement au domaine principal. +Si `yunohost.org` renvoie vers `88.191.153.110`, ça ne signifie pas que `backup.yunohost.org` renvoie vers la même IP. Vous devez donc configurer **tous** les domaines et sous-domaines que vous souhaitez utiliser. + +Il existe également des **types** d’enregistrement DNS, ce qui veut dire qu’un domaine peut renvoyer vers autre chose qu’une adresse IP. + +**Par exemple** : `www.yunohost.org` renvoie vers `yunohost.org` + + +### Comment (bien) faire la configuration ? + +Plusieurs choix s’offrent à vous. Notez que vous pouvez cumuler ces solutions si vous possédez plusieurs domaines : par exemple vous pouvez avoir `mon-serveur.nohost.me` en utilisant la solution **1.**, et `mon-serveur.org` en utilisant la solution **2.**, redirigeant vers le même serveur YunoHost. + +1. Vous pouvez utiliser [le service de DNS de YunoHost](/dns_nohost_me), qui s’occupera de configurer tout seul les DNS de votre instance YunoHost. Vous devrez en revanche choisir un domaine se terminant par `.nohost.me`, `.noho.st` ou `.ynh.fr`, ce qui peut être inconvenant (vous aurez alors des adresses email telles que `jean@mon-serveur.noho.st`). +**C’est la méthode recommandée si vous débutez.** + +2. Vous pouvez utiliser le service de DNS de votre **registrar** (Gandi, OVH, BookMyName ou autre) pour configurer vos noms de domaine. Voici la [configuration DNS standard](/dns_config). Il est aussi possible d'utiliser une redirection DNS locale, plus d'infos sur comment [Accéder à son serveur depuis le réseau local](/dns_local_network). +Vous pouvez également consulter les documentations spécifiques à ces différents [bureaux d’enregistrement](/registrar) : [Gandi](http://gandi.net), [OVH](/OVH) ou [BookMyName](http://bookmyname.com). + +**Attention** : Si vous choisissez ce mode de fonctionnement, vous aurez plus de flexibilité, mais rien ne sera automatique. Par exemple si vous souhaitez utiliser `webmail.mon-serveur.org`, vous devrez l’ajouter manuellement chez votre registrar. + +3. (Avancé, pas 100% supporté...) Votre instance YunoHost possède un service DNS, ce qui veut dire qu’il configure automatiquement ses enregistrements DNS, et qu’il est possible de lui en déléguer la gestion. Pour ce faire, vous devez indiquer au **registrar** que c’est votre instance YunoHost qui est le serveur DNS de votre nom de domaine en créant un enregistrement glue (souvent appelé **glue record**) pointant vers l’IP de votre instance YunoHost. +

**Attention** : Si vous choisissez ce mode de fonctionnement, toutes les configurations seront automatiques, vous disposerez d’une grande flexibilité, mais la perte de votre serveur entraînera potentiellement beaucoup d’ennuis. **Choisissez cette méthode seulement si vous êtes à l'aise et comprenez les conséquences** diff --git a/orphaned/dns.md b/orphaned/dns.md new file mode 100644 index 00000000..9666ec73 --- /dev/null +++ b/orphaned/dns.md @@ -0,0 +1,38 @@ +# DNS: Domain Name System + +DNS configuration is a crucial stage for rendering your server accessible to the wider Internet. If your DNS is poorly configured, you are liable to have a lot of problems in connecting to your server via your domain name. + +*Even though this page appears long and complex, it is very important to understand the implications of Internet domain names, which are necessary for the proper function of your YunoHost server.* + +### What is it? + +DNS stands for "Domain Name Server", and is often used for the configuration of your domain names. Your domain names must point at a specific identifier (generally at an IP address.) + +**For example**: `yunohost.org` points to the server at `88.191.153.110`. + +This system was created to more easily keep track of server addresses. There are DNS registries for Internet names that you must register with. They are called "registrars", which will let you rent certain domain names for a price (between $5 or a few hundred, depending on the root domain and the chosen name). These [registrars](/registrar) are private entities authorised by [ICANN](http://en.wikipedia.org/wiki/ICANN), such as [OVH](https://www.ovh.co.uk/index.xml), [Gandi](http://gandi.net), [NameCheap](http://namecheap.com) or [BookMyName](http://bookmyname.com). A privacy respecting registrar is [Njalla](https://njal.la/) or [Njalla Onion Site](http://njalladnspotetti.onion). With Njalla, you can register a domain name with just an email or XMPP address (N.B. : you won't have full control and ownership of the domain though). + +It is important to note that subdomains do not necessarily have to send you to wherever the principal domain is pointing. If `yunohost.org` sends to `88.191.153.110`, that doesn't mean that `backup.yunohost.org` has to point at the same IP. You must therefore configure **all** of the domains and subdomains that you want to use. + +There are also different **types** of DNS records, which means that a domain can point at something other than an IP address. + +**For example**: `www.yunohost.org` will send you to `yunohost.org` + +### How to (properly) set up a DNS name? + +You have several choices here. Note that you can mix and match solutions if you have multiple domains: for example, you can have `my-server.nohost.me` using solution **1.**, and `my-server.org` using solution **2.**, both leading to the same YunoHost server. + +1. You can use [YunoHost's DNS service](/dns_nohost_me), which will automatically configure your DNS for you. You must choose a domain that ends with `.nohost.me`, `.noho.st` or `.ynh.fr` for this, which may be inconvenient for you (you would then only be able to use an email address like `john@my-server.noho.st`). + + **This is the recommended option if you are just starting out with self-hosting.** + +2. You can use the DNS service offered by your **registrar** (Gandi, NameCheap, BookMyName or others) to configure your domain name. Here is the [standard DNS configuration](/dns_config). The DNS service of your router can also be used, more info on [how to setup a local domain](/dns_local_network). +You can also check out these pages for specific [registrar](/registrar) documentation: [OVH](https://www.ovh.co.uk/index.xml), [Gandi](http://gandi.net), [NameCheap](http://namecheap.com) or [BookMyName](http://bookmyname.com). + + **Warning**: If you choose this option, you will have more configuration possibilities, but nothing will be done for you. For example, if you want to use `webmail.my-server.org`, you must add it manually to the DNS records with your registrar. + +3. (Advanced, not 100% supported...) Your YunoHost instance has its own DNS service, which means it will automatically configure its own DNS records, and that you can leave the setup to the instance itself. To do this, you must explain to your **registrar** that your YunoHost instance is the authoritative DNS server for your domain name. + + **Warning**: If you choose this option, all configuration options will be done automatically, you will retain a good deal of flexibility, but if your server gets knocked offline you will run into many problems. **Choose this only if you understand the implications.** + + diff --git a/orphaned/index.ar.md b/orphaned/index.ar.md new file mode 100644 index 00000000..af485420 --- /dev/null +++ b/orphaned/index.ar.md @@ -0,0 +1,174 @@ +
+ + + +
+

+ تعالي إلى منزلي، أنا مُستضافة عند صديقة + إن لم تقم باستضافة نفسك بنفسك في عمر الخمسين فاعرف أنك قد فشلت في حياتك + فاستضافوا أنفسهم بأنفسم و كانت لهم ذرية كثيرة + الإنترنت، قراءة و كتابة + monsieur@michu.fr + ليس هناك ما أخفيه + كيف التقيتُ بالسيرفر الخاص بك +

+ +
+ + + +
+ +
+ +

YunoHost أداة تُمكّنكم من تنصيب و استخدام خادمكم بأسلوب سهل.

+ +
+ +
+ +
+ +
+ +
+
+

قوموا بتنصيب خادومكم بكل سهولة، إنكم تمتلكون في المنزل كل ما تحتاجون إليه

+

الإطلاع على المتطلبات الأساسية

+
+
+
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+

استمتعوا بتطبيقات الويب الخاصة بكم و انْشِئُوا موطنكم الصغير على الإنترنت

+


قائمة التطبيقات المتوفرة

+
+
+ +
+ +
+
+

أديروا السيرفر الخاص بكم كما يحلو لكم : سواءا عبر الويب أو أجهزتكم المحمولة أو عبر سطر الأوامر

+


جربوا الواجهة الإدارية

+
+
+
+ +
+
+
+ +
+ +
+ +
+

إكتشفوا قدرات خادمكم، ولماذا يهمكم الأمر

+


إطلعوا على الدليل

+
+
+ +
+ +
+

تذكروا ! نحن بشر !
إن كان عندكم تساؤل أو واجهتكم مشكلة أو ربما يهمُّكُم المشروع فقط، انضموا إلينا عبر غرفة المحادثة الخاصة بنا لتبليغنا التحية بالنقر على الزر أدناه  

+ + +

+ Donation button +

+ +
+ +
+ +
+
+

They support us <3
+ We are thankful for our sponsors
providing us with infrastructure and grants!
+

+

+ + + +

+

+ + + + + +

+
+
+ + +
+ + diff --git a/orphaned/index.de.md b/orphaned/index.de.md new file mode 100644 index 00000000..0fde591a --- /dev/null +++ b/orphaned/index.de.md @@ -0,0 +1,174 @@ +
+ + + +
+

+ Self-Hosting für dich, Mama. + Haters gonna host + Ich host es mir selbst, Baby + Host dich doch selber! + Raus aus meiner Cloud + Hostet mich, ich bin berühmt. + Internet ausprobieren + Ich werd’ noch zum Host + erika@mustermann.de + Alter, Y U NO Host?! + Wer wird denn gleich zu ’nem Host gehen +

+ +
+ + +
+ +
+ +

YunoHost ist ein Serverbetriebssystem, das
+Self-Hosting für alle ermöglicht.

+ +
+ +
+ + + +
+
+

Installiere Dir ganz einfach Deinen eigenen Server. Du hast bereits alles, was Du dazu brauchst.

+


Hardware-Voraussetzungen

+
+
+
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+

Verwende Deine Lieblings-Apps und richte Dir Deine eigene kleine Ecke im Netz ein.

+


Liste der verfügbaren Apps

+
+
+ +
+ +
+
+

Verwalte Deinen Server, wie es Dir am besten gefällt: übers Web, mobil oder mit der Kommandozeile.

+


Verwaltung ausprobieren

+
+
+
+ +
+
+
+ +
+ +
+ +
+

Entdecke die Möglichkeiten, die Du mit einem eigenen Server hast
– und warum Self-Hosting Sinn macht.

+


Dokumentation lesen

+
+
+ +
+ +
+

Hallo! Wir sind auch nur Menschen.
Wenn Du eine Frage oder ein Problem hast, oder auch nur neugierig bist, hinterlass’ einfach eine Nachricht in unserem Chat – ein Klick auf den untenstehenden Button genügt. 

+ +

+ Spendenlink +

+ +
+ +
+ +
+
+

They support us <3
+ We are thankful for our sponsors
providing us with infrastructure and grants!
+

+

+ + + +

+

+ + + + + +

+
+
+ + +
+ + + diff --git a/orphaned/index.es.md b/orphaned/index.es.md new file mode 100644 index 00000000..3a29ed7b --- /dev/null +++ b/orphaned/index.es.md @@ -0,0 +1,172 @@ +
+ + + +
+

+ Okupa tu servidor + ¡Yo me alojo a mi mismo! + ¡Anda y que te alojen! + Fuera de mi nube + Alójame, soy famoso + Prueba Internet + Su fiel servidor + yo@mismo.parami + Tío ¡¿X K NO alojas?! + Tranqui y alójate +

+ +
+ + + +
+ +
+ +

YunoHost es un sistema operativo de servidor que pretende hacer accesible el autoalojamiento para todo el mundo.

+ +
+ +
+ + + +
+
+

Instale su servidor fácilmente, ya tiene todo en su casa

+


Vea los requisitos

+
+
+
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+

Disfrute sus aplicaciones y construya su rinconcito de Internet

+


Lista de aplicaciones disponibles

+
+
+ +
+ +
+
+

Gestione su servidor como le guste: vía web, móvil o línea de órdenes

+


Pruebe la administración

+
+
+
+ +
+
+
+ +
+ +
+ +
+

Explore lo que puede hacer con un servidor y la razón de su importancia

+


Lea la documentación

+
+
+ +
+ +
+

¡Oye! ¡Somos humanos!
Si tiene alguna pregunta, problema o es simplemente un fan, deje un mensaje en nuestra sala de chat pulsando en el botón inferior  

+ +

+ Botón de donación +

+ +
+ +
+ +
+
+

They support us <3
+ We are thankful for our sponsors
providing us with infrastructure and grants!
+

+

+ + + +

+

+ + + + + +

+
+
+ + +
+ + diff --git a/orphaned/index.fr.md b/orphaned/index.fr.md new file mode 100644 index 00000000..54333a4d --- /dev/null +++ b/orphaned/index.fr.md @@ -0,0 +1,157 @@ +
+ + + +
+

+ Viens chez moi, je suis hébergé chez une copine + Ils s’hébergèrent et eurent beaucoup d’enfants + Internet, lecture et écriture + monsieur@michu.fr + J’ai rien à cacher + How I met your server +

+ +
+ + + +
+ +
+ +

Avec YunoHost, gérez facilement un serveur pour vos amis, votre association, votre entreprise. En savoir plus

+ +
+ +
+ + + +
+ +
+
+

Installez votre serveur simplement, vous avez déjà tout ce qu’il faut à la maison

+

Voir les prérequis

+
+
+
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+

Gérez votre serveur depuis une interface web simple et propre

+


Essayez l’interface d’administration

+
+
+ +
+ +
+
+

Construisez votre petit bout d’Internet en ajoutant des applications en quelques clics

+


Parcourir le catalogue d’applications

+
+
+
+ +
+
+
+ +
+ +
+
+

Hey ! Nous sommes humains !
+ Si vous avez une question, un problème, ou que vous êtes tout simplement intéressé, passez dire « Bonjour » sur notre forum ou le chat!

+
+ +
+ +
+ +
+
+

Nos soutiens <3
+ Nous sommes reconnaissant envers nos mécènes
qui nous soutiennent financièrement ou via des dons d'infrastructure
+

+

+ + + +

+

+ + + + + +

+
+
+ + +
+ + + diff --git a/orphaned/index.it.md b/orphaned/index.it.md new file mode 100644 index 00000000..e0884761 --- /dev/null +++ b/orphaned/index.it.md @@ -0,0 +1,174 @@ +
+ + + +
+

+ Self-hosting for you, mom + Haters gonna host + I host myself, Yo! + Go host yourself! + Get off of my cloud + Host me I’m famous + Try Internet + How I met your server + mario@rossi.it + dude, Y U NO Host?! + Keep calm and host yourself +

+ +
+ + + +
+ +
+ +

YunoHost è un sistema operativo per server con l'obiettivo di rendere il self-host accessibile a tutti.

+ +
+ +
+ + + +
+
+

Installa il tuo server con facilità, hai già tutto a casa

+


Vedi i requisiti

+
+
+
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+

Dilettati con le tue app e crea il tuo piccolo angolo di Internet

+


Lista delle app disponibili

+
+
+ +
+ +
+
+

Gestisci il tuo server nel modo che preferisci: via Web, mobile o riga di comando

+


Prova l'amministrazione

+
+
+
+ +
+
+
+ +
+ +
+ +
+

Esplora cosa puoi fare con un server, e perché è importante

+


Leggi la documentazione

+
+
+ +
+ +
+

Hey! Siamo umani!
Se hai domande, problemi o se sei solo un appassionato, lascia un messaggio sulla nostra chat cliccando il pulsante qui sotto  

+ +

+ Donation button +

+ +
+ +
+ +
+
+

They support us <3
+ We are thankful for our sponsors
providing us with infrastructure and grants!
+

+

+ + + +

+

+ + + + + +

+
+
+ + +
+ + + diff --git a/orphaned/index.md b/orphaned/index.md new file mode 100644 index 00000000..c18bd033 --- /dev/null +++ b/orphaned/index.md @@ -0,0 +1,160 @@ +
+ + + +
+

+ Haters gonna host + I host myself, Yo! + Go host yourself! + Get off of my cloud + Host me I’m famous + Try Internet + How I met your server + john@doe.org + dude, Y U NO Host?! + Keep calm and host yourself + Be the cloud you want to see in the world +

+ +
+ + + +
+ +
+ +

With YunoHost, you can easily manage a server for your friends, association or enterprise. Learn more

+ +
+ +
+ + + + +
+
+

Setup your server with ease, you already have everything at home

+


See the requirements

+
+
+
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+

Manage your server from a clean and simple web interface

+


Try the administration

+
+
+ +
+ +
+
+

Install applications to build your little corner of Internet

+


Browse the app catalog

+
+
+
+ +
+
+
+ +
+ +
+
+

Hey! We are humans!
+ If you have questions, issues or if you are just an enthusiast, come and leave a message on our forum or chatroom!

+ + +
+
+ +
+ +
+
+

They support us <3
+ We are thankful for our sponsors
providing us with infrastructure and grants!
+

+

+ + + +

+

+ + + + + +

+
+
+ +
+ + diff --git a/orphaned/index.oc.md b/orphaned/index.oc.md new file mode 100644 index 00000000..80c1c013 --- /dev/null +++ b/orphaned/index.oc.md @@ -0,0 +1,172 @@ +
+ + + +
+

+ Ven a l’ostal, soi albergat en çò d’una amiga + S’alberguèron e aguèron un molon d’enfants + Internet, lectura e escritura + monssur@michu.fr + Ai pas res a rescondre + How I met your server +

+ +
+ + + +
+ +
+ +

YunoHost es una aisina que vos permet d’installar e d’utilizar facilament vòstre pròpri servidor.

+ +
+ +
+ + + +
+ +
+
+

Installatz vòstre servidor simplament, avètz ja tot çò que cal a l’ostal

+

Far veire los requistes

+
+
+
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+

Profitatz de vòstras aplicacions web e fabricatz vòstre canton d’Internet

+


Lista de las aplicacions disponiblas

+
+
+ +
+ +
+
+

Gerissètz vòstre servidor coma volgatz : via web, mobil o en linha de comanda

+


Ensajar l’interfàcia d’administracion

+
+
+
+ +
+
+
+ +
+ +
+ +
+

Exploratz las possibilitats de vòstre servidor, e aprenètz perque es important

+


Legir la documentacion

+
+
+ +
+ +
+

Ou ! Sèm umans !
S’avètz una question, un problèma, o que sètz simplament interessat, venètz dire « Bonjorn » dins nòstra sala de discussion en clicar lo boton aval  

+ +

+ Donation button +

+ +
+ +
+ +
+
+

They support us <3
+ We are thankful for our sponsors
providing us with infrastructure and grants!
+

+

+ + + +

+

+ + + + + +

+
+
+ + +
+ + + diff --git a/orphaned/news.md b/orphaned/news.md new file mode 100644 index 00000000..a3975fc3 --- /dev/null +++ b/orphaned/news.md @@ -0,0 +1,48 @@ +# YunoHost News + +
+
+ + + + + + diff --git a/orphaned/registrar.fr.md b/orphaned/registrar.fr.md new file mode 100644 index 00000000..c8a5d5a0 --- /dev/null +++ b/orphaned/registrar.fr.md @@ -0,0 +1,8 @@ +# Bureaux d’enregistrement + +Voici une liste des bureaux d’enregistrement pour acheter un nom de domaine : +* [OVH](http://ovh.com/) +* [Gandi](http://gandi.net/) +* [Namecheap](https://www.namecheap.com/) +* [BookMyName](https://www.bookmyname.com/) +* [GoDaddy](https://godaddy.com/) /!\ GoDaddy [n'est pas un bon exemple pour la censure](https://en.wikipedia.org/wiki/GoDaddy#Controversies) diff --git a/orphaned/registrar.md b/orphaned/registrar.md new file mode 100644 index 00000000..0fa657dc --- /dev/null +++ b/orphaned/registrar.md @@ -0,0 +1,8 @@ +# Registar + +Here is a list of Registrars to book domain names: +* [OVH](http://ovh.com/) +* [Gandi](http://gandi.net/) +* [Namecheap](https://www.namecheap.com/) +* [BookMyName](https://www.bookmyname.com/) +* [GoDaddy](https://godaddy.com/) /!\ GoDaddy is [not a good example about censorship](https://en.wikipedia.org/wiki/GoDaddy#Controversies) diff --git a/pages/00.home/docs.de.md b/pages/00.home/docs.de.md new file mode 100644 index 00000000..6ec4aa8a --- /dev/null +++ b/pages/00.home/docs.de.md @@ -0,0 +1,36 @@ +--- +title: Herzlich willkommen! +template: docs +taxonomy: + category: docs +routes: + default: '/docs' + aliases: + - '/' +visible: false +--- + +Dies ist die Dokumentation von [YunoHost, einem freien Betriebssystem, das die Serververwaltung vereinfachen und das Selbsthosting demokratisieren soll](/whatsyunohost). + +Weitere Informationen zum Selbsthosting, zur Installation deines eigenen YunoHost-Servers und zur Installation der ersten Apps findest du im [Administratorhandbuch](/admindoc). + +Du kannst in den [Anwendungskatalog](/apps) schauen, um die Apps anzusehen, die auf deinem Server installiert werden können (Natürlich geht das auch direkt über deine Administrationsoberfläche!). + + +Wenn du Hilfe benötigst, ist die [Community](/community) für dich da: [Chatte](/chat_rooms) mit uns oder schau in das [Forum](/community/forum)! + +[center] + + Administratorhandbuch + Anwendungen + Community + Beteilige dich + +[/center] + + +[center] + Zurück zur Homepage +[/center] + +!!!! Um in diesem Dokument zu navigieren, kannst du die linke und rechte Pfeiltaste verwenden. Navigiere mit dem [fa=bars /] Seitenbereich oder über das [fa=search /] Suchfeld direkt zu dem gewünschten Abschnitt. Viel Spaß! diff --git a/pages/00.home/docs.es.md b/pages/00.home/docs.es.md new file mode 100644 index 00000000..55b98143 --- /dev/null +++ b/pages/00.home/docs.es.md @@ -0,0 +1,35 @@ +--- +title: ¡Bienvenida! +template: docs +taxonomy: + category: docs +routes: + default: '/docs' + aliases: + - '/' +visible: false +--- + +Estás en la documentación de [YunoHost, un sistema operativo libre con el objeto de simplificar la administración de servidores y democratizar el auto-hospedaje web](/whatsyunohost). + +Como proxima administradora de tu servidor, visita la [Guía de administración](/admindoc) para aprender más del auto-hospedaje web, Como instalar tu servidor YunoHost y añadirle las primeras apps. + +Échale un ojo al [catálogo de aplicaciones](/apps) para navegar las aplicaciones disponibles (¡aunque también puedes verlas directamente en la interfaz de administración!) + +La [Comunidad](/community) esta disponible para ayudarte : entra en el [chat](/chat_rooms) o contáctanos por el [foro](/community/forum) ! + +[center] + + Guía de administración + Catálogo de aplicaciones + Communidad + ¡Colabora! + +[/center] + + +[center] + Volver a la página principal +[/center] + +!!!! Puedes navegar la documentación usando las flechas izquierda y derecha. Salta directamente a la sección que quieras mediante [fa=bars /] el panel lateral, o usando el campo de [fa=search /] búsqueda. ¡Disfruta! diff --git a/pages/00.home/docs.fr.md b/pages/00.home/docs.fr.md new file mode 100644 index 00000000..58ab6ccb --- /dev/null +++ b/pages/00.home/docs.fr.md @@ -0,0 +1,35 @@ +--- +title: Bienvenue ! +template: docs +taxonomy: + category: docs +routes: + default: '/docs' + aliases: + - '/' +visible: false +--- + +Ce site contient la documentation de [YunoHost, un système d'exploitation libre qui vise à simplifier l'administration d'un serveur et à démocratiser l'auto-hébergement](/whatsyunohost). + +En tant que futur jardinier de votre propre serveur, commencez par visiter le [guide de l'administrateur](/admindoc) pour en savoir plus sur l'autohébergement, comment installer votre serveur, et installer vos premières applications. + +Vous pouvez explorer le [catalogue d'application](/apps) installable sur votre serveur (bien qu'il soit aussi consultable directement depuis votre interface d'administration !) + +La [communauté](/community) est là si vous avez besoin d'aide : venez discuter sur les [salons de discussions](/chat_rooms) ou posez vos questions sur le [forum](/community/forum) ! + +[center] + + Guide d'administration + Applications + Communauté + Contribuer + +[/center] + +[center] + Retourner à la page d'accueil du site +[/center] + + +!!!! Pour naviguer dans cette documentation, vous pouvez utiliser les flèches gauches et droites. Utilisez le [fa=bars /] panneau latéral pour aller directement dans les sections qui vous intéresse ou en utilisant la [fa=search /] barre de recherche. Enjoy! diff --git a/pages/00.home/docs.it.md b/pages/00.home/docs.it.md new file mode 100644 index 00000000..769846af --- /dev/null +++ b/pages/00.home/docs.it.md @@ -0,0 +1,33 @@ +--- +title: Benvenut ! +template: docs +taxonomy: + category: docs +routes: + default: '/docs' + aliases: + - '/' +visible: false +--- + +Questo sito contiene la documentazione di [YunoHost, un sistema operativo libero che si pone come obiettivo quello di semplificare l'amministrazione di un server e democraticizzare il self-hosting](/whatsyunohost). + +Nell'attesa che possiate occuparvi di un vostro server, potete cominciare a consultare la [guida dell'amministratore](/admindoc) per conoscere il self-hosting, come installare YunoHost sul vostro server e come installare le vostre prime applicazioni. + +Potete esplorare il [catalogo delle applicazioni](/apps) installabili sul vostro server (che può essere comunque consultato direttamente dalla vostra interfaccia d'amministrazione!) + +La [comunità](/community) è disponibile se avete bisogno di aiuto: potete venire a discutere nelle [stanze di discussione](/chat_rooms) oppure porre le vostre domande sul [forum](/community/forum)! + +[center] + + Guida d'amministrazione + Applicazioni + Comunità + Contribuire + +[center] + Torna alla home del sito +[/center] + +!!!! Per navigare in questa documentazione potete utilizzare i tasti freccia destra e sinistra. Navigate direttamente nella sezione che vi interessa con il [fa=bars /] pannello laterale o utilizzate il [fa=search /] box di ricerca. Enjoy! + diff --git a/pages/00.home/docs.md b/pages/00.home/docs.md new file mode 100644 index 00000000..3f2534c9 --- /dev/null +++ b/pages/00.home/docs.md @@ -0,0 +1,35 @@ +--- +title: Welcome! +template: docs +taxonomy: + category: docs +routes: + default: '/docs' + aliases: + - '/' +visible: false +--- + +This is the documentation for [YunoHost, a libre operating system aiming to simplify server administration and democratize self-hosting](/whatsyunohost). + +As a soon-to-be administrator of your own server, go to the [Admin guide](/admindoc) to learn more about self-hosting, how to install your YunoHost server and install your first apps. + +You can check out the [application catalog](/apps) to browse apps that can be installed on a server (though you can also explore it directly from your admin interface !) + +The [Community](/community) is here for you if you need some help : come [chat](/chat_rooms) with us or reach out on the [forum](/community/forum) ! + +[center] + + Administrator's guide + Applications + Community + Get involved + +[/center] + + +[center] + Go back to the homepage +[/center] + +!!!! To navigate this documentation, you can use your left and right arrow keys. Browse directly to the section you want with the [fa=bars /] side panel, or using the [fa=search /] search box. Enjoy! diff --git a/pages/00.home/docs.ru.md b/pages/00.home/docs.ru.md new file mode 100644 index 00000000..6428ad0f --- /dev/null +++ b/pages/00.home/docs.ru.md @@ -0,0 +1,35 @@ +--- +title: Добро пожаловать! +template: docs +taxonomy: + category: docs +routes: + default: '/docs' + aliases: + - '/' +visible: false +--- + +Это документация для [YunoHost, свободной операционной системы, направленной на упрощение администрирования сервера и демократизацию самостоятельного хостинга](/whatsyunohost). + +Как будущий администратор вашего собственного сервера, перейдите к [Руководству администратора](/admindoc), чтобы узнать больше о самостоятельном хостинге, о том, как установить сервер YunoHost и ваши первые приложения. + +Вы можете ознакомиться с [каталогом приложений](/apps), чтобы просмотреть приложения, которые могут быть установлены на сервере (хотя вы также можете ознакомиться с ним непосредственно из своего интерфейса администратора!) + +[Сообщество](/community) здесь для вас, если вам нужна помощь: присоединяйтесь к нам в [чат](/chat_rooms) или свяжитесь с нами на [форуме](/community/forum)! + +[center] + + Гайды для администраторов + Приложения + Сообщество + Присоединиться + +[/center] + + +[center] + Вернуться на главную +[/center] + +!!!! Для навигации по этой документации вы можете использовать клавиши со стрелками влево и вправо. Перейдите непосредственно к нужному разделу с помощью боковой панели [fa=bars /] или с помощью окна поиска [fa=search /]. Наслаждайтесь! diff --git a/pages/01.overview/05.self_hosting/self_hosting.de.md b/pages/01.overview/05.self_hosting/self_hosting.de.md new file mode 100644 index 00000000..593f9bdb --- /dev/null +++ b/pages/01.overview/05.self_hosting/self_hosting.de.md @@ -0,0 +1,33 @@ +--- +title: Self-Hosting +template: docs +taxonomy: + category: docs +routes: + default: '/selfhosting' +--- + +Self-Hosting ist das Hosten von Daten oder Software auf eigener IT-Infrastruktur. +Ihren eigenen Server zu Hause zu haben und zu verwalten, um Ihre persönlichen Daten und Dienste selbst zu hosten, anstatt sich ausschließlich auf Dritte zu verlassen. Beispielsweise können Sie Ihren Blog selbst hosten, sodass er auf einem Computer "lebt", über den Sie die Kontrolle haben, anstatt ihn im Austausch gegen Geld, Werbung oder private Daten auf dem Computer eines anderen Benutzers (a.k.a. The Cloud) zu haben. + +Self-Hosting bedeutet, einen Server zu besitzen. Ein Server ist ein Computer, auf den in der Regel rund um die Uhr im Netzwerk zugegriffen werden kann und der normalerweise keinen Bildschirm oder keine Tastatur hat (stattdessen wird er ferngesteuert). Entgegen der landläufigen Meinung ist ein Server nicht unbedingt ein riesiger und besonders leistungsfähiger Computer: Heutzutage ist ein kleines Board (Einplatinencomputer) mit ~ 40 € für das Self-Hosting ausreichend. + +Beim Self-Hosting geht es nicht darum, "Ihr Internet" sicherer zu machen, und es bietet auch keine Anonymität an sich. Stattdessen geht es darum, autonom zu sein und Ihre Dienste und Daten zu kontrollieren - was auch bedeutet, dafür verantwortlich zu sein. + +## Warum sollten Sie selbst hosten? + +- **Sie glauben an ein freies, offenes und dezentrales Internet.** In einem zentralisierten Internet können private Unternehmen und Behörden Personen ausspähen, analysieren und beeinflussen, indem sie diktieren, wie Sie sich miteinander verbinden, und indem sie Inhalte filtern. YunoHost wird von einer Community entwickelt, die an ein offenes und dezentrales Internet glaubt, und wir hoffen, dass Sie dies auch tun! + +- **Sie möchten die Kontrolle über Ihre Daten und Dienste haben.** Ihre Bilder, Chatnachrichten, der Browserverlauf und der Text, den Sie für die Schule schreiben, haben auf dem Server eines anderen Benutzers (a.k.a. The Cloud) nichts zu suchen. Sie sind Teil Ihres Privatlebens, aber auch Teil des Lebens Ihrer Familie, Ihres Partners und so weiter. Diese Daten sollten von * Ihnen * verwaltet werden, nicht von einem zufälligen Unternehmen in den USA, dass Ihre Daten analysieren und die Ergebnisse verkaufen möchte. + +- **Sie möchten lernen, wie Computer und das Internet funktionieren.** Der Betrieb eines eigenen Servers ist ein guter Kontext, um die grundlegenden Mechanismen von Betriebssystemen und dem Internet zu verstehen. Möglicherweise müssen Sie sich mit der Befehlszeilenschnittstelle, der Netzwerkarchitektur, der DNS-Konfiguration und mit SSH usw. befassen. + +- **Sie möchten neue Möglichkeiten erkunden und Dinge anpassen.** Haben Sie jemals davon geträumt, einen Minecraft-Server für Ihre Freunde oder einen dauerhaften IRC- oder XMPP-Client zu betreiben? Mit Ihrem eigenen Server können Sie praktisch jedes gewünschte Programm manuell installieren, ausführen und jedes Bit anpassen. + +## Warum Sie vllt. *nicht* selbst hosten sollten? + +- **Self-Hosting erfordert etwas Arbeit und Geduld.** Selbst einen Server zu betreiben, ist ein bisschen wie das anlegen eines eigenen Gartens oder der Anbau von Gemüse: Es erfordert Arbeit und Geduld. Während YunoHost versucht, die harte Arbeit für Sie zu erledigen, müssen Sie sich für das Self-Hosting noch einige Zeit nehmen, um einige Dinge zu lernen und zu konfigurieren, um Ihren Server richtig einzurichten. Sie müssen auch von Zeit zu Zeit Wartungsaufgaben (wie z. B. Upgrades) ausführen oder um Support-Unterstützung bitten, wenn Probleme auftreten. + +- **Mit den eigenen tollen Servern geht eine große Verantwortung einher.** Der Betrieb eines Servers bedeutet, dass Sie für die von Ihnen gehosteten Daten verantwortlich sind. Niemand kann sie für Sie wiederherstellen, wenn sie verloren gehen. YunoHost bietet Sicherungsfunktionen, die Sie regelmäßig verwenden sollten, um die gewünschten Konfigurationen und Daten zu sichern. Sie sollten auch die Sicherheitsnachrichten und -empfehlungen im Auge behalten, damit Ihr Server oder Ihre kritischen Daten nicht gefährdet werden. + +- **Qualität und Leistung sind wahrscheinlich nicht so gut wie Premium-Services.** YunoHost (und die meisten dafür bereitgestellten Anwendungen) sind kostenlose und Open-Source-Software, die in den jeweiligen Communitys von Menschen in ihrer Freizeit und auf der Grundlage bester Bemühungen entwickelt werden. Es gibt keine absolute Garantie dafür, dass Software unter allen möglichen Umständen funktioniert. Die Leistung Ihres selbst gehosteten Servers hängt auch von dessen CPU und RAM sowie der verfügbaren Internetverbindung ab. diff --git a/pages/01.overview/05.self_hosting/self_hosting.es.md b/pages/01.overview/05.self_hosting/self_hosting.es.md new file mode 100644 index 00000000..1bc42149 --- /dev/null +++ b/pages/01.overview/05.self_hosting/self_hosting.es.md @@ -0,0 +1,64 @@ +--- +title: Auto-alojamiento +template: docs +taxonomy: + category: docs +routes: + default: '/selfhosting' +--- + + +El auto-alojamiento se refiere al hecho de tener y administrar tú tu propio servidor, normalmente en tu casa, para hospedar tus datos personales y servicios, en lugar de depender de terceros. Por ejemplo, es posible el auto-hospedaje de tu blog, de manera que este "viva" dentro de una máquina que controlas, en lugar de que se aloje en un ordenador de otra persona/empresa (alias La Nube) contra dinero, publicidad o cesión de datos privados. + + + +Auto-alojar implica disponer de un servidor. Un servidor es un ordenador destinado a ser accesible en la red las 24 horas del día y que normalmente no tiene ni pantalla ni teclado, ya que se controla a distancia. Contrariamente a una creencia extendida, los servidores no son necesariamente máquinas enormes y muy potentes: en la actualidad, una pequeña placa ARM de unos ~30€/$ es suficiente para el auto-hospedaje. + + +La práctica del auto-alojamiento no convierte "tu internet" más segura y tampoco proporciona anonimato por si mismo. El objetivo es generalmente generar autonomía y control de tus servicios y tus datos - lo que también implica una responsabilidad. + +## ¿Cuáles son los beneficios del auto-alojamiento? + + +- **Crées en una internet libre, abierta y descentralizada.** En una internet centralizada, entidades privadas y gobiernos pueden espiar, analizar e influir en nosotras dictando como iteraccionamos entre nosotras o filtrando contenidos. A YunoHost lo desarrolla por una comunidad que cree en una internet abierta y descentralizada. ¡Esperamos que tú también! + + +- **Quieres tener control de tus datos y servicios.** Tus fotos, mensajes de chat, el historial de navegación y ese trabajo del colegio no tienen nada que hacer en el ordenador de otra persona (alias La Nube). Esos datos forman parte de tu vida privada, pero también de la de tu familia, de tus amistades, etc. Estos datos deberían ser gestionados por *ti*, y no por una empresa americana cualquiera que busca analizar tus datos para vender los resultados. + + +- **Quieres aprender cómo funcionan los ordenadores e internet.** Operar tu propio servidor es un ejercicio muy enriquecedor para entender los mecanismos básicos en el corazón de los sistemas operativos y de internet. Es posible que tengas que escribir en la línea de comandos o a segmentos de configuración de la red y de DNS. + + + +- **Quieres explorar las nuevas posibilidades y personalizar tu espacio.** ¿Alguna vez has soñado con tener tu propio servidor de Minecraft para jugar con tus amistades, o un cliente sw IRC o XMPP persistente? Con tu propio servidor, puedes instalar manualmente y ejecutar prácticamente cualquier programa que quieras y personalizar cada parte. + +## ¿Qué implica el auto-alojamiento? + + +- **Auto-alojarse requiere del trabajo y de la paciencia.** Auto-alojarte es algo parecido a cultivar tu propio jardín o huerto: requiere del trabajo y de la paciencia. Mientras que YunoHost pretende hacer todo el trabajo duro por ti, necesitarás tomarte el tiempo para aprender y configurar pequeños detalles para que tu instalación funcione correctamente. También necesitarás realizar algunas tareas de mantenimiento (como actualizaciones) de vez en cuando, o pedir soporte si las cosas no funcionan. + + +- **Un gran servidor conlleva una gran responsabilidad.** Operar un servidor significa que eres responsable de los datos que alojas. Nadie podrá recuperarlos por ti si se pierden. YunoHost proporciona funciones de copia de seguridad, que es recomendable utilizar regularmente para hacer copias de seguridad de las configuraciones y de los datos importantes. También deberías echar un ojo a las noticias y recomendaciones de seguridad, para que tu servidor o tus datos no se vean comprometidos. + + +- **La calidad y el rendimiento probablemente no serán tan buenos como los de los servicios "premium".** YunoHost (y la mayoría de las aplicaciones empaquetadas) son programas libres basados de código abierto, desarrollados por comunidades de personas de manera voluntaria. No hay garantía absoluta de que el software funcione en todas las circunstancias posibles. El rendimiento de su servidor autohospedado también está relacionado con su procesador, a la memoria RAM y la conectividad a internet. \ No newline at end of file diff --git a/pages/01.overview/05.self_hosting/self_hosting.fr.md b/pages/01.overview/05.self_hosting/self_hosting.fr.md new file mode 100644 index 00000000..c78ede8d --- /dev/null +++ b/pages/01.overview/05.self_hosting/self_hosting.fr.md @@ -0,0 +1,32 @@ +--- +title: L'auto-hébergement +template: docs +taxonomy: + category: docs +routes: + default: '/selfhosting' +--- + +L'auto-hébergement est le fait d'avoir et d'administrer son propre serveur, typiquement chez soi, pour héberger soi-même ses données personnelles et des services plutôt que de se reposer exclusivement sur des tiers. Par exemple, il est possible d'auto-héberger son blog de sorte qu'il "vive" dans une machine que vous contrôlez, au lieu qu'il soit sur l'ordinateur de quelqu'un d'autre (a.k.a. le Cloud) en échange d'argent, de publicités ou de données privées. + +L'auto-hébergement implique de disposer d'un serveur. Un serveur est un ordinateur qui est destiné à être accessible sur le réseau en permanence, et n'a généralement pas d'écran ni de clavier puisqu'il est administré à distance. Contrairement à une croyance répandue, les serveurs ne sont pas nécessairement des machines énormes et extrêmement puissantes : aujourd'hui, une petite carte ARM à ~30€ est adéquate pour de l'auto-hébergement. + +Pratiquer l'auto-hébergement ne rend pas "votre internet" plus sécurisé et ne fournit pas d'anonymat en tant que tel. L'objectif est généralement de pouvoir être autonome et au contrôle de ses services et de ses données - ce qui implique aussi d'en être responsable. + +## Pourquoi s'auto-héberger ? + +- **Vous croyez en un internet libre, ouvert et décentralisé.** Dans un internet centralisé, les entités privées et les gouvernements peuvent espionner, analyser et influencer les personnes en dictant la façon dont elle peuvent interagir les unes avec les autres, ainsi qu'en filtrant du contenu. YunoHost est développé par une communauté qui croit en un internet ouvert et décentralisé. Nous espérons que vous aussi ! + +- **Vous voulez avoir le contrôle de vos données et services.** Vos images, vos messages de chat, votre historique de navigation, et votre dissertation pour l'école n'ont rien à faire sur l'ordinateur de quelqu'un d'autre (a.k.a. le Cloud). Ces données font partie de votre vie privée, mais également de celle de votre famille, de vos amis, etc. Ces données devraient être gérées par *vous*, et non par une quelconque entreprise américaine qui cherche à analyser vos données pour revendre les résultats. + +- **Vous souhaitez apprendre comment fonctionnent les ordinateurs et Internet.** Opérer son propre serveur est un bon contexte pour apprendre les mécanismes de base au cœur des systèmes d'exploitation (OS) et d'Internet. Il vous faudra possiblement toucher à la ligne de commande et à des morceaux de configuration réseau et DNS. + +- **Vous voulez explorer de nouvelles possibilités et personnaliser votre espace.** Avez-vous déjà rêvé d'avoir votre propre serveur Minecraft pour vos ami·e·s, ou un client IRC ou XMPP persistant ? Avec votre propre serveur, vous pouvez manuellement installer et faire tourner n'importe quel programme et personnaliser chaque morceau. + +## Pourquoi ne *pas* s'auto-héberger ? + +- **L'auto-hébergement requiert du travail et de la patience.** S'auto-héberger est un peu comme avoir son propre jardin ou potager : cela demande du travail et de la patience. Bien que YunoHost cherche à faire tout le travail compliqué pour vous, il vous faudra tout de même prendre le temps d'apprendre et configurer quelques détails pour que votre installation marche correctement. Il vous faudra aussi gérer quelques tâches de maintenance (telles que les mises à jour) de temps en temps, et demander de l'aide si des choses ne fonctionnent pas comme prévu. + +- **Avec de grands serveurs viennent les grandes responsabilités.** Opérer un serveur implique d'être responsable des données que vous hébergez : personne ne pourra récupérer des données à votre place si vous les perdez. YunoHost fournit des fonctionnalités de sauvegarde qu'il est recommandé d'utiliser pour sauvegarder les configurations et données importantes. Il vous faut aussi garder un œil sur les recommandations et les nouvelles à propos de la sécurité pour que votre serveur ou vos données ne soient pas compromises. + +- **La qualité et les performances ne seront probablement pas aussi bonnes que des services premium.** YunoHost (et la plupart des applications qui sont packagées) sont des logiciels libres et open-source, développés par des communautés bénévoles. Il n'y a pas de garantie absolue que ces logiciels fonctionneront dans toutes les circonstances possibles. Les performances de votre serveur auto-hébergé sont aussi liées au processeur, à la mémoire vive et à la connectivité internet. diff --git a/pages/01.overview/05.self_hosting/self_hosting.it.md b/pages/01.overview/05.self_hosting/self_hosting.it.md new file mode 100644 index 00000000..45c2b595 --- /dev/null +++ b/pages/01.overview/05.self_hosting/self_hosting.it.md @@ -0,0 +1,34 @@ +--- +title: Il self-hosting +template: docs +taxonomy: + category: docs +routes: + default: '/selfhosting' +--- + +Il self-hosting permette di avere e di amministrare un tuo server, generalmente in proprio, per hostare i propri dati personali e servizi piuttosto che ospitarli presso terzi. Per esempio, è possibile gestire il proprio blog per farlo "vivere" su una macchina sotto il tuo controllo, piuttosto che installarlo su un computer di qualcun altro (a.k.a. il Cloud) in cambio di soldi, di pubblicità o di dati personali. + +Il self-hosting implica di avere a disposizione un server. Un server è un computer che è destinato ad essere accessibile in rete in modo permanente, e generalmente non ha un desktop o una tastiera perché è amministrato a distanza. Al contrario di quello che si crede, i server non sono necessariamente delle macchine enormi ed estremamente potenti: oggi una piccola scheda ARM a ~30 € è sufficiente per il self-hosting. + +Praticare il self-hosting non rende il "tuo internet" più sicuro e non fornisce un sufficiente anonimato. L'obiettivo è generalmente quello dell'autonomia e del controllo dei propri servizi e dei propri dati, che implica anche l'esserne responsabili. + +## Perché fare self-hosting? + +- **Credi in un internet libero, aperto e decentralizzato.** In un internet centralizzato, le aziende private e i governi possono controllare, analizzare e influenzare le persone partendo da come possono interagire gli uni con gli altri, fino ad arrivare a filtrare i contenuti. YunoHost è sviluppato da una comunità che crede in un internet aperto e decentralizzato. Speriamo che anche tu la pensi allo stesso modo! + +- **Vuoi avere il controllo dei tuoi dati e dei servizi.** Le tue immagini, i tuoi messaggi di chat, la tua cronologia di navigazione, e i testi che scrivi per la scuola non hanno niente che fare con il computer di qualcun altro (a.k.a. il Cloud). Questi dati fanno parte della tua vita privata, ma anche quella della tua famiglia, dei tuoi amici, ecc. Questi dati dovrebbero essere gestiti da *te*, e non per da una qualunque azienda americana che cerca di analizzare i tuoi dati per rivendere i risultati. + +- **Vuoi capire come funzionano i computer e Internet.** Operare sul proprio server è un buon modo per imparare i meccanismi alla base del cuore di un sistema operativo (OS) e di Internet. Dovrai probabilmente far ricorso alla linea di comando e ai meccanismi di configurazione delle risorse e i DNS. + +- **Vuoi esplorare nuove possibilità e personalizzare il tuo spazio.** Hai mai sognato di avere un tuo server Minecrat per i tuoi amici, o un client persistente IRC o XMPP? Con il tuo server, puoi installare manualmente e far girare qualsiasi programma e personalizzare ogni servizio. + +## Perché *non* fare self-hosting? + +- **Il self-hosting richiede lavoro e pazienza.** Fare self-hosting è come avere un proprio giardino da potare: richiede lavoro e pazienza. Anche se YunoHost cerca di fare tutto il lavoro più complicato per te, sarà necessario lo stesso ritagliare tempo per imparare e configurare qualche dettaglio perché la tua installazione funzioni correttamente. Dovrai anche gestire qualche lavoro di manutenzione (come gli aggiornamenti) di tanto in tanto, e chiedere aiuto se qualcosa non funziona correttamente. + +- **Con grandi server derivano grandi responsabilità.** Gestire un server implica l'essere responsabile dei dati che ospiti: nessuno potrà recuperare i dati al tuo posto se li perderai. YunoHost offre funzionalità di salvataggio che è raccomandato utilizzare per memorizzare le configurazioni e i dati importanti. Devi tenere controllate le raccomandazioni e le novità riguardo la sicurezza perché il tuo server o i tuoi dati non vengano compromessi. + +- **La qualità e le performances probabilmente non saranno le stesse dei servizi premium.** YunoHost (e la maggior parte delle applicazioni che sono predisposte) sono programmi liberi e open-source, sviluppati da comunità di volontari. Non c'è la garanzia assoluta che i programmi funzionino in tutte le possibili situazioni. Le performance del tuo server self-hosting sono legate anche al processore, alla memoria RAM e alla connessione internet. + + diff --git a/pages/01.overview/05.self_hosting/self_hosting.md b/pages/01.overview/05.self_hosting/self_hosting.md new file mode 100644 index 00000000..9dadb2b1 --- /dev/null +++ b/pages/01.overview/05.self_hosting/self_hosting.md @@ -0,0 +1,32 @@ +--- +title: Self-hosting +template: docs +taxonomy: + category: docs +routes: + default: '/selfhosting' +--- + +Self-hosting is the activity of having and administrating your own server, typically at home, to host your personal data and services yourself instead of relying exclusively on third-parties. For instance, you can self-host your blog, such that it 'lives' on a machine that you have control of, instead of having it on somebody else's computer (a.k.a. The Cloud) in exchange for money, advertisement or private data. + +Self-hosting implies owning a server. A server is a computer which is typically accessible on the network 24/7, and usually does not have any screen or keyboard (it is instead controlled remotely). Contrarily to a popular belief, a server is not necessarily a huge and extra-powerful machine: nowadays, a small, ~$30 ARM board is adequate for self-hosting. + +Self-hosting is not about making "your Internet" more secure and does not provide anonymity by itself. Instead, it is about being autonomous, and in control of your services and data - which also means being responsible for them. + +## Why should you host yourself ? + +- **You believe in a free, open and decentralized internet.** In a centralized internet, private companies and government can spy, analyze and influence people by dictating how they connect with each other, and by filtering content. YunoHost is developed by a community who believe in an open and decentralized internet, and we hope that you do, too! + +- **You want to have control of your data and services.** Your pictures, chat messages, browsing history, and that text you are writing for school, have nothing to do on somebody else's server (a.k.a. The Cloud). They are part of your private life, but also part of your family's life, your friend's life, and so on. These data should be managed by *you*, not a random company in the US who wants your data to analyze them and sell the results. + +- **You want to learn about how computers and the Internet work.** Operating your own server is a pretty good context to understand the basic mechanisms at the heart of operating systems and the Internet. You might have to deal with command line interface, network architecture, DNS configuration, SSH, and so on. + +- **You want to explore new possibilities and customize things.** Ever dreamed of running a Minecraft server for you friends, or a persistent IRC or XMPP client? With your very own server, you can manually install and run virtually any program you want, and customize every bit. + +## Why should you *not* host yourself ? + +- **Self-hosting requires some work and patience.** Hosting yourself is a bit like growing your own garden or vegetables: it requires work and patience. While YunoHost aims to do all the hard work for you, self-hosting still requires that you take time to learn and configure a few things to setup your server properly. You will also need to perform maintenance tasks (such as upgrades) from time to time, or to ask for support if some things break. + +- **With great servers comes great responsibilities.** Operating a server means that you are responsible for the data you are hosting. Nobody will be able to recover them for you if they get lost. YunoHost provides backup features, which you should use regularly to backup the configurations and data you care about. You should also keep an eye on security news and recommendations so that your server or critical data don't get compromised. + +- **Quality and performance probably won't be as good as premium services.** YunoHost (and most of the applications packaged for it) are free and open-source software, developed by communities of people in their free time and on the basis of best effort. There is no absolute guarantee that software will work in every possible circumstance. The performance of your self-hosted server is also related to its CPU and RAM, and to the available internet connectivity. diff --git a/pages/01.overview/05.self_hosting/self_hosting.ru.md b/pages/01.overview/05.self_hosting/self_hosting.ru.md new file mode 100644 index 00000000..7f3d6802 --- /dev/null +++ b/pages/01.overview/05.self_hosting/self_hosting.ru.md @@ -0,0 +1,32 @@ +--- +title: Самостоятельная развёртка +template: docs +taxonomy: + category: docs +routes: + default: '/selfhosting' +--- + +Самостоятельный хостинг - это деятельность по созданию и администрированию вашего собственного сервера, как правило, дома, для самостоятельного размещения ваших персональных данных и сервисов вместо того, чтобы полагаться исключительно на третьих лиц. Например, вы можете самостоятельно разместить свой блог, чтобы он "жил" на компьютере, который вы контролируете, вместо того, чтобы размещать его на чьем-то другом компьютере (он же Облако) в обмен на деньги, рекламу или личные данные. + +Самостоятельный хостинг подразумевает владение сервером. Сервер - это компьютер, который обычно доступен в сети 24/7 и обычно не имеет экрана или клавиатуры (вместо этого он управляется удаленно). Вопреки распространенному мнению, сервер - это не обязательно огромная и сверхмощная машина: в настоящее время для самостоятельного размещения вполне достаточно небольшой платы ARM стоимостью ~ 30 долларов. + +Самостоятельный хостинг не предназначен для того, чтобы сделать "ваш Интернет" более безопасным, и сам по себе не обеспечивает анонимности. Вместо этого речь идет о том, чтобы быть автономным и контролировать свои сервисы и данные, что также означает нести за них ответственность. + +## Почему вы должны принимать гостей сами? + +- **Вы верите в свободный, открытый и децентрализованный Интернет.** В централизованном Интернете частные компании и правительство могут шпионить, анализировать людей и влиять на них, диктуя, как они взаимодействуют друг с другом, и фильтруя контент. YunoHost разработан сообществом, которое верит в открытый и децентрализованный Интернет, и мы надеемся, что вы тоже верите! + +- **Вы хотите иметь контроль над своими данными и сервисами.** Вашим фотографиям, сообщениям в чате, истории посещенных страниц и тексту, который вы пишете для школы, нечего делать на чужом сервере (он же Облако). Они являются частью вашей личной жизни, но также и частью жизни вашей семьи, жизни вашего друга и так далее. Этими данными должны управлять * вы*, а не случайная компания в США, которая хочет, чтобы ваши данные анализировались и продавались результаты. + +- **Вы хотите узнать о том, как работают компьютеры и Интернет.** Управление собственным сервером - довольно хороший контекст для понимания основных механизмов, лежащих в основе операционных систем и Интернета. Возможно, вам придется иметь дело с интерфейсом командной строки, сетевой архитектурой, конфигурацией DNS, SSH и так далее. + +- **Вы хотите исследовать новые возможности и настраивать вещи.** Вы когда-нибудь мечтали запустить сервер Minecraft для своих друзей или постоянный IRC или XMPP-клиент? Имея свой собственный сервер, вы можете вручную установить и запустить практически любую программу, которую пожелаете, и настроить все до мелочей. + +## Почему вы * не должны* принимать гостей сами? + +- **Самостоятельный хостинг требует некоторой работы и терпения.** Самостоятельный хостинг немного похож на выращивание собственного сада или овощей: это требует работы и терпения. В то время как YunoHost стремится выполнить всю тяжелую работу за вас, самостоятельный хостинг по-прежнему требует, чтобы вы потратили время на изучение и настройку нескольких вещей для правильной настройки вашего сервера. Вам также нужно будет время от времени выполнять задачи технического обслуживания (например, обновления) или обращаться за поддержкой, если что-то выйдет из строя. + +- **С отличными серверами приходит большая ответственность.** Эксплуатация сервера означает, что вы несете ответственность за данные, которые размещаете. Никто не сможет восстановить их для вас, если они потеряются. YunoHost предоставляет функции резервного копирования, которые вы должны регулярно использовать для резервного копирования нужных вам конфигураций и данных. Вам также следует следить за новостями и рекомендациями по безопасности, чтобы ваш сервер или критически важные данные не были скомпрометированы. + +- **Качество и производительность, вероятно, будут не так хороши, как услуги премиум-класса.** YunoHost (и большинство приложений, упакованных для него) - это бесплатное программное обеспечение с открытым исходным кодом, разработанное сообществами людей в свободное время и на основе наилучших усилий. Нет абсолютной гарантии, что программное обеспечение будет работать при любых возможных обстоятельствах. Производительность вашего автономного сервера также зависит от его центрального процессора и оперативной памяти, а также от доступного подключения к Интернету. \ No newline at end of file diff --git a/pages/01.overview/10.what_is_yunohost/what_is_yunohost.ar.md b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.ar.md new file mode 100644 index 00000000..dc13bdf2 --- /dev/null +++ b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.ar.md @@ -0,0 +1,82 @@ +--- +title: ماذا نعني بـ واي يونوهوست YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + +![YunoHost logo](image://YunoHost_logo_vertical.png?resize=400&id=ynhlogo) + +واي يونوهوست YunoHost هو **نظام لتشغيل الخوادم** صُمِّم لتسهيل الإستضافة الذاتية لخدمات الإنترنت. +هو مُرتكز و منسجم كافة الإنسجام مع توزيعة غنو/لينكس ديبيان. + +--- + +### خصائصه + +- متعدد المستعملين مع تكامُل LDAP +- متعدد النطاقات +- خدمة البريد الإلكتروني +- خادم المراسلة الفورية +- نظام للمصادقة الموحَّدة (SSO) +- نظام للتطبيقات +- نظام للنسخ الإحتياطي +- نظام لإعادة توليد الإعدادات و الخدمات + +--- + +### أصل فكرة المشروع + + +تعود نشأة فكرة مشروع واي يونوهوست YunoHost إلى شهر فيفري مِن عام 2012 بعد محادثة بدأت على هذا الشكل تقريبًا : + +
« تبًا، لقد سئِمتُ مِن إعادة إعداد خادم البريد الإلكتروني ... Beudbeud، كيف قُمتَ بإعداد خادومك الجميل حول LDAP ؟ » +Kload، فيفري 2012
+ +Il ne manquait en fait qu’une interface d’administration au serveur de Beudbeud pour en faire quelque chose d’exploitable, alors Kload a décidé de la développer. Finalement, après l’automatisation de quelques configurations et le packaging de quelques applications web, la première version de YunoHost était sortie. + +Constatant l’engouement croissant autour de YunoHost et de l’auto-hébergement en général, les développeurs et les nouveaux contributeurs ont alors décidé de prendre le cap d’une version 2, plus accessible, plus extensible, plus puissante, et qui prépare du bon café commerce équitable pour les lutins de Laponie. + +--- + +### الهدف + +يهدف واي يونوهوست YunoHost إلى تسهيل عملية تنصيب و تثبيت و إدارة أي خادمٍ لأكبر عدد ممكن مِن الناس و ذلك دون المساس بجودة و موثوقية البرمجيات. + +لم يُدَّخر أي جهد لتسهيل عملية التنصيب و الإنبساط وذلك على أكبر عدد ممكن مِن الأجهزة مهما اختلفت مميزات كل جهاز (في المنزل أو على خادوم إستضافة أو على خادوم شخصي إفتراضي) + +--- + +### التسمية + +**YunoHost** مُستمَدٌّ مِن لُغة الإنترنت العاميّة « Y U NO Host » و بالمعنى التقريبي « لماذا لا تستضيف نفسك بنفسك ». ميم الإنترنت الذي يصف المعنى بالتقريب هو : +![](image://dude_yunohost.jpg) + +--- + +### التطوير + +YunoHost est développé pour être le plus **simple** et le moins intrusif possible pour garder la compatibilité avec Debian. Il propose uniquement un ensemble de configurations automatiques et opère via des interfaces accessibles. + +Le tout est bien entendu **entièrement libre**. La philosophie de l’[الإستضافة الذاتية](/selfhosting) étant à nos yeux incompatible avec tout autre modèle de développement logiciel. + +لا تتردّدوا في زيارة صفحة « ساهموا». + +--- + +### الأمان + +لقد بُذِلت كل المجهودات مِن أجل تأمين واي يونوهوست YunoHost و **تعمية و تشفير البروتوكولات** . بإمكانكم الإطلاع على الشرح بتفاصيليه هنا. + +--- + +### واي يونوهوست YunoHost ليس + +Même si YunoHost est multi-domaine et multi-utilisateur, il reste **inapproprié pour un usage mutualisé**. + +Premièrement parce que le logiciel est trop jeune, donc non-testé et non-optimisé pour être mis en production pour des centaines d’utilisateurs en même temps. Et quand bien même, ce n’est pas le chemin que l’on souhaite faire suivre à YunoHost. La virtualisation se démocratise, et c’est une façon bien plus étanche et sécurisée de faire de la mutualisation. + +Vous pouvez héberger vos amis, votre famille ou votre entreprise sans problème, mais vous devez **avoir confiance** en vos utilisateurs, et ils doivent de la même façon avoir confiance en vous. Si vous souhaitez tout de même fournir des services YunoHost à des inconnus, **un VPS entier par utilisateur** sera la meilleure solution. + diff --git a/pages/01.overview/10.what_is_yunohost/what_is_yunohost.de.md b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.de.md new file mode 100644 index 00000000..6ab27348 --- /dev/null +++ b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.de.md @@ -0,0 +1,56 @@ +--- +title: Was ist YunoHost? +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + +![](image://YunoHost_logo_vertical.png?resize=400&id=ynhlogo) + +YunoHost ist ein **Betriebssystem**, das auf die einfachste Verwaltung eines **Servers** abzielt und daher das [Self-Hosting](/selfhosting) demokratisiert, wobei sichergestellt wird, dass es zuverlässig, sicher, ethisch einwandfrei und leichtgewichtig bleibt. Es ist ein Copylefted-Libre-Softwareprojekt, das ausschließlich von Freiwilligen betrieben wird. Technisch gesehen kann es als eine Distribution angesehen werden, die auf [Debian GNU/Linux](https://debian.org) basiert und auf [vielen Arten von Hardware](/install) installiert werden kann. + +## Features + +- ![](image://icon-debian.png?resize=32&classes=inline) Basierend auf Debian ; +- ![](image://icon-tools.png?resize=32&classes=inline) Verwalten Sie Ihren Server über eine **benutzerfreundliche Weboberfläche** ; +- ![](image://icon-package.png?resize=32&classes=inline) Bereitstellen von **Apps mit nur wenigen Klicks** ; +- ![](image://icon-users.png?resize=32&classes=inline) Verwalten Sie **Benutzer** (basierend auf LDAP) ; +- ![](image://icon-globe.png?resize=32&classes=inline) Verwalten Sie Ihre **Domainnamen** ; +- ![](image://icon-medic.png?resize=32&classes=inline) Erstellen und Wiederherstellen von **Backups** ; +- ![](image://icon-door.png?resize=32&classes=inline) Stellen Sie über das **Benutzerportal** (NGINX, SSOwat) gleichzeitig eine Verbindung zu allen Apps her ; +- ![](image://icon-mail.png?resize=32&classes=inline) Enthält einen **vollständigen E-Mail-Stack** (Postfix, Dovecot, Rspamd, DKIM) ; +- ![](image://icon-messaging.png?resize=32&classes=inline) … sowie **einen Instant Messaging Server** (XMPP) ; +- ![](image://icon-lock.png?resize=32&classes=inline) Verwaltet **SSL-Zertifikate** (basierend auf Let's Encrypt) ; +- ![](image://icon-shield.png?resize=32&classes=inline) … und **Sicherheitssysteme** (fail2ban, yunohost-firewall) ; + +## Ursprung + +YunoHost wurde im Februar 2012 aus folgender Situation heraus erstellt: + +

"Scheiße, ich bin zu faul, um meinen Mailserver neu zu konfigurieren ... Beudbeud, wie hast Du deinen kleinen Server mit LDAP zum Laufen gebracht?"

Kload, Februar 2012
+ +Alles, was benötigt wurde, war eine Administrationsoberfläche für Beudbeud's Server, um etwas nutzbar zu machen, also entschied sich Kload, eine zu entwickeln. Schließlich wurde YunoHost v1, nach der Automatisierung mehrerer Konfigurationen und der Paketierung in einigen Webanwendungen, fertiggestellt. + +Angesichts der wachsenden Begeisterung für YunoHost und für das Selbst-Hosting im Allgemeinen beschlossen die ursprünglichen Entwickler zusammen mit neuen Mitarbeitern, mit der Arbeit an Version 2 zu beginnen, einer erweiterbaren, leistungsfähigeren, benutzerfreundlicheren und damit einfacheren Version eine schöne Tasse Fairtrade-Kaffee für die Elfen von Lappland. + +Der Name **YunoHost** stammt aus dem Jargon "Y U NO Host". Das [Internet meme](https://en.wikipedia.org/wiki/Internet_meme) sollte dies veranschaulichen: +![](image://dude_yunohost.jpg) + +## Was YunoHost nicht ist? + +Selbst wenn YunoHost mehrere Domains und mehrere Benutzer verwalten kann, ist es **nicht als ein mutualisiertes System gedacht**. + +Erstens ist die Software noch sehr jung, nicht auf ihre Skalierbarkeit getestet und daher wahrscheinlich nicht gut genug optimiert für Hunderte von Benutzern gleichzeitig. Vor diesem Hintergrund möchten wir die Software nicht in diese Richtung lenken. Die Virtualisierung demokratisiert sich und ihre Verwendung wird empfohlen, da sie eine wasserdichtere Methode zur Erzielung von Gegenseitigkeit darstellt als ein "Full-Stack"-System wie YunoHost. + +Sie können Ihre Freunde, Ihre Familie und Ihr Unternehmen sicher und problemlos aufnehmen, aber Sie müssen **Ihren Benutzern vertrauen**, und diese müssen vor allem Ihnen vertrauen. Wenn Sie ohnehin YunoHost-Dienste für unbekannte Personen bereitstellen möchten, ist ein vollständiger VPS pro Benutzer in Ordnung, und wir glauben, dass dies ein besserer Weg ist. + +## Artworks + +Schwarz und Weiss YunoHost PNG logo by ToZz (400 × 400 px): + +![](image://ynh_logo_black_300dpi.png?resize=220) +![](image://ynh_logo_white_300dpi.png?resize=220&id=whitelogo) + +Licence: CC-BY-SA 4.0 diff --git a/pages/01.overview/10.what_is_yunohost/what_is_yunohost.es.md b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.es.md new file mode 100644 index 00000000..0a85df23 --- /dev/null +++ b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.es.md @@ -0,0 +1,57 @@ +--- +title: Qué es YunoHost? +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + +![](image://YunoHost_logo_vertical.png?resize=400&id=ynhlogo) + +YunoHost es un **sistema operativo** que persigue simplificar la administración de un **servidor** para democratizar el [autoalojamiento](/selfhosting), asegurando que se mantiene fiable, seguro, ético y ligero. Es un proyecto de software libre mantenido exclusivamente por voluntariado. Técnicamente se le puede considerar como una distribución basada en [Debian GNU/Linux](https://debian.org) y que puede ser instalado en [muchos tipos de material](/install). + +## Características + +- ![](image://icon-debian.png?resize=32&classes=inline) Basado en Debian ; +- ![](image://icon-tools.png?resize=32&classes=inline) Administración mediante un **interfaz web simple y conciso** ; +- ![](image://icon-package.png?resize=32&classes=inline) Despliega las **aplicaciones en unos pocos clics** ; +- ![](image://icon-users.png?resize=32&classes=inline) añade **cuentas de usuario** (gestionados por una agenda LDAP); +- ![](image://icon-globe.png?resize=32&classes=inline) Administra los **nombres de dominio** ; +- ![](image://icon-medic.png?resize=32&classes=inline) Crea y restaura las **copias de seguridad** ; +- ![](image://icon-door.png?resize=32&classes=inline) Conecta simultáneamente a todas las aplicaciones mediante un **portal de usuario** (NGINX, SSOwat) ; +- ![](image://icon-mail.png?resize=32&classes=inline) Incluye un **servidor de correo electrónico completo** (Postfix, Dovecot, Rspamd, DKIM) ; +- ![](image://icon-messaging.png?resize=32&classes=inline) … así como un **servidor de mensajería instanea** (XMPP) ; +- ![](image://icon-lock.png?resize=32&classes=inline) Administra **certificados SSL** (generados por Let's Encrypt) ; +- ![](image://icon-shield.png?resize=32&classes=inline) … y los **sistemas de seguridad** (fail2ban, yunohost-firewall) ; + +## Origen + +YunoHost se creó en Febrero de 2012 tras algo así: + +

"¡Mierda, soy muy vago para reconfigurar mi servidor de correo!… Beudbeud, ¿Cómo hiciste para conectar tu pequeño servidor a LDAP?"

+Kload, Febrero de 2012
+ +Lo único que necesitaba era un interfaz de administración para el servidor de Beudbeud para tener algo usable, así que Kload decidió desarrollar uno. Finalmente, tras automatizar varias configuraciones y empaquetar algunas aplicaciones web, YunoHost v1 quedó terminado. + +Notando un entusiasmo creciente alrededor de YunoHost y del autoalojamiento en general, los desarrolladores originales junto con nuevas personas contribuyentes decidieron comenzar a trabajar en la versión 2, una versión más extensible, más potente, más fácil de usar, y ya de paso, una que prepare ricas tazas de café de comercio justo para los elfos de Laponia. + +El nombre **YunoHost** viene de la jerga "Y U NO Host". El [meme de Internet ](https://en.wikipedia.org/wiki/Internet_meme) debería ilustrarlo: +![](image://dude_yunohost.jpg) + +## ¿Qué no es YunoHost? + +Incluso aunque YunoHost puede manejar multiples dominios y multiples usuarios, **no está diseñado para ser un sistema mancomunado**. + +Primero, porque el software es demasiado joven, no está probado ni optimizado para ser usado por cientos de usuarios simultáneamente. Y además no es el camino que deseamos hacer recorrer a YunoHost. La virtualización se democratiza y es una manera mucho más estanca y segura de hacer mancomunados. + +Puedes alojar a tus amistades, tu familia y a tu compañía sin problema, pero debes **confiar en las personas usarias** de la misma manera que esas personas deben confiar en tí. Si aún así quieres proveer servicios YunoHost a desconocidos, **un VPS por usuario** será la mejor solución. + +## Logo + +Logo YunoHost en blanco y negro por ToZz (400 × 400 px): + +![](image://ynh_logo_black_300dpi.png?resize=220) +![](image://ynh_logo_white_300dpi.png?resize=220&id=whitelogo) + +Licencia: CC-BY-SA 4.0 diff --git a/pages/01.overview/10.what_is_yunohost/what_is_yunohost.fr.md b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.fr.md new file mode 100644 index 00000000..c140cb52 --- /dev/null +++ b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.fr.md @@ -0,0 +1,57 @@ +--- +title: Qu'est-ce que YunoHost ? +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + +![YunoHost logo](image://YunoHost_logo_vertical.png?resize=400&id=ynhlogo) + +YunoHost est un **système d’exploitation** qui vise à simplifier autant que possible l'administration d'un **serveur** pour ainsi démocratiser [l’auto-hébergement](/selfhosting) tout en restant fiable, sécurisé, éthique et léger. C'est un projet de logiciel libre maintenu exclusivement par des bénévoles. Techniquement, il peut être vu comme une distribution basée sur [Debian GNU/Linux](https://debian.org) et peut s'installer sur [de nombreux types de matériel](/install). + +## Fonctionnalités + +- ![](image://icon-debian.png?resize=32&classes=inline) basé sur Debian ; +- ![](image://icon-tools.png?resize=32&classes=inline) administration via une **interface web simple et claire** ; +- ![](image://icon-package.png?resize=32&classes=inline) déployez des **applications en quelques clics** ; +- ![](image://icon-users.png?resize=32&classes=inline) ajoutez des **utilisateurs** (gérés via un annuaire LDAP) ; +- ![](image://icon-globe.png?resize=32&classes=inline) gérez des **noms de domaine** ; +- ![](image://icon-medic.png?resize=32&classes=inline) créez et restaurez des **sauvegardes** ; +- ![](image://icon-door.png?resize=32&classes=inline) connexion simultanée à toutes les apps via un **portail utilisateur** (nginx, SSOwat) ; +- ![](image://icon-mail.png?resize=32&classes=inline) fourni avec un **serveur mail complet** (Postfix, Dovecot, Rspamd, DKIM) ; +- ![](image://icon-messaging.png?resize=32&classes=inline) ... ainsi qu'un **serveur de messagerie instantanée** (XMPP) ; +- ![](image://icon-lock.png?resize=32&classes=inline) gère les **certificats SSL** (basé sur Let's Encrypt) ; +- ![](image://icon-shield.png?resize=32&classes=inline) ... et des **systèmes de sécurité** (Fail2Ban, yunohost-firewall) ; + +## Origine + +YunoHost est un projet né en février 2012 à la suite d’à peu près ça : + +

« Merde, j’ai la flemme de me reconfigurer un serveur mail... Beudbeud, comment t’as fait pour configurer ton joli serveur sous LDAP ? »

+Kload, février 2012
+ +Il ne manquait en fait qu’une interface d’administration au serveur de Beudbeud pour en faire quelque chose d’exploitable, alors Kload a décidé de la développer. Finalement, après l’automatisation de quelques configurations et le packaging de quelques applications web, la première version de YunoHost était sortie. + +Constatant l’engouement croissant autour de YunoHost et de l’auto-hébergement en général, les développeurs et les nouveaux contributeurs ont alors décidé de prendre le cap d’une version 2, plus accessible, plus extensible, plus puissante, et qui prépare du bon café commerce équitable pour les lutins de Laponie. + +Le nom **YunoHost** vient de l’argot Internet anglais « Y U NO Host » signifiant approximativement « Pourquoi toi ne pas héberger ». Le [mème Internet](http://fr.wikipedia.org/wiki/M%C3%A8me_Internet) qui l’illustre est à peu près celui-ci : +![](image://dude_yunohost.jpg) + +## Qu’est-ce que YunoHost n’est pas ? + +Même si YunoHost est multi-domaine et multi-utilisateur, il reste **inapproprié pour un usage mutualisé**. + +Premièrement parce que le logiciel est trop jeune, donc non-testé et non-optimisé pour être mis en production pour des centaines d’utilisateurs en même temps. Et quand bien même, ce n’est pas le chemin que l’on souhaite faire suivre à YunoHost. La virtualisation se démocratise, et c’est une façon bien plus étanche et sécurisée de faire de la mutualisation. + +Vous pouvez héberger vos amis, votre famille ou votre entreprise sans problème, mais vous devez **avoir confiance** en vos utilisateurs, et ils doivent de la même façon avoir confiance en vous. Si vous souhaitez tout de même fournir des services YunoHost à des inconnus, **un VPS entier par utilisateur** sera la meilleure solution. + +## Logo + +Logo YunoHost noir et blanc réalisé par ToZz (400 × 400 px) : + +[![](image://ynh_logo_black_300dpi.png?resize=220)](image://ynh_logo_black_300dpi.png) +[![](image://ynh_logo_white_300dpi.png?resize=220)](image://ynh_logo_white_300dpi.png) + +Licence: CC-BY-SA 4.0 diff --git a/pages/01.overview/10.what_is_yunohost/what_is_yunohost.it.md b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.it.md new file mode 100644 index 00000000..67e89db9 --- /dev/null +++ b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.it.md @@ -0,0 +1,56 @@ +--- +title: Cosa è YunoHost? +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + +![YunoHost logo](image://YunoHost_logo_vertical.png?resize=400&id=ynhlogo) + +YunoHost è un **sistema operativo** che mira a rendere il più semplice possibile l'amministrazione di un **server** e quindi a permettere ad un numero sempre maggiore di persone di avvicinarsi al [self-hosting](/selfhosting), assicurandosi che la gestione del server rimanga affidabile, sicura ed etica. Si tratta di un progetto basato su software libero e copyleft gestito esclusivamente da volontari. Tecnicamente YunoHost può essere vista come una distribuzione basata su [Debian GNU/Linux](https://debian.org) che può essere installata su [diverse tipologie di hardware](/install). + +## Caratteristiche + +- ![](image://icon-debian.png?resize=32&classes=inline) Basato su Debian; +- ![](image://icon-tools.png?resize=32&classes=inline) Amministra il tuo server attraverso **un'interfaccia web amichevole** ; +- ![](image://icon-package.png?resize=32&classes=inline) Installa le **applicazioni in pochi clic**; +- ![](image://icon-users.png?resize=32&classes=inline) Gestisci **gli utenti ** (basato su LDAP); +- ![](image://icon-globe.png?resize=32&classes=inline) Gestisci **i nomi di dominio**; +- ![](image://icon-medic.png?resize=32&classes=inline) Crea e ripristina **i backup**; +- ![](image://icon-door.png?resize=32&classes=inline) Connettiti contemporaneamente a tutte le applicazioni attraverso **il portale utente** (NGINX, SSOwat); +- ![](image://icon-mail.png?resize=32&classes=inline) Include uno **stack di posta elettronica completo** (Postfix, Dovecot, Rspamd, DKIM); +- ![](image://icon-messaging.png?resize=32&classes=inline)... e anche un **server di messaggistica istantanea** (XMPP); +- ![](image://icon-lock.png?resize=32&classes=inline) Gestisce i **certificati SSL** (basati su Let's Encrypt) ; +- ![](image://icon-shield.png?resize=32&classes=inline)... e i **sistemi di sicurezza** (Fail2ban, yunohost-firewall); + +## Origine +YunoHost è stata creata nel febbraio 2012 dopo qualcosa del genere: + +

"Merda, sono troppo pigro per riconfigurare il mio server di posta... Beudbeud, come sei riuscito a far funzionare il tuo piccolo server con LDAP?"

+Kload, Febbraio 2012
+ +Tutto ciò che serviva era un'interfaccia di amministrazione per il server di Beudbeud per creare qualcosa di utilizzabile, così Kload ha deciso di svilupparne una. Alla fine, dopo aver automatizzato diverse configurazioni e aver inserito alcune applicazioni web, YunoHost versione 1 è stato completato. + +Notando il crescente entusiasmo intorno a YunoHost e al self-hosting in generale, gli sviluppatori originari e i nuovi collaboratori hanno deciso di iniziare a lavorare alla versione 2, una versione più estensibile, più potente, più facile da usare e che prepara una bella tazza di caffè equo-solidale per gli elfi della Lapponia. + +Il nome **YunoHost** deriva dal gergo "Y U NO Host". Il [meme Internet](https://en.wikipedia.org/wiki/Internet_meme) dovrebbe illustrarlo: +![](image://dude_yunohost.jpg) + +## Cosa non è YunoHost? + +Anche se YunoHost è in grado di gestire più domini e più utenti, **non è pensato per essere un sistema mutualizzato.**. + +In primo luogo, il software è troppo giovane, non è stato testato su larga scala e quindi probabilmente non è sufficientemente ottimizzato per centinaia di utenti contemporaneamente. Detto questo, non vogliamo sviluppare il software in quella direzione. La virtualizzazione è sempre più diffusa e il suo utilizzo è consigliato in quanto è un modo più sicuro per ottenere la mutualizzazione rispetto a un sistema "full-stack" come YunoHost. + +Potete ospitare i vostri amici, la vostra famiglia e la vostra azienda in tutta sicurezza e facilità, ma dovete **fidarvi dei vostri utenti**, e soprattutto loro devono fidarsi di voi. Se volete comunque fornire i servizi YunoHost a persone sconosciute, un VPS completo per utente andrà benissimo e riteniamo che sia una soluzione migliore. + +## Logo + +Il logo PNG di YunoHost in bianco e nero di ToZz (400 × 400 px): + +![](image://ynh_logo_black_300dpi.png?resize=220) +![](image://ynh_logo_white_300dpi.png?resize=220&id=whitelogo) + +Licenza: CC-BY-SA 4.0 diff --git a/pages/01.overview/10.what_is_yunohost/what_is_yunohost.md b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.md new file mode 100644 index 00000000..7c4657a2 --- /dev/null +++ b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.md @@ -0,0 +1,57 @@ +--- +title: What is YunoHost? +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + +![YunoHost logo](image://YunoHost_logo_vertical.png?resize=400&id=ynhlogo) + +YunoHost is an **operating system** aiming for the simplest administration of a **server**, and therefore democratize [self-hosting](/selfhosting), while making sure it stays reliable, secure, ethical and lightweight. It is a copylefted libre software project maintained exclusively by volunteers. Technically, it can be seen as a distribution based on [Debian GNU/Linux](https://debian.org) and can be installed on [many kinds of hardware](/install). + +## Features + +- ![](image://icon-debian.png?resize=32&classes=inline) Based on Debian; +- ![](image://icon-tools.png?resize=32&classes=inline) Administer your server through a **friendly web interface** ; +- ![](image://icon-package.png?resize=32&classes=inline) Deploy **apps in just a few clicks**; +- ![](image://icon-users.png?resize=32&classes=inline) Manage **users** (based on LDAP); +- ![](image://icon-globe.png?resize=32&classes=inline) Manage **domain names**; +- ![](image://icon-medic.png?resize=32&classes=inline) Create and restore **backups**; +- ![](image://icon-door.png?resize=32&classes=inline) Connect to all apps simultaneously through the **user portal** (NGINX, SSOwat); +- ![](image://icon-mail.png?resize=32&classes=inline) Includes a **full e-mail stack** (Postfix, Dovecot, Rspamd, DKIM); +- ![](image://icon-messaging.png?resize=32&classes=inline)... as well as **an instant messaging server** (XMPP); +- ![](image://icon-lock.png?resize=32&classes=inline) Manages **SSL certificates** (based on Let's Encrypt) ; +- ![](image://icon-shield.png?resize=32&classes=inline)... and **security systems** (Fail2ban, yunohost-firewall); + +## Origin + +YunoHost was created in February 2012 after something like this: + +

"Shit, I'm too lazy to reconfigure my mail server... Beudbeud, how were you able to get your little server running with LDAP?"

+Kload, February 2012
+ +All that was needed was an admin interface for Beudbeud's server to make something usable, so Kload decided to develop one. Finally, after automating several configs and packaging in some web apps, YunoHost v1 was finished. + +Noting the growing enthusiasm around YunoHost and around self-hosting in general, the original developers along with new contributors decided to start work on version 2, a more extensible, more powerful, more easy-to-use, and at that, one that makes a nice cup of fair-trade coffee for the elves of Lapland. + +The name **YunoHost** comes from the jargon "Y U NO Host". The [Internet meme](https://en.wikipedia.org/wiki/Internet_meme) should illustrate it: +![](image://dude_yunohost.jpg) + +## What YunoHost is not? + +Even if YunoHost can handle multiple domains and multiple users, it is **not meant to be a mutualized system**. + +First, the software is too young, not tested at scale and thus probably not optimized well enough for hundreds of users at the same time. With that said, we do not want to lead the software in that direction. Virtualization democratizes, and its usage is recommended since it is a more watertight way to achieve mutualization than a "full-stack" system like YunoHost. + +You can host your friends, your family and your company safely and with ease, but you must **trust your users**, and they must trust you above all. If you want to provide YunoHost services for unknown persons anyway, a full VPS per user will be just fine, and we believe a better way to go. + +## Artworks + +Black and white YunoHost PNG logo by ToZz (400 × 400 px): + +![](image://ynh_logo_black_300dpi.png?resize=220) +![](image://ynh_logo_white_300dpi.png?resize=220&id=whitelogo) + +Licence: CC-BY-SA 4.0 diff --git a/pages/01.overview/10.what_is_yunohost/what_is_yunohost.ru.md b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.ru.md new file mode 100644 index 00000000..c0925cf0 --- /dev/null +++ b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.ru.md @@ -0,0 +1,55 @@ +--- +title: Что такое YunoHost? +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + +![YunoHost logo](image://YunoHost_logo_vertical.png?resize=400&id=ynhlogo) + +YunoHost это **операционная система** позволяющая легко администрировать **сервера**, и следовательно позволяет сделать [self-hosting](/selfhosting) надёжным, безопасным, этическим и лёгким. Это свободнораспространяемая библиотека которая поддерживается исключительно волонтёрами. Технически, это дистрибутив основанный на [Debian GNU/Linux](https://debian.org) и может быть установлен на [большое количество систем](/install). + +## Фичи + +- ![](image://icon-debian.png?resize=32&classes=inline) Основан на Debian; +- ![](image://icon-tools.png?resize=32&classes=inline) Администрируй свой сервер через **простой веб-интерфейс** ; +- ![](image://icon-package.png?resize=32&classes=inline) Развертывание **приложение за пару секунд**; +- ![](image://icon-users.png?resize=32&classes=inline) Редактируй **пользователей** (основано на LDAP); +- ![](image://icon-globe.png?resize=32&classes=inline) Управляй **доменными именами**; +- ![](image://icon-medic.png?resize=32&classes=inline) Создавай и восстанавливай **бэкапы**; +- ![](image://icon-door.png?resize=32&classes=inline) Соединяй все приложения в **пользовательском портале** (NGINX, SSOwat); +- ![](image://icon-mail.png?resize=32&classes=inline) Включает **полный набор для работы электронной почты** (Postfix, Dovecot, Rspamd, DKIM); +- ![](image://icon-messaging.png?resize=32&classes=inline)... более известный как **встроенный сервер сообщений** (XMPP); +- ![](image://icon-lock.png?resize=32&classes=inline) Управляй **SSL сертификатами** (Основано на Let's Encrypt) ; +- ![](image://icon-shield.png?resize=32&classes=inline)... и **системами безопасности** (Fail2ban, yunohost-firewall); + +## История + +YunoHost был создан в Феврале 2012 после чего-то вроде: + +

"Блин, Я слишком ленив чтобы перенастроить мой почтовый сервер... Beudbeud, как вам удалось запустить свой малеький сервер LDAP?"

+Kload, Февраль 2012
+ +Всё что было нужно - админ панель для сервера Beudbeud-а чтобы сделать что-то юзабельное, поэтому Kload решил её разработать. В итоге, после автоматизации нескольких конфигураций и упаковки некоторых Веб-приложений, YunoHost v1 был завершён. + +Заметив большое внимание вокруг YunoHost и своими серверами, первоначальные разработчики вместе с новыми помощниками решили начать работу над версией 2. Более универсальной, более мощной, более простой и всё такое. + +Название **YunoHost** пришло из жаргонного "Y U NO Host". Этот [интернет мем](https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82-%D0%BC%D0%B5%D0%BC) должен проиллюстрировать это: +![](image://dude_yunohost.jpg) + +## Чем не является YunoHost? + +Не смотря на то, что YunoHost поддерживает управление несколькими доменами, это **не значит что он может их обьеденять**. + +Во первых, код ещё очень молод, не протестирован и не оптимизирован для большого количества пользователей. Однако, мы не хотиим делать весь упор разработки на это. + +Вы можете хостить для друзей, семьи и компании легко и просто, но **вы должны доверять ползователям**, и они должны доверять вам превыше всего. Если вы всё-таки хотите предоставлять услуги YunoHost незнакомым людям, полный VPS на каждого пользователя будет достаточно, и мы уверены что есть лучший вариант. + +## Логотипы + +Чёрный и Белый логотипы YunoHost от ToZz (400 × 400 px): + +![](image://ynh_logo_black_300dpi.png?resize=220) +![](image://ynh_logo_white_300dpi.png?resize=220&id=whitelogo) diff --git a/pages/01.overview/15.try_yunohost/try_yunohost.ar.md b/pages/01.overview/15.try_yunohost/try_yunohost.ar.md new file mode 100644 index 00000000..3ee773d8 --- /dev/null +++ b/pages/01.overview/15.try_yunohost/try_yunohost.ar.md @@ -0,0 +1,24 @@ +--- +title: تجريب YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/try' +--- + +! **ملاحظة :** يمكن لهذا السيرفر التجريبي أن يتوقف من وقت إلى آخر. + +[center] +[columns] +[[fa=user /] واجهة المستخدم](https://demo.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +إسم المستخدم : demo +كلمة السر : demo + +[[fa=cog /] واجهة الإدارة](https://demo.yunohost.org/yunohost/admin/?target=_blank&classes=btn,btn-lg,btn-primary) +كلمة السر : demo + +[/columns] +[/center] + +!!!! **تم توفير الخادم التجريبي بفضل [Gitoyen](https://www.gitoyen.net?target=_blank) [fa=heart /]** diff --git a/pages/01.overview/15.try_yunohost/try_yunohost.ca.md b/pages/01.overview/15.try_yunohost/try_yunohost.ca.md new file mode 100644 index 00000000..2f285899 --- /dev/null +++ b/pages/01.overview/15.try_yunohost/try_yunohost.ca.md @@ -0,0 +1,24 @@ +--- +title: Prova YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/try' +--- + +! **Nota:** Aquest és un servidor de demostració, podria estar caigut de tant en tant. + +[center] +[columns] +[[fa=user /] Interfície d'usuària](https://demo.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +Nom d'usuària: demo +Contrasenya: demo + +[[fa=cog /] Interfície d'administració](https://demo.yunohost.org/yunohost/admin/?target=_blank&classes=btn,btn-lg,btn-primary) +Contrasenya: demo + +[/columns] +[/center] + +!!!! **Servidor de demostració amablement ofert per [Gitoyen](https://www.gitoyen.net?target=_blank) [fa=heart /]** diff --git a/pages/01.overview/15.try_yunohost/try_yunohost.de.md b/pages/01.overview/15.try_yunohost/try_yunohost.de.md new file mode 100644 index 00000000..fbcfb2a1 --- /dev/null +++ b/pages/01.overview/15.try_yunohost/try_yunohost.de.md @@ -0,0 +1,24 @@ +--- +title: YunoHost ausprobieren +template: docs +taxonomy: + category: docs +routes: + default: '/try' +--- + +! **Hinweis:** Dieser Demo-Server könnte zeitweilig nicht erreichbar sein. + +[center] +[columns] +[[fa=user /] Anwendungen](https://demo.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +Username: demo +Password: demo + +[[fa=cog /] Verwaltung](https://demo.yunohost.org/yunohost/admin/?target=_blank&classes=btn,btn-lg,btn-primary) +Password: demo + +[/columns] +[/center] + +!!!! **Demo-Server freundlicherweise zur Verfügung gestellt von [Gitoyen](https://www.gitoyen.net?target=_blank) [fa=heart /]** diff --git a/pages/01.overview/15.try_yunohost/try_yunohost.es.md b/pages/01.overview/15.try_yunohost/try_yunohost.es.md new file mode 100644 index 00000000..0709a18e --- /dev/null +++ b/pages/01.overview/15.try_yunohost/try_yunohost.es.md @@ -0,0 +1,24 @@ +--- +title: Prueba YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/try' +--- + +! **Nota :** Esta demonstración puede no funcionar de vez en cuando, pero por lo menos puedes probarlo, y esto es genial :) + +[center] +[columns] +[[fa=user /] Interfaz de usuario](https://demo.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +Usuario : demo +Contraseña : demo + +[[fa=cog /] Interfaz de administración](https://demo.yunohost.org/yunohost/admin/?target=_blank&classes=btn,btn-lg,btn-primary) +Contraseña : demo + +[/columns] +[/center] + +!!!! **El servidor de demostración es ofrecido generosamente por [Gitoyen](https://www.gitoyen.net?target=_blank) [fa=heart /]** diff --git a/pages/01.overview/15.try_yunohost/try_yunohost.fr.md b/pages/01.overview/15.try_yunohost/try_yunohost.fr.md new file mode 100644 index 00000000..7d81bedf --- /dev/null +++ b/pages/01.overview/15.try_yunohost/try_yunohost.fr.md @@ -0,0 +1,24 @@ +--- +title: Essayer YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/try' +--- + +! **Note :** Cette démo peut cesser de fonctionner de temps en temps, mais au moins vous pouvez tester, et ça c’est vraiment chouette :) + +[center] +[columns] +[[fa=user /] Interface utilisateur](https://demo.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +Utilisateur : demo +Mot de passe : demo + +[[fa=cog /] Interface d’administration](https://demo.yunohost.org/yunohost/admin/?target=_blank&classes=btn,btn-lg,btn-primary) +Mot de passe : demo + +[/columns] +[/center] + +!!!! **Le serveur de démo est fourni généreusement par [Gitoyen](https://www.gitoyen.net?target=_blank) [fa=heart /]** diff --git a/pages/01.overview/15.try_yunohost/try_yunohost.it.md b/pages/01.overview/15.try_yunohost/try_yunohost.it.md new file mode 100644 index 00000000..916e4770 --- /dev/null +++ b/pages/01.overview/15.try_yunohost/try_yunohost.it.md @@ -0,0 +1,24 @@ +--- +title: Prova YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/try' +--- + +! **Nota:** A volte questo server demo può essere irraggiungibile + +[center] +[columns] +[[fa=user /] Interfaccia utente](https://demo.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +Nome utente: demo +Password: demo + +[[fa=cog /] Interfaccia amministrazione](https://demo.yunohost.org/yunohost/admin/?target=_blank&classes=btn,btn-lg,btn-primary) +Password: demo + +[/columns] +[/center] + +!!!! **Il server demo è gentilmente fornito da [Gitoyen](https://www.gitoyen.net?target=_blank) [fa=heart /]** \ No newline at end of file diff --git a/pages/01.overview/15.try_yunohost/try_yunohost.md b/pages/01.overview/15.try_yunohost/try_yunohost.md new file mode 100644 index 00000000..0496de0b --- /dev/null +++ b/pages/01.overview/15.try_yunohost/try_yunohost.md @@ -0,0 +1,24 @@ +--- +title: Try YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/try' +--- + +! This demo server could be down from time to time, but at least you can test and that's really cool :) + +[center] +[columns] +[[fa=user /] User interface](https://demo.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +Username: demo +Password: demo + +[[fa=cog /] Administration interface](https://demo.yunohost.org/yunohost/admin/?target=_blank&classes=btn,btn-lg,btn-primary) +Password: demo + +[/columns] +[/center] + +!!!! **Demo server gracefully provided by [Gitoyen](https://www.gitoyen.net?target=_blank) [fa=heart /]** diff --git a/pages/01.overview/15.try_yunohost/try_yunohost.ru.md b/pages/01.overview/15.try_yunohost/try_yunohost.ru.md new file mode 100644 index 00000000..25b41708 --- /dev/null +++ b/pages/01.overview/15.try_yunohost/try_yunohost.ru.md @@ -0,0 +1,24 @@ +--- +title: Попробовать YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/try' +--- + +! Этот демонстрационный сервер может время от времени отключаться, но, по крайней мере, вы можете протестировать, и это действительно круто :) + +[center] +[columns] +[[fa=user /] Пользовательский интерфейс](https://demo.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +Логин: demo +Пароль: demo + +[[fa=cog /] Панель администратора](https://demo.yunohost.org/yunohost/admin/?target=_blank&classes=btn,btn-lg,btn-primary) +Пароль: demo + +[/columns] +[/center] + +!!!! **Демонстрационный сервер, любезно предоставленный [Gitoyen](https://www.gitoyen.net?target=_blank) [fa=heart /]** diff --git a/pages/01.overview/overview.fr.md b/pages/01.overview/overview.fr.md new file mode 100644 index 00000000..865b60bd --- /dev/null +++ b/pages/01.overview/overview.fr.md @@ -0,0 +1,10 @@ +--- +title: Vue d'ensemble +template: chapter +taxonomy: + category: docs +routes: + default: /overview +--- + +# Vue d'ensemble diff --git a/pages/01.overview/overview.md b/pages/01.overview/overview.md new file mode 100644 index 00000000..8219022b --- /dev/null +++ b/pages/01.overview/overview.md @@ -0,0 +1,10 @@ +--- +title: Overview +template: chapter +taxonomy: + category: docs +routes: + default: /overview +--- + +# Overview diff --git a/pages/01.overview/overview.ru.md b/pages/01.overview/overview.ru.md new file mode 100644 index 00000000..018d2fc4 --- /dev/null +++ b/pages/01.overview/overview.ru.md @@ -0,0 +1,10 @@ +--- +title: Обзор +template: chapter +taxonomy: + category: docs +routes: + default: /overview +--- + +# Обзор diff --git a/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.de.md b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.de.md new file mode 100644 index 00000000..e1016ed9 --- /dev/null +++ b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.de.md @@ -0,0 +1,90 @@ +--- +title: So hosten Sie selbst! +template: docs +taxonomy: + category: docs +routes: + default: '/howtohostyourself' +--- + +Sie können zu Hause (auf einem kleinen Computer) oder auf einem Remote-Server hosten. Jede Lösung hat ihre Vor- und Nachteile: + +### Zu Hause, zum Beispiel auf einem Einplatinencomputer oder einem alten Computer + +Sie können zu Hause mit einem Einplatinencomputer oder einem überarbeiteten regulären Computer, der mit Ihrem Heimrouter verbunden ist, hosten. + +- **Pros** : Sie haben die physische Kontrolle über die Maschine und müssen nur die Hardware kaufen; +- **Cons** : Sie müssen [Ihre Internet-Router manuell konfigurieren](/isp_box_config) und [sind möglicherweise von Ihrem Internet-Service-Provider eingeschränkt](/isp). + +### Zu Hause hinter einem VPN + +Ein VPN ist ein verschlüsselter Tunnel zwischen zwei Computern. In der Praxis sieht es so aus, als ob Sie direkt vor Ort mit Ihrem Server verbunden wären, aber tatsächlich verbinden Sie sich von einem anderen Ort im Internet. Auf diese Weise können Sie weiterhin zu Hause hosten und gleichzeitig mögliche Einschränkungen Ihres Internetdienstanbieters umgehen. Siehe auch [das Internet Cube-Projekt](https://internetcu.be/) und [der FFDN](https://www.ffdn.org/). + +- **Pros** : Sie haben die physische Kontrolle über den Computer, und das VPN verbirgt Ihren Datenverkehr vor Ihrem ISP und ermöglicht es Ihnen, seine Einschränkungen zu umgehen; +- **Cons** : Sie müssen ein monatliches Abonnement für das VPN bezahlen. + +### Auf einem Remote-Server (VPS oder dedizierter Server) + +Sie können einen virtuellen privaten Server oder eine dedizierte Maschine von [associative](https://db.ffdn.org/) oder von anderen [kommerziellen](/providers/server) "Cloud"-Anbietern mieten. + +- **Pros** : Ihr Server und seine Internetverbindung sind schnell; +- **Cons** : Sie müssen ein monatliches Abonnement bezahlen und haben keine physische Kontrolle über Ihren Server. + +### Summary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Zu Hause
(z.B. Einplatinencomputer, alter Computer)
Zu Hause
hinter einem VPN
Auf einem Remote-Server
(VPS oder dediziert)
Hardware Kostenetwa 50€
(z.B. ein Raspberry Pi)
keine
Monatliche KostenUnerheblich
(Stromkosten)
etwa 5€
(VPN)
ab ~3€
(VPS)
Physikalische Kontrolle
der Machine
JaJaNein
Manuelles Port
Routing erforderlich
JaNeinNein
Mögliche ISP-EinschränkungenJa
(siehe hier)
Per VPN umgangenNormalerweise nein
CPUTypischerweise ~1 GHz~2 GHz
(Digital Ocean droplet)
RAMIn der Regel 500 MB oder 1 GBabhängig von den Serverkosten
InternetverbindungHängt von Ihrer Internetverbindung abNormalerweise ziemlich gut
diff --git a/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.es.md b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.es.md new file mode 100644 index 00000000..6d28bf35 --- /dev/null +++ b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.es.md @@ -0,0 +1,90 @@ +--- +title: Elegir manera y proveedores de autohospedaje +template: docs +taxonomy: + category: docs +routes: + default: '/howtohostyourself' +--- + +Puedes autohospedarte desde tu casa (desde un pequeño ordenador), o desde un servidor remoto. Cada solución tiene sus ventajas e inconvenientes: + +### En casa, por ejemplo con una tarjeta ARM o un ordenador antiguo + +Puedes autoalojarte en casa, desde una tarjeta ARM o un viejo ordenador conectado a tu internet. + +- **Ventajas**: Tienes el control físico de la máquina y solo tienes que conseguir el hardware inicial. +- **Desventajas**: Probablemente necesitas [configurer manualmente tu router](/isp_box_config) y puede que [tu operador de internet te limite](/isp). + +### En casa, pasando por una VPN + +Una VPN es un tunel encriptado entre dos máquinas. En la práctica, permite hacer como si una máquina estuviera en otro lugar. Esto permite el autoalojamiento evitando limitaciones de los proveedores de internet. Puedes echar un ojo a [el proyecto InternetCu.Be](https://internetcu.be/) y la [Federación FFDN (Federación de operadores de acceso a internet asociativos)](https://www.ffdn.org/en). + +- **Ventajas** : Tienes el control físico de la máquina y la VPN permite ocultarte del rastro de tu operador de internet, y esquivar limitaciones. +- **Desventajas** : Las VPN suelen ser de pago, y tendrás que costearla mensualmente. + +### En un servidor remoto (VPS o servidor dedicado) + +Puedes alquilar un servidor privado virtual (VPS) o una máquina dedicada a alojamientos [asociativos](https://db.ffdn.org/) o [comerciales](/providers/server). + +- **Ventajas**: Tu servidor será rápido y su conexión veloz. +- **Desventajas**: Ocasiona un gasto mensual por la máquina, y no tienes control físico. + +### Resumen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
En casa
(ej. ARM, viejo PC)
En casa
pasando por la VPN
En remoto
(VPS o dedicado)
Coste materialEn torno a ~50€
(ej. una Raspberry Pi)
Ninguno
Coste mensualDespreciable
(electricidad)
En torno a ~5€
(VPN)
Desde ~3€
(VPS)
Control físico
de la máquina
SiSiNo
Enrutamiento manual
de puertos
SiNoNo
Posibilidad de limitación
por el proveedor de internet
Si
(ver Proveedores)
Esquivados mediante VPNGeneralemente no
CPUGeneralemente ~1 GHz~2 GHz
(droplet Digital Ocean)
RAMDesde 500M hasta 8GDepende del precio
Conectividad a internetDepende de tu conexiónGeneralemente buena
diff --git a/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.fr.md b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.fr.md new file mode 100644 index 00000000..1547a296 --- /dev/null +++ b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.fr.md @@ -0,0 +1,90 @@ +--- +title: Choisir son mode et fournisseurs d'autohébergement +template: docs +taxonomy: + category: docs +routes: + default: '/howtohostyourself' +--- + +Vous pouvez vous auto-héberger à la maison (sur un petit ordinateur), ou sur un serveur distant. Chaque solution a ses avantages et inconvénients : + +### À la maison, par exemple sur une carte ARM ou un ancien ordinateur + +Vous pouvez vous héberger chez vous, sur une carte ARM ou un vieil ordinateur, connecté à votre box internet. + +- **Avantages** : vous aurez un contrôle physique sur la machine et avez seulement besoin d'acheter le matériel initial ; +- **Inconvénients** : il vous faudra [configurer manuellement votre box internet](/isp_box_config) et serez possiblement [limité par certains aspects de votre fournisseur d'accès à Internet](/isp). + +### À la maison, derrière un VPN + +Un VPN est un tunnel chiffré entre deux machines. En pratique, cela permet de faire « comme si » une machine était connectée depuis ailleurs. Ceci permet de s'auto-héberger à la maison tout en contournant les limitations du fournisseur d'accès à Internet. Voir aussi [le projet Brique Internet](https://labriqueinter.net/) et [la FFDN](https://www.ffdn.org/). + +- **Avantages** : vous aurez un contrôle physique sur la machine, et le VPN permettra de cacher votre trafic vis-à-vis de votre FAI ainsi que de contourner ses limitations ; +- **Inconvénients** : il vous faudra payer des frais mensuels pour le VPN. + +### Sur un serveur distant (VPS ou serveur dédié) + +Vous pouvez louer un serveur privé virtuel ou une machine dédiée à des hébergeurs [associatifs](https://db.ffdn.org/) ou [commerciaux](/providers/server). + +- **Avantages** : votre serveur sera rapide et la connectivité internet sera bonne ; +- **Inconvénients** : il vous faudra payer des frais mensuels pour la machine, et vous n'aurez pas de contrôle physique dessus. + +### Résumé + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
À la maison
(e.g. carte ARM, vieil ordi)
À la maison
derrière un VPN
Sur un serveur distant
(VPS ou dédié)
Coût matérielAutour de 50€
(e.g. un Raspberry Pi)
Aucun
Coût mensuelNégligeable
(electricité)
Autour de 5€
(VPN)
À partir de ~3€
(VPS)
Contrôle physique
sur la machine
OuiOuiNon
Routage manuel
des ports
OuiNonNon
Limitations possibles
par le FAI
Oui
(voir ici)
Contournées par le VPNGénéralement non
CPUGénéralement ~1 GHz~2 GHz
(droplet Digital Ocean)
RAMGénéralement 500 Mo ou 1 GoEn fonction du prix
Connectivité internetDépend de la connexionGénéralement bonne
diff --git a/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.it.md b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.it.md new file mode 100644 index 00000000..6fed1792 --- /dev/null +++ b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.it.md @@ -0,0 +1,90 @@ +--- +title: Scegliere il tuo metodo e provider de self-hosting +template: docs +taxonomy: + category: docs +routes: + default: '/howtohostyourself' +--- + +Puoi fare self-hosting in casa (su un piccolo computer), o su un server remoto. Ogni soluzione ha i suoi pro e i suoi contro: + +### In casa, per esempio con una scheda ARM o con un vecchio computer + +Puoi fare self-hosting in proprio, con una scheda ARM o con un vecchio computer, connesso con il tuo router. + +- **Pro**: avrai un controllo fisico sulla macchina e avrai bisogno solo di acquistare il materiale per iniziare; +- **Contro**: dovrai [configurare manualmente il router](/isp_box_config) e probabilmente ci saranno dei [limiti rispetto al tuo fornitore di accesso a internet](/isp) + +### In casa, dietro una VPN + +Una VPN è un tunnel criptato tra due macchine. In pratica permette di avere una macchina «come se» fosse connessa ad un'altra. Questa soluzione permette di fare self-hosting a casa aggirando i limiti del fornitore di accesso a internet. Vedi anche il [progetto Brique Internet](https://labriqueinter.net) e [FFDN](https://www.ffdn.org). + +- **Pro**: avrai un controllo fisico sulla macchina e la VPN ti permetterà di nascondere il traffico al tuo ISP e ti permetterà di bypassare le sue limitazioni. +- **Contro**: dovrai pagare un canone mensile per la VPN. + +### Su un server distante (VPS o server dedicato) + +Puoi affittare un server virtuale privato o un macchina dedicata da fornitori "Cloud" come [associazioni](https://db.ffdn.org) o [commerciali](/providers/server) + +- **Pro**: il tuo server e la connessione saranno veloci; +- **Contro**: dovrai pagare un canone mensile per la macchina e non avrai il controllo fisico del tuo server. + +### Sommario + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
In casa
(e.g. scheda ARM, vecchio computer)
In casa
dietro una VPN
Su un server distante
(VPS o dedicato)
Costo del materialeCirca 50€
(e.g. un Raspberry Pi)
Nessuno
Costo mensileTrascurabile
(elettricità)
Circa 5€
(VPN)
A partire da ~3€
(VPS)
Controllo fisico
sulla macchina
SiSiNo
Routing manuale
delle porte
SiNoNo
Possibili limitazioni
dall'ISP
Si
(vedere qui)
Aggirati dalla VPNGeneralmente no
CPUGeneralmente ~1 GHz~2 GHz
(Digital Ocean droplet)
RAMGeneralmente 500 Mb o 1 GbIn relazione al costo del server
Connettività internetDipende dalla connessione di casaGeneralmente buona
diff --git a/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.md b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.md new file mode 100644 index 00000000..7f4e8af1 --- /dev/null +++ b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.md @@ -0,0 +1,90 @@ +--- +title: Choose your selfhosting method and providers +template: docs +taxonomy: + category: docs +routes: + default: '/howtohostyourself' +--- + +You can host yourself at home (on a small computer), or on a remote server. Each solution has their pros and cons: + +### At home, for instance on an ARM board or an old computer + +You can host yourself at home with an ARM board or a re-purposed regular computer, connected to your home router/box. + +- **Pros** : you will have physical control of the machine and only need to buy the hardware; +- **Cons** : you will have to [manually configure your internet box](/isp_box_config) and [might be limited by your ISP](/isp). + +### At home, behind a VPN + +A VPN is an encrypted tunnel between two machines. In practice, it makes it "as if" you were directly, locally, connected to your server machine, but actually from somewhere else on the Internet. This allows you to still host yourself at home, while bypassing possible limitations of your ISP. See also [the Internet Cube project](https://internetcu.be/) and [the FFDN](https://www.ffdn.org/). + +- **Pros** : you will have physical control of the machine, and the VPN hides your traffic from your ISP and allows you to bypass its limitations; +- **Cons** : you will have to pay a monthly subscription for the VPN. + +### On a remote server (VPS or dedicated server) + +You can rent a virtual private server or a dedicated machine from [associative](https://db.ffdn.org/) or [commercial](/providers/server) "Cloud" providers. + +- **Pros** : your server and its internet connectivity will be fast; +- **Cons** : you will have to pay a monthly subscription and won't have physical control of your server. + +### Summary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
At home
(e.g. ARM board, old computer)
At home
behind a VPN
On a remote server
(VPS or dedicated)
Hardware costAbout 50€
(e.g. a Raspberry Pi)
None
Monthly costNegligible
(electricity)
Around 5€
(VPN)
Starting at ~3€
(VPS)
Physical control
of the machine
YesYesNo
Manual port
routing required
YesNoNo
Possible ISP limitationsYes
(see here)
Bypassed by VPNTypically no
CPUTypically ~1 GHz~2 GHz
(Digital Ocean droplet)
RAMTypically 500 Mb or 1 GbRelated to server cost
Internet connectivityDepends on home connectivityTypically pretty good
\ No newline at end of file diff --git a/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.ru.md b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.ru.md new file mode 100644 index 00000000..6ffe5c3c --- /dev/null +++ b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.ru.md @@ -0,0 +1,89 @@ + +title: Выберите метод самостоятельной развёртки и провайдера +template: docs +taxonomy: + category: docs +routes: + default: '/howtohostyourself' +--- + +Вы можете разместить его у себя дома (на небольшом компьютере) или на удаленном сервере. У каждого решения есть свои плюсы и минусы: + +### Дома, например, на плате ARM или старом компьютере + +Вы можете запустить YunoHost у себя дома с помощью платы ARM или переоборудованного обычного компьютера, подключенного к вашему домашнему роутеру. +- **Плюсы** : у вас будет физический контроль над машиной, и вам нужно будет только купить оборудование; +- **Минусы** : вам придется [вручную настроить свой роутер](/isp_box_config) и [возможные ограничения вашим провайдером](/isp). + +### Дома, используя VPN + +VPN - это зашифрованный туннель между двумя компьютерами. На практике это делает все "как если бы" вы были напрямую, локально, подключены к своему серверному компьютеру, но на самом деле откуда-то еще в Интернете. Это позволяет вам по-прежнему разместить сервер у себя дома, обходя возможные ограничения вашего интернет-провайдера. Смотрите также [проект Internet Cube](https://internetcu.be/) и [FFDN](https://www.ffdn.org/). + +- **Плюсы** : у вас будет физический контроль над машиной, а VPN скрывает ваш трафик от вашего интернет-провайдера и позволяет вам обойти его ограничения; +- **Минусы** : вам придется оплатить ежемесячную подписку на VPN. +- +### На удалённом сервере (VPS или выделенный) + +Вы можете арендовать виртуальный частный сервер (VPS) или выделенную машину у [ассоциации](https://db.ffdn.org/) или [коммерческие](/providers/server) облачные провайдеры. + +- **Плюсы** : ваш сервер и его подключение к Интернету будут быстрыми; +- **Минусы** : вам придется платить ежемесячно за сервер и у вас не будет физического контроля над вашим сервером. + +### Суммарно + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Дома
(допустим ARM платы или старый компьютер)
Дома
используя ВПН
На удалённом сервере
(VPS или выделенный)
Стоимость оборудованияоколо 50€
(используя Raspberry Pi)
Ничего
Цена за месяцНезначительно
(только за электричество)
около 5€
(VPN)
около 3€
(VPS)
Физический контроль
к компьютеру
ДаДаНет
Требуется ли ручное управление
портами
ДаНетНет
Возможные ограничения провайдераДа
(подробнее здесь)
Обходится с помощью VPNОбычно нет
ЦПОколо ~1 GHz~2 GHz
(Сервер от Digital Ocean)
ОЗУОбычно 500 Мб или 1 ГбRelated to server cost
Интернет соединенреЗависит от домашнего ИнтернетаОбычно достаточно хорошее
\ No newline at end of file diff --git a/pages/02.administer/10.install/05.images/images.de.md b/pages/02.administer/10.install/05.images/images.de.md new file mode 100644 index 00000000..1edddfeb --- /dev/null +++ b/pages/02.administer/10.install/05.images/images.de.md @@ -0,0 +1,78 @@ +--- +title: Vorinstallierte Images +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- + + +Für diese Seite muss JavaScript aktiviert sein, damit sie korrekt angezeigt werden kann :s. +
+
+
+ +N B : Auch wenn das Image nicht der neuesten Version von YunoHost entspricht, können Sie es dennoch verwenden und anschließend ein Systemupdate durchführen. + +
+
+
+
+ + + + + + diff --git a/pages/02.administer/10.install/05.images/images.es.md b/pages/02.administer/10.install/05.images/images.es.md new file mode 100644 index 00000000..c78f3524 --- /dev/null +++ b/pages/02.administer/10.install/05.images/images.es.md @@ -0,0 +1,78 @@ +--- +title: Imagenes +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- + + +Esta página requiere que Javascript esté instalado par aparecer correctamente :s. +
+
+
+ +N.B. : Incluso si la imagen no corresponde con la última versión de YunoHost, puedes utilizarla y actualizarla después de la instalación ! + +
+
+
+
+ + + + + + diff --git a/pages/02.administer/10.install/05.images/images.fr.md b/pages/02.administer/10.install/05.images/images.fr.md new file mode 100644 index 00000000..8a4df6b5 --- /dev/null +++ b/pages/02.administer/10.install/05.images/images.fr.md @@ -0,0 +1,79 @@ +--- +title: Images +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- + + +Cette page requiert que Javascript soit activé pour s'afficher correctement :s. +
+
+
+ +!!!! Même si l'image ne correspond pas à la dernière version de YunoHost, vous pouvez tout de même l'utiliser puis faire une mise à jour du système après l'installation ! + +!!! Si vous souhaitez vérifier la validité de nos images signées, vous pouvez [télécharger notre clé publique](https://forge.yunohost.org/yunohost.asc). + +
+
+
+
+ + + + + diff --git a/pages/02.administer/10.install/05.images/images.md b/pages/02.administer/10.install/05.images/images.md new file mode 100644 index 00000000..d02f4e7b --- /dev/null +++ b/pages/02.administer/10.install/05.images/images.md @@ -0,0 +1,79 @@ +--- +title: Pre-installed images +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- + + +This page requires Javascript enabled to display properly :s. +
+
+
+ +!!! Even if the image does not corresponds to the latest version of YunoHost, you can still use it and do a regular system upgrade after setting up! + +!!! If you wish to check the validity of our signed images, you can [download our public key](https://forge.yunohost.org/yunohost.asc). + +
+
+
+
+ + + + + diff --git a/pages/02.administer/10.install/05.images/images.ru.md b/pages/02.administer/10.install/05.images/images.ru.md new file mode 100644 index 00000000..6c7ef88d --- /dev/null +++ b/pages/02.administer/10.install/05.images/images.ru.md @@ -0,0 +1,79 @@ +--- +title: Предустановленные образы +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- + + +Для правильного отображения этой страницы требуется включить Javascript :s. +
+
+
+ +!!! Даже если изображение не соответствует последней версии YunoHost, вы все равно можете использовать его и выполнить обычное обновление системы после настройки! + +!!! Если вы хотите проверить достоверность наших подписанных изображений, вы можете [скачать наш открытый ключ](https://forge.yunohost.org/yunohost.asc). + +
+
+
+
+ + + + + diff --git a/pages/02.administer/10.install/10.finding_the_local_ip/finding_the_local_ip.de.md b/pages/02.administer/10.install/10.finding_the_local_ip/finding_the_local_ip.de.md new file mode 100644 index 00000000..0c4d9b26 --- /dev/null +++ b/pages/02.administer/10.install/10.finding_the_local_ip/finding_the_local_ip.de.md @@ -0,0 +1,62 @@ +--- +title: Lokale IP-Adresse Ihres Servers finden +template: docs +taxonomy: + category: docs +routes: + default: '/finding_the_local_ip' +--- + +Bei einer Installation zu Hause sollte Ihr Server normalerweise über die Domäne`yunohost.local` erreichbar sein. Wenn dies aus irgendeinem Grund nicht funktioniert, müssen Sie möglicherweise die *lokale* IP-Adresse Ihres Servers ermitteln. + +## Was ist ein locales IP ? +Die lokale IP-Adresse ist die, die verwendet wird, um auf Ihren Server innerhalb des lokalen Netzwerks (typischerweise Ihr Zuhause) zu verweisen, wo mehrere Geräte an einen Router (Ihre Internetbox) angeschlossen sind. Die lokale IP-Adresse sieht typischerweise so aus `192.168.x.y` (oder manchmal `10.0.x.y` oder `172.16.x.y`) + +## Wie findet man es? +Jeder dieser Tricks sollte es Ihnen ermöglichen, die lokale IP-Adresse Ihres Servers zu finden: +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="(Empfohlen) Mit Angry IP Scanner"] + +Verwenden Sie dazu die [AngryIP](https://angryip.org/download/) Software. Sie Brauchen nur diese lokalen IP-Bereiche in dieser Reihenfolge durchsuchen, bis Sie die aktive IP-Adresse finden, die Ihrem Server entspricht: +- `192.168.0.0` -> `192.168.0.255` +- `192.168.1.0` -> `192.168.1.255` +- `192.168.2.0` -> `192.168.255.255` +- `10.0.0.0` -> `10.0.255.255` +- `172.16.0.0` -> `172.31.255.255` + +!!! **Tricks**: +!!! - Die Reihenfolge nach Ping festlegen, um die effektiv genutzten IP-Adressen zu sehen, wie unten agegeben. +!!! - Ihr Server sollte normalerweise auf Port 80 und 443 als lauschend angezeigt werden +!!! - im Zweifelsfall, einfach `https://192.168.x.y` in Ihrem Browser eingeben, um zu prüfen, ob es sich um YunoHost handelt. + +![](image://angryip.png?class=inline) + +[/ui-tab] +[ui-tab title="Mit Ihrem internet-Router / box"] +Benutzen Sie die Schnittstelle Ihrer Internet-Box / Ihres Routers, um die angeschlossenen Geräte aufzulisten +[/ui-tab] +[ui-tab title="Mit arp-scan"] +Wenn Sie Linux verwenden, können Sie ein Terminal öffnen und den Befehl `sudo arp-scan --local`werwenden, um die IP-Adressen in Ihrem lokalen Netzwerk aufzulisten (dies kann auch unter Windows funktionieren); + +Wenn der Befehl `arp-scan` viele Geräte anzeigt, können Sie dann mit dem Befehl `nmap -p 22 192.168.1.0/24` prüfen, welche Geräte für SSH offen sind, um sie auszusortieren (passen Sie den IP-Bereich an Ihr lokales Netzwerk an) +[/ui-tab] +[ui-tab title="Mit Hilfe eines Bildschirms"] +Bildschirm auf den Server anschliessen, sich einloggen und diesen Befehl eingeben`hostname --all-ip-address`. + +Die Standard-Anmeldedaten (vor der Nachinstallation!) zum Einloggen sind: +- login: root +- password: yunohost + +(Wenn Sie ein rohes Armbian-Image anstelle des vorinstallierten YunoHost-Images verwenden, lauten die Anmeldedatenen root / 1234) + +[/ui-tab] +[/ui-tabs] + +## Ich kann meine lokale IP-Adresse immer noch nicht finden + +Wenn Sie Ihren Server mit keinem der vorherigen Tricks finden können, ist Ihr Server möglicherweise nicht richtig gebootet worden: + +- Vergewissern Sie sich, dass Ihr Server richtig eingesteckt ist; +- Wenn Sie eine SD-Karte verwenden, stellen Sie sicher, dass der Elektroanschluss nicht staubig ist; +- Schließen Sie einen Bildschirm an Ihren Server an und versuchen Sie, ihn neu zu starten, um zu prüfen, ob er ordnungsgemäß hochfährt; +- Vergewissern Sie sich, dass das Ethernet-Kabel funktioniert und richtig eingesteckt ist; diff --git a/pages/02.administer/10.install/10.finding_the_local_ip/finding_the_local_ip.fr.md b/pages/02.administer/10.install/10.finding_the_local_ip/finding_the_local_ip.fr.md new file mode 100644 index 00000000..d6f28e4e --- /dev/null +++ b/pages/02.administer/10.install/10.finding_the_local_ip/finding_the_local_ip.fr.md @@ -0,0 +1,61 @@ +--- +title: Trouver l'IP locale de son serveur +template: docs +taxonomy: + category: docs +routes: + default: '/finding_the_local_ip' +--- + +Dans le cas d'une installation à la maison, votre serveur devrait typiquement être accessible (depuis son réseau local) avec le domaine `yunohost.local`. Si pour une raison quelconque cela ne fonctionne pas, il vous faut peut-être trouver l'IP locale de votre serveur. + +## Qu'est ce qu'une IP locale ? +L'IP locale d'une machine est utilisée pour y faire référence à l'intérieur d'un réseau local (typiquement le réseau dans une maison) où plusieurs appareils se connectent à un même routeur (votre box internet). Une adresse IP locale ressemble généralement à `192.168.x.y` (ou parfois `10.0.x.y` ou `172.16.x.y`) + +## Comment la trouver ? +L'une de ces astuces devrait permettre de trouver l'IP locale de votre serveur : +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="(Recommandé) Avec AngryIP"] + +Vous pouvez utiliser le logiciel [AngryIP](https://angryip.org/download/) pour y parvenir. Vous devez juste scanner ces plages d'IP dans cet ordre jusqu'à trouver l'IP correspondante à votre serveur : +- `192.168.0.0` -> `192.168.0.255` +- `192.168.1.0` -> `192.168.1.255` +- `192.168.2.0` -> `192.168.255.255` +- `10.0.0.0` -> `10.0.255.255` +- `172.16.0.0` -> `172.31.255.255` + +!!! **Astuces** : +!!! - vous pouvez ordonner par ping comme dans cette capture d'écran, pour voir plus facilement toutes les IP effectivement actives. +!!! - votre serveur devrait être monté comme écoutant sur les ports 80 et 443 +!!! - en cas de doute, tapez directement dans votre navigateur `https://192.168.x.y` pour voir si c'est un YunoHost ou non. + +![](image://angryip.png?class=inline) + +[/ui-tab] +[ui-tab title="Avec votre box internet"] +Utilisez l'interface de votre box internet pour lister les machines connectées. +[/ui-tab] +[ui-tab title="With arp-scan"] +Si vous êtes sous Linux, ouvrez un terminal et tapez `sudo arp-scan --local` pour lister les IP des machines sur le réseau local (ceci fonctionne aussi peut-être sous Windows) ; + +Si la commande `arp-scan` vous affiche beaucoup de machines, vous pouvez vérifier lesquelles sont ouvertes au SSH avec `nmap -p 22 192.168.1.0/24` pour faire du tri (adaptez la plage IP selon votre réseau local) +[/ui-tab] +[ui-tab title="With a screen"] +Branchez un écran sur votre serveur, loggez-vous et tapez `hostname --all-ip-address`. + +Les identifiants par défaut (avant la post-installation!) sont : +- login : root +- mot de passe : yunohost + +(Si vous utilisez une image Armbian brute plutôt que les images YunoHost pré-installées, les identifiants sont root / 1234) + +[/ui-tab] +[/ui-tabs] + +## Je ne trouve toujours pas mon IP locale +Si vous n'êtes pas capable de trouver votre serveur avec les méthodes précédentes, alors peut-être que votre serveur n'a pas démarré correctement. + +- Assurez-vous que le serveur est correctement branché ; +- Si votre serveur a une carte SD, essayez de vous assurer que la connectique n'est pas trop poussiéreuse ; +- Branchez un écran sur le serveur et essayez de le redémarrer pour valider que le serveur démarre bien ; +- Assurez-vous que le câble Ethernet est fonctionnel et correctement branché ; diff --git a/pages/02.administer/10.install/10.finding_the_local_ip/finding_the_local_ip.md b/pages/02.administer/10.install/10.finding_the_local_ip/finding_the_local_ip.md new file mode 100644 index 00000000..c7b608fe --- /dev/null +++ b/pages/02.administer/10.install/10.finding_the_local_ip/finding_the_local_ip.md @@ -0,0 +1,62 @@ +--- +title: Finding your server's local IP +template: docs +taxonomy: + category: docs +routes: + default: '/finding_the_local_ip' +--- + +On an installation at home, your server should typically be accessible using the `yunohost.local` domain. If for any reason this does not work, you may need to find the *local* IP of your server. + +## What is a local IP ? +The local IP is the address used to refer to your server inside the local network (typically your home) where multiple devices are connected to a router (your internet box). The local IP typically looks like `192.168.x.y` (or sometimes `10.0.x.y` or `172.16.x.y`) + +## How to find it ? +Any of these tricks should allow you to find the local IP of your server: +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="(Recommended) With AngryIP"] + +You can use the [AngryIP](https://angryip.org/download/) software to achieve that. You just need to scan these local ip ranges in this order until you find the active IP corresponding to your server: +- `192.168.0.0` -> `192.168.0.255` +- `192.168.1.0` -> `192.168.1.255` +- `192.168.2.0` -> `192.168.255.255` +- `10.0.0.0` -> `10.0.255.255` +- `172.16.0.0` -> `172.31.255.255` + +!!! **Tips**: +!!! - you can order by ping like on this screenshot to easily see effectively-used IP. +!!! - your server should typically be displayed as listening on port 80 and 443 +!!! - in case of doubt, just type `https://192.168.x.y` in your browser to check if it's a YunoHost or not. + +![](image://angryip.png?class=inline) + +[/ui-tab] +[ui-tab title="With your internet router / box"] +Connect to your internet box / router interface to list the machines connected. +[/ui-tab] +[ui-tab title="With arp-scan"] +If you're using Linux, you can open a terminal and use `sudo arp-scan --local` to list the IP on your local network (this may also work in Windows); + +If the `arp-scan` command displays a confusing number of devices, you can check which ones are open to SSH with `nmap -p 22 192.168.1.0/24` to sort them out (adapt the IP range to your local network) +[/ui-tab] +[ui-tab title="With a direct access on the server"] +Plug a screen on your server, log in and type `hostname --all-ip-address`. + +The default credentials (before post-installation!) to log in are: +- login: root +- password: yunohost + +(If you are using a raw Armbian image instead of the pre-installed YunoHost image, the credentials are root / 1234) + +[/ui-tab] +[/ui-tabs] + +## I still can't find my local IP + +If you are unable to find your server using any of the previous tricks, maybe your server did not boot correctly: + +- Make sure that your server is properly plugged in; +- If you're using an SD card, make sure the connector is not too dusty; +- Plug a screen on your server and try to reboot to check that it's properly booting; +- Make sure that your ethernet cable is working and properly plugged in; diff --git a/pages/02.administer/10.install/10.finding_the_local_ip/finding_the_local_ip.ru.md b/pages/02.administer/10.install/10.finding_the_local_ip/finding_the_local_ip.ru.md new file mode 100644 index 00000000..cf90aa61 --- /dev/null +++ b/pages/02.administer/10.install/10.finding_the_local_ip/finding_the_local_ip.ru.md @@ -0,0 +1,62 @@ +--- +title: Поиск локального IP-адреса вашего сервера +template: docs +taxonomy: + category: docs +routes: + default: '/finding_the_local_ip' +--- + +При установке дома ваш сервер, как правило, должен быть доступен с использованием домена `yunohost.local`. Если по какой-либо причине это не сработает, возможно, вам потребуется найти *локальный* IP-адрес вашего сервера. + +## Что такое локальный IP-адрес ? +Локальный IP-адрес - это адрес, используемый для обращения к вашему серверу внутри локальной сети (обычно вашего дома), где несколько устройств подключены к маршрутизатору. Локальный IP-адрес обычно выглядит как `192.168.x.y` (или иногда `10.0.x.y` или `172.16.x.y`). + +## Как его найти ? +Любой из этих приемов должен позволить вам найти локальный IP-адрес вашего сервера: +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="(Рекомендуемый) используя AngryIP"] + +Вы можете использовать [AngryIP](https://angryip.org/download/) для достижения этой цели. Вам просто нужно сканировать эти локальные диапазоны ip-адресов в таком порядке, пока вы не найдете активный IP-адрес, соответствующий вашему серверу: +- `192.168.0.0` -> `192.168.0.255` +- `192.168.1.0` -> `192.168.1.255` +- `192.168.2.0` -> `192.168.255.255` +- `10.0.0.0` -> `10.0.255.255` +- `172.16.0.0` -> `172.31.255.255` + +!!! **Советы**: +!!! - вы можете сделать отсортировать по ping, как показано на этом скриншоте, чтобы легко увидеть используемый IP. +!!! - обычно ваш сервер должен отображаться как прослушивающий на портах 80 и 443 +!!! - в случае сомнений просто введите `https://192.168.x.y " в вашем браузере, чтобы проверить, является ли это YunoHost или нет. + +![](image://angryip.png?class=inline) + +[/ui-tab] +[ui-tab title="С вашим интернет-маршрутизатором"] +Подключитесь к интерфейсу вашего маршрутизатора, чтобы просмотреть список подключенных компьютеров. +[/ui-tab] +[ui-tab title="С помощью arp-scan"] +Если вы используете Linux, вы можете открыть терминал и использовать `sudo arp-scan --local`, чтобы вывести список IP-адресов в вашей локальной сети (это также может работать в Windows).; + +Если команда `arp-scan` отображает непонятное количество устройств, вы можете проверить, какие из них открыты для SSH с помощью `nmap -p 22 192.168.1.0/24`, чтобы разобраться в них (адаптируйте диапазон IP к вашей локальной сети). +[/ui-tab] +[ui-tab title="С прямым доступом к серверу"] +Подключите экран к своему серверу, войдите в систему и введите `hostname --all-ip-address`. + +Учетные данные по умолчанию (перед постустановкой!) для входа в систему: +- логин: root +- пароль: yunohost + +(Если вы используете необработанный образ Armbian вместо предустановленного образа YunoHost, учетные данные - root / 1234) + +[/ui-tab] +[/ui-tabs] + +## Я все еще не могу найти свой локальный IP-адрес + +Если вы не можете найти свой сервер, используя какой-либо из предыдущих приемов, возможно, ваш сервер загрузился неправильно: + +- Убедитесь, что ваш сервер правильно подключен; +- Если вы используете SD-карту, убедитесь, что разъем не слишком запылился; +- Подключите экран к вашему серверу и попробуйте перезагрузиться, чтобы проверить, правильно ли он загружается; +- Убедитесь, что ваш кабель Ethernet исправен и правильно подключен; \ No newline at end of file diff --git a/pages/02.administer/10.install/15.isp_box_config/isp_box_config.de.md b/pages/02.administer/10.install/15.isp_box_config/isp_box_config.de.md new file mode 100644 index 00000000..abe7f8b1 --- /dev/null +++ b/pages/02.administer/10.install/15.isp_box_config/isp_box_config.de.md @@ -0,0 +1,59 @@ +--- +title: Portweiterleitung Konfigurieren +template: docs +taxonomy: + category: docs +routes: + default: '/isp_box_config' + aliases: + - '/port_forwarding' +--- + +Wenn Sie zu Hause selbst hosten und kein VPN nutzen, müssen Sie die Ports Ihres Routers umleiten ("Internet box"). Das folgende Schema versucht, die Rolle der Portweiterleitung beim Einrichten eines Servers zu Hause kurz zu erklären. + +[figure caption="Abbildung der Wichtigkeit von Port-Weiterleitung"]![](image://portForwarding_en.png)[/figure] + +### 0. Offene Ports diagnostizieren + +Sobald die Umleitungen konfiguriert sind, können Sie mit dem in YunoHost 3.8 eingeführten Diagnosewerkzeug überprüfen, ob +die Ports korrekt freigegeben sind. + +### 1. Auf die Administrationsoberfläche Ihrer Box/Ihres Routers zugreifen + +Ihre Box/Router-Administrationsoberfläche ist in der Regel erreichbar über [http://192.168.0.1](http://192.168.0.1) oder [http://192.168.1.1](http://192.168.1.1). Als Nächstes müssen Sie sich möglicherweise mit den von Ihrem Internetdienstanbieter (ISP) bereitgestellten Anmeldedaten authentifizieren. + +### 2. Die lokale IP Ihres Servers finden + +Identifizieren Sie die lokale IP Ihres Servers, entweder : +- von Ihrer Box/Router-Schnittstelle, die möglicherweise angeschlossene Geräte auflistet +- über die YunoHost-Schnittstelle, Abschnitt "Internetkonnektivität", dann auf "Details" im IPv4-Bericht klicken. +- von der Befehlszeile Ihres Servers aus, indem Sie `hostname -I` ausführen + +Eine lokale IP-Adresse sieht typischerweise so aus:`192.168.xx.yy`, oder `10.0.xx.yy`. + +Die lokale IP-Adresse muss statisch sein, damit die Port-Weiterleitungen, die Sie im nächsten Schritt konfigurieren werden, Ihren Server immer erreichen. Sie sollten in Ihren Rechner/Router gehen und sicherstellen, dass die lokale IP-Adresse Ihres Servers statisch und nicht dynamisch ist. + +### 3. Ports weiterleiten + +Suchen Sie in der Verwaltungsoberfläche Ihres Routers nach etwas wie "Router-Konfiguration" oder "Port-Weiterleitung". Die Benennung unterscheidet sich bei den verschiedenen Arten von Boxen. + +Das Öffnen der unten aufgeführten Ports ist notwendig, damit die verschiedenen in YunoHost verfügbaren Dienste funktionieren. Für jeden von ihnen wird die 'TCP'-Weiterleitung benötigt. Einige Schnittstellen beziehen sich auf 'externe' und 'interne' Ports : diese sind in unserem Fall gleich. + +* Web: 80 (HTTP), 443 (HTTPS) +* [SSH](/ssh): 22 +* [XMPP](/XMPP): 5222 (clients), 5269 (servers) +* [Email](/email): 25, 587 (SMTP), 993 (IMAP) + +Wenn Sie sowohl ein Modem als auch einen Router verwenden, dann müssen Sie Folgendes tun: +1. zuerst auf dem Modem (der Box, die dem Internet am nächsten ist) Regeln erstellen, um die oben genannten Ports an Ihren Router weiterzuleiten; +2. dann auf dem Router (der Box zwischen dem Modem und Ihren Geräten) Regeln erstellen, um die oben genannten Ports an die statische IP-Adresse für Ihren Server weiterzuleiten. + +! [fa=exclamation-triangle /] Einige ISPs blockieren standardmäßig den Port 25 (Mail-SMTP), um Spam zu bekämpfen. Andere (seltener) erlauben keine freie Nutzung der Ports 80/443. Abhängig von Ihrem ISP kann es möglich sein, diese Ports in der Schnittstelle zu öffnen... Siehe [diese Seite](/isp) für weitere Informationen. + +## Automatische Weiterleitung / UPnP + +Eine Technologie namens UPnP ist auf einigen Internet-Boxen / Routern verfügbar und erlaubt Ports automatisch an den Rechner weiterzuleiten, der sie benötigt. Ist UPnP in Ihrem lokalen Netzwerk aktiviert, so sollte die Ausführung dieses Befehls den Port automatisch öffnen: + +```bash +sudo yunohost firewall reload +``` diff --git a/pages/02.administer/10.install/15.isp_box_config/isp_box_config.es.md b/pages/02.administer/10.install/15.isp_box_config/isp_box_config.es.md new file mode 100644 index 00000000..e8fc229b --- /dev/null +++ b/pages/02.administer/10.install/15.isp_box_config/isp_box_config.es.md @@ -0,0 +1,61 @@ +--- +title: Configurar la redirección de los puertos +template: docs +taxonomy: + category: docs +routes: + default: '/isp_box_config' + aliases: + - '/port_forwarding' +--- + +Si te estás auto-alojando en casa y sin VPN, tienes que redirigirse los puertos de tu router (caja/box). + +El esquema aquí abajo intenta explicar brevemente el rol de la redirección de los puertos durante la instalación de un servidor en tu casa. + +[figure caption="Ilustración de la importancia del redirección de puertos"]![](image://portForwarding_en.png)[/figure] + +[Esta página](https://www.testdevelocidad.es/configuraciones/abrir-correctamente-los-puertos-router/) también propone explicaciones detalladas sobre el funcionamiento de los puertos, y las etapas de configuración para un router genérico. + +### 0. Diagnosticar los puertos abiertos + +Una vez que tienes la redirección configurada, deberías poder comprobar que los puertos están bien abiertos con esta herramienta : + +Comprobar la redirección de los puertos + +### 1. Acceder a la interfaz de administración de tu router/caja/box + +En general la interfaz de administración está accesible desde http://192.168.0.1 o http://192.168.1.1. +Luego, es posible que tengas que autenticarte con los ID provechos pour tu proveedor de acceso a Internet. + +### 2. Descubrir la IP local del servidor + +Identifica cuál es la IP local de tu servidor, o sea : +- desde la interfaz de tu router/caja/box, donde tal vez estén listados los dipositivos conectados a la red local +- desde la webadmin de YunoHost, en 'Estado del servidor', 'Red' +- desde la línea de comandos en tu servidor, por ejemplo con `ip a | grep "scope global" | awk '{print $2}'` + +En general una dirección IP local se parece a `192.168.xx.yy`, o `10.0.xx.yy`. + +### 3. Redirigir los puertos + +En la interfaz de administración de tu router/caja/box, tienes que encontrar una categoría que debe llamarse 'Configuración del router', o 'Redirección de puertos'. El nombre difiere según el tipo o la marca del router / de la caja Internet... + +Luego tienes que redirigir cada uno de los puertos listados a continuación hacia la IP local de tu router para que los varios servicios de YunoHost funcionen. Para cada uno de ellos, una redirección 'TCP' es necesaria. En algunas interfaces, tal vez encontrarás referencias a un puerto 'externo' y un puerto 'interno' : en nuestro caso, se trata del mismo número de puerto, que sea interno o externo. + +* Web: 80 (HTTP), 443 (HTTPS) +* [SSH](/ssh): 22 +* [XMPP](/XMPP): 5222 (clients), 5269 (servers) +* [Email](/email): 25, 587 (SMTP), 993 (IMAP) + +! [fa=exclamation-triangle /] Algunos proveedores de acceso a Internet bloquean el puerto 25 (mail SMTP) por defecto para luchar con el spam. Otros (más escasos) no permiten utilizar libremente los puertos 80/443. Dependiendo de tu proveedor, puede ser posible de abrir estos puertos en la interfaz... Ver [esta página](/isp) por más informaciones. + +## Redirección automática / UPnP + +Una tecnología llamada UPnP está disponible en algunos routers/cajas/box y permite redirigir automáticamente puertos hacia una máquina que lo pide. Si UPnP está activado en tu casa, ejecutar este comando debería automáticamente redirigir los puertos correctos : + + +```bash +sudo yunohost firewall reload +``` + diff --git a/pages/02.administer/10.install/15.isp_box_config/isp_box_config.fr.md b/pages/02.administer/10.install/15.isp_box_config/isp_box_config.fr.md new file mode 100644 index 00000000..4ab88031 --- /dev/null +++ b/pages/02.administer/10.install/15.isp_box_config/isp_box_config.fr.md @@ -0,0 +1,60 @@ +--- +title: Configurer la redirection des ports +template: docs +taxonomy: + category: docs +routes: + default: '/isp_box_config' + aliases: + - '/port_forwarding' +--- + +Si vous vous auto-hébergez à la maison et sans VPN, il vous faut rediriger les ports de votre routeur ("machin-box"). Le schéma ci-dessous tente d'expliquer brièvement le rôle de la redirection des ports lors de la mise en place d'un serveur à la maison. + +[figure caption="Illustration de l'importance de la redirection des ports"]![](image://portForwarding_fr.png)[/figure] + +[Cette page](https://craym.eu/tutoriels/utilitaires/ouvrir_les_ports_de_sa_box.html) propose également des explications détaillées sur le fonctionnement des ports, et les étapes de configuration pour différents routeurs. + +### 1. Diagnostiquer les ports ouverts + +Une fois les redirections configurées, l'outil de diagnostic introduit dans +YunoHost 3.8 vous permettra de vérifier si les ports sont correctement exposés. + +### 2. Accéder à l'interface d'administration de votre box/routeur + +L'interface d'administration est généralement accessible via http://192.168.0.1 ou http://192.168.1.1. +Ensuite, il vous faudra peut-être vous authentifier avec les identifiants +fournis par votre fournisseur d'accès à Internet (FAI). + +### 3. Trouver l'IP locale de votre serveur + +Identifiez quelle est l'IP locale de votre serveur, soit : +- depuis l'interface de votre routeur/box, qui liste peut-être les dispositifs + connectés; +- depuis la webadmin de YunoHost, dans 'Diagnostic', section 'Connectivité Internet', cliquer sur 'Détails' à côté de la ligne sur IPv4. +- depuis la webadmin de YunoHost, dans 'État du serveur', 'Réseau'; + +Une adresse IP locale ressemble généralement à `192.168.xx.yy`, ou `10.0.xx.yy`. + +### 4. Rediriger les ports + +Dans l'interface d'administration de votre box/routeur, il vous faut trouver +une catégorie comme 'Configuration du routeur', ou 'Redirections de ports'. Le +nom diffère suivant le type / marque de la box... + +Il vous faut ensuite rediriger chacun des ports listés ci-dessous vers l'IP locale de votre serveur pour que les différents services de YunoHost fonctionnent. Pour chacun d'eux, une redirection 'TCP' est nécessaire. Certaines interfaces font référence à un port « externe » et un port « interne » : dans notre cas il s'agit du même. + +* Web: 80 (HTTP), 443 (HTTPS) +* [SSH](/ssh): 22 +* [XMPP](/XMPP): 5222 (clients), 5269 (serveurs) +* [Email](/email): 25, 587 (SMTP), 993 (IMAP) + +! [fa=exclamation-triangle /] Certains fournisseurs d'accès à Internet bloquent le port 25 (mail SMTP) par défaut pour combattre le spam. D'autres (plus rares) ne permettent pas d'utiliser librement les ports 80/443. En fonction de votre FAI, il peut être possible d'ouvrir ces ports dans l'interface... Voir [cette page](/isp) pour plus d'informations. + +## Redirection automatique / UPnP + +Une technologie nommée UPnP est disponible sur certains routeurs/box et permet de rediriger automatiquement des ports vers une machine qui le demande. Si UPnP est activé chez vous, exécuter cette commande devrait automatiquement rediriger les bons ports : + +```bash +sudo yunohost firewall reload +``` diff --git a/pages/02.administer/10.install/15.isp_box_config/isp_box_config.md b/pages/02.administer/10.install/15.isp_box_config/isp_box_config.md new file mode 100644 index 00000000..9b64dfd7 --- /dev/null +++ b/pages/02.administer/10.install/15.isp_box_config/isp_box_config.md @@ -0,0 +1,60 @@ +--- +title: Configure port-forwarding +template: docs +taxonomy: + category: docs +routes: + default: '/isp_box_config' + aliases: + - '/port_forwarding' +--- + +If you are self-hosting at home and without a VPN, you need to forward ports on your home router ("Internet box"). The sketch below tries to briefly summarize the role and necessity of port forwarding when setting up a server at home. + +[figure caption="Illustration of the importance of port-forwarding"]![](image://portForwarding_en.png)[/figure] + +### 0. Diagnose ports opened + +The new diagnosis tool introduced in 3.8 can be used to diagnose that ports are +correctly exposed. + +### 1. Access your box/router administration interface + +Your box/router admin interface is usually reachable via [http://192.168.0.1](http://192.168.0.1) or [http://192.168.1.1](http://192.168.1.1). Then, you will probably need to authenticate yourself the credentials given by your internet server provider. + +### 2. Find the local IP of your server + +Identify what is thei *local* IP of your server, either : +- from your box/router interface, which might list devices connected +- from the YunoHost webadmin, in 'Diagnosis', section 'Internet connectivity', click on 'Details' on the IPv4 report. +- from the command line in your server, by running `hostname -I` + +A local IP address typically looks like `192.168.xx.yy`, or `10.0.xx.yy`. + +The local IP address needs to be static, so that the port forwards that you are going to configure in the next step will always reach your server. You should go into your box/router and make sure that the local IP address of your server is static instead of dynamic. + +### 3. Forwarding ports + +In your router admin interface, look for something like 'router configuration' or 'port forwarding'. The naming differs among the various kinds of boxes. + +Opening the ports listed below is necessary for the various services available in YunoHost to work. For each of them, the 'TCP' forwarding is needed. Some interfaces refer to 'external' and 'internal' ports : these are the same in our case. + +* Web: 80 (HTTP), 443 (HTTPS) +* [SSH](/ssh): 22 +* [XMPP](/XMPP): 5222 (clients), 5269 (servers) +* [Email](/email): 25, 587 (SMTP), 993 (IMAP) + +If you use both a modem and a router, then you need to do the following: +1. first on the modem (the box closest to the internet) create rules to forward the above ports to your router; +2. then on the router (the box between the modem and your devices) create rules to forward the above ports to the static IP address for your server. + +! [fa=exclamation-triangle /] Some internet service providers block port 25 (mail SMTP) by default to fight spam. Some other ISP don't allow to use port 80/443 (web) freely, though it's less likely. Depending on the ISP, it might be possible to open them in the admin interface... Check [this page](/isp) for more info. + +## Automatic port forwarding / UPnP + +A technology called UPnP is available on some internet boxes / routers and allows to automatically forward ports by the machine who needs them. If UPnP is enabled in your local network, then running this command should automatically open the port for you : + +```bash +sudo yunohost firewall reload +``` + diff --git a/pages/02.administer/10.install/15.isp_box_config/isp_box_config.ru.md b/pages/02.administer/10.install/15.isp_box_config/isp_box_config.ru.md new file mode 100644 index 00000000..10390dcb --- /dev/null +++ b/pages/02.administer/10.install/15.isp_box_config/isp_box_config.ru.md @@ -0,0 +1,59 @@ +--- +title: Настройка переадресации портов +template: docs +taxonomy: + category: docs +routes: + default: '/isp_box_config' + aliases: + - '/port_forwarding' +--- + +Если вы самостоятельно размещаетесь дома и у вас нет VPN, вам необходимо перенаправить порты на вашем домашнем маршрутизаторе. В приведенном ниже наброске предпринята попытка кратко описать роль и необходимость переадресации портов при настройке сервера дома. + +[figure caption="Иллюстрация важности переадресации портов"]![](image://portForwarding_en.png)[/figure] + +### 0. Диагностировать открытые порты + +Новый инструмент диагностики, представленный в версии 3.8, можно использовать для диагностики правильности открытия портов. + +### 1. Получите доступ к интерфейсу администрирования вашего маршрутизатора + +Интерфейс администратора вашего маршрутизатора обычно доступен через [http://192.168.0.1](http://192.168.0.1) или [http://192.168.1.1](http://192.168.1.1). Затем вам, вероятно, потребуется ввести логин и пароль к панели роутера, предоставленных вашим провайдером. (P.S. возможно данные указаны на задней стороне роутера) + +### 2. Найдите локальный IP-адрес вашего сервера + +Определите, каков *локальный* IP вашего сервера, либо : +- из вашего интерфейса box / router, в котором может быть список подключенных устройств +- в веб-администраторе YunoHost, в разделе "Диагностика", "Подключение к Интернету", нажмите "Подробности" в отчете IPv4. +- из командной строки на вашем сервере, запустив `hostname -I` + +Локальный IP-адрес обычно выглядит как `192.168.xx.yy` или `10.0.xx.yy` + +Локальный IP-адрес должен быть статичным, чтобы переадресация портов, которую вы собираетесь настроить на следующем шаге, всегда достигала вашего сервера. Вы должны зайти в свой маршрутизатор и убедиться, что локальный IP-адрес вашего сервера является статическим, а не динамическим. + +### 3. Переадресация портов + +В интерфейсе администратора вашего маршрутизатора найдите что-то вроде "конфигурация маршрутизатора" или "переадресация портов". Названия различных типов коробок различаются. + +Открытие перечисленных ниже портов необходимо для работы различных сервисов, доступных в YunoHost. Для каждого из них необходима переадресация "TCP". Некоторые интерфейсы относятся к "внешним" и "внутренним" портам: в нашем случае это одно и то же. + +* Веб: 80 (HTTP), 443 (HTTPS) +* [SSH](/ssh): 22 +* [XMPP](/XMPP): 5222 (клиенты), 5269 (серверы) +* [Почтовые](/email): 25, 587 (SMTP), 993 (IMAP) + +Если вы используете и модем, и маршрутизатор, то вам необходимо выполнить следующее: +1. сначала на модеме (поле, расположенном ближе всего к Интернету) создайте правила для перенаправления вышеуказанных портов на ваш маршрутизатор; +2. затем на маршрутизаторе (поле между модемом и вашими устройствами) создайте правила для пересылки вышеуказанных портов на статический IP-адрес вашего сервера. + +! [fa=exclamation-triangle /] Некоторые интернет-провайдеры по умолчанию блокируют порт 25 (почтовый SMTP) для борьбы со спамом. Некоторые другие интернет-провайдеры не позволяют свободно использовать порт 80/443 (веб), хотя это менее вероятно. В зависимости от провайдера, возможно, удастся открыть их в интерфейсе администратора... Проверьте [this page](/isp) для получения дополнительной информации. + +## Автоматическая переадресация портов / UPnP + +Технология, называемая UPnP, доступна на некоторых интернет-блоках / маршрутизаторах и позволяет автоматически перенаправлять порты тому компьютеру, который в них нуждается. Если UPnP включен в вашей локальной сети, то выполнение этой команды должно автоматически открыть порт для вас : + +```bash +sudo yunohost firewall reload +``` + diff --git a/pages/02.administer/10.install/20.dns_config/dns_config.de.md b/pages/02.administer/10.install/20.dns_config/dns_config.de.md new file mode 100644 index 00000000..75f8271b --- /dev/null +++ b/pages/02.administer/10.install/20.dns_config/dns_config.de.md @@ -0,0 +1,113 @@ +--- +title: Konfiguration der DNS-Zone +template: docs +taxonomy: + category: docs +routes: + default: '/dns_config' +--- + +Das Domain Name System (DNS) ist einer der wichtigsten Dienste in vielen IP-basierten Netzwerken. +Hauptsächlich wird das DNS zur Umsetzung von Domainnamen in IP-Adressen benutzt. Das DNS bietet somit eine Vereinfachung, weil Menschen sich Namen weitaus besser merken können als Zahlenketten. Damit +Ihr Server für andere leicht erreichbar ist und bestimmte Dienste, wie z. B. E-Mail, richtig funktionieren, ist es notwendig, die DNS-Zone Ihrer Domain zu konfigurieren. + +Wenn Sie eine [automatische Domain](/dns_nohost_me) verwenden, die vom YunoHost-Projekt bereitgestellt wird, +sollte die Konfiguration automatisch erfolgen. Wenn Sie Ihren eigenen Domainname +(z. B. von einem Registrar erworben), müssen Sie manuell Ihre +Domain über die Schnittstelle Ihres Registrars konfigurieren. + +## Empfohlene DNS-Konfiguration +_N.B. : Die Beispiele hier verwenden den Text: `your.domain.tld`, der durch Ihre eigene Domain (z. B.`www.yunohost.org`) zu ersetzen ist._ + +YunoHost bietet eine empfohlene DNS-Konfiguration, die auf zwei Arten zugänglich ist : +- mit dem Webadmin, unter Domänen > your.domain.tld > DNS-Konfiguration ; +- oder auf der Kommandozeile `yunohost domain dns-conf your.domain.tld` + +Für einige spezielle Anforderungen oder Installationen und wenn Sie wissen, +was Sie tun, müssen Sie diese Empfehlung möglicherweise ändern oder +andere Datensätze hinzufügen (z. B. zur Behandlung von Subdomains). + +Die empfohlene Konfiguration sieht typischerweise so aus: + +```bash +# +# Basis IPv4/IPv6 Einträge +# +@ 3600 IN A 111.222.33.44 +* 3600 IN A 111.222.33.44 + +# (Si votre serveur supporte l'IPv6, il a des enregistrements AAAA) +@ 3600 IN AAAA 2222:444:8888:3333:bbbb:5555:3333:1111 +* 3600 IN AAAA 2222:444:8888:3333:bbbb:5555:3333:1111 + +# +# XMPP +# +_xmpp-client._tcp 3600 IN SRV 0 5 5222 votre.domaine.tld. +_xmpp-server._tcp 3600 IN SRV 0 5 5269 votre.domaine.tld. +muc 3600 IN CNAME @ +pubsub 3600 IN CNAME @ +vjud 3600 IN CNAME @ +xmpp-upload 3600 IN CNAME @ + +# +# Mail (MX, SPF, DKIM et DMARC) +# +@ 3600 IN MX 10 votre.domaine.tld. +@ 3600 IN TXT "v=spf1 a mx ip4:111.222.33.44 -all" +mail._domainkey 3600 IN TXT "v=DKIM1; k=rsa; p=uneGrannnnndeClef" +_dmarc 3600 IN TXT "v=DMARC1; p=none" +``` + +Aber es ist vielleicht leichter zu verstehen, wenn es auf folgende Weise +dargestellt wird: + +| Type | Nom | Valeur | +| :-----: | :--------------------: | :----------------------------------------------------: | +| **A** | **@** | `111.222.333.444` (deine IPv4) | +| A | * | `111.222.333.444` (deine IPv4) | +| AAAA | @ | `2222:444:8888:3333:bbbb:5555:3333:1111` (deine IPv6) | +| AAAA | * | `2222:444:8888:3333:bbbb:5555:3333:1111` (deine IPv6) | +| **SRV** | **_xmpp-client._tcp** | `0 5 5222 deine.domaine.tld.` | +| **SRV** | **_xmpp-server._tcp** | `0 5 5269 deine.domaine.tld.` | +| CNAME | muc | `@` | +| CNAME | pubsub | `@` | +| CNAME | vjud | `@` | +| CNAME | xmpp-upload | `@` | +| **MX** | **@** | `deine.domaine.tld.` (und prioriät: 10) | +| TXT | @ | `"v=spf1 a mx ip4:111.222.33.44 -all"` | +| TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=irgendeingrooßerSchlüssel"` | +| TXT | _dmarc | `"v=DMARC1; p=none"` | + +#### Einige Hinweise zu dieser Tabelle + +- Nicht alle dieser Aufzeichnungen sind notwendig. Für eine Minimalinstallation werden nur die fett gedruckten Datensätze benötigt; +- Der Punkt am Ende `your.domain.tld.` ist wichtig ;) ; +- `@` entspricht `your.domain.tld`, und z. B.. `muc` entspricht `muc.your.domain.tld` ; +- Die hier gezeigten Werte sind nur Beispiele! Beziehen Sie sich auf die generierte Konfiguration, um herauszufinden, welche Werte zu verwenden sind; +- Wir empfehlen eine [TTL](https://de.wikipedia.org/wiki/Time_to_Live#Domain_Name_System) von 3600 (1 Stunde). Es ist aber auch möglich einen anderen Wert zu verwenden, wenn Sie wissen, was Sie tun ; +- Legen Sie keinen IPv6-Eintrag an, wenn Sie nicht sicher sind, daß IPv6 auf Ihrem Server funktioniert! Sie werden Probleme mit Let's Encrypt haben, wenn dies nicht der Fall ist. +- If you're using the domain provider Namecheap the SRV DNS entries are formatted as **Service**: _xmpp-client **Protocol**: _tcp **Priority**: 0 **Weight**: 5 **Port**: 5222 **Target**: your.domain.tld + +### Reverse DNS + +Wenn Ihr ISP oder Host dies zulässt, empfehlen wir Ihnen, eine + [Reverse-DNS-Konfiguration](https://de.wikipedia.org/wiki/Reverse_DNS) +für Ihre öffentlichen IPv4- und/oder IPv6-Adressen. Dadurch wird verhindert, dass Sie als Spammer von den Anti-Spam-Filtersystemen markiert werden. + +**N.B. : Die Reverse-DNS-Konfiguration erfolgt bei Ihrem Internet Service Provider bzw. VPS-Host. Es betrifft *nicht* den Registrar Ihres Domainnamens.** + +Das heißt, wenn Ihre öffentliche IPv4-Adresse `111.222.333.444`ist und Ihr +Domänename `domain.tld`ist, sollten Sie mit dem Befehl +`nslookup` das folgende Ergebnis erhalten : + +```shell +$ nslookup 111.222.333.444 +444.333.222.111.in-addr.arpa name = domain.tld. +``` + +Das Diagnosesystem in der Administrationsoberfläche tut dies automatisch (im Abschnitt E-Mail) + +### Dynamische IP + +Wenn sich Ihre öffentliche IP-Adresse ständig ändert, befolgen Sie dieses [Tutorial](/dns_dynamicip). diff --git a/pages/02.administer/10.install/20.dns_config/dns_config.es.md b/pages/02.administer/10.install/20.dns_config/dns_config.es.md new file mode 100644 index 00000000..913d858f --- /dev/null +++ b/pages/02.administer/10.install/20.dns_config/dns_config.es.md @@ -0,0 +1,90 @@ +--- +title: Configuración de la zona DNS +template: docs +taxonomy: + category: docs +routes: + default: '/dns_config' + aliases: + - '/dns' +--- + +DNS (sistema de nombre de dominios) es un elemento esencial de Internet que permite convertir direcciones comprensibles por seres humanos (los nombres de dominio) en direcciones comprensibles por la máquina (los IPs). Para que tu servidor esté fácilemente por otros seres humanos, y para que servicios como el mail funcionen correctamente, es preciso configurar la zona DNS de tu dominio. + +Si utilizas un [dominio automático](/dns_nohost_me) provecho por el Proyecto YunoHost, la configuración debería ser automática. Si quieres utilizar tu propio nombre de dominio (comprado a un registrar), hay que configurar manualmente tu proprio nombre de dominio vía la interfaz de tu registrar. + + +## Configuración DNS recomendada +_Nota: los ejemplos utilizan el marcador `tu.dominio.tld`, debe ser reemplazado por su propio dominio, como `www.yunohost.org`._ + +YunoHost provee una configuración DNS recomendada, accesible vía : +- la webadmin, en Dominios > tu.dominio.tld > Configuración DNS ; +- o la linea de comando, `yunohost domain dns-conf tu.dominio.tld` + +Para algunas necesidades o instalaciones particulares, y si sabes lo que estás haciendo, a lo mejor tendrás que modificar esa recomendación o añadir otros registros (e.g. para administrar subdominios). + +La configuración recomendada típicamente se parece a : + +```bash +# +# Registros IPv4/IPv6 básicos +# +@ 3600 IN A 111.222.33.44 +* 3600 IN A 111.222.33.44 + +# (Si tu servidor es compatibles con el IPv6, habrá registros AAAA) +@ 3600 IN AAAA 2222:444:8888:3333:bbbb:5555:3333:1111 +* 3600 IN AAAA 2222:444:8888:3333:bbbb:5555:3333:1111 + +# +# XMPP +# +_xmpp-client._tcp 3600 IN SRV 0 5 5222 tu.dominio.tld. +_xmpp-server._tcp 3600 IN SRV 0 5 5269 tu.dominio.tld. +muc 3600 IN CNAME @ +pubsub 3600 IN CNAME @ +vjud 3600 IN CNAME @ +xmpp-upload 3600 IN CNAME @ + +# +# Mail (MX, SPF, DKIM et DMARC) +# +@ 3600 IN MX 10 votre.domaine.tld. +@ 3600 IN TXT "v=spf1 a mx -all" +mail._domainkey 3600 IN TXT "v=DKIM1; k=rsa; p=uneGrannnnndeClef" +_dmarc 3600 IN TXT "v=DMARC1; p=none" +``` + +Pero puede ser un poco más fácil entenderla viéndola de esta manera : + + +| Tipo | Nombre | Valor | +| :-----: | :--------------------: | :----------------------------------------------------: | +| **A** | **@** | `111.222.333.444` (tu IPv4) | +| A | * | `111.222.333.444` (tu IPv4) | +| AAAA | @ | `2222:444:8888:3333:bbbb:5555:3333:1111` (tu IPv6) | +| AAAA | * | `2222:444:8888:3333:bbbb:5555:3333:1111` (tu IPv6) | +| **SRV** | **_xmpp-client._tcp** | `0 5 5222 tu.dominio.tld.` | +| **SRV** | **_xmpp-server._tcp** | `0 5 5269 tu.dominio.tld.` | +| CNAME | muc | `@` | +| CNAME | pubsub | `@` | +| CNAME | vjud | `@` | +| CNAME | xmpp-upload | `@` | +| **MX** | **@** | `tu.dominio.tld.` (y prioridad: 10) | +| TXT | @ | `"v=spf1 a mx -all"` | +| TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=uneGrannnndeClef"` | +| TXT | _dmarc | `"v=DMARC1; p=none"` | + +#### Algunas notas a propósito de esta tabla : + +- Todos los registros no son necesarios. Para una instalación mínima, solos los registros en negrita son necesarios. +- El punto al final de `tu.dominio.tld.` es importante ;) ; +- `@` corresponde a `tu.dominio.tld`, y por ejemplo `muc`corresponde a `muc.tu.dominio.tld` ; +- ¡ Los valores mostrados son ejemplos ! Refiérete a la configuración generada por tu servidor qué valores utilizar. +- Recomendamos un [TTL](https://en.wikipedia.org/wiki/Time_to_live) de 3600 (1 hora). Pero puedes utilizar otro valor si sabes lo que estás haciendo ; +- ¡ No pongas registros IPv6 si no estás seguro que el IPv6 funcione en tu servidor ! Tendrás problemas con Let's Encrypt si no es el caso :-) +- If you're using the domain provider Namecheap the SRV DNS entries are formatted as **Service**: _xmpp-client **Protocol**: _tcp **Priority**: 0 **Weight**: 5 **Port**: 5222 **Target**: your.domain.tld + +### IP Dinámica + +Si la dirección IP pública cambia, sigue este [tutorial](/dns_dynamicip). diff --git a/pages/02.administer/10.install/20.dns_config/dns_config.fr.md b/pages/02.administer/10.install/20.dns_config/dns_config.fr.md new file mode 100644 index 00000000..1b501acc --- /dev/null +++ b/pages/02.administer/10.install/20.dns_config/dns_config.fr.md @@ -0,0 +1,120 @@ +--- +title: Configuration de la zone DNS +template: docs +taxonomy: + category: docs +routes: + default: '/dns_config' + aliases: + - '/dns' +--- + +DNS (système de nom de domaine) est un élément essentiel d'Internet qui permet +de convertir des adresses compréhensibles par les êtres humains (les noms de +domaines) en adresses compréhensibles par la machine (les adresses IP). Pour que +votre serveur soit facilement accessible par d'autres êtres humains, et pour +que certains services comme le mail fonctionnent correctement, il est nécessaire +de configurer la zone DNS de votre domaine. + +Si vous utilisez un [domaine automatique](/dns_nohost_me) fourni par le Projet YunoHost, +la configuration devrait être faite automatiquement. Si vous utilisez votre propre nom de domaine +(e.g. acheté chez un registrar), il vous faut configurer manuellement votre +domaine via l'interface de votre registrar. + +## Configuration DNS recommandée +_NB : les exemples utilisent ici le texte `votre.domaine.tld`, à remplacer par votre propre domaine (par exemple `www.yunohost.org`)._ + +YunoHost fournit une configuration DNS recommandée, accessible via : +- la webadmin, dans Domaines > votre.domain.tld > Configuration DNS ; +- ou la ligne de commande, `yunohost domain dns-conf votre.domaine.tld` + +Pour certains besoins ou installations particulières, et si vous savez ce que +vous faites, il vous faudra peut-être modifier cette recommandation ou ajouter +d'autres enregistrements (e.g. pour gérer des sous-domaines). + +La configuration recommandée ressemble typiquement à : + +```bash +# +# Enregistrements IPv4/IPv6 basiques +# +@ 3600 IN A 111.222.33.44 +* 3600 IN A 111.222.33.44 + +# (Si votre serveur supporte l'IPv6, il a des enregistrements AAAA) +@ 3600 IN AAAA 2222:444:8888:3333:bbbb:5555:3333:1111 +* 3600 IN AAAA 2222:444:8888:3333:bbbb:5555:3333:1111 + +# +# XMPP +# +_xmpp-client._tcp 3600 IN SRV 0 5 5222 votre.domaine.tld. +_xmpp-server._tcp 3600 IN SRV 0 5 5269 votre.domaine.tld. +muc 3600 IN CNAME @ +pubsub 3600 IN CNAME @ +vjud 3600 IN CNAME @ +xmpp-upload 3600 IN CNAME @ + +# +# Mail (MX, SPF, DKIM et DMARC) +# +@ 3600 IN MX 10 votre.domaine.tld. +@ 3600 IN TXT "v=spf1 a mx -all" +mail._domainkey 3600 IN TXT "v=DKIM1; k=rsa; p=uneGrannnnndeClef" +_dmarc 3600 IN TXT "v=DMARC1; p=none" +``` + +Mais il est peut-être plus facile de la comprendre affichée de la façon +suivante : + +| Type | Nom | Valeur | +| :-----: | :--------------------: | :----------------------------------------------------: | +| **A** | **@** | `111.222.333.444` (votre IPv4) | +| A | * | `111.222.333.444` (votre IPv4) | +| AAAA | @ | `2222:444:8888:3333:bbbb:5555:3333:1111` (votre IPv6) | +| AAAA | * | `2222:444:8888:3333:bbbb:5555:3333:1111` (votre IPv6) | +| **SRV** | **_xmpp-client._tcp** | `0 5 5222 votre.domaine.tld.` | +| **SRV** | **_xmpp-server._tcp** | `0 5 5269 votre.domaine.tld.` | +| CNAME | muc | `@` | +| CNAME | pubsub | `@` | +| CNAME | vjud | `@` | +| CNAME | xmpp-upload | `@` | +| **MX** | **@** | `votre.domaine.tld.` (et priorité: 10) | +| TXT | @ | `"v=spf1 a mx -all"` | +| TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=uneGrannnndeClef"` | +| TXT | _dmarc | `"v=DMARC1; p=none"` | + +#### Quelques notes à propos de cette table + +- Tous ces enregistrements ne sont pas nécessaires. Pour une installation minimale, seuls les enregistrements en gras sont nécessaires ; +- Le point à la fin de `votre.domaine.tld.` est important ;) ; +- `@` correspond à `votre.domaine.tld`, et par ex. `muc` correspond à `muc.votre.domaine.tld` ; +- Les valeurs montrées ici sont des valeurs d'exemple ! Référez-vous à la configuration générée chez vous pour savoir quelles valeurs utiliser ; +- Nous recommandons un [TTL](https://fr.wikipedia.org/wiki/Time_to_Live#Le_Time_to_Live_dans_le_DNS) de 3600 (1 heure). Mais vous pouvez utiliser une autre valeur si vous savez ce que vous faîtes ; +- Ne mettez pas d'enregistrement IPv6 si vous n'êtes pas certain que l'IPv6 fonctionne sur votre serveur ! Vous aurez des problèmes avec Let's Encrypt si ce n'est pas le cas. +- Si vous utilisez le registrar Namecheap, les entrées SRV sont formattées comme **Service**: _xmpp-client **Protocol**: _tcp **Priority**: 0 **Weight**: 5 **Port**: 5222 **Target**: votre.domaine.tld + +### Résolution DNS inverse + +Si votre opérateur ou votre hébergeur le permet, nous vous encourageons à +configurer une [résolution DNS +inverse](https://fr.wikipedia.org/wiki/Domain_Name_System#R%C3%A9solution_inverse) +pour vos adresses publiques IPv4 et/ou IPv6. Ceci vous évitera d'être marqué +comme spammeur par les systèmes de filtrage anti-spams. + +**N.B. : la configuration du DNS inverse se passe au niveau de votre fournisseur d'accès à Internet, ou de votre hébergeur de VPS. Elle ne se fait *pas* sur le registrar de votre nom de domaine.** + +Cela signifie que si votre adresse IPv4 publique est `111.222.333.444` et que +votre nom de domaine est `domain.tld`, vous devez obtenir le résultat suivant +en utilisant la commande `nslookup` : + +```shell +$ nslookup 111.222.333.444 +444.333.222.111.in-addr.arpa name = domain.tld. +``` + +Le système de diagnostic présent dans l'interface d'administration fait cette vérification automatiquement (dans la section Email) + +### IP Dynamique + +Si votre adresse IP publique change constamment, suivez ce [tutoriel](/dns_dynamicip). diff --git a/pages/02.administer/10.install/20.dns_config/dns_config.md b/pages/02.administer/10.install/20.dns_config/dns_config.md new file mode 100644 index 00000000..061855d5 --- /dev/null +++ b/pages/02.administer/10.install/20.dns_config/dns_config.md @@ -0,0 +1,118 @@ +--- +title: DNS zone configuration +template: docs +taxonomy: + category: docs +routes: + default: '/dns_config' + aliases: + - '/dns' +--- + +DNS (domain name system) is a system that converts human-readable addresses +(domain names) into machine-understandable addresses (IP). For your server to be +easily accessible by human beings, and for some services like mail to work +properly, DNS must be configured. + +If you're using an [automatic domain](/dns_nohost_me) provided by the YunoHost Project, the configuration should be +performed automatically. If you're using your own domain name (e.g. bought via +a registrar), you should manually configure your domain on your registrar's +interface. + +## Recommended DNS configuration + +NB: Examples here use the placeholder `your.domain.tld`, you have to replace it with your real domain, such as `www.yunohost.org`. + +YunoHost provides a recommended DNS configuration, available via: +- the webadmin, in Domain > your.domain.tld > DNS configuration; +- or the command line, `yunohost domain dns-conf your.domain.tld` + +For specific needs or specific setups, and if you know what you're doing, you +might want or have to tweak these, or add additional ones (e.g. to handle +subdomains). + +The recommended configuration typically looks like this: + +```bash +# +# Basic ipv4/ipv6 records +# +@ 3600 IN A 111.222.33.44 +* 3600 IN A 111.222.33.44 + +# (If your server is IPv6 capable, there are some AAAA records) +@ 3600 IN AAAA 2222:444:8888:3333:bbbb:5555:3333:1111 +* 3600 IN AAAA 2222:444:8888:3333:bbbb:5555:3333:1111 + +# +# XMPP +# +_xmpp-client._tcp 3600 IN SRV 0 5 5222 your.domain.tld. +_xmpp-server._tcp 3600 IN SRV 0 5 5269 your.domain.tld. +muc 3600 IN CNAME @ +pubsub 3600 IN CNAME @ +vjud 3600 IN CNAME @ +xmpp-upload 3600 IN CNAME @ + +# +# Mail (MX, SPF, DKIM and DMARC) +# +@ 3600 IN MX 10 your.domain.tld. +@ 3600 IN TXT "v=spf1 a mx -all" +mail._domainkey 3600 IN TXT "v=DKIM1; k=rsa; p=someHuuuuuuugeKey" +_dmarc 3600 IN TXT "v=DMARC1; p=none" +``` + +Though it might be easier to understand it if displayed like this: + + +| Type | Name | Value | +| :-----: | :--------------------: | :--------------------------------------------------: | +| **A** | **@** | `111.222.333.444` (your IPv4) | +| A | * | `111.222.333.444` (your IPv4) | +| AAAA | @ | `2222:444:8888:3333:bbbb:5555:3333:1111` (your IPv6) | +| AAAA | * | `2222:444:8888:3333:bbbb:5555:3333:1111` (your IPv6) | +| **SRV** | **_xmpp-client._tcp** | `0 5 5222 your.domain.tld.` | +| **SRV** | **_xmpp-server._tcp** | `0 5 5269 your.domain.tld.` | +| CNAME | muc | `@` | +| CNAME | pubsub | `@` | +| CNAME | vjud | `@` | +| CNAME | xmpp-upload | `@` | +| **MX** | **@** | `your.domain.tld.` (and priority: 10) | +| TXT | @ | `"v=spf1 a mx -all"` | +| TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=someHuuuuuuugeKey"` | +| TXT | _dmarc | `"v=DMARC1; p=none"` | + +#### A few notes about this table + +- Not all these lines are absolutely necessary. For a minimal setup, you only need the records in bold. +- The dot at the end of `your.domain.tld.` is important ;); +- `@` corresponds to `your.domain.tld`, and e.g. `muc` corresponds to `muc.your.domain.tld`; +- These are example values ! See your generated conf for the actual values you should use; +- We recommend a [TTL](https://en.wikipedia.org/wiki/Time_to_live#DNS_records) of 3600 (1 hour). But you can use something else if you know what you're doing; +- Don't put an IPv6 record if you're not sure IPv6 really works on your server! You might have issues with Let's Encrypt if it doesn't. +- If you're using the domain provider Namecheap the SRV DNS entries are formatted as **Service**: _xmpp-client **Protocol**: _tcp **Priority**: 0 **Weight**: 5 **Port**: 5222 **Target**: your.domain.tld + +### Reverse DNS + +If your ISP or VPS provider let you define a [Reverse DNS +lookup](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) for your public IPv4 +and/or IPv6 addresses, you must configure it. It will prevent you to be marked as +spam by anti-spam filters. + +**N.B. : the reverse DNS configuration happens on your Internet Service Provider or VPS provider. It is *not* handled by your domain's registrar.** + +If your public IPv4 address is `111.222.333.444` and your DNS +domain is `domain.tld`, you should get following answer when using `nslookup` +command tool: + +```shell +$ nslookup 111.222.333.444 +444.333.222.111.in-addr.arpa name = domain.tld. +``` + +The diagnosis system available in the webadmin performs this checks automatically (in section Email). + +### Dynamic IP + +If your global IP address is constantly changing, follow this [tutorial](/dns_dynamicip). diff --git a/pages/02.administer/10.install/20.dns_config/dns_config.ru.md b/pages/02.administer/10.install/20.dns_config/dns_config.ru.md new file mode 100644 index 00000000..1e3238c6 --- /dev/null +++ b/pages/02.administer/10.install/20.dns_config/dns_config.ru.md @@ -0,0 +1,118 @@ +--- +title: Конфигурация зоны DNS +template: docs +taxonomy: + category: docs +routes: + default: '/dns_config' + aliases: + - '/dns' +--- + +DNS (система доменных имен) - это система, которая преобразует удобочитаемые адреса +(доменные имена) в адреса, понятные машине (IP). Чтобы ваш сервер был +легко доступен людям, а некоторые службы, такие как почта, работали +должным образом, необходимо настроить DNS. + +Если вы используете [автоматический домен](/dns_nohost_me), предоставляемый проектом YunoHost, настройка должна +выполняться автоматически. Если вы используете свое собственное доменное имя (например, купленное через +регистратора), вам следует вручную настроить свой домен в +интерфейсе вашего регистратора. + +## Рекомендуемая конфигурация DNS + +ПРИМЕЧАНИЕ: В примерах здесь используется заполнитель `your.domain.tld`, вы должны заменить его своим реальным доменом, например `www.yunohost.org`. + +YunoHost предоставляет рекомендуемую конфигурацию DNS, доступную через: +- веб-администратор, Домены > `your.domain.tld` > DNS; +- или в командной строке: `yunohost domain dns-conf your.domain.tld` + +Для конкретных нужд или конкретных настроек, и если вы знаете, что делаете, вы +можете захотеть или быть вынуждены изменить их или добавить дополнительные (например, для обработки +поддоменов). + +Рекомендуемая конфигурация обычно выглядит следующим образом: + +```bash +# +# Базовые ipv4/ipv6 записи +# +@ 3600 IN A 111.222.33.44 +* 3600 IN A 111.222.33.44 + +# (Если ваш сервер поддерживает IPv6, есть несколько записей AAAA) +@ 3600 IN AAAA 2222:444:8888:3333:bbbb:5555:3333:1111 +* 3600 IN AAAA 2222:444:8888:3333:bbbb:5555:3333:1111 + +# +# XMPP +# +_xmpp-client._tcp 3600 IN SRV 0 5 5222 your.domain.tld. +_xmpp-server._tcp 3600 IN SRV 0 5 5269 your.domain.tld. +muc 3600 IN CNAME @ +pubsub 3600 IN CNAME @ +vjud 3600 IN CNAME @ +xmpp-upload 3600 IN CNAME @ + +# +# Почтовые (MX, SPF, DKIM and DMARC) +# +@ 3600 IN MX 10 your.domain.tld. +@ 3600 IN TXT "v=spf1 a mx -all" +mail._domainkey 3600 IN TXT "v=DKIM1; k=rsa; p=someHuuuuuuugeKey" +_dmarc 3600 IN TXT "v=DMARC1; p=none" +``` + +Хотя, возможно, было бы легче понять это, если бы оно отображалось следующим образом: + + +| Тип | Название | Значение | +| :-----: | :--------------------: | :--------------------------------------------------: | +| **A** | **@** | `111.222.333.444` (ваш IPv4) | +| A | * | `111.222.333.444` (ваш IPv4) | +| AAAA | @ | `2222:444:8888:3333:bbbb:5555:3333:1111` (ваш IPv6) | +| AAAA | * | `2222:444:8888:3333:bbbb:5555:3333:1111` (ваш IPv6) | +| **SRV** | **_xmpp-client._tcp** | `0 5 5222 your.domain.tld.` | +| **SRV** | **_xmpp-server._tcp** | `0 5 5269 your.domain.tld.` | +| CNAME | muc | `@` | +| CNAME | pubsub | `@` | +| CNAME | vjud | `@` | +| CNAME | xmpp-upload | `@` | +| **MX** | **@** | `your.domain.tld.` (с приоритетом: 10) | +| TXT | @ | `"v=spf1 a mx -all"` | +| TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=someHuuuuuuugeKey"` | +| TXT | _dmarc | `"v=DMARC1; p=none"` | + +#### Несколько замечаний по поводу этой таблицы + +- Не все эти строки абсолютно необходимы. Для минимальной настройки вам понадобятся только записи, выделенные жирным шрифтом. +- Точка в конце `ваш.домен.tld.` важна ;); +- `@` соответствует `your.domain.tld`, и, например, `muc` соответствует `muc.your.domain.tld`; +- Это примерные значения! Смотрите сгенерированный вами conf для получения фактических значений, которые вы должны использовать; +- Мы рекомендуем использовать [TTL](https://en.wikipedia.org/wiki/Time_to_live#DNS_records ) 3600 (1 час). Но вы можете использовать что-то еще, если знаете, что делаете; +- Не размещайте запись IPv6, если вы не уверены, что IPv6 действительно работает на вашем сервере! У вас могут возникнуть проблемы с Let's Encrypt, если это не так. +- Если вы используете Namecheap поставщика домена, записи SRV DNS форматируются как **Сервис**: _xmpp-client **Протокол**: _tcp **Приоритет**: 0 **Вес**: 5 **Порт**: 5222 **Цель**: your.domain.tld + +### Обратный DNS + +Если ваш интернет-провайдер или VPS-провайдер позволяет вам определить [обратный +поиск DNS](https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B9_%D0%BF%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80_DNS) для ваших общедоступных IPv4 +и/или IPv6-адресов вы должны настроить его. Это предотвратит пометку вас +антиспам-фильтрами как нежелательные письма. + +**Примечание: обратная настройка DNS выполняется у вашего интернет-провайдера или VPS-провайдера. Это *не* обрабатывается регистратором вашего домена.** + +Если ваш общедоступный IPv4-адрес `111.222.333.444`, а ваш DNS +-домен - `domain.tld`, вы должны получить следующий ответ при использовании +командной строки `nslookup`: + +```shell +$ nslookup 111.222.333.444 +444.333.222.111.in-addr.arpa name = domain.tld. +``` + +Система диагностики, доступная в webadmin, выполняет эту проверку автоматически (в разделе Электронная почта). + +### Динамический IP-адрес + +Если ваш глобальный IP-адрес постоянно меняется, следуйте этому [руководству](/dns_dynamic_ip). diff --git a/pages/02.administer/10.install/install.fr.md b/pages/02.administer/10.install/install.fr.md new file mode 100644 index 00000000..e42bba78 --- /dev/null +++ b/pages/02.administer/10.install/install.fr.md @@ -0,0 +1,634 @@ +--- +title: Installer YunoHost +template: docs +taxonomy: + category: docs +never_cache_twig: true +twig_first: true +process: + markdown: true + twig: true +page-toc: + active: true + depth: 2 +routes: + default: '/install' + aliases: + - '/install_iso' + - '/install_on_vps' + - '/install_manually' + - '/install_on_raspberry' + - '/install_on_arm_board' + - '/install_on_debian' + - '/install_on_virtualbox' + - '/plug_and_boot' + - '/burn_or_copy_iso' + - '/boot_and_graphical_install' + - '/postinstall' + - '/hardware' +--- +{% set image_type = 'YunoHost' %} +{% set arm, at_home, regular, rpi34, rpi012, show_legacy_arm_menu, arm_sup, arm_unsup, vps, vps_debian, vps_ynh, virtualbox, internetcube = false, false, false, false, false, false, false, false, false, false, false, false, false %} +{% set hardware = uri.param('hardware') %} + +{% if hardware == 'regular' %} + {% set regular = true %} +{% elseif hardware == 'internetcube' %} + {% set arm, arm_sup, internetcube = true, true, true %} + {% set image_type = 'La Brique Internet' %} + {% set show_legacy_arm_menu = true %} +{% elseif hardware == 'rpi34' %} + {% set arm, rpi34 = true, true %} +{% elseif hardware == 'rpi012' %} + {% set arm, arm_unsup, rpi012 = true, true, true %} + {% set image_type = 'Raspberry Pi OS Lite (32-bit, Bullseye)' %} +{% elseif hardware == 'arm_sup' %} + {% set arm, arm_sup = true, true %} + {% set show_legacy_arm_menu = true %} +{% elseif hardware == 'arm' %} + {% set arm, arm_unsup = true, true %} + {% set image_type = 'Armbian' %} +{% elseif hardware == 'arm_unsup' %} + {% set arm, arm_unsup = true, true %} + {% set show_legacy_arm_menu = true %} + {% set image_type = 'Armbian' %} +{% elseif hardware == 'vps_debian' %} + {% set vps, vps_debian = true, true %} +{% elseif hardware == 'vps_ynh' %} + {% set vps, vps_ynh = true, true %} +{% elseif hardware == 'virtualbox' %} + {% set at_home, virtualbox = true, true %} +{% endif %} + +{% if arm or regular %} + {% set at_home = true %} +{% endif %} + +Sélectionnez le matériel sur lequel vous souhaitez installer YunoHost : +[div class="flex-container"] + +[div class="flex-child hardware{%if virtualbox %} active{% endif %}"] +[[figure caption="VirtualBox"]![](image://virtualbox.png?height=75)[/figure]](/install/hardware:virtualbox) +[/div] + +[div class="flex-child hardware{%if rpi34 or rpi012 %} active{% endif %}"] +[[figure caption="Raspberry Pi"]![](image://raspberrypi.png?height=75)[/figure]](/install/hardware:rpi34) +[/div] + +[div class="flex-child hardware{%if arm_sup or (arm_unsup and not rpi012) or internetcube %} active{% endif %}"] +[[figure caption="Carte ARM"]![](image://olinuxino.png?height=75)[/figure]](/install/hardware:arm) +[/div] + +[div class="flex-child hardware{%if regular %} active{% endif %}"] +[[figure caption="Ordinateur standard"]![](image://computer.png?height=75)[/figure]](/install/hardware:regular) +[/div] + +[div class="flex-child hardware{%if vps_debian or vps_ynh %} active{% endif %}"] +[[figure caption="Serveur distant"]![](image://vps.png?height=75)[/figure]](/install/hardware:vps_debian) +[/div] + +[/div] +[div class="flex-container pt-2"] + +{% if rpi34 or rpi012 %} +[div class="flex-child hardware{%if rpi34 %} active{% endif %}"] +[[figure caption="Raspberry Pi 3 ou 4"]![](image://raspberrypi.png?height=50)[/figure]](/install/hardware:rpi34) +[/div] + +[div class="flex-child hardware{%if rpi012 %} active{% endif %}"] +[[figure caption="Raspberry Pi 0, 1 or 2"]![](image://rpi1.png?height=50)[/figure]](/install/hardware:rpi012) +[/div] + +{% elseif show_legacy_arm_menu %} + +[div class="flex-child hardware{%if internetcube %} active{% endif %}"] +[[figure caption="La Brique Internet avec un VPN"]![](image://internetcube.png?height=50)[/figure]](/install/hardware:internetcube) +[/div] + +[div class="flex-child hardware{%if arm_sup and not internetcube %} active{% endif %}"] +[[figure caption="Olinuxino lime1&2 ou Orange Pi PC+"]![](image://olinuxino.png?height=50)[/figure]](/install/hardware:arm_sup) +[/div] + +[div class="flex-child hardware{%if arm_unsup %} active{% endif %}"] +[[figure caption="Autres cartes ARM"]![](image://odroidhc4.png?height=50)[/figure]](/install/hardware:arm_unsup) +[/div] +{% elseif vps_debian or vps_ynh %} + +[div class="flex-child hardware{%if vps_debian %} active{% endif %}"] +[[figure caption="VPS ou serveur dédié avec Debian 11"]![](image://debian-logo.png?height=50)[/figure]](/install/hardware:vps_debian) +[/div] + +[div class="flex-child hardware{%if vps_ynh %} active{% endif %}"] +[[figure caption="VPS ou serveur dédié avec YunoHost pre-installé"]![](image://logo.png?height=50)[/figure]](/install/hardware:vps_ynh) +[/div] + +{% endif %} + +[/div] + + +{% if hardware != '' %} + +## [fa=list-alt /] Pré-requis + +{% if regular %} +* Un matériel compatible x86 dédié à YunoHost : portable, netbook, ordinateur avec 512Mo de RAM et 16Go de capacité de stockage (au moins) ; +{% elseif rpi34 %} +* Un Raspberry Pi 3 ou 4 ; +{% elseif rpi012 %} +* Un Raspberry Pi 0, 1 ou 2 avec au moins 512Mo de RAM ; +{% elseif internetcube %} +* Un Orange Pi PC+ ou une Olinuxino Lime 1 ou 2 ; +* Un VPN avec une IP publique dédiée et un fichier `.cube` ; +{% elseif arm_sup %} +* Un Orange Pi PC+ ou une Olinuxino Lime 1 ou 2 ; +{% elseif arm_unsup %} +* Une carte ARM avec au moins 512Mo de RAM ; +{% elseif vps_debian %} +* Un serveur dédié ou virtuel avec Debian 11 (Bullseye) pré-installé (avec un **kernel >= 3.12**), avec au moins 512Mo de RAM et 16Go de capacité de stockage ; +{% elseif vps_ynh %} +* Un serveur dédié ou virtuel avec YunoHost pré-installé, avec au moins 512Mo de RAM et 16Go de capacité de stockage ; +{% elseif virtualbox %} +* Un ordinateur x86 avec [VirtualBox installé](https://www.virtualbox.org/wiki/Downloads) et assez de RAM disponible pour lancer une petite machine virtuelle avec au moins 1024Mo de RAM et 8Go de capacité de stockage ; +{% endif %} +{% if arm %} +* Une alimentation électrique (soit un adaptateur, soit un câble microUSB) pour alimenter la carte ; +* Une carte microSD : au moins 16Go de capacité, [classe « A1 »](https://fr.wikipedia.org/wiki/Carte_SD#Vitesse) hautement recommandée (comme par exemple [cette carte SanDisk A1](https://www.amazon.fr/SanDisk-microSDHC-Adaptateur-homologu%C3%A9e-Nouvelle/dp/B073JWXGNT/)) ; +{% endif %} +{% if regular %} +* Une clé USB avec au moins 1Go de capacité OU un CD vierge standard ; +{% endif %} +{% if at_home %} +* Un [fournisseur d'accès à Internet correct](/isp), de préférence avec une bonne vitesse d’upload ; +{% if not virtualbox %} +* Un câble ethernet/RJ-45 pour brancher la carte à votre routeur/box internet {% if rpi012 %} (Ou pour Rasperry Pi Zero : Un câble OTG ou un adaptateur Wifi USB) {% endif %} ; +{% endif %} +* Un ordinateur pour lire ce guide, flasher l'image et accéder à votre serveur. +{% else %} +* Un ordinateur ou un smartphone pour lire ce guide et accéder à votre serveur. +{% endif %} + +{% if virtualbox %} +! N.B. : Installer YunoHost dans une VirtualBox est généralement destiné à tester la distribution ou pour développer. VirtualBox n'est pas pratique pour faire tourner un 'vrai' serveur sur le long terme car la machine surlaquelle il est installé ne sera sans doute pas allumé 24h/24, et parce que Virtualbox rajoute une couche de complexité supplémentaire pour ce qui est d'exposer la machine sur Internet. +{% endif %} + + + + +{% if vps_ynh %} +## Fournisseurs de VPS YunoHost + +Ci-dessous une liste de fournisseurs de VPS supportant nativement YunoHost : + +[div class="flex-container"] + +[div class="flex-child"] +[[figure caption="Alsace Réseau Neutre - FR"]![](image://vps_ynh_arn.png?height=50)[/figure]](https://vps.arn-fai.net) +[/div] +[div class="flex-child"] +[[figure caption="FAImaison - FR"]![](image://vps_ynh_faimaison.svg?height=50)[/figure]](https://www.faimaison.net/services/vm.html) +[/div] +[div class="flex-child"] +[[figure caption="Association ECOWAN - FR"]![](image://vps_ynh_ecowan.png?height=50)[/figure]](https://www.ecowan.fr/vps-linux) +[/div] +[/div] +{% endif %} + + +{% if at_home %} +## [fa=download /] Télécharger l'image {{image_type}} + +{% if rpi012 %} +! Le support des Rasperry Pi 0, 1 et 2 est malheureusement sur la pente descendante : construire des images à jour est complexe, et les cartes RPi 0, 1 et 2 sont des systèmes ARM 32 bit qui vont être de plus en plus déprécié au fur et à mesure du temps. Nos images pré-installées sont vieilles. Nous recommendons à la place de [télécharger l'image officielle Rasperry Pi OS Lite (**32-bit**, **Bullseye**)](https://downloads.raspberrypi.org/raspios_lite_armhf/images/?C=M;O=D) et d'installer YunoHost par dessus, [de manière similaire à ce qui est proposé pour les autres cartes ARM](/install/hardware:arm) +{% endif %} + +{% if virtualbox or regular %} +!!! Si votre hôte est en 32 bits, faites bien attention à télécharger l'image 32 bits. +{% elseif arm_unsup and not rpi012 %} +[fa=external-link] Télécharger l'image pour votre carte sur le site d'Armbian + +!!! N.B.: il vous faut télécharger l'image Armbian Bullseye. +{% endif %} + +!!! Si vous souhaitez vérifier la validité de nos images signées, vous pouvez [télécharger notre clé publique](https://forge.yunohost.org/yunohost.asc). + +{% if internetcube or arm_sup %} +! Les images sont basées sur Debian Buster (YunoHost v4.x) et nécessitent que vous fassiez la commande `apt update` en SSH ou ligne de commande pour continuer les mises à jour. +! Répondez Oui à l'avertissement à propos du changement de `stable` vers `oldstable`. +{% endif %} + +
+
+
+
+ + + + + + + + +{% if not virtualbox %} + +{% if arm %} +## ![microSD card with adapter](image://sdcard_with_adapter.png?resize=100,75&class=inline) Flasher l'image {{image_type}} +{% else %} +## ![USB drive](image://usb_key.png?resize=100,100&class=inline) Flasher l'image YunoHost +{% endif %} + +Maintenant que vous avez téléchargé l’image de {{image_type}}, vous devez la mettre sur {% if arm %}une carte microSD{% else %}une clé USB ou un CD/DVD.{% endif %} + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="(Recommandé) Avec Etcher"] + +Téléchargez Etcher pour votre système d'exploitation et installez-le. + +Branchez votre {% if arm %}carte microSD{% else %}clé USB{% endif %}, sélectionnez votre image et cliquez sur « Flash ». + +![Etcher](image://etcher.gif?resize=700&class=inline) + +[/ui-tab] +[ui-tab title="Avec USBimager"] + +Téléchargez [USBimager](https://bztsrc.gitlab.io/usbimager/) pour votre système d'exploitation et installez-le. + +Branchez votre {% if arm %}carte microSD{% else %}clé USB{% endif %}, sélectionnez votre image et cliquez sur « Write ». + +![USBimager](image://usbimager.png?resize=700&class=inline) + +[/ui-tab] +[ui-tab title="Avec dd"] + +Si vous êtes sur GNU/Linux / macOS et que vous êtes familier avec la ligne de commande, il est possible de flasher la clé USB ou carte SD avec dd. Vous pouvez identifier le nom du périphérique avec `fdisk -l` ou `lsblk`. Une carte SD s'appelle typiquement `/dev/mmcblk0`. ATTENTION à bien prendre le bon nom ! + +Ensuite lancez : + +```bash +# Remplacez /dev/mmcblk0 si le nom de votre périphérique est différent... +dd if=/path/to/yunohost.img of=/dev/mmcblk0 +``` + +[/ui-tab] +{% if regular %} +[ui-tab title="Copier un CD/DVD"] +Pour les anciens matériels, il vous faut peut-être utiliser un CD/DVD. Le logiciel à utiliser est différent suivant votre système d’exploitation. + +* Sur Windows, utilisez [ImgBurn](http://www.imgburn.com/) pour écrire l’image sur le disque + +* Sur macOS, utilisez [Disk Utility](http://support.apple.com/kb/ph7025) + +* Sur GNU/Linux, vous avez plusieurs choix, tels que [Brasero](https://wiki.gnome.org/Apps/Brasero) ou [K3b](http://www.k3b.org/) + +[/ui-tab] +{% endif %} +[/ui-tabs] + +{% else %} + +## Créer une nouvelle machine virtuelle + +![](image://virtualbox_1.png?class=inline) + +! Ce n'est pas grave si seulement la version 32-bit est disponible, mais dans ce cas soyez sûr d'avoir téléchargé l'image 32 bit précédemment. + +## Modifier la configuration réseau + +! Cette étape est importante pour exposer proprement la machine virtuelle sur le réseau. + +Allez dans **Réglages** > **Réseau** : + +* Sélectionnez `Accès par pont` +* Choisissez votre interface selon son nom : + **wlan0** si vous êtes connecté sans-fil, **eth0** ou **eno1** sinon. + +![](image://virtualbox_2.png?class=inline) + +{% endif %} + + + + + + + + + +{% if arm %} +## [fa=plug /] Démarrer la carte + +* Branchez le câble Ethernet (un côté sur votre box, l'autre côté à votre carte). + * Pour les utilisateurs et utilisatrices souhaitant configurer la carte pour la connecter via le WiFi à la place, voir [cet exemple](https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md). +* Mettez la carte SD dans le serveur. +* (Facultatif) Il est possible de brancher un écran et un clavier sur votre serveur en cas de soucis, pour vérifier que le processus de démarrage (boot) se passe bien, ou encore pour avoir un accès direct en console. +* Branchez l'alimentation. +* Laissez quelques minutes à votre serveur pour s'autoconfigurer durant le premier démarrage. +* Assurez-vous que votre ordinateur (de bureau ou portable) est connecté au même réseau local (c'est-à-dire la même box Internet) que votre serveur. + +{% elseif virtualbox %} +## [fa=plug /] Lancer la machine virtuelle + +Démarrez votre machine virtuelle après avoir sélectionné l'image YunoHost. + +![](image://virtualbox_2.1.png?class=inline) + +! Si vous rencontrez l'erreur "VT-x is not available", il vous faut probablement activer (enable) la virtualisation dans les options du BIOS de votre ordinateur. + +{% else %} +## [fa=plug /] Démarrer la machine sur la clé USB + +* Branchez le câble Ethernet (un côté à votre box, de l'autre côté à votre carte). +* Démarrez votre serveur avec la clé USB ou le CD-ROM inséré, et sélectionnez-le comme **périphérique de démarrage (bootable device)** en pressant l’une des touches suivantes (dépendant de votre ordinateur) : +``, ``, ``, ``, `` or ``. + * N.B. : si le serveur était précédemment installé avec une version récente de Windows (8+), vous devez d'abord demander à Windows de « redémarrer réellement ». Vous pouvez le faire dans une option du menu « Options de démarrage avancées ». +{% endif %} + +{% if regular or virtualbox %} +## [fa=rocket /] Lancer l’installation graphique + + +Votre écran devrait ressembler à la capture ci-dessous : + +[figure class="nomargin" caption="Capture d'écran du menu de l'ISO"] +![](image://virtualbox_3.png?class=inline) +[/figure] +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Installation classique sur un disque entier"] + +!! N.B. : A partir du moment où vous aurez validé l'agencement du clavier, l'installation sera lancée et effacera totalement les données sur votre disque dur ! + + 1. Sélectionnez `Graphical install` + 2. Sélectionnez votre langue, votre localisation, votre agencement de clavier et éventuellement votre timezone. + 3. L'installateur va ensuite télécharger les paquets requis et les installer. +[/ui-tab] +[ui-tab title="Installation en mode expert"] + +Le projet YunoHost a simplifié au maximum l'installation classique afin d'éviter au plus grand nombre d'être perdu avec des questions trop techniques ou liées à des cas particuliers. + +Avec l'installation en mode expert, vous avez plus de possibilités notamment concernant le partitionnement exact de vos supports de stockages. Vous pouvez aussi décider d'utiliser le mode classique et [ajouter vos disques après coup](/external_storage). + +### Résumé des étapes en mode expert: + 1. Sélectionnez `Expert graphical install` + 2. Sélectionnez votre langue, votre localisation, votre agencement de clavier et éventuellement votre timezone. + 3. Partitionner vos disques. C'est à cette étape que vous pouvez configurer un RAID ou chiffrer tout ou partie du serveur. + 4. Indiquez un éventuel proxy HTTP à utiliser pour l'installation des paquets + 5. Indiquez sur quels volumes grub doit être installé + +### A propos du partitionnement + +De façon générale, nous recommandons d'éviter de partitionner `/var`, `/opt`, `/usr`, `/bin`, `/etc`, `/lib`, `/tmp` et `/root` sur des partitions distinctes. Ceci vous évitera des soucis de partitions pleines qui pourraient mettre en panne votre machine, faire échouer l'installation d'app, voir même altérer vos bases de données. + +Pour des raisons de performances, il est recommandé de monter votre stockage le plus rapide (SSD) sur la racine `/`. + +Si vous avez un ou des disques durs pour stocker les données, vous pouvez choisir de les monter sur un de ces dossiers selon votre utilisation. + +| Chemin | Contenu | +|--------|---| +| `/home` | Dossiers utilisateurs accessibles via SFTP | +| `/home/yunohost.backup/archives` | Sauvegardes YunoHost à placer idéalement ailleurs que sur les disques qui gérent les données | +| `/home/yunohost.app` | Données lourdes des applications YunoHost (nextcloud, matrix...) | +| `/home/yunohost.multimedia` | Données lourdes partagées entre plusieurs applications | +| `/var/mail` | Mails des usagers | + +Si vous souhaitez de la souplesse et ne pas avoir à (re-)dimensionner des partitions, vous pouvez aussi choisir de monter sur `/mnt/hdd` et de suivre ce [tutoriel pour monter l'ensemble de ces dossiers avec `mount --bind`](/external_storage). + +### A propos du chiffrement +Prenez bien en compte que si vous chiffrez tout ou partie de vos disques, vous aurez à taper la phrase de passe à chaque redémarrage de votre serveur, ce qui peut poser problème si vous n'êtes pas sur place. Il existe toutefois des solutions (assez difficiles à mettre en oeuvre) qui permettent de tapper la phrase via SSH ou via une page web (cherchez "dropbear encrypted disk"). + +### A propos du RAID +Ne perdez pas de vue que: + * les disques de vos RAID doivent être de marque, d'usure ou de lots distincts (surtout si ce sont des SSD) + * un RAID 1 (même sans disque de spare) est plus fiable qu'un RAID5 d'un point de vue probabilité + * les raid matériels sont dépendant de la carte raid, si celle-ci fait défaut il en faudra une de remplacement pour pouvoir lire et reconstruire la grappe + +[/ui-tab] +[/ui-tabs] + +{% endif %} + + +{% if rpi012 %} +## [fa=bug /] Se connecter à la carte et corriger l'image +Les Raspberry Pi 1 et Zero ne sont pas totalement supportés à cause de [problèmes de compilation pour cette architecture](https://github.com/YunoHost/issues/issues/1423). + +Cependant, il est possible de corriger l'image par vous-même avant de lancer la configuration initiale. + +Pour y parvenir, vous devez vous connecter à votre Raspberry Pi en tant que root [via SSH](/ssh) avec le mot de passe temporaire `yunohost`: +``` +ssh root@yunohost.local +``` +(utilisez `yunohost-2.local`, etc. s'il y a plusieurs serveurs YunoHost sur le réseau) + +Ensuite, lancez les commandes suivantes pour contourner le dysfonctionnement de Metronome : +``` +mv /usr/bin/metronome{,.bkp} +mv /usr/bin/metronomectl{,.bkp} +ln -s /usr/bin/true /usr/bin/metronome +ln -s /usr/bin/true /usr/bin/metronomectl +``` + +Et celle-ci pour contourner celui de upnpc : +``` +sed -i 's/import miniupnpc/#import miniupnpc/g' /usr/lib/moulinette/yunohost/firewall.py +``` + +! Cette dernière commande nécessite d'être lancée après chaque mise à jour de YunoHost :/ + +{% elseif arm_unsup %} +## [fa=terminal /] Se connecter à la carte + +Ensuite, il vous faut [trouver l'adresse IP locale de votre serveur](/finding_the_local_ip) pour vous connecter en tant que root [via SSH](/ssh) avec le mot de passe temporaire `1234`. + +``` +ssh root@192.168.x.xxx +``` + +{% endif %} + +{% endif %} + + +{% if vps_debian or arm_unsup %} +## [fa=rocket /] Lancer le script d'installation + +- Ouvrez la ligne de commande sur votre serveur (soit directement, soit avec [SSH](/ssh)) +- Assurez-vous d'être connecté en tant que root (ou tapez `sudo -i` pour le devenir) +- Lancez la commande suivante : + +```bash +curl https://install.yunohost.org | bash +``` +!!! Si `curl` n'est pas installé sur votre système, il vous faudra peut-être l'installer avec `apt install curl`. +!!! Autrement, si la commande n'affiche rien du tout, vous pouvez tenter `apt install ca-certificates` + +!!! **Note pour les utilisateurs avancés inquiets à propos de l'approche `curl|bash` :** prenez le temps de lire ["Is curl|bash insecure?"](https://sandstorm.io/news/2015-09-24-is-curl-bash-insecure-pgp-verified-install) sur le blog de Sandstorm, et possiblement [cette discussion sur Hacker News](https://news.ycombinator.com/item?id=12766350&noprocess). + +{% endif %} + + +## [fa=cog /] Lancer la configuration initiale + +!!! Si vous êtes en train de restaurer une sauvegarde YunoHost, vous devez sauter cette étape et vous référer à la section [Restaurer durant la post-installation à la place de cette étape de configuration initiale](/backup#restoring-during-the-postinstall). + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] +{%if at_home %} +Dans un navigateur web, tapez dans la barre d'adresse **{% if internetcube %}`https://internetcube.local`{% else %}`https://yunohost.local` (utilisez `yunohost-2.local`, etc. s'il y a plusieurs serveurs YunoHost sur le réseau){% endif %}**. + +!!! Si ça ne fonctionne pas, vous devez [chercher l'adresse IP locale du serveur](/finding_the_local_ip). L'adresse ressemble typiquement à `192.168.x.y`, et vous devriez taper `https://192.168.x.y` dans la barre d'adresse du navigateur. +{% else %} +Vous pouvez lancer la configuration initiale à partir du navigateur en tapant l'**adresse IP publique de votre serveur**. Généralement, votre fournisseur de VPS vous indique l'IP dans un email ou sur sa console de gestion. +{% endif %} + +! Lors de la première visite, vous rencontrerez très probablement un avertissement de sécurité lié au certificat utilisé. Pour le moment, votre serveur utilise un certificat auto-signé. Vous pourrez plus tard ajouter un certificat automatiquement reconnu par les navigateurs comme décrit dans [la page sur les certificats](/certificate). En attendant, ajoutez une exception de sécurité pour accepter le certificat actuel. Toutefois, **s'il vous plaît**, ne prenez pas l'habitude d'accepter ce genre d'alerte de sécurité ! + +{% if not internetcube %} +Vous devriez ensuite obtenir cette page : + +[figure class="nomargin" caption="Capture d'écran de la page de configuration initiale"] +![Page de configuration initiale](image://postinstall_web.png?resize=100%&class=inline) +[/figure] + +{% endif %} +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] + +Vous pouvez aussi lancer la post-installation avec la commande `yunohost tools postinstall` directement sur le serveur ou [via SSH](/ssh). + +[figure class="nomargin" caption="Capture d'écran de la configuration initiale en ligne de commande"] +![Configuration initiale en ligne de commande](image://postinstall_cli.png?resize=100%&class=inline) +[/figure] + +[/ui-tab] +[/ui-tabs] + +{% if not internetcube %} + +##### [fa=globe /] Domaine principal + +C’est le nom de domaine qui permettra l’accès à votre serveur ainsi qu’au **portail d’authentification** des utilisateurs. Vous pourrez ensuite ajouter d'autres domaines, et changer celui qui sera le domaine principal si besoin. + +* Si l'auto-hébergement est tout neuf pour vous et que vous n'avez pas encore de nom de domaine, nous recommandons d'utiliser un domaine en **.nohost.me** / **.noho.st** / **.ynh.fr** (exemple : `homersimpson.nohost.me`). S'il n'est pas déjà utilisé, le domaine sera automatiquement rattaché à votre serveur YunoHost, et vous n’aurez pas d’étape de configuration supplémentaire. Toutefois, notez que l'utilisation d'un de ces noms de domaines implique que vous n'aurez pas le contrôle complet sur votre configuration DNS. + +* Si en revanche vous avez déjà votre propre nom de domaine, vous souhaitez probablement l'utiliser. Vous aurez donc besoin ensuite de configurer les enregistrements DNS comme expliqué [ici](/dns_config). + +!!! Oui, vous *devez* configurer un nom de domaine. Si vous n'avez pas de nom de domaine et que vous n'en voulez pas en **.nohost.me**, **.noho.st** ou **.ynh.fr**, vous pouvez utilisez un « faux » domaine comme par exemple `yolo.test` et [modifier votre fichier `/etc/hosts` **sur votre ordinateur local** pour que ce domaine pointe vers l'IP de votre serveur, comme expliqué ici](/dns_local_network). + +##### [fa=key /] Premier compte utilisateur + +[Depuis YunoHost 11.1](https://forum.yunohost.org/t/yunohost-11-1-release-sortie-de-yunohost-11-1/23378), le premier compte utilisateur est créé à cette étape. Il vous faudra choisir un nom d'utilisateur et un mot de passe raisonablement complexe. (Nous ne pouvons que souligner l'importance du choix d'un mot de passe **robuste** !) Ce compte utilisateur sera ajouté au groupe Admins, et pourra se connecter au portail utilisateur, à la webadmin, et se connecter [via **SSH**](/ssh) ou [**SFTP**](/filezilla). Les admins recevront aussi les mails envoyés à `root@votredomaine.tld` et `admin@votredomaine.tld` : ces emails peuvent être utilisés pour envoyer des informations ou des alertes techniques. Vous pourrez plus tard ajouter d'autres comptes utilisateur supplémentaire, qu'il est aussi possible d'ajouter au groupe Admins. + +Ce compte remplace l'ancien compte `admin`, qui est peut être toujours mentionné dans certaines pages de documentation. Dans ce cas, remplacez simplement `admin` par votre identifiant. + +## [fa=stethoscope /] Lancer le diagnostic + +Une fois la postinstall terminée, vous devriez pouvoir vous connecter à la webadmin en utilisant les identiants du premier compte utilisateur que vous venez de créer. + +{% if virtualbox %} +! Rappel : YunoHost dans VirtualBox ne sera sans doute pas accessible depuis l'extérieur sans une configuration supplémentaire dans les paramètres de Virtualbox. Le diagnostique se plaindra sans doute de cela. +{% endif %} + +Le système de diagnostic est conçu pour fournir un moyen facile de valider que tous les aspects critiques de votre serveur sont proprement configurés et pour vous guider dans la résolution des problèmes soulevés. Le diagnostic se lance deux fois par jour et envoie une alerte si un dysfonctionnement est détecté. + +!!! N.B. : **ne partez pas en courant** ! La première fois que vous lancerez le diagnostic, il est assez normal d'avoir plusieurs alertes rouges ou jaunes car vous devez généralement [configurer les enregistrements DNS](/dns_config) (si vous n'utilisez pas un domaine `.nohost.me`, `.noho.st` ou `.ynh.fr`), ajouter un fichier de swap {%if at_home %} et/ou [configurer la redirection des ports](/isp_box_config){% endif %}. + +!!! Si une alerte n'est pas pertinente (par exemple parce que vous ne pensez pas utiliser une fonctionnalité spécifique), il est tout à fait convenable d'indiquer le dysfonctionnement comme « À ignorer » en allant dans l'administration web > Diagnostic, et en cliquant sur le bouton « Ignorer » pour ce dysfonctionnement spécifique. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="(Recommandé) À partir de l'interface web"] +Pour lancer le diagnostic, allez dans l'Administration Web dans la partie Diagnostic. Vous devriez obtenir un écran comme celui-ci : + +[figure class="nomargin" caption="Capture d'écran du panneau de diagnostic"] +![](image://diagnostic.png?resize=100%&class=inline) +[/figure] + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +``` +yunohost diagnosis run +yunohost diagnosis show --issues --human-readable +``` +[/ui-tab] +[/ui-tabs] + +## [fa=lock /] Obtenir un certificat Let's Encrypt + +Une fois que vous avez configuré, si nécessaire, les enregistrements DNS et la redirection de ports, vous devriez être en mesure d'installer un certificat Let's Encrypt. Ceci permettra de supprimer l'étrange alerte de sécurité vue plus tôt. + +Pour plus d'instructions détaillées, ou pour en savoir plus à propos des certificats SSL/TLS, voir [la page correspondante ici](/certificate). + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] + +[figure class="nomargin" caption="Capture d'écran du panneau pour installer un certificat Let's Encrypt"] +![](image://certificate-before-LE.png?resize=100%&class=inline) +[/figure] + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +``` +yunohost domain cert install +``` +[/ui-tab] +[/ui-tabs] + +## ![](image://tada.png?resize=32&classes=inline) Félicitations ! + +Vous avez maintenant un serveur plutôt bien configuré. Si vous découvrez YunoHost, nous vous recommandons de jeter un œil à [la visite guidée](/overview). Vous devriez aussi être en mesure d'[installer vos applications favorites](/apps). N'oubliez pas de [prévoir des sauvegardes](/backup) ! + +{% endif %} +{% endif %} diff --git a/pages/02.administer/10.install/install.md b/pages/02.administer/10.install/install.md new file mode 100644 index 00000000..e9555a77 --- /dev/null +++ b/pages/02.administer/10.install/install.md @@ -0,0 +1,795 @@ +--- +title: Install YunoHost +template: docs +taxonomy: + category: docs +never_cache_twig: true +twig_first: true +process: + markdown: true + twig: true +page-toc: + active: true + depth: 2 +routes: + default: '/install' + aliases: + - '/install_iso' + - '/install_on_vps' + - '/install_manually' + - '/install_on_raspberry' + - '/install_on_arm_board' + - '/install_on_debian' + - '/install_on_virtualbox' + - '/plug_and_boot' + - '/burn_or_copy_iso' + - '/boot_and_graphical_install' + - '/postinstall' + - '/hardware' +--- +{% set image_type = 'YunoHost' %} +{% set arm, at_home, regular, rpi34, rpi012, show_legacy_arm_menu, arm_sup, arm_unsup, vps, vps_debian, vps_ynh, virtualbox, wsl, internetcube = false, false, false, false, false, false, false, false, false, false, false, false, false, false %} +{% set hardware = uri.param('hardware') %} + +{% if hardware == 'regular' %} + {% set regular = true %} +{% elseif hardware == 'internetcube' %} + {% set arm, arm_sup, internetcube = true, true, true %} + {% set image_type = 'Internet Cube' %} + {% set show_legacy_arm_menu = true %} +{% elseif hardware == 'rpi34' %} + {% set arm, rpi34 = true, true %} +{% elseif hardware == 'rpi012' %} + {% set arm, arm_unsup, rpi012 = true, true, true %} + {% set image_type = 'Raspberry Pi OS Lite (32-bit, Bullseye)' %} +{% elseif hardware == 'arm_sup' %} + {% set arm, arm_sup = true, true %} + {% set show_legacy_arm_menu = true %} +{% elseif hardware == 'arm' %} + {% set arm, arm_unsup = true, true %} + {% set image_type = 'Armbian' %} +{% elseif hardware == 'arm_unsup' %} + {% set arm, arm_unsup = true, true %} + {% set show_legacy_arm_menu = true %} + {% set image_type = 'Armbian' %} +{% elseif hardware == 'vps_debian' %} + {% set vps, vps_debian = true, true %} +{% elseif hardware == 'vps_ynh' %} + {% set vps, vps_ynh = true, true %} +{% elseif hardware == 'virtualbox' %} + {% set at_home, virtualbox = true, true %} +{% elseif hardware == 'wsl' %} + {% set wsl = true %} +{% endif %} + +{% if arm or regular %} + {% set at_home = true %} +{% endif %} + +Select the hardware on which you want install YunoHost : +[div class="flex-container"] + +[div class="flex-child hardware{%if virtualbox %} active{% endif %}"] +[[figure caption="VirtualBox"]![](image://virtualbox.png?height=75)[/figure]](/install/hardware:virtualbox) +[/div] + +[div class="flex-child hardware{%if rpi012 or rpi34 %} active{% endif %}"] +[[figure caption="Raspberry Pi"]![](image://raspberrypi.png?height=75)[/figure]](/install/hardware:rpi34) +[/div] + +[div class="flex-child hardware{%if arm_sup or (arm_unsup and not rpi012) or internetcube %} active{% endif %}"] +[[figure caption="ARM board"]![](image://olinuxino.png?height=75)[/figure]](/install/hardware:arm) +[/div] + +[div class="flex-child hardware{%if regular %} active{% endif %}"] +[[figure caption="Regular computer"]![](image://computer.png?height=75)[/figure]](/install/hardware:regular) +[/div] + +[div class="flex-child hardware{%if wsl %} active{% endif %}"] +[[figure caption="WSL"]![](image://wsl.png?height=75)[/figure]](/install/hardware:wsl) +[/div] + +[div class="flex-child hardware{%if vps_debian or vps_ynh %} active{% endif %}"] +[[figure caption="Remote server"]![](image://vps.png?height=75)[/figure]](/install/hardware:vps_debian) +[/div] + +[/div] +[div class="flex-container pt-2"] + +{% if rpi012 or rpi34 %} +[div class="flex-child hardware{%if rpi34 %} active{% endif %}"] +[[figure caption="Raspberry Pi 3 or 4"]![](image://raspberrypi.png?height=50)[/figure]](/install/hardware:rpi34) +[/div] + +[div class="flex-child hardware{%if rpi012 %} active{% endif %}"] +[[figure caption="Raspberry Pi 0, 1 or 2"]![](image://rpi1.png?height=50)[/figure]](/install/hardware:rpi012) +[/div] + +{% elseif show_legacy_arm_menu %} + +[div class="flex-child hardware{%if internetcube %} active{% endif %}"] +[[figure caption="Internet cube With VPN"]![](image://internetcube.png?height=50)[/figure]](/install/hardware:internetcube) +[/div] + +[div class="flex-child hardware{%if arm_sup and not internetcube %} active{% endif %}"] +[[figure caption="Olinuxino lime1&2 or Orange Pi PC+"]![](image://olinuxino.png?height=50)[/figure]](/install/hardware:arm_sup) +[/div] + +[div class="flex-child hardware{%if arm_unsup %} active{% endif %}"] +[[figure caption="Others boards"]![](image://odroidhc4.png?height=50)[/figure]](/install/hardware:arm_unsup) +[/div] +{% elseif vps_debian or vps_ynh %} + +[div class="flex-child hardware{%if vps_debian %} active{% endif %}"] +[[figure caption="VPS or dedicated server with Debian 11"]![](image://debian-logo.png?height=50)[/figure]](/install/hardware:vps_debian) +[/div] + +[div class="flex-child hardware{%if vps_ynh %} active{% endif %}"] +[[figure caption="VPS or dedicated server with YunoHost pre-installed"]![](image://logo.png?height=50)[/figure]](/install/hardware:vps_ynh) +[/div] + +{% endif %} + +[/div] + + +{% if hardware != '' %} + +{% if wsl %} +!! This setup is mainly meant for local testing by advanced users. Due to limitations on WSL's side (changing IP address, notably), selfhosting from it can be tricky and will not be described here. +{% endif %} + + +## [fa=list-alt /] Pre-requisites + +{% if regular %} +* A x86-compatible hardware dedicated to YunoHost: laptop, nettop, netbook, desktop with 512MB RAM and 16GB capacity (at least) +{% elseif rpi34 %} +* A Raspberry Pi 3 or 4 +{% elseif rpi012 %} +* A Raspberry Pi 0, 1 or 2 with at least 512MB RAM +{% elseif internetcube %} +* An Orange Pi PC+ or an Olinuxino Lime 1 or 2 +* A VPN with a dedicated public IP and a `.cube` file +{% elseif arm_sup %} +* An Orange Pi PC+ or an Olinuxino Lime 1 or 2 +{% elseif arm_unsup %} +* An ARM board with at least 512MB RAM +{% elseif vps_debian %} +* A dedicated or virtual private server with Debian 11 (Bullseye) (with **kernel >= 3.12**) preinstalled, 512MB RAM and 16GB capacity (at least) +{% elseif vps_ynh %} +* A dedicated or virtual private server with yunohost preinstalled, 512MB RAM and 16GB capacity (at least) +{% elseif virtualbox %} +* An x86 computer with [VirtualBox installed](https://www.virtualbox.org/wiki/Downloads) and enough RAM capacity to be able to run a small virtual machine with 1024MB RAM and 8GB capacity (at least) +{% endif %} +{% if arm %} +* A power supply (either an adapter or a MicroUSB cable) for your board; +* A microSD card: 16GB capacity (at least), [class "A1"](https://en.wikipedia.org/wiki/SD_card#Class) highly recommended (such as [this SanDisk A1 card](https://www.amazon.fr/SanDisk-microSDHC-Adaptateur-homologu%C3%A9e-Nouvelle/dp/B073JWXGNT/)); +{% endif %} +{% if regular %} +* A USB stick with at least 1GB capacity OR a standard blank CD +{% endif %} +{% if wsl %} +* Windows 10 and above +* Administration rights +* Windows Subsystem for Linux, installed from the Optional Features menu of Windows +* *Recommended:* Windows Terminal (Preview) app, installed from the Microsoft Store. Much better than the standard Terminal, as it offers shortcuts to the WSL distros. +{% endif %} +{% if at_home %} +* A [reasonable ISP](/isp), preferably with a good and unlimited upstream bandwidth +{% if not virtualbox %} +* An ethernet cable (RJ-45) to connect your server to your router. {% if rpi012 %} (Or, for Rasperry Pi Zero : and USB OTG or a wifi Dongle) {% endif %} +{% endif %} +* A computer to read this guide, flash the image and access your server. +{% else %} +* A computer or a smartphone to read this guide and access your server. +{% endif %} + +{% if virtualbox %} +! N.B. : Installing YunoHost in a VirtualBox is usually intended for testing or development. It is not convenient to run an actual server on the long-term, because the machine it's installed on probably won't be up 24/7, and because Virtualbox adds an additional layer of complexity in exposing the machine to the Internet. +{% endif %} + +{% if wsl %} +## Introduction +WSL is a nice feature of Windows 10, making Linux pseudo-distributions available through command line. Let's say pseudo, because even though they are not really like virtual machines, they rely on virtualization capacities that make their integration with Windows almost seamless. +Docker for Windows can now rely on WSL instead of Hyper-V, for example. + +! Bear in mind, this setup itself is *not* a container of any kind. If something breaks, there is no rollback capability. +! You may need to delete the Debian distro altogether and restore it whole. + +## Install Debian 11 + +Let's install YunoHost into its own distro, not altering the default one. In a PowerShell terminal: + +```bash +# Let's go in your home directory and prepare the working directories +cd ~ +mkdir -p WSL\YunoHost +# Download the Debian appx package and unzip it +curl.exe -L -o debian.zip https://aka.ms/wsl-debian-gnulinux +Expand-Archive .\debian.zip -DestinationPath .\debian +# Import the Debian base into a new distro +wsl --import YunoHost ~\WSL\YunoHost ~\debian\install.tar.gz --version 2 +# Cleanup +rmdir .\debian -R +``` + +You can now access it: run `wsl.exe -d YunoHost` + +It is under Debian 9 Stretch, so let's upgrade it: + +```bash +# In WSL +sudo sed -i 's/stretch/bullseye/g' /etc/apt/sources.list` +sudo apt update +sudo apt upgrade +sudo apt dist-upgrade +``` +## Prevent WSL from tweaking configuration files + +Edit `/etc/wsl.conf` and put the following code in it: + +``` +[network] +generateHosts = false +generateResolvConf = false +``` + +## Force the use of iptables-legacy + +Somehow the YunoHost post-installation does not like `nf_tables`, the new software replacing `iptables`. +We can still explicitely use the good ol' `iptables` though: + +```bash +# In WSL +sudo update-alternatives --set iptables /usr/sbin/iptables-legacy +sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy +``` + +## Install Systemd + +Debian on WSL does not have `systemd`, a service configuration software. +This is a key element for YunoHost, and for any decent Debian distro (seriously MS, what the heck). Let's install it: + +1. Install dotNET runtime: +```bash +# In WSL +wget https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O packages-microsoft-prod.deb +sudo dpkg -i packages-microsoft-prod.deb +sudo apt update +sudo apt install -y apt-transport-https +sudo apt update +sudo apt install -y dotnet-sdk-3.1 +``` + +2. Install [Genie](https://github.com/arkane-systems/genie): +```bash +# In WSL +# Add their repository +echo "deb [trusted=yes] https://wsl-translinux.arkane-systems.net/apt/ /" > /etc/apt/sources.list.d/wsl-translinux.list +# Install Genie +sudo apt update +sudo apt install -y systemd-genie +``` + +## Install YunoHost + +```bash +# In WSL +# Let's switch to the root user, if you were not already +sudo su +# Initialize the Genie bottle to have systemd running +genie -s +# Your hostname should have been appended with "-wsl" +# Install YunoHost +curl https://install.yunohost.org | bash -s -- -a +``` + +### Access the command line + +Always call `genie -s` while starting your distro. + +`wsl -d YunoHost -e genie -s` + +## Backup and restore the distro +### Make your first distro backup +As said before, there is no rollback capability. So let's export your fresh distro. In PowerShell: + +``` +cd ~ +wsl --export YunoHost .\WSL\YunoHost.tar.gz +``` + +### In case of crash, delete and restore the whole distro + +``` +cd ~ +wsl --unregister YunoHost +wsl --import YunoHost .\WSL\YunoHost .\WSL\YunoHost.tar.gz --version 2 +``` +{% endif %} + + +{% if vps_ynh %} +## YunoHost VPS providers + +Here are some VPS providers supporting YunoHost natively : + +[div class="flex-container"] + +[div class="flex-child"] +[[figure caption="Alsace Réseau Neutre - FR"]![](image://vps_ynh_arn.png?height=50)[/figure]](https://vps.arn-fai.net) +[/div] +[div class="flex-child"] +[[figure caption="FAImaison - FR"]![](image://vps_ynh_faimaison.svg?height=50)[/figure]](https://www.faimaison.net/services/vm.html) +[/div] +[div class="flex-child"] +[[figure caption="Association ECOWAN - FR"]![](image://vps_ynh_ecowan.png?height=50)[/figure]](https://www.ecowan.fr/vps-linux) +[/div] +[/div] +{% endif %} + + +{% if at_home %} +## [fa=download /] Download the {{image_type}} image + +{% if rpi012 %} +! Support for Rasperry Pi 0, 1 and 2 is unfortunately slowly dropping : building fresh images is complex, and RPi 0, 1 and 2 are ARM-32bit systems which will get more and more deprecated over time. Our pre-installed images are quite old. We recommend instead to [download the official Rasperry Pi OS Lite (**32-bit**, **Bullseye**)](https://downloads.raspberrypi.org/raspios_lite_armhf/images/?C=M;O=D) and installing YunoHost on top [using similar instructions as for other ARM boards](/install/hardware:arm) +{% endif %} + +{% if virtualbox or regular %} +!!! If your host OS is 32 bits, be sure to download the 32-bit image. +{% elseif arm_unsup and not rpi012 %} +[fa=external-link] Download the image for your board on Armbian's website + +!!! N.B.: you should download the image Armbian Bullseye. +{% endif %} + +!!! If you wish to check the validity of our signed images, you can [download our public key](https://forge.yunohost.org/yunohost.asc). + +{% if internetcube or arm_sup %} +! Current images are from Debian Buster (YunoHost v4.x) and will require that you perform a manual apt update command in SSH or CLI to continue updating. +! Answer Yes to the warning about switching from stable to oldstable. +{% endif %} + +
+
+
+
+ + + + + + + + +{% if not virtualbox %} + +{% if arm %} +## ![microSD card with adapter](image://sdcard_with_adapter.png?resize=100,75&class=inline) Flash the {{image_type}} image +{% else %} +## ![USB drive](image://usb_key.png?resize=100,100&class=inline) Flash the YunoHost image +{% endif %} + +Now that you downloaded the image of {{image_type}}, you should flash it on {% if arm %}a microSD card{% else %}a USB stick or a CD/DVD.{% endif %} + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="(Recommended) With Etcher"] + +Download Etcher for your operating system and install it. + +Plug your {% if arm %}SD card{% else %}USB stick{% endif %}, select your image and click "Flash" + +![Etcher](image://etcher.gif?resize=700&class=inline) + +[/ui-tab] +[ui-tab title="With USBimager"] + +Download [USBimager](https://bztsrc.gitlab.io/usbimager/) for your operating system and install it. + +Plug your {% if arm %}SD card{% else %}USB stick{% endif %}, select your image and click "Write" + +![USBimager](image://usbimager.png?resize=700&class=inline) + +[/ui-tab] +[ui-tab title="With dd"] + +If you are on GNU/Linux / macOS and know your way around command line, you may also flash your USB stick or SD card with `dd`. You can identify which device corresponds to your USB stick or SD card with `fdisk -l` or `lsblk`. A typical SD card name is something like `/dev/mmcblk0`. BE CAREFUL and make sure you got the right name. + +Then run : + +```bash +# Replace /dev/mmcblk0 if the name of your device is different... +dd if=/path/to/yunohost.img of=/dev/mmcblk0 +``` +[/ui-tab] +{% if regular %} +[ui-tab title="Burning a CD/DVD"] +For older devices, you might want to burn a CD/DVD. The software to use depends on your operating system. + +* On Windows, use [ImgBurn](http://www.imgburn.com/) to write the image file on the disc + +* On macOS, use [Disk Utility](http://support.apple.com/kb/ph7025) + +* On GNU/Linux, you have plenty of choices, like [Brasero](https://wiki.gnome.org/Apps/Brasero) or [K3b](http://www.k3b.org/) +[/ui-tab] +{% endif %} +[/ui-tabs] + +{% else %} + +## Create a new virtual machine + +![](image://virtualbox_1.png?class=inline) + +! It's okay if you can only have 32-bit versions, just be sure that you downloaded the 32-bit image previously. + +## Tweak network settings + +! This step is important to properly expose the virtual machine on the network + +Go to **Settings** > **Network**: + +* Select `Bridged adapter` +* Select your interface's name: + **wlan0** if you are connected wirelessly, or **eth0** otherwise. + +![](image://virtualbox_2.png?class=inline) + +{% endif %} + + + + + + + + + +{% if arm %} +## [fa=plug /] Power up the board + +* Plug the ethernet cable (one side on your main router, the other on your board). + * For advanced users willing to configure the board to connect to WiFi instead, see for example [here](https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md). +* Plug the SD card in your board +* (Optional) You can connect a screen+keyboard directly on your board if you want to troubleshoot the boot process or if you're more comfortable to "see what happens" or want a direct access to the board. +* Power up the board +* Wait a couple minutes while the board autoconfigure itself during the first boot +* Make sure that your computer (desktop/laptop) is connected to the same local network (i.e. same internet box) as your server. + +{% elseif virtualbox %} +## [fa=plug /] Boot up the virtual machine + +Start the virtual machine after selecting the YunoHost image. + +![](image://virtualbox_2.1.png?class=inline) + +! If you encounter the error "VT-x is not available", you probably need to enable Virtualization in the BIOS of your computer. + + +{% else %} +## [fa=plug /] Boot the machine on your USB stick + +* Plug the ethernet cable (one side on your main router, the other on your server). +* Boot up your server with the USB stick or a CD-ROM inserted, and select it as **bootable device** by pressing one of the following keys (hardware specific): +``, ``, ``, ``, `` or ``. + * N.B. : if the server was previously installed with a recent version of Windows (8+), you first need to tell Windows, to "actually reboot". This can be done somewhere in "Advanced startup options". +{% endif %} + +{% if regular or virtualbox %} +## [fa=rocket /] Launch the graphical install + +You should see a screen like this: + +[figure class="nomargin" caption="Preview of the ISO menu"] +![](image://virtualbox_3.png?class=inline) +[/figure] +[ui-tabs position="top-left" active="0" theme="lite"] + +[ui-tab title="Installation classique sur un disque entier"] + +!! N.B.: Once you have validated the keyboard layout, the installation will be launched and will completely erase the data on your hard disk! + + 1. Select `Graphical install` + 2. Select your language, your location, your keyboard layout, and eventually your timezone. + 3. The installer will then download and install all required packages. + +[/ui-tab] +[ui-tab title="Installation in expert mode"] + +The YunoHost project simplified the classic installation as much as possible in order to avoid as many people as possible being lost with questions that are too technical or related to specific cases. + +With the expert mode installation, you have more possibilities, especially concerning the exact partitioning of your storage media. You can also decide to use the classic mode and [add your disks afterwards](/external_storage). + +### Summary of the steps in expert mode: + 1. Select `Expert graphical install`. + 2. Select your language, location, keyboard layout and possibly your timezone. + 3. Partition your disks. This is where you can set up a RAID or encrypt all or part of the server. + 4. Specify a possible HTTP proxy to use for the installation of the packages + 5. Specify on which volumes grub should be installed + +### Regarding partitioning + +In general, we recommend against partitioning `/var`, `/opt`, `/usr`, `/bin`, `/etc`, `/lib`, `/tmp` and `/root` on separate partitions. This will prevent you from having to worry about full partitions that could crash your machine, cause app installations to fail, or even corrupt your databases. + +For performance reasons, it is recommended to mount your fastest storage (SSD) on the root `/`. + +If you have one or more hard drives to store data, you can choose to mount it on one of these folders depending on your usage. + +| Path | Contents | +|--------|---| +| `/home` | User folders accessible via SFTP | +| `/home/yunohost.backup/archives` | YunoHost backups to be placed ideally elsewhere than on the disks that manage the data | +| `/home/yunohost.app` | Heavy data from YunoHost applications (nextcloud, matrix...) | +| `/home/yunohost.multimedia` | Heavy data shared between several applications | +| `/var/mail` | User mail + +If you want flexibility and don't want to (re)size partitions, you can also choose to mount on `/mnt/hdd` and follow this [tutorial to mount all these folders with `mount --bind`](/external_storage). + +### About encryption +Be aware that if you encrypt all or part of your disks, you will have to type the passphrase every time you restart your server, which can be a problem if you are not on site. There are however solutions (quite difficult to implement) that allow you to type the passphrase via SSH or via a web page (search for "dropbear encrypted disk"). + +### About RAID +Keep in mind that: + * the disks in your RAIDs must be of different brands, wear and tear or batches (especially if they are SSDs) + * a RAID 1 (even without a spare) is more reliable than a RAID 5 from a probability point of view + * hardware raids are dependent on the raid card, if the card fails you will need a replacement to read and rebuild the array + +[/ui-tab] +[/ui-tabs] +{% endif %} + + +{% if rpi012 %} +## [fa=bug /] Connect to the board and hotfix the image +Raspberry Pi 1 and 0 are not totally supported due to [compilation issues for this architecture](https://github.com/YunoHost/issues/issues/1423). + +However, it is possible to fix by yourself the image before to run the initial configuration. + +To achieve this, you need to connect on your raspberry pi as root user [via SSH](/ssh) with the temporary password `yunohost`: +``` +ssh root@yunohost.local +``` +(or `yunohost-2.local`, and so on if multiple YunoHost servers are on your network) + +Then run the following commands to work around the metronome issue: +``` +mv /usr/bin/metronome{,.bkp} +mv /usr/bin/metronomectl{,.bkp} +ln -s /usr/bin/true /usr/bin/metronome +ln -s /usr/bin/true /usr/bin/metronomectl +``` + +And this one to work around the upnpc issue: +``` +sed -i 's/import miniupnpc/#import miniupnpc/g' /usr/lib/moulinette/yunohost/firewall.py +``` + +! This last command need to be run after each yunohost upgrade :/ + +{% elseif arm_unsup %} +## [fa=terminal /] Connect to the board + +Next you need to [find the local IP address of your server](/finding_the_local_ip) to connect as root user [via SSH](/ssh) with the temporary password `1234`. + +``` +ssh root@192.168.x.xxx +``` + +{% endif %} + +{% endif %} + + +{% if vps_debian or arm_unsup %} +## [fa=rocket /] Run the install script + +- Open a command line prompt on your server (either directly or [through SSH](/ssh)) +- Make sure you are root (or type `sudo -i` to become root) +- Run the following command: + +```bash +curl https://install.yunohost.org | bash +``` + +!!! If `curl` is not installed on your system, you might need to install it with `apt install curl`. +!!! Otherwise, if the command does not do anything, you might want to `apt install ca-certificates` + +!!! **Note for advanced users concerned with the `curl|bash` approach:** consider reading ["Is curl|bash insecure?"](https://sandstorm.io/news/2015-09-24-is-curl-bash-insecure-pgp-verified-install) on Sandstom's blog, and possibly [this discussion on Hacker News](https://news.ycombinator.com/item?id=12766350&noprocess). + +{% endif %} + +## [fa=cog /] Proceed with the initial configuration + +!!! If you are in the process of restoring a server using a YunoHost backup, you should skip this step and instead [restore the backup instead of the postinstall step](/backup#restoring-during-the-postinstall). + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +{%if at_home %} +In an internet browser, type **{% if internetcube %}`https://internetcube.local`{% else %}`https://yunohost.local` (or `yunohost-2.local`, and so on if multiple YunoHost servers are on your network){% endif %}**. + +!!! If this doesn't work, you can [look for the the local IP address of your server](/finding_the_local_ip). The address typically looks like `192.168.x.y`, and you should therefore type `https://192.168.x.y` in your browser's address bar. +{% else %} +You can perform the initial configuration with the web interface by typing in the address bar of your web browser **the public IP address of your server**. Typically, your VPS provider should have provided you with the IP of the server. +{% endif %} + +! During the first visit, you will very likely encounter a security warning related to the certificate used by the server. For now, your server uses a self-signed certificate. {% if not wsl %}You will later be able to add a certificate automatically recognized by web browsers as described in the [certificate documentation](/certificate). {% endif %} For now, you should add a security exception to accept the current certificate. (Though, PLEASE, do not take the habit of blindly accepting this kind of security alert!) + +{% if not internetcube %} +You should then land on this page : + +[figure class="nomargin" caption="Preview of the Web initial configuration page"] +![Initial configuration page](image://postinstall_web.png?resize=100%&class=inline) +[/figure] + +{% endif %} +[/ui-tab] +[ui-tab title="From the command line"] + +You can also perform the postinstallation with the command `yunohost tools postinstall` directly on the server, or [via SSH](/ssh). + +[figure class="nomargin" caption="Preview of the command-line post-installation"] +![Initial configuration with CLI](image://postinstall_cli.png?resize=100%&class=inline) +[/figure] + +[/ui-tab] +[/ui-tabs] + +{% if not internetcube %} + +##### [fa=globe /] Main domain + +This will be the domain used by your server's users to access the **authentication portal**. You can later add other domains, and change which one is the main domain if needed. + +{% if not wsl %} + +* If you're new to self-hosting and do not already have a domain name, we recommend using a **.nohost.me** / **.noho.st** / **.ynh.fr** (e.g. `homersimpson.nohost.me`). Provided that it's not already taken, the domain will be configured automatically and you won't need any further configuration step. Please note that the downside is that you won't have full-control over the DNS configuration. + +* If you already own a domain name, you probably want to use it here. You will later need to configure DNS records as explained [here](/dns_config). + +!!! Yes, you *have to* configure a domain name. If you don't have any domain name and don't want a **.nohost.me** / **.noho.st** / **.ynh.fr** either, you can set up a dummy domain such as `yolo.test` and tweak your **local** `/etc/hosts` file such that this dummy domain [points to the appropriate IP, as explained here](/dns_local_network). + +{% else %} + +You will have to choose a fake domain, since it will not be accessible from outside. +For example, `ynh.wsl`. The tricky part is advertising this domain to your host. + +Alter your `C:\Windows\System32\drivers\etc\hosts` file. You should have a line starting by `::1`, update it or add it if needed to get: + +``` +::1 ynh.wsl localhost +``` + +If you want to create subdomains, do not forget to add them in the `hosts` file too: + +``` +::1 ynh.wsl subdomain.ynh.wsl localhost +``` + +{% endif %} + +##### [fa=key /] First user + +[Since YunoHost 11.1](https://forum.yunohost.org/t/yunohost-11-1-release-sortie-de-yunohost-11-1/23378), the first user is now created at this stage. You should pick a username and a reasonably complex password. (We cannot stress enough that the password should be **robust**!) This user will be added to the Admins group, and will therefore be able to access the user portal, the web admin interface, and connect [via **SSH**](/ssh) or [**SFTP**](/filezilla). Admins will also receive emails sent to `root@yourdomain.tld` and `admin@yourdomain.tld` : these emails may be used to send technical informations or alerts. You can later add additional users, which you can also add to the Admins group. + +This user replaces the old `admin` user, which some old documentation page may still refer to. In which case : just replace `admin` with your username. + + +## [fa=stethoscope /] Run the initial diagnosis + +Once the postinstall is done, you should be able to actually log in the web admin interface using the credentials of the first user you just created. + +{% if wsl %} +! Reminder: YunoHost in WSL will likely not be reachable from outside, and real domains and certificates won't be able to be assigned to it. +{% endif %} +{% if virtualbox %} +! Reminder: YunoHost in VirtualBox will likely not be reachable from outside without further network configuration in Virtualbox's settings. The diagnosis will probably complain about this. +{% endif %} + +The diagnosis system is meant to provide an easy way to validate that all critical aspects of your server are properly configured - and guide you in how to fix issues. The diagnosis will run twice a day and send an alert if issues are detected. + +!!! N.B. : **don't run away** ! The first time you run the diagnosis, it is quite expected to see a bunch of yellow/red alerts because you typically need to [configure DNS records](/dns_config) (if not using a `.nohost.me`/`noho.st`/`ynh.fr` domain), add a swapfile if not enough ram {% if at_home %} and/or [port forwarding](/isp_box_config){% endif %}. + +!!! If an alert is not relevant (for example because you don't intend on using a specific feature), it is perfectly fine to flag the issue as 'ignored' by going in the webadmin > Diagnosis, and clicking the ignore button for this specifc issue. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="(Recommended) From the web interface"] +To run a diagnosis, go on Web Admin in the Diagnosis section. Click Run initial diagnosis and you should get a screen like this : + +[figure class="nomargin" caption="Preview of the diagnostic panel"] +![](image://diagnostic.png?resize=100%&class=inline) +[/figure] + +[/ui-tab] +[ui-tab title="From the command line"] +``` +yunohost diagnosis run +yunohost diagnosis show --issues --human-readable +``` +[/ui-tab] +[/ui-tabs] + +## [fa=lock /] Get a Let's Encrypt certificate + +Once you configured DNS records and port forwarding (if needed), you should be able to install a Let's Encrypt certificate. This will get rid of the spooky security warning from earlier for new visitors. + +For more detailed instructions, or to lean more about SSL/TLS certificates, see [the corresponding page here](/certificate). + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] + +Go in Domains > Click on your domain > SSL Certificate + +[figure class="nomargin" caption="Preview of the diagnostic panel"] +![](image://certificate-before-LE.png?resize=100%&class=inline) +[/figure] + +[/ui-tab] +[ui-tab title="From the command line"] +``` +yunohost domain cert install +``` +[/ui-tab] +[/ui-tabs] + +## ![](image://tada.png?resize=32&classes=inline) Congratz! + +You now have a pretty well configured server. If you're new to YunoHost, we recommend to have a look at [the guided tour](/overview). You should also be able to [install your favourite applications](/apps). Don't forget to [plan backups](/backup) ! + +{% endif %} +{% endif %} diff --git a/pages/02.administer/10.install/install.ru.md b/pages/02.administer/10.install/install.ru.md new file mode 100644 index 00000000..922ab16a --- /dev/null +++ b/pages/02.administer/10.install/install.ru.md @@ -0,0 +1,795 @@ +--- +title: Установка YunoHost +template: docs +taxonomy: + category: docs +never_cache_twig: true +twig_first: true +process: + markdown: true + twig: true +page-toc: + active: true + depth: 2 +routes: + default: '/install' + aliases: + - '/install_iso' + - '/install_on_vps' + - '/install_manually' + - '/install_on_raspberry' + - '/install_on_arm_board' + - '/install_on_debian' + - '/install_on_virtualbox' + - '/plug_and_boot' + - '/burn_or_copy_iso' + - '/boot_and_graphical_install' + - '/postinstall' + - '/hardware' +--- +{% set image_type = 'YunoHost' %} +{% set arm, at_home, regular, rpi34, rpi012, show_legacy_arm_menu, arm_sup, arm_unsup, vps, vps_debian, vps_ynh, virtualbox, wsl, internetcube = false, false, false, false, false, false, false, false, false, false, false, false, false, false %} +{% set hardware = uri.param('hardware') %} + +{% if hardware == 'regular' %} + {% set regular = true %} +{% elseif hardware == 'internetcube' %} + {% set arm, arm_sup, internetcube = true, true, true %} + {% set image_type = 'Internet Cube' %} + {% set show_legacy_arm_menu = true %} +{% elseif hardware == 'rpi34' %} + {% set arm, rpi34 = true, true %} +{% elseif hardware == 'rpi012' %} + {% set arm, arm_unsup, rpi012 = true, true, true %} + {% set image_type = 'Raspberry Pi OS Lite (32-bit, Bullseye)' %} +{% elseif hardware == 'arm_sup' %} + {% set arm, arm_sup = true, true %} + {% set show_legacy_arm_menu = true %} +{% elseif hardware == 'arm' %} + {% set arm, arm_unsup = true, true %} + {% set image_type = 'Armbian' %} +{% elseif hardware == 'arm_unsup' %} + {% set arm, arm_unsup = true, true %} + {% set show_legacy_arm_menu = true %} + {% set image_type = 'Armbian' %} +{% elseif hardware == 'vps_debian' %} + {% set vps, vps_debian = true, true %} +{% elseif hardware == 'vps_ynh' %} + {% set vps, vps_ynh = true, true %} +{% elseif hardware == 'virtualbox' %} + {% set at_home, virtualbox = true, true %} +{% elseif hardware == 'wsl' %} + {% set wsl = true %} +{% endif %} + +{% if arm or regular %} + {% set at_home = true %} +{% endif %} + +Выберите оборудование, на которое вы хотите установить YunoHost : +[div class="flex-container"] + +[div class="flex-child hardware{%if virtualbox %} active{% endif %}"] +[[figure caption="VirtualBox"]![](image://virtualbox.png?height=75)[/figure]](/install/hardware:virtualbox) +[/div] + +[div class="flex-child hardware{%if rpi012 or rpi34 %} active{% endif %}"] +[[figure caption="Raspberry Pi"]![](image://raspberrypi.png?height=75)[/figure]](/install/hardware:rpi34) +[/div] + +[div class="flex-child hardware{%if arm_sup or (arm_unsup and not rpi012) or internetcube %} active{% endif %}"] +[[figure caption="ARM платы"]![](image://olinuxino.png?height=75)[/figure]](/install/hardware:arm) +[/div] + +[div class="flex-child hardware{%if regular %} active{% endif %}"] +[[figure caption="Обычный компьютер"]![](image://computer.png?height=75)[/figure]](/install/hardware:regular) +[/div] + +[div class="flex-child hardware{%if wsl %} active{% endif %}"] +[[figure caption="WSL"]![](image://wsl.png?height=75)[/figure]](/install/hardware:wsl) +[/div] + +[div class="flex-child hardware{%if vps_debian or vps_ynh %} active{% endif %}"] +[[figure caption="Удалённый сервер"]![](image://vps.png?height=75)[/figure]](/install/hardware:vps_debian) +[/div] + +[/div] +[div class="flex-container pt-2"] + +{% if rpi012 or rpi34 %} +[div class="flex-child hardware{%if rpi34 %} active{% endif %}"] +[[figure caption="Raspberry Pi 3 или 4"]![](image://raspberrypi.png?height=50)[/figure]](/install/hardware:rpi34) +[/div] + +[div class="flex-child hardware{%if rpi012 %} active{% endif %}"] +[[figure caption="Raspberry Pi 0, 1 или 2"]![](image://rpi1.png?height=50)[/figure]](/install/hardware:rpi012) +[/div] + +{% elseif show_legacy_arm_menu %} + +[div class="flex-child hardware{%if internetcube %} active{% endif %}"] +[[figure caption="Internet cube с VPN"]![](image://internetcube.png?height=50)[/figure]](/install/hardware:internetcube) +[/div] + +[div class="flex-child hardware{%if arm_sup and not internetcube %} active{% endif %}"] +[[figure caption="Olinuxino lime1&2 или Orange Pi PC+"]![](image://olinuxino.png?height=50)[/figure]](/install/hardware:arm_sup) +[/div] + +[div class="flex-child hardware{%if arm_unsup %} active{% endif %}"] +[[figure caption="Другие платы"]![](image://odroidhc4.png?height=50)[/figure]](/install/hardware:arm_unsup) +[/div] +{% elseif vps_debian or vps_ynh %} + +[div class="flex-child hardware{%if vps_debian %} active{% endif %}"] +[[figure caption="VPS или выделенный сервер с Debian 11"]![](image://debian-logo.png?height=50)[/figure]](/install/hardware:vps_debian) +[/div] + +[div class="flex-child hardware{%if vps_ynh %} active{% endif %}"] +[[figure caption="VPS или выделенный сервер с предустановленным YunoHost"]![](image://logo.png?height=50)[/figure]](/install/hardware:vps_ynh) +[/div] + +{% endif %} + +[/div] + + +{% if hardware != '' %} + +{% if wsl %} +!! Эта настройка в основном предназначена для локального тестирования продвинутыми пользователями. Из-за ограничений на стороне WSL (в частности, изменение IP-адреса) самостоятельный хостинг с него может быть сложным и здесь описываться не будет. +{% endif %} + + +## [fa=list-alt /] Предварительные условия + +{% if regular %} +* x86-совместимое оборудование, предназначенное для YunoHost: ноутбук, неттоп, нетбук, настольный компьютер с 512 МБ оперативной памяти и емкостью 16 ГБ (не менее) +{% elseif rpi34 %} +* Raspberry Pi 3 or 4 +{% elseif rpi012 %} +* Raspberry Pi 0, 1 или 2 с ОЗУ не менее 512 МБ +{% elseif internetcube %} +* Orange Pi PC+ или Olinuxino Lime 1 или 2 +* VPN с выделенным общедоступным IP-адресом и файлом `.cube` +{% elseif arm_sup %} +* Orange Pi PC+ или Olinuxino Lime 1 или 2 +{% elseif arm_unsup %} +* Плата ARM с объемом оперативной памяти не менее 512 МБ +{% elseif vps_debian %} +* Выделенный или виртуальный частный сервер с Debian 11 (Bullseye) (с **kernel >= 3.12**) предустановленный, 512 МБ оперативной памяти и емкость 16 ГБ (не менее) +{% elseif vps_ynh %} +* Выделенный или виртуальный частный сервер с предустановленным YunoHost, 512 МБ оперативной памяти и емкостью не менее 16 ГБ +{% elseif virtualbox %} +* Компьютер x86 с [установленным VirtualBox](https://www.virtualbox.org/wiki/Downloads) и достаточный объем оперативной памяти, чтобы иметь возможность запускать небольшую виртуальную машину с 1024 МБ оперативной памяти и емкостью 8 ГБ (как минимум). +{% endif %} +{% if arm %} +*Источник питания (либо адаптер, либо кабель microUSB) для вашей платы; +* Карта microSD: емкость 16 ГБ (не менее), [класса "A1"](https://club.dns-shop.ru/blog/t-127-kartyi-pamyati/59683-klassyi-skorosti-kart-pamyati-kak-razobratsya-i-chto-brat/#sub_Klass__skorosti__dlya__rabotyi__s__prilojeniyami) настоятельно рекомендуется (например, [эта SanDisk A1 карта](https://www.dns-shop.ru/product/dd976fc32e66ed20/karta-pamati-sandisk-ultra-microsdxc-64-gb-sdsqua4-064g-gn6mn/)); +{% endif %} +{% if regular %} +* USB-накопитель емкостью не менее 1 ГБ или стандартный чистый компакт-диск +{% endif %} +{% if wsl %} +* Windows 10 и выше +* Права администратора +* Подсистема Windows для Linux, устанавливаемая из *Включение или отключение компонентов Windows* +* *Рекомендуется:* Приложение Windows Terminal (предварительный просмотр), установленное из магазина Microsoft Store. Намного лучше, чем стандартный терминал, поскольку он предлагает быстрые пути к дистрибутивам WSL. +{% endif %} +{% if at_home %} +* [хороший Интернет-провайдер](/isp), предпочтительно с хорошей и неограниченной восходящей полосой пропускания +{% if not virtualbox %} +* Кабель Ethernet (RJ-45) для подключения вашего сервера к маршрутизатору. {% if rpi012 %} (Или, для Rasperry Pi Zero: и USB OTG или wifi-адаптер) {% endif %} +{% endif %} +* Компьютер, чтобы прочитать это руководство, прошейте изображение и получите доступ к вашему серверу. +{% else %} +* Компьютер или смартфон, чтобы прочитать это руководство и получить доступ к вашему серверу. +{% endif %} + +{% if virtualbox %} +! Примечание: Установка YunoHost в VirtualBox обычно предназначена для тестирования или разработки. Запускать реальный сервер в долгосрочной перспективе неудобно, потому что машина, на которой он установлен, вероятно, не будет работать круглосуточно, а также потому, что Virtualbox добавляет дополнительный уровень сложности при подключении машины к Интернету. +{% endif %} + +{% if wsl %} +## Вступление +WSL is a nice feature of Windows 10, making Linux pseudo-distributions available through command line. Let's say pseudo, because even though they are not really like virtual machines, they rely on virtualization capacities that make their integration with Windows almost seamless. +Docker for Windows can now rely on WSL instead of Hyper-V, for example. + +! Bear in mind, this setup itself is *not* a container of any kind. If something breaks, there is no rollback capability. +! You may need to delete the Debian distro altogether and restore it whole. + +## Install Debian 11 + +Let's install YunoHost into its own distro, not altering the default one. In a PowerShell terminal: + +```bash +# Let's go in your home directory and prepare the working directories +cd ~ +mkdir -p WSL\YunoHost +# Download the Debian appx package and unzip it +curl.exe -L -o debian.zip https://aka.ms/wsl-debian-gnulinux +Expand-Archive .\debian.zip -DestinationPath .\debian +# Import the Debian base into a new distro +wsl --import YunoHost ~\WSL\YunoHost ~\debian\install.tar.gz --version 2 +# Cleanup +rmdir .\debian -R +``` + +You can now access it: run `wsl.exe -d YunoHost` + +It is under Debian 9 Stretch, so let's upgrade it: + +```bash +# In WSL +sudo sed -i 's/stretch/bullseye/g' /etc/apt/sources.list` +sudo apt update +sudo apt upgrade +sudo apt dist-upgrade +``` +## Prevent WSL from tweaking configuration files + +Edit `/etc/wsl.conf` and put the following code in it: + +``` +[network] +generateHosts = false +generateResolvConf = false +``` + +## Force the use of iptables-legacy + +Somehow the YunoHost post-installation does not like `nf_tables`, the new software replacing `iptables`. +We can still explicitely use the good ol' `iptables` though: + +```bash +# In WSL +sudo update-alternatives --set iptables /usr/sbin/iptables-legacy +sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy +``` + +## Install Systemd + +Debian on WSL does not have `systemd`, a service configuration software. +This is a key element for YunoHost, and for any decent Debian distro (seriously MS, what the heck). Let's install it: + +1. Install dotNET runtime: +```bash +# In WSL +wget https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O packages-microsoft-prod.deb +sudo dpkg -i packages-microsoft-prod.deb +sudo apt update +sudo apt install -y apt-transport-https +sudo apt update +sudo apt install -y dotnet-sdk-3.1 +``` + +2. Install [Genie](https://github.com/arkane-systems/genie): +```bash +# In WSL +# Add their repository +echo "deb [trusted=yes] https://wsl-translinux.arkane-systems.net/apt/ /" > /etc/apt/sources.list.d/wsl-translinux.list +# Install Genie +sudo apt update +sudo apt install -y systemd-genie +``` + +## Install YunoHost + +```bash +# In WSL +# Let's switch to the root user, if you were not already +sudo su +# Initialize the Genie bottle to have systemd running +genie -s +# Your hostname should have been appended with "-wsl" +# Install YunoHost +curl https://install.yunohost.org | bash -s -- -a +``` + +### Access the command line + +Always call `genie -s` while starting your distro. + +`wsl -d YunoHost -e genie -s` + +## Backup and restore the distro +### Make your first distro backup +As said before, there is no rollback capability. So let's export your fresh distro. In PowerShell: + +``` +cd ~ +wsl --export YunoHost .\WSL\YunoHost.tar.gz +``` + +### In case of crash, delete and restore the whole distro + +``` +cd ~ +wsl --unregister YunoHost +wsl --import YunoHost .\WSL\YunoHost .\WSL\YunoHost.tar.gz --version 2 +``` +{% endif %} + + +{% if vps_ynh %} +## YunoHost VPS providers + +Here are some VPS providers supporting YunoHost natively : + +[div class="flex-container"] + +[div class="flex-child"] +[[figure caption="Alsace Réseau Neutre - FR"]![](image://vps_ynh_arn.png?height=50)[/figure]](https://vps.arn-fai.net) +[/div] +[div class="flex-child"] +[[figure caption="FAImaison - FR"]![](image://vps_ynh_faimaison.svg?height=50)[/figure]](https://www.faimaison.net/services/vm.html) +[/div] +[div class="flex-child"] +[[figure caption="Association ECOWAN - FR"]![](image://vps_ynh_ecowan.png?height=50)[/figure]](https://www.ecowan.fr/vps-linux) +[/div] +[/div] +{% endif %} + + +{% if at_home %} +## [fa=download /] Download the {{image_type}} image + +{% if rpi012 %} +! Support for Rasperry Pi 0, 1 and 2 is unfortunately slowly dropping : building fresh images is complex, and RPi 0, 1 and 2 are ARM-32bit systems which will get more and more deprecated over time. Our pre-installed images are quite old. We recommend instead to [download the official Rasperry Pi OS Lite (**32-bit**, **Bullseye**)](https://downloads.raspberrypi.org/raspios_lite_armhf/images/?C=M;O=D) and installing YunoHost on top [using similar instructions as for other ARM boards](/install/hardware:arm) +{% endif %} + +{% if virtualbox or regular %} +!!! If your host OS is 32 bits, be sure to download the 32-bit image. +{% elseif arm_unsup and not rpi012 %} +[fa=external-link] Download the image for your board on Armbian's website + +!!! N.B.: you should download the image Armbian Bullseye. +{% endif %} + +!!! If you wish to check the validity of our signed images, you can [download our public key](https://forge.yunohost.org/yunohost.asc). + +{% if internetcube or arm_sup %} +! Current images are from Debian Buster (YunoHost v4.x) and will require that you perform a manual apt update command in SSH or CLI to continue updating. +! Answer Yes to the warning about switching from stable to oldstable. +{% endif %} + +
+
+
+
+ + + + + + + + +{% if not virtualbox %} + +{% if arm %} +## ![microSD card with adapter](image://sdcard_with_adapter.png?resize=100,75&class=inline) Flash the {{image_type}} image +{% else %} +## ![USB drive](image://usb_key.png?resize=100,100&class=inline) Flash the YunoHost image +{% endif %} + +Now that you downloaded the image of {{image_type}}, you should flash it on {% if arm %}a microSD card{% else %}a USB stick or a CD/DVD.{% endif %} + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="(Recommended) With Etcher"] + +Download Etcher for your operating system and install it. + +Plug your {% if arm %}SD card{% else %}USB stick{% endif %}, select your image and click "Flash" + +![Etcher](image://etcher.gif?resize=700&class=inline) + +[/ui-tab] +[ui-tab title="With USBimager"] + +Download [USBimager](https://bztsrc.gitlab.io/usbimager/) for your operating system and install it. + +Plug your {% if arm %}SD card{% else %}USB stick{% endif %}, select your image and click "Write" + +![USBimager](image://usbimager.png?resize=700&class=inline) + +[/ui-tab] +[ui-tab title="With dd"] + +If you are on GNU/Linux / macOS and know your way around command line, you may also flash your USB stick or SD card with `dd`. You can identify which device corresponds to your USB stick or SD card with `fdisk -l` or `lsblk`. A typical SD card name is something like `/dev/mmcblk0`. BE CAREFUL and make sure you got the right name. + +Then run : + +```bash +# Replace /dev/mmcblk0 if the name of your device is different... +dd if=/path/to/yunohost.img of=/dev/mmcblk0 +``` +[/ui-tab] +{% if regular %} +[ui-tab title="Burning a CD/DVD"] +For older devices, you might want to burn a CD/DVD. The software to use depends on your operating system. + +* On Windows, use [ImgBurn](http://www.imgburn.com/) to write the image file on the disc + +* On macOS, use [Disk Utility](http://support.apple.com/kb/ph7025) + +* On GNU/Linux, you have plenty of choices, like [Brasero](https://wiki.gnome.org/Apps/Brasero) or [K3b](http://www.k3b.org/) +[/ui-tab] +{% endif %} +[/ui-tabs] + +{% else %} + +## Create a new virtual machine + +![](image://virtualbox_1.png?class=inline) + +! It's okay if you can only have 32-bit versions, just be sure that you downloaded the 32-bit image previously. + +## Tweak network settings + +! This step is important to properly expose the virtual machine on the network + +Go to **Settings** > **Network**: + +* Select `Bridged adapter` +* Select your interface's name: + **wlan0** if you are connected wirelessly, or **eth0** otherwise. + +![](image://virtualbox_2.png?class=inline) + +{% endif %} + + + + + + + + + +{% if arm %} +## [fa=plug /] Power up the board + +* Plug the ethernet cable (one side on your main router, the other on your board). + * For advanced users willing to configure the board to connect to WiFi instead, see for example [here](https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md). +* Plug the SD card in your board +* (Optional) You can connect a screen+keyboard directly on your board if you want to troubleshoot the boot process or if you're more comfortable to "see what happens" or want a direct access to the board. +* Power up the board +* Wait a couple minutes while the board autoconfigure itself during the first boot +* Make sure that your computer (desktop/laptop) is connected to the same local network (i.e. same internet box) as your server. + +{% elseif virtualbox %} +## [fa=plug /] Boot up the virtual machine + +Start the virtual machine after selecting the YunoHost image. + +![](image://virtualbox_2.1.png?class=inline) + +! If you encounter the error "VT-x is not available", you probably need to enable Virtualization in the BIOS of your computer. + + +{% else %} +## [fa=plug /] Boot the machine on your USB stick + +* Plug the ethernet cable (one side on your main router, the other on your server). +* Boot up your server with the USB stick or a CD-ROM inserted, and select it as **bootable device** by pressing one of the following keys (hardware specific): +``, ``, ``, ``, `` or ``. + * N.B. : if the server was previously installed with a recent version of Windows (8+), you first need to tell Windows, to "actually reboot". This can be done somewhere in "Advanced startup options". +{% endif %} + +{% if regular or virtualbox %} +## [fa=rocket /] Launch the graphical install + +You should see a screen like this: + +[figure class="nomargin" caption="Preview of the ISO menu"] +![](image://virtualbox_3.png?class=inline) +[/figure] +[ui-tabs position="top-left" active="0" theme="lite"] + +[ui-tab title="Installation classique sur un disque entier"] + +!! N.B.: Once you have validated the keyboard layout, the installation will be launched and will completely erase the data on your hard disk! + + 1. Select `Graphical install` + 2. Select your language, your location, your keyboard layout, and eventually your timezone. + 3. The installer will then download and install all required packages. + +[/ui-tab] +[ui-tab title="Installation in expert mode"] + +The YunoHost project simplified the classic installation as much as possible in order to avoid as many people as possible being lost with questions that are too technical or related to specific cases. + +With the expert mode installation, you have more possibilities, especially concerning the exact partitioning of your storage media. You can also decide to use the classic mode and [add your disks afterwards](/external_storage). + +### Summary of the steps in expert mode: + 1. Select `Expert graphical install`. + 2. Select your language, location, keyboard layout and possibly your timezone. + 3. Partition your disks. This is where you can set up a RAID or encrypt all or part of the server. + 4. Specify a possible HTTP proxy to use for the installation of the packages + 5. Specify on which volumes grub should be installed + +### Regarding partitioning + +In general, we recommend against partitioning `/var`, `/opt`, `/usr`, `/bin`, `/etc`, `/lib`, `/tmp` and `/root` on separate partitions. This will prevent you from having to worry about full partitions that could crash your machine, cause app installations to fail, or even corrupt your databases. + +For performance reasons, it is recommended to mount your fastest storage (SSD) on the root `/`. + +If you have one or more hard drives to store data, you can choose to mount it on one of these folders depending on your usage. + +| Path | Contents | +|--------|---| +| `/home` | User folders accessible via SFTP | +| `/home/yunohost.backup/archives` | YunoHost backups to be placed ideally elsewhere than on the disks that manage the data | +| `/home/yunohost.app` | Heavy data from YunoHost applications (nextcloud, matrix...) | +| `/home/yunohost.multimedia` | Heavy data shared between several applications | +| `/var/mail` | User mail + +If you want flexibility and don't want to (re)size partitions, you can also choose to mount on `/mnt/hdd` and follow this [tutorial to mount all these folders with `mount --bind`](/external_storage). + +### About encryption +Be aware that if you encrypt all or part of your disks, you will have to type the passphrase every time you restart your server, which can be a problem if you are not on site. There are however solutions (quite difficult to implement) that allow you to type the passphrase via SSH or via a web page (search for "dropbear encrypted disk"). + +### About RAID +Keep in mind that: + * the disks in your RAIDs must be of different brands, wear and tear or batches (especially if they are SSDs) + * a RAID 1 (even without a spare) is more reliable than a RAID 5 from a probability point of view + * hardware raids are dependent on the raid card, if the card fails you will need a replacement to read and rebuild the array + +[/ui-tab] +[/ui-tabs] +{% endif %} + + +{% if rpi012 %} +## [fa=bug /] Connect to the board and hotfix the image +Raspberry Pi 1 and 0 are not totally supported due to [compilation issues for this architecture](https://github.com/YunoHost/issues/issues/1423). + +However, it is possible to fix by yourself the image before to run the initial configuration. + +To achieve this, you need to connect on your raspberry pi as root user [via SSH](/ssh) with the temporary password `yunohost`: +``` +ssh root@yunohost.local +``` +(or `yunohost-2.local`, and so on if multiple YunoHost servers are on your network) + +Then run the following commands to work around the metronome issue: +``` +mv /usr/bin/metronome{,.bkp} +mv /usr/bin/metronomectl{,.bkp} +ln -s /usr/bin/true /usr/bin/metronome +ln -s /usr/bin/true /usr/bin/metronomectl +``` + +And this one to work around the upnpc issue: +``` +sed -i 's/import miniupnpc/#import miniupnpc/g' /usr/lib/moulinette/yunohost/firewall.py +``` + +! This last command need to be run after each yunohost upgrade :/ + +{% elseif arm_unsup %} +## [fa=terminal /] Connect to the board + +Next you need to [find the local IP address of your server](/finding_the_local_ip) to connect as root user [via SSH](/ssh) with the temporary password `1234`. + +``` +ssh root@192.168.x.xxx +``` + +{% endif %} + +{% endif %} + + +{% if vps_debian or arm_unsup %} +## [fa=rocket /] Run the install script + +- Open a command line prompt on your server (either directly or [through SSH](/ssh)) +- Make sure you are root (or type `sudo -i` to become root) +- Run the following command: + +```bash +curl https://install.yunohost.org | bash +``` + +!!! If `curl` is not installed on your system, you might need to install it with `apt install curl`. +!!! Otherwise, if the command does not do anything, you might want to `apt install ca-certificates` + +!!! **Note for advanced users concerned with the `curl|bash` approach:** consider reading ["Is curl|bash insecure?"](https://sandstorm.io/news/2015-09-24-is-curl-bash-insecure-pgp-verified-install) on Sandstom's blog, and possibly [this discussion on Hacker News](https://news.ycombinator.com/item?id=12766350&noprocess). + +{% endif %} + +## [fa=cog /] Proceed with the initial configuration + +!!! If you are in the process of restoring a server using a YunoHost backup, you should skip this step and instead [restore the backup instead of the postinstall step](/backup#restoring-during-the-postinstall). + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +{%if at_home %} +In an internet browser, type **{% if internetcube %}`https://internetcube.local`{% else %}`https://yunohost.local` (or `yunohost-2.local`, and so on if multiple YunoHost servers are on your network){% endif %}**. + +!!! If this doesn't work, you can [look for the the local IP address of your server](/finding_the_local_ip). The address typically looks like `192.168.x.y`, and you should therefore type `https://192.168.x.y` in your browser's address bar. +{% else %} +You can perform the initial configuration with the web interface by typing in the address bar of your web browser **the public IP address of your server**. Typically, your VPS provider should have provided you with the IP of the server. +{% endif %} + +! During the first visit, you will very likely encounter a security warning related to the certificate used by the server. For now, your server uses a self-signed certificate. {% if not wsl %}You will later be able to add a certificate automatically recognized by web browsers as described in the [certificate documentation](/certificate). {% endif %} For now, you should add a security exception to accept the current certificate. (Though, PLEASE, do not take the habit of blindly accepting this kind of security alert!) + +{% if not internetcube %} +You should then land on this page : + +[figure class="nomargin" caption="Preview of the Web initial configuration page"] +![Initial configuration page](image://postinstall_web.png?resize=100%&class=inline) +[/figure] + +{% endif %} +[/ui-tab] +[ui-tab title="From the command line"] + +You can also perform the postinstallation with the command `yunohost tools postinstall` directly on the server, or [via SSH](/ssh). + +[figure class="nomargin" caption="Preview of the command-line post-installation"] +![Initial configuration with CLI](image://postinstall_cli.png?resize=100%&class=inline) +[/figure] + +[/ui-tab] +[/ui-tabs] + +{% if not internetcube %} + +##### [fa=globe /] Main domain + +This will be the domain used by your server's users to access the **authentication portal**. You can later add other domains, and change which one is the main domain if needed. + +{% if not wsl %} + +* If you're new to self-hosting and do not already have a domain name, we recommend using a **.nohost.me** / **.noho.st** / **.ynh.fr** (e.g. `homersimpson.nohost.me`). Provided that it's not already taken, the domain will be configured automatically and you won't need any further configuration step. Please note that the downside is that you won't have full-control over the DNS configuration. + +* If you already own a domain name, you probably want to use it here. You will later need to configure DNS records as explained [here](/dns_config). + +!!! Yes, you *have to* configure a domain name. If you don't have any domain name and don't want a **.nohost.me** / **.noho.st** / **.ynh.fr** either, you can set up a dummy domain such as `yolo.test` and tweak your **local** `/etc/hosts` file such that this dummy domain [points to the appropriate IP, as explained here](/dns_local_network). + +{% else %} + +You will have to choose a fake domain, since it will not be accessible from outside. +For example, `ynh.wsl`. The tricky part is advertising this domain to your host. + +Alter your `C:\Windows\System32\drivers\etc\hosts` file. You should have a line starting by `::1`, update it or add it if needed to get: + +``` +::1 ynh.wsl localhost +``` + +If you want to create subdomains, do not forget to add them in the `hosts` file too: + +``` +::1 ynh.wsl subdomain.ynh.wsl localhost +``` + +{% endif %} + +##### [fa=key /] First user + +[Since YunoHost 11.1](https://forum.yunohost.org/t/yunohost-11-1-release-sortie-de-yunohost-11-1/23378), the first user is now created at this stage. You should pick a username and a reasonably complex password. (We cannot stress enough that the password should be **robust**!) This user will be added to the Admins group, and will therefore be able to access the user portal, the web admin interface, and connect [via **SSH**](/ssh) or [**SFTP**](/filezilla). Admins will also receive emails sent to `root@yourdomain.tld` and `admin@yourdomain.tld` : these emails may be used to send technical informations or alerts. You can later add additional users, which you can also add to the Admins group. + +This user replaces the old `admin` user, which some old documentation page may still refer to. In which case : just replace `admin` with your username. + + +## [fa=stethoscope /] Run the initial diagnosis + +Once the postinstall is done, you should be able to actually log in the web admin interface using the credentials of the first user you just created. + +{% if wsl %} +! Reminder: YunoHost in WSL will likely not be reachable from outside, and real domains and certificates won't be able to be assigned to it. +{% endif %} +{% if virtualbox %} +! Reminder: YunoHost in VirtualBox will likely not be reachable from outside without further network configuration in Virtualbox's settings. The diagnosis will probably complain about this. +{% endif %} + +The diagnosis system is meant to provide an easy way to validate that all critical aspects of your server are properly configured - and guide you in how to fix issues. The diagnosis will run twice a day and send an alert if issues are detected. + +!!! N.B. : **don't run away** ! The first time you run the diagnosis, it is quite expected to see a bunch of yellow/red alerts because you typically need to [configure DNS records](/dns_config) (if not using a `.nohost.me`/`noho.st`/`ynh.fr` domain), add a swapfile if not enough ram {% if at_home %} and/or [port forwarding](/isp_box_config){% endif %}. + +!!! If an alert is not relevant (for example because you don't intend on using a specific feature), it is perfectly fine to flag the issue as 'ignored' by going in the webadmin > Diagnosis, and clicking the ignore button for this specifc issue. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="(Recommended) From the web interface"] +To run a diagnosis, go on Web Admin in the Diagnosis section. Click Run initial diagnosis and you should get a screen like this : + +[figure class="nomargin" caption="Preview of the diagnostic panel"] +![](image://diagnostic.png?resize=100%&class=inline) +[/figure] + +[/ui-tab] +[ui-tab title="From the command line"] +``` +yunohost diagnosis run +yunohost diagnosis show --issues --human-readable +``` +[/ui-tab] +[/ui-tabs] + +## [fa=lock /] Get a Let's Encrypt certificate + +Once you configured DNS records and port forwarding (if needed), you should be able to install a Let's Encrypt certificate. This will get rid of the spooky security warning from earlier for new visitors. + +For more detailed instructions, or to lean more about SSL/TLS certificates, see [the corresponding page here](/certificate). + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] + +Go in Domains > Click on your domain > SSL Certificate + +[figure class="nomargin" caption="Preview of the diagnostic panel"] +![](image://certificate-before-LE.png?resize=100%&class=inline) +[/figure] + +[/ui-tab] +[ui-tab title="From the command line"] +``` +yunohost domain cert install +``` +[/ui-tab] +[/ui-tabs] + +## ![](image://tada.png?resize=32&classes=inline) Congratz! + +You now have a pretty well configured server. If you're new to YunoHost, we recommend to have a look at [the guided tour](/overview). You should also be able to [install your favourite applications](/apps). Don't forget to [plan backups](/backup) ! + +{% endif %} +{% endif %} diff --git a/pages/02.administer/15.admin_guide/05.guidelines/guidelines.de.md b/pages/02.administer/15.admin_guide/05.guidelines/guidelines.de.md new file mode 100644 index 00000000..a8ec4025 --- /dev/null +++ b/pages/02.administer/15.admin_guide/05.guidelines/guidelines.de.md @@ -0,0 +1,54 @@ +--- +title: Hinweise und Leitlinien +template: docs +taxonomy: + category: docs +routes: + default: '/guidelines' +--- + +Diese Seite listet einige Tipps und Richtlinien auf, die jeder YunoHost-Administrator kennen sollte, um sich um seinen Server zu kümmern :). + +## YunoHost nicht kaputt machen + +Das heißt : Entweder ist der Server für den Betreib vorgesehen, oder ein Testserver, auf dem Sie sich erlauben, zu experimentieren. + +Ist Ihr Ziel, einen Produktionserver zu benutzen, so beachten Sie folgendes : +- ein Server ist ein empfindliches System : Seien Sie vorsichtig, methodisch und geduldig ; +- experimentieren und Anpassen einschränken - insbesondere von Konfigurationsdateien ; +- nicht Dutzende von Anwendungen installieren, bloß zum sehen, wie sie aussehen ; +- Vorsicht mit inoffiziellen Anwendungen, und verzichten auf solche, die noch "in Bearbeitung" sind, oder einen Level 0 haben ; +- wenn etwas kaputt geht, überlegen Sie richtig, bevor Sie versuchen, es selbst zu reparieren, wenn Sie nicht wissen, was Sie tun. (z. B., den Admin-Benutzer nicht selbst versuchen neu anzulegen, falls er komischerweise verschwunden ist.) + +## Keep it simple ! + +YunoHost ist für allgemeine und einfache Anwendungsfälle konzipiert. Wenn Sie von diesen Bedingungen abweichen, wird es schwieriger, und Sie benötigen technisches Wissen, um sie zu erfüllen. Zum Beispiel: +- Versuchen Sie nicht, YunoHost in einem Kontext auszuführen, in dem Sie keine Kontrolle über die Ports 80 und 443 haben (oder überhaupt kein Internet); +- Versuchen Sie nicht, fünf Server über dieselbe Internetverbindung zu hosten, wenn Sie nicht bereits ein fortgeschrittener Benutzer sind; +- Reiben Sie sich nicht an dem Versuch auf, NGINX durch Apache zu ersetzen (oder beides gleichzeitig laufen zu lassen); +- Versuchen Sie nicht, benutzerdefinierte SSL-Zertifikate zu verwenden, wenn Sie diese nicht wirklich benötigen; +- ... + +Halten Sie die Dinge so einfach wie möglich! + +## Das System soll nicht ständig wieder installiert werden + +Manche Leute neigen dazu, in eine "Neuinstallationsspirale" zu verfallen - wo immer, wenn etwas im Server kaputt geht und es nicht offensichtlich ist, wie man es beheben kann, oder weil der Server instabil geworden ist, der Administrator damit endet, den gesamten Server von Grund auf neu zu installieren, weil es als ein "einfacher" und schneller Weg erscheint, alles wieder in Ordnung zu bringen. + +Vermeiden Sie das. Eine neue Installation ist mühsam und keine gute langfristige Strategie zur Problemlösung. Sie werden nur müde und lernen nichts dabei. Vergessen Sie den Traum von einem einwandfreien Server: Im Betrieb wird ein Server nach und nach immer instabil. Außerdem müssen Sie (allmählich) lernen, Probleme zu lösen, wenn Sie auf welche stoßen. [Bitten Sie um Hilfe](/help), geben Sie Details über die entsprechenden Probleme an und was Sie versuchen dagegen zu unternehmen. Beheben Sie dann die Probleme. Mit der Zeit werden Sie eine viel bessere Kontrolle über Ihren Server haben. Und im Gegensatz zu ständigen Neu-Installationen ist das ein großer Vorteil. + +## Backups erstellen + +Wenn Sie Dienste und Daten hosten, die für Ihre Benutzer wichtig sind, ist es wichtig, dass Sie über eine Sicherungsrichtlinie verfügen. Backups können einfach über die Webadministrationsoberfläche erstellt werden - allerdings können sie derzeit nicht von dort heruntergeladen werden (aber sie können auf anderem Wege heruntergeladen werden). Sie sollten regelmäßig Backups erstellen und diese an einem sicheren Ort aufbewahren, der physisch von Ihrem Server getrennt ist. Weitere Informationen finden Sie in [der Backup-Dokumentation](/backup). + +## Die an Root gesendeten Emails lesen + +Als Administrator sollten Sie einen E-Mail-Client so einrichten, dass er E-Mails prüft, die an `root@your.domain.tld` (das muss ein Alias für den ersten von Ihnen hinzugefügten Benutzer sein) gesendet werden, oder sie an eine andere Adresse weiterleitet, die Sie aktiv prüfen. Diese E-Mails können Informationen darüber enthalten, was auf Ihrem Server passiert, wie z. B. periodische automatisierte Aufgaben. + +## YunoHost ist freie Software, die von Freiwilligen instand gehalten wird. + +Schließlich sollten Sie bedenken, dass YunoHost eine freie Software ist, die von Freiwilligen gepflegt wird - und dass das Ziel von YunoHost (die Demokratisierung des Selbst-Hostings) nicht einfach ist! Die Software wird ohne jegliche Garantie zur Verfügung gestellt. Das YunoHost Team tut sein Bestes, um das bestmögliche Erlebnis zu erhalten und zu bieten - dennoch sind die Funktionen, Anwendungen und YunoHost als Ganzes weit davon entfernt, perfekt zu sein, und Sie werden früher oder später auf kleine oder große Probleme stoßen. Wenn das passiert, kommen Sie bitte [in den Chat oder das Forum und bitten um Hilfe, oder melden das Problem](/help) :)! + +Wenn Ihnen YunoHost gefällt und Sie möchten, dass das Projekt am Leben erhalten wird und weiter voranschreitet, hinterlassen Sie bitte eine Dankesnachricht und [spenden](https://liberapay.com/YunoHost) für das Projekt und erzählen Sie anderen davon! + +Und da YunoHost schließlich ein Open-Source-Projekt ist, sind Sie herzlich dazu eingeladen, zum Projekt [beizutragen](/contribute). Sowohl zu technischen (d.h. Code) als auch zu weniger technischen Aspekten (wie z.B. das Mitwirken an dieser Dokumentation ;) )! diff --git a/pages/02.administer/15.admin_guide/05.guidelines/guidelines.fr.md b/pages/02.administer/15.admin_guide/05.guidelines/guidelines.fr.md new file mode 100644 index 00000000..f6e8c2b6 --- /dev/null +++ b/pages/02.administer/15.admin_guide/05.guidelines/guidelines.fr.md @@ -0,0 +1,54 @@ +--- +title: Conseils généraux +template: docs +taxonomy: + category: docs +routes: + default: '/guidelines' +--- + +Cette page énumère quelques conseils et lignes directrices que tout administrateur de YunoHost devrait connaître pour prendre soin de son serveur :). + +## Ne cassez pas YunoHost + +En d'autres termes : votre serveur est soit un « serveur de production » (destiné à fonctionner), soit un serveur de test sur lequel vous vous permettez d'expérimenter. + +Si votre but est d'avoir un serveur de production : +- soyez conscient qu'un serveur est un système fragile : restez prudent, méthodique et patient ; +- limitez les expérimentations et la personnalisation - notamment des fichiers de config ; +- n'installez pas des douzaines d'applications juste pour voir de quoi elles ont l'air ; +- utilisez les applications non-officielles avec prudence, et interdisez-vous d'utiliser celles marquées 'in progress', 'not working' ou qui sont en niveau 0 ; +- si quelque chose casse, réfléchissez à deux fois avant de tenter de le réparer vous-même si vous ne savez pas ce que vous faites. (Par exemple, n'essayez pas de recréer vous-même l'utilisateur admin juste parce qu'il a mystérieusement disparu...) + +## Keep it simple ! + +YunoHost est conçu pour fonctionner avec des cas d'utilisation généraux et simples. S'écarter de ces conditions rendra les choses plus difficiles et vous aurez besoin de connaissances techniques pour les faire fonctionner. Par exemple, +- n'essayez pas d'exécuter YunoHost dans un contexte où vous ne pouvez pas avoir le contrôle des ports 80 et 443 (ou pas d'Internet du tout) ; +- n'essayez pas d'héberger cinq serveurs derrière la même connexion Internet si vous n'êtes pas déjà un utilisateur avancé ; +- ne vous tourmentez pas à vouloir remplacer NGINX par Apache (ou faire tourner les deux à la fois) ; +- n'essayez pas d'utiliser des certificats SSL personnalisés si vous n'en avez pas vraiment besoin ; +- ... + +Gardez les choses aussi simples que possible ! + +## Ne réinstallez pas tous les jours + +Certaines personnes ont tendance à tomber dans la "spirale de la réinstallation" - où chaque fois que quelque chose casse dans le serveur et qu'il n'est pas évident de le réparer, ou parce que le serveur est devenu instable, l'administrateur finit par réinstaller le serveur entier à partir de zéro car cela semble une solution "facile" et rapide pour remettre les choses à plat. + +Ne faites pas ça. La réinstallation est une opération lourde et n'est pas une bonne stratégie à long terme pour résoudre les problèmes. Vous vous fatiguerez et n'apprendrez rien. Oubliez le rêve d'avoir un serveur infaillible : un serveur utilisé quotidiennement finit toujours par être instable. De plus, vous devez apprendre (progressivement) à résoudre les problèmes lorsque vous les rencontrez. [Demandez de l'aide](/help) en fournissant des détails sur les symptômes, ce que vous essayez de faire et ce qu'il se passe, et corrigez les problèmes. Avec le temps, vous aurez un bien meilleur contrôle sur votre serveur que si vous réinstallez aveuglément à chaque fois. + +## Faites des sauvegardes + +Si vous hébergez des services et des données qui sont importants pour vos utilisateurs, il est important que vous mettiez en place une politique de sauvegarde. Les sauvegardes peuvent être facilement créées à partir de la webadmin - et les archives peuvent être téléchargées depuis la webadmin, depuis un client FTP comme FileZilla, ou depuis un terminal avec `scp`. Vous devez effectuer régulièrement des sauvegardes et les conserver dans un endroit sûr et physiquement différent de votre serveur. Plus d'infos dans [la documentation des sauvegardes](/backup). + +## Lisez les emails envoyés à root + +En tant qu'administrateur, vous devriez configurer un client de messagerie pour vérifier les e-mails envoyés à `root@votre.domaine.tld` (qui doit être un alias pour le premier utilisateur que vous avez ajouté) ou les transférer à une autre adresse que vous vérifiez activement. Ces courriels peuvent contenir des informations sur ce qui se passe sur votre serveur, comme les tâches périodiques automatisées. + +## YunoHost est un logiciel gratuit, maintenu par des bénévoles. + +Enfin, gardez à l'esprit que YunoHost est un logiciel libre maintenu par des volontaires - et que le but de YunoHost (démocratiser l'auto-hébergement) n'est pas simple ! Le logiciel est fourni sans aucune garantie. L'équipe de bénévoles fait de son mieux pour maintenir et fournir la meilleure expérience possible - pourtant les fonctionnalités, les applications et YunoHost dans son ensemble sont loin d'être parfaits et vous ferez face tôt ou tard à de petit ou gros problèmes. Lorsque cela se produit, venez gentiment [demander de l'aide sur le chat ou le forum, ou signaler le problème](/help) :) ! + +Si vous aimez YunoHost et que vous voulez que le projet soit maintenu en vie et progresse, n'hésitez pas à laisser une note de remerciement et à [faire un don](https://liberapay.com/YunoHost) au projet et à en parler autour de vous ! + +Pour finir, puisque YunoHost est un projet de logiciel libre, vous êtes légitime et bienvenu pour [venir contribuer](/contribute) au projet, que ce soit sur les aspects techniques (c.-à-d. code) et moins techniques (comme par exemple contribuer à cette documentation ;)) ! diff --git a/pages/02.administer/15.admin_guide/05.guidelines/guidelines.it.md b/pages/02.administer/15.admin_guide/05.guidelines/guidelines.it.md new file mode 100644 index 00000000..bbce4194 --- /dev/null +++ b/pages/02.administer/15.admin_guide/05.guidelines/guidelines.it.md @@ -0,0 +1,54 @@ +--- +title: Avvisi e linee guida +template: docs +taxonomy: + category: docs +routes: + default: '/guidelines' +--- + +Questa pagina elenca qualche consiglio e delle linee guida che tutti gli amministratori di YunoHost dovrebbero conoscere per prendersi cura del proprio server :). + +## Non rompere YunoHost + +In altre parole: il tuo server può essere un "server in produzione" (destinato a funzionare), oppure un server di test che ti permette di sperimentare. + +Se il tuo obiettivo è avere un server in produzione: +- sii consapevole che i server sono sistemi fragili: sii prudente, metodico e paziente; +- limita gli esperimenti e le personalizzazioni (per le istanze il file config) +- non installare dozzine di installazioni solo per vedere come sono; +- usa le applicazioni non ufficiali con prudenza, e evita di usare quelle 'in progress', 'not working' o che hanno un livello 0; +- se qualcosa dovesse rompersi, pensate due volte prima di cercare di riparare da soli se non sapete quello che state facendo. (Per esempio, non tentate di ricreare da soli l'utente admin solo perché sembra che sia misteriosamente scomparso...) + +## Keep it simple ! + +YunoHost è progettato per funzionare in casi d'uso generici e semplici. Deviare da queste condizioni renderà le cose più difficili e avrai bisogno di conoscenze tecniche perché tutto funzioni. Per esempio, +- non provare ad eseguire YunoHost in un contesto dove non puoi controllare le porte 80 e 443 (o senza Internet del tutto); +- non provare a hostare cinque server dietro la stessa connessione Internet se non sei un utente esperto; +- non cadere nei capricci dei nerd che vogliono sostituire NGINX con Apache (o farli girare tutti e due insieme); +- non cercare di usare certificati SSL personalizzati se non ne hai veramente bisogno; +- ... + +Tieni le cose più semplici possibili! + +## Non reinstallate tutti i giorni + +Alcune persone hanno la tendenza a cadere nella "spirale di reinstallazione" - dove ogni volta che qualcosa nel server si rompe e non è semplice capire come ripararlo, o perché il server diventa "sporco", l'amministratore decide di reinstallare tutto il server da zero perché sembra una soluzione "facile" e veloce per rimettere le cose a posto. + +Non farlo. La reinstallazione è un'operazione difficile e non è un buona strategia a lungo termine per risolvere i problemi. Ti stancherai e non imparerai niente. Dimentica il sogno di avere un server "pulito". Nella vita reale il server sarà sempre "sporco". In più, dovrai imparare (progressivamente) a risolvere i problemi che incontrerai. [Chiedi aiuto](/help) con i dettagli dei sintomi, quello che hai provato a fare e cosa è successo e correggi i problemi. Con il tempo, avrai un controllo migliore sul tuo server piuttosto che reinstallare alla cieca tutte le volte. + +## Fai i backup + +Se ospiti dei servizi e dei dati che sono importanti per i tuoi utenti, è importante mettere in atto una policy di backup. I backup possono essere creati facilmente a partire dall'interfaccia web di amministrazione - anche se non possono attualmente essere scaricati da li (ma possono essere scaricati con un altro mezzo). Dovrai effettuare regolarmente dei backup e custodirli in un luogo fisico diverso dal tuo server. Trovi altre informazioni nella [documentazione di backup](/backup). + +## Controlla le mail inviate a root + +Come amministratore, dovrai configurare un client di posta per controllare le mail inviate a `root@your.domani.tld` (che dovrà essere un alias per il primo utente che aggiungerai) o trasferitele ad un altro indirizzo mail che controlli attivamente. Queste mail possono contenere informazioni riguardo quello che avviene sul tuo server, come i compiti periodici automatici. + +## YunoHost è software libero, mantenuto da volontari. + +Infine, tieni presente che YunoHost è software libero mantenuto da volontari - e che l'obiettivo di YunoHost (democratizzare il self-hosting) non è semplice! Il software è fornito senza nessuna garanzia. Il team di volontari fa del suo meglio per mantenere e fornire la migliore esperienza possibile - quindi le funzionalità, le applicazioni e YunoHost nel suo insieme sono lontani dall'essere perfetti e presto o tardi incontrerai piccoli o grossi problemi. Quando accadrà potrai [chiedere aiuto sulla chat o nel forum, o segnalare il problema](/help) :)! + +Se ti piace YunoHost e vuoi vedere il progetto aggiornato e sviluppato, non esitare a lasciare un commento di ringraziamento e a [dare un contributo](https://liberpay.com/YunoHost) al progetto e a parlarne agli altri! + +Infine, poiché YunoHost è un progetto di software libero, sei autorizzato e benvenuto a [contribuire](/contribute) al progetto, sia per quanto riguarda gli aspetti tecnici (per esempio il codice) e meno tecnici (come per esempio contribuire a questa documentazione ;))! diff --git a/pages/02.administer/15.admin_guide/05.guidelines/guidelines.md b/pages/02.administer/15.admin_guide/05.guidelines/guidelines.md new file mode 100644 index 00000000..d4b3151f --- /dev/null +++ b/pages/02.administer/15.admin_guide/05.guidelines/guidelines.md @@ -0,0 +1,54 @@ +--- +title: Advices and guidelines +template: docs +taxonomy: + category: docs +routes: + default: '/guidelines' +--- + +This page lists some advice and guidelines which every YunoHost administrator should be aware to take care of a YunoHost server :) + +## Do not break YunoHost + +To put it another way: your server is either a production server (meant to work) or a test server on which you allow yourself to experiment. + +If your goal is to run a production server: +- be aware that servers are fragile system. Stay cautious, methodical and patient; +- limit experimentations and customizations (for instance of config file); +- do not install dozens of apps just to see how they look; +- use non-official apps with caution, and do not use apps that are still 'in progress', 'not working' or level 0; +- if something gets broken, think twice about fixing it by yourself if you don't know what you are doing. (For instance, do not attempt to recreate yourself the admin user just because it mysteriously disappeared...) + +## Keep it simple! + +YunoHost is designed to work with general and simple use cases in mind. Deviating from those conditions will make things harder and you will need technical knowledge to make it work. For instance, +- do not try to run YunoHost in a context where you cannot have control over ports 80 and 443 (or no internet at all); +- do not try to host five servers behind the same internet connection if you are not already an advanced user; +- do not fall into nerd whims such as willing to replace NGINX with Apache (or run both at the same time); +- do not try to use custom SSL certificates if you don't really need them; +- ... + +Keep things as simple as you can! + +## Do not reinstall every day + +Some people tend to fall into "the reinstallation spiral" - where each time something breaks in the server and it is not obvious how to fix it, or because the server became "dirty", one ends up reinstalling the whole server from scratch because it looks like an "easy" and quick solution to clean the table. + +Please don't do this. Reinstalling is a heavy operation and is not a good long-term strategy for fixing problems. You will get tired and won't learn anything. Forget the dream of having a "clean" server. A real-life server always end up being a bit "dirty". Also, you need to (progressively) learn how to solve issues when you encounter them. Reach for [help](/help) with detailed symptoms of what you are trying to do and what is happening, and fix the issues. Over time, you will get a much better control over your server than just blindly reinstalling every time. + +## Do backups + +If you host services and data that are important for your users, it is important that you setup a backup policy. Backups can be easily created from the webadmin - you can download it from the webadmin or via your favorite FTP client, such as FileZilla or your own terminal. You should perform backup regularly and keep them in a safe and different physical location from your server. More info on [the backup documentation](/backup). + +## Check root’s email + +As an administrator, you should configure an email client to check emails sent to `root@your.domain.tld` (which should be an alias to the first user your added) or otherwise forward them to another address that you actively check. Those mails may contain information on what is happening on your server such as automated periodic tasks. + +## YunoHost is free software, maintained by volunteers + +Finally, keep in mind that YunoHost is a free software maintained by volunteers - and that the goal of YunoHost (to democratize self-hosting) is not an easy one! It is provided without any warranty. The team of volunteers does its best to maintain and provide the best possible experience - yet features, applications and YunoHost as a whole are far from being perfect and you will experience small and big shortcomings at some points. When this happens, kindly [reach for help on the chat or forum, or report the issue](/help)! :) + +If you like YunoHost and want to see the project being kept alive and make progress, feel free to leave a thank you note and to [donate](https://liberapay.com/YunoHost) to the project and talk about it around you! + +Last but not least, since YunoHost is a free software project, you are legitimate and welcomed to come and [contribute](/contribute) to the project, be it on the technical aspects (i.e. code) and less-technical aspects (such as contributing to this documentation! ;)) diff --git a/pages/02.administer/15.admin_guide/10.admin/admin.de.md b/pages/02.administer/15.admin_guide/10.admin/admin.de.md new file mode 100644 index 00000000..84c36284 --- /dev/null +++ b/pages/02.administer/15.admin_guide/10.admin/admin.de.md @@ -0,0 +1,16 @@ +--- +title: Administrator-Webinterface +template: docs +taxonomy: + category: docs +routes: + default: '/admin_interface' +--- + +YunoHost hat ein Administrator-Webinterface. Die andere Möglichkeit, Ihre YunoHost-Installation zu administrieren, ist über die [Kommandozeile](/commandline). + +### Zugang + +Sie können auf Ihr Administrator-Webinterface unter folgender Adresse zugreifen: https://example.org/yunohost/admin (ersetzen Sie 'example.org' durch Ihren eigenen Domainnamen) + +![](image://webadmin.png) diff --git a/pages/02.administer/15.admin_guide/10.admin/admin.es.md b/pages/02.administer/15.admin_guide/10.admin/admin.es.md new file mode 100644 index 00000000..c95fa880 --- /dev/null +++ b/pages/02.administer/15.admin_guide/10.admin/admin.es.md @@ -0,0 +1,16 @@ +--- +title: La interfaz de administración web +template: docs +taxonomy: + category: docs +routes: + default: '/admin_interface' +--- + +YunoHost tiene una interfaz gráfica de administración. El otro método consiste en utilizar la [linea de comando](/commandline). + +### Acceso + +La interfaz admin está accesible desde tu instancia YunoHost en esta dirección : https://ejemplo.org/yunohost/admin (reemplaza ejemplo.org por tu nombre de dominio) + +![](image://webadmin.png) diff --git a/pages/02.administer/15.admin_guide/10.admin/admin.fr.md b/pages/02.administer/15.admin_guide/10.admin/admin.fr.md new file mode 100644 index 00000000..c8d0b285 --- /dev/null +++ b/pages/02.administer/15.admin_guide/10.admin/admin.fr.md @@ -0,0 +1,17 @@ +--- +title: L'interface d'administration Web +template: docs +taxonomy: + category: docs +routes: + default: '/admin_interface' +--- + +YunoHost est fourni avec une interface graphique d’administration (aussi appelée webadmin). L’autre méthode d'administration est d’utiliser la [ligne de commande](/commandline). + +### Accès + +L’interface d'administration web est accessible depuis votre instance YunoHost à l’adresse https://exemple.org/yunohost/admin (remplacez exemple.org par la bonne valeur) + +![](image://webadmin_fr.png) + diff --git a/pages/02.administer/15.admin_guide/10.admin/admin.it.md b/pages/02.administer/15.admin_guide/10.admin/admin.it.md new file mode 100644 index 00000000..03582144 --- /dev/null +++ b/pages/02.administer/15.admin_guide/10.admin/admin.it.md @@ -0,0 +1,17 @@ +--- +title: L'interfaccia web di amministrazione +template: docs +taxonomy: + category: docs +routes: + default: '/admin_interface' +--- + +YunoHost ha un'interfaccia web di amministrazione. L'altro metodo è quello di usare la [linea di comando](/commandline). + +### Accesso + +L'interfaccia di amministrazione è accessibile all'indirizzo https://example.org/yunohost/admin (sostituisci 'example.org' con il tuo dominio) + +![](image://webadmin.png) + diff --git a/pages/02.administer/15.admin_guide/10.admin/admin.md b/pages/02.administer/15.admin_guide/10.admin/admin.md new file mode 100644 index 00000000..4b2f6004 --- /dev/null +++ b/pages/02.administer/15.admin_guide/10.admin/admin.md @@ -0,0 +1,16 @@ +--- +title: Administrator web interface +template: docs +taxonomy: + category: docs +routes: + default: '/admin_interface' +--- + +YunoHost has an administrator web interface. The other way to administrate your YunoHost install is through the [command line](/commandline). + +### Access + +You can access your administrator web interface at this address: https://example.org/yunohost/admin (replace 'example.org' with your own domain name) + +![](image://webadmin.png) diff --git a/pages/02.administer/15.admin_guide/15.command_line/command_line.de.md b/pages/02.administer/15.admin_guide/15.command_line/command_line.de.md new file mode 100644 index 00000000..47e37850 --- /dev/null +++ b/pages/02.administer/15.admin_guide/15.command_line/command_line.de.md @@ -0,0 +1,130 @@ +--- +title: SSH +template: docs +taxonomy: + category: docs +routes: + default: '/ssh' + aliases: + - '/commandline' +page-toc: + active: true +--- + +## Was ist SSH? + +**SSH** steht für **S**ecure **Sh**ell, und bezeichnet ein Protokoll, dass es einem erlaubt über ein entferntes System auf die Kommandozeile (Command Line Interface, **CLI**) zuzugreifen. SSH ist standardmäßig auf jedem Terminal auf GNU/Linux oder macOS verfügbar. Für Windows ist Drittsoftware nötig, z.B. [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (Klicke nach dem Start auf Session und dann SSH). + +## Während der YunoHost Installation + +#### Finde deine IP + +Solltest du auf einem VPS installieren, dann hat der VPS Provider die IP-Adresse, die du bei ihm erfragen solltest. + +Wenn du Zuhause installierst (z.B. auf einem Raspberry Pi oder OLinuXino), dann musst du herausfinden, welche IP-Adresse dein Router dem System zugewiesen hat. Hierfür existieren mehrere Wege: +- Öffne ein Terminal und tippe `sudo arp-scan --local` ein, um eine Liste der aktiven IP-Adressen deines lokalen Netzwerks anzuzeigen; +- wenn dir der arp-scan eine zu unübersichtliche Zahl an Adressen anzeigt, versuche mit `nmap -p 22 192.168.**x**.0/24` nur die anzuzeigen, deren SSH-Port 22 offen ist. (passe das **x** deinem Netzwerk an); +- Prüfe die angezeigten Geräte in der Benutzeroberfläche deines Routers, ob du das Gerät findest; +- Schließe einen Bildschirm und Tastatur an deinen Server, logge dich ein und tippe `hostname --all-ip-address`. + +#### Verbinden + +Angenommen deine IP Addresse ist `111.222.333.444`, öffne einen Terminal und gib Folgendes ein: + +```bash +ssh root@111.222.333.444 +``` + +Es wird nach einem Passwort gefragt. Handelt es sich um einen VPS, sollte der VPS Provider dir das Passwort kommuniziert haben. Wenn du ein pre-installed image benutzt (für x86 Computer oder ARM boards), sollte das Passwort `yunohost` sein. + +! Seit YunoHost 3.4 kann man sich nach dem Ausführen der Postinstallation nicht mehr als `root` anmelden. **Stattdessen sollte man sich mit dem `admin` Benutzer anmelden!** Für den Fall, dass der LDAP-Server defekt und der `admin` Benutzer nicht verwendbar ist, kann man sich eventuell trotzdem noch mit `root` über das lokale Netzwerk anmelden. + +#### Ändere das Passwort! + +Nach dem allerersten Login sollte man das root Passwort ändern. Der Server könnte dazu automatisch auffordern. Falls nicht, ist der Befehl `passwd` zu benutzen. Es ist wichtig, ein einigermaßen starkes Passwort zu wählen. Beachte, dass das root Passwort durch das admin Passwort überschrieben wird, wenn man die Postinstallation durchführt. + +#### Auf ans Konfigurieren! + +Wir sind nun bereit, mit der [Postinstallation](/postinstall) zu beginnen. + +## After installing YunoHost + +If you installed your server at home and are attempting to connect from outside your local network, make sure port 22 is correctly forwarded to your server. (Reminder : since YunoHost 3.4 you should connect using the `admin` user !) + +If you only know the IP address of your server : + +```bash +ssh admin@111.222.333.444 +``` + +Then, you need to enter your administrator password created at [post-installation step](/postinstall). + +If you configured your DNS (or tweaked your `/etc/hosts`), you can simply use your domain name : + +```bash +ssh admin@your.domain.tld +``` + +If you changed the SSH port, you need to add `-p ` to the command, e.g. : + +```bash +ssh -p 2244 admin@your.domain.tld +``` + +!!! If you are connected as `admin` and would like to become `root` for more comfort (e.g. to avoid typing `sudo` in front of every command), you can become `root` using the command `sudo su`. + +## Which users? + +By default, only the `admin` user can log in to YunoHost SSH server. + +YunoHost's users created via the administration interface are managed by the LDAP directory. By default, they can't connect via SSH for security reasons. If you want some users to have SSH access enabled, use the command: + +```bash +yunohost user permission add ssh.main +``` + +It is also possible to remove SSH access using the following: + +```bash +yunohost user permission remove ssh.main +``` + +Finally, it is possible to add, delete and list SSH keys, to improve SSH access security, using the commands: + +```bash +yunohost user ssh add-key +yunohost user ssh remove-key +yunohost user ssh list-keys +``` + +## Security and SSH + +N.B. : `fail2ban` will ban your IP for 10 mimutes if you perform 5 failed login attempts. If you need to unban the IP, have a look at the page about [Fail2Ban](/fail2ban) + +A more extensive discussion about security & SSH can be found on the [dedicated page](/security). + + +## YunoHost command line + +!!! Providing a full tutorial about the command line is quite beyond the scope of the YunoHost documentation : for this, consider reading a dedicated tutorial such as [this one](https://ryanstutorials.net/linuxtutorial/) or [this one](http://linuxcommand.org/). But be reassured that you don't need to be a CLI expert to start using it ! + +The `yunohost` command can be used to administer your server and perform the various actions similarly to what you do on the webadmin. The command must be launched either from the `root` user or from the `admin` user by preceeding them with `sudo`. (ProTip™ : you can become `root` with the command `sudo su` as `admin`). + +YunoHost commands usually have this kind of structure : + +```bash +yunohost app install wordpress --label Webmail + ^ ^ ^ ^ + | | | | + category action argument options +``` + +Don't hesitate to browse and ask for more information about a given category or action using the the `--help` option. For instance, those commands : + +```bash +yunohost --help +yunohost user --help +yunohost user create --help +``` + +will successively list all the categories available, then the actions available in the `user` category, then the usage of the action `user create`. You might notice that the YunoHost command tree is built with a structure similar to the YunoHost admin pages. diff --git a/pages/02.administer/15.admin_guide/15.command_line/command_line.es.md b/pages/02.administer/15.admin_guide/15.command_line/command_line.es.md new file mode 100644 index 00000000..5ed7c26f --- /dev/null +++ b/pages/02.administer/15.admin_guide/15.command_line/command_line.es.md @@ -0,0 +1,125 @@ +--- +title: SSH +template: docs +taxonomy: + category: docs +routes: + default: '/ssh' + aliases: + - '/commandline' +page-toc: + active: true +--- + +## ¿ Qué es SSH ? + +**SSH** est un acrónimo por Secure Shell, y representa un protocolo que permite controlar remotamente una máquina vía la línea de comandos (CLI). También es un comando básico disponible en los terminales de GNU/Linux y macOS. En Windows, hace falta utilizar el programa [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (después de haberlo iniciado, clicar sobre Session y luego SSH). + +La interfaz de línea de comandos (CLI) es, en informática, la manera original (y más técnica) de interactuar con un ordenador. Está generalmente considera como más completa, más potente y eficaz que las interfaces gráficas, aunque sea más difícil de aprenderla. + +## Durante la instalación de YunoHost + +#### Encontrar su IP + +Si instalas YunoHost en un VPS, tu proveedor debería haberte comunicado la dirección IP de tu servidor. + +Si instalas un servidor en tu casa (por ejemplo en Raspberry Pi u OLinuXino), tienes que encontrar el IP que fue atribuido a tu tarjeta cuando la conectaste a tu router / caja Internet. Hay varias maneras de hacerlo : + +- abre una terminal y teclea `sudo arp-scan --local` para enumerar los IP de las máquinas en la red local ; +- utiliza la interfaz de tu router caja internet para listar las máquinas conectadas, o mira los los ; +- conecta una pantalla en tu servidor, inicia una sesión y escribe `hostname --all-ip-address`. + +#### Conectarse + +Suponiendo que tu dirección IP sea `111.222.333.444`, abre una terminal y escribe : + +```bash +ssh root@111.222.333.444 +``` + +Ahora te piden una contraseña. Si es un VPS, tu proveedor ya te hará comunicado la contraseña. Si utilizaste una imagen pre-instalada (para x86 o tarjetas ARM), el password debería ser `yunohost`. + +! Desde YunoHost 3.4, después de la post-instalación ya no es posible conectarse con el usuario `root`. En lugar de eso, hace falta **conectarse con el usuario `admin`**. Incluso si el servidor LDAP fuera quebrado (haciendo que el usuario `admin` ya no fuera utilizable) todavía deberías poder conectarte con el usuario `root` desde la red local. + +#### ¡ Cambiar la contraseña root ! + +Después de haberte conectado por primera vez, tienes que cambiar la contraseña `root`. Tal vez el servidor te pida automáticamente que lo hagas. Si no es el caso, hay que utilizar el comando `passwd`. Es muy importante que elijas una contraseña bastante complicada. Nota que esta contraseña luego estará reemplazada por la contraseña admin elegida durante la post-instalación. + + +## En una instancia que ya está instalada + +Si instalaste tu servidor en casa y que quieres conectarte desde fuera de la red local, asegúrate que hayas previamente redirigido el puerto 22 de tu router / caja hacia tu servidor (con el usuario `admin` !) + +Si sólo conoces el IP de tu servidor : + +```bash +ssh admin@111.222.333.444 +``` + +Luego, entra la contraseña de administración que has elegido durante la post-instalación [post-installation](/postinstall). + +Si has configurado tus DNS (o modificar tu `/etc/hosts`), puedes utilizar tu nombre de dominio : + +```bash +ssh admin@votre.domaine.tld +``` + +Si cambiaste el puerto SSH, hay que añadir `-p ` al comando, por ej. : + +```bash +ssh -p 2244 admin@tu.dominio.tld +``` + +!!! Si estás conectado como `admin` y quieres ser `root` para tener más confort (por ejemplo, para no teclear `sudo` con cada comando), puedes convertirte en `root` tecleando `sudo su`. + +## ¿ Qué usuarios ? + +Por defecto, sólo el usuario `admin` puede conectarse en SSH en una instancia YunoHost. + +Los usuarios YunoHost creados vea la interfaz de administración están administrados por la base de datos LDAP. Por defecto, no pueden conectarse en SSH por razones de seguridad. Si necesitas absolutamente que uno de estos usuarios disponga de un acceso SSH, puedes utilizar el comando : +```bash +yunohost user permission add ssh.main +``` + +Del mismo modo, es posible cancelar el acceso SSH de un usuario con el comando : +```bash +yunohost user permission remove ssh.main +``` + +Finalmente, es posible añadir, suprimir y listar llaves SSH, para mejorar la seguridad del acceso SSH, con estos comandos : +```bash +yunohost user ssh add-key +yunohost user ssh remove-key +yunohost user ssh list-keys +``` + +## SSH y seguridad + +N.B. : `fail2ban` proscribirá tu IP durante 10 minutos si fracasas más de 5 veces consecutivas en identificarte. Si esto ocurre y que quieres re-validar tu IP, puedes echar un vistazo a la página [Fail2Ban](/fail2ban) + +Encontrarás explicaciones más completa sobre la seguridad y SSH en [la página dedicada](/security). + +## YunoHost de línea de comandos + +!!! Proveer un tutorial completo sobre la línea de comandos saldría del marco de la documentación de YunoHost : por eso, refiérete a totorales como [éste](https://www.fing.edu.uy/inco/cursos/sistoper/recursosLaboratorio/tutorial0.pdf) o [éste (en)](http://linuxcommand.org/). Pero no te preocupes : no hace falta ser un experto para comenzar a utilizarla ! + +El comando `yunohost` puede ser utilizado para administrar tu servidor o realizar las mismas acciones que en la interfaz gráfica webadmin. Hay que iniciarla como usuario `root`, o como el usuario `admin` poniendo `sudo` antes del comando. (ProTip™ : puedes convertirte en usuario `root` vía el comando `sudo su` cuando eres `admin`.) + +Los comandos YunoHost tienen este tipo de estructura : + +```bash +yunohost app install wordpress --label Webmail + ^ ^ ^ ^ + | | | | + categoría acción argumento opción +``` + +No dudes en navegar ni en pedir información a propósito de una categoría o acción utilizando la opción `--help`. Por ejemplo, estos comandos : + +```bash +yunohost --help +yunohost user --help +yunohost user create --help +``` + +de manera sucesiva van a enumerar todas las categorías disponibles, luego las acciones de la categoría `user`, y luego explicar cómo utilizar la acción `user create`. Deberías notar que el árbol de los comandos YunoHost tiene la misma estructura que las páginas del webadmin. diff --git a/pages/02.administer/15.admin_guide/15.command_line/command_line.fr.md b/pages/02.administer/15.admin_guide/15.command_line/command_line.fr.md new file mode 100644 index 00000000..19632c76 --- /dev/null +++ b/pages/02.administer/15.admin_guide/15.command_line/command_line.fr.md @@ -0,0 +1,167 @@ +--- +title: SSH et la ligne de commande +template: docs +taxonomy: + category: docs +routes: + default: '/ssh' + aliases: + - '/commandline' +page-toc: + active: true +--- + +## Qu’est-ce que SSH ? + +**SSH** est un acronyme pour Secure Shell, et désigne un protocole qui permet de contrôler et administrer à distance une machine via la ligne de commande (CLI). C'est aussi une commande disponible de base dans les terminaux de GNU/Linux et macOS. Sous Windows, il vous faudra utiliser le logiciel [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (après l'avoir lancé, cliquer sur Session puis SSH). + +L'interface en ligne de commande (CLI) est, en informatique, la manière originale (et plus technique) d'interagir avec un ordinateur, comparée aux interfaces graphiques. La ligne de commande est généralement considérée comme plus complète, puissante et efficace que les interfaces graphiques, bien que plus difficile à apprendre. + +## Comment se connecter ? +### Identifiant à utiliser + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Avant la configuration initiale (post-installation)"] + +- Si vous faites une **installation à la maison**, les identifiants par défaut sont login: `root`, mot de passe: `yunohost` (ou `1234` si vous partez d'une image armbian). +- Si vous faites une **installation sur un serveur distant (VPS)**, votre fournisseur devrait vous avoir communiqué le login et le mot de passe (ou vous proposer de configurer une clé SSH). + +[/ui-tab] +[ui-tab title="Après"] + +Durant la post-installation, vous avez défini un mot de passe d'administration. C'est ce mot de passe qui devient le nouveau mot de passe pour les utilisateurs `root` et `admin`. De plus, **la connexion en SSH avec l'utilisateur `root` est désactivée et il vous faut utiliser l'utilisateur `admin` !**. L'exception à cette règle est qu'il reste possible de se logger en root *depuis le réseau local - ou depuis une console en direct sur la machine* (ce qui peut être utile dans l'éventualité où le serveur LDAP est inactif et l'utilisateur admin ne fonctionne plus). + +!!! Si vous êtes connecté en tant qu'`admin` et souhaitez devenir `root` pour plus de confort (par exemple, ne pas avoir à taper `sudo` à chaque commande), vous pouvez devenir `root` en tapant `sudo su` ou `sudo -i`. +[/ui-tab] +[/ui-tabs] + +### Adresse à utiliser + +Si vous hébergez votre serveur **à la maison** (par ex. Raspberry Pi ou OLinuXino ou vieil ordinateur) + - vous devriez pouvoir vous connecter à la machine en utilisant `yunohost.local` (ou `yunohost-2.local`, selon le nombre de serveurs sur le réseau). + - si `yunohost.local` et consorts ne fonctionnent pas, il vous faut [trouver l'IP locale de votre serveur](/finding_the_local_ip). + - si vous avez installé votre serveur à la maison mais essayez d'y accéder depuis l'extérieur du réseau local, assurez-vous d'avoir bien configuré une redirection de port pour le port 22. + +S'il s'agit d'une machine distante (VPS), votre fournisseur devrait vous avoir communiqué l'IP de votre machine. + +Dans tous les cas, si vous avez déjà configuré un nom de domaine qui pointe sur l'IP appropriée, il est plus pratique d'utiliser `votre.domaine.tld` plutôt que l'adresse IP. + +### Se connecter + +Ci-dessous quelques exemples de commande SSH typiques : + +```bash +# avant la postinstall: +ssh root@11.22.33.44 + +# après la postinstall: +ssh admin@11.22.33.44 + +# avec le nom de domaine plutôt que l'IP (plus pratique): +ssh admin@votre.domaine.tld + +# avec le nom de domaine spécial yunohost.local: +ssh admin@yunohost.local + +# si vous avez changé le numéro de port pour SSH +ssh -p 2244 admin@votre.domaine.tld +``` + +!!! `fail2ban` bannira votre IP pendant 10 minutes si vous échouez plus de 10 fois à vous identifier. Pour débannir une IP, vous pouvez regarder la page sur [Fail2Ban](/fail2ban). + +## Autoriser un utilisateur YunoHost standard + +Par défaut, seul l'utilisateur `admin` peut se logger en SSH sur une instance YunoHost. + +Les utilisateurs YunoHost créés via l'interface d'administration sont gérés par la base de données LDAP. Par défaut, ils ne peuvent pas se connecter en SSH pour des raisons de sécurité. Via le système des permissions il est possible d'autoriser la connexion en SFTP ou si c'est vraiment nécessaire en SSH. + +! Faites attention à qui vous donnez accès à SSH. Cela augmente encore plus la surface d'attaque disponible pour un utilisateur malveillant. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] +Se rendre dans `Utilisateurs > Gérer les groupes et les autorisations` + +À partir de là, il est possible d'ajouter les permissions SFTP ou SSH à un utilisateur ou un groupe au choix. + +Si vous souhaitez ajouter une clé publique SSH à l'utilisateur, vous devez le faire en ligne de commande, l'interface web ne proposant pas encore cette fonctionnalité. +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +Pour autoriser un utilisateur ou un groupe à accéder en SFTP ou en SSH : +```bash +# SFTP +yunohost user permission add sftp +# SSH +yunohost user permission add ssh +``` + +Pour enlever la permission : +```bash +# SFTP +yunohost user permission remove sftp +# SSH +yunohost user permission remove ssh +``` + +Enfin, il est possible d'ajouter, de supprimer et de lister des clés SSH, pour améliorer la sécurité de l'accès SSH, avec les commandes : +```bash +yunohost user ssh add-key +yunohost user ssh remove-key +yunohost user ssh list-keys +``` +[/ui-tab] +[/ui-tabs] + +## SSH et sécurité + +Une discussion plus complète sur la sécurité de SSH peut être trouvée sur [la page dédiée](/security). + +## La ligne de commande + +!!! Fournir un tutoriel complet sur la ligne de commande est bien au-delà du cadre de la documentation de YunoHost : pour cela, référez-vous à des tutoriels comme [celui-ci](https://doc.ubuntu-fr.org/tutoriel/console_ligne_de_commande) ou [celui-ci (en)](http://linuxcommand.org/). Mais soyez rassuré, il n'y a pas besoin d'être un expert pour commencer à l'utiliser ! + +### La commande `yunohost` + +La commande `yunohost` peut être utilisée pour administrer votre serveur ou réaliser les mêmes actions que celles disponibles sur la webadmin. Elle doit être lancée depuis l'utilisateur `root`, ou bien depuis l'utilisateur `admin` en précédant la commande de `sudo`. (ProTip™ : il est possible de devenir `root` via la commande `sudo su` en tant qu'`admin`.) + +Les commandes YunoHost ont ce type de structure : + +```bash +yunohost app install wordpress --label Webmail + ^ ^ ^ ^ + | | | | + catégorie action argument options +``` + +N'hésitez pas à naviguer et demander des informations à propos d'une catégorie ou action donnée via l'option `--help`. Par exemple, ces commandes : + +```bash +yunohost --help +yunohost user --help +yunohost user create --help +``` + +vont successivement lister toutes les catégories disponibles, puis les actions de la catégorie `user`, puis expliquer comment utiliser l'action `user create`. Vous devriez remarquer que l'arbre des commandes YunoHost suit une structure similaire aux pages de la webadmin. + +### La commande `yunopaste` +Cette commande est utile lorsque vous voulez communiquer à une autre personne le retour d'une commande. + +Exemple : +```bash +yunohost tools diagnosis | yunopaste +``` +### Quelques commandes utiles + +Si votre interface web d'administration indique que l'API est injoignable, essayez de démarrer `yunohost-api` : +```bash +systemctl start yunohost-api +``` + +Si vous ne parvenez plus à vous connecter avec l'utilisateur `admin` via SSH et via l'interface web, le service `slapd` est peut-être éteint, essayez de le redémarrer : +```bash +systemctl restart slapd +``` + +Si vous avez des configurations modifiées manuellement et souhaitez connaître les modifications : +```bash +yunohost tools regen-conf --with-diff --dry-run +``` diff --git a/pages/02.administer/15.admin_guide/15.command_line/command_line.it.md b/pages/02.administer/15.admin_guide/15.command_line/command_line.it.md new file mode 100644 index 00000000..104f43ff --- /dev/null +++ b/pages/02.administer/15.admin_guide/15.command_line/command_line.it.md @@ -0,0 +1,124 @@ +--- +title: SSH +template: docs +taxonomy: + category: docs +routes: + default: '/ssh' + aliases: + - '/commandline' +page-toc: + active: true +--- + +## Cos'è SSH? + +**SSH** sta per Secure Shell, un protocollo che permette di controllare da remoto un computer usando l'interfaccia a linea di comando (command line interface, CLI in inglese). È disponibile di default in ogni emulazione di terminale su GNU/Linux e macOS. Su Windows è possibile usare [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (dopo averlo avviato si deve cliccare su Session e poi SSH). + +## Durante l'installazione di YunoHost + +#### Individuare il proprio IP + +Se stai installando su un VPS allora il provider dovrebbe averti indicato il tuo indirizzo IP. + +Se stai installando su un computer casalingo (ad esempio un Raspberry Pi o un OLinuXino) devi individuare l'indirizzo IP che è stato attribuito al computer dopo averlo collegato al router. Questi sono alcuni sistemi: +- avvia un terminale e dai il comando `sudo arp-scan --local` per elencare gli indirizzi IP sulla rete locale; +- usa l'interfaccia del router per vedere la lista dei computer collegati o controllane i log; +- collega un monitor al tuo server YunoHost, fai login e digita `hostname --all-ip-address`. + +#### Collegamento + +Se come esempio il tuo indirizzo IP è `111.222.333.444` avvia un terminale e digita: + +```bash +ssh root@111.222.333.444 +``` + +Ti verrà richiesta una password. Nel caso tu stia utilizzando un VPS questa ti dovrebbe essere stata comunicata dal provider. Se invece stai utilizzando un'immagine pre-installata (per computer di tipo x86 o ARM) la password sarà `yunohost`. + +! Dalla versione 3.4 di YunoHost, dopo aver completato il processo di post installazione, non sarà più possibile fare login da `root`: invece **sarà necessario fare login usando l'utente `admin`!**. Nel caso in cui il server LDAP non stia funzionando e l'utente `admin` sia inutilizzabile sarà sempre possibile fare login da `root` solo dalla rete locale. + +#### Cambio della password + +Dopo esserci loggati per la prima volta è necessario cambiare la password di root e ti dovrebbe essere richiesto dal server stesso; nel caso in cui questo non accada usa il comando `passwd`. È importante scegliere una password ragionevolmente robusta. Nota che la password di root verrà sovrascritta dalla password di admin dal processo di postinstallazione. + +## Dopo l'installazione + +Se hai installato il server a casa e stai provando a collegarti dall'esterno della tua rete locale verifica che la porta 22 sia regolarmente forwardata al server. (Ricorda, dalla versione 3.4 di YunoHost dovrai usare l'utente `admin`!). + +Se conosci esclusivamente l'indirizzo IP del tuo server: + +```bash +ssh admin@111.222.333.444 +``` + +Dopo di che dovrai inserire la password di amministratore creata nella [procedura di postinstallazione](/postinstall). + +Se invece hai configurato il DNS (o hai modificato il file `/etc/hosts`), puoi semplicemente usare il tuo nome di dominio: + +```bash +ssh admin@your.domain.tld +``` + +Se hai modificato la porta in ascolto per SSH devi aggiungere l'opzione `-p ` al comando, cioè: + +```bash +ssh -p 2244 admin@your.domain.tld +``` + +!!! Se sei loggato come `admin` ma vuoi usare l'utente `root` per maggiore comodità (ad esempio per evitare di scrivere `sudo` prima di ogni comando) puoi usare il comando `sudo su`. + +## Utenti abilitati + +Di default solo l'utente `admin` può loggarsi al server SSH di YunoHost. + +Gli utenti creati dall'interfaccia di amministrazione sono gestiti dalla directory LDAP e di default non possono connettersi via SSH per ragioni di sicurezza. Se invece vuoi abilitare all'accesso SSH alcuni utenti usa il comando: + +```bash +yunohost user permission add ssh.main +``` + +È sempre possibile eliminare l'accesso SSH con il comando: + +```bash +yunohost user permission remove ssh.main +``` + +Infine è possibile aggiungere, eliminare ed elencare le chiavi SSH, usate per migliorare la sicurezza degli accessi SSH con i comandi: + +```bash +yunohost user ssh add-key +yunohost user ssh remove-key +yunohost user ssh list-keys +``` + +## Sicurezza e SSH + +N.B.: `fail2ban` bannerà il tuo IP per 10 minuti nel caso di almeno 5 tentativi di accesso falliti. Se devi togliere il ban al tuo IP leggi la pagina relativa [Fail2Ban](/fail2ban) + +Una discussione più approfondita relativa a sicurezza & SSH è su [questa pagina](/security). + +## YunoHost command line + +!!! Providing a full tutorial about the command line is quite beyond the scope of the YunoHost documentation : for this, consider reading a dedicated tutorial such as [this one](https://ryanstutorials.net/linuxtutorial/) or [this one](http://linuxcommand.org/). But be reassured that you don't need to be a CLI expert to start using it ! + +The `yunohost` command can be used to administrate your server and perform the various actions similarly to what you do on the webadmin. The command must be launched either from the `root` user or from the `admin` user by preceeding them with `sudo`. (ProTip™ : you can become `root` with the command `sudo su` as `admin`). + +YunoHost commands usually have this kind of structure : + +```bash +yunohost app install wordpress --label Webmail + ^ ^ ^ ^ + | | | | + category action argument options +``` + +Don't hesitate to browse and ask for more information about a given category or action using the the `--help` option. For instance, those commands : + +```bash +yunohost --help +yunohost user --help +yunohost user create --help +``` + +will successively list all the categories available, then the actions available in the `user` category, then the usage of the action `user create`. You might notice that the YunoHost command tree is built with a structure similar to the YunoHost admin pages. diff --git a/pages/02.administer/15.admin_guide/15.command_line/command_line.md b/pages/02.administer/15.admin_guide/15.command_line/command_line.md new file mode 100644 index 00000000..99f6de1b --- /dev/null +++ b/pages/02.administer/15.admin_guide/15.command_line/command_line.md @@ -0,0 +1,180 @@ +--- +title: SSH and command line +template: docs +taxonomy: + category: docs +routes: + default: '/ssh' + aliases: + - '/commandline' +page-toc: + active: true +--- + +## What's SSH? + +**SSH** stands for Secure Shell, and refers to a protocol that allows to remotely control and administer a machine using the command line interface (CLI). It is available by default in any terminal on GNU/Linux and macOS. On Windows, you may want to use [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (after launching it, click on Session then SSH). + +The command line interface (CLI) is, in the computer world, the original (and more technical) way of interacting with a computer compared to graphical interface. Command line interfaces are generally said to be more complete, powerful or efficient than a graphical interface, though also more difficult to learn. + +## How to connect +### Login credentials + + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Before running the initial configuration (post-installation)"] + +- If you are **installing at home**, the default credentials are login: `root` and password: `yunohost` (or `1234` if you flashed an armbian image) +- If you are **installing a remote server (VPS)**, your provider should have communicated you the login and password (or allowed you to configure an SSH key) + +[/ui-tab] +[ui-tab title="After"] + +During the postinstall, you've been asked to choose an administration password. This password becomes the new password for the `root` and `admin` users. Additionally, **the `root` SSH login becomes disabled after the postinstall and you should log in using the `admin` user !**. The only exception is that you may still be able to login using `root` *from the local network - or from a direct console on the server* (this is to cover the event where the LDAP server is broken and the `admin` user is unusable). + +!!! If you connected as `admin` and would like to become `root` for convenience (e.g. to avoid typing `sudo` in front of every command), you can become `root` using the command `sudo su` or `sudo -i`. +[/ui-tab] +[/ui-tabs] + +### Address to use + +If you are **installing at home** (e.g. on a Raspberry Pi or OLinuXino or old computer): + - you should be able to connect to your server using `yunohost.local` (or `yunohost-2.local`, depending on how many servers are on your network). + - if `yunohost.local` and the like do not work, your need to [find out the local IP of the server](/finding_the_local_ip). + - if you installed a server at home but are attempting to connect from outside your local network, make sure port 22 is correctly forwarded to your server. + + +If your server is a remote server (VPS), your provider should have communicated you the IP address of the machine + +In any cases, if you already configured a domain name pointing to the appropriate IP, it's much better to use `yourdomain.tld` instead of the IP address. + + +### Connecting + +The SSH command typically looks like: + +```bash +# before the postinstall: +ssh root@11.22.33.44 + +# or after the postinstall: +ssh admin@11.22.33.44 + +# using the domain name instead of the IP (more convenient) +ssh admin@votre.domaine.tld + +# using the local domain name instead of the IP (for local access) +ssh admin@yunohost.local + +# if you changed the SSH port +ssh -p 2244 admin@votre.domaine.tld +``` + +N.B. : `fail2ban` will ban your IP for 10 minutes if you perform 10 failed login attempts. If you need to unban the IP, have a look at the page about [Fail2Ban](/fail2ban) + +## Which other users may connect to the server? + +By default, only the `admin` user can log in to YunoHost SSH server. + +YunoHost's users created via the administration interface are managed by the LDAP directory. By default, they can't connect via SSH for security reasons. Via the permissions system it is possible to allow the connection in SFTP or if it is really necessary in SSH. + +! Be careful who you give SSH access to. This increases even more the attack surface available to a malicious user. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +Go to `Users > Manage groups and permissions`. + +From here, you can add SFTP or SSH permissions to any user or group. + +If you want to add an SSH public key to the user, you have to do it from the command line, as the web interface does not yet offer this feature. +[/ui-tab] +[ui-tab title="From the command line"] +To allow a user or group to access via SFTP or SSH: +```bash +# SFTP +yunohost user permission add sftp +# SSH +yunohost user permission add ssh +``` + +To remove permission: +```bash +# SFTP +yunohost user permission remove sftp +# SSH +yunohost user permission remove ssh +``` + +Finally, it is possible to add, delete and list SSH keys, to improve SSH access security, using the commands: +```bash +yunohost user ssh add-key +yunohost user ssh remove-key +yunohost user ssh list-keys +``` +[/ui-tab] +[/ui-tabs] + + +## Security and SSH + +A more extensive discussion about security & SSH can be found on the [dedicated page](/security). + +## The command line + +!!! Providing a full tutorial about the command line is quite beyond the scope of the YunoHost documentation : for this, consider reading a dedicated tutorial such as [this one](https://ryanstutorials.net/linuxtutorial/) or [this one](http://linuxcommand.org/). But be reassured that you don't need to be a CLI expert to start using it ! + +### The `yunohost` command + +The `yunohost` command can be used to administer your server and perform the various actions similarly to what you do on the webadmin. The command must be launched either from the `root` user or from the `admin` user by preceeding them with `sudo`. (ProTip™ : you can become `root` with the command `sudo su` as `admin`). + +YunoHost commands usually have this kind of structure : + +```bash +yunohost app install wordpress --label Webmail + ^ ^ ^ ^ + | | | | + category action argument options +``` + +Don't hesitate to browse and ask for more information about a given category or action using the the `--help` option. For instance, those commands : + +```bash +yunohost --help +yunohost user --help +yunohost user create --help +``` + +will successively list all the categories available, then the actions available in the `user` category, then the usage of the action `user create`. You might notice that the YunoHost command tree is built with a structure similar to the YunoHost admin pages. + +### The `yunopaste` command +This command allow you to share with an other person the output of a command. + +Example: +```bash +yunohost tools diagnosis | yunopaste +``` + +### The `ynh-vpnclient-loadcubefile.sh` command + +This command is only available if you have the `VPN Client` application installed. You can use it to load a new .cube in case you can't get to the VPN Client interface to do so. + +```bash +ynh-vpnclient-loadcubefile.sh -u -p -c .cube +``` + +### Some useful commands + +If your administration web interface indicates that the API is unreachable, try starting `yunohost-api`: +```bash +systemctl start yunohost-api +``` + +If you can no longer connect with the user `admin` via SSH and via the web interface, the `slapd` service may be down, try restarting it: +```bash +systemctl restart slapd +``` + +If you have manually modified configurations and want to know the changes: +```bash +yunohost tools regen-conf --with-diff --dry-run +``` diff --git a/pages/02.administer/15.admin_guide/20.users/05.groups_and_permissions/groups_and_permissions.fr.md b/pages/02.administer/15.admin_guide/20.users/05.groups_and_permissions/groups_and_permissions.fr.md new file mode 100644 index 00000000..e907cc91 --- /dev/null +++ b/pages/02.administer/15.admin_guide/20.users/05.groups_and_permissions/groups_and_permissions.fr.md @@ -0,0 +1,263 @@ +--- +title: Groupes et permissions +template: docs +taxonomy: + category: docs +routes: + default: '/groups_and_permissions' +--- + +Vous pouvez accéder à l'interface de gestion des *groupes et des permissions* depuis l'admin web en allant dans la section "Utilisateurs" et en cliquant sur le bouton correspondant : + +![](image://button_to_go_to_permission_interface_fr.png?resize=800) + +## Gestion des groupes + +Le mécanisme de groupe peut être utilisé pour définir des groupes d'utilisateurs qui peuvent ensuite être utilisés pour restreindre les autorisations pour les applications et autres services (tels que l'email ou XMPP). Notez qu'il n'est *pas* obligatoire de créer un groupe pour ce faire : vous pouvez également restreindre l'accès à une application ou à un service de manière individuelle. + +L'utilisation de groupes est cependant utile pour la sémantique, par exemple si vous hébergez plusieurs groupes d'amis, des associations ou des entreprises sur votre serveur, vous pouvez créer des groupes comme `association1` et `association2` et ajouter les membres de chaque association au groupe concerné. + +Il est également possible de définir des alias mail pour un groupe, afin que les mails envoyés à `groupe@domain.tld` soient redirigés vers tous les membres du groupe. + + +### Groupes par défaut +Par défaut, deux groupes spéciaux sont créés : +- `all_users`, qui contient tous les utilisateurs enregistrés sur YunoHost, +- `visitors`, c'est-à-dire les personnes qui consultent le serveur sans être connectées. +- `admins`, apparut depuis Yunohost 11.1, ce groupe permet de gérer les administrateurs de la machine, chaque utilisateur aura alors (selon la configuration du serveur) accès en SSH ainsi que la webadmin. + +Vous ne pouvez pas changer le contenu de ces groupes, seulement les permissions qui leur sont accordées. + + +### Lister les groupes existants +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] +Les groupes existants sont listés en haut de la page *groupes et autorisations*. + +![](image://groups_default-groups_fr.png) + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +Pour obtenir la liste des groupes existants en ligne de commande : + + +```shell +$ yunohost user group list +groups: + all_users: + members: + - alice + - bob + - charlie + - delphine +``` +[/ui-tab] +[/ui-tabs] + +### Créer un nouveau groupe +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] +Pour créer un nouveau groupe, il suffit de cliquer sur le bouton "Nouveau groupe" en haut de la page. Vous ne pouvez choisir qu'un nom formé de lettres (majuscules et minuscules) et d'espaces. Le groupe est créé vide et sans aucune permission. + +![](image://groups_button-new-group.png) + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +Dans la ligne de commande, pour créer un nouveau groupe appelé `yolo_crew`, il faut utiliser + +```shell +$ yunohost user group create yolo_crew +``` +[/ui-tab] +[/ui-tabs] + +### Mettre à jour un groupe +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] +Ajoutons un premier utilisateur à ce groupe : dans le panneau du groupe, cliquez sur le bouton "Ajouter un utilisateur" et faites défiler jusqu'à l'utilisateur souhaité, puis cliquez dessus. + +![](image://groups_button-add-user.png) + +Pour supprimer un utilisateur, cliquez sur la croix à côté de son nom d'utilisateur, dans le panneau du groupe. + +![](image://groups_button-remove-user.png) + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +En ligne de commande, utilisez la commande suivante pour ajouter `charlie` et `delphine` au groupe `yolo_crew` : + +```shell +$ yunohost user group add yolo_crew charlie delphine +``` + +(De même, `remove` peut être utilisé pour retirer des membres d'un groupe.) + +Dans la liste des groupes, nous devrions voir : + +```shell +$ yunohost user group list +groups: + all_users: + members: + - alice + - bob + - charlie + - delphine + yolo_crew: + members: + - charlie + - delphine +``` +[/ui-tab] +[/ui-tabs] + +### Supprimer un groupe + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] +Pour supprimer un groupe, cliquez sur la croix rouge en haut à droite du panneau du groupes. Une confirmation vous sera demandée. + +![](image://groups_button-delete-group.png) + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] + +Pour supprimer le groupe `yolo_crew` en ligne de commande, vous pouvez exécuter : + +```shell +$ yunohost user group delete yolo_crew +``` +[/ui-tab] +[/ui-tabs] + +## Gestion des permissions + +Le mécanisme de permissions permet de restreindre l'accès aux services (par exemple mail, XMPP...) et aux applications, ou même à des parties spécifiques des applications (par exemple l'interface d'administration de WordPress). + +### Liste des permissions + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] +La page des groupes liste les permissions données à chaque groupe, y compris les groupes spéciaux `all_users` et `visitors`. + +![](image://groups_default-with-permissions.png) + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +Pour répertorier les permissions et les accès correspondants en ligne de commande : +```shell +$ yunohost user permission list +permissions: + mail.main: + allowed: all_users + wordpress.admin: + allowed: + wordpress.main: + allowed: all_users + xmpp.main: + allowed: all_users +``` +Ici, nous constatons que tous les utilisateurs enregistrés peuvent utiliser le mail, XMPP, et accéder au blog WordPress. Cependant, personne ne peut accéder à l'interface d'administration de WordPress. + +Plus de détails peuvent être affichés en ajoutant l'option `--full` qui affichera la liste des utilisateurs correspondant aux groupes autorisés, ainsi que les adresses web associées à une permission (pertinent pour les applications web). +[/ui-tab] +[/ui-tabs] + +### Ajouter des permissions à un groupe ou un utilisateur + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] +Pour ajouter une permission à un groupe, il suffit de cliquer sur le bouton "+" dans le panneau du groupe, de faire défiler jusqu'à la permission souhaitée, puis de cliquer dessus. + +![](image://groups_add-permission-group.png) + +Notez que vous pouvez également autoriser un seul utilisateur, en utilisant le panneau spécifique en bas de la page. + +![](image://groups_add-permission-user.png) + +Notez que, par exemple, si nous voulons restreindre la permission pour le mail afin que seul Bob soit autorisé à envoyer des courriels, nous devons également supprimer la permission du panneau de groupe 'Tous les utilisateurs'. + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +Pour permettre à un groupe d'accéder à l'interface d'administration de WordPress via la ligne de commande : + +```shell +$ yunohost user permission update wordpress.admin --add yolo_crew +``` + +Vous pouvez également autoriser un seul utilisateur : + +```shell +$ yunohost user permission update wordpress.admin --add alice +``` + +Et maintenant, nous pouvons voir que YoloCrew et Alice ont tous deux accès à l'interface d'administration de WordPress : + +```shell +$ yunohost user permission list + [...] + wordpress.admin: + allowed: + - yolo_crew + - alice + [...] +``` + +Pour permettre seulement à Bob d'accéder aux emails en ligne de commande : + +```shell +$ yunohost user permission update mail --remove all_users --add bob +``` + +[/ui-tab] +[/ui-tabs] +Notez que certaines permissions peuvent être « protégées », ce qui signifie que vous ne pourrez pas les ajouter/enlever du groupe Visiteurs. Ce mécanisme est généralement là car ajouter/enlever la permission n'a pas de sens (ou est un risque de sécurité). + +La webadmin émettra un avertissement si vous définissez une permission qui est remplacée par une permission plus large. + +![](image://groups_alerte-permission.png) + +### Montrer/cacher les tuiles dans le portail utilisateur + +Depuis YunoHost 4.1, il est possible de montrer/cacher certaines tuiles dans le portail. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] + +Depuis la webadmin, vous pouvez changer cela en allant dans la vue de l'application à manipuler, puis dans `Gérer les étiquettes et les tuiles`, et cocher/décocher l'option `Montrer la tuile dans le portail utilisateur` pour la permission correspondante. + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] + +En ligne de commande, le même genre de chose peut être fait avec : + +```shell +# Activer la tuile pour l'interface d'admin de WordPress +$ yunohost user permission update wordpress.admin --show_tile True +``` +[/ui-tab] +[/ui-tabs] + + +### Gérer les alias des groupes +Chaque groupe peut utiliser des alias de mail, bien que leur configuration se fasse actuellement uniquement depuis la CLI. Par défaut, le groupe `admins` dispose ainsi de `admins@domain.tld`, `root@domain.tld` ... : les messages envoyés à ces adresses sont redirigés vers tous les membres du groupe `admins`. + +L'utilisation de la commande `yunohost user group info` permet de lister tous les alias pour le groupe renseigné. + +```shell +$ yunohost user group info admins + [...] + mail-aliases: + - root@maindomain.tld + - admin@maindomain.tld + - admins@maindomain.tld + - webmaster@maindomain.tld + - postmaster@maindomain.tld + - abuse@maindomain.tld + [...] +``` + +Il est possible de les ajouter avec l'action `add-mailalias` ou de les enlever avec `remove-mailalias`. +```shell +$ yunohost user group add-mailalias +``` diff --git a/pages/02.administer/15.admin_guide/20.users/05.groups_and_permissions/groups_and_permissions.md b/pages/02.administer/15.admin_guide/20.users/05.groups_and_permissions/groups_and_permissions.md new file mode 100644 index 00000000..587d25ac --- /dev/null +++ b/pages/02.administer/15.admin_guide/20.users/05.groups_and_permissions/groups_and_permissions.md @@ -0,0 +1,263 @@ +--- +title: Users groups and permissions +template: docs +taxonomy: + category: docs +routes: + default: '/groups_and_permissions' +--- + +You can access the *groups and permissions* management interface from the webadmin +by going into the 'Users' section and clicking the corresponding button: + +![](image://button_to_go_to_permission_interface.png) + +## Managing groups + +The group mechanism can be used to define groups of users which then can be used to restrict permissions for applications and other services (such as mail or XMPP). Note that it is *not* mandatory to create a group to do so: you can also restrict access to an app or service on a user-per-user basis. + +Using groups is however useful for semantics, for example if you host multiple groups of friends, associations or businesses on your server, you might want to create groups like `association1` and `association2` and add members of each association to the relevant group. + +It's also possible to define mail aliases for a group, such that mails sent to `groupe@domain.tld` will be dispatched to all members of the group. + + +### Default groups + +By default, two special groups are created: +- `all_users`, that contain all users registered on YunoHost, +- `visitors`, that applies to people viewing the server while not logged in. + +The content of those groups cannot be changed, only the permissions given to them. + +### List existing groups + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +The existing groups are listed at the top of the *groups and permissions* page. + +![](image://groups_default-groups.png) + +[/ui-tab] +[ui-tab title="From the command line"] + +To list the currently existing groups in CLI : + +```shell +$ yunohost user group list +groups: + all_users: + members: + - alice + - bob + - charlie + - delphine +``` +[/ui-tab] +[/ui-tabs] + +### Creating a new group + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +To create a new group, simply click on the "New Group" button at the top of the page. You may only choose a name formed with letters (uper- and lowercase) and spaces. The group is created empty and without any permission. + +![](image://groups_button-new-group.png) + +[/ui-tab] +[ui-tab title="From the command line"] +In CLI, to create a new group called `yolo_crew` + +```shell +$ yunohost user group create yolo_crew +``` +[/ui-tab] +[/ui-tabs] + +### Updating a group + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +Let's add a first to this group: in the group panel, click the button "add a user" and scroll to the desired user, then click on it. + +![](image://groups_button-add-user.png) + +To remove a user, click on the cross next to their username, in the group panel. + +![](image://groups_button-remove-user.png) + +[/ui-tab] +[ui-tab title="From the command line"] +In CLI, use the following command to add `charlie` and `delphine`to the `yolo_crew` group: + +```shell +$ yunohost user group add yolo_crew charlie delphine +``` + +(similarly, `remove` can be used to remove members from a group) + +Now in the group list we should see: + +```shell +$ yunohost user group list +groups: + all_users: + members: + - alice + - bob + - charlie + - delphine + yolo_crew: + members: + - charlie + - delphine +``` +[/ui-tab] +[/ui-tabs] + +### Deleting groups + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +To delete a group, click on the red cross on the top right of the group panel. You will be asked for confirmation. + +![](image://groups_button-delete-group.png) + +[/ui-tab] +[ui-tab title="From the command line"] +To delete the group `yolo_crew` in CLI, you may run + +```shell +$ yunohost user group delete yolo_crew +``` +[/ui-tab] +[/ui-tabs] + +## Managing permissions + +The permission mechanism allow to restrict access to services (for example mail, XMPP...) and apps, or even specific parts of the apps (for example the administration interface of WordPress). + +### List permissions + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +The groups page lists the permissions given to each group, including the special groups `all_users` and `visitors`. + +![](image://groups_default-with-permissions.png) + +[/ui-tab] +[ui-tab title="From the command line"] +To list permissions and corresponding accesses in CLI: + +```shell +$ yunohost user permission list +permissions: + mail.main: + allowed: all_users + wordpress.admin: + allowed: + wordpress.main: + allowed: all_users + xmpp.main: + allowed: all_users +``` + +Here, we find that all registered users can use email, XMPP, and access the WordPress blog. However, nobody can access the WordPress admin interface. + +More details can be displayed by adding the `--full` option which will display the list of users corresponding to groups allowed, as well as urls associated to a permission (relevant for web apps). +[/ui-tab] +[/ui-tabs] + +### Add accesses to group or users + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +To add a permission to a group, simply click the "+" button in the group panel, scroll to the desired permission, then click on it. + +![](image://groups_add-permission-group.png) + +Note that you can also allow a single user, by using the specific panel at the bottom of the page. + +![](image://groups_add-permission-user.png) + +[/ui-tab] +[ui-tab title="From the command line"] +To allow a group to access the WordPress admin interface in CLI: + +```shell +$ yunohost user permission update wordpress.admin --add yolo_crew +``` + +Note that you can also allow a single user, by using the specific panel at the bottom of the page. + +```shell +$ yunohost user permission update wordpress.admin --add alice +``` + +And now we may see that both the YoloCrew and Alice have access to the WordPress admin interface: + +```shell +$ yunohost user permission list + [...] + wordpress.admin: + allowed: + - yolo_crew + - alice + [...] +``` + +Note that, for example, if we want to restrict permission for email so that only Bob is allowed to email, we should also remove `all_users` from the permission, by deleting it from the `all_users` group panel, or in CLI: + +```shell +$ yunohost user permission update mail --remove all_users --add bob +``` +[/ui-tab] +[/ui-tabs] + +Note that some permissions may be "protected", meaning that you won't be able to add/remove the visitor group to this permission. Generally, this is because it would make no sense (or is a security risk) to do so. + +The webadmin will issue a warning if you set a permission that is superseded by a wider permission. + +![](image://groups_alerte-permission.png) + +### Hide/display specific tiles in the user portal + +Since YunoHost 4.1, you can choose to hide/display specific tiles in the SSO. +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +In the webadmin, you can do so by going in the corresponding app view, go in `Manage label and tiles` and check/uncheck the option `Display the tile in the user portal` for the corresponding permission. + +[/ui-tab] +[ui-tab title="From the command line"] + +In command line, this may be done with: + +```shell +# Enable the tile for the WordPress admin interface +$ yunohost user permission update wordpress.admin --show_tile True +``` +[/ui-tab] +[/ui-tabs] + + +### Config alias group +Each group can use mail aliases, but their configuration is only available from the CLI so far. For example, the `admins` group is configured with aliases such as `admins@domain.tld`, `root@domain.tld` ... : mail sent to these addresses will be dispatched to all members of the `admins` group. + +The command `yunohost user group info` will list them. + +```shell +$ yunohost user group info admins + [...] + mail-aliases: + - root@maindomain.tld + - admin@maindomain.tld + - admins@maindomain.tld + - webmaster@maindomain.tld + - postmaster@maindomain.tld + - abuse@maindomain.tld + [...] +``` + +To add a new mail, use the action `add-mailalias` or `remove-mailalias` to delete it. +```shell +$ yunohost user group add-mailalias +``` diff --git a/pages/02.administer/15.admin_guide/20.users/users.de.md b/pages/02.administer/15.admin_guide/20.users/users.de.md new file mode 100644 index 00000000..1eafd7a4 --- /dev/null +++ b/pages/02.administer/15.admin_guide/20.users/users.de.md @@ -0,0 +1,36 @@ +--- +title: Benutzer und das SSO +template: docs +taxonomy: + category: docs +routes: + default: '/users' +--- + +## Benutzer + +Benutzer sind Menschen, die Zugang zu Anwendungen und anderen Diensten auf Ihrem Server haben. Der Administrator kann Benutzer über die Webadministration (in der Kategorie Benutzer) oder über die Kommandozeile (siehe `yunohost user --help`) hinzufügen und verwalten. Danach erhalten die Benutzer eine persönliche E-Mail-Adresse (vom Administrator ausgewählt), ein XMPP-Konto und können sich im Benutzerportal anmelden, um auf Anwendungen zuzugreifen, für die sie Berechtigungen haben, und andere Parameter zu konfigurieren. + +Der erste Benutzer, der angelegt wird, erhält auch automatisch die E-Mail-Aliase `root@main.domain.tld` und `admin@main.domain.tld`, so dass E-Mails, die an diese Adressen geschickt werden, im Postfach des ersten Benutzers landen. + +! Sie sollten vorsichtig sein, wem Sie Zugang zu Ihrem Server gewähren. Im Hinblick auf die Sicherheit vergrößert sich dadurch die Angriffsfläche für jemanden, der sich auf die eine oder andere Weise am Server zu schaffen machen will. + +## Das Benutzerportal oder SSO + +[center] +![](image://user_panel.png) +[/center] + +Das Benutzerportal, auch SSO für 'Single Sign On' genannt, ermöglicht es den Benutzern, einfach zwischen den verschiedenen Anwendungen, auf die sie Zugriff haben, zu wechseln. Der Begriff "Single Sign On" kommt daher, dass der Benutzer sich nur im Portal anmelden muss, um automatisch bei allen Anwendungen angemeldet zu werden, die eine Authentifizierung erfordern (oder zumindest bei denen, die mit SSO/LDAP integriert sind, da dies manchmal technisch kompliziert oder gar nicht möglich ist). + +Im Portal können Benutzer auch auf den Avatar oben links klicken, um einige andere Einstellungen zu konfigurieren, z. B. ihre Identität, E-Mail-Aliase, automatische E-Mail-Weiterleitungen oder ihr Passwort zu ändern. + +!!! Sie sollten sich bewusst sein, dass das SSO nur über den tatsächlichen Domänennamen (z.B. `https://the.domain.tld/yunohost/sso`) erreicht werden kann, und NICHT über die IP des Servers (z.B. `https://11.22.33.44/yunohost/sso`), im Gegensatz zum Webadmin! Dies ist ein wenig verwirrend, aber aus technischen Gründen notwendig. Wenn Sie sich in einer Situation befinden, in der Sie auf das SSO zugreifen müssen, ohne dass Ihr DNS richtig konfiguriert ist, könnten Sie in Erwägung ziehen, Ihre `/etc/hosts` wie in [dieser Seite](/dns_local_network) beschrieben zu verändern. + +## Benutzergruppen und Berechtigungen + +Siehe [diese spezielle Seite](/groups_and_permissions). + +## SSH-Zugang + +Siehe [diese spezielle Seite](/ssh). diff --git a/pages/02.administer/15.admin_guide/20.users/users.fr.md b/pages/02.administer/15.admin_guide/20.users/users.fr.md new file mode 100644 index 00000000..64696fe8 --- /dev/null +++ b/pages/02.administer/15.admin_guide/20.users/users.fr.md @@ -0,0 +1,37 @@ +--- +title: Les utilisateurs et le SSO +template: docs +taxonomy: + category: docs +routes: + default: '/users' +--- + +## Utilisateurs + +Les utilisateurs sont les êtres humains qui ont accès aux applications et autres services sur votre serveur. L'administrateur peut ajouter et gérer des utilisateurs via l'administration web (dans la catégorie Utilisateurs) ou via la catégorie `yunohost user` de la ligne de commande. Après cela, les utilisateurs obtiennent une adresse e-mail personnelle (choisie par l'administrateur), un compte XMPP, et peuvent se connecter au portail utilisateur (SSO) pour accéder aux applications pour lesquelles ils ont des permissions et configurer d'autres paramètres. + +Le premier utilisateur créé reçoit aussi automatiquement les alias email `root@main.domain.tld` et `admin@main.domain.tld`, de sorte que le courrier envoyé à ces adresses se retrouvera dans la boîte aux lettres de cet utilisateur. + +! Vous devriez faire attention à qui vous donnez l'accès à votre serveur. En termes de sécurité, cela augmente considérablement la surface d'attaque pour quelqu'un qui veut perturber le serveur d'une manière ou d'une autre. + +## Le portail utilisateur, ou SSO + +[center] +![](image://user_panel.png) +[/center] + +Le portail utilisateur, également appelé SSO pour 'Single Sign On', permet à l'utilisateur de naviguer facilement entre les différentes applications auxquelles il a accès. En particulier, le terme 'Single Sign On' vient du fait que l'utilisateur n'a qu'à se connecter au portail pour être automatiquement connecté à toutes les applications qui nécessitent une authentification (ou du moins celles qui sont intégrées avec le SSO/LDAP, car cela est parfois techniquement compliqué ou pas possible du tout). + +Dans le portail, les utilisateurs peuvent également cliquer sur l'avatar en haut à gauche pour configurer d'autres paramètres tels que leur identité, les alias de messagerie, les transferts automatiques de courrier ou leur mot de passe. + +!!! Vous devez être conscient que le SSO ne peut être atteint que par le nom de domaine (c.-à-d. `https://the.domain.tld/yunohost/sso`), et non pas en utilisant l'IP du serveur (c.-à-d. `https://11.22.33.44/yunohost/sso`), contrairement à la webadmin ! C'est un peu déroutant dans certaines situations, mais c'est nécessaire pour des raisons techniques. Si vous êtes dans une situation où vous avez besoin d'accéder au SSO sans avoir votre DNS correctement configuré pour une raison quelconque, vous pouvez envisager de modifier votre `/etc/hosts` comme décrit dans [cette page](/dns_local_network). + +## Gestion des groupes d'utilisateurs et permissions + +Voir [cette page de documentation dédiée](/groups_and_permissions). + +## Accès SSH + +Voir [cette page de documentation dédiée](/ssh). + diff --git a/pages/02.administer/15.admin_guide/20.users/users.it.md b/pages/02.administer/15.admin_guide/20.users/users.it.md new file mode 100644 index 00000000..adc5fb12 --- /dev/null +++ b/pages/02.administer/15.admin_guide/20.users/users.it.md @@ -0,0 +1,38 @@ +--- +title: Gli utenti e il SSO +template: docs +taxonomy: + category: docs +routes: + default: '/users' +--- + +## Utenti + +Gli utenti sono gli esseri umani che hanno l'accesso alle applicazione e agli altri servizi sul tuo server. L'amministratore può aggiungere e gestire degli utenti tramite l'amministrazione web (nella categoria Utenti) o con la linea di comando (vedi `yunohost user --help`). Dopo queste operazioni, gli utenti avranno un indirizzo mail personale (scelto dall'amministratore), un account XMPP, e potranno connettersi al portale dell'utente (SSO) per accedere alle applicazioni di cui hanno i permessi e configurare altri parametri. + +Il primo utente creato avrà automaticamente l'alias mail `root@main.domani.tld` e `admin@main.domani.tld`, in modo che le mail inviate a quegli indirizzi saranno ricevute nella casella mail di questo utente. + +! Fai attenzione a chi dai l'accesso al tuo server. In termini di sicurezza ciò aumenta considerevolmente la superficie di attacco di chi vorrebbe compromettere il server in un modo o nell'altro. + +## Il portale dell'utente, o SSO + +[center] +![](image://user_panel.png) +[/center] + +Il portale dell'utente, chiamato anche SSO per 'Single Sign On', permette all'utente di navigare facilmente tra le diverse applicazioni a cui può accedere. In particolare, il termine 'Single Sign On' in pratica fa sì che l'utente debba connettersi al portale per essere automaticamente connesso a tutte le applicazioni che hanno bisogno di un'autenticazione (a comunque quelle che sono integrate con SSO/LDAP, dove ciò non sia tecnicamente complicato o non fosse possibile del tutto). + +Nel portale, gli utilizzatori possono anche cliccare sull'avatar in alto a sinistra per configurare altri parametri come il loro nome, l'alias per le mail, l'inoltro automatico delle mail, o per cambiare la propria password. + +!!! Devi essere consapevole che il SSO può essere caricato solo dal nome di dominio (per esempio `https://the.domani.tld/yunohost/sso`), e non con l'indirizzo IP del server (per esempio `https://11.22.33.44/yunohost/sso`), al contrario dell'amministratore web! Può creare confusione, ma è necessario per ragioni tecniche. Se sei in una situazione dove è necessario accedere a SSO senza avere i DNS configurati correttamente per diverse ragioni, puoi avere la possibilità di modificare il tuo `/etc/hosts` come descritto in [questa pagina](/dns_local_network). + +## Gestione di gruppi di utenti e permessi + +Vedi [questa pagina dedicata](/groups_and_permissions). + +## Accesso SSH + +Gli utenti possono essere autorizzati a connettersi via SSH, e le chiavi SSH possono essere aggiunte per questo scopo. Attualmente questa funzionalità può essere configurata solo con la linea di comando. Vedi `yunohost user ssh --help` per i comandi specifici. + +! Fai attenzione a chi dai accesso via SSH. Ciò aumenta ancora di più la superficie di attacco disponibile per un utente malintenzionato. diff --git a/pages/02.administer/15.admin_guide/20.users/users.md b/pages/02.administer/15.admin_guide/20.users/users.md new file mode 100644 index 00000000..0377b8c2 --- /dev/null +++ b/pages/02.administer/15.admin_guide/20.users/users.md @@ -0,0 +1,61 @@ +--- +title: Users and the SSO +template: docs +taxonomy: + category: docs +page-toc: + active: true +routes: + default: '/users' +--- + +## Users + +Users are human being who have access to applications and other services on your server. The administrator can add and manage users through the web administration (in the User category) or through the command line (see `yunohost user --help`). After that, users obtain a personal email address (chosen by the admin), an XMPP account, and can log in the user portal to access applications they have permissions over and configure other parameters. + +The first user created also automatically gets email aliases `root@main.domain.tld` and `admin@main.domain.tld`, such that mail sent to these addresses will end up in the first user's mailbox. + +! You should be careful about who you give your server access to. In terms of security, this largely increase the attack surface for someone who wants to mess with the server one way or another. + +## The user portal, or SSO + +[center] +![](image://user_panel.png) +[/center] + +The user portal, also called the SSO for 'Single Sign On' allows user to browse easily between the different apps they have access to. In particular, the term 'Single Sign On' comes from the fact that user only need to log in the portal to automatically be logged to all apps that require authentication (or at least those who are integrated with the SSO/LDAP, since this is sometimes technically complicated or not possible at all). + +In the portal, users can also click on the avatar in the top-left to configure some other settings such as their identify, mail aliases, automatic mail forwards, or change their password. + +!!! You should be aware that the SSO can only be reached through the actual domain name (i.e. `https://the.domain.tld/yunohost/sso`), and NOT by just using the IP of the server (i.e. `https://11.22.33.44/yunohost/sso`), contrarily to the webadmin ! This is a bit confusing but is necessary for technical reason. If you are in a situation where you need to access the SSO without having your DNS properly configured for some reason, you might consider tweaking your `/etc/hosts` as described in [this page](/dns_local_network). + +## Creating new users + +Only the administrator can create new users. From the webadmin, open the `Users` menu and click on the `+ New user` main button. Fill in all the whole form. + +Users are created with an associated email address (and XMPP account) with the format `username@domain.tld`. Additional email aliases and email forwards can later be added by the admin and the user. + +The password should be at least 8 characters - though it is good practice to use longer password (i.e. a passphrase) and/or to use various kind of characters (uppercase, lowercase, digits and special characters). + +Finalize the user creation by clicking on the `Save` button. + +[center] +![Main menu](image://create_user_1.png?classes=caption "From the main menu of the webadmin, open `Users`.") + +[/center] + +[center] +![Users list](image://create_user_2.png?classes=caption "From the top of the users list, click on `+ New user`.") +[/center] + +[center] +![User creation form](image://create_user_3.png?classes=caption "Fill in the form.") +[/center] + +## User groups and permissions + +See [this dedicated page](/groups_and_permissions). + +## SSH access + +See [this dedicated page](/ssh). diff --git a/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.de.md b/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.de.md new file mode 100644 index 00000000..acca9712 --- /dev/null +++ b/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.de.md @@ -0,0 +1,95 @@ +--- +title: Zertifikat +template: docs +taxonomy: + category: docs +routes: + default: '/certificate' +--- + +Digitale Zertifikate werden verwendet, um die Vertraulichkeit und Echtheit der Kommunikation zwischen einem Webbrowser und Ihrem Server zu gewährleisten. Insbesondere schützen sie vor Angreifern, die versuchen, Ihren Server zu identifizieren. + +YunoHost bietet ein **selbstsigniertes-Zertifikat**. Es bedeutet, dass Ihr Server die Gültigkeit des Zertifikats garantiert. Es genügt **für eine persönliche Verwendung**, weil Sie Ihrem eigenen Server vertrauen. Dies könnte jedoch ein Problem sein, wenn Sie den Zugriff auf einem Fremden, wie Webbenutzer, für eine Website öffnen möchten. +Und zwar, werden die Benutzer eine solche Warnung auf dem Bildschirm sehen: + +![](image://postinstall_error_de.png) + +Was im Wesentlichen den Besucher fragt: **"Vertrauen Sie dem Server, der diese Website hostet? "**. +Dies kann viele Menschen selbstverständlich erschrecken. + +Um diese Verwirrung zu vermeiden, ist es möglich, ein digitales Zertifikat zu erhalten, welches direkt von den Browsern anerkannt wurde, und von einer "bekannten" Zertifizierungsstelle unterzeichnet wird: **Let's Encrypt**, **Gandi**, **RapidSSL**, **StartSSL**, **Cacert**. + +**Let's Encrypt** bietet kostenlose Zertifikate an. Seit der Version 2.5 erlaubt YunoHost ein solches Zertifikat direkt von der Verwaltungsschnittstelle oder der Befehlszeile zu installieren. Der Rest des Dokuments erklärt die Installation und Verwaltung eines solchen Zertifikats. Sie können auch [ein digitales Zertifikat von einer anderen Zertifizierungstelle als Let's Encrypt installieren](/certificate_custom). + +### Digitales Zertifikat Let's Encrypt installieren + +Bevor Sie ein Let's Encrypt-Zertifikat installieren, vergewissern Sie sich, dass Ihr DNS ordnungsgemäß konfiguriert ist (Ihre.Domain.tld sollte auf die IP Ihres Servers zeigen) und Ihre Website von außen in HTTP zugänglich ist (d. h. zumindest der Port 80 wird korrekt an Ihren Server umgeleitet). + +#### Mit Web-Verwaltungsschnittstelle + +Gehen Sie zu dem Abschnitt "Domaine" der Administrationsoberfläche. Dann +zu dem Abschnitt, der Ihrer Domain entspricht. Da steht einen Knopf 'Certificat SSL'. + +![](image://domain-certificate-button.png) + +Im Abschnitt 'Certificat SSL', wird der aktuelle Status angegeben. +Wurde der Domain-Name vor kurzem hinzugefügt, so steht ein selbst-signiertes Zertifikat zur verfügung. + +![](image://certificate-before-LE.png) + +Wenn die Domain korrekt konfiguriert ist, dann ist es möglich +mit dem grünen Knopf ein Let's Encrypt-Zertifikat einzusetzen. + +![](image://certificate-after-LE.png) + +Nach Abschluss der Installation, die ensprechende Domain mit Webbrowser +in HTTPS-Modus besuchen um die Berücksichtigung des digitalen Zertifikats +von Let's Encrypt zu überprüfen. Das digitale Zertifikat wird automatisch etwa alle drei Monate erneuert. + +![](image://certificate-signed-by-LE.png) + +#### Mit Shell-Zugang + +SSH-Zugang auf Ihrem Server herstellen. + +So können Sie den aktuellen Status des digitalen Zertifikats überprüfen + +```bash +yunohost domain cert-status Ihre.domain.tld +``` + +Dann Let's Encrypt-Zertifikat installieren + +```bash +yunohost domain cert-install Ihre.domain.tld +``` + +Ergebnis sollte so aussehen : + +```bash +Success! The SSOwat configuration has been generated +Success! Successfully installed Let's Encrypt certificate for domain DOMAIN.TLD! +``` + +Nach Abschluss der Installation, die ensprechende Domain mit Webbrowser +in HTTPS-Modus besuchen um die Berücksichtigung des digitalen Zertifikats +von Let's Encrypt zu überprüfen. Das digitale Zertifikat wird automatisch etwa alle drei Monate erneuert. + +##### Fehlerbehebung + +Wenn das Zertifikat aufgrund einer schlechten Handhabung nicht funktionsfähig ist +(z. B. Verlust des Zertifikats oder Dateien nicht lesbar), ist es trotzdem möglich +ein selbst-signiertes Zertifikat zu regenerieren : + +```bash +yunohost domain cert-install Ihre.domain.tld --self-signed --force +``` + +Trotz einer sorgfältigen Überprüfung der DNS-Konfiguration und auch von außen +die Möglichkeit mit HTTP-Modus Zugriff auf den Webserver besteht, kann YunoHost +manschmal die Einstellungen verweigern. In diesem Fall ist es notwendig : + +- die Parameter `127.0.0.1 Ihre.domain.tld` auf der Datei `/etc/hosts` des Webserver hinzufügen. +Wenn es immer noch nicht funktionsfähig ist, also die Überprüfungen deaktivieren mit `--no-checks` nach dem Befehl `cert-install`. + + diff --git a/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.es.md b/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.es.md new file mode 100644 index 00000000..3d1b2d80 --- /dev/null +++ b/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.es.md @@ -0,0 +1,82 @@ +--- +title: Certificado +template: docs +taxonomy: + category: docs +routes: + default: '/certificate' +--- + +Los certificados sirven para garantizar la confidencialidad y la autenticidad de las comunicaciones entre un navegador web y tu servidor. En particular, permite proteger los visitantes contra atacantes que podrían intentar de robar la identidad del servidor. + +Por defecto, YunoHost provee un certificado **auto-firmado**, lo que significa que es tu servidor el que garantiza la validez del certificado. Es suficiente **en el caso de un uso personal**, porque puedes confiar en tu propio servidor, pero esto planteará problemas si piensas en abrir el acceso a tu servidor a personas anónimas, por ejemplo si quieres alojar un sitio web. +En efecto, los usuarios deberán pasar por una pantalla de este tipo : + +![](image://postinstall_error.png) + +Esta pantalla equivale a que te pidan ** ¿ Confías en el servidor que aloja este sitio ? ***. Esto puede asustar tu usuarios (con toda la razón). + +Para evitar esta confusión, es posible obtener un certificado, reconocido directamente por los navegadores, firmado por una autoridad « conocida » : **Let's Encrypt**, **Gandi**, **RapidSSL**, **StartSSL**, **Cacert**. + +**Let's Encrypt** propone certificados gratuitos. Desde la versión 2.5, YunoHost permite instalar directamente tales certificados desde la interfaz de administración o la línea de comandos. El resto del documento detalla la instalación y la firma de este tipo de certificado. También puedes [instalar un certificado de otra autoridad que Let's Encrypt](/certificate_custom). + +### Instalar un certificado Let's Encrypt + +Antes de intentar la instalación de un certificado Let's Encrypt, primero debes asegurarte de que el DNS está configurado correctamente (tu.dominio.tld debe apuntar hacia la IP de tu servidor) y que el sitio está accesible en HTTP desde afuera (i.e. por lo menos que el puerto 80 está correctamente redirigido hacia tu servidor). + +#### Vía la interfaz de administración web + +En la categoría 'Dominio' de la interfaz de administración, y luego en la sección dedicada a tu dominio, encontrarás un botón 'Certificado SSL'. + +![](image://domain-certificate-button-fr.png) + +En la sección 'Certificado SSL', puedes ver el estado corriente del certificado. +Si acabas de añadir el dominio, ya dispone de un certificado auto-firmado. + +![](image://certificate-before-LE-fr.png) + +Si tu dominio está configurado correctamente, es posible instalar un certificado Let's Encrypt vía el botón verde. + +![](image://certificate-after-LE-fr.png) + +Una vez la instalación terminada, puedes ir a tu dominio vía tu navegador, en HTTPS, para comprobar que tu certificado está bien firmado por Let's Encrypt. El certificado se renovará automáticamente al cabo de cada periodo de tres meses. + +![](image://certificate-signed-by-LE.png) + +#### Vía línea de comandos + +Conectate en tu servidor en SSH. + +Puedes comprobar el estatus corriente de tu certificado vía + +```bash +yunohost domain cert-status tu.dominio.tld +``` + +Instala el certificado Let's Encrypt vía + +```bash +yunohost domain cert-install tu.dominio.tld +``` + +Este comando debe devolverte : + +```bash +Success! The SSOwat configuration has been generated +Success! Successfully installed Let's Encrypt certificate for domain DOMAIN.TLD! +``` + +Una vez que la instalación está terminada, puedes dirigirte a tu dominio vía tu navegador, en HTTPS, para comprobar que el certificado está bien firmado por Let's Encrypt. El certificado se renovará automáticamente al cabo de cada periodo de tres meses. + +##### Si hay un problema + +Si, después de una manipulación incorrecta, un certificado se encuentra en una mala situación (e.g. pérdida del certificado o imposibilidad de leerlo), es posible regenerar un certificado autofirmado : + +```bash +yunohost domain cert-install tu.dominio.tld --self-signed --force +``` + +Si YunoHost te dice que tu dominio está mal configurado mientras que has verificado tu configuración DNS y que tienes acceso a tu servidor en HTTP desde afuera, puedes intentar : + +- de añadir una línea `127.0.0.1 tu.dominio.tld` al archivo `/etc/hosts` en tu servidor ; +- si la instalación todavía no funciona, desactiva las verificaciones añadiendo `--no-checks` al comando `cert-install`. diff --git a/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.fr.md b/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.fr.md new file mode 100644 index 00000000..40a531e0 --- /dev/null +++ b/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.fr.md @@ -0,0 +1,99 @@ +--- +title: Certificat +template: docs +taxonomy: + category: docs +routes: + default: '/certificate' +--- + +Les certificats sont utilisés pour garantir la confidentialité et l'authenticité des communications entre un navigateur web et votre serveur. En particulier, il permet de protéger les visiteurs contre des attaquants qui chercheraient à usurper l'identité du serveur. + +YunoHost fournit par défaut un certificat **auto-signé**, ce qui veut dire que c’est votre serveur qui garantit la validité du certificat. C’est suffisant **pour un usage personnel**, car vous pouvez avoir confiance en votre serveur, en revanche cela posera problème si vous comptez ouvrir l’accès à votre serveur à des anonymes, par exemple pour héberger un site web. +En effet, les utilisateurs devront passer par un écran de ce type : + +![](image://postinstall_error.png) + +Cet écran revient à demander **« Avez-vous confiance au serveur qui héberge ce site ? »**. +Cela peut effrayer vos utilisateurs (à juste titre). + +Pour éviter cette confusion, il est possible d’obtenir un certificat, reconnu directement par les navigateurs, signé par une autorité « connue » : **Let's Encrypt**, **Gandi**, **RapidSSL**, **StartSSL**, **Cacert**. + +**Let's Encrypt** propose des certificats gratuits. Depuis la version 2.5, YunoHost permet d'installer directement un tel certificat depuis l'interface d'administration ou la ligne de commande. La suite du document détaille l'installation et la gestion d'un tel certificat. Vous pouvez également [installer un certificat d'une autre autorité que Let's Encrypt](/certificate_custom). + +### Installer un certificat Let's Encrypt + +Avant de chercher à installer un certificat Let's Encrypt, assurez vous que +votre DNS est correctement configuré (votre.domaine.tld doit pointer sur l'IP +de votre serveur) et que votre site est accessible en HTTP depuis l'extérieur +(c.-à-d. qu'au moins le port 80 est correctement redirigé vers votre serveur). + +#### Via la webadmin + +Rendez-vous dans la partie 'Domaines' de l'interface d'administration, puis dans +la section dédiée à votre domaine. Vous trouverez un bouton 'Certificat SSL'. + +![](image://domain-certificate-button-fr.png) + +Dans la section 'Certificat SSL', vous pourrez voir l'état actuel du certificat. +Si vous venez d'ajouter le domaine, il dispose d'un certificat auto-signé. + +![](image://certificate-before-LE-fr.png) + +Si votre domaine est correctement configuré, il vous est alors possible de +passer à un certificat Let's Encrypt via le bouton vert. + +![](image://certificate-after-LE-fr.png) + +Une fois l'installation effectuée, vous pouvez vous rendre sur votre domaine +via votre navigateur, en HTTPS, pour vérifier que votre certificat est bien +signé par Let's Encrypt. Le certificat sera renouvelé automatiquement tous les +trois mois environ. + +![](image://certificate-signed-by-LE.png) + +#### Via la ligne de commande + +Connectez-vous sur votre serveur en SSH. + +Vous pouvez vérifier le statut actuel de votre certificat via : + +```bash +yunohost domain cert-status votre.domaine.tld +``` + +Installez le certificat Let's Encrypt via : + +```bash +yunohost domain cert-install votre.domaine.tld +``` + +Cette commande doit retourner : + +```bash +Success! The SSOwat configuration has been generated +Success! Successfully installed Let's Encrypt certificate for domain votre.domaine.tld! +``` + +Une fois l'installation effectuée, vous pouvez vous rendre sur votre domaine +via votre navigateur, en HTTPS, pour vérifier que votre certificat est bien +signé par Let's Encrypt. Le certificat sera renouvelé automatiquement tous les +trois mois environ. + +##### En cas de problème + +Si, suite à une mauvaise manipulation, un certificat se retrouve dans une +situation fâcheuse (e.g. perte du certificat ou impossible de lire le +certificat), il est possible de repartir sur des bases propres en regénérant un +certificat auto-signé : + +```bash +yunohost domain cert-install votre.domaine.tld --self-signed --force +``` + +Si YunoHost trouve que votre domaine est mal configuré quand bien même vous +avez bien vérifié votre configuration DNS et avez bien accès à votre serveur en +HTTP depuis l'extérieur, vous pouvez tenter : + +- d'ajouter une ligne `127.0.0.1 votre.domaine.tld` au fichier `/etc/hosts` sur votre serveur ; +- si l'installation ne fonctionne toujours pas, de désactiver les vérifications en ajoutant `--no-checks` à la commande `cert-install`. diff --git a/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.it.md b/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.it.md new file mode 100644 index 00000000..04a6894e --- /dev/null +++ b/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.it.md @@ -0,0 +1,93 @@ +--- +title: Certificati +template: docs +taxonomy: + category: docs +routes: + default: '/certificate' +--- + +I certificati sono utilizzati per garantire la confidenzialità e l'autenticità delle comunicazioni tra il browser e il server. In particolare proteggono il visitatore del sito da usurpazioni dell'identità del server. + +YunoHost fornisce di default un certificato **auto firmato**, cioè il vostro server garantisce la validità del certificato. Questo metodo è valido per un **uso personale** del vostro server, del quale certamente vi fidate, mentre non è sufficiente se volete esporre il vostro server su internet ad esempio se esso ospita un sito web. + +Con questa configurazioni chi accede al vostro sito vedrà una schermata del tipo: + +![](image://postinstall_error.png) + +Il browser fondamentalmente ci chiede **«Potete fidarvi del server che ospita questo sito?»** e giustamente molti visitatori possono preoccuparsi davanti a tale domanda. + +Per evitare questa situazione è possibile ottenere un certificato riconosciuto dai browser e firmato da un'autorità conosciuta come **Let's Encrypt**, **Gandi**, **RapidSSL**, **StartSSL**, **Cacert**. + +In particolare **Let's Encrypt** offre i certificati gratuitamente. Dalla versione 2.5 YunoHost permette di installare il certificato direttamente dall'interfaccia di amministrazione web o da linea di comando. Di seguito troverete la documentazione per l'installazione e la gestione di un certificato. È comunque possibile [installare ugualmente un certificato di un'autorità diversa da Let's Encrypt](/certificate_custom). + +### Installare un certificato Let's Encrypt + +Prima di installare il certificato Let's Encrypt, assicuratevi che il vostro DNS +sia correttamente configurato (nomevostrodominio.tld deve puntare all'indirizzo +IP del vostro server) e che il vostro sito sia accessibile in HTTP dall'esterno +(la porta 80 deve essere aperta e rediretta verso il vostro server). + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Dall'interfaccia web"] + +Recatevi nella sezione 'Domini' dell'interfaccia di amministrazione, scegliete la sezione del vostro dominio, qui troverete un pulsante 'Certificato SSL' + +![](image://domain-certificate-button.png) + + +Nella sezione 'Certificati SSL' potere visualizzare lo stato attuale del +certificato. Se avete appena creato il dominio, esso disporrà di un certificato +auto firmato. + +![](image://certificate-before-LE.png) + +Se il vostro dominio è correttamente configurato è possibile installare il certificato Let's Encrypt con il bottone verde. + +![](image://certificate-after-LE.png) + +Una volta installato il certificato potete verificarne il corretto funzionamento collegandovi con il vostro browser al dominio in HTTPS. Il certificato verrà automaticamente rinnovato ogni tre mesi. + +![](image://certificate-signed-by-LE.png) + +[/ui-tab] +[ui-tab title="Dalla riga di comando"] + +Collegatevi al server con SSH. + +Potete controllare lo stato del certificato in uso con il comando: + +```bash +yunohost domain cert-status your.domain.tld +``` + +Installate il certificato Let's Encrypt con il comando: + +```bash +yunohost domain cert-install your.domain.tld +``` + +Che dovrebbe dare come risultato: + +```bash +Success! The SSOwat configuration has been generated +Success! Successfully installed Let's Encrypt certificate for domain DOMAIN.TLD! +``` + +Una volta installato il certificato potete verificarne il corretto funzionamento collegandovi con il vostro browser al dominio in HTTPS. Il certificato verrà automaticamente rinnovato ogni tre mesi. + +[/ui-tab] +[/ui-tabs] + +### Problemi e soluzioni + +Se il vostro certificato risultasse non funzionante a causa di qualche errore (ad esempio lo avete perso oppure non siete in grado di leggere i file) potete ripulire la situazione rigenerando un certificato autofirmato con questo comando: + +```bash +yunohost domain cert-install your.domain.tld --self-signed --force +``` + +Se YunoHost pensa che il vostro dominio non è configurato correttamente nonstante abbiate controllato la configurazione del DNS e riuscite a collegarvi in HTTP al vostro server anche dall'esterno della rete locale allora potete: + +- aggiungere una linea `127.0.0.1 vostrodominio.tld` nel file `/etc/hosts` sul vostro server; +- se nonostante questo l'installazione del certificato dovesse ancora fallire potete disabilitare il controllo con l'opzione `--no-checks` dopo il comando `cert-install`. diff --git a/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.md b/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.md new file mode 100644 index 00000000..2c6144cd --- /dev/null +++ b/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.md @@ -0,0 +1,86 @@ +--- +title: Certificate +template: docs +taxonomy: + category: docs +routes: + default: '/certificate' +--- + +Certificates are used to guarantee the confidentiality and authenticity of the communication between a web browser and your server. In particular, they protect against attackers trying to impersonate your server. + +YunoHost provides a **self-signed** certificate, it means that your server guaranties the certificate validity. It's enough **for personal usage**, because you trust your own server. But this could be a problem if you want to open access to anonymous like web user for a website. + +In practice, visitors will see a screen list this: + +![](image://postinstall_error.png) + +Which basically asks the visitor : **"Do you trust the server hosting this website?"**. This can rightfully frighten a lot of people. + +To avoid this confusion, it's possible to get a certificate signed a known authority named **Let's Encrypt** which provide free certificates directly recognized by browsers. YunoHost allows to directly install this certificate from the web administration interface or from the command line. + +### Install a Let's Encrypt certificate + +Before attempting to install a Let's Encrypt certificate, you should make sure that your DNS is correctly configured (your.domain.tld should point to your server's IP) and that your domain is accessible through HTTP from outside your local network (i.e. at least port 80 should be forwarded to your server). + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] + +Go to the 'Domain' part of the admin interface, then in the section dedicated to your.domain.tld. You should find a 'SSL certificate' button: + +![](image://domain-certificate-button.png) + +In the 'SSL certificate' section, you can see the status of the current certificate. If you just added the domain, it should be a self-signed certificate. + +![](image://certificate-before-LE.png) + +If your domain is correctly configured, it is then possible to install the Let's Encrypt certificate via the green button. + +![](image://certificate-after-LE.png) + +Once the install is made, you can check that the certificate is live via your browser by going to your domain in HTTPS. The certificate will automatically be renewed every three months. + +![](image://certificate-signed-by-LE.png) + +[/ui-tab] +[ui-tab title="From the command line"] + +Connect to your server through SSH. + +You can check the status of your current certificate with: + +```bash +yunohost domain cert-status your.domain.tld +``` + +Install a Let's Encrypt certificate with + +```bash +yunohost domain cert-install your.domain.tld +``` + +This should return : + +```bash +Success! The SSOwat configuration has been generated +Success! Successfully installed Let's Encrypt certificate for domain DOMAIN.TLD! +``` + +Once this is done, you can check that the certificate is live via your browser by going to your domain in HTTPS. The certificate will automatically be renewed every three months. + +[/ui-tab] +[/ui-tabs] + +##### Troubleshooting + +If due to some bad tweaking, your certificate ends up in a bad state (e.g. lost the certificate or unable to read the files), you should be able to clean the situation by regenerating a self-signed certificate: + +```bash +yunohost domain cert-install your.domain.tld --self-signed --force +``` + +If YunoHost thinks that your domain is badly configured despite the fact that you checked the DNS configuration and you have access in HTTP to your server from outside your local network, then you can: + +- add a line `127.0.0.1 your.domain.tld` to the file `/etc/hosts` on your server; +- if the certificate installation still doesn't work, you can disable the checks with `--no-checks` after the `cert-install` command. + diff --git a/pages/02.administer/15.admin_guide/25.domains/domains.de.md b/pages/02.administer/15.admin_guide/25.domains/domains.de.md new file mode 100644 index 00000000..905fc39a --- /dev/null +++ b/pages/02.administer/15.admin_guide/25.domains/domains.de.md @@ -0,0 +1,66 @@ +--- +title: Domains, DNS conf und Zertifikat +template: docs +taxonomy: + category: docs +routes: + default: '/domains' +--- + +YunoHost ermöglicht es Ihnen, mehrere Domains auf demselben Server zu verwalten und zu bedienen. Zum Beispiel können Sie einen Blog und Nextcloud auf einer ersten Domain `yolo.com` hosten, und einen Web-Mail-Client auf einer zweiten Domain `swag.nohost.me`. Jede Domain wird automatisch so konfiguriert, dass sie Web-, Mail- und XMPP-Dienste nutzen kann. + +Domains können im Abschnitt 'Domain' des Webadmin verwaltet werden, oder über die Kategorie `yunohost domain` in der Kommandozeile. + +Jedes Mal, wenn Sie eine Domain hinzufügen, wird erwartet, dass Sie sie bei einem Domain-Registrar gekauft haben (oder besitzen), damit Sie die [DNS-Konfiguration](/dns_config) verwalten können. Die Ausnahme sind die [`.nohost.me`, `.noho.st` und `ynh.fr` Domains](/dns_nohost_me), die vom YunoHost-Projekt bezahlt werden und dank einer automatisierten dynDNS-Einrichtung direkt in YunoHost integriert werden können. Um Kosten und Missbrauch zu begrenzen, kann jede Instanz immer nur eine dieser Domains einrichten, Sie können jedoch so viele Subdomains hinzufügen, wie Sie möchten. Wenn Sie zum Beispiel `example.noho.st` wählen, können Sie später die Domains `video.example.noho.st` oder `www.example.ynh.noho.st` oder jede andere Subdomain hinzufügen, die Sie benötigen. + +Die bei der Erstkonfiguration (nach der Installation) gewählte Domäne wird als Hauptdomäne des Servers definiert: von hier aus werden das SSO und die Webverwaltungsschnittstelle verfügbar sein. Die Hauptdomain kann später über die Webverwaltung unter Domains > (die Domain) > Set default oder mit der Befehlszeile `yunohost tools maindomain` geändert werden. + +Beachten Sie abschließend, dass es im Kontext von YunoHost keine Hierarchie zwischen den ihm bekannten Domains gibt. Im obigen Beispiel könnten Sie eine dritte Domain `foo.yolo.com` hinzufügen - diese würde aber als eine von `yolo.com` unabhängige Domain betrachtet werden. + +## Nicht-lateinische Zeichen + +Wenn Ihre Domain spezielle, nicht-lateinische Zeichen enthält, müssen Sie ihre [internationalisierte Version](https://de.wikipedia.org/wiki/Internationalisierter_Domainname) über [Punycode](https://de.wikipedia.org/wiki/Punycode) verwenden. Sie können [diesen Konverter](https://www.charset.org/punycode) verwenden und den konvertierten Domainnamen in Ihrer YunoHost-Konfiguration verwenden. + +## Subdomains + +! Bitte beachten Sie, dass YunoHost Domains und deren Subdomains unabhängig voneinander betrachtet. +! Sie **müssen** alle Domains und Subdomains, die Sie nutzen möchten, registrieren. + +## DNS-Konfiguration + +DNS (Domain Name System) ist ein System, das es Computern auf der ganzen Welt ermöglicht, von Menschen lesbare Domain-Namen (wie z.B. `yolo.com`) in maschinenverständliche Adressen, sogenannte IP-Adressen (wie z.B. `11.22.33.44`), zu übersetzen. Damit diese Übersetzung (und andere Funktionen) funktioniert, müssen Sie DNS-Einträge sorgfältig konfigurieren. + +YunoHost kann eine empfohlene DNS-Konfiguration für jede Domain generieren, einschließlich der für Mail und XMPP benötigten Elemente. Die empfohlene DNS-Konfiguration ist im Webadmin über Domain > (die Domain) > DNS-Konfiguration oder mit dem Befehl `yunohost domain dns-conf the.domain.tld` verfügbar. + +## SSL/HTTPS-Zertifikate + +Ein weiterer wichtiger Aspekt der Domain-Konfiguration ist das SSL/HTTPS-Zertifikat. YunoHost ist mit Let's Encrypt integriert, so dass der Administrator ein Let's Encrypt-Zertifikat anfordern kann, sobald Ihr Server von jedem im Internet über den Domainnamen korrekt erreichbar ist. Siehe die Dokumentation über [certificates](/certificate) für weitere Informationen. + +## Unterpfade vs. einzelne Domains pro Anwendungen + +!!!! Section to be moved to a translated /apps_overview page + +Im Zusammenhang mit YunoHost ist es durchaus üblich, eine einzige (oder einige wenige) Domains zu haben, auf denen mehrere Anwendungen in "Unterpfaden" installiert sind, so dass man am Ende etwas wie dieses erhält: + +```bash +yolo.com + ├── /blog : Wordpress (ein Blog) + ├─── /cloud : Nextcloud (ein Cloud-Dienst) + ├─── /rss : TinyTiny RSS (ein RSS-Reader) + ├── /wiki : DokuWiki (ein Wiki) +``` + +Alternativ können Sie jede (oder einige) Anwendungen auf einer eigenen Domäne installieren. Abgesehen von der Ästhetik bietet die Verwendung von Subdomänen anstelle von Subpfaden die Möglichkeit, einen Dienst leichter auf einen anderen Server zu verschieben. Außerdem kann es sein, dass einige Anwendungen aus technischen Gründen eine eigene Domäne benötigen. Der Nachteil ist, dass Sie jedes Mal eine neue Domäne hinzufügen und daher möglicherweise zusätzliche DNS-Einträge konfigurieren, die Diagnose neu starten und ein neues Let's Encrypt-Zertifikat installieren müssen. + +Dies mag für Endbenutzer hübscher aussehen, wird aber im Allgemeinen als komplizierter und weniger effizient im Zusammenhang mit YunoHost angesehen, da Sie jedes Mal eine neue Domain hinzufügen müssen. Dennoch kann es sein, dass einige Anwendungen aus technischen Gründen eine eigene Domain benötigen. + +Wenn alle Anwendungen aus dem vorherigen Beispiel auf einer separaten Domain installiert wären, würde dies etwa so aussehen: + +```bash +blog.yolo.com : Wordpress (ein Blog) +cloud.yolo.com : Nextcloud (ein Cloud-Dienst) +rss.yolo.com : TinyTiny RSS (ein RSS-Reader) +wiki.yolo.com : DokuWiki (ein Wiki) +``` + +!!! Viele Anwendungen verfügen über eine Funktion, mit der Sie die URL Ihrer Anwendung ändern können. Diese Wahl zwischen Subpfad und Subdomain kann in einigen Fällen durch eine einfache Manipulation in der Verwaltungsschnittstelle umgekehrt werden. diff --git a/pages/02.administer/15.admin_guide/25.domains/domains.fr.md b/pages/02.administer/15.admin_guide/25.domains/domains.fr.md new file mode 100644 index 00000000..3706d12e --- /dev/null +++ b/pages/02.administer/15.admin_guide/25.domains/domains.fr.md @@ -0,0 +1,51 @@ +--- +title: Domaines, configurations DNS, et certificats +template: docs +taxonomy: + category: docs +routes: + default: '/domains' +--- + +YunoHost permet de gérer et de servir plusieurs domaines sur un même serveur. Vous pouvez donc héberger, par exemple, un blog et un Nextcloud sur un premier domaine `yolo.com`, et un client de messagerie web sur un second domaine `swag.nohost.me`. Chaque domaine est automatiquement configuré pour pouvoir gérer des services web, des courriels et une messagerie instantanée XMPP. + +Les domaines peuvent être gérés dans la section 'Domaines' de la webadmin, ou via la catégorie `yunohost domain` de la ligne de commande. + +Chaque fois que vous ajoutez un domaine, il est supposé que vous avez acheté (ou en tout cas que vous contrôlez) le domaine, de sorte que vous puissiez gérer la [configuration DNS](/dns_config) de celui-ci. Une exception concerne les [domaines en `.nohost.me`, `.noho.st` et `ynh.fr`](/dns_nohost_me) qui sont offerts par le Projet YunoHost, et peuvent être directement intégrés avec YunoHost grâce à une configuration DynDNS automatique. Pour limiter les abus et les coûts, une instance ne peut avoir qu'un seul domaine offert à la fois, toutefois vous pouvez ajouter autant de sous-domaines de celui-ci que vous le souhaitez. Par exemple, ci vous choisissez `exemple.ynh.fr` vous pourrez par la suite ajouter les domaines `video.exemple.ynh.fr` ou `www.exemple.ynh.fr` ou tout autre sous-domaine dont vous pourriez avoir l'utilité. + +Le domaine choisi lors de la configuration initiale (post-installation) est défini comme le domaine principal du serveur : c'est là que le SSO et la webadmin seront disponibles. Le domaine principal peut être modifié ultérieurement via la webadmin dans Domaines > (le domaine) > Définir par défaut, ou avec la ligne de commande `yunohost tools maindomain`. + +Enfin, il faut noter que, dans le contexte de YunoHost, il n'y a pas de hiérarchie entre les domaines qu'il connaît. Dans l'exemple précédent, on peut ajouter un troisième domaine `foo.yolo.com` - mais il serait considéré comme un domaine indépendant de `yolo.com`. + +## Domaines locaux + +À partir de YunoHost v4.3, les domaines finissant par `.local` sont pleinement supportés, en plus du `yunohost.local` par défaut. +Ils n'utilisent pas le protocole DNS mais mDNS (appelé aussi Zeroconf, Bonjour), qui permet leur diffusion sans configuration particulière mais exclusivement sur votre réseau local, ou votre VPN. +Leur utilisation est donc parfaitement adaptée si vous ne prévoyez pas de rendre une de vos apps disponible sur l'Internet. + +!!!! Le protocole mDNS ne permet pas d'ajouter des sous-domaines. Ainsi `domaine.local` est valide, `sous.domain.local` ne l'est pas. + +C'est le service `yunomdns` qui se charge de diffuser l'existence de vos domaines `.local` sur votre réseau. +Il possède un fichier de configuration, `/etc/yunohost/mdns.yml`, qui permet de choisir quels domaines sont diffusés, et sur quelles interfaces réseau. +Ce fichier est régénéré automatiquement dès que vous ajoutez ou supprimez un domaine `.local`. + +Le service cherchera toujours à diffuser le domaine `yunohost.local`. Si vous avez plusieurs serveurs YunoHost sur votre réseau, alors tentez `yunohost-2.local`, etc. +Le chiffre risque de changer selon quel serveur démarre en premier, donc ne comptez pas dessus pour y installer des apps : créez vos propres domaines locaux. + +! Malheureusement, les appareils Android avant la version 12 (sortie en 2021) ne semblent pas écouter le protocole mDNS. +! Pour profiter des domaines `.local` sur vos appareils Android, vous devez entrer l'adresse IP locale de votre serveur YunoHost dans leur paramètre DNS. + +## Sous-domaines + +! Gardez bien en tête que YunoHost considère les domaines et leur sous-domaines indépendamment. +! **Il vous faut** enregistrer chacun des domaines et sous-domaines que vous voulez utiliser. + +## Configuration DNS + +DNS (Domain Name System) est un système qui permet aux ordinateurs du monde entier de traduire les noms de domaine lisibles par l'homme (comme `yolo.com`) en adresses IP compréhensibles par les machines (comme `11.22.33.44`). Pour que cette traduction (et d'autres fonctionnalités) fonctionne, il faut configurer soigneusement les enregistrements DNS. + +YunoHost peut générer une configuration DNS recommandée pour chaque domaine, y compris les enregistrements nécessaires pour les parties emails et XMPP. La configuration DNS recommandée est disponible dans l'administrateur web via Domaines > (le domaine) > configuration DNS, ou avec la commande `yunohost domain dns-conf the.domain.tld`. + +## Certificats SSL/HTTPS + +Un autre aspect important de la configuration des domaines est le certificat SSL/HTTPS. YunoHost est intégré avec Let's Encrypt, de sorte qu'une fois que votre serveur est correctement accessible depuis n'importe qui sur Internet via le nom de domaine, l'administrateur peut demander l'installation d'un certificat Let's Encrypt. Voir la documentation sur les [certificats](/certificate) pour plus d'informations. diff --git a/pages/02.administer/15.admin_guide/25.domains/domains.it.md b/pages/02.administer/15.admin_guide/25.domains/domains.it.md new file mode 100644 index 00000000..c5b5f340 --- /dev/null +++ b/pages/02.administer/15.admin_guide/25.domains/domains.it.md @@ -0,0 +1,58 @@ +--- +title: Domini, configurazioni DNS e certificati +template: docs +taxonomy: + category: docs +routes: + default: '/domains' +--- + +Yunohost permette l'installazione e la gestione di più domini sullo stesso server. Potrete quindi ospitare, ad esempio, un blog e una istanza Nextcloud sul dominio primario yolo.com, e un altro servizio su un secondo dominio swag.nohost.me. Ogni dominio viene automaticamente configurato affinché possa gestire i servizi web, le mail, e un servizio di chat XMPP. + +I domini possono essere configurati a partire dalla sezione 'Domini' della pagina di amministrazione web, o attraverso la sezione `yunohost domain` da linea di comando. + +Ogni volta che aggiungete un dominio, sia esso vostro o del quale abbiate facoltà di gestione, dovete averne il pieno controllo per la poter effettuare la sua [configurazione DNS](/dns_config). Fanno eccezione i [domini in .nohost.me, .noho.st et ynh.fr](/dns_nohost_me) offerti dal progetto YunoHost, che possono essere direttamente integrati nel vostro server YunoHost grazie alla configurazione automatica di un servizio DynDns. Al fine di impedire abusi e limitare i costi, una instanza YunoHost può essere configurata con un solo dominio offerto, tuttavia potete aggiungere tutti i suoi sotto domini che desiderate. Ad esempio, se scegliete il dominio `exemple.ynh.fr` potrete in un secondo tempo aggiungere i domini `video.exemple.ynh.fr` o `www.exemple.ynh.fr` o qualsiasi altro sottodominio che possa servirvi. + +Il dominio scelto durante la configurazione iniziale (post-installazione) viene definito come dominio principale del server: a quell'indirizzo saranno disponibili l'SSO e la pagina di amministrazione web. Il domino principale può essere modificato ulteriormente attraverso ls pagina di amministrazione web nella sezione Domini > (dominio) > Renderlo di defaut, o da linea di commando con il comando `yunohost tools maindomain`. + +Infine, bisogna notare che, nel contesto di YunoHost, non esiste un ordine gerarchico tra i domini conosciuti. Nell'esempio precedente possiamo aggiungere un terzo dominio, ad esempio, `foo.yolo.com` - ma verrà considerato come un dominio indipendente da `yolo.com`. + +## Domini locali + +Dalla versione 4.3 di YunoHost i domini che terminano in `.local` sono pienamente supportati oltre al già presente di default `yunohost.local`. +Essi non utilizzano il protocollo DNS ma il protocollo mDNS (conosciuto anche come Zeroconf, Bonjour), che permette il loro utilizzo senza bisogno di particolari configurazioni ma solo sulla rete locale o sulla vostra VPN. +Il loro utilizzo è quindi adatto in caso di server non esposti su internet. + +!!!! Il protocollo mDNS non permette di aggiungere dei sotto domini, quindi `dominio.local` è valido, mente non lo è `sotto.dominio.local`. + +`yunomdns` è il servizio preposto all'esposizione del vostro dominio `.local` sull'interfaccia di rete locale. +È possibile configurarlo modificando il file `/etc/yunohost/mdns.yml` che permette di scegliere quali domini devono essere esposti e su quali interfacce di rete. +Questo file viene rigenerato automaticamente ogni volta che aggiungete o eliminate un dominio `.local`. + +Il servizio cercherà comunque di esporre il dominio `yunohost.local`, se avete più server YunoHost sulla vostra rete, provate a nominare il vostro server `yunohost-2.local`, `yunohost-3.local` etc. +Purtroppo il numero rischia di cambiare in base all'ordine di avvio dei server, numerare i server è quindi un metodo inaffidabile per cui è preferibile creare differenti domini locali. + +! Sfortunatamente i device Android con versioni antecedenti alla 12 (pubblicata nel 2021), non supportano il protocollo mDNS +! Di conseguenza per usare il dominio `.local` dovete inserire l'indirizzo IP del server YunoHost nella configurazione del DNS. + +## Sotto domini + +! Ricordate che YunoHost separa la gestione dei domini e dei loro sotto domini. +! **È necessario** quindi registrare ogni dominio e sotto dominio che volete utilizzare. + +## Configurazione DNS + +DNS (Domain Name System) è il sistema che permette, ai computer di tutto il mondo di tradurre i nomi di dominio leggibili dall'uomo (es. `yolo.com`), in un indirizzo IP comprensibile dal computer (es `11.22.33.44`). Affinché questa traduzione (e altre funzionalità) avvenga, bisogna configurare con estrema cura i record DNS. + +YunoHost può generare una configurazione DNS raccomandata per ogni dominio che comprende le configurazioni necessarie per le componenti email e XMPP. La configurazione DNS raccomandata è disponibile nella pagina di amministrazione web all'indirizzo Domini > (il dominio) > configurazione DNS oppure con il comando `yunohost domain dns-conf the.domain.tld`. + +## Certificati SSL/HTTPS + +Un altro importante aspetto della configurazione dei domini è quello riguardante il certificato SSL/HTTPS. YuhoHost integra Let's Encrypt, potete installare il certificato e impostare il rinnovo automatico. La documentazione relativa e altre informazioni si trovano alla pagina [certificati](/certificate). + + + + + + + diff --git a/pages/02.administer/15.admin_guide/25.domains/domains.md b/pages/02.administer/15.admin_guide/25.domains/domains.md new file mode 100644 index 00000000..359f4b5d --- /dev/null +++ b/pages/02.administer/15.admin_guide/25.domains/domains.md @@ -0,0 +1,104 @@ +--- +title: Domains +template: docs +taxonomy: + category: docs +routes: + default: '/domains' +shortcode-ui: + theme: + tabs: lite +--- + +DNS (Domain Name System) is a system that allows computers from around the world to translate human-readable domain names (such as `yolo.com`) to machine-understandable addresses called IP addresses (such as `11.22.33.44`). For this translation (and other features) to work, you must carefully configure DNS records. + +YunoHost allows you to manage and serve several domains on the same server with the same public ip. For instance, you can host a blog and Nextcloud on a first domain `yolo.com`, and a web mail client on a second domain `swag.nohost.me`. Each domain is automatically configured to handle web services, mail services and XMPP services. + +Domains can be managed in the 'Domain' section of the webadmin, or through the `yunohost domain` category of the command line. + +![A screenshot of the webadmin domain interface with an "Add domain" button and a list of domains](image://webadmin_domain.png) + +## 3 types of domains + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Yunohost's domains (the free and easy way)"] + +In order to make self-hosting as accessible as possible, the YunoHost Project provides a *free* and *automatically configured* domain name service. By using this service, you won't have to [configure DNS records](/dns_config) yourself, which can be tedious and technical. + +The following (sub)domains are offered: +- `whateveryouwant.nohost.me`; +- `whateveryouwant.noho.st`; +- `whateveryouwant.ynh.fr`. + +In more, YunoHost uses an integrated dynamic DNS mechanism, so your server can stay reachable even if your public IP change. + +To get one of this domain you simply need to choose `I don't have a domaine name…` during the initial configuration (postinstall) or on the `Add domain` page. + +![Here a screenshot of the "Add domain" page where you can choose "I don't have a domain name"](image://webadmin_dyndns.png) + +! To limit resources costs and abuses, each instance may only have one of these domains setup at any given time, however you can add as many sub-domains of it as you wish. For example, if you choose `example.noho.st` you can later add the domains `video.example.noho.st` or `www.example.ynh.noho.st` or any other sub-domain you may need. In this case you need to select `I already have a domain name`. + +!! You have to keep a backup archive of the config file of your server if you want to be able to restore your server with this domain name without [asking help of YunoHost team to recover access on it](https://forum.yunohost.org/t/nohost-domain-recovery-suppression-de-domaine-en-nohost-me-noho-st-et-ynh-fr/442). + +[More information on this domains](/dns_nohost_me) + +[/ui-tab] +[ui-tab title="Your own domains"] +Having your own domain brings several advantages: + + * more control and autonomy + * simpler domain name (for example directly in .net or .org) + +However, you have to pay for it each year (about 15€/year) and you have to do some extra configuration to [setup a correct DNS zone](/dns_config). Our diagnosis tool can trigger alert to help you to do this configuration. + +If you already have your own domain, you can simply click "I already have a domain name…". If you don't, in order to simplify and automate the DNS configuration, we suggest you to buy it from a [registrar whose API is supported by YunoHost](/providers/registrar). + +![Here a screenshot of the "Add domain" page where you can choose "I already have a domain name"](image://webadmin_domain_owndomain.png) + + +[Know more on DNS zone configuration](/dns_config) + + +[/ui-tab] +[ui-tab title="Local domains (only reachable in your local network)"] + +Starting from YunoHost v4.3, domains ending by `.local` are fully supported, in addition to the default `yunohost.local`. +They do not use the DNS protocol, but the mDNS one (also known as Zeroconf, Bonjour), which allows them to be published with no specific configuration but exclusively on your local network or VPN. +Their use is this especially suitable when you do not need your apps to be available on the Internet. + +![Here a screenshot of the "Add domain" page where you can choose "I already have a domain name" and setup your domain ending by .local](image://webadmin_domain_local.png) + +!!!! mDNS protocol does not allow for subdomains to be created. So `domain.local` will work, while `sub.domain.local` is not possible. + +`Yunomdns` service takes care of publishing your `.local` domains on your network. +It has a configuration file, `/etc/yunohost/mdns.yml`, which allows you to choose which domains are published, and on which network interfaces. +This file is automatically regenerated whenever you add or delete a `.local` domain. + +The service will always try to publish `yunohost.local`. If you have multiple YunoHost servers on your network, try `yunohost-2.local`, and so on. +The number may change depending on which server starts first, so do not rely on it to use actual apps and create your own domains. + +! Unfortunately, Android devices before version 12 (released in 2021) do not seem to be listening to mDNS protocol. +! To be able to reach `.local` domains on your Android devices, you will have to add in their DNS settings your YunoHost server's local IP address. + + +[/ui-tab] +[/ui-tabs] + +## The main domain +The domain chosen during the initial configuration (post-install) is defined as the main (or default) domain of the server : this is where [the user portal (SSO)](/users) will be available. The main domain can later be changed through the web admin in Domains > (the domain) > Set default, or with the command line `yunohost tools maindomain`. + +More technically, the main domain is also used as hostname by SMTP protocol to send email (EHLO) and determine which value should be configured in the reverse DNS bind to your public IP. If this 2 values are mis-configured, the diagnosis tool will trigger you an alert. + +## Subdomains + +! Bear in mind, YunoHost considers domains and their subdomains independently. +! You **need** to register all the domains and subdomains you want to use. + +## About Non-latin characters + +If your domain has special, non-latin characters, it will be transformed by YunoHost into its [internationalized version](https://en.wikipedia.org/wiki/Internationalized_domain_name) through [Punycode](https://en.wikipedia.org/wiki/Punycode). So when you use the command line, you have to use the punycode format return for example by `yunohost domain list`. + + +## SSL/HTTPS certificates + +Another important aspect of domain configuration is the SSL/HTTPS certificate. YunoHost is integrated with Let's Encrypt, so once your server is correctly reachable from anybody on the internet through the domain name, the administrator can request a Let's Encrypt certificate. See the documentation about [certificates](/certificate) for more information. diff --git a/pages/02.administer/15.admin_guide/30.apps/apps.fr.md b/pages/02.administer/15.admin_guide/30.apps/apps.fr.md new file mode 100644 index 00000000..72d7d4bc --- /dev/null +++ b/pages/02.administer/15.admin_guide/30.apps/apps.fr.md @@ -0,0 +1,82 @@ +--- +title: Les applications +template: docs +taxonomy: + category: docs +routes: + default: '/apps_overview' +--- + +L'une des fonctionnalités principales de YunoHost est la possibilité d'installer facilement des applications immédiatement utilisables. Pour donner des exemples d'application, il est possible d'installer un système de blog, un "cloud" (pour héberger et synchroniser des fichiers), un site web, un lecteur RSS... + +Les applications peuvent être installées et gérées via l'interface d'administration web dans la partie 'Applications', ou via les commandes de la catégorie `yunohost app`. + +Il est possible de naviguer dans le catalogue d'application dans la webadmin (dans `Applications > Installer`) ou bien [ici](/apps). + +! Attention à rester raisonnable sur le nombre d'applications installées. Chaque installation supplémentaire augmente la surface d'attaque et les risques de panne. Idéalement, si vous souhaitez faire des tests, faites-le avec une autre instance par exemple dans [une machine virtuelle](/install/hardware:virtualbox). + +Les applications doivent être packagées manuellement par les packageurs/mainteneurs d'applications. Les applications peuvent être intégrées avec YunoHost pour gérer les mises à jour, la sauvegarde/restauration et l'intégration LDAP/SSO, entre autres. + +## Instructions après l'installation + +Certaines applications ont besoin de vous communiquer des instructions, des URL ou des identifiants une fois qu'elles sont installées. Pensez donc à vérifier les emails du premier compte utilisateur. + +## Niveaux d'intégration et de qualité + +Des tests automatisés sont exécutés régulièrement pour tester l'intégration et la qualité de toutes les applications qui ont été déclarées "working" par leur packageurs. Le résultat est un niveau entre 0 et 8, dont la signification est détaillée sur [cette page](/packaging_apps_levels). Certains résultats de tests peuvent également être disponibles sur [ce tableau de bord](https://dash.yunohost.org/appci/branch/stable). + +Par défaut, seules les applications d'une qualité suffisante vous sont proposées. Lorsque la qualité d'une application chute, les mises à jour sont mises en attente et l'installation n'est plus possible, le temps que le problème soit résolu. + +## Intégration LDAP / SSO + +Les applications peuvent prendre en charge l'intégration avec le système LDAP / Single Sign On, de sorte que les utilisateurs qui se connectent au portail utilisateur puissent être automatiquement authentifiés sur toutes ces applications. Certaines applications ne le supportent pas, soit parce que cette fonctionnalité n'est pas implémentée en amont du logiciel de l'application, soit parce que le mainteneur n'a pas encore travaillé sur cette partie. Cette information est en général disponible sur le README du paquet d'application. + +## Applications multi-instances + +Certaines applications peuvent être installées plusieurs fois (à différents endroits) ! Pour ce faire, il suffit de retourner dans Applications > Installer, et de sélectionner à nouveau l'application à installer. + +## Gestion des tuiles + +Les applications web peuvent fournir des tuiles disponibles depuis le portail utilisateur, il est possible de choisir de les afficher ou non et de redéfinir le texte via l'interface d'administration web `Applications > Nom de l'APP > Opérations > Gérer les étiquettes et les tuiles` ou via la ligne de commande: `yunohost app change-label "Nouveau texte"`. + +## Gestion de l'accès des utilisateurs + +L'accès aux applications peut être limité à certains utilisateurs seulement. Ceci peut être configuré via la webadmin sur la page [Groupes et permissions](/groups_and_permissions), ou de la même manière via la sous-catégorie de commandes `yunohost user permission`. + +## Éxécuter des commandes au sein d'une app + +À partir de YunoHost v11.1.21.4, si vous avez besoin d'exécuter des commandes avec le binaire de l'application, ou des commandes PHP, etc., vous pouvez exécuter la commande `yunohost app shell `. +Cela aura pour effet de : +- ouvrir un nouveau shell Bash en tant qu'utilisateur système de l'application +- ouvrir le répertoire de travail de l'application (par exemple `/var/www/`) +- précharger l'environnement avec des variables provenant du service de l'application, s'il existe +- remplacer `php`, pour qu'il pointe vers la version de PHP utilisée par l'application + +## Packaging d'applications + +Si vous voulez apprendre ou contribuer à l'empaquetage des applications, veuillez consulter la [documentation des contributeurs](/contributordoc). + +## Sous-chemins vs. domaines individuels par application + +Dans le contexte de YunoHost, il est assez courant d'avoir un seul (ou quelques) domaines sur lesquels plusieurs applications sont installées dans des "sous-chemins", de sorte que l'on se retrouve avec quelque chose comme ceci : + +```bash +yolo.com + ├─── /blog : Wordpress (un blog) + ├─── /cloud : Nextcloud (un service de cloud) + ├─── /rss : TinyTiny RSS (un lecteur RSS) + ├─── /wiki : DokuWiki (un wiki) +``` + +Alternativement, on peut choisir d'installer chaque application (ou certaines) sur un domaine dédié. Au delà de la question esthétique, utiliser des sous-domaines au lieu de sous-chemins permet de laisser la possibilité de déplacer un service sur un autre serveur plus facilement. Par ailleurs, certaines applications peuvent avoir besoin d'un domaine entier qui leur est dédié, pour des raisons techniques. L'inconvénient est que vous devez ajouter un nouveau domaine à chaque fois, et donc potentiellement configurer des enregistrements DNS supplémentaire, relancer le diagnostique et l'installation d'un nouveau certificat Let's Encrypt. + +Si toutes les applications de l'exemple précédent étaient installées sur un domaine séparé, cela donnerait quelque chose comme ceci : + +```bash +blog.yolo.com : Wordpress (un blog) +cloud.yolo.com : Nextcloud (un service de cloud) +rss.yolo.com : TinyTiny RSS (un lecteur RSS) +wiki.yolo.com : DokuWiki (un wiki) +``` + +!!! De nombreuses applications intègrent une fonctionnalité qui vous permet de changer l'URL de votre application. Ce choix entre sous-chemin et sous-domaine peut donc dans certains cas être réversible via une simple manipulation dans l'interface d'administration. diff --git a/pages/02.administer/15.admin_guide/30.apps/apps.it.md b/pages/02.administer/15.admin_guide/30.apps/apps.it.md new file mode 100644 index 00000000..8e38f1a4 --- /dev/null +++ b/pages/02.administer/15.admin_guide/30.apps/apps.it.md @@ -0,0 +1,185 @@ +--- +title: Applicazioni +template: docs +taxonomy: + category: docs +page-toc: + active: true +routes: + default: '/apps_overview' +--- + +Una delle caratteristiche principali di YunoHost è la possibilità di installare facilmente applicazioni che saranno immediatamente utilizzabili. Ad esempio possiamo installare un blog, un "cloud" (per salvare e sincronizzare file), un sito web, un lettore RSS... + +Le applicazioni possono essere installate e gestite tramite l'interfaccia di amministrazione web nella sezione `[fa=cubes /] Applicazioni`, oppure utilizzando i comandi della categoria `yunohost app`. + +[center] +![Apps list](image://apps_list.png?resize=512&classes=caption "Lista di applicazioni nella pagina webadmin con il relativo bottone Installa.") +[/center] + +È possibile consultare il catalogo delle applicazioni nella pagina di amministrazione cliccando sul bottone `[fa=plus /] Installa` oppure dalla documentazione relativa all'applicazione stessa. + +
Lista applicazioni
+ + +! Siate ragionevoli sul numero di programmi che installate. Ogni programma aumenta le possibilità +di errori e attacchi dall'esterno. È preferibile, se desiderate effettuare dei test, utilizzare una [macchina virtuale](https://yunohost.org/en/install/hardware:virtualbox) con un'altra istanza. + +## Installare un'applicazione + +Diciamo che volete installare una *Custom Webapp*. Prima di avviare i passi dell'installazione YunoHost normalmente richiede di compilare un form per eseguire correttamente l'installazione. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Dalla pagina di amministrazione"] + +![Form di installazione di Custom Webapp](image://app_install_form.png?resize=512&classes=caption "Form di pre-installazione di Custom Webapp") + +[/ui-tab] +[ui-tab title="Dalla riga di comando"] + +![Form di installazione di Custom Webapp con la CLI](image://app_install_form_cli.png?resize=512&classes=caption "Form di pre-installazione con la CLI") + +[/ui-tab] +[/ui-tabs] + +## Sotto-directory e domini individuale per le applicazioni + +Fra le domande specifiche i form normalmente chiedono di scegliere un dominio ed un path da dove sarà accessibile l'applicazione. + +In un'installazione normale di YunoHost è normale avere un dominio singolo (o al limite un piccolo numero di domini) per tutte le applicazioni installate si "sotto-directory" con una configurazione di questo tipo: + +```bash +yolo.com + ├── /blog : Wordpress (a blog) + ├── /cloud : Nextcloud (a cloud service) + ├── /rss : TinyTiny RSS (a RSS reader) + ├── /wiki : DokuWiki (a wiki) +``` + +È però possibile scegliere di installare ogni applicazione (o un gruppo di esse) in un dominio dedicato. AL di là di un aspetto puramente estetico, usare sotto-domini invece di sotto-directory permette di spostare un sevizio da un server ad un altro più facilmente. Inoltre alcune applicazioni devono essere installate su un dominio proprio dedicato per ragioni tecniche con lo svantaggio che è necessario aggiungere un dominio per ogni applicazione e di conseguenza configurare ulteriori record DNS, riavviare il sistema di diagnostica e installare un nuovo certificato Let's Encrypt. + +{::comment} +Questo non lo metto perché pare una ripetizione +Questo può sembrare più facile per gli utenti finali ma è considerato più complicato e meno efficiente nel contesto di YunoHost poiché è necessario aggiungere un dominio ogni volta. Ad ogni modo alcune applicazioni hanno necessità di un dominio dedicato per ragioni tecniche. +{:/comment} + +Se le applicazioni dell'esempio precedente fossero state installate su un dominio separato questo potrebbe essere il risultato: + +```bash +blog.yolo.com : Wordpress (a blog) +cloud.yolo.com : Nextcloud (a cloud service) +rss.yolo.com : TinyTiny RSS (a RSS reader) +wiki.yolo.com : DokuWiki (a wiki) +``` + + +!!! Molte applicazioni integrano una caratteristica che permette di cambiare l'URL dell'applicazione. La scelta fra sotto-directory e sotto-dominio in alcuni casi può essere cambiata con una semplice modifica nell'interfaccia di amministrazione. + +### Gestione accessi utente e applicazioni pubbliche + +Il form di installazione normalmente chiede se l'applicazione deve essere o meno accessibile pubblicamente. Se non viene resa pubblica possono raggiungerla solo gli utente loggati su YunoHost. + +!!!! Dopo l'installazione è possibile configurare questa cosa dall'interfaccia via web [Gestisci i gruppi e i permessi](/groups_and_permissions) e allo stesso modo con la riga di comando con la categoria `yunohost user permission`. + +## Istruzioni post installazione + +Alcune applicazioni, una volta installate, mostrano delle informazioni, possono essere URL o credenziali, per cui è necessario consultare la mail dell'account principale o dell'account amministratore selezionato prima dell'installazione se viene richiesto. + +### Applicazioni multi-instanza + +Per alcune applicazioni è possibile installarne più copie (in diverse directory) ! Per fare ciò è sufficiente cliccare su `Applicazioni > [fa=plus /] Installa` e selezionare nuovamente l'applicazione da installare. + +## Integrazione LDAP / SSO + +Le applicazioni che permettono la registrazione degli utenti possono supportare l'integrazione con i sistemi LDAP / Sing Sign On di YunoHost di modo che una volta connessi al portare gli utenti vengono loggati direttamente nell'applicazione. + +Però alcune applicazioni non lo supportano e non è possibile neanche implementare il supporto nell'applicazione originaria oppure l'applicazione non funziona in questa funzione. Normalmente queste informazioni si trovano nel file README dell'applicazione stessa. + +## Configurazione dell'applicazione + +Alcune impostazioni possono essere gestite da YunoHost dopo l'installazione come ad esempio i permessi di utenti e gruppi, il tile e l'etichetta dell'applicazione nella pagina SSO e il relativo URL di connessione. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Dalla pagina di amministrazione"] + +È possibile accedere alla pagina relative alle operazioni dell'applicazione cliccando sul nome nella lista delle applicazioni. + +![Pagina con le operazioni per le applicazioni](image://app_config_operations.png?resize=768&classes=caption "Pagina con le operazioni dell'applicazione nella pagina di amministrazione") + +Da questa pagina è anche possibile eliminare l'applicazione. + +[/ui-tab] +[ui-tab title="Dalla riga di comando"] + +Dalla riga di comando è possibile cambiare: + +* l'etichetta dell'applicazione nel sistema SSO: `yunohost app change-label ` +* l'url di connessione: `yunohost app change-url [-d ] [-p ]` + +È anche possibile eliminare l'applicazione: `yunohost app remove ` + +dove `` deve essere sostituito con l'identificativo dell'applicazione. Se questa ha una sola istanza, come ad esempio Nextcloud l'identificativo è `nextcloud`, se invece è il secondo allora è `nextcloud__2` e così via. È possibile elencare tutte le applicazioni e i loro identificativi con il comando `yunohost app info`. + +[/ui-tab] +[/ui-tabs] + +### Pannelli di configurazione + +Alcune applicazioni includono un *pannello di configurazione* che contiene azioni e impostazioni specifiche per ogni applicazione che vengono normalmente gestite al suo interno. Inoltre includono anche la possibilità di modificare file di configurazione senza doverlo fare da soli. + +!!!! I pannelli di configurazione non sono realizzati per modificare ogni aspetto dell'applicazione: userete sicuramente molto più spesso i pannelli di configurazione interni di quelli forniti da YunoHost. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Dalla pagina di amministrazione"] + +È possibile accedere alla pagina relative alle operazioni dell'applicazione cliccando sul bottone `[fa=cogs /] Configurazione`. + +![Pannello di configurazione di My Webapp](image://app_config_panel.png?resize=768&classes=caption "Pannello di configurazione di MyWebapp") + +[/ui-tab] +[ui-tab title="Dalla riga di comando"] + +Dalla riga di comando è possibile elencare le impostazione del pannello di configurazione con il comando `yunohost app config get ` + +``` +$ yunohost app config get my_webapp +main.php_fpm_config.phpversion: + ask: PHP version + value: none +main.sftp.password: + ask: Set a password for the SFTP access + value: ************** +main.sftp.with_sftp: + ask: Do you need a SFTP access? + value: yes +``` + +Per modificare una configurazione si può usare il comando `yunohost app config set ` per avere la richiesta di modifica di ogni impostazione oppure il comando`yunohost app config set ` per modficarne una specifica. + +La parola `` è il nome dell'impostazione come nell'esempio sopra `main.sftp.with_sftp`. + +[/ui-tab] +[/ui-tabs] + +## Eseguire comandi dall'applicazione + +Dalla versione di YunoHost v11.1.21.4 è possibile eseguire un comando con il binario dell'applicazione o comandi PHP con il comando `yunohost app shell `. +In questo modo: +- verrà avviata una shell Bash come l'utente di sistema dell'applicazione +- verrà aperta la directory di lavoro dell'applicazione (ad esempio `/var/www/`) +- carico di tutte le variabili d'ambiente come da file service dell'applicazione se queste esistono +- verrà il usata la versione di `php` usata dall'applicazione + +## Packaging delle applicazioni + +Le applicazioni devono essere preparate (packaging) manualmente dai programmatori (packagers)/manutentori. Le applicazioni possono essere integrate con YunoHost perché supportino gli upgrade, i backup e restore e l'integrazione con LDAP/SSO fra le altre cose. + +## Integrazione e qualità + +Test automatici sono regolarmente eseguiti per controllare l'integrazione e la qualità dei programmi che sono stati dichiarati "working" dai packagers. I risultati vengono classificati con una scala da 0 a 8, il significato dei valori è spiegato su [questa pagina](https://yunohost.org/en/packaging_apps_levels) + +Alcuni risultati sono disponibili su [questa pagina](https://dash.yunohost.org/appci/branch/stable). + + +Solo i programmi con una qualità sufficiente sono inseriti nell'elenco delle applicazioni installabili. Nel caso i test dovessero segnalare una diminuzione dell'indice di qualità, gli aggiornamenti saranno sospesi e le nuove installazioni non saranno possibili fino alla soluzione del problema che ha causato l'abbassamento dell'indice. + diff --git a/pages/02.administer/15.admin_guide/30.apps/apps.md b/pages/02.administer/15.admin_guide/30.apps/apps.md new file mode 100644 index 00000000..a8b12cde --- /dev/null +++ b/pages/02.administer/15.admin_guide/30.apps/apps.md @@ -0,0 +1,180 @@ +--- +title: Applications +template: docs +taxonomy: + category: docs +page-toc: + active: true +routes: + default: '/apps_overview' +--- + +One of the key feature of YunoHost is the ability to easily install applications which are then immediately usable. Example of applications include a blog system, a "cloud" (to host and sync files), a website, an RSS reader... + +Applications can be installed and managed through the webadmin interface in `[fa=cubes /] Applications` or through commands of the `yunohost app` category. + +[center] +![Apps list](image://apps_list.png?resize=512&classes=caption "Apps list in the webadmin, with its Install button.") +[/center] + +The application catalog and its categories can be browsed directly from the webadmin by clicking on the `[fa=plus /] Install` button in the apps list, or from this documentation. + +
Applications catalog
+ + +! Be careful and stay reasonable on the number of installed applications. Each additional installation increases the attack surface and the risk of failure. Ideally, if you want to test, do it with another instance for example in [a virtual machine](/install/hardware:virtualbox). + + +## Installing an app + +Let's say you want to install a *Custom Webapp*. Before actually running the installation steps, YunoHost will usually have you fill in a form to properly set it up for you. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the webadmin"] + +![Custom Webapp install form](image://app_install_form.png?resize=512&classes=caption "Pre-installation form of the Custom Webapp") + +[/ui-tab] +[ui-tab title="From the command line"] + +![Custom Webapp install form in CLI](image://app_install_form_cli.png?resize=512&classes=caption "Pre-installation form of the Custom Webapp in CLI") + +[/ui-tab] +[/ui-tabs] + +### Subpaths vs. individual domains per apps + +Among specific questions, forms usually ask you to choose a domain and a path onto which the app will be accessible. + +In the context of YunoHost, it is quite common to have a single (or a few) domains on which several apps are installed in "subpaths", so that you end up with something like this: + +```bash +yolo.com + ├── /blog : Wordpress (a blog) + ├── /cloud : Nextcloud (a cloud service) + ├── /rss : TinyTiny RSS (a RSS reader) + ├── /wiki : DokuWiki (a wiki) +``` + +Alternatively, you may choose to install each (or some) apps on a dedicated domain. Beyond the aesthetic, using sub-domains instead of sub-paths allows the possibility to move a service to another server more easily. Also, some applications may need an entire domain dedicated to them, for technical reasons. The disadvantage is that you have to add a new domain each time, and therefore potentially configure additional DNS records, restart the diagnostics and install a new Let's Encrypt certificate. + +This might look prettier for end users, but is generally considered more complicated and less efficient in the context of YunoHost, since you need to add a new domain each time. Nevertheless, some apps might need an entire domain dedicated to them, for technical reasons. + +If all apps from the previous example were installed on a separate domain, this would give something like this: + +```bash +blog.yolo.com : Wordpress (a blog) +cloud.yolo.com : Nextcloud (a cloud service) +rss.yolo.com : TinyTiny RSS (a RSS reader) +wiki.yolo.com : DokuWiki (a wiki) +``` + +!!! Many applications integrate a feature that allows you to change the URL of your application. This choice between subpath and subdomain can be reversed in some cases via a simple manipulation in the administration interface. + +### User access management and public apps + +The installation form usually asks whether or not the app should be publically accessible. If you choose to not make it public, only users logged in YunoHost will be able to reach it. + +!!!! After installation, this can be configured via the webadmin in the [Groups and permissions panel](/groups_and_permissions), or similarly via the command-line subcategory `yunohost user permission`. + +### Instructions after installation + +Some applications need to give you instructions, URLs or credentials once they are installed. So remember to check the email of the first user account or the admin user selected before installation, if it was prompted. + +### Multi-instance applications + +Some applications support the ability to be installed several times (at different locations) ! To do so, just go another time in `Applications > [fa=plus /] Install`, and select again the application to install. + +## LDAP / SSO integration + +Applications that allow users to register may support integration with the LDAP / Single Sign On of YunoHost, so that users who connect to the user portal can be automatically logged in all these apps. + +However, some applications do not support this as it can be either not implemented in the upstream, or the package does not work on this part yet. This information is usually available on the README of the application package. + +## Application configuration + +After installation, some settings handled by YunoHost can be tweaked, such as user and group permissions, application's tile and label in the SSO page, or its access URL. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the webadmin"] + +You can access the app's operations page by clicking its name in the applications list. + +![Application operations page](image://app_config_operations.png?resize=768&classes=caption "Application operations page in the webadmin") + +You can also delete the application from this page. + +[/ui-tab] +[ui-tab title="From the command line"] + +From the command line, you can change: + +* the app's label in the SSO: `yunohost app change-label ` +* the app's url: `yunohost app change-url app [-d ] [-p ]` + +You can also delete the app: `yunohost app remove ` + +`` is to be replaced with the app's ID. If this is the first instance of the app, like Nextcloud, the ID is `nextcloud`. If this is the second, then it's `nextcloud__2` and so on. To list all your apps and check their ID, you can run `yunohost app info`. + +[/ui-tab] +[/ui-tabs] + +### Configuration panels + +Some apps include a *configuration panel*, which features actions and settings specific for each app that they usually do not handle themselves. They can also spare you the need for altering configuration files by hand. + +!!!! Configuration panels are *not* meant to tweak every aspects of the apps. You will surely use their own administration panels more often than YunoHost's configuration panels. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the webadmin"] + +The configuration panels are accessible in the webadmin in their operations page, trough the `[fa=cogs /] Config panel` button. + +![My Webapp configuration panel](image://app_config_panel.png?resize=768&classes=caption "Configuration panel for My Webapp") + +[/ui-tab] +[ui-tab title="From the command line"] + +From the command line, you can list the configuration panel settings with the following command: `yunohost app config get ` + +``` +$ yunohost app config get my_webapp +main.php_fpm_config.phpversion: + ask: PHP version + value: none +main.sftp.password: + ask: Set a password for the SFTP access + value: ************** +main.sftp.with_sftp: + ask: Do you need a SFTP access? + value: yes +``` + +To change a setting, either use `yunohost app config set ` to get prompted about all the settings, or use `yunohost app config set -v ` to alter a specific one. + +The `` is the setting name, for example `main.sftp.with_sftp` from above. + +[/ui-tab] +[/ui-tabs] + +## Execute commands within the app + +Starting YunoHost v11.1.21.4, if you need to execute commands with the app's binary, or PHP commands, etc., you can execute the command `yunohost app shell `. +It will: +- open a new Bash shell as the app's system user +- open the app's working directory (e.g. `/var/www/`) +- preload the environment with variables taken from the app's service, if it exists +- override `php`, so that it points to the PHP version used by the app + +## Applications packaging + +Applications must be packaged manually by application packagers/maintainers. Apps can be integrated with YunoHost to support upgrades, backup/restore and LDAP/SSO integration among other things. + +If you want to learn or contribute to app packaging, please check the [contributor documentation](/contributordoc). + +### Integration and quality levels + +Automated tests are being run regularly to test the integration and quality of all apps who were declared to be `working` by packagers. The result is a level between 0 and 8, whose meaning is detailed on [this page](/packaging_apps_levels). Some tests results may also be available [on this dashboard](https://dash.yunohost.org/appci/branch/stable). + +By default, only applications of sufficient quality are offered. When the quality of an application drops and until the problem is reolved, the app is hidden from the catalog to prevent its installation and its upgrades are put on hold. + diff --git a/pages/02.administer/15.admin_guide/35.nginx/nginx.md b/pages/02.administer/15.admin_guide/35.nginx/nginx.md new file mode 100644 index 00000000..256591bc --- /dev/null +++ b/pages/02.administer/15.admin_guide/35.nginx/nginx.md @@ -0,0 +1,26 @@ +--- +title: Web server with NGINX +template: docs +taxonomy: + category: docs +routes: + default: '/web_server' +--- + +YunoHost ships [NGINX](https://www.nginx.com/), a web server and reverse proxy software. That's the keystone that enables your apps and YunoHost services to be accessible online. + +Most of the web applications installed with YunoHost will automatically have their own configuration file created for NGINX. + +## Manually installing apps, or exposing existing apps + +Generally, you should refrain from manually tinkering and installing apps, except if you are sure they will not interfere with your server. YunoHost proposes two generic apps to help you out: + +- If you already have a website ready to be deployed, consider using a **Custom Webapp**. It allows you to easily setup a directory into which you can upload your HTML, PHP, CSS, JS files with SFTP, and a database if needed. + +- If you want to use YunoHost as a reverse proxy, i.e. serve an app from another server or an internal web server (think NodeJS, Ruby, Python, ...), you can use the **Redirect app** in proxy mode. + +- The **Redirect app** can also simply run in redirect mode, for example to create shortcuts for your users in their SSO page, or redirect `www.yourdomain.tld` to `yourdomain.tld`. + +For more information on these apps, and for more application use cases, have a look to the [Tutorials](/tutorials) section. + +!! Do not try to install Apache or other public web servers. This will break your system. \ No newline at end of file diff --git a/pages/02.administer/15.admin_guide/40.xmpp/xmpp.es.md b/pages/02.administer/15.admin_guide/40.xmpp/xmpp.es.md new file mode 100644 index 00000000..2cfd454e --- /dev/null +++ b/pages/02.administer/15.admin_guide/40.xmpp/xmpp.es.md @@ -0,0 +1,30 @@ +--- +title: Chatcon XMPP +template: docs +taxonomy: + category: docs +routes: + default: '/XMPP_server' +--- + +![](image://XMPP_logo.png?resize=100) + +YunoHost está instalado con un servidor de mensajería instantánea Metronome que implementa el [protocolo XMPP](https://es.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol). + +XMPP es un protocolo abierto y extensible que también permite crear salones de discusión, compartir status y datos, echar llamadas en VoIP y hacer videoconferencias. + +Todas las aplicaciones basadas en XMPP son compatibles entre ellas : cuando utilizas un cliente XMPP puedes discutir con cualquier persona que tenga una cuenta XMPP/Jabber. Este protocolo ya es utilizado por millones de personas en el mundo. + +## Cuenta XMPP/Jabber + +Una cuenta XMPP/Jabber está basada en un ID bajo la forma `usuario@dominio.tld`, así como una contraseña. La contraseña es la de la cuenta del usuario de YunoHost. + +Si desea saber más sobre el uso de XMPP, consulte el [Manual del usuario](/XMPP). + +## Incompatibilidad con Prosody + +Prosody, un servidor XMPP alternativo, está empaquetado para YunoHost. + +En particular, lo utilizan el plugin de chat Peertube y Jitsi para las videoconferencias. Estas aplicaciones instalará Prosody, que requiere que Metronome esté desactivado para funcionar. + +! En pocas palabras, la instalación de Prosody o de una aplicación que dependa de ella desactivará el servidor XMPP. \ No newline at end of file diff --git a/pages/02.administer/15.admin_guide/40.xmpp/xmpp.fr.md b/pages/02.administer/15.admin_guide/40.xmpp/xmpp.fr.md new file mode 100644 index 00000000..c5ca9de5 --- /dev/null +++ b/pages/02.administer/15.admin_guide/40.xmpp/xmpp.fr.md @@ -0,0 +1,32 @@ +--- +title: Chat avec XMPP +template: docs +taxonomy: + category: docs +routes: + default: '/XMPP_server' +--- + +![](image://XMPP_logo.png?resize=100) + +YunoHost est installé par défaut avec un serveur de messagerie instantanée Metronome qui implémente le [protocole XMPP](https://fr.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol) (anciennement connu sous le nom de Jabber). + +Ce protocole est déjà utilisé par des millions de personnes dans le monde - c'est un protocole ouvert. Toutes les applications basées sur XMPP sont compatibles entre elles : lorsque vous utilisez un client XMPP, vous pouvez interagir avec quiconque possède un compte XMPP. + +XMPP est un protocole extensible - cela signifie que les utilisateurs peuvent configurer des « extensions » pour les salons de discussions, partager des messages et des fichiers, et passer des appels voix et vidéo en utilisant XMPP. + +## Compte XMPP + +Pour utiliser XMPP, il est nécessaire de disposer d'un compte dont l'identifiant prend la forme `utilisateur@votre.domaine.tld`, ainsi qu’un mot de passe. + +Sous YunoHost, un compte XMPP est créé automatiquement pour chaque utilisateur. Les identifiants XMPP sont simplement l’adresse email principale de l'utilisateur ainsi que son mot de passe. + +Si vous souhaitez en savoir plus sur l'utilisation de XMPP, référez-vous au [Guide de l'utilisateur](/XMPP). + +## Incompatibilité avec Prosody + +Prosody, un serveur XMPP alternatif, est packagé pour YunoHost. + +Il est notamment utilisé par le plugin de chat de Peertube, et Jitsi pour des vidéoconférences. Installer ces apps installera Prosody, qui nécessite de désactiver Metronome pour fonctionner. + +! En résumé, installer Prosody ou une app en dépendant désactivera le serveur XMPP. \ No newline at end of file diff --git a/pages/02.administer/15.admin_guide/40.xmpp/xmpp.md b/pages/02.administer/15.admin_guide/40.xmpp/xmpp.md new file mode 100644 index 00000000..9256b279 --- /dev/null +++ b/pages/02.administer/15.admin_guide/40.xmpp/xmpp.md @@ -0,0 +1,34 @@ +--- +title: Chat with XMPP +template: docs +taxonomy: + category: docs +routes: + default: '/XMPP_server' +--- + +![](image://XMPP_logo.png?resize=100) + +By default, YunoHost comes installed with an instant messaging server called Metronome which implements the [XMPP protocol](https://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol) (previously known as Jabber). + +This protocol is already used by millions of people around the world—it is an open protocol. +All applications based on XMPP are compatible with each other: When using an XMPP client, you can interact with anybody who has an XMPP account. + +XMPP is an extensible protocol—this means users can configure "extensions" to chatrooms, share messages and files, and make voice and video calls using XMPP. + +## XMPP account + +To use an XMPP account you need a username, in the format: `user@domain.tld`, and a password. + +With YunoHost, an XMPP account is created for all YunoHost users automatically. +The XMPP account credentials corresponds to the user's main e-mail address and password. + +If you wish to know more about using XMPP, refer to the [User guide](/XMPP). + +## Incompatibility with Prosody + +Prosody, an alternative XMPP server, is packaged for YunoHost. + +It is notably used by Peertube's chat feature, and Jitsi for video conferences. Installing these apps will install Prosody, which needs to disable Metronome to work properly. + +! In summary, installing Prosody or an app relying on it will disable the XMPP server. \ No newline at end of file diff --git a/pages/02.administer/15.admin_guide/45.emails/email.de.md b/pages/02.administer/15.admin_guide/45.emails/email.de.md new file mode 100644 index 00000000..c6cd979f --- /dev/null +++ b/pages/02.administer/15.admin_guide/45.emails/email.de.md @@ -0,0 +1,50 @@ +--- +title: E-Mails +template: docs +taxonomy: + category: docs +routes: + default: '/email' +--- + +YunoHost wird mit einem kompletten Mail-Stack geliefert, der es Ihnen ermöglicht, Ihren eigenen E-Mail-Server zu hosten und somit Ihre eigenen E-Mail-Adressen in ```irgendjemand@deine.domain.tld``` zu haben. + +Der Mail-Stack enthält einen SMTP-Server (Postfix), einen IMAP-Server (Dovecot), einen Antispam-Server (rspamd) und eine DKIM-Konfiguration. + +## Sicherstellen dass Ihre Einrichtungen richtig sind + +E-Mail ist ein kompliziertes Ökosystem und eine ganze Reihe von Details können sein ordnungsgemäßes Funktionieren verhindern. + +Um Ihre Einstellungen zu validieren: + +- Wenn Sie zu Hause selbst hosten und kein VPN verwenden, stellen Sie sicher das [Ihr ISP den Port 25 nicht blockiert](https://yunohost.org/#/isp); +- leiten Sie Ports weiter, wie in [dieser Dokumentation](https://yunohost.org/#/isp_box_config) beschrieben; +- Mail-DNS-Einträge nach [dieser Dokumentation](https://yunohost.org/#/dns_config) sorgfältig konfigurieren; +- testen Sie Ihre Konfiguration mit [Mail-tester.com](https://mail-tester.com/) (Vorsicht : nur 3 Tests pro Domain und Tag sind erlaubt) ; + +Eine Punktzahl von mindestens 8~9/10 ist ein angemessenes Ziel. + +## E-Mail-Programme + +Um mit dem E-Mail-Server zu interagieren (E-Mails lesen und senden), können Sie entweder einen Webclient wie Roundcube oder Rainloop auf Ihrem Server installieren - oder einen Desktop-/Mobil-Client, wie auf [dieser Seite](https://yunohost.org/#/email_configure_client) beschrieben, konfigurieren. + +Desktop- und Mobil-Clients haben den Vorteil, dass sie Ihre E-Mails auf das Gerät kopieren, was eine Offline-Anzeige und einen relativen Schutz gegen mögliche Hardware-Ausfälle Ihres Servers ermöglicht. + +## Konfigurieren von E-Mail-Aliasen und automatische Weiterleitungen + +Mail-Aliase und Weiterleitungen können für jeden Benutzer konfiguriert werden. Beispielsweise wird für den ersten, auf dem Server angelegten Benutzer automatisch ein Alias ```root@the.domain.tld``` konfiguriert. Das bedeutet das eine an diese Adresse gesendete E-Mail im Posteingang des ersten Benutzers endet. Automatische Weiterleitungen können konfiguriert werden, z.B. wenn ein Benutzer kein zusätzliches E-Mail-Konto einrichten möchte und nur E-Mails vom Server, z.B. auf seine E-Mail-Adresse, empfangen möchte. + +Eine weitere Funktion, die nur wenigen Leuten bekannt ist, ist die Verwendung von Suffixen, die mit "+" beginnen. Zum Beispiel landen E-Mails, die an ```johndoe+buchung@die.domain.tld``` gesendet werden, automatisch im Ordner ```buchung``` (Kleinbuchstaben) der Mailbox von John Doe oder im Posteingang von John Doe, wenn der Ordner ```buchung``` nicht existiert. Es ist eine praktische Technik, z.B. eine E-Mail-Adresse auf einer Website anzugeben und dann die von dieser Website kommende E-Mail einfach (über automatische Filter) zu sortieren. + +## Was passiert wenn mein Server nicht erreichbar ist? + +Wenn Ihr Server nicht mehr verfügbar ist, bleiben die an Ihren Server gesendeten E-Mails bis zu ~5 Tage lang in einer Warteschlange auf der Seite des Absenders. Der Hoster des Absenders wird regelmäßig versuchen, die E-Mail erneut zu senden, bis er sie verwirft, falls er sie nicht versenden konnte. + +## Formulare zum Entfernen seiner IP-Adresse von der schwarzen Liste + +Es ist möglich, dass die von Ihrer YunoHost-Instanz gesendeten E-Mails von den großen E-Mail-Diensten als Spam betrachtet werden. Ist es möglich, dass die IP-Adresse von Ihrem Server bereits früher zum Versenden von Spam verwendet wurde oder dass diese E-Mail-Dienste Ihren Server als Spam-Versender betrachten? Um sicherzustellen, dass die IP-Adresse Ihrer Server nicht in diese schwarzen Listen aufgenommen wird und um sie aus diesen zu entfernen, folgen Sie [diesem Link](https://yunohost.org/#/blacklist_forms). + +## Eine Migration von E-Mails von einem E-Mail-Provider zu einer YunoHost-Instanz + +Siehe [diese Seite](https://yunohost.org/#/email_migration). + diff --git a/pages/02.administer/15.admin_guide/45.emails/email.es.md b/pages/02.administer/15.admin_guide/45.emails/email.es.md new file mode 100644 index 00000000..7bbcc224 --- /dev/null +++ b/pages/02.administer/15.admin_guide/45.emails/email.es.md @@ -0,0 +1,45 @@ +--- +title: Emails +template: docs +taxonomy: + category: docs +routes: + default: '/email' +--- + +YunoHost integra un ecosistema completo de servidor mail, permitiéndote de alojar tu propia mensajería electrónica, y pues de tener tus propias direcciones email en `algo@tu.dominio.tld`. + +Este ecosistema comprende un servidor SMTP (postfix), un servidor IMAP (Dovecot), un antispam (rspamd) y una configuración DKIM. + +## Asegurarse de que la configuración esté correcta + +Los emails son un ecosistema complicado y una multitud de detalles puedes impedir que funcionen correctamente. + +Para validar que tu configuración es correcta : +- si te alojas en casa y que no tienes VPN, asegúrate de que [tu proveedor de Internet no esté bloqueando el puerto 25](/isp) ; +- redirige los puertos siguiendo [esta documentación](/isp_box_config) ; +- configura con cuidado los registros DNS del correo electrónico siguiendo [esta documentación](/dns_config) ; +- testa tu configuración utilizando [Mail-tester.com](https://mail-tester.com) (cuidado : sólo 3 tests por dominio y por día están autorizados) ; + +Una nota de al menos 8~9/10 es un objetivo razonable. + +## Clientes de mensajería + +Para interactuar con el servidor de mail, o sea leer y mandar emails, puedes instalar un cliente web como Roundcube o Rainloop en tu servidor - o configurar un cliente de Desktop o móvil como descrito en [esta página][cette page](/email_configure_client). + +Los clientes Desktop o móvil tienen la ventaja de copiar tu emails en el equipo, así permitiendo la consulta desconectada de tus mensajes, y cierta protección frente a la posibilidad de un servidor averiado. + +## Configuration de los aliases de mensajeras y de las redirecciones automáticas + +Aliases de mensajeras y redirecciones pueden ser configurados por cada usuario. Por ejemplo, el primer usuario creado en el servidor automáticamente dispone de un alias `root@tu.dominio.tld` - lo que significa que un email mandado hacia esta dirección se encontrará en el buzón de entrada de este usuario. Las redirecciones automáticas pueden ser configuradas, por ejemplo si un usuario no quiere configurar una cuenta de correo adicional y simplemente desea recibir correos del servidor en - por ejemplo - su dirección gmail. + +Otra función desconocida es el uso del sufijo "+". Por ejemplo, email mandados a `johndoe+sncf@tu.dominio.tld` llegarán en el directorio 'sncf' del buzón de correo de John Dos (o directamente en el buzón si este directorio no existe). Es una técnica práctica que permite proveer una dirección de mail a un sitio y automatizar la clasificación de los correos que te mandará este sitio. + +## ¿ Qué ocurre si mi servidor se pone indisponible ? + +Si tu servidor se pone indisponible, los correos electrónicos mandados a tu servir se quedarán en una fila de espera por el lado del expedidor durante aproximadamente 5 días. El proveedor de hosting del expedidor intentará mandarte regularmente el correo, hasta que lo tire si no lo puede enviar. + +## Más información + +- Existe una página de documentación para [migrar sus emails desde un proveedor de mensajería hacia una instancia YunoHost](/email_migration). +- Para profundizar tu comprensión del correo electrónico y de sus protocolos, aquí tienes una [conferencia muy interesante](http://www.iletaitunefoisinternet.fr/lemail-par-benjamin-sonntag/index.html)(en francés). diff --git a/pages/02.administer/15.admin_guide/45.emails/email.fr.md b/pages/02.administer/15.admin_guide/45.emails/email.fr.md new file mode 100644 index 00000000..3a9dd3c3 --- /dev/null +++ b/pages/02.administer/15.admin_guide/45.emails/email.fr.md @@ -0,0 +1,58 @@ +--- +title: Emails +template: docs +taxonomy: + category: docs +routes: + default: '/email' +--- + +YunoHost est livré avec un écosystème complet de serveur mail, vous permettant d'héberger votre propre serveur de messagerie, et donc d'avoir vos propres adresses email dans le style `quelquechose@votre.domaine.tld`. + +Cet écosystème comprend un serveur SMTP (postfix), un serveur IMAP (Dovecot), un antispam (rspamd) et une configuration DKIM. + +## S'assurer que votre configuration est correcte + +Les emails sont un écosystème compliqué et un grand nombre de détails peuvent les empêcher de fonctionner correctement. + +Pour valider que votre configuration est correcte : +- si vous vous hébergez chez vous et n'utilisez pas de VPN, assurez-vous que [votre FAI ne bloque pas le port 25](/isp) ; +- routez les ports selon [cette documentation](/isp_box_config) ; +- configurez soigneusement les enregistrements DNS du courrier électronique selon [cette documentation](/dns_config) ; +- Testez votre configuration en utilisant les fonctionnalités de diagnostic (`Webadmin > Diagnostic > Email`). Vous pouvez également utiliser le service [mail-tester.com](https://mail-tester.com), un score d'au moins 8~9/10 est un but raisonnable (attention : seuls 3 tests par domaine et par jour sont autorisés) ; + +## Clients de messagerie + +Pour interagir avec le serveur de mail, c'est-à-dire lire et envoyer des emails, vous pouvez soit installer un client web comme Roundcube ou Rainloop sur votre serveur, soit configurer un client de bureau ou mobile comme décrit dans [cette page](/email_configure_client). + +Les clients de bureau ou mobile ont l'avantage de copier vos emails sur l'équipement permettant ainsi la consultation hors ligne et une protection relative face à d'éventuelles pannes matérielles de votre serveur. + +## Configuration des alias de messagerie et des redirections automatiques + +Des alias de messagerie et des redirections peuvent être configurés pour chaque utilisateur. Par exemple, le premier utilisateur créé sur le serveur dispose automatiquement d'un alias `root@votre.domaine.tld` - ce qui signifie qu'un email envoyé vers cette adresse se retrouvera dans la boîte de réception de cet utilisateur. Les redirections automatiques peuvent être configurées, par exemple si un utilisateur ne veut pas configurer un compte de messagerie supplémentaire et souhaite simplement recevoir des courriels du serveur sur, disons, son adresse Gmail. + +Une autre fonctionnalité méconnue est l'utilisation de suffixes commencant par "+". Par exemple, les emails envoyés à `johndoe+sncf@votre.domaine.tld` atteriront dans le dossier 'sncf' de la boîte mail de John Doe (ou bien directement dans la boîte mail si ce dossier n'existe pas). C'est une technique pratique pour, par exemple, fournir une adresse mail à un site puis facilement trier (via des filtres automatiques) les courriers venant de ce site. + +Les groupes aussi peuvent utiliser des alias, par défaut le groupe `admins` dispose de `root@` ou encore `webmaster@`. [Plus d'information dans la page dédiée](/groups_and_permissions#éérer-les-alias-des-groupes). + +## Que se passe-t-il si mon serveur devient indisponible ? + +Si votre serveur devient indisponible, les courriels envoyés à votre serveur resteront dans une file d'attente du côté de l'expéditeur pendant environ 5 jours. L'hébergeur de l'expéditeur tentera régulièrement de renvoyer le courrier, jusqu'à ce qu'il le jette s'il n'a pas pu l'envoyer. + +## Formulaires pour enlever son adresse IP des listes noires + +Il est possible que les emails envoyés depuis votre instance YunoHost soient considérés comme du spam par les grands services de mails. +Il est possible que l’adresse IP de votre serveur ait, autrefois, été utilisée pour envoyer du spam ou que ces services de mails considèrent votre serveur comme émetteur de spams. +Pour s’assurer que l’adresse IP de votre serveur n’est pas dans ces listes et pour l’enlever dans le cas échéant suivez ce [lien](/blacklist_forms). + +## Migration des emails d'un fournisseur d'emails vers une instance de YunoHost + +Voir [cette page](/email_migration). + +## Configuration du relais SMTP + +Voir [cette page](/email_configure_relay). + +## Pour aller plus loin + +Pour approfondir votre compréhension de l'email et de ses protocoles, voici une [conférence éclairante](https://www.octopuce.fr/conference-lemail-vaste-sujet-par-benjamin-sonntag/) (en français). diff --git a/pages/02.administer/15.admin_guide/45.emails/email.md b/pages/02.administer/15.admin_guide/45.emails/email.md new file mode 100644 index 00000000..5a9bea26 --- /dev/null +++ b/pages/02.administer/15.admin_guide/45.emails/email.md @@ -0,0 +1,53 @@ +--- +title: Emails +template: docs +taxonomy: + category: docs +routes: + default: '/email' +--- + +YunoHost comes with a complete mail stack allowing you to host your own email server, and therefore to have your own email addresses in `something@your.domain.tld`. + +The mail stack includes a SMTP server (postfix), an IMAP server (Dovecot), an antispam (rspamd) and DKIM configuration. + +## Making sure your setup is right + +Email is a complicated ecosystem and quite a few details can prevent it from working properly. + +To validate your setup: +- if you are self-hosting at home and not using a VPN, ensure [your ISP won't block port 25](/isp) ; +- route ports according to [this documentation](/isp_box_config) ; +- carefully configure mail DNS records according to [this documentation](/dns_config) ; +- test your configuration using the diagnostic features (`Webadmin > Diagnosis > Email`). You can also use [mail-tester.com](https://mail-tester.com), a score of at least 8~9/10 is a reasonnable goal (be careful : only 3 tests per domain per day are allowed) + +## Email clients + +To interact with the email sever (read and send emails), you can either install a webclient such as Roundcube or Rainloop on your server - or configure a desktop/mobile client as described in [this page](/email_configure_client). + +Desktop and mobile clients have the advantage of copying your emails to the device, allowing offline viewing and relative protection against possible hardware failures of your server. + +## Configuring email aliases and auto-forwards + +Mail aliases and forwards can be configured for each users. For instance, the first user created on the server automatically has an alias `root@the.domain.tld` configured - meaning that an email sent to this address will end in the inbox of the first user. Automatic forwards may be configured, for instance if an user doesn't want to configure an additional email account and just wants to receive emails from the server on, say, his/her gmail address. + +Another feature which few people know about is the use of suffixes beginning with "+". For example, emails sent to `johndoe+booking@the.domain.tld` will automatically land in the `booking` dir (lowercase) of John Doe's mailbox or in John Doe's inbox if `booking` directory doesn't exist . It is a practical technique for example to provide an e-mail address to a website, then easily sort (via automatic filters) the mail coming from this website. + +Groups also can use alias features, by default the group `admins` have `root@` or `webmaster@`. [More information to use-it with the dedicated page](/groups_and_permissions#config-alias-group). + +## What happens if my server becomes unavailable? + +If your server becomes unavailable, emails sent to your server will stay in a pending queue on the sender's side for as long as ~5 days. The sender's host will regularly try to resend the email, until it drops it if it was unable to send it. + +## Forms to remove its IP address from the blacklist +It is possible that the emails sent from your YunoHost instance are considered as spam by the big email services. +Is it possible that the IP address from your server have been previously been used to sent spam or that these email services consider your server as a spam sender. +To ensure that your servers’ IP address isn't on these blacklists and to remove it from them, follow this [link](/blacklist_forms). + +## Migrating email from an email provider to a YunoHost instance + +See [this page](/email_migration). + +## Configuring SMTP relay + +See [this page](/email_configure_relay). diff --git a/pages/02.administer/15.admin_guide/50.backups/backup.fr.md b/pages/02.administer/15.admin_guide/50.backups/backup.fr.md new file mode 100644 index 00000000..b738e70b --- /dev/null +++ b/pages/02.administer/15.admin_guide/50.backups/backup.fr.md @@ -0,0 +1,189 @@ +--- +title: Sauvegarder son serveur +template: docs +taxonomy: + category: docs +routes: + default: '/backup' +page-toc: + active: true + depth: 3 +--- + +Dans le contexte de l'auto-hébergement, les sauvegardes (backups) sont un élément important pour pallier les événements inattendus (incendies, corruption de base de données, perte d'accès au serveur, serveur compromis...). La politique de sauvegardes à mettre en place dépend de l'importance des services et des données que vous gérez. Par exemple, sauvegarder un serveur de test aura peu d'intérêt, tandis que vous voudrez être très prudent si vous gérez des données critiques pour une association ou une entreprise - et dans ce genre de cas, vous souhaiterez stocker les sauvegardes *dans un endroit différent*. + +## Sauvegarde manuelle + +### Sauvegarder + +YunoHost contient un système de sauvegarde, qui permet de sauvegarder (et restaurer) les configurations du système, les données « système » (comme les mails) et les applications si elles le supportent. + +Vous pouvez gérer vos sauvegardes via la ligne de commande (`yunohost backup --help`) ou la webadmin (dans la section Sauvegardes) bien que certaines fonctionnalités ne soient pas disponibles via celle-ci. + +La méthode de sauvegarde actuelle consiste à créer des archives `.tar` qui contiennent les fichiers pertinents. + +#### Créer une sauvegarde + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] + +Vous pouvez facilement créer des archives depuis la webadmin en allant dans `Sauvegardes > Archives locales` et en cliquant sur `Nouvelle sauvegarde`. Vous pourrez ensuite sélectionner les éléments à sauvegarder (configuration, données "système", applications). + + +![Image de l'écran de sauvegarde de YunoHost dans la webadmin](image://backup.png) + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] + +Vous pouvez créer de nouvelles archives depuis la ligne de commande. Voici quelques exemples de commandes et leur comportement correspondant : + +- Tout sauvegarder (système et apps) : +```bash +yunohost backup create +``` + +- Sauvegarder seulement les apps : +```bash +yunohost backup create --apps +``` + +- Sauvegarder seulement deux apps (WordPress et Shaarli) : +```bash +yunohost backup create --apps wordpress shaarli +``` + +- Sauvegarder seulement les mails : +```bash +yunohost backup create --system data_mail +``` + +- Sauvegarder les mails et WordPress : +```bash +yunohost backup create --system data_mail --apps wordpress +``` + +Pour plus d'informations et d'options sur la création d'archives, consultez `yunohost backup create --help`. Vous pouvez également lister les parties du système qui sont sauvegardables avec `yunohost hook list backup`. + +[/ui-tab] +[/ui-tabs] + +#### Télécharger la sauvegarde +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] +Après avoir créé des sauvegardes, il est possible de les lister et de les inspecter grâce aux vues correspondantes dans l'interface d'administration web. Un bouton propose de télécharger l'archive. Si l'archive fait plus de 3Go, il peut être préférable de procéder via SFTP. + +`Sauvegarde > Archives locales > > Télécharger` + +[/ui-tab] +[ui-tab title="Via un client SFTP"] +À l'heure actuelle, la solution la plus accessible pour récupérer les sauvegardes de grosse taille est d'utiliser le programme FileZilla comme expliqué dans [cette page](/filezilla). + +Par défaut, les sauvegardes sont stockées dans `/home/yunohost.backup/archives/`. + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +Les commandes `yunohost backup list` et `yunohost backup info ` permettent d'obtenir des infiormations sur les noms et tailles des sauvegardes. + +Il est possible d'utiliser `scp` (un programme basé sur [`ssh`](/ssh)) pour copier des fichiers entre deux machines grâce à la ligne de commande. Ainsi, depuis une machine sous GNU/Linux, vous pouvez utiliser la commande suivante pour télécharger une archive : + +```bash +scp admin@votre.domaine.tld:/home/yunohost.backup/archives/.tar ./ +``` + +En cas de port SSH autre que 22 : + +```bash +scp -P port_ssh admin@votre.domaine.tld:/home/yunohost.backup/archives/.tar ./ +``` + +[/ui-tab] +[/ui-tabs] + +! N'oubliez pas de stocker votre sauvegarde dans un lieu différents de celui ou se trouve votre serveur. + + +!!! Si vous le souhaitez, vous pouvez connecter un disque externe à votre serveur pour que les archives arrivent directement dessus. Voir ce guide pour [Ajouter un stockage externe à son serveur](/external_storage) + + + +### Tester + +Vous devriez tester régulièrement vos sauvegardes à minima en listant le contenu des archives et en vérifiant le poids des données associées. Le mieux est de s'entrainer règulièrement à restaurer. +```bash +# Lister les fichiers +tar -tvf /home/yunohost.backup/archives/ARCHIVE.tar | less + +# Lister les exports de base de données +tar -tvf /home/yunohost.backup/archives/ARCHIVE.tar | grep "(db|dump)\.sql" + +# Vérifier le poids +ls -lh /home/yunohost.backup/archives/ARCHIVE.tar +``` + +### Restaurer + +!!! SPOILER: Plus votre volume de données et le nombre d'applications sont important, plus votre restauration sera complexe. +#### Cas simple : peu de données, archive déjà présente + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] + +Allez dans `Sauvegardes > Archives locales` et sélectionnez l'archive. Vous pouvez ensuite choisir les différents éléments que vous voulez restaurer puis cliquer sur "Restaurer". + +![](image://restore.png) + + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] + +À partir de la ligne de commande, vous pouvez exécuter `yunohost backup list` pour obtenir les noms des archives disponibles. Il s'agit essentiellement de leur nom de fichier sans extension. + +Vous pouvez ensuite exécuter `yunohost backup restore ` (donc sans son extension .tar) pour restaurer une archive. Comme pour `yunohost backup create`, cela restaurera tout ce qui se trouve dans l'archive par défaut. Si vous voulez restaurer uniquement des éléments spécifiques, vous pouvez utiliser par exemple `yunohost backup restore --apps wordpress` qui restaurera uniquement l'application wordpress. + +!!! Dans le cas d'une restauration complète, il est possible de restaurer à la place de lancer la configuration initiale. +[/ui-tab] +[/ui-tabs] + +Pour restaurer une application, le domaine sur laquelle elle est installée doit déjà être configuré (ou il vous faut restaurer en même temps la configuration correspondante). Aussi, il n'est pas possible de restaurer une application déjà installée... ce qui veut dire que pour restaurer une sauvegarde d'une app, il vous faut déjà la désinstaller. + +#### Téléverser une archive +Dans de nombreux cas, l'archive n'est pas sur le serveur sur lequel on souhaite la restaurer. Il faut donc la téléverser, ce qui selon son poids peut prend plus ou moins de temps. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Via un client SFTP"] +À l'heure actuelle, la solution la plus accessible pour téléverser les sauvegardes est d'utiliser le programme FileZilla comme expliqué dans [cette page](/filezilla). + +Par défaut, les sauvegardes sont à placer dans `/home/yunohost.backup/archives/`. +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +Vous pouvez téléverser une sauvegarde depuis une machine vers votre serveur avec : + +```bash +scp /path/to/your/.tar admin@your.domain.tld:/home/yunohost.backup/archives/ +``` + +En cas de port SSH autre que 22 : + +```bash +scp -P port_ssh /path/to/your/.tar admin@your.domain.tld:/home/yunohost.backup/archives/ +``` + +[/ui-tab] +[/ui-tabs] + +## Sauvegarde automatique ou distante + +Il existe 3 applications YunoHost qui proposent d'étendre YunoHost avec une méthode de sauvegarde automatisées. + + * [BorgBackup](/backup/borgbackup) + * [Restic](/backup/restic) + * [Archivist](/backup/archivist) + +## Aller plus loin + + * [Évaluer la qualité de sa sauvegarde](/backup/strategies) + * [Cloner son système de fichier](/backup/clone_filesystem) + * [Éviter une panne matérielle](/backup/avoid_hardware_failure) + * [Inclure/exclure des fichiers](/backup/include_exclude_files) + * [Méthodes personnalisées](/backup/custom_backup_methods) + * [Migrer ou fusionner des serveurs](/backup/migrate_or_merge_servers) diff --git a/pages/02.administer/15.admin_guide/50.backups/backup.it.md b/pages/02.administer/15.admin_guide/50.backups/backup.it.md new file mode 100644 index 00000000..1b9fa5c1 --- /dev/null +++ b/pages/02.administer/15.admin_guide/50.backups/backup.it.md @@ -0,0 +1,196 @@ +--- +title: Eseguire il backup del vostro server e delle app +template: docs +taxonomy: + category: docs +routes: + default: '/backup' +--- + +Eseguire il backup del vostro server, delle app e dei dati è un compito importante nell'amministrazione di un server poiché vi protegge da eventi inaspettati ma sempre possibili (come server distrutto da un incendio, corruzione del database, perdita delle credenziali di accesso, compromissione del server e altro). La policy di backup che adotterete dipende dall'importanza dei dati che state gestendo: ad esempio non sarà tanto importante avere il backup di un server di prova mentre lo sarà per un server contenente dati importanti per un'associazione o una ditta e sarà altrettanto importante tenere questo backup *in un luogo fisico diverso dal server stesso*. + +## I backup di YunoHost + +YunoHost fornisce un sistema di backup che vi permette di fare il backup (e il suo ripristino) della configurazione e dei dati (come ad esempio le email) e delle app che lo supportano. + +Si possono gestire i backup sia da riga di comando (`yunohost backup --help`) sia dalla pagina web di amministrazione (nella sezione Backup) anche se alcune possibilità non sono disponibili in questo modo. + +Il metodo di default attuale crea degli archivi `.tar.gz` contenenti tutti i file del backup stesso. Nel futuro YunoHost ha in progetto di usare [Borg](https://www.borgbackup.org/) che è una soluzione più flessibile, efficiente e potente. + +## Creare i backup + +### Dalla pagina web di amministrazione + +Potete creare gli archivi di backup dalla pagina web di amministrazione andando in Backup > Archivi locali e cliccare su "Nuovo backup". Vi verrà chiesto di selezionare quale configurazione, dati e di quale app volete fare il backup. + +![picture of YunoHost's backup pannel](image://backup.png) + +### Dalla riga di comando + +Potete fare un nuovo archivio di backup dalla riga di comando. Questi sono alcuni esempi di comandi e i relativi risultati: + + +- Esecuzione di un backup completo (tutti i componenti del sistema e delle app): + + ```bash + yunohost backup create + ``` + +- Backup delle sole app + + ```bash + yunohost backup create --apps + ``` + +- Backup di sole due app (wordpress e shaarli) + + ```bash + yunohost backup create --apps wordpress shaarli + ``` + +- Backup solo delle email + + ```bash + yunohost backup create --system data_mail + ``` + +- Backup delle email e wordpress + + ```bash + yunohost backup create --system data_mail --apps wordpress + ``` + +Per maggiori informazioni e opzioni sulla creazione di backup leggete `yunohost backup create --help`. Potrete anche elencare le parti del sistema delle quali si può farne il backup con `yunohost hook list backup`. + + +### Configurazioni specifiche per le app + +Alcune app come ad esempio Nextcloud possono contenere grandi quantità di dati. È possibile in questi casi eseguire il backup dell'app senza i dati degli utenti, modalità che viene indicata come "backing up only the core" (delle app). +Eseguendo un aggiornamento, delle app con grandi quantità di dati normalmente verrà eseguito un backup senza questi dati. + +Per disabilitare esplicitamente il backup di grandi quantità di dati, per le applicazioni che implementano questa possibilità, dovete impostare la variabile `BACKUP_CORE_ONLY` prima di eseguire il comando di backup: `sudo BACKUP_CORE_ONLY=1 yunohost backup create --apps nextcloud`. Fate attenzione però perché dovrete fare il backup di questi dati autonomamente: è possibile eseguire questi backup, di tipo incrementale o differenziale, opzione che però non è ancora provvista da YunoHost. + + +## Download e upload dei backup + +Dopo aver creato gli archivi di backup è possibile elencarli e ispezionarli sia dalla pagina web di amministrazione relativa sia dalla riga di comando con i comandi `yunohost backup list` e `yunohost backup info `. Di default i backup sono copiati nella directory `/home/yunohost.backup/archives/`. + +Attualmente il modo più semplice per scaricare gli archivi è usando il programma FileZilla (vedi [questa pagina](/filezilla)). + +Una soluzione alternativa è quella di installare Nextcloud o un'applicazione simile e configurarle per accedere ai file contenuti in `/home/yunohost.backup/archives/` da un browser. + + +Un'altra soluzione è quella di usare `scp` (un programma che si basa su [`ssh`](/ssh)) per copiare i file fra due computer usando la riga di comando. In questo modo usando un computer con GNU/Linux potete copiare uno specifico backup con questo comando: + +```bash +scp admin@your.domain.tld:/home/yunohost.backup/archives/.tar ./ +``` + +Se la porta ssh è diversa da 22 : + +```bash +scp -P porta_ssh admin@your.domain.tld:/home/yunohost.backup/archives/.tar ./ +``` + +Allo stesso modo potete copiare da un computer al vostro server con questo comando: + +```bash +scp /path/to/your/.tar admin@your.domain.tld:/home/yunohost.backup/archives/ +``` + +Se la porta ssh è diversa da 22 : + +```bash +scp -P porta_ssh /path/to/your/.tar admin@your.domain.tld:/home/yunohost.backup/archives/ +``` + +## Ripristinare i backup + +### Dalla pagina web di amministrazione + +Dovete andare in Backup > Archivi locali e selezionare il vostro archivio. È possibile selezionare ciò che volete ripristinare e poi cliccare su 'Ripristina'. + + +![picture of YunoHost's restore pannel](image://restore.png) + +### Dalla riga di comando + +Dalla riga di comando date il comando `yunohost backup restore ` (senza il `.tar.gz`) per ripristinare un archivio. Così come `yunohost backup create`, questo comando ripristinerà di default tutto il contenuto dell'archivio; se invece volete ripristinare solo alcuni file potete usare ad esempio il comando `yunohost backup restore --apps wordpress` per ripristinare esclusivamente wordpress. + + +### Limiti + +Per ripristinare una app, il dominio sul quale era stata installata dovrà essere già stato configurato oppure dovrete avere già ripristinato la configurazione di sistema relativa. Inoltre non è possibile ripristinare una app che è già installata ... il che comporta che se volete ripristinare una versione passata della app dovrete prima disinstallarla. + + +### Ripristino durante il postinstall + +È possibile ripristinare un archivio completo *invece* di eseguire il passaggio di postinstall. Questo è utile se volete reinstallare un sistema interamente da un backup preesistente. Per fare questo dovrete copiare l'archivio sul server nella directory `/home/yunohost.backup/archives` e poi, **invece di dare il comando** `yunohost tools postinstall` darete il comando: + + +```bash +yunohost backup restore +``` + +Nota: se il vostro archivio non si trova in `/home/yunohost.backup/archives` potete specificare il path giusto con: + + +```bash +yunohost backup restore /path/to/ +``` + +## Ulteriori possibilità + +### Tenere i backup su un disco diverso + +Potete connettere e montare un disco esterno per tenerci gli archivi di backup (oltre a tutto il resto): per fare questo prima spostate gli archivi e poi aggiungete un link simbolico. + + +```bash +PATH_TO_DRIVE="/media/my_external_drive" # Come esempio, dipende da dove monterete il vostro disco +mv /home/yunohost.backup/archives $PATH_TO_DRIVE/yunohost_backup_archives +ln -s $PATH_TO_DRIVE/yunohost_backup_archives /home/yunohost.backup/archives +``` + +### Backup automatici + +È possibile aggiungere un semplice job di cron per creare i backup automaticamente. Ad esempio per fare il backup di wordpress su base settimanale create il file `/etc/cron.weekly/backup-wordpress` con queste righe: + +```bash +#!/bin/bash +yunohost backup create --apps wordpress +``` + +e poi rendetelo eseguibile: + +```bash +chmod +x /etc/cron.weekly/backup-wordpress +``` + +Prestate attenzione a ciò di cui fate il backup e quando perché altrimenti è possibile esaurire lo spazio del vostro disco eseguendo, ad esempio, 30 Gb di backup ogni giorno. + + +#### Backup del server su un server remoto + +Potete seguire questo tutorial sul forum per impostare Borg fra due server: + +Alternativamente, la app Archivist permette di impostare un sistema simile: + +#### For ARM boards: full backup with USBimager or `dd` + +If you are using an ARM board, another method for doing a full backup can be to create an image of the SD card. + +This can be done easily using [USBimager](https://bztsrc.gitlab.io/usbimager/) (N.B. be sure to get the Read-Write version! Not the write-only version!). The process is basically the *reverse* of flashing the SD card. +- Poweroff your server +- Get the SD card and plug it into your computer +- Using USBimager, click the *Read* button to create an image (snapshot) of the sd card. You can use it later to restore the entire system. + +More details [in the USBimager doc](https://gitlab.com/bztsrc/usbimager/#creating-backup-image-file-from-device) + +Alternatively you can use `dd` if you're comfortable with the command line with something like: + +```bash +dd if=/dev/mmcblk0 | gzip > ./my_snapshot.gz +``` + +(replace `/dev/mmcblk0` with the actual device of your SD card) diff --git a/pages/02.administer/15.admin_guide/50.backups/backup.md b/pages/02.administer/15.admin_guide/50.backups/backup.md new file mode 100644 index 00000000..20f8e158 --- /dev/null +++ b/pages/02.administer/15.admin_guide/50.backups/backup.md @@ -0,0 +1,189 @@ +--- +title: Backing up your server +template: docs +taxonomy: + category: docs +routes: + default: '/backup' +--- + +In the context of self-hosting, backups are an important element to compensate for unexpected events (fire, database corruption, loss of access to the server, compromised server...). The backup policy to implement depends on the importance of the services and data you manage. For example, backing up a test server will be of little interest, while you will want to be very careful if you are managing critical data for an association or a company - and in such cases, you will want to store the backups *in a different location or locations*. + +## Manual backup + +### Backup + +YunoHost comes with a backup system, that allows you to backup (and restore) system configurations and data (e.g. emails) and apps if they support it. + +You can manage backups either from the command line (`yunohost backup --help`) or from the web administration (in the Backups section), though some features are not yet available in the webadmin. + +The current default method consists in creating a `.tar` archive containing all relevant files. + +#### Creating backups + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the webadmin"] + +You can easily create backup archives from the webadmin by going to `Backups > Local storage` and clicking on `New backup`. You will then be asked to select which configuration, data and apps you want to backup. + +![picture of YunoHost's backup pannel](image://backup.png) + +[/ui-tab] +[ui-tab title="From the command line"] + +You can create a new backup archive from the command line. Here are a few simple examples of commands and their corresponding behavior: + +- Backing up everything (all system parts and apps): + + ```bash + yunohost backup create + ``` + +- Backing up only apps + + ```bash + yunohost backup create --apps + ``` + +- Backing up only two apps (wordpress and shaarli) + + ```bash + yunohost backup create --apps wordpress shaarli + ``` + +- Backing up only emails + + ```bash + yunohost backup create --system data_mail + ``` + +- Backing up emails and wordpress + + ```bash + yunohost backup create --system data_mail --apps wordpress + ``` + +For more information and options about backup creation, consult `yunohost backup create --help`. You can also list the system parts that can be backed up with `yunohost hook list backup`. +[/ui-tab] +[/ui-tabs] + +#### Downloading backups + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the webadmin"] +After creating backups, it is possible to list and inspect them using the corresponding views in the web administration interface. A button allows you to download the archive. If the archive is larger than 3GB, it may be better to proceed via SFTP. + +`Backup > Local Archives > > Download` + +[/ui-tab] +[ui-tab title="With a SFTP client"] +Currently, the most accessible way to download big archives is to use the program FileZilla as explained in [this page](/filezilla). + +By default, backups are stored in `/home/yunohost.backup/archives/`. + +[/ui-tab] +[ui-tab title="From the command line"] +The `yunohost backup list` and `yunohost backup info ` commands provide information about the names and sizes of backups. + +It is possible to use `scp` (a program based on [`ssh`](/ssh)) to copy files between two machines via the command line. So, from a GNU/Linux machine, you can use the following command to download an archive: + +```bash +scp admin@your.domain.tld:/home/yunohost.backup/archives/.tar ./ +``` + +If your SSH port is different from 22 + +```bash +scp -P ssh_port admin@your.domain.tld:/home/yunohost.backup/archives/.tar ./ +``` + +[/ui-tab] +[/ui-tabs] + +! Don't forget to store your backup in a different place to your server. + + +!!! If you want, you can connect an external disk to your server so that the archives arrive directly on it. See this guide to [Adding external storage to your server](/external_storage) + +### Testing + +You should regularly test your backups by at least listing the contents of the archives and checking the size of the associated data. It is best to practice restoring regularly. +```bash +# List the files +tar -tvf /home/yunohost.backup/archives/ARCHIVE.tar | less + +# List database exports +tar -tvf /home/yunohost.backup/archives/ARCHIVE.tar | grep "(db|dump)`.sql" + +# Check the weight +ls -lh /home/yunohost.backup/archives/ARCHIVE.tar +``` + +### Restoring backups +!!! SPOILER: The larger your data volume and the more applications you have, the more complex your recovery will be. + +#### Simple case: little data, archive already present +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the webadmin"] + +Go in `Backup > Local storage` and select your archive. You can then select which items you want to restore, then click on 'Restore'. + +![picture of YunoHost's restore pannel](image://restore.png) + +[/ui-tab] +[ui-tab title="From the command line"] + +From the command line, you can run `yunohost backup list` to get the available archive names. They are basically their file name without extension. + +You can then run `yunohost backup restore ` (hence without its `.tar` extension) to restore an archive. As for `yunohost backup create`, this will restore everything in the archive by default. If you want to restore only specific items, you can use something like `yunohost backup restore --apps wordpress`, which will restore only the wordpress app. + +!!! In the case of a complete restoration, it is possible to restore instead of launching the initial configuration. +[/ui-tab] +[/ui-tabs] + +To restore an app, the domain on which it was installed should already be configured (or you need to restore the corresponding system configuration). You also cannot restore an app which is already installed... which means that to restore an old version of an app, you must first uninstall it. + +#### Upload an archive + +In many cases, the archive is not on the server on which you want to restore it. So it has to be uploaded, which depending on its size can take more or less time. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="With an SFTP client"] +Currently, the most accessible solution for uploading backups is to use the FileZilla program as explained in [this page](/filezilla). + +By default, backups are to be placed in `/home/yunohost.backup/archives/`. +[/ui-tab] +[ui-tab title="From the command line"] +You can upload a backup from a machine to your server with : + +```bash +scp /path/to/your/.tar admin@your.domain.tld:/home/yunohost.backup/archives/ +``` + +If your SSH port is different from 22 + +```bash +scp -P ssh_port /path/to/your/.tar admin@your.domain.tld:/home/yunohost.backup/archives/ +``` + +[/ui-tab] +[/ui-tabs] + +## Automatic or remote backup + +There are 3 YunoHost applications that offer to extend YunoHost with an automated backup method. + + * [BorgBackup](/backup/borgbackup) + * [Restic](/backup/restic) + * [Archivist](/backup/archivist) + +## Go further + + * [Evaluate the quality of your backup](/backup/strategies) + * [Clone your file system](/backup/clone_filesystem) + * [Avoid a hardware failure](/backup/avoid_hardware_failure) + * [Include/exclude files](/backup/include_exclude_files) + * [Custom methods](/backup/custom_backup_methods) + * [Migrate or merge servers](/backup/migrate_or_merge_servers) + + diff --git a/pages/02.administer/15.admin_guide/55.upgrade/10.stretch_buster_migration/stretch_buster_migration.fr.md b/pages/02.administer/15.admin_guide/55.upgrade/10.stretch_buster_migration/stretch_buster_migration.fr.md new file mode 100644 index 00000000..317d3746 --- /dev/null +++ b/pages/02.administer/15.admin_guide/55.upgrade/10.stretch_buster_migration/stretch_buster_migration.fr.md @@ -0,0 +1,72 @@ +--- +title: Migrer de 3.x vers 4.x +template: docs +taxonomy: + category: docs +routes: + default: '/stretch_buster_migration' +--- + +L'objectif cette page est de décrire le processus de migration d'une instance en YunoHost 3.8.x (tournant sous Debian Stretch/9.x) vers YunoHost 4.x (tournant sous Debian Buster/10.x) + +## Notes importantes + +- L'équipe de YunoHost a fait de son mieux pour que cette migration se passe autant en douceur que possible. Elle a été testée durant plusieurs mois et sur plusieurs types d'installations. + +- Néanmoins, vous devez être conscient qu'il s'agit d'une opération délicate. L'administration système est un sujet compliqué et couvrir tous les cas particuliers n'est pas chose aisée. En conséquence, si vous hébergez des données et des systèmes critiques, [faites des sauvegardes](/backup). Et dans tous les cas, soyez patients et attentifs durant la migration. + +- Ne vous précipitez pas à vouloir faire une réinstallation de votre système en pensant que cela serait "plus simple" (sigh). (Une attitude qui revient régulièrement est de vouloir réinstaller son système à la moindre complication...). À la place, si vous rencontrez des problèmes, nous vous encourageons à investiguer, chercher à comprendre et [trouver de l'aide sur le chat ou le forum](/help). + +## Procédure de migration + +#### Depuis la webadmin + +Après avoir mis à jour vers la version en 3.8.5.x, allez dans Outils > Migrations pour accéder à l'interface de migration. Il vous faudra ensuite lire l'avertissement attentivement et l'accepter pour lancer la migration. + +#### Depuis la ligne de commande + +Après avoir mis à jour vers la version 3.8.5.x, lancez : + +```bash +sudo yunohost tools migrations migrate +``` + +puis lisez attentivement l'avertissement et les instructions. + +## Pendant la migration + +En fonction de votre matériel et des paquets installés, la migration peut prendre jusqu'à une ou deux heures. + +Les logs seront affichés dans la barre de message en haut (vous pouvez approcher la souris dessus pour voir l'historique en entier). Ils seront également consultable après coup (comme les autres opérations) dans Outils > Journaux. + +Notez que même si vous fermez la page d'admin, la migration continuera (par contre l'interface d'admin sera partiellement indisponible). + +#### Si la migration a crashé / échoué à un moment. + +Si la migration a échoué a un moment donné, la première chose à faire est de tenter de la relancer. Si cela ne fonctionne toujours pas, il vous faut [trouver de l'aide](/help) (prière de fournir le/les messages correspondants ou tout élément qui vous fait penser que ça n'a pas marché). + +## Choses à vérifier après la migration + +#### Vérifiez que vous êtes véritablement sous Debian Buster / YunoHost 4.x + +Pour cela, vous pouvez aller dans la partie Diagnostic (section Système de base). (Vous pouvez aussi regarder ce qui est affiché à droite dans le pied de page de la webadmin). En ligne de commande, vous pouvez aussi utiliser `lsb_release -a` et `yunohost --version`. + +#### Vérifiez que le diagnostic ne rapporte pas de problème particulier + +Également dans la section Diagnostic de la webadmin, vérifiez qu'il n'y a pas de problème apparu suite à la migration (par exemple un service qui ne tournerais plus...) + +#### Vérifiez que les applications fonctionnent + +Vérifiez que vos applications installées fonctionnent... Si elles ne fonctionnent pas, il est recommandé de tenter de les mettre à jour. (ou bien de manière générale, il est recommandé de les mettre à jour même si elles fonctionnent !). + +## Soucis (mineurs) connus après la migration + +- Quelques fichiers de configurations (`/etc/nsswitch.conf` et `/etc/nslcd.conf`) apparaîtrons comme manuellement modifiés. Vous pouvez appliquer la regen-conf en toute sécurité pour régler le problème avec la commande: + +```bash +yunohost tools regen-conf nsswitch nslcd --force +``` + +(nous allons essayer de corriger ceci automatiquement) + +- Il se peut que la migration postgresql (censée s'effectuer automatiquement après la migration à Buster) ne fonctionne pas correctement... Certains utilisateurs ont rapporté que relancer la migration suffisait à résoudre le problème. (Nous allons voir pour comprendre et corriger ce soucis) diff --git a/pages/02.administer/15.admin_guide/55.upgrade/10.stretch_buster_migration/stretch_buster_migration.md b/pages/02.administer/15.admin_guide/55.upgrade/10.stretch_buster_migration/stretch_buster_migration.md new file mode 100644 index 00000000..138bbdc0 --- /dev/null +++ b/pages/02.administer/15.admin_guide/55.upgrade/10.stretch_buster_migration/stretch_buster_migration.md @@ -0,0 +1,72 @@ +--- +title: Migrating from 3.x to 4.x +template: docs +taxonomy: + category: docs +routes: + default: '/stretch_buster_migration' +--- + +This page is dedicated to help you migrating an instance from YunoHost 3.8.x (running on Debian Stretch/9.x) to YunoHost 4.x (running on Debian Buster/10.x). + +## Important notes + +- The YunoHost team did its best to make sure that the migration is as smooth as possible and was tested over the course of several months in several cases. + +- With that said, please be aware that this is a delicate operation. System administration is a complicated topic and covering every particular cases is quite hard. Therefore, if you host critical data and services, please [make backups](/backup). And in any case, be patient and attentive during the migration. + +- Please don't rush into thinking that you should need to reinstall your system from scratch thinking it would be "simpler" (sigh). (A common attitude is to be willing to reinstall a server at the slightest complication...) Instead, if you happen to run into issues, we encourage you to try to investigate and understand what's going on and [reach for help on the chat and the forum](/help). + +## Migration procedure + +#### From the webadmin + +After upgrading to 3.8.5.x, go to Tools > Migrations to access the migrations interface. You will have to read carefully and accept the disclaimer then launch the migration. + +#### From the command line + +After upgrading to 3.8.5.x, run : + +```bash +sudo yunohost tools migrations migrate +``` + +then read carefully and accept the disclaimer. + +## During the migration + +Depending on your hardware and packages installed, the migration might take up to a few hours. + +The logs will be shown in the message bar (you can hover it to see the whole history). They will also be available after the migration (like any other operations) in Tools > Logs. + +Note that even if you close the webadmin page for some reason, the migration will continue in the background (but the webadmin will be partially unavailable). + +#### If the migration crashed / failed at some point. + +If the migration failed at some point, it should be possible to relaunch it. If it still doesn't work, you can try to [get help](/help) (please provide the corresponding messages or whatever makes you tell that it's not working). + +## What to do after the upgrade + +#### Check that you actually are on Debian Buster and YunoHost 4.x + +For this, go in Diagnosis (category Base system) or look at the footer of the webadmin. In the command line, you can use `lsb_release -a` and `yunohost --version`. + +#### Check that no issue appeared in the diagnosis + +Also in the Diagnosis in the webadmin, make sure that no specific issue appeared after running the migration (for example a service that crashed for some reason). + +#### Check that your applications are working + +Test that your applications are working. If they aren't, you should try to upgrade them (it is also a good idea to upgrade them even if they are working anyway). + +## Current known (minor) issues after the migration + +- Some file (`/etc/nsswitch.conf` and `/etc/nslcd.conf`) will appear as manually modified after the migration. You can safely apply the regen-conf with: + +```bash +yunohost tools regen-conf nsswitch nslcd --force +``` + +(we will try to do this automatically somehow) + +- Sometimes the postgresql migration (that is supposed to happen automatically after the buster migration is ran) fails to run properly... Some users reported that re-launching manually the postgresql migration fixed the issue (we will try to understand and fix this somehow) diff --git a/pages/02.administer/15.admin_guide/55.upgrade/15.buster_bullseye/buster_bullseye_migration.fr.md b/pages/02.administer/15.admin_guide/55.upgrade/15.buster_bullseye/buster_bullseye_migration.fr.md new file mode 100644 index 00000000..7bfda98f --- /dev/null +++ b/pages/02.administer/15.admin_guide/55.upgrade/15.buster_bullseye/buster_bullseye_migration.fr.md @@ -0,0 +1,93 @@ +--- +title: Migrer de 4.x vers 11.x +template: docs +taxonomy: + category: docs +routes: + default: '/buster_bullseye_migration' +--- + +L'objectif cette page est de décrire le processus de migration d'une instance en YunoHost 4.4.x (tournant sous Debian Buster/10.x) vers YunoHost 11.x (tournant sous Debian Bullseye/11.x). Notez que nous avons décidé de sauter les numéros de versions de 5 à 10 pour suivre les numéros de versions de Debian. + +## Notes importantes + +- L'équipe de YunoHost a fait de son mieux pour que cette migration se passe autant en douceur que possible. Elle a été testée durant plusieurs mois et sur plusieurs types d'installations. + +- Néanmoins, vous devez être conscient qu'il s'agit d'une opération délicate. L'administration système est un sujet compliqué et couvrir tous les cas particuliers n'est pas chose aisée. En conséquence, si vous hébergez des données et des systèmes critiques, [faites des sauvegardes](/backup). Et dans tous les cas, soyez patients et attentifs durant la migration. + +- Ne vous précipitez pas à vouloir faire une réinstallation de votre système en pensant que cela serait "plus simple" (sigh). (Une attitude qui revient régulièrement est de vouloir réinstaller son système à la moindre complication...). À la place, si vous rencontrez des problèmes, nous vous encourageons à investiguer, chercher à comprendre et [trouver de l'aide sur le chat ou le forum](/help). + +## Procédure de migration + +#### Depuis la webadmin + +Après avoir mis à jour vers la version en 4.4.x, allez dans Outils > Migrations pour accéder à l'interface de migration. Il vous faudra ensuite lire l'avertissement attentivement et l'accepter pour lancer la migration. + +#### Depuis la ligne de commande + +Après avoir mis à jour vers la version 4.4.x, lancez : + +```bash +sudo yunohost tools migrations migrate +``` + +puis lisez attentivement l'avertissement et les instructions. + +## Pendant la migration + +En fonction de votre matériel et des paquets installés, la migration peut prendre jusqu'à une ou deux heures. + +Les logs seront affichés dans la barre de message au centre de la page (vous pouvez approcher la souris dessus pour voir l'historique en entier). Ils seront également consultable après coup (comme les autres opérations) dans Outils > Journaux. + +Notez que même si vous fermez la page d'admin, la migration continuera (par contre l'interface d'admin sera partiellement indisponible). + +#### Si la migration a crashé / échoué à un moment. + +Si la migration a échoué a un moment donné, la première chose à faire est de tenter de la relancer. Si cela ne fonctionne toujours pas, il vous faut [trouver de l'aide](/help) (prière de fournir le/les messages correspondants ou tout élément qui vous fait penser que ça n'a pas marché). + +## Choses à vérifier après la migration + +#### Exécuter la migration pour réparer votre application python +Après la mise à jour, vos applications python devraient être indisponibles car leur environnement virtuel doit être reconstruit. + +Pour ce faire, vous pouvez exécuter les migrations en cours dans `Webadmin > Mises à jour`. Les applications ci-dessous ne seront pas réparées automatiquement, vous devez les mettre à jour manuellement avec `yunohost app upgrade -F APP`. + +Les applications qui ne seront pas réparées automatiquement et nécessitent une mise à jour forcée : + * calibreweb + * django-for-runners + * ffsync (cette application est en python2 et n'est plus maintenue, aucune garantie) + * jupiterlab + * librephotos + * mautrix + * mediadrop + * mopidy + * pgadmin + * tracim + * synapse + * weblate + + +! !! Si nécessaire, vous pouvez désactiver la reconstruction automatique pour une application python spécifique, en supprimant le fichier dédié terminé par `.requirements_backup_for_bullseye_upgrade.txt` avant d'appliquer la migration. Vous pouvez trouver ce fichier près du venv de votre application dans `/opt` ou `/var/www`. + +#### Vérifiez que vous êtes véritablement sous Debian Bullseye et YunoHost 11.x + +Pour cela, vous pouvez aller dans la partie Diagnostic (section Système de base). (Vous pouvez aussi regarder ce qui est affiché à droite dans le pied de page de la webadmin). En ligne de commande, vous pouvez aussi utiliser `lsb_release -a` et `yunohost --version`. + +#### Vérifiez que le diagnostic ne rapporte pas de problème particulier + +Également dans la section Diagnostic de la webadmin, vérifiez qu'il n'y a pas de problème apparu suite à la migration (par exemple un service qui ne tournerais plus...) + +#### Vérifiez que les applications fonctionnent + +Vérifiez que vos applications installées fonctionnent... Si elles ne fonctionnent pas, il est recommandé de tenter de les mettre à jour. (ou bien de manière générale, il est recommandé de les mettre à jour même si elles fonctionnent !). + + +Si votre app est cassée et que vous étiez déjà sur la dernière version d'une application, vous pouvez relancer la mise à jour grâce à l'option `--force`: +``` +yunohost app upgrade --force NOM_APP +``` + +## Soucis (mineurs) connus après la migration + +Voir la [page anglaise](https://yunohost.org/en/buster_bullseye_migration#current-known-minor-issues-after-the-migration) + diff --git a/pages/02.administer/15.admin_guide/55.upgrade/15.buster_bullseye/buster_bullseye_migration.md b/pages/02.administer/15.admin_guide/55.upgrade/15.buster_bullseye/buster_bullseye_migration.md new file mode 100644 index 00000000..8a0c4ee3 --- /dev/null +++ b/pages/02.administer/15.admin_guide/55.upgrade/15.buster_bullseye/buster_bullseye_migration.md @@ -0,0 +1,124 @@ +--- +title: Migrating from 4.x to 11.x +template: docs +taxonomy: + category: docs +routes: + default: '/buster_bullseye_migration' +--- + +This page is dedicated to help you migrating an instance from YunoHost 4.4.x (running on Debian Buster/10.x) to YunoHost 11.x (running on Debian Bullseye/11.x). Note: we decided to skip the version numbers from 5 to 10 to follow the Debian version numbers. + +## Important notes + +- The YunoHost team did its best to make sure that the migration is as smooth as possible and was tested over the course of several months in several cases. + +- With that said, please be aware that this is a delicate operation. System administration is a complicated topic and covering every particular case is quite hard. Therefore, if you host critical data and services, please [make backups](/backup). And in any case, be patient and attentive during the migration. + +- Please don't rush into thinking that you should need to reinstall your system from scratch thinking it would be "simpler" (sigh). (A common attitude is to be willing to reinstall a server at the slightest complication...). Instead, if you happen to run into issues, we encourage you to try to investigate and understand what's going on and [reach for help on the chat and the forum](/help). + +- **You should watch the known issues at the bottom of this page, to be sure your migrations will work properly.** + +## Migration procedure + +#### From the webadmin + +After upgrading to 4.4.x, go to Tools > Migrations to access the migrations interface. You will have to read carefully and accept the disclaimer then launch the migration. + +#### From the command line + +After upgrading to 4.4.x, run : + +```bash +sudo yunohost tools migrations run +``` + +then read carefully and accept the disclaimer. + +## During the migration + +Depending on your hardware and packages installed, the migration might take up to a few hours. + +The logs will be shown in the message bar (you can hover it to see the whole history). They will also be available after the migration (like any other operations) in Tools > Logs. + +Note that even if you close the webadmin page for some reason, the migration will continue in the background (but the webadmin will be partially unavailable). + +#### If the migration crashed / failed at some point. + +If the migration failed at some point, it should be possible to relaunch it. If it still doesn't work, you can try to [get help](/help) (please provide the corresponding messages or whatever makes you say that it's not working). + +## What to do after the upgrade + +#### Check that you actually are on Debian Bullseye and YunoHost 11.x + +For this, go to Diagnosis (category Base system) or look at the footer of the webadmin. In the command line, you can use `lsb_release -a` and `yunohost --version`. + +#### Run the migration to repair your python app +After upgrading, your python apps should be unavailable because their virtual environment (venv) needs to be rebuilt. + +To do that you can run the pending migrations in `Webadmin > Update`. The apps below won't be automatically repaired, you need to force-upgrade them manually instead with `yunohost app upgrade -F APP`. + +Apps which won't be automatically repaired and need a force upgrade: + * calibreweb + * django-for-runners + * ffsync (this app is in python2 and no longer maintained, no guarantee) + * jupiterlab + * librephotos + * mautrix + * mediadrop + * mopidy + * pgadmin + * tracim + * synapse + * weblate + + +!!! If needed, you can disable the automatic rebuild for a specific python app, by removing the dedicated file ending with `.requirements_backup_for_bullseye_upgrade.txt` before applying the migration. You can find this file near the venv (Python virtual environment) of your app inside `/opt` or `/var/www`. + +#### Check that no issue appeared in the diagnosis + +Also in the webadmin Diagnosis section, make sure that no specific issue appeared after running the migration (for example a service that crashed for some reason). + +If the service `php7.3-fpm` appears to be dead, you should upgrade your PHP apps like the custom web app. Next, you can run `apt autoremove`. + +#### Check that your applications are working + +Test that your applications are working. If they aren't, you should try to upgrade them (it is also a good idea to upgrade them even if they are working anyway). + +If your app is broken and you were already with the latest version, you can rerun the upgrade thanks to the `-F|--force` option: +``` +yunohost app upgrade --force APP_NAME +``` + +## Current known issues after the migration + +### Can't run the migration due to `libc6-dev : Breaks: libgcc-8-dev issue`. +Note: This issue should be resolved in yunohost_version: 4.4.2.13 +You have an app that depends on the `build-essential` package. + +See this [solution](https://forum.yunohost.org/t/migration-to-11-wont-start-libc6-dev-breaks-libgcc-8-dev/20617/42) to fix it manually + +### DNSmasq is not running anymore + +We haven't yet found solution for this issue. + +### No ethernet connexion after rebooting following a migration on a Raspberry Pi 4 + +! If you have not yet rebooted your server, don't do it (we are looking for a solution). This will avoid you the use of a keyboard and screen. + +We found this in the Raspberry Pi documentation +``` +when the dhcpcd5 package is updated to the latest version (1:8.1.2-1+rpt1 -> 1:8.1.2-1+rpt2), the Raspberry Pi will fail to obtain a DHCP IP address following the next reboot or startup. This problem can be avoided by disabling and re-enabling the "System Options -> Network at Boot" option using the latest raspi-config after the dhcpcd5 package has been updated and prior to the system being shutdown or rebooted +``` + +If you are using a Raspberry Pi 4 (or maybe 3), see this [solution](https://forum.yunohost.org/t/aucun-acces-a-internet-suite-a-migration-4-4-to-11-depuis-raspberry-pi-4-pi-400/20652/17) + +### Restore ynh4 backup onto a fresh ynh11 + +If you can't restore your app but your system has been restored, you probably should use the regen conf to fix the nginx issues: +``` +yunohost tools regenconf nginx --force +``` + +After that you should be able to restore your apps. Don't forget to force upgrade theme if you have 502 errors. + diff --git a/pages/02.administer/15.admin_guide/55.upgrade/5.jessie_stretch_migration/jessie_stretch_migration.fr.md b/pages/02.administer/15.admin_guide/55.upgrade/5.jessie_stretch_migration/jessie_stretch_migration.fr.md new file mode 100644 index 00000000..537e0c92 --- /dev/null +++ b/pages/02.administer/15.admin_guide/55.upgrade/5.jessie_stretch_migration/jessie_stretch_migration.fr.md @@ -0,0 +1,66 @@ +--- +title: Migrer de 2.4+ vers 3.x +template: docs +taxonomy: + category: docs +routes: + default: '/jessie_stretch_migration' +--- + +L'objectif cette page est de décrire le processus de migration d'une instance en YunoHost 2.7.x (tournant sous Debian Jessie/8.x) vers YunoHost 3.0 (tournant sous Debian Stretch/9.x) + +## Notes importantes + +- L'équipe de YunoHost a fait de son mieux pour que cette migration se passe autant en douceur que possible. Elle a été testée durant plusieurs mois et sur plusieurs types d'installations. + +- Néanmoins, vous devez être conscient qu'il s'agit d'une opération délicate. L'administration système est un sujet compliqué et couvrir tous les cas particuliers n'est pas chose aisée. En conséquence, si vous hébergez des données et des systèmes critiques, [faites des sauvegardes](/backup). Et dans tous les cas, soyez patients et attentifs durant la migration. + +- Cependant, ne vous précipitez pas non plus à vouloir faire une réinstallation de votre système. Une attitude qui revient régulièrement est de vouloir réinstaller son système à la moindre complication. Pourtant, réinstaller peut aussi s'avérer compliqué. À la place, si vous rencontrez des problèmes, nous vous encourageons à investiguer, chercher à comprendre et trouver de l'aide, plutôt que de se précipiter à vouloir réinstaller simplement parce que cela semble plus simple. + +- Si vous ou vos utilisateurs utilisez des clients emails externes (typiquement Thunderbird ou K9Mail) : le port SMTP a changé. Il s'agissait auparavant du port 465 (avec SSL/TLS) qui a été remplacé par 587 (STARTTLS). Voir [cette page de doc dédiée à la configuration des clients mails](/email_configure_client). La configuration des webmails comme Rainloop doit également être mise à jour, en passant par l'interface d'administration dédiée. + +- Pour les utilisateurs avancés : si vous avez des scripts personnels pour faire des backups, certains changements cassent (de façon mineure) la rétrocompatibilité de la ligne de commande. Les options dépréciées `--hooks`/`--ignore-hooks` ont été enlevées, ainsi que `--ignore-apps`, `--ignore-system`. Pour rendre les choses plus intuitives, `yunohost backup create --apps wordpress` (par exemple) créera uniquement un backup de wordpress, c.-à-d. pas besoin d'ajouter `--ignore-system` pour ne pas backuper le système. + +## Procédure de migration + +#### Depuis la webadmin + +Après avoir mis à jour vers la version 2.7.14, allez dans Outils > Migrations pour accéder à l'interface de migration. Il vous faudra ensuite lire l'avertissement attentivement et l'accepter pour lancer la migration. Les logs seront affichés dans la barre de message en haut (vous pouvez approcher la souris dessus pour voir l'historique en entier). + +#### Depuis la ligne de commande + +Après avoir mis à jour vers la version 2.7.14, lancez : + +```bash +sudo yunohost tools migrations migrate +``` + +puis lisez attentivement l'avertissement et les instructions. + +## Pendant la migration + +En fonction de votre matériel et des paquets installés, la migration peut prendre jusqu'à quelques heures. + +Notez qu'il est attendu de voir certaines erreurs (en particulier à propos de Fail2Ban) pendant la migration - ne vous en inquiétez pas trop. + +#### Si la migration a crashé / échoué à un moment. + +Si la migration a échoué a un moment donné, la première chose à faire est de tenter de la relancer. Si cela ne fonctionne toujours pas, il vous faut [trouver de l'aide](/help) (prière de fournir le/les messages correspondants ou tout élément qui vous fait penser que ça n'a pas marché). + +## Choses à vérifier après la migration + +#### Vérifiez que vous êtes véritablement sous Debian Stretch / YunoHost 3.0 + +Pour cela, allez dans Outils > Diagnostique. (Vous pouvez aussi regarder ce qui est affiché dans le pied de page). En ligne de commande, vous pouvez aussi utiliser `lsb_release -a` et `yunohost --version`. + +#### Vérifiez que Fail2Ban et le pare-feu sont actifs. + +Vous devriez voir que Fail2Ban et le firewall sont actifs. Depuis la webadmin, dans Services (chercher 'fail2ban' et 'yunohost-firewall'). Depuis la ligne de commande, faites `yunohost service status fail2ban yunohost-firewall` : les deux devraient être en `active: active`. + +#### Vérifiez que les applications fonctionnent + +Vérifiez que vos applications installées fonctionnent... Si elles ne fonctionnent pas, il est recommandé de tenter de les mettre à jour. (ou bien de manière générale, il est recommandé de les mettre à jour même si elles fonctionnent !). + +#### Si vous utilisez les mails : vérifiez votre score + +Si vous utilisez les emails (en particulier les envois), vérifiez que votre score est toujours bon via [mail-tester](https://www.mail-tester.com/) par exemple. diff --git a/pages/02.administer/15.admin_guide/55.upgrade/5.jessie_stretch_migration/jessie_stretch_migration.md b/pages/02.administer/15.admin_guide/55.upgrade/5.jessie_stretch_migration/jessie_stretch_migration.md new file mode 100644 index 00000000..8896e845 --- /dev/null +++ b/pages/02.administer/15.admin_guide/55.upgrade/5.jessie_stretch_migration/jessie_stretch_migration.md @@ -0,0 +1,66 @@ +--- +title: Migrating from 2.4+ to 3.x +template: docs +taxonomy: + category: docs +routes: + default: '/jessie_stretch_migration' +--- + +This page is dedicated to help you migrating an instance from YunoHost 2.7.x (running on Debian Jessie/8.x) to YunoHost 3.0 (running on Debian Stretch/9.x). + +## Important notes + +- The YunoHost team did its best to make sure that the migration is as smooth as possible and was tested over the course of several months in several cases. + +- With that said, please be aware that this is a delicate operation. System administration is a complicated topic and covering every particular cases is quite hard. Therefore, if you host critical data and services, please [make backups](/backup). And in any case, be patient and attentive during the migration. + +- Yet, please don't rush into thinking that you should rush into reinstalling your system. A common "mistake" is to be willing to reinstall a server at the slightest complication. But turns out that reinstalling a system can also be complicated. Instead, if you happen to run into issues, we encourage you to try to investigate and understand what's going on and reach for help instead of just throwing away everything because it looks simpler. + +- About external email clients: if you or your users are using external email clients (typically Thunderbird, K9Mail...) be aware that the SMTP port changed from 465 (with SSL/TLS) to 587 (STARTTLS). See [this page of doc dedicated to email clients](/email_configure_client). Webmail configurations such as Rainloop should also be updated using the corresponding administration interface. + +- For advanced users: if you have some custom scripts for backups, be aware that we made some backward-incompatible changes in the backup command line. The deprecated `--hooks`/`--ignore-hooks` options were removed, as well as the options `--ignore-apps`, `--ignore-system`. To make things more intuitive, `yunohost backup create --apps wordpress` (for example) will only backup wordpress, i.e. you don't have to add `--ignore-system` to not backup the system. + +## Migration procedure + +#### From the webadmin + +After upgrading to 2.7.14, go to Tools > Migrations to access the migrations interface. You will have to read carefully and accept the disclaimer then launch the migration. The logs will be shown in the message bar (you can hover it to see the whole history). + +#### From the command line + +After upgrading to 2.7.14, run: + +```bash +sudo yunohost tools migrations migrate +``` + +then read carefully and accept the disclaimer. + +## During the migration + +Depending on your hardware and packages installed, the migration might take up to a few hours. + +Note that it is expected to see some errors (in particular about Fail2Ban) during the migration, so don't worry too much about them. + +#### If the migration crashed / failed at some point. + +If the migration failed at some point, it should be possible to relaunch it. If it still doesn't work, you can try to [get help](/help) (please provide the corresponding messages or whatever makes you tell that it's not working). + +## What to do after the upgrade + +#### Check that you actually are on Debian Stretch and YunoHost 3.0 + +You should be able to see this from the webadmin Tools > Diagnosis, and also in the footer of the page. On the command line, you can use `lsb_release -a` and `yunohost --version`. + +#### Check that Fail2Ban and the firewall are active + +You should be able to see that Fail2Ban and the firewall are active. From the webadmin in Services (look for 'fail2ban' and 'yunohost-firewall'). From the command line, run `yunohost service status fail2ban yunohost-firewall`. They should both have `active: active`. + +#### Check that your applications are working + +Test that your applications are working. If they aren't, you should try to upgrade them (it is also a good idea to upgrade them even if they are working anyway). + +#### Mail users: check your mail score + +If you are using mails (especially sending them), check that your score is still good by using [mail-tester](https://www.mail-tester.com/) for example. diff --git a/pages/02.administer/15.admin_guide/55.upgrade/upgrade.fr.md b/pages/02.administer/15.admin_guide/55.upgrade/upgrade.fr.md new file mode 100644 index 00000000..e748cd92 --- /dev/null +++ b/pages/02.administer/15.admin_guide/55.upgrade/upgrade.fr.md @@ -0,0 +1,34 @@ +--- +title: Mises à jour +template: docs +taxonomy: + category: docs +routes: + default: '/update' + aliases: + - '/upgrade' +--- + +## Depuis la webadmin + +Dans la partie administration, choisir Mettre à jour le système. YunoHost va mettre à jour le catalogue des paquets système et le catalogue des applications, et afficher les mise à jour disponibles. + +Cliquez sur les boutons verts pour lancer les mises à jour du système et des applications. + +## Depuis la ligne de commande + +Voici quelques exemples en ligne de commande correspondants : + +``` bash +# Aller chercher les mises à jour disponibles +yunohost tools update + +# Mettre à jour tous les paquets systèmes +yunohost tools upgrade system + +# Mettre à jour toutes les applications +yunohost tools upgrade apps + +# Mettre à jour une application en particulier +yunohost app upgrade wordpress +``` diff --git a/pages/02.administer/15.admin_guide/55.upgrade/upgrade.md b/pages/02.administer/15.admin_guide/55.upgrade/upgrade.md new file mode 100644 index 00000000..8acb8a8a --- /dev/null +++ b/pages/02.administer/15.admin_guide/55.upgrade/upgrade.md @@ -0,0 +1,38 @@ +--- +title: Upgrades +template: docs +taxonomy: + category: docs +routes: + default: '/update' + aliases: + - '/upgrade' +--- + +## From the webadmin + +On the administraton panel, click on Upgrade the system. YunoHost will refresh the system package catalog as well as the application catalog, and display available upgrades. + +Click on green upgrade buttons to upgrade the system and applications. + +## From the command line + +Here are some example of corresponding command lines: + +``` bash +# Fetch available updates +yunohost tools update + +# Upgrade all system packages +yunohost tools upgrade system + +# Upgrade all apps +yunohost tools upgrade apps + +# Upgrade a specific application +yunohost app upgrade wordpress +``` + +!! If you are upgrading from YunoHost below v4.2.2, `system` and `apps` were flags of the command. Add `--` before them: +!! `yunohost tools upgrade --system` +!! `yunohost tools upgrade --apps` diff --git a/pages/02.administer/15.admin_guide/admin_guide.de.md b/pages/02.administer/15.admin_guide/admin_guide.de.md new file mode 100644 index 00000000..a62af6f6 --- /dev/null +++ b/pages/02.administer/15.admin_guide/admin_guide.de.md @@ -0,0 +1,20 @@ +--- +title: Übersicht des YunoHost Ökosystems +menu: Geführte Tour für den Admin +template: docs +taxonomy: + category: docs +routes: + default: '/admin_guide' +--- + +Diese Seite bietet eine Übersicht über das Ökosystem eines YunoHost-Servers. Diese Übersicht macht mehrere Vereinfachungen und zielt wesentlich darauf ab, ein globales Bild zu vermitteln, bevor tiefer auf die verschiedenen Aspekte eingegangen wird. + + +![](image://ecosystem.png) + +Alles beginnt mit dem speziellen **admin** Benutzer. Dies ist der Administrator des Computers, der Dinge auf dem Server über die Webverwaltungsoberfläche oder über SSH und die Befehlszeilenschnittstelle installieren, konfigurieren und verwalten kann. *(Wenn du bereits mit GNU / Linux vertraut bist, ist dies root ziemlich ähnlich. YunoHost hat diesen zusätzlichen 'Admin'-Benutzer aus verschiedenen technischen Gründen.)* + +Der Administrator kann unter anderem Benutzer erstellen und Anwendungen installieren. Benutzer haben, wenn sie erstellt werden, automatisch eine eigene E-Mail-Adresse sowie ein XMPP-Konto. Benutzer können auch eine Verbindung zum Benutzerportal (SSO) herstellen, um auf Anwendungen zuzugreifen. Einige Anwendungen können normalerweise entweder öffentlich zugänglich oder privat installiert werden. Letzteres bedeutes, dass nur einige Benutzer Zugriff darauf haben. + +Anwendungen und andere Funktionen des Servers hängen von verschiedenen Diensten ab, damit sie ordnungsgemäß funktionieren. Dienste (manchmal auch als Daemons bezeichnet) sind Programme, die ständig auf dem Server ausgeführt werden. Sie stellen sicher, dass verschiedene Aufgaben, z.B. das Beantworten von Webanfragen von Webbrowsern oder das Weiterleiten von E-Mails, ausgeführt werden. diff --git a/pages/02.administer/15.admin_guide/admin_guide.fr.md b/pages/02.administer/15.admin_guide/admin_guide.fr.md new file mode 100644 index 00000000..2a1937e6 --- /dev/null +++ b/pages/02.administer/15.admin_guide/admin_guide.fr.md @@ -0,0 +1,19 @@ +--- +title: Vue d'ensemble de l'écosystème YunoHost +menu: Visite guidée pour l'administrateur +template: docs +taxonomy: + category: docs +routes: + default: '/admin_guide' +--- + +Cette page pose une vue d'ensemble de l'écosystème d'un serveur sous YunoHost. Bien que celle-ci contienne des approximations et des raccourcis, elle permet de poser une première représentation générale avant de rentrer plus dans le détail des différents aspects. + +![](image://ecosystem_fr.png) + +Tout commence avec l'utilisateur spécial, **admin**. Il s'agit de l'administrateur de la machine qui peut installer, configurer et gérer le serveur à travers l'interface web d'administration, ou via SSH et la ligne de commande. *(Si vous êtes familier avec GNU/Linux, il est similaire à root. YunoHost possède cet utilisateur supplémentaire 'admin' pour plusieurs raisons techniques.)* + +L'administrateur peut créer des utilisateurs et installer des applications, parmi d'autres actions d'administration. Les utilisateurs disposent immédiatement d'une adresse e-mail sur le serveur et d'un compte XMPP pour chatter. Les utilisateurs peuvent se connecter au portail utilisateur (SSO) pour accéder aux applications. Les applications peuvent typiquement être installées en accès soit public, soit privé, c'est-à-dire que seuls les utilisateurs du serveur pourront y accéder. + +Les applications et autres fonctionnalités du serveur reposent sur plusieurs services pour fonctionner proprement. Les services (aussi appelés daemon) sont des programmes qui tournent constamment pour assurer des tâches, telles que répondre aux requêtes web des navigateurs internet, ou relayer les e-mails. diff --git a/pages/02.administer/15.admin_guide/admin_guide.it.md b/pages/02.administer/15.admin_guide/admin_guide.it.md new file mode 100644 index 00000000..b8c47cb1 --- /dev/null +++ b/pages/02.administer/15.admin_guide/admin_guide.it.md @@ -0,0 +1,19 @@ +--- +title: Vista d'insieme dell'ecosistema YunoHost +menu: Tour guidato per l'amministratore +template: docs +taxonomy: + category: docs +routes: + default: '/admin_guide' +--- + +Questa pagina provvede a fornire una vista d'insieme dell'ecosistema di un server YunoHost. Pur contenendo delle approssimazioni e delle scorciatoie, permette di avere una prima vista globale prima di entrare più nel dettaglio dei differenti aspetti. + +![](image://ecosystem.png) + +Tutto inizia con l'utente speciale **admin**. È l'amministratore della macchina e può installare, configurare e gestire il server con l'interfaccia web di amministrazione, o via SSH attraverso la linea di comando. *(Se hai familiarità con GNU/Linux, è come l'utente root. YunoHost ha un utente aggiuntivo 'admin' per diverse ragioni tecniche.)* + +L'amministratore può creare utenti e installare le applicazioni, oltre alle altre azioni amministrative. Gli utenti hanno automaticamente un indirizzo mail e un account XMPP. Gli utenti possono connettersi al portale (SSO) per aver accesso alle applicazioni. Alcune applicazioni possono tipicamente essere installate con un accesso pubblico o uno privato, cioè solo gli utenti del server vi possono accedere. + +Le applicazioni e le altre funzionalità del server si basano su diversi servizi per funzionare correttamente. I servizi (chiamati anche demoni) sono dei programmi che girano costantemente per assicurare i vari task, come rispondere alle richieste di navigazione web, o inoltrare email. diff --git a/pages/02.administer/15.admin_guide/admin_guide.md b/pages/02.administer/15.admin_guide/admin_guide.md new file mode 100644 index 00000000..6268f320 --- /dev/null +++ b/pages/02.administer/15.admin_guide/admin_guide.md @@ -0,0 +1,21 @@ +--- +title: Overview of the YunoHost ecosystem +menu: Guided tour for the admin +template: docs +taxonomy: + category: docs +routes: + default: '/admin_guide' +--- + +This page provide an overview of the ecosystem of a YunoHost server. While this overview contains several approximations, the purpose here is to introduce the global picture before digging into the different aspects. + +![](image://ecosystem.png) + +Everything starts with the special user **admin**. This is the administrator of the machine who can install, configure and manage things on the server through the web administration interface, or via SSH and the command line interface. *(If you are already familiar with GNU/Linux, it is quite similar to root. YunoHost has this additional 'admin' user for several technical reasons.)* + +The administrator can create users and install applications, among other admin actions. Users automatically have their own email address as well as an XMPP account when they get created. Users will also be able to connect to the user portal (SSO) to access applications. Some applications can typically be installed either as publicly-accessible, or as private, i.e. only some users will have access to it. + +Applications and their features of the server rely on different services to work properly. Services (sometimes also called daemons) are programs that are constantly running on the server to ensure various tasks are done, such as answering to web requests from web browsers, or relaying emails. + + diff --git a/pages/02.administer/20.backups/05.evaluate/evaluate.fr.md b/pages/02.administer/20.backups/05.evaluate/evaluate.fr.md new file mode 100644 index 00000000..29a67704 --- /dev/null +++ b/pages/02.administer/20.backups/05.evaluate/evaluate.fr.md @@ -0,0 +1,64 @@ +--- +title: Stratégies de sauvegarde +template: docs +taxonomy: + category: docs +routes: + default: '/backup_strategies' +page-toc: + active: true + depth: 3 +--- + +Dans le contexte de l'auto-hébergement, les sauvegardes (backup) sont un élément important pour pallier les événements inattendus (incendies, corruption de base de données, perte d'accès au serveur, serveur compromis...). La politique de sauvegardes à mettre en place dépend de l'importance des services et des données que vous gérez. Par exemple, sauvegarder un serveur de test aura peu d'intérêt, tandis que vous voudrez montrer beaucoup plus de prudence si vous gérez des données critiques pour une association ou une entreprise - et dans ce genre de cas, vous souhaiterez stocker les sauvegardes *dans un ou des endroits différents*. + +## Qu'est-ce qu'une bonne sauvegarde ? +Une bonne sauvegarde est constituée d'au moins **3 copies des données** (en comptant les données originales), sur au moins **2 stockages distincts**, dans au moins **2 lieux distincts** (suffisamment éloignés) et idéalement avec 2 méthodes distinctes. Si vos sauvegardes sont chiffrées **ces règles s'appliquent aussi à la phrase/clé de déchiffrement**. + +Une bonne sauvegarde est aussi dans de nombreux cas, une sauvegarde récente, il faut donc soit beaucoup de rigueur, soit **automatiser** le processus. + +Une bonne sauvegarde est vérifiée régulièrement afin de s'assurer de l'effectivité et de l'intégrité des données. + +Enfin, une bonne sauvegarde est une sauvegarde **restaurable dans des délais acceptables** pour vous. Pensez notamment à documenter votre méthode de restauration et à estimer le temps de transfert d'une copie notamment si les connexions internet en jeu ne sont pas symétriques. + +!!! Exemple d'**une combinaison** robuste et comfortable: +* une sauvegarde distante et automatique avec borg +* une sauvegarde sur disque externe et automatique avec borg +* un snapshot/image régulier (et avant les mises à jour) +* une grappe RAID 1 monitorée (ou un VPS du commerce qui sera aussi sur une grappe) +* une passphrase de déchiffrement stockée sur 3 supports dans 2 lieux + + +## Quelques méthodes possibles + +* [générer une archive et la télécharger manuellement (méthode par défaut de YunoHost)](/backup#sauvegarde-manuelle) +* [sauvegarder automatiquement (méthode conseillée)](/backup#sauvegarde-automatique-ou-distante) +* [générer une archive directement sur un autre disque](/external_storage) +* [faire une image du disque ou un snapshot](/backup/clone_filesystem) +* [sauvegarder les données utiles via une méthode personnalisée](/backup/custom_backup_methods) + +## Risques +Ci-dessous, une liste de risques triés du plus au moins probable, dont la probabilité reste à adapter selon votre situation (lieu du serveur, qualité des installations, profils d'usagers, etc.). À vous de mettre le curseur là où il faut, notamment en considérant les conséquences d'une perte de données. + +!!! Gardez en tête que les vrais accidents sont liés à la survenue de 2 événements de façon simultanée. + +* **Manque de rigueur**: les stratégies à base de sauvegardes manuelles nécessitent beaucoup de rigueur dans la régularité +* **Mauvaise manipulation**: il peut arriver d'effacer une sauvegarde par erreur lors d'une restauration ou si vous comptez sur un système de synchronisation, vous pourriez supprimer un fichier et que la suppression soit synchronisée de façon instantanée +* **Cryptolocker**: il s'agit de virus qui chiffrent les fichiers et réclament une rançon. Si vos utilisateurs ou utilisatrices utilisent nextcloud et windows, un windows infecté pourrait synchroniser des fichiers chiffrés et ainsi vous perdriez votre copie. +* **Panne matérielle**: les cartes SD sont les supports les moins fiables dans le temps (~2ans de vie dans un serveur), viennent ensuite les disques SSD (environ 3 ans de vie) et les disques durs (3 ans). À noter qu'un équipement neuf a aussi une probabilité non nulle de tomber en panne lors des 6 premiers mois. Dans tous les cas, vos copies ne devraient pas être sur le même support physique. +* **Panne logicielle/bug**: un bug logiciel peut aboutir à la suppression de données ou vous pourriez ne pas savoir réparer un problème et souhaiter restaurer votre système. +* **Panne d'électricité ou d'internet**: avez-vous un plan si ça arrive ? Quid si vous êtes en vacances ? +* **Catastrophe ou événement naturel ou non**: un petit enfant, un chat, la foudre ou une simple fuite peuvent détruire votre matériel. Les incendies ou inondations peuvent aussi mettre à mal votre copie de sauvegarde à l'autre bout de votre logement... +* **Compromission du serveur**: une personne malveillante ou un robot pourrait attaquer votre serveur et supprimer vos données. +* **Vol de machine**: un cambriolage ou le vol d'un ordinateur sur lequel se trouve votre gestionnaire de mots de passe pour déchiffrer vos sauvegardes. +* **Perquisition**: que vous soyez coupable ou non, une perquisition peut aboutir à la saisie entière du matériel informatique d'un lieu (voir de plusieurs lieux). +* **Décès/problème de santé**: vous pourriez ne plus être en mesure de taper votre phrase de passe. + +## À propos de la synchronisation Nextcloud ou Thunderbird (IMAP) +Une méthode qui permet une sauvegarde partielle consiste à sauvegarder les fichiers et les emails via des logiciels de synchronisation comme Nextcloud client ou ThunderBird. De cette façon, vous évitez le risque de panne matérielle. + +Si cette méthode est simple à mettre en place, elle n'est pas sans risque du fait de la synchronisation elle-même. Par exemple, si vous êtes sur windows ou mac, vous augmentez de façon non négligeable le risque de perte de données suite au chiffrement des fichiers par un virus de type [cryptolocker](https://fr.wikipedia.org/wiki/Ran%C3%A7ongiciel). Sur tout type de système, une fausse manipulation peut supprimer l'ensemble de vos copies sur le serveur et sur les équipements qui synchronisent. Ce souci est aggravé par le fait que la synchronisation de suppression est en général plutôt instantanée. + +Si le risque de fausse manipulation peut être atténué via des logiciels de sauvegarde pour PC de bureau comme TimeShift, seule une sauvegarde sur un disque dur externe déconnecté vous protège vraiment des rançongiciels. + + diff --git a/pages/02.administer/20.backups/05.evaluate/evaluate.it.md b/pages/02.administer/20.backups/05.evaluate/evaluate.it.md new file mode 100644 index 00000000..26b518c2 --- /dev/null +++ b/pages/02.administer/20.backups/05.evaluate/evaluate.it.md @@ -0,0 +1,67 @@ +# --- +title: Strategie di backup +template: docs +taxonomy: + category: docs +routes: + default: '/backup_strategies' +page-toc: + active: true + depth: 3 +--- + + +In un contesto di self hosting le strategie di backup sono un fattore chiave per sopperire ad eventi inattesi (incendio, corruzione del database, impossibilità di accedere al server, compromissione del server...). La tipologia di backup da adottare dipende dalla importanza dei dati e dei servizi che vogliamo proteggere. Ad esempio, nel contesto di un server di test possiamo evitare un backup integrale (dati e sistema operativo), al contrario, dovremo porre molta più attenzione nel caso di un server in produzione che contenga dati importanti. In questo caso è necessario conservare più copie di backup *in posti diversi*. + +## Ottimizzare il backup +Un buon backuo consiste in almeno **tre copie dei dati** (compreso l'originale), salvate su almeno **due supporti distinti** che si trovano a loro volta **in due luoghi distinti** (sufficientemente lontani tra loro) e con due diversi sistemi di stoccaggio. Se il vostro backup è cifrato **questa regola aurea si applica anche alla password o frase di decifrazione**. + +Un buon backup deve anche essere recente, dovrete quindi essere molto precisi e quando possibile **automatizzare il processo**. + +Controllate sempre l'integrità del file di backup. + +Per ultimo, un buon backup **deve essere facilmente e velocemente accessibile**. Ricorda di documentare il metodo di recupero e di controllare la velocità delle connessioni in download specialmente se la connessione Internet non è simmetrica. + + +!! Esempi di **backup sicuro e facilmente recuperabile**. +* backup remoto e automatizzato con borg +* backup automatizzato su unità locale esterna con borg +* snapshot o immagine (eseguiti prima di ogni aggiornamento) +* server monitorato con RAID 1 (o una VPS commerciale che può essere su un array) +* password di decifratura salvata su (tre supporti e due luoghi diversi) + +## Alcuni esempi di esecuzione del backup + +* [creare un file di backup e salvarlo manualmente (scelta di default per YunoHost)](/backup#manual-backup) +* [backup automatizzato (scelta consigliata)](/backup#automatic-or-remote-backup) +* [backup su disco esterno](/external_storage) +* [creazione di un'immagine o snapshot](/backup/clone_filesystem) +* [salvataggio dei dati con metodo personalizzato](/backup/custom_backup_methods) + + +## Rischi +Di seguito un elenco di errori in ordine crescente di pericolosità. L'ordine proposto varia in base alla vostra situazione (tipo di server, complessità dell'installazione, permessi degli utenti), ponete attenzione alla vostra configurazione, avendo ben presenti le conseguenze di una possibile perdita dei dati. + +!!! Tenete presente che i rischi reali sono collegati all'evenienza di 2 eventi contemporanei + +* **Imprecisione**: i backup manuali richiedono rigore e regolarità +* **Errata gestione**: cancellazione involontaria di un file di backup in un sistema di sincronizzazione client server di backup, cancellazione che si propaga instantaneamente +* **Cryptolocker**: si tratta di virus che cifrano i file e chiedono un riscatto. Se i vostri utenti usano nextcloud e windows un sistema windows infetto può sincronizzare file cifrati perdendo così le copie di backup. +* **Guasto hardware**: le schede SD sono i supporti meno affidabili nel tempo (si stima meno di 2 anni di vita in un server), seguite dai dischi SSD (circa 3 anni di vita) e i dischi HD (3 anni). Ricordate che neppure un'infrastruttura nuova è esente al 100% da guasti nei primi sei mesi di vita. In ogni caso le copie non devono stare sugli stessi supporti fisici. +* **Bug software**: il malfunzionamento del software può portare alla perdita dei dati oppure potreste non sapere come risolvere un problema e quindi vorrete recuperare il vostro sistema. +* **Assenza di energia elettrica o connessione**: prevedete un piano di azione se dovesse succedere...quando siete in vacanza. +* **Catastrofi naturali e non**: un bambino o di un gatto, un fulmine o una perdita di acqua, incendio e inondazioni possono rovinare il vostro backup custodito nella stanza adiacente. +* **Compromissione del server**: un attacco informatico diretto al vostro server potrebbe cancellarne i dati +* **Furto**: nel caso di furto potreste perdere il software di gestione della password per decriptare il backup. +* **Problemi legali**: per poter dimostrare la vostra innocenza i vostri pc potrebbero essere sequestrati, a casa vostra e altrove +* **Decesso o malattia**: potreste non essere più in grado di digitare la vostra password + +## Qualche info sulla sincronizzazione Nextcloud o Thunderbird (IMAP) +Un metodo per un parziale backup consiste nello salvare i file e le mail tramite dei programmi di sincronizzazione quali Nextcloud o Thunderbird. In questo modo eviterete le perdite dovute ad un guasto fisico. + +La semplicità di tale operazione comporta qualche rischio intrinseco nella natura stessa del metodo, sopratutto se usato in ambiente mac o windows. Un [crytolocker](https://en.wikipedia.org/wiki/Ransomware) sul vostro pc porterebbe come conseguenza la perdita dei file sul server nextcloud, così come una involontaria cancellazione del file sul pc. Normalmente la sincronizzazione tra il pc e il server nextcloud è istantanea e quindi i danni sono irreparabili. + +Anche se il rischio di evento del genere può essere attenuato con programmi quali Timeshift, solo il backup su un supporto non connesso vi proteggerà dai crytolocker. + + + diff --git a/pages/02.administer/20.backups/05.evaluate/evaluate.md b/pages/02.administer/20.backups/05.evaluate/evaluate.md new file mode 100644 index 00000000..00e6023f --- /dev/null +++ b/pages/02.administer/20.backups/05.evaluate/evaluate.md @@ -0,0 +1,64 @@ +--- +title: Backup strategies +template: docs +taxonomy: + category: docs +routes: + default: '/backup_strategies' +page-toc: + active: true + depth: 3 +--- + + +In the context of self-hosting, backups are an important element to compensate for unexpected events (fire, database corruption, loss of access to the server, compromised server...). The backup policy to implement depends on the importance of the services and data you manage. For example, backing up a test server will be of little interest, while you will want to be very careful if you are managing critical data for an association or a company - and in such cases, you will want to store the backups *in a different location or locations*. + +## What is a good backup ? +A good backup consists of at least **3 copies of the data** (including the original data), on at least **2 separate storages**, in at least **2 separate locations** (far enough apart) and ideally with 2 separate methods. If your backups are encrypted **these rules also apply to the decryption phrase/key**. + +A good backup is also in many cases, a recent backup, so it takes either a lot of rigor or to **automate** the process. + +A good backup is checked regularly to ensure the effectiveness and integrity of the data. + +Finally, a good backup is one that is **restorable within an acceptable timeframe** for you. Remember to document your restoration method and to estimate the transfer time of a copy, especially if the Internet connections involved are not symmetrical. + + +!!! Example of **a robust and comfortable combination**: +* a remote and automatic backup with borg +* a backup on external disk and automatic with borg +* a regular snapshot/image (and before updates) +* a monitored RAID 1 array (or a commercial VPS that will also be on an array) +* a decryption passphrase stored on 3 media in 2 locations + +## Some possible methods + +* [generate an archive and download it manually (default method of YunoHost)](/backup#manual-backup) +* [backup automatically (recommended method)](/backup#automatic-or-remote-backup) +* [generate an archive directly on another disk](/external_storage) +* [make a disk image or snapshot](/backup/clone_filesystem) +* [save useful data via a custom method](/backup/custom_backup_methods) + + +## Risks +Below, a list of risks sorted from the most to the least probable, whose probability remains to be adapted according to your situation (location of the server, quality of the installations, user profiles, etc.). It is up to you to put the cursor where it should be, especially considering the consequences of a data loss. + +!!! Keep in mind that real accidents are linked to the occurrence of 2 events simultaneously. + +* **Lack of rigor**: strategies based on manual backups require a lot of rigor in the regularity +* **Bad handling**: it can happen that a backup is erased by mistake during a restoration or if you rely on a synchronization system, you could delete a file and the deletion would be synchronized instantly +* **Cryptolocker**: this is a virus that encrypts files and demands a ransomware. If your users are using nextcloud and windows, an infected windows could synchronize encrypted files and thus you lose your copy. +* **Hardware failure**: SD cards are the least reliable media over time (~2 years of life in a server), followed by SSD disks (about 3 years of life) and hard drives (3 years). Note that a new equipment has also probability to break down during the first 6 months. In all cases, your copies should not be on the same physical media. +* **Software failure/bug**: a software bug may result in data deletion or you may not know how to fix a problem and want to restore your system. +* **Electricity or internet failure**: do you have a plan if this happens? What if you are on vacation? +* **Disaster or natural or unnatural event**: a small child, a cat, lightning or a simple leak can destroy your equipment. Fires or floods can also destroy your backup copy at the other end of your home... +* **Server compromise**: a malicious person or a robot could attack your server and delete your data +* **Machine theft**: a burglary or theft of a computer on which your password manager is located to decrypt your backups +* **Search**: whether you are guilty or not, a search can result in the seizure of the entire computer equipment of a place (or even several) +* **Death/health problem**: you may not be able to type your passphrase anymore + +## About Nextcloud or Thunderbird (IMAP) synchronization +A method that allows a partial backup is to backup files and emails via synchronization software like Nextcloud client or ThunderBird. This way, you avoid the risk of hardware failure. + +If this method is easy to set up, it is not without risk because of the synchronization itself. For example, if you are on Windows or Mac, you increase the risk of data loss following the encryption of files by a [cryptolocker](https://en.wikipedia.org/wiki/Ransomware) type virus. On any type of system, a false manipulation can delete all your copies on the server and on the equipment that synchronizes. This concern is aggravated by the fact that the deletion synchronization is usually rather instantaneous. + +While the risk of false manipulation can be mitigated by desktop backup software such as TimeShift, the risk of false manipulation can only be mitigated by a backup on a hard drive. Only a backup on a disconnected external hard drive really protects you from ransomware. diff --git a/pages/02.administer/20.backups/10.backup_methods/01.borgbackup/borgbackup.fr.md b/pages/02.administer/20.backups/10.backup_methods/01.borgbackup/borgbackup.fr.md new file mode 100644 index 00000000..a0d505ad --- /dev/null +++ b/pages/02.administer/20.backups/10.backup_methods/01.borgbackup/borgbackup.fr.md @@ -0,0 +1,85 @@ +--- +title: BorgBackup +template: docs +taxonomy: + category: docs +routes: + default: '/backup/borgbackup' +page-toc: + active: true + depth: 3 +--- + + +YunoHost propose un couple d'applications pour [BorgBackup](https://www.borgbackup.org/). + +## Fonctionnalité +Cette application propose: +* la sauvegarde des données sur un disque externe ou sur un dépôt borg distant +* la déduplication et la compression des fichiers ce qui permet de conserver de nombreuses copies antérieures +* le chiffrement des données, ce qui permet de pouvoir stocker chez un tiers +* de définir finement la fréquence et le type de données à sauvegarder +* un système d'alerte mail en cas de défaut de sauvegarde. + +Il existe des [fournisseurs de dépôts borg distants](https://www.borgbackup.org/support/commercial.html), il est également possible de créer son propre dépôt sur un autre YunoHost avec l'[application borgserver](https://github.com/YunoHost-Apps/borgserver_ynh). + +La future méthode de sauvegarde intégrée par défaut dans YunoHost sera basée sur ce logiciel. + +## Mise en place de la sauvegarde +!!! Pour la mise en place, il faut d'abord installer l'[application borg](https://github.com/YunoHost-Apps/borg_ynh), puis éventuellement l'[application borgserver](https://github.com/YunoHost-Apps/borgserver_ynh). + + + +## Tester +Avec les apps borg un email est envoyé pour dire si la sauvegarde échoue ou si le repo distant n'a rien reçu. On peut toutefois analyser manuellement pour s'assurer que tout va bien de façon plus complète. + +```bash +# Lister les fichiers +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg list "$(yunohost app setting $app repository)" | less + +# Lister les exports de base de données +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg list "$(yunohost app setting $app repository)" | grep "(db|dump)\.sql" + +# Lister les fichiers de l'archive +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg list "$(yunohost app setting $app repository)::ARCHIVE" | less + +# Voir les infos de l'archive +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg info "$(yunohost app setting $app repository)::ARCHIVE" + +# Vérifier l'intégrité des données +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg check "$(yunohost app setting $app repository)::ARCHIVE" --verify-data +``` + +## Restaurer + +Si on est dans le cas d'une migration ou d'une réinstallation, il faut réinstaller borg de la même façon. Si le repo est distant il faut changer la clé publique. + +Lister les archives disponibles +``` +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg list "$(yunohost app setting $app repository)" +``` + +Créer les archives tar (une archive par app et partie de système) +``` +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg export-tar "$(yunohost app setting $app repository)::ARCHIVE" /home/yunohost.backup/archives/ARCHIVE.tar +``` + +Puis restaurer l'archive de façon classique. + +### Restaurer des grosses archives +Si l'espace disponible est inférieur au poids de votre archive, des données décompressées et des dépendances, vous devrez restaurer partie par partie, app par app. + +Si restaurer app par app ne suffit pas OU si une archive est trop grosse, il peut être judicieux de générer une archive tar sans les "grosses" données d'une app comme si elle avait été générée avec l'[option BACKUP_CORE_ONLY](/backup/include_exclude_files#ne-pas-sauvegarder-les-grosses-quantites-de-donnees). Exemple avec Nextcloud: +``` +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg export-tar -e apps/nextcloud/backup/home/yunohost.app "$(yunohost app setting $app repository)::ARCHIVE" /home/yunohost/archives/ARCHIVE.tar +``` + +Il faudra ensuite extraire ces données directement avec borg +``` +cd /home/yunohost.app/ +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg extract "$(yunohost app setting $app repository)::ARCHIVE" apps/nextcloud/backup/home/yunohost.app/ +mv apps/nextcloud/backup/home/yunohost.app/nextcloud ./ +rm -r apps +``` + +Puis restaurer de façon classique diff --git a/pages/02.administer/20.backups/10.backup_methods/01.borgbackup/borgbackup.it.md b/pages/02.administer/20.backups/10.backup_methods/01.borgbackup/borgbackup.it.md new file mode 100644 index 00000000..c9ff5c29 --- /dev/null +++ b/pages/02.administer/20.backups/10.backup_methods/01.borgbackup/borgbackup.it.md @@ -0,0 +1,85 @@ +--- +title: BorgBackup +template: docs +taxonomy: + category: docs +routes: + default: '/backup/borgbackup' +page-toc: + active: true + depth: 3 +--- + +YunoHost propone due programmi per [BorgBackup](https://www.borgbackup.org/). + +## Funzionalità +con BorgBackup potrete: +* effettuare il backup dei dati in un HD esterno o in un repository borg remoto +* deduplicare e comprimere i file, che permette di mantenere molte versioni precedenti +* la cifratura dei dati, permettendo così di conservare in modo sicuro i file presso soggetti terzi +* definire i tipi di dati da copiare e la frequenza di backup +* ricevere una mail di allerta in caso di fallimento del backup + +Oltre ai [fornitori terzi di repository](https://www.borgbackup.org/support/commercial.html), vi è la possibilità di hostare il proprio repository su una differente installazione yunohost con installata l'[applicazione borgserver](https://github.com/YunoHost-Apps/borgserver_ynh). + +Il futuro metodo di backup integrato in YunoHost sarà basato su BorgBackup + +## Pianificazione del backup + +!!!Installate l'[applicazione borg](https://github.com/YunoHost-Apps/borg_ynh), ed eventualmente l'[applicazione borgserver](https://github.com/YunoHost-Apps/borgserver_ynh). + + +## Test +Con il programma borg una mail viene inviata nel caso la sessione di backup fallisca o nel caso il repository di destinazione non riceva nessun dato. Da terminale possiamo controllare nei minimi dettagli, che tutto funzioni. + + +```bash +# Elencare i files +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg list "$(yunohost app setting $app repository)" | less + +# Elencare le esportazioni del database +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg list "$(yunohost app setting $app repository)" | grep "(db|dump)\.sql" + +# Elencare i file contenuti nell'archivio +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg list "$(yunohost app setting $app repository)::ARCHIVE" | less + +# Ottenere informazioni sull'archivio +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg info "$(yunohost app setting $app repository)::ARCHIVE" + +# Verificare l'integrità dei dati +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg check "$(yunohost app setting $app repository)::ARCHIVE" --verify-data +``` + +## Ripristino + +Se effettuiamo il ripristino dopo una migrazione o una reinstallazione dobbiamo reinstallare borg nello stessa maniera. Se il repository si trova in un server remoto bisogna cambiare la chiave pubblica. + +Elencare gli archivi disponibili +``` +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg list "$(yunohost app setting $app repository)" +``` + +Creare gli archivi tar (uno per ogni applicazione e componente del sistema) +``` +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg export-tar "$(yunohost app setting $app repository)::ARCHIVE" /home/yunohost/archives/ARCHIVE.tar +``` + +In seguito ripristinare l'archivio come di consueto. + +### Ripristino di archivi di grandi dimensioni +Se lo spazio disponibile è inferiore alla dimensione del vostro archivio, dei dati scompattati e delle dipendenze, dovrete ripristinare un'applicazione alla volta. + +Se il ripristino non riesce o se un archivio è troppo grande, è più prudente creare un archivio tar senza la parte più grande dei dati, cioè come se l'archivio fosse stato creato con l'[opzione BACKUP_CORE_ONLY](/backup/include_exclude_files#don't-save-large-quantities-of-data). Di seguito un esempio con Nextcloud: +``` +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg export-tar -e apps/nextcloud/backup/home/yunohost.app "$(yunohost app setting $app repository)::ARCHIVE" /home/yunohost/archives/ARCHIVE.tar +``` + +In seguito si estrarranno questi dati direttamente con borg +``` +cd /home/yunohost.app/ +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg extract "$(yunohost app setting $app repository)::ARCHIVE" apps/nextcloud/backup/home/yunohost.app/ +mv apps/nextcloud/backup/home/yunohost.app/nextcloud ./ +rm -r apps +``` + + Procedere poi con il consueto metodo di ripristino diff --git a/pages/02.administer/20.backups/10.backup_methods/01.borgbackup/borgbackup.md b/pages/02.administer/20.backups/10.backup_methods/01.borgbackup/borgbackup.md new file mode 100644 index 00000000..0d19b25b --- /dev/null +++ b/pages/02.administer/20.backups/10.backup_methods/01.borgbackup/borgbackup.md @@ -0,0 +1,85 @@ +--- +title: BorgBackup +template: docs +taxonomy: + category: docs +routes: + default: '/backup/borgbackup' +page-toc: + active: true + depth: 3 +--- + + +YunoHost offers a couple of applications for [BorgBackup](https://www.borgbackup.org/). + +## Functionality +This application offers: +* backup of data on an external disk or on a remote Borg repository +* deduplication and compression of files, which allows to keep many previous copies +* data encryption, which allows you to store data with a third party +* to define the frequency and type of data to be backed up +* a mail alert system in case of backup failure. + +There are [remote borg repository providers](https://www.borgbackup.org/support/commercial.html), it is also possible to create your own repository on another YunoHost with the [borgserver application](https://github.com/YunoHost-Apps/borgserver_ynh). + +The future default backup method integrated in YunoHost will be based on this software. + +## Setting up the backup +!!! To set up, first install the [borg application](https://github.com/YunoHost-Apps/borg_ynh), then optionally the [borgserver application](https://github.com/YunoHost-Apps/borgserver_ynh). + + +## Test +With the borg apps an email is sent to say if the backup fails or if the remote repo has received nothing. However, you can manually test to make sure everything is fine in a more complete way. + + +```bash +# List files +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg list "$(yunohost app setting $app repository)" | less + +# List database exports +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg list "$(yunohost app setting $app repository)" | grep "(db|dump)\.sql" + +# List files from the archive +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg list "$(yunohost app setting $app repository)::ARCHIVE" | less + +# View archive info +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg info "$(yunohost app setting $app repository)::ARCHIVE" + +# Verify data integrity +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg check "$(yunohost app setting $app repository)::ARCHIVE" --verify-data +``` + +## Restore + +If we are in the case of a migration or a reinstallation, we must reinstall borg in the same way. If the repo is remote you have to change the public key. + +List the available archives +``` +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg list "$(yunohost app setting $app repository)" +``` + +Create tar archives (one archive per app and system part) +``` +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg export-tar "$(yunohost app setting $app repository)::ARCHIVE" /home/yunohost/archives/ARCHIVE.tar +``` + +Then restore the archive in the usual way. + +### Restore large archives +If the available space is less than the weight of your archive, decompressed data and dependencies, you will have to restore part by part, app by app. + +If restoring app by app is not enough OR if an archive is too big, it may be a good idea to generate a tarball without the "big" data of an app as if it had been generated with the [BACKUP_CORE_ONLY option] (/backup/include_exclude_files#don't-save-large-quantities-of-data). Example with Nextcloud: +``` +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg export-tar -e apps/nextcloud/backup/home/yunohost.app "$(yunohost app setting $app repository)::ARCHIVE" /home/yunohost/archives/ARCHIVE.tar +``` + +You will then have to extract these data directly with borg +``` +cd /home/yunohost.app/ +app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg extract "$(yunohost app setting $app repository)::ARCHIVE" apps/nextcloud/backup/home/yunohost.app/ +mv apps/nextcloud/backup/home/yunohost.app/nextcloud ./ +rm -r apps +``` + +Then restore in the classic way diff --git a/pages/02.administer/20.backups/10.backup_methods/02.restic/restic.fr.md b/pages/02.administer/20.backups/10.backup_methods/02.restic/restic.fr.md new file mode 100644 index 00000000..6f4aa03a --- /dev/null +++ b/pages/02.administer/20.backups/10.backup_methods/02.restic/restic.fr.md @@ -0,0 +1,22 @@ +--- +title: Restic +template: docs +taxonomy: + category: docs +routes: + default: '/backup/restic' +page-toc: + active: true + depth: 3 +--- + + +## Fonctionnalité + +Cette application propose: +* la sauvegarde des données sur un stockage distant (support de différents types de stockage) +* la déduplication et la compression des fichiers ce qui permet de conserver de nombreuses copies antérieures +* le chiffrement des données, ce qui permet de pouvoir stocker chez un tiers + +Le paquet permet aussi de définir finement la fréquence et le type de données à sauvegarder et intègre un système d'alerte mail en cas de défaut de sauvegarde. + diff --git a/pages/02.administer/20.backups/10.backup_methods/02.restic/restic.it.md b/pages/02.administer/20.backups/10.backup_methods/02.restic/restic.it.md new file mode 100644 index 00000000..638e618a --- /dev/null +++ b/pages/02.administer/20.backups/10.backup_methods/02.restic/restic.it.md @@ -0,0 +1,21 @@ +--- +title: Restic +template: docs +taxonomy: + category: docs +routes: + default: '/backup/restic' +page-toc: + active: true + depth: 3 +--- + +## Funzionalità + +Questa applicazione permette: + +* il backup dei dati in rete (compatibile con diverse modalità di stoccaggio dei dati) +* deduplicare e comprimere i file, permettendo di mantenere molte copie precedenti +* la cifratura dei dati, permettendo così di conservare in modo sicuro i file presso soggetti terzi + +Il programma permette di configurare con precisione i dati che devono essere salvati e la frequenza dei backup, e comprende un sistema di allerta via mail nel caso di fallimento nell'esecuzione del backup diff --git a/pages/02.administer/20.backups/10.backup_methods/02.restic/restic.md b/pages/02.administer/20.backups/10.backup_methods/02.restic/restic.md new file mode 100644 index 00000000..30ba422c --- /dev/null +++ b/pages/02.administer/20.backups/10.backup_methods/02.restic/restic.md @@ -0,0 +1,21 @@ +--- +title: Restic +template: docs +taxonomy: + category: docs +routes: + default: '/backup/restic' +page-toc: + active: true + depth: 3 +--- + + +## Functionality + +This application offers: +* backup of data to remote storage (support for different types of storage) +* deduplication and compression of files, which makes it possible to keep many previous copies +* data encryption, which allows to store data at a third party + +The package also allows you to finely define the frequency and type of data to be backed up and integrates an email alert system in case of backup failure. diff --git a/pages/02.administer/20.backups/10.backup_methods/03.archivist/archivist.fr.md b/pages/02.administer/20.backups/10.backup_methods/03.archivist/archivist.fr.md new file mode 100644 index 00000000..0e8c9fcb --- /dev/null +++ b/pages/02.administer/20.backups/10.backup_methods/03.archivist/archivist.fr.md @@ -0,0 +1,22 @@ +--- +title: Archivist +template: docs +taxonomy: + category: docs +routes: + default: '/backup/archivist' +page-toc: + active: true + depth: 3 +--- + + +## Fonctionnalité +Cette application se base sur rsync et GPG, elle propose: +* la sauvegarde des données sur un stockage distant (support de différents types de stockage) +* le chiffrement des données, ce qui permet de pouvoir stocker chez un tiers + +Le paquet permet aussi de définir finement la fréquence et le type de données à sauvegarder et intègre un système d'alerte mail en cas de défaut de sauvegarde. + +Pour plus d'information : [https://forum.yunohost.org/t/new-app-archivist/3747](https://forum.yunohost.org/t/new-app-archivist/3747) + diff --git a/pages/02.administer/20.backups/10.backup_methods/03.archivist/archivist.md b/pages/02.administer/20.backups/10.backup_methods/03.archivist/archivist.md new file mode 100644 index 00000000..808d5528 --- /dev/null +++ b/pages/02.administer/20.backups/10.backup_methods/03.archivist/archivist.md @@ -0,0 +1,22 @@ +--- +title: Archivist +template: docs +taxonomy: + category: docs +routes: + default: '/backup/archivist' +page-toc: + active: true + depth: 3 +--- + + +## Functionality +This application is based on rsync and GPG, it offers: +* backup of data on a remote storage (support for different types of storage) +* data encryption, which allows to store data at a third party + +The package also allows you to finely define the frequency and type of data to be backed up and integrates an email alert system in case of backup failure. + +For more information: [https://forum.yunohost.org/t/new-app-archivist/3747](https://forum.yunohost.org/t/new-app-archivist/3747) + diff --git a/pages/02.administer/20.backups/15.clone_filesystem/clone_filesystem.fr.md b/pages/02.administer/20.backups/15.clone_filesystem/clone_filesystem.fr.md new file mode 100644 index 00000000..0f17dd91 --- /dev/null +++ b/pages/02.administer/20.backups/15.clone_filesystem/clone_filesystem.fr.md @@ -0,0 +1,161 @@ +--- +title: Créer une image du système +template: docs +taxonomy: + category: docs +routes: + default: '/backup/clone_filesystem' +page-toc: + active: true + depth: 3 +--- + +!! Les images de cette page sont manquantes + +L'outil de sauvegarde de YunoHost ne sauvegarde que les fichiers utiles et se base sur des scripts de restauration pour réinstaller les dépendances de vos applications. Autrement dit, le mécanisme de YunoHost revient à réinstaller, puis réincorporer les données. + +Réaliser des images complètes du système peut être un moyen complémentaire ou alternatif de sauvegarder votre machine. L'intérêt est que votre système pourra être restauré dans l'état exact du moment de la sauvegarde. + +Selon votre type d'installation, vous pouvez soit créer un snapshot, soit cloner le support de stockage en le retirant de votre serveur (éteint). + +## Déclencher un snapshot +Un snapshot permet de figer une image du système de fichiers. Les snapshots sont très pratiques lorsque l'on fait une mise à jour ou des essais, car ils vous permettent de revenir facilement en arrière en cas de pépin. En revanche, en dehors de quelques clusters de très haute disponibilité, les snapshots ne vous protègent pas vraiment face à des pannes matérielles ou des catastrophes (cf. incendie d'OVH à Strasbourg en 2021). + +En général, les snapshots sont assez économes en espace disque, le principe est que votre système de fichier va stocker les différences survenues depuis votre snapshot. Ainsi, seules les modifications consomment de l'espace. + +! Pensez à supprimer les anciens snapshots pour éviter de gâcher votre espace de stockage en stockant toutes les différences depuis cette date ! + +Vous pouvez utiliser cette méthode avec la plupart des VPS (souvent payant), des gestionnaires de machines virtuelles ou si vous avez installé YunoHost avec un filesystem avancé comme btrfs, ceph ou ZFS, vous pouvez aussi créer des snapshots via la ligne de commande + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="VPS"] +Ci-dessous, quelques documentations pour les fournisseurs les plus connus: + * [DigitalOcean (EN)](https://docs.digitalocean.com/products/images/snapshots/) + * [Gandi](https://docs.gandi.net/fr/simple_hosting/operations_courantes/snapshots.html) + * [OVH](https://docs.ovh.com/fr/vps/snapshot-vps/) + * [Scaleway (EN)](https://www.scaleway.com/en/docs/backup-your-data-with-snapshots/) +[/ui-tab] +[ui-tab title="VirtualBox"] +Sélectionner la machine virtuelle et cliquer sur `Snapshots`, puis spécifier le nom du snapshot et cliquer sur `OK`. +![Le bouton snapshot se trouve en haut à droite](image://virtualbox-snapshot2.webp) + +Pour restaurer, sélectionner la machine virtuelle, cliquer sur `Snapshots` puis `Restore Snapshot option`. +![](image://virtualbox-snapshot3.webp) + +Ensuite cliquer sur `Restore Snapshot`. +![](image://virtualbox-snapshot4.webp) +[/ui-tab] +[ui-tab title="Proxmox"] + + * Sélectionner la machine virtuelle + * Aller dans l'onglet `Backup` + * Cliquer sur `Backup now` + * Choisir le mode `Snapshot` + * Valider +[/ui-tab] +[ui-tab title="BTRFS"] +Ci-dessous on considère que `/pool/volume` est le volume à snapshoter. + +Créer un snapshot en lecture seule +``` +btrfs subvolume snapshot /pool/volume /pool/volume/$(date +"%Y-%m-%d_%H:%M") +``` + +Lister les snapshots +``` +btrfs subvolume show /pool/volume +``` + +Restaurer un snapshot +``` +btrfs sub del /pool/volume +btrfs sub snap /pool/volume/2021-07-22_16:12 /pool/volume +btrfs sub del /pool/volume/2021-07-22_16:12 +``` + +Supprimer un snapshot +``` +btrfs subvolume delete /pool/volume/2021-07-22_16:12 +``` +!! Attention de ne pas supprimer le volume original + +!!! Voir [ce tutoriel](https://www.linux.com/training-tutorials/how-create-and-manage-btrfs-snapshots-and-rollbacks-linux-part-2/) pour plus d'info +[/ui-tab] +[ui-tab title="CEPH"] +Ci-dessous on considère que `pool/volume` est le volume à snapshoter. + +Créer un snapshot +``` +rbd snap create pool/volume@$(date +"%Y-%m-%d_%H:%M") +``` + +Lister les snapshots +``` +rbd snap ls pool/volume +``` + +Restaurer un snapshot +``` +rbd snap rollback pool/volume@2021-07-22_16:22 +``` + +Supprimer un snapshot +``` +rbd snap rm pool/volume@2021-07-22_16:12 +``` +[/ui-tab] +[ui-tab title="ZFS"] +Ci-dessous on considère que `pool/volume` est le volume à snapshoter. + +Créer un snapshot +``` +zfs snapshot pool/volume@$(date +"%Y-%m-%d_%H:%M") +``` + +Lister les snapshots +``` +zfs list -t snapshot -o name,creation +``` + +Restaurer un snapshot +``` +zfs rollback pool/volume@2021-07-22_16:22 +``` + +Supprimer un snapshot +``` +zfs destroy pool/volume@2021-07-22_16:12 +``` + +[/ui-tab] +[/ui-tabs] + + +## Créer une image du système de fichier à froid + +Vous pouvez cloner votre support (carte SD, disque ssd, volume de VPS...) pour créer une image disque. Cette image avant compression sera de la taille exacte de votre support, c'est pourquoi cette méthode s'applique plutôt aux machines de moins de 64Go. + +À moins de pouvoir lire un snapshot, cette méthode nécessite d'arrêter le serveur le temps de créer l'image. Avec un VPS, il faut redémarrer en mode rescue depuis l'interface de votre fournisseur. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Avec USBimager"] +Ceci peut être effectué avec [USBimager](https://bztsrc.gitlab.io/usbimager/) (N.B. : assurez-vous de télécharger la version 'Read-write' ! Pas la version 'Write-only' !). Le processus consiste ensuite à "l'inverse" du processus de flashage de la carte SD: +- Éteignez votre serveur +- Récupérez la carte SD et branchez-la dans votre ordinateur +- Dans USBimager, cliquez sur "Read" pour créer une image ("photographie") de la carte SD. Vous pouvez utiliser le fichier obtenu pour plus tard restaurer le système en entier. + +Plus de détails dans [la doc d'USBimager](https://gitlab.com/bztsrc/usbimager/#creating-backup-image-file-from-device) +[/ui-tab] +[ui-tab title="En ligne de commande avec dd"] + +Il est possible d'obtenir la même chose avec `dd` si vous êtes à l'aise avec la ligne de commande: + +```bash +dd if=/dev/mmcblk0 | gzip > ./my_snapshot.gz +``` + +(remplacez `/dev/mmcblk0` par le vrai nom de votre carte SD ou disque dur) + +[/ui-tab] +[/ui-tabs] + diff --git a/pages/02.administer/20.backups/15.clone_filesystem/clone_filesystem.it.md b/pages/02.administer/20.backups/15.clone_filesystem/clone_filesystem.it.md new file mode 100644 index 00000000..3e8ea2c1 --- /dev/null +++ b/pages/02.administer/20.backups/15.clone_filesystem/clone_filesystem.it.md @@ -0,0 +1,160 @@ +--- +title: Create a filesystem image +template: docs +taxonomy: + category: docs +routes: + default: '/backup/clone_filesystem' +page-toc: + active: true + depth: 3 +--- + +!! Images are missing on this page + +Lo strumento di backup di Yunohost salva solamente i files utili e si basa su degli script di ripristino per reinstallare le dipendenze dei vostri programmi installati. In altre parole, il ripristino di YunoHost prevede in un primo tempo la reinstallazione del sistema e in seguito il ripristino dei dati. + +Realizzare un'immagine completa può essere un metodo, complementare o alternativo, per un backup del vostro server. Il vantaggio sta nel fatto che il vostro server può essere ripristinato nella stessa configurazione presente al momento del backup. + +In base a quale tipo di installazione avete, potrete creare uno snapshot oppure clonare il supporto che ospita il sistema (mentre è spento). + +## Eseguire uno snapshot +Lo snapshot permette di congelare l'immagine del file system. Gli snapshot sono molto comodi in caso di aggiornamenti frequenti o di prove, perché vi permettono di tornare facilmente sui vostri passi in caso di problemi. Purtroppo, a meno di non avere un cluster ad altissima affidabilità, gli snapshot non vi proteggono efficacemente contro i guasti hardware o catastrofi (come l'incendio di OVH a Strasburgo nel 2021). + +Generalmente gli snapshot non occupano molto spazio sull'hard disk, si basano sul principio del backup differenziale, salvano cioè solo le variazioni dei file avvenute dopo la creazione del primo snapshot. Di conseguenza solo le modifiche prendono spazio. + +! Ricordatevi di cancellare i vecchi snapshot, eviterete di consumare inutilmente spazio con backup differenziali troppo datati! + +Potete usare questo sistema con la maggior parte dei fornitori VPS (quasi sempre a pagamento), nei programmi di gestione di macchine virtuali oppure, se avete installato YunoHost con un filesystem avanzato quale btrfs, ceph o ZFS potrete creare gli snapshot da riga di comando. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="VPS"] +Sotto la documentazione per i provider più conosciuti: + * [DigitalOcean (EN)](https://docs.digitalocean.com/products/images/snapshots/) + * [Gandi](https://docs.gandi.net/fr/simple_hosting/operations_courantes/snapshots.html) + * [OVH](https://docs.ovh.com/fr/vps/snapshot-vps/) + * [Scaleway (EN)](https://www.scaleway.com/en/docs/backup-your-data-with-snapshots/) +[/ui-tab] +[ui-tab title="VirtualBox"] +Seleziona la macchina virtuale e clicca su `Snapshot`, poi indica il nome dello snapshot e clicca `OK`. +![Il bottone per gli snapshot button si trova in alto a destra](image://virtualbox-snapshot2.webp) + +Per ripristinare, selezionate la macchina virtuale, cliccate su`Snapshots` poi scegliete `Restore Snapshot option`. +![](image://virtualbox-snapshot3.webp) + +Infine cliccate su `Restore Snapshot`. +![](image://virtualbox-snapshot4.webp) +[/ui-tab] +[ui-tab title="Proxmox"] + +* Selezionate la macchina virtuale +* Andate al tab `Backup` +* Cliccate su `Backup now` +* Scegliete `Snapshot` +* Confermate +[/ui-tab] +[ui-tab title="BTRFS"] +Nell'esempio seguente `/pool/volume` è il volume da salvare. + +Creare uno snapshot in sola lettura +``` +btrfs subvolume snapshot /pool/volume /pool/volume/$(date +"%Y-%m-%d_%H:%M") +``` + +Elencare gli snapshots +``` +btrfs subvolume show /pool/volume +``` + +Ripristinare uno snapshots +``` +btrfs sub del /pool/volume +btrfs sub snap /pool/volume/2021-07-22_16:12 /pool/volume +btrfs sub del /pool/volume/2021-07-22_16:12 +``` + +Cancellare uno snapshot +``` +btrfs subvolume delete /pool/volume/2021-07-22_16:12 +``` +!! Attenzione a non cancellate il volume originale + +!!! Seguite [questo tutorial](https://www.linux.com/training-tutorials/how-create-and-manage-btrfs-snapshots-and-rollbacks-linux-part-2/) per maggiori informazioni +[/ui-tab] +[ui-tab title="CEPH"] +Nell'esempio seguente `pool/volume` è il volume che vogliamo salvare + +Creare uno snapshots +``` +rbd snap create pool/volume@$(date +"%Y-%m-%d_%H:%M") +``` + +Elencare gli snapshot +``` +rbd snap ls pool/volume +``` + +Ripristinare uno snapshot +``` +rbd snap rollback pool/volume@2021-07-22_16:22 +``` + +Cancellare uno snapshot +``` +rbd snap rm pool/volume@2021-07-22_16:12 +``` +[/ui-tab] +[ui-tab title="ZFS"] +Nell'esempio seguente `pool/volume` è il volume che vogliamo salvare. + +Creare uno snapshot +``` +zfs snapshot pool/volume@$(date +"%Y-%m-%d_%H:%M") +``` + +Elencare gli snapshots +``` +zfs list -t snapshot -o name,creation +``` +Ripristinare uno snapshot +``` +zfs rollback pool/volume@2021-07-22_16:22 +``` + +Cancellare uno snapshot +``` +zfs destroy pool/volume@2021-07-22_16:12 +``` + +[/ui-tab] +[/ui-tabs] + + +## Creare una immagine a freddo del server + +Potete clonare il supporto del vostro server (scheda SD, disco SSD, volume di un VPS...) al fine di creare una immagine del disco. L'immagine creata, prima che venga compressa, sarà della stessa dimensione del vostro supporto e di conseguenza questa procedura è consigliata per supporti di capacità inferiore a 64GB. + +Questo metodo comporta lo spegnimento del server per il tempo necessario alla creazione dell'immagine, eccetto nel caso che possiate usare uno snapshot come origine. Se il server YunoHost è ospitato su un VPS dovrete riavviarlo in modalità rescue dall'interfaccia del vostro provider. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Usando USBimager"] +Questo può essere fatto con il programma [USBimager](https://bztsrc.gitlab.io/usbimager/) (N.B.: assicuratevi di scaricare la versione 'Read-write'! Non la versione 'Write-only'!). Il processo poi prosegue "all'opposto" della copia sulla scheda SD: +- Spegnete il vostro server +- Estraete la scheda SD e inseritela nel pc +- Nel programma USBimage cliccate su "Read" per creare l'immagine ("photograph") della scheda SD. Il file ottenuto verrà utilizzato per il ripristino del sistema. + +Maggiori informazioni [nella documentazione di USBimager](https://gitlab.com/bztsrc/usbimager/#creating-backup-image-file-from-device) +[/ui-tab] +[ui-tab title="Usando la linea di comando con dd"] + +Se siete avezzi al terminale potete ottenere lo stesso risultato con il comando `dd` + +```bash +dd if=/dev/mmcblk0 | gzip > ./my_snapshot.gz +``` + +dove `/dev/mmcblk0` sarà il vostro supporto (scheda SD o disco). + +[/ui-tab] +[/ui-tabs] + diff --git a/pages/02.administer/20.backups/15.clone_filesystem/clone_filesystem.md b/pages/02.administer/20.backups/15.clone_filesystem/clone_filesystem.md new file mode 100644 index 00000000..f58727ab --- /dev/null +++ b/pages/02.administer/20.backups/15.clone_filesystem/clone_filesystem.md @@ -0,0 +1,160 @@ +--- +title: Create a filesystem image +template: docs +taxonomy: + category: docs +routes: + default: '/backup/clone_filesystem' +page-toc: + active: true + depth: 3 +--- + +!! Images are missing on this page + +YunoHost's backup tool only backs up useful files and relies on restore scripts to reinstall the dependencies of your applications. In other words, YunoHost's mechanism amounts to reinstalling and then reincorporating the data. + +Making full system images can be a complementary or alternative way to backup your machine. The advantage is that your system can be restored to the exact state it was in at the time of the backup. + +Depending on your type of installation, you can either create a snapshot or clone the storage medium by removing it from your server (turned off). + +## Trigger a snapshot +A snapshot allows you to freeze an image of the file system. Snapshots are very useful when doing an update or testing, because they allow you to easily go back in case of a glitch. On the other hand, apart from some very high availability clusters, snapshots do not really protect you against hardware failures or disasters (cf. OVH fire in Strasbourg in 2021). + +In general, snapshots are quite disk space saving, the principle is that your file system will store the differences that occurred since your snapshot. Thus, only the modifications consume space. + +! Remember to delete the old snapshots to avoid wasting your storage space by storing all the differences since that date! + +You can use this method with most VPS (often paying), virtual machine managers or if you have installed YunoHost with an advanced filesystem like btrfs, ceph or ZFS, you can also create snapshots via the command line + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="VPS"] +Below, some documentation for the most known suppliers: + * [DigitalOcean (EN)](https://docs.digitalocean.com/products/images/snapshots/) + * [Gandi](https://docs.gandi.net/fr/simple_hosting/operations_courantes/snapshots.html) + * [OVH](https://docs.ovh.com/fr/vps/snapshot-vps/) + * [Scaleway (EN)](https://www.scaleway.com/en/docs/backup-your-data-with-snapshots/) +[/ui-tab] +[ui-tab title="VirtualBox"] +Select the virtual machine and click `Snapshots`, then specify the snapshot name and click `OK`. +![The snapshot button is located at the top right](image://virtualbox-snapshot2.webp) + +To restore, select the virtual machine, click on `Snapshots` then `Restore Snapshot option`. +![](image://virtualbox-snapshot3.webp) + +Then click on `Restore Snapshot`. +![](image://virtualbox-snapshot4.webp) +[/ui-tab] +[ui-tab title="Proxmox"] + + * Select the virtual machine + * Go to the `Backup` tab + * Click on `Backup now`. + * Choose `Snapshot` mode + * Validate +[/ui-tab] +[ui-tab title="BTRFS"] +Below we consider that `/pool/volume` is the volume to snapshot. + +Create a read-only snapshot +``` +btrfs subvolume snapshot /pool/volume /pool/volume/$(date +"%Y-%m-%d_%H:%M") +``` + +List snapshots +``` +btrfs subvolume show /pool/volume +``` + +Restore a snapshot +``` +btrfs sub del /pool/volume +btrfs sub snap /pool/volume/2021-07-22_16:12 /pool/volume +btrfs sub del /pool/volume/2021-07-22_16:12 +``` + +Delete a snapshot +``` +btrfs subvolume delete /pool/volume/2021-07-22_16:12 +``` +!! Be careful not to delete the original volume + +!!! See [this tutorial](https://www.linux.com/training-tutorials/how-create-and-manage-btrfs-snapshots-and-rollbacks-linux-part-2/) for more info +[/ui-tab] +[ui-tab title="CEPH"] +Below we consider that `pool/volume` is the volume to snapshot. + +Create a snapshot +``` +rbd snap create pool/volume@$(date +"%Y-%m-%d_%H:%M") +``` + +List snapshots +``` +rbd snap ls pool/volume +``` + +Restore a snapshot +``` +rbd snap rollback pool/volume@2021-07-22_16:22 +``` + +Delete a snapshot +``` +rbd snap rm pool/volume@2021-07-22_16:12 +``` +[/ui-tab] +[ui-tab title="ZFS"] +Below we consider that `pool/volume` is the volume to snapshot. + +Create a snapshot +``` +zfs snapshot pool/volume@$(date +"%Y-%m-%d_%H:%M") +``` + +List snapshots +``` +zfs list -t snapshot -o name,creation +``` +Restore a snapshot +``` +zfs rollback pool/volume@2021-07-22_16:22 +``` + +Delete a snapshot +``` +zfs destroy pool/volume@2021-07-22_16:12 +``` + +[/ui-tab] +[/ui-tabs] + + +## Create a cold image of the file system + +You can clone your media (SD card, ssd disk, VPS volume...) to create a disk image. This image before compression will be the exact size of your media, that's why this method applies rather to machines of less than 64GB. + +Unless you can read a snapshot, this method requires you to stop the server while you create the image. With a VPS, you have to restart in rescue mode from your provider's interface. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="With USBimager"] +This can be done with [USBimager](https://bztsrc.gitlab.io/usbimager/) (Note: make sure you download the 'Read-write' version! Not the 'Write-only' version!). The process then consists of the "reverse" of the SD card flashing process: +- Turn off your server +- Retrieve the SD card and plug it into your computer +- In USBimager, click on "Read" to create an image ("photograph") of the SD card. You can use the resulting file to restore the whole system later. + +More details in [USBimager documentation](https://gitlab.com/bztsrc/usbimager/#creating-backup-image-file-from-device) +[/ui-tab] +[ui-tab title="In command line with dd"] + +It is possible to achieve the same thing with `dd` if you are comfortable with the command line: + +```bash +dd if=/dev/mmcblk0 | gzip > ./my_snapshot.gz +``` + +(replace `/dev/mmcblk0` with the real name of your SD card or hard drive) + +[/ui-tab] +[/ui-tabs] + diff --git a/pages/02.administer/20.backups/20.avoid_hardware_failure/avoid_hardware_failure.fr.md b/pages/02.administer/20.backups/20.avoid_hardware_failure/avoid_hardware_failure.fr.md new file mode 100644 index 00000000..4d32160c --- /dev/null +++ b/pages/02.administer/20.backups/20.avoid_hardware_failure/avoid_hardware_failure.fr.md @@ -0,0 +1,51 @@ +--- +title: Éviter les pannes matérielles +template: docs +taxonomy: + category: docs +routes: + default: '/backup/avoid_hardware_failure' +page-toc: + active: true + depth: 3 +--- + +## Sécuriser physiquement votre serveur +Très souvent les personnes qui s'autohébergent n'ont pas de rangement correct pour leur système. Laisser le serveur en plusieurs parties, dans un lieu de passage, accessible à des enfants ou des animaux, ou dans un endroit peu aéré peut vite tourner à la catastrophe. + +## Fixer vos disques durs +Idéalement, vos disques durs doivent être fixés pour éviter les vibrations qui peuvent accélérer l'usure du matériel voire atténuer ses performances, notamment s'il y a un autre disque à côté. + +## Réduire la swapiness pour les cartes SD et disques SSD +Si vous utilisez un fichier de swap avec un SSD ou une carte SD avec une swapiness trop élevée, votre support de stockage pourrait rendre l'âme prématurément en raison d'un trop grand nombre d'écritures. + +Pour éviter ça: +``` +cat /proc/sys/vm/swappiness +``` +Si elle est au-dessus de 10: +``` +sysctl vm.swappiness=10 +nano /etc/sysctl.conf +``` +Si la ligne est présente, changez la valeur vm.swappiness à 10.Sinon, ajoutez la ligne: +``` +vm.swappiness = 10 +``` + +## Redondance de stockage +Afin de limiter les pannes matérielles des supports de stockage, il peut être pertinent de mettre en place une grappe de disques en miroir (RAID, ZFS). L'idée ici est que tout ce qui est écrit sur un disque le sera sur l'autre. Ainsi, si l'un tombe en panne, l'autre continue de fonctionner et le serveur est toujours pleinement fonctionnel. + +Il existe aussi des grappes plus évoluées qui maximisent la tolérance de panne (panne de 2 disques comme le RAID6) ou le stockage (voir RAID 5). + +Toutefois, ces techniques de grappes de disques ne devraient pas être considérées comme des copies de sauvegarde. Une grappe RAID devrait être considérée comme un seul support de stockage. En effet, si cette technique permet d'éviter de devoir réinstaller en cas de crash probable d'un disque, on est loin du risque zéro. + +Quelques exemples de situations connues des administrateurs systèmes professionnels: +* les disques d'une grappe montée avec des disques de la même marque peuvent tomber en panne quasiment en même temps en moins de quelques heures +* sans monitoring de la santé des disques, il y a de fortes chances que l'on ne remarque la panne d'un disque de la grappe que lorsqu'un deuxième tombe en panne (><) +* si on n'a pas de disque de rechange, le délai d'achat peut aboutir à un crash de l'autre disque +* un disque à moitié fonctionnel qui produit des erreurs peut propager son erreur à travers la grappe +* les connectiques des disques ou le contrôleur RAID peuvent produire des erreurs aussi ou tomber en panne +* plus on complexifie l'architecture avec de nombreux composants, plus il y a de chances que l'un d'eux tombe en panne + +!!! Si vous souhaitez mettre en place une grappe RAID ou utiliser btrfs, le plus simple est de le faire à l'installation avec l'iso YunoHost en mode expert (lors du partitionnement du système). diff --git a/pages/02.administer/20.backups/20.avoid_hardware_failure/avoid_hardware_failure.it.md b/pages/02.administer/20.backups/20.avoid_hardware_failure/avoid_hardware_failure.it.md new file mode 100644 index 00000000..75e3858a --- /dev/null +++ b/pages/02.administer/20.backups/20.avoid_hardware_failure/avoid_hardware_failure.it.md @@ -0,0 +1,52 @@ +--- +title: Evitare i problemi hardware +template: docs +taxonomy: + category: docs +routes: + default: '/backup/avoid_hardware_failure' +page-toc: + active: true + depth: 3 +--- + + +## Rendere sicuro fisicamente il tuo server +Frequentemente la persone che fanno selfhosting non dispongono di spazi adatti per posizionare il proprio server. Posizionare il server, o parti di esso, in un luogo di passaggio, accessibile a bambini o animali, o in un luogo poco ventilato, può avere conseguenze catastrofiche. + +## Fissate i vostri HD +Sarebbe opportuno fissare saldamente i propri hard disk al fine di evitare vibrazioni che provocano usura prematura del disco, o ne pregiudicano le performance, in particolar modo se si trovano vicini ad altri dischi. + +## Ridurre lo swapiness nelle schede SD e nei dischi SSD +Se utilizzate un file di swap, in un disco SSD o in una scheda SD, con uno swapiness troppo elevato correte il serio rischio di usurare prematuramente il vostro supporto a causa di un numero eccessivo di scritture sul disco. + +Per evitare il problema +``` +cat /proc/sys/vm/swappiness +``` +Se il comando restituisce un valore superiore a 10: +``` +sysctl vm.swappiness=10 +nano /etc/sysctl.conf +``` +Se la riga è presente, cambiate il valore vm.swappiness con 10. In caso contrario aggiungete la riga: +``` +vm.swappiness = 10: +``` + +## Ridondanza dei supporti +Al fine di limitare i guasti dei supporti si dovrebbe ricorrere ad un cluster di dischi in modalità mirror (RAID, ZFS). Il concetto è che tutto quello che verrà scritto su un disco verrà scritto anche negli altri. In questo modo se un disco subisce un guasto, gli altri garantiranno la funzionalità del server. + +Altre configurazioni più evolute, migliorano la tolleranza ai guasti (guasto di 2 dischi nel RAID6) o la suddivisione dei dati (RAID 5). + +Comunque i sistemi RAID non vanno considerati come metodi di backup. Un RAID deve essere considerato un normale supporto dei dati. Se questo sistema permette di evitare reinstallazioni in caso di guasto ad un disco, esso non ci garantisce che i nostri dati non correranno nessun rischio. + +Alcune situazioni ben conosciute dagli amministratori di sistema. +* i dischi di un cluster creato con dischi della stessa marca possono guastarsi quasi contemporaneamente nel giro di poche ore +* se non monitoriamo lo stato di salute dei nostri dischi, probabilmente ci accorgeremo di un problema ai dischi della configurazione RAID solo quando si guasterà un secondo disco (><) +* se non abbiamo un HD di scorta, nell'attesa che arrivi il disco nuovo per sostituire quello danneggiato, si guasterà anche l'altro +* un disco che non funziona correttamente può provocare errori in tutta la catena +* anche i controller RAID o i connettori possono guastarsi o dare errori +* più complessa è la nostra catena, maggiori sono le possibilità di un guasto + +!!! Se pianificate di creare una catena RAID o utilizzare il filesystem btrfs, la procedura più semplice è quella di installare YunoHost in modalità esperto (nella parte relativa alle partizioni del disco). diff --git a/pages/02.administer/20.backups/20.avoid_hardware_failure/avoid_hardware_failure.md b/pages/02.administer/20.backups/20.avoid_hardware_failure/avoid_hardware_failure.md new file mode 100644 index 00000000..1d8e8865 --- /dev/null +++ b/pages/02.administer/20.backups/20.avoid_hardware_failure/avoid_hardware_failure.md @@ -0,0 +1,52 @@ +--- +title: Avoid hardware failure +template: docs +taxonomy: + category: docs +routes: + default: '/backup/avoid_hardware_failure' +page-toc: + active: true + depth: 3 +--- + + +## Physically secure your server +Very often people who self-host don't have proper storage for their system. Leaving the server in several parts, in a high traffic area, accessible to children or pets, or in a poorly ventilated area can quickly turn into a disaster. + +## Secure your hard drives +Ideally, your hard disks should be fixed to avoid vibrations which can accelerate the wear of the equipment or even reduce its performance, especially if there is another disk next to it. + +## Reduce swapiness for SD cards and SSDs +If you use a swap file with an SSD or SD card with too much swapiness, your storage media could give up the ghost prematurely due to too many writes. + +To avoid this: +``` +cat /proc/sys/vm/swappiness +``` +If it is above 10: +``` +sysctl vm.swappiness=10 +nano /etc/sysctl.conf +``` +If present, change the vm.swappiness value to 10. Otherwise add the line: +``` +vm.swappiness = 10 +``` + +## Storage redundancy +In order to limit hardware failures of storage media, it can be relevant to set up a cluster of mirrored disks (RAID, ZFS). The idea here is that everything that is written to one disk will be written to the other. This way, if one fails, the other continues to work and the server is still fully functional. + +There are also more advanced clusters that maximize fault tolerance (failure of 2 disks like RAID6) or storage (see RAID 5). + +However, these disk clustering techniques should not be considered as backups. A RAID array should be considered as a single storage medium. Indeed, if this technique avoids having to reinstall in case of a probable disk crash, it is far from zero risk. + +Some examples of situations known to professional system administrators: +* the disks of a cluster mounted with disks of the same brand can fail almost at the same time within a few hours +* without monitoring the health of the disks, there is a good chance that the failure of one disk in the cluster will only be noticed when a second one fails (><) +* if you don't have a spare disk, the delay in purchasing one may result in the other disk crashing +* a half-functional disk that produces errors can propagate its error through the cluster +* the disk connectors or the RAID controller can also produce errors or fail +* the more complex you make the architecture with many components, the more likely it is that one of them will fail + +!!! If you want to set up a RAID array or use btrfs, the easiest way is to do it at installation with the YunoHost iso in expert mode (when partitioning the system). diff --git a/pages/02.administer/20.backups/25.include_exclude_files/include_exclude_files.fr.md b/pages/02.administer/20.backups/25.include_exclude_files/include_exclude_files.fr.md new file mode 100644 index 00000000..d36f8429 --- /dev/null +++ b/pages/02.administer/20.backups/25.include_exclude_files/include_exclude_files.fr.md @@ -0,0 +1,131 @@ +--- +title: Inclure/exclure des fichiers +template: docs +taxonomy: + category: docs +routes: + default: '/backup/include_exclude_files' +page-toc: + active: true + depth: 3 +--- + +## Inclure des fichiers + +YunoHost sait en général déjà ce qui doit être sauvegardé. Toutefois, si vous avez procédé à des modifications manuelles, par exemple en installant une app en dehors du système d'applications de YunoHost, vous pouvez avoir envie d'étendre le mécanisme de YunoHost pour spécifier d'autres fichiers à sauvegarder. + +Par défaut, si des configurations suivies par YunoHost sont modifiées, elles seront sauvegardées. En revanche, une base de données ou une app ajoutée à la main, des modifs sur certaines configurations non suivies, ne le seront pas. + +Vous pouvez créer un hook de sauvegarde et un hook de restauration pour ajouter des données à sauvegarder. Ci-dessous un exemple: + +/etc/yunohost/hooks.d/backup/99-conf_custom +```bash +#!/bin/bash + +# Source YNH helpers +source /usr/share/yunohost/helpers + +ynh_backup_dest (){ + YNH_CWD="${YNH_BACKUP_DIR%/}/$1" + mkdir -p $YNH_CWD + cd "$YNH_CWD" +} + +# Exit hook on subcommand error or unset variable +ynh_abort_if_errors + +# Openvpn +ynh_backup_dest "conf/custom/openvpn" +ynh_backup "/etc/sysctl.d/openvpn.conf" +ynh_backup "/etc/openvpn" +ynh_backup "/etc/fail2ban/jail.d/openvpn.conf" +ynh_backup "/etc/fail2ban/filter.d/openvpn.conf" + +# Samba +ynh_backup_dest "conf/custom/samba" +ynh_backup "/etc/samba" +ynh_backup "/var/lib/samba" +ynh_backup "/etc/yunohost/hooks.d/post_user_create/99-samba" +ynh_backup "/etc/yunohost/hooks.d/post_user_delete/99-samba" +ynh_backup --src_path="/etc/yunohost/hooks.d/post_user_update/99-samba" --not_mandatory +ynh_backup "/etc/cron.daily/clean-trash" + +# MISC +ynh_backup_dest "conf/custom/misc" +ynh_backup "/etc/sysctl.d/noipv6.conf" +ynh_backup "/usr/local/bin/" +ynh_backup "/etc/yunohost/hooks.d/backup/99-conf_custom" +ynh_backup "/etc/yunohost/hooks.d/restore/99-conf_custom" +``` + +/etc/yunohost/hooks.d/restore/99-conf_custom +```bash +#!/bin/bash + +# Source YNH helpers +source /usr/share/yunohost/helpers + +ynh_restore_dest (){ + YNH_CWD="${YNH_BACKUP_DIR%/}/$1" + cd "$YNH_CWD" +} + +# Exit hook on subcommand error or unset variable +ynh_abort_if_errors + +# Openvpn +app="custom_openvpn" # Cette variable est importante pour le helper suivant +ynh_install_app_dependencies "openvpn openvpn-auth-ldap samba" + +ynh_restore_dest "conf/custom/openvpn" +ynh_restore_file "/etc/sysctl.d/openvpn.conf" +ynh_restore_file "/etc/openvpn" +ynh_restore_file "/etc/fail2ban/jail.d/openvpn.conf" +ynh_restore_file "/etc/fail2ban/filter.d/openvpn.conf" + +# Samba +app="custom_samba" # Cette variable est importante pour le helper suivant +ynh_install_app_dependencies "samba" + +ynh_restore_dest "conf/custom/samba" +ynh_restore_file "/etc/samba" +ynh_restore_file "/var/lib/samba" +ynh_restore_file "/etc/yunohost/hooks.d/post_user_create/99-samba" +ynh_restore_file "/etc/yunohost/hooks.d/post_user_delete/99-samba" +ynh_restore_file --src_path="/etc/yunohost/hooks.d/post_user_update/99-samba" --not_mandatory +ynh_restore_file "/etc/cron.daily/clean-trash" +chown -R openvpn:openvpn /etc/openvpn + +# MISC +ynh_restore_dest "conf/custom/misc" +ynh_restore_file "/etc/sysctl.d/noipv6.conf" +ynh_restore_file "/usr/local/bin/" +ynh_restore_file "/etc/yunohost/hooks.d/backup/99-conf_custom" +ynh_restore_file "/etc/yunohost/hooks.d/restore/99-conf_custom" +``` + +## Exclure des fichiers +Il n'existe pas de mécanisme pour exclure d'une sauvegarde au format YunoHost des fichiers spécifiques, en dehors des 2 options présentées ci-dessous: + +### Éviter de sauvegarder certains dossiers du `/home` +Si besoin, vous pouvez spécifier que certains dossiers `home` d'utilisateurs ou utilisatrices ne soient pas sauvegardés par la commande `yunohost backup`, en créant un fichier vide nommé `.nobackup` à l'intérieur. + +Attention ce mécanisme ne fonctionne que pour les **sous-dossiers de premier niveau** du `/home`, comme par exemple `/home/user1` ou `/home/yunohost.multimedia` . Cela ne fonctionne pas pour les autres dossiers ou sous-dossiers, comme par exemple `/home/user1/grosdossier`. + +### Ne pas sauvegarder les grosses quantités de données + +Certaines apps comme Nextcloud sont potentiellement rattachées à des quantités importantes de données. Il est possible de ne pas les sauvegarder par défaut. Dans ce cas, on dit que l'app "sauvegarde uniquement le core" (de l'app). +Lors d'une mise à jour, les apps contenant une grande quantité de données effectuent généralement une sauvegarde sans ces données. + +Pour désactiver temporairement la sauvegarde des données volumineuses, pour les applications qui implémentent cette fonctionnalité, vous pouvez définir la variable `BACKUP_CORE_ONLY`. Pour ce faire, la variable doit être définie avant la commande de backup : +```bash +BACKUP_CORE_ONLY=1 yunohost backup create --apps nextcloud +``` + +Faites montre de prudence : il vous faudra alors sauvegarder vous-même les données des utilisateurs et utilisatrices de Nextcloud. + +Si vous souhaitez que ce comportement soit permanent: +```bash +yunohost app setting nextcloud do_not_backup_data -v 1 +``` + diff --git a/pages/02.administer/20.backups/25.include_exclude_files/include_exclude_files.it.md b/pages/02.administer/20.backups/25.include_exclude_files/include_exclude_files.it.md new file mode 100644 index 00000000..a275c742 --- /dev/null +++ b/pages/02.administer/20.backups/25.include_exclude_files/include_exclude_files.it.md @@ -0,0 +1,134 @@ +--- +title: Includere o escludere files +template: docs +taxonomy: + category: docs +routes: + default: '/backup/include_exclude_files' +page-toc: + active: true + depth: 3 +--- + +## Includere file + +Nella maggior parte dei casi YunoHost conosce quali file devono fare parte del backup. Tuttavia se avete effettuato delle modifiche, ad esempio installando un programma senza avvalervi della procedura ufficiale di YunoHost, dovrete includere altri file da salvare nel vostro schema di backup. + +YunoHost tiene traccia delle modifiche effettuate utilizzando gli strumenti di default. Al contrario un programma o un database aggiunti manualmente e/o delle modifiche a file di configurazione, non saranno inseriti nel backup. + +Potete creare un hook di backup e un hook di ripristino per aggiungere i file da salvare. Esempio: + + +/etc/yunohost/hooks.d/backup/99-conf_custom +```bash +#!/bin/bash + +# Source YNH helpers +source /usr/share/yunohost/helpers + +ynh_backup_dest (){ + YNH_CWD="${YNH_BACKUP_DIR%/}/$1" + mkdir -p $YNH_CWD + cd "$YNH_CWD" +} + +# Exit hook on subcommand error or unset variable +ynh_abort_if_errors + +# Openvpn +ynh_backup_dest "conf/custom/openvpn" +ynh_backup "/etc/sysctl.d/openvpn.conf" +ynh_backup "/etc/openvpn" +ynh_backup "/etc/fail2ban/jail.d/openvpn.conf" +ynh_backup "/etc/fail2ban/filter.d/openvpn.conf" + +# Samba +ynh_backup_dest "conf/custom/samba" +ynh_backup "/etc/samba" +ynh_backup "/var/lib/samba" +ynh_backup "/etc/yunohost/hooks.d/post_user_create/99-samba" +ynh_backup "/etc/yunohost/hooks.d/post_user_delete/99-samba" +ynh_backup --src_path="/etc/yunohost/hooks.d/post_user_update/99-samba" --not_mandatory +ynh_backup "/etc/cron.daily/clean-trash" + +# MISC +ynh_backup_dest "conf/custom/misc" +ynh_backup "/etc/sysctl.d/noipv6.conf" +ynh_backup "/usr/local/bin/" +ynh_backup "/etc/yunohost/hooks.d/backup/99-conf_custom" +ynh_backup "/etc/yunohost/hooks.d/restore/99-conf_custom" +``` + +/etc/yunohost/hooks.d/restore/99-conf_custom +```bash +#!/bin/bash + +# Source YNH helpers +source /usr/share/yunohost/helpers + +ynh_restore_dest (){ + YNH_CWD="${YNH_BACKUP_DIR%/}/$1" + cd "$YNH_CWD" +} + +# Exit hook on subcommand error or unset variable +ynh_abort_if_errors + +# Openvpn +app="custom_openvpn" # Cette variable est importante pour le helper suivant +ynh_install_app_dependencies "openvpn openvpn-auth-ldap samba" + +ynh_restore_dest "conf/custom/openvpn" +ynh_restore_file "/etc/sysctl.d/openvpn.conf" +ynh_restore_file "/etc/openvpn" +ynh_restore_file "/etc/fail2ban/jail.d/openvpn.conf" +ynh_restore_file "/etc/fail2ban/filter.d/openvpn.conf" + +# Samba +app="custom_samba" # Cette variable est importante pour le helper suivant +ynh_install_app_dependencies "samba" + +ynh_restore_dest "conf/custom/samba" +ynh_restore_file "/etc/samba" +ynh_restore_file "/var/lib/samba" +ynh_restore_file "/etc/yunohost/hooks.d/post_user_create/99-samba" +ynh_restore_file "/etc/yunohost/hooks.d/post_user_delete/99-samba" +ynh_restore_file --src_path="/etc/yunohost/hooks.d/post_user_update/99-samba" --not_mandatory +ynh_restore_file "/etc/cron.daily/clean-trash" +chown -R openvpn:openvpn /etc/openvpn + +# MISC +ynh_restore_dest "conf/custom/misc" +ynh_restore_file "/etc/sysctl.d/noipv6.conf" +ynh_restore_file "/usr/local/bin/" +ynh_restore_file "/etc/yunohost/hooks.d/backup/99-conf_custom" +ynh_restore_file "/etc/yunohost/hooks.d/restore/99-conf_custom" +``` + + + +## Escludere file +Esistono solo due metodi per escludere file dal backup di YunoHost: + +### Escludere alcune cartelle presenti in `/home` +Se necessario potete specificare quali cartelle nella `home` di un utente non siano da includere nel comando `yunohost backup`, creando al loro interno un file vuoto con l'estensione `.nobackup`. + +Attenzione: questo metodo funziona solo con la **prima sottodirectory di `/home`** ad esempio `/home/user1` o `/home/yunohost.multimedia`. Al contrario non funzionerà per altre sottodirectory come `/home/user1/miacartella`. + +### Escludere grandi quantità di dati + +Alcuni programmi come Nextcloud sono potenzialmente accompagnati da grandi quantità di dati. In questi casi viene fatto il backup solo del programma stesso (il "core"). +Generalmente negli aggiornamenti dei programmi che contengono grandi quantità di dati, questi vengono esclusi dal backup. + + +Per disattivare temporaneamente, nei programmi che supportano tale procedura, il backup di file di grandi dimensioni potete definire la variabile `BACKUP_CORE_ONLY`. La variabile deve essere definita prima di eseguire il comando di backup: +```bash +BACKUP_CORE_ONLY=1 yunohost backup create --apps nextcloud +``` + +Attenzione: dovrete procedere fare backup dei dati degli utenti Nextcloud separatamente. + +Se volete rendere permanente l'impostazione: +```bash +yunohost app setting nextcloud do_not_backup_data -v 1 +``` diff --git a/pages/02.administer/20.backups/25.include_exclude_files/include_exclude_files.md b/pages/02.administer/20.backups/25.include_exclude_files/include_exclude_files.md new file mode 100644 index 00000000..a99ed2ac --- /dev/null +++ b/pages/02.administer/20.backups/25.include_exclude_files/include_exclude_files.md @@ -0,0 +1,135 @@ +--- +title: Include or exclude files +template: docs +taxonomy: + category: docs +routes: + default: '/backup/include_exclude_files' +page-toc: + active: true + depth: 3 +--- + +## Include files + +YunoHost usually already knows what needs to be backed up. However, if you have made manual changes, such as installing an app outside of the YunoHost application system, you may want to extend YunoHost's mechanism to specify other files to be backed up. + +By default, if configurations tracked by YunoHost are changed, they will be backed up. On the other hand, a database or an app added by hand, changes on some configurations not tracked, will not be backed up. + +You can create a backup hook and a restore hook to add data to backup. Here is an example: + + +/etc/yunohost/hooks.d/backup/99-conf_custom +```bash +#!/bin/bash + +# Source YNH helpers +source /usr/share/yunohost/helpers + +ynh_backup_dest (){ + YNH_CWD="${YNH_BACKUP_DIR%/}/$1" + mkdir -p $YNH_CWD + cd "$YNH_CWD" +} + +# Exit hook on subcommand error or unset variable +ynh_abort_if_errors + +# Openvpn +ynh_backup_dest "conf/custom/openvpn" +ynh_backup "/etc/sysctl.d/openvpn.conf" +ynh_backup "/etc/openvpn" +ynh_backup "/etc/fail2ban/jail.d/openvpn.conf" +ynh_backup "/etc/fail2ban/filter.d/openvpn.conf" + +# Samba +ynh_backup_dest "conf/custom/samba" +ynh_backup "/etc/samba" +ynh_backup "/var/lib/samba" +ynh_backup "/etc/yunohost/hooks.d/post_user_create/99-samba" +ynh_backup "/etc/yunohost/hooks.d/post_user_delete/99-samba" +ynh_backup --src_path="/etc/yunohost/hooks.d/post_user_update/99-samba" --not_mandatory +ynh_backup "/etc/cron.daily/clean-trash" + +# MISC +ynh_backup_dest "conf/custom/misc" +ynh_backup "/etc/sysctl.d/noipv6.conf" +ynh_backup "/usr/local/bin/" +ynh_backup "/etc/yunohost/hooks.d/backup/99-conf_custom" +ynh_backup "/etc/yunohost/hooks.d/restore/99-conf_custom" +``` + +/etc/yunohost/hooks.d/restore/99-conf_custom +```bash +#!/bin/bash + +# Source YNH helpers +source /usr/share/yunohost/helpers + +ynh_restore_dest (){ + YNH_CWD="${YNH_BACKUP_DIR%/}/$1" + cd "$YNH_CWD" +} + +# Exit hook on subcommand error or unset variable +ynh_abort_if_errors + +# Openvpn +app="custom_openvpn" # This variable is important for the following helper +ynh_install_app_dependencies "openvpn openvpn-auth-ldap samba" + +ynh_restore_dest "conf/custom/openvpn" +ynh_restore_file "/etc/sysctl.d/openvpn.conf" +ynh_restore_file "/etc/openvpn" +ynh_restore_file "/etc/fail2ban/jail.d/openvpn.conf" +ynh_restore_file "/etc/fail2ban/filter.d/openvpn.conf" + +# Samba +app="custom_samba" # This variable is important for the following helper +ynh_install_app_dependencies "samba" + +ynh_restore_dest "conf/custom/samba" +ynh_restore_file "/etc/samba" +ynh_restore_file "/var/lib/samba" +ynh_restore_file "/etc/yunohost/hooks.d/post_user_create/99-samba" +ynh_restore_file "/etc/yunohost/hooks.d/post_user_delete/99-samba" +ynh_restore_file --src_path="/etc/yunohost/hooks.d/post_user_update/99-samba" --not_mandatory +ynh_restore_file "/etc/cron.daily/clean-trash" +chown -R openvpn:openvpn /etc/openvpn + +# MISC +ynh_restore_dest "conf/custom/misc" +ynh_restore_file "/etc/sysctl.d/noipv6.conf" +ynh_restore_file "/usr/local/bin/" +ynh_restore_file "/etc/yunohost/hooks.d/backup/99-conf_custom" +ynh_restore_file "/etc/yunohost/hooks.d/restore/99-conf_custom" +``` + + + +## Exclude files +There is no mechanism to exclude specific files from a YunoHost backup, other than the 2 options presented below: + +### Avoid backing up certain `/home` folders +If needed, you can specify that certain user `home` folders not be backed up by the `yunohost backup` command, by creating an empty file named `.nobackup` inside. + +Caution: this setup only works with **first-level subfolders of `/home`**, such as `/home/user1` or `/home/yunohost.multimedia`. It does not work for other levels of subfolders, like `/home/user1/bigfolder/`. + +### Do not backup large amounts of data + +Some apps like Nextcloud are potentially attached to large amounts of data. It is possible to not backup them by default. In this case, the app is said to "backup only the core" (of the app). +During an update, apps containing a large amount of data usually make a backup without these data. + + +To temporarily disable backup of large data, for applications that implement this feature, you can set the `BACKUP_CORE_ONLY` variable. To do this, the variable must be set before the backup command: +```bash +BACKUP_CORE_ONLY=1 yunohost backup create --apps nextcloud +``` + +Be careful: you will have to backup Nextcloud users' data yourself. + +If you want this behavior to be permanent: +```bash +yunohost app setting nextcloud do_not_backup_data -v 1 +``` + diff --git a/pages/02.administer/20.backups/30.custom_backup_methods/custom_backup_methods.fr.md b/pages/02.administer/20.backups/30.custom_backup_methods/custom_backup_methods.fr.md new file mode 100644 index 00000000..31570cc1 --- /dev/null +++ b/pages/02.administer/20.backups/30.custom_backup_methods/custom_backup_methods.fr.md @@ -0,0 +1,57 @@ +--- +title: Méthodes personnalisées +template: docs +taxonomy: + category: docs +routes: + default: '/backup/custom_backup_methods' +page-toc: + active: true + depth: 3 +--- + +Il est possible de créer votre propre méthode de sauvegarde et de la lier au système de collecte de fichiers à sauvegarder de YunoHost. Ceci peut être utile si vous souhaitez utiliser votre propre logiciel de sauvegarde ou mener des opérations de montages démontages de disques par exemple. + +Cette opération se fait à l'aide d'un hook et vous permettra de lancer une sauvegarde de cette façon: +``` +yunohost backup create --method custom +``` + +Ci-dessous, un exemple simpliste qui peut permettre de mettre en place un backup rotationnel avec différents disques que l'on change toutes les semaines: + +/etc/yunohost/hooks.d/backup_method/05-custom +```bash +#!/bin/bash +set -euo pipefail + +work_dir="$2" +name="$3" +repo="$4" +size="$5" +description="$6" + +case "$1" in + need_mount) + # Set false if your method can itself put files in good place in your archive + true + ;; + backup) + mount /dev/sda1 /mnt/hdd + if [[ "$(df /mnt/hdd | tail -n1 | cut -d" " -f1)" != "/dev/sda1" ]] + then + exit 1 + fi + pushd "$work_dir" + current_date=$(date +"%Y-%m-%d_%H:%M") + cp -a "${work_dir}" "/mnt/hdd/${current_date}_$name" + popd + umount /mnt/hdd + ;; + *) + echo "hook called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +exit 0 +``` diff --git a/pages/02.administer/20.backups/30.custom_backup_methods/custom_backup_methods.it.md b/pages/02.administer/20.backups/30.custom_backup_methods/custom_backup_methods.it.md new file mode 100644 index 00000000..de2e2cb9 --- /dev/null +++ b/pages/02.administer/20.backups/30.custom_backup_methods/custom_backup_methods.it.md @@ -0,0 +1,58 @@ +--- +title: Metodi di backup personalizzati +template: docs +taxonomy: + category: docs +routes: + default: '/backup/custom_backup_methods' +page-toc: + active: true + depth: 3 +--- + + +È possibile creare un proprio metodo di backup e includerlo nel sistema di raccolta file di backup di YunoHost. Questo può essere utilizzato ad esempio, nel caso utilizziate un particolare programma di backup o vogliate effettuare delle operazioni di montaggio o smontaggio sui vostri HD. + +Dovrete creare un hook che lancerà il backup utilizzando il metodo personalizzato con questo comando: +``` +yunohost backup create --method custom +``` + +Di seguito un esempio, semplificato, che esegue il backup con rotazione dei dischi, che vengono sostituiti ogni settimana. + +/etc/yunohost/hooks.d/backup_method/05-custom +```bash +#!/bin/bash +set -euo pipefail + +work_dir="$2" +name="$3" +repo="$4" +size="$5" +description="$6" + +case "$1" in + need_mount) + # Set false if your method can itself put files in good place in your archive + true + ;; + backup) + mount /dev/sda1 /mnt/hdd + if [[ "$(df /mnt/hdd | tail -n1 | cut -d" " -f1)" != "/dev/sda1" ]] + then + exit 1 + fi + pushd "$work_dir" + current_date=$(date +"%Y-%m-%d_%H:%M") + cp -a "${work_dir}" "/mnt/hdd/${current_date}_$name" + popd + umount /mnt/hdd + ;; + *) + echo "hook called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +exit 0 +``` diff --git a/pages/02.administer/20.backups/30.custom_backup_methods/custom_backup_methods.md b/pages/02.administer/20.backups/30.custom_backup_methods/custom_backup_methods.md new file mode 100644 index 00000000..5f27a37b --- /dev/null +++ b/pages/02.administer/20.backups/30.custom_backup_methods/custom_backup_methods.md @@ -0,0 +1,58 @@ +--- +title: Custom backup methods +template: docs +taxonomy: + category: docs +routes: + default: '/backup/custom_backup_methods' +page-toc: + active: true + depth: 3 +--- + + +It is possible to create your own backup method and link it to YunoHost's backup file collection system. This can be useful if you want to use your own backup software or conduct disk mount/dismount operations for example. + +This operation is done with a hook and will allow you to launch a backup this way: +``` +yunohost backup create --method custom +``` + +Below is a simplistic example that can be used to set up a rotational backup with different disks that are changed every week: + +/etc/yunohost/hooks.d/backup_method/05-custom +```bash +#!/bin/bash +set -euo pipefail + +work_dir="$2" +name="$3" +repo="$4" +size="$5" +description="$6" + +case "$1" in + need_mount) + # Set false if your method can itself put files in good place in your archive + true + ;; + backup) + mount /dev/sda1 /mnt/hdd + if [[ "$(df /mnt/hdd | tail -n1 | cut -d" " -f1)" != "/dev/sda1" ]] + then + exit 1 + fi + pushd "$work_dir" + current_date=$(date +"%Y-%m-%d_%H:%M") + cp -a "${work_dir}" "/mnt/hdd/${current_date}_$name" + popd + umount /mnt/hdd + ;; + *) + echo "hook called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +exit 0 +``` diff --git a/pages/02.administer/20.backups/35.migrate_or_merge_servers/migrate_or_merge_servers.fr.md b/pages/02.administer/20.backups/35.migrate_or_merge_servers/migrate_or_merge_servers.fr.md new file mode 100644 index 00000000..c6f1aa8f --- /dev/null +++ b/pages/02.administer/20.backups/35.migrate_or_merge_servers/migrate_or_merge_servers.fr.md @@ -0,0 +1,20 @@ +--- +title: Migrer ou fusionner des serveurs +template: docs +taxonomy: + category: docs +routes: + default: '/backup/migrate_or_merge_servers' +page-toc: + active: true + depth: 3 +--- + +## Migrer un serveur + +Si le système d'archive de YunoHost est assez pratique pour migrer un serveur, on peut aussi [migrer de serveur à serveur avec rsync](https://www.man42.net/blog/2017/07/how-to-migrate-a-debian-server/). + +## Fusionner 2 serveurs YunoHost +Si vous fusionnez 2 serveurs ensemble, vous devrez recréer les utilisateurs et utilisatrices, ainsi que les domaines et les permissions du premier serveur sur le serveur de destination. Puis vous pourrez restaurer app par app. + +!! Il existe tout de même une limite concernant les apps qui ont le même ID. Il ne sera pas possible de les restaurer facilement. Attention également à ne pas supprimer l'app éponyme du serveur de destination :/ diff --git a/pages/02.administer/20.backups/35.migrate_or_merge_servers/migrate_or_merge_servers.it.md b/pages/02.administer/20.backups/35.migrate_or_merge_servers/migrate_or_merge_servers.it.md new file mode 100644 index 00000000..4fe9cb8b --- /dev/null +++ b/pages/02.administer/20.backups/35.migrate_or_merge_servers/migrate_or_merge_servers.it.md @@ -0,0 +1,21 @@ +--- +title: Migrare o unire server +template: docs +taxonomy: + category: docs +routes: + default: '/backup/migrate_or_merge_servers' +page-toc: + active: true + depth: 3 +--- + + +## Migrare un server + +Il sistema di archiviazione di YunoHost permette di migrare facilmente un server ma potete anche seguire [questo link per migrare un server ad un altro con rsync](https://www.man42.net/blog/2017/07/how-to-migrate-a-debian-server/). + +## Aggregare 2 server YunoHost +Se volete aggregare 2 server dovrete ricreare i domini, gli account utenti e i relativi permessi dal primo al server di destinazione. In seguito potrete ripristinare i programmi uno alla volta. + +!! Esiste però un limite che riguarda i programmi che hanno lo stesso ID che saranno difficilmente ripristinabili. Abbiate cura di non cancellare il programma eponymous del server di destinazione :/ diff --git a/pages/02.administer/20.backups/35.migrate_or_merge_servers/migrate_or_merge_servers.md b/pages/02.administer/20.backups/35.migrate_or_merge_servers/migrate_or_merge_servers.md new file mode 100644 index 00000000..64daf853 --- /dev/null +++ b/pages/02.administer/20.backups/35.migrate_or_merge_servers/migrate_or_merge_servers.md @@ -0,0 +1,21 @@ +--- +title: Migrate or merge servers +template: docs +taxonomy: + category: docs +routes: + default: '/backup/migrate_or_merge_servers' +page-toc: + active: true + depth: 3 +--- + + +## Migrate a server + +If YunoHost's archive system is not convenient enough to migrate a server, you can also [migrate from server to server with rsync](https://www.man42.net/blog/2017/07/how-to-migrate-a-debian-server/). + +## Merge 2 YunoHost servers +If you merge 2 servers together, you will need to recreate the users, domains and permissions of the first server on the destination server. Then you can restore app by app. + +!! There is a limitation concerning apps that have the same ID. It will not be possible to restore them easily. Also be careful not to delete the eponymous app from the destination server :/ diff --git a/pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.es.md b/pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.es.md new file mode 100644 index 00000000..a3aa8723 --- /dev/null +++ b/pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.es.md @@ -0,0 +1,62 @@ +--- +title: Nombres de dominios automáticos +template: docs +taxonomy: + category: docs +routes: + default: '/dns_nohost_me' +--- + +Para hacer que el auto-alojamiento esté lo más accesible posible, el Proyecto YunoHost provee un servicio de nombres de dominio *ofertos* y *automáticamente configurados*. Cuando utilizas este servicio, no tienes que configurar tú mismo la [configuración de los registros DNS](/dns_config) que es bastante técnica. + +Los subdominios siguientes están propuestos : +- `loquequieras.nohost.me` ; +- `loquequieras.noho.st` ; +- `loquequieras.ynh.fr`. + +Para aprovechar de este servicio, basta con elegir uno de estos tipos de dominios durante la post-instalación. ¡ Estará automáticamente configurado por YunoHost ! + +N.B. : Por razones de equidad, sólo puedes tener un *único nombre de dominio* nohost.me por instalación de YunoHost. + +### Subdominios + +El servicio de dominios `nohost.me`, `noho.st` y `ynh.fr` no permite la creación de subdominios. + +Aunque YunoHost permita la instalación de aplicaciones en subdominios (por ejemplo teniendo la aplicación Nextcloud accesible desde la dirección `cloud.midominio.org`), esta función no está permitida con los dominios `nohost.me` y `noho.st` y no es posible tener un subdominio tal como `miaplicacion.midominio.nohost.me`. + +Para poder aprovechar de las aplicaciones instalables únicamente a la raíz de un nombre de de dominio, hay que tener su propio nombre de dominio. + +### Añadir un dominio nohost.me, noho.st o ynh.fr después de la post-instalación + +Si ya has hecho la post-instalación y quieres añadir un dominio de tipo nohost.me, puedes utilizar la categoría "Dominios" de la interfaz web, eligiendo la opción "No tengo nombre de dominio..." + +También puedes utilizar los comandos siguientes desde línea de comandos. + +```bash +# Añadir el dominio +yunohost domain add loquequieras.nohost.me + +# Registrar el dominio en el servicio dyndns +yunohost dyndns subscribe -d loquequieras.nohost.me + +# [ esperar ~ 30 segundos ] + +# Actualizar la configuración DNS +yunohost dyndns update + +# Configurarlo como dominio principal +yunohost domain main-domain -n loquequieras.nohost.me +``` + +### Recuperar un dominio nohost.me, noho.st o ynh.fr + +Si reinstalas tu servidor y quieres utilizar un dominio automático que ya utilizaste, tienes que pedir una reinstalación del dominio al Proyecto YunoHost [en el hilo de discusión dedicado del foro](https://forum.yunohost.org/t/nohost-domain-recovery/442). + +### Cambiar un dominio nohost.me, noho.st o ynh.fr + +Si quieres utilizar otro dominio automático en tu servidor, primero tienes que cancelar el que ya está configurado, siguiendo estas instrucciones : +1. Suprimir el dominio de tu instancia (vía webadmin o `yunohost domain remove`). **Cuidado : esto suprimirá todas las aplicaciones instaladas en este dominio así como sus datos**. +2. Pedir la supresión de tu suscripción [en el hilo de discusión dedicado del foro](https://forum.yunohost.org/t/nohost-domain-recovery/442). +3. Suprimir los archivos de configuración automática de tu instancia (únicamente desde la linea de comando por ahora) : `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` + +Luego podrás registrar un nuevo dominio automático. diff --git a/pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.fr.md b/pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.fr.md new file mode 100644 index 00000000..0a0897a3 --- /dev/null +++ b/pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.fr.md @@ -0,0 +1,64 @@ +--- +title: Noms de domaines automatiques +template: docs +taxonomy: + category: docs +routes: + default: '/dns_nohost_me' +--- + +Afin de rendre l'auto-hébergement le plus accessible possible, le Projet YunoHost fournit un service de noms de domaine *offerts* et *automatiquement configurés*. En utilisant ce service, vous n'avez donc pas à réaliser vous-même la [configuration des enregistrements DNS](/dns_config) qui est assez technique. + +Les (sous-)domaines suivants sont proposés : +- `cequevousvoulez.nohost.me` ; +- `cequevousvoulez.noho.st` ; +- `cequevousvoulez.ynh.fr`. + +Pour profiter de ce service, il vous suffit de choisir un tel domaine lors de la post-installation. Il sera ensuite automatiquement configuré par YunoHost ! + +N.B. : Pour des raisons d'équité, vous ne pouvez avoir qu'*un seul domaine* nohost.me par installation de YunoHost. + +### Sous-domaines + +Le service de domaines `nohost.me`, `noho.st` et `ynh.fr` autorise la création de sous-domaines. + +YunoHost permet l'installation d'applications sur des sous-domaines (par exemple avoir l'application ownCloud accessible depuis l'adresse `cloud.mondomaine.org`), cette fonctionnalité est aussi permise avec les domaines `nohost.me`, `noho.st` et `ynh.fr` et il est donc possible d’avoir un sous-sous-domaine tel `monapplication.mondomaine.nohost.me`. + +Pour créer un sous domaine à un domaine `nohost.me`, `noho.st` et `ynh.fr` il suffit d'ajouter celui-ci à YunoHost de la même manière que n'importe quel autre nom de domaine. + +### Ajouter un domaine nohost.me, noho.st ou ynh.fr après la post-installation + +Si vous avez déjà effectué la post-installation et souhaitez ajouter un domaine +de type `nohost.me`, vous pouvez utiliser la catégorie "Domaines" de l'interface web, +en choisissant l'option "Je n'ai pas de nom de domaine..." + +Vous pouvez également utiliser les commandes suivantes depuis la ligne de commande. + +```bash +# Ajouter le domaine +yunohost domain add cequevousvoulez.nohost.me + +# Enregister le domaine dans le service dyndns +yunohost dyndns subscribe -d cequevousvoulez.nohost.me + +# [ attendre ~ 30 secondes ] + +# Mettre à jour la configuration DNS +yunohost dyndns update + +# Le définir comme nouveau domain principal +yunohost domain main-domain -n cequevousvoulez.nohost.me +``` + +### Récupérer un domaine nohost.me, noho.st ou ynh.fr + +Si vous réinstallez votre serveur et voulez utiliser un domaine automatique déjà utilisé précédemment, il vous faut demander une réinitialisation du domaine au Projet YunoHost, [dans le fil de discussion dédié du forum](https://forum.yunohost.org/t/nohost-domain-recovery/442). + +### Changer un domaine nohost.me, noho.st ou ynh.fr + +Si vous voulez utiliser un autre domaine automatique sur votre serveur, vous devez d'abord supprimer celui qui est déjà configuré, selon les instructions suivantes : +1. Supprimer le domaine de votre instance (par webadmin ou `yunohost domain remove`). **Attention : cela supprimera toute application installée sur ce domaine, ainsi que ses données**. +2. Demander la suppression de votre souscription [dans le fil de discussion dédié du forum](https://forum.yunohost.org/t/nohost-domain-recovery/442). +3. Enlever les fichiers de configuration automatique sur votre instance (uniquement depuis la ligne de commande pour le moment) : `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` + +Vous pourrez ensuite enregistrer un nouveau domaine automatique. diff --git a/pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.md b/pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.md new file mode 100644 index 00000000..0ad0fe9a --- /dev/null +++ b/pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.md @@ -0,0 +1,63 @@ +--- +title: Nohost.me domains +template: docs +taxonomy: + category: docs +routes: + default: '/dns_nohost_me' +--- + +In order to make self-hosting as accessible as possible, the YunoHost Project provides a *free* and *automatically configured* domain name service. By using this service, you won't have to [configure DNS records](/dns_config) yourself, which can be tedious and technical. + +The following (sub)domains are offered: +- `whateveryouwant.nohost.me`; +- `whateveryouwant.noho.st`; +- `whateveryouwant.ynh.fr`. + +To use this service, you simply have to choose such a domain during the post-installation set up. It will then be automatically configured by YunoHost! + +!!! As a fairness measure, each instance may only have **one such domain** setup at any given time. + +### Subdomains + +The `nohost.me`, `noho.st` and `ynh.fr` domain service allows the creation of subdomains. + +YunoHost allows the installation of applications on subdomains (for example, having the Nextcloud application accessible from the `cloud.mydomain.org` address), this feature is also allowed with the `nohost.me`, `noho.st` and `ynh.fr` domains and so it is possible to have a subdomain such as `my.application.mydomain.nohost.me`. To create a subdomain on `nohost.me`, `noho.st` and `ynh.fr`, you just have to add the subdomain to yunohost like any other domains. + + +### Adding a nohost.me, noho.st or ynh.fr domain after the post-installation + +If you already did the postinstall and want to add an automatic domain, you may do so from the "Domains" web interface, selecting the option "I don't have a domain name..." + +Alternatively, the following commands can be used. + +```bash +# Add the domain +yunohost domain add whateveryouwant.nohost.me + +# Subscribe/register to the dyndns service +yunohost dyndns subscribe -d whateveryouwant.nohost.me + +# [ wait ~ 30 seconds ] + +# Update the DNS conf +yunohost dyndns update + +# Set it as the main domain +yunohost domain main-domain -n whateveryouwant.nohost.me +``` + +### Retrieve a nohost.me, noho.st or ynh.fr domain + +If you reinstall your server and want to use a domain already used previously, you must request a domain reset on the forum [in the dedicated thread](https://forum.yunohost.org/t/nohost-domain-recovery/442). + + +### Change a nohost.me, noho.st or ynh.fr domain + +If you wish to use a different automatic domain, you first have to remove your present domain registration. This is done in 3 steps: + +1. Remove the domain from your instance (via webadmin or the `yunohost domain remove` in the CLI). +2. Ask for registration removal [in the dedicated forum thread](https://forum.yunohost.org/t/nohost-domain-recovery/442). +3. Remove automatic domain configuration files on your server, via CLI only: `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` + +You may then add a new domain. diff --git a/pages/02.administer/45.tutorials/05.domains/02.dns_dynamic_ip/dns_dynamicip.fr.md b/pages/02.administer/45.tutorials/05.domains/02.dns_dynamic_ip/dns_dynamicip.fr.md new file mode 100644 index 00000000..c1469f34 --- /dev/null +++ b/pages/02.administer/45.tutorials/05.domains/02.dns_dynamic_ip/dns_dynamicip.fr.md @@ -0,0 +1,57 @@ +--- +title: DNS avec une IP dynamique +template: docs +taxonomy: + category: docs +routes: + default: '/dns_dynamicip' +--- + +! Avant d’aller plus loin, assurez-vous que votre adresse IP publique est dynamique à l’aide de : [ip.yunohost.org](http://ip.yunohost.org/). L’adresse IP publique de votre box change à peu près tous les jours. + +Ce tutoriel a pour but de contourner le problème d’IP dynamique qui est le suivant : lorsque l’adresse IP publique de la box change, la zone DNS n’est pas mise à jour pour pointer vers la nouvelle adresse IP. + +Après avoir mis en place la solution proposée dans ce tutoriel, la redirection du nom de domaine vers l’adresse IP ne sera plus perdue. + +La méthode qui sera mise en place consiste à rendre automatique le fait que la box annonce au DNS dynamique qu’elle a changé d’adresse IP publique, et qu’ensuite la zone DNS soit automatiquement changée. + +### Bureaux d'enregistrement +Voici quelques bureaux d'enregistrement, qui permettent d'acheter des noms de domaine : +* [OVH](http://ovh.com/) +* [GoDaddy](https://godaddy.com/) +* [Gandi](http://gandi.net/) +* [Namecheap](https://www.namecheap.com/) +* [BookMyName](https://www.bookmyname.com/) + +Si vous possédez un nom de domaine chez **OVH**, vous pouvez aller à l’étape 4 et suivre ce [tutoriel](/OVH) étant donné qu’OVH propose un service de DynDNS. + +#### 1. Créer un compte pour un service de DNS dynamique + +Voici des sites qui proposent un service de DynDNS gratuitement : +* [DNSexit](https://www.dnsexit.com/Direct.sv?cmd=dynDns) +* [No-IP](https://www.noip.com/remote-access) +* [ChangeIP](https://changeip.com) +* [DynDNS (en italien)](https://dyndns.it) +* [Duck DNS](https://www.duckdns.org/) +* [ydns.io (en anglais, gratuit)](https://ydns.io/) + +Créer un compte chez l’un d’eux. + +#### 2. Déplacer les zones DNS +Déplacer les [zones DNS](/dns_config), à l’exception des champs NS, du [bureau d’enregistrement](#registrar) où vous avez acheté votre nom de domaine vers le DNS dynamique où vous avez créé un compte à l’étape 1. + +#### 3. Basculer la gestion de votre nom de domaine vers le serveur DNS dynamique +Cette étape consiste à faire savoir au [bureau d’enregistrement](#registrar) que le service de DNS sera assuré par le service de DynDNS. +Redirigez le champ NS vers l’adresse IP donnée par le service de DynDNS. + +Ensuite, supprimez les [zones DNS](/dns_config), à l’exception des champs NS, du [bureau d’enregistrement](#registrar). + +#### 4. Créer un identifiant de DNS dynamique +Sur le service de DNS dynamique créer un identifiant qui sera entré dans un client de DNS dynamique. +Ce client peut être votre box ou un paquet installé sur votre serveur comme `ddclient`. +Nous allons utiliser le client de la box qui est plus simple à mettre en place. + +#### 5. Configurer la box +Mettez l’identifiant du DNS dynamique et l’[adresse IP publique](http://ip.yunohost.org/) dans votre box. + +![](image://dns_dynamic-ip_box_conf.png?resize=600) diff --git a/pages/02.administer/45.tutorials/05.domains/02.dns_dynamic_ip/dns_dynamicip.md b/pages/02.administer/45.tutorials/05.domains/02.dns_dynamic_ip/dns_dynamicip.md new file mode 100644 index 00000000..8f0c3048 --- /dev/null +++ b/pages/02.administer/45.tutorials/05.domains/02.dns_dynamic_ip/dns_dynamicip.md @@ -0,0 +1,58 @@ +--- +title: DNS with a dynamic IP +template: docs +taxonomy: + category: docs +routes: + default: '/dns_dynamicip' +--- + +! Before going further, make sure your global IP address is dynamic with: [ip.yunohost.org](http://ip.yunohost.org/). The global IP address of your box changes almost every day. + +This tutorial aim to get around dynamic IP issue which is: when the IP public address of your (Internet Service Provider-) box changes, the DNS zone is not updated to point towards the new IP address, and consequently your server is no more reachable via its domain name + +After setting up the solution proposed in this tutorial, the redirection from your domain name to the actual IP address of your server will not be lost anymore. + +The method proposed here consists of automatizing the fact the box announces its global IP address change to the dynamic DNS, so that the DNS zone will automatically be updated. + +### Registrars + +Here are some examples of registrars, companies where you can buy domain names: +* [OVH](http://ovh.com/) +* [GoDaddy](https://godaddy.com/) +* [Gandi](http://gandi.net/) +* [Namecheap](https://www.namecheap.com/) +* [BookMyName](https://www.bookmyname.com/) + +If you own a domain name at **OVH**, you may go to step 4 and follow this [tutorial](/OVH), given that OVH proposes a DynDNS service. + +#### 1. Create an account to a Dynamic DNS service +Here are sites which offer a DynDNS service free of charge: +* [DNSexit](https://www.dnsexit.com/Direct.sv?cmd=dynDns) +* [No-IP](https://www.noip.com/remote-access) +* [ChangeIP](https://changeip.com) +* [DynDNS (in italian)](https://dyndns.it) +* [DynDNS with your own domain](https://github.com/jodumont/DynDNS-with-HE.NET) +* [Duck DNS](https://www.duckdns.org/) + +Register to one of them. It should provide you with one (or more) IP address to reach the service, and a login (that you may be able to self-define). + +#### 2. Move the DNS zones +Copy the [DNS zones](/dns_config), except for the NS fields, from the [registrar](#registrar) where you bought your domain name from to the dynamic DNS service you registrer at in step 1. + +#### 3. Switch the management of your domain name to the dynamic DNS server +This step consists in declaring to your [registrar](#registrar) that the DNS service will now be managed by the DynDNS service provider. + +For this, first declare in the NS field(s) the IP address provided by the DynDNS service. + +Then, remove any other item in the [DNS zones](/dns_config) (except the previous NS fields), from the [registrar](#registrar). + +#### 4. Configure the client +This client could be your ISP-box, or a package installed on your server, such as `ddclient`. +Here, we will use the client provided by the box, which is the more easy way. + +Enter the login of the dynamic DNS and its public IP address in your box (interface details may vary by ISP). + +![](image://dns_dynamic-ip_box_conf.png?resize=600) + +You're good to go ! diff --git a/pages/02.administer/45.tutorials/05.domains/03.dns_subdomains/dns_subdomains.fr.md b/pages/02.administer/45.tutorials/05.domains/03.dns_subdomains/dns_subdomains.fr.md new file mode 100644 index 00000000..37b2b14d --- /dev/null +++ b/pages/02.administer/45.tutorials/05.domains/03.dns_subdomains/dns_subdomains.fr.md @@ -0,0 +1,45 @@ +--- +title: DNS et sous-domaines pour les applications +template: docs +taxonomy: + category: docs +routes: + default: '/dns_subdomains' +--- + +### Sous-domaines + +YunoHost permet l’usage de sous-domaine. Il faut avoir un nom de domaine par exemple mon `domaine.fr` et créer au niveau de la configuration DNS (chez Gandi par exemple) des sous-domaines. + +### Configuration chez Gandi + +Dans la configuration de son DNS, on aura donc une entrée A avec l’adresse IPv4, une entrée AAAA avec l’adresse IPv6 et ensuite différents CNAME pour les sous-domaines que l’on souhaite créer. +Nom Type Valeur +```bash +@ A XYZ.XYZ.XYZ.XYZ +@ AAAA 1234:1234:1234:FFAA:FFAA:FFAA:FFAA:AAFF +* CNAME mondomaine.fr. +agenda CNAME mondomaine.fr. +blog CNAME mondomaine.fr. +rss CNAME mondomaine.fr. +``` +permet d’avoir un `agenda.mondomaine.fr`, un `blog.mondomaine.fr` etc. + +### Installer une application sur un sous-domaine + +Pour installer une application sur un sous-domaine, par exemple `blog.mondomaine.fr`, dans YunoHost, tout se fait via la partie administration. On ajoute tout d’abord le sous-domaine à la liste des domaines disponibles. La création d’un sous-domaine dans YunoHost créera les fichiers de configuration correspondants pour NGINX (le serveur web de YunoHost). + +Puis dans la partie installation d’une application, on installe l’application de façon traditionnelle en choisissant ce sous-domaine comme domaine (par exemple `blog.mondomaine.fr`) et en indiquant comme chemin `/` (et non `/wordpress` qui est le chemin par défaut). On a alors un message d’avertissement indiquant qu’on ne pourra plus installer d’applications sur ce sous-domaine. On valide. Ça s’installe. + +L’application est alors accessible via `blog.mondomaine.fr` (et non via `mondomaine.fr/wordpress`). + +### Déplacer une application sur un sous-domaine ? + +Que se passe-t-il si on a déjà installé l’application ? On veut par exemple passer de `mondomaine.fr/wordpress` à `blog.mondomaine.fr`. +Pour l’instant il n’y a pas de façon simple (via l’interface graphique de l’administration de YunoHost) pour déplacer une application sur un sous-domaine. + +Solution : réinstaller l’application + +### Réinstallation de l’application + +On sauvegarde ses données (base de données etc. via un script SQL par exemple, les fichiers etc.). On désinstalle l’application via l’interface graphique d’administration de YunoHost. Et on la réinstalle en suivant la procédure ci-dessus. diff --git a/pages/02.administer/45.tutorials/05.domains/03.dns_subdomains/dns_subdomains.md b/pages/02.administer/45.tutorials/05.domains/03.dns_subdomains/dns_subdomains.md new file mode 100644 index 00000000..c70a0291 --- /dev/null +++ b/pages/02.administer/45.tutorials/05.domains/03.dns_subdomains/dns_subdomains.md @@ -0,0 +1,46 @@ +--- +title: DNS and subdomains for the applications +template: docs +taxonomy: + category: docs +routes: + default: '/dns_subdomains' +--- + +### Subdomains + +YunoHost allows the use of subdomains. If one owns a domain name `mydomain.com`, one first needs to create the subdomains in the DNS configuration (with one's registrar like Gandi). + +### Configuration example with Gandi + +The DNS configuration needs an A record with an IPv4 address, an AAAA record with an IPv6 address, and various CNAME records, one for each desired subdomain. + +If your DNS configuration looks like: +```bash +@ A XYZ.XYZ.XYZ.XYZ +@ AAAA 1234:1234:1234:FFAA:FFAA:FFAA:FFAA:AAFF +* CNAME mydomain.com. +agenda CNAME mydomain.com. +blog CNAME mydomain.com. +rss CNAME mydomain.com. +``` +then you can access `agenda.mydomain.com`, `blog.mydomain.com` and `rss.mydomain.com` subdomains. + +### Install an application on a subdomain + +To install an application on a subdomain in YunoHost, for example `blog.mydomain.com`, the configuration is done in the administration panel. One first add the subdomain to the available domains list. The creation of a subdomain in YunoHost will create the corresponding configuration files for NGINX (the web server used in YunoHost). + +Then, in the applications>install panel, one follows the classic installation process by choosing the desired subdomain as domain (for example `blog.mydomain.com`). One needs to choose the path `/` (in place of `/wordpress` for example). A warning message will appear telling that it won't be possible to install other application to this subdomain. After validation, the installation starts. + +The application is then available at `blog.mydomain.com` (and not `mydomain.com/wordpress`). + +### Moving an application to a subdomain + +What happens if the application is already installed? For example, one wants to move `mydomain.com/wordpress` to `blog.mydomain.com`. +It depends on the application. +Some applications allow the change of domain. In that case, one can proceed to the change through the administration panel Applications>the_app>change URL. +If the application doesn't allow URL change, then there is no easy way to do it. The best solution is to reinstall the application. + +### Reinstalling an application + +First, save the application data through the backup process. Then uninstall the application with the administration panel. Then reinstall the application to the desired domain. Finally, restore the backup. diff --git a/pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.es.md b/pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.es.md new file mode 100644 index 00000000..dcb362d7 --- /dev/null +++ b/pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.es.md @@ -0,0 +1,41 @@ +--- +title: Local network access to your server +template: docs +taxonomy: + category: docs +routes: + default: '/dns_local_network' +--- + +After completing your server installation, it is possible that your domain will not be accessible through the local network. This is an issue known as [hairpinning](http://en.wikipedia.org/wiki/Hairpinning) - a feature that is not well supported by some internet routers. + +To solve this issue you can: +- configure your router's DNS +- or alternatively - your /etc/hosts files on your clients workstation + +### Find the local IP address of your server + +First you need to find out the local IP of your server +- either using the tricks lister [here](/finding_the_local_ip) +- or if in the webadmin, in the Diagnosis section, under Internet Connectivity, IPv4, click on 'Details' and you should find an entry for 'Local IP' +- or using the command line on the server : `hostname -I` + +## Configurar el DNS de la caja Internet o del router + +Vas a crear una redirección que estará activa en toda tu red local. El objetivo es crear una redirección DNS hacia el IP de tu servidor en tu caja Internet. Hay que acceder a la interfaz de configuración de tu caja y a los parámetros DNS, y luego crear una redirección local (por ejemplo, `yunohost.local` puede redigir hacia `192.168.1.21`). + +## Configurar el archivo [hosts](https://es.wikipedia.org/wiki/Archivo_hosts) del ordenador cliente +Sólo deberías modificar el archivo hosts si no puedes modificar el DNS de tu caja Internet / router, porque el archivo hosts únicamente afectará el ordenador en el cual el archivo esté modificado. + +- En Windows, encontrarás el archivo hosts aquí : + `%SystemRoot%\system32\drivers\etc\` + > Es preciso visualizar los archivos y sistemas escondidos para ver el archivo hosts. +- En sistemas UNIX (GNU/Linux, macOS), lo encontrarás aquí : + `/etc/hosts` + > Necesitarás derechos root para modificar el archivo. + +Simplemente añade al final del archivo hosts una linea conteniendo la dirección IP privada del servidor y tu nombre de dominio + +```bash +192.168.1.62 domain.tld +``` diff --git a/pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.fr.md b/pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.fr.md new file mode 100644 index 00000000..cfbf0e32 --- /dev/null +++ b/pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.fr.md @@ -0,0 +1,52 @@ +--- +title: Accéder à son serveur depuis le réseau local +template: docs +taxonomy: + category: docs +routes: + default: '/dns_local_network' +--- + +Après installation de votre serveur, il est possible que votre nom de domaine ne soit pas accessible depuis le réseau local où se trouve le serveur. Ceci est un problème connu sous le nom de [hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) - une fonctionnalité mal supportée par certaines box internet. + +Pour résoudre ce problème: +- il est nécessaire de configurer le DNS de votre routeur +- à défaut, il est possible de modifier le ou les fichiers /etc/hosts de vos ordinateurs clients. + +### Trouver l’adresse IP locale du serveur + +Tout d'abord il vous faut trouver l'adresse IP locale du serveur +- soit en utilisant l'une de astuces expliquées [ici](/finding_the_local_ip) +- ou en utilisant la webadmin, dans l'écran Diagnostic, section Connexion Internet, IPv4, cliquer sur 'Détails' et vous devriez trouver une entrée pour 'IP locale'. +- ou en ligne de commande sur le serveur: `hostname -I` + +## Configurer le DNS de la box + +L'idée ici est de créer une redirection qui sera active sur tout votre réseau. Le but est de créer une redirection DNS vers l'ip de votre serveur YunoHost dans votre box. Il faut donc accéder à l'interface de configuration de votre box et aux paramétrages DNS, puis créer la redirection locale (par exemple, `yunohost.local` renvoi sur `192.168.1.21`). + +### Box SFR + +Si vous ne disposez toujours pas de l’adresse IP privée de votre serveur, vous pouvez la trouver sur l’interface de votre box SFR : + Dans l’onglet Réseau puis Général + + +#### Configurer le DNS de la box SFR +Rendez-vous dans l’onglet Réseau puis DNS pour ajouter votre nom de domaine au DNS de la box. + + +## Configurer le fichier [hosts](http://fr.wikipedia.org/wiki/Hosts) de l’ordinateur client + +La modification du fichier hosts devrait être effectuée seulement si vous ne pouvez pas modifier le DNS de votre box ou de votre routeur, car le fichier hosts impactera uniquement l’ordinateur sur lequel le fichier est modifié. + +- Sous Windows, vous trouverez le fichier hosts ici : + `%SystemRoot%\system32\drivers\etc\` + > Il est nécessaire d’afficher les fichiers cachés et systèmes pour voir le fichier hosts. +- Sous les systèmes UNIX (GNU/Linux, macOS), vous le trouverez ici : + `/etc/hosts` + > Les droits root sont nécessaires pour modifier le fichier. + +Ajoutez simplement à la fin du fichier hosts une ligne contenant l’adresse IP privée du serveur suivi de votre nom de domaine + +```bash +192.168.1.62 domain.tld +``` diff --git a/pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.md b/pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.md new file mode 100644 index 00000000..10b777ca --- /dev/null +++ b/pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.md @@ -0,0 +1,52 @@ +--- +title: Local network access to your server +template: docs +taxonomy: + category: docs +routes: + default: '/dns_local_network' +--- + +After completing your server installation, it is possible that your domain will not be accessible through the local network. This is an issue known as [hairpinning](http://en.wikipedia.org/wiki/Hairpinning) - a feature that is not well supported by some internet routers. + +To solve this issue you can: +- configure your router's DNS +- or alternatively - your /etc/hosts files on your clients workstation + +### Find the local IP address of your server + +First you need to find out the local IP of your server +- either using the tricks lister [here](/finding_the_local_ip) +- or if in the webadmin, in the Diagnosis section, under Internet Connectivity, IPv4, click on 'Details' and you should find an entry for 'Local IP' +- or using the command line on the server : `hostname -I` + +## Configure DNS on your Internet router + +The goal here is to create a network wide redirection handled by your router. The idea is to create a DNS redirection to your server's IP. You should access your router's configuration and look for DNS configuration, then add a redirection to your server's IP (e.g. redirect `yunohost.local` to `192.168.1.21`). + +### SFR Box +If you haven't found your server private IP, you may find it using the SFR box admin panel: + Go to Network tab > General + + +#### Configure SFR box's DNS + +Go to Network tab > DNS and add your domain name to the box's DNS. + + +## Configure [hosts](https://en.wikipedia.org/wiki/Host_%28Unix%29) file on client workstation + +Modifying hosts file should be done only if you cannot alter your box's DNS or router, because hosts file will only impact the workstation where the file was modified. + +- Windows hosts file is located at: + `%SystemRoot%\system32\drivers\etc\` + > You MUST activate hidden and system file display to see the hosts file. +- UNIX systems (GNU/Linux, macOS) hosts file is located at: + `/etc/hosts` + > You MUST have root privileges to modify the file. + +Add a line at the end of the file containing your server private IP followed by a space and your domain name + +```bash +192.168.1.62 domain.tld +``` diff --git a/pages/02.administer/45.tutorials/15.filezilla/filezilla.fr.md b/pages/02.administer/45.tutorials/15.filezilla/filezilla.fr.md new file mode 100644 index 00000000..407fa7e9 --- /dev/null +++ b/pages/02.administer/45.tutorials/15.filezilla/filezilla.fr.md @@ -0,0 +1,82 @@ +--- +title: Échanger des fichiers avec son serveur à l'aide d'une interface graphique +template: docs +taxonomy: + category: docs +routes: + default: '/filezilla' +--- + +Cette page explique comment échanger des fichiers (sauvegardes, musiques, photos, films...) avec son serveur à l'aide d'un outil graphique. C'est donc une méthode alternative au fait d'utiliser la commande `scp` qui peut être jugée technique et cryptique, ou de devoir installer Nextcloud. + +[FileZilla](https://filezilla-project.org/) permet d'accomplir cela. Il s'agit d'un logiciel libre disponible pour Windows, GNU/Linux et macOS. + +## Télécharger et installer FileZilla + +Vous pouvez télécharger FileZilla depuis [cette page](https://filezilla-project.org/download.php?type=client). Le site devrait détecter automatiquement la version nécessaire pour votre ordinateur. Sinon, suivez les instructions pour [installer le client](https://wiki.filezilla-project.org/Client_Installation) + +Installez le programme et lancez *Filezilla*. + +## Configuration + +1. Cliquez sur l'icône *Gestionnaire de Sites* en haut à gauche de sorte à créer une configuration utilisable ultérieurement. + + ![écran principal de Filezilla](image://filezilla_1.png) + +2. Cliquez sur **Nouveau site** et donnez un nom au serveur que vous allez utiliser. Par exemple "Famille". Remplissez les paramètres comme sur la capture d'écran (en remplaçant l'adresse du serveur par la vôtre). Une fois terminé, cliquez sur **Connexion**. (N.B. : si vous souhaitez éditer les fichiers de l'application [custom webapp](https://github.com/YunoHost-Apps/my_webapp_ynh), il vous faudra utiliser un autre utilisateur que admin. Se référer à la documentation de custom webapp.) + + ![écran du gestionnaire de site](image://filezilla_2.png) + +3. Vous recevrez un avertissement. *Vous pouvez l'ignorer s'il s'agit de la première connexion*. + + ![avertissement au sujet de l'empreinte inconnue du serveur](image://filezilla_3.png) + +4. Filezilla vous demande maintenant le mot de passe `admin` pour vous connecter à votre serveur + + ![écran d'identification demandant le mot de passe](image://filezilla_4.png) + +5. Une fois cette configuration créée, elle sera réutilisable les fois suivantes. + + ![la vue du "gestionnaire de site" avec le nouveau serveur ajouté](image://filezilla_5.png) + +## Utilisation + +1. Connectez-vous au Site créé précédemment. *Il se peut que le mot de passe soit redemandé.* + + La partie gauche correspond à votre ordinateur. La partie droite correspond au serveur YunoHost distant. Vous pouvez naviguer dans les dossiers et faire des glisser-déposer entre les deux panneaux. + + ![la vue pendant la connexion à un serveur distant](image://filezilla_6.png) + +2. Dans le panneau de droite, vous pouvez aller dans `/home/yunohost.backup/archives/` pour trouver les archives de [sauvegardes](/backup). + + ![le chemin où les sauvegardes sont situées sur YunoHost](image://filezilla_7.png) + +! [fa=cloud-download /] Assurez-vous de télécharger à la fois le fichier `.tar.gz` et le fichier `.json` + +![Copier les sauvegardes de YunoHost sur l'ordinateur local](image://filezilla_8.png) + +---- + +Sources + +* [Documentation officielle](https://wiki.filezilla-project.org/FileZilla_Client_Tutorial_(fr)) +* [Tutoriel général à Filezilla](https://www.rc.fas.harvard.edu/resources/documentation/sftp-file-transfer/) + +## Alternatives à Filezilla + +### Sous GNU/Linux + +Depuis n'importe quel GNU/Linux récent, vous devriez pouvoir utiliser le gestionnaire de fichiers pour accéder à votre serveur. + +Nautilus de Gnome3 intègre de base des fonctionnalités similaires à FileZilla : + +* +* + +### Sous Windows + +* [WinSCP](https://winscp.net/) est aussi un bon candidat pour Windows + +### Sous macOS + +* [Cyberduck](https://cyberduck.io/) logiciel libre pour macOS diff --git a/pages/02.administer/45.tutorials/15.filezilla/filezilla.md b/pages/02.administer/45.tutorials/15.filezilla/filezilla.md new file mode 100644 index 00000000..de7dff87 --- /dev/null +++ b/pages/02.administer/45.tutorials/15.filezilla/filezilla.md @@ -0,0 +1,82 @@ +--- +title: Exchange files with your server using a graphical interface +template: docs +taxonomy: + category: docs +routes: + default: '/filezilla' +--- + +This page explains how to exchange files (backup archives, music, pictures, movies...) with your server using a graphical interface for the (S)FTP protocol. This is an alternative to using `scp` which can be deemed technical and cryptic, or using an app like Nextcloud. + +[FileZilla](https://filezilla-project.org/) can be used for this. It is free software and is available for Windows, GNU/Linux and macOS. + +## Download and install FileZilla + +Get the client from the [download page](https://filezilla-project.org/download.php?type=client). It should automatically detect the version needed for your computer. Otherwise, follow the instructions to [install the client](https://wiki.filezilla-project.org/Client_Installation) + +Install the program and run *Filezilla*. + +## Configuration + +1. Click the *Site Manager* icon in the upper left to begin. + + ![Main screen of Filezilla](image://filezilla_1.png) + +2. Click **New Site** and give a name the server you will be using : *Family* here. Fill the settings as on the screenshot (replace the server address with your own), and click on **Connect**. (N.B. : if you want to interact with the [custom webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) files, you should use a different user than `admin`. Refer to the custom webapp documentation.) + + ![Site manager screen](image://filezilla_2.png) + +3. You will get a warning as you connect for the first time to the server. *You can ignore it safely the first time you get it.* + + ![warning about the unknown fingerprint of the server](image://filezilla_3.png) + +4. Filezilla is now asking the `admin` password to connect to your server. + + ![credential screen asking for the password](image://filezilla_4.png) + +5. Once bookmarked, your server will be backup up and you will get this screen. + + ![View of the "site manager" with the newly server added](image://filezilla_5.png) + +## Usage + +1. Connect to the Site created previously. *Your passwork might be asked again* + + The left panel corresponds to your computer. The right panel corresponds to your remote YunoHost server. You can browse folders and drag-and-drop files between the two panels. + + ![view while connected to a remote server](image://filezilla_6.png) + +2. In the right panel, you can browse to `/home/yunohost.backup/archives/` to find [backup archives](/backup). + + ![path where backups are located on YunoHost](image://filezilla_7.png) + +! [fa=cloud-download /] Be sure to download both the `.tar.gz` and `.json` files. + +![Copy backups from YunoHost to local computer](image://filezilla_8.png) + +---- + +Sources + +* [Official documentation](https://wiki.filezilla-project.org/FileZilla_Client_Tutorial_(en)) +* [General tutorial about using FileZilla](https://www.rc.fas.harvard.edu/resources/documentation/sftp-file-transfer/) + +## Alternatives to Filezilla + +### GNU/Linux + +From any recent GNU/Linux, you should be able to use the `file manager` to reach your server. + +Nautilus from Gnome3 has features similar to FileZilla, out of the box. + +* +* + +### Windows + +* [WinSCP](https://winscp.net/) is also a nice candidate for Windows + +### macOS + +* [Cyberduck](https://cyberduck.io/) is a free software available on macOS diff --git a/pages/02.administer/45.tutorials/25.external_storage/external_storage.fr.md b/pages/02.administer/45.tutorials/25.external_storage/external_storage.fr.md new file mode 100644 index 00000000..07f7e07d --- /dev/null +++ b/pages/02.administer/45.tutorials/25.external_storage/external_storage.fr.md @@ -0,0 +1,251 @@ +--- +title: Ajouter un stockage externe à son serveur +template: docs +taxonomy: + category: docs +routes: + default: '/external_storage' + aliases: + - '/moving_app_folder' +--- + +## Introduction + +En dehors du système de monitoring qui s'assure que les partitions de votre système ne sont pas trop petites, YunoHost ne s'occupe pour l'instant pas de l'organisation de vos partitions et de vos disques. + +Si vous vous hébergez sur une carte ARM avec une carte SD ou sur un serveur avec un petit disque SSD, vous pourriez, pour des raisons de fiabilité ou de manque de place, vouloir ajouter un ou des disques à votre serveur. + +! Si vous n'avez plus du tout de place sur votre serveur, vous pouvez dès à présent taper `apt clean` pour essayer d'en gagner un peu le temps de faire le ménage ou suivre les opérations qui vont suivre. + +Ci-dessous, vous trouverez des explications pour parvenir à déplacer vos données sur un disque dur de façon correcte avec un minimum d'impact vis-à-vis du fonctionnement de YunoHost. Cette opération peut se faire lors de l'installation ou, a posteriori, lorsque vos besoins de stockage ont augmenté ou lorsque vous n'avez plus confiance dans votre carte SD. + +!!! La méthode présentée ici va d'abord monter l'unique partition du disque dur, puis utiliser un ou des sous-dossiers de ce disque pour créer différents points de montage sur l'arborescence de votre système. Cette méthode est préférable à l'usage de liens symboliques, car ces derniers peuvent perturber certaines applications dont le système de sauvegarde de YunoHost. On pourrait aussi choisir de monter des partitions plutôt que des sous-dossiers, mais il est parfois difficile d'estimer à l'avance l'évolution du poids d'un dossier à l'avance. + +## [fa=list-alt /] Pré-requis + +* Avoir un peu de temps à un moment où les utilisateurs de votre serveur peuvent accepter un arrêt des services. Les étapes à réaliser, même si elles sont relativement simples, peuvent parfois paraître techniques et nécessitent dans tous les cas **de prendre son temps**. + +* Savoir se connecter en root sur votre système, par exemple via [SSH](/ssh). (Note : en étant connecté en tant qu'utilisateur `admin`, vous pouvez passer root avec `sudo su`) + +* Connaître les commandes basiques `cd`, `ls`, `mkdir`, `rm` + +* Avoir une sauvegarde au cas où ça ne se passe pas comme prévu + +* Disposer d'un stockage supplémentaire (disque SSD, disque dur, clé USB) branché à votre serveur en USB ou en SATA + +## 1. Identifier les dossiers à déplacer + +La commande `ncdu /` vous permet de naviguer dans les dossiers de votre serveur afin de constater leurs tailles. + +Ci-dessous, une explication de certains chemins qui peuvent prendre du poids avec quelques commentaires pour vous aider à réduire leur poids ou à choisir de les déplacer. + +| Chemin | Contenu | Conseils | +|--------|---|---| +| `/home` | Dossiers utilisateurs accessibles via SFTP | Déplaçable sur un disque dur | +| `/home/yunohost.backup` | Sauvegardes YunoHost | Selon votre stratégie de sauvegarde, il peut être préférable de placer ce dossier sur un disque distinct de celui où se trouvent vos données ou vos bases de données | +| `/home/yunohost.app` | Données lourdes des applications yunohost (nextcloud, matrix...) | Déplaçable sur un disque dur | +| `/home/yunohost.multimedia` | Données lourdes partagées entre plusieurs applications | Déplaçable sur un disque dur | +| `/var/lib/mysql` | Base de données utilisées par les applications | A laisser idéalement sur le SSD pour des raisons de performances | +| `/var/lib/postgresql` | Base de données utilisées par les applications | A laisser idéalement sur le SSD pour des raisons de performances | +| `/var/mail` | Mails des usagers | Déplaçable sur un disque dur | +| `/var/www` | Programme des applications web installées | A laisser idéalement sur le SSD pour des raisons de performances | +| `/var/log` | Journaux des évènements (pages consultées, tentative de connexion, erreurs matériels...). | Ce dossier ne devrait pas prendre trop de place, si il gonfle rapidement, il peut s'agir d'une erreur inscrite en boucle qu'il est préférable de résoudre | +| `/opt` | Programme et dépendance de certaines applications YunoHost. | A laisser idéalement sur le SSD pour des raisons de performances. Pour les applications nodejs il est possible de faire un peu de nettoyage des versions non utilisées. | +| `/boot` | Noyaux et fichiers de démarrage | Ne pas déplacer sauf si vous savez ce que vous faites. Il peut arriver que trop de noyaux soient conservés, il est possible de faire du nettoyage. | + +## 2. Connecter et identifier le disque + +Commencez par brancher votre disque à votre système. Il faut ensuite identifier sous quel nom est désigné le disque par le système. + +Pour cela, utilisez la commande : + +```bash +lsblk +``` + +Elle peut renvoyer quelque chose comme : + +```bash +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT +sda 8:0 0 931.5G 0 disk +└─sda1 8:1 0 931.5G 0 part +mmcblk0 179:0 0 14.9G 0 disk +├─mmcblk0p1 179:1 0 47.7M 0 part /boot +└─mmcblk0p2 179:2 0 14.8G 0 part / +``` + +Ici, `mmcblk0` correspond à une carte SD de 16Go (on voit que les partitions `mmcblk0p1` et `mmcblk0p2` correspondent à la partition de démarrage `/boot` et à la partition système `/`). Le disque dur branché correspond à `sda` qui fait environ 1To, et contient une seule partition `sda1` qui n'est pas monté (pas de "MOUNTPOINT"). + +! [fa=exclamation-triangle /] Sur un autre système, il se peut que votre système soit installé sur `sda` et que votre disque soit alors `sdb` par exemple. + +!!! Astuce: si la taille du disque ne vous suffit pas pour le reconnaître, vous pouvez débrancher le disque lancer la commande `lsblk`, puis rebrancher le disque, lancer `lsblk` et en déduire les différences. + +## 3. (Optionnel) Formater le disque + +Cette opération est optionnelle si votre disque est déjà formaté avec un système de fichiers supportés par linux (donc pas NTFS ou FAT32). + +Créons une partition sur le disque : + +```bash +fdisk /dev/VOTRE_DISQUE +``` + +puis entrez successivement `n`, `p`, `1`, `Entrée`, `Entrée`, et `w` pour créer une nouvelle partition. + +Vérifiez avec `lsblk` que vous avez bien votre disque contenant une seule partition. + +Avant de pouvoir utiliser votre disque, il doit être formaté. + +! [fa=exclamation-triangle /] **Formater un disque implique de supprimer toutes les données inscrites dessus !**. Attention à ne pas vous tromper de nom, car cela peut avoir pour conséquence de formater un autre disque que celui voulu ! Dans l'exemple donné précédemment, il s'agissait de `/dev/sda`. Si votre disque est déjà "propre", vous pouvez passer cette étape. + +Pour formater la partition : + +```bash +mkfs.ext4 /dev/VOTRE_DISQUE1 +# puis 'y' pour valider +``` + +Remplacez `VOTRE_DISQUE1` par le nom de la première partition sur le disque par exemple `sda1`. + +!!! Il est possible d'adapter cette étape, pour par exemple créer un volume raid 1 (disques en miroir) ou chiffrer le dossier. + +## 4. Monter le disque + +Contrairement à Windows où les disques sont accessibles avec des lettres (C:/), sous linux, les disques sont rendus accessibles via l'arborescence. "Monter" un disque signifie le rendre effectivement accessible dans l'arborescence des fichiers. Nous allons choisir arbitrairement de monter le disque dans `/mnt/hdd` mais vous pouvez le nommer différemment (par exemple `/mnt/disque` ...). + +Commençons par créer le répertoire : +```bash +mkdir /mnt/hdd +``` + +Puis nous pouvons monter le disque manuellement avec : + +```bash +mount /dev/VOTRE_DISQUE1 /mnt/hdd +``` + +(Ici, `/dev/VOTRE_DISQUE1` correspond à la première partition sur le disque) + + +## 5. Monter un dossier de /mnt/hdd sur un des dossiers dont on veut déplacer les données + +Ici on va considérer que vous souhaitez déplacer les grosses données des applications qui se trouvent dans `/home/yunohost.app` ainsi que les mails sur votre disque dur. + +### 5.1 Création des sous-dossiers sur le disque +Pour commencer, on crée un dossier dans le disque dur + +```bash +mkdir -p /mnt/hdd/home/yunohost.app +mkdir -p /mnt/hdd/var/mail +``` + +### 5.2 Passage en mode maintenance +Puis, idéalement on passe en maintenance les applications qui pourraient être en train d'écrire des données. + +Exemple, pour nextcloud: + +```bash +sudo -u nextcloud /var/www/nextcloud/occ maintenance:mode --on +``` + +Exemple, pour le mail: + +```bash +systemctl stop postfix +systemctl stop dovecot +``` + +! Si vous souhaitez déplacer les base de données comme mariadb (mysql), il est impératif de stopper les services de ces bases de données sans quoi il est presque sûr que vos données seront corrompues. + +### 5.3 Création des points de montages + +Ensuite, on va renommer le dossier d'origine et créer un dossier vide éponyme. + +```bash +mv /home/yunohost.app /home/yunohost.app.bkp +mkdir /home/yunohost.app +mv /var/mail /var/mail.bkp +mkdir /var/mail +``` + +On peut alors grâce à la commande `mount --bind` monter le dossier de notre disque dur sur le nouvel emplacement vide de l'arborescence. + +```bash +mount --bind /mnt/hdd/home/yunohost.app /home/yunohost.app +mount --bind /mnt/hdd/var/mail /var/mail +``` + +### 5.4 Copie des données + +Puis, on copie les données en conservant toutes les propriétés des dossiers et des fichiers. Cette opération peut prendre un peu de temps, avec un autre terminal, vous pourrez controler l'évolution en observant le poids associé au point de montage avec `df -h` + +```bash +cp -a /home/yunohost.app.bkp/. /home/yunohost.app/ +cp -a /var/mail.bkp/. /var/mail/ +``` + +Une fois que c'est fini, vérifiez avec `ls` que le contenu est bien là: + +```bash +ls -la /home/yunohost.app/ +ls -la /var/mail/ +``` + +### 5.5 Sortir du mode maintenance + +A partir de là vous pouvez arréter le mode maintenance, la commande ci-dessous est à adapter selon les services que vous avez arrétés. + +```bash +sudo -u nextcloud /var/www/nextcloud/occ maintenance:mode --off +systemctl start postfix +systemctl start dovecot +``` + +A partir de cette étape, vos services tournent avec leurs données sur le disque, il est donc temps de tester pour voir dans quelle mesure il y a un impact sur les performances (notamment si vus utilisez de l'USB 2.0). + +## 6. Monter automatiquement au démarrage + + +Jusqu'ici, nous avons monté manuellement le disque et les sous-dossiers. Cependant, il est nécessaire de configurer le système pour qu'il monte automatiquement le disque après un démarrage. + +Si vos tests sont concluants, il faut pérenniser les points de montages, sinon dépêchez-vous de faire machine arrière en commençant par remettre en maintenance. + +Pour commencer, trouvons l'UUID (identifiant universel) de notre disque avec : + +```bash +blkid | grep "/dev/VOTRE_DISQUE1:" +# Retourne quelque chose comme : +# /dev/sda1:UUID="cea0b7ae-2fbc-4f01-8884-3cb5884c8bb7" TYPE="ext4" PARTUUID="34e4b02c-02" +``` + +Ajoutons alors une ligne au fichier `/etc/fstab` qui gère le montage des disques au démarrage. On ouvre donc le fichier avec `nano` : + +```bash +nano /etc/fstab +``` + +Puis on ajoute ces lignes à la fin du fichier : + +```bash +UUID="cea0b7ae-2fbc-4f01-8884-3cb5884c8bb7" /mnt/hdd ext4 defaults,nofail 0 0 +/mnt/hdd/home/yunohost.app /home/yunohost.app none defaults,bind 0 0 +/mnt/hdd/var/mail /var/mail none defaults,bind 0 0 +``` + +(il faut adapter cette ligne en fonction des informations et choix précédents) + +Utiliser Ctrl+X puis `o` pour sauvegarder. + +Vous pouvez ensuite tester de redémarrer le système pour vérifier si le disque et les sous-dossiers sont montés automatiquement. + +## 7. Nettoyer les anciennes données +Dès que votre nouveau setup est validé, vous pouvez procéder à la suppression des anciennes données issues de l'étape 6.3: + +```bash +rm -Rf /home/yunohost.app.bkp +rm -Rf /var/mail.bkp +``` + +## ![](image://tada.png?resize=32&classes=inline) Félicitations ! + +Si vous êtes arrivé jusqu'ici sans dommage, vous avez désormais un serveur qui tire parti d'un ou de plusieurs disques de stockage. diff --git a/pages/02.administer/45.tutorials/25.external_storage/external_storage.md b/pages/02.administer/45.tutorials/25.external_storage/external_storage.md new file mode 100644 index 00000000..0e8a09e5 --- /dev/null +++ b/pages/02.administer/45.tutorials/25.external_storage/external_storage.md @@ -0,0 +1,252 @@ +--- +title: Adding an external storage to your server +template: docs +taxonomy: + category: docs +routes: + default: '/external_storage' + aliases: + - '/moving_app_folder' +--- + +## Introduction + + +Apart from the monitoring system that ensures that your system's partitions are not too small, YunoHost does not currently deal with the organisation of your partitions and disks. + +If you are hosting on an ARM card with an SD card or on a server with a small SSD drive, you may, for reasons of reliability or lack of space, want to add a drive or drives to your server. + +! If you have no space left on your server at all, you can now type `apt clean` to try and save some space while you clean up or follow the steps below. + +Below you will find explanations on how to move your data to a hard disk in a correct way with a minimum of impact on the functioning of YunoHost. This operation can be done during installation or, afterwards, when your storage needs have increased or when you no longer trust your SD card. + +!!! The method presented here will first mount the single partition of the hard disk, then use one or more sub-folders of this disk to create different mount points on your system tree. This method is preferable to the use of symbolic links, as the latter may interfere with some applications including the YunoHost backup system. You could also choose to mount partitions rather than subfolders, but it is sometimes difficult to estimate the weight of a folder in advance. + +## [fa=list-alt /] Prerequisites + +* Have some time at a moment when your server users can accept a shutdown. The steps to be performed, even if they are relatively simple, can sometimes seem technical and require in any case **to take your time**. + +* Know how to connect as root on your system, for example via [SSH](/ssh). (Note: while logged in as `admin`, you can root with `sudo su`) + +* Know the basic commands `cd`, `ls`, `mkdir`, `rm`. + +* Have a backup in case things don't work out as planned + +* Have extra storage (SSD, hard drive, USB stick) connected to your server via USB or SATA + +## 1. Identify directories to be moved + +The `ncdu /` command allows you to browse the folders on your server to see how big they are. + +Below is an explanation of some of the paths that can take up weight with some comments to help you reduce their weight or choose to move them. + +| Paths | Contents | Tips | +|--------|---|---| +| `/home` | User folders accessible via SFTP | Moveable to a hard disk | +| `/home/yunohost.backup` | YunoHost's backups | Depending on your backup strategy, you may want to place this folder on a separate drive from your data or databases. +| `/home/yunohost.app` |Heavy data from yunohost applications (nextcloud, matrix...)|Moveable to a hard disk +| `/home/yunohost.multimedia` | Heavy data shared between several applications | Moveable to a hard disk | +| `/var/lib/mysql` | Database used by applications | Ideally leave on SSD for performance reasons | +| `/var/lib/postgresql` | Database used by applications | Ideally leave on SSD for performance reasons | +| `/var/mail` | User e-mails | Movable to a hard disk | +| `/var/www` | Program of installed web applications | Ideally leave on SSD for performance reasons | +| `/var/log` | Event logs (pages consulted, connection attempts, hardware errors...). | This directory should not take up too much space, if it grows quickly, it may be a looping error that should be resolved. +| `/opt` | Program and dependency of some YunoHost applications. | Ideally leave it on the SSD for performance reasons. For nodejs applications it is possible to do some cleanup of unused versions. +| `/boot` | Kernels and boot files | Do not move unless you know what you are doing. It can happen that too many kernels are kept, it is possible to do some cleanup. + + +## 2. Connect and identify the disk + +Start by connecting your disk to your system. You must then identify the name under which the disk is designated by the system. + +To do this, use the command : + +```bash +lsblk +``` + +It may return something like : + +```bash +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT +sda 8:0 0 931.5G 0 disk +└─sda1 8:1 0 931.5G 0 part +mmcblk0 179:0 0 14.9G 0 disk +├─mmcblk0p1 179:1 0 47.7M 0 part /boot +└─mmcblk0p2 179:2 0 14.8G 0 part / +``` + +Here, `mmcblk0` corresponds to a 16GB SD card (you can see that the `mmcblk0p1` and `mmcblk0p2` partitions correspond to the `/boot` partition and the `/` system partition). The hard drive connected corresponds to `sda` which is about 1TB, and contains a single `sda1` partition which is not mounted (no "MOUNTPOINT"). + +! [fa=exclamation-triangle /] On another system, it may be that your system is installed on `sda` and your disk is then `sdb` for example. + +!!! Tip: if the size of the disk is not enough for you to recognise it, you can unplug the disk, run the `lsblk` command, then plug the disk back in, run `lsblk` and deduce the differences. + +## 3. (Optional) Format the disk + +This operation is optional if your disk is already formatted with a file system supported by linux (so not NTFS or FAT32). + +Let's create a partition on the disk: + +```bash +fdisk /dev/YOUR_DISK +``` + +then enter `n`, `p`, `1`, `Enter`, `Enter`, and `w` successively to create a new partition. + +Check with `lsblk` that you have your disk containing a single partition. + +Before you can use your disk, it must be formatted. + +! [fa=exclamation-triangle /] **Formatting a disk means deleting all the data on it! Be careful not to get the name wrong, as this may result in formatting a different disk than the one you want! In the example given earlier, it was `/dev/sda`. If your disk is already "clean", you can skip this step. + +To format the : + +```bash +mkfs.ext4 /dev/YOUR_DISK1 +# then 'y' to validate +``` + +Replace `YOUR_DISK1` with the name of the first partition on the disk e.g. `sda1`. + +!!! It is possible to adapt this step, for example to create a raid 1 volume (mirrored disks) or encrypt the folder. + +## 4. Mount the disk + +Unlike Windows where disks are accessed with letters (C:/), under Linux, disks are made accessible via the file tree. "Mounting" a disk means making it effectively accessible in the file tree. We will arbitrarily choose to mount the disk in `/mnt/hdd` but you can name it differently (e.g. `/mnt/disk` ...). + +Let's start by creating the directory : +```bash +mkdir /mnt/hdd +``` + +Then we can mount the disk manually with : + +```bash +mount /dev/YOUR_DISK1 /mnt/hdd +``` + +(Here, `/dev/YOUR_DISK1` corresponds to the first partition on the disk) + +## 5. Mount a /mnt/hdd folder on one of the folders you want to move data from + +Here we will consider that you want to move the big data of the applications which are in /home/yunohost.app and the mails on your hard disk. + +### 5.1 Creating subfolders on the disk +To begin with, we create a folder on the hard drive + +```bash +mkdir -p /mnt/hdd/home/yunohost.app +mkdir -p /mnt/hdd/var/mail +``` + +### 5.2 Switching to maintenance mode +Then, ideally, we switch to maintenance mode the applications that might be writing data. + +Example, for nextcloud: + +```bash +sudo -u nextcloud /var/www/nextcloud/occ maintenance:mode --on +``` + +Example, for mail: + +```bash +systemctl stop postfix +systemctl stop dovecot +``` + +! If you wish to move databases such as mariadb (mysql), it is imperative that you stop the services for these databases otherwise it is almost certain that your data will be corrupted. + +### 5.3 Creating the mount points + +Next, we will rename the original folder and create an empty eponymous folder. + +```bash +mv /home/yunohost.app /home/yunohost.app.bkp +mkdir /home/yunohost.app +mv /var/mail /var/mail.bkp +mkdir /var/mail +``` + +We can then use the `mount --bind` command to mount the folder on our hard drive to the new empty location in the tree. + +```bash +mount --bind /mnt/hdd/home/yunohost.app /home/yunohost.app +mount --bind /mnt/hdd/var/mail /var/mail +``` + +### 5.4 Copying the data + +Next, we copy the data, keeping all the folder and file properties. This operation can take a little time, with another terminal, you can control the evolution by observing the weight associated with the mount point with `df -h` + +```bash +cp -a /home/yunohost.app.bkp/. /home/yunohost.app/ +cp -a /var/mail.bkp/. /var/mail/ +``` + +Once this is done, check with `ls` that the contents are there: + +```bash +ls -la /home/yunohost.app/ +ls -la /var/mail/ +``` + +### 5.5 Exiting maintenance mode + +From here you can stop maintenance mode, the command below is to be adapted depending on the services you have stopped. + +```bash +sudo -u nextcloud /var/www/nextcloud/occ maintenance:mode --off +systemctl start postfix +systemctl start dovecot +``` + +From this point on, your services are running with their data on disk, so it's time to test to see how much of an impact this has on performance (especially if you are using USB 2.0). + +## 6. Automatically mount on boot + + +So far we have manually mounted the disk and subfolders. However, it is necessary to configure the system to automatically mount the disk after a boot. + +If your tests are successful, you should keep the mount points, otherwise you should hurry up and go back to maintenance first. + +To begin with, let's find the UUID (universal identifier) of our disk with : + +```bash +blkid | grep "/dev/YOUR_DISK1:" +# Returns something like : +# /dev/sda1:UUID="cea0b7ae-2fbc-4f01-8884-3cb5884c8bb7" TYPE="ext4" PARTUUID="34e4b02c-02" +``` + +Let's add a line to the `/etc/fstab` file that handles the mounting of disks at boot time. So we open the file with `nano` : + +```bash +nano /etc/fstab +``` + +Then add these lines to the end of the file: + +```bash +UUID="cea0b7ae-2fbc-4f01-8884-3cb5884c8bb7" /mnt/hdd ext4 defaults,nofail 0 0 +/mnt/hdd/home/yunohost.app /home/yunohost.app none defaults,bind 0 0 +/mnt/hdd/var/mail /var/mail none defaults,bind 0 0 +``` + +(this line must be adapted according to the previous information and choices) + +Use Ctrl+X then `y` to save. + +You can then try rebooting the system to check if the disk and subfolders are mounted automatically. + +## 7. Clean up old data +Once your new setup is validated, you can proceed to delete the old data from step 6.3: + +```bash +rm -Rf /home/yunohost.app.bkp +rm -Rf /var/mail.bkp +``` + +## ![](image://tada.png?resize=32&classes=inline) Congratulations! + +If you have made it this far without damage, you now have a server that takes advantage of one or more storage disks. diff --git a/pages/02.administer/45.tutorials/35.email_relay/email_configure_relay.fr.md b/pages/02.administer/45.tutorials/35.email_relay/email_configure_relay.fr.md new file mode 100644 index 00000000..006c0bfb --- /dev/null +++ b/pages/02.administer/45.tutorials/35.email_relay/email_configure_relay.fr.md @@ -0,0 +1,95 @@ +--- +title: Configurer un relais SMTP +template: docs +taxonomy: + category: docs +routes: + default: '/email_configure_relay' + aliases: + - '/smtp_relay' +--- + +Si votre fournisseur d'accès à Internet bloque le port 25, ou si vous rencontrez un problème d’utilisation du serveur SMTP natif de YunoHost, vous pouvez configurer votre serveur YunoHost pour utiliser un relais SMTP. + +## Qu'est-ce qu'un relais SMTP + +C'est un serveur SMTP tiers qui va envoyer les e-mails aux destinataires à la place de votre propre serveur SMTP. +Une fois correctement installé, le fonctionnement est transparent pour l’utilisateur. Vos correspondants verront vos e-mails comme s’ils venaient de votre propre serveur, mais ils seront passés par le relais SMTP que vous aurez choisis et configurés. + +## [fa=exclamation-triangle /] Inconvénients des relais SMTP + +Il est important de noter que dans le monde de l'auto-hébergement, utiliser un relais SMTP est un énorme compromis ! En effet, le relais SMTP sera non seulement capable d'envoyer les e-mails de votre part, mais il a également accès au contenu intégral de vos e-mails et peut éventuellement les modifier (Par exemple, par défaut, MailJet réécrit les hyperliens html contenus dans vos mails, afin de traquer l'activité de vos correspondants). Il faut également savoir qu'une fois mis en place, tout le trafic e-mail sortant de votre serveur passera par ce relais ; il n'est pas possible de choisir de l'utiliser ou pas selon l'expéditeur ou la destination. + +Au-delà des considérations de confidentialité ci-dessus, un relais SMTP peut imposer des limitations techniques que l'on n'aurait pas si le port 25 était ouvert. Par exemple, avec la plupart des relais, si un utilisateur de votre serveur YunoHost déclare **une "adresse de transfert" extérieure** dans le but de transférer automatiquement les messages reçus sur votre serveur YunoHost vers une autre boîte mail, **ce transfert ne fonctionnera pas** pour les courriels venant de l'extérieur de votre serveur, sans qu'il soit en averti. En effet, les relais exigent généralement que les messages qu'ils transmettent aient une adresse d'expéditeur de votre domaine (pour lutter contre le spam et préserver la réputation de leurs services), ce qui n'est pas le cas pour un "forward automatique" où l'expéditeur originel du mail est conservé ; le message est alors bloqué par le relais (qui, normalement, prévient votre admin YunoHost, mais seulement après coup). + +## Comment utiliser un relais SMTP avec YunoHost ? + +YunoHost supporte depuis la version 4.1 la configuration d'un relais SMTP. Pour le moment cette fonctionnalité n'est pas accessible depuis l'interface d'administration : le paramétrage doit être fait en ligne de commande. + +### Étape 1 : S'inscrire chez un fournisseur de relais SMTP + +Beaucoup de fournisseurs existent dans ce domaine. Certains sont gratuits et d'autres proposent des services payants contre différentes options. Comme écrit plus haut, vous devez être sûr de pouvoir lui faire confiance, mais cela reste à votre entier égard. + +### Étape 2 : Paramétrer sa zone DNS correctement + +Une fois inscrit, le paramétrage du relais SMTP demande de modifier la zone DNS de votre domaine. La procédure standard consiste à ajouter une clé DKIM, et SPF à la zone DNS. Les paramètres à modifier dépendent du fournisseur que vous aurez choisi. + +Habituellement les fournisseurs ont une documentation à ce sujet. + +! [fa=exclamation-triangle /] Attention une fois la zone DNS enregistrée, le relais SMTP peut envoyer des e-mails à votre nom sans que vous ne le sachiez + +## Étape 3 :Configurer YunoHost correctement +Il est possible de configurer soit via la webadmin ou en ligne de commande. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Depuis la webadmin"] +Depuis l'interface d'administration, dans la section `Outils` > `Paramètres de YunoHost`, et l'onglet `Email`. +Il suffit d'activer l'option, et de renseigner les champs nécessaires : +- **Adresse du relais SMTP** : L'url pour le serveur SMTP. +- **Port du relais SMTP** : Le port utilisé sur le serveur renseigné. +- **Utilisateur du relais SMTP** : Login ou mail d'identification pour le serveur. +- **Mot de passe du relais SMTP** : Tout simplement le mot de passe. + +! [fa=exclamation-triangle /] Les mots de passe avec le caractère `#` ne fonctionneront pas proprement à cause d'une limitation de postfix (d'autres caractères sont peut-être interdit, n'hésitez pas à rapporter ce genre de cas pour la mise à jour de cette doc). + +![Option-Relais-Smtp](image://relay_smtp_option_webadmin_en.png?resize=800) + +[/ui-tab] +[ui-tab title="En ligne de commande"] +Pour que YunoHost soit capable d'utiliser le relais, il faut paramétrer 4 choses. +1. Votre url de relais SMTP (on utilisera `smtprelay.tld`). +2. Le port sur lequel on accède au relais (on utilisera le port 2525 ci-dessous) +3. Votre nom d'utilisateur SMTP (on utilisera `username`). +4. Votre mot de passe SMTP (on utilisera `password`). + +! [fa=exclamation-triangle /] Les mots de passe avec le caractère `#` ne fonctionneront pas proprement à cause d'une limitation de postfix (d'autres caractères sont peut-être interdit, n'hésitez pas à rapporter ce genre de cas pour la mise à jour de cette doc). + +Le fournisseur SMTP vous fournit ces trois informations. + +Premièrement se connecter sur son serveur en SSH avec la commande : + +```bash +ssh admin@domain.tld +``` + +Ensuite, mettre à jour les informations suivantes : + +```bash +sudo yunohost settings set email.smtp.smtp_relay_enabled -v yes +sudo yunohost settings set smtp.relay.host -v smtprelay.tld +sudo yunohost settings set smtp.relay.port -v 2525 +sudo yunohost settings set smtp.relay.user -v username +sudo yunohost settings set smtp.relay.password -v password +``` + +C'est une bonne idée de confirmer les informations en faisant `sudo yunohost settings list` + +[/ui-tab] [/ui-tabs] + +Votre relais SMTP est maintenant configuré ! + +! [fa=exclamation-triangle /] Maintenant le relais SMTP est capable de lire et d'utiliser toutes les informations contenues dans les emails que vous envoyez sans votre accord. Mais il ne sera pas capable de lire les informations des emails que vous recevez. + +## Vérifier la configuration + +Vous pouvez vérifier vos paramètres en envoyant un mail et voir si cela fonctionne. Certains relais SMTP vous confirment l'e-mail envoyé. Bien sur vous pouvez vérifier sur mail-tester.com pour prendre connaissance d’éventuelles problèmes. diff --git a/pages/02.administer/45.tutorials/35.email_relay/email_configure_relay.md b/pages/02.administer/45.tutorials/35.email_relay/email_configure_relay.md new file mode 100644 index 00000000..2a09fa01 --- /dev/null +++ b/pages/02.administer/45.tutorials/35.email_relay/email_configure_relay.md @@ -0,0 +1,105 @@ +--- +title: Configure SMTP relay +template: docs +taxonomy: + category: docs +routes: + default: '/email_configure_relay' + aliases: + - '/smtp_relay' +--- + +If your ISP blocks port 25, if you can't set a reverseDNS on your server, or if you have any other troubles using the built-in SMTP server on YunoHost, you may want to setup your YunoHost server to use an SMTP relay. + +## What is an SMTP relay? + +An SMTP relay is basically a third party hosted SMTP server that will send emails on behalf of your own SMTP server (Postfix service on YunoHost). +Once setup correctly on YunoHost, its operation is transparent, both for you and for your correspondents: they will see emails as coming from your YunoHost main URL, but all the sending will be delegated to the SMTP relay you have chosen and configured. + +## [fa=exclamation-triangle /] Disadvantages of SMTP relays + +It's important to note that using an SMTP relay has to be seen as a (big) compromise in the world of self-hosting. Indeed, when using an SMTP relay, not only a third party sends emails on your behalf, but it has full access to the content of all the emails you'll send and can also possibly modify them (For example, by default, MailJet rewrites the html hyperlinks contained in your emails, in order to track the activity of your correspondents). Be also aware that an SMTP relay is setup for your whole YunoHost server: you can't choose which emails or which users go through it because all future emails will. + +Beyond the privacy considerations above, an SMTP relay can impose technical limitations that one would not have if port 25 was open. For example, with most relays, if a user of your YunoHost server declares **an external "forwarding address"** in order to automatically forward messages received on your YunoHost server to another mailbox, **such forwarding will not work** for emails originating from outside your server, without any warning. Indeed, relays generally require that the messages they forward have a sender address from your domain (to fight spam and preserve the reputation of their services), which is not the case for an "automatic forward" where the original sender of the mail is kept; the message is then blocked by the relay (which, normally, warns your YunoHost admin, but only afterwards) + +## How to use an SMTP relay with YunoHost? + +YunoHost has a built-in SMTP relay configuration, available from version 4.1. That configuration is not yet available from the admin web interface, though. You will have to use the command line interface. + +### Step 1: Register with an SMTP relay provider + +Many providers exist. Some have free plans with or without limitations, it's up to you. As written above, you have to be careful with your choice as you will basically handover all your emails to that third party. Whether you can trust it or not, that's your call! + +### Step 2: Setup your DNS records correctly + +Once registered, the SMTP relay provider will usually ask you to modify your DNS. +Standard procedure is to add a DKIM key and a SPF key to your DNS records. +The way to modify these records and the value of the keys you'll have to add depend both on your domain name provider and SMTP relay provider. + +Usually, the SMTP relay provider will provide you with a guide on how to modify these records, together with an automatic check tool that will tell you when your DNS have been setup correctly. That step is mandatory to prove "the world" that you, owner of your domain name, did explicitly authorize your SMTP relay provider to send emails on your behalf. + +Please note that modifying your DNS records could sometimes take over 24h to take effect, so be patient! + +! [fa=exclamation-triangle /] From now on, a non trusty SMTP relay provider could send emails from your main domain without telling you. + +### Step 3: Setup YunoHost correctly +It can be configured either from the webadmin or the command line. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the webadmin"] +Go to your web admin, in `Tools` > `Yunohost Settings` and `Email`. +Now set all options requests : +- **SMTP relay host** : SMTP server url. +- **SMTP relay port** : Port use with the distant server. +- **SMTP relay user** : Login or identification mail server. +- **SMTP relay password** : Your SMTP relay password. +- +! [fa=exclamation-triangle /] Password with `#` char won't works properly due to postfix limitation (it's possible other chars are forbidden, don't hesitate to report it to update this doc). + +![Option-Relais-Smtp](image://relay_smtp_option_webadmin_en.png?resize=800) + +[/ui-tab] +[ui-tab title="From the command line"] +In order to setup your YunoHost to use your SMTP relay, you will have to configure four things: +1. Your SMTP relay URL (for this tutorial we will use `smtprelay.tld`) +2. The port on which you access the relay (for this tutorial we will use port 2525 below) +3. Your SMTP relay username (for this tutorial we will use `username`) +4. Your SMTP relay password (for this tutorial we will use `password`) + +! [fa=exclamation-triangle /] Password with `#` char won't works properly due to postfix limitation (it's possible other chars are forbidden, don't hesitate to report it to update this doc). + +Your SMTP relay will obviously provide you with these four things, that should be available in your control panel or whatsoever. + +You can log into your YunoHost server using SSH: +```bash +ssh admin@yourdomain.tld +``` + +Then you can update the three values as below: + +```bash +sudo yunohost settings set email.smtp.smtp_relay_enabled -v yes +sudo yunohost settings set smtp.relay.host -v smtprelay.tld +sudo yunohost settings set smtp.relay.port -v 2525 +sudo yunohost settings set smtp.relay.user -v username +sudo yunohost settings set smtp.relay.password -v password +``` + +It may be a good idea to double confirm your settings by doing: + +```bash +sudo yunohost settings list +``` + +[/ui-tab] +[/ui-tabs] + +Your SMTP relay is now configured! + +! [fa=exclamation-triangle /] From now on, a non trusty SMTP relay provider could read or use the data of all the emails you send without telling you (but still won't be able to read nor to use the data from emails you receive). + +### Step 4: Check your setup + +You can check your setup by sending emails and try if everything works. +Some of the SMTP relay will give you insights about the emails you send so that can also be a good way to check that everythings works as needed. +Of course, you can always have a try with [mail-tester.com](https://www.mail-tester.com/) to check for any problem or discrepancy. diff --git a/pages/02.administer/45.tutorials/40.tor/torhiddenservice.fr.md b/pages/02.administer/45.tutorials/40.tor/torhiddenservice.fr.md new file mode 100644 index 00000000..a8409335 --- /dev/null +++ b/pages/02.administer/45.tutorials/40.tor/torhiddenservice.fr.md @@ -0,0 +1,58 @@ +--- +title: Utiliser YunoHost comme un service caché Tor +template: docs +taxonomy: + category: docs +routes: + default: '/torhiddenservice' +--- + +! Ce tuto n'est pas complet ! Des données peuvent être récupérées avec cette installation comme le nom de domaine principal de votre yunohost, donc ce n'est pas un "service caché". Voir https://www.torproject.org/docs/tor-hidden-service.html.en (anglais) + +### Installer Tor +```bash +apt install tor +``` + +### Configurer notre service caché +Éditer le fichier `/etc/tor/torrc`, et ajouter ces lignes : + +```bash +HiddenServiceDir /var/lib/tor/hidden_service/ +HiddenServicePort 80 127.0.0.1:80 +HiddenServicePort 443 127.0.0.1:443 +``` + +### Redémarrer Tor +```bash +systemctl restart tor +``` + +### Obtenir l’adresse du service caché +```bash +cat /var/lib/tor/hidden_service/hostname +``` + +Le nom de domaine ressemble à *random123456789.onion* + +### Ajouter le domaine .onion à YunoHost +```bash +yunohost domain add random123456789.onion +``` + +### Éviter la redirection vers le SSO (optionnel) +Si vous voulez éviter d’être redirigé vers le portail à la connexion pour des raisons de traçabilité, vous pouvez désactiver SSOwat pour le domaine, en éditant le fichier `/etc/nginx/conf.d/random123456789.onion.conf` et en commentant la ligne suivante (elle apparaît deux fois dans le fichier) : + +```bash +#access_by_lua_file /usr/share/ssowat/access.lua; +``` + +### Vérifier que l'on a pas fait d'erreurs dans la configuration de NGINX +```bash +nginx -t +``` + +### Si tout est OK on applique les modifications de la configuration +```bash +systemctl reload nginx +``` diff --git a/pages/02.administer/45.tutorials/40.tor/torhiddenservice.it.md b/pages/02.administer/45.tutorials/40.tor/torhiddenservice.it.md new file mode 100644 index 00000000..406e2fa3 --- /dev/null +++ b/pages/02.administer/45.tutorials/40.tor/torhiddenservice.it.md @@ -0,0 +1,54 @@ +--- +title: Collegarsi a YunoHost attraverso un Hidden Service +template: docs +taxonomy: + category: docs +routes: + default: '/torhiddenservice' +--- + +! Questo tutorial non è completo! Con queste impostazioni alcuni dati possono essere rivelati come ad esempio il dominio principale del tuo yunohost, di conseguenza non può essere considerato un reale "Hidden service". Vedi https://www.torproject.org/docs/tor-hidden-service.html + +### Installare Tor +```bash +apt install tor +``` + +### Configurazione dell'hidden service +Modifica `/etc/tor/torrc` aggiungendo queste righe: + +```bash +HiddenServiceDir /var/lib/tor/hidden_service/ +HiddenServicePort 80 127.0.0.1:80 +HiddenServicePort 443 127.0.0.1:443 +``` + +### Riavvia Tor +```bash +service tor restart +``` + +### Copia l'hostname del tuo Hidden Service +```bash +cat /var/lib/tor/hidden_service/hostname +``` + +Il dominio dell'hidden service sarà una cosa tipo *random123456789.onion* + +### Aggiungi il dominio .onion a YunoHost +```bash +yunohost domain add random123456789.onion +``` + +### Disabilita la redirezione SSO (opzionale) +Se non vuoi essere rediretto al portale SSO al login puoi disattivare SSOwat specificatamente per questo dominio modificando il file `/etc/nginx/conf.d/random123456789.onion.conf` commentando le seguenti linee (due volte): + +```bash +#access_by_lua_file /usr/share/ssowat/access.lua; +``` + +### Riavvia NGINX +```bash +service nginx restart +``` + diff --git a/pages/02.administer/45.tutorials/40.tor/torhiddenservice.md b/pages/02.administer/45.tutorials/40.tor/torhiddenservice.md new file mode 100644 index 00000000..71dadd67 --- /dev/null +++ b/pages/02.administer/45.tutorials/40.tor/torhiddenservice.md @@ -0,0 +1,53 @@ +--- +title: Using YunoHost as a Tor Hidden Service +template: docs +taxonomy: + category: docs +routes: + default: '/torhiddenservice' +--- + +! This tuto is not finished ! Some data could leak with this setup like the main domain of your yunohost, so it's not a "Hidden Service". See https://www.torproject.org/docs/tor-hidden-service.html.en + +### Installing Tor +```bash +apt install tor +``` + +### Configuring our hidden service +Edit `/etc/tor/torrc`, and add these lines: + +```bash +HiddenServiceDir /var/lib/tor/hidden_service/ +HiddenServicePort 80 127.0.0.1:80 +HiddenServicePort 443 127.0.0.1:443 +``` + +### Restart Tor +```bash +service tor restart +``` + +### Get your Tor Hidden Service hostname +```bash +cat /var/lib/tor/hidden_service/hostname +``` + +Your domain looks like *random123456789.onion* + +### Add the .onion domain to YunoHost +```bash +yunohost domain add random123456789.onion +``` + +### Avoid SSO redirection (optional) +If you want to avoid being redirected to the SSO portal at login, you can deactivate SSOwat for this specific tor domain, by editing the file `/etc/nginx/conf.d/random123456789.onion.conf` and commenting the following line (two times): + +```bash +#access_by_lua_file /usr/share/ssowat/access.lua; +``` + +### Restart NGINX +```bash +service nginx restart +``` diff --git a/pages/02.administer/45.tutorials/45.certificate_custom/certificate_custom.fr.md b/pages/02.administer/45.tutorials/45.certificate_custom/certificate_custom.fr.md new file mode 100644 index 00000000..2ff450ab --- /dev/null +++ b/pages/02.administer/45.tutorials/45.certificate_custom/certificate_custom.fr.md @@ -0,0 +1,141 @@ +--- +title: Certificats personnalisés +template: docs +taxonomy: + category: docs +routes: + default: '/certificate_custom' +--- + +**Note :** depuis la version 2.5, YunoHost intègre la gestion automatisée de certificats Let's Encrypt. Vous pouvez donc facilement et gratuitement [installer un certificat Let's Encrypt](/certificate). Le document suivant décrit la méthodologie pour installer un certificat, payant, d'une autre autorité de certification (**Gandi**, **RapidSSL**, **StartSSL**, **Cacert**). + +Quelques changements ont eu lieu qui impactent les procédures indiquées ci-dessous : + +* Le groupe metronome n'est plus utilisé directement mais ssl-cert. +* Un repertoire `/etc/yunohost/certs/DOMAIN.LTD-history/stamp` est utilisé pour conserver chaque configuration créée et un lien symbolique est créé dessus. + +### Ajout d’un certificat signé par une autorité (autre que Let's Encrypt) + +Après création du certificat auprès de votre autorité d’enregistrement, vous devez être en possession d’une clé privée, le fichier *key* et d’un certificat public, le fichier *crt*. +> Attention, le fichier *key* est très sensible, il est strictement personnel et doit être très bien sécurisé. + +Ces deux fichiers doivent être copiés sur le serveur, s’ils ne s’y trouvent pas déjà. + +```bash +scp CERTIFICAT.crt admin@DOMAIN.TLD:ssl.crt +scp CLE.key admin@DOMAIN.TLD:ssl.key +``` + +Depuis Windows, scp est exploitable avec Putty, en téléchargeant l’outil [pscp](http://the.earth.li/~sgtatham/putty/latest/x86/pscp.exe) + +```bash +pscp -P 22 CERTIFICAT.crt admin@DOMAIN.TLD:ssl.crt +pscp -P 22 CLE.key admin@DOMAIN.TLD:ssl.key +``` + +Dès lors que les fichiers sont sur le serveur, le reste du travail se fera sur celui-ci. En [ssh](/ssh) ou en local. + +Tout d’abord, créez un dossier pour stocker les certificats obtenus. + +```bash +sudo mkdir /etc/yunohost/certs/DOMAIN.TLD/ae_certs +sudo mv ssl.key ssl.crt /etc/yunohost/certs/DOMAIN.TLD/ae_certs/ +``` + +Puis allez dans le dossier parent pour poursuivre. + +```bash +cd /etc/yunohost/certs/DOMAIN.TLD/ +``` + +Faites une sauvegarde des certificats d’origine de YunoHost, par précaution. + +```bash +sudo mkdir yunohost_self_signed +sudo mv *.pem *.cnf yunohost_self_signed/ +``` + +En fonction de l’autorité d’enregistrement, des certificats intermédiaires et racines doivent être obtenus. + +> **StartSSL** +> ```bash +> sudo wget http://www.startssl.com/certs/ca.pem -O ae_certs/ca.pem +> sudo wget http://www.startssl.com/certs/sub.class1.server.ca.pem -O ae_certs/intermediate_ca.pem +>``` + +> **Gandi** +> ```bash +> sudo wget https://www.gandi.net/static/CAs/GandiStandardSSLCA2.pem -O ae_certs/intermediate_ca.pem +>``` + +> **RapidSSL** +> ```bash +> sudo wget https://knowledge.rapidssl.com/library/VERISIGN/INTERNATIONAL_AFFILIATES/RapidSSL/AR1548/RapidSSLCABundle.txt -O ae_certs/intermediate_ca.pem +>``` + +> **Cacert** +> ```bash +> sudo wget http://www.cacert.org/certs/root.crt -O ae_certs/ca.pem +> sudo wget http://www.cacert.org/certs/class3.crt -O ae_certs/intermediate_ca.pem +>``` + +Les certificats intermédiaires et root doivent être réunis avec le certificat obtenu pour créer une chaîne de certificats unifiés. + +```bash +cat ae_certs/ssl.crt ae_certs/intermediate_ca.pem ae_certs/ca.pem | sudo tee crt.pem +``` + +La clé privée doit être, elle, convertie au format `.pem`. + +```bash +sudo openssl rsa -in ae_certs/ssl.key -out key.pem -outform PEM +``` + +Afin de s’assurer de la syntaxe des certificats, vérifiez le contenu des fichiers. + +```bash +cat crt.pem key.pem +``` + +Les certificats et la clé privée doivent ressembler à cela : + +```plaintext +-----BEGIN CERTIFICATE----- +MIICVDCCAb0CAQEwDQYJKoZIhvcNAQEEBQAwdDELMAkGA1UEBhMCRlIxFTATBgNV +BAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UEChMDTExC +MREwDwYDVQQLEwhCVFMgSU5GTzEbMBkGA1UEAxMSc2VydmV1ci5idHNpbmZvLmZy +MB4XDTA0MDIwODE2MjQyNloXDTA0MDMwOTE2MjQyNlowcTELMAkGA1UEBhMCRlIx +FTATBgNVBAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UE +ChMDTExCMREwDwYDVQQLEwhCVFMgSU5GTzEYMBYGA1UEAxMPcHJvZi5idHNpbmZv +LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSUagxPSv3LtgDV5sygt12 +kSbN/NWP0QUiPlksOkF2NkPfwW/mf55dD1hSndlOM/5kLbSBo5ieE3TgikF0Iktj +BWm5xSqewM5QDYzXFt031DrPX63Fvo+tCKTQoVItdEuJPMahVsXnDyYHeUURRWLW +wc0BzEgFZGGw7wiMF6wt5QIDAQABMA0GCSqGSIb3DQEBBAUAA4GBALD640iwKPMf +pqdYtfvmLnA7CiEuao60i/pzVJE2LIXXXbwYjNAM+7Lov+dFT+b5FcOUGqLymSG3 +kSK6OOauBHItgiGI7C87u4EJaHDvGIUxHxQQGsUM0SCIIVGK7Lwm+8e9I2X0G2GP +9t/rrbdGzXXOCl3up99naL5XAzCIp6r5 +-----END CERTIFICATE----- +``` + +Enfin, sécurisez les fichiers de votre certificat. + +```bash +sudo chown root:metronome crt.pem key.pem +sudo chmod 640 crt.pem key.pem +sudo chown root:root -R ae_certs +sudo chmod 600 -R ae_certs +``` + +Maintenant les certificats (les deux fichiers avec l'extension `.pem`) doivent être recopiés dans `/etc/yunohost/certs/DOMAIN.TLD`. + +```bash +cp ae_certs/*.pem ./ +``` + +Rechargez la configuration de NGINX pour prendre en compte le nouveau certificat. + +```bash +sudo service nginx reload +``` + +Votre certificat est prêt à servir. Vous pouvez toutefois vous assurer de sa mise en place en testant le certificat à l’aide du service de geocerts. diff --git a/pages/02.administer/45.tutorials/45.certificate_custom/certificate_custom.md b/pages/02.administer/45.tutorials/45.certificate_custom/certificate_custom.md new file mode 100644 index 00000000..ee6eeb54 --- /dev/null +++ b/pages/02.administer/45.tutorials/45.certificate_custom/certificate_custom.md @@ -0,0 +1,141 @@ +--- +title: Custom certificates +template: docs +taxonomy: + category: docs +routes: + default: '/certificate_custom' +--- + +! **Note:** since version 2.5, YunoHost integrates Let's Encrypt certificates automated management. You can easily and freely [install a Let's Encrypt certificate](/certificate). The following document describes the steps for installing a paid certificate from a certification authority (**Gandi**, **RapidSSL**, **StartSSL**, **Cacert**). + +Some changes have taken place which impact the procedures indicated below: + +* Metronome group is no longer used directly but ssl-cert. +* A `/etc/yunohost/certs/DOMAIN.LTD-history/stamp` directory is used to keep each configuration created and a symlink is created. + +### Adding a signed certificate by an authority (other than Let's Encrypt) + +After the certificate creation with your registration authority, you must have a private key, the key file, and a public certificate, the crt file. +> Note that the key file is very sensitive, it is strictly personal and must be very well secured. + +These two files should be copied to the server, if they are not already there. + +```bash +scp CERTIFICATE.crt admin@DOMAIN.TLD:ssl.crt +scp KEY.key admin@DOMAIN.TLD:ssl.key +``` + +From Windows, scp can be used with Putty, by downloading the tool [pscp](http://the.earth.li/~sgtatham/putty/latest/x86/pscp.exe) + +```bash +pscp -P 22 CERTIFICATE.crt admin@DOMAIN.TLD:ssl.crt +pscp -P 22 KEY.key admin@DOMAIN.TLD:ssl.key +``` + +As soon as the files are on the server, the rest of the work will be done on it. In [ssh](/ssh) or locally. +First, create a folder to store the obtained certificates. + +```bash +sudo mkdir /etc/yunohost/certs/DOMAIN.TLD/ae_certs +sudo mv ssl.key ssl.crt /etc/yunohost/certs/DOMAIN.TLD/ae_certs/ +``` + +Then, go to the parent folder to continue. + +```bash +cd /etc/yunohost/certs/DOMAIN.TLD/ +``` + +As a caution, back up the certificates of origin from YunoHost. + +```bash +sudo mkdir yunohost_self_signed +sudo mv *.pem *.cnf yunohost_self_signed/ +``` + +Depending on the registration authority, intermediate and root certificates must be obtained. + +> **StartSSL** +> ```bash +> sudo wget http://www.startssl.com/certs/ca.pem -O ae_certs/ca.pem +> sudo wget http://www.startssl.com/certs/sub.class1.server.ca.pem -O ae_certs/intermediate_ca.pem +>``` + +> **Gandi** +> ```bash +> sudo wget https://www.gandi.net/static/CAs/GandiStandardSSLCA2.pem -O ae_certs/intermediate_ca.pem +>``` + +> **RapidSSL** +> ```bash +> sudo wget https://knowledge.rapidssl.com/library/VERISIGN/INTERNATIONAL_AFFILIATES/RapidSSL/AR1548/RapidSSLCABundle.txt -O ae_certs/intermediate_ca.pem +>``` + +> **Cacert** +> ```bash +> sudo wget http://www.cacert.org/certs/root.crt -O ae_certs/ca.pem +> sudo wget http://www.cacert.org/certs/class3.crt -O ae_certs/intermediate_ca.pem +>``` + +Intermediate and root certificates must be combined with the obtained certificate to create a unified certificate chain. + +```bash +cat ae_certs/ssl.crt ae_certs/intermediate_ca.pem ae_certs/ca.pem | sudo tee crt.pem +``` + +The private key must be converted to `.pem` format. + +```bash +sudo openssl rsa -in ae_certs/ssl.key -out key.pem -outform PEM +``` + +To ensure the certificates syntax, check the files contents. + +```bash +cat crt.pem key.pem +``` + +The certificates and private key should look like this: + +```plaintext +-----BEGIN CERTIFICATE----- +MIICVDCCAb0CAQEwDQYJKoZIhvcNAQEEBQAwdDELMAkGA1UEBhMCRlIxFTATBgNV +BAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UEChMDTExC +MREwDwYDVQQLEwhCVFMgSU5GTzEbMBkGA1UEAxMSc2VydmV1ci5idHNpbmZvLmZy +MB4XDTA0MDIwODE2MjQyNloXDTA0MDMwOTE2MjQyNlowcTELMAkGA1UEBhMCRlIx +FTATBgNVBAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UE +ChMDTExCMREwDwYDVQQLEwhCVFMgSU5GTzEYMBYGA1UEAxMPcHJvZi5idHNpbmZv +LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSUagxPSv3LtgDV5sygt12 +kSbN/NWP0QUiPlksOkF2NkPfwW/mf55dD1hSndlOM/5kLbSBo5ieE3TgikF0Iktj +BWm5xSqewM5QDYzXFt031DrPX63Fvo+tCKTQoVItdEuJPMahVsXnDyYHeUURRWLW +wc0BzEgFZGGw7wiMF6wt5QIDAQABMA0GCSqGSIb3DQEBBAUAA4GBALD640iwKPMf +pqdYtfvmLnA7CiEuao60i/pzVJE2LIXXXbwYjNAM+7Lov+dFT+b5FcOUGqLymSG3 +kSK6OOauBHItgiGI7C87u4EJaHDvGIUxHxQQGsUM0SCIIVGK7Lwm+8e9I2X0G2GP +9t/rrbdGzXXOCl3up99naL5XAzCIp6r5 +-----END CERTIFICATE----- +``` + +Finally, secure your certificate files. + +```bash +sudo chown root:metronome crt.pem key.pem +sudo chmod 640 crt.pem key.pem +sudo chown root:root -R ae_certs +sudo chmod 600 -R ae_certs +``` + +Now the certificates (two files with the extension `.pem`) must be copied in `/etc/yunohost/certs/DOMAIN.TLD`. + +```bash +cp ae_certs/*.pem ./ +``` + +Reload NGINX configuration to take into account the new certificate. + +```bash +sudo service nginx reload +``` + +Your certificate is ready. However, you can ensure that it is in place by testing the certificate using the geocerts. + diff --git a/pages/02.administer/45.tutorials/55.moving_app_folder/moving_app_folder.fr.md b/pages/02.administer/45.tutorials/55.moving_app_folder/moving_app_folder.fr.md new file mode 100644 index 00000000..6f3f3c32 --- /dev/null +++ b/pages/02.administer/45.tutorials/55.moving_app_folder/moving_app_folder.fr.md @@ -0,0 +1,43 @@ +--- +title: Déplacer un dossier d'application vers un autre espace de stockage +template: docs +taxonomy: + category: docs +routes: + default: '/moving_app_folder' +--- + +Les dossiers d'application se trouvent (*habituellement*) dans `/var/www/$nom_application` + +Lorsqu'un dossier d'application devient trop volumineux il peut être intéressant de le déplacer vers un autre espace de stockage (comme un disque dur externe, une carte sd, etc.) + +Partant du principe que [le stockage externe est déjà monté](/external_storage), voici un guide pour déplacer le dossier de l'application wordpress : + + +#### 1. Déplacer le dossier wordpress et tout son contenu vers le stockage externe + +```shell +mv /var/www/wordpress /media/externalharddrive/ +``` +___ + +#### 2. Créer un lien symbolique + +Le programme qui va chercher des informations dans le dossier /var/www/wordpress sera redirigé vers le stockage externe. + +```shell +ln -s /media/externalharddrive/wordpress /var/www/wordpress +``` +___ + +#### 3. (peut être) bidouiller les permissions + +Après tout ça, il est possible que vous ayez à modifier les permissions de `/media/externalharddrive` pour que `www-data` (ou l'utilisateur de l'app) puisse y accéder. Quelque chose comme : + +```shell +chgrp www-data /media/externalharddrive +chmod g+rx /media/externalharddrive + +``` + +(À préciser par un expert) diff --git a/pages/02.administer/45.tutorials/55.moving_app_folder/moving_app_folder.md b/pages/02.administer/45.tutorials/55.moving_app_folder/moving_app_folder.md new file mode 100644 index 00000000..e0802f0e --- /dev/null +++ b/pages/02.administer/45.tutorials/55.moving_app_folder/moving_app_folder.md @@ -0,0 +1,45 @@ +--- +title: Moving an app folder to a different storage +template: docs +taxonomy: + category: docs +routes: + default: '/moving_app_folder' +--- + +Applications folder are (*usually*) located in `/var/www/$appname` + +If an application folder is expected to get bigger because of the amount of data it contains, it might be relevant to move it to another storage (like an external hard drive). + +Here's a summary of how to do this the application wordpress. Here, is is assumed that +[you already mounted the external hard-drive](/external_storage). + +#### 1. Move the entire wordpress folder to an external hard drive + +```shell +mv /var/www/wordpress /media/externalharddrive/ +``` + +#### 2. Create a symbolic link + +So that programs looking for files in /var/www/wordpress will actually take them from the harddrive + +```shell +ln -s /media/externalharddrive/wordpress /var/www/wordpress +``` + +#### 3. Tweak permissions (maybe?) + +After this, note that you may need to tweak the permissions of `/media/externalharddrive` so that `www-data` (or the user corresponding to the app) is able to read through the folder... Something like : + +```shell +chgrp www-data /media/externalharddrive +chmod g+rx /media/externalharddrive + +``` + +(but it depends on your exact setup... Please update this doc page if you figure +out what to do exactly) + +!!! If you want to do it with *NextCloud*, see [this Tutorial](/app_nextcloud). + diff --git a/pages/02.administer/45.tutorials/60.security/security.fr.md b/pages/02.administer/45.tutorials/60.security/security.fr.md new file mode 100644 index 00000000..9a5329db --- /dev/null +++ b/pages/02.administer/45.tutorials/60.security/security.fr.md @@ -0,0 +1,108 @@ +--- +title: Sécurité +template: docs +taxonomy: + category: docs +routes: + default: '/security' +--- + +YunoHost a été développé dans l’optique de fournir une sécurité maximale tout en restant accessible et facilement installable. + +Tous les protocoles que YunoHost utilise sont **chiffrés**, les mots de passe ne sont pas stockés en clair, et par défaut chaque utilisateur n’accède qu’à son répertoire personnel. + +Deux points sont néanmoins importants à noter : + +* L’installation d’applications supplémentaires **augmente le nombre de failles** potentielles. Il est donc conseillé de se renseigner sur chacune d’elle **avant l’installation**, d’en comprendre le fonctionnement et juger ainsi l’impact que provoquerait une potentielle attaque. N’installez **que** les applications qui semblent importantes pour votre usage. + +* Le fait que YunoHost soit un logiciel répandu augmente les chances de subir une attaque. Si une faille est découverte, elle peut potentiellement **toucher toutes les instances YunoHost** à un temps donné. Nous nous efforçons de corriger ces failles le plus rapidement possible, pensez donc à **mettre à jour régulièrement** votre système. + +!!!! Si vous avez besoin de conseil, n’hésitez pas à [nous demander](/help). + +!! [fa=shield /] Pour discuter d'une faille de sécurité, contactez l'[équipe sécurité de YunoHost](/security_team). + +--- + +## Améliorer la sécurité + +Si votre serveur YunoHost est dans un environnement de production critique ou que vous souhaitez améliorer sa sécurité, il est bon de suivre quelques bonnes pratiques. + +! **Attention :** l’application des conseils suivants nécessite une connaissance avancée du fonctionnement et de l’administration d’un serveur. Pensez à vous renseigner avant de procéder à cette mise en place. + +!!!! **Astuce :** Ne fermez jamais votre connexion SSH initiale sans avoir vérifié que vos modifications fonctionnent. Testez vos modifications dans une nouvelle fenêtre ou terminal. Ainsi, vous pourrez défaire vos modifications sans vous retrouver bloqués. + +### Authentification SSH par clé + +Voici un [tutoriel plus détaillé](http://doc.ubuntu-fr.org/ssh#authentification_par_un_systeme_de_cles_publiqueprivee). + +Par défaut, l’authentification SSH se fait avec le mot de passe d’administration. Il est conseillé de désactiver ce type d’authentification et de le remplacer par un mécanisme de clé de chiffrement. + +**Sur votre ordinateur de bureau :** + +```bash +ssh-keygen +ssh-copy-id -i ~/.ssh/id_rsa.pub +``` + +!!! Si vous avez des problèmes de permissions, donnez à `nom_utilisateur` la possession du dossier `~/.ssh` avec `chown`. Attention, pour des raisons de sécurité, ce dossier doit être en mode 700 ! + +!!! Si vous êtes sur Ubuntu 16.04 vous devez faire `ssh-add` pour initialiser l'agent SSH. + +Entrez le mot de passe d’administration et votre clé publique devrait être copiée sur votre serveur. + +**Sur votre serveur**, l'édition du fichier de configuration SSH pour désactiver l’authentification par mot de passe est gérée par un paramètre système : + +```bash +sudo yunohost settings set security.ssh.password_authentication -v no +``` + +--- + +### Modifier le port SSH + +Pour éviter des tentatives de connexion SSH par des robots qui scannent tout Internet pour tenter des connexions SSH avec tout serveur accessible, on peut modifier le port SSH. +C'est géré par un paramètre système, qui se charge de configurer les services SSH et Fail2Ban. + +```bash +sudo yunohost settings set security.ssh.port -v +``` + +**Lors de la prochaine connexion SSH**, vous devrez ajouter le paramètre `-p` suivi du port SSH. + +**Exemple**: + +```bash +ssh -p admin@ +``` + +--- + +### Durcir la sécurité de la configuration des services + +La configuration TLS par défaut des services tend à offrir une bonne compatibilité avec les vieux appareils. Vous pouvez régler cette politique pour les services SSH et NGINX. Par défaut, la configuration du NGINX suit la [recommandation de compatibilité intermédiaire](https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29) de Mozilla. Vous pouvez choisir de passer à la configuration « moderne » qui utilise des recommandations de sécurité plus récentes, mais qui diminue la compatibilité, ce qui peut poser un problème pour vos utilisateurs et visiteurs qui utilisent de vieux appareils. Plus de détails peuvent être trouvés sur [cette page](https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility). + +Changer le niveau de compatibilité n'est pas définitif et il est possible de rechanger le paramètre si vous concluez qu'il faut revenir en arrière. + +**Sur votre serveur**, modifiez la politique pour NGINX : +```bash +sudo yunohost settings set security.nginx.compatibility -v modern +``` + +**Sur votre serveur**, modifiez la politique pour SSH : +```bash +sudo yunohost settings set security.ssh.compatibility -v modern +``` + +### Désactivation de l’API YunoHost + +YunoHost est administrable via une **API HTTP**, servie sur le port 6787 par défaut (seulement sur `localhost`). +Elle permet d’administrer une grande partie de votre serveur, et peut donc être utilisée à des **fins malveillantes**. +La meilleure chose à faire si vous êtes habitués à la ligne de commande est de désactiver le service `yunohost-api`, et **utiliser la [ligne de commande](/commandline)** en SSH. + +! Ceci va désactiver à la fois l'API et l'interface d'administration web de YunoHost qui en dépend. +! Ne continuez que si vous êtes à l'aise avec la ligne de commande. + +```bash +sudo systemctl disable yunohost-api +sudo systemctl stop yunohost-api +``` diff --git a/pages/02.administer/45.tutorials/60.security/security.it.md b/pages/02.administer/45.tutorials/60.security/security.it.md new file mode 100644 index 00000000..17a7cd85 --- /dev/null +++ b/pages/02.administer/45.tutorials/60.security/security.it.md @@ -0,0 +1,112 @@ +--- +title: Sicurezza +template: docs +taxonomy: + category: docs +routes: + default: '/security' +--- + +YunoHost è stato sviluppato per la migliore sicurezza senza troppe complicazioni. Ogni protocollo in YunoHost è **cifrato** e view salvato solo un hash delle password e di default gli utenti possono accedere solo alla propria directory personale. + +Rimangono due punti importanti da notare: + +* L'installazione di applicazioni addizionali può **aumentare significativamente** il numero di potenziali problemi di sicurezza. È importante chiedere informazioni relative a problemi di sicurezza **prima di installare un'applicazione** e provare ad installare solo le applicazioni necessarie. + +* Poiché YunoHost è un software molto conosciuto ed usato aumenta le possibilità di un attacco. Se viene scoperto un problema potrebbe essere usato contemporaneamente contro tutte le istanze. Mantenete **aggiornato** il vostro sistema per aumentare la sicurezza. Gli aggiornamenti possono essere automatizzati installando l'[applicazione "Unattended_upgrades"](https://install-app.yunohost.org/?app=unattended_upgrades). + +!!!! Se avete bisogno di aiuto non esitate a [chiedere](/help). + +!! [fa=shield /] Per discutere di problemi di sicurezza contattate il [team YunoHost security](/security_team). + +--- + +## Migliorare la sicurezza + +Se il vostro server YunoHost è usato in situazioni critiche di produzione oppure se volete migliorarne la sicurezza potreste seguire le seguenti buone pratiche. + +! **ATTENZIONE:** Per seguire queste istruzioni è necessario essere in possesso di conoscenze avanzate di amministrazione di sistema. + +!!!! **SUGGERIMENTO** Non chiudete mai la connessione SSH in uso prima di aver controllato che le modifiche fatte siano corrette. Provate la nuova configurazione aprendo un nuovo terminale o una nuova finestra cosicché possiate eliminare le modifiche se c'è qualcosa di sbagliato. + +### Autenticazione SSH con la chiave + +Di default l'autenticazione SSH chiede la password dell'amministratore. È consigliato disattivare questo tipo di autenticazione per sostituirlo con il sistema basato sulle chiavi. + +**Sul client**: + +```bash +ssh-keygen +ssh-copy-id -i ~/.ssh/id_rsa.pub +``` + +!!! Se incontrate problemi di permessi impostate `username` come proprietario della directory `~/.ssh` con il comando `chown`. Fate attenzione al fatto che, per ragiorni di sicurezza questa directory deve essere con il modo `700`. + +!!! Se state usando Ubuntu 16.04 dovete avviare `ssh-add` per avviare l'agente SSH. + +Digitate la password di amministrazione e la chiave verrà copiata nel vostro server. + +**Sul vostro server** la modifica della configurazione di SSH per disattivare l'autenticazione a password è gestita da un'impostazione di sistema: + +```bash +sudo yunohost settings set security.ssh.password_authentication -v no +``` +--- + +### Modificare la porta SSH + +Per prevenire i tentativi di connessione dei robot che fanno scan di internet alla ricerca di server con SSH attivato è possibile cambiare la porta SSH. +Questa impostazione è gestita da un'impostazione di sistema che aggiorna le configurazioni di SSH e di fail2ban. + +! Se modificate una qualsiasi impostazione nel file `/etc/ssh/sshd_config`, anche solo la porta di ascolto, YunoHost non gestirà più il file. Per questa ragione è necessario usare sempre gli strumenti di amministrazione per fare modifiche ai file di configurazione del sistema. + +```bash +sudo yunohost settings set security.ssh.port -v +``` + +**Per tutte le connessioni SSH seguenti** è necessario aggiungere l'opzione `-p` seguita dal numero della porta di SSH. + +**Esempio**: + +```bash +ssh -p admin@ +``` + +--- + +### Cambiare la configurazione della compatibilità dei cifrari + +La configurazione TLS di default per i servizi è pensata per offrire una buona compatibilità di supporto ai vecchi device. È possibile configurare questa policy per specifici servizi come SSH e NGINX. La configurazione di default di NGINX segue il documento [intermediate compatibility recommendation](https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29) di Mozilla. Potete scegliere di cambiare nella modalità di configurazione 'moderna' che usa le raccomandazioni di sicurezza più recenti che però abbassano la compatibilità potendo portare a problemi con i vostri utenti che usano device più vecchi. Si possono trovare maggiori dettagli relativi alla compatibilità in [questa pagina](https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility). + +Il cambio di livello di compatibilità non è definitivo e può essere ripristinato nel caso in cui non si adatti alle vostre necessità. + +**Sul vostro server**, cambio della policy per NGINX +```bash +sudo yunohost settings set security.nginx.compatibility -v modern +``` + +**Sul vostro server**, cambio della policy per SSH +```bash +sudo yunohost settings set security.ssh.compatibility -v modern +``` + +### Disabilitare le API di YunoHost + +La pagina di amministrazione di YunoHost è accessibile da un **API HTTP** che ascolta di default sulla porta 6787 (solo su localhost). +Può essere usata per amministrare molti aspetti del vostro server e di conseguenza attori maligni possono usarla per danneggiarlo. +La cosa migliore da fare, se conoscete l'iso dell'[interfaccia a lina di comando (CLI)](/commandline), è disattivare il servizio `yunohost-api`.` + +! Facendo così verranno completamente disabilitate le API di YunoHost e la pagina di amministrazione che si basa su queste. +! Procedete solo nel caso in cui siate a vostro agio usando l'interfaccia a linea di comando. + +```bash +sudo systemctl disable yunohost-api +sudo systemctl stop yunohost-api +``` + +Poiché il servizio `yunohost-api` è stato disabilitato e non sta girando Diagnosi riporterà un errore che non può essere ignorato. +Se volete far sì che l'errore venga ignorato potete configurare in tal senso YunoHost dalla linea di comando. + +```bash +sudo yunohost diagnosis ignore --filter services service=yunohost-api +``` diff --git a/pages/02.administer/45.tutorials/60.security/security.md b/pages/02.administer/45.tutorials/60.security/security.md new file mode 100644 index 00000000..a78377f2 --- /dev/null +++ b/pages/02.administer/45.tutorials/60.security/security.md @@ -0,0 +1,112 @@ +--- +title: Security +template: docs +taxonomy: + category: docs +routes: + default: '/security' +--- + +YunoHost has been developed to provide the best security without too much complication. Every protocol used in YunoHost is **encrypted**, only a password's hashes are stored and by default each user is able to access their personal directory only. + +Two things remain important to note: + +* Installing additional apps can **significantly increase** the number of potential security flaws. Do not hesitate to get information about security flaws **before installing an app**, and try to only install apps which will suit your needs. + +* The fact that YunoHost is a well-known and used piece of software increases the chances of an attack. If a flaw is discovered, it could potentially affect all YunoHost instances at once. Keep your system **up-to-date** to remain safe. Updates can be automated by installing the ["Unattended_upgrades" app](https://install-app.yunohost.org/?app=unattended_upgrades). + +!!!! If you need advice, do not hesitate to [ask us](/help). + +!! [fa=shield /] To discuss security flaws, contact the [YunoHost security team](/security_team). + +--- + +## Improve security + +If your YunoHost server is used in a critical production environment, or if you want to improve its safety, you may want to follow these good practices. + +! **WARNING:** Following these instructions requires advanced knowledge of system administration. + +!!!! **TIP** Never close your current SSH connection before checking that your alterations work. Test your new configuration by opening a new terminal or window. That way, you can undo your alterations if anything goes wrong. + +### SSH authentication via key + +By default, the SSH authentication uses the administration password. Deactivating this kind of authentication and replacing it by a key mechanism is advised. + +**On your client**: + +```bash +ssh-keygen +ssh-copy-id -i ~/.ssh/id_rsa.pub +``` + +!!! If you run into permissions issues, set `username` as owner of the dir `~/.ssh` with `chown`. Be careful, for security reasons this directory should be in mode `700`. + +!!! If you are on Ubuntu 16.04 you should run `ssh-add` to initialize the SSH agent. + +Type your admnistration password and your key will be copied onto your server. + +**On your server**, editing the SSH configuration file to deactivate password authentication is handled by a system setting: + +```bash +sudo yunohost settings set security.ssh.password_authentication -v no +``` +--- + +### Modify the SSH port + +To prevent SSH connection attempts by robots that scan the internet for any server with SSH enabled, you can change the SSH port. +This is handled by a system setting, which takes care of updating the SSH and Fail2Ban configuration. + +! If you modify anything in the `/etc/ssh/sshd_config` file, even if only the port, YunoHost will no longer manage this file. For this reason, always use the YunoHost admin tools to make changes to the systems configuration files! + +```bash +sudo yunohost settings set security.ssh.port -v +``` + +**For subsequent SSH connections**, you need to add the `-p` option followed by the SSH port number. + +**Sample**: + +```bash +ssh -p admin@ +``` + +--- + +### Change cipher compatibility configuration + +The default TLS configuration for services tends to offer good compatibility to support old devices. You can tune this policy for specific services like SSH and NGINX. By default, the NGINX configuration follows the [intermediate compatibility recommendation](https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29) from Mozilla. You can choose to switch to the 'modern' configuration which uses more recent security recommendations, but decreases compatibility, which may be an issue for your users and visitors using older devices. More details about compatibility can be found on [this page](https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility). + +Changing the compatibility level is not definitive and can be reverted if it doesn't fit with your environment. + +**On your server**, change the policy for NGINX +```bash +sudo yunohost settings set security.nginx.compatibility -v modern +``` + +**On your server**, change the policy for SSH +```bash +sudo yunohost settings set security.ssh.compatibility -v modern +``` + +### Disable the YunoHost API + +YunoHost administration is accessible through an **HTTP API**, served on the 6787 port by default (only on `localhost`). +It can be used to administer a lot of things on your server, so malicious actors can also use it to damage your server. +The best thing to do, if you know how to use the [command-line interface (CLI)](/commandline), is to deactivate the `yunohost-api` service. + +! This will completely disable both YunoHost's API and the web administration panel that relies on it. +! Proceed only if you are comfortable with the command line interface. + +```bash +sudo systemctl disable yunohost-api +sudo systemctl stop yunohost-api +``` + +As `yunohost-api` is now disabled and not running, Diagnosis will report an error and cannot be ignored from the API. +If you want to ignore this error, you can configure YunoHost from the CLI. + +```bash +sudo yunohost diagnosis ignore --filter services service=yunohost-api +``` diff --git a/pages/02.administer/45.tutorials/65.sftp_on_apps/sftp_on_apps.fr.md b/pages/02.administer/45.tutorials/65.sftp_on_apps/sftp_on_apps.fr.md new file mode 100644 index 00000000..1509db27 --- /dev/null +++ b/pages/02.administer/45.tutorials/65.sftp_on_apps/sftp_on_apps.fr.md @@ -0,0 +1,31 @@ +--- +title: Donner la permission SFTP d'éditer une application +template: docs +taxonomy: + category: docs +routes: + default: '/sftp_on_apps' +--- + +Dans YunoHost, depuis la gestion des permissions par l'interface d'administration web, vous pouvez spécifier quel utilisateur peut accéder à votre système à travers SFTP. + +Cependant ces utilisateurs sont chrootés dans leur répertoire home pour des raisons de sécurité. + +Si vous désirez donner accès à une application spécifique à travers SFTP, voici les actions à faire après avoir donné les droits à l'utilisateur dans l'interface d'adminstration web. + +Dans les instructions suivantes USER est l'utilisateur à qui sont données les permissions d'éditer des fichiers wordpress. + +```bash +mkdir -p /home/USER/apps/wordpress +touch /home/USER/.nobackup +mount --bind /var/www/wordpress /home/USER/apps/wordpress +echo "/var/www/wordpress /home/USER/apps/wordpress none defaults,bind 0 0" >> /etc/fstab +find /var/www/wordpress -type d -exec chmod g+s {} \; + +setfacl -R -m u:wordpress:rwX /var/www/wordpress +setfacl -R -d -m u:wordpress:rwX /var/www/wordpress +setfacl -m u:wordpress:r-- /var/www/wordpress/wp-config.php + +setfacl -R -m u:USER:rwX /var/www/wordpress +setfacl -R -d -m u:USER:rwX /var/www/wordpress +``` diff --git a/pages/02.administer/45.tutorials/65.sftp_on_apps/sftp_on_apps.it.md b/pages/02.administer/45.tutorials/65.sftp_on_apps/sftp_on_apps.it.md new file mode 100644 index 00000000..06c05747 --- /dev/null +++ b/pages/02.administer/45.tutorials/65.sftp_on_apps/sftp_on_apps.it.md @@ -0,0 +1,34 @@ +--- +title: Concedere permessi SFTP per modificare un'applicazione +template: docs +taxonomy: + category: docs +routes: + default: '/sftp_on_apps' +--- + +Nell'interfaccia di amministrazione web di YunoHost nella sezione gestione permessi potete specificare gli utenti che possono accedere al sistema via SFTP. + +D'altro canto questi utenti hanno un chroot nella loro home directory per ragioni di sicurezza. + +Se volete dare accesso a delle specifiche applicazioni attraverso SFTP sono necessari alcuni passaggi ulteriori dopo aver concesso i permessi SFTP nell'interfaccia di amministrazione via web. + +Nelle istruzioni qui sotto USER è l'utente al quale volete dare il permesso di modifica dei file di wordpress. + +```bash +mkdir -p /home/USER/apps/wordpress +touch /home/USER/.nobackup +mount --bind /var/www/wordpress /home/USER/apps/wordpress +echo "/var/www/wordpress /home/USER/apps/wordpress none defaults,bind 0 0" >> /etc/fstab +find /var/www/wordpress -type d -exec chmod g+s {} \; + +setfacl -R -m u:wordpress:rwX /var/www/wordpress +setfacl -R -d -m u:wordpress:rwX /var/www/wordpress +setfacl -m u:wordpress:r-- /var/www/wordpress/wp-config.php + +setfacl -R -m u:USER:rwX /var/www/wordpress +setfacl -R -d -m u:USER:rwX /var/www/wordpress +``` + + + diff --git a/pages/02.administer/45.tutorials/65.sftp_on_apps/sftp_on_apps.md b/pages/02.administer/45.tutorials/65.sftp_on_apps/sftp_on_apps.md new file mode 100644 index 00000000..d90aced5 --- /dev/null +++ b/pages/02.administer/45.tutorials/65.sftp_on_apps/sftp_on_apps.md @@ -0,0 +1,33 @@ +--- +title: Give SFTP permission to edit an app +template: docs +taxonomy: + category: docs +routes: + default: '/sftp_on_apps' +--- + +In YunoHost permission management web admin interface, you can specify which user can access your system through SFTP. + +However, those user are chrooted in their home directory for security reasons. + +If you want to give access to a specific apps through SFTP, here are additional steps to do after giving the SFTP permission in the web interface. + +In instructions below, USER is the user to whom you wish to give permission to edit wordpress files. + +```bash +mkdir -p /home/USER/apps/wordpress +touch /home/USER/.nobackup +mount --bind /var/www/wordpress /home/USER/apps/wordpress +echo "/var/www/wordpress /home/USER/apps/wordpress none defaults,bind 0 0" >> /etc/fstab +find /var/www/wordpress -type d -exec chmod g+s {} \; + +setfacl -R -m u:wordpress:rwX /var/www/wordpress +setfacl -R -d -m u:wordpress:rwX /var/www/wordpress +setfacl -m u:wordpress:r-- /var/www/wordpress/wp-config.php + +setfacl -R -m u:USER:rwX /var/www/wordpress +setfacl -R -d -m u:USER:rwX /var/www/wordpress +``` + + diff --git a/pages/02.administer/45.tutorials/tutorials.fr.md b/pages/02.administer/45.tutorials/tutorials.fr.md new file mode 100644 index 00000000..6114ccf7 --- /dev/null +++ b/pages/02.administer/45.tutorials/tutorials.fr.md @@ -0,0 +1,12 @@ +--- +title: Cas d'usage spécifiques +template: docs +taxonomy: + category: docs +routes: + default: '/tutorials' + aliases: + - '/specific_use_cases' +--- + +!! Cette section est en cours de réorganisation. diff --git a/pages/02.administer/45.tutorials/tutorials.md b/pages/02.administer/45.tutorials/tutorials.md new file mode 100644 index 00000000..13554b84 --- /dev/null +++ b/pages/02.administer/45.tutorials/tutorials.md @@ -0,0 +1,12 @@ +--- +title: Tutorials +template: docs +taxonomy: + category: docs +routes: + default: '/tutorials' + aliases: + - '/specific_use_cases' +--- + +!! This section is being reworked. diff --git a/pages/02.administer/50.troubleshooting/05.fail2ban/fail2ban.fr.md b/pages/02.administer/50.troubleshooting/05.fail2ban/fail2ban.fr.md new file mode 100644 index 00000000..e0af1d18 --- /dev/null +++ b/pages/02.administer/50.troubleshooting/05.fail2ban/fail2ban.fr.md @@ -0,0 +1,72 @@ +--- +title: Débannir une adresse IP +template: docs +taxonomy: + category: docs +routes: + default: '/fail2ban' +--- + +**Fail2Ban** est un logiciel de prévention des intrusions qui protège les serveurs informatiques contre les attaques de brute-force. Il surveille certains journaux et bannira les adresses IP qui montrent un comportement de brute-forcing. + +En particulier, **Fail2Ban** surveille les tentatives de connexion `SSH`. Après 5 tentatives de connexion échouées sur SSH, Fail2Ban banniera l’adresse IP pendant 10 minutes. Si cette adresse récidive plusieurs fois, elle peut être bannie pendant une semaine. + +## Débannir une adresse IP + +Pour débloquer une adresse IP, vous devez d’abord accéder à votre serveur par un moyen quelconque (par exemple à partir d’une autre adresse IP ou d’une autre connexion internet que celle bannie). + +Ensuite, regardez le **journal de Fail2Ban** pour identifier dans quelle `prison` ou `jail` l’adresse IP a été bannie : + +```bash +sudo tail /var/log/fail2ban.log +2019-01-07 16:24:47 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:49 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:51 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:54 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:57 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:57 fail2ban.actions [1837]: NOTICE [sshd] Ban 11.22.33.44 +2019-01-07 16:24:57 fail2ban.filter [1837]: NOTICE [recidive] Ban 11.22.33.44 +``` + +Ici, l’adresse IP `11.22.33.44` a été bannie dans les jails `sshd` et `recidive`. + +Puis débanissez l’adresse IP avec les commandes suivantes : + +```bash +sudo fail2ban-client set sshd unbanip 11.22.33.44 +sudo fail2ban-client set recidive unbanip 11.22.33.44 +``` + +## Passer une adresse IP en liste blanche / whitelist + +Si vous ne voulez plus qu’une adresse IP « légitime » soit bloquée par **YunoHost**, alors il faut la renseigner dans la liste blanche ou whitelist du fichier de configuration de la `prison`. + +Lors d’une mise à jour du logiciel **Fail2Ban**, le fichier d’origine `/etc/fail2ban/jail.conf` est écrasé. C’est donc dans un nouveau fichier que nous allons stocker les modifications. Elles seront ainsi conservées dans le temps. + +1. Commencez par créer le nouveau fichier de configuration des prisons qui s’appelera `yunohost-whitelist.conf` : + + ```bash + sudo touch /etc/fail2ban/jail.d/yunohost-whitelist.conf + ``` + +2. Éditez ce nouveau fichier avec votre éditeur préféré : + + ```bash + sudo nano /etc/fail2ban/jail.d/yunohost-whitelist.conf + ``` + +3. Coller le contenu suivant dans le fichier et adapter l’adresse IP `XXX.XXX.XXX.XXX` : + + ```bash + [DEFAULT] + + ignoreip = 127.0.0.1/8 XXX.XXX.XXX.XXX #<= l'adresse IP (on peut en mettre plusieurs, séparées par un espace) que vous voulez passer en liste blanche / whitelist + ``` + +4. Sauvegardez le fichier et rechargez la configuration de Fail2Ban : + + ```bash + sudo fail2ban-client reload + ``` + +Félicitations, plus de risques de se bannir de son propre serveur YunoHost ! diff --git a/pages/02.administer/50.troubleshooting/05.fail2ban/fail2ban.it.md b/pages/02.administer/50.troubleshooting/05.fail2ban/fail2ban.it.md new file mode 100644 index 00000000..9d56e10e --- /dev/null +++ b/pages/02.administer/50.troubleshooting/05.fail2ban/fail2ban.it.md @@ -0,0 +1,72 @@ +--- +title: Sbannare un indirizzo IP +template: docs +taxonomy: + category: docs +routes: + default: '/fail2ban' +--- + +**Fail2Ban** è un programma di prevenzione delle intrusioni che protegge i server contro gli attacchi di forza bruta (brute-force), controllando alcuni log e bannando (cioè impedendo ulteriori connessioni) gli indirizzi IP che mostrano questo tipo di comportamento. + +In particolare, **Fail2Ban** controlla tentativi di connessione su `SSH`. Dopo cinque tentativi di connessione falliti, Fail2Ban banna l'indirizzo IP impedendogli la connessione SSH per 10 minuti. Se la cosa si ripete altre volte viene bannato per una settimana. + +## Togliere il ban ad un indirizzo + +Per sbloccare un indirizzo è necessario innanzitutto accedere al server con qualche mezzo (ad esempio da un altro indirizzo IP o da un'altra connessione diversa da quella bannata). + +Dopo di che controlla il **log di Fail2Ban** per trovare in quale `jail` è stato bannato l'indirizzo IP: + +```bash +sudo tail /var/log/fail2ban.log +2019-01-07 16:24:47 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:49 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:51 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:54 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:57 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:57 fail2ban.actions [1837]: NOTICE [sshd] Ban 11.22.33.44 +2019-01-07 16:24:57 fail2ban.filter [1837]: NOTICE [recidive] Ban 11.22.33.44 +``` + +In questo esempio l'indirizzo `11.22.33.44` è stato bannato nel `jail` `sshd` e `recidive`. + +Quindi togli il ban con il seguente comando: + +```bash +sudo fail2ban-client set sshd unbanip 11.22.33.44 +sudo fail2ban-client set recidive unbanip 11.22.33.44 +``` + +## Aggiungere un indirizzo IP alla whitelist + +Se vuoi impedire che un indirizzo IP "legittimo" venga bloccato da **YunoHost** ancora devi compilare la whitelist del file di configurazione della `jail`. + +Aggiornando **Fail2Ban** il file `/etc/fail2ban/jail.conf` originale verrà sovrascritto quindi dovremo scrivere questi cambiamenti su un nuovo file che verrà mantenuto. + +1. Comincia creando un nuovo file di configurazione della jail che verrà chiamato `yunohost-whitelist.conf`: + + ```bash + sudo touch /etc/fail2ban/jail.d/yunohost-whitelist.conf + ``` + +2. Modifica questo nuovo file con il tuo editor preferito (in questo esempio viene usato `nano`): + + ```bash + sudo nano /etc/fail2ban/jail.d/yunohost-whitelist.conf + ``` + +3. Incolla il seguente testo nel file cambiando l'indirizzo IP `XXX.XXX.XXX.XXX`: + + ```bash + [DEFAULT] + + ignoreip = 127.0.0.1/8 XXX.XXX.XXX.XXX #<= the IP address (you can put more than one, separated by a space) that you want to whitelist + ``` + +4. Salva il file e ricarica la configurazione di Fail2Ban: + + ```bash + sudo fail2ban-client reload + ``` + +Congratulazioni, non corrererai più il rischio di essere bannato dal tuo server YunoHost! diff --git a/pages/02.administer/50.troubleshooting/05.fail2ban/fail2ban.md b/pages/02.administer/50.troubleshooting/05.fail2ban/fail2ban.md new file mode 100644 index 00000000..e6f11a58 --- /dev/null +++ b/pages/02.administer/50.troubleshooting/05.fail2ban/fail2ban.md @@ -0,0 +1,72 @@ +--- +title: IP address unban +template: docs +taxonomy: + category: docs +routes: + default: '/fail2ban' +--- + +**Fail2Ban** is an intrusion prevention software that protects computer servers against brute-force attacks. It monitors certain logs and will ban IP addresses that show brute-force-like behavior. + +In particular, **Fail2Ban** monitors `SSH` connection attempts. After 5 failed SSH connection attempts, Fail2Ban will ban the IP address from connecting via SSH for 10 minutes. If this address fails several times, it might get banned for a week. + +## Unban an IP address + +To unblock an IP address, you must first access your server by some means (for example from another IP address or from another internet connection than the banned one). + +Then, look at the **Fail2Ban’s log** to identify in which `jail` the IP address has been banned: + +```bash +sudo tail /var/log/fail2ban.log +2019-01-07 16:24:47 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:49 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:51 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:54 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:57 fail2ban.filter [1837]: INFO [sshd] Found 11.22.33.44 +2019-01-07 16:24:57 fail2ban.actions [1837]: NOTICE [sshd] Ban 11.22.33.44 +2019-01-07 16:24:57 fail2ban.filter [1837]: NOTICE [recidive] Ban 11.22.33.44 +``` + +Here, the `11.22.33.44` IP address has been banned in the `sshd` and `recidive` jails. + +Then deban the IP address with the following commands: + +```bash +sudo fail2ban-client set sshd unbanip 11.22.33.44 +sudo fail2ban-client set recidive unbanip 11.22.33.44 +``` + +## Whitelist an IP address + +If you don’t want a "legitimate" IP address to be blocked by **YunoHost** anymore, then you have to fill it in the whitelist of the `jail` configuration file. + +When updating the **Fail2Ban** software, the original `/etc/fail2ban/jail.conf` file is overwritten. So it is on a new dedicated file that we will store the changes. They will thus be preserved over time. + +1. Start by creating the new jail configuration file which will be called `yunohost-whitelist.conf`: + + ```bash + sudo touch /etc/fail2ban/jail.d/yunohost-whitelist.conf + ``` + +2. Edit this new file with your favorite editor: + + ```bash + sudo nano /etc/fail2ban/jail.d/yunohost-whitelist.conf + ``` + +3. Paste the following content into the file and adapt the IP address `XXX.XXX.XXX.XXX`: + + ```bash + [DEFAULT] + + ignoreip = 127.0.0.1/8 XXX.XXX.XXX.XXX #<= the IP address (you can put more than one, separated by a space) that you want to whitelist + ``` + +4. Save the file and reload the Fail2Ban configuration: + + ```bash + sudo fail2ban-client reload + ``` + +Congratulations, no more risks of banning yourself from your own YunoHost server! diff --git a/pages/02.administer/50.troubleshooting/10.admin_password/change_admin_password.fr.md b/pages/02.administer/50.troubleshooting/10.admin_password/change_admin_password.fr.md new file mode 100644 index 00000000..925aa9b1 --- /dev/null +++ b/pages/02.administer/50.troubleshooting/10.admin_password/change_admin_password.fr.md @@ -0,0 +1,28 @@ +--- +title: Changer le mot de passe d'administration +template: docs +taxonomy: + category: docs +routes: + default: '/change_admin_password' +--- + +Vous voudrez peut-être changer votre mot de passe d'administrateur pour des raisons de sécurité ou parce que vous l'avez oublié. + +Si vous avez oublié votre mot de passe ou si vous ne pouvez pas vous connecter en utilisant l'utilisateur `admin`, vous +pouvez peut-être encore changer le mot de passe en vous connectant en tant que "root" sur +SSH (à partir de votre réseau local ! ou en utilisant un mode rescure si vous êtes sur un VPS...) + +## Sur la webadmin + +1. Connectez-vous à l'interface web d'administration. +2. Allez dans la section Outis > Changer le mot de passe d’administration. + + +## En ligne de commande + + +```bash +yunohost tools adminpw +``` + diff --git a/pages/02.administer/50.troubleshooting/10.admin_password/change_admin_password.it.md b/pages/02.administer/50.troubleshooting/10.admin_password/change_admin_password.it.md new file mode 100644 index 00000000..24eddd9b --- /dev/null +++ b/pages/02.administer/50.troubleshooting/10.admin_password/change_admin_password.it.md @@ -0,0 +1,26 @@ +--- +title: Cambiare la password dell'amministratore +template: docs +taxonomy: + category: docs +routes: + default: '/change_admin_password' +--- + +Potrebbe essere necessario cambiare la password dell'amministratore per ragioni di sicurezza o perché l'hai dimenticata. + +Se hai dimenticata la password dell'amministratore o se non puoi collegarti usando l'utente `admin` puoi sempre cambiare la password se riesci a collegarti come `root` via SSH (esclusivamente dalla tua rete locale! o usando il modo rescue se stai usando una VPS...) + +## Usando l'interfaccia web di amministrazione + +Innanzitutto collegati all'interfaccia web d'amministrazione. + +Poi vai su Strumenti > Cambia password amministrazione. + + +## Usando l'interfaccia a linea di comando + + +```bash +yunohost tools adminpw +``` diff --git a/pages/02.administer/50.troubleshooting/10.admin_password/change_admin_password.md b/pages/02.administer/50.troubleshooting/10.admin_password/change_admin_password.md new file mode 100644 index 00000000..1abba53a --- /dev/null +++ b/pages/02.administer/50.troubleshooting/10.admin_password/change_admin_password.md @@ -0,0 +1,28 @@ +--- +title: Changing the administration password +template: docs +taxonomy: + category: docs +routes: + default: '/change_admin_password' +--- + +You may want to change your administrator password for security reason or because you forgot it. + +If you forgot your password or are unable to connect using the `admin` user, you +may still be able to change the password if you're able to login as `root` on +SSH (from your local network! or using a rescue mode if you're on a VPS...) + +## Using the web administration interface + +First, connect to your web administration. + +Then go to Tools > Change administration password. + + +## Using the command line interface + + +```bash +yunohost tools adminpw +``` diff --git a/pages/02.administer/50.troubleshooting/15.noaccess/noaccess.fr.md b/pages/02.administer/50.troubleshooting/15.noaccess/noaccess.fr.md new file mode 100644 index 00000000..3102fc7b --- /dev/null +++ b/pages/02.administer/50.troubleshooting/15.noaccess/noaccess.fr.md @@ -0,0 +1,143 @@ +--- +title: Récupérer l'accès à son YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/noaccess' +--- + +Il existe de nombreuses causes pouvant empêcher totalement ou partiellement d'accéder en administrateur à un serveur YunoHost. Dans de nombreux cas, un des moyens d'accès est inaccessible, mais les autres sont fonctionnels. + +Cette page va vous aider à diagnostiquer, obtenir un accès et si besoin réparer votre système. Les pannes les plus courantes sont priorisées de haut en bas. Il vous suffit de tester chaque hypothèse. + + +## Vous avez accès au serveur via l'adresse IP, mais pas avec le nom de domaine ? + +#### Si vous êtes auto-hébergé à la maison : il faut configurer les redirection de ports + +Vérifier que vous arrivez à accéder au serveur en utilisant son IP globale (que vous pouvez trouver sur https://ip.yunohost.org). Si cela ne fonctionne pas: + - Assurez-vous d'avoir [configuré les redirections de ports](/isp_box_config) + - Certaines box de FAI ne supportent pas le hairpinning et vous ne pouvez pas accéder à votre serveur depuis l'intérieur du réseau local (sauf à passer par l'IP locale). Pour contourner le problème, vous pouvez utiliser un des moyens suivants: + - utiliser une connexion cellulaire (4/5G) + - modifier le fichier /etc/hosts sur vos équipements + - déclarer l'ip locale de yunohost comme resolveur DNS dans votre routeur (partie DHCP) et ouvrir le port 53 UDP sur votre yunohost en faisant attention de ne pas activer l'upnp sur le port 53. Surtout, n'ouvrez pas le port 53 de votre routeur. + +#### Il faut configurer vos enregistrement DNS + +(N.B.: ce n'est pas nécessaire si vous utilisez un domaine de type nohost.me, noho.st ou ynh.fr) + +Il vous faut configurer vos enregistrement DNS comme expliqué sur [cette page](/dns_config) (à minima l'enregistrement A, et AAAA si vous avez de l'IPv6). + +Vous pouvez valider que les enregistrements DNS sont corrects en comparant le résultat de https://www.whatsmydns.net/ avec l'IP globale de votre serveur (si vous êtes hébergé à la maison, vous pouvez obtenir cette IP sur https://ip.yunohost.org) + + +#### Autres causes possibles + +- Votre nom de domaine noho.st, nohost.me ou ynh.fr est inaccessible suite à une panne de l'infra YunoHost. Vérifiez sur le forum si d'autre personnes signalent le même problème. +- Votre nom de domaine est peut-être expiré. Vous pouvez vérifier que votre nom de domaine a expiré en vous connectant sur l'interface de votre registrar ou en utilisant le whois par exemple via la commande `whois NOM_DE_DOMAINE`. +- Vous avez une IP dynamique. Dans ce cas, il faut mettre en place un script qui se charge de mettre à jour régulièrement votre IP (ou d'utiliser un nom de domaine en nohost.me, noho.st ou ynh.fr qui inclue un tel mécanisme) + + +## Vous êtes face à une erreur de certificat qui vous empêche d’accéder à la webadmin + +Si vous venez d'installer votre serveur ou d'ajouter un nouveau domaine, il utilise pour le moment un certificat auto-signé. Dans ce cas, il devrait être possible et légitime d'ajouter *exceptionnellement* une exception de sécurité le temps d'[installer un certificat Let's Encrypt](/certificate) à condition d'être sur une connexion internet sûre (pas avec Tor Browser par exemple). + +Une erreur de certificat peut également être affichée dans certain cas où vous avez fait une faute de frappe dans la barre d'adresse de votre navigateur. + + +## Vous avez accès en SSH mais pas à la Web admin ou inversement + +#### Vous essayez de vous connecter en SSH avec `root` plutôt qu'avec `admin` + +Par défaut, la connexion en SSH doit s'effectuer avec l'utilisateur `admin`. Il est possible de se connecter à la machine avec l'utilisateur `root` *seulement depuis le réseau local* sur lequel se situe le serveur (ou bien via la console web / VNC pour des VPS). + +Lorsque vous exécutez des commandes `yunohost` en tant qu'admin, il faut les précéder de la commande `sudo` (par exemple `sudo yunohost user list`). Vous pouvez également devenir `root` en tapant `sudo su`. + +#### Vous avez été banni temporairement + +Votre serveur YunoHost inclut un mécanisme (Fail2Ban) qui banni automatiquement les IPs qui échouent plusieurs fois à s'authentifier. Dans certains cas, il peut s'agir d'un programme (par exemple un client Nextcloud) qui est configuré avec un ancien mot de passe ou d'un utilisateur qui utilise la même IP que vous. + +Si vous avez été banni en tentant d'accéder à une page web, seul les pages web sont inaccessibles, vous devriez donc pouvoir accéder au serveur en SSH. De même, si vous avez été banni en SSH vous devriez pouvoir accéder à la webadmin. + +Si vous avez été banni à la fois en SSH et à la webadmin, vous pouvez essayer d'accéder à votre serveur avec une autre IP, par exemple en utilisant la 4G d'un smartphone ou en utilisant Tor Browser. + +Voir aussi : [débannir une IP sur Fail2Ban](/fail2ban) + +NB : le bannissement dure en général 10 à 12 minutes. Le bannissement n'est actif qu'en IPv4. + + +#### Le serveur web NGINX est cassé + +Peut-être que le serveur web NGINX est en panne. Vous pouvez vérifier cela [en ssh](/ssh) avec `yunohost service status nginx`. Si il est en panne, vérifiez que la configuration ne comporte pas d'erreur avec `nginx -t`. Si la configuration est cassée, ceci est peut-être du à une l'installation ou désinstallation d'une application de mauvaise qualité... Si vous êtes perdu, [demandez de l'aide](/help). + +Il se peut également que le serveur web (NGINX) ou le serveur ssh aient été tués suite à un manque d'espace disque ou de RAM / swap. +- Tentez de relancer le service avec `systemctl restart nginx`. +- Vous pouvez contrôler l'espace disque utilisé avec `df -h`. Si une de vos partitions est remplie à 100%, il faut identifier ce qui prend de la place sur votre système et faire de la place. Il est possible d'installer l'utilitaire `ncdu` avec `apt install ncdu` puis de faire `ncdu /` pour analyser la taille des dossiers de toute l'arborescence. +- Vous pouvez contrôler l'utilisation de la RAM / swap avec `free -h`. En fonction des résultats, il peut être nécessaire d'optimiser votre serveur pour qu'il utilise moins de RAM (suppression d'app lourdes et inutiles...), d'ajouter de la RAM ou d'ajouter un fichier de swap. + +#### Votre serveur est accessible en IPv6 mais pas en IPv4 ou inversement + +Vous pouvez le vérifier en tentant de faire des ping sur votre serveur en IPv4 et en IPv6. + +Dans un tel cas, il est possible que vous arriviez à accéder à votre web admin en IPv6 mais pas en SSH potentiellement en IPv4 par défaut... + +Dans ce cas il faut résoudre votre problème de connectivité. + +Dans certains, cas une mise à jour de votre box a activé l'IPv6, entraînant des problèmes de configuration au niveau de votre nom de domaine. + + +## La webadmin fonctionne, mais certaines applications web me renvoient une erreur 502. + +Il est fort probablement que le service correspondant à ces applications soit en panne (typiquement pour les applications PHP, il s'agit de php7.0-fpm ou php7.3-fpm). Vous pouvez alors tenter de relancer le service, et si cela ne fonctionne pas, regarder les logs du service correspondant et/ou [demander de l'aide](/help). + + +## Vous avez perdu votre mot de passe administrateur ? (ou bien le mot de passe est refusé) + +Si vous arrivez à afficher la page web d'administration (forcez le rafraîchissement avec CTRL + F5 pour être sur) et que vous n'arrivez pas à vous connectez, vous avez probablement un mot de passe erroné. + +Si vous êtes certain du mot de passe, il est possible que le service SLAPD qui gère l'authentification soit en panne. Si c'est le cas, il vous faut vous connecter en `root`. +- Si votre serveur est chez vous, vous avez sans doute accès au réseau local du serveur. Depuis ce réseau, vous pouvez vous connecter [en SSH](/ssh) avec l'utilisateur `root`. +- Si vous êtes sur un VPS, votre hébergeur vous fournit peut-être la possibilité d'avoir une console sur votre serveur depuis le navigateur web. +Une fois connecté, il vous faut regarder l'état du service avec la commande `yunohost service status slapd` et/ou tenter de réinitialiser votre mot de passe avec la commande `yunohost tools adminpw`. + +Si vous ne pouvez pas ou ne réussissez pas non plus à vous connecter en `root`, vous allez devoir opérer en mode rescue. + +TODO: à compléter + + +## Votre VPN a expiré ou ne se monte plus + +Si vous utilisez un VPN a IP fixe, peut être que celui-ci est arrivé à expiration ou que l'infrastructure de votre fournisseur est en difficulté. + +Dans ce cas, vous pouvez peut être accéder à votre serveur avec son IP locale s'agissant probablement d'un serveur auto-hébergé chez-vous. + +Pour connaître votre IP locale, certaines BOX proposent une cartographie du réseau en cours avec les équipements connectés. Sinon, en ligne de commande avec linux: +```bash +sudo arp-scan --local +``` + +Vous pouvez aussi essayer avec le domaine `yunohost.local`, `yunohost-2.local`, etc. selon le nombre de serveurs YunoHost sur votre réseau. + +Il faut voir avec votre fournisseur de VPN pour renouveler le VPN et mettre à jour les paramètre de l'app VPN Client. + +TODO : à compléter + +## Votre serveur est coincé au démarrage + +Dans certains cas, votre serveur peut rester coincé au démarrage. Il peut s'agir d'un problème suite à l'installation d'un nouveau kernel. Essayez de choisir un autre kernel avec VNC ou avec l'écran lors du boot. + +Si vous êtes en mode `rescue` avec `grub`, dans ce cas il peut s'agir d'un problème de configuration de `grub` ou d'un disque corrompu. + +Dans ce cas il faut accéder au disque avec un autre système (mode `rescue` du fournisseur, live USB, lire la carte SD ou le disque dur avec un autre ordinateur) et essayer de vérifier l'intégrité des partitions avec `smartctl`, `fsck` et `mount`. + +Si les disques sont corrompus et difficiles à monter, il faut sauvegarder les données et potentiellement refaire un formatage/réinstaller et/ou changer le disque. Si on arrive à monter le disque, il est possible d'utiliser `systemd-nspawn` pour entrer dans la base de données. + +Sinon, relancer `grub-update` et `grub-install` en `chroot` ou avec `systemd-nspawn`. + + +## L’accès en VNC ou via écran ne fonctionne pas + +Dans ce cas il peut s'agir d'un problème matériel sur votre serveur physique ou d'un problème d'hyperviseur si c'est un VPS. + +Si c'est une machine louée contactez le support de votre fournisseur. Sinon, essayez de dépanner votre machine en retirant les composants qui peuvent être en panne. diff --git a/pages/02.administer/50.troubleshooting/15.noaccess/noaccess.it.md b/pages/02.administer/50.troubleshooting/15.noaccess/noaccess.it.md new file mode 100644 index 00000000..bef33fc9 --- /dev/null +++ b/pages/02.administer/50.troubleshooting/15.noaccess/noaccess.it.md @@ -0,0 +1,133 @@ +--- +title: Riottenere l'accesso a YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/noaccess' +--- + +Ci possono essere diverse ragioni che possono portare al blocco parziale o totale degli accessi a amministratore ad un server YunoHost. Spesso però se un metodo di accesso è bloccato altri sono possibili. + +Questa pagina cercherà di trovare il problema, riottenere l'accesso ed eventualmente riparare il vostro sistema. Le cause più comuni sono all'inizio per cui siete invitati a seguire questo tutorial dall'inizio. + +## Hai l'accesso al server usando l'indirizzo IP locale ma non dal nome di dominio. + +#### Se il server è self-hosted a casa: controlla il port forwarding + +Controlla di riuscire ad accedere al server usando l'IP pubblico (lo puoi trovare su [https://ip.yunohost.org](https://ip.yunohost.org)). Se questo non funziona: + - Assicurati di aver [impostato il forwarding](/isp_box_config). + - Alcuni ISP non supportano l'*hairpinning*, cosa che ti impedirà di raggiungere il tuo server dal nome di dominio dalla rete locale. Nel caso puoi usare una connessione cellulare o modificare il file `hosts` del tuo computer in modo da associare il nome di dominio all'indirizzo IP locale invece che a quello pubblico. + +#### Configura i record DNS + +! Questo non è un problema se stai usando un dominio fornito da `nohost.me`, `noho.st` or `ynh.fr` + +Devi configurare i tuoi [record DNS](/dns_config) (come minimo i record `A` e `AAAA` se usi una connessione IPv6). + +Puoi verificare la correttezza dei record DNS confrontando i risultati dati da [questo servizio](https://www.whatsmydns.net/) con l'[IP restituito dal nostro servizio](https://ip.yunohost.org). + +#### Altre probabili cause + +- Il tuo dominio `noho.st`, `nohost.me` o `ynh.fr` non è raggiungibile a causa di un problema nell'infrastruttura di YunoHost. Controlla il [forum](https://forum.yunohost.org/) per annunci o post di persone relativi allo stesso problema. +- Il tuo nome di dominio potrebbe essere scaduto. Controlla la pagina del registrar usato per la registrazione oppure usa il comando `whois yourdomain.tld`. +- Stai usando un indirizzo IP dinamico. In questo caso è necessario impostare uno script o usare un client appositi per aggiornare con regolarità questo indirizzo. Leggi la pagina [DNS with a dynamic IP](/dns_dynamicip) per vedere come. Puoi usare anche un dominio `nohost.me`, `noho.st` o `ynh.fr` che comprende queste opzioni. + +## Stai ricevendo un errore sul certificato che non ti permette di raggiungere la pagina di amministrazione + +- Un errore sul certificato può essere visualizzato nel caso in cui hai scritto male l'indirizzo nella barra del browser. + +- Sei hai appena installato il tuo server o un nuovo dominio stai usando un certificato auto-firmato. In questo caso è possibile e comprensibile aggiungere una eccezione di sicurezza *temporanea* in modo che sia possibile [installare un certificato Let's Encrypt](/certificate), ammesso che tu abbian una connessione Internet sicura. + +## Puoi accedere via SSH ma non dalla pagina di amministrazione o l'inverso + +#### Stai provando a loggarti via SSH come `root` invece che con l'utente `admin` + +Di default è possibile loggarsi via SSH solo come `admin`. È possibile loggarsi come `root` *solo dall'interno della rete locale del server*. Se il server è su una VPS la console web o VNC fornita dal provider DPS dovrebbe funzionare. + +Se stai provando ad avviare i comandi `yunohost` dalla riga di comando come `admin` è necessario avviarlo preceduto dal comando `sudo` (ad esempio `sudo yunohost user list`). È possibile diventare `root` anche con il comando `sudo su`. + +#### Sei stato bannato temporaneamente + +Il tuo server YunoHost include il servizio Fail2Ban che banna automaticamente gli indirizzi IP che falliscono più volte di seguito. In alcuni casi possono essere programmi configurati con password vecchie (ad esempio client Nextcloud) oppure un utente che ha il tuo stesso IP. + +Se sei stato bannato provando ad accedere ad una pagina web sarà irraggiungibile solo questa e potrai collegarti al tuo server via SSH. Viceversa se sei stato bannati da SSH la pagina di amministrazione funzionerà. + +Se sei stato bannato sia da SSH che dalla pagina di amministrazione puoi provare a raggiungere il tuo server attraverso un altro indirizzo IP. Ad esempio puoi provare a collegarti usando la connessione cellulare del tuo telefono, attraverso una VPN, Tor o un altro proxy. + +Vedi anche: [togliere il ban ad un indirizzo](/fail2ban) + +!!!! I ban normalmente durano dai 0 ai 12 minuti e solo su IPv4. + +#### Il server web NGINX non funziona + +Può essere che il server web NGINX non stia funzionando. + +Maybe the NGINX web server is out of order. You can check that [trough SSH](/ssh) with the command `yunohost service status ssh`. If it is failinf, check that its configuration is correct by running `nginx -t`. If it is indeed broken, it may be due to the installation or removal of a low-quality app... If you need support, [ask for it](/help). + +The NGINX or SSH servers may have been killed due to a lack of storage space, RAM, or swap. + +- Try restarting the service with `systemctl restart nginx`. +- You can check used storage with `df -h`. If one of your partitions is full, you need to identify what fills it and make rooù. You can use `ncdu` command (install it with `apt install ncdu` to browse from the root directory: `ncdu /` +- You can check RAM and swap usage with `free -h`. Depending on the result, it may be necessary to optimize your server to use less RAM (removal of heavy or unused apps...), add more RAM or add a swap file. + +#### Your server is reachable by IPv6, but not IPv4, or inversely + +You can check that by `ping`ing it: + +```bash +ping -4 yourdomain.tld # or its IPv4 +ping -6 yourdomain.tld # or its IPv6 +``` + +If one of the two is working, use it to connect by SSH or the webadmin. + +If none are working, you need to resolv your connection issue. In some cases, an update of your router may have enabled IPv6 and DNS configuration may be disrupted. + +## Webadmin is working, but some web apps are returning 502 errors. + +It is highly probable that the underlying service for these apps is failing (e.g. PHP apps requiring `php7.0-fpm` or `php7.3-fpm`). You can then try to restart the services, and/or ask for [help](/help) + +## You have lost your admin password, or the password is seemingly wrong + +If you can reach the webadmin login page (force reload with `CTRL + F5` to be sure), and you cannot log in, your password is probably wrong. + +If yoy are sure of your passord, it may be due to the `slapd` service failing. If that's the case, log into the server by SSH as `root`. +- If your server is at home, you most likely have access to the local network. From this network, you can follow the [SSH instructions](/ssh)`. +- If your server is a VPS, your provider may offer a web console. + +Once logged in, you have to check the state of the service with `yunohost service status slapd` and/or reset your admin password with `yunohost tools adminpw`. + +If this is still failing, on a VPS you may be able to reboot in rescue mode. Do not hesitate to ask for [help](/help) + +!!! To be completed. + +## Your VPN expired or does not connect any more + +If you have a VPN with fixed IP, maybe it has expired, or the provider's infrastructure is failing. + +In that case, contact your VPN provider to renew it and update the parameters of the VPN Client app. + +Meanwhile, try reaching your server if it is at home, by: +- its local IP, retrievable from your router configuration panel or `sudo arp-scan --local` +- reaching it at `yunohost.local`, if it is at home and that you have only one YunoHost server in your network. + +!!! To be completed. + +## Your server does not boot + +In some cases your server may be stuck at boot. It may come from a new, buggy, kernel. Try changing to another kernel on the boot screen (via VNC for VPS). + +If you are in "rescue" mode with `grub`, it may be due a misconfiguration of `grub`, or a corrupted drive. + +In that case, access the storage drive from another system (your provider's "rescue" mode, live USB drive, read the SD or drive on another computer) and try to check partitions integrity with `smartctl`, `fsck`, and `mount`. + +If disks are corrupted or hard to miunt, you have to save your data and maybe reformat, reinstall, and/or change the drive. If you succeed in mounting the drive, you can use `systemd-nspawn` to access its database. + +Otherwise, run `grub-update`, `grub-install` again with `chroot` or with `systemd-nspawn`. + +## VNC or screen access does not work + +It may be due hardware issue on your server, or with the hypervisor if it is on a VPS. + +If you are renting your server, contact the support of your provider. Otherwise, try fixing your machine by replacing failing components. diff --git a/pages/02.administer/50.troubleshooting/15.noaccess/noaccess.md b/pages/02.administer/50.troubleshooting/15.noaccess/noaccess.md new file mode 100644 index 00000000..1e283e0d --- /dev/null +++ b/pages/02.administer/50.troubleshooting/15.noaccess/noaccess.md @@ -0,0 +1,131 @@ +--- +title: Get access back into YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/noaccess' +--- + +There are several reasons that could lead to one administrator's access being partially or completely blocked off their YunoHost server. In numerous cases, one of the access methods is blocked, but others are not. + +This page will help you diagnose the issue, get back access, and if needed repair your system. Most common causes are listed first, so follow the tutorial from top to bottom. + +## You have access to the server with its local IP address, but not its domain name. + +#### If you are self-hosted at home: fix ports forwarding + +Check that you are getting access to the server by using its public IP (you can find at [https://ip.yunohost.org](https://ip.yunohost.org). If this does not work: + - Make sure you have [set up forwarding](/isp_box_config) + - Some ISP routers do not support *hairpinning*, which prevents you from reaching your server by its domain name from within your local network. If so, you can use a cellular connection, or tweak your `hosts` file on your computer to make it bind your domain name to the local IP address instead of the public one. + +#### Configure DNS records + +! This is not a problem if you are using a domain from `nohost.me`, `noho.st` or `ynh.fr`) + +You have to configure your [DNS records](/dns_config) (at least `A` records, and `AAAA` if you have an IPv6 connection). + +You can check that the DNS records are correct by comparing the results given by [this service](https://www.whatsmydns.net/) with the [IP given by our service](https://ip.yunohost.org). + +#### Other probable causes + +- You domain `noho.st`, `nohost.me`, or `ynh.fr` is unreachable following a failure on YunoHost's infrastructure. Check the [forum](https://forum.yunohost.org/) for announcements or people posting about the same issue. +- Your domain name may be expired. Check that on your registrar's client panel, or by using the command `whois yourdomain.tld`. +- You have a dynamic IP address. In that case, you need to set up a script or a client that takes care of regularly update it. Refer to the page on [DNS with a dynamic IP](/dns_dynamicip) to see how. You can also use a domain `nohost.me`, `noho.st` or `ynh.fr` that includes this features. + +## You are getting a certificate error that prevents you from reaching the webadmin + +- A certificate error may be displayed if you have made a typo in the address bar of your browser. + +- If you have just installed your server, or just installed a new domain, it uses a self-signed certificate. In that case, it is possible and understandable to add a *temporary* security exception so that you can [install a Let's Encrypt certificate](/certificate), provided you have a secure Internet connection. + +## You have access via SSH but not via the webadmin, or inversely + +#### You are trying to log in with SSH as `root` instead of `admin` user. + +By default, SSH connection has to be made as `admin`. It possible to log into the server as `root` *only from the local network of the server*. If your server is a VPS, the web console or VNC provided by VPS providers may work. + +If you are running `yunohost` commands in the CLI as `admin`, you have to call them with `sudo` before (for example `sudo yunohost user list`). You can also become `root` by running `sudo su`. + +#### You have been temporarily banned + +Your YunoHost server includes a service, Fail2ban, which automatically bans IPs that fail several times in a row to log in. In some cases it can be software (e.g. Nextcloud client) that are confifured with an old password, or a user who has the same IP as you have. + +If you have been banned while trying to access a web page, and only web pages are unreachable, you may have access to your server via SSH. Similarly, if you have been banned from SSH, webadmin access may work. + +If you have been banned from both SSH and webadmin, you can try to reach your server through another IP address. For example through the cellular network of your phone, a VPN, Tor, or another proxy. + +See also : [unban an IP on Fail2Ban](/fail2ban) + +!!!! Ban are usually 10 to 12-minute-long, and on IPv4 only. + +#### NGINX web server is broken + +Maybe the NGINX web server is out of order. You can check that [trough SSH](/ssh) with the command `yunohost service status nginx`. If it is failing, check that its configuration is correct by running `nginx -t`. If it is indeed broken, it may be due to the installation or removal of a low-quality app... If you need support, [ask for it](/help). + +The NGINX or SSH servers may have been killed due to a lack of storage space, RAM, or swap. + +- Try restarting the service with `systemctl restart nginx`. +- You can check used storage with `df -h`. If one of your partitions is full, you need to identify what fills it and make room. You can use `ncdu` command (install it with `apt install ncdu` to browse from the root directory: `ncdu /` +- You can check RAM and swap usage with `free -h`. Depending on the result, it may be necessary to optimize your server to use less RAM (removal of heavy or unused apps...), add more RAM or add a swap file. + +#### Your server is reachable by IPv6, but not IPv4, or inversely + +You can check that by `ping`ing it: + +```bash +ping -4 yourdomain.tld # or its IPv4 +ping -6 yourdomain.tld # or its IPv6 +``` + +If one of the two is working, use it to connect by SSH or the webadmin. + +If none are working, you need to resolv your connection issue. In some cases, an update of your router may have enabled IPv6 and DNS configuration may be disrupted. + +## Webadmin is working, but some web apps are returning 502 errors. + +It is highly probable that the underlying service for these apps is failing (e.g. PHP apps requiring `php7.0-fpm` or `php7.3-fpm`). You can then try to restart the services, and/or ask for [help](/help) + +## You have lost your admin password, or the password is seemingly wrong + +If you can reach the webadmin login page (force reload with `CTRL + F5` to be sure), and you cannot log in, your password is probably wrong. + +If yoy are sure of your passord, it may be due to the `slapd` service failing. If that's the case, log into the server by SSH as `root`. +- If your server is at home, you most likely have access to the local network. From this network, you can follow the [SSH instructions](/ssh)`. +- If your server is a VPS, your provider may offer a web console. + +Once logged in, you have to check the state of the service with `yunohost service status slapd` and/or reset your admin password with `yunohost tools adminpw`. + +If this is still failing, on a VPS you may be able to reboot in rescue mode. Do not hesitate to ask for [help](/help) + +!!! To be completed. + +## Your VPN expired or does not connect any more + +If you have a VPN with fixed IP, maybe it has expired, or the provider's infrastructure is failing. + +In that case, contact your VPN provider to renew it and update the parameters of the VPN Client app. + +Meanwhile, try reaching your server if it is at home, by: +- its local IP, retrievable from your router configuration panel or `sudo arp-scan --local` +- reaching it at `yunohost.local`, or `yunohost-2.local`, etc. depending on how many YunoHost servers are on your network. + +!!! To be completed. + +## Your server does not boot + +In some cases your server may be stuck at boot. It may come from a new, buggy, kernel. Try changing to another kernel on the boot screen (via VNC for VPS). + +If you are in "rescue" mode with `grub`, it may be due a misconfiguration of `grub`, or a corrupted drive. + +In that case, access the storage drive from another system (your provider's "rescue" mode, live USB drive, read the SD or drive on another computer) and try to check partitions integrity with `smartctl`, `fsck`, and `mount`. + +If disks are corrupted or hard to mount, you have to save your data and maybe reformat, reinstall, and/or change the drive. If you succeed in mounting the drive, you can use `systemd-nspawn` to access its database. + +Otherwise, run `grub-update`, `grub-install` again with `chroot` or with `systemd-nspawn`. + +## VNC or screen access does not work + +It may be due hardware issue on your server, or with the hypervisor if it is on a VPS. + +If you are renting your server, contact the support of your provider. Otherwise, try fixing your machine by replacing failing components. diff --git a/pages/02.administer/50.troubleshooting/20.ipv6/ipv6.fr.md b/pages/02.administer/50.troubleshooting/20.ipv6/ipv6.fr.md new file mode 100644 index 00000000..eadb2cae --- /dev/null +++ b/pages/02.administer/50.troubleshooting/20.ipv6/ipv6.fr.md @@ -0,0 +1,55 @@ +--- +title: Configuration de l'IPv6 +template: docs +taxonomy: + category: docs +routes: + default: '/ipv6' +--- + +L'IPv6 peut fonctionner directement dans certains cas. Mais dans d'autres, ou chez certains hébergeurs spécifiques, vous devez activer l'IPv6 manuellement. + +## Avec un VPS chez OVH + +OVH donne une adresse IPv4 et une IPv6 pour ses VPS, mais par défaut, seule l'IPv4 fonctionne. +La documentation d'OVH à ce sujet est ici : https://docs.ovh.com/fr/vps/configurer-ipv6/ + +### Configurer le serveur DNS + +Ici : https://yunohost.org/#/dns_subdomains + +### Configurer le serveur + +Sur le panneau de gestion d'OVH, vous aller récupérer 3 informations : +- l'adresse IPv6 du serveur +- l'adresse passerelle IPv6 +- le préfixe IPv6. Les offres VPS SSD d'OVH ne fournissent qu'**une** seule adresse IPV6, le préfixe est donc `/128` + +Sur votre VPS, vous aller créer une sauvegarde de votre fichier de configuration des interfaces réseau dans votre répertoire home avec la commande : `cp /etc/network/interfaces ~/interfaces`. + +2 possibilités pour inscrire vos données ipv6 : +1/ vous pouvez modifier le fichier de configuration `/etc/network/interfaces` +2/ vous pouvez créer un autre fichier "à part" par la commande `sudo nano /etc/network/interfaces.d/ovh-ipv6.cfg` (ce dernier fichier est pris en compte car appartenant au dossier) + +! Découvrir et vérifier avec la commande `ip a` l'interface utilisée sur votre VPS ( généralement du type ENS3 chez OVH) +! Dans cet exemple, nous considérons que votre interface réseau est `eth0`. Vous devez adapter l'exemple pour correspondre à votre situation. + +```plaintext +iface eth0 inet6 static +address +netmask +post-up /sbin/ip -6 route add dev eth0 +post-up /sbin/ip -6 route add default via dev eth0 +pre-down /sbin/ip -6 route del default via dev eth0 +pre-down /sbin/ip -6 route del dev eth0 +``` + +Maintenant, enregistrez le fichier et redémarrez les services réseau avec : `service networking restart`. (TODO : ideally we should find a way to validate the content of the configuration, otherwise it could fuck up the network stack and get disconnected from the VPS ?) + +Vérifiez votre configuration avec les commandes : +- `ip a` pour afficher les adresses IP des interfaces +- `hostname -I` pour afficher les adresses IP du système +- essayez de faire un test de `ping` sur un serveur IPv6 (vous pouvez utiliser `ping6 ipv6.yunohost.org`) +- essayez de faire un test de `ping` sur votre server depuis votre PC (cela exige que votre PC puisse utiliser l'IPv6) + +Et voilà ! diff --git a/pages/02.administer/50.troubleshooting/20.ipv6/ipv6.it.md b/pages/02.administer/50.troubleshooting/20.ipv6/ipv6.it.md new file mode 100644 index 00000000..a83d0c3d --- /dev/null +++ b/pages/02.administer/50.troubleshooting/20.ipv6/ipv6.it.md @@ -0,0 +1,51 @@ +--- +title: Impostare IPv6 +template: docs +taxonomy: + category: docs +routes: + default: '/ipv6' +--- + +IPv6 dovrebbe funzionare automaticamente in molti casi ma in alcune situzioni o con alcuni provider può essere necessario configurare alcune impostazioni direttamante per abilitarlo. + +## Usando una VPS di OVH + +OVH fornisce un indirizzo IPv4 e uno IPv6 ma di default funziona solo il primo. +La documentazione di OVH la puoi trovare qui: https://docs.ovh.com/gb/en/vps/configuring-ipv6/ + +### Configurare il server DNS + +Qui : https://yunohost.org/#/dns_subdomains + +### Configurare il server + +Nella pagina di configurazione di OVH dovrai copiare questi 3 elementi: +- l'indirizzo IPv6 +- l'indirizzo del gateway IPv6 +- il prefisso IPv6. Nelle VPS SSD di OVH i prefissi sono `/128` perché hai a disposizione solo *uno* indirizzo IPv6. + +Nella tua VPS crea un backup della configurazione di rete con il comando: `cp /etc/network/interfaces ~/interfaces` nella directory home. +Poi puoi modificare il file di configurazione (`/etc/network/interfaces`) come indicato di seguito. Considera però che: + +! In questo esempio si assume che il nome della tua interfaccia di rete sia `eth0`. Nel caso invece che sia differente (controlla con il comando `ip a`) devi adattare di conseguenza l'esempio qui sotto. + +```plaintext +iface eth0 inet6 static +address +netmask +post-up /sbin/ip -6 route add dev eth0 +post-up /sbin/ip -6 route add default via dev eth0 +pre-down /sbin/ip -6 route del default via dev eth0 +pre-down /sbin/ip -6 route del dev eth0 +``` + +Now, save the file and restart the network service with : `service networking restart`. (TODO : ideally we should find a way to validate the content of the configuration, otherwise it could fuck up the network stack and get disconnected from the VPS ?) + +Check your configuration with these commands : +- `ip a` to display network interfaces and addresses +- `hostname -I` to display the system IP addresses +- try to ping an IPv6 server (for example you can use `ping6 ip6.yunohost.org`) +- try to ping your server from your PC (assuming your PC has IPv6 enabled) + +If it's ok, it's ok ! diff --git a/pages/02.administer/50.troubleshooting/20.ipv6/ipv6.md b/pages/02.administer/50.troubleshooting/20.ipv6/ipv6.md new file mode 100644 index 00000000..8cc8efc8 --- /dev/null +++ b/pages/02.administer/50.troubleshooting/20.ipv6/ipv6.md @@ -0,0 +1,51 @@ +--- +title: Setting up IPv6 +template: docs +taxonomy: + category: docs +routes: + default: '/ipv6' +--- + +IPv6 may work out of the box in many cases. But in some cases or some specific provider, you may need to tweak things manually to enable IPv6. + +## With a VPS from OVH + +OVH gives one IPv4 address and one IPv6 address for VPS but by default, only IPv4 is OK. +The OVH's documentation is here : https://docs.ovh.com/gb/en/vps/configuring-ipv6/ + +### Configure the DNS server + +Here : https://yunohost.org/#/dns_subdomains + +### Configure the server + +On the OVH panel, you will copy 3 elements: +- the IPv6 address +- the IPv6 gateway address +- the IPv6 prefix. On OVH's VPS SSD, prefixes are `/128` because you have only *one* IPv6 address. + +On your VPS, create a backup of the network configuration with : `cp /etc/network/interfaces ~/interfaces` in home directory. +Then, you can edit the configuration file (`/etc/network/interfaces`) with the following. + +! In this example, it is assumed that your network interface is `eth0`. If it's different (check with `ip a`) you need to adapt the example below. + +```plaintext +iface eth0 inet6 static +address +netmask +post-up /sbin/ip -6 route add dev eth0 +post-up /sbin/ip -6 route add default via dev eth0 +pre-down /sbin/ip -6 route del default via dev eth0 +pre-down /sbin/ip -6 route del dev eth0 +``` + +Now, save the file and restart the network service with : `service networking restart`. (TODO : ideally we should find a way to validate the content of the configuration, otherwise it could fuck up the network stack and get disconnected from the VPS ?) + +Check your configuration with these commands : +- `ip a` to display network interfaces and addresses +- `hostname -I` to display the system IP addresses +- try to ping an IPv6 server (for example you can use `ping6 ip6.yunohost.org`) +- try to ping your server from your PC (assuming your PC has IPv6 enabled) + +If it's ok, it's ok ! diff --git a/pages/02.administer/50.troubleshooting/25.unblacklisting/blacklist_forms.fr.md b/pages/02.administer/50.troubleshooting/25.unblacklisting/blacklist_forms.fr.md new file mode 100644 index 00000000..d45f637e --- /dev/null +++ b/pages/02.administer/50.troubleshooting/25.unblacklisting/blacklist_forms.fr.md @@ -0,0 +1,30 @@ +--- +title: Formulaires de retrait de liste noire +template: docs +taxonomy: + category: docs +routes: + default: '/blacklist_forms' +--- + +Il peut arriver que votre serveur (son adresse IP) soit ajouté à la liste noire de certains fournisseurs d’adresse de courrier électronique ou de services anti-spam. Les courriels envoyés à ces adresses sont alors filtrés et n’arrivent pas à destination. + +#### Testez votre serveur +Pour tester si votre serveur est sur une liste noire, vous pouvez utiliser les outils suivants : +* [Test en envoyant un email](https://www.mail-tester.com) +* [Test à partir de l’adresse IP](http://whatismyipaddress.com/blacklist-check) + +Le cas échéant, voici certains des formulaires vous permettant de retirer votre adresse IP de ces listes : + +##### Fournisseurs Email + +* [Microsoft](https://support.microsoft.com/en-us/getsupport?oaspworkflow=start_1.0.0.0&wfname=capsub&productkey=edfsmsbl3&locale=en-us) +* [GMail](https://support.google.com/mail/contact/msgdelivery) + +##### Services anti-spam + +* [SpamHaus](http://www.spamhaus.org/lookup) + +Si le fournisseur vous concernant n’apparaît pas dans la liste, cherchez le formulaire adéquat, il existe probablement. + + diff --git a/pages/02.administer/50.troubleshooting/25.unblacklisting/blacklist_forms.it.md b/pages/02.administer/50.troubleshooting/25.unblacklisting/blacklist_forms.it.md new file mode 100644 index 00000000..a47867aa --- /dev/null +++ b/pages/02.administer/50.troubleshooting/25.unblacklisting/blacklist_forms.it.md @@ -0,0 +1,27 @@ +--- +title: Form per togliersi dalle blacklist +template: docs +taxonomy: + category: docs +routes: + default: '/blacklist_forms' +--- + +Può succedere talvolta che il tuo IP venga inserito nelle blacklist da parte di alcuni provider di email o da servizi anti-spam. + +## Prova il tuo server + +* [Prova mandando un email](https://www.mail-tester.com) +- [Prova da un indirizzo IP](http://whatismyipaddress.com/blacklist-check) + +Di seguito vengono elencati alcuni form che possono aiutarti a far rimuovere il tuo indirizzo IP da queste liste + +## Provider email + +* [Microsoft](https://support.microsoft.com/en-us/getsupport?oaspworkflow=start_1.0.0.0&wfname=capsub&productkey=edfsmsbl3&locale=en-us) +* [GMail](https://support.google.com/mail/contact/msgdelivery) + +## Servizi anti-spam + +* [SpamHaus](http://www.spamhaus.org/lookup) +* http://whatismyipaddress.com/blacklist-check diff --git a/pages/02.administer/50.troubleshooting/25.unblacklisting/blacklist_forms.md b/pages/02.administer/50.troubleshooting/25.unblacklisting/blacklist_forms.md new file mode 100644 index 00000000..3670bcf6 --- /dev/null +++ b/pages/02.administer/50.troubleshooting/25.unblacklisting/blacklist_forms.md @@ -0,0 +1,66 @@ +--- +title: Unblacklisting forms +template: docs +taxonomy: + category: docs +routes: + default: '/blacklist_forms' +--- + +It could happen sometimes that your IP is blacklisted by some email provider, or anti-spam services. If you receive an alert from the diagnosis tool, click on details to find the unblocking forms. + +## Test your server + +To check your Email deliverability, YunoHost provide some tests avilables in the Diagnosis tool. This tools evalutes a lot of configuration and ip reputation points. It gives you also an indicator if some mails are blocked inside the mail queue (waiting to be sent). +all the points evaluated by [the well known mail-tester.com](https://www.mail-tester.com) except for mail content (usefull if you prepare a newsletter). + +However, if you have a doubt on the internal diagnosis results, you could check on external tools: +- by sending an emails : [Mail tester](https://www.mail-tester.com) +- by providing the public ip : [MultiRBL Valli](https://multirbl.valli.org/) or [Whatismyip](https://whatismyipaddress.com/blacklist-check) + +## Check your mail logs + +This command can help you to summarize which emails has been refused by other SMTP server and why. + +``` +cat /var/log/mail.log | grep "deferred" | sed -E "s/(:[0-9][0-9]).+.+dsn/\terror/g" | sed -E "s/, status=deferred \(/ /g" | sed -E "s/\)$//g" +``` + +See [the list of SMTP return code](https://en.wikipedia.org/wiki/List_of_SMTP_server_return_codes) from wikipedia. + +## Untestable email providers +YunoHost is only able to test generic blacklist using the DNS RBL mechanism. However, Gmail, Microsoft, Yahoo or Free maintains their own blacklisting mechanism, so in some situation you may need to contact their teams through dedicated forms or use dedicated tools. + +### Microsoft + +* No way to test easily IP reputation +* [Microsoft guide for postmaster](https://sendersupport.olc.protection.outlook.com/pm/) +* [Information about SMTP return code from Microsoft](https://sendersupport.olc.protection.outlook.com/pm/troubleshooting.aspx#Codes) +* Reputation Management tools : + * [Junk Email Reporting Program (JMRP)](https://postmaster.live.com/snds/JMRP.aspx) + * [Smart Network Data Services (SNDS)](https://postmaster.live.com/snds/index.aspx) +* [Get support form for deliverability issues](https://support.microsoft.com/supportrequestform/8ad563e3-288e-2a61-8122-3ba03d6b8d75) (Sadly you need a Microsoft account :/ ) + +### Gmail +* No way to test easily IP reputation +* [Google guide for postmaster](https://support.google.com/a/topic/1354753) +* [Information about SMTP return code from Google](https://support.google.com/a/answer/3726730) +* Reputation Management tools : [Google Postmaster Tools](https://postmaster.google.com) +* [Get support form for deliverability issues](https://support.google.com/mail/contact/bulk_send_new) + +### Yahoo +* No way to test easily IP reputation +* [Yahoo guide for postmaster](https://senders.yahooinc.com/best-practices) +* [Information about SMTP return code from Yahoo](https://senders.yahooinc.com/smtp-error-codes) +* Reputation Management tools : [Complaint Feedback Loop](https://io.help.yahoo.com/contact/index?page=contactform&locale=en_US&token=Zh%2FBBVqXzLHlIbokbUqVWTUbuuQeXGkGnZzhKR2JQ4O6mMQdy9JSWdtWFXvjthcYCRj9bUIFfycOfG%2B4GOHPHoOGa8HwDO2%2B0kYRtTcdR8Nja5P9HWkKh3VWfS3pyu4UdjhvwG%2BBCvnYFl5dToDK%2Fw%3D%3D&selectedChannel=email-icon) +* [Get support form for deliverability issues](https://senders.yahooinc.com/contact) + +### Free +You can find a tool to test your IP, advices, explanation of error code and a way to contact Free on [this page](https://postmaster.free.fr/) + +## Get alert about emails sent without SPF or DKIM +If you use your own domains and think that some mails are sent by unauthorized servers (so without SPF/DKIM), you get report about this mail with. +``` +_dmarc.DOMAIN 3600 IN TXT "v=DMARC1; p=none; fo=1; rua=mailto:example@domain.tld!10m" +``` + diff --git a/pages/02.administer/50.troubleshooting/troubleshooting.fr.md b/pages/02.administer/50.troubleshooting/troubleshooting.fr.md new file mode 100644 index 00000000..f933f200 --- /dev/null +++ b/pages/02.administer/50.troubleshooting/troubleshooting.fr.md @@ -0,0 +1,26 @@ +--- +title: Dépannage +template: docs +taxonomy: + category: docs +routes: + default: '/troubleshooting' +--- + +Voici quelques conseils généraux à suivre lorsque vous rencontrez des problèmes avec votre serveur. + +## 0. Ne paniquez pas + +Restez calme. La plupart des problèmes sont moins grave que ce que les débutants pensent. Pour l'amour de Dieu (ou de votre déité, animal, nourriture préférée), ne sautez pas à pieds joint dans la "spirate de réinstallation" en pensant que réinstaller à partir de zéro va magiquement résoudre vos problèmes. Réinstaller est une opération lourde et n'est pas une bonne stratégie sur le long-terme pour résoudre les problèmes. Vous finirez par vous lasser et n'apprendrez rien. + +## 1. Regardez sur le forum ou bugtrackers si quelqu'un a eu un problème similaire. + +Cherchez dans [le forum](https://forum.yunohost.org) des fils de discussions qui discutent de choses similaire aux problème que vous rencontrez. Si vous avez un soucis lié à une application en particulier, vous pouvez également tenter de chercher un ticket similaire sur le bugtracker de l'application, par exemple [ici se trouve le bugtracker de l'app wordpress](https://github.com/YunoHost-Apps/wordpress_ynh/issues). + +## 2. Demandez de l'aide + +Soit sur [le forum](https://forum.yunohost.org) ou bien le chat : c.f. [cette page](/help) + +!!! POUR L'AMOUR DE DIEU, PRIÈRE DE fournir du contexte ! Les bénévoles ne peuvent PAS vous aider si vous ne prenez pas *cinq* petites minutes pour décrire votre contexte : quel type de hardware, quelle version de YunoHost, qu'est-ce que vous essayez de faire, ce qui s'est passé, et **les journaux (logs) correspondants**. + + diff --git a/pages/02.administer/50.troubleshooting/troubleshooting.it.md b/pages/02.administer/50.troubleshooting/troubleshooting.it.md new file mode 100644 index 00000000..3d8f1186 --- /dev/null +++ b/pages/02.administer/50.troubleshooting/troubleshooting.it.md @@ -0,0 +1,26 @@ +--- +title: Soluzione dei problemi +template: docs +taxonomy: + category: docs +routes: + default: '/troubleshooting' +--- + +Di seguito alcuni consigli generali per risolvere problemi con il vostro server. + +## 0. Don't panic. + +Mantenete la calma. La maggior parte dei problemi sono meno gravi di quanto pensa chi è alle prime armi. Per amor di Dio (o le vostre divinità preferite / animali / cibo), non cadete nella "spirale della reinstallazione" presupponendo che reinstallare il vostro server da capo possa risolvere magicamente i problemi. La reinstallazione è un'operazione gravosa e non è una buona strategia per risolvere i problemi. Ti stancherai e non imparerai niente. + +## 1. Cerca problemi simili nel forum o nei bugtrackers. + +Cerca [nel forum](https://forum.yunohost.org) per argomenti simili al problema che stai trovando. Se hai problemi con una app specifica puoi consultare il bugtracker relativo, ad esempio [questo è il bugtracker per l'app Wordpress app](https://github.com/YunoHost-Apps/wordpress_ynh/issues). + +## 2. Chiedi aiuto + +Sia [sul forum](https://forum.yunohost.org) siaa nella chat : vedi [questa pagina](/help) + +!!! PER AMOR DI DIO, PER FAVORE fornisci un minimo di contesto! I volontari non possono aiutarti se non ti prendi *cinque* minuti per descrivere il contesto: il tipo di hardware, la versione di YunoHost, cosa stai cercando di fare e cos'hai provato a fare, cos'è successo e **i log relativi**. + + diff --git a/pages/02.administer/50.troubleshooting/troubleshooting.md b/pages/02.administer/50.troubleshooting/troubleshooting.md new file mode 100644 index 00000000..72370d48 --- /dev/null +++ b/pages/02.administer/50.troubleshooting/troubleshooting.md @@ -0,0 +1,26 @@ +--- +title: Troubleshooting +template: docs +taxonomy: + category: docs +routes: + default: '/troubleshooting' +--- + +Here are some general advices when encountering issues with your server. + +## 0. Don't panic. + +Stay calm. Most issues are less worse than newcomers usually think. For the love of God (or your favourite deity / animal / food), please don't jump into the "reinstallation spiral" thinking reinstalling your server from scratch will magically fix stuff. Reinstalling is a heavy operation and is not a good long-term strategy for fixing problems. You will get tired and won't learn anything. + +## 1. Look for similar issues on the forum or bugtrackers. + +Search [the forum](https://forum.yunohost.org) for topics similar to the issue you're encountering. If you have issues with a specific app, you may also want to check the corresponding bugtracker of the app, for example [here is the bugtracker for the Wordpress app](https://github.com/YunoHost-Apps/wordpress_ynh/issues). + +## 2. Ask for help + +Either on [the forum](https://forum.yunohost.org) or the chat: c.f. [this page](/help) + +!!! FOR THE LOVE OF GOD, PLEASE provide basic context! Volunteers can NOT help you if you do not take *five* minutes to describe your context: which kind of hardware, which YunoHost version, what you are trying to do, what you tried, what happened and **the corresponding logs**. + + diff --git a/pages/02.administer/55.providers/05.registrar/gandi/autodns.it.md b/pages/02.administer/55.providers/05.registrar/gandi/autodns.it.md new file mode 100644 index 00000000..d59cb98e --- /dev/null +++ b/pages/02.administer/55.providers/05.registrar/gandi/autodns.it.md @@ -0,0 +1,24 @@ +--- +title: Ottenere una chiave API con Gandi +template: docs +taxonomy: + category: docs +routes: + default: '/providers/registrar/gandi/autodns' + aliases: + - '/registar_api_gandi' +--- + +Questa pagina indica come ottenere una chiave API con Gandi di modo da configurare il meccanismo di configurazione automatica del DNS di YunoHost. + +! NB. : **NON comunicare a nessuno il token API!** Un attaccante malizioso con il tuo token potrebbe prendere il controllo del tuo dominio e quindi anche del tuo server! + +1. Connettiti a https://account.gandi.net/ + +2. Dovresti vedere questa pagina e quindi clicca su 'Security' + +![](image://registrar_api_gandi_1.png?resize=800) + +3. Nella pagina successiva clicca su '(re)Generate the API key'. + +![](image://registrar_api_gandi_2.png?resize=800) diff --git a/pages/02.administer/55.providers/05.registrar/gandi/autodns.md b/pages/02.administer/55.providers/05.registrar/gandi/autodns.md new file mode 100644 index 00000000..2cad29eb --- /dev/null +++ b/pages/02.administer/55.providers/05.registrar/gandi/autodns.md @@ -0,0 +1,24 @@ +--- +title: Obtaining an API key from Gandi +template: docs +taxonomy: + category: docs +routes: + default: '/providers/registrar/gandi/autodns' + aliases: + - '/registar_api_gandi' +--- + +This page is meant to guide you in obtaining an API key from Gandi in order to configure YunoHost's automatic DNS configuration mecanism + +! NB. : **DO NOT share your API tokens with anybody!** A malicious attacker obtaining your tokens could take over your domain, and possibly your server! + +1. Go to [https://account.gandi.net/](https://account.gandi.net/) + +2. You should land on this page. Then click on 'Security' + +![](image://registrar_api_gandi_1.png?resize=800) + +3. In the next page, click on '(re)Generate the API key'. + +![](image://registrar_api_gandi_2.png?resize=800) diff --git a/pages/02.administer/55.providers/05.registrar/ovh/autodns/autodns.fr.md b/pages/02.administer/55.providers/05.registrar/ovh/autodns/autodns.fr.md new file mode 100644 index 00000000..040c4cca --- /dev/null +++ b/pages/02.administer/55.providers/05.registrar/ovh/autodns/autodns.fr.md @@ -0,0 +1,33 @@ +--- +title: Obtenir une clé API d'OVH +template: docs +taxonomy: + category: docs +routes: + default: '/providers/registrar/ovh/autodns' + aliases: + - '/registar_api_ovh' +--- + +Cette page a pour but de vous guider dans l'obtention d'une clé API d'OVH afin de configurer le mécanisme de configuration automatique des DNS de YunoHost. + +! NB. : **Ne partagez PAS vos tokens API avec qui que ce soit !** Un attaquant malveillant obtenant vos tokens pourrait prendre le contrôle de votre domaine, et éventuellement de votre serveur ! + +1. Allez sur https://eu.api.ovh.com/createToken/ + +2. Remplissez le formulaire avec les informations requises comme indiqué ci-dessous : + +- ID du compte ou adresse e-mail : Il s'agit de votre identifiant OVH habituel +- Mot de passe : Il s'agit de votre mot de passe OVH habituel +- Nom du script : par exemple `YunoHost Auto DNS` +- Description du script : par exemple `YunoHost Auto DNS` +- Validité : `Unlimited` +- Droits : utilisez le bouton `+` pour ajouter les lignes suivantes + - `GET` : `/domain/zone/*` + - `POST` : `/domain/zone/*` + - `PUT` : `/domain/zone/*` + - `DELETE` : `/domain/zone/*` + +![](image://registrar_api_ovh_1.png?resize=800) + +3. Vous obtiendrez trois jetons (une clé d'application, une clé d'application secrète, et une clé de consommateur) qui doivent être utilisés dans la configuration de YunoHost diff --git a/pages/02.administer/55.providers/05.registrar/ovh/autodns/autodns.it.md b/pages/02.administer/55.providers/05.registrar/ovh/autodns/autodns.it.md new file mode 100644 index 00000000..c6262ee7 --- /dev/null +++ b/pages/02.administer/55.providers/05.registrar/ovh/autodns/autodns.it.md @@ -0,0 +1,34 @@ +--- +title: Ottenere una chiave API da OVH +template: docs +taxonomy: + category: docs +routes: + default: '/providers/registrar/ovh/autodns' + aliases: + - '/registar_api_ovh' +-- + +Questa parte ha lo scopo di guidarvi nella procedura necessaria all'ottenimento di una chiave API di OVH, necessaria per impostare la procedura di configurazione automatica dei DNS di YunoHost. + +! NB. : **Non divulgate MAI i vostri token API !** Un attaccante maligno con i vostri token potrebbe prendere il controllo del vostro dominio ed anche eventualmente del vostro server! + +1. Recatevi su https://eu.api.ovh.com/createToken/ + +2. Compilate il formulario con le informazioni richieste, come nell'esempio seguente: + +- ID dell'account o indirizzo mail: il vostro User OVH +- Password: la vostra password OVH +- Date un nome allo script: es. `YunoHost Auto DNS` +- Date una sommaria descrizione: es. `YunoHost Auto DNS` +- Validità: `Unlimited` +- Rights: utilizzate il pulsante `+` per aggiungere le seguenti linee + - `GET` : `/domain/zone/*` + - `POST` : `/domain/zone/*` + - `PUT` : `/domain/zone/*` + - `DELETE` : `/domain/zone/*` + +![](image://registrar_api_ovh_1.png?resize=800) + + +3. Otterrete tre tokens (una chiave segreta, una chiave pubblica, e una chiave consumer) che dovranno essere utilizzate nella configurazione di YunoHost diff --git a/pages/02.administer/55.providers/05.registrar/ovh/autodns/autodns.md b/pages/02.administer/55.providers/05.registrar/ovh/autodns/autodns.md new file mode 100644 index 00000000..588310a2 --- /dev/null +++ b/pages/02.administer/55.providers/05.registrar/ovh/autodns/autodns.md @@ -0,0 +1,33 @@ +--- +title: Obtaining an API key from OVH +template: docs +taxonomy: + category: docs +routes: + default: '/providers/registrar/ovh/autodns' + aliases: + - '/registar_api_ovh' +--- + +This page is meant to guide you in obtaining an API key from OVH in order to configure YunoHost's automatic DNS configuration mecanism + +! NB. : **DO NOT share your API tokens with anybody!** A malicious attacker obtaining your tokens could take over your domain, and possibly your server! + +1. Go to https://eu.api.ovh.com/createToken/ + +2. Fill the form with the required informations as shown below: + +- Account ID or email address: This is your usual OVH login +- Password: This is your usual OVH password +- Script Name: for example `YunoHost Auto DNS` +- Script description: for example `YunoHost Auto DNS` +- Validity: `Unlimited` +- Rights: use the `+` button to add the following lines + - `GET` : `/domain/zone/*` + - `POST` : `/domain/zone/*` + - `PUT` : `/domain/zone/*` + - `DELETE` : `/domain/zone/*` + +![](image://registrar_api_ovh_1.png?resize=800) + +3. You will obtain three tokens (an application key, a secret application key, and a consumer key) which should be used in YunoHost's configuration diff --git a/pages/02.administer/55.providers/05.registrar/ovh/manualdns/manualdns.fr.md b/pages/02.administer/55.providers/05.registrar/ovh/manualdns/manualdns.fr.md new file mode 100644 index 00000000..fd4f390e --- /dev/null +++ b/pages/02.administer/55.providers/05.registrar/ovh/manualdns/manualdns.fr.md @@ -0,0 +1,49 @@ +--- +title: Configuration DNS avec OVH +template: docs +taxonomy: + category: docs +routes: + default: '/providers/registrar/ovh/manualdns' + aliases: + - '/OVH' +--- + +Nous allons voir comment configurer le DNS avec [OVH](http://www.ovh.com). + +Après achat de votre nom de domaine, rendez-vous dans l'espace client pour retrouver le panneau de configuration d'OVH, et cliquez sur votre domaine à gauche : + +![](image://ovh_control_panel.png?resize=800) + +Cliquez sur l'onglet **Zone DNS**, puis sur **Ajouter une entrée** : + +![](image://ovh_dns_zone.png?resize=800) + +Cliquer sur "Modifier en mode textuel", garder les 4 premières lignes : +```bash +$TTL 3600 +@ IN SOA dns104.ovh.net. tech.ovh.net. (2020083101 86400 3600 3600000 60) + IN NS dns104.ovh.net. + IN NS ns104.ovh.net. +``` +puis effacer tout ce qu'il y a en-dessous, et le remplacer par la configuration donnée par votre serveur, comme indiqué dans la [configuration DNS standard](/dns_config). + + +### IP dynamique + +[Tutoriel plus général sur l’IP dynamique](/dns_dynamicip). + +Cette partie est à suivre, que si votre IP est dynamique. + +Pour savoir si votre fournisseur d’accès à Internet vous fournit une IP dynamique [voir ici](/isp). + +Commencez par créer un identifiant DynHost. + +Suivez [ce tutoriel](http://blog.developpez.com/brutus/p6316/ubuntu/configurer_dynhost_ovh_avec_ddclient) pour l’installation de ddclient. +ddclient annonce à OVH le changement d’IP. OVH va alors changer votre IP. + +Il faut ajouter dans le fichier de configuration : +* votre identifiant et votre mot de passe DynHost +* votre nom de domaine + +Il existe un [guide d'utilisation DynHost fait par OVH](https://docs.ovh.com/fr/fr/web/domains/utilisation-dynhost/). diff --git a/pages/02.administer/55.providers/05.registrar/ovh/manualdns/manualdns.it.md b/pages/02.administer/55.providers/05.registrar/ovh/manualdns/manualdns.it.md new file mode 100644 index 00000000..b22ab3c5 --- /dev/null +++ b/pages/02.administer/55.providers/05.registrar/ovh/manualdns/manualdns.it.md @@ -0,0 +1,52 @@ +--- +title: Configurazioen del DNS con OVH +template: docs +taxonomy: + category: docs +routes: + default: '/providers/registrar/ovh/manualdns' + aliases: + - '/OVH' +--- + +Vediamo come configurare il DNS con [OVH](http://www.ovh.com). + +Una volta acquistato il vostro nome a dominio, entrate nel Control Panel, cliccate sul nome del vostro dominio che trovate sul lato sinistro: + +![](image://ovh_control_panel.png?resize=800) + +Scegliete la sezione **Zona DNS**, e poi **Aggiungere un record**: + +![](image://ovh_dns_zone.png?resize=800) + +Ora dovrete aggiungere la redirezione del DNS così come specificato nella [configurazione standard delle zone del DNS](/dns_config) + +Cliccate su "Modifica in modalità testo", lasciando invariate le prime 4 righe: +```bash +$TTL 3600 +@ IN SOA dns104.ovh.net. tech.ovh.net. (2020083101 86400 3600 3600000 60) + IN NS dns104.ovh.net. + IN NS ns104.ovh.net. +``` +cancellate tutto il resto e sostituitelo con la configurazione necessaria per raggiungere il vostro server come illustrato nel paragrafo [questa pagina](/dns config). + + +### IP dinamico + +[Istruzioni generiche per l'IP dinamico](/dns_dynamicip). + +Seguite queste istruzioni se il vostro IP è dinamico. + +Per sapere se la vostra connessione è del tipo con IP dinamico [vedi](/isp). + +Create un account DynHost. + +Seguite [questa guida](http://blog.developpez.com/brutus/p6316/ubuntu/configurer_dynhost_ovh_avec_ddclient) per l'installazione di ddclient. +ddclient si occuperà di avvisare OVH quando il vostro IP cambierà e OVH adatterà la sua configurazione. + +Nel file di configurazione di ddclient dovrete aggiungere: +* il vostro user e la vostra password DynHost +* il nome del vostro dominio + +Seguite anche questa [guida creata da OVH](https://docs.ovh.com/fr/fr/web/domains/utilisation-dynhost/). + diff --git a/pages/02.administer/55.providers/05.registrar/ovh/manualdns/manualdns.md b/pages/02.administer/55.providers/05.registrar/ovh/manualdns/manualdns.md new file mode 100644 index 00000000..4fcc5cc1 --- /dev/null +++ b/pages/02.administer/55.providers/05.registrar/ovh/manualdns/manualdns.md @@ -0,0 +1,51 @@ +--- +title: DNS Configuration with OVH +template: docs +taxonomy: + category: docs +routes: + default: '/providers/registrar/ovh/manualdns' + aliases: + - '/OVH' +--- + +Let's see how to properly set the DNS redirections with [OVH](http://www.ovh.com). + +Once you bought your domain name, got to the Web Control Panel, and click on you domain name on the left side: + +![](image://ovh_control_panel.png?resize=800) + +Click on the **DNS Zone** tab, then on **Add an entry**: + +![](image://ovh_dns_zone.png?resize=800) + +Now you need to add the DNS redirections as specified by the [standard DNS zone configuration](/dns_config) + +Click on "Change in text format", keep the first four lines: +```bash +$TTL 3600 +@ IN SOA dns104.ovh.net. tech.ovh.net. (2020083101 86400 3600 3600000 60) + IN NS dns104.ovh.net. + IN NS ns104.ovh.net. +``` +then erase everything below, and replace it with the configuration generated by YunoHost as explained in [this page](/dns_config). + + +### Dynamic IP + +[General tutorial on dynamic IP](/dns_dynamicip). + +You should follow this part if you have a dynamic IP. + +Find out if your ISP provides you with a dynamic IP address [here](/isp). + +Let's create a DynHost id. + +Follow [this tutorial](http://blog.developpez.com/brutus/p6316/ubuntu/configurer_dynhost_ovh_avec_ddclient) to install ddclient. +ddclient will take care of telling OVH that the IP has changed. Then OVH will update the IP. + +You need to add in the configuration file: +* your login and password DynHost +* your domain name + +You should also check out [OVH's guide on DynHost](https://www.ovh.co.uk/g2024.hosting_dynhost). diff --git a/pages/02.administer/55.providers/05.registrar/registrar.it.md b/pages/02.administer/55.providers/05.registrar/registrar.it.md new file mode 100644 index 00000000..63c1f51e --- /dev/null +++ b/pages/02.administer/55.providers/05.registrar/registrar.it.md @@ -0,0 +1,30 @@ +--- +title: Registrar +template: docs +taxonomy: + category: docs +never_cache_twig: true +twig_first: true +process: + markdown: true + twig: true +routes: + default: '/providers/registrar' + aliases: + - '/autodns' +--- + +Dalla versione 4.3 YunoHost include un meccanismo per interfacciare il vostro server con le API del vostro registrar del DNS di modo da rendere più semplice ed automatica la registrazione e la manutenzione dei record DNS. + +La procedura richiede una configurazione iniziale che richiede di generare una chiave API dall'interfaccia del vostro registrar. + +Non sono supportati tutti i registrar. Fino ad ora la comunità ha testato e validato l'interfaccia con [Gandi](https://gandi.net) e [OVH](https://ovh.com), che sono i registrar raccomandati. L'interfaccia con altri potrebbe funzionare ma è ancora considerata sperimentale fino a quando non avremo raccolto sufficiente feedback dalla comunità. + +Questa lista può aiutarti a scegliere un registrar se conti di acquistare un nome a dominio da usare con YunoHost. + + +| Registrar | Compatibilità | Facilità per ottenere una chiave API | Howto | +| --------- | ------------- | ------------------ | +| [Gandi](https://www.gandi.net) | ✔ (testato) | ✔ | [Obtain an API key](/providers/registrar/gandi/autodns) | +| [OVH](https://www.ovh.com/domaines/) | ✔ (testato) | ✘ | [Obtain an API key](/providers/registrar/ovh/autodns)
[Configure manually](/providers/registrar/ovh/manualdns) | +| [Namecheap](https://www.namecheap.com/) | ✘ (in lexicon ma non testato) | ✘✘✘ API non disponibile senza 50$ nell'account | | diff --git a/pages/02.administer/55.providers/05.registrar/registrar.md b/pages/02.administer/55.providers/05.registrar/registrar.md new file mode 100644 index 00000000..a5ed6e3e --- /dev/null +++ b/pages/02.administer/55.providers/05.registrar/registrar.md @@ -0,0 +1,30 @@ +--- +title: Registrar +template: docs +taxonomy: + category: docs +never_cache_twig: true +twig_first: true +process: + markdown: true + twig: true +routes: + default: '/providers/registrar' + aliases: + - '/autodns' +--- + +Since version 4.3, YunoHost includes a mechanism to interface your server with your DNS registrar API, with the purpose of simplifying and automatizing DNS records registration and maintenance. + +The procedure requires an initial configuration where you need to generate an API key on your registrar's interface. + +Not all registrars are supported. So far, the community tested and validated the interface with [Gandi](https://gandi.net) and [OVH](https://ovh.com), which are recommended. The interface with other registrars may work, but is still considered experimental until we gather feedback from the community. + +The list below can help you to choose a registrar if you plan to buy a domain name to use it with YunoHost. + + +| Registrar | Compatibility | Easy to obtain an API key | Howto | +| --------- | ------------- | ------------------ | +| [Gandi](https://www.gandi.net) | ✔ (tested) | ✔ | [Obtain an API key](/providers/registrar/gandi/autodns) | +| [OVH](https://www.ovh.com/domaines/) | ✔ (tested) | ✘ | [Obtain an API key](/providers/registrar/ovh/autodns)
[Configure manually](/providers/registrar/ovh/manualdns) | +| [Namecheap](https://www.namecheap.com/) | ✘ (in lexicon but untested) | ✘✘✘ API not available without 50$ on the account | | diff --git a/pages/02.administer/55.providers/10.isp/free/isp_free.fr.md b/pages/02.administer/55.providers/10.isp/free/isp_free.fr.md new file mode 100644 index 00000000..6520117a --- /dev/null +++ b/pages/02.administer/55.providers/10.isp/free/isp_free.fr.md @@ -0,0 +1,82 @@ +--- +title: Free +template: docs +taxonomy: + category: docs +routes: + default: '/providers/isp/free' + aliases: + - '/isp_free' +--- + +*Trouvez la liste d’autres fournisseurs d’accès à Internet **[ici](/isp)**.* + +#### Accès à l’administration de la box (v5/v6) + +##### Freebox ≤ v5 + +Rendez-vous sur la [console d'administration du site de free](https://subscribe.free.fr/login/). + +##### Freebox v6 (Revolution / Mini4k) + +Allez à l’adresse : [mafreebox.free.fr](http://mafreebox.free.fr/) puis authentifiez-vous. + +#### Ouverture des ports + +[Liste des ports à ouvrir](/isp_box_config). + +##### Freebox ≤ v5 + +Cela se passe dans la section *Ma Freebox / Configurer mon routeur*. Il faut : + +- Rediriger les [ports à ouvrir](/isp_box_config) vers l'adresse locale de votre serveur YunoHost. +- Définir une DMZ vers votre serveur YunoHost. + +La présence conjointe de ces deux règles permettent d'accéder à votre serveur de l'extérieur comme de l'intérieur de votre réseau local. + +##### Freebox v6 +[Tutoriel d’ouverture des ports sur Freebox](http://www.astuces-pratiques.fr/informatique/ouvrir-un-port-sur-la-freebox-revolution) + + +#### Déblocage de l’envoi de courriel + +Pour pouvoir envoyer des mails, le déblocage se fait dans la [partie client](https://subscribe.free.fr/login/). + +Depuis le menu Ma freebox allez sur « Blocage SMTP sortant ». + +Pour pouvoir envoyer des mails, passez le blocage en « inactif ». + +#### Fonction NAS de la Freebox + +Il faut installer le paquet `cifs-utils` +```bash +$ sudo apt install cifs-utils +``` + +Il faut créer un point de montage (ici `/home/monlogin/freebox`) +```bash +$ mkdir ~/freebox +``` + +On monte le répertoire NAS par défaut avec les droits de lecture / écriture pour tous +```bash +$ sudo mount -t cifs //mafreebox.freebox.fr/Disque\ dur/ /home/monlogin/freebox -o guest,iocharset=utf8,file_mode=0777,dir_mode=0777 +``` + +##### Automatiser le montage + +Une ligne à ajouter à la fin du `/etc/fstab` : +```bash +//mafreebox.freebox.fr/Disque\040dur/ /home/monlogin/freebox cifs _netdev,guest,uid=monlogin,gid=users,iocharset=utf8 0 0 +``` + +Le `_netdev` signale que c'est un périphérique réseau, afin que le système ne le monte que s'il a accès au réseau. +`guest` est le mode d'identification à la Freebox : pour une connexion authentifiée, placez vos identifiants dans un fichier sous la forme +```bash +username=your_user +password=your_pass +domain=FREEBOX +``` +et remplacez `guest` par `credentials=/path/to/file` (c'est aussi possible de spécifier directement `username=xx,password=xx` dans le fstab, mais déconseillé pour des raisons de sécurité) +`uid` et `gid` sont pour les id user et group auxquels appartiendra le répertoire une fois monté. Par défault (sur la Freebox V5 en tout cas), ils se retrouvent avec les uid/gid de 4242. +Il est aussi possible de mettre des droits particuliers avec les paramètres `file_mode=0777,dir_mode=0777`. diff --git a/pages/02.administer/55.providers/10.isp/isp.md b/pages/02.administer/55.providers/10.isp/isp.md new file mode 100644 index 00000000..afaf1c4c --- /dev/null +++ b/pages/02.administer/55.providers/10.isp/isp.md @@ -0,0 +1,241 @@ +--- +title: Internet service providers +template: docs +taxonomy: + category: docs +never_cache_twig: true +twig_first: true +process: + markdown: true + twig: true +routes: + default: '/providers/isp' + aliases: + - '/isp' +--- + +{% set country = uri.param('country') %} + +!!! To find generic instructions on how to configure port forwarding, see [Main configuration box](/isp_box_config) + +{% if country == '' %} +Here is a non-comprehensive list of internet service providers by country, which contains criteria about tolerance to self-hosting. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Africa"] + + * [Ivory Coast](/isp/country:civ) + +[/ui-tab] +[ui-tab title="Asia"] + + * [South Korea](/isp/country:kor) + +[/ui-tab] +[ui-tab title="Europa"] + + * [Belgium (nl)](/isp/country:belnl) + * [Belgium (fr)](/isp/country:belfr) + * [Finland](/isp/country:fin) + * [France](/isp/country:fra) + * [Hungary](/isp/country:hun) + * [Ireland](/isp/country:irl) + * [Sweden](/isp/country:swe) + * [Switzerland](/isp/country:che) + * [UK](/isp/country:gbr) + +[/ui-tab] +[ui-tab title="North america"] + + * [Canada](/isp/country:can) + * [USA](/isp/country:usa) + +[/ui-tab] +[ui-tab title="Oceania"] +[/ui-tab] +[ui-tab title="South america"] + + * [Brazil](/isp/country:bra) + +[/ui-tab] +[/ui-tabs] + +{% else %} +A "no" may cause problems for using your server or may require you to make additional configuration changes. Status in brackets indicates the default behavior. + +{% endif %} + +{% if country == 'belfr' %} + +### Belgique + +| Fournisseur d’accès | Box/ routeur | uPnP activable | [Port 25 ouvrable](/email)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fixe | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| **Proximus** | BBox2 | oui (activé) | oui | **non** | **non** | **non** | +| | BBox3 | oui (activé) | oui | **non** | **non** | **non** | +| **Scarlet** | BBox2 | oui (activé) | oui | **non** | **non** | **non** | + +**Proximus** ne serait pas ouvert à l’auto-hébergement. L’ouverture des ports serait plus difficile afin d’éviter tout SPAM. Il serait préférable de passer par [Neutrinet](http://neutrinet.be), un des [membres de la Fédération French Data Network](http://www.ffdn.org/fr/membres). + + +{% elseif country == 'belnl' %} + +### België + +| Service provider | Box/ router | uPnP beschikbaar | [Poort 25 openen mogelijk](/email)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | vaste IP | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| **Proximus** | BBox2 | ja (geactiveerd) | ja | **nee** | **nee** | **nee** | +| | BBox3 | ja (geactiveerd) | ja | **nee** | **nee** | **nee** | +| **Scarlet** | BBox2 | ja (geactiveerd) | ja | **nee** | **nee** | **nee** | + +**Proximus** zou niet openstaan voor self-hosting. Het openen van de poorten zou moeilijker zijn om SPAM te voorkomen. Het loont de moeite om een vpn te gebruiken. + + +{% elseif country == 'bra' %} + +### Brazil +| Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | +| --- | --- | --- | --- | --- | --- | --- | +| Global Village Telecom | Multiple | Yes | No. Only for Fix IP| No | No | Yes, extra charge. | + + +{% elseif country == 'can' %} + +### Canada +| Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | +| --- | --- | --- | --- | --- | --- | --- | +| Telus | Multiple | - | No. Extra charge | - | - | No. Extra charge | +| TekSavvy | Multiple | - | Yes | No | - | No. Extra charge | + + + +{% elseif country == 'fin' %} + +### Finland + +| Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | +| --- | --- | --- | --- | --- | --- | --- | +| DNA | Multiple | Yes | No [^fi-port25] | Yes | No | No. Only for business. | +| Elisa | Multiple | Yes | No [^fi-port25] | Yes | Not available for consumers | No. Only for Business. | +| Telia | Multiple | Yes | No [^fi-port25] | Yes | Not available for consumers | No. Only for Business. | + +[^fi-port25]: Regulations in Finland prohibit the use of Port 25 for consumers. + + +{% elseif country == 'fra' %} + +### France + +Tous les fournisseurs d’accès à Internet [membres de la Fédération French Data Network](http://www.ffdn.org/fr/membres) ont une politique favorable à l’auto-hébergement. +* ✔ : oui +* ✘ : non + +| Fournisseur d’accès | OVH | [Free](/isp_free) | [SFR](/isp_sfr) | [Orange](/isp_orange) | Bouygues
Télécom | Darty | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| **Box/routeur** | Personnel/OVH Télécom | Freebox | Neufbox | Livebox | Bbox | Dartybox | +| **[UPnP](https://fr.wikipedia.org/wiki/Universal_Plug_and_Play)** | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| **[Port 25 ouvrable](/email)**
(fermé par défaut) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ | +| **[Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning)** | ✔ | ✔ | ✔/✘ | ✔ (depuis la Livebox 4) | ✔ | ✔ | +| **[Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup)
personnalisable ** | ✔ | ✔ (sauf IPv6, pas de support, et buggué sur certaines plages d'adresses ipv4) | … | ✘ (XXX.pro.dns-orange.fr disponible sur les abonnements orange pro) | ✘ | ✘ | +| **[IP fixe](/dns_dynamicip)** | ✔ | ✔ | ✔/✘ | ✘ (en option depuis la Livebox 3 et sur les abonnements orange pro) | ✔ | ✔ | +| **[IPv6](https://fr.wikipedia.org/wiki/IPv6)** | ✔ | ✔ | ✔ | ✔ | … | … | +| **[Non listé sur le DUL](https://en.wikipedia.org/wiki/Dialup_Users_List)** | … | ✘ | … | … | … | … | +Pour une liste plus complète et précise, référez-vous à la très bonne documentation de [wiki.auto-hebergement.fr](http://wiki.auto-hebergement.fr/fournisseurs/fai#d%C3%A9tail_des_fai). + +**Astuce** : [FDN](http://www.fdn.fr) fournit des [VPN](http://www.fdn.fr/-VPN-.html) permettant de rapatrier une (ou plusieurs sur demande) IPv4 fixe et un /48 en IPv6 et ainsi « nettoyer » votre connexion si vous êtes chez l’un des FAI *limitants* du tableau ci-dessus. + + + +{% elseif country == 'hun' %} + +### Hungary + +| Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | +| --- | --- | --- | --- | --- | --- | --- | +| DIGI Távközlési és Szolgáltató Kft. | Yes | Yes | No. Business only. | No | No. Business only | No. Business only | +| Telekom Magyarország | Yes | Yes | No | No | No | No | + +**Notice** : DIGI allows non-business users to subscribe to their business plan, for roughly the same price as the regular plan. Fix IP is an additional subscription for business plan users. + +{% elseif country == 'irl' %} + +### Ireland +| Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | +| --- | --- | --- | --- | --- | --- | --- | +| Whizzy Internet | Multiple | Yes | Yes| Yes | Yes | Yes | + + + +{% elseif country == 'civ' %} + +### Côte d'Ivoire + +| Fournisseur d’accès | Box/ routeur | uPnP activable | [Port 25 ouvrable](/email)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fixe | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| **Orange** | Livebox2 | oui (activé) | non | **non** | **non** | **non** | +| **Moov** | | oui (activé) | | | | | +| **MTN** | | oui (activé) | | | | | + +{% elseif country == 'swe' %} + +### Sweden + +| Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | +| --- | --- | --- | --- | --- | --- | --- | +| Telia | Multiple | Yes | No. Business only. | Yes | No. Business only. | No. Business only. | +| Bredbandsbolaget | Multiple | Yes | No. Business only. | Yes | No. Business only. | No. Business only. | +| Ownit | Multiple | Yes | Yes | N/A? | ? | Yes | + +Ownit reserves port 3 and 4 of their router to TV. With a simple call to their hotline, explaining that you want to selfhost, they can reassign one of the ports to be in bridge mode. It means that your server will have its own public fixed IP address, in addition to the modem's. + + + +{% elseif country == 'che' %} + +### Switzerland + +Most of non business IP provided by ISP are blacklisted. + +| Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | +| --- | --- | --- | --- | --- | --- | --- | +| Sunrise | Multiple | No | Yes | No | - | - | +| Swisscom | Multiple | No | Yes | No | No | No | +| VTX | Multiple | No | Yes | No | - | - | + + + +{% elseif country == 'kor' %} + +### South Korea + +| Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | +| --- | --- | --- | --- | --- | --- | --- | +| LG U+ (HelloVision) | Multiple | Yes | Yes (Without ISP Router) | No | - | Partial | +| KT(SkyLife, Qook&Show) | Multiple | Yes | Yes | No | - | Partial | +| SKT (SK Broadband) | Multiple | Yes | Yes | No | - | Partial | + + +{% elseif country == 'gbr' %} + +### UK +| Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | +| --- | --- | --- | --- | --- | --- | --- | +| BT Internet | Yes | - | Yes| - | - | No | +| Virgin Media | Yes | - | - | - | No | No | +| ZEN Internet | Yes | - | Yes | - | Yes | Yes | +| PlusNet | Yes | Yes | Yes | No | Yes, if you raise a ticket | Small one off Charge | + +{% elseif country == 'usa' %} + +### USA +| Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | +| --- | --- | --- | --- | --- | --- | --- | +| Cox | Multiple | Yes | No. Only for business class customer. | No | No | Yes, as a business class customer | +| Charter | Multiple | Yes | No. Only for business class customer. | No | No | Yes, as a business class customer | +| DSLExtreme | Multiple | Yes | Yes | No | No | Yes, extra charge. | +| AT&T| Multiple | Yes | No. Only for business class customer. | unknown. | unknown. | unknown. | +| Xfinity (Comcast)| Multiple | Yes | No. Only for business class customer. | unknown. | unknown. | Yes, as a business class customer| + + +{% endif %} + diff --git a/pages/02.administer/55.providers/10.isp/orange/isp_orange.fr.md b/pages/02.administer/55.providers/10.isp/orange/isp_orange.fr.md new file mode 100644 index 00000000..e308d26f --- /dev/null +++ b/pages/02.administer/55.providers/10.isp/orange/isp_orange.fr.md @@ -0,0 +1,98 @@ +--- +title: Orange +template: docs +taxonomy: + category: docs +routes: + default: '/providers/isp/orange' + aliases: + - '/isp_orange' +--- + +*Trouvez la liste d’autres fournisseurs d’accès à Internet **[ici](/isp)**.* + +#### Le courrier électronique + +La box d’Orange bloque le port 25 pour limiter l’envoi de spam. + +La solution restante pour héberger son courrier chez soi consiste à le faire passer par les serveurs SMTP d’Orange. + +! YunoHost intègre depuis la version 4.1 une intégration de la configuration des relais SMTP +! Cette section devrait donc être retravaillée (voire supprimée) au profit de [cette page](/email_configure_relay) + +Pour cela, il faut éditer le fichier de configuration de postfix avec la commande : + +```bash +sudo nano /etc/postfix/main.cf +``` + +puis, rajouter à la ligne le relai SMTP d’Orange : + +```bash +relayhost = smtp.orange.fr +``` + +redémarrez Postfix : + +```bash +sudo service postfix restart +``` + +##### Problèmes + +Si vous avez une erreur "Authentification requise", la solution est la suivante : **[source](http://viruslocker.free.fr/?page_id=1749)**. + +Éditer le fichier de configuration de postfix + +```bash +sudo nano /etc/postfix/main.cf +``` +puis, rajouter à la ligne : + +```bash +smtp_sasl_password_maps = hash:/etc/postfix/sasl/mdp_fai.conf +smtp_sasl_auth_enable = yes +smtp_sasl_security_options = noanonymous +relayhost = [smtp.orange.fr]:25 +``` + +créer le fichier `mdp_fai.conf` : + +```bash +sudo nano /etc/postfix/sasl/mdp_fai.conf +``` + +ajouter + +```bash +# mdp_fai.conf +[smtp.orange.fr]:25 adresseemail@chez.orange:son-mot-de-passe +``` +avec votre mot de passe du compte d'orange. + +Intégrer le mot de passe à Postfix : + +```bash +sudo postmap /etc/postfix/sasl/mdp_fai.conf +sudo postconf -e smtp_sasl_password_maps=hash:/etc/postfix/sasl/mdp_fai.conf +``` + +Si vous avez une erreur "(SASL authentication failed; cannot authenticate to server smtp-auth.nowhere.com[38.123.22.160]: no mechanism available)" + +Vérifier la présence de `libsasl2-modules` et de `sasl2-bin` : + +```bash +apt search libsasl2-modules +apt search sasl2-bin +``` + +Si ils ne sont pas présents, installez-les : + +```bash +apt install libsasl2-modules sasl2-bin +``` + +Il est possible que postfix ne prenne pas en compte tout de suite vos modifications. Pour le forcer à le faire, exécutez +```bash +systemctl restart postfix +``` diff --git a/pages/02.administer/55.providers/10.isp/sfr/isp_sfr.fr.md b/pages/02.administer/55.providers/10.isp/sfr/isp_sfr.fr.md new file mode 100644 index 00000000..80374876 --- /dev/null +++ b/pages/02.administer/55.providers/10.isp/sfr/isp_sfr.fr.md @@ -0,0 +1,25 @@ +--- +title: SFR +template: docs +taxonomy: + category: docs +routes: + default: '/providers/isp/sfr' + aliases: + - '/isp_sfr' +--- + +*Trouvez la liste d’autres fournisseurs d’accès à Internet **[ici](/isp)**.* + +#### Accès à l’administration de la box +* Allez à cette adresse : http://192.168.1.1. +* Authentifiez-vous, soit en appuyant sur le bouton de la box pendant 5 secondes soit avec les identifiants d’administration. + +![](image://sfr-authentification.png?resize=900) + +#### Courrier électronique +Pour pouvoir envoyer des mails, il faut désactiver le filtrage. + +![](image://sfr-filtrage.png?resize=600) + +Source : [https://assistance.sfr.fr/sfrmail-appli/sfrmail/envoyer-e-mail-serveur-smtp.html](https://assistance.sfr.fr/sfrmail-appli/sfrmail/envoyer-e-mail-serveur-smtp.html) diff --git a/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.de.md b/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.de.md new file mode 100644 index 00000000..4fe05ccd --- /dev/null +++ b/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.de.md @@ -0,0 +1,51 @@ +--- +title: Vorteil eines VPN für Selbst-Hosting +template: docs +taxonomy: + category: docs +routes: + default: '/vpn_advantage' +--- + +Es ist unüblich, zu Hause einen Server einzurichten, und die meisten Internetanschlüsse, die Privatpersonen zur Verfügung stehen, sind für diesen Zweck ungeeignet. Ein netzneutrales VPN, das eine feste IPv4-Adresse und IPv6-Adressen bereitstellt, kann helfen, einige der Einschränkungen oder Schwierigkeiten zu überwinden. + +! Vorsicht: nicht alle bestehenden VPN-Anbieter erfüllen diese Bedingungen, vergewissern Sie sich, dass der von Ihnen gewählte Anbieter sie erfüllt. + +## Vorteile + +### Plug & Play +Indem Sie ein VPN auf Ihrem Server einrichten, können Sie ihn für den Rest des Internets zugänglich machen, ohne die Konfiguration des Routers, an den Sie ihn anschließen, ändern zu müssen. Dies kann sehr praktisch sein, wenn Sie in den Urlaub fahren, umziehen oder einen Internetausfall haben, da Sie das Gerät einfach an eine Person Ihres Vertrauens anschließen können, ohne den Router der Person konfigurieren zu müssen, die Ihnen hilft. + +Außerdem ersparen Sie sich die Mühe, die Ports Ihres Routers zu öffnen und das Hairpinning zu umgehen. + +### Keine Mikro-DNS-Ausfälle +Wenn Ihr Internetanschluss keine feste öffentliche IP hat, müssen Sie einen dynamischen Domänennamen (Dynamic DNS) einrichten. Diese Lösung mag akzeptabel sein, aber das DNS wird nur in regelmäßigen Abständen aktualisiert (alle zwei Minuten, wenn es sich um einen `noho.st` oder `nohost.me` Domänennamen handelt). Es besteht also die Möglichkeit, dass dies gelegentlich zu Darstellungsfehlern im Browser führt oder dass sogar eine andere Website angezeigt wird (die Risiken sind jedoch geringer, da die Praxis des Self-Hosting nicht weit verbreitet ist). + +Mit einem neutralen VPN wird dieses Problem umgangen, da das VPN mit einer virtuellen Internetverbindung verglichen werden kann, die eine eigene feste IPv4-Adresse hat, so dass der Domänenname nicht aktualisiert werden muss. + +### Der Fall der E-Mail +E-Mail ist eines der komplexesten Protokolle, die man selbst hosten kann, und in der Regel ist es das, was ein Benutzer zuletzt selbst hostet. In der Tat kann es leicht passieren, dass vom Server gesendete E-Mails von den SMTP-Servern der Empfänger abgelehnt werden. + +Um dies zu vermeiden, müssen Sie u. a. : +- den umgekehrten DNS der Internetverbindung des Servers (oder VPN) konfigurieren +- eine feste IPv4 +- dass diese IPv4 aus allen Blacklists entfernt werden kann (insbesondere darf die IP nicht in der DUL enthalten sein) +- in der Lage sein, Port 25 (sowie die anderen SMTP-Ports) zu öffnen + +Leider beachtet keiner der gängigsten französischen Internetanbieter alle diese Punkte. + +Um dies zu vermeiden, kann die Verwendung eines VPN, das diese Punkte berücksichtigt, eine Alternative darstellen. + +### Vertrauen +Wenn Sie nicht möchten, dass der Inhalt der Kommunikation Ihres Servers von Geräten im Netz Ihres Internetanbieters ausspioniert wird, können Sie ein VPN verwenden, um Ihre Kommunikation zu verschlüsseln und Ihr Vertrauen in einen VPN-Anbieter zu setzen. Zur Erinnerung: Seit 2015 hat die Regierung offiziell Blackboxes bei großen Netzbetreibern installiert, um die gesamte digitale Kommunikation in Frankreich abzuhören und so die wissenschaftlichen, wirtschaftlichen und industriellen Interessen Frankreichs zu schützen. + +## Benachteiligung +### Kosten +Ein neutrales VPN ist mit Kosten verbunden, da der Betreiber, der es bereitstellt, einen Server betreiben und Bandbreite nutzen muss. Die Preise für die assoziativen VPNs des FFDN liegen bei etwa 6 € pro Monat. + +### Packet Routing +Wenn Sie ein VPN auf Ihrem Server einrichten, wird die Übertragung einer Datei von einem Computer im lokalen Netzwerk zum Server, der das VPN nutzt, über das Ende des VPN, d.h. über den Server des VPN-Anbieters, laufen, wenn Sie keine besondere Konfiguration einrichten. + +Um dies zu vermeiden, gibt es zwei Lösungen : +- Wenn Sie den Server in einen Router umwandeln und die Heimgeräte daran anschließen, profitieren auch diese Geräte von der VPN-Vertraulichkeit. +- Verwenden Sie den YunoHost-Server als DNS-Resolver, wenn Sie zu Hause sind, um die Domänennamen des Servers auf die lokale IP und nicht auf die öffentliche IP umzuleiten. Dies kann entweder auf jedem Gerät oder auf dem Router erfolgen (sofern letzterer dies zulässt). diff --git a/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.es.md b/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.es.md new file mode 100644 index 00000000..d6cdd1c1 --- /dev/null +++ b/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.es.md @@ -0,0 +1,58 @@ +--- +title: Ventajas de una VPN para el autoalojamiento +template: docs +taxonomy: + category: docs +routes: + default: '/vpn_advantage' +--- + +Dado que la instalación de un servidor en casa es una práctica poco habitual, la mayoría de las conexiones a Internet que se proporcionan a los particulares no son adecuadas para este fin. Una VPN de red neutra que proporcione una dirección IPv4 fija y direcciones IPv6 puede ayudar a superar algunas limitaciones o dificultades. + +! Advertencia: no todos los proveedores de VPN existentes cumplen estos requisitos, asegúrese de que el que elija los cumpla. + +## Ventajas + +### Plug & Play + +Configurando una VPN en tu servidor, podrás hacerlo accesible al resto de Internet sin tener que cambiar la configuración del router al que lo conectas. Esto puede ser realmente útil si te vas de vacaciones, te mudas de casa o si tienes un corte de Internet, porque podrás conectarlo fácilmente a una persona de confianza sin tener que configurar el router de la persona que te ayuda. + +De la misma manera, te ahorrarás abrir los puertos de tu router, así como evitar el hairpinning. + +### Sin microcortes DNS + +Si su conexión a Internet no tiene una IP pública fija, se verá obligado a configurar un nombre de dominio dinámico (DNS dinámico). Esto puede ser aceptable, pero el DNS sólo se actualizará a intervalos regulares (cada dos minutos si es un nombre de dominio noho.st o nohost.me). Por lo tanto, existe la posibilidad de que ocasionalmente se produzcan errores de visualización en el navegador, o incluso que se muestre otro sitio (los riesgos se reducen, sin embargo, porque la práctica del autoalojamiento no está muy extendida). + +Con una VPN neutra, este problema se sortea porque la VPN puede compararse con una Conexión Virtual a Internet, que tiene su propia dirección IPv4 fija, por lo que no es necesario actualizar el nombre de dominio. + +### El caso del correo electrónico + +El correo es uno de los protocolos más complejos de autoalojar, normalmente es lo último que autoaloja un usuario. De hecho, es muy fácil encontrarse en una situación en la que los correos electrónicos enviados por el servidor son rechazados por los servidores SMTP de los destinatarios. + +Para evitarlo, necesitas, entre otras cosas: + + -configurar el DNS inverso de la conexión a Internet del servidor (o VPN) + -una IPv4 fija + -que esta IPv4 sea eliminada de todas las listas negras (en particular, la IP no debe estar en el DUL) + -poder abrir el puerto 25 (así como otros puertos SMTP) + +Desgraciadamente, ninguno de los ISP franceses más habituales respeta todos estos puntos. + +Para superar esto, el uso de una VPN que respete estos puntos puede ser una alternativa. + +### Confianza + +Por último, si no quiere que el contenido de las comunicaciones de su servidor sea espiable por los equipos presentes en la red de su proveedor de servicios de Internet, puede utilizar una VPN para cifrar sus comunicaciones y deportar su confianza a un proveedor de VPN. A modo de recordatorio, desde 2015, el gobierno despliega oficialmente cajas negras en los principales operadores de red cuyo objetivo es espiar todas las comunicaciones digitales francesas para, entre otras cosas, preservar los intereses científicos, económicos e industriales de Francia. + +## Desvenjajas +### Coste +Una VPN neutra tiene un coste, ya que el operador que la proporciona debe gestionar un servidor y utilizar el ancho de banda. Los precios de las VPN asociadas a FFDN rondan los 6 euros al mes. + +### Enrutamiento de paquetes + +Cuando se establece una VPN en el servidor, si no se establece una configuración particular, la transferencia de un archivo desde un ordenador de la red local al servidor que utiliza la VPN, pasará por el extremo de la VPN, es decir, por el servidor del proveedor de la VPN. + +Para superar este punto, hay dos soluciones: + + -transformando su servidor en un router y conectando su equipo doméstico a él, este equipo se beneficiará también de la confidencialidad de la VPN. + -utilizar el servidor de YunoHost como resolvedor de DNS cuando estés en casa, para redirigir los nombres de dominio del servidor a la ip local en lugar de la ip pública. Esta operación puede realizarse en cada dispositivo o en el router (si éste lo permite). diff --git a/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.fr.md b/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.fr.md new file mode 100644 index 00000000..ae8665e3 --- /dev/null +++ b/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.fr.md @@ -0,0 +1,51 @@ +--- +title: Avantage d'un VPN pour l'auto-hébergement +template: docs +taxonomy: + category: docs +routes: + default: '/vpn_advantage' +--- + +L'installation d'un serveur chez soi étant une pratique peu courante, la plupart des connexions Internet fournies aux particuliers sont inadaptées à sa mise en pratique. Un VPN respectant la neutralité du net et fournissant une adresse IPv4 fixe et des adresses IPv6 peut permettre de contourner certaines limitations ou certaines difficultés. + +! Attention : tous les fournisseurs VPN existants ne remplissent pas ces conditions, assurez-vous bien que celui que vous choisissez les remplit. + +## Avantages + +### Plug & Play +En configurant un VPN sur votre serveur, vous serez en mesure de le rendre accessible au reste d'Internet sans avoir à modifier la configuration du routeur auquel vous le branchez. Ce point peut être vraiment pratique si vous partez en vacances, que vous déménagez ou si vous avez une coupure d'Internet, car vous serez en mesure de le brancher facilement chez une personne de confiance sans avoir besoin de configurer le routeur de la personne qui vous aide. + +De la même façon, vous vous économisez l'ouverture des ports de votre routeur ainsi que le contournement du hairpinning. + +### Pas de micro-coupure DNS +Si votre connexion Internet n'a pas d'IP publique fixe, vous serez obligé de mettre en place un nom de domaine dynamique (Dynamique DNS). Cette solution peut être acceptable, mais la mise à jour du DNS ne se fera qu'à intervalle régulier (Toutes les deux minutes si c'est un nom de domaine en `noho.st` ou `nohost.me`). Il y a donc une chance que cela provoque de temps en temps des erreurs d'affichage dans le navigateur, voir même qu'un autre site s'affiche (les risques sont toutefois réduits car la pratique de l'auto-hébergement n'est pas répandue). + +Avec un VPN neutre, ce problème est contourné car le VPN peut être comparé à une connexion Internet Virtuelle, qui a sa propre adresse IPv4 fixe, dès lors plus besoin de mettre à jour le nom de domaine. + +### Le cas du mail +Le mail est un des protocoles les plus complexes à auto-héberger, en général c'est ce qu'un utilisateur auto-héberge en dernier. En effet, il est très facile de se retrouver dans une situation où les emails envoyés par le serveur sont refusés par les serveurs SMTP destinataires. + +Pour éviter ça il faut entre autre : +- configurer le reverse DNS de la connexion Internet (ou du VPN) du serveur +- une IPv4 fixe +- que cette IPv4 soit enlevable de toutes les listes noires (notamment l'IP ne doit pas être sur le DUL) +- pouvoir ouvrir le port 25 (ainsi que les autres ports SMTP) + +Malheureusement, aucun des FAI français les plus courants ne respecte la totalité de ces points. + +Pour pallier cela, l'usage d'un VPN respectant ces points peut être une alternative. + +### Confiance +Enfin, si vous ne souhaitez pas que le contenu des communications de votre serveur soit espionnable par des équipements présents sur le réseau de votre fournisseur d'accès à Internet, vous pouvez utiliser un VPN pour chiffrer vos communications et déporter votre confiance sur un fournisseur de VPN. Rappel, depuis 2015, le gouvernement déploie officiellement des boîtes noires chez les gros opérateurs réseau qui ont pour objectif de mettre sur écoute l'ensemble des communications numériques françaises entre autre pour préserver les intérêts scientifiques, économiques et industrielles de la France. + +## Inconvénient +### Coût +Un VPN neutre a un coût puisque l'opérateur qui le fournit doit faire fonctionner un serveur et utiliser de la bande passante. Les prix des VPN associatifs de la FFDN sont autour de 6 € par mois. + +### Trajet des paquets +Lorsque l'on met en place un VPN sur son serveur, si on ne met pas en place de configuration particulière, le transfert d'un fichier d'un ordinateur du réseau local vers le serveur utilisant le VPN, passera par le bout du VPN c'est-à-dire par le serveur du fournisseur de VPN. + +Pour pallier ce point, il y a deux solutions : +- transformer son serveur en routeur et connecter les équipements de la maison à ce dernier, ces équipements bénéficieront alors de la confidentialité du VPN également. +- utiliser le serveur YunoHost comme résolveur DNS lorsque l'on est chez soi, de façon à rediriger les noms de domaines du serveur l'IP locale plutôt que l'IP publique. Cette opération peut se faire soit sur chaque équipement, soit sur le routeur (si ce dernier le permet). diff --git a/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.it.md b/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.it.md new file mode 100644 index 00000000..05fafd1b --- /dev/null +++ b/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.it.md @@ -0,0 +1,51 @@ +--- +title: Vantaggi di una VPN per il self-hosting +template: docs +taxonomy: + category: docs +routes: + default: '/vpn_advantage' +--- + +Poiché installare un server a casa è una pratica abbastanza poco comune molte connessioni Internet casalinghe non sono realmente utilizzabili per questo scopo. Una VPN rispettosa della neutralità di rete (net neutrality) con un indirizzo IPv4 fisso e indirizzi IPv6 può aiutare a superare alcune limitazioni e difficoltà. + +! Attenzione: non tutti i provider di VPN rispettano queste condizioni, controllate che quello scelto le rispetti. + +## Vantaggi + +### Plug & Play +Usare una VPN per il vostro server vi permetterà di renderlo accessibile a tutta Internet senza dover fare alcun cambiamento al router al quale lo connettete. Questa cosa risulta estremamente comoda se state andando in vacanza, se state traslocando o nel caso di una disconnessione da Internet poiché potrete facilmente riconnettere il server da qualcuno di fiducia senza necessità di riconfigurare il router della persone che vi sta aiutando. + +Allo stesso modo vi risparmierete il problema di aprire le porte del vostro router per bypassare l'hairpinning. + +### Nessun micro distacco del DNS +Se la vostra connessione ad Internet non ha un IP pubblico fisso dovrete utilizzare un sistema di nome a dominio dinamico (Dynamic DNS). La soluzione è accettabile però il DNS verrà aggiornato ad intervalli regolari (ad esempio con i domini registrati su `noho.st` e `nohost.me` ogni due minuti). Di conseguenza è possibile che i browser possano mostrare degli errori di tanto in tanto o che addirittura venga mostrato un altro sito (anche se questa possibilità è abbastanza remota in quanto il self-hosting non è ancora molto diffuso). + +Con una VPN neutrale il problema è bypassato in quanto la VPN può essere assimilata ad una connessione ad Internet virtuale con un indirizzo IPv4 fisso e quindi il dominio non deve essere aggiornato. + +### La questione della posta elettronica +La posta elettronica è uno dei protocolli più complessi per il self-hosting e di conseguenza quello che viene impostato per ultimo. E difatti è molto facile trovarsi nella situazione in cui le email inviate dal server vengono rifiutate dai server SMTP di destinazione. + +Per evitare questa situazione dovete: +- configurare il reverse DNS della connessione ad Internet del server (o della VPN) +- un Ipv4 statico +- fare in modo che questo indirizzo IPv4 sia eliminabile da tutte le blacklist (in particolare l'IP non deve essere nel DUL) +- riuscire ad aprire la porta 25 (così come tutte le altre porte SMTP) + +Purtroppo quasi nessun IPS francese diffuso (e neanche italiano) permette di rispettare tutte queste necessità. + +Di conseguenza usare una VPN che rispetta queste richieste è una valida alternativa. + +### Fiducia +Infine, se non volete che la comunicazioni del vostro server possano essere intercettate dall'infrastruttura di rete del vostro ISP potete usare la VPN per cifrare le vostre comunicazioni e spostare la fiducia al provider della VPN. Ricordate che fin dal 2015 il governo (francese) installa ufficialmente delle `black box` nelle sedi dei grandi operatori di rete con l'obbiettivo di intercettare tutte le comunicazioni digitali francesi per controllare gli interessi scientifici, economici e industriali della Francia (non è chiaro cosa succede in Italia). + +## Svantaggi +### Costi +Una VPN neutrale presenta dei costi aggiuntivi poiché l'operatore che a fornisce deve gestire un server e consumare banda. Il costo di una VPN di un associato a FFDN (consorzio francese di operatori di rete sociali) si aggira intorno ai 6€ al mese. + +### Packet path +Usando una VPN su vostro server, a meno di particolari configurazioni, la strada percorsa dai file da un computer sulla vostra rete locale al server della VPN passerà dal nodo terminale della VPN, cioè dal server del provider. + +Ci sono due possibili soluzioni a questo problema: +- trasformare il server in un router e connettere attraverso questo gli apparecchi casalinghi che così anche questi godranno della protezione della VPN. +- usare il server YunoHost in un resolver del DNS a casa di modo da redirigere i nomi a dominio locali ad indirizzi locali invece che quelli pubblici. Questa Questa operazione deve essere compiuta per tutti gli apparecchi oppure sul router (se lo permette). diff --git a/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.md b/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.md new file mode 100644 index 00000000..0f8b3f52 --- /dev/null +++ b/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.md @@ -0,0 +1,51 @@ +--- +title: Advantage of a VPN for self-hosting +template: docs +taxonomy: + category: docs +routes: + default: '/vpn_advantage' +--- + +Since setting up a server at home is an uncommon practice, most Internet connections provided to individuals are unsuitable for this purpose. A net neutral VPN providing a fixed IPv4 address and IPv6 addresses can help to circumvent some limitations or difficulties. + +! Beware: not all existing VPN providers meet these conditions, make sure the one you choose meets them. + +## Advantages + +### Plug & Play +By setting up a VPN on your server, you'll be able to make it accessible to the rest of the Internet without having to change the configuration of the router you connect it to. This can be really handy if you are going on vacation, moving or have an Internet disconnection, as you will be able to easily connect it to someone you trust without having to configure the router of the person who is helping you. + +In the same way, you save yourself the trouble of opening your router's ports and bypassing hairpinning. + +### No micro DNS outages +If your Internet connection does not have a fixed public IP, you will be forced to set up a dynamic domain name (Dynamic DNS). This solution may be acceptable, but the DNS will only be updated at regular intervals (every two minutes if it is a `noho.st` or `nohost.me` domain name). So there is a chance that this will cause some display errors in the browser from time to time, or even that another site will be displayed (the risks are however reduced because the practice of self-hosting is not widespread). + +With a neutral VPN, this problem is circumvented because the VPN can be compared to a Virtual Internet connection, which has its own fixed IPv4 address, so no need to update the domain name. + +### The case of email +Email is one of the most complex protocols to self-host, usually it is what a user self-hosts last. Indeed, it is very easy to find yourself in a situation where emails sent by the server are refused by the recipient SMTP servers. + +To avoid this you need to: +- configure the reverse DNS of the server's Internet connection (or VPN) +- a fixed IPv4 +- that this IPv4 is removable from all blacklists (notably the IP must not be on the DUL) +- to be able to open port 25 (as well as the other SMTP ports) + +Unfortunately, none of the most common French ISPs respect all these points. + +To overcome this, the use of a VPN respecting these points can be an alternative. + +### Trust +Finally, if you do not want the content of your server's communications to be spied on by equipment present on your ISP's network, you can use a VPN to encrypt your communications and deport your trust to a VPN provider. Remember, since 2015, the government officially deploys black boxes at the large network operators whose objective is to tap all French digital communications to preserve the scientific, economic and industrial interests of France. + +## Disadvantage +### Cost +A neutral VPN has a cost since the operator who provides it must run a server and use bandwidth. The prices of the FFDN's associative VPNs are around 6 € per month. + +### Packet path +When you set up a VPN on your server, if you don't set up any particular configuration, the transfer of a file from a computer on the local network to the server using the VPN, will go through the end of the VPN i.e. through the server of the VPN provider. + +To solve this problem, there are two solutions: +- transform the server into a router and connect the home equipments to it, these equipments will then benefit from the VPN confidentiality too. +- use the YunoHost server as a DNS resolver when you are at home, in order to redirect the server's domain names to the local IP rather than the public IP. This operation can be done either on each equipment or on the router (if the latter allows it). diff --git a/pages/02.administer/55.providers/15.vpn/vpn.md b/pages/02.administer/55.providers/15.vpn/vpn.md new file mode 100644 index 00000000..6d6d89c7 --- /dev/null +++ b/pages/02.administer/55.providers/15.vpn/vpn.md @@ -0,0 +1,87 @@ +--- +title: VPN providers +template: docs +taxonomy: + category: docs +never_cache_twig: true +twig_first: true +process: + markdown: true + twig: true +routes: + default: '/providers/vpn' +--- + +Since setting up a server at home is an uncommon practice, most Internet connections provided to individuals are unsuitable for this purpose especially if you desire to send mail. A net neutral VPN providing a dedicated fixed public IPv4 address and IPv6 addresses [can help to circumvent some limitations or difficulties](/vpn_advantage). + + +Below, you can find a list of providers compatible for self-hosting and especially those providing .cube format for VPNClient apps and those providing [internetcube](https://internetcu.be). + +!!! By **compatible for self-hosting** we means VPN offers with at least: +!!! * a fixed dedicated public IPv4 +!!! * port forwarding or opened features +!!! * net neutrality: no traffic analysis, no user data resale, no alteration of traffic (without legal obligations)... + +------------------ + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="English speaking-site"] + +| VPN provider | [VPNClient](https://github.com/labriqueinternet/vpnclient_ynh) compatibility | IPv6 | rDNS IPv4 | rDNS IPv6 | Price | Membership | Net Neutrality | +| ------------ | ----------------------- | ---- | --------- | --------- | ----- | -------------- | +| [Neutrinet](https://neutrinet.be/en/vpn) | ✔ (.cube + [internetcube](https://internetcu.be)) | ✔ | ✔ | ? | ~8 €¹ / month | included | FFDN Non Profit | +¹ [Pay what you want](https://en.wikipedia.org/wiki/Pay_what_you_want) + +!!! If you try an other VPN provider that include **public dedicated ipv4 and port forwarding**, feel free to contribute to this documentation. We need people to test specific offers of those commercial providers: +!!! * [VPN area](https://vpnarea.com/front/home/dedicated-ip) ✘ does not allow forwarding port 80. Running a webserver is against their TOS. +!!! * [Trust zone](https://trust.zone/fr/order?p=25) +!!! * [PureVPN](https://www.purevpn.fr/ip-vpn-dedie) +!!! * [RapidVPN](https://www.rapidvpn.com/vpn) +[/ui-tab] +[ui-tab title="French speaking-site"] + +| Fournisseurs | Compatibilité [VPNClient](https://github.com/labriqueinternet/vpnclient_ynh) | IPv6 | rDNS IPv4 | rDNS IPv6 | Prix | Adhésion | Neutralité du net | +| ------------ | ----------------------- | ---- | --------- | --------- | ----- | -------------- | +| [Aquilenet](https://www.aquilenet.fr/vpn/) | ✔ (.cube) | ✔ | ✔ | ✔ | 3 à 5 / mois | ~15€¹ /an | FFDN Non Profit | +| [Alsace Réseau Neutre](https://arn-fai.net/vpn) | ✔ (.cube + [internetcube](https://internetcu.be)) | ✔ | ✔ | ✔ | 4 € (ou [Ğ1](https://duniter.org/fr/monnaie-libre-g1/)) / mois | 15€ / an | FFDN Non Profit | +| [Baionet](https://www.baionet.fr/nos-services/vpn/) | ✘ (wireguard) | ? | ? | ? | 2,5 € ou 5 € / mois | 5€ ou 40€ / an | FFDN Non Profit | +| [FAImaison](https://www.faimaison.net/services/vpn.html) | ✔ (.cube) | ✘ | ✔ | ✘ | Prix libre | 8 ou 16€ / an | FFDN Non Profit | +| [French Data Network](https://www.fdn.fr/services/vpn/) | ✔ (.cube) | ✔ | ✔ | ✔ | 6,5€ à 23€ / mois | 15 ou 30€ / an | FFDN Non Profit | +| [Franciliens](https://www.franciliens.net/acces-internet/vpn/) | ✔ (.cube + [internetcube](https://internetcu.be)) | ✔ | ✔ | ✔ | 6,5€ à 23€ / mois | 15 ou 30€ / an | FFDN Non Profit | +| [Grifon](https://grifon.fr/services/vpn/) | ✔ (manuelle) + L2TP/IPSec | ✔ | ✔ | ✔ | 5€ / mois | 15€ / an | FFDN Non Profit | +| [Igwan.net](https://igwan.net) | ✘ (L2TP/IPSec) | ? | ? | ? | 4 ou 8€ / mois | ? / an | FFDN Non Profit | +| [Illyse](https://www.illyse.net/acces-internet-par-vpn/) | ✔ (manuelle) | ✔ | ✔ | ✔ | 6 ou 8€ / mois | 20€ / an | FFDN Non Profit | +| [ILOTH](https://iloth.net/vpn/) | ✔ (.cube) | ✘ | ✔ | ✘ | 80€ / an | 5 à 100€ / an | FFDN Non Profit | +| [Milkywan](https://milkywan.fr/prices#popupTunnel) | ✔ (manuelle) | ✔ | ✔ | ✔ | 5 € / mois | incluse | | +| [Mycélium](https://mycelium-fai.org/wiki/documentation/services/vpn) | ✔ (manuelle) | ✘ | ✘ | ✘ | Prix libre | incluse
Réservé aux nordistes(FR 59) | FFDN Non Profit | +| [Neutrinet](https://neutrinet.be/en/vpn) | ✔ (.cube + [internetcube](https://internetcu.be)) | ✔ | ✔ | ? | ~8 €¹ / mois | incluse | FFDN Non Profit | +| [Rézine](https://www.rezine.org/acces_internet/tunnels_chiffr%C3%A9s/) | ✔ (manuelle) | ✔ | ✔ | ✔ | 5 à 10€ / mois | Prix libre | FFDN Non Profit | +| [Swiss Neutral Network](https://www.swissneutral.net/?page_id=31) | ✔ (.cube) | ✔ | ✔ | ✔ | 30.- CHF/mois | 50.- CHF / an
Réservé aux suisses | FFDN Non Profit | +| [Tetaneutral](https://tetaneutral.net/adherer/) | ✘ (wireguard) | ? | ? | ? | 5€¹ / mois | 5 à 100€¹ / an | FFDN Non Profit | +| [Touraine Data Network](https://tdn-fai.net/) | ✔ (.cube + [internetcube](https://internetcu.be)) | ✔ | ? | ? | 5€ / mois | 10 à 20€ / an | FFDN Non Profit | + +¹ Prix libre + +[/ui-tab] +[ui-tab title="German speaking-site"] +| VPN provider | [VPNClient](https://github.com/labriqueinternet/vpnclient_ynh) compatibility | IPv6 | rDNS IPv4 | rDNS IPv6 | Price | Membership | Net Neutrality | +| ------------ | ----------------------- | ---- | --------- | --------- | ----- | -------------- | +| [In-Berlin](https://in-vpn.de/provider/vpn.html) | ✔ (manuelle) | ✔ | ✔ | ✔ | 9 or 14€ / month | 20€ / an | Non Profit | + +[/ui-tab] +[/ui-tabs] + + diff --git a/pages/02.administer/55.providers/20.server/server.md b/pages/02.administer/55.providers/20.server/server.md new file mode 100644 index 00000000..0c688dc5 --- /dev/null +++ b/pages/02.administer/55.providers/20.server/server.md @@ -0,0 +1,52 @@ +--- +title: Server providers +template: docs +taxonomy: + category: docs +never_cache_twig: true +twig_first: true +process: + markdown: true + twig: true +routes: + default: '/providers/server' +--- + +## Pre-installed YunoHost Offers + + * [Alsace Réseau Neutre](https://arn-fai.net) (VPS) FFDN CHATONS + + * [Association ECOWAN](https://ecowan.fr) (VPS) + + * [Scaleway Dedibox](https://www.scaleway.com/en/dedibox/operating-systems/) (dedicated server) + +## YunoHost IT outsourcing + + * [ReflexLibre](https://reflexlibre.net) (France only) CHATONS + + diff --git a/pages/02.administer/60.extend/05.install_unpackaged_app/install_unpackaged_app.md b/pages/02.administer/60.extend/05.install_unpackaged_app/install_unpackaged_app.md new file mode 100644 index 00000000..314756be --- /dev/null +++ b/pages/02.administer/60.extend/05.install_unpackaged_app/install_unpackaged_app.md @@ -0,0 +1,23 @@ +--- +title: Install unpackaged apps +template: docs +taxonomy: + category: docs +routes: + default: '/install_unpackaged_apps' +--- + + +## PHP or HTML/JS apps +If your app is a PHP or HTML/JS app, you probably should use the `Custom Webapp`, also know as `my_webapp`, in order to configure nginx, php, mysql, yunohost permission and backup for you. + +## Other technologies + +If you use an other techno, you should install it like on a classical debian. + + +To expose the app on the web through nginx and be able to manage access permissions to the webapp, you could use the [`redirect` app](https://github.com/YunoHost-Apps/redirect_ynh/) to create a nginx reverse proxy on your local ip/port running the service. + +!!! You should use the proxy mode of the redirect app and not HTTP redirections mode. + +You probably should create custom backup and restore hooks to integrate your app to your YunoHost backup/restore process. See [Backup and restore hooks]() diff --git a/pages/02.administer/60.extend/10.configuration_management/configuration_management.md b/pages/02.administer/60.extend/10.configuration_management/configuration_management.md new file mode 100644 index 00000000..8578ecb6 --- /dev/null +++ b/pages/02.administer/60.extend/10.configuration_management/configuration_management.md @@ -0,0 +1,10 @@ +--- +title: Configuration management +template: docs +taxonomy: + category: docs +routes: + default: '/configuration_management' +--- + +!! This page is to be written diff --git a/pages/02.administer/60.extend/15.theming/theming.fr.md b/pages/02.administer/60.extend/15.theming/theming.fr.md new file mode 100644 index 00000000..584e2b29 --- /dev/null +++ b/pages/02.administer/60.extend/15.theming/theming.fr.md @@ -0,0 +1,73 @@ +--- +title: Personnaliser l'apparence du portail utilisateur +template: docs +taxonomy: + category: docs +routes: + default: '/theming' +--- + +## Utiliser un thème + +Vous pouvez changer le thème du portail utilisateur depuis l'interface administrateur, dans l'onglet Outils > Paramètres de YunoHost > Other > Thème du portail. + +Vous pouvez lister les thèmes disponibles avec : + +```bash +ls /usr/share/ssowat/portal/assets/themes/ +``` + +Ensuite, vous pouvez utiliser `nano /etc/ssowat/conf.json.persistent` pour activer le thème que vous choisissez comme ceci : + +```json +{ + "theme" : "light", + ...autres lignes..... +} +``` + +!!! Vous devrez peut-être forcer le rafraîchissement du cache de votre navigateur pour que le thème se propage complètement. Vous pouvez le faire avec Ctrl+Maj+R sur Firefox. + +## Ajouter le thème de quelqu'un d'autre + +Vous pouvez ajouter des thèmes créés par d'autres personnes en téléchargeant et en extrayant les fichiers correspondants dans un nouveau dossier `nom_du_theme` dans `/usr/share/ssowat/portal/assets/themes/`. + +! **Attention** : l'ajout de thèmes provenant d'inconnus sur Internet **est un risque de sécurité**. Cela équivaut à exécuter du code écrit par quelqu'un d'autre sur votre machine, et peut donc être utilisé à des fins malveillantes comme voler des mots de passe ! + +Quelques thèmes sont listés sur [GitHub](https://github.com/yunohost-themes). + +## Créer votre propre thème + +Vous pouvez créer votre propre thème en copiant le thème existant de votre choix. Par exemple à partir du thème `light` : + +```bash +cp -r /usr/share/ssowat/portal/assets/themes/{light,votre_theme} +``` + +Ensuite, éditez les fichiers CSS et JS dans `/usr/share/ssowat/portal/assets/themes/votre_theme` selon ce que vous voulez faire : + +- `custom_portal.css` peut être utilisé pour ajouter des règles CSS personnalisées au portail utilisateur ; +- `custom_overlay.css` peut être utilisé pour personnaliser le petit bouton YunoHost, présent sur les apps qui l'intègrent ; +- `custom_portal.js` peut être utilisé pour ajouter du code JS personnalisé à exécuter à la fois sur le portail utilisateur ou lors de l'injection du petit bouton YunoHost ("overlay"). + +Vous pouvez également ajouter vos propres images et ressources qui peuvent ensuite être utilisées par les fichiers CSS et JS. + +!!! Partagez vos thèmes personnalisés avec la communauté ! https://github.com/yunohost-themes + +### Exemple : personnaliser le logo + +Vous pouvez créer votre propre thème simplement pour changer le "branding" du portail utilisateur YunoHost et remplacer le logo YunoHost par votre propre logo ! + +Pour ce faire, téléversez votre logo dans `/usr/share/ssowat/portal/assets/themes/votre_theme/`, et ajoutez les règles CSS suivantes : + +```css +/* Dans custom_portal.css */ +#ynh-logo { + background-image : url("./votre_logo.png"); +} + +/* Dans custom_overlay.css */ +#ynh-overlay-switch { + background-image : url("./votre_logo.png"); +} +``` diff --git a/pages/02.administer/60.extend/15.theming/theming.md b/pages/02.administer/60.extend/15.theming/theming.md new file mode 100644 index 00000000..b182c24f --- /dev/null +++ b/pages/02.administer/60.extend/15.theming/theming.md @@ -0,0 +1,81 @@ +--- +title: Customize the appearance of the user portal +template: docs +taxonomy: + category: docs +routes: + default: '/theming' +--- + +## Globally disable the overlay + +You can disable the overlay by changing the dedicated settings: + +``` +yunohost settings set ssowat.panel_overlay.enabled -v 0 +``` + +## Using a theme + +You can change the theme of the user portal in the admin panel, under Tools > YunoHost settings > Other > User portal. + +You can list the available themes with: + +```bash +$ ls /usr/share/ssowat/portal/assets/themes/ +``` + +Then you can use `nano /etc/ssowat/conf.json.persistent` to enable the theme you choose like this: + +```json +{ + "theme": "light", + ...other lines... +} +``` + +!!! You might need to force the refresh of your browser's cache for the theme to fully propagate. You can do so with Ctrl+Shift+R on Firefox. + +## Adding someone else's theme + +You may add themes created by other people by downloading and extracting the corresponding files in a new folder `the_theme_name` in `/usr/share/ssowat/portal/assets/themes/`. + +! **Beware** that adding third-party themes from random strangers on the internet **is a security risk**. It is equivalent to running someone's else code on your machine, which can be used for malicious purpose such as stealing credentials! + +There are a handful of themes listed [on Github](https://github.com/yunohost-themes). + +## Creating your own theme + +You can create your own theme by copying the existing theme of your choice. For instance starting from the light theme: + +```bash +cp -r /usr/share/ssowat/portal/assets/themes/{light,your_own_theme} +``` + +Then, edit the files the CSS and JS files in `/usr/share/ssowat/portal/assets/themes/your_own_theme` according to what you want to do: + +- `custom_portal.css` can be used to add custom CSS rules to the user portal; +- `custom_overlay.css` can be used to customize the small YunoHost button overlay, displayed on apps page which includes it; +- `custom_portal.js` can be used to add custom JS code to be ran both on the user portal or when injecting the small YunoHost button / overlay. + +You can also add your own images and assets which can then be used by the CSS and JS files. + +!!! Share your custom theme with the community! https://github.com/yunohost-themes + +### Example : customizing the logo + +You may create your own theme simply to change the "branding" of the YunoHost user portal and replace the YunoHost logo with you own! + +To do so, upload your logo to `/usr/share/ssowat/portal/assets/themes/your_own_theme/`, and use the following CSS rules: + +```css +/* Inside custom_portal.css */ +#ynh-logo { + background-image: url("./your_logo.png"); +} + +/* Inside custom_overlay.css */ +#ynh-overlay-switch { + background-image: url("./your_logo.png"); +} +``` diff --git a/pages/02.administer/60.extend/20.helpers/helpers.md b/pages/02.administer/60.extend/20.helpers/helpers.md new file mode 100644 index 00000000..a7cb0340 --- /dev/null +++ b/pages/02.administer/60.extend/20.helpers/helpers.md @@ -0,0 +1,5 @@ +--- +title: App helpers +template: docs +redirect: '/packaging_apps_helpers' +--- diff --git a/pages/02.administer/60.extend/25.hooks/hooks.md b/pages/02.administer/60.extend/25.hooks/hooks.md new file mode 100644 index 00000000..5be0ac0f --- /dev/null +++ b/pages/02.administer/60.extend/25.hooks/hooks.md @@ -0,0 +1,5 @@ +--- +title: Hooks +template: docs +redirect: '/packaging_apps_hooks' +--- diff --git a/pages/02.administer/60.extend/30.api/admin_api.fr.md b/pages/02.administer/60.extend/30.api/admin_api.fr.md new file mode 100644 index 00000000..edd3a04b --- /dev/null +++ b/pages/02.administer/60.extend/30.api/admin_api.fr.md @@ -0,0 +1,63 @@ +--- +title: Administration depuis l'API ou une application externe +template: docs +taxonomy: + category: docs +routes: + default: '/admin_api' +--- + +Toutes les actions exécutables en ligne de commande le sont également via une API. L’API est accessible à l’adresse https://votre.serveur/yunohost/api. +Pour le moment, il n'existe pas de documentation des différentes routes... mais vous pouvez trouver l'actionmap [ici](https://github.com/YunoHost/yunohost/blob/dev/share/actionsmap.yml) (en particulier les clefs `api`) + +## Avec cURL + +Il faut d’abord récupérer un cookie de connexion pour ensuite réaliser les actions. Voici un exemple avec cURL : + +```bash +# Login (avec mot de passe admin) +curl -k -H "X-Requested-With: customscript" \ + -d "password=supersecretpassword" \ + -dump-header headers \ + https://your.server/yunohost/api/login + +# Exemple de GET +curl -k -i -H "Accept: application/json" \ + -H "Content-Type: application/json" \ + -L -b headers -X GET https://your.server/yunohost/api/ROUTE \ + | grep } | python -mjson.tool +``` + +## Avec une classe PHP + +Pour simplifier l’administration à distance d’une instance YunoHost dans le cadre d’un projet CHATONS/Librehosters, des classes API ont été développées par des utilisateurs. + +Par exemple, cette [classe PHP](https://github.com/scith/yunohost-api-php) vous permettra d’administrer votre instance YunoHost depuis une application PHP (site Web, outil de gestion de capacité...). + +Voici un exemple de code PHP permettant d’ajouter un utilisateur dans votre instance YunoHost : + +```php +require("ynh_api.class.php"); +$ynh = new YNH_API("adresse IP du serveur YunoHost ou nom d’hôte", "mot de passe administrateur"); + +if ($ynh->login()) { + $domains = $ynh->get("/domains"); + $first_domain = $domains['domains'][0]; + + $arguments = array( + 'username' => 'test', + 'password' => 'yunohost', + 'firstname' => 'Prénom', + 'lastname' => 'Nom', + 'mail' => 'test@'.$first_domain, + 'mailbox_quota' => '500M' + ); + + $user_add = $ynh->post("/users", $arguments); + print_r($user_add); + +} else { + print("Login to YunoHost failed.\n"); + exit; +} +``` diff --git a/pages/02.administer/60.extend/30.api/admin_api.md b/pages/02.administer/60.extend/30.api/admin_api.md new file mode 100644 index 00000000..7cfddcb6 --- /dev/null +++ b/pages/02.administer/60.extend/30.api/admin_api.md @@ -0,0 +1,67 @@ +--- +title: Administration from the API or an external application +template: docs +taxonomy: + category: docs +routes: + default: '/admin_api' +--- + +All command line actions can also be ran from the web API. The API is available at https://your.server/yunohost/api. + +## Test with curl +You must first retrieve a login cookie thanks to the /login route to perform the other actions. + +```bash +# Login (with admin password) +curl -k -H "X-Requested-With: customscript" \ + -d "credentials=supersecretpassword" \ + -dump-header headers \ + https://your.server/yunohost/api/login + +# GET example +curl -k -i -H "Accept: application/json" \ + -H "Content-Type: application/json" \ + -H 'Cookie: yunohost.admin="XXXXXXXX"' \ + -L -b headers -X GET https://your.server/yunohost/api/ROUTE \ + | grep } | python -mjson.tool +``` + +## Test with our swagger doc + + 1. Login on the [Webadmin of demo.yunohost.org](https://demo.yunohost.org/yunohost/admin/) + 2. Use the `Try it out` button on the API endpoint you want to test + +
+ + + + + + + diff --git a/pages/02.administer/60.extend/extend.md b/pages/02.administer/60.extend/extend.md new file mode 100644 index 00000000..6a7d9ccc --- /dev/null +++ b/pages/02.administer/60.extend/extend.md @@ -0,0 +1,10 @@ +--- +title: Understand and extend YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/extend' +--- + +!! This section is to be written diff --git a/pages/02.administer/admindoc.de.md b/pages/02.administer/admindoc.de.md new file mode 100644 index 00000000..aa2fcb86 --- /dev/null +++ b/pages/02.administer/admindoc.de.md @@ -0,0 +1,12 @@ +--- +title: Administratorhandbuch +template: chapter +taxonomy: + category: docs +routes: + default: '/admindoc' +--- + +### Administrieren + +# Entdecke das Selbsthosten und lerne, wie YunoHost installiert und benutzt wird diff --git a/pages/02.administer/admindoc.es.md b/pages/02.administer/admindoc.es.md new file mode 100644 index 00000000..7a8fd7fd --- /dev/null +++ b/pages/02.administer/admindoc.es.md @@ -0,0 +1,12 @@ +--- +title: Admin guide +template: chapter +taxonomy: + category: docs +routes: + default: /admindoc +--- + +### Administrar + +# Descubre el auto-hospedaje, cómo instalar y usar tu YunoHost \ No newline at end of file diff --git a/pages/02.administer/admindoc.fr.md b/pages/02.administer/admindoc.fr.md new file mode 100644 index 00000000..bedfb7c6 --- /dev/null +++ b/pages/02.administer/admindoc.fr.md @@ -0,0 +1,12 @@ +--- +title: Guide d'administration +template: chapter +taxonomy: + category: docs +routes: + default: '/admindoc' +--- + +### Administrer + +# Découvrez l'auto-hébergement, comment installer et utiliser YunoHost diff --git a/pages/02.administer/admindoc.it.md b/pages/02.administer/admindoc.it.md new file mode 100644 index 00000000..0b5090d9 --- /dev/null +++ b/pages/02.administer/admindoc.it.md @@ -0,0 +1,15 @@ + + + +--- +title: Guida di amministrazione +template: chapter +taxonomy: + category: docs +routes: + default: '/admindoc' +--- + +### Amministrare + +# Scoprire il self-hosting, come installare e utilizzare YunoHost diff --git a/pages/02.administer/admindoc.md b/pages/02.administer/admindoc.md new file mode 100644 index 00000000..8cd06ba6 --- /dev/null +++ b/pages/02.administer/admindoc.md @@ -0,0 +1,12 @@ +--- +title: Administration guide +template: chapter +taxonomy: + category: docs +routes: + default: '/admindoc' +--- + +### Administer + +# Learn about self-hosting, how to install and use YunoHost diff --git a/pages/02.administer/admindoc.ru.md b/pages/02.administer/admindoc.ru.md new file mode 100644 index 00000000..db29f4d9 --- /dev/null +++ b/pages/02.administer/admindoc.ru.md @@ -0,0 +1,12 @@ +--- +title: Руководство для администраторов +template: chapter +taxonomy: + category: docs +routes: + default: '/admindoc' +--- + +### Управление + +# Узнайте о самостоятельном хостинге, о том, как установить и использовать YunoHost diff --git a/pages/03.user_guide/05.emailclients/email_configure_client.de.md b/pages/03.user_guide/05.emailclients/email_configure_client.de.md new file mode 100644 index 00000000..27d221a7 --- /dev/null +++ b/pages/03.user_guide/05.emailclients/email_configure_client.de.md @@ -0,0 +1,60 @@ +--- +title: E-Mail-Client konfigurieren +template: docs +taxonomy: + category: docs +routes: + default: '/email_configure_client' +--- + +Sie können E-Mails über Ihre YunoHost-Instanz von Desktop-E-Mail-Clients wie Mozilla Thunderbird oder auf Ihrem Smartphone mit Anwendungen wie K-9 Mail abrufen und versenden. + +Moderne Mail-Clients sollten in der Lage sein, sich automatisch zu konfigurieren. Wenn die Autokonfiguration fehlschlägt, können Sie sie manuell vornehmen, indem Sie die folgenden Anweisungen befolgen. (Wenn die Autokonfiguration fehlschlägt, sollte dies als ein Fehler in YunoHost verstanden werden, und wir würden uns freuen, Ihr Feedback zu lesen, um das Problem auf unserer Seite zu reproduzieren). + +### Allgemeine Einstellungen + +Hier sind die Elemente, die Sie eingeben sollten, um Ihren Mail-Client manuell zu konfigurieren (`domain.tld` bezieht sich auf das, was nach dem @ in Ihrer E-Mail Adresse steht, und `Benutzername` auf das, was vor dem @ steht). + +| Protokoll | Port | Verschlüsselung | Authentifizierung | Benutzername | +| :--: | :-: | :--: | :--: | :--: | +| IMAP | 993 | SSL/TLS | Normales Passwort | `Benutzername` (ohne die `@domain.tld`) | +| SMTP | 587 | STARTTLS | Normales Passwort | `Benutzername` (ohne die `@domain.tld`) | + +### Client für Client +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Mozilla Thunderbird"] +##### ![](image://thunderbird.png?resize=50&classes=inline) Mozilla Thunderbird konfigurieren (auf einem Desktop-Computer) + +Um ein neues Konto in Thunderbird manuell zu konfigurieren, fügen Sie die Kontoinformationen hinzu und wählen dann Port 993 mit SSL/TLS für IMAP und Port 587 mit STARTTLS für SMTP. Wählen Sie anschließend "Normales Passwort" für die Authentifizierung und klicken Sie auf "Erweiterte Konfiguration". Möglicherweise müssen Sie die Zertifikatsausnahmen für das Abrufen von E-Mails und nach dem Senden Ihrer ersten E-Mail akzeptieren. Vergessen Sie nicht, den Punkt vor dem Domainnamen zu entfernen. + +![](image://thunderbird_config_1.png?resize=900) +![](image://thunderbird_config_2.png?resize=900) + +* [Alias-Mails verwalten](https://support.mozilla.org/de/kb/configuring-email-aliases) + +[/ui-tab] +[ui-tab title="K-9 Mail"] +##### ![](image://k9mail.png?resize=50&classes=inline) K-9 Mail konfigurieren (auf Android) + +Führen Sie die folgenden Schritte aus. (Wie bei Thunderbird müssen Sie möglicherweise an einigen Stellen Zertifikate akzeptieren) + +![](image://k9mail_config_1.png?resize=280&classes=inline) +![](image://k9mail_config_2.png?resize=280&classes=inline) +![](image://k9mail_config_3.png?resize=280&classes=inline) +![](image://k9mail_config_4.png?resize=280&classes=inline) + + +[/ui-tab] +[ui-tab title="Dekko"] +##### ![](image://dekko-app.png?resize=50&classes=inline) Dekko konfigurieren (auf Ubuntu Touch) + +Beim ersten Mal können Sie einfach "Konto hinzufügen" wählen. Wenn Sie bereits ein Konto eingerichtet haben, tippen Sie auf das Hamburger-Menü, dann auf das Zahnrad, wählen Sie Mail, Konten und drücken Sie das '+'-Symbol. + +Dann wählen Sie IMAP. Füllen Sie die Felder aus und drücken Sie auf Weiter. Jetzt sucht Dekko nach der Konfiguration. Überprüfen Sie, ob alle Felder korrekt ausgefüllt sind. Vergewissern Sie sich, dass Sie Ihren yunohost-Benutzernamen und NICHT Ihre Mailadresse eingeben und wählen Sie "Nicht vertrauenswürdige Zertifikate zulassen". Tun Sie dies für IMAP und SMTP und drücken Sie auf Weiter. Dekko wird nun das Konto synchronisieren, danach sind Sie fertig. Herzlichen Glückwunsch! + +![](image://dekko_config_1.png?resize=280&classes=inline) +![](image://dekko_config_2.png?resize=280&classes=inline) +![](image://dekko_config_3.png?resize=280&classes=inline) +![](image://dekko_config_4.png?resize=280&classes=inline) +[/ui-tab] +[/ui-tabs] diff --git a/pages/03.user_guide/05.emailclients/email_configure_client.es.md b/pages/03.user_guide/05.emailclients/email_configure_client.es.md new file mode 100644 index 00000000..871841d6 --- /dev/null +++ b/pages/03.user_guide/05.emailclients/email_configure_client.es.md @@ -0,0 +1,39 @@ +--- +title: Configurar un cliente de correo electrónico +template: docs +taxonomy: + category: docs +routes: + default: '/email_configure_client' +--- + +Es posible de consultar y enviar correos de tu YunoHost con un cliente de correo electrónico como Mozilla Thunderbird o K-9 Mail en el teléfono. +Normalmente, al añadir tu cuenta en el cliente de correo se va a configurar automáticamente, pero por si acaso no funciona, puedes configurarlo manualmente. + +### Configuración general + +A continuación puedes encontrar los elementos a configurar en el cliente de correo (`domain.tld` es todo lo que es después de @ en tu dirección de correo, y `nombre_de_usuario` es lo que es antes del @). + +| Protocolo | Puerto | Seguridad | Autenticación | Nombre de usuario | +| :--: | :-: | :--: | :--: | :--: | +| IMAP | 993 | SSL/TLS | Normal password | `nombre_de_usuario` (sin `@domain.tld`) | +| SMTP | 587 | STARTTLS | Normal password | `nombre_de_usuario` (sin `@domain.tld`) | + + +### ![](image://thunderbird.png?resize=50&classes=inline) Configurar Mozilla Thunderbird (en un ordenador) + +Para configurar manualmente un nuevo cuenta en Thunderbird, añadir las informaciones de la cuenta, y después seleccionar el puerto 993 con SSL/TLS para IMAP, y puerto 587 con STARTTLS para SMTP. Después seleccionar 'Normal Password' para Autenticación y haz click en el botón 'Advanced Config'. Se puede que tendrás que aceptar los certificados para que todo funciona normalmente. + +![](image://thunderbird_config_1.png?resize=900) +![](image://thunderbird_config_2.png?resize=900) + +* [Gestionar un alias para una dirección de correo electrónico](https://support.mozilla.org/es/kb/configurar-un-alias-para-una-direccin-de-correo-el) + +### ![](image://k9mail.png?resize=50&classes=inline) Configurar K-9 Mail (en Android) + +Seguir los pasos a continuación. (Como para Thunderbird, se puede que tendrás que aceptar los certificados para que funciona normalmente.) + +![](image://k9mail_config_1.png?resize=280&classes=inline) +![](image://k9mail_config_2.png?resize=280&classes=inline) +![](image://k9mail_config_3.png?resize=280&classes=inline) +![](image://k9mail_config_4.png?resize=280&classes=inline) diff --git a/pages/03.user_guide/05.emailclients/email_configure_client.fr.md b/pages/03.user_guide/05.emailclients/email_configure_client.fr.md new file mode 100644 index 00000000..90fffb43 --- /dev/null +++ b/pages/03.user_guide/05.emailclients/email_configure_client.fr.md @@ -0,0 +1,60 @@ +--- +title: Configurer un client email +template: docs +taxonomy: + category: docs +routes: + default: '/email_configure_client' +--- + +Vous pouvez récupérer et envoyer des emails avec votre instance YunoHost grâce à des logiciels comme Mozilla Thunderbird, ou sur votre smartphone grâce à des applications comme K-9 Mail. + +Normalement, votre client email devrait recevoir la configuration automatiquement lorsque vous ajoutez un compte. Si cela ne fonctionne pas, il est possible de le faire manuellement en suivant les quelques étapes suivantes. (Cependant, cela devrait être compris comme étant un bug dans YunoHost, et le cas échéant, c'est cool si vous nous notifiez du problème pour que nous puissions tenter de le reproduire et corriger !) + +### Réglages génériques + +Voici les éléments que vous devrez entrer pour configurer manuellement votre client email (`votre.domaine.tld` fait référence à ce qui est après le @ dans votre adresse email, et `nom_utilisateur` ce qui est avant @). + +| Protocole | Port | Chiffrement | Authentification | Login | +| :--: | :-: | :--: | :--: | :--: | +| IMAP | 993 | SSL/TLS | Mot de passe normal | `nom_utilisateur` (sans `@votre.domaine.tld`) | +| SMTP | 587 | STARTTLS | Mot de passe normal | `nom_utilisateur` (sans `@votre.domaine.tld`) | + + +### Client par client +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Mozilla Thunderbird"] +##### ![](image://thunderbird.png?resize=50&classes=inline) Configurer Mozilla Thunderbird + +Pour configurer manuellement un nouveau compte dans Thunderbird commencez par remplir les informations de base (nom, adresse et mot de passe), cliquez sur Continuer puis Configuration Manuelle. Enlevez le `.` avant le nom de domaine. Sélectionnez le port 993 avec SSL/TLS pour IMAP, et le port 587 avec STARTTLS pour SMTP. Sélectionnez 'Mot de passe normal' pour l'authentification. Testez la configuration puis validez (il vous faudra ensuite peut-être accepter des certificats pour que tout fonctionne correctement). + +![](image://thunderbird_config_1.png?resize=900) +![](image://thunderbird_config_2.png?resize=900) + +* [Gérer les alias mails](https://support.mozilla.org/en-US/kb/configuring-email-aliases) + +[/ui-tab] +[ui-tab title="K-9 Mail"] +##### ![](image://k9mail.png?resize=50&classes=inline) Configurer K-9 Mail (sur Android) + +Suivez les instructions suivantes (comme pour Thunderbird, il vous faudra peut-être accepter des certificats à un moment). + +![](image://k9mail_config_1.png?resize=280&classes=inline) +![](image://k9mail_config_2.png?resize=280&classes=inline) +![](image://k9mail_config_3.png?resize=280&classes=inline) +![](image://k9mail_config_4.png?resize=280&classes=inline) + +[/ui-tab] +[ui-tab title="Dekko"] +##### ![](image://dekko-app.png?resize=50&classes=inline) Configurer Dekko (sur Ubuntu Touch) + +La première fois, vous pouvez simplement choisir « Ajouter un compte ». Si vous avez déjà un compte configuré, appuyez sur le menu hamburger puis sur le rouage, choisissez Courrier, Comptes et appuyez sur le symbole '+'. + +Sélectionnez ensuite IMAP. Remplissez les champs et appuyez sur Suivant. Dekko va ensuite chercher la configuration. Vérifiez que tous les champs sont corrects. Assurez-vous d'avoir votre nom d'utilisateur YunoHost, PAS votre adresse email, et choisissez « Autoriser les certificats non fiables ». Faites ceci pour IMAP et SMTP et appuyez sur Suivant. Dekko va ensuite synchroniser le compte, après quoi vous aurez terminé. Félicitations ! + +![](image://dekko_config_1.png?resize=280&classes=inline) +![](image://dekko_config_2.png?resize=280&classes=inline) +![](image://dekko_config_3.png?resize=280&classes=inline) +![](image://dekko_config_4.png?resize=280&classes=inline) +[/ui-tab] +[/ui-tabs] diff --git a/pages/03.user_guide/05.emailclients/email_configure_client.it.md b/pages/03.user_guide/05.emailclients/email_configure_client.it.md new file mode 100644 index 00000000..c1647a30 --- /dev/null +++ b/pages/03.user_guide/05.emailclients/email_configure_client.it.md @@ -0,0 +1,61 @@ +--- +title: Configurare un programma per mail +template: docs +taxonomy: + category: docs +routes: + default: '/email_configure_client' +--- + +Con la vostra istanza YunoHost potete inviare e ricevere email grazie a programmi come Mozilla Thunderbird sul pc o K-9 Mail sul vostro smartphone. + +Normalmente, il vostro client email si configura automaticamente quando aggiungete un account. Nel caso la configurazione automatica non funzionasse, è possibile configurare manualmente il client, seguendo i passaggi successivi. (la mancata configurazione automatica del client, è da considerarsi come un bug di YunoHost, sarebbe gentile da parte vostra farci pervenire una segnalazione, potremmo così cercare di correggere il problema!) + +### Impostazioni generiche + +Ecco i valori da immettere per la configurazione manuale del vostro client mail (`vostro.dominio.tld` si riferisce a quello che appare dopo la @ nel vostro indirizzo mail, `nome utente` è riferito a quello che appare prima della @). + +|Protocollo | Porta | Sicurezza della connessione | Metodo di autenticazione | Nome utente +| :--: | :-: | :--: | :--: | :--: | +| IMAP | 993 | SSL/TLS | Password normale | nome utente (senza `@vostro.domino.tld`) | +| SMTP | 587 | STARTTLS | Password normale| nome utente (senza `@vostro.domino.tld`) | + +### Esempio di alcuni client +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Mozilla Thunderbird"] +##### ![](image://thunderbird.png?resize=50&classes=inline) Configurazione di Mozilla Thunderbird (su computer desktop) + +Per configurare manualmente un nuovo account in Thunderbird, iniziate ad inserire le informazioni iniziali (nome, indirizzo e password), cliccate su Continua e poi su Configurazione Manuale selezionando la porta 993 con SSL/TLS per IMAP e la porta 587 con STARTTLS per SMTP. Selezionate 'Password normale' come autenticazione e poi cliccate su 'Configurazione avanzata'. Può darsi che dobbiate accettare l'eccezione per il certificato prima di riuscire a scaricare l'email e prima di riuscire ad inviare la prima email. Non dimenticate di togliere il punto prima del nome del dominio. + +![](image://thunderbird_config_1.png?resize=900) +![](image://thunderbird_config_2.png?resize=900) + +* [Gestione alias email](https://support.mozilla.org/en-US/kb/configuring-email-aliases) + +[/ui-tab] +[ui-tab title="K-9 Mail"] +##### ![](image://k9mail.png?resize=50&classes=inline) Configurazione di K-9 Mail (per Android) + +Seguite le istruzioni seguenti (come per dovrete forse accettare i certificati affinché tutto funzioni correttamente): + +![](image://k9mail_config_1.png?resize=280&classes=inline) +![](image://k9mail_config_2.png?resize=280&classes=inline) +![](image://k9mail_config_3.png?resize=280&classes=inline) +![](image://k9mail_config_4.png?resize=280&classes=inline) + + +[/ui-tab] +[ui-tab title="Dekko"] +##### ![](image://dekko-app.png?resize=50&classes=inline) Configurazione di Dekko (per Ubuntu Touch) + +Se nessun account è già configurato, potete semplicemente scegliere "Aggiungi account". Se un account è già presente, premete sul menù a panino e in seguito sugli ingranaggi, scegliete Mail, Accounts e il simbolo '+'. + +Selezionate IMAP. Compilate i campi e premete Successivo. Dekko cercherà la configurazione necessaria. Controllate che tutti i campi siano corretti. Assicuratevi di aver inserito come nome utente il nome utente di YunoHost e NON il vostro indirizzo mail, scegliete "Autorizza certificati non firmati". Effettuate queste operazioni per IMAP e per SMTP e premete Successivo. Aspettate che Dekko termini la sincronizzazione dell'account. Avete finito! Complimenti! + +![](image://dekko_config_1.png?resize=280&classes=inline) +![](image://dekko_config_2.png?resize=280&classes=inline) +![](image://dekko_config_3.png?resize=280&classes=inline) +![](image://dekko_config_4.png?resize=280&classes=inline) +[/ui-tab] +[/ui-tabs] + diff --git a/pages/03.user_guide/05.emailclients/email_configure_client.md b/pages/03.user_guide/05.emailclients/email_configure_client.md new file mode 100644 index 00000000..d5a95bdc --- /dev/null +++ b/pages/03.user_guide/05.emailclients/email_configure_client.md @@ -0,0 +1,60 @@ +--- +title: Configuring email client +template: docs +taxonomy: + category: docs +routes: + default: '/email_configure_client' +--- + +You can fetch and send emails using your YunoHost instance from desktop email clients such as Mozilla Thunderbird or on your smartphone with applications like K-9 Mail. + +Modern mail clients should be able to configure themselves automatically. If autoconfiguration fails, you can do it manually following the instructions below. (If the autoconfiguration fails though, it should be understood as a bug in YunoHost, and we would be glad to read your feedback to try to reproduce the issue on our side!) + +### Generic settings + +Here are the element you should enter to manually configure your mail client (`domain.tld` refers to what's after the @ in your email address, and `username` what's before @). + +| Protocol | Port | Encryption | Authentication | Username | +| :--: | :-: | :--: | :--: | :--: | +| IMAP | 993 | SSL/TLS | Normal password | `username` (without the `@domain.tld`) | +| SMTP | 587 | STARTTLS | Normal password | `username` (without the `@domain.tld`) | + +### Client by client +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Mozilla Thunderbird"] +##### ![](image://thunderbird.png?resize=50&classes=inline) Configure Mozilla Thunderbird (on a desktop computer) + +To manually configure a new account in Thunderbird, add the account information, then select port 993 with SSL/TLS for IMAP, and port 587 with STARTTLS for SMTP. Afterwards select 'Normal Password' for Authentication and click on 'Advanced Config'. You may need to accept the certificate exceptions for fetching mails and after you send your first mail. Don't forget to remove the dot before the domain name. + +![](image://thunderbird_config_1.png?resize=900) +![](image://thunderbird_config_2.png?resize=900) + +* [Manage alias mails](https://support.mozilla.org/en-US/kb/configuring-email-aliases) + +[/ui-tab] +[ui-tab title="K-9 Mail"] +##### ![](image://k9mail.png?resize=50&classes=inline) Configure K-9 Mail (on Android) + +Follow the following steps. (As for Thunderbird, you might need to accept certificates at some points) + +![](image://k9mail_config_1.png?resize=280&classes=inline) +![](image://k9mail_config_2.png?resize=280&classes=inline) +![](image://k9mail_config_3.png?resize=280&classes=inline) +![](image://k9mail_config_4.png?resize=280&classes=inline) + + +[/ui-tab] +[ui-tab title="Dekko"] +##### ![](image://dekko-app.png?resize=50&classes=inline) Configure Dekko (on Ubuntu Touch) + +The first time you can simply choose "Add account". If you already have an account configured, tap the hamburger menu then tap the gear, choose Mail, Accounts and press the '+'-symbol. + +Then you choose IMAP. Fill in the fields and press Next. Now Dekko will look for the configuration. Check that all fields are correct. Make sure you have your yunohost username, NOT your email address and choose "Allow untrusted certificates". Do this for IMAP and SMTP and press Next. Dekko will now synchronise the account after which you are done. Congratz! + +![](image://dekko_config_1.png?resize=280&classes=inline) +![](image://dekko_config_2.png?resize=280&classes=inline) +![](image://dekko_config_3.png?resize=280&classes=inline) +![](image://dekko_config_4.png?resize=280&classes=inline) +[/ui-tab] +[/ui-tabs] diff --git a/pages/03.user_guide/10.email_migration/email_migration.fr.md b/pages/03.user_guide/10.email_migration/email_migration.fr.md new file mode 100644 index 00000000..69859b6e --- /dev/null +++ b/pages/03.user_guide/10.email_migration/email_migration.fr.md @@ -0,0 +1,46 @@ +--- +title: Migrer ses emails d'un ancien serveur mail vers YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/email_migration' +--- + +*[Documentation en rapport avec l’email de YunoHost](/email)*. + +La migration des emails d’un serveur à un autre peut se faire via deux outils recommandés : ImapSync ou Larch. + +Cet outil doit être installé sur votre ordinateur de bureau. La procédure de transfert est comme sur le schéma : + +**`Ancien serveur email −> ordinateur client avec ImapSync ou Larch −> nouveau serveur email`** + +### ImapSync + +[Site d’ImapSync](http://imapsync.lamiral.info/) + +Installez ImapSync sur votre ordinateur client en suivant ce [guide](http://imapsync.lamiral.info/INSTALL) : +```bash +sudo dnf install imapsync # Sous Fedora +``` +Transférez les mails d’un serveur à l’autre : +```bash +imapsync --host1 --port1 993 --ssl1 --user1 --password1 \ +--host2 --port2 993 --ssl2 --user2 --password2 +``` + +Notez que les paramètres de transfert `--port 993` et `--ssl` sont spécifiques à un serveur de mail YunoHost. + +### Larch + +[Site de Larch](https://github.com/rgrove/larch/) + +Après avoir préalablement installé `gem`, installez `larch` sur votre ordinateur client : +```bash +sudo gem install larch +``` +Transférez les mails d’un serveur à l’autre : +```bash +larch -a -f imaps://serveur_d'origine.org -t imaps://serveur_de_destination.org +``` +Pour d’autres types de transferts référez-vous à la documentation de Larch. diff --git a/pages/03.user_guide/10.email_migration/email_migration.md b/pages/03.user_guide/10.email_migration/email_migration.md new file mode 100644 index 00000000..20d40c0e --- /dev/null +++ b/pages/03.user_guide/10.email_migration/email_migration.md @@ -0,0 +1,46 @@ +--- +title: Migrating email from an email provider to a YunoHost instance +template: docs +taxonomy: + category: docs +routes: + default: '/email_migration' +--- + +*[Documentation linked to YunoHost email](/email)*. + +Migration of emails from one server to another can be done with two recommended tools: ImapSync or Larch. + +This tool must be installed on your desktop computer. The transfer method looks at this schema: + +**`Old email server −> desktop computer with ImapSync or Larch −> new email server`** + +### ImapSync + +[ImapSync site](http://imapsync.lamiral.info/) + +Install ImapSync on your client computer by following this [guide](http://imapsync.lamiral.info/INSTALL): +```bash +sudo dnf install imapsync # Under Fedora +``` +Transfer emails from one server to another: +```bash +imapsync --host1 --port1 993 --ssl1 --user1 --password1 \ +--host2 --port2 993 --ssl2 --user2 --password2 +``` + +Note that transfer settings `--port 993` and `--ssl` are specific to YunoHost email server. + +### Larch + +[Larch site](https://github.com/rgrove/larch/) + +After beforehand installed `gem`, install `larch` on your client computer: +```bash +sudo gem install larch +``` +Transfer emails from one server to another: +```bash +larch -a -f imaps://serveur_d'origine.org -t imaps://serveur_de_destination.org +``` +For other types of transfer refer to [Larch documentation](https://github.com/rgrove/larch#label-Usage). diff --git a/pages/03.user_guide/15.xmpp/xmpp.es.md b/pages/03.user_guide/15.xmpp/xmpp.es.md new file mode 100644 index 00000000..69466c08 --- /dev/null +++ b/pages/03.user_guide/15.xmpp/xmpp.es.md @@ -0,0 +1,62 @@ +--- +title: Chat, VoIP y red local con XMPP +template: docs +taxonomy: + category: docs +routes: + default: '/XMPP' +--- + +![](image://XMPP_logo.png?resize=100) + +YunoHost está instalado con un servidor de mensajería instantánea Metronome que implementa el [protocolo XMPP](https://es.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol). + +XMPP es un protocolo abierto y extensible que también permite crear salones de discusión, compartir status y datos, echar llamadas en VoIP y hacer videoconferencias. + +Todas las aplicaciones basadas en XMPP son compatibles entre ellas : cuando utilizas un cliente XMPP puedes discutir con cualquier persona que tenga una cuenta XMPP/Jabber. Este protocolo ya es utilizado por millones de personas en el mundo. + +## Cuenta XMPP/Jabber + +Una cuenta XMPP/Jabber está basada en un ID bajo la forma `usuario@dominio.tld`, así como una contraseña. La contraseña es la de la cuenta del usuario de YunoHost. + +## Conectarse a XMPP + +Existen varios clientes web de tipo red social, como : +- [Movim](https://movim.eu) +- [ConverseJS](https://conversejs.org/) +- [Libervia/Salut à Toi](https://salut-a-toi.org/) + +También puedes utilizar un cliente Desktop como : +- [Gajim](https://gajim.org/es/) (Linux, Windows) +- [Dino](https://dino.im) (Linux) +- [Thunderbird](https://www.thunderbird.net/es-ES/) (multiplataformas) +- [Beagle IM](https://beagle.im/) (macOS) +- [Profanity](https://profanity-im.github.io/) (Linux) + +... o un cliente smartphone : +- [Conversations](https://conversations.im/) (Android) +- [Xabber](http://xabber.com) (Android) +- [Movim](https://movim.eu) (Android) +- [ChatSecure](https://chatsecure.org/) (iOS) +- [Siskin IM](https://siskin.im/) (iOS) +- [Monal](https://monal.im/) (iOS) +- [Kaidan](https://www.kaidan.im/) (Ubuntu Touch / Plasma Mobile) + +Aquí tienes una lista más exhaustiva de clientes XMPP (en) : https://xmpp.org/software/clients.html + +### Cifrar tu conversaciones con OMEMO : + +Es posible cifrar tu conversaciones XMPP con la ayuda de [OMEMO](https://xmpp.org/extensions/xep-0384.html), por ejemplo utilizando Gajim : +* Instalar `gajim` y el plugin `gajim-omemo` +* Activar el plugin en `Tools > Plugins` +* Activar el cifrado en una conversación con un contacto que también tiene OMEMO activado. + +### Salón de discusión + +Para crear un salón de discusión (Multi-user chat) en tu servidor YunoHost, utiliza el ID nombredelsalon@muc.dominio.tld (donde dominio.tld es el dominio principal de tu servidor). + +Si utilizas un nombre de dominio personal, es necesario [añadir una redirección de tipo CNAME para el subdominio `muc.`](/dns_config) en tu servidor DNS. + +### VoIP y videoconferencias + +Un buen medio de llamar a un contacto XMPP en VoIP o en llamada video, es utilizar el cliente [Jitsi](http://jitsi.org/). diff --git a/pages/03.user_guide/15.xmpp/xmpp.fr.md b/pages/03.user_guide/15.xmpp/xmpp.fr.md new file mode 100644 index 00000000..8ac31781 --- /dev/null +++ b/pages/03.user_guide/15.xmpp/xmpp.fr.md @@ -0,0 +1,69 @@ +--- +title: Chat, VoIP et réseau social avec XMPP +template: docs +taxonomy: + category: docs +routes: + default: '/XMPP' +--- + +![](image://XMPP_logo.png?resize=100) + +YunoHost est installé par défaut avec un serveur de messagerie instantanée Metronome qui implémente le [protocole XMPP](https://fr.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol) (anciennement connu sous le nom de Jabber). + +Ce protocole est déjà utilisé par des millions de personnes dans le monde - c'est un protocole ouvert. Toutes les applications basées sur XMPP sont compatibles entre elles : lorsque vous utilisez un client XMPP, vous pouvez interagir avec quiconque possède un compte XMPP. + +XMPP est un protocole extensible - cela signifie que les utilisateurs peuvent configurer des « extensions » pour les salons de discussions, partager des messages et des fichiers, et passer des appels voix et vidéo en utilisant XMPP. + +## Compte XMPP + +Pour utiliser XMPP, il est nécessaire de disposer d'un compte dont l'identifiant prend la forme `utilisateur@votre.domaine.tld`, ainsi qu’un mot de passe. + +Sous YunoHost, un compte XMPP est créé automatiquement pour chaque utilisateur. Les identifiants XMPP sont simplement l’adresse email principale de l'utilisateur ainsi que son mot de passe. + +## Se connecter à son compte XMPP YunoHost + +Il existe différents types de clients pour se connecter à XMPP. + +### Clients web + +- [Movim](https://movim.eu) +- [ConverseJS](https://conversejs.org/) +- [Libervia/Salut à Toi](https://salut-a-toi.org/) + +### Clients de bureau + +- [Gajim](http://gajim.org/fr/) (Linux, Windows) +- [Dino](https://dino.im) (Linux) +- [Thunderbird](https://www.thunderbird.net/) (multi-plateformes) +- [Beagle IM](https://beagle.im/) (macOS) +- [Profanity](https://profanity-im.github.io/) (Linux) + +### Clients sur mobile + +- [Conversations](https://conversations.im/) (Android) +- [Xabber](http://xabber.com) (Android) +- [Movim](https://movim.eu) (Android) +- [Monal](https://monal.im/) (iOS) +- [ChatSecure](https://chatsecure.org/) (iOS) +- [Siskin IM](https://siskin.im/) (iOS) +- [Kaidan](https://www.kaidan.im/) (Ubuntu Touch / Plasma Mobile) + +Voici une liste plus exhaustive des clients XMPP : [https://fr.wikipedia.org/wiki/Liste_de_clients_XMPP](https://fr.wikipedia.org/wiki/Clients_XMPP) + +## Chiffrer ses conversations avec OMEMO + +Il est possible de rendre les conversations plus sécurisées et privées en les chiffrant à l'aide de [OMEMO](https://xmpp.org/extensions/xep-0384.html), notamment en utilisant Gajim : +- Installez `gajim` et le plugin `gajim-omemo` ; +- Activez le plugin dans `Outils > Plugins` ; +- Activez le chiffrement dans une conversation avec un contact disposant de OMEMO. + +## Salon de discussion + +Pour créer un salon de discussion (Multi-user chat) sur votre serveur YunoHost, utilisez l’identifiant nomsalon@muc.domaine.tld (où domaine.tld est le domaine principal de votre serveur). + +Si vous utilisez un nom de domaine personnel, il est nécessaire d’[ajouter une redirection de type CNAME pour le sous domaine `muc.`](/dns_config) au niveau de votre serveur DNS. + +## VoIP et visioconférence + +Un moyen pratique d’appeler un contact XMPP, en VoIP ou en appel vidéo, est d’utiliser le client [Jitsi](http://jitsi.org/). diff --git a/pages/03.user_guide/15.xmpp/xmpp.it.md b/pages/03.user_guide/15.xmpp/xmpp.it.md new file mode 100644 index 00000000..6e146657 --- /dev/null +++ b/pages/03.user_guide/15.xmpp/xmpp.it.md @@ -0,0 +1,71 @@ +--- +title: Chat, Voip e social network con XMPP +template: docs +taxonomy: + category: docs +routes: + default: '/XMPP' +--- + +![](image://XMPP_logo.png?resize=100) + +L'installazione di YunoHost comprende il server di messaggistica istantanea Metronome che supporta il [protocollo XMPP](https://it.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol) (precedentemente conosciuto come Jabber). + +Questo protocollo utilizzato da milioni di persone nel mondo è un protocollo aperto. +Tutte le applicazioni basate su XMPP sono tra di loro compatibili: quando utilizzate un client XMPP potete interagire con chiunque possieda un account XMPP. + +XMPP è un protocollo espandibile: ciò significa che gli utenti possono configurare delle estensioni per le loro "stanze" di discussione, condividere messaggi e file, effettuare chiamate vocali e video utilizzando XMPP. + +## Account XMPP + +Per utilizzare XMPP è necessario disporre di un account che rispetti questa sintassi come identificativo: `utente@mio.dominio.tld` e di una password. + +In YunoHost un account XMPP è creato automaticamente per ogni utente. +L'identificativo XMPP corrisponde all'indirizzo mail principale di ogni utente e relativa password. + +## Collegarsi al proprio account XMPP YunoHost + +Esistono diversi client per connettersi all'account XMPP. + +### Client web + +- [Movim](https://movim.eu/) +- [ConverseJS](https://conversejs.org/) +- [Libervia/Salut à Toi](https://salut-a-toi.org/) + +### Client per pc + +- [Gajim](http://gajim.org/) (Linux, Windows) +- [Dino](https://dino.im/) (Linux) +- [Thunderbird](https://www.thunderbird.net/) (multi-piattaforma) +- [Beagle IM](https://beagle.im/) (macOS) +- [Profanity](https://profanity-im.github.io/) (Linux) + +### Client per smartphone + +- [Conversations](https://conversations.im/) (Android) +- [Xabber](http://xabber.com/) (Android) +- [Movim](https://movim.eu/) (Android) +- [Monal](https://monal.im/) (iOS) +- [ChatSecure](https://chatsecure.org/) (iOS) +- [Siskin IM](https://siskin.im/) (iOS) +- [Kaidan](https://www.kaidan.im/) (Ubuntu Touch / Plasma Mobile) + +Qui un elenco completo dei client XMPP [Qui](https://fr.wikipedia.org/wiki/Liste_de_clients_XMPP) trovate + +## Cifrare le conversazioni con OMEMO + +È possibile proteggere e cifrare le conversazioni con l'uso di [OMEMO encryption](https://xmpp.org/extensions/xep-0384.html), ben supportato in Gajim: +- Installate `gajim` e il plugim `gajim-omemo`. +- Attivate il plugin nel menù `Strumenti > Plugins`. +- Attivate la cifratura in una conversazione con un contatto che adotta OMEMO + +## Discussioni di gruppo + +Per creare un gruppo di discussione (Multi-user chat) sul vostro server YunoHost, dovete usare l'identificativo `nomedelgruppo@muc.miodominio.tld` (dove miodominio.tld è il dominio principale del vostro server). + +Se utilizzate un dominio personale, dovete [aggiungere un record `muc` nel DNS](/dns_config) nella configurazione del DNS. + +## VoIP e videochiamate + +Il client [Jitsi](https://jitsi.org/) permette di effettuare agevolmente chiamate VoIP e video chiamate. diff --git a/pages/03.user_guide/15.xmpp/xmpp.md b/pages/03.user_guide/15.xmpp/xmpp.md new file mode 100644 index 00000000..03767c82 --- /dev/null +++ b/pages/03.user_guide/15.xmpp/xmpp.md @@ -0,0 +1,71 @@ +--- +title: Chat, VoIP and social network with XMPP +template: docs +taxonomy: + category: docs +routes: + default: '/XMPP' +--- + +![](image://XMPP_logo.png?resize=100) + +By default, YunoHost comes installed with an instant messaging server called Metronome which implements the [XMPP protocol](https://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol) (previously known as Jabber). + +This protocol is already used by millions of people around the world—it is an open protocol. +All applications based on XMPP are compatible with each other: When using an XMPP client, you can interact with anybody who has an XMPP account. + +XMPP is an extensible protocol—this means users can configure "extensions" to chatrooms, share messages and files, and make voice and video calls using XMPP. + +## XMPP account + +To use an XMPP account you need a username, in the format: `user@domain.tld`, and a password. + +With YunoHost, an XMPP account is created for all YunoHost users automatically. +The XMPP account credentials corresponds to the user's main e-mail address and password. + +## Connecting to your YunoHost XMPP account + +You can connect to your YunoHost XMPP account in different ways. + +### Web clients + +- [Movim](https://movim.eu) +- [ConverseJS](https://conversejs.org/) +- [Libervia/Salut à Toi](https://salut-a-toi.org/) + +### Desktop clients + +- [Gajim](https://gajim.org/) (Linux, Windows) +- [Dino](https://dino.im) (Linux) +- [Thunderbird](https://www.thunderbird.net/fr/) (multiplatform) +- [Beagle IM](https://beagle.im/) (macOS) +- [Profanity](https://profanity-im.github.io/) (Linux) + +### Mobile clients + +- [Conversations](https://conversations.im/) (Android) +- [Xabber](https://xabber.com) (Android) +- [Movim](https://movim.eu) (Android) +- [ChatSecure](https://chatsecure.org/) (iOS) +- [Monal](https://monal.im/) (iOS) +- [Siskin IM](https://siskin.im/) (iOS) +- [Kaidan](https://www.kaidan.im/) (Ubuntu Touch / Plasma Mobile) + +Here is an exhaustive list of XMPP clients: https://xmpp.org/software/clients.html + +## Encrypt conversations with OMEMO + +XMPP chats can be made secure and private using [OMEMO encryption](https://xmpp.org/extensions/xep-0384.html), for instance using Gajim: +- Install `gajim` and the plugin `gajim-omemo`. +- Turn on the plugin in `Tools > Plugins`. +- Turn on the encryption in the chat with somebody who also has OMEMO. + +## Chatrooms + +To create a chatroom (multi-user chat) on your YunoHost server, use the identifier `chatroomname@muc.yourdomain.tld`. + +For this to work you need to [add the corresponding `muc.` DNS record](/dns_config) in the DNS configuration. + +## VoIP and videoconferences + +A practical tool to call an XMPP client, either with voice or voice+video, is to use the [Jitsi](https://jitsi.org/) client. diff --git a/pages/03.user_guide/user_overview.fr.md b/pages/03.user_guide/user_overview.fr.md new file mode 100644 index 00000000..3c5f7d4c --- /dev/null +++ b/pages/03.user_guide/user_overview.fr.md @@ -0,0 +1,11 @@ +--- +title: Guide de l'utilisateur +menu: Guide de l'utilisateur +template: docs +taxonomy: + category: docs +routes: + default: '/user_guide' +--- + +!! Cette section est en cours d'élaboration. \ No newline at end of file diff --git a/pages/03.user_guide/user_overview.md b/pages/03.user_guide/user_overview.md new file mode 100644 index 00000000..c7b7616c --- /dev/null +++ b/pages/03.user_guide/user_overview.md @@ -0,0 +1,11 @@ +--- +title: User guide +menu: User guide +template: docs +taxonomy: + category: docs +routes: + default: '/user_guide' +--- + +!! This section is being worked on. \ No newline at end of file diff --git a/pages/04.applications/05.catalog/apps.de.md b/pages/04.applications/05.catalog/apps.de.md new file mode 100644 index 00000000..d21a53d6 --- /dev/null +++ b/pages/04.applications/05.catalog/apps.de.md @@ -0,0 +1,134 @@ +--- +title: Anwendungskatalog +template: docs +taxonomy: + category: docs +routes: + default: '/apps' +twig_first: true +process: + twig: true +--- + +
+Für diese Seite muss JavaScript aktiviert sein, damit sie korrekt angezeigt werden kann :s. +
+ +
+ + +
+ +!!! Das Packaging-Team für Anwendungen freut sich, Ihre Kommentare zu bekommen! ! Wenn Sie Probleme oder mögliche Verbesserungen durch die Installation einer Anwendung finden, zögern Sie nicht, mit Meldung von Fehlern direkt auf dem entsprechenden Code-Repository beizutragen. + +! Die markierten Anwendungen schlechte Qualität funktionieren wahrscheinlich, aber respektieren Sie keine guten Verpackungspraktiken oder unterstützen Sie keine bestimmten Funktionen wie Backups / Datenwiederherstellung oder die einmalige Authentifizierung. Seien Sie vorsichtig, wenn Sie sie installieren. + +{% set catalog = read_file('/var/www/app_yunohost/apps/builds/default/doc_catalog/apps.json')|json_decode(true) %} + +
+{% for app_id, infos in catalog.apps %} + +{% if grav.language.getActive in infos.description %} + {% set descr_lang = grav.language.getActive %} +{% else %} + {% set descr_lang = 'en' %} +{% endif %} + +
+
+{% if infos.good_quality %} + +{% endif %} +{{ infos.name }} +{{infos.category}} +{% if infos.broken %} +gebrochen +{% else %} +{% if infos.bad_quality %} +schlechte Qualität +{% endif %} +{% endif %} +
+
{{ infos.description[descr_lang] }}
+ +
+{% endfor %} +
+ +! Wenn Sie keine bestimmte Anwendung finden, nach der Sie suchen, können Sie es der [gewünschten Apps-Liste](/apps_wishlist) hinzufügen. + + + + diff --git a/pages/04.applications/05.catalog/apps.fr.md b/pages/04.applications/05.catalog/apps.fr.md new file mode 100644 index 00000000..1e3c36c7 --- /dev/null +++ b/pages/04.applications/05.catalog/apps.fr.md @@ -0,0 +1,134 @@ +--- +title: Catalogue d'applications +template: docs +taxonomy: + category: docs +routes: + default: '/apps' +twig_first: true +process: + twig: true +--- + +
+Cette page requiert que JavaScript soit activé pour s'afficher correctement :s. +
+ +
+ + +
+ +!!! L'équipe de packaging d'applications sera heureuse de recevoir vos commentaires ! Si vous trouvez des problèmes ou des améliorations possibles en installant une app, n'hésitez pas à contribuer en créant un ticket (issue) directement sur le dépôt de code. + +! Les applications étiquettées mauvaise qualité fonctionnent peut-être, mais ne respectent pas les bonnes pratiques de packaging ou ne supportent pas certaines fonctionnalités comme les sauvegardes/restauration ou l'authentication unifiée. Soyez prudent si vous les installez. + +{% set catalog = read_file('/var/www/app_yunohost/apps/builds/default/doc_catalog/apps.json')|json_decode(true) %} + +
+{% for app_id, infos in catalog.apps %} + +{% if grav.language.getActive in infos.description %} + {% set descr_lang = grav.language.getActive %} +{% else %} + {% set descr_lang = 'en' %} +{% endif %} + +
+
+{% if infos.good_quality %} + +{% endif %} +{{ infos.name }} +{{infos.category}} +{% if infos.broken %} +cassée +{% else %} +{% if infos.bad_quality %} +mauvaise qualité +{% endif %} +{% endif %} +
+
{{ infos.description[descr_lang] }}
+ +
+{% endfor %} +
+ +! Si vous ne trouvez pas une application précise que vous recherchez, vous pouvez l'ajouter à la [liste d'apps souhaitées](/apps_wishlist). + + + + diff --git a/pages/04.applications/05.catalog/apps.md b/pages/04.applications/05.catalog/apps.md new file mode 100644 index 00000000..421795f8 --- /dev/null +++ b/pages/04.applications/05.catalog/apps.md @@ -0,0 +1,136 @@ +--- +title: Application catalog +template: docs +taxonomy: + category: docs +routes: + default: '/apps' +twig_first: true +process: + twig: true +--- + +
+This page requires JavaScript enabled to display properly :s. +
+ +
+ + +
+ +!!! The application packaging team will welcome your feedback! If you install an app and find issues or possible improvements, do not hesitate to contribute by reporting your issues directly on the corresponding code repositories. + +! Applications flagged as low quality may be working, but they may not respect good packaging practices or lack integration of some features like backup/restore or single authentication. Be cautious when installing them. + +{% set catalog = read_file('/var/www/app_yunohost/apps/builds/default/doc_catalog/apps.json')|json_decode(true) %} + +
+{% for app_id, infos in catalog.apps %} + +{% if grav.language.getActive in infos.description %} + {% set descr_lang = grav.language.getActive %} +{% else %} + {% set descr_lang = 'en' %} +{% endif %} + +
+
+{% if infos.good_quality %} + +{% endif %} +{{ infos.name }} +{{infos.category}} +{% if infos.broken %} +broken +{% else %} +{% if infos.bad_quality %} +low quality +{% endif %} +{% endif %} +
+
{{ infos.description[descr_lang] }}
+ +
+{% endfor %} +
+ +! If you don't find the app you are looking for, you can add it to the [apps wishlist](/apps_wishlist). + + + + + + diff --git a/pages/04.applications/10.docs/20euros/app_20euros.fr.md b/pages/04.applications/10.docs/20euros/app_20euros.fr.md new file mode 100644 index 00000000..abb738be --- /dev/null +++ b/pages/04.applications/10.docs/20euros/app_20euros.fr.md @@ -0,0 +1,18 @@ +--- +title: 20 euros +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_20euros' +--- + +[![Installer 20 euros avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=20euros) [![Integration level](https://dash.yunohost.org/integration/20euros.svg)](https://dash.yunohost.org/appci/app/20euros) + +*20 euros* est une variante de 2048 avec des pièces et des billets en euros. + +## Liens utiles + ++ Site web : [github.com/jatekos101/20euros](https://github.com/jatekos101/20euros) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/20euros](https://github.com/YunoHost-Apps/20euros_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/20euros/issues](https://github.com/YunoHost-Apps/20euros_ynh/issues) diff --git a/pages/04.applications/10.docs/20euros/app_20euros.md b/pages/04.applications/10.docs/20euros/app_20euros.md new file mode 100644 index 00000000..85fe6a9b --- /dev/null +++ b/pages/04.applications/10.docs/20euros/app_20euros.md @@ -0,0 +1,18 @@ +--- +title: 20 euros +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_20euros' +--- + +[![Install 20 euros with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=20euros) [![Integration level](https://dash.yunohost.org/integration/20euros.svg)](https://dash.yunohost.org/appci/app/20euros) + +*20 euros* is a 2048 variant with Euro coins and notes. + +## Useful links + ++ Website: [github.com/jatekos101/20euros](https://github.com/jatekos101/20euros) ++ Application software repository: [github.com - YunoHost-Apps/20euros](https://github.com/YunoHost-Apps/20euros_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/20euros/issues](https://github.com/YunoHost-Apps/20euros_ynh/issues) diff --git a/pages/04.applications/10.docs/243/app_243.fr.md b/pages/04.applications/10.docs/243/app_243.fr.md new file mode 100644 index 00000000..f702277f --- /dev/null +++ b/pages/04.applications/10.docs/243/app_243.fr.md @@ -0,0 +1,19 @@ +--- +title: 243 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_243' +--- + +[![Installer 243 avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=243) [![Integration level](https://dash.yunohost.org/integration/243.svg)](https://dash.yunohost.org/appci/app/243) + +*243* est un clone du jeu 2048. + +## Liens utiles + ++ Site web : [github.com/hgentry/81/](https://github.com/hgentry/81/) ++ Demonstration: [Demo](https://hgentry.github.io/81/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/243](https://github.com/YunoHost-Apps/243_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/243/issues](https://github.com/YunoHost-Apps/243_ynh/issues) diff --git a/pages/04.applications/10.docs/243/app_243.md b/pages/04.applications/10.docs/243/app_243.md new file mode 100644 index 00000000..24aa4b4d --- /dev/null +++ b/pages/04.applications/10.docs/243/app_243.md @@ -0,0 +1,19 @@ +--- +title: 243 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_243' +--- + +[![Install 243 with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=243) [![Integration level](https://dash.yunohost.org/integration/243.svg)](https://dash.yunohost.org/appci/app/243) + +*243* is a 2048 game clone. + +## Useful links + ++ Website: [github.com/hgentry/81/](https://github.com/hgentry/81/) ++ Demonstration: [Demo](https://hgentry.github.io/81/) ++ Application software repository: [github.com - YunoHost-Apps/243](https://github.com/YunoHost-Apps/243_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/243/issues](https://github.com/YunoHost-Apps/243_ynh/issues) diff --git a/pages/04.applications/10.docs/abantecart/app_abantecart.md b/pages/04.applications/10.docs/abantecart/app_abantecart.md new file mode 100644 index 00000000..82c60f0f --- /dev/null +++ b/pages/04.applications/10.docs/abantecart/app_abantecart.md @@ -0,0 +1,21 @@ +--- +title: Abantecart +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_abantecart' +--- + +![abantecart's logo](image://abantecart_logo.svg?resize=,80) + +[![Install abantecart with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=abantecart) [![Integration level](https://dash.yunohost.org/integration/abantecart.svg)](https://dash.yunohost.org/appci/app/abantecart) + +AbanteCart is a free open source ecommerce platform to power online retail. AbanteCart is a ready to run web application as well as reliable foundation to build custom eCommerce solutions. AbanteCart ecommerce platform is designed to fit a wide variety of online businesses and applications, as well as can be configured or customized to perform very specific business requirements. Chosen by many shop owners launching their business online for the first time, AbanteCart is also picked by developers looking for a user-friendly interface and powerful features set. This YunoHost package will install abantecart for your YunoHost instance. + +## Useful links + ++ Website: [www.abantecart.com](https://www.abantecart.com) ++ Official documentation: [docs.abantecart.com](https://docs.abantecart.com) ++ Application software repository: [github.com - YunoHost-Apps/abantecart](https://github.com/YunoHost-Apps/abantecart_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/abantecart/issues](https://github.com/YunoHost-Apps/abantecart_ynh/issues) diff --git a/pages/04.applications/10.docs/adguardhome/app_adguardhome.md b/pages/04.applications/10.docs/adguardhome/app_adguardhome.md new file mode 100644 index 00000000..fe09cc10 --- /dev/null +++ b/pages/04.applications/10.docs/adguardhome/app_adguardhome.md @@ -0,0 +1,26 @@ +--- +title: AdGuard Home +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_adguardhome' +--- + +![AdGuard Home's logo](image://adguardhome-logo.png?resize=100) + + +[![Install AdGuard Home with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=adguardhome) +[![Integration level](https://dash.yunohost.org/integration/adguardhome.svg)](https://dash.yunohost.org/appci/app/adguardhome) + +**AdGuard Home** is a network-wide software for blocking ads & tracking. After you set it up, it'll cover ALL your home devices, and you don't need any client-side software for that. +It operates as a DNS server that re-routes tracking domains to a "black hole", thus preventing your devices from connecting to those servers. It's based on software we use for our public AdGuard DNS servers -- both share a lot of common code. + +## Useful links + +* Application software repository: [https://github.com/YunoHost-Apps/adguardhome_ynh](https://github.com/YunoHost-Apps/adguardhome_ynh) +* Official app website: [https://adguard.com/adguard-home.html](https://adguard.com/adguard-home.html) +* Official user documentation: [https://kb.adguard.com/en](https://kb.adguard.com/en) +* Official admin documentation: [https://github.com/AdguardTeam/AdGuardHome/wiki](https://github.com/AdguardTeam/AdGuardHome/wiki) +* Upstream app code repository: [https://github.com/AdguardTeam/AdGuardHome](https://github.com/AdguardTeam/AdGuardHome) +* Report a bug: [https://github.com/YunoHost-Apps/adguardhome_ynh/issues](https://github.com/YunoHost-Apps/adguardhome_ynh/issues) diff --git a/pages/04.applications/10.docs/adminer/app_adminer.fr.md b/pages/04.applications/10.docs/adminer/app_adminer.fr.md new file mode 100644 index 00000000..a0dac8c8 --- /dev/null +++ b/pages/04.applications/10.docs/adminer/app_adminer.fr.md @@ -0,0 +1,20 @@ +--- +title: Adminer +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_adminer' +--- + +![logo d'Adminer](image://adminer_logo.png?height=80) + +[![Install Adminer with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=adminer) [![Integration level](https://dash.yunohost.org/integration/adminer.svg)](https://dash.yunohost.org/appci/app/adminer) + +Adminer (anciennement phpMinAdmin, meilleure alternative à phpMyAdmin) est un outil de gestion de base de données (MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, SimpleDB, Elasticsearch, MongoDB). Remplacez phpMyAdmin par Adminer et vous obtiendrez une interface utilisateur plus ordonnée, une meilleure prise en charge des fonctionnalités MySQL, des performances plus élevées et plus de sécurité. [Voir comparaison détaillée](https://www.adminer.org/en/phpmyadmin). + +## Liens utiles + ++ Site web : [adminer.org (en)](https://www.adminer.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/adminer](https://github.com/YunoHost-Apps/adminer_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/adminer/issues](https://github.com/YunoHost-Apps/adminer_ynh/issues) diff --git a/pages/04.applications/10.docs/adminer/app_adminer.md b/pages/04.applications/10.docs/adminer/app_adminer.md new file mode 100644 index 00000000..490787e7 --- /dev/null +++ b/pages/04.applications/10.docs/adminer/app_adminer.md @@ -0,0 +1,20 @@ +--- +title: Adminer +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_adminer' +--- + +![Adminer's logo](image://adminer_logo.png?height=80) + +[![Install Adminer with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=adminer) [![Integration level](https://dash.yunohost.org/integration/adminer.svg)](https://dash.yunohost.org/appci/app/adminer) + +Adminer (formerly phpMinAdmin better alternate to phpMyAdmin) is a full-featured database management tool (MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, SimpleDB, Elasticsearch, MongoDB). Replace phpMyAdmin with Adminer and you will get a tidier user interface, better support for MySQL features, higher performance and more security. [See detailed comparison](https://www.adminer.org/en/phpmyadmin). + +## Useful links + ++ Website: [adminer.org](https://www.adminer.org/) ++ Application software repository: [github.com - YunoHost-Apps/adminer](https://github.com/YunoHost-Apps/adminer_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/adminer/issues](https://github.com/YunoHost-Apps/adminer_ynh/issues) diff --git a/pages/04.applications/10.docs/aeneria/app_aeneria.fr.md b/pages/04.applications/10.docs/aeneria/app_aeneria.fr.md new file mode 100644 index 00000000..710575d1 --- /dev/null +++ b/pages/04.applications/10.docs/aeneria/app_aeneria.fr.md @@ -0,0 +1,19 @@ +--- +title: Æneria +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_aeneria' +--- + +[![Installer Æneria avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=aeneria) [![Integration level](https://dash.yunohost.org/integration/aeneria.svg)](https://dash.yunohost.org/appci/app/aeneria) + +*Æneria* est une application web dont le but est d'aider les particuliers à analyser leur consommation d'énergie. Parce que comprendre sa consommation, c'est déjà, sans s'en rendre compte, commencer à la réduire. + +## Liens utiles + ++ Site web : [aeneria.com (fr)](https://aeneria.com/) ++ Démonstration : [Démo](https://demo.aeneria.com/login) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/aeneria](https://github.com/YunoHost-Apps/aeneria_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/aeneria/issues](https://github.com/YunoHost-Apps/aeneria_ynh/issues) diff --git a/pages/04.applications/10.docs/aeneria/app_aeneria.md b/pages/04.applications/10.docs/aeneria/app_aeneria.md new file mode 100644 index 00000000..ec9b137e --- /dev/null +++ b/pages/04.applications/10.docs/aeneria/app_aeneria.md @@ -0,0 +1,19 @@ +--- +title: Æneria +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_aeneria' +--- + +[![Install Æneria with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=aeneria) [![Integration level](https://dash.yunohost.org/integration/aeneria.svg)](https://dash.yunohost.org/appci/app/aeneria) + +*Æneria* is a web application which aims to help individuals to analyse their energy consumption. Because understanding one's consumption is already, without realising it, starting to reduce it. + +## Useful links + ++ Website: [aeneria.com (fr)](https://aeneria.com/) ++ Demonstration: [Demo](https://demo.aeneria.com/login) ++ Application software repository: [github.com - YunoHost-Apps/aeneria](https://github.com/YunoHost-Apps/aeneria_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/aeneria/issues](https://github.com/YunoHost-Apps/aeneria_ynh/issues) diff --git a/pages/04.applications/10.docs/agendav/app_agendav.fr.md b/pages/04.applications/10.docs/agendav/app_agendav.fr.md new file mode 100644 index 00000000..a8db644a --- /dev/null +++ b/pages/04.applications/10.docs/agendav/app_agendav.fr.md @@ -0,0 +1,19 @@ +--- +title: AgenDAV +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_agendav' +--- + +[![Installer AgenDAV avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=agendav) [![Integration level](https://dash.yunohost.org/integration/agendav.svg)](https://dash.yunohost.org/appci/app/agendav) + +*AgenDAV* est un client web CalDAV qui présente une interface AJAX permettant aux utilisateurs de gérer leurs propres calendriers et les calendriers partagés. + +## Liens utiles + ++ Site web : [agendav.org](https://agendav.org/) ++ Démonstration : [Démo](https://demo.yunohost.org/agendav/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/agendav](https://github.com/YunoHost-Apps/agendav_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/agendav/issues](https://github.com/YunoHost-Apps/agendav_ynh/issues) diff --git a/pages/04.applications/10.docs/agendav/app_agendav.md b/pages/04.applications/10.docs/agendav/app_agendav.md new file mode 100644 index 00000000..d5f932be --- /dev/null +++ b/pages/04.applications/10.docs/agendav/app_agendav.md @@ -0,0 +1,19 @@ +--- +title: AgenDAV +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_agendav' +--- + +[![Install AgenDAV with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=agendav) [![Integration level](https://dash.yunohost.org/integration/agendav.svg)](https://dash.yunohost.org/appci/app/agendav) + +*AgenDAV* is a CalDAV web client which features an AJAX interface to allow users to manage their own calendars and shared ones. + +## Useful links + ++ Website: [agendav.org](https://agendav.org/) ++ Demonstration: [Demo](https://demo.yunohost.org/agendav/) ++ Application software repository: [github.com - YunoHost-Apps/agendav](https://github.com/YunoHost-Apps/agendav_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/agendav/issues](https://github.com/YunoHost-Apps/agendav_ynh/issues) diff --git a/pages/04.applications/10.docs/airsonic/app_airsonic.fr.md b/pages/04.applications/10.docs/airsonic/app_airsonic.fr.md new file mode 100644 index 00000000..b2e46307 --- /dev/null +++ b/pages/04.applications/10.docs/airsonic/app_airsonic.fr.md @@ -0,0 +1,23 @@ +--- +title: Airsonic +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_airsonic' +--- + +![logo de Airsonic](image://airsonic_logo.png?height=80) + +[![Install airsonic with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=airsonic) [![Integration level](https://dash.yunohost.org/integration/airsonic.svg)](https://dash.yunohost.org/appci/app/airsonic) + +Airsonic est un streamer de médias gratuit basé sur le web, offrant un accès constant à votre musique. Utilisez-le pour partager votre musique avec vos amis ou pour écouter votre propre musique au travail. Vous pouvez diffuser en continu sur plusieurs lecteurs simultanément, par exemple sur un lecteur dans votre cuisine et un autre dans votre salon. + +Airsonic est conçu pour gérer de très grandes collections de musique (des centaines de gigaoctets). Bien qu'il soit optimisé pour le streaming MP3, il fonctionne pour tout format audio ou vidéo pouvant être diffusé via HTTP, par exemple AAC et OGG. En utilisant des plug-ins de transcodage, Airsonic prend en charge la conversion et la diffusion en continu à la volée de pratiquement tous les formats audio, y compris WMA, FLAC, APE, Musepack, WavPack et Shorten. + +## Liens utiles + + + Site web : [airsonic.github.io (en)](https://airsonic.github.io/) + + Documentation officielle : [airsonic.github.io/docs (en)](https://airsonic.github.io/docs/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/airsonic](https://github.com/YunoHost-Apps/airsonic_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/airsonic/issues](https://github.com/YunoHost-Apps/airsonic_ynh/issues) diff --git a/pages/04.applications/10.docs/airsonic/app_airsonic.md b/pages/04.applications/10.docs/airsonic/app_airsonic.md new file mode 100644 index 00000000..6b8b4e11 --- /dev/null +++ b/pages/04.applications/10.docs/airsonic/app_airsonic.md @@ -0,0 +1,23 @@ +--- +title: Airsonic +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_airsonic' +--- + +![airsonic's logo](image://airsonic_logo.png?height=80) + +[![Install airsonic with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=airsonic) [![Integration level](https://dash.yunohost.org/integration/airsonic.svg)](https://dash.yunohost.org/appci/app/airsonic) + +Airsonic is a free, web-based media streamer, providing ubiquitous access to your music. Use it to share your music with friends, or to listen to your own music while at work. You can stream to multiple players simultaneously, for instance to one player in your kitchen and another in your living room. + +Airsonic is designed to handle very large music collections (hundreds of gigabytes). Although optimized for MP3 streaming, it works for any audio or video format that can stream over HTTP, for instance AAC and OGG. By using transcoder plug-ins, Airsonic supports on-the-fly conversion and streaming of virtually any audio format, including WMA, FLAC, APE, Musepack, WavPack and Shorten. + +## Useful links + + + Website: [airsonic.github.io](https://airsonic.github.io/) + + Official documentation: [airsonic.github.io - docs](https://airsonic.github.io/docs/) + + Application software repository: [github.com - YunoHost-Apps/airsonic](https://github.com/YunoHost-Apps/airsonic_ynh) + + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/airsonic/issues](https://github.com/YunoHost-Apps/airsonic_ynh/issues) diff --git a/pages/04.applications/10.docs/alltube/app_alltube.fr.md b/pages/04.applications/10.docs/alltube/app_alltube.fr.md new file mode 100644 index 00000000..c3737509 --- /dev/null +++ b/pages/04.applications/10.docs/alltube/app_alltube.fr.md @@ -0,0 +1,20 @@ +--- +title: AllTube +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_alltube' +--- + +[![Installer AllTube avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=alltube) [![Integration level](https://dash.yunohost.org/integration/alltube.svg)](https://dash.yunohost.org/appci/app/alltube) + +*AllTube* est une interface web pour Youtube-dl. +Pour configurer AllTube : éditez le fichier `/var/www/alltube/config/config.yml` via SSH. + +## Liens utiles + ++ Site web : [alltubedownload.net](https://alltubedownload.net/) ++ Démonstration : [Démo](https://alltubedownload.net/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/alltube](https://github.com/YunoHost-Apps/alltube_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/alltube/issues](https://github.com/YunoHost-Apps/alltube_ynh/issues) diff --git a/pages/04.applications/10.docs/alltube/app_alltube.md b/pages/04.applications/10.docs/alltube/app_alltube.md new file mode 100644 index 00000000..45eed5b3 --- /dev/null +++ b/pages/04.applications/10.docs/alltube/app_alltube.md @@ -0,0 +1,20 @@ +--- +title: AllTube +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_alltube' +--- + +[![Install AllTube with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=alltube) [![Integration level](https://dash.yunohost.org/integration/alltube.svg)](https://dash.yunohost.org/appci/app/alltube) + +*AllTube* is a web interface for Youtube-dl. +To configure AllTube: edit the file `/var/www/alltube/config/config.yml` via SSH. + +## Useful links + ++ Website: [alltubedownload.net](https://alltubedownload.net/) ++ Demonstration: [Demo](https://alltubedownload.net/) ++ Application software repository: [github.com - YunoHost-Apps/alltube](https://github.com/YunoHost-Apps/alltube_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/alltube/issues](https://github.com/YunoHost-Apps/alltube_ynh/issues) diff --git a/pages/04.applications/10.docs/ampache/app_ampache.fr.md b/pages/04.applications/10.docs/ampache/app_ampache.fr.md new file mode 100644 index 00000000..e77bb7bf --- /dev/null +++ b/pages/04.applications/10.docs/ampache/app_ampache.fr.md @@ -0,0 +1,25 @@ +--- +title: Ampache +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ampache' +--- + +![logo de Ampache](image://ampache_logo.png?height=80) + +[![Install Ampache with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=ampache) [![Integration level](https://dash.yunohost.org/integration/ampache.svg)](https://dash.yunohost.org/appci/app/ampache) + +Ampache est un logiciel libre de streaming audio. + +## Limitations avec YunoHost + +L'authentification du SSO ne fonctionne pas entièrement à partir du panel d'utilisateurs, nous devons y travailler. En fait, cela peut perturber les clients Ampache externes comme Subsonic. + +## Liens utiles + ++ Site web : [ampache.org (en)](http://ampache.org/) ++ Documentation officielle : [github.com - Ampache/wiki (en)](https://github.com/ampache/ampache/wiki) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/ampache](https://github.com/YunoHost-Apps/ampache_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/ampache/issues](https://github.com/YunoHost-Apps/ampache_ynh/issues) diff --git a/pages/04.applications/10.docs/ampache/app_ampache.md b/pages/04.applications/10.docs/ampache/app_ampache.md new file mode 100644 index 00000000..a5d5b422 --- /dev/null +++ b/pages/04.applications/10.docs/ampache/app_ampache.md @@ -0,0 +1,25 @@ +--- +title: Ampache +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ampache' +--- + +![Ampache's logo](image://ampache_logo.png?height=80) + +[![Install Ampache with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=ampache) [![Integration level](https://dash.yunohost.org/integration/ampache.svg)](https://dash.yunohost.org/appci/app/ampache) + +Ampache is libre audio streaming software. + +## Limitations with YunoHost + +Since SSO authentication does not work entirely from the user panel, we need to work on it. In fact, this can be disruptive to external Ampache clients such as Subsonic. + +## Useful links + ++ Website: [ampache.org](http://ampache.org/) ++ Official documentation: [github.com - Ampache/wiki](https://github.com/ampache/ampache/wiki) ++ Application software repository: [github.com - YunoHost-Apps/ampache](https://github.com/YunoHost-Apps/ampache_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/ampache/issues](https://github.com/YunoHost-Apps/ampache_ynh/issues) diff --git a/pages/04.applications/10.docs/anarchism/app_anarchism.fr.md b/pages/04.applications/10.docs/anarchism/app_anarchism.fr.md new file mode 100644 index 00000000..c474c0b8 --- /dev/null +++ b/pages/04.applications/10.docs/anarchism/app_anarchism.fr.md @@ -0,0 +1,20 @@ +--- +title: Anarchism +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_anarchism' +--- + +![logo de Anarchism](image://anarchism_logo.svg?resize=,80) + +[![Install anarchism with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=anarchism) [![Integration level](https://dash.yunohost.org/integration/anarchism.svg)](https://dash.yunohost.org/appci/app/anarchism) + +Ceci est une FAQ anarchiste. Son but est de présenter ce que l'anarchisme représente réellement et d'indiquer pourquoi vous devriez devenir anarchiste. + +## Liens utiles + ++ Site web : [salsa.debian.org - anarchism (en)](https://salsa.debian.org/debian/anarchism) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/anarchism](https://github.com/YunoHost-Apps/anarchism_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/anarchism/issues](https://github.com/YunoHost-Apps/anarchism_ynh/issues) diff --git a/pages/04.applications/10.docs/anarchism/app_anarchism.md b/pages/04.applications/10.docs/anarchism/app_anarchism.md new file mode 100644 index 00000000..57cac6b2 --- /dev/null +++ b/pages/04.applications/10.docs/anarchism/app_anarchism.md @@ -0,0 +1,20 @@ +--- +title: Anarchism +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_anarchism' +--- + +![Anarchism's logo](image://anarchism_logo.svg?resize=,80) + +[![Install anarchism with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=anarchism) [![Integration level](https://dash.yunohost.org/integration/anarchism.svg)](https://dash.yunohost.org/appci/app/anarchism) + +This is an anarchist FAQ. Its aim is to present what anarchism really stands for and indicate why you should become an anarchist. + +## Useful links + ++ Website: [salsa.debian.org - anarchism](https://salsa.debian.org/debian/anarchism) ++ Application software repository: [github.com - YunoHost-Apps/anarchism](https://github.com/YunoHost-Apps/anarchism_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/anarchism/issues](https://github.com/YunoHost-Apps/anarchism_ynh/issues) diff --git a/pages/04.applications/10.docs/anfora/app_anfora.fr.md b/pages/04.applications/10.docs/anfora/app_anfora.fr.md new file mode 100644 index 00000000..3b4bf89c --- /dev/null +++ b/pages/04.applications/10.docs/anfora/app_anfora.fr.md @@ -0,0 +1,20 @@ +--- +title: Anfora +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_anfora' +--- + +![logo de Anfora](image://anfora_logo.svg?resize=,80) + +[![Install Anfora with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=anfora) [![Integration level](https://dash.yunohost.org/integration/anfora.svg)](https://dash.yunohost.org/appci/app/anfora) + +Galerie de photos auto-hébergée, réseau social fédéré. + +## Liens utiles + ++ Site web : [anfora.app (en)](https://anfora.app/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/anfora](https://github.com/YunoHost-Apps/anfora_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/anfora/issues](https://github.com/YunoHost-Apps/anfora_ynh/issues) diff --git a/pages/04.applications/10.docs/anfora/app_anfora.md b/pages/04.applications/10.docs/anfora/app_anfora.md new file mode 100644 index 00000000..41aec91a --- /dev/null +++ b/pages/04.applications/10.docs/anfora/app_anfora.md @@ -0,0 +1,20 @@ +--- +title: Anfora +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_anfora' +--- + +![Anfora's logo](image://anfora_logo.svg?resize=,80) + +[![Install Anfora with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=anfora) [![Integration level](https://dash.yunohost.org/integration/anfora.svg)](https://dash.yunohost.org/appci/app/anfora) + +Self-hosted photo gallery federated social network. + +## Useful links + ++ Website: [anfora.app](https://anfora.app/) ++ Application software repository: [github.com - YunoHost-Apps/anfora](https://github.com/YunoHost-Apps/anfora_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/anfora/issues](https://github.com/YunoHost-Apps/anfora_ynh/issues) diff --git a/pages/04.applications/10.docs/archivist/app_archivist.fr.md b/pages/04.applications/10.docs/archivist/app_archivist.fr.md new file mode 100644 index 00000000..41040e02 --- /dev/null +++ b/pages/04.applications/10.docs/archivist/app_archivist.fr.md @@ -0,0 +1,21 @@ +--- +title: Archivist +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_archivist' +--- + +![Package](image://yunohost_package.png?height=80) + +[![Install archivist with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=archivist) [![Integration level](https://dash.yunohost.org/integration/archivist.svg)](https://dash.yunohost.org/appci/app/archivist) + +Archivist est un système de sauvegarde automatique de votre serveur. Il est capable de faire des sauvegardes de votre noyau YunoHost et de vos applications en utilisant la commande de sauvegarde YunoHost. Il peut également effectuer des sauvegardes de répertoires spécifiques. +Vos sauvegardes peuvent être envoyées à de nombreux autres endroits, locaux ou distants. Archivist est automatiquement lancé périodiquement pour mettre à jour vos sauvegardes et envoyer les modifications aux autres endroits. + +## Liens utiles + ++ Site web : [github.com - maniackcrudelis/archivist](https://github.com/maniackcrudelis/archivist) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/archivist](https://github.com/YunoHost-Apps/archivist_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/archivist/issues](https://github.com/YunoHost-Apps/archivist_ynh/issues) diff --git a/pages/04.applications/10.docs/archivist/app_archivist.md b/pages/04.applications/10.docs/archivist/app_archivist.md new file mode 100644 index 00000000..ec479775 --- /dev/null +++ b/pages/04.applications/10.docs/archivist/app_archivist.md @@ -0,0 +1,21 @@ +--- +title: Archivist +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_archivist' +--- + +![Package](image://yunohost_package.png?height=80) + +[![Install archivist with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=archivist) [![Integration level](https://dash.yunohost.org/integration/archivist.svg)](https://dash.yunohost.org/appci/app/archivist) + +Archivist is an automatic backup system for your server. It is able to makes backups of your YunoHost core and your apps by using the YunoHost backup command. It can also makes backups of specified directories. +Your backups can be send to many other places, local or distant. Archivist is automatically launched periodicaly to update your backups and send the modifications to the other places. + +## Useful links + ++ Website: [github.com - maniackcrudelis/archivist](https://github.com/maniackcrudelis/archivist) ++ Application software repository: [github.com - YunoHost-Apps/archivist](https://github.com/YunoHost-Apps/archivist_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/archivist/issues](https://github.com/YunoHost-Apps/archivist_ynh/issues) diff --git a/pages/04.applications/10.docs/backdrop/app_backdrop.fr.md b/pages/04.applications/10.docs/backdrop/app_backdrop.fr.md new file mode 100644 index 00000000..ed1fa69d --- /dev/null +++ b/pages/04.applications/10.docs/backdrop/app_backdrop.fr.md @@ -0,0 +1,19 @@ +--- +title: Backdrop +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_backdrop' +--- + +[![Installer Backdrop avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=backdrop) [![Integration level](https://dash.yunohost.org/integration/backdrop.svg)](https://dash.yunohost.org/appci/app/backdrop) + +*Backdrop* est un système de gestion de contenu complet qui permet aux utilisateurs non techniques de gérer une grande variété de contenus. Il peut être utilisé pour créer toutes sortes de sites web, notamment des blogs, des galeries d'images, des réseaux sociaux, des intranets, etc. + +## Liens utiles + ++ Site web : [backdropcms.org](https://backdropcms.org/) ++ Démonstration : [Démo](https://backdropcms.org/demo) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/backdrop](https://github.com/YunoHost-Apps/backdrop_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/backdrop/issues](https://github.com/YunoHost-Apps/backdrop_ynh/issues) diff --git a/pages/04.applications/10.docs/backdrop/app_backdrop.md b/pages/04.applications/10.docs/backdrop/app_backdrop.md new file mode 100644 index 00000000..ab19334e --- /dev/null +++ b/pages/04.applications/10.docs/backdrop/app_backdrop.md @@ -0,0 +1,19 @@ +--- +title: Backdrop +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_backdrop' +--- + +[![Install Backdrop with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=backdrop) [![Integration level](https://dash.yunohost.org/integration/backdrop.svg)](https://dash.yunohost.org/appci/app/backdrop) + +*Backdrop* is a full-featured content management system that allows non-technical users to manage a wide variety of content. It can be used to create all kinds of websites including blogs, image galleries, social networks, intranets, and more. + +## Useful links + ++ Website: [backdropcms.org](https://backdropcms.org/) ++ Demonstration: [Demo](https://backdropcms.org/demo) ++ Application software repository: [github.com - YunoHost-Apps/backdrop](https://github.com/YunoHost-Apps/backdrop_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/backdrop/issues](https://github.com/YunoHost-Apps/backdrop_ynh/issues) diff --git a/pages/04.applications/10.docs/baikal/app_baikal.fr.md b/pages/04.applications/10.docs/baikal/app_baikal.fr.md new file mode 100644 index 00000000..05cd14d2 --- /dev/null +++ b/pages/04.applications/10.docs/baikal/app_baikal.fr.md @@ -0,0 +1,70 @@ +--- +title: Baikal +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_baikal' +--- + +![Baïkal's logo](image://baikal_logo.png?height=80) + +[![Install Baïkal with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=baikal) [![Integration level](https://dash.yunohost.org/integration/baikal.svg)](https://dash.yunohost.org/appci/app/baikal) + +Baïkal est un serveur de calendriers et de contacts accessible par les protocoles CalDAV (calendriers) et CardDAV (carnets d’adresses), autorisant ainsi la synchronisation avec de nombreux clients (Thunderbird + Lightning par exemple). + +**AVERTISSEMENT** : Baïkal ne fonctionnera pas si vous avez installé un **Nextcloud** (leurs fonctions cardav/caldav entrent en conflit). + +## Configuration + +### Connexion à l’interface d’administration + +Pour configurer l'application il faut se rendre à l'adresse : `sous.domaine.tld/admin` ou `domaine.tld/baikal/admin` +Le nom d’utilisateur à spécifier est `admin` suivi du mot de passe spécifique que vous avez choisi lors de l’installation de Baïkal. Attention, le mot de passe ne doit pas contenir de carractères spéciaux. + +### Authentification LDAP + +Par défaut, Baïkal est configuré pour importer les utilisateurs depuis l'annuaire LDAP de YunoHost. Les utilisateurs YunoHost apparaîtront dans le menu `Users and ressources` après une première authentification. + +## Connexion CalDAV + +### Connexion de Thunderbird avec Lightning + +Ajoutez un nouvel agenda de type « Réseau » puis « CalDAV ». + +L’URL à entrer est la suivante : + +`https://example.com/baikal/cal.php/calendars/username/default` + +*En prenant soin de remplacer « example.com » par votre domaine puis « username » par votre nom d’utilisateur* + +### Connexion de AgenDAV + +AgenDAV est un client web permettant de manipuler vos calendriers. Il est packagé pour YunoHost et vous pouvez donc l’installer juste après avoir installé Baïkal. + +AgenDAV est déjà connecté à Baïkal, aucune manipulation n’est nécessaire. Si vous créez une entrée dans le calendrier Thunderbird + Lightning, il vous suffit d’actualiser votre page AgenDAV pour voir les modifications apparaître. + +AgenDAV vous permet également de créer de nouveaux calendriers très simplement. + +## Connexion CardDAV + +En utilisant l'exemple avec RoundCube Ajoutez un nouveau carnet d’adresses en allant dans Paramètres > Préférences > CardDAV. + +Renseigner : ++ Nom du carnet d’adresses : `default` ++ Nom d’utilisateur : `username` ++ Mot de passe : `leMotDePasseAssociéAUusername` ++ URL : `https://example.com/baikal/card.php/addressbooks/username/default` + +*En prenant soin de remplacer « example.com » par votre domaine et « username » par votre nom d’utilisateur* + +Enregistrer + +Le carnet d’adresses est maintenant accessible. + +## Liens utiles + + + Site web : [sabre.io - baikal (en)](https://sabre.io/baikal/) + + Documentation officielle : [sabre.io - baikal/dav (en)](https://sabre.io/dav/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/baikal](https://github.com/YunoHost-apps/baikal_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/baikal/issues](https://github.com/YunoHost-apps/baikal_ynh/issues) diff --git a/pages/04.applications/10.docs/baikal/app_baikal.md b/pages/04.applications/10.docs/baikal/app_baikal.md new file mode 100644 index 00000000..cfeb299e --- /dev/null +++ b/pages/04.applications/10.docs/baikal/app_baikal.md @@ -0,0 +1,72 @@ +--- +title: Baikal +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_baikal' +--- + +![Baïkal's logo](image://baikal_logo.png?height=80) + +[![Install Baïkal with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=baikal) [![Integration level](https://dash.yunohost.org/integration/baikal.svg)](https://dash.yunohost.org/appci/app/baikal) + +Baïkal is a server for calendars and address books, which uses the CalDav and CardDav protocol. Baïkal can be synced with a lot of clients, like Thunderbird + Lightning. + +**WARNING**: Baïkal will not work if you have installed a **Nextcloud** (the Nextcloud CardDav/CalDav functions conflict). + +## Configuration + +### Connecting to the administration interface + +To configure the app, go to the address: `sub.domain.tld/admin` or `domain.tld/baikal/admin`. +The username to specify is `admin`, followed by the specific password you chose when installing Baïkal. The password can contain any special characters. + +### LDAP authentication + +By default, Baïkal is configured to look for users in YunoHost's LDAP +directory. YunoHost's users will appear under `User and ressources` menu after their +first authentication. + +## CalDAV connection + +### Connecting Thunderbird with Lightning + +Add a new agenda with type "Network" and "CalDAV" + +The new URL to add is: + +https://domain.org/baikal/cal.php/calendars/username/default + +Be careful to replace "domain.org" with your own domain and the "username" with your username. + +### Connecting to AgenDAV + +AgenDAV is a web client for using your calendars. It's packaged for YunoHost and you can used it after installing Baïkal. + +AgenDAV is already connected to Baïkal, any other configuration is necessary. If you create a new entry in Thunderbird + Lightning calendar, refresh your AgenDAV page is enough to see your modifications. + +AgenDAV also allows you to create a new calendars very easily. + +## CardDAV Connection + +Using the example with RoundCube Add a new address book by going to Settings > Preferences > CardDAV. + +Make sure it is filled with: +* Addressbook name: `default` +* Username: `username` +* Password: `thePasswordAssociatedToUsername` +* URL : `https://example.com/baikal/card.php/addressbooks/username/default` + +* Make sure to replace "example.com" with your domain and "username" with your username* + +Save. + +Now, the address book is accessible. + +## Useful links + + + Website: [sabre.io - baikal (en)](https://sabre.io/baikal/) + + Official documentation: [sabre.io - baikal/dav (en)](https://sabre.io/dav/) + + Apps software repository: [github.com - YunoHost-Apps/baikal](https://github.com/YunoHost-apps/baikal_ynh) + + Fix a bug or suggest an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/baikal/issues](https://github.com/YunoHost-apps/baikal_ynh/issues) diff --git a/pages/04.applications/10.docs/bibliogram/app_bibliogram.fr.md b/pages/04.applications/10.docs/bibliogram/app_bibliogram.fr.md new file mode 100644 index 00000000..bd495007 --- /dev/null +++ b/pages/04.applications/10.docs/bibliogram/app_bibliogram.fr.md @@ -0,0 +1,20 @@ +--- +title: Bibliogram +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bibliogram' +--- + +![Logo Bibliogram](image://logo-bibliogram.png?height=80) + +[![Installer Bibliogram avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=bibliogram) [![Integration level](https://dash.yunohost.org/integration/bibliogram.svg)](https://dash.yunohost.org/appci/app/bibliogram) + +Bibliogram est un site Web qui prend les données de profil public d'Instagram et les met dans une page plus conviviale qui se charge plus rapidement, donne des images téléchargeables, élimine les publicités, génère des flux RSS et ne vous invite pas à vous inscrire. + +## Liens utiles + ++ Site web : [git.sr.ht - bibliogram](https://git.sr.ht/~cadence/bibliogram) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/bibliogram](https://github.com/YunoHost-Apps/bibliogram_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/bibliogram/issues](https://github.com/YunoHost-Apps/bibliogram_ynh/issues) diff --git a/pages/04.applications/10.docs/bibliogram/app_bibliogram.md b/pages/04.applications/10.docs/bibliogram/app_bibliogram.md new file mode 100644 index 00000000..c8c8221a --- /dev/null +++ b/pages/04.applications/10.docs/bibliogram/app_bibliogram.md @@ -0,0 +1,20 @@ +--- +title: Bibliogram +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bibliogram' +--- + +![Bibliogram Logo](image://logo-bibliogram.png?height=80) + +[![Install Bibliogram with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=bibliogram) [![Integration level](https://dash.yunohost.org/integration/bibliogram.svg)](https://dash.yunohost.org/appci/app/bibliogram) + +Bibliogram is a website that takes data from Instagram's public profile views and puts it into a friendlier page that loads faster, gives downloadable images, eliminates ads, generates RSS feeds, and doesn't urge you to sign up. + +## Useful links + ++ Website: [git.sr.ht - bibliogram](https://git.sr.ht/~cadence/bibliogram) ++ Application software repository: [github.com - YunoHost-Apps/bibliogram](https://github.com/YunoHost-Apps/bibliogram_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/bibliogram/issues](https://github.com/YunoHost-Apps/bibliogram_ynh/issues) diff --git a/pages/04.applications/10.docs/bicbucstriim/app_bicbucstriim.fr.md b/pages/04.applications/10.docs/bicbucstriim/app_bicbucstriim.fr.md new file mode 100644 index 00000000..f455c402 --- /dev/null +++ b/pages/04.applications/10.docs/bicbucstriim/app_bicbucstriim.fr.md @@ -0,0 +1,28 @@ +--- +title: BicBucStriim +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bicbucstriim' +--- + +[![Installer BicBucStriim avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=bicbucstriim) [![Integration level](https://dash.yunohost.org/integration/bicbucstriim.svg)](https://dash.yunohost.org/appci/app/bicbucstriim) + +*BicBucStriim* diffuse des livres, des livres numériques. Il a été conçu principalement pour combler une lacune dans la fonctionnalité des appareils NAS qui donnent accès à la musique, aux vidéos et aux photos -- mais pas aux livres. BicBucStriim comble cette lacune et fournit un accès basé sur le web à votre collection de livres électroniques. + +## Avertissements / informations importantes + +BicBucStriim est une simple application PHP qui fonctionne dans l'environnement Apache/PHP fourni par le NAS (ou tout autre serveur). Elle suppose que vous gérez votre collection d'e-books avec Calibre. L'application lit les données Calibre et les publie sous forme HTML. Pour accéder au catalogue d'e-books, il vous suffit de diriger votre lecteur d'e-books vers votre NAS, de sélectionner l'un de vos e-books et de le télécharger. + +## Configuration + +BicBucStriim fraîchement installée affichera une page de connexion. Les informations de connexion initiales pour l'administrateur sont + nom d'utilisateur : admin + mot de passe : admin + +## Liens utiles + ++ Site web : [projekte.textmulch.de/bicbucstriim/](http://projekte.textmulch.de/bicbucstriim/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/bicbucstriim](https://github.com/YunoHost-Apps/bicbucstriim_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/bicbucstriim/issues](https://github.com/YunoHost-Apps/bicbucstriim_ynh/issues) diff --git a/pages/04.applications/10.docs/bicbucstriim/app_bicbucstriim.md b/pages/04.applications/10.docs/bicbucstriim/app_bicbucstriim.md new file mode 100644 index 00000000..6f3e4caf --- /dev/null +++ b/pages/04.applications/10.docs/bicbucstriim/app_bicbucstriim.md @@ -0,0 +1,28 @@ +--- +title: BicBucStriim +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bicbucstriim' +--- + +[![Install BicBucStriim with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=bicbucstriim) [![Integration level](https://dash.yunohost.org/integration/bicbucstriim.svg)](https://dash.yunohost.org/appci/app/bicbucstriim) + +*BicBucStriim* streams books, digital books. It was primarily designed to fill a gap in the functionality of NAS devices that provide access to music, videos and photos -- but not books. BicBucStriim fills this gap and provides web-based access to your e-book collection. + +## Disclaimers / important information + +BicBucStriim is a simple PHP application that runs in the Apache/PHP environment provided by the NAS (or any other server). It assumes that you manage your e-book collection with Calibre. The application reads the Calibre data and publishes it in HTML form. To access the e-book catalog you simply point your ebook reader to your NAS, select one of your e-books and download it. + +## Configuration + +A freshly installed BicBucStriim installation will show the login page. The initial login information for the administrator is + user name: admin + password : admin + +## Useful links + ++ Website: [projekte.textmulch.de/bicbucstriim/](http://projekte.textmulch.de/bicbucstriim/) ++ Application software repository: [github.com - YunoHost-Apps/bicbucstriim](https://github.com/YunoHost-Apps/bicbucstriim_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/bicbucstriim/issues](https://github.com/YunoHost-Apps/bicbucstriim_ynh/issues) diff --git a/pages/04.applications/10.docs/blogotext/app_blogotext.fr.md b/pages/04.applications/10.docs/blogotext/app_blogotext.fr.md new file mode 100644 index 00000000..f620c5ab --- /dev/null +++ b/pages/04.applications/10.docs/blogotext/app_blogotext.fr.md @@ -0,0 +1,41 @@ +--- +title: BlogoText +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_blogotext' +--- + +![logo de BlogoText](image://blogotext_logo.png?width=80) + +[![Install BlogoText with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=blogotext) [![Integration level](https://dash.yunohost.org/integration/blogotext.svg)](https://dash.yunohost.org/appci/app/blogotext) + +BlogoText n'est pas seulement un moteur de blog mais propose plutôt un portail dédié à l'écriture de contenu. En effet, l'interface administrateur propose, en plus des outils traditionnels dédiés au blog, un lecteur de flux RSS, un hébergeur de fichiers et un outil permettant de partager des liens. + +L'avantage de ce CMS est qu'il est très léger et sera parfait pour s'occuper de la partie blog ou actualité de votre site web. BlogoText est écrit en PHP, exploite une base de données SQLite et à seulement besoin de 2Mo d'espace disque. [¹](#sources) + +## Fonctionnalités + + + Blog avec commentaires et flux RSS + + Partage de liens + + Lecteur RSS + + Téléversement et partage d'images/fichiers + + import-export au format JSON/ZIP/HTML; import WordPress + + Support Addons + +## Limitations avec YunoHost + +Les authentification HTTP et LDAP ne sont pas pris en charges. L'application n'est pas multi-utilisateurs⋅trices. + +## Liens utiles + + + Site web : [blogotext.org](https://blogotext.org) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/blogotext](https://github.com/YunoHost-Apps/blogotext_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/blogotext/issues](https://github.com/YunoHost-Apps/blogotext_ynh/issues) + +------ + +### Sources + +¹ [framalibre.org - BlogoText](https://framalibre.org/content/blogotext) diff --git a/pages/04.applications/10.docs/blogotext/app_blogotext.md b/pages/04.applications/10.docs/blogotext/app_blogotext.md new file mode 100644 index 00000000..8be6f0ff --- /dev/null +++ b/pages/04.applications/10.docs/blogotext/app_blogotext.md @@ -0,0 +1,45 @@ +--- +title: BlogoText +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_blogotext' +--- + +![BlogoText's logo](image://blogotext_logo.png?width=80) + +[![Install BlogoText with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=blogotext) [![Integration level](https://dash.yunohost.org/integration/blogotext.svg)](https://dash.yunohost.org/appci/app/blogotext) + +- [Features](#features) +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +BlogoText is not only a blog engine but rather a portal dedicated to writing content. Indeed, the administrator interface offers, in addition to the traditional tools dedicated to the blog, an RSS feed reader, a file host and a tool to share links. + +The advantage of this CMS is that it is very light and will be perfect to take care of the blog or news part of your website. BlogoText is written in PHP, runs a SQLite database and needs only 2MB of disk space.[¹](#sources) + +## Features + + + Blog with comments and RSS feeds + + Links sharing + + RSS Reader + + Images/Files uploading and sharing + + JSON/ZIP/HTML import-export; WordPress import + + Support Addons + +## Limitations with YunoHost + +HTTP and LDAP authentication are not supported. The application is not multi-user. + +## Useful links + + + Website: [blogotext.org (fr)](https://blogotext.org) + + Application software repository: [github.com - YunoHost-Apps/blogotext](https://github.com/YunoHost-Apps/blogotext_ynh) + + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/blogotext/issues](https://github.com/YunoHost-Apps/blogotext_ynh/issues) + + ----- + + ### Sources + +¹ [framalibre.org - BlogoText (fr)](https://framalibre.org/content/blogotext) diff --git a/pages/04.applications/10.docs/bludit/app_bludit.fr.md b/pages/04.applications/10.docs/bludit/app_bludit.fr.md new file mode 100644 index 00000000..19cef713 --- /dev/null +++ b/pages/04.applications/10.docs/bludit/app_bludit.fr.md @@ -0,0 +1,21 @@ +--- +title: Bludit +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bludit' +--- + +![](image://bludit_logo.png?width=80) + +[![Install Bludit with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=bludit) [![Integration level](https://dash.yunohost.org/integration/bludit.svg)](https://dash.yunohost.org/appci/app/bludit) + +Bludit est une application Web pour créer votre propre site Web ou blog en quelques secondes; c'est totalement gratuit et open source. Bludit est un CMS Flat-File, ce qui (dans ce cas) signifie que Bludit utilise des fichiers au format JSON pour stocker le contenu. Vous n'avez pas besoin d'installer ou de configurer une base de données; vous n'avez besoin que d'un serveur Web prenant en charge PHP. + +## Liens utiles + + + Site web : [www.bludit.com (en)](https://www.bludit.com/) + + Documentation officielle : [docs.bludit.com - (en)](https://docs.bludit.com/en/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/bludit](https://github.com/YunoHost-Apps/bludit_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/bludit/issues](https://github.com/YunoHost-Apps/bludit_ynh/issues) diff --git a/pages/04.applications/10.docs/bludit/app_bludit.md b/pages/04.applications/10.docs/bludit/app_bludit.md new file mode 100644 index 00000000..024e0655 --- /dev/null +++ b/pages/04.applications/10.docs/bludit/app_bludit.md @@ -0,0 +1,21 @@ +--- +title: Bludit +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bludit' +--- + +![Bludit's logo](image://bludit_logo.png?width=80) + +[![Install Bludit with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=bludit) [![Integration level](https://dash.yunohost.org/integration/bludit.svg)](https://dash.yunohost.org/appci/app/bludit) + +Bludit is a web application to build your own website or blog in seconds; it's completely free and open source. Bludit is a Flat-File CMS, which (in this case) means that Bludit uses files in the JSON format to store the content. You don't need to install or configure a database; you only need a web server with PHP support. + +## Useful links + ++ Website: [www.bludit.com (en)](https://www.bludit.com/) ++ Official documentation: [docs.bludit.com - (en)](https://docs.bludit.com/en/) ++ Application software repository: [github.com - YunoHost-Apps/bludit](https://github.com/YunoHost-Apps/bludit_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/bludit/issues](https://github.com/YunoHost-Apps/bludit_ynh/issues) diff --git a/pages/04.applications/10.docs/bookstack/app_bookstack.fr.md b/pages/04.applications/10.docs/bookstack/app_bookstack.fr.md new file mode 100644 index 00000000..1d045640 --- /dev/null +++ b/pages/04.applications/10.docs/bookstack/app_bookstack.fr.md @@ -0,0 +1,22 @@ +--- +title: Bookstack +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bookstack' +--- + +![Logo BookStack](image://logo-bookstack.png?height=80) + +[![Installer BookStack avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=bookstack) [![Integration level](https://dash.yunohost.org/integration/bookstack.svg)](https://dash.yunohost.org/appci/app/bookstack) + +BookStack est une plate-forme simple, auto-hébergée et facile à utiliser pour organiser et stocker des informations. + + +## Liens utiles + ++ Site web : [bookstackapp.com](https://www.bookstackapp.com/) ++ Documentation officielle : [bookstackapp.com/docs](https://www.bookstackapp.com/docs/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/bookstack](https://github.com/YunoHost-Apps/bookstack_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/bookstack/issues](https://github.com/YunoHost-Apps/bookstack_ynh/issues) diff --git a/pages/04.applications/10.docs/bookstack/app_bookstack.md b/pages/04.applications/10.docs/bookstack/app_bookstack.md new file mode 100644 index 00000000..e54125e6 --- /dev/null +++ b/pages/04.applications/10.docs/bookstack/app_bookstack.md @@ -0,0 +1,21 @@ +--- +title: Bookstack +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bookstack' +--- + +![BookStack Logo](image://logo-bookstack.png?height=80) + +[![Install BookStack with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=bookstack) [![Integration level](https://dash.yunohost.org/integration/bookstack.svg)](https://dash.yunohost.org/appci/app/bookstack) + +BookStack is a simple, self-hosted, easy-to-use platform for organising and storing information. + +## Useful links + ++ Website: [bookstackapp.com](https://www.bookstackapp.com/) ++ Official documentation: [bookstackapp.com/docs](https://www.bookstackapp.com/docs/) ++ Application software repository: [github.com - YunoHost-Apps/bookstack](https://github.com/YunoHost-Apps/bookstack_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/bookstack/issues](https://github.com/YunoHost-Apps/bookstack_ynh/issues) diff --git a/pages/04.applications/10.docs/borg/app_borg.fr.md b/pages/04.applications/10.docs/borg/app_borg.fr.md new file mode 100644 index 00000000..597087fc --- /dev/null +++ b/pages/04.applications/10.docs/borg/app_borg.fr.md @@ -0,0 +1,29 @@ +--- +title: Borg +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_borg' +--- + +![logo de Borg](image://borg_logo.svg?resize=,80) + +[![Install Borg with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=borg) [![Integration level](https://dash.yunohost.org/integration/borg.svg)](https://dash.yunohost.org/appci/app/borg) + +BorgBackup (abréviation : Borg) est un programme de sauvegarde par déduplication. En option, il prend en charge la compression et le cryptage authentifié. + +L'objectif principal de Borg est de fournir un moyen efficace et sûr de sauvegarder les données. La technique de déduplication des données utilisée rend Borg adapté aux sauvegardes quotidiennes puisque seules les modifications sont stockées. La technique de cryptage authentifié permet de sauvegarder des données sur des cibles qui ne sont pas totalement fiables.[¹](#sources) + +## Liens utiles + ++ Site web : [www.borgbackup.org (en)](https://www.borgbackup.org/) ++ Documentation officielle : [borgbackup.readthedocs.io (en)](https://borgbackup.readthedocs.io/en/stable/) ++ Dépôt logiciel de l'application : [github.com - YunoHost- Apps/borg](https://github.com/YunoHost-Apps/borg_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/borg/issues](https://github.com/YunoHost-Apps/borg_ynh/issues) + +------ + +### Sources + +¹ [borgbackup.readthedocs.io (en)](https://borgbackup.readthedocs.io/en/stable/#what-is-borgbackup) diff --git a/pages/04.applications/10.docs/borg/app_borg.md b/pages/04.applications/10.docs/borg/app_borg.md new file mode 100644 index 00000000..aca1900b --- /dev/null +++ b/pages/04.applications/10.docs/borg/app_borg.md @@ -0,0 +1,29 @@ +--- +title: Borg +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_borg' +--- + +![borg's logo](image://borg_logo.svg?resize=,80) + +[![Install Borg with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=borg) [![Integration level](https://dash.yunohost.org/integration/borg.svg)](https://dash.yunohost.org/appci/app/borg) + +BorgBackup (short: Borg) is a deduplicating backup program. Optionally, it supports compression and authenticated encryption. + +The main goal of Borg is to provide an efficient and secure way to backup data. The data deduplication technique used makes Borg suitable for daily backups since only changes are stored. The authenticated encryption technique makes it suitable for backups to not fully trusted targets.[¹](#sources) + +## Useful links + ++ Website: [www.borgbackup.org](https://www.borgbackup.org/) ++ Official documentation: [borgbackup.readthedocs.io](https://borgbackup.readthedocs.io/en/stable/) ++ Application software repository: [github.com - YunoHost- Apps/borg](https://github.com/YunoHost-Apps/borg_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/borg/issues](https://github.com/YunoHost-Apps/borg_ynh/issues) + +------ + +### Sources + +¹ [borgbackup.readthedocs.io](https://borgbackup.readthedocs.io/en/stable/#what-is-borgbackup) diff --git a/pages/04.applications/10.docs/bozon/app_bozon.fr.md b/pages/04.applications/10.docs/bozon/app_bozon.fr.md new file mode 100644 index 00000000..6ef3594b --- /dev/null +++ b/pages/04.applications/10.docs/bozon/app_bozon.fr.md @@ -0,0 +1,20 @@ +--- +title: BoZon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bozon' +--- + +![BoZoN](image://yunohost_package.png?height=80) + +[![Install BoZoN with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=bozon) [![Integration level](https://dash.yunohost.org/integration/bozon.svg)](https://ci-apps.yunohost.org/jenkins/job/bozon%20%28Community%29/lastBuild/consoleFull) + +Application minimaliste de partage de fichiers par glisser-déposer + +## Liens utiles + ++ Site web : [github.com - broncowdd/BoZoN (en)](https://github.com/broncowdd/BoZoN) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/bozon](https://github.com/YunoHost-Apps/bozon_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/bozon/issues](https://github.com/YunoHost-Apps/bozon_ynh/issues) diff --git a/pages/04.applications/10.docs/bozon/app_bozon.md b/pages/04.applications/10.docs/bozon/app_bozon.md new file mode 100644 index 00000000..e2709692 --- /dev/null +++ b/pages/04.applications/10.docs/bozon/app_bozon.md @@ -0,0 +1,20 @@ +--- +title: BoZon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bozon' +--- + +![BoZoN](image://yunohost_package.png?height=80) + +[![Install BoZoN with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=bozon) [![Integration level](https://dash.yunohost.org/integration/bozon.svg)](https://ci-apps.yunohost.org/jenkins/job/bozon%20%28Community%29/lastBuild/consoleFull) + +Minimalist Drag & drop file sharing app + +## Useful links + ++ Website: [github.com - broncowdd/BoZoN](https://github.com/broncowdd/BoZoN) ++ Application software repository: [github.com - YunoHost-Apps/bozon](https://github.com/YunoHost-Apps/bozon_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/bozon/issues](https://github.com/YunoHost-Apps/bozon_ynh/issues) diff --git a/pages/04.applications/10.docs/calibreweb/app_calibreweb.fr.md b/pages/04.applications/10.docs/calibreweb/app_calibreweb.fr.md new file mode 100644 index 00000000..79b71902 --- /dev/null +++ b/pages/04.applications/10.docs/calibreweb/app_calibreweb.fr.md @@ -0,0 +1,20 @@ +--- +title: Calibre-web +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_calibreweb' +--- + +![Calibre-Web](image://yunohost_package.png?height=80) + +[![Install calibreweb with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=calibreweb) [![Integration level](https://dash.yunohost.org/integration/calibreweb.svg)](https://ci-apps.yunohost.org/jenkins/job/calibreweb%20%28Community%29/lastBuild/consoleFull) + +Calibre-Web est une application web fournissant une interface propre pour naviguer, lire et télécharger des livres électroniques en utilisant une base de données Calibre existante. + +## Liens utiles + ++ Site web : [github.com - janeczku/calibre-web (en)](https://github.com/janeczku/calibre-web) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/calibreweb](https://github.com/YunoHost-Apps/calibreweb_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/calibreweb](https://github.com/YunoHost-Apps/calibreweb_ynh/issues) diff --git a/pages/04.applications/10.docs/calibreweb/app_calibreweb.md b/pages/04.applications/10.docs/calibreweb/app_calibreweb.md new file mode 100644 index 00000000..09f2619b --- /dev/null +++ b/pages/04.applications/10.docs/calibreweb/app_calibreweb.md @@ -0,0 +1,20 @@ +--- +title: Calibre-web +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_calibreweb' +--- + +![Calibre-Web](image://yunohost_package.png?height=80) + +[![Install calibreweb with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=calibreweb) [![Integration level](https://dash.yunohost.org/integration/calibreweb.svg)](https://ci-apps.yunohost.org/jenkins/job/calibreweb%20%28Community%29/lastBuild/consoleFull) + +Calibre-Web is a web app providing a clean interface for browsing, reading and downloading eBooks using an existing Calibre database. + +## Useful links + ++ Website: [github.com - janeczku/calibre-web](https://github.com/janeczku/calibre-web) ++ Application software repository: [github.com - YunoHost-Apps/calibreweb](https://github.com/YunoHost-Apps/calibreweb_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/calibreweb](https://github.com/YunoHost-Apps/calibreweb_ynh/issues) diff --git a/pages/04.applications/10.docs/castopod/app_castopod.fr.md b/pages/04.applications/10.docs/castopod/app_castopod.fr.md new file mode 100644 index 00000000..25cd5a1a --- /dev/null +++ b/pages/04.applications/10.docs/castopod/app_castopod.fr.md @@ -0,0 +1,25 @@ +--- +title: Castopod +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_castopod' +--- + +[![Installer Castopod avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=castopod) [![Integration level](https://dash.yunohost.org/integration/castopod.svg)](https://dash.yunohost.org/appci/app/castopod) + +*Castopod* est une plateforme d'hébergement gratuite et open-source conçue pour les podcasteurs qui souhaitent s'engager et interagir avec leur public. + +Castopod est facile à installer et a été construit sur la base de CodeIgniter4, un puissant framework PHP à l'empreinte très réduite. + +# Statut + +Castopod est actuellement en version bêta mais déjà très stable et utilisé par des podcasteurs du monde entier ! + +## Liens utiles + ++ Site web : [castopod.org](https://castopod.org/) ++ Démonstration : [Démo](https://podcast.podlibre.org/@podlibre_fr) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/castopod](https://github.com/YunoHost-Apps/castopod_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/castopod/issues](https://github.com/YunoHost-Apps/castopod_ynh/issues) diff --git a/pages/04.applications/10.docs/castopod/app_castopod.md b/pages/04.applications/10.docs/castopod/app_castopod.md new file mode 100644 index 00000000..37dcd201 --- /dev/null +++ b/pages/04.applications/10.docs/castopod/app_castopod.md @@ -0,0 +1,25 @@ +--- +title: Castopod +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_castopod' +--- + +[![Install Castopod with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=castopod) [![Integration level](https://dash.yunohost.org/integration/castopod.svg)](https://dash.yunohost.org/appci/app/castopod) + +*Castopod* is a free & open-source hosting platform made for podcasters who want engage and interact with their audience. + +Castopod is easy to install and was built on top of CodeIgniter4, a powerful PHP framework with a very small footprint. + +# Status + +Castopod is currently in beta but already quite stable and used by podcasters around the world! + +## Useful links + ++ Website: [castopod.org](https://castopod.org/) ++ Demonstration: [Demo](https://podcast.podlibre.org/@podlibre_en) ++ Application software repository: [github.com - YunoHost-Apps/castopod](https://github.com/YunoHost-Apps/castopod_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/castopod/issues](https://github.com/YunoHost-Apps/castopod_ynh/issues) diff --git a/pages/04.applications/10.docs/cheky/app_cheky.fr.md b/pages/04.applications/10.docs/cheky/app_cheky.fr.md new file mode 100644 index 00000000..dae07506 --- /dev/null +++ b/pages/04.applications/10.docs/cheky/app_cheky.fr.md @@ -0,0 +1,25 @@ +--- +title: Cheky +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cheky' +--- + +![Cheky](image://yunohost_package.png?height=80) + +[![Install Cheky with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=cheky) [![Integration level](https://dash.yunohost.org/integration/cheky.svg)](https://dash.yunohost.org/appci/app/cheky) + +Cheky est un logiciel écrit en PHP vous permettant de recevoir les nouvelles annonces publiées sur les sites internet Leboncoin.fr et SeLoger.com. Vous pouvez recevoir les alertes via différents canaux de communication. + +## Limitations avec YunoHost + +Les mises à jour depuis l'ancien package LBCAlerte ne sont pas possibles, l'application est uniquement en français. Cheky ne fonctionne pas avec le [SSO](https://yunohost.org/#/users). + +## Liens utiles + ++ Site web : [www.cheky.net](https://www.cheky.net/) ++ Documentation officielle : [www.cheky.net - documentation](https://www.cheky.net/documentation) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/cheky](https://github.com/YunoHost-Apps/cheky_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/cheky](https://github.com/YunoHost-Apps/cheky_ynh/issues) diff --git a/pages/04.applications/10.docs/cheky/app_cheky.md b/pages/04.applications/10.docs/cheky/app_cheky.md new file mode 100644 index 00000000..6909082b --- /dev/null +++ b/pages/04.applications/10.docs/cheky/app_cheky.md @@ -0,0 +1,25 @@ +--- +title: Checky +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cheky' +--- + +![Cheky](image://yunohost_package.png?height=80) + +[![Install Cheky with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=cheky) [![Integration level](https://dash.yunohost.org/integration/cheky.svg)](https://dash.yunohost.org/appci/app/cheky) + +Cheky is a software written in PHP allowing you to receive new ads published on the websites Leboncoin.fr and SeLoger.com. You can receive alerts via different communication channels. + +## Limitations with YunoHost + +Updates from the old LBCAlerte package are not possible, the application is only in French. Cheky does not work with [SSO](https://yunohost.org/#/users). + +## Useful links + ++ Website: [www.cheky.net (fr)](https://www.cheky.net/) ++ Official documentation: [www.cheky.net - documentation (fr)](https://www.cheky.net/documentation) ++ Application software repository: [github.com - YunoHost-Apps/cheky](https://github.com/YunoHost-Apps/cheky_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/cheky](https://github.com/YunoHost-Apps/cheky_ynh/issues) diff --git a/pages/04.applications/10.docs/cinny/app_cinny.fr.md b/pages/04.applications/10.docs/cinny/app_cinny.fr.md new file mode 100644 index 00000000..f78caaee --- /dev/null +++ b/pages/04.applications/10.docs/cinny/app_cinny.fr.md @@ -0,0 +1,26 @@ +--- +title: Cinny +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cinny' +--- + +[![Installer Cinny avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=cinny) [![Integration level](https://dash.yunohost.org/integration/cinny.svg)](https://dash.yunohost.org/appci/app/cinny) + +*Cinny* est une plateforme d'hébergement gratuite et open-source conçue pour les podcasteurs qui souhaitent s'engager et interagir avec leur public. + +Cinny est facile à installer et a été construit sur la base de CodeIgniter4, un puissant framework PHP à l'empreinte très réduite. + +## Avertissements / informations importantes + +Il n'y a pas de support LDAP (et il n'y en aura jamais). +Cinny n'est qu'un client, vous devez déjà avoir un compte sur un serveur (voir l'application YunoHost de Synapse). + +## Liens utiles + ++ Site web : [cinny.in](https://cinny.in/) ++ Démonstration : [Démo](https://app.cinny.in/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/cinny](https://github.com/YunoHost-Apps/cinny_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/cinny/issues](https://github.com/YunoHost-Apps/cinny_ynh/issues) diff --git a/pages/04.applications/10.docs/cinny/app_cinny.md b/pages/04.applications/10.docs/cinny/app_cinny.md new file mode 100644 index 00000000..2923152f --- /dev/null +++ b/pages/04.applications/10.docs/cinny/app_cinny.md @@ -0,0 +1,24 @@ +--- +title: Cinny +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cinny' +--- + +[![Install Cinny with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=cinny) [![Integration level](https://dash.yunohost.org/integration/cinny.svg)](https://dash.yunohost.org/appci/app/cinny) + +*Cinny* A Matrix client focusing primarily on simple, elegant and secure interface. + +## Disclaimers / important information + +There's no LDAP support (and never will be). +Cinny only is a client, you need to have an account on a server already (see the Synapse YunoHost app) + +## Useful links + ++ Website: [cinny.in](https://cinny.in/) ++ Demonstration: [Demo](https://app.cinny.in/) ++ Application software repository: [github.com - YunoHost-Apps/cinny](https://github.com/YunoHost-Apps/cinny_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/cinny/issues](https://github.com/YunoHost-Apps/cinny_ynh/issues) diff --git a/pages/04.applications/10.docs/civicrm_drupal7/app_civicrm_drupal7.fr.md b/pages/04.applications/10.docs/civicrm_drupal7/app_civicrm_drupal7.fr.md new file mode 100644 index 00000000..44a51e05 --- /dev/null +++ b/pages/04.applications/10.docs/civicrm_drupal7/app_civicrm_drupal7.fr.md @@ -0,0 +1,27 @@ +--- +title: CiviCRM +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_civicrm_drupal7' +--- + +![logo de CiviCRM](image://civicrm_logo.png?height=80) + +[![Install CiviCRM on Drupal 7 with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=civicrm_drupal7) [![Integration level](https://dash.yunohost.org/integration/civicrm_drupal7.svg)](https://dash.yunohost.org/appci/app/civicrm_drupal7) + +CiviCRM est une solution Web Open Source de gestion de la relation client. Elle a été spécialement conçue pour répondre aux besoins des organismes à but non lucratif, des organisations non gouvernementales et des groupes de pression.[¹](#sources) + +## Liens utiles + ++ Site web : [civicrm.org (en)](https://civicrm.org/) ++ Documentation officielle : [docs.civicrm.org (en)](https://docs.civicrm.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/civicrm_drupal7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/civicrm_drupal7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh/issues) + +------ + +### Sources + +¹ [wikipedia.org - CiviCRM](https://fr.wikipedia.org/wiki/CiviCRM) diff --git a/pages/04.applications/10.docs/civicrm_drupal7/app_civicrm_drupal7.md b/pages/04.applications/10.docs/civicrm_drupal7/app_civicrm_drupal7.md new file mode 100644 index 00000000..8440e225 --- /dev/null +++ b/pages/04.applications/10.docs/civicrm_drupal7/app_civicrm_drupal7.md @@ -0,0 +1,27 @@ +--- +title: CiviCRM +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_civicrm_drupal7' +--- + +![CiviCRM's logo](image://civicrm_logo.png?height=80) + +[![Install CiviCRM on Drupal 7 with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=civicrm_drupal7) [![Integration level](https://dash.yunohost.org/integration/civicrm_drupal7.svg)](https://dash.yunohost.org/appci/app/civicrm_drupal7) + +CiviCRM is a web-based suite of internationalized open-source software for constituency relationship management that falls under the broad rubric of customer relationship management. It is specifically designed for the needs of non-profit,non-governmental, and advocacy groups, and serves as an association-management system.[¹](#sources) + +## Useful links + ++ Website: [civicrm.org](https://civicrm.org/) ++ Official documentation: [docs.civicrm.org](https://docs.civicrm.org/) ++ Application software repository: [github.com - YunoHost-Apps/civicrm_drupal7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/civicrm_drupal7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh/issues) + +------ + +### Sources + +¹ [wikipedia.org - CiviCRM](https://en.wikipedia.org/wiki/CiviCRM) diff --git a/pages/04.applications/10.docs/codimd/app_codimd.fr.md b/pages/04.applications/10.docs/codimd/app_codimd.fr.md new file mode 100644 index 00000000..76b3962d --- /dev/null +++ b/pages/04.applications/10.docs/codimd/app_codimd.fr.md @@ -0,0 +1,23 @@ +--- +title: CodiMD +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_codimd' +--- + +![logo de CodiMD](image://codimd_logo.png?height=80) + +[![Installer CodiMD avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=codimd) [![Integration level](https://dash.yunohost.org/integration/codimd.svg)](https://dash.yunohost.org/appci/app/codimd) + +CodiMD est un service web de traitement de texte collaboratif en temps réel. Il utilise le langage Markdown, qui est un moyen simple pour formater un texte. +CodiMD propose un vaste choix de fonctionnalités pour toutes les utilisations courantes du traitement de texte parmi lesquelles gestion des titres, table de matières, insertion d’images, tableaux, notes de bas de page, incrustation de vidéos, visualisateurs PDF, expressions mathématiques LaTeX avec MathJax, diagrammes, etc. +Différents niveaux de permission permettent de choisir qui peut lire ou éditer le document. + +## Liens utiles + ++ Dépôt officiel : [https://github.com/hackmdio/codimd](https://github.com/hackmdio/codimd) ++ Documentation officielle : [hackmd.io/c/codimd-documentation](https://hackmd.io/c/codimd-documentation) ++ Dépôt logiciel de l’application : [github.com - YunoHost-Apps/codimd](https://github.com/YunoHost-Apps/codimd_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/codimd/issues](https://github.com/YunoHost-Apps/codimd_ynh/issues) diff --git a/pages/04.applications/10.docs/codimd/app_codimd.md b/pages/04.applications/10.docs/codimd/app_codimd.md new file mode 100644 index 00000000..f9822a23 --- /dev/null +++ b/pages/04.applications/10.docs/codimd/app_codimd.md @@ -0,0 +1,23 @@ +--- +title: CodiMD +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_codimd' +--- + +![CodiMD’s logo](image://codimd_logo.png?height=80) + +[![Install CodiMD with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=codimd) [![Integration level](https://dash.yunohost.org/integration/codimd.svg)](https://dash.yunohost.org/appci/app/codimd) + +CodiMD is a collaborative, real-time word processing web service. It uses Markdown language, which is a simple way to format text. +CodiMD offers a wide range of features for all common uses of word processing, including title management, table of contents, insertion of images, tables, footnotes, video overlay, PDF viewers, LaTeX mathematical expressions with MathJax, diagrams, etc. +Different levels of permission allow you to choose who can read or edit the document. + +## Useful links + ++ Official software repository: [https://github.com/hackmdio/codimd](https://github.com/hackmdio/codimd) ++ Official documentation: [hackmd.io/c/codimd-documentation](https://hackmd.io/c/codimd-documentation) ++ Application software repository: [github.com - YunoHost-Apps/codimd](https://github.com/YunoHost-Apps/codimd_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/codimd/issues](https://github.com/YunoHost-Apps/codimd_ynh/issues) diff --git a/pages/04.applications/10.docs/collabora/app_collabora.fr.md b/pages/04.applications/10.docs/collabora/app_collabora.fr.md new file mode 100644 index 00000000..2f095939 --- /dev/null +++ b/pages/04.applications/10.docs/collabora/app_collabora.fr.md @@ -0,0 +1,64 @@ +--- +title: Collabora +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_collabora' +--- + +![logo de collabora](image://collabora_logo.png?height=80) + +[![Install collabora with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=collabora) [![Integration level](https://dash.yunohost.org/integration/collabora.svg)](https://dash.yunohost.org/appci/app/collabora) + +Collabora est une suite bureautique en ligne basée sur LibreOffice et utilisable avec Nextcloud ou ownCloud. Elle permet d'éditer des documents textes, des tableaux, des diaporamas. L'édition en ligne peut se faire en simultanée et permet d'exporter et d'imprimer des documents grâce au format PDF généré. + +Cette application n'est pas compatible avec les architectures ARM. Le projet Collabora a bien développé une version spécifique ARM, mais celle-ci n'est compatible qu'avec Ubuntu, pas Debian, donc ne fonctionne pas sous YunoHost. + +### Architectures ARM + +Il existe une solution pour faire tourner Collabora Online Document Server sur des architectures ARM (Raspberry Pi...), via Nextcloud. + +#### 1. Télécharger et activer le Collabora Online Document Server + +#### Attention : cette étape doit être réalisée depuis un terminal, et non depuis l'interface graphique de Nextcloud + +Dans un terminal, se placer en super user + +```bash +sudo su +``` + +puis lancer la commande d'installation du CODE : + +```bash +sudo -u nextcloud php --define apc.enable_cli=1 -d memory_limit=512M /var/www/nextcloud/occ app:install richdocumentscode_arm64 +``` + +#### 2. Corriger la configuration de NGINX pour Nextcloud + +Pour que le CODE soit connecté à Nextcloud, le proxy doit faire le lien entre CODE (richdocumentscode_arm64) et Nextcloud. +Or le fichier config par défaut de NGINX pour Nextcloud fait référence à richdocumentscode au lieu de rich documentscode_arm64, qui est le nom de l'application dans notre cas des architectures ARM. + +Il faut donc faire : + +```bash +cd /etc/nginx/conf.d/[nextcloud.votredomaine.com].d +``` + +```bash +sudo nano nextcloud.conf +``` +Dans le fichier, repérer la ligne comportant "richdocumentscode", puis ajouter "_arm64" juste après, enregistrer (Ctrl+S) et sortir (Ctrl+X). + +Puis redémarrer NGINX (par exemple en redémarrant le serveur depuis l'interface d'aministration de YunoHost). + +#### 3. Télécharger et activer l'application Nextcloud Collabora, sous le nom de "Nextcloud Office" + +Dès lors, on peut télécharger l'application "Nextcloud Office" dans Nextcloud, et normalement le serveur CODE est choisi par défaut (sinon voir les paramètres de Nextcloud). + +## Liens utiles + ++ Site web : [www.collaboraoffice.com](https://www.collaboraoffice.com/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/collabora](https://github.com/YunoHost-Apps/collabora_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/collabora/issues](https://github.com/YunoHost-Apps/collabora_ynh/issues) diff --git a/pages/04.applications/10.docs/collabora/app_collabora.md b/pages/04.applications/10.docs/collabora/app_collabora.md new file mode 100644 index 00000000..8b95d9d6 --- /dev/null +++ b/pages/04.applications/10.docs/collabora/app_collabora.md @@ -0,0 +1,20 @@ +--- +title: Collabora +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_collabora' +--- + +![collabora's logo](image://collabora_logo.png?height=80) + +[![Install collabora with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=collabora) [![Integration level](https://dash.yunohost.org/integration/collabora.svg)](https://dash.yunohost.org/appci/app/collabora) + +Collabora is an online office suite based on LibreOffice and usable with Nextcloud or ownCloud. It allows you to edit text documents, tables, slideshows. The online edition can be done simultaneously and allows you to export and print documents using the generated PDF format. + +## Useful links + ++ Website: [www.collaboraoffice.com](https://www.collaboraoffice.com/) ++ Application software repository: [github.com - YunoHost-Apps/collabora](https://github.com/YunoHost-Apps/collabora_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/collabora/issues](https://github.com/YunoHost-Apps/collabora_ynh/issues) diff --git a/pages/04.applications/10.docs/collaboradocker/app_collaboradocker.fr.md b/pages/04.applications/10.docs/collaboradocker/app_collaboradocker.fr.md new file mode 100644 index 00000000..ea0f7bae --- /dev/null +++ b/pages/04.applications/10.docs/collaboradocker/app_collaboradocker.fr.md @@ -0,0 +1,42 @@ +--- +title: Collabora via Docker +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_collaboradocker' +--- + +# Installer Collabora avec Nextcloud avec Docker + +**Note :** la marche à suivre detaillée est réalisée ici à partir d’une instance YunoHost sur Debian 8 (celle-ci n'a pas été testée suite à la migration vers la version 3 de YunoHost). Ces instructions ont pour pré-requis que les domaines/sous-domaines sont correctement configurés au niveau des DNS et de votre instance YunoHost (voir [DNS](/dns_config), [DNS et installation d’une application sur un sous-domaine](/dns_subdomains), [Configurer les enregistrements DNS](/dns_config) et [Nom de domaine en noho.st / nohost.me / ynh.fr](/dns_nohost_me)). + +### 0. Installer Nextcloud + +Si l'application Nexcloud n'est pas déja installée sur votre instance YunoHost, vous pouvez l’installer depuis le lien suivant : [Installer Nextcloud](https://install-app.yunohost.org/?app=nextcloud) + + +### 1. Installer l'application Collabora dans YunHost +**dans l'interface d'administration :** + +Applications > Installer > En bas de la page _Installer une application personnalisée_ > Renseigner l’URL « https://github.com/aymhce/collaboradocker_ynh » > Définir le nom de domaine secondaire/sous-domaine dédié à l'application Collabora. + + +### 2. Configuration dans Nextcloud + + **Ajouter l'application Collabora Online à Nextcloud :** + +Cliquer sur l'icône de l'utilisateur en haut à droite > Applications > Bureautique & texte > Sous « Collabora Online » cliquer sur `Activer` . + +**Configurer Collabora sur Nextcloud :** + + Cliquer sur l'icone de l'utilisateur en haut à droite > Paramètres > Sous _Administration_, _Collabora en ligne_ . + Renseigner le « Serveur Collabora en ligne » par le nom de domaine choisi lors de l’installation de Collabora dans YunoHost (précédé de « https:// »). + +### 3. Reboot + +Pour permettre la mise en marche du lien collabora-Nextcloud, le système doit être rebooté. Faisable depuis l'interface d'administration : Outils > Arrêter/redémarrer > `Redémarrer`. Ou depuis la ligne de commande : ``sudo reboot now``. + +## Débug + +Suite à certaines mises à jour du système, de YunoHost ou des applications, Collabora peut afficher un message d'erreur du type "c'est embarrassant...". Pour remettre les choses en marche, il suffit de redémarrer la machine docker, avec la commande `systemctl restart docker`. diff --git a/pages/04.applications/10.docs/collaboradocker/app_collaboradocker.md b/pages/04.applications/10.docs/collaboradocker/app_collaboradocker.md new file mode 100644 index 00000000..54e6017f --- /dev/null +++ b/pages/04.applications/10.docs/collaboradocker/app_collaboradocker.md @@ -0,0 +1,41 @@ +--- +title: Collabora via Docker +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_collaboradocker' +--- + +# Install Collabora with Nextcloud, using Docker + +**Note:** This walkthrough is based on a Debian 8 instance, and has not been tested since version 3 upgrade of YunoHost. As a prerequisite, you must have configured your domains and sub-domains in the DNS, in compliance with: [DNS](/dns_config), [Sub-domain install of an app](/dns_subdomains), [DNS settings](/dns_config) and [noho.st / nohost.me / ynh.fr domains](/dns_nohost_me). + +### 0. Install Nextcloud + +If Nextcloud is not already installed on your YunoHost instance, you may do so with this link: [Install Nextcloud](https://install-app.yunohost.org/?app=nextcloud) + +### 1. Install Collabora app within YunoHost + +**In the admin interface:** + +Applications > Install > at the bottom _Install a custom application_ > enter this URL « https://github.com/aymhce/collaboradocker_ynh » > Enter the domain/subdomain name you wish for the Collabora application. + +### 2. Configuration within Nextcloud + + **Add the Collabora Online application in Nextcloud:** + +Click on the user icon (top right) > Applications > Desktop & Text > Under the « Collabora Online » tile, click on `Activate` . + +**Setup Collabora in Nextcloud:** + +Click on the user icon (top right) > Parametres > Under _Administration_, _Collabora Online_ . +Specify the « Online Collabora server » with the domain name chosen during the Collabora install in YunoHost (full with « https:// »). + +### 3. Reboot + +To allow all the pieces to work, system must be reboot. You can do so through the admin interface (Tools > Stop/reboot > `Reboot`) or via the command line interface: `sudo reboot now`. + +## Debugging + +Following some system, YunoHost or app updates, Collabora may display an error message such as "It's embarrassing...". To put things back in order, you just have to restart the docker machine, with the command `systemctl restart docker`. diff --git a/pages/04.applications/10.docs/concrete5/app_concrete5.fr.md b/pages/04.applications/10.docs/concrete5/app_concrete5.fr.md new file mode 100644 index 00000000..c04d299c --- /dev/null +++ b/pages/04.applications/10.docs/concrete5/app_concrete5.fr.md @@ -0,0 +1,22 @@ +--- +title: Concret5 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_concrete5' +--- + +![Logo de Concrete5](image://concrete5_logo.png?height=80) + +[![Install concrete5 with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=concrete5) [![Integration level](https://dash.yunohost.org/integration/concrete5.svg)](https://dash.yunohost.org/appci/app/concrete5) + +## Limitations avec YunoHost + +L'authentification LDAP et HTTP n'est pas prise en charge. + +## Liens utiles + ++ Site web : [documentation.concrete5.org (en)](https://documentation.concrete5.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/concrete5](https://github.com/YunoHost-Apps/concrete5_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/concrete5](https://github.com/YunoHost-Apps/concrete5_ynh/issues) diff --git a/pages/04.applications/10.docs/concrete5/app_concrete5.md b/pages/04.applications/10.docs/concrete5/app_concrete5.md new file mode 100644 index 00000000..1ca25682 --- /dev/null +++ b/pages/04.applications/10.docs/concrete5/app_concrete5.md @@ -0,0 +1,22 @@ +--- +title: Concret5 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_concrete5' +--- + +![Concrete5's logo](image://concrete5_logo.png?height=80) + +[![Install concrete5 with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=concrete5) [![Integration level](https://dash.yunohost.org/integration/concrete5.svg)](https://dash.yunohost.org/appci/app/concrete5) + +## Limitations with YunoHost + +LDAP and HTTP auth are not supported. + +## Useful links + ++ Website: [documentation.concrete5.org](https://documentation.concrete5.org/) ++ Application software repository: [github.com - YunoHost-Apps/concrete5](https://github.com/YunoHost-Apps/concrete5_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/concrete5/issues](https://github.com/YunoHost-Apps/concrete5_ynh/issues) diff --git a/pages/04.applications/10.docs/converse/app_converse.fr.md b/pages/04.applications/10.docs/converse/app_converse.fr.md new file mode 100644 index 00000000..7d501ea0 --- /dev/null +++ b/pages/04.applications/10.docs/converse/app_converse.fr.md @@ -0,0 +1,21 @@ +--- +title: Converse +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_converse' +--- + +[![Installer Converse avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=converse) [![Integration level](https://dash.yunohost.org/integration/converse.svg)](https://dash.yunohost.org/appci/app/converse) + +*Converse* est un client de chat XMPP gratuit et open-source écrit en JavaScript qui peut être étroitement intégré à n'importe quel site web. + +L'avantage d'utiliser converse.js plutôt que de s'appuyer sur une solution SaaS (software-as-a-service) est que vos utilisateurs peuvent bénéficier d'une expérience de chat en ligne beaucoup plus personnalisée, rationalisée et intégrée et que vous avez le contrôle des données. Ce dernier point est une exigence pour de nombreux sites traitant des informations sensibles. + +## Liens utiles + ++ Site web : [conversejs.org](https://conversejs.org/) ++ Démonstration : [Démo](https://inverse.chat/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/converse](https://github.com/YunoHost-Apps/converse_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/converse/issues](https://github.com/YunoHost-Apps/converse_ynh/issues) diff --git a/pages/04.applications/10.docs/converse/app_converse.md b/pages/04.applications/10.docs/converse/app_converse.md new file mode 100644 index 00000000..3a326d84 --- /dev/null +++ b/pages/04.applications/10.docs/converse/app_converse.md @@ -0,0 +1,21 @@ +--- +title: Converse +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_converse' +--- + +[![Install Converse with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=converse) [![Integration level](https://dash.yunohost.org/integration/converse.svg)](https://dash.yunohost.org/appci/app/converse) + +*Converse* is a free and open-source XMPP chat client written in JavaScript which can be tightly integrated into any website. + +The benefit of using converse.js as opposed to relying on a SaaS (software-as-a-service) solution, is that your users can have a much more customized, streamlined and integrated webchat experience and that you have control over the data. The latter being a requirement for many sites dealing with sensitive information. + +## Useful links + ++ Website: [conversejs.org (en)](https://conversejs.org/) ++ Demonstration: [Demo](https://inverse.chat/) ++ Application software repository: [github.com - YunoHost-Apps/converse](https://github.com/YunoHost-Apps/converse_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/converse/issues](https://github.com/YunoHost-Apps/converse_ynh/issues) diff --git a/pages/04.applications/10.docs/coturn/app_coturn.fr.md b/pages/04.applications/10.docs/coturn/app_coturn.fr.md new file mode 100644 index 00000000..82677e11 --- /dev/null +++ b/pages/04.applications/10.docs/coturn/app_coturn.fr.md @@ -0,0 +1,34 @@ +--- +title: Coturn +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_coturn' +--- + +[![Installer Coturn avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=coturn) [![Integration level](https://dash.yunohost.org/integration/coturn.svg)](https://dash.yunohost.org/appci/app/coturn) + +*Coturn* est une implémentation libre et open source de serveurs TURN et STUN. +Le serveur TURN est un serveur et une passerelle de traversée NAT pour le trafic VoIP. Il peut également être utilisé comme serveur TURN et passerelle de trafic réseau à usage général. + +### Avertissements / informations importantes + +#### Configuration + +Vous devez installer le serveur TURN dans un domaine principal ou un sous-domaine comme turn.domain.tld. +Comment configurer cette application : un simple fichier avec SSH. + +#### Testing + +Pour les tests, vous pouvez utiliser l'outil de test Trickle-Ice. Accédez à la page trickle-ice [trickle-ice page](https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/) et entrez les détails suivants. + +TURN URI : turn::5349 +TURN username: +TURN password: + +## Liens utiles + ++ Site web : [github.com/coturn/coturn](https://github.com/coturn/coturn) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/coturn](https://github.com/YunoHost-Apps/coturn_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/coturn/issues](https://github.com/YunoHost-Apps/coturn_ynh/issues) diff --git a/pages/04.applications/10.docs/coturn/app_coturn.md b/pages/04.applications/10.docs/coturn/app_coturn.md new file mode 100644 index 00000000..5499fe3f --- /dev/null +++ b/pages/04.applications/10.docs/coturn/app_coturn.md @@ -0,0 +1,34 @@ +--- +title: Coturn +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_coturn' +--- + +[![Install Coturn with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=coturn) [![Integration level](https://dash.yunohost.org/integration/coturn.svg)](https://dash.yunohost.org/appci/app/coturn) + +*Coturn* is a Free open source implementation of TURN and STUN Server. +The TURN Server is a VoIP media traffic NAT traversal server and gateway. It can be used as a general-purpose network traffic TURN server and gateway, too. + +### Disclaimers / important information + +#### Configuration + +You need to install TURN server in a root or subdomain like turn.domain.tld +How to configure this app: a plain file with SSH. + +#### Testing + +For testing we can use Trickle-Ice testing tool. Go to [trickle-ice page](https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/) and enter following details. + +TURN URI : turn::5349 +TURN username: +TURN password: + +## Useful links + ++ Website: [github.com/coturn/coturn](https://github.com/coturn/coturn) ++ Application software repository: [github.com - YunoHost-Apps/coturn](https://github.com/YunoHost-Apps/coturn_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/coturn/issues](https://github.com/YunoHost-Apps/coturn_ynh/issues) diff --git a/pages/04.applications/10.docs/cowyo/app_cowyo.fr.md b/pages/04.applications/10.docs/cowyo/app_cowyo.fr.md new file mode 100644 index 00000000..9007b51e --- /dev/null +++ b/pages/04.applications/10.docs/cowyo/app_cowyo.fr.md @@ -0,0 +1,25 @@ +--- +title: Cowyo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cowyo' +--- + +![Logo de Cowyo](image://cowyo_logo.png?height=80) + +[![Install cowyo with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=cowyo) [![Integration level](https://dash.yunohost.org/integration/cowyo.svg)](https://ci-apps.yunohost.org/ci/apps/cowyo/) + +Cowyo est un serveur wiki autonome qui permet de prendre des notes facilement et rapidement. La caractéristique la plus importante ici est la simplicité. Les autres caractéristiques sont le versionnage, le verrouillage des pages, les messages autodestructeurs, le cryptage et la lisibilité. + +## Limitations avec YunoHost + +De par sa conception, Cowyo a besoin de son propre domaine dédié. Il ne supporte pas les multiples utilisateurs. + +## Liens utiles + ++ Site web (demo) : [cowyo.com](https://cowyo.com) ++ Documentation officielle : [github.com - schollz/cowyo/README (en)](https://github.com/schollz/cowyo/blob/master/README.md) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/cowyo](https://github.com/YunoHost-Apps/cowyo_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/cowyo](https://github.com/YunoHost-Apps/cowyo_ynh/issues) diff --git a/pages/04.applications/10.docs/cowyo/app_cowyo.md b/pages/04.applications/10.docs/cowyo/app_cowyo.md new file mode 100644 index 00000000..8cb6c881 --- /dev/null +++ b/pages/04.applications/10.docs/cowyo/app_cowyo.md @@ -0,0 +1,25 @@ +--- +title: Cowyo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cowyo' +--- + +![Cowyo's logo](image://cowyo_logo.png?height=80) + +[![Install cowyo with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=cowyo) [![Integration level](https://dash.yunohost.org/integration/cowyo.svg)](https://ci-apps.yunohost.org/ci/apps/cowyo/) + +Cowyo is a self-contained wiki server that makes jotting notes easy and fast. The most important feature here is simplicity. Other features include versioning, page locking, self-destructing messages, encryption, and listifying. + +## Limitations with YunoHost + +By design, cowyo requires its own domain. He does not support multiple users. + +## Useful links + ++ Website (demo): [cowyo.com](https://cowyo.com) ++ Official documentation: [github.com - schollz/cowyo/README](https://github.com/schollz/cowyo/blob/master/README.md) ++ Application software repository: [github.com - YunoHost-Apps/cowyo](https://github.com/YunoHost-Apps/cowyo_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/cowyo/issues](https://github.com/YunoHost-Apps/cowyo_ynh/issues) diff --git a/pages/04.applications/10.docs/cryptpad/app_cryptpad.fr.md b/pages/04.applications/10.docs/cryptpad/app_cryptpad.fr.md new file mode 100644 index 00000000..065c9f2c --- /dev/null +++ b/pages/04.applications/10.docs/cryptpad/app_cryptpad.fr.md @@ -0,0 +1,36 @@ +--- +title: CryptPad +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cryptpad' +--- + +[![Installer CryptPad avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=cryptpad) [![Integration level](https://dash.yunohost.org/integration/cryptpad.svg)](https://dash.yunohost.org/appci/app/cryptpad) + +*CryptPad* est une suite logicielle chiffrée de bout en bout et ouverte. Elle est conçue pour permettre un travail collaboratif, en synchronisant les modifications apportées aux documents en temps réel. Comme toutes les données sont chiffrées, le service et ses administrateurs n'ont aucun moyen de voir le contenu édité et stocké. + +## Avertissements / informations importantes + +#### Configuration + +Une fois CryptPad installé, créez un compte via le bouton S'inscrire sur la page d'accueil. Pour faire de ce compte un administrateur d'instance : + + Copiez la clé publique trouvée dans le menu utilisateur (avatar en haut à droite) > Paramètres > Compte > Clé de signature publique + Collez cette clé dans `/var/www/cryptpad/config/config.js` dans le tableau suivant (décommentez et remplacez l'espace réservé) : + +``` +adminKeys: [ + "[cryptpad-user1@my.awesome.website/YZgXQxKR0Rcb6r6CmxHPdAGLVludrAF2lEnkbx1vVOo=]", +], +``` + + Redémarrer le service CryptPad (Dans webadmin YunoHost -> Services -> cryptpad -> Redémarrer) + +## Liens utiles + ++ Site web : [cryptpad.fr (fr)](https://cryptpad.fr/) ++ Démonstration : [Démo](https://cryptpad.fr/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/cryptpad](https://github.com/YunoHost-Apps/cryptpad_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/cryptpad/issues](https://github.com/YunoHost-Apps/cryptpad_ynh/issues) diff --git a/pages/04.applications/10.docs/cryptpad/app_cryptpad.md b/pages/04.applications/10.docs/cryptpad/app_cryptpad.md new file mode 100644 index 00000000..1c7eb557 --- /dev/null +++ b/pages/04.applications/10.docs/cryptpad/app_cryptpad.md @@ -0,0 +1,34 @@ +--- +title: CryptPad +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cryptpad' +--- + +[![Installer CryptPad with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=cryptpad) [![Integration level](https://dash.yunohost.org/integration/cryptpad.svg)](https://dash.yunohost.org/appci/app/cryptpad) + +*CryptPad* is a collaboration suite that is end-to-end-encrypted and open-source. It is built to enable collaboration, synchronizing changes to documents in real time. Because all data is encrypted, the service and its administrators have no way of seeing the content being edited and stored. + +## Disclaimers / important information + +#### Configuration + +Once CryptPad is installed, create an account via the Register button on the home page. To make this account an instance administrator: + + Copy the public key found in User Menu (avatar at the top right) > Settings > Account > Public Signing Key + Paste this key in `/var/www/cryptpad/config/config.js` in the following array (uncomment and replace the placeholder): +``` +adminKeys: [ + "[cryptpad-user1@my.awesome.website/YZgXQxKR0Rcb6r6CmxHPdAGLVludrAF2lEnkbx1vVOo=]", +], +``` + Restart CryptPad service (In YunoHost webadmin -> Services -> cryptpad -> Restart) + +## Useful links + ++ Website: [cryptpad.fr](https://cryptpad.fr/) ++ Demonstration: [Demo](https://cryptpad.fr/) ++ Application software repository: [github.com - YunoHost-Apps/cryptpad](https://github.com/YunoHost-Apps/cryptpad_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/cryptpad/issues](https://github.com/YunoHost-Apps/cryptpad_ynh/issues) diff --git a/pages/04.applications/10.docs/cubiks-2048/app_cubiks-2048.fr.md b/pages/04.applications/10.docs/cubiks-2048/app_cubiks-2048.fr.md new file mode 100644 index 00000000..3a099859 --- /dev/null +++ b/pages/04.applications/10.docs/cubiks-2048/app_cubiks-2048.fr.md @@ -0,0 +1,19 @@ +--- +title: Cubiks 2048 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cubiks-2048' +--- + +[![Installer Cubiks 2048 avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=cubiks-2048) [![Integration level](https://dash.yunohost.org/integration/cubiks-2048.svg)](https://dash.yunohost.org/appci/app/cubiks-2048) + +*Cubiks 2048* est un clone en 3D du jeu 2048. + +## Liens utiles + ++ Site web : [github.com/Kshitij-Banerjee/Cubiks-2048](https://github.com/Kshitij-Banerjee/Cubiks-2048) ++ Démonstration : [Démo](https://kshitij-banerjee.github.io/Cubiks-2048/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/cubiks-2048](https://github.com/YunoHost-Apps/cubiks-2048_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/cubiks-2048/issues](https://github.com/YunoHost-Apps/cubiks-2048_ynh/issues) diff --git a/pages/04.applications/10.docs/cubiks-2048/app_cubiks-2048.md b/pages/04.applications/10.docs/cubiks-2048/app_cubiks-2048.md new file mode 100644 index 00000000..3a2d26e9 --- /dev/null +++ b/pages/04.applications/10.docs/cubiks-2048/app_cubiks-2048.md @@ -0,0 +1,19 @@ +--- +title: Cubiks 2048 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cubiks-2048' +--- + +[![Installer Cubiks 2048 with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=cubiks-2048) [![Integration level](https://dash.yunohost.org/integration/cubiks-2048.svg)](https://dash.yunohost.org/appci/app/cubiks-2048) + +*Cubiks 2048* is a clone of 2048 game in 3D. + +## Useful links + ++ Website: [github.com/Kshitij-Banerjee/Cubiks-2048](https://github.com/Kshitij-Banerjee/Cubiks-2048) ++ Demonstration: [Demo](https://kshitij-banerjee.github.io/Cubiks-2048/) ++ Application software repository: [github.com - YunoHost-Apps/cubiks-2048](https://github.com/YunoHost-Apps/cubiks-2048_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/cubiks-2048/issues](https://github.com/YunoHost-Apps/cubiks-2048_ynh/issues) diff --git a/pages/04.applications/10.docs/dex/app_dex.md b/pages/04.applications/10.docs/dex/app_dex.md new file mode 100644 index 00000000..c76f75f0 --- /dev/null +++ b/pages/04.applications/10.docs/dex/app_dex.md @@ -0,0 +1,22 @@ +--- +title: Dex +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dex' +--- + +![dex's logo](image://dex_logo.svg?resize=,80) + +[![Install Dex with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=dex) [![Integration level](https://dash.yunohost.org/integration/dex.svg)](https://dash.yunohost.org/appci/app/dex) + +Dex is an identity service that uses OpenID Connect to drive authentication for other apps. This YunoHost package will install Dex and setup a canonical OpenID Connect provider for your YunoHost instance, based on the LDAP user base, that can then be used as an authentification server for other YunoHost apps. + + +## Useful links + ++ Website: [dexidp.io](https://dexidp.io) ++ Official documentation: [dexidp.io/docs](https://dexidp.io/docs/) ++ Application software repository: [github.com - YunoHost-Apps/dex](https://github.com/YunoHost-Apps/dex_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/dex/issues](https://github.com/YunoHost-Apps/dex_ynh/issues) diff --git a/pages/04.applications/10.docs/diagramsnet/app_diagramsnet.fr.md b/pages/04.applications/10.docs/diagramsnet/app_diagramsnet.fr.md new file mode 100644 index 00000000..881485fe --- /dev/null +++ b/pages/04.applications/10.docs/diagramsnet/app_diagramsnet.fr.md @@ -0,0 +1,29 @@ +--- +title: Diagram.net +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_diagramsnet' +--- + +![logo de Diagrams.net](image://diagramsnet_logo.jpg?width=80) + +[![Install diagramsnet with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=diagramsnet) [![Integration level](https://dash.yunohost.org/integration/diagramsnet.svg)](https://dash.yunohost.org/appci/app/diagramsnet) + +diagrams.net vous permet de créer un large éventail de diagrammes, allant de simples arborescences et organigrammes, à des diagrammes très techniques de réseaux, de baies et d'électricité. + +Il s'agit d'un éditeur et d'un visualiseur de diagrammes en ligne gratuit qui propose une grande variété de formes, d'icônes, de connecteurs et de modèles pour vous aider à démarrer rapidement. Il est également doté de fonctions qui permettent aux utilisateurs expérimentés de se sentir chez eux.[¹](#sources) + +## Liens utiles + + + Site web : [www.diagrams.net (en)](https://www.diagrams.net/index.html) + + Documentation officielle : [www.diagrams.net - doc (en)](https://www.diagrams.net/doc/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/diagramsnet](https://github.com/YunoHost-Apps/diagramsnet_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/diagramsnet/issues](https://github.com/YunoHost-Apps/diagramsnet_ynh/issues) + + ------ + +### Sources + + ¹ [www.diagrams.net - about (en)](https://www.diagrams.net/about.html) diff --git a/pages/04.applications/10.docs/diagramsnet/app_diagramsnet.md b/pages/04.applications/10.docs/diagramsnet/app_diagramsnet.md new file mode 100644 index 00000000..fcf6fc3d --- /dev/null +++ b/pages/04.applications/10.docs/diagramsnet/app_diagramsnet.md @@ -0,0 +1,29 @@ +--- +title: Diagrams.net +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_diagramsnet' +--- + +![Diagrams.net's logo](image://diagramsnet_logo.jpg?width=80) + +[![Install diagramsnet with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=diagramsnet) [![Integration level](https://dash.yunohost.org/integration/diagramsnet.svg)](https://dash.yunohost.org/appci/app/diagramsnet) + +diagrams.net lets you create a wide range of diagrams, from simple tree and flow diagrams, to highly technical network, rack and electrical diagrams. + +It’s a free, online diagram editor and viewer with a wide variety of shapes, icons, connector and templates to help you get started quickly. It’s also feature-rich–experienced diagrammers will feel at home.[¹](#sources) + +## Useful links + ++ Website: [www.diagrams.net](https://www.diagrams.net/index.html) ++ Official documentation: [www.diagrams.net - doc](https://www.diagrams.net/doc/) ++ Application software repository: [github.com - YunoHost-Apps/diagramsnet](https://github.com/YunoHost-Apps/diagramsnet_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/diagramsnet/issues](https://github.com/YunoHost-Apps/diagramsnet_ynh/issues) + +----- + +### Sources + +¹ [www.diagrams.net - about](https://www.diagrams.net/about.html) diff --git a/pages/04.applications/10.docs/discourse/app_discourse.fr.md b/pages/04.applications/10.docs/discourse/app_discourse.fr.md new file mode 100644 index 00000000..a26c4276 --- /dev/null +++ b/pages/04.applications/10.docs/discourse/app_discourse.fr.md @@ -0,0 +1,31 @@ +--- +title: Discourse +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_discourse' +--- + +![logo de Discourse](image://discourse_logo.svg?resize=,80) + +[![Install Discourse with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=discourse) [![Integration level](https://dash.yunohost.org/integration/discourse.svg)](https://ci-apps.yunohost.org/jenkins/job/discourse%20%28Community%29/lastBuild/consoleFull) + +Discourse dispose des fonctionnalités usuelles d’un forum de discussion : utilisateurs, discussions, recherche, messages privés, etc. Le mode « liste de diffusion » permet d’utiliser la plupart des fonctionnalités du forum via des courriers électroniques. Écrit en ruby et en JavaScript, il nécessite une base de données PostgreSQL et un serveur d’envoi de courrier électronique.[¹](#sources) + +## Limitations avec YunoHost + +Dans le tableau de bord de l'administration, la version installée est indiquée comme inconnue (du fait que nous n'utilisons pas Git pour l'installation) ; vous pouvez ignorer cela sans risque car le paquet YunoHost sera maintenu. Sur les appareils ARM, les avatars générés par défaut ne portent pas les initiales du profil (il ne s'agit que d'un simple disque). + +## Liens utiles + + + Site web : [www.discourse.org (en)](https://www.discourse.org/) + + Documentation officielle : [www.discourse.org - customers (en)](https://www.discourse.org/customers) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/discourse](https://github.com/YunoHost-Apps/discourse_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/discourse/issues](https://github.com/YunoHost-Apps/discourse_ynh/issues) + + ------ + +### Sources + +¹ [framalibre.org - Discourse](https://framalibre.org/content/discourse) diff --git a/pages/04.applications/10.docs/discourse/app_discourse.md b/pages/04.applications/10.docs/discourse/app_discourse.md new file mode 100644 index 00000000..748804ba --- /dev/null +++ b/pages/04.applications/10.docs/discourse/app_discourse.md @@ -0,0 +1,31 @@ +--- +title: Discourse +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_discourse' +--- + +![Discourse's logo](image://discourse_logo.svg?resize=,80) + +[![Install Discourse with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=discourse) [![Integration level](https://dash.yunohost.org/integration/discourse.svg)](https://ci-apps.yunohost.org/jenkins/job/discourse%20%28Community%29/lastBuild/consoleFull) + +Discourse has all the usual features of a discussion forum: users, discussions, search, private messages, etc. The "mailing list" mode allows you to use most of the forum's functionalities via e-mail. Written in Ruby and JavaScript, it requires a PostgreSQL database and a mail server.[¹](#sources) + +## Limitations with YunoHost + +In the administration dashboard, The installed version is shown as unknown (due the fact that we don't use Git for installation); you can safely ignore that as the YunoHost package will be maintained. On ARM devices, default generated avatars are missing the profile initials (they are only a plain discus). + +## Useful links + ++ Website: [www.discourse.org](https://www.discourse.org/) ++ Official documentation: [www.discourse.org - customers](https://www.discourse.org/customers) ++ Application software repository: [github.com - YunoHost-Apps/discourse](https://github.com/YunoHost-Apps/discourse_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/discourse/issues](https://github.com/YunoHost-Apps/discourse_ynh/issues) + +----- + +### Sources + +¹ [framalibre.org - Discourse (fr)](https://framalibre.org/content/discourse) diff --git a/pages/04.applications/10.docs/dispatch/app_dispatch.fr.md b/pages/04.applications/10.docs/dispatch/app_dispatch.fr.md new file mode 100644 index 00000000..ba29d5d7 --- /dev/null +++ b/pages/04.applications/10.docs/dispatch/app_dispatch.fr.md @@ -0,0 +1,19 @@ +--- +title: Dispatch +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dispatch' +--- + +[![Installer Dispatch avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=dispatch) [![Integration level](https://dash.yunohost.org/integration/dispatch.svg)](https://dash.yunohost.org/appci/app/dispatch) + +*Dispatch* est un client graphique IRC basé sur une application web. + +## Liens utiles + ++ Site web : [github.com/khlieng/dispatch](https://github.com/khlieng/dispatch) ++ Démonstration : [Démo](https://dispatch.khlieng.com/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/dispatch](https://github.com/YunoHost-Apps/dispatch_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/dispatch/issues](https://github.com/YunoHost-Apps/dispatch_ynh/issues) diff --git a/pages/04.applications/10.docs/dispatch/app_dispatch.md b/pages/04.applications/10.docs/dispatch/app_dispatch.md new file mode 100644 index 00000000..4d7db397 --- /dev/null +++ b/pages/04.applications/10.docs/dispatch/app_dispatch.md @@ -0,0 +1,19 @@ +--- +title: Dispatch +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dispatch' +--- + +[![Installer Dispatch with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=dispatch) [![Integration level](https://dash.yunohost.org/integration/dispatch.svg)](https://dash.yunohost.org/appci/app/dispatch) + +*Dispatch* is a web-based IRC graphical client. + +## Useful links + ++ Website: [github.com/khlieng/dispatch](https://github.com/khlieng/dispatch) ++ Demonstration: [Demo](https://dispatch.khlieng.com/) ++ Application software repository: [github.com - YunoHost-Apps/dispatch](https://github.com/YunoHost-Apps/dispatch_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/dispatch/issues](https://github.com/YunoHost-Apps/dispatch_ynh/issues) diff --git a/pages/04.applications/10.docs/distbin/app_distbin.fr.md b/pages/04.applications/10.docs/distbin/app_distbin.fr.md new file mode 100644 index 00000000..df357438 --- /dev/null +++ b/pages/04.applications/10.docs/distbin/app_distbin.fr.md @@ -0,0 +1,22 @@ +--- +title: Distbin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_distbin' +--- + +![Distbin](image://yunohost_package.png?height=80) + +[![Install Distbin with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=distbin) [![Integration level](https://dash.yunohost.org/integration/distbin.svg)](https://dash.yunohost.org/appci/app/distbin) + +Un pastebin distribué, c'est-à-dire un service où n'importe qui peut poster des choses sur le Web, et d'autres peuvent réagir en postant n'importe où ailleurs sur le Web (y compris ici). + +Un endroit en réseau pour stocker les documents Web postés. Ceci est destiné à permettre la distribution de commentaires et de réactions sociales autour de ces documents en utilisant les meilleures pratiques recommandées ou notées par le groupe de travail du W3C sur le Web social. + +## Liens utiles + + + Documentation officielle : [github.com - gobengo/distbin (en)](https://github.com/gobengo/distbin) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/distbin](https://github.com/YunoHost-Apps/distbin_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/distbin/issues](https://github.com/YunoHost-Apps/distbin_ynh/issues) diff --git a/pages/04.applications/10.docs/distbin/app_distbin.md b/pages/04.applications/10.docs/distbin/app_distbin.md new file mode 100644 index 00000000..63165881 --- /dev/null +++ b/pages/04.applications/10.docs/distbin/app_distbin.md @@ -0,0 +1,22 @@ +--- +title: Distbin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_distbin' +--- + +![Distbin](image://yunohost_package.png?height=80) + +[![Install distbin with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=distbin) [![Integration level](https://dash.yunohost.org/integration/distbin.svg)](https://dash.yunohost.org/appci/app/distbin) + +A distributed pastebin. i.e. it is a service where anyone can post things on the web, and others can react by posting anywhere else on the web (including here). + +A networked place to store posted web documents. This is meant to allow for distributed social commentary and reaction around these documents using best practices recommended or noted by the W3C Social Web Working Group. + +## Useful links + ++ Official documentation: [github.com - gobengo/distbin](https://github.com/gobengo/distbin) ++ Application software repository: [github.com - YunoHost-Apps/distbin](https://github.com/YunoHost-Apps/distbin_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/distbin/issues](https://github.com/YunoHost-Apps/distbin_ynh/issues) diff --git a/pages/04.applications/10.docs/docs.md b/pages/04.applications/10.docs/docs.md new file mode 100644 index 00000000..c329a265 --- /dev/null +++ b/pages/04.applications/10.docs/docs.md @@ -0,0 +1,23 @@ +--- +title: Documentations +visible: false +content: + order: + by: basename + dir: asc + pagination: false + url_taxonomy_filters: true + items: + - '@self.children' + - '@taxonomy.category': [docs, apps] +twig_first: true +process: + twig: true + +--- + + diff --git a/pages/04.applications/10.docs/dokuwiki/app_dokuwiki.fr.md b/pages/04.applications/10.docs/dokuwiki/app_dokuwiki.fr.md new file mode 100644 index 00000000..f357119f --- /dev/null +++ b/pages/04.applications/10.docs/dokuwiki/app_dokuwiki.fr.md @@ -0,0 +1,31 @@ +--- +title: DokuWiki +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dokuwiki' +--- + +![logo de Dokuwiki](image://dokuwiki_logo.svg?resize=,80) + +[![Installer DokuWiki grâce à YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=dokuwiki) [![Niveau d'intégration](https://dash.yunohost.org/integration/dokuwiki.svg)](https://dash.yunohost.org/appci/app/dokuwiki) + +DokuWiki est un moteur de wiki libre sous licence GNU GPL conforme aux standards, simple à utiliser, dont le but principal est de créer des documentations de toute sorte. Ce logiciel est développé en PHP par Andreas Gohr. [...] Il a une syntaxe simple qui assure la lisibilité des fichiers de données en dehors du Wiki, et facilite la création de textes structurés. Toutes les données sont stockées dans des fichiers texte, et donc aucune base de données n’est nécessaire.[¹](#sources) + +## Limitations avec YunoHost + +Il est pour le moment impossible d'ajouter et d'utiliser les utilisateurs internes de DokuWiki, seulement ceux de YunoHost. + +## Liens utiles + ++ Site web : [dokuwiki.org](https://www.dokuwiki.org/start?id=fr:dokuwiki) ++ Documentation officielle : [dokuwiki.org - Manuel Dokuwiki](https://www.dokuwiki.org/start?id=fr:manual) ++ Dépôt logiciel de l'application : [github.com - YunoHost-App/dokuwiki](https://github.com/YunoHost-Apps/dokuwiki_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/dokuwiki/issues](https://github.com/YunoHost-Apps/dokuwiki_ynh/issues) + +------ + +### Sources + +¹ [wikipedia.org - Dokuwiki](https://fr.wikipedia.org/wiki/DokuWiki) diff --git a/pages/04.applications/10.docs/dokuwiki/app_dokuwiki.md b/pages/04.applications/10.docs/dokuwiki/app_dokuwiki.md new file mode 100644 index 00000000..4ac97c9d --- /dev/null +++ b/pages/04.applications/10.docs/dokuwiki/app_dokuwiki.md @@ -0,0 +1,31 @@ +--- +title: DokuWiki +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dokuwiki' +--- + +![Dokuwiki's logo](image://dokuwiki_logo.svg?resize=,80) + +[![Installer DokuWiki grâce à YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=dokuwiki) [![Niveau d'intégration](https://dash.yunohost.org/integration/dokuwiki.svg)](https://dash.yunohost.org/appci/app/dokuwiki) + +DokuWiki is a standards-compliant, easy-to-use, standards-compliant GNU GPL free wiki engine whose main purpose is to create documentation of all kinds. This software is developed in PHP by Andreas Gohr. ...] It has a simple syntax that ensures the readability of data files outside of the wiki, and facilitates the creation of structured texts. All data is stored in text files, so no database is needed. [¹](#sources) + +## Limitations with YunoHost + +It is currently impossible to add and use internal DokuWiki users, only YunoHost users. + +## Useful links + ++ Website: [dokuwiki.org](https://dokuwiki.org) ++ Official documentation: [dokuwiki.org - Manual](https://www.dokuwiki.org/manual) ++ Application software repository: [github.com - YunoHost-App/dokuwiki](https://github.com/YunoHost-Apps/dokuwiki_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com -YunoHost-Apps/dokuwiki/issues](https://github.com/YunoHost-Apps/dokuwiki_ynh/issues) + +------ + +### Sources + +¹ [wikipedia.org - Dokuwiki (fr)](https://fr.wikipedia.org/wiki/DokuWiki) diff --git a/pages/04.applications/10.docs/dolibarr/app_dolibarr.fr.md b/pages/04.applications/10.docs/dolibarr/app_dolibarr.fr.md new file mode 100644 index 00000000..2a484f5f --- /dev/null +++ b/pages/04.applications/10.docs/dolibarr/app_dolibarr.fr.md @@ -0,0 +1,31 @@ +--- +title: Dolibarr +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dolibarr' +--- + +![logo de Dolibarr](image://dolibarr_logo.png?width=80) + +[![Install Dolibarr with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=dolibarr) [![Integration level](https://dash.yunohost.org/integration/dolibarr.svg)](https://dash.yunohost.org/appci/app/dolibarr) + +Dolibarr ERP/CRM est un progiciel de gestion intégré (PGI, ERP en anglais) et gestion de la relation client (GRC, CRM en anglais) open source pour les petites et moyennes entreprises, les indépendants, auto-entrepreneurs ou les associations.[¹](#sources) + +## Limitations avec YunoHost + +Dolibarr doit être une application non publique pour pouvoir relier les comptes des YunoHost. La suppression d'un compte n'est pas prise en compte dans Dolibarr. + +## Liens utiles + + + Site web : [www.dolibarr.fr](https://www.dolibarr.fr/) + + Documentation officielle : [www.dolibarr.fr - documentation](https://www.dolibarr.fr/documentation) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/dolibarr/issues](https://github.com/YunoHost-Apps/dolibarr_ynh/issues) + + ------ + +### Sources + + ¹ [wikipedia.org - Dolibarr](https://fr.wikipedia.org/wiki/Dolibarr) diff --git a/pages/04.applications/10.docs/dolibarr/app_dolibarr.md b/pages/04.applications/10.docs/dolibarr/app_dolibarr.md new file mode 100644 index 00000000..c2dc88f7 --- /dev/null +++ b/pages/04.applications/10.docs/dolibarr/app_dolibarr.md @@ -0,0 +1,31 @@ +--- +title: Dolibarr +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dolibarr' +--- + +![Dolibarr's logo](image://dolibarr_logo.png?width=80) + +[![Install Dolibarr with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=dolibarr) [![Integration level](https://dash.yunohost.org/integration/dolibarr.svg)](https://dash.yunohost.org/appci/app/dolibarr) + +Dolibarr ERP CRM is an open source, free software package for small and medium companies, foundations or freelancers. It includes different features for enterprise resource planning (ERP) and customer relationship management (CRM) but also other features for different activities.[¹](#sources) + +## Limitations with YunoHost + +Dolibarr must be a non-public application to be able to link YunoHost accounts. The deletion of an account is not taken into account in Dolibarr. + +## Useful links + ++ Website: [www.dolibarr.org](https://www.dolibarr.org/) ++ Official documentation: [www.dolibarr.org - documentation-home](https://www.dolibarr.org/documentation-home) ++ Application software repository: [github.com - YunoHost-Apps/dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/dolibarr/issues](https://github.com/YunoHost-Apps/dolibarr_ynh/issues) + +----- + +### Sources + +¹ [wikipedia.org - Dolibarr](https://en.wikipedia.org/wiki/Dolibarr) diff --git a/pages/04.applications/10.docs/domoticz/app_domoticz.fr.md b/pages/04.applications/10.docs/domoticz/app_domoticz.fr.md new file mode 100644 index 00000000..c306ae68 --- /dev/null +++ b/pages/04.applications/10.docs/domoticz/app_domoticz.fr.md @@ -0,0 +1,125 @@ +--- +title: Domoticz +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_domoticz' +--- + +[![Installer Domoticz avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=domoticz) [![Integration level](https://dash.yunohost.org/integration/domoticz.svg)](https://dash.yunohost.org/appci/app/domoticz) + +*Domoticz* est un système domotique open source très léger qui vous permet de surveiller et de configurer divers appareils. + +### Avertissements/informations importantes + +Domoticz est un système de domotique permettant de controler différents objets et de recevoir des données de divers senseurs Il peut par exemple être utilisé avec : + + des interrupteurs + des senseurs de portes + des sonnettes d'entrées + des systèmes de sécurité + des stations météo pour les UV, la pluie, le vent... + des sondes de températures + des sondes d'impulsions + des voltmètres et bien d'autres + +Version incluse : Toujours la dernière version stable. La dernière version compilée est récupérée dans ce répertoire lors de l'installation. Une fois installée, les mises à jour de l'application sont gérées depuis les menus de l'application elle même. Le script de mise à jour YunoHost mettra uniquement à jour de nouvelles version du package. + +Le broker MQTT Mosquitto est intégré au package et nécessite un sous-domaine ou un domaine distinct. Il est optionnel et si vous indiquez lors de l'installation le même domaine que le domaine principal, il ne sera pas installé. + +### Configuration + +#### Broker MQTT Mosquitto + +À l'installation, un broker MQTT, Mosquitto, est installé en même temps que Domoticz. La version installée est celle du dépot officiel du projet, et non des dépots Debian. Ce broker nécessite un domaine ou un sous-domaine particulier pour fonctionner (ex : mqtt.your.domain.tld). Il est nécessaire de créer ce domaine auparavant. + +##### Ajout dans Domoticz + +Pour pouvoir l'utiliser, vous devez paramétrer la communication avec entre Domoticz et le broker en suivant la documentation de Domoticz dans la partie Add hardware "MQTT Client Gateway". Les utilisateurs et mot de passe du broker sont automatiquement générés lors de l'installation. Vous pouvez les récupérer avec +``` +sudo yunohost app setting domoticz mqtt_user +sudo yunohost app setting domoticz mqtt_pwd +``` + +##### Publier/souscrire + +Par défaut, Mosquitto va écouter sur deux ports : + + Le 1883 sur localhost en protocole MQTT + Le 8883 en protocole WebSocket. NGINX redirige le port 443 externe vers ce port en interne. Pour publier/souscrire sur un topic depuis l'exterieur, vous devez donc utiliser un programme supportant le protocole WebSocket (ex : la bibliothèque Python paho-mqtt). + +##### Mosquitto_pub et mosquitto_sub + +Ces deux programmes ne supportent pas le protocole WebSocket mais uniquement le MQTT : le paramétrage de base ne vous autorise donc pas à les utiliser pour communiquer depuis un client externe. Si vous les utilisez directement depuis votre serveur, ce genre de syntaxe devrait marcher : + +`mosquitto_pub -u *user* -P *password* -h mqtt.your.domain.tld -p 1883 -t 'domoticz/in' -m '{ "idx" : 1, "nvalue" : 0, "svalue" : "25.0" }'` + +De la même manière : + +`mosquitto_sub -u *user* -P *password* -h mqtt.your.domain.tld -p 1883 -t 'domoticz/out'` + +Si vous souhaitez ouvrir le protocole MQTT depuis l'extérieur afin de pouvoir les utiliser depuis un autre serveur, il vous faudra : + + ouvrir le port 1883 sur le firewall YunoHost (attention, risque de sécurité) + autoriser les adresses IP souhaitées dans la configuration de Mosquitto + paramétrer le TLS dans la configuration de Mosquitto en donnant accès au crt.pem et key.pem de votre domaine MQTT en les paramétrant respectivement avec les variables certfile et keyfile. Ceci est obligatoire pour sécuriser la connexion. + +##### Mise à jour depuis les versions n'ayant pas Mosquitto + +Si vous êtes sur le package ynh3 ou inférieur, Mosquitto n'est pas installé par défaut. De même si vous avez choisi de ne pas indiquer de domaine pour Mosquitto lors de l'installation initiale. Pour pouvoir l'installer après coup, effectuez les actions suivantes : + + créez un domaine ou sous-domaine pour recevoir les informations (par exemple : 'mqtt.your.domain.tld') + connecter vous en ligne de commande à votre serveur + tapez la commande suivante : `yunohost app setting domoticz mqtt_domain -v mqtt.your.domain.tld` + Procédez à la mise à jour. Si vous êtes déjà sur la dernière version, utiliser la commmande suivante : `yunohost app upgrade domoticz --force` + +### Configuration + +#### Capteurs, langue... + +Toute la configuration de l'application a lieu dans l'application elle-même. + +#### Access et API + +Par défaut, l'accès aux API JSON est autorisé sur cette URL `/votredomaine.tld/api_/chemindedomoticz`. Donc, si vous accédez à domoticz par `https://votredomaine.tld/domoticz`, utilisez le chemin suivant pour l'api : `/votredomaine.tld/api_/domoticz/json.htm?votrecommandeapi` + +Par défaut, seuls la mise à jour de capteur et les interrupteurs sont autorisés. Pour autoriser une nouvelle commande, vous devez (pour l'instant) manuellement éditer le fichier de configuration NGINX : + +`sudo nano /etc/nginx/conf.d/yourdomain.tld.d/domoticz.conf` + +Puis éditer le bloc suivant en y ajoutant le regex de la commmande à autoriser : +``` + #set the list of authorized json command here in regex format + #you may retrieve the command from https://www.domoticz.com/wiki/Domoticz_API/JSON_URL's + #By default, sensors updates and toggle switch are authorized + if ( $args ~* type=command¶m=udevice&idx=[0-9]*&nvalue=[0-9]*&svalue=.*$|type=command¶m=switchlight&idx=[0-9]*&switchcmd=Toggle$) { + set $api "1"; + } +``` + +Par exemple, pour ajouter la commmande json pour retrouver le statut d'un équipement (`/json.htm?type=devices&rid=IDX`),il faut modifier la ligne comme ceci : +``` + #set the list of authorized json command here in regex format + #you may retrieve the command from https://www.domoticz.com/wiki/Domoticz_API/JSON_URL's + #By default, sensors updates and toggle switch are authorized + if ( $args ~* type=command¶m=udevice&idx=[0-9]*&nvalue=[0-9]*&svalue=.*$|type=command¶m=switchlight&idx=[0-9]*&switchcmd=Toggle$|type=devices&rid=[0-9]* ) { + set $api "1"; + } +``` +Toutes les adresses IPv4 du réseau local (192.168.0.0/24) et toutes les adresses IPv6 sont autorisées pour l'API. À ma connaissance, il n'y a pas moyen d'effectuer un filtre pour les adresses IPv6 sur le réseau local, vous pouvez donc retirer leur autorisation en enlevant ou en commentant la ligne suivante dans `/etc/nginx/conf.d/yourdomain.tld.d/domoticz.conf` : + +`allow ::/1;` + +Ceci autorisera seulement les adresses IPv4 local a accéder aux API de Domoticz. Vous pouvez ajouter des adresses IPv6 de la même façon. + +### Limitations + + Pas de gestion d'utilisateurs ni d'intégration LDAP. L'application ne prévoit pas de gérer les utilisateurs par LDAP, donc le package non plus. + Un backup ne peut pas être restauré sur un type de machine différente de celle d'origine (x86, arm...) car les sources compilées doivent être différentes + +## Liens utiles + ++ Site web : [domoticz.com](https://domoticz.com/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/domoticz](https://github.com/YunoHost-Apps/domoticz_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/domoticz/issues](https://github.com/YunoHost-Apps/domoticz_ynh/issues) diff --git a/pages/04.applications/10.docs/domoticz/app_domoticz.md b/pages/04.applications/10.docs/domoticz/app_domoticz.md new file mode 100644 index 00000000..a6ba73ce --- /dev/null +++ b/pages/04.applications/10.docs/domoticz/app_domoticz.md @@ -0,0 +1,132 @@ +--- +title: Domoticz +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_domoticz' +--- + +[![Installer Domoticz with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=domoticz) [![Integration level](https://dash.yunohost.org/integration/domoticz.svg)](https://dash.yunohost.org/appci/app/domoticz) + +*Domoticz* is a very light weight open sources home automation system that lets you monitor and configure miscellaneous devices. + +### Disclaimers/important information + +Domoticz is a Home Automation system design to control various devices and receive input from various sensors. For example this system can be used with: + + Light switches + Door sensors + Doorbells + Security devices + Weather sensors like: UV/Rain/Wind Meters + Temperature Sensors + Pulse Meters + Voltage/AD Meters and more + +Shipped version: Always the last stable one. The last compiled version is retrieved from this directory during install. Once installed, updates from the uptream app are managed from within the app. YunoHost upgrade script will only upgrade the YunoHost package. + +The MQTT broker Mosquitto is integrated into the package. It requires its own domain or subdomain. It's an optional setting: during install if you set the same domaine as your main app domain, it won't be installed. + +### Configuration + +#### Broker Mosquitto + +During installation, a MQTT broker, Mosquitto, is installed at the same time as Domoticz. The installed version is the one from the official project repo and not from Debian ones. This broker requires a dedicated domain or subdomain to work (ex : mqtt.your.domain.tld): creating this domain prior installation is a prerequisite. + +##### Adding in Domoticz + +To use Mosquitto, you need to customize the communication between Domoticz and the broker by following the Domoticz documentation, part Add hardware "MQTT Client Gateway". User and password are automatically generated during installation, you may retrieve them with +``` +sudo yunohost app setting domoticz mqtt_user +sudo yunohost app setting domoticz mqtt_pwd +``` + +##### Publish/Subscribe + +By default, Mosquitto will listen on two ports: + + 1883 on localhost using mqtt protocol + 8883 using websocket protocol. NGINX redirect external port 443 to this internal port. + +Hence, To publish/subscribe on a topic from the outside, you have to use a software supporting WebSocket protocol (ex: paho-mqtt Python library). + +##### Mosquitto_pub et mosquitto_sub + +These two tools do not support WebSocket protocol, only direct MQTT: base settings will not allow communication from an outside device. If you're using them directly from your server, this kind of syntax should work: +``` +mosquitto_pub -u *user* -P *password* -h mqtt.your.domain.tld -p 1883 -t 'domoticz/in' -m '{ "idx" : 1, "nvalue" : 0, "svalue" : "25.0" }' +``` +In the same way: + +``` +mosquitto_sub -u *user* -P *password* -h mqtt.your.domain.tld -p 1883 -t 'domoticz/out' +``` + +If you wish to open direct MQTT protocol from an outside device, you'll need to: + + open port 1883 on Yunohost firewall (Attention, security risk) + Allows IP addresses in mosquitto configuration for this listener + Set the TLS setting in mosquitto configuration by giving access to crt.pem and key.pem from your MQTT domain by setting respective certfile et keyfile variables. This is mandatory to ensure a secure connection. + +##### Upgrade from version without Mosquitto + +If you have package ynh3 or below, Mosquitto is not installed by default. If you have chosen to not set a domain during initial installation also. So, if you need to activate mosquitto in retrospect, do following actions: + + Create a domain or a subdomain (for example : 'mqtt.your.domain.tld') + Connect to your server in command line + Type following command: `yunohost app setting domoticz mqtt_domain -v mqtt.your.domain.tld` + Upgrade domoticz to last package. If you're already on the last package version, use the following command: `yunohost app upgrade domoticz --force` + +### Configuration + +Sensors, language... + +Main configuration of the app take place inside the app itself. + +#### Access and API + +By default, access for the JSON API is allowed on following path `/yourdomain.tld/api_/domoticzpath`. So if you access domoticz via `https://mydomainname.tld/domoticz`, use the following webpath for the api: `/mydomainname.tld/api_/domoticz/json.htm?yourapicommand` + +By default, only sensor updates and switch toogle are authorized. To authorized a new command, you have (for now) to manually update the NGINX config file: + +sudo nano `/etc/nginx/conf.d/yourdomain.tld.d/domoticz.conf` + +Then edit the following block by adding the regex of the command you want to allow: + + #set the list of authorized json command here in regex format + #you may retrieve the command from https://www.domoticz.com/wiki/Domoticz_API/JSON_URL's + #By default, sensors updates and toggle switch are authorized + ``` + if ( $args ~* type=command¶m=udevice&idx=[0-9]*&nvalue=[0-9]*&svalue=.*$|type=command¶m=switchlight&idx=[0-9]*&switchcmd=Toggle$) { + set $api "1"; + } + ``` +For example, to add the JSON command to retrieve the status of a device (`/json.htm?type=devices&rid=IDX`),modify the line as this: + + #set the list of authorized json command here in regex format + #you may retrieve the command from https://www.domoticz.com/wiki/Domoticz_API/JSON_URL's + #By default, sensors updates and toggle switch are authorized + ``` + if ( $args ~* type=command¶m=udevice&idx=[0-9]*&nvalue=[0-9]*&svalue=.*$|type=command¶m=switchlight&idx=[0-9]*&switchcmd=Toggle$|type=devices&rid=[0-9]* ) { + set $api "1"; + } + ``` + +All IPv4 addresses within the local network (192.168.0.0/24) and all IPv6 addresses are authorized as API. As far as I know, there is no way to filter for IPv6 address on local network: You may remove the authorization by removing or commenting this line in `/etc/nginx/conf.d/yourdomain.tld.d/domoticz.conf`: + +`allow ::/1;` + +This will authorized only IPv4 within local network to access your Domoticz API. You may add individual IPv6 address in the same way. + +### Limitations + + No user management nor LDAP integration This function is not planned to be implemented into the app, hence it's not planned into the package neither. + Backup cannot be restored on a different machine type (arm, x86...) as compiled sources are different + + +## Useful links + ++ Website: [domoticz.eu (en)](https://domoticz.eu/site/) ++ Application software repository: [github.com - YunoHost-Apps/domoticz](https://github.com/YunoHost-Apps/domoticz_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/domoticz/issues](https://github.com/YunoHost-Apps/domoticz_ynh/issues) diff --git a/pages/04.applications/10.docs/dotclear2/app_dotclear2.fr.md b/pages/04.applications/10.docs/dotclear2/app_dotclear2.fr.md new file mode 100644 index 00000000..ff9c6286 --- /dev/null +++ b/pages/04.applications/10.docs/dotclear2/app_dotclear2.fr.md @@ -0,0 +1,29 @@ +--- +title: Dotclear 2 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dotclear2' +--- + +![Logo de Dotclear](image://dotclear_logo.png?width=80) + +[![Install dotclear2 with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=dotclear2) [![Integration level](https://dash.yunohost.org/integration/dotclear2.svg)](https://dash.yunohost.org/appci/app/dotclear2) + +Dotclear est une application de publication de blogs à code source libre distribuée sous la licence GNU GPLv2. Développé à l'origine par Olivier Meunier à partir de 2002, Dotclear a maintenant attiré une solide équipe de développeurs. Il est relativement populaire dans les pays francophones, où il est utilisé par plusieurs grandes plateformes de blogs (Gandi Blogs, Marine nationale, etc.). + +L'objectif proposé par Dotclear est de développer un logiciel qui respecte pleinement les standards du web basés sur des solutions open source, avec une interface et des capacités de publication multilingues. Il est écrit en PHP.[¹](#sources) + +## Liens utiles + + + Site web : [dotclear.org](https://fr.dotclear.org/) + + Documentation officielle : [dotclear.org - documentation](https://fr.dotclear.org/documentation/) + + Dépôt logiciel de l'application : [github.com - YunoHost- Apps/dotclear2](https://github.com/YunoHost-Apps/dotclear2_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/dotclear2/issues](https://github.com/YunoHost-Apps/dotclear2_ynh/issues) + + ------ + +### Sources + +¹ [wikipedia.org - Dotclear (en)](https://en.wikipedia.org/wiki/Dotclear) diff --git a/pages/04.applications/10.docs/dotclear2/app_dotclear2.md b/pages/04.applications/10.docs/dotclear2/app_dotclear2.md new file mode 100644 index 00000000..6d0a5f33 --- /dev/null +++ b/pages/04.applications/10.docs/dotclear2/app_dotclear2.md @@ -0,0 +1,29 @@ +--- +title: Dotclear 2 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dotclear2' +--- + +![Dotclear's logo](image://dotclear_logo.png?width=80) + +[![Install dotclear2 with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=dotclear2) [![Integration level](https://dash.yunohost.org/integration/dotclear2.svg)](https://dash.yunohost.org/appci/app/dotclear2) + +Dotclear is an open-source blog publishing application distributed under the GNU GPLv2. Developed originally by Olivier Meunier from 2002, Dotclear has now attracted a solid team of developers. It is relatively popular in French speaking countries, where it is used by several major blogging platforms (Gandi Blogs, Marine nationale, etc.). + +Dotclear's proposed aim is to develop a software that fully respects web standards based on open source solutions, with multilingual interface and publishing capabilities. It is written in PHP. [¹](#sources) + +## Useful links + ++ Website: [dotclear.org](https://dotclear.org/) ++ Official documentation: [dotclear.org - documentation/2.0](https://dotclear.org/documentation/2.0) ++ Application software repository: [github.com - YunoHost-Apps/dotclear2](https://github.com/YunoHost-Apps/dotclear2_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/dotclear2/issues](https://github.com/YunoHost-Apps/dotclear2_ynh/issues) + +----- + +### Sources + +¹ [wikipedia.org - Dotclear](https://en.wikipedia.org/wiki/Dotclear) diff --git a/pages/04.applications/10.docs/droppy/app_droppy.fr.md b/pages/04.applications/10.docs/droppy/app_droppy.fr.md new file mode 100644 index 00000000..df34b448 --- /dev/null +++ b/pages/04.applications/10.docs/droppy/app_droppy.fr.md @@ -0,0 +1,27 @@ +--- +title: Droppy +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_droppy' +--- + +[![Installer Droppy avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=droppy) [![Integration level](https://dash.yunohost.org/integration/droppy.svg)](https://dash.yunohost.org/appci/app/droppy) + +*Droppy* est un serveur de stockage de fichiers auto-hébergé avec une interface web et des capacités pour éditer des fichiers et visualiser des médias directement dans le navigateur. + +### Avertissements / informations importantes + +Le développement de Droppy a été abandonné par son auteur, et son dépôt de code a été archivé. N'attendez pas de future mise à jour, ni correctifs de sécurité. + +### Configuration + +Comment configurer cette application : un fichier de configuration /var/www/droppy/config/config.json en SSH. +Les fichiers partagés sont stockés dans le répertoire suivant : /home/yunohost.app/droppy/files/ + +## Liens utiles + ++ Site web : [github.com/silverwind/droppy](https://github.com/silverwind/droppy) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/droppy](https://github.com/YunoHost-Apps/droppy_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/droppy/issues](https://github.com/YunoHost-Apps/droppy_ynh/issues) diff --git a/pages/04.applications/10.docs/droppy/app_droppy.md b/pages/04.applications/10.docs/droppy/app_droppy.md new file mode 100644 index 00000000..32e3ca59 --- /dev/null +++ b/pages/04.applications/10.docs/droppy/app_droppy.md @@ -0,0 +1,27 @@ +--- +title: Droppy +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_droppy' +--- + +[![Installer Droppy with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=droppy) [![Integration level](https://dash.yunohost.org/integration/droppy.svg)](https://dash.yunohost.org/appci/app/droppy) + +*Droppy* is a self-hosted file storage server with a web interface and capabilities to edit files and view media directly in the browser. + +### Disclaimers / important information + +Development of Droppy has been abandoned by its author, and its repository has been archived. Expect no future updates nor security fixes. + +### Configuration + +How to configure this app: a JSON configuration file with SSH. `/var/www/droppy/config/config.json.` +Shared files are stored in the following directory: `/home/yunohost.app/droppy/files` + +## Useful links + ++ Website: [github.com/silverwind/droppy](https://github.com/silverwind/droppy) ++ Application software repository: [github.com - YunoHost-Apps/droppy](https://github.com/YunoHost-Apps/droppy_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/droppy/issues](https://github.com/YunoHost-Apps/droppy_ynh/issues) diff --git a/pages/04.applications/10.docs/drupal/app_drupal.fr.md b/pages/04.applications/10.docs/drupal/app_drupal.fr.md new file mode 100644 index 00000000..9205e3b6 --- /dev/null +++ b/pages/04.applications/10.docs/drupal/app_drupal.fr.md @@ -0,0 +1,27 @@ +--- +title: Drupal +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_drupal' +--- + +![Logo de Drupal](image://drupal_logo.svg?resize=,80) + +[![Install Drupal with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=drupal) [![Integration level](https://dash.yunohost.org/integration/drupal.svg)](https://dash.yunohost.org/appci/app/drupal) + +Drupal est un système de gestion de contenu (CMS) libre et open-source publié sous la licence publique générale GNU et écrit en PHP.[¹](#sources) + +## Liens utiles + + + Site web : [www.drupal.fr](https://www.drupal.fr/) + + Documentation officielle : [www.drupal.fr - documentation](https://www.drupal.fr/documentation) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/drupal](https://github.com/YunoHost-Apps/drupal_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/drupal/issues](https://github.com/YunoHost-Apps/drupal_ynh/issues) + + ------ + + ### Sources + + ¹ [wikipedia.org - Drupal](https://fr.wikipedia.org/wiki/Drupal) diff --git a/pages/04.applications/10.docs/drupal/app_drupal.md b/pages/04.applications/10.docs/drupal/app_drupal.md new file mode 100644 index 00000000..0e3bb331 --- /dev/null +++ b/pages/04.applications/10.docs/drupal/app_drupal.md @@ -0,0 +1,27 @@ +--- +title: Drupal +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_drupal' +--- + +![Drupal's logo](image://drupal_logo.svg?resize=,80) + +[![Install Drupal with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=drupal) [![Integration level](https://dash.yunohost.org/integration/drupal.svg)](https://dash.yunohost.org/appci/app/drupal) + +Drupal is a free and open-source web content management framework written in PHP and distributed under the GNU General Public License. Drupal provides a back-end framework for at least 2.3% of all websites worldwide – ranging from personal blogs to corporate, political, and government sites. Systems also use Drupal for knowledge management and for business collaboration.[¹](#sources) + +## Useful links + ++ Website: [www.drupal.org](https://www.drupal.org/) ++ Official documentation: [www.drupal.org - documentation](https://www.drupal.org/documentation) ++ Application software repository: [github.com - YunoHost-Apps/drupal](https://github.com/YunoHost-Apps/drupal_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/drupal/issues](https://github.com/YunoHost-Apps/drupal_ynh/issues) + +----- + +### Sources + +¹ [wikipedia.org - Drupal](https://en.wikipedia.org/wiki/Drupal) diff --git a/pages/04.applications/10.docs/drupal7/app_drupal7.fr.md b/pages/04.applications/10.docs/drupal7/app_drupal7.fr.md new file mode 100644 index 00000000..1b830541 --- /dev/null +++ b/pages/04.applications/10.docs/drupal7/app_drupal7.fr.md @@ -0,0 +1,28 @@ +--- +title: Drupal 7 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_drupal7' +--- + +![Logo de Drupal](image://drupal_logo.svg?resize=,80) + +[![Install Drupal with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=drupal) [![Integration level](https://dash.yunohost.org/integration/drupal.svg)](https://dash.yunohost.org/appci/app/drupal) + +Drupal1 est un système de gestion de contenu (CMS) libre et open-source publié sous la licence publique générale GNU et écrit en PHP.[¹](#sources) + Cette application YunoHost propose uniquement la version 7 de Drupal, si vous désirez la dernière version disponible pour YunoHost [voir ici](/app_drupal) + +## Liens utiles + + + Site web : [www.drupal.fr](https://www.drupal.fr/) + + Documentation officielle : [www.drupal.org - docs/7 (en)](https://www.drupal.org/docs/7) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/drupal7](https://github.com/YunoHost-Apps/drupal7_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/drupal7/issues](https://github.com/YunoHost-Apps/drupal7_ynh/issues) + + ------ + +### Sources + + ¹ [wikipedia.org - Drupal](https://fr.wikipedia.org/wiki/Drupal) diff --git a/pages/04.applications/10.docs/drupal7/app_drupal7.md b/pages/04.applications/10.docs/drupal7/app_drupal7.md new file mode 100644 index 00000000..815a823b --- /dev/null +++ b/pages/04.applications/10.docs/drupal7/app_drupal7.md @@ -0,0 +1,28 @@ +--- +title: Drupal 7 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_drupal7' +--- + +![Drupal's logo](image://drupal_logo.svg?resize=,80) + +[![Install Drupal with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=drupal) [![Integration level](https://dash.yunohost.org/integration/drupal.svg)](https://dash.yunohost.org/appci/app/drupal) + +Drupal is a free and open-source web content management framework written in PHP and distributed under the GNU General Public License. Drupal provides a back-end framework for at least 2.3% of all websites worldwide – ranging from personal blogs to corporate, political, and government sites. Systems also use Drupal for knowledge management and for business collaboration.[¹](#sources) + This YunoHost application offers only version 7 of Drupal, if you want the latest version available for YunoHost [see here](/app_drupal) + +## Useful links + ++ Website: [www.drupal.org](https://www.drupal.org/) ++ Official documentation: [www.drupal.fr - docs/7](https://www.drupal.org/docs/7) ++ Application software repository: [github.com - YunoHost-Apps/drupal](https://github.com/YunoHost-Apps/drupal_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/drupal/issues](https://github.com/YunoHost-Apps/drupal_ynh/issues) + +----- + +### Sources + +¹ [wikipedia.org - Drupal](https://en.wikipedia.org/wiki/Drupal) diff --git a/pages/04.applications/10.docs/easyappointments/app_easyappointments.fr.md b/pages/04.applications/10.docs/easyappointments/app_easyappointments.fr.md new file mode 100644 index 00000000..1549da2c --- /dev/null +++ b/pages/04.applications/10.docs/easyappointments/app_easyappointments.fr.md @@ -0,0 +1,19 @@ +--- +title: Easy!Appointments +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_easyappointments' +--- + +[![Installer Easy!Appointments avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=easyappointments) [![Integration level](https://dash.yunohost.org/integration/easyappointments.svg)](https://dash.yunohost.org/appci/app/easyappointments) + +*Easy!Appointments* est une application web hautement personnalisable qui permet aux clients de prendre rendez-vous avec vous via une interface web sophistiquée. De plus, elle offre la possibilité de synchroniser vos données avec Google Calendar afin que vous puissiez les utiliser avec d'autres services. Il s'agit d'un projet open source que vous pouvez télécharger et installer même pour un usage commercial. Easy!Appointments fonctionnera sans problème avec votre site web existant car il peut être installé dans un seul dossier du serveur et bien sûr partager une base de données existante. + +## Liens utiles + ++ Site web : [easyappointments.org](https://easyappointments.org/) ++ Démonstration : [Démo](https://demo.easyappointments.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/easyappointments](https://github.com/YunoHost-Apps/easyappointments_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/easyappointments/issues](https://github.com/YunoHost-Apps/easyappointments_ynh/issues) diff --git a/pages/04.applications/10.docs/easyappointments/app_easyappointments.md b/pages/04.applications/10.docs/easyappointments/app_easyappointments.md new file mode 100644 index 00000000..446f248b --- /dev/null +++ b/pages/04.applications/10.docs/easyappointments/app_easyappointments.md @@ -0,0 +1,19 @@ +--- +title: Easy!Appointments +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_easyappointments' +--- + +[![Installer Easy!Appointments with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=easyappointments) [![Integration level](https://dash.yunohost.org/integration/easyappointments.svg)](https://dash.yunohost.org/appci/app/easyappointments) + +*Easy!Appointments* is a highly customizable web application that allows customers to book appointments with you via a sophisticated web interface. Moreover, it provides the ability to sync your data with Google Calendar so you can use them with other services. It is an open source project that you can download and install even for commercial use. Easy!Appointments will run smoothly with your existing website as it can be installed in a single folder of the server and of course share an existing database. + +## Useful links + ++ Website: [easyappointments.org](https://easyappointments.org/) ++ Demonstration: [Demo](https://demo.easyappointments.org/) ++ Application software repository: [github.com - YunoHost-Apps/easyappointments](https://github.com/YunoHost-Apps/easyappointments_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/easyappointments/issues](https://github.com/YunoHost-Apps/easyappointments_ynh/issues) diff --git a/pages/04.applications/10.docs/ecko/app_ecko.md b/pages/04.applications/10.docs/ecko/app_ecko.md new file mode 100644 index 00000000..6af75b52 --- /dev/null +++ b/pages/04.applications/10.docs/ecko/app_ecko.md @@ -0,0 +1,38 @@ +--- +title: Ecko +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ecko' +--- + +![Ecko's logo](image://ecko_logo.jpg) + +[![Install APPLICATION with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=ecko) [![Integration level](https://dash.yunohost.org/integration/ecko.svg)](https://dash.yunohost.org/appci/app/ecko) + +Ecko is community-driven fork of Mastodon's federated social networking software that is managed by Magic Stone using the Collaborative Code Construction Contract (C4). See the website for more information about Magic Stone and C4. + +## Limitations with YunoHost + +Some configuration parameters such as post-length and poll options can only be updated via command line and therefore require root command line access to the YunoHost instance to modify. + +## Useful links + ++ Having a problem? Create an issue at [github.com -YunoHost-Apps/ecko_ynh/issues](https://github.com/YunoHost-Apps/ecko_ynh/issues) ++ YunoHost application package repository: [github.com - YunoHost-Apps/Ecko\_ynh](https://github.com/YunoHost-Apps/ecko_ynh) ++ Website: [magicstone.dev](https://magicstone.dev/) + +## Compatible Apps +[Tusky](https://tusky.app/) + +[Twidere](https://twidere.com/) + +[Fedilab](https://fedilab.app/) + +[Mastodon for iOS](https://apps.apple.com/us/app/mastodon-for-iphone/id1571998974) + +[Mast for Mastodon](https://apps.apple.com/us/app/mast-for-mastodon/id1437429129) + +[Mercury for Mastodon](https://apps.apple.com/us/app/mercury-for-mastodon/id1486749200) + diff --git a/pages/04.applications/10.docs/element/app_element.fr.md b/pages/04.applications/10.docs/element/app_element.fr.md new file mode 100644 index 00000000..e2c6740e --- /dev/null +++ b/pages/04.applications/10.docs/element/app_element.fr.md @@ -0,0 +1,31 @@ +--- +title: Element +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_element' +--- + +[![Installer Element avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=element) [![Integration level](https://dash.yunohost.org/integration/element.svg)](https://dash.yunohost.org/appci/app/element) + +*Element* est un nouveau type d'application de messagerie. Vous choisissez où vos messages sont stockés, ce qui vous donne le contrôle de vos données. Il vous donne accès au réseau ouvert Matrix, vous pouvez donc parler à n'importe qui. Element offre un nouveau niveau de sécurité, en ajoutant la vérification des appareils par signature croisée au chiffrement de bout en bout par défaut. + +### Fonctionnalités spécifiques à YunoHost + +Prise en charge multi-utilisateurs + +Cette application prend en charge le SSO. Si vous souhaitez utiliser le SSO, vous devez définir le chemin d'accès au serveur domestique par défaut car votre serveur domestique est installé sur votre instance YunoHost. + +### Informations supplémentaires + +Note de sécurité importante + +Nous vous déconseillons d'exécuter Element à partir du même nom de domaine que votre Matrix serveur domestique (Synapse). La raison en est le risque de XSS (cross-site-scripting) vulnérabilités qui pourraient survenir si quelqu'un provoquait le chargement et le rendu d'Element un utilisateur malveillant a généré du contenu à partir d'une API Matrix qui avait alors fait confiance accès à Element (ou à d'autres applications) en raison du partage du même domaine. + +## Liens utiles + ++ Site web : [element.io (fr)](https://element.io/) ++ Démonstration : [Démo](https://app.element.io/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/element](https://github.com/YunoHost-Apps/element_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/element/issues](https://github.com/YunoHost-Apps/element_ynh/issues) diff --git a/pages/04.applications/10.docs/element/app_element.md b/pages/04.applications/10.docs/element/app_element.md new file mode 100644 index 00000000..a572e1fd --- /dev/null +++ b/pages/04.applications/10.docs/element/app_element.md @@ -0,0 +1,31 @@ +--- +title: Element +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_element' +--- + +[![Installer Element with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=element) [![Integration level](https://dash.yunohost.org/integration/element.svg)](https://dash.yunohost.org/appci/app/element) + +*Element* is a new type of messaging app. You choose where your messages are stored, putting you in control of your data. It gives you access to the Matrix open network, so you can talk to anyone. Element provides a new level of security, adding cross-signed device verification to default end-to-end encryption. + +### YunoHost specific features + +Multi-users support + +This application support the SSO. If you want to use the SSO, you need to define the path to the default homeserver as your homeserver witch is installed on your YunoHost instance. + +### Additional informations + +Important Security Note + +We do not recommend running Element from the same domain name as your Matrix homeserver (Synapse). The reason is the risk of XSS (cross-site-scripting) vulnerabilities that could occur if someone caused Element to load and render malicious user generated content from a Matrix API which then had trusted access to Element (or other apps) due to sharing the same domain. + +## Useful links + ++ Website: [element.io (en)](https://element.io/) ++ Demonstration: [Demo](https://app.element.io/) ++ Application software repository: [github.com - YunoHost-Apps/element](https://github.com/YunoHost-Apps/element_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/element/issues](https://github.com/YunoHost-Apps/element_ynh/issues) diff --git a/pages/04.applications/10.docs/emailpoubelle/app_emailpoubelle.fr.md b/pages/04.applications/10.docs/emailpoubelle/app_emailpoubelle.fr.md new file mode 100644 index 00000000..654530f9 --- /dev/null +++ b/pages/04.applications/10.docs/emailpoubelle/app_emailpoubelle.fr.md @@ -0,0 +1,26 @@ +--- +title: EmailPoubelle +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_emailpoubelle' +--- + +[![Installer EmailPoubelle avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=emailpoubelle) [![Integration level](https://dash.yunohost.org/integration/emailpoubelle.svg)](https://dash.yunohost.org/appci/app/emailpoubelle) + +*EmailPoubelle* est un script pour créer des adresses email temporaires qui pointent vers votre adresse email réelle. +Une version YunoHost de EmailPoubelle par David Mercereau : un grand merci lui. + +### Avertissements / informations importantes + +AVERTISSEMENT + +L'utilisation de cette fonction va entraîner la désactivation des alias LDAP de YunoHost ! Une fois installé, vous ne pourrez plus utiliser les paramètres des alias que vous pouvez voir lorsque vous modifiez vos paramètres personnels dans le panneau SSOWAT. Bien sûr, une fois désinstallé, tout revient à la normale. + +## Liens utiles + ++ Site web : [framagit.org/kepon/emailPoubellePhp](https://framagit.org/kepon/emailPoubellePhp) ++ Démonstration : [Démo](https://poubelle.zici.fr/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/emailpoubelle](https://github.com/YunoHost-Apps/emailpoubelle_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/emailpoubelle/issues](https://github.com/YunoHost-Apps/emailpoubelle_ynh/issues) diff --git a/pages/04.applications/10.docs/emailpoubelle/app_emailpoubelle.md b/pages/04.applications/10.docs/emailpoubelle/app_emailpoubelle.md new file mode 100644 index 00000000..e8213264 --- /dev/null +++ b/pages/04.applications/10.docs/emailpoubelle/app_emailpoubelle.md @@ -0,0 +1,26 @@ +--- +title: EmailPoubelle +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_emailpoubelle' +--- + +[![Installer EmailPoubelle with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=emailpoubelle) [![Integration level](https://dash.yunohost.org/integration/emailpoubelle.svg)](https://dash.yunohost.org/appci/app/emailpoubelle) + +*EmailPoubelle* (Trash email) is a script to create temporary email addresses that aims to your real email address. +A YunoHost version of EmailPoubelle by David Mercereau. All thanks to David. + +### Disclaimers / important information + +WARNING + +Using this will cause to disable the YunoHost LDAP aliases ! Once installed, you won't be able to use the aliasses settings that you can see when you modify your personnal settings in the SSOWAT pannel. Of course, once uninstalled, everything get back to normal. + +## Useful links + ++ Website: [framagit.org/kepon/emailPoubellePhp](https://framagit.org/kepon/emailPoubellePhp) ++ Demonstration: [Demo](https://poubelle.zici.fr/) ++ Application software repository: [github.com - YunoHost-Apps/emailpoubelle](https://github.com/YunoHost-Apps/emailpoubelle_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/emailpoubelle/issues](https://github.com/YunoHost-Apps/emailpoubelle_ynh/issues) diff --git a/pages/04.applications/10.docs/encryptic/app_encryptic.fr.md b/pages/04.applications/10.docs/encryptic/app_encryptic.fr.md new file mode 100644 index 00000000..929fc28f --- /dev/null +++ b/pages/04.applications/10.docs/encryptic/app_encryptic.fr.md @@ -0,0 +1,19 @@ +--- +title: Encryptic +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_encryptic' +--- + +[![Installer Encryptic avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=encryptic) [![Integration level](https://dash.yunohost.org/integration/encryptic.svg)](https://dash.yunohost.org/appci/app/encryptic) + +*Encryptic* (fork de Laverna) est un système anonyme, chiffré et sans inscription requise, il est accessible via un navigateur web (sans installation de logiciel). Les données sont privées car elles sont stockées par défaut sur votre machine (InnoDB et localstorage), c'est un réglage dans les paramètres qui vous permettra de les synchroniser via le cloud sur vos différents appareils. + +## Liens utiles + ++ Site web : [encryptic.org](https://www.encryptic.org/) ++ Démonstration : [Démo](https://app.encryptic.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/encryptic](https://github.com/YunoHost-Apps/encryptic_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/encryptic/issues](https://github.com/YunoHost-Apps/encryptic_ynh/issues) diff --git a/pages/04.applications/10.docs/encryptic/app_encryptic.md b/pages/04.applications/10.docs/encryptic/app_encryptic.md new file mode 100644 index 00000000..ee7d22ff --- /dev/null +++ b/pages/04.applications/10.docs/encryptic/app_encryptic.md @@ -0,0 +1,19 @@ +--- +title: Encryptic +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_encryptic' +--- + +[![Installer Encryptic with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=encryptic) [![Integration level](https://dash.yunohost.org/integration/encryptic.svg)](https://dash.yunohost.org/appci/app/encryptic) + +*Encryptic* (fork of Laverna) is an anonymous system, encrypted and without registration required, it is accessible via a web browser (without software installation). The data is private because it is stored by default on your machine (InnoDB and localstorage), it is a setting in the settings that will allow you to synchronize it via the cloud on your various devices. + +## Useful links + ++ Website: [encryptic.org](https://www.encryptic.org/) ++ Demonstration: [Demo](https://app.encryptic.org/) ++ Application software repository: [github.com - YunoHost-Apps/encryptic](https://github.com/YunoHost-Apps/encryptic_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/encryptic/issues](https://github.com/YunoHost-Apps/encryptic_ynh/issues) diff --git a/pages/04.applications/10.docs/epicyon/app_epicyon.fr.md b/pages/04.applications/10.docs/epicyon/app_epicyon.fr.md new file mode 100644 index 00000000..a91dc396 --- /dev/null +++ b/pages/04.applications/10.docs/epicyon/app_epicyon.fr.md @@ -0,0 +1,18 @@ +--- +title: Epicyon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_epicyon' +--- + +[![Installer Epicyon avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=epicyon) [![Integration level](https://dash.yunohost.org/integration/epicyon.svg)](https://dash.yunohost.org/appci/app/epicyon) + +*Epicyon* est un Serveur ActivityPub mettant en œuvre les protocoles S2S et C2S, adapté aux ordinateurs monocartes. Comprend des fonctionnalités telles que des outils de modération, l'expiration des messages, des avertissements sur le contenu et des descriptions d'images. + +## Liens utiles + ++ Site web : [epicyon.net](https://epicyon.net/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/epicyon](https://github.com/YunoHost-Apps/epicyon_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/epicyon/issues](https://github.com/YunoHost-Apps/epicyon_ynh/issues) diff --git a/pages/04.applications/10.docs/epicyon/app_epicyon.md b/pages/04.applications/10.docs/epicyon/app_epicyon.md new file mode 100644 index 00000000..65e82af0 --- /dev/null +++ b/pages/04.applications/10.docs/epicyon/app_epicyon.md @@ -0,0 +1,18 @@ +--- +title: Epicyon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_epicyon' +--- + +[![Installer Epicyon with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=epicyon) [![Integration level](https://dash.yunohost.org/integration/epicyon.svg)](https://dash.yunohost.org/appci/app/epicyon) + +*Epicyon* is an ActivityPub server implementing S2S and C2S protocols, suitable for single board computers. Includes features such as moderation tools, post expiry, content warnings, and image descriptions. + +## Useful links + ++ Website: [epicyon.net](https://epicyon.net/) ++ Application software repository: [github.com - YunoHost-Apps/epicyon](https://github.com/YunoHost-Apps/epicyon_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/epicyon/issues](https://github.com/YunoHost-Apps/epicyon_ynh/issues) diff --git a/pages/04.applications/10.docs/ethercalc/app_ethercalc.fr.md b/pages/04.applications/10.docs/ethercalc/app_ethercalc.fr.md new file mode 100644 index 00000000..a5d7b26c --- /dev/null +++ b/pages/04.applications/10.docs/ethercalc/app_ethercalc.fr.md @@ -0,0 +1,23 @@ +--- +title: EtherCalc +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ethercalc' +--- + +![logo d'Ethercalc](image://ethercalc_logo.png?resize=,80) + +[![Installer EtherCalc avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=ethercalc) [![Niveau d'intégration](https://dash.yunohost.org/integration/ethercalc.svg)](https://dash.yunohost.org/appci/app/ethercalc) + +EtherCalc est un tableur collaboratif éditable en temps réel. Chaque tableur possède sa propre URL. +Il dispose des fonctionnalités de base : mise en forme, fonctions mathématiques, graphiques, ajout de commentaires, historique des versions, export en HTML ou en CSV. +EtherCalc est un logiciel décentralisé : différentes instances permettent d'utiliser le service, elles sont mises à disposition par plusieurs organisations (par exemple le site éponyme ou le service FramaCalc). Cela permet d'éviter de concentrer toutes les données entre les mains d'un même acteur. Les instances peuvent être personnalisées (limitation de la durée d'hébergement du tableur, modification du design, etc.). + + +## Liens utiles + ++ Site web : [ethercalc.net (en)](https://ethercalc.net/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-App/ethercalc](https://github.com/YunoHost-Apps/ethercalc_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/ethercalc/issues](https://github.com/YunoHost-Apps/ethercalc_ynh/issues) diff --git a/pages/04.applications/10.docs/ethercalc/app_ethercalc.md b/pages/04.applications/10.docs/ethercalc/app_ethercalc.md new file mode 100644 index 00000000..76d970fc --- /dev/null +++ b/pages/04.applications/10.docs/ethercalc/app_ethercalc.md @@ -0,0 +1,22 @@ +--- +title: EtherCalc +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ethercalc' +--- + +![Etherpad's logo](image://ethercalc_logo.png?resize=,80) + +[![Install EtherCalc with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=ethercalc) [![Integration level](https://dash.yunohost.org/integration/ethercalc.svg)](https://dash.yunohost.org/appci/app/ethercalc) + +EtherCalc is a collaborative spreadsheet that can be edited in real time. Each spreadsheet has its own URL. +It has the basic functionalities: formatting, mathematical functions, graphics, adding comments, version history, export in HTML or in CSV. +EtherCalc is a decentralized software: different instances allow the use of the service, they are made available by several organizations (for example the eponymous site or the FramaCalc service). This makes it possible to avoid concentrating all the data in the hands of the same actor. Instances can be personalized (limitation of the duration of hosting of the spreadsheet, modification of the design, etc.). + +## Useful links + ++ Website: [ethercalc.net](https://ethercalc.net) ++ Application software repository: [github.com - YunoHost-App/ethercalc](https://github.com/YunoHost-Apps/ethercalc_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/ethercalc/issues](https://github.com/YunoHost-Apps/ethercalc_ynh/issues) diff --git a/pages/04.applications/10.docs/etherpad_mypads/app_etherpad_mypads.fr.md b/pages/04.applications/10.docs/etherpad_mypads/app_etherpad_mypads.fr.md new file mode 100644 index 00000000..87ebeb07 --- /dev/null +++ b/pages/04.applications/10.docs/etherpad_mypads/app_etherpad_mypads.fr.md @@ -0,0 +1,33 @@ +--- +title: Etherpad avec plugin MyPads +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_etherpad_mypads' +--- + +![logo de Etherpad](image://etherpad_mypads_logo.jpg?resize=,80) + +[![Installer Etherpad avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=etherpad_mypads) [![Niveau d'intégration](https://dash.yunohost.org/integration/etherpad_mypads.svg)](https://dash.yunohost.org/appci/app/etherpad_mypads) + +Etherpad est un éditeur de texte libre en ligne fonctionnant en mode collaboratif et en temps réel. Il permet à plusieurs personnes de partager l'élaboration simultanée d'un texte, et d'en discuter en parallèle, via une messagerie instantanée. Il peut avoir des usages pédagogiques, notamment pour l'apprentissage collaboratif.[¹](#sources) + +## Configuration + +Il est possible d'accéder à deux panneaux de configurations : + + pour Etherpad : `domaine.tld/admin` + + pour MyPads : `domaine.tld/mypads/?/admin` + +## Liens utiles + ++ Site web : [etherpad.org (en)](https://etherpad.org/) ++ Documentation officielle : [etherpad.org - doc (en)](https://etherpad.org/doc/v1.8.13/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-App/etherpad_mypads](https://github.com/YunoHost-Apps/etherpad_mypads_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/etherpad_mypads/issues](https://github.com/YunoHost-Apps/etherpad_mypads_ynh/issues) + +------ + +### Sources + +¹ [wikipedia.org - Etherpad](https://fr.wikipedia.org/wiki/Etherpad) diff --git a/pages/04.applications/10.docs/etherpad_mypads/app_etherpad_mypads.md b/pages/04.applications/10.docs/etherpad_mypads/app_etherpad_mypads.md new file mode 100644 index 00000000..fea59d09 --- /dev/null +++ b/pages/04.applications/10.docs/etherpad_mypads/app_etherpad_mypads.md @@ -0,0 +1,33 @@ +--- +title: Etherpad with MyPads plugin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_etherpad_mypads' +--- + +![Etherpad's logo](image://etherpad_mypads_logo.jpg?resize=,80) + +[![Install Etherpad with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=etherpad_mypads) [![Integration level](https://dash.yunohost.org/integration/etherpad_mypads.svg)](https://dash.yunohost.org/appci/app/etherpad_mypads) + +Etherpad is an online free text editor working in collaborative mode and in real time. It allows several people to share the simultaneous creation of a text, and to discuss it in parallel, via instant messaging. It can have pedagogical uses, especially for collaborative learning.[¹](#sources) + +## Configuration + +Two control panels can be accessed: + + for Etherpad: `domain.tld/admin`. + + for MyPads: `domain.tld/mypads/?/admin`. + +## Useful links + ++ Website: [etherpad.org](https://etherpad.org/) ++ Official documentation: [etherpad.org - doc](https://etherpad.org/doc/v1.8.13/) ++ Application software repository: [github.com - YunoHost-App/etherpad_mypads](https://github.com/YunoHost-Apps/etherpad_mypads_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/etherpad_mypads/issues](https://github.com/YunoHost-Apps/etherpad_mypads_ynh/issues) + +------ + +### Sources + +¹ [wikipedia.org - Etherpad (fr)](https://fr.wikipedia.org/wiki/Etherpad) diff --git a/pages/04.applications/10.docs/facette/app_facette.fr.md b/pages/04.applications/10.docs/facette/app_facette.fr.md new file mode 100644 index 00000000..08eb5308 --- /dev/null +++ b/pages/04.applications/10.docs/facette/app_facette.fr.md @@ -0,0 +1,19 @@ +--- +title: Facette +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_facette' +--- + +[![Installer Facette avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=facette) [![Integration level](https://dash.yunohost.org/integration/facette.svg)](https://dash.yunohost.org/appci/app/facette) + +*Facette* est une application web qui permet d'afficher des séries de données temporelles provenant de diverses sources - telles que collectd, Graphite, InfluxDB ou KairosDB - sur des graphiques, conçue pour être facile à configurer et à utiliser. + +## Liens utiles + ++ Site web : [facette.io](https://facette.io/) ++ Démonstration : [Démo](https://play.facette.io/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/facette](https://github.com/YunoHost-Apps/facette_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/facette/issues](https://github.com/YunoHost-Apps/facette_ynh/issues) diff --git a/pages/04.applications/10.docs/facette/app_facette.md b/pages/04.applications/10.docs/facette/app_facette.md new file mode 100644 index 00000000..afc46743 --- /dev/null +++ b/pages/04.applications/10.docs/facette/app_facette.md @@ -0,0 +1,19 @@ +--- +title: Facette +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_facette' +--- + +[![Installer Facette with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=facette) [![Integration level](https://dash.yunohost.org/integration/facette.svg)](https://dash.yunohost.org/appci/app/facette) + +*Facette* is a web application to display time series data from various sources — such as collectd, Graphite, InfluxDB or KairosDB — on graphs, designed to be easy to setup and to use. + +## Useful links + ++ Website: [facette.io](https://facette.io/) ++ Demonstration: [Demo](https://play.facette.io/) ++ Application software repository: [github.com - YunoHost-Apps/facette](https://github.com/YunoHost-Apps/facette_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/facette/issues](https://github.com/YunoHost-Apps/facette_ynh/issues) diff --git a/pages/04.applications/10.docs/facilmap/app_facilmap.fr.md b/pages/04.applications/10.docs/facilmap/app_facilmap.fr.md new file mode 100644 index 00000000..722abc48 --- /dev/null +++ b/pages/04.applications/10.docs/facilmap/app_facilmap.fr.md @@ -0,0 +1,19 @@ +--- +title: Facilmap +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_facilmap' +--- + +[![Installer Facilmap avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=facilmap) [![Integration level](https://dash.yunohost.org/integration/facilmap.svg)](https://dash.yunohost.org/appci/app/facilmap) + +*Facilmap* est une carte collaborative avec une interface simple et pratique. + +## Liens utiles + ++ Site web : [facilmap.org](https://facilmap.org/) ++ Démonstration : [Démo](https://facilmap.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/facilmap](https://github.com/YunoHost-Apps/facilmap_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/facilmap/issues](https://github.com/YunoHost-Apps/facilmap_ynh/issues) diff --git a/pages/04.applications/10.docs/facilmap/app_facilmap.md b/pages/04.applications/10.docs/facilmap/app_facilmap.md new file mode 100644 index 00000000..963ce3d2 --- /dev/null +++ b/pages/04.applications/10.docs/facilmap/app_facilmap.md @@ -0,0 +1,19 @@ +--- +title: Facilmap +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_facilmap' +--- + +[![Installer Facilmap with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=facilmap) [![Integration level](https://dash.yunohost.org/integration/facilmap.svg)](https://dash.yunohost.org/appci/app/facilmap) + +*Facilmap* is a collaborative maps and routing with a straightforward interface. + +## Useful links + ++ Website: [facilmap.org](https://facilmap.org/) ++ Demonstration: [Demo](https://facilmap.org/) ++ Application software repository: [github.com - YunoHost-Apps/facilmap](https://github.com/YunoHost-Apps/facilmap_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/facilmap/issues](https://github.com/YunoHost-Apps/facilmap_ynh/issues) diff --git a/pages/04.applications/10.docs/fallback/app_fallback.fr.md b/pages/04.applications/10.docs/fallback/app_fallback.fr.md new file mode 100644 index 00000000..7a5e1f8e --- /dev/null +++ b/pages/04.applications/10.docs/fallback/app_fallback.fr.md @@ -0,0 +1,24 @@ +--- +title: Fallback +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_fallback' +--- + +![Fallback](image://yunohost_package.png?height=80) + +[![Install fallback with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=fallback) [![Integration level](https://dash.yunohost.org/integration/fallback.svg)](https://dash.yunohost.org/appci/app/fallback) + +Fallback est une application spéciale, uniquement par interface de ligne de commande, qui permet d'avoir un serveur secondaire que vous pouvez utiliser si votre serveur principal tombe en panne. +Cet autre serveur vous permettra de déployer une copie de votre serveur pour vous ramener sur internet pendant votre panne. + +## Configuration + +Après l'installation, vous ne devriez plus avoir rien à configurer. Si vous le souhaitez quand même, vous pouvez trouver la liste des applications à sauvegarder dans le fichier `/home/yunohost.app/fallback/app_list` et une configuration globale dans cet autre fichier `/home/yunohost.app/fallback/config.conf` + +## Liens utiles + + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/fallback](https://github.com/YunoHost-Apps/fallback_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/fallback/issues](https://github.com/YunoHost-Apps/fallback_ynh/issues) diff --git a/pages/04.applications/10.docs/fallback/app_fallback.md b/pages/04.applications/10.docs/fallback/app_fallback.md new file mode 100644 index 00000000..793604e5 --- /dev/null +++ b/pages/04.applications/10.docs/fallback/app_fallback.md @@ -0,0 +1,24 @@ +--- +title: Fallback +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_fallback' +--- + +![Fallback](image://yunohost_package.png?height=80) + +[![Install Fallback with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=fallback) [![Integration level](https://dash.yunohost.org/integration/fallback.svg)](https://dash.yunohost.org/appci/app/fallback) + +Fallback is a special app, available only by command line interface, which provides a way to have a secondary server which can be used if your main server goes down. +This other server will allow you to deploy a copy of your server to bring you back to the internet during your break down. + +## Configuration + +After the installation, you should not have anything else to configure. If you want, you can find the list of apps to backup in the file `/home/yunohost.app/fallback/app_list` and a global configuration in this other file `/home/yunohost.app/fallback/config.conf` + +## Useful links + ++ Application software repository: [github.com - YunoHost-Apps/fallback](https://github.com/YunoHost-Apps/fallback_ynh) ++ Fix a bug or suggest an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/fallback/issues](https://github.com/YunoHost-Apps/fallback_ynh/issues) diff --git a/pages/04.applications/10.docs/ffsync/app_ffsync.fr.md b/pages/04.applications/10.docs/ffsync/app_ffsync.fr.md new file mode 100644 index 00000000..3516b7b1 --- /dev/null +++ b/pages/04.applications/10.docs/ffsync/app_ffsync.fr.md @@ -0,0 +1,40 @@ +--- +title: Firefox Sync +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ffsync' +--- + +![logo de Firefox Sync](image://ffsync_logo.png?width=80) + +[![Install Firefox Sync with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=ffsync) [![Integration level](https://dash.yunohost.org/integration/ffsync.svg)](https://dash.yunohost.org/appci/app/ffsync) + +Firefox Sync permet la synchronisation des favoris, des marques-pages, de l’historique, des onglets, des extensions entre plusieurs instances du navigateur web Firefox. + +## Configuration + +Une fois installé, le site `domain.tld/path` devrait afficher une page expliquant comment le configurer. + +Pour utiliser votre serveur personnel de synchronisation Firefox, vous allez devoir configurer votre navigateur [Firefox](https://www.mozilla.org/fr/firefox/new/). + +### Firefox bureau + +1. Une fois Firefox lancé, rendez-vous à l’adresse : `about:config` +2. Recherchez la clé : `identity.sync.tokenserver.uri` +3. Remplacez l’URL par la vôtre : `https://mondomaine.tld/path/token/1.0/sync/1.5` +4. Créez un compte chez Mozilla : https://accounts.firefox.com/signup + +### Firefox mobile + +Avec les versions récentes de Firefox pour mobile la démarche est identique à la version bureau. + +## Limitations avec YunoHost + +Par défaut, l'authentification s’effectuera toujours à l’aide de comptes hébergés par Mozilla à l'adresse https://accounts.firefox.com. Vous devrez donc toujours vous authentifier chez Mozilla, mais le stockage de vos informations se fera bien sur votre serveur. + +## Liens utiles + + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/APPLICATION](https://github.com/YunoHost-Apps/ffsync_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/ffsync/issues](https://github.com/YunoHost-Apps/ffsync_ynh/issues) diff --git a/pages/04.applications/10.docs/ffsync/app_ffsync.it.md b/pages/04.applications/10.docs/ffsync/app_ffsync.it.md new file mode 100644 index 00000000..80c7ff03 --- /dev/null +++ b/pages/04.applications/10.docs/ffsync/app_ffsync.it.md @@ -0,0 +1,23 @@ +--- +title: FireFox Sync +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ffsync' +--- + +Firefox Sync permette la sincronizzazione di plugin, schede, segnalibri, preferiti e cronologia fra diverse istanze di Firefox. + +## Configurazione di Firefox +### Firefox versione desktop +Nella barra degli indirizzi di Firefox inserite: `about:config`. + +Cercate: `identity.sync.tokenserver.uri`. + +Modificate l'indirizzo trovato in: https://mydomain.tld/path/token/1.0/sync/1.5 + +Create un account su Mozilla: https://accounts.firefox.com/signup + +### Firefox versione mobile +Nell'ultima versione di Firefox mobile la procedura è identica a quella per la versione desktop. diff --git a/pages/04.applications/10.docs/ffsync/app_ffsync.md b/pages/04.applications/10.docs/ffsync/app_ffsync.md new file mode 100644 index 00000000..52bc248f --- /dev/null +++ b/pages/04.applications/10.docs/ffsync/app_ffsync.md @@ -0,0 +1,39 @@ +--- +title: Firefox Sync +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ffsync' +--- + +![Firefox Sync's logo](image://ffsync_logo.png?width=80) + +[![Install Firefox Sync with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=ffsync) [![Integration level](https://dash.yunohost.org/integration/ffsync.svg)](https://dash.yunohost.org/appci/app/ffsync) + +Firefox Sync permits synchronize plugins, tabs, bookmarks, favorites, history over many Firefox instances. + +## Configuration + +Once installed, the `domain.tld/path` site should display a page explaining how to configure it. +To use your personal Firefox sync server, you will need to configure your [Firefox](https://www.mozilla.org/fr/firefox/new/) web browser. + +### Firefox desktop + +1. In Firefox URL bar put: `about:config`. +2. Search for: `identity.sync.tokenserver.uri`. +3. Replace the URL by: https://mydomain.tld/path/token/1.0/sync/1.5 +4. Create an account at Mozilla: https://accounts.firefox.com/signup + +### Firefox mobile + +With the last version of firefox mobile it's same than for desktop. + +## Limitations with YunoHost + +By default, a configured server will report authentication to the account server hosted by Mozilla at https://accounts.firefox.com. You will still need to authenticate to Mozilla, but your information will be stored on your host. + +## Useful links + ++ Application software repository: [github.com - YunoHost-Apps/ffsync](https://github.com/YunoHost-Apps/ffsync_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/ffsync/issues](https://github.com/YunoHost-Apps/ffsync_ynh/issues) diff --git a/pages/04.applications/10.docs/firefly-iii/app_firefly-iii.fr.md b/pages/04.applications/10.docs/firefly-iii/app_firefly-iii.fr.md new file mode 100644 index 00000000..f534fd34 --- /dev/null +++ b/pages/04.applications/10.docs/firefly-iii/app_firefly-iii.fr.md @@ -0,0 +1,21 @@ +--- +title: Firefly III +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_firefly-iii' +--- + +![logo de Firefly III](image://firefly-logo.png?height=100) + +[![Install Firefly III with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=firefly-iii) [![Integration level](https://dash.yunohost.org/integration/firefly-iii.svg)](https://dash.yunohost.org/appci/app/firefly-iii) + +"Firefly III" est un gestionnaire (auto-hébergé) de vos finances personnelles. Il peut vous aider à suivre vos dépenses et vos revenus, afin que vous puissiez dépenser moins et épargner plus. Firefly III permet d'utiliser des budgets, des catégories et des étiquettes. Il peut importer des données provenant de sources externes et il dispose de nombreux rapports financiers soignés. + +## Liens utiles + + + Site web : [www.firefly-iii.org (en)](https://www.firefly-iii.org/) + + Documentation officielle : [docs.firefly-iii.org (en)](https://docs.firefly-iii.org/about-firefly-iii/introduction) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/firefly-iii](https://github.com/YunoHost-Apps/firefly-iii_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/firefly-iii/issues](https://github.com/YunoHost-Apps/firefly-iii_ynh/issues) diff --git a/pages/04.applications/10.docs/firefly-iii/app_firefly-iii.md b/pages/04.applications/10.docs/firefly-iii/app_firefly-iii.md new file mode 100644 index 00000000..7c109d54 --- /dev/null +++ b/pages/04.applications/10.docs/firefly-iii/app_firefly-iii.md @@ -0,0 +1,21 @@ +--- +title: Firefly III +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_firefly-iii' +--- + +![Firefly III's logo](image://firefly-logo.png?height=100) + +[![Install Firefly III with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=firefly-iii) [![Integration level](https://dash.yunohost.org/integration/firefly-iii.svg)](https://dash.yunohost.org/appci/app/firefly-iii) + +"Firefly III" is a (self-hosted) manager for your personal finances. It can help you keep track of your expenses and income, so you can spend less and save more. Firefly III supports the use of budgets, categories and tags. It can import data from external sources and it has many neat financial reports available. + +## Useful links + ++ Website: [www.firefly-iii.org](https://www.firefly-iii.org/) ++ Official documentation: [docs.firefly-iii.org](https://docs.firefly-iii.org/about-firefly-iii/introduction) ++ Application software repository: [github.com - YunoHost-Apps/firefly-iii](https://github.com/YunoHost-Apps/firefly-iii_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/firefly-iii/issues](https://github.com/YunoHost-Apps/firefly-iii_ynh/issues) diff --git a/pages/04.applications/10.docs/flarum/app_flarum.fr.md b/pages/04.applications/10.docs/flarum/app_flarum.fr.md new file mode 100644 index 00000000..78e0a81e --- /dev/null +++ b/pages/04.applications/10.docs/flarum/app_flarum.fr.md @@ -0,0 +1,21 @@ +--- +title: Flarum +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_flarum' +--- + +![logo de Flarum](image://flarum_logo.png?width=80) + +[![Install Flarum with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=flarum) [![Integration level](https://dash.yunohost.org/integration/flarum.svg)](https://dash.yunohost.org/appci/app/flarum) + +Flarum est un système de forum, il est possible de lui adjoindre de multiples plugins. + +## Liens utiles + + + Site web : [flarum.org (en)](https://flarum.org/) + + Documentation officielle : [flarum.org - docs (en)](https://flarum.org/docs/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/flarum](https://github.com/YunoHost-Apps/flarum_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/flarum/issues](https://github.com/YunoHost-Apps/flarum_ynh/issues) diff --git a/pages/04.applications/10.docs/flarum/app_flarum.md b/pages/04.applications/10.docs/flarum/app_flarum.md new file mode 100644 index 00000000..1666b20a --- /dev/null +++ b/pages/04.applications/10.docs/flarum/app_flarum.md @@ -0,0 +1,21 @@ +--- +title: Flarum +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_flarum' +--- + +![Flarum's logo](image://flarum_logo.png?width=80) + +[![Install Flarum with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=flarum) [![Integration level](https://dash.yunohost.org/integration/flarum.svg)](https://dash.yunohost.org/appci/app/flarum) + +Flarum is a forum system, it is possible to add multiple plugins to it. + +## Useful links + ++ Website: [flarum.org](https://flarum.org/) ++ Official documentation: [flarum.org - docs](https://flarum.org/docs/) ++ Application software repository: [github.com - YunoHost-Apps/flarum](https://github.com/YunoHost-Apps/flarum_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/flarum/issues](https://github.com/YunoHost-Apps/flarum_ynh/issues) diff --git a/pages/04.applications/10.docs/fluxbb/app_fluxbb.fr.md b/pages/04.applications/10.docs/fluxbb/app_fluxbb.fr.md new file mode 100644 index 00000000..62db15b9 --- /dev/null +++ b/pages/04.applications/10.docs/fluxbb/app_fluxbb.fr.md @@ -0,0 +1,25 @@ +--- +title: FluxBB +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_fluxbb' +--- + +![logo de FluxBB](image://fluxbb_logo.png?height=80) + +[![Install FluxBB with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=fluxbb) [![Integration level](https://dash.yunohost.org/integration/fluxbb.svg)](https://dash.yunohost.org/appci/app/fluxbb) + +FluxBB est un logiciel de forum rapide, léger et convivial pour votre site web. FluxBB est conçu comme une alternative plus légère et plus rapide à certaines des applications de forum traditionnelles lourdes en fonctionnalités. Il est facile à utiliser et a fait ses preuves en matière de stabilité et de sécurité, ce qui en fait un choix idéal de forum pour votre site web. + +## Limitations avec YunoHost + +Les authentification HTTP et LDAP ne sont pas pris en charges. + +## Liens utiles + + + Site web : [fluxbb.org (en)](https://fluxbb.org/) + + Documentation officielle : [fluxbb.org - docs (en)](https://fluxbb.org/docs/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/fluxbb](https://github.com/YunoHost-Apps/fluxbb_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/fluxbb/issues](https://github.com/YunoHost-Apps/fluxbb_ynh/issues) diff --git a/pages/04.applications/10.docs/fluxbb/app_fluxbb.md b/pages/04.applications/10.docs/fluxbb/app_fluxbb.md new file mode 100644 index 00000000..4eb1fa84 --- /dev/null +++ b/pages/04.applications/10.docs/fluxbb/app_fluxbb.md @@ -0,0 +1,25 @@ +--- +title: FluxBB +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_fluxbb' +--- + +![FluxBB's logo](image://fluxbb_logo.png?height=80) + +[![Install FluxBB with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=fluxbb) [![Integration level](https://dash.yunohost.org/integration/fluxbb.svg)](https://dash.yunohost.org/appci/app/fluxbb) + +FluxBB is fast, light, user-friendly forum software for your website. FluxBB is designed as a lighter, faster alternative to some of the traditional feature heavy forum applications. It is easy to use and has a proven track record of stability and security making it an ideal choice of forum for your website. + +## Limitations with YunoHost + +HTTP and LDAP authentication are not supported. + +## Useful links + ++ Website: [fluxbb.org](https://fluxbb.org/) ++ Official documentation: [fluxbb.org - docs](https://fluxbb.org/docs/) ++ Application software repository: [github.com - YunoHost-Apps/fluxbb](https://github.com/YunoHost-Apps/fluxbb_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/fluxbb/issues](https://github.com/YunoHost-Apps/fluxbb_ynh/issues) diff --git a/pages/04.applications/10.docs/focalboard/app_focalboard.fr.md b/pages/04.applications/10.docs/focalboard/app_focalboard.fr.md new file mode 100644 index 00000000..ac904981 --- /dev/null +++ b/pages/04.applications/10.docs/focalboard/app_focalboard.fr.md @@ -0,0 +1,18 @@ +--- +title: Focalboard +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_focalboard' +--- + +[![Installer Focalboard avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=focalboard) [![Integration level](https://dash.yunohost.org/integration/focalboard.svg)](https://dash.yunohost.org/appci/app/focalboard) + +*Focalboard* est un outil de gestion de projet qui aide à définir, organiser, suivre et gérer le travail entre les équipes, à l'aide d'une vue de tableau kanban familière. + +## Liens utiles + ++ Site web : [focalboard.com](https://www.focalboard.com/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/focalboard](https://github.com/YunoHost-Apps/focalboard_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/focalboard/issues](https://github.com/YunoHost-Apps/focalboard_ynh/issues) diff --git a/pages/04.applications/10.docs/focalboard/app_focalboard.md b/pages/04.applications/10.docs/focalboard/app_focalboard.md new file mode 100644 index 00000000..49f47683 --- /dev/null +++ b/pages/04.applications/10.docs/focalboard/app_focalboard.md @@ -0,0 +1,18 @@ +--- +title: Focalboard +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_focalboard' +--- + +[![Installer Focalboard with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=focalboard) [![Integration level](https://dash.yunohost.org/integration/focalboard.svg)](https://dash.yunohost.org/appci/app/focalboard) + +*Focalboard* is a project management tool that helps define, organize, track and manage work across teams, using a familiar kanban board view. + +## Useful links + ++ Website: [focalboard.com](https://www.focalboard.com/) ++ Application software repository: [github.com - YunoHost-Apps/focalboard](https://github.com/YunoHost-Apps/focalboard_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/focalboard/issues](https://github.com/YunoHost-Apps/focalboard_ynh/issues) diff --git a/pages/04.applications/10.docs/framaforms/app_framaforms.fr.md b/pages/04.applications/10.docs/framaforms/app_framaforms.fr.md new file mode 100644 index 00000000..5851077c --- /dev/null +++ b/pages/04.applications/10.docs/framaforms/app_framaforms.fr.md @@ -0,0 +1,23 @@ +--- +title: Framaforms +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_framaforms' +--- + +![logo de framaforms](image://framaforms_logo.png?height=80) + +[![Install framaforms with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=framaforms) [![Integration level](https://dash.yunohost.org/integration/framaforms.svg)](https://dash.yunohost.org/appci/app/framaforms) + +Framaforms est un service de formulaires et d'enquêtes en ligne. Les utilisateurs enregistrés sont autorisés à créer des formulaires, à les partager, à collecter et à visualiser les résultats par le biais d'une interface simple. +Il est possible d'être notifié de chaque réponse, de récupérer les réponses sous forme graphiques ou de tableaux. Les questionnaires peuvent être aussi élaborés sur plusieurs pages et présenter des champs conditionnels ou obligatoires. + +Liens utiles + ++ Site web : [framaforms.org](https://framaforms.org/) ++ Documentation officielle : [docs.framasoft.org/fr/framaforms](https://docs.framasoft.org/fr/framaforms/) ++ Démonstration: [Démo](https://framaforms.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/framaforms](https://github.com/YunoHost-Apps/framaforms_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/framaforms/issues](https://github.com/YunoHost-Apps/framaforms_ynh/issues) diff --git a/pages/04.applications/10.docs/framaforms/app_framaforms.md b/pages/04.applications/10.docs/framaforms/app_framaforms.md new file mode 100644 index 00000000..33ecb5c5 --- /dev/null +++ b/pages/04.applications/10.docs/framaforms/app_framaforms.md @@ -0,0 +1,21 @@ +--- +title: Framaforms +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_framaforms' +--- + +[![Install framaforms with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=framaforms) [![Integration level](https://dash.yunohost.org/integration/framaforms.svg)](https://dash.yunohost.org/appci/app/framaforms) + +Framaforms is an online forms and survey service. Registered users are allowed to create forms, share them, collect and view the results through a simple interface. +It is possible to be notified of each response, retrieve responses in graphical or tabular form. Questionnaires can also be developed on several pages and have conditional or mandatory fields. + +## Useful links + ++ Website: [framaforms.org](https://framaforms.org/) ++ Official documentation: [docs.framasoft.org/fr/framaforms](https://docs.framasoft.org/fr/framaforms/) ++ Demonstration: [Demo](https://framaforms.org/) ++ Application software repository: [github.com - YunoHost-Apps/framaforms](https://github.com/YunoHost-Apps/framaforms_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/framaforms/issues](https://github.com/YunoHost-Apps/framaforms_ynh/issues) diff --git a/pages/04.applications/10.docs/freshrss/app_freshrss.fr.md b/pages/04.applications/10.docs/freshrss/app_freshrss.fr.md new file mode 100644 index 00000000..c0a6aa89 --- /dev/null +++ b/pages/04.applications/10.docs/freshrss/app_freshrss.fr.md @@ -0,0 +1,40 @@ +--- +title: FreshRSS +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_freshrss' +--- + +![logo de FreshRSS](image://freshrss_logo.svg?resize=,80) + +[![Install FreshRSS with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=freshrss) [![Integration level](https://dash.yunohost.org/integration/freshrss.svg)](https://dash.yunohost.org/appci/app/freshrss) + +FreshRSS est un agrégateur et lecteur de flux RSS. Il permet de regrouper l’actualité de plusieurs sites différents dans un endroit unique pour que vous puissiez la lire sans devoir aller de site en site. + +FreshRSS a été conçu comme un agrégateur puissant et propose des tas de fonctionnalités. + +## Configuration + +API (mini) Comment faire : +1. Dans votre profil utilisateur `Paramètres > profil` +2. Définir un mot de passe API +3. Vérifiez que l'API fonctionne : https://exemple.tld/rss/api/greader.php +4. Configurez votre client avec : + + username : ynh user + + password : le mot de passe que vous venez de configurer + + URL : https://exemple.tld/rss/api/greader.php + +## Applications clientes + +| Nom de l'applications | Plateforme | Multi-comptes | F-Droid | Play Store | +|-----------------------|------------|---------------|---------|------------| +| Fresh RSS | Android | ? | [f-droid.org - Fresh RSS](https://f-droid.org/fr/packages/fr.chenry.android.freshrss/) | X | + +## Liens utiles + + + Site web : [www.freshrss.org (en)](https://www.freshrss.org/) + + Documentation officielle : [freshrss.github.io - FreshRSS](https://freshrss.github.io/FreshRSS/fr/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/freshrss](https://github.com/YunoHost-Apps/freshrss_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/freshrss/issues](https://github.com/YunoHost-Apps/freshrss_ynh/issues) diff --git a/pages/04.applications/10.docs/freshrss/app_freshrss.md b/pages/04.applications/10.docs/freshrss/app_freshrss.md new file mode 100644 index 00000000..bb286bdf --- /dev/null +++ b/pages/04.applications/10.docs/freshrss/app_freshrss.md @@ -0,0 +1,40 @@ +--- +title: FreshRSS +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_freshrss' +--- + +![FreshRSS's logo](image://freshrss_logo.png?height=100) + +[![Install FreshRSS with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=freshrss) [![Integration level](https://dash.yunohost.org/integration/freshrss.svg)](https://dash.yunohost.org/appci/app/freshrss) + +FreshRSS is an RSS aggregator and reader. It allows you to read and follow several news websites at a glance without the need to browse from one website to another. + +FreshRSS has a lot of features including. + +## Configuration + +API (mini) How To +1. Into your user profile: `Settings > profil` +2. Setup an API password +3. Check the API is working: https://exemple.tld/rss/api/greader.php +4. Setup your client with: + + username: ynh user + + password: the password you just setup + + URL: https://exemple.tld/rss/api/greader.php + +## Customer applications + +| Application name | Platform | Multi-account | Play Store | F-Droid | Play Store | +|------------------|----------|---------------|------------|---------|------------| +| Fresh RSS | Android | ? | | [f-droid.org - Fresh RSS](https://f-droid.org/fr/packages/fr.chenry.android.freshrss/) | X | + +## Useful links + ++ Website: [www.freshrss.org](https://www.freshrss.org/) ++ Official documentation: [freshrss.github.io - FreshRSS](https://freshrss.github.io/FreshRSS/) ++ Application software repository: [github.com - YunoHost-Apps/freshrss](https://github.com/YunoHost-Apps/freshrss_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/freshrss/issues](https://github.com/YunoHost-Apps/freshrss_ynh/issues) diff --git a/pages/04.applications/10.docs/friendica/app_friendica.fr.md b/pages/04.applications/10.docs/friendica/app_friendica.fr.md new file mode 100644 index 00000000..68bff86e --- /dev/null +++ b/pages/04.applications/10.docs/friendica/app_friendica.fr.md @@ -0,0 +1,39 @@ +--- +title: Friendica +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_friendica' +--- + +![logo de friendica](image://friendica_logo.svg?resize=,80) + +[![Install friendica with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=friendica) [![Integration level](https://dash.yunohost.org/integration/friendica.svg)](https://dash.yunohost.org/appci/app/friendica) + +Friendica est une plateforme de communication décentralisée qui intègre la communication sociale. La plate-forme est liée à des projets sociaux indépendants et à des services aux entreprises. + +Son objectif est de libérer les amis, la famille et les collègues des entreprises qui récoltent des données ; Friendica vise à ce que la communication sociale soit libre et ouverte, tout en circulant entre tous les fournisseurs aussi facilement que le courrier électronique.[¹](#sources) + +## Configuration + +Avant l'installation, lisez les instructions d'installation de Friendica pour obtenir des informations à propos de l'installation + +Exigence de validation du certificat SSL (maintenant avec le support de Let's Encrypt !). Voir la section Installation ci-dessous. +Domaine dédié (doit être installé sous la racine web comme https://hub.example.com/ et non https://example.com/hub/ ) + +Note : Vous pouvez utiliser les comptes du LDAP de YunoHost. Il n'y a pas encore de SSO actif. + +## Liens utiles + ++ Site web : [friendi.ca](http://friendi.ca/) ++ Documentation officielle : [github.com/friendica/friendica/wiki](https://github.com/friendica/friendica/wiki) ++ Démonstration : [Démo](http://dir.friendica.social/servers) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/friendica](https://github.com/YunoHost-Apps/friendica_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/friendica/issues](https://github.com/YunoHost-Apps/friendica_ynh/issues) + +------ + +### Sources + +¹ [github.com - friendica/friendica (en)](https://github.com/friendica/friendica) diff --git a/pages/04.applications/10.docs/friendica/app_friendica.md b/pages/04.applications/10.docs/friendica/app_friendica.md new file mode 100644 index 00000000..46380f80 --- /dev/null +++ b/pages/04.applications/10.docs/friendica/app_friendica.md @@ -0,0 +1,39 @@ +--- +title: Friendica +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_friendica' +--- + +![friendica's logo](image://friendica_logo.svg?resize=,80) + +[![Install friendica with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=friendica) [![Integration level](https://dash.yunohost.org/integration/friendica.svg)](https://dash.yunohost.org/appci/app/friendica) + +Friendica is a decentralized communication platform that integrates social communication. The platform is linked to independent social projects and business services. + +Its aim is to free up friends, family and colleagues from companies that collect data; Friendica aims to make social communication free and open, while circulating between all providers as easily as email.[¹](#sources) + +## Configuration + +Before installing, read the Friendica installation instructions for important information about + +SSL certificate validation requirement (now with support for Let's Encrypt!). See Installation section below. +Dedicated domain (must install under web root like https://hub.example.com/ not https://example.com/hub/ ) + +Note: You can use accounts from YunoHost's LDAP. There are not yet active SSO. + +## Useful links + ++ Website : [friendi.ca](http://friendi.ca/) ++ Official documentation : [github.com/friendica/friendica/wiki](https://github.com/friendica/friendica/wiki) ++ Demonstration : [Demo](http://dir.friendica.social/servers) ++ Application software repository : [github.com - YunoHost-Apps/friendica](https://github.com/YunoHost-Apps/friendica_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/friendica/issues](https://github.com/YunoHost-Apps/friendica_ynh/issues) + +------ + +### Sources + +¹ [github.com - friendica/friendica](https://github.com/friendica/friendica) diff --git a/pages/04.applications/10.docs/funkwhale/app_funkwhale.fr.md b/pages/04.applications/10.docs/funkwhale/app_funkwhale.fr.md new file mode 100644 index 00000000..e6cd5f97 --- /dev/null +++ b/pages/04.applications/10.docs/funkwhale/app_funkwhale.fr.md @@ -0,0 +1,35 @@ +--- +title: Funkwhale +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_funkwhale' +--- + +![logo de Funkwhale](image://funkwhale_logo.png?width=80) + +[![Install Funkwhale with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=funkwhale) [![Integration level](https://dash.yunohost.org/integration/funkwhale.svg)](https://dash.yunohost.org/appci/app/funkwhale) + +Funkwhale est un serveur de flux continu de musique libre, auto-hébergé et fédéré. Chaque utilisateur⋅trice dispose d'une bibliothèque dans laquelle il/elle peut ajouter les titres qu'il/elle souhaite, et qu'il/elle peut partager avec d'autres utilisateurs, qu'ils soient sur la même instance ou non.[¹](#sources) + +## Administration + +La page d'admimnistration est disponible à l'adresse : `mon.domaine.tld/api/admin` + +## Limitations avec YunoHost + +Pour installer Funkwhale sur votre serveur YunoHost il est nécessaire d'avoir un nom de domaine dédié à Funkwhale. + +## Liens utiles + ++ Site web : [funkwhale.audio](https://funkwhale.audio/) ++ Documentation officielle : [docs.funkwhale.audio (en)](https://docs.funkwhale.audio/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/funkwhale](https://github.com/YunoHost-Apps/funkwhale_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/funkwhale/issues](https://github.com/YunoHost-Apps/funkwhale_ynh/issues) + +----- + +### Sources + +¹ [wikipedia.org - Funkwhale](https://fr.wikipedia.org/wiki/Funkwhale) diff --git a/pages/04.applications/10.docs/funkwhale/app_funkwhale.md b/pages/04.applications/10.docs/funkwhale/app_funkwhale.md new file mode 100644 index 00000000..f9c2f0a1 --- /dev/null +++ b/pages/04.applications/10.docs/funkwhale/app_funkwhale.md @@ -0,0 +1,35 @@ +--- +title: Funkwhale +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_funkwhale' +--- + +![Funkwhale's logo](image://funkwhale_logo.png?width=80) + +[![Install Funkwhale with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=funkwhale) [![Integration level](https://dash.yunohost.org/integration/funkwhale.svg)](https://dash.yunohost.org/appci/app/funkwhale) + +Funkwhale is a self-hosted, federated free music streaming server. Each user has a library in which they can add the titles they want, and which they can share with other users, whether they are on the same instance or not. [¹](#sources) + +## Administration + +The administration page is available at: `my.domain.tld/api/admin` + +## Limitations with YunoHost + +To install Funkwhale on your YunoHost server it is necessary to have a domain name dedicated to Funkwhale. + +## Useful links + ++ Website: [funkwhale.audio](https://funkwhale.audio/) ++ Official documentation: [docs.funkwhale.audio](https://docs.funkwhale.audio/) ++ Application software repository: [github.com - YunoHost-Apps/funkwhale](https://github.com/YunoHost-Apps/funkwhale_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/funkwhale/issues](https://github.com/YunoHost-Apps/funkwhale_ynh/issues) + +----- + +### Sources + +¹ [wikipedia.org - Funkwhale](https://fr.wikipedia.org/wiki/Funkwhale) diff --git a/pages/04.applications/10.docs/galene/app_galene.fr.md b/pages/04.applications/10.docs/galene/app_galene.fr.md new file mode 100644 index 00000000..b63ce156 --- /dev/null +++ b/pages/04.applications/10.docs/galene/app_galene.fr.md @@ -0,0 +1,19 @@ +--- +title: Galène +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_galene' +--- + +[![Installer Galène avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=galene) [![Integration level](https://dash.yunohost.org/integration/galene.svg)](https://dash.yunohost.org/appci/app/galene) + +*Galène* est un serveur de visioconférence facile à déployer (il suffit de copier quelques fichiers et d'exécuter le binaire) et qui nécessite des ressources serveur modérées. Il a été conçu à l'origine pour les conférences (où un seul orateur diffuse l'audio et la vidéo à des centaines ou des milliers d'utilisateurs), mais a ensuite évolué pour être utile pour les travaux pratiques des étudiants (où les utilisateurs sont divisés en plusieurs petits groupes) et les réunions (où un quelques dizaines d'utilisateurs interagissent les uns avec les autres). + +## Liens utiles + ++ Site web : [galene.org (en)](https://galene.org/) ++ Démonstration : [Démo](https://galene.org:8443/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/galene](https://github.com/YunoHost-Apps/galene_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/galene/issues](https://github.com/YunoHost-Apps/galene_ynh/issues) diff --git a/pages/04.applications/10.docs/galene/app_galene.md b/pages/04.applications/10.docs/galene/app_galene.md new file mode 100644 index 00000000..c2830b15 --- /dev/null +++ b/pages/04.applications/10.docs/galene/app_galene.md @@ -0,0 +1,19 @@ +--- +title: Galène +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_galene' +--- + +[![Install Galène with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=galene) [![Integration level](https://dash.yunohost.org/integration/galene.svg)](https://dash.yunohost.org/appci/app/galene) + +*Galène* is a videoconferencing server that is easy to deploy (just copy a few files and run the binary) and that requires moderate server resources. It was originally designed for lectures and conferences (where a single speaker streams audio and video to hundreds or thousands of users), but later evolved to be useful for student practicals (where users are divided into many small groups), and meetings (where a few dozen users interact with each other). + +## Useful links + ++ Website: [galene.org](https://galene.org/) ++ Demonstration: [Demo](https://galene.org:8443/) ++ Application software repository: [github.com - YunoHost-Apps/galene](https://github.com/YunoHost-Apps/galene_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/galene/issues](https://github.com/YunoHost-Apps/galene_ynh/issues) diff --git a/pages/04.applications/10.docs/galette/app_galette.fr.md b/pages/04.applications/10.docs/galette/app_galette.fr.md new file mode 100644 index 00000000..92687d0d --- /dev/null +++ b/pages/04.applications/10.docs/galette/app_galette.fr.md @@ -0,0 +1,42 @@ +--- +title: Galette +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_galette' +--- + +![logo de Galette](https://galette.eu/site/assets/img/galette.png?resize=,80) + +[![Installer Galette avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=galette) [![Integration level](https://dash.yunohost.org/integration/galette.svg)](https://dash.yunohost.org/appci/app/galette) + +*Galette* est une application web de gestion d’adhérents et de cotisations en ligne à destination des associations. C’est avant toute chose un logiciel libre, communautaire, et gratuit ! Galette fonctionne sur n’importe quel serveur web qui prend en charge PHP. + +### Mise à jour de l'application + +Une fois la mise à jour de l'application faite, vous devez vous rendre sur la page de l'installeur qui par défaut est de la forme `https://domaine/galette/installer.php`. + +Une fois sur cette page, une vérification des prérequis est affiché. +À l'étape suivante vous allez devoir choisir le type d'installation : ici `Mise à jour`. + +![Galette MAJ](https://github.com/YunoHost/doc/raw/master/images/Galette_1_fr_MAJ.png) + +C'est à cette nouvelle étape, où les champs sont pré-remplis, qu'il va falloir renseigner le mot de passe de la base de données. + +![Galette MdP](https://github.com/YunoHost/doc/raw/master/images/Galette_2_fr_MdP.png) + +Vous allez pouvoir le retrouver en vous connectant en SSH à votre serveur. Il faudra passer en root et afficher le fichier `config.inc.php` dans lequel se trouve le mot de passe de l'application : + +``` +sudo su + +cat /var/www/galette/galette/config/config.inc.php +``` + +## Liens utiles + ++ Site web : [galette.eu (fr)](https://galette.eu/site/fr/) ++ Démonstration : [Démo](https://demo.galette.eu/login) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/galette](https://github.com/YunoHost-Apps/galette_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/galette/issues](https://github.com/YunoHost-Apps/galette_ynh/issues) diff --git a/pages/04.applications/10.docs/galette/app_galette.md b/pages/04.applications/10.docs/galette/app_galette.md new file mode 100644 index 00000000..283a9443 --- /dev/null +++ b/pages/04.applications/10.docs/galette/app_galette.md @@ -0,0 +1,42 @@ +--- +title: Galette +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_galette' +--- + +![logo of Galette](https://galette.eu/site/assets/img/galette.png?resize=,80) + +[![Installer Galette avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=galette) [![Integration level](https://dash.yunohost.org/integration/galette.svg)](https://dash.yunohost.org/appci/app/galette) + +*Galette* is a membership management web application towards non profit organizations. This is before all a free software (as in free speech), community and free (as in beer)! Galette works on any web server that handle PHP. + +### Updating the application + +Once you have updated the application, you must go to the installer page which by default is `https://domaine/galette/installer.php`. + +Once on this page, a verification of the prerequisites is displayed. +At the next step you will have to choose the type of installation: here `Update`. + +![Galette Update](https://github.com/YunoHost/doc/raw/master/images/Galette_1_en_Update.png) + +It is at this new step, where the fields are pre-filled, that you will have to fill in the database password. + +![Galette Password](https://github.com/YunoHost/doc/raw/master/images/Galette_2_en_Passwd.png) + +You will be able to find it by connecting to your server with SSH. You will have to switch to `root` and display the `config.inc.php` file in which the application password is located: + +``` +sudo su + +cat /var/www/galette/galette/config/config.inc.php +``` + +## Useful links + ++ Website: [galette.eu (en)](https://galette.eu/site/) ++ Demonstration: [Démo](https://demo.galette.eu/login) ++ Application software repository: [github.com - YunoHost-Apps/galette](https://github.com/YunoHost-Apps/galette_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/galette/issues](https://github.com/YunoHost-Apps/galette_ynh/issues) diff --git a/pages/04.applications/10.docs/garradin/app_garradin.fr.md b/pages/04.applications/10.docs/garradin/app_garradin.fr.md new file mode 100644 index 00000000..4eccb6c0 --- /dev/null +++ b/pages/04.applications/10.docs/garradin/app_garradin.fr.md @@ -0,0 +1,33 @@ +--- +title: Garradin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_garradin' +--- + +![logo de Garradin](image://garradin_logo.svg?resize=,80) + +[![Install Garradin with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=garradin) [![Integration level](https://dash.yunohost.org/integration/garradin.svg)](https://dash.yunohost.org/appci/app/garradin) + +Garradin (mot signifiant argent dans un dialecte aborigène du nord de l'Australie, prononcé « gar-a-dine ») est un logiciel de gestion associative. Il est l'outil de prédilection pour gérer une association, un club sportif, une ONG, etc. Il est conçu pour répondre aux besoins d'une structure de petite à moyenne taille : gestion des adhérents, comptabilité, site Web, prise de notes en réunion, archivage et partage des documents de fonctionnement de l'association, discussion entre adhérents, etc.[¹](#sources) + +## Limitations avec YunoHost + +le système SSO n'est pas implémenté, ni l'installation directe. L'utilisateur admin devra créer son compte avec le formulaire de création de compte qu'il trouvera à la fin de l'installation. Plusieurs raisons m'ont poussé à ne pas implémenter le SSO. [Plus d'informations](https://github.com/YunoHost-Apps/garradin_ynh#probl%C3%A8mes--avertissements-) + +Applications disponible exclusivement en français. + +## Liens utiles + + + Site web : [garradin.eu](https://garradin.eu) + + Documentation officielle : [fossil.kd2.org - garradin](https://fossil.kd2.org/garradin/wiki?name=Garradin) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/garradin](https://github.com/YunoHost-Apps/garradin_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/garradin/issues](https://github.com/YunoHost-Apps/garradin_ynh/issues) + +------ + +### Sources + +¹ [garradin.eu - a-propos](https://garradin.eu/a-propos/) diff --git a/pages/04.applications/10.docs/garradin/app_garradin.md b/pages/04.applications/10.docs/garradin/app_garradin.md new file mode 100644 index 00000000..97557345 --- /dev/null +++ b/pages/04.applications/10.docs/garradin/app_garradin.md @@ -0,0 +1,33 @@ +--- +title: Garradin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_garradin' +--- + +![Garradin's logo](image://garradin_logo.svg?resize=,80) + +[![Install Garradin with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=garradin) [![Integration level](https://dash.yunohost.org/integration/garradin.svg)](https://dash.yunohost.org/appci/app/garradin) + +Garradin (a word meaning silver in an Aboriginal dialect of northern Australia, pronounced "gar-a-dine "em) is a software program for associative management. It is the tool of choice to manage an association, a sports club, an NGO, etc. It is designed to meet the needs of a small to medium-sized structure: membership management, accounting, website, note-taking at meetings, archiving and sharing of the association's operating documents, discussion between members, etc.¹](#sources) + +## Limitations with YunoHost + +the SSO system is not implemented, nor direct installation. The admin user will have to create his account with the account creation form that he will find at the end of the installation. Several reasons led me not to implement SSO. [More information (fr)](https://github.com/YunoHost-Apps/garradin_ynh#probl%C3%A8mes--avertissements-) + +Applications available exclusively in French. + +## Useful links + ++ Website: [garradin.eu (fr)](https://garradin.eu) ++ Official documentation: [fossil.kd2.org - garradin (fr)](https://fossil.kd2.org/garradin/wiki?name=Garradin) ++ Application software repository: [github.com - YunoHost-Apps/garradin](https://github.com/YunoHost-Apps/garradin_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/garradin/issues](https://github.com/YunoHost-Apps/garradin_ynh/issues) + +------ + +### Sources + +¹ [garradin.eu - a-propos (fr)](https://garradin.eu/a-propos/) diff --git a/pages/04.applications/10.docs/gemserv/app_gemserv.fr.md b/pages/04.applications/10.docs/gemserv/app_gemserv.fr.md new file mode 100644 index 00000000..d5f92d8e --- /dev/null +++ b/pages/04.applications/10.docs/gemserv/app_gemserv.fr.md @@ -0,0 +1,56 @@ +--- +title: Gemserv +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gemserv' +--- + +[![Installer Gemserv avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=gemserv) [![Integration level](https://dash.yunohost.org/integration/gemserv.svg)](https://dash.yunohost.org/appci/app/gemserv) + +*Gemserv* est un serveur Gemini écrit en Rust. + +### Avertissements / informations importantes + +Gemserv utilise le port TCP 1965, vous ne pourrez donc l'utiliser pour autre chose. + +Pour ajouter une capsule, créer le fichier de configuration `/etc/gemserv/config.d/example.toml` avec le contenu suivant : + +``` +[[server]] +hostname = "yourdomain.org" +dir = "/opt/yunohost/gemserv" +key = "/etc/yunohost/certs/yourdomain.org/key.pem" +cert = "/etc/yunohost/certs/yourdomain.org/crt.pem" +# index is optional but defaults to index.gemini. The server will serve files +# ending in gemini or gmi. +index = "index.gmi" +# lang is optional +lang = "en" +# cgi is optional bool +cgi = true +# cgipath is optional and only checked if cgi is true. It restricts cgi to only +# this directory. +cgipath = "/path/to/cgi-bin/" +# scgi is optional +scgi = { "/scgi" = "localhost:4000" } +# cgienv is optional +cgienv = { "GIT_PROJECT_ROOT" = "/srv/git" } +# usrdir is optional. it'll look in each user's ~/public_gemini +usrdir = true +# proxy is optional +# path is what comes after the hostname e.g. example.com/path +proxy = { path = "localhost:1966" } +# proxy_all is optional +# It will send all requests to the specified server. It also supports streamming. +proxy_all = "localhost:1967" +# redirect is optional +redirect = { "/redirect" = "/", "/newdomain" = "gemini://example.net" } +``` + +## Liens utiles + ++ Site web : [git.sr.ht/~int80h/gemserv](https://git.sr.ht/~int80h/gemserv) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/gemserv](https://github.com/YunoHost-Apps/gemserv_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/gemserv/issues](https://github.com/YunoHost-Apps/gemserv_ynh/issues) diff --git a/pages/04.applications/10.docs/gemserv/app_gemserv.md b/pages/04.applications/10.docs/gemserv/app_gemserv.md new file mode 100644 index 00000000..73a1cfeb --- /dev/null +++ b/pages/04.applications/10.docs/gemserv/app_gemserv.md @@ -0,0 +1,56 @@ +--- +title: Gemserv +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gemserv' +--- + +[![Installer Gemserv with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=gemserv) [![Integration level](https://dash.yunohost.org/integration/gemserv.svg)](https://dash.yunohost.org/appci/app/gemserv) + +*Gemserv* is a Gemini server written in Rust. + +### Disclaimers / important information + +Please note that Gemserv uses the TCP port 1965, so you can't use it for anything else. + +To add a Gemini capsule, create a `/etc/gemserv/config.d/example.toml` file as following: + +``` +[[server]] +hostname = "yourdomain.org" +dir = "/opt/yunohost/gemserv" +key = "/etc/yunohost/certs/yourdomain.org/key.pem" +cert = "/etc/yunohost/certs/yourdomain.org/crt.pem" +# index is optional but defaults to index.gemini. The server will serve files +# ending in gemini or gmi. +index = "index.gmi" +# lang is optional +lang = "en" +# cgi is optional bool +cgi = true +# cgipath is optional and only checked if cgi is true. It restricts cgi to only +# this directory. +cgipath = "/path/to/cgi-bin/" +# scgi is optional +scgi = { "/scgi" = "localhost:4000" } +# cgienv is optional +cgienv = { "GIT_PROJECT_ROOT" = "/srv/git" } +# usrdir is optional. it'll look in each user's ~/public_gemini +usrdir = true +# proxy is optional +# path is what comes after the hostname e.g. example.com/path +proxy = { path = "localhost:1966" } +# proxy_all is optional +# It will send all requests to the specified server. It also supports streamming. +proxy_all = "localhost:1967" +# redirect is optional +redirect = { "/redirect" = "/", "/newdomain" = "gemini://example.net" } +``` + +## Useful links + ++ Website: [git.sr.ht/~int80h/gemserv](https://git.sr.ht/~int80h/gemserv) ++ Application software repository: [github.com - YunoHost-Apps/gemserv](https://github.com/YunoHost-Apps/gemserv_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/gemserv/issues](https://github.com/YunoHost-Apps/gemserv_ynh/issues) diff --git a/pages/04.applications/10.docs/ghost/app_ghost.fr.md b/pages/04.applications/10.docs/ghost/app_ghost.fr.md new file mode 100644 index 00000000..e58b4a0a --- /dev/null +++ b/pages/04.applications/10.docs/ghost/app_ghost.fr.md @@ -0,0 +1,47 @@ +--- +title: Ghost +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ghost' +--- + +[![Installer Ghost avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=ghost) [![Integration level](https://dash.yunohost.org/integration/ghost.svg)](https://dash.yunohost.org/appci/app/ghost) + +*Ghost* est une plateforme d'édition, d'adhésions, d'abonnements et de newsletters. + +### Avertissements / informations importantes + +#### Installation + +1. Pas de prise en charge LDAP. + +2. Vous avez besoin de plus de 1 Go de RAM. Si vous ne l'avez pas, veuillez créer une mémoire swap. + +``` +dd if=/dev/zero of=/swapfile bs=1024 count=1048576 +mkswap /fichier d'échange +swapon / fichier d'échange +echo "/swapfile swap swap defaults 0 0" >> /etc/fstab +``` + +3. Cette application est multi-instance (vous pouvez avoir plusieurs sites Web de blogs Ghost sur un seul serveur YunoHost) + +##### Installation de l'application Ghost + +0. Remarque - Lorsque vous rendez l'installation publique, vous devez accéder à votre lien de domaine Ghost SANS vous connecter à votre session YunoHost. Il est recommandé d'utiliser un mode incognito pour vous connecter à votre compte administrateur Ghost. Si vous rendez votre installation publique et essayez de vous connecter à votre compte administrateur Ghost tout en étant connecté à votre session YunoHost, vous obtiendrez une erreur d'en-tête autorisée. La raison en est que Ghost a une fonctionnalité qui permet un accès au contenu basé sur un abonnement. Cela signifie que Ghost permet à l'utilisateur administrateur de configurer d'autres utilisateurs (soit d'autres membres du personnel, soit des abonnés payés/non payés) pour avoir la possibilité de se connecter en dehors de YunoHost. + +1. ** L'application peut être installée par l'interface d'administration YunoHost ou par la commande suivante : ** + +``` +sudo yunohost app install https://github.com/YunoHost-Apps/ghost_ynh +``` + +2. Après l'installation, créez un compte administrateur en visitant `https://domain.tld/ghost/ghost`. Si vous choisissez de nommer votre instance Ghost "blog" pendant le processus d'installation de YunoHost, alors ce sera "https://domain.tld/blog/ghost". Cela vous permettra de continuer à configurer votre compte administrateur et à configurer vos paramètres. + +## Liens utiles + ++ Site web : [ghost.org](https://ghost.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/ghost](https://github.com/YunoHost-Apps/ghost_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/ghost/issues](https://github.com/YunoHost-Apps/ghost_ynh/issues) diff --git a/pages/04.applications/10.docs/ghost/app_ghost.md b/pages/04.applications/10.docs/ghost/app_ghost.md new file mode 100644 index 00000000..0fc0c441 --- /dev/null +++ b/pages/04.applications/10.docs/ghost/app_ghost.md @@ -0,0 +1,47 @@ +--- +title: Ghost +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ghost' +--- + +[![Installer Ghost with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=ghost) [![Integration level](https://dash.yunohost.org/integration/ghost.svg)](https://dash.yunohost.org/appci/app/ghost) + +*Ghost* is a publishing, memberships, subscriptions and newsletters platform. + +### Disclaimers / important information + +#### Installation + +1. No LDAP support. + +2. You need more than 1GB of ram. If you don't have it, please create a swap memory. + +``` +dd if=/dev/zero of=/swapfile bs=1024 count=1048576 +mkswap /swapfile +swapon /swapfile +echo "/swapfile swap swap defaults 0 0" >> /etc/fstab +``` + +3. This app is multi-instance (you can have more than one Ghost blogging websites on a single YunoHost server) + +##### Installing the Ghost app + +0. Note - When making the install public, your Ghost domain link must be accessed WHILE NOT signed into your YunoHost session. It is recommended to use a incognito mode to sign into your Ghost admin account. If you make your install public, and try to login your Ghost admin account while signed into your YunoHost session, you will get a an authorized header error. The reason for this is because Ghost has a feature that allows for a subscription based access for content. This means Ghost allows for the admin user to setup other users (either other staff or paid/unpaid subscribers) to have the abilility to login outside of YunoHost. + +1. App can be installed by YunoHost admin interface or by the following command: + +``` +sudo yunohost app install https://github.com/YunoHost-Apps/ghost_ynh +``` + +2. After installation create an admin account by visiting `https://domain.tld/ghost/ghost`. If you choose to name your Ghost instance "blog" during YunoHost setup process, then it would be https://domain.tld/blog/ghost. This will allow you to continue to setup your admin account and configure your settings. + +## Useful links + ++ Website: [ghost.org](https://ghost.org/) ++ Application software repository: [github.com - YunoHost-Apps/ghost](https://github.com/YunoHost-Apps/ghost_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/ghost/issues](https://github.com/YunoHost-Apps/ghost_ynh/issues) diff --git a/pages/04.applications/10.docs/gitea/app_gitea.fr.md b/pages/04.applications/10.docs/gitea/app_gitea.fr.md new file mode 100644 index 00000000..ce24da56 --- /dev/null +++ b/pages/04.applications/10.docs/gitea/app_gitea.fr.md @@ -0,0 +1,39 @@ +--- +title: Gitea +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitea' +--- + +![logo de Gitea](image://gitea_logo.png?width=80) + +[![Install Gitea with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=gitea) [![Integration level](https://dash.yunohost.org/integration/gitea.svg)](https://dash.yunohost.org/appci/app/gitea) + +Gitea est un service Git auto-hébergé très simple à installer et à utiliser. Il est similaire à GitHub, Bitbucket ou GitLab. Le développement initial provient sur Gogs, mais il a été forké puis renommé Gitea.[¹](#sources) + +## Limitations avec YunoHost + +Si vous voulez utiliser les commandes Git (comme `git clone`, `git pull`, `git push`), vous devez rendre cette application publique. + +## Applications clientes + +| Nom de l'application [²] | Plateforme | Multi-comptes | Source | Play Store | F-Droid | Apple Store | +|:------------------------:|:----------:|:-------------:|:------:|:----------:|:-------:|:-----------:| +| GitNex (no) | Android | ? | [gitnex.com (en)](https://gitnex.com/) | [GitNex - PlayStore](https://play.google.com/store/apps/details?id=org.mian.gitnex) | [GitNex - F-Droid](https://f-droid.org/fr/packages/org.mian.gitnex/) | X | + +> [²]: (of) : Officielle / (no) : non officiel + +## Liens utiles + + + Site web : [gitea.io (en)](https://gitea.io/en-us/) + + Documentation officielle : [docs.gitea.io](https://docs.gitea.io/fr-fr/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/gitea](https://github.com/YunoHost-Apps/gitea_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/gitea/issues](https://github.com/YunoHost-Apps/gitea_ynh/issues) + +------ + +### Sources + +¹ [docs.gitea.io](https://docs.gitea.io/fr-fr/) diff --git a/pages/04.applications/10.docs/gitea/app_gitea.md b/pages/04.applications/10.docs/gitea/app_gitea.md new file mode 100644 index 00000000..69fa9344 --- /dev/null +++ b/pages/04.applications/10.docs/gitea/app_gitea.md @@ -0,0 +1,39 @@ +--- +title: Gitea +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitea' +--- + +![Gitea's logo](image://gitea_logo.png?width=80) + +[![Install Gitea with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=gitea) [![Integration level](https://dash.yunohost.org/integration/gitea.svg)](https://dash.yunohost.org/appci/app/gitea) + +Gitea is a painless self-hosted Git service. It is similar to GitHub, Bitbucket, and GitLab. Gitea is a fork of Gogs.[¹](#sources) + +## Limitations with YunoHost + +If you want to use Git commands (like `git clone`, `git pull`, `git push`), you need to set this app as public. + +## Customer applications + +| Application name [²] | Platform | Multi-account |Source | Play Store | F-Droid | Apple Store | +|----------------------|----------|---------------|-------|------------|---------|-------------| +| GitNex (un) | Android | ? | [gitnex.com (en)](https://gitnex.com/) | [GitNex - PlayStore](https://play.google.com/store/apps/details?id=org.mian.gitnex) | [GitNex - F-Droid](https://f-droid.org/fr/packages/org.mian.gitnex/) | X | + +> [²]: (of) : Official / (un) : Unofficial + +## Useful links + ++ Website: [gitea.io](https://gitea.io/en-us/) ++ Official documentation: [docs.gitea.io](https://docs.gitea.io/en-us/) ++ Application software repository: [github.com - YunoHost-Apps/gitea](https://github.com/YunoHost-Apps/gitea_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/gitea/issues](https://github.com/YunoHost-Apps/gitea_ynh/issues) + +------ + +### Sources + +¹ [docs.gitea.io](https://docs.gitea.io/en-us/) diff --git a/pages/04.applications/10.docs/gitlab-runner/app_gitlab-runner.fr.md b/pages/04.applications/10.docs/gitlab-runner/app_gitlab-runner.fr.md new file mode 100644 index 00000000..4b943c17 --- /dev/null +++ b/pages/04.applications/10.docs/gitlab-runner/app_gitlab-runner.fr.md @@ -0,0 +1,24 @@ +--- +title: Gitlab Runner +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitlab-runner' +--- + +![logo de GitLab Runner](image://gitlab-runner_logo.png?height=80) + +[![Install GitLab Runner with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=gitlab-runner) [![Integration level](https://dash.yunohost.org/integration/gitlab-runner.svg)](https://dash.yunohost.org/appci/app/gitlab-runner) + +GitLab Runner est un outil d'intégration continue à utiliser avec une instance GitLab (YNH ou non). + +## Configuration + +Via le panneau d'administration de GitLab ou les paramettres "CI/CD" de votre projet. + +## Liens utiles + + + Documentation officielle : [docs.gitlab.com - runner (en)](https://docs.gitlab.com/runner/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/gitlab-runner](https://github.com/YunoHost-Apps/gitlab-runner_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/gitlab-runner/issues](https://github.com/YunoHost-Apps/gitlab-runner_ynh/issues) diff --git a/pages/04.applications/10.docs/gitlab-runner/app_gitlab-runner.md b/pages/04.applications/10.docs/gitlab-runner/app_gitlab-runner.md new file mode 100644 index 00000000..2b3b559a --- /dev/null +++ b/pages/04.applications/10.docs/gitlab-runner/app_gitlab-runner.md @@ -0,0 +1,24 @@ +--- +title: Gitlab Runner +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitlab-runner' +--- + +![GitLab Runner's logo](image://gitlab-runner_logo.png?height=80) + +[![Install GitLab Runner with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=gitlab-runner) [![Integration level](https://dash.yunohost.org/integration/gitlab-runner.svg)](https://dash.yunohost.org/appci/app/gitlab-runner) + +GitLab Runner is a continuous integration tool to use with a GitLab instance (YNH or not). + +## Configuration + +By the admin panel of GitLab or the settings "CI/CD" of your project. + +## Useful links + ++ Official documentation: [docs.gitlab.com - runner](https://docs.gitlab.com/runner/) ++ Application software repository: [github.com - YunoHost-Apps/APPLICATION](https://github.com/YunoHost-Apps/gitlab-runner_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/APPLICATION/issues](https://github.com/YunoHost-Apps/gitlab-runner_ynh/issues) diff --git a/pages/04.applications/10.docs/gitlab/app_gitlab.fr.md b/pages/04.applications/10.docs/gitlab/app_gitlab.fr.md new file mode 100644 index 00000000..2bb07183 --- /dev/null +++ b/pages/04.applications/10.docs/gitlab/app_gitlab.fr.md @@ -0,0 +1,37 @@ +--- +title: Gitlab +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitlab' +--- + +![logo de GitLab](image://gitlab_logo.svg?resize=,80) + +[![Install GitLab with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=gitlab) [![Integration level](https://dash.yunohost.org/integration/gitlab.svg)](https://dash.yunohost.org/appci/app/gitlab) + +GitLab est une forge logicielle très complète dont le développement est très dynamique (une nouvelle version sort tous les 22 du mois). Elle permet d'héberger des projets collaboratifs utilisant Git ainsi que gérer des discussions, des rapports de bugs et la documentation... GitLab est un logiciel open source qui existe deux versions, une version communautaire libre et une version entreprise propriétaire possédant plus de fonctionnalités.[¹](#sources) + +## Limitations avec YunoHost + +L'application GitLab n'est pas compatible avec les architectures 32-bit. + +## Applications clientes + +| Nom de l'applications | Plateforme | Multi-comptes | Play Store | F-Droid | Apple Store | +|:---------------------:|:----------:|:-------------:|:----------:|:-------:|:-----------:| +| LabCoat avec Deep Links for LabCoat | Android | ? | [play.google.com - LabCoat](https://play.google.com/store/apps/details?id=com.commit451.gitlab) / [play.google.com - Deep Links for LabCoat](https://play.google.com/store/apps/details?id=com.nomadlabs.labcoat.deeplinks) | [f-droid.org - LabCoat](https://f-droid.org/fr/packages/com.commit451.gitlab/) / [f-droid.org - Deep Links for LabCoat](https://f-droid.org/fr/packages/com.nomadlabs.labcoat.deeplinks/) | | + +## Liens utiles + ++ Site web : [about.gitlab.com (en)](https://about.gitlab.com/) ++ Documentation officielle : [docs.gitlab.com (en)](https://docs.gitlab.com/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/gitlab](https://github.com/YunoHost-Apps/gitlab_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/gitlab/issues](https://github.com/YunoHost-Apps/gitlab_ynh/issues) + +------ + +### Sources + +¹ [framalibre.org - GitLab](https://framalibre.org/content/gitlab) diff --git a/pages/04.applications/10.docs/gitlab/app_gitlab.md b/pages/04.applications/10.docs/gitlab/app_gitlab.md new file mode 100644 index 00000000..4cf039d6 --- /dev/null +++ b/pages/04.applications/10.docs/gitlab/app_gitlab.md @@ -0,0 +1,37 @@ +--- +title: Gitlab +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitlab' +--- + +![GitLab's logo](image://gitlab_logo.svg?resize=,80) + +[![Install GitLab with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=gitlab) [![Integration level](https://dash.yunohost.org/integration/gitlab.svg)](https://dash.yunohost.org/appci/app/gitlab) + +GitLab is a Git web app forge very complete whith a dynamic development (a new version is released every 22nd of the month). GitLab is an open core software with two versions: A free community version and a proprietary enterprise version with more features. [¹](#sources) + +## Limitations with YunoHost + +The GitLab application is not compatible with 32-bit architectures. + +## Customer applications + +| Application name | Platform | Multi-account | Play Store | F-Droid | Apple Store | +|:----------------:|:--------:|:-------------:|:----------:|:-------:|:-----------:| +| LabCoat avec Deep Links for LabCoat | Android | ? | [play.google.com - LabCoat](https://play.google.com/store/apps/details?id=com.commit451.gitlab) / [play.google.com - Deep Links for LabCoat](https://play.google.com/store/apps/details?id=com.nomadlabs.labcoat.deeplinks) | [f-droid.org - LabCoat](https://f-droid.org/fr/packages/com.commit451.gitlab/) / [f-droid.org - Deep Links for LabCoat](https://f-droid.org/fr/packages/com.nomadlabs.labcoat.deeplinks/) | ? | + +## Useful links + ++ Website: [about.gitlab.com](https://about.gitlab.com/) ++ Official documentation: [docs.gitlab.com](https://docs.gitlab.com/) ++ Application software repository: [github.com - YunoHost-Apps/gitlab](https://github.com/YunoHost-Apps/gitlab_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com -YunoHost-Apps/gitlab/issues](https://github.com/YunoHost-Apps/gitlab_ynh/issues) + +------ + +### Sources + +¹ [framalibre.org - GitLab (fr)](https://framalibre.org/content/gitlab) diff --git a/pages/04.applications/10.docs/glowing_bear/app_glowing_bear.fr.md b/pages/04.applications/10.docs/glowing_bear/app_glowing_bear.fr.md new file mode 100644 index 00000000..cf5f2963 --- /dev/null +++ b/pages/04.applications/10.docs/glowing_bear/app_glowing_bear.fr.md @@ -0,0 +1,27 @@ +--- +title: Glowing Bear +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_glowing_bear' +--- + +![logo de Glowing Bear](image://glowing_bear_logo.svg?resize=,80) + +[![Install Glowing Bear with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=glowingbear) [![Integration level](https://dash.yunohost.org/integration/glowingbear.svg)](https://dash.yunohost.org/appci/app/glowingbear) + +Glowing Bear est un frontal web pour le client IRC WeeChat et s'efforce d'être une interface moderne. Il s'appuie sur WeeChat pour faire le gros du travail et offre en plus quelques fonctionnalités intéressantes, comme l'intégration d'images, de vidéos et d'autres contenus. Mais le meilleur, c'est que vous pouvez l'utiliser à partir de n'importe quel appareil Internet moderne - qu'il s'agisse d'un ordinateur, d'une tablette ou d'un smartphone - et que toutes vos affaires sont là, où que vous soyez. Vous n'avez pas à vous préoccuper des détails techniques compliqués, et tout ce qu'il vous faut, c'est un navigateur ou notre application.[¹](#sources) + +## Liens utiles + + + Site web : [www.glowing-bear.org](https://www.glowing-bear.org/) + + Documentation officielle : [github.com - glowing-bear/glowing-bear (en)](https://github.com/glowing-bear/glowing-bear) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/glowing_bear](https://github.com/YunoHost-Apps/glowing_bear_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/glowing_bear/issues](https://github.com/YunoHost-Apps/glowing_bear_ynh/issues) + +------ + +### Sources + +¹ [github.com - glowing-bear/glowing-bear (en)](https://github.com/glowing-bear/glowing-bear) diff --git a/pages/04.applications/10.docs/glowing_bear/app_glowing_bear.md b/pages/04.applications/10.docs/glowing_bear/app_glowing_bear.md new file mode 100644 index 00000000..ddb95928 --- /dev/null +++ b/pages/04.applications/10.docs/glowing_bear/app_glowing_bear.md @@ -0,0 +1,27 @@ +--- +title: Glowing Bear +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_glowing_bear' +--- + +![Glowing Bear's logo](image://glowing_bear_logo.svg?resize=,80) + +[![Install Glowing Bear with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=glowingbear) [![Integration level](https://dash.yunohost.org/integration/glowingbear.svg)](https://dash.yunohost.org/appci/app/glowingbear) + +Glowing Bear is a web frontend for the WeeChat IRC client and strives to be a modern interface. It relies on WeeChat to do all the heavy lifting and then provides some nice features on top of that, like embedding images, videos, and other content. The best part, however, is that you can use it from any modern internet device - whether it's a computer, tablet, or smart phone - and all your stuff is there, wherever you are. You don't have to deal with the messy technical details, and all you need to have installed is a browser or our app.[¹](#sources) + +## Useful links + ++ Website: [www.glowing-bear.org](https://www.glowing-bear.org/) ++ Official documentation: [github.com - glowing-bear/glowing-bear](https://github.com/glowing-bear/glowing-bear) ++ Application software repository: [github.com - YunoHost-Apps/glowing_bear](https://github.com/YunoHost-Apps/glowing_bear_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/glowing_bear/issues](https://github.com/YunoHost-Apps/glowing_bear_ynh/issues) + +------ + +### Sources + +¹ [github.com - glowing-bear/glowing-bear](https://github.com/glowing-bear/glowing-bear) diff --git a/pages/04.applications/10.docs/gogs/app_gogs.fr.md b/pages/04.applications/10.docs/gogs/app_gogs.fr.md new file mode 100644 index 00000000..e6454d4b --- /dev/null +++ b/pages/04.applications/10.docs/gogs/app_gogs.fr.md @@ -0,0 +1,22 @@ +--- +title: Gogs +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gogs' +--- + +![logo de Gogs](image://gogs_logo.svg?resize=,80) + +[![Installer Gogs avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=gogs) [![Integration level](https://dash.yunohost.org/integration/gogs.svg)](https://dash.yunohost.org/appci/app/gogs) + +Gogs est une forge logiciel minimaliste utilisant Git. Gogs a été conçu pour pouvoir fonctionner de manières optimale sur du matériel peu puissant type Raspberry Pi. Il est donc adapté à l'auto-hébergement d'une forge Git. +Pour utiliser pleinement la puissance de Gogs vous devez avoir appréhender ce qu'est Git et l'utilisation d'un [logiciel de gestion de versions](https://fr.wikipedia.org/wiki/Logiciel_de_gestion_de_versions). + +## Liens utiles + + + Site web : [gogs.io](https://gogs.io) + + Documentation officielle : [gogs.io - docs](https://gogs.io/docs) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/gogs](https://github.com/YunoHost-Apps/gogs_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/gogs/issues](https://github.com/YunoHost-Apps/gogs_ynh/issues) diff --git a/pages/04.applications/10.docs/gogs/app_gogs.md b/pages/04.applications/10.docs/gogs/app_gogs.md new file mode 100644 index 00000000..b239b47d --- /dev/null +++ b/pages/04.applications/10.docs/gogs/app_gogs.md @@ -0,0 +1,23 @@ +--- +title: Gogs +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gogs' +--- + +![Gogs's logo](image://gogs_logo.svg?resize=,80) + +[![Install Gogs with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=gogs) [![Integration level](https://dash.yunohost.org/integration/gogs.svg)](https://dash.yunohost.org/appci/app/gogs) + +Gogs is a minimalist software forge using Git. Gogs has been designed to work best on low-powered hardware such as Raspberry Pi. +It is therefore suitable for self-hosting a Git forge. +To fully use the power of Gogs you need to understand what Git is and how to use version control software. + +## Useful links + ++ Website: [gogs.io](https://gogs.io/) ++ Official documentation: [gogs.io - docs](https://gogs.io/docs) ++ Application software repository: [github.com - YunoHost-Apps/gogs](https://github.com/YunoHost-Apps/gogs_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/gogs/issues](https://github.com/YunoHost-Apps/gogs_ynh/issues) diff --git a/pages/04.applications/10.docs/gotify/app_gotify.fr.md b/pages/04.applications/10.docs/gotify/app_gotify.fr.md new file mode 100644 index 00000000..c2ea3557 --- /dev/null +++ b/pages/04.applications/10.docs/gotify/app_gotify.fr.md @@ -0,0 +1,38 @@ +--- +title: Gotify +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gotify' +--- + +![logo de Gotify](image://gotify_logo.png?width=80) + +[![Install Gotify with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=gotify) [![Integration level](https://dash.yunohost.org/integration/gotify.svg)](https://dash.yunohost.org/appci/app/gotify) + +Un simple serveur pour envoyer et recevoir des messages. + +## Configuration + +Editer le fichier config.yml via SSH. + +## Limitations avec YunoHost + +Exiger un domaine dédié comme gotify.domain.tld. +Pas de support LDAP (bloqué jusqu'à ce que le noyau Gotify en amont le mette en œuvre) + +## Applications clientes + +| Nom de l'application¹ | Plateforme | Multi-comptes | Play Store | F-Droid | Apple Store | +|:----------------------:|:----------:|:-------------:|:-----------:|:-------:|:-----------:| +| Gotify (of) | Android | ? | [play.google.com - Gotify](https://play.google.com/store/apps/details?id=com.github.gotify) | [f-droid.org - Gotify](https://f-droid.org/de/packages/com.github.gotify/) | X | + +> ¹ (of) : Officielle / (no) : non officiel + +## Liens utiles + + + Site web : [gotify.net (en)](https://gotify.net/) + + Documentation officielle : [gotify.net - docs (en)](https://gotify.net/docs/index) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/gotify](https://github.com/YunoHost-Apps/gotify_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/gotify/issues](https://github.com/YunoHost-Apps/gotify_ynh/issues) diff --git a/pages/04.applications/10.docs/gotify/app_gotify.md b/pages/04.applications/10.docs/gotify/app_gotify.md new file mode 100644 index 00000000..232c1133 --- /dev/null +++ b/pages/04.applications/10.docs/gotify/app_gotify.md @@ -0,0 +1,38 @@ +--- +title: Gotify +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gotify' +--- + +![Gotify's logo](image://gotify_logo.png?width=80) + +[![Install Gotify with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=gotify) [![Integration level](https://dash.yunohost.org/integration/gotify.svg)](https://dash.yunohost.org/appci/app/gotify) + +A simple server for sending and receiving messages. + +## Configuration + +Edit config.yml file via SSH. + +## Limitations with YunoHost + +Require dedicated domain like gotify.domain.tld. +No LDAP support (blocked until Gotify core upstream implements it) + +## Customer applications + +| Application name¹ | Platform | Multi-account | Play Store | F-Droid | Apple Store | +|:--------------------:|:--------:|:-------------:|:----------:|:-------:|:-----------:| +| Gotify (of) | Android | ? | [play.google.com - Gotify](https://play.google.com/store/apps/details?id=com.github.gotify) | [f-droid.org - Gotify](https://f-droid.org/de/packages/com.github.gotify/) | X | + +> ¹ (of) : Official / (un) : Unofficial + +## Useful links + ++ Website: [gotify.net](https://gotify.net/) ++ Official documentation: [https://gotify.net/docs/index](https://gotify.net/docs/index) ++ Application software repository: [github.com - YunoHost-Apps/gotify](https://github.com/YunoHost-Apps/gotify_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/gotify/issues](https://github.com/YunoHost-Apps/gotify_ynh/issues) diff --git a/pages/04.applications/10.docs/grafana/app_grafana.fr.md b/pages/04.applications/10.docs/grafana/app_grafana.fr.md new file mode 100644 index 00000000..07bc2c5b --- /dev/null +++ b/pages/04.applications/10.docs/grafana/app_grafana.fr.md @@ -0,0 +1,51 @@ +--- +title: Grafana +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_grafana' +--- + +[![Installer Grafana avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=grafana) [![Integration level](https://dash.yunohost.org/integration/grafana.svg)](https://dash.yunohost.org/appci/app/grafana) + +*Grafana* est un tableaux de bord de supervision. + +### Captures d'écran + +![Capture d'écran de Grafana](https://github.com/YunoHost-Apps/grafana_ynh/blob/master/doc/screenshots/Grafana8_Kubernetes.jpg) + +### Avertissements / informations importantes + +#### Configuration + +**Important lors de la première connexion :** + +* vous devez aller dans le menu Grafana (icône Grafana), sélectionner le menu de votre compte et sélectionner Switch to Main Org. +* vous pouvez maintenant accéder au tableau de bord NetData par défaut via le menu Accueil + +**N'hésitez pas à créer de nouveaux tableaux de bord** : le tableau de bord par défaut contient des métriques de NetData, mais uniquement des métriques génériques qui sont générées sur chaque machine. NetData détecte dynamiquement les services et applications (par exemple Redis, NGINX, etc.) et enrichit son tableau de bord et les métriques générées. De nombreuses métriques NetData n'apparaissent pas dans le tableau de bord Grafana fourni par défaut ! + +### Caractéristiques spécifiques à YunoHost + +* installe InfluxDB comme base de données de séries chronologiques +* si le paquet NetData est installé, il est configuré pour qu'il alimente InfluxDB toutes les minutes +* installe Grafana comme serveur de tableaux de bord +* crée une source de données Grafana pour récupérer les données d'InfluxDB (et donc de NetData !) +* crée un tableau de bord par défaut pour tracer certaines données de NetData (il ne couvre pas toutes les métriques, il peut être considérablement amélioré !) + +**Architecture générale** + +![image](https://cloud.githubusercontent.com/assets/2662304/20649711/29f182ba-b4ce-11e6-97c8-ab2c0ab59833.png) + +#### Limitations + +* Le tableau de bord par défaut peut être mis à jour dans une prochaine version de ce paquet, alors assurez-vous de créer vos propres tableaux de bord ! +* La création d'organisations ne fonctionne pas bien avec l'intégration LDAP ; elle est désactivée pour les utilisateurs standard, mais ne peut pas être désactivée pour les administrateurs : **veuillez ne pas créer d'organisations !** + +## Liens utiles + ++ Site web : [grafana.com](https://grafana.com/) ++ Démonstration : [Démo](https://demo.grafana.eu/login) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/grafana](https://github.com/YunoHost-Apps/grafana_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/grafana/issues](https://github.com/YunoHost-Apps/grafana_ynh/issues) diff --git a/pages/04.applications/10.docs/grafana/app_grafana.md b/pages/04.applications/10.docs/grafana/app_grafana.md new file mode 100644 index 00000000..d61909e9 --- /dev/null +++ b/pages/04.applications/10.docs/grafana/app_grafana.md @@ -0,0 +1,51 @@ +--- +title: Grafana +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_grafana' +--- + +[![Installer Grafana with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=grafana) [![Integration level](https://dash.yunohost.org/integration/grafana.svg)](https://dash.yunohost.org/appci/app/grafana) + +*Grafana* is a metric & analytic dashboards for monitoring. + +### Screenshots + +![Screenshots Grafana](https://github.com/YunoHost-Apps/grafana_ynh/blob/master/doc/screenshots/Grafana8_Kubernetes.jpg) + +### Avertissements / informations importantes + +#### Configuration + +**Important at first login:** + +* you have to go the Grafana Menu (Grafana icon), select your account menu and select Switch to Main Org. +* you can now access the default NetData dashboard via the Home menu + +**Don't hesitate to create new dashboards**: the default dashboard contains metrics from NetData, but only generic ones that are generated on every machine. NetData dynamically detects services and applications (e.g. Redis, NGINX, etc.) and enriches its dashboard and generated metrics. Many NetData metrics don't appear in the provided default Grafana dashboard! + +### YunoHost specific features + +* installs InfluxDB as time series database +* if the NetData package is installed, configures NetData to feed InfluxDB every minute +* installs Grafana as dashboard server +* creates a Grafana Data Source to fetch data from InfluxDB (and hence NetData!) +* creates a default dashboard to plot some data from NetData (doesn't cover every metric, can be greatly enhanced!) + +**General architecture** + +![image](https://cloud.githubusercontent.com/assets/2662304/20649711/29f182ba-b4ce-11e6-97c8-ab2c0ab59833.png) + +#### Limitations + +* The default dashboard may be updated in a further release of this package, so please make sure you create your own dashboards! +* Organizations creation doesn't play well with LDAP integration; it is disabled for standard users, but can't be disabled for administrators: **please do not create organizations!** + +## Useful links + ++ Website: [grafana.com](https://grafana.com/) ++ Demonstration: [Demo](https://play.grafana.org/) ++ Application software repository: [github.com - YunoHost-Apps/grafana](https://github.com/YunoHost-Apps/grafana_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/grafana/issues](https://github.com/YunoHost-Apps/grafana_ynh/issues) diff --git a/pages/04.applications/10.docs/grav/app_grav.fr.md b/pages/04.applications/10.docs/grav/app_grav.fr.md new file mode 100644 index 00000000..06095196 --- /dev/null +++ b/pages/04.applications/10.docs/grav/app_grav.fr.md @@ -0,0 +1,27 @@ +--- +title: Grav +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_grav' +--- + +![logo de Grav](image://grav_logo.png?width=80) + +[![Install Grav with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=grav) [![Integration level](https://dash.yunohost.org/integration/grav.svg)](https://dash.yunohost.org/appci/app/grav) + +Grav est une plateforme Web rapide, simple et flexible, basée sur des fichiers. Aucune installation n'est nécessaire. Il suffit d'extraire l'archive ZIP, et vous êtes déjà opérationnel. Il suit des principes similaires à ceux des autres plates-formes CMS à fichiers plats, mais sa philosophie de conception est différente de la plupart des autres. Grav est livré avec un puissant système de gestion des paquets qui permet une installation et une mise à jour simples des plugins et des thèmes, ainsi qu'une mise à jour simple de Grav lui-même.[¹](#sources) + +## Liens utiles + + + Site web : [getgrav.org (en)](https://getgrav.org/) + + Documentation officielle : [learn.getgrav.org (en)](https://learn.getgrav.org/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/grav](https://github.com/YunoHost-Apps/grav_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/grav/issues](https://github.com/YunoHost-Apps/grav_ynh/issues) + +------ + +### Sources + +¹ [github.com - getgrav/grav (en)](https://github.com/getgrav/grav) diff --git a/pages/04.applications/10.docs/grav/app_grav.md b/pages/04.applications/10.docs/grav/app_grav.md new file mode 100644 index 00000000..7887620f --- /dev/null +++ b/pages/04.applications/10.docs/grav/app_grav.md @@ -0,0 +1,27 @@ +--- +title: Grav +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_grav' +--- + +![Grav's logo](image://grav_logo.png?width=80) + +[![Install Grav with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=grav) [![Integration level](https://dash.yunohost.org/integration/grav.svg)](https://dash.yunohost.org/appci/app/grav) + +Grav is a Fast, Simple, and Flexible, file-based Web-platform. There is Zero installation required. Just extract the ZIP archive, and you are already up and running. It follows similar principles to other flat-file CMS platforms, but has a different design philosophy than most. Grav comes with a powerful Package Management System to allow for simple installation and upgrading of plugins and themes, as well as simple updating of Grav itself.[¹](#sources) + +## Useful links + ++ Website: [getgrav.org](https://getgrav.org/) ++ Official documentation: [learn.getgrav.org](https://learn.getgrav.org/) ++ Application software repository: [github.com - YunoHost-Apps/grav](https://github.com/YunoHost-Apps/grav_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/grav/issues](https://github.com/YunoHost-Apps/grav_ynh/issues) + +------ + +### Sources + +¹ [github.com - getgrav/grav](https://github.com/getgrav/grav) diff --git a/pages/04.applications/10.docs/grocy/app_grocy.md b/pages/04.applications/10.docs/grocy/app_grocy.md new file mode 100644 index 00000000..6a1630b0 --- /dev/null +++ b/pages/04.applications/10.docs/grocy/app_grocy.md @@ -0,0 +1,31 @@ +--- +title: Grocy +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_grocy' +--- + +![grocy's logo](image://grocy-logo.png?resize=100) + + +[![Install Grocy with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=grocy) +[![Integration level](https://dash.yunohost.org/integration/grocy.svg)](https://dash.yunohost.org/appci/app/grocy) + +*Grocy* is a web-based self-hosted groceries & household management solution for your home. + +## Configuration + + Default login +``` + user: admin + password: admin +``` + +## Useful links + +* Official app website: [https://grocy.info/](https://grocy.info/) +* Upstream app code repository: https://github.com/grocy/grocy +* Demo: [https://en.demo.grocy.info/stockoverview](https://en.demo.grocy.info/stockoverview) +* Report a bug: [https://github.com/YunoHost-Apps/grocy_ynh/issues](https://github.com/YunoHost-Apps/grocy_ynh/issues) diff --git a/pages/04.applications/10.docs/guacamole/app_guacamole.fr.md b/pages/04.applications/10.docs/guacamole/app_guacamole.fr.md new file mode 100644 index 00000000..ac03bb2d --- /dev/null +++ b/pages/04.applications/10.docs/guacamole/app_guacamole.fr.md @@ -0,0 +1,28 @@ +--- +title: Guacamole +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_guacamole' +--- + +[![Installer Guacamole avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=guacamole) [![Integration level](https://dash.yunohost.org/integration/guacamole.svg)](https://dash.yunohost.org/appci/app/guacamole) + +*Guacamole* est un service de bureau à distance sans client. Fonctionne avec des protocoles standard comme VNC, RDP, et SSH. + +### Captures d'écran + +![Capture d'écran de Guacamole](https://github.com/YunoHost-Apps/guacamole_ynh/blob/master/doc/screenshots/screenshot1.jpg) + +### Avertissements / informations importantes + +#### Configuration + +L'utilisateur choisi comme admin durant le processus d'installation aura accès au paramétres d'administration dans le menu de configuration de l'application (sous le menu utilisateur). Le fichiers de configuration sont dans `/opt/yunohost/guacamole/etc/guacamole` (pour la première installation). + +## Liens utiles + ++ Site web : [guacamole.apache.org](https://guacamole.apache.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/guacamole](https://github.com/YunoHost-Apps/guacamole_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/guacamole/issues](https://github.com/YunoHost-Apps/guacamole_ynh/issues) diff --git a/pages/04.applications/10.docs/guacamole/app_guacamole.md b/pages/04.applications/10.docs/guacamole/app_guacamole.md new file mode 100644 index 00000000..5181aa1a --- /dev/null +++ b/pages/04.applications/10.docs/guacamole/app_guacamole.md @@ -0,0 +1,28 @@ +--- +title: Guacamole +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_guacamole' +--- + +[![Installer Guacamole with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=guacamole) [![Integration level](https://dash.yunohost.org/integration/guacamole.svg)](https://dash.yunohost.org/appci/app/guacamole) + +*Guacamole* is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH. + +### Screenshots + +![Screenshots Guacamole](https://github.com/YunoHost-Apps/guacamole_ynh/blob/master/doc/screenshots/screenshot1.jpg) + +### Disclaimers / important information + +#### Configuration + +The user that is configured as admin during install will have access to admin settings in the settings menu of the app (under the user menu). Configuration files are in `/opt/yunohost/guacamole/etc/guacamole` (for the first install). + +## Useful links + ++ Website: [guacamole.apache.org](https://guacamole.apache.org/) ++ Application software repository: [github.com - YunoHost-Apps/guacamole](https://github.com/YunoHost-Apps/guacamole_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/guacamole/issues](https://github.com/YunoHost-Apps/guacamole_ynh/issues) diff --git a/pages/04.applications/10.docs/h5ai/app_h5ai.fr.md b/pages/04.applications/10.docs/h5ai/app_h5ai.fr.md new file mode 100644 index 00000000..699d9aca --- /dev/null +++ b/pages/04.applications/10.docs/h5ai/app_h5ai.fr.md @@ -0,0 +1,26 @@ +--- +title: h5ai +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_h5ai' +--- + +[![Installer h5ai avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=h5ai) [![Integration level](https://dash.yunohost.org/integration/h5ai.svg)](https://dash.yunohost.org/appci/app/h5ai) + +*h5ai* est un serveur moderne d'index pour NGINX. + +### Avertissements / informations importantes + +#### Configuration + +Après avoir installé l'application, vous pouvez ajouter des documents dans `/var/www/documents` (ou le chemin correspondant que vous avez choisi). +h5ai ne permet pas de modifier ou de télécharger de nouveaux documents directement à partir du navigateur Web. Vous pouvez imaginer coupler le dossier `/var/www/documents` à Nextcloud ou un FTP pour permettre à certains utilisateurs de télécharger du contenu et d'utiliser h5ai comme interface publique en lecture seule. +Le fichier de configuration principal est `_h5ai/private/conf/options.json`. Vous souhaiterez peut-être modifier certains des paramètres documentés. Mais il y a d'autres fichiers dans `_h5ai/private/conf` que vous pourriez consulter. + +## Liens utiles + ++ Site web : [larsjung.de/h5ai](https://larsjung.de/h5ai/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/h5ai](https://github.com/YunoHost-Apps/h5ai_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/h5ai/issues](https://github.com/YunoHost-Apps/h5ai_ynh/issues) diff --git a/pages/04.applications/10.docs/h5ai/app_h5ai.md b/pages/04.applications/10.docs/h5ai/app_h5ai.md new file mode 100644 index 00000000..3291c73a --- /dev/null +++ b/pages/04.applications/10.docs/h5ai/app_h5ai.md @@ -0,0 +1,26 @@ +--- +title: h5ai +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_h5ai' +--- + +[![Installer h5ai with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=h5ai) [![Integration level](https://dash.yunohost.org/integration/h5ai.svg)](https://dash.yunohost.org/appci/app/h5ai) + +*h5ai* is a modern HTTP web server index for NGINX. + +### Disclaimers / important information + +#### Configuration + +After installing the application, you can add documents in `/var/www/documents` (or the corresponding path you choosed). +h5ai doesn't allow to edit or upload new documents directly from the web browser. But you can imagine coupling the folder `/var/www/documents` to Nextcloud or some sort of FTP to allow some users to upload content, and use h5ai as a public read-only interface. +The main configuration file is `_h5ai/private/conf/options.json`. You might want to change some of the documented settings. But there are some more files in `_h5ai/private/conf` you might have a look at. + +## Useful links + ++ Website: [larsjung.de/h5ai](https://larsjung.de/h5ai/) ++ Application software repository: [github.com - YunoHost-Apps/h5ai](https://github.com/YunoHost-Apps/h5ai_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/h5ai/issues](https://github.com/YunoHost-Apps/h5ai_ynh/issues) diff --git a/pages/04.applications/10.docs/halcyon/app_halcyon.fr.md b/pages/04.applications/10.docs/halcyon/app_halcyon.fr.md new file mode 100644 index 00000000..3c1c9989 --- /dev/null +++ b/pages/04.applications/10.docs/halcyon/app_halcyon.fr.md @@ -0,0 +1,31 @@ +--- +title: Halcyon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_halcyon' +--- + +![logo de Halcyon](image://halcyon_logo.png?width=80) + +[![Install Halcyon with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=halcyon) [![Integration level](https://dash.yunohost.org/integration/halcyon.svg)](https://dash.yunohost.org/appci/app/halcyon) + +Halcyon est un client web pour Mastodon et Pleroma qui vise à recréer l'interface utilisateur simple et belle de Twitter tout en conservant tous les avantages des réseaux décentralisés.[¹](#sources) + +## Limitations avec YunoHost + +L'application nécessite un domaine dédié comme `halcyon.domaine.tld` + +## Liens utiles + + + Site web : [www.halcyon.social (en)](https://www.halcyon.social/) + + Documentation officielle : [www.halcyon.social - documentation (en)](https://www.halcyon.social/documentation.php) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/halcyon](https://github.com/YunoHost-Apps/halcyon_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/halcyon/issues](https://github.com/YunoHost-Apps/halcyon_ynh/issues) + +------ + +### Sources + +¹ [www.halcyon.social (en)](https://www.halcyon.social/) diff --git a/pages/04.applications/10.docs/halcyon/app_halcyon.md b/pages/04.applications/10.docs/halcyon/app_halcyon.md new file mode 100644 index 00000000..770f2771 --- /dev/null +++ b/pages/04.applications/10.docs/halcyon/app_halcyon.md @@ -0,0 +1,31 @@ +--- +title: Halcyon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_halcyon' +--- + +![Halcyon's logo](image://halcyon_logo.png?width=80) + +[![Install Halcyon with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=halcyon) [![Integration level](https://dash.yunohost.org/integration/halcyon.svg)](https://dash.yunohost.org/appci/app/halcyon) + +Halcyon is a webclient for Mastodon and Pleroma which aims to recreate the simple and beautiful user interface of Twitter while keeping all advantages of decentral networks in focus.[¹](#sources) + +## Limitations with YunoHost + +The app require a dedicated domain like `halcyon.domain.tld` + +## Useful links + ++ Website: [www.halcyon.social](https://www.halcyon.social/) ++ Official documentation: [www.halcyon.social - documentation](https://www.halcyon.social/documentation.php) ++ Application software repository: [github.com - YunoHost-Apps/halcyon](https://github.com/YunoHost-Apps/halcyon_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/halcyon/issues](https://github.com/YunoHost-Apps/halcyon_ynh/issues) + +------ + +### sources + +¹ [www.halcyon.social](https://www.halcyon.social/) diff --git a/pages/04.applications/10.docs/haste/app_haste.fr.md b/pages/04.applications/10.docs/haste/app_haste.fr.md new file mode 100644 index 00000000..9c6e7faa --- /dev/null +++ b/pages/04.applications/10.docs/haste/app_haste.fr.md @@ -0,0 +1,31 @@ +--- +title: Haste +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_haste' +--- + +![logo de Haste](image://yunohost_package.png?height=80) + +[![Installer Haste avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=haste) [![Integration level](https://dash.yunohost.org/integration/haste.svg)](https://dash.yunohost.org/appci/app/haste) + +Haste est un logiciel pastebin open-source écrit en Node.js, facilement installable sur n'importe quel réseau. Le projet YunoHost utilise Haste comme pastebin pour le partage de log : [paste.yunohost.org](https://paste.yunohost.org/) + +## Configuration + +Ce paquet de Haste pour YunoHost comprend une commande [`haste`](https://github.com/diethnis/standalones/blob/master/hastebin.sh), vous permettant de partager du contenu avec le terminal : + +```bash +cat something | haste +https://haste.example.com/zuyejeduzu +``` + +Le [client Haste](https://github.com/seejohnrun/haste-client) est un client simple pour télécharger des données sur votre serveur Haste. + +## Liens utiles + ++ Documentation officielle : [hastebin.com - about](https://hastebin.com/about.md) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/haste](https://github.com/YunoHost-Apps/haste_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/haste/issues](https://github.com/YunoHost-Apps/haste_ynh/issues) diff --git a/pages/04.applications/10.docs/haste/app_haste.md b/pages/04.applications/10.docs/haste/app_haste.md new file mode 100644 index 00000000..e1f262bc --- /dev/null +++ b/pages/04.applications/10.docs/haste/app_haste.md @@ -0,0 +1,32 @@ +--- +title: Haste +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_haste' +--- + +![Haste's logo](image://yunohost_package.png?height=80) + +[![Install Haste with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=haste) [![Integration level](https://dash.yunohost.org/integration/haste.svg)](https://dash.yunohost.org/appci/app/haste) + +Haste is an open-source pastebin software written in Node.js, which is easily installable in any network. YunoHost Project uses Haste as pastebin for log sharing: [paste.yunohost.org](https://paste.yunohost.org/) + +## Configuration + +This Haste package for YunoHost includes the [`haste` command](https://github.com/diethnis/standalones/blob/master/hastebin.sh), allowing you to share content from terminal: + +```bash +cat something | haste +https://haste.example.com/zuyejeduzu +``` +The [Haste-client](https://github.com/seejohnrun/haste-client) is a simple client for uploading data to you Haste server. + +Haste requires a dedicated domain like `haste.domain.tld`. + +## Useful links + ++ Official documentation: [hastebin.com - about](https://hastebin.com/about.md) ++ Application software repository: [github.com - YunoHost-Apps/haste](https://github.com/YunoHost-Apps/haste_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/haste/issues](https://github.com/YunoHost-Apps/haste_ynh/issues) diff --git a/pages/04.applications/10.docs/hedgedoc/app_hedgedoc.fr.md b/pages/04.applications/10.docs/hedgedoc/app_hedgedoc.fr.md new file mode 100644 index 00000000..9f049694 --- /dev/null +++ b/pages/04.applications/10.docs/hedgedoc/app_hedgedoc.fr.md @@ -0,0 +1,23 @@ +--- +title: HedgeDoc +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hedgedoc' +--- + +![Logo de HedgeDoc](image://HedgeDoc-Logo.png?height=80) + +[![Installer HedgeDoc avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=hedgedoc) [![Integration level](https://dash.yunohost.org/integration/hedgedoc.svg)](https://dash.yunohost.org/appci/app/hedgedoc) + +*HedgeDoc* est un service web de traitement de texte collaboratif en temps réel. Il utilise le langage Markdown, qui est un moyen simple pour formater un texte. +HedgeDoc propose un vaste choix de fonctionnalités pour toutes les utilisations courantes du traitement de texte parmi lesquelles gestion des titres, table de matières, insertion d’images, tableaux, notes de bas de page, incrustation de vidéos, visualisateurs PDF, expressions mathématiques LaTeX avec MathJax, diagrammes, etc. +Différents niveaux de permission permettent de choisir qui peut lire ou éditer le document. + +## Liens utiles + ++ Démo officielle : [https://demo.hedgedoc.org/](https://demo.hedgedoc.org/) ++ Documentation officielle : [github.com/hedgedoc](https://github.com/hedgedoc/hedgedoc/tree/master/docs) ++ Dépôt logiciel de l’application : [github.com - YunoHost-Apps/hedgedoc](https://github.com/YunoHost-Apps/hedgedoc_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/hedgedoc/issues](https://github.com/YunoHost-Apps/hedgedoc_ynh/issues) diff --git a/pages/04.applications/10.docs/hedgedoc/app_hedgedoc.md b/pages/04.applications/10.docs/hedgedoc/app_hedgedoc.md new file mode 100644 index 00000000..ca034aee --- /dev/null +++ b/pages/04.applications/10.docs/hedgedoc/app_hedgedoc.md @@ -0,0 +1,23 @@ +--- +title: HedgeDoc +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hedgedoc' +--- + +![HedgeDoc’s logo](image://HedgeDoc-Logo.png?height=80) + +[![Install HedgeDoc with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=hedgedoc) [![Integration level](https://dash.yunohost.org/integration/hedgedoc.svg)](https://dash.yunohost.org/appci/app/hedgedoc) + +*HedgeDoc* is a collaborative, real-time word processing web service. It uses Markdown language, which is a simple way to format text. +HedgeDoc offers a wide range of features for all common uses of word processing, including title management, table of contents, insertion of images, tables, footnotes, video overlay, PDF viewers, LaTeX mathematical expressions with MathJax, diagrams, etc. +Different levels of permission allow you to choose who can read or edit the document. + +## Useful links + ++ Official demo: [https://demo.hedgedoc.org/](https://demo.hedgedoc.org/) ++ Official documentation: [https://docs.hedgedoc.org/](https://docs.hedgedoc.org/) ++ Application software repository: [github.com - YunoHost-Apps/hedgedoc](https://github.com/YunoHost-Apps/hedgedoc_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/hedgedoc/issues](https://github.com/YunoHost-Apps/hedgedoc_ynh/issues) diff --git a/pages/04.applications/10.docs/hextris/app_hextris.fr.md b/pages/04.applications/10.docs/hextris/app_hextris.fr.md new file mode 100644 index 00000000..8f843476 --- /dev/null +++ b/pages/04.applications/10.docs/hextris/app_hextris.fr.md @@ -0,0 +1,22 @@ +--- +title: Hextrix +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hextris' +--- + +![logo de Hextris](image://hextris_logo.png?width=80) + +[![Install Hextris with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=hextris) [![Integration level](https://dash.yunohost.org/integration/hextris.svg)](https://dash.yunohost.org/appci/app/hextris) + +Car parfois il faut savoir se détendre. Hébergez votre propre fork du célèbre Tetris et devenez le maitre de cet infernal hexagone. +Qui domptera cet hexagone ? + +## Liens utiles + + + Site web : [hextris.github.io (en)](http://hextris.github.io/) + + Documentation officielle : [github.com - Hextris (en)](https://github.com/Hextris/Hextris) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/hextris](https://github.com/YunoHost-Apps/hextris_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/hextris/issues](https://github.com/YunoHost-Apps/hextris_ynh/issues) diff --git a/pages/04.applications/10.docs/hextris/app_hextris.md b/pages/04.applications/10.docs/hextris/app_hextris.md new file mode 100644 index 00000000..aab67f58 --- /dev/null +++ b/pages/04.applications/10.docs/hextris/app_hextris.md @@ -0,0 +1,22 @@ +--- +title: Hextris +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hextris' +--- + +![Hextris's logo](image://hextris_logo.png?width=80) + +[![Install Hextris with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=hextris) [![Integration level](https://dash.yunohost.org/integration/hextris.svg)](https://dash.yunohost.org/appci/app/hextris) + +Because sometimes you have to know how to relax. Host your own fork of the famous Tetris and become the master of this infernal hexagon? Who will tame this infernal. + +## Useful links + ++ Website: [hextris.github.io](http://hextris.github.io/) ++ Official documentation: [github.com - Hextris](https://github.com/Hextris/Hextris) ++ Application software repository: [github.com - YunoHost-Apps/hextris](https://github.com/YunoHost-Apps/hextris_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/hextris/issues](https://github.com/YunoHost-Apps/hextris_ynh/issues) + hexagon? diff --git a/pages/04.applications/10.docs/homeassistant/app_homeassistant.fr.md b/pages/04.applications/10.docs/homeassistant/app_homeassistant.fr.md new file mode 100644 index 00000000..b9792317 --- /dev/null +++ b/pages/04.applications/10.docs/homeassistant/app_homeassistant.fr.md @@ -0,0 +1,30 @@ +--- +title: Home Assistant +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_homeassistant' +--- + +[![Installer Home Assistant avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=homeassistant) [![Integration level](https://dash.yunohost.org/integration/homeassistant.svg)](https://dash.yunohost.org/appci/app/homeassistant) + +*Home Assistant* est une plateforme domotique. + +### Avertissements / informations importantes + +* Limitations connues : + * Les authentifications LDAP et HTTP sont-elles prises en charge ? LDAP=Oui | HTTP auth=Non + * L'application peut-elle être utilisée par plusieurs utilisateurs ? Oui + +* Informations complémentaires : + * Comme la version de Pyhton fournie dans la version stable de Debian n'est pas toujours prise en charge, une version récente peut être construite pendant le processus d'installation. Cela peut prendre un certain temps (15 à 60 minutes). + + + +## Liens utiles + ++ Site web : [homeassistant.eu (fr)](https://homeassistant.eu/site/fr/) ++ Démonstration : [Démo](https://demo.home-assistant.io/#/lovelace/0) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/homeassistant](https://github.com/YunoHost-Apps/homeassistant_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/homeassistant/issues](https://github.com/YunoHost-Apps/homeassistant_ynh/issues) diff --git a/pages/04.applications/10.docs/homeassistant/app_homeassistant.md b/pages/04.applications/10.docs/homeassistant/app_homeassistant.md new file mode 100644 index 00000000..6a06dba4 --- /dev/null +++ b/pages/04.applications/10.docs/homeassistant/app_homeassistant.md @@ -0,0 +1,28 @@ +--- +title: Home Assistant +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_homeassistant' +--- + +[![Installer Home Assistant with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=homeassistant) [![Integration level](https://dash.yunohost.org/integration/homeassistant.svg)](https://dash.yunohost.org/appci/app/homeassistant) + +*Home Assistant* is a home automation platform. + +### Disclaimers / important information + +* Known limitations: + * Are LDAP and HTTP auth supported? LDAP=Yes | HTTP auth=No + * Can the app be used by multiple users? Yes + +* Additional informations: + * As the pyhton version shipped in Debian stable is not always supported, a recent version could be built during the installation process. It may take a while to achive that (15 to 60 minutes) + +## Useful links + ++ Website: [home-assistant.io (en)](https://www.home-assistant.io/) ++ Demonstration: [Demo](https://demo.home-assistant.io/#/lovelace/0) ++ Application software repository: [github.com - YunoHost-Apps/homeassistant](https://github.com/YunoHost-Apps/homeassistant_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/homeassistant/issues](https://github.com/YunoHost-Apps/homeassistant_ynh/issues) diff --git a/pages/04.applications/10.docs/horde/app_horde.fr.md b/pages/04.applications/10.docs/horde/app_horde.fr.md new file mode 100644 index 00000000..80b7dcfb --- /dev/null +++ b/pages/04.applications/10.docs/horde/app_horde.fr.md @@ -0,0 +1,27 @@ +--- +title: Horde +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_horde' +--- + +![logo de Horde](image://horde_logo.png?height=80) + +[![Install Horde with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=horde) [![Integration level](https://dash.yunohost.org/integration/horde.svg)](https://dash.yunohost.org/appci/app/horde) + +Horde Groupware Webmail Edition est une suite de communication libre, prête à l'emploi, basée sur un navigateur. Les utilisateurs peuvent lire, envoyer et organiser des messages électroniques et gérer et partager des calendriers, des contacts, des tâches et des notes avec les composants conformes aux normes du projet Horde.[¹](#sources) + +## Liens utiles + + + Site web : [www.horde.org (en)](https://www.horde.org/) + + Documentation officielle : [wiki.horde.org (en)](https://wiki.horde.org/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/horde](https://github.com/YunoHost-Apps/horde_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/horde/issues](https://github.com/YunoHost-Apps/horde_ynh/issues) + +------ + +### sources + +¹ [www.horde.org - apps (en)](https://www.horde.org/apps) diff --git a/pages/04.applications/10.docs/horde/app_horde.md b/pages/04.applications/10.docs/horde/app_horde.md new file mode 100644 index 00000000..9f8d206b --- /dev/null +++ b/pages/04.applications/10.docs/horde/app_horde.md @@ -0,0 +1,27 @@ +--- +title: Horde +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_horde' +--- + +![Horde's logo](image://horde_logo.png?height=80) + +[![Install Horde with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=horde) [![Integration level](https://dash.yunohost.org/integration/horde.svg)](https://dash.yunohost.org/appci/app/horde) + +Horde Groupware Webmail Edition is a free, enterprise ready, browser based communication suite. Users can read, send and organize email messages and manage and share calendars, contacts, tasks and notes with the standards compliant components from the Horde Project.[¹](#sources) + +## Useful links + ++ Website: [www.horde.org](https://www.horde.org/) ++ Official documentation: [wiki.horde.org](https://wiki.horde.org/) ++ Application software repository: [github.com - YunoHost-Apps/horde](https://github.com/YunoHost-Apps/horde_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/horde/issues](https://github.com/YunoHost-Apps/horde_ynh/issues) + +------ + +### Sources + +¹ [www.horde.org - apps](https://www.horde.org/apps) diff --git a/pages/04.applications/10.docs/hubzilla/app_hubzilla.fr.md b/pages/04.applications/10.docs/hubzilla/app_hubzilla.fr.md new file mode 100644 index 00000000..c05440aa --- /dev/null +++ b/pages/04.applications/10.docs/hubzilla/app_hubzilla.fr.md @@ -0,0 +1,25 @@ +--- +title: Hubzilla +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hubzilla' +--- + +![logo de Hubzilla](image://hubzilla_logo.png?width=80) + +[![Install Hubzilla with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=hubzilla) [![Integration level](https://dash.yunohost.org/integration/hubzilla.svg)](https://dash.yunohost.org/appci/app/hubzilla) + +Hubzilla est une plateforme de réseau social construite avec le contrôle de votre vie privée au centre. Vos communications en ligne peuvent être aussi publiques que vous le souhaitez ou aussi privées que vous le souhaitez. Conversations privées, photos privées, vidéos privées. Vos médias ne se cachent pas derrière une obscure URL que l'on peut deviner, ils sont protégés par une authentification de pointe à travers les domaines. Ce que tout cela signifie pour vous : moins de drame. + +## Configuration + +Hubzilla nécessite un domaine dédié comme par exemple `hubzilla.domaine.tld`. + +## Liens utiles + + + Site web : [zotlabs.org - hubzilla/hubzilla-project (en)](https://zotlabs.org/page/hubzilla/hubzilla-project) + + Documentation officielle : [zotlabs.org - help/about](https://zotlabs.org/help/fr/about/about) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/hubzilla](https://github.com/YunoHost-Apps/hubzilla_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/hubzilla/issues](https://github.com/YunoHost-Apps/hubzilla_ynh/issues) diff --git a/pages/04.applications/10.docs/hubzilla/app_hubzilla.md b/pages/04.applications/10.docs/hubzilla/app_hubzilla.md new file mode 100644 index 00000000..05349c25 --- /dev/null +++ b/pages/04.applications/10.docs/hubzilla/app_hubzilla.md @@ -0,0 +1,25 @@ +--- +title: Hubzilla +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hubzilla' +--- + +![Hubzilla's logo](image://hubzilla_logo.png?width=80) + +[![Install Hubzilla with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=hubzilla) [![Integration level](https://dash.yunohost.org/integration/hubzilla.svg)](https://dash.yunohost.org/appci/app/hubzilla) + +Hubzilla is a social networking platform built with control of your privacy at center stage. Your online communications can be as public as you wish or as private as you require. Private conversations, private photos, private videos. Your media isn't hidden behind an obscure URL which can be guessed, it is protected by state-of-the-art cross-domain authentication. What this all means for you: less drama. + +## Configuration + +Hubzilla requires a dedicated domain like `hubzilla.domain.tld`. + +## Useful links + ++ Website: [zotlabs.org - hubzilla/hubzilla-project](https://zotlabs.org/page/hubzilla/hubzilla-project) ++ Official documentation: [zotlabs.org - help/about](https://zotlabs.org/help/en/about/about) ++ Application software repository: [github.com - YunoHost-Apps/hubzilla](https://github.com/YunoHost-Apps/hubzilla_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/hubzilla/issues](https://github.com/YunoHost-Apps/hubzilla_ynh/issues) diff --git a/pages/04.applications/10.docs/ifm/app_ifm.fr.md b/pages/04.applications/10.docs/ifm/app_ifm.fr.md new file mode 100644 index 00000000..077b6f68 --- /dev/null +++ b/pages/04.applications/10.docs/ifm/app_ifm.fr.md @@ -0,0 +1,23 @@ +--- +title: IFM +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ifm' +--- + +[![Installer IFM avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=ifm) [![Integration level](https://dash.yunohost.org/integration/ifm.svg)](https://dash.yunohost.org/appci/app/ifm) + +*IFM* est un gestionnaire de fichiers basé sur le Web, qui se présente sous la forme d'un fichier unique utilisant HTML5, CSS3, JavaScript et PHP. + +### Avertissements / informations importantes + +L'IFM est généralement verrouillé dans son propre répertoire (`/home/yunohost.app/ifm`), vous ne pouvez donc pas aller sur d'autres répertoires. Vous pouvez changer cela en définissant `env[IFM_ROOT_DIR] = /home/yunohost.app/ifm` dans la configuration PHP `/etc/php/7.3/fpm/pool.d/ifm.conf` L.434 en vous aidant de cette [documentation](https://github.com/misterunknown/ifm/wiki/Configuration). + +## Liens utiles + ++ Site web : [github.com/misterunknown/ifm](https://github.com/misterunknown/ifm) ++ Démonstration : [Démo](https://ifmdemo.gitea.de/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/ifm](https://github.com/YunoHost-Apps/ifm_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/ifm/issues](https://github.com/YunoHost-Apps/ifm_ynh/issues) diff --git a/pages/04.applications/10.docs/ifm/app_ifm.md b/pages/04.applications/10.docs/ifm/app_ifm.md new file mode 100644 index 00000000..7939501a --- /dev/null +++ b/pages/04.applications/10.docs/ifm/app_ifm.md @@ -0,0 +1,23 @@ +--- +title: IFM +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ifm' +--- + +[![Installer IFM with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=ifm) [![Integration level](https://dash.yunohost.org/integration/ifm.svg)](https://dash.yunohost.org/appci/app/ifm) + +*IFM* is a web-based filemanager, which comes as a single file solution using HTML5, CSS3, JavaScript and PHP. + +### Disclaimers / important information + +The IFM is usually locked to it's own directory (`/home/yunohost.app/ifm`), so you are not able to go above. You can change that by setting `env[IFM_ROOT_DIR] = /home/yunohost.app/ifm` in the PHP config `/etc/php/7.3/fpm/pool.d/ifm.conf` L.434 with the help of this [documentation](https://github.com/misterunknown/ifm/wiki/Configuration). + +## Useful links + ++ Website: [github.com/misterunknown/ifm](https://github.com/misterunknown/ifm) ++ Demonstration: [Demo](https://ifmdemo.gitea.de/) ++ Application software repository: [github.com - YunoHost-Apps/ifm](https://github.com/YunoHost-Apps/ifm_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/ifm/issues](https://github.com/YunoHost-Apps/ifm_ynh/issues) diff --git a/pages/04.applications/10.docs/ihatemoney/app_ihatemoney.fr.md b/pages/04.applications/10.docs/ihatemoney/app_ihatemoney.fr.md new file mode 100644 index 00000000..688de945 --- /dev/null +++ b/pages/04.applications/10.docs/ihatemoney/app_ihatemoney.fr.md @@ -0,0 +1,39 @@ +--- +title: I Hate Money +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ihatemoney' +--- + +[![Installer I Hate Money avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=ihatemoney) [![Integration level](https://dash.yunohost.org/integration/ihatemoney.svg)](https://dash.yunohost.org/appci/app/ihatemoney) + +*I Hate Money* est une application web conçue pour faciliter la gestion partagée du budget. Elle permet de savoir qui a acheté quoi, quand et pour qui, et aide à régler les factures. + +### Captures d'écran + +![Capture d'écran de I Hate Money](https://github.com/YunoHost-Apps/ihatemoney_ynh/blob/master/doc/screenshots/screenshot_1_global.webp) +![Capture d'écran de I Hate Money](https://github.com/YunoHost-Apps/ihatemoney_ynh/raw/master/doc/screenshots/screenshot_2_new_operation.webp) + +### Avertissements / informations importantes + +* L'authentification LDAP et login unifié (SSO) n'est pas supportée. Le mécanisme de connexion sur IHateMoney se fait par projet et ne peut donc pas être intégrée dans YunoHost + +- **app non publique**: + - authentification YunoHost requise + - identifiants de projets requis + - Tout utilisateur YunoHost avec accès à l'app peut créer un nouveau projet. +- **app publique** : + - authentification YunoHost non requise + - identifiants de projets requis + - Tout visiteur peut créer un nouveau projet. + +* Lors de la mise à jour de la version 4.1.5~ynh3, un nouveau mot de passe administrateur est généré et envoyé à root. + +## Liens utiles + ++ Site web : [github.com/spiral-project/ihatemoney](https://github.com/spiral-project/ihatemoney) ++ Démonstration : [Démo](https://ihatemoney.org/authenticate?project_id=demo) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/ihatemoney](https://github.com/YunoHost-Apps/ihatemoney_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/ihatemoney/issues](https://github.com/YunoHost-Apps/ihatemoney_ynh/issues) diff --git a/pages/04.applications/10.docs/ihatemoney/app_ihatemoney.md b/pages/04.applications/10.docs/ihatemoney/app_ihatemoney.md new file mode 100644 index 00000000..f0e96599 --- /dev/null +++ b/pages/04.applications/10.docs/ihatemoney/app_ihatemoney.md @@ -0,0 +1,39 @@ +--- +title: I Hate Money +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ihatemoney' +--- + +[![Installer I Hate Money with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=ihatemoney) [![Integration level](https://dash.yunohost.org/integration/ihatemoney.svg)](https://dash.yunohost.org/appci/app/ihatemoney) + +*I Hate Money* is a web application made to ease shared budget management. It keeps track of who bought what, when, and for whom; and helps to settle the bills. + +### Screenshots + +![Screenshots I Hate Money](https://github.com/YunoHost-Apps/ihatemoney_ynh/blob/master/doc/screenshots/screenshot_1_global.webp) +![Screenshots I Hate Money](https://github.com/YunoHost-Apps/ihatemoney_ynh/raw/master/doc/screenshots/screenshot_2_new_operation.webp) + +### Disclaimers / important information + +* LDAP authentication and Single Sign-on is not supported. The login mechanism in IHateMoney is per-project (not per-user) and therefore can't be integrated in YunoHost. + +- **non-public app**: + - YunoHost login required + - per-project identifiers required + - any YunoHost user with access to the app can create a new project. +- **public app**: + - no YunoHost login required + - per-project identifiers required + - any visitor can create a new project. + +* During upgrade from version 4.1.5~ynh3, a new admin password is generated and sent to the root + +## Useful links + ++ Website: [github.com/spiral-project/ihatemoney](https://github.com/spiral-project/ihatemoney) ++ Demonstration: [Demo](https://ihatemoney.org/authenticate?project_id=demo) ++ Application software repository: [github.com - YunoHost-Apps/ihatemoney](https://github.com/YunoHost-Apps/ihatemoney_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/ihatemoney/issues](https://github.com/YunoHost-Apps/ihatemoney_ynh/issues) diff --git a/pages/04.applications/10.docs/invidious/app_invidious.md b/pages/04.applications/10.docs/invidious/app_invidious.md new file mode 100644 index 00000000..9edd676d --- /dev/null +++ b/pages/04.applications/10.docs/invidious/app_invidious.md @@ -0,0 +1,34 @@ +--- +title: Invidious +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_invidious' +--- + +![Invidious's logo](image://invidious-logo.png?height=100) + + +[![Install Invidious with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=invidious) +[![Integration level](https://dash.yunohost.org/integration/invidious.svg)](https://dash.yunohost.org/appci/app/invidious) + +**Invidious** is an interface allowing access to Youtube videos without going through youtube.com +In addition to constituting an advantage in terms of confidentiality (the data does not pass directly through the services of the giant), this interface offers several features. + +## Features: +- Audio only mode, +- Dark mode, +- Ability to display Reddit comments instead of YouTube comments, +- Ability to subscribe to channels without creating a Google account + +## Configuration +You can configure Invidious by modifying the configuration file `/var/www/invidious/config/config.yml` with the help of this [documentation](https://docs.invidious.io/configuration/). + + +## Useful links + +* Official user documentation: [https://docs.invidious.io/](https://docs.invidious.io/) +* Upstream app code repository: [https://github.com/iv-org/invidious](https://github.com/iv-org/invidious) +* Application software repository: [https://github.com/YunoHost-Apps/invidious_ynh](https://github.com/YunoHost-Apps/invidious_ynh) +* Report a bug: [https://github.com/YunoHost-Apps/invidious_ynh/issues](https://github.com/YunoHost-Apps/invidious_ynh/issues) diff --git a/pages/04.applications/10.docs/invoiceninga/app_invoiceninja.md b/pages/04.applications/10.docs/invoiceninga/app_invoiceninja.md new file mode 100644 index 00000000..6183f5f7 --- /dev/null +++ b/pages/04.applications/10.docs/invoiceninga/app_invoiceninja.md @@ -0,0 +1,27 @@ +--- +title: Invoice Ninja +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_invoiceninja' +--- + +![Invoice Ninja logo](image://invoiceninja_logo.png?height=80) + +[![Install Invoice Ninja with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=invoiceninja) +[![Integration level](https://dash.yunohost.org/integration/invoiceninja.svg)](https://dash.yunohost.org/appci/app/invoiceninja) + +Invoice Ninja is an open-source platform to create and email invoices, track payments, expenses, time billable tasks and projects for clients. + + +## Limitations with YunoHost + +There is no official LDAP support. The first user gets created after installing Invoice Ninja. Other users can be created from inside the application + +## Useful links + ++ Website: https://www.invoiceninja.org/ ++ Application software repository: https://github.com/YunoHost-Apps/invoiceninja_ynh ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/invoiceninja/issues](https://github.com/YunoHost-Apps/invoiceninja_ynh/issues) ++ Official documentation: [Invoice Ninja User Guide](https://docs.invoiceninja.com/) diff --git a/pages/04.applications/10.docs/jappix/app_jappix.fr.md b/pages/04.applications/10.docs/jappix/app_jappix.fr.md new file mode 100644 index 00000000..06077e7b --- /dev/null +++ b/pages/04.applications/10.docs/jappix/app_jappix.fr.md @@ -0,0 +1,12 @@ +--- +title: Jappix +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jappix' +--- + +![logo de Jappix](image://jappix_logo.png?height=80) + +Jappix est un client web [XMPP](/XMPP). diff --git a/pages/04.applications/10.docs/jappix/app_jappix.md b/pages/04.applications/10.docs/jappix/app_jappix.md new file mode 100644 index 00000000..58dc2201 --- /dev/null +++ b/pages/04.applications/10.docs/jappix/app_jappix.md @@ -0,0 +1,12 @@ +--- +title: Jappix +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jappix' +--- + +![Jappix's logo](image://jappix_logo.png?height=80) + +Jappix is a web client for [XMPP](/XMPP). diff --git a/pages/04.applications/10.docs/jirafeau/app_jirafeau.fr.md b/pages/04.applications/10.docs/jirafeau/app_jirafeau.fr.md new file mode 100644 index 00000000..b0f35a0d --- /dev/null +++ b/pages/04.applications/10.docs/jirafeau/app_jirafeau.fr.md @@ -0,0 +1,42 @@ +--- +title: Jirafeau +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jirafeau' +--- + +![logo de Jirafeau](image://Jirafeau_logo.jpg?width=80) + +[![Install Jirafeau with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=jirafeau) [![Integration level](https://dash.yunohost.org/integration/jirafeau.svg)](https://dash.yunohost.org/appci/app/jirafeau) + +*Jirafeau* offre la possibilité d'héberger et de partager vos fichiers, le tout en toute simplicité. Choisissez un fichier, Jirafeau vous fournira un lien avec beaucoup d'options. +Il est possible de protéger vos liens avec mot de passe ainsi que de choisir la durée de rétention du fichier sur le serveur. Le fichier et le lien s'autodétruiront passé ce délai. +Les téléchargements des fichiers transmis peuvent être limités à une certaine date, et chaque fichier peut s'autodétruire après le premier téléchargement. +Jirafeau permet de configurer les temps maximum de rétention ainsi que la taille maximale par fichier. Le chiffrement est disponible en option.[¹](#sources) + +## Configuration + +### Changer les conditions d'utilisation du service + +Le texte de la licence sur la page "Conditions d'utilisation du service", qui est livrée avec l'installation par défaut, est basé sur les "Conditions d'utilisation du service de l'Initiative Open Source". +Pour modifier ce texte, il suffit de copier le fichier `/lib/tos.original.txt`, de le renommer en `/lib/tos.local.txt` et de l'adapter à vos propres besoins. +Si vous mettez à jour l'installation, alors seul le fichier `tos.original.txt` peut changer éventuellement, et non votre fichier `tos.local.txt`. + +### Administration + +Pour administrer les fichiers présents au sein de Jirafeau il suffit de se rendre à l'adresse `jirafeau.domaine.tld/admin.php`. + +## Liens utiles + + + Site web : [jirafeau.net](https://jirafeau.net/) + + Documentation officielle : [gitlab.com - mojo42/Jirafeau](https://gitlab.com/mojo42/Jirafeau) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/jirafeau](https://github.com/YunoHost-Apps/jirafeau_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/jirafeau/issues](https://github.com/YunoHost-Apps/jirafeau_ynh/issues) + +------ + +### Sources + +¹ [framalibre.org](https://framalibre.org/content/jirafeau) diff --git a/pages/04.applications/10.docs/jirafeau/app_jirafeau.md b/pages/04.applications/10.docs/jirafeau/app_jirafeau.md new file mode 100644 index 00000000..e36af385 --- /dev/null +++ b/pages/04.applications/10.docs/jirafeau/app_jirafeau.md @@ -0,0 +1,42 @@ +--- +title: Jirafeau +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jirafeau' +--- + +![Jirafeau's logo](image://Jirafeau_logo.jpg?width=80) + +[![Install Jirafeau with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=jirafeau) [![Integration level](https://dash.yunohost.org/integration/jirafeau.svg)](https://dash.yunohost.org/appci/app/jirafeau) + +*Jirafeau* offers the possibility to host and share your files with ease. Choose a file, Jirafeau will provide you with a link with many options. +It is possible to protect your links with a password as well as to choose how long the file will be kept on the server. The file and the link will self-destruct after this time. +Downloads of transmitted files can be limited to a certain date, and each file can self-destruct after the first download. +Jirafeau allows you to configure maximum retention times and maximum size per file. Encryption is available as an option.[¹](#sources) + +## Configuration + +### Changing the conditions of use of the service + +The license text on the "Terms of Service" page, which is shipped with the default installation, is "based on the Open Source Initiative Terms of Service". +To change this text simply copy the file `/lib/tos.original.txt`, rename it to `/lib/tos.local.txt` and adapt it to your own needs. +If you update the installation, then only the `tos.original.txt` file may change eventually, not your `tos.local.txt` file. + +### Administration + +To administer the files within Jirafeau it is enough to go to the address `jirafeau.domaine.tld/admin.php`. + +## Useful links + ++ Website: [jirafeau.net](https://jirafeau.net/) ++ Official documentation: [gitlab.com - mojo42/Jirafeau (en)](https://gitlab.com/mojo42/Jirafeau) ++ Application software repository: [github.com - YunoHost-Apps/jirafeau](https://github.com/YunoHost-Apps/jirafeau_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/jirafeau/issues](https://github.com/YunoHost-Apps/jirafeau_ynh/issues) + +------ + +### Sources + +¹ [framalibre.org (fr)](https://framalibre.org/content/jirafeau) diff --git a/pages/04.applications/10.docs/jitsi/app_jitsi.fr.md b/pages/04.applications/10.docs/jitsi/app_jitsi.fr.md new file mode 100644 index 00000000..13a0909c --- /dev/null +++ b/pages/04.applications/10.docs/jitsi/app_jitsi.fr.md @@ -0,0 +1,36 @@ +--- +title: Jitsi +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jitsi' +--- + +![logo de jitsi](image://jitsi_logo.svg?resize=80) + +[![Install jitsi with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=jitsi) [![Integration level](https://dash.yunohost.org/integration/jitsi.svg)](https://dash.yunohost.org/appci/app/jitsi) + +Jitsi Meet est un logiciel libre (Apache) qui propose des vidéos-conférences de haute qualité, sécurisées et évolutives. Des options de partages d'écran, de chats en direct, de demandes de prises de paroles, ainsi que de paramétrages de qualité de vidéo sont proposées pour faciliter les réunions de groupe. + +## Limitations avec YunoHost + +Jitsi-meet pour YunoHost est limité actuellement : + +* Il ne peut être utilisé qu'avec Chrome ou un navigateur basé sur Chromium (comme [Iron](https://www.srware.net/iron/)) ou [Firefox](https://www.mozilla.org/fr/firefox/browsers/) (à partir de la version 76) +* Il est actuellement limité à 2 participants par réunion + + +## Applications clientes + +| Nom de l'application | Plateforme | Multi-comptes | Autres réseaux supportés | Play Store | F-Droid | Apple Store | *Autres* | +|-----------------------|------------|---------------|-------------------------|------------|---------|-------------|----------| +| Jitsi Meet | Android - iOS | | | [Jitsi Meet](https://play.google.com/store/apps/details?id=org.jitsi.meet) | [Jitsi Meet](https://f-droid.org/en/packages/org.jitsi.meet/) | [Jitsi Meet](https://apps.apple.com/us/app/jitsi-meet/id1165103905) | | +| Jitsi Meet Electron | Windows - macOS - GNU/Linux | | | | | | [Téléchargement](https://github.com/jitsi/jitsi-meet-electron) | + +## Liens utiles + + + Site web : [jitsi.org](https://jitsi.org) + + Documentation officielle : [jitsi.org/user-faq](https://jitsi.org/user-faq/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/jitsi](https://github.com/YunoHost-Apps/jitsi_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/jitsi/issues](https://github.com/YunoHost-Apps/jitsi_ynh/issues) diff --git a/pages/04.applications/10.docs/jitsi/app_jitsi.md b/pages/04.applications/10.docs/jitsi/app_jitsi.md new file mode 100644 index 00000000..6b0238de --- /dev/null +++ b/pages/04.applications/10.docs/jitsi/app_jitsi.md @@ -0,0 +1,36 @@ +--- +title: Jitsi +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jitsi' +--- + +![Jitsi's logo](image://jitsi_logo.svg?resize=80) + +[![Install jitsi with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=jitsi) [![Integration level](https://dash.yunohost.org/integration/jitsi.svg)](https://dash.yunohost.org/appci/app/jitsi) + +Jitsi Meet is an open source software (Apache) that offers high quality, secure and scalable video conferencing. Options for screen sharing, live chat, speech requests, as well as settings for video quality are offered to facilitate group meetings. + +## Limitations with YunoHost + +Jitsi for YunoHost for now as some limitations: + +* Can only be used using Chrome/Chromium (like [Iron](https://www.srware.net/iron/)) or [Firefox](https://www.mozilla.org/fr/firefox/browsers/) (since version 76) +* Is limited to two participants + + +## Customer applications + +| Application name | Platform | Multi-account | Other supported networks | Play Store | F-Droid | Apple Store | *Other* | +|-----------------------|------------|---------------|-------------------------|------------|---------|-------------|----------| +| Jitsi Meet | Android - iOS | | | [Jitsi Meet](https://play.google.com/store/apps/details?id=org.jitsi.meet) | [Jitsi Meet](https://f-droid.org/en/packages/org.jitsi.meet/) | [Jitsi Meet](https://apps.apple.com/us/app/jitsi-meet/id1165103905) | | +| Jitsi Meet Electron | Windows - macOS - GNU/Linux | | | | | | [Download](https://github.com/jitsi/jitsi-meet-electron) | + +## Useful links + + + Website : [jitsi.org](https://jitsi.org) + + Official documentation: [jitsi.org/user-faq](https://jitsi.org/user-faq/) + + Application software repository:: [github.com - YunoHost-Apps/jitsi](https://github.com/YunoHost-Apps/jitsi_ynh) + + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/jitsi/issues](https://github.com/YunoHost-Apps/jitsi_ynh/issues) diff --git a/pages/04.applications/10.docs/jupyterlab/app_jupyterlab.fr.md b/pages/04.applications/10.docs/jupyterlab/app_jupyterlab.fr.md new file mode 100644 index 00000000..db50b979 --- /dev/null +++ b/pages/04.applications/10.docs/jupyterlab/app_jupyterlab.fr.md @@ -0,0 +1,21 @@ +--- +title: JupyterLab +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jupyterlab' +--- + +![Logo de JupyterHub](image://logo-jupyterhub.png?height=80) + +[![Installer JupyterLab avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=jupyterlab) [![Integration level](https://dash.yunohost.org/integration/jupyterlab.svg)](https://dash.yunohost.org/appci/app/jupyterlab) + +JupyterLab est une interface utilisateur de nouvelle génération pour le projet Jupyter offrant tous les modules de Jupyter Notebook (interpréteur Python, terminal, éditeur de texte, navigateur de fichiers, etc.) dans une interface utilisateur flexible et puissante. JupyterLab remplacera à terme Jupyter Notebook. + +## Liens utiles + ++ Site web : [github.com - JupyterHub](https://github.com/jupyterhub/jupyterhub) ++ Documentation officielle : [jupyterlab.readthedocs.io](https://jupyterlab.readthedocs.io/en/stable/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/jupyterlab](https://github.com/YunoHost-Apps/jupyterlab_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/jupyterlab/issues](https://github.com/YunoHost-Apps/jupyterlab_ynh/issues) diff --git a/pages/04.applications/10.docs/jupyterlab/app_jupyterlab.md b/pages/04.applications/10.docs/jupyterlab/app_jupyterlab.md new file mode 100644 index 00000000..52c38bba --- /dev/null +++ b/pages/04.applications/10.docs/jupyterlab/app_jupyterlab.md @@ -0,0 +1,21 @@ +--- +title: JupyterLab +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jupyterlab' +--- + +![JupyterLab's Logo](image://logo-jupyterhub.png?height=80) + +[![Install JupyterLab with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=jupyterlab) [![Integration level](https://dash.yunohost.org/integration/jupyterlab.svg)](https://dash.yunohost.org/appci/app/jupyterlab) + +JupyterLab is the next-generation user interface for Project Jupyter offering all the familiar building blocks of the classic Jupyter Notebook (notebook, terminal, text editor, file browser, rich outputs, etc.) in a flexible and powerful user interface. JupyterLab will eventually replace the classic Jupyter Notebook. + +## Useful links + ++ Website: [github.com - JupyterHub](https://github.com/jupyterhub/jupyterhub) ++ Official documentation: [jupyterlab.readthedocs.io](https://jupyterlab.readthedocs.io/en/stable/) ++ Application software repository: [github.com - YunoHost-Apps/jupyterlab](https://github.com/YunoHost-Apps/jupyterlab_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/jupyterlab/issues](https://github.com/YunoHost-Apps/jupyterlab_ynh/issues) diff --git a/pages/04.applications/10.docs/kanboard/app_kanboard.fr.md b/pages/04.applications/10.docs/kanboard/app_kanboard.fr.md new file mode 100644 index 00000000..b73581e8 --- /dev/null +++ b/pages/04.applications/10.docs/kanboard/app_kanboard.fr.md @@ -0,0 +1,23 @@ +--- +title: Kanboard +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_kanboard' +--- + +![logo de kanboard](image://kanboard_logo.png?height=80) + +[![Install kanboard with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=kanboard) [![Integration level](https://dash.yunohost.org/integration/kanboard.svg)](https://dash.yunohost.org/appci/app/kanboard) + +Kanboard est un gestionnaire de tâches visuel qui permet de gérer facilement des petits projets de manière collaborative. L'outil est particulièrement adapté aux personnes qui utilisent la méthode Kanban. On peut voir Kanboard comme une alternative (simplifiée) au logiciel propriétaire Trello. Kanboard est un logiciel minimaliste, il se concentre uniquement sur les fonctionnalités réellement nécessaires. L'interface utilisateur est simple et clair. +L'outil est prévu pour fonctionner sur une petite machine tel qu'un Raspberry Pi ou un serveur virtuel privé (VPS). Il n'y a aucune dépendance externe, le glisser-déposer des tâches utilise les nouvelles API de HTML5. + +## Liens utiles + ++ Site web : [kanboard.org](https://kanboard.org) ++ Documentation officielle : [docs.kanboard.org/en/latest](https://docs.kanboard.org/fr/latest) ++ Démonstration : [Démo](https://framaboard.org) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/kanboard](https://github.com/YunoHost-Apps/kanboard_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/kanboard/issues](https://github.com/YunoHost-Apps/kanboard_ynh/issues) diff --git a/pages/04.applications/10.docs/kanboard/app_kanboard.md b/pages/04.applications/10.docs/kanboard/app_kanboard.md new file mode 100644 index 00000000..aacefee3 --- /dev/null +++ b/pages/04.applications/10.docs/kanboard/app_kanboard.md @@ -0,0 +1,24 @@ +--- +title: Kanboard +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_kanboard' +--- + +![kanboard's logo](image://kanboard_logo.png?height=80) + +[![Install kanboard with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=kanboard) [![Integration level](https://dash.yunohost.org/integration/kanboard.svg)](https://dash.yunohost.org/appci/app/kanboard) + +Kanboard is a visual task manager that makes it easy to manage small projects in a collaborative way. The tool is particularly suitable for people who use the Kanban method. Kanboard can be seen as a (Simplified) alternative to the proprietary Trello software. Kanboard is a minimalist software, it focuses only on the features that are really necessary. The user interface is simple and clear. +The tool is designed to run on a small machine such as a Raspberry Pi or a Virtual Private Server (VPS). There are no external dependencies, drag and drop of tasks uses the new HTML5 APIs. + + +## Useful links + ++ Website: [kanboard.org](https://kanboard.org) ++ Official documentation: [docs.kanboard.org/en/latest](https://docs.kanboard.org/en/latest) ++ Demonstration: [Demo](https://framaboard.org) ++ Application software repository: [github.com - YunoHost-Apps/kanboard](https://github.com/YunoHost-Apps/kanboard_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/kanboard/issues](https://github.com/YunoHost-Apps/kanboard_ynh/issues) diff --git a/pages/04.applications/10.docs/keeweb/app_keeweb.fr.md b/pages/04.applications/10.docs/keeweb/app_keeweb.fr.md new file mode 100644 index 00000000..85578473 --- /dev/null +++ b/pages/04.applications/10.docs/keeweb/app_keeweb.fr.md @@ -0,0 +1,24 @@ +--- +title: KeeWeb +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_keeweb' +--- + +![logo de keeweb](image://keeweb_logo.png?height=80) + +[![Install KeeWeb with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=keeweb) [![Integration level](https://dash.yunohost.org/integration/keeweb.svg)](https://dash.yunohost.org/appci/app/keeweb) + +Un gestionnaire Web élégant et efficace pour gérer vos mots de passe à distance. +Le fichier contenant les mots de passe (.kdbx) peut vous suivre en local sur votre PC, sur une clef USB ou être stocké sur votre serveur en WebDAV. +KeeWeb gère aussi des fichiers compatibles avec les autres gestionnaires de mots de passe comme [KeePass](http://keepass.info), [KeePassX](https://www.keepassx.org/) ou [KeePassXC](https://keepassxc.org/). + +## Liens utiles + ++ Site web : [keeweb.info](https://keeweb.info) ++ Documentation officielle : [keeweb.info](https://keeweb.info) ++ Démonstration : [Démo](https://app.keeweb.info) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/keeweb](https://github.com/YunoHost-Apps/keeweb_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/keeweb/issues](https://github.com/YunoHost-Apps/keeweb_ynh/issues) diff --git a/pages/04.applications/10.docs/keeweb/app_keeweb.md b/pages/04.applications/10.docs/keeweb/app_keeweb.md new file mode 100644 index 00000000..c924255d --- /dev/null +++ b/pages/04.applications/10.docs/keeweb/app_keeweb.md @@ -0,0 +1,24 @@ +--- +title: KeeWeb +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_keeweb' +--- + +![keeweb's logo](image://keeweb_logo.png?height=80) + +[![Install KeeWeb with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=keeweb) [![Integration level](https://dash.yunohost.org/integration/keeweb.svg)](https://dash.yunohost.org/appci/app/keeweb) + +An elegant and efficient web manager to manage your passwords remotely. +The file containing the passwords (.kdbx) can follow you locally on your PC, on a USB key or be stored on your server in WebDAV. +KeeWeb also manages files compatible with other password managers such as [KeePass](http://keepass.info), [KeePassX](https://www.keepassx.org/) or [KePassXC](https://keepassxc.org/). + +## Useful links + ++ Website: [keeweb.info](https://keeweb.info) ++ Official documentation: [keeweb.info](https://keeweb.info) ++ Demonstration: [Demo](https://app.keeweb.info) ++ Application software repository: [github.com - YunoHost-Apps/keeweb](https://github.com/YunoHost-Apps/keeweb_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/keeweb/issues](https://github.com/YunoHost-Apps/keeweb_ynh/issues) diff --git a/pages/04.applications/10.docs/kimai2/app_kimai2.fr.md b/pages/04.applications/10.docs/kimai2/app_kimai2.fr.md new file mode 100644 index 00000000..7c80cde1 --- /dev/null +++ b/pages/04.applications/10.docs/kimai2/app_kimai2.fr.md @@ -0,0 +1,36 @@ +--- +title: Kimai2 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_kimai2' +--- + +[![Installer Kimai2 avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=kimai2) [![Integration level](https://dash.yunohost.org/integration/kimai2.svg)](https://dash.yunohost.org/appci/app/kimai2) + +*Kimai2* est la version actualisée du timetracker open source Kimai. Actuellement, il est dans une phase de développement précoce, il est utilisable mais certaines fonctionnalités avancées de Kimai v1 sont manquantes. + +Kimai v2 n'a rien en commun avec son prédécesseur Kimai v1 à part les idées de base du suivi du temps et l'équipe de développement actuelle. + +### Avertissements / informations importantes + +* Il faut un domaine dédié comme **kimai.domain.tld**. +* Cette application est multi-instance (vous pouvez avoir plus d'une instance Kimai sur un serveur YunoHost). +* Comme le support de SQLite s'est arrêté à la version 1.14, si vous avez choisi une base de données SQLite pendant l'installation, la mise à jour de Kimai2 est bloquée à la version 1.13. + +#### Support multi-utilisateurs + +LDAP est supporté HTTP auth n'est pas supporté Les rôles par défaut de Kimai2 sont : +* ROLE_USER +* ROLE_TEAMLEAD => Kimai2 (Teamlead) YunoHost permission +* ROLE_ADMIN => Kimai2 (Admin) YunoHost permission +* ROLE_SUPER_ADMIN => Kimai2 (Super_Admin) YunoHost permission +Those roles are directly managed using YunoHost permission system. User choosen during installation is granted the ROLE_SUPER_ADMIN + +## Liens utiles + ++ Site web : [kimai.org](https://www.kimai.org/) ++ Démonstration : [Démo](https://www.kimai.org/demo/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/kimai2](https://github.com/YunoHost-Apps/kimai2_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/kimai2/issues](https://github.com/YunoHost-Apps/kimai2_ynh/issues) diff --git a/pages/04.applications/10.docs/kimai2/app_kimai2.md b/pages/04.applications/10.docs/kimai2/app_kimai2.md new file mode 100644 index 00000000..526d5443 --- /dev/null +++ b/pages/04.applications/10.docs/kimai2/app_kimai2.md @@ -0,0 +1,37 @@ +--- +title: Kimai2 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_kimai2' +--- + +[![Installer Kimai2 with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=kimai2) [![Integration level](https://dash.yunohost.org/integration/kimai2.svg)](https://dash.yunohost.org/appci/app/kimai2) + +*Kimai2* is the reloaded version of the open source timetracker Kimai. Right now its in an early development phase, its usable but some advanced features from Kimai v1 are missing by now. + +Kimai v2 has nothing in common with its predecessor Kimai v1 besides the basic ideas of time-tracking and the current development team. + +### Disclaimers / important information + +* Require dedicated domain like **kimai.domain.tld**. +* This app is multi-instance (you can have more then one Kimai instance running on a YunoHost server) +* As sqlite support ended on version 1.14, if you choosed an sqlite databse during installation, Kimai2 upgrade is blocked to version 1.13 + +#### Multi-user support + +LDAP is supported HTTP auth is not supported Defaul Kimai2 roles are: +* ROLE_USER +* ROLE_TEAMLEAD => Kimai2 (Teamlead) YunoHost permission +* ROLE_ADMIN => Kimai2 (Admin) YunoHost permission +* ROLE_SUPER_ADMIN => Kimai2 (Super_Admin) YunoHost permission +Those roles are directly managed using YunoHost permission system. User choosen during installation is granted the ROLE_SUPER_ADMIN + + +## Useful links + ++ Website: [kimai.org](https://www.kimai.org/) ++ Demonstration: [Demo](https://www.kimai.org/demo/) ++ Application software repository: [github.com - YunoHost-Apps/kimai2](https://github.com/YunoHost-Apps/kimai2_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/kimai2/issues](https://github.com/YunoHost-Apps/kimai2_ynh/issues) diff --git a/pages/04.applications/10.docs/kiwiirc/app_kiwiirc.fr.md b/pages/04.applications/10.docs/kiwiirc/app_kiwiirc.fr.md new file mode 100644 index 00000000..158f12c5 --- /dev/null +++ b/pages/04.applications/10.docs/kiwiirc/app_kiwiirc.fr.md @@ -0,0 +1,23 @@ +--- +title: KiwiIRC +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_kiwiirc' +--- + +[![Installer KiwiIRC avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=kiwiirc) [![Integration level](https://dash.yunohost.org/integration/kiwiirc.svg)](https://dash.yunohost.org/appci/app/kiwiirc) + +*KiwiIRC* est un système de messagerie polyvalent basé sur le web et utilisant IRC. + +### Captures d'écran + +![Capture d'écran de KiwiIRC](https://github.com/YunoHost-Apps/kiwiirc_ynh/blob/master/doc/screenshots/screenshot.png) + +## Liens utiles + ++ Site web : [kiwiirc.com](https://kiwiirc.com/) ++ Démonstration : [Démo](https://kiwiirc.com/nextclient/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/kiwiirc](https://github.com/YunoHost-Apps/kiwiirc_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/kiwiirc/issues](https://github.com/YunoHost-Apps/kiwiirc_ynh/issues) diff --git a/pages/04.applications/10.docs/kiwiirc/app_kiwiirc.md b/pages/04.applications/10.docs/kiwiirc/app_kiwiirc.md new file mode 100644 index 00000000..c1bc16e8 --- /dev/null +++ b/pages/04.applications/10.docs/kiwiirc/app_kiwiirc.md @@ -0,0 +1,23 @@ +--- +title: KiwiIRC +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_kiwiirc' +--- + +[![Installer KiwiIRC with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=kiwiirc) [![Integration level](https://dash.yunohost.org/integration/kiwiirc.svg)](https://dash.yunohost.org/appci/app/kiwiirc) + +*KiwiIRC* is a versatile web based messenger using IRC. + +### Screenshots + +![Screenshots KiwiIRC](https://github.com/YunoHost-Apps/kiwiirc_ynh/blob/master/doc/screenshots/screenshot.png) + +## Useful links + ++ Website: [kiwiirc.com](https://kiwiirc.com/) ++ Demonstration: [Demo](https://kiwiirc.com/nextclient/) ++ Application software repository: [github.com - YunoHost-Apps/kiwiirc](https://github.com/YunoHost-Apps/kiwiirc_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/kiwiirc/issues](https://github.com/YunoHost-Apps/kiwiirc_ynh/issues) diff --git a/pages/04.applications/10.docs/komga/app_komga.fr.md b/pages/04.applications/10.docs/komga/app_komga.fr.md new file mode 100644 index 00000000..2aafd0e8 --- /dev/null +++ b/pages/04.applications/10.docs/komga/app_komga.fr.md @@ -0,0 +1,23 @@ +--- +title: Komga +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_komga' +--- + +[![Installer Komga avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=komga) [![Integration level](https://dash.yunohost.org/integration/komga.svg)](https://dash.yunohost.org/appci/app/komga) + +*Komga* est un serveur de bandes dessinées/mangas gratuit et open source. + +### Captures d'écran + +![Capture d'écran de Komga](https://github.com/YunoHost-Apps/komga_ynh/blob/master/doc/screenshots/home.png) + +## Liens utiles + ++ Site web : [komga.org](https://komga.org/) ++ Démonstration : [Démo](https://demo.komga.org) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/komga](https://github.com/YunoHost-Apps/komga_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/komga/issues](https://github.com/YunoHost-Apps/komga_ynh/issues) diff --git a/pages/04.applications/10.docs/komga/app_komga.md b/pages/04.applications/10.docs/komga/app_komga.md new file mode 100644 index 00000000..b34aa429 --- /dev/null +++ b/pages/04.applications/10.docs/komga/app_komga.md @@ -0,0 +1,23 @@ +--- +title: Komga +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_komga' +--- + +[![Installer Komga with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=komga) [![Integration level](https://dash.yunohost.org/integration/komga.svg)](https://dash.yunohost.org/appci/app/komga) + +*Komga* is a free and open source comics/mangas server. + +### Screenshots + +![Screenshots Komga](https://github.com/YunoHost-Apps/komga_ynh/blob/master/doc/screenshots/home.png) + +## Useful links + ++ Website: [komga.org](https://komga.org/) ++ Demonstration: [Demo](https://demo.komga.org) ++ Application software repository: [github.com - YunoHost-Apps/komga](https://github.com/YunoHost-Apps/komga_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/komga/issues](https://github.com/YunoHost-Apps/komga_ynh/issues) diff --git a/pages/04.applications/10.docs/kresus/app_kresus.fr.md b/pages/04.applications/10.docs/kresus/app_kresus.fr.md new file mode 100644 index 00000000..8f98a9a4 --- /dev/null +++ b/pages/04.applications/10.docs/kresus/app_kresus.fr.md @@ -0,0 +1,27 @@ +--- +title: Kresus +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_kresus' +--- + +![logo de kresus](image://kresus_logo.png?height=80) + +[![Install kresus with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=kresus) [![Integration level](https://dash.yunohost.org/integration/kresus.svg)](https://dash.yunohost.org/appci/app/kresus) + +Kresus est un gestionnaire de finances personnelles gratuit et libre qui tourne sur votre serveur. Il récupère automatiquement et quotidiennement toutes vos nouvelles transactions bancaires et vous permet de les catégoriser, étudier via des graphiques, et établir un budget. + +* Retrouvez l'intégralité de vos comptes dans une même interface et visualisez leur solde en un coup d'œil ! +* Configurez simplement des alertes emails sur montant d'une transaction ou sur solde pour vous prévenir en cas d'événements importants sur vos comptes. +* Définissez vos propres libellés, finis les « Chèque n°168468 » ! Triez vos opérations par catégories. Effectuez des recherches complexes sur vos transactions, par période, catégorie, montant ou date ! +* Suivez l'évolution de vos mouvements d'argent en un clin d'œil avec les graphiques par catégorie, par période et par type de mouvement (dépenses ou rentrées d'argent). + +## Liens utiles + ++ Site web : [kresus.org](https://kresus.org/) ++ Documentation officielle : [kresus.org/en/doc.html](https://kresus.org/en/doc.html) ++ Démonstration : [Démo](https://kresus.org/demo.html) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/kresus](https://github.com/YunoHost-Apps/kresus_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/kresus/issues](https://github.com/YunoHost-Apps/kresus_ynh/issues) diff --git a/pages/04.applications/10.docs/kresus/app_kresus.md b/pages/04.applications/10.docs/kresus/app_kresus.md new file mode 100644 index 00000000..cc74b0f2 --- /dev/null +++ b/pages/04.applications/10.docs/kresus/app_kresus.md @@ -0,0 +1,28 @@ +--- +title: Kresus +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_kresus' +--- + +![kresus's logo](image://kresus_logo.png?height=80) + +[![Install kresus with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=kresus) [![Integration level](https://dash.yunohost.org/integration/kresus.svg)](https://dash.yunohost.org/appci/app/kresus) + +Kresus is a free and open source personal finance manager running on your server. It automatically and daily retrieves all your new banking transactions and allows you to categorize them, study them via +graphs, and budgeting. + +* Find all your accounts in one interface and view their balance at a glance! +* Set up simple email alerts on transaction amounts and balances to notify you of important events in your accounts. +* Define your own wording, no more "n°168468"! Sort your transactions by category. Perform complex searches on your transactions, by period, category, amount or date! +* Follow the evolution of your money movements at a glance with the graphs by category, by period and by type of movement (expenses or receipts of money). + +## Useful links + ++ Website : [kresus.org](https://kresus.org/) ++ Official documentation : [kresus.org/en/doc.html](https://kresus.org/en/doc.html) ++ Demonstration : [Demo](https://kresus.org/demo.html) ++ Application software repository : [github.com - YunoHost-Apps/kresus](https://github.com/YunoHost-Apps/kresus_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/kresus/issues](https://github.com/YunoHost-Apps/kresus_ynh/issues) diff --git a/pages/04.applications/10.docs/leed/app_leed.fr.md b/pages/04.applications/10.docs/leed/app_leed.fr.md new file mode 100644 index 00000000..e929879c --- /dev/null +++ b/pages/04.applications/10.docs/leed/app_leed.fr.md @@ -0,0 +1,22 @@ +--- +title: Leed +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_leed' +--- + +![logo de leed](image://leed_logo.png?height=80) + +[![Install Leed with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=leed) [![Integration level](https://dash.yunohost.org/integration/leed.svg)](https://dash.yunohost.org/appci/app/leed) + +Leed (contraction de Light Feed) est un agrégateur RSS/ATOM minimaliste qui permet la consultation de flux RSS de manière rapide et non intrusive. +Cet agrégateur fonctionne avec un système de tâches automatiques afin de traiter les informations de manière transparente et de les afficher le plus rapidement possible lorsque vous vous y connectez. + +## Liens utiles + ++ Site web : [git.idleman.fr/LeedRSS/Leed](http://git.idleman.fr/LeedRSS/Leed) ++ Documentation officielle : [git.idleman.fr/LeedRSS/Leed](http://git.idleman.fr/LeedRSS/Leed) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/leed](https://github.com/YunoHost-Apps/leed_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/leed/issues](https://github.com/YunoHost-Apps/leed_ynh/issues) diff --git a/pages/04.applications/10.docs/leed/app_leed.md b/pages/04.applications/10.docs/leed/app_leed.md new file mode 100644 index 00000000..b50bb56a --- /dev/null +++ b/pages/04.applications/10.docs/leed/app_leed.md @@ -0,0 +1,22 @@ +--- +title: Leed +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_leed' +--- + +![leed's logo](image://leed_logo.png?height=80) + +[![Install leed with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=leed) [![Integration level](https://dash.yunohost.org/integration/leed.svg)](https://dash.yunohost.org/appci/app/leed) + +Leed (short for Light Feed) is a minimalist RSS/ATOM aggregator which offers fast RSS consultation and non-intrusive features. +This aggregator works with a system of automatic tasks in order to process the information transparently and display it as quickly as possible when you login. + +## Useful links + ++ Website: [git.idleman.fr/LeedRSS/Leed](http://git.idleman.fr/LeedRSS/Leed) ++ Official documentation: [git.idleman.fr/LeedRSS/Leed](http://git.idleman.fr/LeedRSS/Leed) ++ Application software repository: [github.com - YunoHost-Apps/leed](https://github.com/YunoHost-Apps/leed_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/leed/issues](https://github.com/YunoHost-Apps/leed_ynh/issues) diff --git a/pages/04.applications/10.docs/lemmy/app_lemmy.md b/pages/04.applications/10.docs/lemmy/app_lemmy.md new file mode 100644 index 00000000..a46be8d4 --- /dev/null +++ b/pages/04.applications/10.docs/lemmy/app_lemmy.md @@ -0,0 +1,21 @@ +--- +title: Lemmy +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lemmy' +--- + +![lemmy's logo](image://lemmy_logo.svg?resize=,80) + +[![Install Lemmy with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=lemmy) [![Integration level](https://dash.yunohost.org/integration/lemmy.svg)](https://dash.yunohost.org/appci/app/lemmy) + +Lemmy is similar to sites like Reddit, Lobste.rs, or Hacker News: you subscribe to forums you're interested in, post links and discussions, then vote, and comment on them. Behind the scenes, it is very different; anyone can easily run a server, and all these servers are federated (think email), and connected to the same universe, called the Fediverse. This YunoHost package will install Lemmy for your YunoHost instance to have its own self-hosted and federated lemmy instance. + +## Useful links + ++ Website: [join-lemmy.org](https://join-lemmy.org) ++ Official documentation: [docs](https://join-lemmy.org/docs/en/index.html) ++ Application software repository: [github.com - YunoHost-Apps/lemmy](https://github.com/YunoHost-Apps/lemmy_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/lemmy/issues](https://github.com/YunoHost-Apps/lemmy_ynh/issues) diff --git a/pages/04.applications/10.docs/limesurvey/app_limesurvey.fr.md b/pages/04.applications/10.docs/limesurvey/app_limesurvey.fr.md new file mode 100644 index 00000000..4d9a3cd2 --- /dev/null +++ b/pages/04.applications/10.docs/limesurvey/app_limesurvey.fr.md @@ -0,0 +1,29 @@ +--- +title: LimeSurvey +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_limesurvey' +--- + +![logo de LimeSurvey](image://limesurvey_logo.svg?resize=,80) + +[![Install LimeSurvey with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=limesurvey) [![Integration level](https://dash.yunohost.org/integration/limesurvey.svg)](https://dash.yunohost.org/appci/app/limesurvey) + +LimeSurvey est un outil de création et diffusion de sondage/formulaire en ligne. + +## Configuration + +Pour configurer un questionnaire, il faut se rendre à `limesurvey.domaine.tld/admin`. + +## Limitations avec YunoHost + +Le multi-utilisateurs n'est pas supporté. + +## Liens utiles + + + Site web : [www.limesurvey.org](https://www.limesurvey.org/fr/) + + Documentation officielle : [manual.limesurvey.org](https://manual.limesurvey.org/LimeSurvey_Manual/fr) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/limesurvey](https://github.com/YunoHost-Apps/limesurvey_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/limesurvey/issues](https://github.com/YunoHost-Apps/limesurvey_ynh/issues) diff --git a/pages/04.applications/10.docs/limesurvey/app_limesurvey.md b/pages/04.applications/10.docs/limesurvey/app_limesurvey.md new file mode 100644 index 00000000..3effc807 --- /dev/null +++ b/pages/04.applications/10.docs/limesurvey/app_limesurvey.md @@ -0,0 +1,29 @@ +--- +title: LimeSurvey +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_limesurvey' +--- + +![LimeSurvey's logo](image://limesurvey_logo.svg?resize=,80) + +[![Install LimeSurvey with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=limesurvey) [![Integration level](https://dash.yunohost.org/integration/limesurvey.svg)](https://dash.yunohost.org/appci/app/limesurvey) + +LimeSurvey is a tool for creating and distributing online surveys/forms. + +## Configuration + +To configure a questionnaire, go to `limesurvey.domain.tld/admin`. + +## Limitations with YunoHost + +Multi-user is not supported. + +## Useful links + ++ Website: [www.limesurvey.org](https://www.limesurvey.org/) ++ Official documentation: [manual.limesurvey.org](https://manual.limesurvey.org/LimeSurvey_Manual) ++ Application software repository: [github.com - YunoHost-Apps/limesurvey](https://github.com/YunoHost-Apps/limesurvey_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/limesurvey/issues](https://github.com/YunoHost-Apps/limesurvey_ynh/issues) diff --git a/pages/04.applications/10.docs/listmonk/app_listmonk.md b/pages/04.applications/10.docs/listmonk/app_listmonk.md new file mode 100644 index 00000000..ebf10150 --- /dev/null +++ b/pages/04.applications/10.docs/listmonk/app_listmonk.md @@ -0,0 +1,37 @@ +--- +title: listmonk +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_listmonk' +--- + +listmonk is a self-hosted, high performance mailing list and newsletter manager + +## Authentication + +By default, there is no username-password for the admin user. In place the authentication is enforced by the reverse-proxy itself. Only the admin user chosen while installing the app can access the admin panel. + +More users can be given access to the panel by editing the Users and Groups permissions from the webmin or the cli. + +## SMTP Configuration + +listmonk requires an active SMTP configuration to be able to send e-mails. This can be configured in listmonk's admin interface, by going to Settings -> Settings -> SMTP + +### Local SMTP Configuration + +If you want to use your YunoHost server to send e-mails, use the following configuration: + +``` +Host: localhost +Port: 25 +Auth protocol: None +Skip TLS Verification: True +``` + +### Gmail, Amazon SES, Mailgun, Mailjet, Sendgrid, Postmark, e.t.c + +Just click on the respective buttons to get the desired configurations, and replace the relevant fields. + +These settings are also provided by the providers themselves. diff --git a/pages/04.applications/10.docs/lstu/app_lstu.fr.md b/pages/04.applications/10.docs/lstu/app_lstu.fr.md new file mode 100644 index 00000000..0fcb67b5 --- /dev/null +++ b/pages/04.applications/10.docs/lstu/app_lstu.fr.md @@ -0,0 +1,22 @@ +--- +title: Lstu +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lstu' +--- + +![logo de lstu](image://lstu_logo.svg?resize=,80) + +[![Install lstu with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=lstu) [![Integration level](https://dash.yunohost.org/integration/lstu.svg)](https://dash.yunohost.org/appci/app/lstu) + +LSTU est l'acronyme de "Let's shorten that URL" et est un raccourcisseur d'URL. Il permet de réduire la taille et de personnaliser une URL et de générer en même temps un flashcode associé. Vous pouvez ainsi relayer une URL plus courte dans des SMS, sur des publications papier ou des affiches. Il propose aussi une API permettant de générer ces liens à partir d'appel d'autres applications. Une extension de navigateur vous permet aussi de raccourcir n'importe quelle URL en un clic. + +## Liens utiles + ++ Site web : [lstu.fr](https://lstu.fr) ++ Documentation officielle : [framagit.org/fiat-tux/hat-softwares/lstu/-/wikis/home](https://framagit.org/fiat-tux/hat-softwares/lstu/-/wikis/home) ++ Démonstration : [Démo](https://lstu.fr) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/lstu](https://github.com/YunoHost-Apps/lstu_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/lstu/issues](https://github.com/YunoHost-Apps/lstu_ynh/issues) diff --git a/pages/04.applications/10.docs/lstu/app_lstu.md b/pages/04.applications/10.docs/lstu/app_lstu.md new file mode 100644 index 00000000..19f2d52d --- /dev/null +++ b/pages/04.applications/10.docs/lstu/app_lstu.md @@ -0,0 +1,22 @@ +--- +title: Lstu +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lstu' +--- + +![lstu's logo](image://lstu_logo.svg?resize=,80) + +[![Install lstu with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=lstu) [![Integration level](https://dash.yunohost.org/integration/lstu.svg)](https://dash.yunohost.org/appci/app/lstu) + +LSTU stands for "Let's shorten that URL" and is a URL shortener. It allows you to reduce the size and customize a URL and generate an associated flashcode at the same time. You can thus relay a shorter URL in text messages, on paper publications or posters. It also offers an API to generate these links from calls to other applications. A browser extension also allows you to shorten any URL in one click. + +## Useful links + ++ Website : [lstu.fr](https://lstu.fr) ++ Official documentation : [framagit.org/fiat-tux/hat-softwares/lstu/-/wikis/home](https://framagit.org/fiat-tux/hat-softwares/lstu/-/wikis/home) ++ Demonstration : [Demo](https://lstu.fr) ++ Application software repository : [github.com - YunoHost-Apps/lstu](https://github.com/YunoHost-Apps/lstu_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/lstu/issues](https://github.com/YunoHost-Apps/lstu_ynh/issues) diff --git a/pages/04.applications/10.docs/lufi/app_lufi.fr.md b/pages/04.applications/10.docs/lufi/app_lufi.fr.md new file mode 100644 index 00000000..284df64f --- /dev/null +++ b/pages/04.applications/10.docs/lufi/app_lufi.fr.md @@ -0,0 +1,27 @@ +--- +title: Lufi +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lufi' +--- + +![logo de Lufi](image://lufi_logo.svg?resize=80) + +[![Installer Lufi avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=lufi) [![Integration level](https://dash.yunohost.org/integration/lufi.svg)](https://dash.yunohost.org/appci/app/lufi) + +Lufi est un logiciel libre d’hébergement de fichiers. Les fichiers envoyés sur une instance de Lufi sont chiffrés avant l’envoi au serveur : l’administrateur du serveur ne peut pas voir le contenu de vos fichiers. +L’administrateur ne peut voir que le nom du fichier, sa taille et son type mime (son type de fichier : vidéo, texte, etc.).[¹](#sources) + +## Liens utiles + + + Site web : [Framagit.org/luc/lufi](https://framagit.org/luc/lufi) + + Site de démonstration : [demo.lufi.io](https://demo.lufi.io/) + + Documentation officielle : [Framagit.org - fiat-tux](https://framagit.org/fiat-tux/hat-softwares/lufi/-/wikis/home) + + Dépôt logiciel de Lufi : [github.com - YunoHost-Apps/lufi](https://github.com/YunoHost-Apps/lufi_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/lufi/issues](https://github.com/YunoHost-Apps/lufi_ynh/issues) + +### Sources + +¹ (https://demo.lufi.io/about) diff --git a/pages/04.applications/10.docs/lufi/app_lufi.md b/pages/04.applications/10.docs/lufi/app_lufi.md new file mode 100644 index 00000000..c2f5c87d --- /dev/null +++ b/pages/04.applications/10.docs/lufi/app_lufi.md @@ -0,0 +1,23 @@ +--- +title: Lufi +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lufi' +--- + +![Lufi's logo](image://lufi_logo.svg?resize=80) + +[![Install Lufi with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=lufi) [![Integration level](https://dash.yunohost.org/integration/lufi.svg)](https://dash.yunohost.org/appci/app/lufi) + +Lufi is a free file hosting software. Files sent on an instance of Lufi are encrypted before being sent to the server: the server administrator cannot see the content of your files. +The administrator can only see the file name, size and mime type (file type: video, text, etc.). + +## Useful links + + + Website: [Framagit.org/luc/lufi](https://framagit.org/luc/lufi) + + Demonstration: [demo.lufi.io](https://demo.lufi.io/) + + Official documentation: [Framagit.org - fiat-tux](https://framagit.org/fiat-tux/hat-softwares/lufi/-/wikis/home) + + Application software repository: [github.com - YunoHost-Apps/lufi](https://github.com/YunoHost-Apps/lufi_ynh) + + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/lufi/issues](https://github.com/YunoHost-Apps/lufi_ynh/issues) diff --git a/pages/04.applications/10.docs/lutim/app_lutim.fr.md b/pages/04.applications/10.docs/lutim/app_lutim.fr.md new file mode 100644 index 00000000..90dd7e88 --- /dev/null +++ b/pages/04.applications/10.docs/lutim/app_lutim.fr.md @@ -0,0 +1,23 @@ +--- +title: Lutim +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lutim' +--- + +![logo de lutim](image://lutim_logo.png?height=80) + +[![Install Lutim with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=lutim) [![Integration level](https://dash.yunohost.org/integration/lutim.svg)](https://dash.yunohost.org/appci/app/lutim) + +Lutim est un service gratuit et anonyme d’hébergement d’images. Il s’agit aussi du nom du logiciel (libre) qui fournit ce service. +Les images déposées sur Lutim peuvent être stockées indéfiniment, ou s’effacer dès le premier affichage ou au bout du délai choisi parmi ceux proposés. + +## Liens utiles + + + Site web : [Framagit - lutim](https://framagit.org/fiat-tux/hat-softwares/lutim) + + Documentation officielle : [lut.im/about](https://lut.im/about) + + Démonstration [lut.im](https://lut.im) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/lutim](https://github.com/YunoHost-Apps/lutim_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/lutim/issues](https://github.com/YunoHost-Apps/lutim_ynh/issues) diff --git a/pages/04.applications/10.docs/lutim/app_lutim.md b/pages/04.applications/10.docs/lutim/app_lutim.md new file mode 100644 index 00000000..89364559 --- /dev/null +++ b/pages/04.applications/10.docs/lutim/app_lutim.md @@ -0,0 +1,23 @@ +--- +title: Lutim +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lutim' +--- + +![Lutim's logo](image://lutim_logo.png?height=80) + +[![Install Lutim with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=lutim) [![Integration level](https://dash.yunohost.org/integration/lutim.svg)](https://dash.yunohost.org/appci/app/lutim) + +Lutim is a free and anonymous image hosting service. It is also the name of the (free) software that provides this service. +Images uploaded to Lutim can be stored indefinitely, or can be deleted on first viewing or after a period of time chosen from those offered. + +## Useful links + + + Website : [Framagit - lutim](https://framagit.org/fiat-tux/hat-softwares/lutim) + + Official documentation : [lut.im/about](https://lut.im/about) + + Demonstration [lut.im](https://lut.im) + + Application software repository : [github.com - YunoHost-Apps/lutim](https://github.com/YunoHost-Apps/lutim_ynh) + + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/lutim/issues](https://github.com/YunoHost-Apps/lutim_ynh/issues) diff --git a/pages/04.applications/10.docs/lychee/app_lychee.fr.md b/pages/04.applications/10.docs/lychee/app_lychee.fr.md new file mode 100644 index 00000000..1c8fb122 --- /dev/null +++ b/pages/04.applications/10.docs/lychee/app_lychee.fr.md @@ -0,0 +1,22 @@ +--- +title: Lychee +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lychee' +--- + +![logo de Lychee](image://lychee_logo.png?width=80) + +[![Installer Lychee avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=lychee) [![Integration level](https://dash.yunohost.org/integration/lychee.svg)](https://dash.yunohost.org/appci/app/lychee) + +Lychee est un outil de gestion de photos gratuit, qui fonctionne sur votre serveur ou votre espace Web. L'installation est une question de secondes. Téléchargez, gérez et partagez des photos comme à partir d'une application native. Lychee est livré avec tout ce dont vous avez besoin et toutes vos photos sont stockées en toute sécurité. + +## Liens utiles + + + Site web : [lycheeorg.github.io](https://lycheeorg.github.io/) + + Site de démonstration : [lycheeorg.github.io/demo](https://lycheeorg.github.io/demo/) + + Documentation officielle : [lycheeorg.github.io/docs](https://lycheeorg.github.io/docs/) + + Dépôt logiciel de Lychee : [github.com - YunoHost-Apps/lychee](https://github.com/YunoHost-Apps/lychee_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/lychee/issues](https://github.com/YunoHost-Apps/lychee_ynh/issues) diff --git a/pages/04.applications/10.docs/lychee/app_lychee.md b/pages/04.applications/10.docs/lychee/app_lychee.md new file mode 100644 index 00000000..9ecfb5b0 --- /dev/null +++ b/pages/04.applications/10.docs/lychee/app_lychee.md @@ -0,0 +1,22 @@ +--- +title: Lychee +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lychee' +--- + +![Lyfee's logo](image://lychee_logo.png?width=80) + +[![Install Lychee with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=lychee) [![Integration level](https://dash.yunohost.org/integration/lychee.svg)](https://dash.yunohost.org/appci/app/lychee) + +Lychee is a free photo-management tool, which runs on your server or web-space. Installing is a matter of seconds. Upload, manage and share photos like from a native application. Lychee comes with everything you need and all your photos are stored securely. + +## Useful links + + + Website: [lycheeorg.github.io](https://lycheeorg.github.io/) + + Demonstration: [lycheeorg.github.io/demo](https://lycheeorg.github.io/demo/) + + Official documentation: [lycheeorg.github.io/docs](https://lycheeorg.github.io/docs/) + + Application software repository: [github.com - YunoHost-Apps/lychee](https://github.com/YunoHost-Apps/lychee_ynh) + + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/lychee/issues](https://github.com/YunoHost-Apps/lychee_ynh/issues) diff --git a/pages/04.applications/10.docs/mailman/app_mailman.fr.md b/pages/04.applications/10.docs/mailman/app_mailman.fr.md new file mode 100644 index 00000000..857f03ac --- /dev/null +++ b/pages/04.applications/10.docs/mailman/app_mailman.fr.md @@ -0,0 +1,21 @@ +--- +title: Mailman +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mailman' +--- + +![logo de mailman](image://mailman_logo.svg?resize=,80) + +[![Install Mailman with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=mailman) [![Integration level](https://dash.yunohost.org/integration/mailman.svg)](https://dash.yunohost.org/appci/app/mailman) + +Mailman est un logiciel gratuit (léger) de gestion de listes de discussion et de bulletins d'information électroniques (newsletter). + +## Liens utiles + ++ Site web : [www.list.org](http://www.list.org/) ++ Documentation officielle : [mailman.readthedocs.io](https://mailman.readthedocs.io/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mailman](https://github.com/YunoHost-Apps/mailman_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/mailman/issues](https://github.com/YunoHost-Apps/mailman_ynh/issues) diff --git a/pages/04.applications/10.docs/mailman/app_mailman.md b/pages/04.applications/10.docs/mailman/app_mailman.md new file mode 100644 index 00000000..c24d0774 --- /dev/null +++ b/pages/04.applications/10.docs/mailman/app_mailman.md @@ -0,0 +1,21 @@ +--- +title: Mailman +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mailman' +--- + +![mailman's logo](image://mailman_logo.svg?resize=,80) + +[![Install Mailman with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=mailman) [![Integration level](https://dash.yunohost.org/integration/mailman.svg)](https://dash.yunohost.org/appci/app/mailman) + +Mailman is a (lightweight) free software for managing electronic mail discussion and e-newsletter lists. + +## Useful links + ++ Website : [www.list.org](http://www.list.org/) ++ Official documentation : [mailman.readthedocs.io](https://mailman.readthedocs.io/) ++ Application software repository : [github.com - YunoHost-Apps/mailman](https://github.com/YunoHost-Apps/mailman_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/mailman/issues](https://github.com/YunoHost-Apps/mailman_ynh/issues) diff --git a/pages/04.applications/10.docs/mailman3/app_mailman3.fr.md b/pages/04.applications/10.docs/mailman3/app_mailman3.fr.md new file mode 100644 index 00000000..7e5e3525 --- /dev/null +++ b/pages/04.applications/10.docs/mailman3/app_mailman3.fr.md @@ -0,0 +1,67 @@ +--- +title: Mailman3 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mailman3' +--- + +[![Installer Mailman3 avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mailman3) [![Integration level](https://dash.yunohost.org/integration/mailman3.svg)](https://dash.yunohost.org/appci/app/mailman3) + +*Mailman3* est un gestionnaire de liste de discussion par email. + +## Captures d'écran + +![Capture d'écran de Mailman3](https://github.com/YunoHost-Apps/mailman3_ynh/blob/master/doc/screenshots/screenshot1.webp) + +## Avertissements / informations importantes + +* Toutes les limitations, contraintes ou choses connues qui ne fonctionnent pas, telles que (mais pas limitées à) : + * nécessitant un domaine dédié complet + +* Autres informations que les gens devraient connaître, telles que : + * Il n'y a pas encore de support LDAP (apparemment en cours de développement). + * Les utilisateurs peuvent également s'inscrire eux-mêmes pour gérer les détails. + * Les utilisateurs peuvent utiliser les listes de diffusion sans s'inscrire ? + +L'administration classique est disponible sur la page : https://myyunohost.org/ + +L'admin Django est disponible sur la page : https://myyunohost.org/admin/ + +## Configuration générale + +Mailman 3 ou "The Mailman Suite" est composé de 5 parties mobiles. Pour en savoir plus, consultez la documentation suivante : + +> http://docs.mailman3.org/en/latest/index.html#the-mailman-suite + +Sur votre YunoHost, tous les fichiers de configuration dont vous devez vous soucier se trouvent dans : + +* `/etc/mailman3/` +* `/usr/share/mailman3-web/` + +Les services que vous devez gérer peuvent être vérifiés avec : + +* `systemctl status mailman3` +* `systemctl status mailman3-web` + +Il est important de noter que ce paquet utilise le paquet Debian [mailman3-full](http://docs.mailman3.org/en/latest/prodsetup.html#distribution-packages) contenu dans le dépôt des rétro-portages (backports) de Debian Stretch. L'installation par défaut suppose l'utilisation d'une base de données SQLite3, mais le script d'installation passe outre et utilise une base de données PostgreSQL à la place. + +Enfin, vous pouvez également configurer les choses via l'administration web de Django disponible à `/admin/` + +## Limitations + +* La migration à partir de Mailman 2.X n'est pas officiellement supportée, désolé. Cependant, il existe un manuel qui détaille un processus expérimental. Veuillez consulter [la documentation] (https://docs.mailman3.org/en/latest/migration.html). + +* Mailman3 doit être configuré pour utiliser un domaine principal (https://myyunohost.org et non https://myyunohost.org/mailman3). + +* Vous devez avoir un certificat HTTPS installé sur le domaine racine. + +* Il ne peut y avoir qu'une seule installation par YunoHost. + +## Liens utiles + ++ Site web : [list.org](https://www.list.org/) ++ Démonstration : [Démo](https://lists.mailman3.org/mailman3/lists/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mailman3](https://github.com/YunoHost-Apps/mailman3_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/mailman3/issues](https://github.com/YunoHost-Apps/mailman3_ynh/issues) diff --git a/pages/04.applications/10.docs/mailman3/app_mailman3.md b/pages/04.applications/10.docs/mailman3/app_mailman3.md new file mode 100644 index 00000000..9d90a9fa --- /dev/null +++ b/pages/04.applications/10.docs/mailman3/app_mailman3.md @@ -0,0 +1,68 @@ +--- +title: Mailman3 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mailman3' +--- + +[![Installer Mailman3 with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mailman3) [![Integration level](https://dash.yunohost.org/integration/mailman3.svg)](https://dash.yunohost.org/appci/app/mailman3) + +*Mailman3* is an electronic mailing lists manager. + +### Screenshots + +![Screenshot of Mailman3](./doc/screenshots/screenshot1.webp) + +### Disclaimers / important information + +* Any known limitations, constrains or stuff not working, such as (but not limited to): + * requiring a full dedicated domain + +* Other infos that people should be aware of, such as: + * No LDAP support yet (apparently under development) + * Users can also just sign up themselves to manage details + * Users can use mailing lists without signing up? + +Classical admin is available on the page: https://myyunohost.org/ + +Django admin on: https://myyunohost.org/admin/ + +### General Configuration + +Mailman 3 or "The Mailman Suite" is made up of 5 moving parts. See the following documentation for more: + +> http://docs.mailman3.org/en/latest/index.html#the-mailman-suite + +On your YunoHost, all the configuration files you need to worry about are in: + +* `/etc/mailman3/` +* `/usr/share/mailman3-web/` + +The services you need to manage can be checked with: + +* `systemctl status mailman3` +* `systemctl status mailman3-web` + +It is important to note that this package makes use of the [mailman3-full](http://docs.mailman3.org/en/latest/prodsetup.html#distribution-packages) Debian package contained in the Debian Stretch backports repository. The default installation assumes the use of a SQLite3 database but the installation script overrides this and uses a PostgreSQL database instead. + +Finally, you also configure things through the Django web admin available at `/admin/`. + +### Limitations + +* Migrating from Mailman 2.X is not officially supported, sorry. However, there is a manual and + which details an experimental process. Please see [the documentation](https://docs.mailman3.org/en/latest/migration.html). + +* Mailman3 must be configured to use a root domain (https://myyunohost.org and not https://myyunohost.org/mailman3). + +* You must have a HTTPS certificate installed on the root domain. + +* There may be only one installation per YunoHost. + +## Useful links + ++ Website: [list.org](https://www.list.org/) ++ Demonstration: [Demo](https://lists.mailman3.org/mailman3/lists/) ++ Application software repository: [github.com - YunoHost-Apps/mailman3](https://github.com/YunoHost-Apps/mailman3_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mailman3/issues](https://github.com/YunoHost-Apps/mailman3_ynh/issues) diff --git a/pages/04.applications/10.docs/mantis/app_mantis.fr.md b/pages/04.applications/10.docs/mantis/app_mantis.fr.md new file mode 100644 index 00000000..8c5bcdc8 --- /dev/null +++ b/pages/04.applications/10.docs/mantis/app_mantis.fr.md @@ -0,0 +1,21 @@ +--- +title: Mantis +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mantis' +--- + +![logo de Mantis](image://mantis_logo.png?height=80) + +[![Installer Mantis avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=mantis) [![Integration level](https://dash.yunohost.org/integration/mantis.svg)](https://dash.yunohost.org/appci/app/mantis) + +Mantis Bug Tracker est un système de suivi des bogues gratuit et open source. L'utilisation la plus courante de MantisBT est de suivre les bogues logiciels. Cependant, MantisBT est souvent configuré par les utilisateurs pour servir de système de suivi des problèmes plus générique et d'outil de gestion de projet. + +## Liens utiles + ++ Site web : [mantisbt.org](https://mantisbt.org) ++ Documentation officielle : [mantisbt.org/documentation.php](https://mantisbt.org/documentation.php) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mantis](https://github.com/YunoHost-Apps/mantis_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/mantis/issues](https://github.com/YunoHost-Apps/mantis_ynh/issues) diff --git a/pages/04.applications/10.docs/mantis/app_mantis.md b/pages/04.applications/10.docs/mantis/app_mantis.md new file mode 100644 index 00000000..2283dedb --- /dev/null +++ b/pages/04.applications/10.docs/mantis/app_mantis.md @@ -0,0 +1,21 @@ +--- +title: Mantis +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mantis' +--- + +![Mantis's logo](image://mantis_logo.png?height=80) + +[![Install Mantis with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=mantis) [![Integration level](https://dash.yunohost.org/integration/mantis.svg)](https://dash.yunohost.org/appci/app/mantis) + +Mantis Bug Tracker is a free and open source, web-based bug tracking system. The most common use of MantisBT is to track software defects. However, MantisBT is often configured by users to serve as a more generic issue tracking system and project management tool. + +## Useful links + ++ Website: [mantisbt.org](https://mantisbt.org) ++ Official documentation: [mantisbt.org/documentation.php](https://mantisbt.org/documentation.php) ++ Application software repository: [github.com - YunoHost-Apps/mantis](https://github.com/YunoHost-Apps/mantis_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mantis/issues](https://github.com/YunoHost-Apps/mantis_ynh/issues) diff --git a/pages/04.applications/10.docs/matomo/app_matomo.fr.md b/pages/04.applications/10.docs/matomo/app_matomo.fr.md new file mode 100644 index 00000000..9dfd2e94 --- /dev/null +++ b/pages/04.applications/10.docs/matomo/app_matomo.fr.md @@ -0,0 +1,21 @@ +--- +title: Matomo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_matomo' +--- + +![Matomo's logo](image://matomo_logo.png?height=80) + +[![Install Matomo with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=matomo) [![Integration level](https://dash.yunohost.org/integration/matomo.svg)](https://dash.yunohost.org/appci/app/matomo) + +Matomo est une plateforme d'analyse open source de mesure de statistiques Web. Il s'agit d'un logiciel PHP MySQL complet que vous téléchargez et installez sur votre propre serveur Web. À la fin du processus d'installation de cinq minutes, vous recevrez un code JavaScript. Copiez et collez simplement cette balise sur les sites Web que vous souhaitez suivre et accédez à vos rapports d'analyse en temps réel. + +## Liens utiles + ++ Site web : [matomo.org](https://matomo.org) ++ Documentation officielle : [https://matomo.org/docs](https://matomo.org/docs) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/matomo](https://github.com/YunoHost-Apps/matomo_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/matomo/issues](https://github.com/YunoHost-Apps/matomo_ynh/issues) diff --git a/pages/04.applications/10.docs/matomo/app_matomo.md b/pages/04.applications/10.docs/matomo/app_matomo.md new file mode 100644 index 00000000..12bc21b0 --- /dev/null +++ b/pages/04.applications/10.docs/matomo/app_matomo.md @@ -0,0 +1,21 @@ +--- +title: Matomo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_matomo' +--- + +![Matomo's logo](image://matomo_logo.png?height=80) + +[![Install Matomo with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=matomo) [![Integration level](https://dash.yunohost.org/integration/matomo.svg)](https://dash.yunohost.org/appci/app/matomo) + +Matomo is the leading Free/Libre open analytics platform. It is a full-featured PHP MySQL software program that you download and install on your own webserver. At the end of the five-minute installation process, you will be given a JavaScript code. Simply copy and paste this tag on websites you wish to track and access your analytics reports in real-time. + +## Useful links + ++ Website: [matomo.org](https://matomo.org) ++ Official documentation: [https://matomo.org/docs](https://matomo.org/docs) ++ Application software repository: [github.com - YunoHost-Apps/matomo](https://github.com/YunoHost-Apps/matomo_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/matomo/issues](https://github.com/YunoHost-Apps/matomo_ynh/issues) diff --git a/pages/04.applications/10.docs/matterbridge/app_matterbridge.fr.md b/pages/04.applications/10.docs/matterbridge/app_matterbridge.fr.md new file mode 100644 index 00000000..3d579331 --- /dev/null +++ b/pages/04.applications/10.docs/matterbridge/app_matterbridge.fr.md @@ -0,0 +1,22 @@ +--- +title: Matterbridge +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_matterbridge' +--- + +[![Installer Matterbridge avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=matterbridge) [![Integration level](https://dash.yunohost.org/integration/matterbridge.svg)](https://dash.yunohost.org/appci/app/matterbridge) + +*Matterbridge* est un connecteur entre une série de protocoles de discussion. + +### Configuration + +Comment configurer cette application : un fichier brut en SSH `/opt/yunohost/matterbridge/matterbridge.toml`. Vous pouvez suivre cette [documentation](https://github.com/42wim/matterbridge/wiki/How-to-create-your-config) sur la façon de créer votre config. + +## Liens utiles + ++ Site web : [github.com/42wim/matterbridge](https://github.com/42wim/matterbridge) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/matterbridge](https://github.com/YunoHost-Apps/matterbridge_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/matterbridge/issues](https://github.com/YunoHost-Apps/matterbridge_ynh/issues) diff --git a/pages/04.applications/10.docs/matterbridge/app_matterbridge.md b/pages/04.applications/10.docs/matterbridge/app_matterbridge.md new file mode 100644 index 00000000..05206d5a --- /dev/null +++ b/pages/04.applications/10.docs/matterbridge/app_matterbridge.md @@ -0,0 +1,22 @@ +--- +title: Matterbridge +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_matterbridge' +--- + +[![Installer Matterbridge with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=matterbridge) [![Integration level](https://dash.yunohost.org/integration/matterbridge.svg)](https://dash.yunohost.org/appci/app/matterbridge) + +*Matterbridge* is a multi-protocols bridge for online communications. + +### Configuration + +How to configure this app: a plain file with SSH `/opt/yunohost/matterbridge/matterbridge.toml`. You can follow this [doc](https://github.com/42wim/matterbridge/wiki/How-to-create-your-config) on how to create your config. + +## Useful links + ++ Website: [github.com/42wim/matterbridge](https://github.com/42wim/matterbridge) ++ Application software repository: [github.com - YunoHost-Apps/matterbridge](https://github.com/YunoHost-Apps/matterbridge_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/matterbridge/issues](https://github.com/YunoHost-Apps/matterbridge_ynh/issues) diff --git a/pages/04.applications/10.docs/mattermost/app_mattermost.fr.md b/pages/04.applications/10.docs/mattermost/app_mattermost.fr.md new file mode 100644 index 00000000..8439bdf5 --- /dev/null +++ b/pages/04.applications/10.docs/mattermost/app_mattermost.fr.md @@ -0,0 +1,26 @@ +--- +title: Mattermost +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mattermost' +--- + +![logo de Mattermost](image://mattermost_logo.svg?resize=,80) + +[![Install Mattermost with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=mattermost) [![Integration level](https://dash.yunohost.org/integration/mattermost.svg)](https://dash.yunohost.org/appci/app/mattermost) + +Mattermost est un logiciel décentralisé de communication en équipe. Pour les adeptes de Slack, l'importation de vos données est possible, permettant de faire la transition vers cet outil libre en douceur. + +La plate-forme permet : +* Le partage de messages et de fichiers sur différents appareils : PC, ordiphones et tablettes grâce aux applications dédiées. +* La mise en forme des messages se fait avec le langage Markdown. +* L'archivage continu et la recherche instantanée, et la prise en charge les notifications et les intégrations avec vos outils existants. + +## Liens utiles + ++ Site web : [mattermost.com](https://mattermost.com/) ++ Documentation officielle : [docs.mattermost.com/guides/user.html](https://docs.mattermost.com/guides/user.html) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mattermost](https://github.com/YunoHost-Apps/mattermost_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/mattermost/issues](https://github.com/YunoHost-Apps/mattermost_ynh/issues) diff --git a/pages/04.applications/10.docs/mattermost/app_mattermost.md b/pages/04.applications/10.docs/mattermost/app_mattermost.md new file mode 100644 index 00000000..15b45861 --- /dev/null +++ b/pages/04.applications/10.docs/mattermost/app_mattermost.md @@ -0,0 +1,26 @@ +--- +title: Mattermost +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mattermost' +--- + +![Mattermost's logo](image://mattermost_logo.svg?resize=,80) + +[![Install Mattermost with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=mattermost) [![Integration level](https://dash.yunohost.org/integration/mattermost.svg)](https://dash.yunohost.org/appci/app/mattermost) + +Mattermost is a decentralized team communication software. For Slack enthusiasts, importing your data is possible, allowing a smooth transition to this free tool. + +The platform allows: +* The sharing of messages and files on different devices: PCs, computers and tablets thanks to dedicated applications. +* The formatting of messages is done with the Markdown language. +* Continuous archiving and instant search, and support for notifications and integrations with your existing tools. + +## Useful links + ++ Website: [mattermost.com](https://mattermost.com) ++ Official documentation: [docs.mattermost.com/guides/user.html](https://docs.mattermost.com/guides/user.html) ++ Application software repository: [github.com - YunoHost-Apps/mattermost](https://github.com/YunoHost-Apps/mattermost_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mattermost/issues](https://github.com/YunoHost-Apps/mattermost_ynh/issues) diff --git a/pages/04.applications/10.docs/mautrix_signal/app_mautrix_signal.fr.md b/pages/04.applications/10.docs/mautrix_signal/app_mautrix_signal.fr.md new file mode 100644 index 00000000..d1e7347a --- /dev/null +++ b/pages/04.applications/10.docs/mautrix_signal/app_mautrix_signal.fr.md @@ -0,0 +1,64 @@ +--- +title: Matrix Signal bridge +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mautrix_signal' +--- + +[![Installer Matrix Signal bridge avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mautrix_signal) [![Integration level](https://dash.yunohost.org/integration/mautrix_signal.svg)](https://dash.yunohost.org/appci/app/mautrix_signal) + +*Matrix Signal bridge* est une passerelle entre Matrix et Signal empaquetée comme un service YunoHost. Les messages, médias et notifications sont relayées entre un compte Signal et un compte Matrix. +La passerelle ["Mautrix-Signal"](https://docs.mau.fi/bridges/python/signal/index.html) consiste en un Service d'Application Matrix-Synapse et repose sur une base-de-données postgresql. C'est pourquoi [Synapse for YunoHost](https://github.com/YunoHost-Apps/synapse_ynh) doit être préalablemnet installé. + +** Attention : sauvegardez et restaurez toujours les deux applications Yunohost matrix-synapse et mautrix_signal en même temps!**. + +### Avertissements / informations importantes + +#### Liste de passerelles publiques + +* Demandez sur un des salons suivants: `#mautrix_yunohost:matrix.fdn.fr` ou `#signal:maunium.net` + +### Usages de la passerelle +** Notez que plusieurs comptes Signal et Matrix peuvent être relayés, chaque compte Signal connecté a son propre Salon d'Administration. Si plusieurs utilisateur.ice.s du Robot sont dans un même groupe Signal, seul un Salon Matrix sera créé par la passerelle. ** + +#### Relayer TOUTES les conversations entre UN compte Signal et UN compte Matrix +* Prérequis : votre compte Matrix ou le serveur sur lequel il est hébergé doit être autorisé dans la configuration de la passerelle (voir ci-dessous) +* Invitez le Robot (par défaut @signalbot:synapse.votredomaine) à une nouvelle conversation. +* Ce nouveau salon d'administration du Robot Mautrix-Signal est appelé "Administration Room". +* Envoyez ``help`` au Robot dans le "Administration Room" pour une liste des commandes d'administration de la passerelle. +Voir aussi [upstream wiki Authentication page](https://docs.mau.fi/bridges/python/signal/authentication.html) + +#### Relier la passerelle comme un appareil secondaire +* Tapez ``!sg link`` +* Ouvrez l'application Signal de votre appareil principal +* Ouvrez Paramètres => Appareils reliés => + => filmer le QR +* Par défaut, seules les conversations avec des messages très récents seront mises-en-miroir +* Acceptez les invitations aux salons + +#### Enregistrer la passerelle comme appareil principal +* Tapez ``!sg register ``, où ```` est votre numéro de téléphone au format international sans espace, p.ex. ``!sg register +33612345678`` +* Répondez dans le salon d'administration avec le code de vérification reçu par SMS. +* Définissez une nom de profil ``!sg set-profile-name `` + +#### Robot-Relai "Relaybot": Relayer les conversations de TOUS les comptes Matrix et TOUS les comptes Signal présents dans UN groupe/salon +* Pas implémenté pour l'instant + +### Configuration de la passerelle + +La passerelle est [configurée avec les paramètres standards adaptés pour votre YunoHost et l'instance Matrix-Synapse sélectionnée](`https://github.com/YunoHost-Apps/mautrix_signal_ynh/blob/master/conf/config.yaml`). Vous pouvez par exemple ajouter des administrateur.ice.s et utilisateur.ice.s du Robot autorisés en modifiant le fichier de configuration par liaison SSH : +``` +sudo nano /opt/yunohost/mautrix_signal/config.yaml +``` +puis en redémarrant le service: +``` +sudo yunohost service restart mautrix_signal +``` + +## Liens utiles + ++ Site web : [mautrix_signal.eu (fr)](https://mautrix_signal.eu/site/fr/) ++ Démonstration : [Démo](https://demo.mautrix_signal.eu/login) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mautrix_signal](https://github.com/YunoHost-Apps/mautrix_signal_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/mautrix_signal/issues](https://github.com/YunoHost-Apps/mautrix_signal_ynh/issues) diff --git a/pages/04.applications/10.docs/mautrix_signal/app_mautrix_signal.md b/pages/04.applications/10.docs/mautrix_signal/app_mautrix_signal.md new file mode 100644 index 00000000..dacb9ab4 --- /dev/null +++ b/pages/04.applications/10.docs/mautrix_signal/app_mautrix_signal.md @@ -0,0 +1,68 @@ +--- +title: Matrix Signal bridge +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mautrix_signal' +--- + +[![Installer Matrix Signal bridge with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mautrix_signal) [![Integration level](https://dash.yunohost.org/integration/mautrix_signal.svg)](https://dash.yunohost.org/appci/app/mautrix_signal) + +*Matrix Signal bridge* is a membership management web application towards non profit organizations. This is before all a free software (as in free speech), community and free (as in beer)! Matrix Signal bridge works on any web server that handle PHP. + +### Disclaimers / important information + +#### List of known public services + +* Ask on one of the following rooms: #mautrix_yunohost:matrix.fdn.fr or #signal:maunium.net + +### Bridging usage +** Note that several Signal and Matrix users can be bridged, each Signal account has its own bot administration room. If they are in a same Signal group, only one matrix room will be created. ** + +#### Bridge a Signal user and a Matrix user +* First your Matrix user or Synapse Server has to be authorized in the Configuration of the bridge (see below) +* Then, invite the bot (default @signalbot:yoursynapse.domain) in this new Mautrix-Signal bot administration room. + * If the Bot does bot accept, see the [troubleshooting page](https://docs.mau.fi/bridges/general/troubleshooting.html) +* Send ``!sg help`` to the bot in the created room to know how to control the bot. +See also [upstream wiki Authentication page](https://docs.mau.fi/bridges/python/signal/authentication.html) + +#### Linking the Bridge as a secondary device +* Type ``!sg link`` +* Open Signal App of your primary device +* Open Settings => Linked Devices => + => Capture the QR code with the camera +* By defaults, only conversations with very recent messages will be bridged +* Accept invitations to the bridged chat rooms + +#### Registering the Bridge as a primary device +* Type ``!sg register ``, where ```` is your phone number in the international format with no space, e.g. ``!sg register +33612345678`` +* Answer in the bot room with the verification code that you reveived in SMS. +* Set a profile name with ``!sg set-profile-name `` + +### Double puppeting +* Log in with ``login-matrix `` +* After logging in, the default Matrix puppet of your Signal account should leave rooms and your account should join all rooms the puppet was in automatically. + + +### Relaybot: Bridge a group for several Matrix and several Signal users to chat together +* Create a room on the signal side +* Your bridged users will be invited on the Matrix side once they are invited on the Signal side +* You can invite more people over on the Matrix side +* Have one of the bridged users (who has the right permission) type `!sg set-relay` on the Matrix side. Their signal account will relay messages from other Matrix users +It is not yet possible to bridge to an existing signal room, or create a new signal room from the Matrix side. + +## Configuration of the bridge + +The bridge is [roughly configured at installation](https://github.com/YunoHost-Apps/mautrix_signal_ynh/blob/master/conf/config.yaml), e.g. allowed admin and user of the bot. Finer configuration can be done by modifying the +following configuration file with SSH: +``` +/opt/yunohost/mautrix_signal/config.yaml +``` +and then restarting the mautrix_signal service. + +## Useful links + ++ Website: [mautrix_signal.eu (en)](https://mautrix_signal.eu/site/) ++ Demonstration: [Demo](https://demo.mautrix_signal.eu/login) ++ Application software repository: [github.com - YunoHost-Apps/mautrix_signal](https://github.com/YunoHost-Apps/mautrix_signal_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mautrix_signal/issues](https://github.com/YunoHost-Apps/mautrix_signal_ynh/issues) diff --git a/pages/04.applications/10.docs/mediawiki/app_mediawiki.fr.md b/pages/04.applications/10.docs/mediawiki/app_mediawiki.fr.md new file mode 100644 index 00000000..79ea615d --- /dev/null +++ b/pages/04.applications/10.docs/mediawiki/app_mediawiki.fr.md @@ -0,0 +1,22 @@ +--- +title: MediaWiki +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mediawiki' +--- + +![logo de MediaWiki](image://mediawiki_logo.svg?resize=,80) + +[![Install MediaWiki with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=mediawiki) [![Integration level](https://dash.yunohost.org/integration/mediawiki.svg)](https://dash.yunohost.org/appci/app/mediawiki) + +MediaWiki est un ensemble wiki à base de logiciels libres Open source, développé à l’origine pour Wikipédia. + +## Liens utiles + ++ Site Web : [mediawiki.org] https://www.mediawiki.org/ ++ Documentation officielle : https://www.mediawiki.org/wiki ++ Support Desk : https://www.mediawiki.org/wiki/Project:Support_desk ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mediawiki](https://github.com/YunoHost-Apps/mediawiki_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/mediawiki/issues](https://github.com/YunoHost-Apps/mediawiki_ynh/issues) diff --git a/pages/04.applications/10.docs/mediawiki/app_mediawiki.md b/pages/04.applications/10.docs/mediawiki/app_mediawiki.md new file mode 100644 index 00000000..b4e7d68f --- /dev/null +++ b/pages/04.applications/10.docs/mediawiki/app_mediawiki.md @@ -0,0 +1,22 @@ +--- +title: MediaWiki +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mediawiki' +--- + +![MediaWiki's logo](image://mediawiki_logo.svg?resize=,80) + +[![Install MediaWiki with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=mediawiki) [![Integration level](https://dash.yunohost.org/integration/mediawiki.svg)](https://dash.yunohost.org/appci/app/mediawiki) + +MediaWiki is a free and open source software wiki package written in PHP, originally for use on Wikipedia. + +## Useful links + ++ Website: [mediawiki.org] https://www.mediawiki.org/ ++ Official documentation: [mediawiki.org/wiki/] https://www.mediawiki.org/wiki/ ++ Support Desk: https://www.mediawiki.org/wiki/Project:Support_desk ++ Application software repository: [github.com - YunoHost-Apps/mediawiki](https://github.com/YunoHost-Apps/mediawiki_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mediawiki/issues](https://github.com/YunoHost-Apps/mediawiki_ynh/issues) diff --git a/pages/04.applications/10.docs/meilisearch/app_meilisearch.fr.md b/pages/04.applications/10.docs/meilisearch/app_meilisearch.fr.md new file mode 100644 index 00000000..30578aa5 --- /dev/null +++ b/pages/04.applications/10.docs/meilisearch/app_meilisearch.fr.md @@ -0,0 +1,35 @@ +--- +title: Meilisearch +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_meilisearch' +--- + +[![Installer Meilisearch avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=meilisearch) [![Integration level](https://dash.yunohost.org/integration/meilisearch.svg)](https://dash.yunohost.org/appci/app/meilisearch) + +### Ind +*Meilisearch* est une API de recherche opensource de nouvelle génération. + +### Captures d'écran + +![Captures d'écran de Meilisearch](https://github.com/YunoHost-Apps/meilisearch_ynh/blob/master/movies-web-demo.gif) + +### Configuration + +Lors de l'installation, assurez-vous de configurer une clé API pour sécuriser votre API. + +### Problem and todo + +- Ne s'installe pas sur le sous-chemin (WIP). + +##### Multi-users support + +C'est une API et il n'y a pas d'authentification, sans clé API. + +## Liens utiles + ++ Site web : [meilisearch.com](https://www.meilisearch.com/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/meilisearch](https://github.com/YunoHost-Apps/meilisearch_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/meilisearch/issues](https://github.com/YunoHost-Apps/meilisearch_ynh/issues) diff --git a/pages/04.applications/10.docs/meilisearch/app_meilisearch.md b/pages/04.applications/10.docs/meilisearch/app_meilisearch.md new file mode 100644 index 00000000..9015c786 --- /dev/null +++ b/pages/04.applications/10.docs/meilisearch/app_meilisearch.md @@ -0,0 +1,34 @@ +--- +title: Meilisearch +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_meilisearch' +--- + +[![Installer Meilisearch with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=meilisearch) [![Integration level](https://dash.yunohost.org/integration/meilisearch.svg)](https://dash.yunohost.org/appci/app/meilisearch) + +*Meilisearch* is an opensource next generation search API. + +### Screenshots + +![Screenchots of Meilisearch](https://github.com/YunoHost-Apps/meilisearch_ynh/blob/master/movies-web-demo.gif) + +### Configuration + +At the installation, be sure to set up an API key to secure your API. + +### Problem and todo + +- Doesn't install on subpath (WIP). + +##### Multi-users support + +It's an API and there is no authentification, without API key. + +## Useful links + ++ Website: [meilisearch.com](https://www.meilisearch.com/) ++ Application software repository: [github.com - YunoHost-Apps/meilisearch](https://github.com/YunoHost-Apps/meilisearch_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/meilisearch/issues](https://github.com/YunoHost-Apps/meilisearch_ynh/issues) diff --git a/pages/04.applications/10.docs/metabase/app_metabase.fr.md b/pages/04.applications/10.docs/metabase/app_metabase.fr.md new file mode 100644 index 00000000..2b6cfeff --- /dev/null +++ b/pages/04.applications/10.docs/metabase/app_metabase.fr.md @@ -0,0 +1,22 @@ +--- +title: Metabase +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_metabase' +--- + +[![Installer Metabase avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=metabase) [![Integration level](https://dash.yunohost.org/integration/metabase.svg)](https://dash.yunohost.org/appci/app/metabase) + +*Metabase* est un outil web de gestion des bases de données. + +### Captures d'écran + +![Captures d'écran de Metabase](https://github.com/YunoHost-Apps/metabase_ynh/blob/master/doc/screenshots/metabase-product-screenshot.png) + +## Liens utiles + ++ Site web : [metabase.com](https://www.metabase.com/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/metabase](https://github.com/YunoHost-Apps/metabase_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/metabase/issues](https://github.com/YunoHost-Apps/metabase_ynh/issues) diff --git a/pages/04.applications/10.docs/metabase/app_metabase.md b/pages/04.applications/10.docs/metabase/app_metabase.md new file mode 100644 index 00000000..9fcfc154 --- /dev/null +++ b/pages/04.applications/10.docs/metabase/app_metabase.md @@ -0,0 +1,22 @@ +--- +title: Metabase +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_metabase' +--- + +[![Installer Metabase with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=metabase) [![Integration level](https://dash.yunohost.org/integration/metabase.svg)](https://dash.yunohost.org/appci/app/metabase) + +*Metabase* is a web database management tool. + +## Screenshots + +![Screenchots of Metabase](https://github.com/YunoHost-Apps/metabase_ynh/blob/master/doc/screenshots/metabase-product-screenshot.png) + +## Useful links + ++ Website: [metabase.com](https://www.metabase.com/) ++ Application software repository: [github.com - YunoHost-Apps/metabase](https://github.com/YunoHost-Apps/metabase_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/metabase/issues](https://github.com/YunoHost-Apps/metabase_ynh/issues) diff --git a/pages/04.applications/10.docs/minchat/app_minchat.fr.md b/pages/04.applications/10.docs/minchat/app_minchat.fr.md new file mode 100644 index 00000000..c949ec94 --- /dev/null +++ b/pages/04.applications/10.docs/minchat/app_minchat.fr.md @@ -0,0 +1,41 @@ +--- +title: Minchat +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_minchat' +--- + +[![Installer Minchat avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=minchat) [![Integration level](https://dash.yunohost.org/integration/minchat.svg)](https://dash.yunohost.org/appci/app/minchat) + +*Minchat* est une application de chat libre et minimaliste. Elle est basée sur [wojtek77/chat](https://github.com/wojtek77/chat), elle-même basée sur [le tutoriel de Gabriel Nava](http://code.tutsplus.com/tutorials/how-to-create-a-simple-web-based-chat-application--net-5931). + +### Captures d'écran + +![Capture d'écran de Minchat](https://github.com/YunoHost-Apps/minchat_ynh/blob/master/doc/screenshots/minchat_ynh_screenshot01.gif) + +### Avertissements / informations importantes + +#### Configuration + +la configuration est facultative. Si vous le laissez tel quel, il y a une seule salle sans nom, ouverte à tous les utilisateurs. Si vous voulez personnaliser le contrôle d'accès, éditez le fichier `conf/setup.ini` (s'il manque, copiez-le depuis `conf/sample/setup.ini`). Le paramètre intéressant est `auth` qui indique quel utilisateur est autorisé à accéder à quelle salle. + +Dans cet exemple `auth = John:Game,John:Family,Mary:Game,Tim:Family,admin:*,*:Public,*:`, +- `John:Jeux,John:Famille` = John peut accéder à la salle Jeux et à la salle Famille +- `Mary:Jeux` = Mary peut accéder à la salle Jeux +- `Tim:Famille` = Tim peut accéder à la salle Famille +- `admin:*` = admin peut accéder à toutes les salles +- `*:Public` = tout le monde peut accéder à la salle Public +- `*:` = tout le monde peut accéder à la salle sans nom + +#### Conseils aux utilisateurs + +- Les URLs que vous envoyez sont liées ou transformées en images lorsqu'elles sont précédées d'un `!`. +- Si plusieurs salles sont autorisées par l'administrateur dans le `setup.ini`, vous pouvez avoir plusieurs onglets ouverts sur différentes salles dans le même navigateur. + +## Liens utiles + ++ Site web : [github.com/wojtek77/chat](https://github.com/wojtek77/chat) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/minchat](https://github.com/YunoHost-Apps/minchat_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/minchat/issues](https://github.com/YunoHost-Apps/minchat_ynh/issues) diff --git a/pages/04.applications/10.docs/minchat/app_minchat.md b/pages/04.applications/10.docs/minchat/app_minchat.md new file mode 100644 index 00000000..1fa1bcdd --- /dev/null +++ b/pages/04.applications/10.docs/minchat/app_minchat.md @@ -0,0 +1,41 @@ +--- +title: Minchat +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_minchat' +--- + +[![Installer Minchat with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=minchat) [![Integration level](https://dash.yunohost.org/integration/minchat.svg)](https://dash.yunohost.org/appci/app/minchat) + +*Minchat* is a free minimalist chat application. It is based on [wojtek77/chat](https://github.com/wojtek77/chat), itself based on [Gabriel Nava's tutorial](http://code.tutsplus.com/tutorials/how-to-create-a-simple-web-based-chat-application--net-5931). + +### Screenshots + +![Screenshot of Minchat](https://github.com/YunoHost-Apps/minchat_ynh/blob/master/doc/screenshots/minchat_ynh_screenshot01.gif) + +### Disclaimers / important information + +#### Setup + +The setup is optional. If you leave it as is, there is a single unnamed room, opened to all users. If you want to customize the access control, edit the file `conf/setup.ini` (if missing, copy it from `conf/sample/setup.ini`). The interesting parameter is `auth` that indicates which user is authorized to which room. + +In this example `auth = John:Game,John:Family,Mary:Game,Tim:Family,admin:*,*:Public,*:`, +- `John:Game,John:Family` = John can access the Game room, the Family room +- `Mary:Game` = Mary can access the Game room +- `Tim:Family` = Tim can access the Family room +- `admin:*` = admin can access all rooms +- `*:Public` = everybody can acccess the Public room +- `*:` = everybody can access the unnamed room + +#### Hints for users + +- The URLs you send are linked or transformed to images when preceeded by a `!` +- If multiple rooms are allowed by the administrator in the `setup.ini`, you can have several tabs opened to different rooms in the same browser. + +## Useful links + ++ Website: [github.com/wojtek77/chat](https://github.com/wojtek77/chat) ++ Application software repository: [github.com - YunoHost-Apps/minchat](https://github.com/YunoHost-Apps/minchat_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/minchat/issues](https://github.com/YunoHost-Apps/minchat_ynh/issues) diff --git a/pages/04.applications/10.docs/mindmaps/app_mindmaps.fr.md b/pages/04.applications/10.docs/mindmaps/app_mindmaps.fr.md new file mode 100644 index 00000000..894de376 --- /dev/null +++ b/pages/04.applications/10.docs/mindmaps/app_mindmaps.fr.md @@ -0,0 +1,22 @@ +--- +title: Mindmaps +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mindmaps' +--- + +[![Installer Mindmaps avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=mindmaps) [![Integration level](https://dash.yunohost.org/integration/mindmaps.svg)](https://dash.yunohost.org/appci/app/mindmaps) + +Mindmaps est une application de carte mentale basée sur HTML5. Il vous permet de créer des cartes mentales soignées dans le navigateur. + +Ce projet a commencé en 2011 comme une exploration de ce qu'il est possible de faire dans les navigateurs utilisant des API modernes. De nos jours, la plupart de ces choses sont assez courantes et la base de code est un peu dépassée. C'était bien avant React, ES6, webpack. Heck, il n'utilise même pas Backbone. + +Cependant, il n'y a aucune raison de changer quoi que ce soit et cela rend la base de code assez facile à utiliser. Il n'y a pas d'étape de compilation, pas de plugins babel, pas de frameworks. Juste une application JavaScript et un modèle très simple de modèle-vue-présentateur. + +## Liens utiles + ++ Site web : [www.mindmaps.app](https://www.mindmaps.app/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mindmaps](https://github.com/YunoHost-Apps/mindmaps_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/mindmaps/issues](https://github.com/YunoHost-Apps/mindmaps_ynh/issues) diff --git a/pages/04.applications/10.docs/mindmaps/app_mindmaps.md b/pages/04.applications/10.docs/mindmaps/app_mindmaps.md new file mode 100644 index 00000000..1e2c5801 --- /dev/null +++ b/pages/04.applications/10.docs/mindmaps/app_mindmaps.md @@ -0,0 +1,22 @@ +--- +title: Mindmaps +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mindmaps' +--- + +[![Install Mindmaps with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=mindmaps) [![Integration level](https://dash.yunohost.org/integration/mindmaps.svg)](https://dash.yunohost.org/appci/app/mindmaps) + +Mindmaps is a HTML5 based mind mapping application. It lets you create neat looking mind maps in the browser. + +This project started in 2011 as an exploration into what's possible to do in browsers using modern APIs. Nowadays, most of this stuff is pretty common and the code base is a bit outdated. This was way before React, ES6, webpack. Heck, it doesn't even use Backbone. + +However, there is no reason to change any of that and it makes the code base quite easy to grok. There is no compilation step, no babel plugins, no frameworks. Just a JavaScript application and a very simple Model-View-Presenter pattern. + +## Useful links + ++ Website: [www.mindmaps.app](https://www.mindmaps.app/) ++ Application software repository: [github.com - YunoHost-Apps/mindmaps](https://github.com/YunoHost-Apps/mindmaps_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mindmaps/issues](https://github.com/YunoHost-Apps/mindmaps_ynh/issues) diff --git a/pages/04.applications/10.docs/minetest/app_minetest.fr.md b/pages/04.applications/10.docs/minetest/app_minetest.fr.md new file mode 100644 index 00000000..3796deda --- /dev/null +++ b/pages/04.applications/10.docs/minetest/app_minetest.fr.md @@ -0,0 +1,23 @@ +--- +title: Minetest +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_minetest' +--- + +![logo de minetest](image://minetest_logo.svg?resize=,80) + +[![Install minetest with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=minetest) [![Integration level](https://dash.yunohost.org/integration/minetest.svg)](https://dash.yunohost.org/appci/app/minetest) + +Un jeu de cubes dans un espace illimité ou pioches et pelles sont de rigueur pour édifier des constructions imaginaires, creuser des tunels, se promener au grès de ses envies, faire des rencontres, ramasser quelques fleurs de-ci de-là, nager... +Minetest c'est l'équivalent de Minecraft avec en supplément la gratuité du jeu et la possibilité d'intégrer une équipe de développement pour améliorer le produit. +Minetest, c'est aussi un serveur qui permet d'accueillir vos amis ou simplement quelques visiteurs curieux voire même des joueurs chevronnés. + +## Liens utiles + ++ Site web : [minetest.net](https://www.minetest.net/) ++ Documentation officielle : [wiki.minetest.net](https://wiki.minetest.net) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/minetest](https://github.com/YunoHost-Apps/minetest_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/minetest/issues](https://github.com/YunoHost-Apps/minetest_ynh/issues) diff --git a/pages/04.applications/10.docs/minetest/app_minetest.md b/pages/04.applications/10.docs/minetest/app_minetest.md new file mode 100644 index 00000000..c2ff31a8 --- /dev/null +++ b/pages/04.applications/10.docs/minetest/app_minetest.md @@ -0,0 +1,23 @@ +--- +title: Minetest +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_minetest' +--- + +![minetest's logo](image://minetest_logo.svg?resize=,80) + +[![Install minetest with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=minetest) [![Integration level](https://dash.yunohost.org/integration/minetest.svg)](https://dash.yunohost.org/appci/app/minetest) + +A game of cubes in an unlimited space where picks and shovels are de rigueur to build imaginary constructions, dig tunnels, walk in the sandstone of his wishes, make encounters, pick up a few flowers here and there, swimming... +Minetest is the equivalent of Minecraft with the addition of free gameplay and the possibility of integrating a development team to improve the product. +Minetest is also a server that allows you to welcome your friends or just a few curious visitors or even experienced players. + +## Useful links + ++ Website: [minetest.net](https://www.minetest.net/) ++ Official documentation: [wiki.minetest.net](https://wiki.minetest.net) ++ Application software repository: [github.com - YunoHost-Apps/minetest](https://github.com/YunoHost-Apps/minetest_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/minetest/issues](https://github.com/YunoHost-Apps/minetest_ynh/issues) diff --git a/pages/04.applications/10.docs/mineweb/app_mineweb.fr.md b/pages/04.applications/10.docs/mineweb/app_mineweb.fr.md new file mode 100644 index 00000000..484f9190 --- /dev/null +++ b/pages/04.applications/10.docs/mineweb/app_mineweb.fr.md @@ -0,0 +1,25 @@ +--- +title: MineWeb +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mineweb' +--- + +[![Installer MineWeb avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mineweb) [![Integration level](https://dash.yunohost.org/integration/mineweb.svg)](https://dash.yunohost.org/appci/app/mineweb) + +*MineWeb* est un CMS (c'est-à-dire un système de gestion de contenu), en plus simple, un site complètement personnalisable et intuitif, qui s'adaptera parfaitement à vos serveurs Minecraft ! + +Vous pourrez tenir vos joueurs au courant des actualités, leur faire acheter des articles sur la boutique... Vous pourrez personnaliser le CMS avec toutes sortes de thèmes ou plugins ! Ceux-ci sont disponibles sur le market ou peuvent être développés par vous-même. + +### Captures d'écran + +![Capture d'écran de MineWeb](https://github.com/YunoHost-Apps/mineweb_ynh/blob/master/doc/screenshots/features1_mb.png) + +## Liens utiles + ++ Site web : [mineweb.org (fr)](https://mineweb.org) ++ Démonstration : [Démo](https://demo.mineweb.eu/login) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mineweb](https://github.com/YunoHost-Apps/mineweb_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/mineweb/issues](https://github.com/YunoHost-Apps/mineweb_ynh/issues) diff --git a/pages/04.applications/10.docs/mineweb/app_mineweb.md b/pages/04.applications/10.docs/mineweb/app_mineweb.md new file mode 100644 index 00000000..969aabbe --- /dev/null +++ b/pages/04.applications/10.docs/mineweb/app_mineweb.md @@ -0,0 +1,25 @@ +--- +title: MineWeb +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mineweb' +--- + +[![Installer MineWeb with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mineweb) [![Integration level](https://dash.yunohost.org/integration/mineweb.svg)](https://dash.yunohost.org/appci/app/mineweb) + +*MineWeb* is a CMS (i.e. a content management system), in simple terms, a completely customizable and intuitive site, which will fit perfectly on your Minecraft servers! + +You will be able to keep your players informed about news, have them buy items from the store... You can customize the CMS with all kinds of themes or plugins! These are available on the market or can be developed by yourself. + +### Screenshots + +![Screenshot of MineWeb](https://github.com/YunoHost-Apps/mineweb_ynh/blob/master/doc/screenshots/features1_mb.png) + +## Useful links + ++ Website: [mineweb.org (fr)](https://mineweb.org) ++ Demonstration: [Demo](https://demo.mineweb.eu/login) ++ Application software repository: [github.com - YunoHost-Apps/mineweb](https://github.com/YunoHost-Apps/mineweb_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mineweb/issues](https://github.com/YunoHost-Apps/mineweb_ynh/issues) diff --git a/pages/04.applications/10.docs/minidlna/app_minidlna.fr.md b/pages/04.applications/10.docs/minidlna/app_minidlna.fr.md new file mode 100644 index 00000000..1236c5c9 --- /dev/null +++ b/pages/04.applications/10.docs/minidlna/app_minidlna.fr.md @@ -0,0 +1,45 @@ +--- +title: MiniDLNA (Ready Media) +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_minidlna' +--- + +![logo de MiniDLNA (Ready Media)](image://yunohost_package.png?height=80) + +[![Install MiniDLNA with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=minidlna) [![Integration level](https://dash.yunohost.org/integration/minidlna.svg)](https://dash.yunohost.org/appci/app/minidlna) + +MiniDLNA (renommé Ready Media) est un serveur [DLNA](https://fr.wikipedia.org/wiki/Digital_Living_Network_Alliance) ultra léger. +Il permet de partager très simplement les fichiers multimédias avec tous les appareils compatibles présents sur le réseau local. + +MiniDLNA ne dispose pas d’une interface graphique, mais ne nécessite pas de configuration particulière. + +## Configuration + +### Quels fichiers multimédias sont partagés ? +MiniDLNA partage le dossier `/home/yunohost.multimedia/share`, qui est commun à chaque utilisateur dans le dossier `/home/$USER/Multimedia/Share`. +[Plus d’informations sur les dossiers multimédias](https://github.com/YunoHost-Apps/yunohost.multimedia). + +~~Si [Transmission](https://github.com/Kloadut/transmission_ynh) est installé, les médias téléchargés seront disponibles en DLNA.~~ + +### Comment consulter et lire les fichiers multimédias partagés par MiniDLNA ? +Pour voir et lire les fichiers multimédias, il suffit de disposer d’un client compatible DLNA/UPNP. + +La majorité des décodeurs TV fournis par les FAI sont compatibles DLNA, il suffit de chercher les sources de médias externes. +C’est le cas également pour les consoles de jeux dernière génération connectée à internet. + +Certaines TV et lecteur Blu-ray sont également compatibles DLNA. + +Dans tous les cas, il suffit en général d’aller chercher les sources externes, USB etc., pour trouver le serveur DLNA, affiché sous le nom **YunoHost DLNA**. + +Il existe une multitude de clients DLNA pour toutes les plateformes, dont voici une [liste non exhaustive](https://en.wikipedia.org/wiki/List_of_UPnP_AV_media_servers_and_clients#UPnP_AV_clients). +De manière générale, un client DLNA ne nécessite pas de configuration particulière pour accéder au partage de fichiers multimédias. + +## Liens utiles + + + Site web : [minidlna.sourceforge.net](http://minidlna.sourceforge.net/) + + Documentation : [doc.ubuntu-fr.org/minidlna](https://doc.ubuntu-fr.org/minidlna) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/minidlna](https://github.com/YunoHost-Apps/minidlna_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/minidlna/issues](https://github.com/YunoHost-Apps/minidlna_ynh/issues) diff --git a/pages/04.applications/10.docs/minidlna/app_minidlna.md b/pages/04.applications/10.docs/minidlna/app_minidlna.md new file mode 100644 index 00000000..eb4117f8 --- /dev/null +++ b/pages/04.applications/10.docs/minidlna/app_minidlna.md @@ -0,0 +1,45 @@ +--- +title: MiniDLNA (Ready Media) +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_minidlna' +--- + +![MiniDLNA's (Ready Meadia) logo](image://yunohost_package.png?height=80) + +[![Install MiniDLNA with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=minidlna) [![Integration level](https://dash.yunohost.org/integration/minidlna.svg)](https://dash.yunohost.org/appci/app/minidlna) + +MiniDLNA (Ready Media) is a lightweight [DLNA](https://fr.wikipedia.org/wiki/Digital_Living_Network_Alliance) server. +It allows to easily share multimedia files with any compatible devices present on the LAN. + +MiniDLNA does not have a graphical interface, but it does not require any special configuration. + +## Configuration + +### What multimedia files are shared? +MiniDLNA (renamed Ready Media) sharing the folder `/home/yunohost.multimedia/share`, which is common to each user in `/home/$USER/Multimedia/Share`. +[More information about multimedia files here.](https://github.com/YunoHost-Apps/yunohost.multimedia) + +~~If [Transmission](https://github.com/Kloadut/transmission_ynh) is installed, the downloaded media will be available in DLNA.~~ + +### How to view and play media files shared by MiniDLNA? +To view and play media files, all you need is a compatible client DLNA/UPNP. + +The majority of set-top boxes provided by ISPs are DLNA compatible, simply look for sources of external media. +This is also true for the latest generation game consoles connected to internet. + +Some TV and Blu-ray player is also DLNA compatible. + +In any case, it is generally sufficient to seek external sources, USB etc., to find the DLNA server, displayed under the name **YunoHost DLNA**. + +There are a multitude of DLNA client for all platforms, including the following [not exhaustive list](https://en.wikipedia.org/wiki/List_of_UPnP_AV_media_servers_and_clients#UPnP_AV_clients). +In general, a DLNA client does not require any special configuration to access the media sharing. + +## Useful links + ++ Website: [minidlna.sourceforge.net](http://minidlna.sourceforge.net) ++ Official : [help.ubuntu.com/community/MiniDLNA](https://help.ubuntu.com/community/MiniDLNA) ++ Application software repository: [github.com - YunoHost-Apps/minidlna](https://github.com/YunoHost-Apps/minidlna_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/minidlna/issues](https://github.com/YunoHost-Apps/minidlna_ynh/issues) diff --git a/pages/04.applications/10.docs/miniflux/app_miniflux.fr.md b/pages/04.applications/10.docs/miniflux/app_miniflux.fr.md new file mode 100644 index 00000000..b6c40888 --- /dev/null +++ b/pages/04.applications/10.docs/miniflux/app_miniflux.fr.md @@ -0,0 +1,28 @@ +--- +title: Miniflux +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_miniflux' +--- + +[![Installer Miniflux avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=miniflux) [![Integration level](https://dash.yunohost.org/integration/miniflux.svg)](https://dash.yunohost.org/appci/app/miniflux) + +*Miniflux* est un lecteur de flux RSS minimaliste et opiniâtre. + +### Captures d'écran + +![Capture d'écran de Miniflux](https://github.com/YunoHost-Apps/miniflux_ynh/blob/master/doc/screenshots/overview.png) + +### Avertissements / informations importantes + +### Configuration + +Vous pouvez configurer Miniflux en modifiant le fichier `/var/www/miniflux/miniflux.conf` en vous aidant de la [documentation](https://miniflux.app/docs/configuration.html). + +## Liens utiles + ++ Site web : [miniflux.app](https://miniflux.app/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/miniflux](https://github.com/YunoHost-Apps/miniflux_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/miniflux/issues](https://github.com/YunoHost-Apps/miniflux_ynh/issues) diff --git a/pages/04.applications/10.docs/miniflux/app_miniflux.md b/pages/04.applications/10.docs/miniflux/app_miniflux.md new file mode 100644 index 00000000..3dcf0e89 --- /dev/null +++ b/pages/04.applications/10.docs/miniflux/app_miniflux.md @@ -0,0 +1,30 @@ +--- +title: Miniflux +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_miniflux' +--- + +[![Installer Miniflux with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=miniflux) [![Integration level](https://dash.yunohost.org/integration/miniflux.svg)](https://dash.yunohost.org/appci/app/miniflux) + +*Miniflux* is a minimalist and opinionated RSS feed reader. + +### Screenshots + +![Screenshot of Miniflux](https://github.com/YunoHost-Apps/miniflux_ynh/blob/master/doc/screenshots/overview.png) + +### Disclaimers / important information + +### Configuration + +You can also configure Miniflux by editing this file `/var/www/miniflux/miniflux.conf` using the [documentation](https://miniflux.app/docs/configuration.html). + +## Documentation and resources + +## Useful links + ++ Website: [miniflux.app](https://miniflux.app/) ++ Application software repository: [github.com - YunoHost-Apps/miniflux](https://github.com/YunoHost-Apps/miniflux_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/miniflux/issues](https://github.com/YunoHost-Apps/miniflux_ynh/issues) diff --git a/pages/04.applications/10.docs/misskey/app_misskey.md b/pages/04.applications/10.docs/misskey/app_misskey.md new file mode 100644 index 00000000..27ba5fa6 --- /dev/null +++ b/pages/04.applications/10.docs/misskey/app_misskey.md @@ -0,0 +1,47 @@ +--- +title: Misskey +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_misskey' +--- + +![misskey's logo](image://misskey_logo.png?resize=100) + +[![Install Misskey with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=misskey) [![Integration level](https://dash.yunohost.org/integration/misskey.svg)](https://dash.yunohost.org/appci/app/misskey) + +Misskey is a decentralized and open source microblogging platform. It has "Reactions" that allow you to easily express your feeling, "Drive" that allows you to manage files in one place, and a highly customizable UI that makes it more fun to share something. + +Misskey also implements ActivityPub, so it can communicate with other platforms like Mastodon, Pleroma, Friendica and more interactively. + +## Configuration + +- Beginning with version 12.111.1~ynh1 (*Misskey* 12.111.1) YunoHost >= 11.0.7 is required, as PostgreSQL >= 12.x is mandatory. +- *Misskey* requires a dedicated root domain, e.g. `misskey.domain.tld` +- Due to Cypress dependency, *Misskey* only works on 64-bit CPU machines. +- *Misskey* can take quite some time to install (more then 30 minutes). So take out some time and grab yourself a coffee. +- If installing from command line, using `screen` is recommended to avoid disconnection. See below. +- After installation, first page can take time to load and may show timeout error. Give it time to make itself ready for you. Refresh the page after 2 or 3 minutes. +- The first account created will be an admin user and will have all the admin rights. + + +Using screen in case of disconnects + +``` +sudo apt-get install screen +screen +sudo yunohost app install https://github.com/YunoHost-Apps/misskey_ynh.git +``` +Recover after disconnect: +``` +screen -d +screen -r +``` + +## Useful links + +* Official app website: [https://misskey-hub.net/](https://misskey-hub.net/) +* Upstream app code repository: [https://github.com/misskey-dev/misskey](https://github.com/misskey-dev/misskey) +* Demonstration : [https://demo.misskey.io](https://demo.misskey.io) +* Report a bug: [https://github.com/YunoHost-Apps/misskey_ynh/issues](https://github.com/YunoHost-Apps/misskey_ynh/issues) diff --git a/pages/04.applications/10.docs/mobilizon/app_mobilizon.fr.md b/pages/04.applications/10.docs/mobilizon/app_mobilizon.fr.md new file mode 100644 index 00000000..f4d51cbf --- /dev/null +++ b/pages/04.applications/10.docs/mobilizon/app_mobilizon.fr.md @@ -0,0 +1,31 @@ +--- +title: Mobilizon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mobilizon' +--- + +![logo de mobilizon](image://mobilizon_logo.svg?resize=,80) + +[![Install mobilizon with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=mobilizon) [![Integration level](https://dash.yunohost.org/integration/mobilizon.svg)](https://dash.yunohost.org/appci/app/mobilizon) + + +Mobilizon est un logiciel actuellement en cours de développement par Framasoft. Il permettra à chaque organisation ou individu de proposer sa propre plateforme de mobilisation. +Il sera possible de : + +* Publier des évènements, +* Créer des groupes, +* Dialoguer par messagerie, +* Avoir plusieurs identités avec un seul compte (pour séparer les évènements familiaux ou activités de loisirs de son activité militante, par exemple) +* Fédérer plusieurs instances Mobilizon pour échanger avec d’autres instances, afficher plus d’événements que juste ceux de son instance et favoriser les interactions (utilisation du protocole ActivityPub) + +Mobilizon sera un logiciel éthique permettant de s'émanciper de Facebook, Meetup, Eventbrite ou tout autre plateforme à but lucratif. Il sera respectueux de la vie privée et des données personnelles de ses utilisateurs. + +## Liens utiles + ++ Site web : [joinmobilizon.org](https://joinmobilizon.org) ++ Documentation officielle : [joinmobilizon.org/fr/faq](https://joinmobilizon.org/fr/faq) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mobilizon](https://github.com/YunoHost-Apps/mobilizon_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/mobilizon/issues](https://github.com/YunoHost-Apps/mobilizon_ynh/issues) diff --git a/pages/04.applications/10.docs/mobilizon/app_mobilizon.md b/pages/04.applications/10.docs/mobilizon/app_mobilizon.md new file mode 100644 index 00000000..2fe8e3f2 --- /dev/null +++ b/pages/04.applications/10.docs/mobilizon/app_mobilizon.md @@ -0,0 +1,23 @@ +--- +title: Mobilizon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mobilizon' +--- + +![mobilizon's logo](image://mobilizon_logo.svg?resize=,80) + +[![Install mobilizon with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=mobilizon) [![Integration level](https://dash.yunohost.org/integration/mobilizon.svg)](https://dash.yunohost.org/appci/app/mobilizon) + +MobiliZon is your federated organization and mobilization platform. It's supported by Framasoft. +MobiliZon aims to solve existing platform's problems to organize events in a decentralised, libre and privacy friendly way. +Mobilizon is a tool designed to create platforms for managing communities and events. Its purpose is to help as many people as possible to free themselves from Facebook groups and events, from Meetup, etc. + +## Useful links + ++ Website: [joinmobilizon.org](https://joinmobilizon.org) ++ Official documentation: [joinmobilizon.org/fr/faq](https://joinmobilizon.org/en/faq) ++ Application software repository: [github.com - YunoHost-Apps/mobilizon](https://github.com/YunoHost-Apps/mobilizon_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mobilizon/issues](https://github.com/YunoHost-Apps/mobilizon_ynh/issues) diff --git a/pages/04.applications/10.docs/moodle/app_moodle.fr.md b/pages/04.applications/10.docs/moodle/app_moodle.fr.md new file mode 100644 index 00000000..53f36376 --- /dev/null +++ b/pages/04.applications/10.docs/moodle/app_moodle.fr.md @@ -0,0 +1,23 @@ +--- +title: Moodle +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_moodle' +--- + +![logo de moodle](image://moodle_logo.svg?resize=,80) + +[![Install Moodle with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=moodle) [![Integration level](https://dash.yunohost.org/integration/moodle.svg)](https://dash.yunohost.org/appci/app/moodle) + +Moodle est un LMS (Learning Management System ou environnement d'apprentissage) permettant de créér, partager, animer des ressources didactiques et de formation. +A minima on pourra l'utiliser pour partager des supports de cours (sous différents formats), mais il permet surtout de créer des activités d'apprentissage riches privilégiant les interactions entre les utilisateurs (apprenants comme formateurs). +Il intègre une dizaine d'activités (quiz, leçon, forum, wiki, devoir, sondage, atelier auto-évalué entre pairs...) et formats de ressources (pdf, texte, audio-visuel, image, scorm...) par défaut qui peuvent être enrichis par des modules complémentaires (notamment pour proposer des activités spécifiques à certains domaines). + +## Liens utiles + ++ Site web : [moodle.org](https://moodle.org) ++ Documentation officielle : [docs.moodle.org](https://docs.moodle.org) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/moodle](https://github.com/YunoHost-Apps/moodle_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/moodle/issues](https://github.com/YunoHost-Apps/moodle_ynh/issues) diff --git a/pages/04.applications/10.docs/moodle/app_moodle.md b/pages/04.applications/10.docs/moodle/app_moodle.md new file mode 100644 index 00000000..6fed1e6f --- /dev/null +++ b/pages/04.applications/10.docs/moodle/app_moodle.md @@ -0,0 +1,24 @@ +--- +title: Moodle +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_moodle' +--- + +![moodle's logo](image://moodle_logo.svg?resize=,80) + +[![Install Moodle with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=moodle) [![Integration level](https://dash.yunohost.org/integration/moodle.svg)](https://dash.yunohost.org/appci/app/moodle) + +Moodle is a Learning Management System (LMS) for creating, sharing and animating learning and training resources. +At least it can be used to share course materials (in different formats), but above all, it allows the creation of rich learning activities focusing on interactions between users (learners like trainers). +It integrates about ten activities (quiz, lesson, forum, wiki, homework, survey, self-assessment workshop between peers...) and resource formats (pdf, text, audio-visual, image, scorm...) by default that can be enriched by modules +complementary (in particular to propose specific activities in certain areas). + +## Useful links + ++ Website: [moodle.org](https://moodle.org) ++ Official documentation: [docs.moodle.org](https://docs.moodle.org) ++ Application software repository: [github.com - YunoHost-Apps/moodle](https://github.com/YunoHost-Apps/moodle_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/moodle/issues](https://github.com/YunoHost-Apps/moodle_ynh/issues) diff --git a/pages/04.applications/10.docs/mopidy/app_mopidy.fr.md b/pages/04.applications/10.docs/mopidy/app_mopidy.fr.md new file mode 100644 index 00000000..af724745 --- /dev/null +++ b/pages/04.applications/10.docs/mopidy/app_mopidy.fr.md @@ -0,0 +1,39 @@ +--- +title: Mopidy +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mopidy' +--- + +[![Installer Mopidy avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mopidy) [![Integration level](https://dash.yunohost.org/integration/mopidy.svg)](https://dash.yunohost.org/appci/app/mopidy) + +*Mopidy* permet d'écouter de la musique, des podcasts et des programmes radio depuis le disque local et divers services de streaming. + +### Captures d'écran + +![Capture d'écran de Mopidy](https://github.com/YunoHost-Apps/mopidy_ynh/blob/master/doc/screenshots/mopidy_screenshot1.png) + +### Avertissements / informations importantes + +* Cette installation est livrée avec diverses extensions : + * [MusicBox-Webclient](https://mopidy.com/ext/musicbox-webclient/) pour contrôler Mopidy depuis votre navigateur web +* [local](https://mopidy.com/ext/local/) pour rendre votre collection de musique privée sur `/home/yunohost.multimedia/share/Music/` consultable et interrogeable. + * YouTube](https://pypi.org/project/Mopidy-YouTube/) pour lire les sons de YouTube. + * [YTMusic](https://music.youtube.com/) pour accéder à la musique en continu de Google appelée [YouTube Music](https://music.youtube.com/) + * [Podcast-iTunes](https://mopidy.com/ext/podcast-itunes/) pour rechercher et parcourir les podcasts de l'Apple iTunes Store. + * RadioNet](https://mopidy.com/ext/radionet/) pour lire les chaînes de radio du site [radio.net](https://www.radio.net/). + * Podcast](https://mopidy.com/ext/podcast/) pour parcourir les flux RSS de podcasts et diffuser les épisodes. + * Soundcloud](https://pypi.org/project/Mopidy-SoundCloud/) permet de lire la musique du service [SoundCloud](https://soundcloud.com/) [[jeton d'authentification](https://pypi.org/project/Mopidy-SoundCloud/) nécessaire]. + * [MPD](https://mopidy.com/ext/mpd/) peut être activé afin d'utiliser des applications qui contrôlent le Mopidy via ce protocole. (Cela ouvrira le port 6600). +* Tous les flux sont joués sur le matériel audio local des serveurs. L'interface web n'est qu'une sorte de télécommande. C'est pourquoi elle ne doit pas être utilisée avec des VPS ou d'autres serveurs qui n'ont pas de matériel audio réel. +* Pour reconstruire la base de données de votre collection de musique locale, entrez `sudo mopidyctl local scan`. +* Pour lister les paramètres actuels, entrez dans `sudo mopidyctl config`. +* Editez le fichier `/opt/yunohost/mopidy/mopidy.conf` pour ajuster la configuration de Mopidy. + +## Liens utiles + ++ Site web : [mopidy.com](https://mopidy.com/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mopidy](https://github.com/YunoHost-Apps/mopidy_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/mopidy/issues](https://github.com/YunoHost-Apps/mopidy_ynh/issues) diff --git a/pages/04.applications/10.docs/mopidy/app_mopidy.md b/pages/04.applications/10.docs/mopidy/app_mopidy.md new file mode 100644 index 00000000..6c28b04f --- /dev/null +++ b/pages/04.applications/10.docs/mopidy/app_mopidy.md @@ -0,0 +1,39 @@ +--- +title: Mopidy +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mopidy' +--- + +[![Installer Mopidy with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mopidy) [![Integration level](https://dash.yunohost.org/integration/mopidy.svg)](https://dash.yunohost.org/appci/app/mopidy) + +*Mopidy* allows you to listen to music, podcasts and radio programs from the local disk and various streaming services. + +### Screenshots + +![Screenshot of Mopidy](https://github.com/YunoHost-Apps/mopidy_ynh/blob/master/doc/screenshots/mopidy_screenshot1.png) + +### Disclaimers / important information + +* This installation is shipped with various extensions: + * [MusicBox-Webclient](https://mopidy.com/ext/musicbox-webclient/) to control mopidy from your web browser + * [local](https://mopidy.com/ext/local/) to make your private music collection on `/home/yunohost.multimedia/share/Music/` browseable and searchable + * [YouTube](https://pypi.org/project/Mopidy-YouTube/) to play sound from YouTube + * [YTMusic](https://music.youtube.com/) to access Google’s streaming music named [YouTube Music](https://music.youtube.com/) + * [Podcast-iTunes](https://mopidy.com/ext/podcast-itunes/) to search and browse podcasts from the Apple iTunes Store. + * [RadioNet](https://mopidy.com/ext/radionet/) to play radio channels from the [radio.net](https://www.radio.net/). + * [Podcast](https://mopidy.com/ext/podcast/) to browse RSS feeds of podcasts and stream the episodes. + * [Soundcloud](https://pypi.org/project/Mopidy-SoundCloud/) to play music from the [SoundCloud](https://soundcloud.com/) service \([authentication token](https://pypi.org/project/Mopidy-SoundCloud/) needed\). + * [MPD](https://mopidy.com/ext/mpd/) can be activated in order to use apps that control mopidy via this protocol. (This will open port 6600.) +* All streams are played on the servers local audio hardware. The web interface is only a kind of remote control. Threrefore it should not be used with VPS or other servers that have no real audio hardware +* To rebuild the database of your local music collection enter `sudo mopidyctl local scan`. +* To list current settings enter `sudo mopidyctl config`. +* Edit the file `/opt/yunohost/mopidy/mopidy.conf` to adjust Mopidy's configuration. + +## Useful links + ++ Website: [mopidy.com](https://mopidy.com/) ++ Application software repository: [github.com - YunoHost-Apps/mopidy](https://github.com/YunoHost-Apps/mopidy_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mopidy/issues](https://github.com/YunoHost-Apps/mopidy_ynh/issues) diff --git a/pages/04.applications/10.docs/movim/app_movim.fr.md b/pages/04.applications/10.docs/movim/app_movim.fr.md new file mode 100644 index 00000000..b6a642cc --- /dev/null +++ b/pages/04.applications/10.docs/movim/app_movim.fr.md @@ -0,0 +1,29 @@ +--- +title: Movim +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_movim' +--- + +[![Installer Movim avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=movim) [![Integration level](https://dash.yunohost.org/integration/movim.svg)](https://dash.yunohost.org/appci/app/movim) + +*Movim* est un client XMPP multiplateforme basé sur le web. + +### Captures d'écran + +![Capture d'écran de Movim](https://github.com/YunoHost-Apps/movim_ynh/blob/master/doc/screenshots/movim.png) + +### Avertissements / informations importantes + +### Configuration + + * Après l'installation, l'application peut être configurée sur https://example.com/movim/?admin en utilisant le nom d'utilisateur et le mot de passe définis lors de l'installation. + +## Liens utiles + ++ Site web : [movim.eu](https://movim.eu/) ++ Démonstration : [Démo](https://mov.im/?login) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/movim](https://github.com/YunoHost-Apps/movim_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/movim/issues](https://github.com/YunoHost-Apps/movim_ynh/issues) diff --git a/pages/04.applications/10.docs/movim/app_movim.md b/pages/04.applications/10.docs/movim/app_movim.md new file mode 100644 index 00000000..d66cb9ae --- /dev/null +++ b/pages/04.applications/10.docs/movim/app_movim.md @@ -0,0 +1,29 @@ +--- +title: Movim +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_movim' +--- + +[![Installer Movim with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=movim) [![Integration level](https://dash.yunohost.org/integration/movim.svg)](https://dash.yunohost.org/appci/app/movim) + +*Movim* is a web-based cross-platform XMPP client. + +### Screenshots + +![Screenshot of Movim](https://github.com/YunoHost-Apps/movim_ynh/blob/master/doc/screenshots/movim.png) + +### Disclaimers / important information + +### Configuration + + * After installing the app, it can be configured at https://example.com/movim/?admin using the username and password defined during the installation. + +## Useful links + ++ Website: [movim.eu](https://movim.eu/) ++ Demonstration: [Demo](https://mov.im/?login) ++ Application software repository: [github.com - YunoHost-Apps/movim](https://github.com/YunoHost-Apps/movim_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/movim/issues](https://github.com/YunoHost-Apps/movim_ynh/issues) diff --git a/pages/04.applications/10.docs/mumble-web/app_mumble-web.fr.md b/pages/04.applications/10.docs/mumble-web/app_mumble-web.fr.md new file mode 100644 index 00000000..2d81b1de --- /dev/null +++ b/pages/04.applications/10.docs/mumble-web/app_mumble-web.fr.md @@ -0,0 +1,37 @@ +--- +title: Mumble Web +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mumble-web' +--- + +[![Installer Mumble Web avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mumble-web) [![Integration level](https://dash.yunohost.org/integration/mumble-web.svg)](https://dash.yunohost.org/appci/app/mumble-web) + +*Mumble Web* est un client HTML5 Mumble à utiliser dans les navigateurs modernes. +Le protocole Mumble utilise TCP pour le contrôle et UDP pour la voix. Fonctionnant dans un navigateur, les deux ne sont pas disponibles pour ce client. Au lieu de cela, les Websockets sont utilisés pour le contrôle et WebRTC est utilisé pour la voix (en utilisant les Websockets comme solution de secours si le serveur ne prend pas en charge WebRTC). + +### Captures d'écran + +![Capture d'écran de Mumble Web](https://github.com/YunoHost-Apps/mumble-web_ynh/blob/master/doc/screenshots/screenshot.png) + +### Avertissements / informations importantes + +### Configuration + +- Pour utiliser *Mumble web*, vous devez d'abord installer le [server Mumble](https://github.com/YunoHost-Apps/mumbleserver_ynh). +- Cette installation suppose que le serveur Mumble est servi par le port `64738` +- Diverses options de configuration sont disponibles pour *Mumble web* sur ce fichier de configuration `/var/www/mumble-web/dist/config.local.js` + +### Documentation + +- Documentation Murmur : https://wiki.mumble.info/wiki/Murmurguide +- Documentation Framasoft : https://docs.framasoft.org/fr/jitsimeet/mumble.html + +## Liens utiles + ++ Site web : [mumble.info](https://www.mumble.info/) ++ Démonstration : [Démo](https://alt.framasoft.org/fr/mumble) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mumble-web](https://github.com/YunoHost-Apps/mumble-web_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/mumble-web/issues](https://github.com/YunoHost-Apps/mumble-web_ynh/issues) diff --git a/pages/04.applications/10.docs/mumble-web/app_mumble-web.md b/pages/04.applications/10.docs/mumble-web/app_mumble-web.md new file mode 100644 index 00000000..af6712fb --- /dev/null +++ b/pages/04.applications/10.docs/mumble-web/app_mumble-web.md @@ -0,0 +1,36 @@ +--- +title: Mumble Web +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mumble-web' +--- + +[![Installer Mumble Web with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mumble-web) [![Integration level](https://dash.yunohost.org/integration/mumble-web.svg)](https://dash.yunohost.org/appci/app/mumble-web) + +*Mumble Web* is an HTML5 Mumble client for use in modern browsers. The Mumble protocol uses TCP for control and UDP for voice. Running in a browser, both are unavailable to this client. Instead Websockets are used for control and WebRTC is used for voice (using Websockets as fallback if the server does not support WebRTC). + +### Screenshots + +![Screenshot of Mumble Web](https://github.com/YunoHost-Apps/mumble-web_ynh/blob/master/doc/screenshots/screenshot.png) + +### Disclaimers / important information + +### Setup + +- In order to use *Mumble web*, you need to install [Mumble server](https://github.com/YunoHost-Apps/mumbleserver_ynh) first. +- This installation assumes that *Mumble server* is served by port `64738` +- Various configuration options are available for Mumble web on this configuration file `/var/www/mumble-web/dist/config.local.js` + +### Documentation + +- Murmur documentation: https://wiki.mumble.info/wiki/Murmurguide +- Framasoft documentation: https://docs.framasoft.org/fr/jitsimeet/mumble.html + +## Useful links + ++ Website: [mumble.info](https://www.mumble.info/) ++ Demonstration: [Demo](https://alt.framasoft.org/fr/mumble) ++ Application software repository: [github.com - YunoHost-Apps/mumble-web](https://github.com/YunoHost-Apps/mumble-web_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mumble-web/issues](https://github.com/YunoHost-Apps/mumble-web_ynh/issues) diff --git a/pages/04.applications/10.docs/mumbleserver/app_mumbleserver.fr.md b/pages/04.applications/10.docs/mumbleserver/app_mumbleserver.fr.md new file mode 100644 index 00000000..cd79cc7c --- /dev/null +++ b/pages/04.applications/10.docs/mumbleserver/app_mumbleserver.fr.md @@ -0,0 +1,24 @@ +--- +title: Mumble server +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mumbleserver' +--- + +![logo de mumbleserver](image://mumbleserver_logo.svg?resize=,80) + +[![Install Mumble server with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=mumbleserver) [![Integration level](https://dash.yunohost.org/integration/mumbleserver.svg)](https://dash.yunohost.org/appci/app/mumbleserver) + +Mumble est un logiciel de voix sur IP efficace et stable qui vous permet de créer des salons audio pour plusieurs interlocuteurs. C'est un logiciel de VoIP qui fait bénéficier à ses utilisateurs d'une latence très faible tout en fournissant une qualité de son excellente. Mumble intègre également une surcouche visuelle qui se positionne discrètement au dessus des autres fenêtres afin d'avoir une vision sur l'activation des micros des gens avec qui vous parlez. +Ici, c'est la partir serveur 'Murmur' que vous installerez sur votre instance de YunoHost. + +Il est nécessaire d'utiliser un [client Mumble](https://wiki.mumble.info/wiki/3rd_Party_Applications) pour l'utiliser pour chaque interlocuteur·rice. + +## Liens utiles + ++ Site web : [www.mumble.info](https://www.mumble.info) ++ Documentation officielle : [wiki.mumble.info/wiki/Main_Page](https://wiki.mumble.info/wiki/Main_Page) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mumbleserver](https://github.com/YunoHost-Apps/mumbleserver_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/mumbleserver/issues](https://github.com/YunoHost-Apps/mumbleserver_ynh/issues) diff --git a/pages/04.applications/10.docs/mumbleserver/app_mumbleserver.md b/pages/04.applications/10.docs/mumbleserver/app_mumbleserver.md new file mode 100644 index 00000000..29d67804 --- /dev/null +++ b/pages/04.applications/10.docs/mumbleserver/app_mumbleserver.md @@ -0,0 +1,25 @@ +--- +title: Mumble server +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mumbleserver' +--- + +![mumbleserver's logo](image://mumbleserver_logo.svg?resize=,80) + +[![Install Mumble server with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=mumbleserver) [![Integration level](https://dash.yunohost.org/integration/mumbleserver.svg)](https://dash.yunohost.org/appci/app/mumbleserver) + +Mumble is an efficient and stable Voice over IP software that allows you to create audio rooms for multiple people. It is a VoIP software that allows its users to benefit from very low latency and very high quality while providing excellent sound quality. Mumble also incorporates a visual overlay that discreetly positions itself above the other windows to provide a view of the microphone activation of the people you are talking to. +Here is the 'Murmur' server that you will install on your instance of YunoHost. + +It is necessary to use a [Mumble client](https://wiki.mumble.info/wiki/3rd_Party_Applications) to use it for each interlocutor. + + +## Useful links + ++ Website: [www.mumble.info](https://www.mumble.info) ++ Official documentation: [wiki.mumble.info/wiki/Main_Page](https://wiki.mumble.info/wiki/Main_Page) ++ Application software repository: [github.com - YunoHost-Apps/mumbleserver](https://github.com/YunoHost-Apps/mumbleserver_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mumbleserver/issues](https://github.com/YunoHost-Apps/mumbleserver_ynh/issues) diff --git a/pages/04.applications/10.docs/my_capsule/app_my_capsule.fr.md b/pages/04.applications/10.docs/my_capsule/app_my_capsule.fr.md new file mode 100644 index 00000000..b56a0cab --- /dev/null +++ b/pages/04.applications/10.docs/my_capsule/app_my_capsule.fr.md @@ -0,0 +1,35 @@ +--- +title: my_capsule +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_my_capsule' +--- + +[![Installer my_capsule avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=my_capsule) [![Integration level](https://dash.yunohost.org/integration/my_capsule.svg)](https://dash.yunohost.org/appci/app/my_capsule) + +*my_capsule* est une capsule Gemini personnalisée avec un accès SFTP et HtmGem pour rendre vos pages Gemini accessibles sur le web. + +### Captures d'écran + +![Capture d'écran de my_capsule](https://github.com/YunoHost-Apps/my_capsule_ynh/blob/master/doc/screenshots/screenshot2.png) +![Capture d'écran de my_capsule](https://github.com/YunoHost-Apps/my_capsule_ynh/blob/master/doc/screenshots/screenshot1.png) + +### Avertissements / informations importantes + +* Une fois installé, allez à l'URL choisie pour connaître l'utilisateur, le domaine et le port que vous devrez utiliser pour l'accès SFTP ** Le mot de passe est celui que vous avez choisi lors de l'installation. Sous le répertoire Web, vous verrez un dossier `www` qui contient les fichiers publics servis par cette application. Vous pouvez y mettre tous les fichiers de votre application Web personnalisée. +* L'application peut aussi créer une base de données MySQL, permettant l'accès aux fichiers par [SFTP] (https://yunohost.org/en/filezilla). +* Il peut également créer une base de données MySQL qui sera sauvegardée et restaurée avec votre application. Les détails de connexion seront stockés dans le fichier `db_accesss.txt` situé dans le répertoire racine. + +* Port SFTP +Vous pouvez modifier le port SSH comme décrit dans cette section : +[Modifier le port SSH](https://yunohost.org/en/security#modify-the-ssh-port) ; +alors vous devez utiliser ce port pour mettre à jour votre site web avec SFTP. + +## Liens utiles + ++ Site web : [tildegit.org/Sbgodin/htmgem](https://tildegit.org/Sbgodin/htmgem) ++ Démonstration : [Démo](https://gmi.sbgodin.fr/htmgem/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/my_capsule](https://github.com/YunoHost-Apps/my_capsule_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/my_capsule/issues](https://github.com/YunoHost-Apps/my_capsule_ynh/issues) diff --git a/pages/04.applications/10.docs/my_capsule/app_my_capsule.md b/pages/04.applications/10.docs/my_capsule/app_my_capsule.md new file mode 100644 index 00000000..c03eec27 --- /dev/null +++ b/pages/04.applications/10.docs/my_capsule/app_my_capsule.md @@ -0,0 +1,35 @@ +--- +title: my_capsule +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_my_capsule' +--- + +[![Installer my_capsule with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=my_capsule) [![Integration level](https://dash.yunohost.org/integration/my_capsule.svg)](https://dash.yunohost.org/appci/app/my_capsule) + +*my_capsule* is a custom Gemini capsule with SFTP access and HtmGem to make your Gemini pages reachable on the web. + +### Screenshots + +![Screenshot of my_capsule](https://github.com/YunoHost-Apps/my_capsule_ynh/blob/master/doc/screenshots/screenshot2.png) +![Screenshot of my_capsule](https://github.com/YunoHost-Apps/my_capsule_ynh/blob/master/doc/screenshots/screenshot1.png) + +### Disclaimers / important information + +* Once installed, go to the chosen URL to know the user, domain and port you will have to use for the SFTP access.** The password is one you chosen during the installation. Under the Web directory, you will see a `www` folder which contains the public files served by this app. You can put all the files of your custom Web application inside. +* providing files access with [SFTP](https://yunohost.org/en/filezilla). +* It can also create a MySQL database which will be backed up and restored with your application. The connection details will be stored in the file `db_accesss.txt` located in the root directory. + +* SFTP port +You may have change the SSH port as described in this section: +[Modify the SSH port](https://yunohost.org/en/security#modify-the-ssh-port); +then you should use this port to update your website with SFTP. + +## Useful links + ++ Website: [tildegit.org/Sbgodin/htmgem](https://tildegit.org/Sbgodin/htmgem) ++ Demonstration: [Demo](https://gmi.sbgodin.fr/htmgem/) ++ Application software repository: [github.com - YunoHost-Apps/my_capsule](https://github.com/YunoHost-Apps/my_capsule_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/my_capsule/issues](https://github.com/YunoHost-Apps/my_capsule_ynh/issues) diff --git a/pages/04.applications/10.docs/my_webapp/app_my_webapp.fr.md b/pages/04.applications/10.docs/my_webapp/app_my_webapp.fr.md new file mode 100644 index 00000000..3f6733bb --- /dev/null +++ b/pages/04.applications/10.docs/my_webapp/app_my_webapp.fr.md @@ -0,0 +1,66 @@ +--- +title: My_webapp +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_my_webapp' +--- +En complément du [Readme_fr.md](https://github.com/YunoHost-Apps/my_webapp_ynh/blob/testing/README_fr.md) de l'application, voici des astuces utiles. + +## Mise à jour automatique du contenu du site. +L'application crée un nouvel utilisateur avec des droits limités : il peut se connecter (avec un mot de passe) en SFTP pour accéder au dossier `/var/www/my_webapp` (ou `/var/www/my_webapp__` s'il y a plusieurs installations de cette application). + +Cette configuration oblige à mettre à jour le contenu du site à la main, avec une connexion à mot de passe. +Si vous souhaitez automatiser la mise à jour de votre site, il vous faut une possibilité de connexion sans mot de passe à taper (dite "non-interactive"). + +Voici les étapes à suivre pour y parvenir : + +### Sur votre ordinateur +- Créez une paire de clés publique/privée, sur l'ordinateur client et SANS mettre de passphrase de protection. (exemple pour une clé RSA `ssh-keygen -t rsa -b 4096`) + +>Par défaut vos clés sont dans `~/.ssh/votre_cle` pour la clé privée et `~/.ssh/votre_cle.pub` pour la clé publique. + +- Ouvrez un terminal +- Connectez-vous en SSH sur votre serveur YunoHost `ssh -p XXX admin@ndd` (`-p` est optionnel, si vous avez changé le port SSH par défaut) +- Activez la connexion par clé publique, dans `/etc/ssh/sshd_config` (si ce n'est pas déja fait), avec la commande `nano /etc/ssh/sshd_config` +``` +PubkeyAuthentication yes +``` +- Entrez CTRL+X pour sauvegarder +- Entrez `sudo service sshd restart` pour prendre en compte les nouveaux paramètres +- Passez en `root` via la commande `sudo -i` + +>ATTENTION : Vous avez maintenant tous les droits sur votre serveur. + +- Créez un dossier `.ssh` dans `/var/www/my_webapp(__#)` ou `/var/www/my_webapp` (si votre site est à la racine de votre nom de domaine) (ex : `mkdir /var/www/my_webapp/.ssh`) +- Placez-vous dans ce dossier (ex: `cd /var/www/my_webapp/.ssh`) +- Créez un fichier `authorized_keys` via la commande `nano authorized_keys` +- Collez le contenu de `votre_cle.pub` générée à la première étape +- Replacez-vous dans le dossier `my_webapp` (`cd ./..` ou `cd /var/www/my_webapp`) +- Rendez l'utilisateur `my_webapp` propriétaire du fichier et du dossier `chown -hR my_webapp .ssh` +- Vérifiez, avec la commande `ls -l -a`, que vous obtenez : +``` +root@ndd:/var/www/my_webapp# ls -l -a +total 16 +drwxr-x---+ 4 root root 4096 Jan 12 10:56 . +drwxr-xr-x+ 14 root root 4096 Jan 12 10:47 .. +drwxr-xr-x 2 my_webapp root 4096 Jan 12 10:57 .ssh +drwxr-xr-x 2 my_webapp www-data 4096 Jan 12 10:47 www + +``` +- Ouvrez un autre terminal et testez la connexion via la commande `sftp -i ~/.ssh/votre_cle -P XXXX my_webapp@ndd` +``` +user@pc_client:~$ sftp -i ~/.ssh/votre_cle -P XXXXX my_webapp@ndd +Debian GNU/Linux 11 +Connected to ndd. +sftp> +``` + +>Les options `-i` et `-P` ne sont pas obligatoires si vous avez une seule clé générée et/ou si votre port est le port 22, c'est-à-dire le port par défaut. + +Vous pouvez maintenant vous connecter sans mot de passe, avec `sftp -b`, `lftp` ou bien d'autres clients SFTP. + +>NB : Le numéro de port à utiliser pour la connection SFTP est celui utilisé pour le SSH, et configuré dans `/etc/ssh/sshd_config`. + +Cette astuce vous permet de mettre à jour automatiquement votre site. Par exemple, le Makefile de l'outil Pelican vous permet d'utiliser `make ftp_upload`. diff --git a/pages/04.applications/10.docs/my_webapp/app_my_webapp.md b/pages/04.applications/10.docs/my_webapp/app_my_webapp.md new file mode 100644 index 00000000..5e55e865 --- /dev/null +++ b/pages/04.applications/10.docs/my_webapp/app_my_webapp.md @@ -0,0 +1,62 @@ +--- +title: My_webapp +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_my_webapp' +--- +In addition to the [Readme_en.md](https://github.com/YunoHost-Apps/my_webapp_ynh/blob/testing/README_fr.md) of the application, here are some useful tips. + +## Automatic update of the site content. +The application creates a new user with limited rights: he can connect (with a password) in SFTP to access the `/var/www/my_webapp` folder (or `/var/www/my_webapp__` if there are several installations of this application). + +This configuration forces you to update the content of the site by hand, with a password login. +If you want to automate things, you need a connection option without a password to type (called "non-interactive"). + +Here are the steps to do this: + +### On your computer +- Create a public/private key pair, on the client computer and WITHOUT putting a passphrase. (example for an RSA key `ssh-keygen -t rsa -b 4096`) + +>By default your keys are in `~/.ssh/your_key` for the private key and `~/.ssh/your_key.pub` for the public key. +- Open a terminal, +- Connect to your YunoHost server with SSH `ssh -p XXX admin@ndd` (`-p` is optional, if you have changed the default SSH port), +- Enable public key login, in `/etc/ssh/sshd_config` (if not already done), with the command `nano /etc/ssh/sshd_config`, +``` +PubkeyAuthentication yes +``` +- CTRL+X to save +- `sudo service sshd restart` to take over the new settings. + +- Switch to `root` via the command `sudo -i`, + +>WARNING: You now have full rights to your server. +- Create a `.ssh` folder in `/var/www/my_webapp(__#)` or `/var/www/my_webapp` (if your site is at the root of your ndd) (e.g. `mkdir /var/www/my_webapp/.ssh`), +- place yourself in this folder (e.g. `cd /var/www/my_webapp/.ssh`), +- Create an `authorized_keys` file via the `nano authorized_keys` command, +- Paste the contents of `your_key.pub` generated in step XX, +- Move to the `my_webapp` folder (`cd ./..` or `cd /var/www/my_webapp`), +- Enter the user `my_webapp` who owns the file and folder `chown -hR my_webapp .ssh`, +- Check with the following command `ls -l -a` you should get : +``` +root@ndd:/var/www/my_webapp# ls -l -a +total 16 +drwxr-x---+ 4 root root 4096 Jan 12 10:56 . +drwxr-xr-x+ 14 root root 4096 Jan 12 10:47 . +drwxr-xr-x 2 my_webapp root 4096 Jan 12 10:57 .ssh +drwxr-xr-x 2 my_webapp www-data 4096 Jan 12 10:47 www +``` +- Open another terminal and test the connection via the command `sftp -i ~/.ssh/your_cle -P XXXX my_webapp@ndd`. +``` +user@pc_client:~$ sftp -i ~/.ssh/your_cle -P XXXXX my_webapp@ndd +Debian GNU/Linux 11 +Connected to ndd. +sftp> +``` + +>The `-i` and `-P` options are not required if you have a single generated key and/or if your port is the default 22. +You can now connect without a password, with `sftp -b`, `lftp` or other SFTP clients. + +>NB: The port number to use for the SFTP connection is the one used for SSH, and configured in `/etc/ssh/sshd_config`. +This trick allows you to automatically update your site. For example, the Makefile for the Pelican tool allows you to use `make ftp_upload`. diff --git a/pages/04.applications/10.docs/mytinytodo/app_mytinytodo.fr.md b/pages/04.applications/10.docs/mytinytodo/app_mytinytodo.fr.md new file mode 100644 index 00000000..8b8fa545 --- /dev/null +++ b/pages/04.applications/10.docs/mytinytodo/app_mytinytodo.fr.md @@ -0,0 +1,23 @@ +--- +title: myTinyTodo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mytinytodo' +--- + +[![Installer myTinyTodo avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mytinytodo) [![Integration level](https://dash.yunohost.org/integration/mytinytodo.svg)](https://dash.yunohost.org/appci/app/mytinytodo) + +*myTinyTodo* est un moyen simple de gérer vos listes de choses à faire. + +### Captures d'écran + +![Capture d'écran de myTinyTodo](https://github.com/YunoHost-Apps/mytinytodo_ynh/blob/master/doc/screenshots/shot-v14b1.png) + +## Liens utiles + ++ Site web : [mytinytodo.net](https://www.mytinytodo.net/) ++ Démonstration : [Démo](https://www.mytinytodo.net/demo/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mytinytodo](https://github.com/YunoHost-Apps/mytinytodo_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/mytinytodo/issues](https://github.com/YunoHost-Apps/mytinytodo_ynh/issues) diff --git a/pages/04.applications/10.docs/mytinytodo/app_mytinytodo.md b/pages/04.applications/10.docs/mytinytodo/app_mytinytodo.md new file mode 100644 index 00000000..92ca250d --- /dev/null +++ b/pages/04.applications/10.docs/mytinytodo/app_mytinytodo.md @@ -0,0 +1,23 @@ +--- +title: myTinyTodo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mytinytodo' +--- + +[![Installer myTinyTodo with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mytinytodo) [![Integration level](https://dash.yunohost.org/integration/mytinytodo.svg)](https://dash.yunohost.org/appci/app/mytinytodo) + +*myTinyTodo* is a simple way to manage your todo lists. + +### Screenshots + +![Screenshot of myTinyTodo](https://github.com/YunoHost-Apps/mytinytodo_ynh/blob/master/doc/screenshots/shot-v14b1.png) + +## Useful links + ++ Website: [mytinytodo.net](https://www.mytinytodo.net/) ++ Demonstration: [Demo](https://www.mytinytodo.net/demo/) ++ Application software repository: [github.com - YunoHost-Apps/mytinytodo](https://github.com/YunoHost-Apps/mytinytodo_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mytinytodo/issues](https://github.com/YunoHost-Apps/mytinytodo_ynh/issues) diff --git a/pages/04.applications/10.docs/navidrome/app_navidrome.fr.md b/pages/04.applications/10.docs/navidrome/app_navidrome.fr.md new file mode 100644 index 00000000..806ffd34 --- /dev/null +++ b/pages/04.applications/10.docs/navidrome/app_navidrome.fr.md @@ -0,0 +1,20 @@ +--- +title: Navidrome +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_navidrome' +--- + +![logo de Navidrome](image://navidrome_logo.png?height=80) + +[![Install Navidrome with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=navidrome) [![Integration level](https://dash.yunohost.org/integration/navidrome.svg)](https://dash.yunohost.org/appci/app/navidrome) + +Navidrome est un serveur et un streamer de collection de musique en ligne open source. Il vous donne la liberté d'écouter votre collection de musique à partir de n'importe quel navigateur ou appareil mobile. + +## Liens utiles + ++ Site web : [navidrome.org (en)](https://www.navidrome.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/navidrome](https://github.com/YunoHost-Apps/navidrome_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/navidrome/issues](https://github.com/YunoHost-Apps/navidrome_ynh/issues) diff --git a/pages/04.applications/10.docs/navidrome/app_navidrome.md b/pages/04.applications/10.docs/navidrome/app_navidrome.md new file mode 100644 index 00000000..c1674b27 --- /dev/null +++ b/pages/04.applications/10.docs/navidrome/app_navidrome.md @@ -0,0 +1,20 @@ +--- +title: Navidrome +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_navidrome' +--- + +![Navidrome's logo](image://navidrome_logo.png?height=80) + +[![Install Navidrome with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=navidrome) [![Integration level](https://dash.yunohost.org/integration/navidrome.svg)](https://dash.yunohost.org/appci/app/navidrome) + +Navidrome is an open source web-based music collection server and streamer. It gives you freedom to listen to your music collection from any browser or mobile device. + +## Useful links + ++ Website: [navidrome.org](https://www.navidrome.org/) ++ Application software repository: [github.com - YunoHost-Apps/navidrome](https://github.com/YunoHost-Apps/navidrome_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/navidrome/issues](https://github.com/YunoHost-Apps/navidrome_ynh/issues) diff --git a/pages/04.applications/10.docs/netdata/app_netdata.fr.md b/pages/04.applications/10.docs/netdata/app_netdata.fr.md new file mode 100644 index 00000000..22138162 --- /dev/null +++ b/pages/04.applications/10.docs/netdata/app_netdata.fr.md @@ -0,0 +1,255 @@ +--- +title: NetData +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_netdata' +--- + +[NetData](http://my-netdata.io/) est un système distribué de **surveillance des performances et de la santé en temps réel**. +Il fournit un **aperçu inégalé, en temps réel**, de tout ce qui se passe sur lesystème qu'il exécute (y compris les applications telles que les serveurs web et de base de données), en utilisantdes **tableaux de bord modernes et interactifs sur le web**. + +_netdata est **rapide** et **efficient**, conçu pour fonctionner en permanence sur tous les systèmes (serveurs **physiques** et **virtuels**, **conteneurs**, **dispositifs IoT**), sans en perturbant leur fonction principale. + +[![Install Netdata with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=netdata) + +**Personnalisation apportée par le paquet:** + +* Accorde l'accès aux statistiques MySQL via un utilisateur `netdata`. +* Statistiques du journal racine NGINX en mettant l'utilisateur `netdata` dans le groupe `adm`. +* Statistiques Dovecot via l'accès aux statistiques de Dovecot pour l'utilisateur `net data` (fonctionne uniquement avec Dovecot 2.2.16+). + +**Autres recommandations:** +Nous n'autorisons pas les paquets YunoHost à apporter des modifications sensibles aux fichiers du système. Voici donc d'autres personnalisations que vous pouvez faire pour permettre une meilleure surveillance : + +* NGINX: + * Requêtes et connexions : suivez [ces recommandations](https://github.com/netdata/netdata/blob/master/docs/guides/step-by-step/step-06.md#example-enable-the-nginx-collector) pour activer `/stab_status` (par exemple en mettant la section `location` dans `/etc/nginx/conf.d/yunohost_admin.conf`). + * Journaux web : vous pouvez surveiller tous vos journaux web (weblogs) NGINX pour détecter les erreurs ; suivez [ces recommandations](https://github.com/firehol/netdata/tree/master/python.d#nginx_log). +* PHP-FPM : suivez [ces recommandations](https://github.com/netdata/netdata/tree/master/collectors/python.d.plugin/phpfpm). + +## Fonctionnalités + +

+ +

+ + - Des **tableaux de bord interactifs époustouflants**
+ souris et tactile, en 2 thèmes : sombre et clair. + + - **Rapide comme l'éclair**
+ Répond à toutes les demandes en moins de 0,5 ms par métrique, même sur du matériel bas de gamme + + - **Haute efficacité**
+ Collecte des milliers de mesures par serveur et par seconde, avec seulement 1% d'utilisation d'un seul cœur du processeur, quelques Mo de RAM et aucune E/S de disque. + + - **Alarme sophistiquée**
+ Des centaines d'alarmes, **prête à l'emploi**!
+ Prend en charge les seuils dynamiques, l'hystérésis, les modèles d'alarme, plusieurs méthodes de notification basées sur les rôles (comme le courriel, slack.com, pushover.net, pushbullet.com, telegram.org, twilio.com, messagebird.com). + + - **Extensible**
+ Vous pouvez surveiller tout ce pour quoi vous pouvez obtenir une métrique, en utilisant son API de plugin (tout peut être un plugin NetData, BASH, Python, Perl, Node.JS, Java, Go, Ruby, etc.). + + - **Intégrable**
+ Il peut fonctionner partout où un noyau Linux fonctionne (même IoT), et ses graphiques peuvent également être intégrés à vos pages web. + + - **Personnalisable**
+ Des tableaux de bord personnalisés peuvent être construits en utilisant du HTML simple (pas de JavaScript nécessaire). + + - **Zéro configuration**
+ Détecte tout automatiquement, il peut collecter jusqu'à 5000 mesures par serveur dès son lancement. + + - **Zéro dépendance**
+ Il est même son propre serveur web, pour ses fichiers web statiques et son API web. + + - **Zéro maintenance**
+ Vous le lancez, il fait le reste. + + - **S'échelonne à l'infini**
+ En exigeant un minimum de ressources centrales. + + - **Plusieurs modes de fonctionnement**
+ Surveillance autonome de l'hôte, collecteur de données sans tête, proxy de transfert, proxy de stockage et de transfert, surveillance centrale de plusieurs hôtes, dans toutes les configurations possibles. + Chaque nœud peut avoir une politique différente de rétention des données et fonctionner avec ou sans surveillance de la santé. + + - **Support des back-ends de séries chronologiques**
+ Peut archiver ses mesures sur les bases de données de documents `graphite`, `opentsdb`, `prometheus`, ou sur les bases de données de documents JSON, avec le même niveau de détail ou un niveau inférieur (Inférieur : pour éviter qu'il n'encombre ces serveurs en raison de la quantité de données collectées). + +![netdata](https://cloud.githubusercontent.com/assets/2662304/14092712/93b039ea-f551-11e5-822c-beadbf2b2a2e.gif) + +--- + +## Qu'est-ce qu'il surveille ? + +NetData collecte plusieurs milliers de mesures par appareil. +Toutes ces mesures sont collectées et visualisées en temps réel. + +> _Presque toutes les métriques sont auto-détectées, sans aucune configuration._ + +Voici une liste de ce qu'il surveille actuellement : + +- **Processeur central (CPU)**
+ Utilisation, interruptions, softirqs, fréquence, total et par cœur, états du CPU. + +- **Mémoire**
+ RAM, utilisation de la mémoire du noyau et de la swap, KSM (Kernel Samepage Merging), NUMA. + +- **Disques**
+ Par disque : E/S, opérations, fille d'attente, utilisation, espace, RAID logiciel (md). + + ![sda](https://cloud.githubusercontent.com/assets/2662304/14093195/c882bbf4-f554-11e5-8863-1788d643d2c0.gif) + +- **Interfaces réseau**
+ Par interface : bande passante, paquets, erreurs, rejets. + + ![dsl0](https://cloud.githubusercontent.com/assets/2662304/14093128/4d566494-f554-11e5-8ee4-5392e0ac51f0.gif) + +- **Réseautage IPv4**
+ Bande passante, paquets, erreurs, fragments, + TCP : connexions, paquets, erreurs, poignée de main, + UDP : paquets, erreurs, + Diffusion : bande passante, paquets, + Multidiffusion : bande passante, paquets. + +- **Réseautage IPv6**
+ Bande passante, paquets, erreurs, fragments, ECT, + UDP : paquets, erreurs, + UDP-Lite : paquets, erreurs, + Diffusion : bande passante, + Multidiffusion : bande passante, paquets, + ICMP : messages, erreurs, échos, routeur, voisin, MLDv2, appartenance à un groupe, + ventiler par type. + +- **Communication inter-processus - IPC**
+ Tels que les sémaphores et les réseaux de sémaphores. + +- **netfilter / iptables Linux firewall**
+ Connexions, événements de suivi des connexions, erreurs. + +- **Protection DDoS de Linux**
+ Mesures de la SYNPROXIE. + +- **latences fping**
+ Pour toute quantité d'hôtes, en indiquant la latence, les paquets et la perte de paquets. + + ![image](https://cloud.githubusercontent.com/assets/2662304/20464811/9517d2b4-af57-11e6-8361-f6cc57541cd7.png) + + +- **Processus**
+ En fonctionnement, bloqué, bifurqué, actif. + +- **Entropie**
+ Le pool de nombres aléatoires, utilisé en cryptographie. + +- **Serveurs et clients de fichiers NFS**
+ NFS v2, v3, v4 : E/S, cache, lecture anticipée, appels RPC. + +- **Réseau QoS**
+ le seul outil qui permet de visualiser les classes du réseau `tc` en temps réel. + + ![qos-tc-classes](https://cloud.githubusercontent.com/assets/2662304/14093004/68966020-f553-11e5-98fe-ffee2086fafd.gif) + +- **Groupes de contrôle de Linux**
+ Conteneurs : systemd, lxc, docker. + +- **Applications**
+ En regroupant l'arbre des processus et en signalant l'utilisation du processeur, de la mémoire, la lecture des disques, l'écritures des disques, l'échange, les fils, les pipes, les prises - par groupe. + + ![apps](https://cloud.githubusercontent.com/assets/2662304/14093565/67c4002c-f557-11e5-86bd-0154f5135def.gif) + +- **Utilisation des ressources par les utilisateurs et les groupes d'utilisateurs**
+ En résumant l'arbre de processus par utilisateur et par groupe, rapportant : processeur central, mémoire, lecture de disque, écriture de disque, échange (swap), fils, pipes, et sockets. + +- **Serveurs web Apache et lighttpd**
+ `mod-status` (v2.2, v2.4) et statistiques des journaux de cache, pour plusieurs serveurs. + +- **Serveurs web NGINX**
+ `stub-status`, pour plusieurs serveurs. + +- **Tomcat**
+ Accès, files, mémoire libre, volume. + +- **Fichiers journaux du serveur web**
+ Extrayant en temps réel les mesures de performance du serveur web et appliquant plusieurs contrôles de santé. + +- **Bases de données MySQL**
+ Plusieurs serveurs, chacun indiquant : bande passante, requêtes/s, gestionnaires, verrous, problèmes, + opérations tmp, connexions, métriques binlog, files, métriques innodb, et plus. + +- **Bases de données Postgres**
+ Plusieurs serveurs, chacun affichant : par base de données des statistiques (connexions, tuples + lecture - écriture - rendu, transactions, verrous), les processus d'arrière-plan, les index, + les tables, l'écriture à l'avance, l'écriture de fond et plus encore. + +- **Bases de données Redis**
+ Plusieurs serveurs, chacun affichant : opérations, taux de réussite, mémoire, clés, clients, esclaves. + +- **mongodb**
+ Opérations, clients, transactions, curseurs, connexions, assertions, serrures, etc. + +- **bases de données memcached**
+ Plusieurs serveurs, chacun indiquant : bande passante, connexions, objets. + +- **elasticsearch**
+ les performances de recherche et d'indexation, la latence, les délais, les statistiques sur les grappes, les statistiques sur les fils, etc. + +- **ISC Bind name servers**
+ Plusieurs serveurs, chacun affichant : les clients, les demandes, les requêtes, les mises à jour, les échecs et plusieurs mesures par vue. + +- **Serveurs de noms NSD**
+ Les requêtes, les zones, les protocoles, les types de requêtes, les transferts, etc. + +- **Serveurs de courrier électronique Postfix**
+ La file d'attente des messages (entrées, taille) + +- **Serveurs de courrier électronique Exim**
+ La file d'attente des messages (e-mails en file d'attente) + +- **Dovecot**
+ Serveurs POP3/IMAP + +- **ISC dhcpd**
+ L'utilisation des pools, les baux, etc. + +- **IPFS**
+ La bande passante, les pairs. + +- **Squid proxy servers**
+ Plusieurs serveurs, chacun indiquant : la bande passante et les requêtes des clients, la bande passante des serveurs et les requêtes. + +- **HAproxy**
+ La bande passante, les sessions, les backends, etc. + +- **varnish**
+ Les fils, les sessions, les succès, les objets, les backends, etc. + +- **OpenVPN**
+ Le statut par tunnel. + +- **Senseurs matériels**
+ Capteurs `lm_sensors` et `IPMI` : température, tension, ventilateurs, puissance, humidité. + +- **NUT et APC UPSes**
+ La charge, la tension de la batterie, la température, les mesures d'utilité, et les mesures de sortie. + +- **PHP-FPM**
+ Plusieurs instances, chacune rapportant les connexions, les demandes, et les performances. + +- **hddtemp**
+ La température des disques. + +- **smartd**
+ Les valeurs S.M.A.R.T. des disques. + +- **Dispositifs SNMP**
+ Peuvent également être surveillés (bien que vous devez les configurer). + +- **statsd**
+ [netdata est un serveur statsd complet](https://github.com/firehol/netdata/wiki/statsd). + +Et vous pouvez l'étendre, en écrivant des plugins qui collectent des données de n'importe quelle source, en utilisant n'importe quel langage informatique. + +## Liens + + * Signaler un bogue : https://github.com/YunoHost-Apps/netdata_ynh/issues + * Site web de NetData : http://my-netdata.io/ diff --git a/pages/04.applications/10.docs/netdata/app_netdata.md b/pages/04.applications/10.docs/netdata/app_netdata.md new file mode 100644 index 00000000..0ad92f6b --- /dev/null +++ b/pages/04.applications/10.docs/netdata/app_netdata.md @@ -0,0 +1,269 @@ +--- +title: NetData +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_netdata' +--- + +[NetData](http://my-netdata.io/) is a system for **distributed real-time performance and health monitoring**. +It provides **unparalleled insights, in real-time**, of everything happening on the +system it runs (including applications such as web and database servers), using +**modern interactive web dashboards**. + +_netdata is **fast** and **efficient**, designed to permanently run on all systems +(**physical** & **virtual** servers, **containers**, **IoT** devices), without +disrupting their core function._ + +[![Install NetData with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=netdata) + +**Customization brought by the package:** + +* grant MySQL statistics access via a `netdata` user +* NGINX root log statistics via putting `netdata` user in the `adm` group +* Dovecot statistics via giving access to Dovecot stats stocket to `netdata` user (works only with Dovecot 2.2.16+) + +**Further recommendations:** +We don't allow YunoHost packages to make sensible changes to system files. So here are further customizations you can make to allow more monitoring: + +* NGINX: + * requests/connections: follow [these recommandations](https://github.com/firehol/netdata/tree/master/python.d#nginx) to enable `/stab_status` (for example by putting the `location` section in `/etc/nginx/conf.d/yunohost_admin.conf` + * weblogs: you can monitor all your NGINX weblogs for errors; follow [these recommendations](https://github.com/firehol/netdata/tree/master/python.d#nginx_log) +* PHP-FPM: follow [these recommandations](https://github.com/firehol/netdata/tree/master/python.d#phpfpm) + +## Features + +

+ +

+ + - **Stunning interactive bootstrap dashboards**
+ mouse and touch friendly, in 2 themes: dark, light + + - **Amazingly fast**
+ responds to all queries in less than 0.5 ms per metric, + even on low-end hardware + + - **Highly efficient**
+ collects thousands of metrics per server per second, + with just 1% CPU utilization of a single core, a few MB of RAM and no disk I/O at all + + - **Sophisticated alarming**
+ hundreds of alarms, **out of the box**!
+ supports dynamic thresholds, hysteresis, alarm templates, + multiple role-based notification methods (such as email, slack.com, + pushover.net, pushbullet.com, telegram.org, twilio.com, messagebird.com) + + - **Extensible**
+ you can monitor anything you can get a metric for, + using its Plugin API (anything can be a NetData plugin, + BASH, Python, Perl, Node.JS, Java, Go, Ruby, etc.) + + - **Embeddable**
+ it can run anywhere a Linux kernel runs (even IoT) + and its charts can be embedded on your web pages too + + - **Customizable**
+ custom dashboards can be built using simple HTML (no JavaScript necessary) + + - **Zero configuration**
+ auto-detects everything, it can collect up to 5000 metrics + per server out of the box + + - **Zero dependencies**
+ it is even its own web server, for its static web files and its web API + + - **Zero maintenance**
+ you just run it, it does the rest + + - **scales to infinity**
+ requiring minimal central resources + + - **several operating modes**
+ autonomous host monitoring, headless data collector, forwarding proxy, store and forward proxy, central multi-host monitoring, in all possible configurations. + Each node may have different metrics retention policy and run with or without health monitoring. + + - **time-series back-ends supported**
+ can archive its metrics on `graphite`, `opentsdb`, `prometheus`, JSON document DBs, in the same or lower detail + (lower: to prevent it from congesting these servers due to the amount of data collected) + +![netdata](https://cloud.githubusercontent.com/assets/2662304/14092712/93b039ea-f551-11e5-822c-beadbf2b2a2e.gif) + +--- + +## What does it monitor? + +netdata collects several thousands of metrics per device. +All these metrics are collected and visualized in real-time. + +> _Almost all metrics are auto-detected, without any configuration._ + +This is a list of what it currently monitors: + +- **CPU**
+ usage, interrupts, softirqs, frequency, total and per core, CPU states + +- **Memory**
+ RAM, swap and kernel memory usage, KSM (Kernel Samepage Merging), NUMA + +- **Disks**
+ per disk: I/O, operations, backlog, utilization, space, software RAID (md) + + ![sda](https://cloud.githubusercontent.com/assets/2662304/14093195/c882bbf4-f554-11e5-8863-1788d643d2c0.gif) + +- **Network interfaces**
+ per interface: bandwidth, packets, errors, drops + + ![dsl0](https://cloud.githubusercontent.com/assets/2662304/14093128/4d566494-f554-11e5-8ee4-5392e0ac51f0.gif) + +- **IPv4 networking**
+ bandwidth, packets, errors, fragments, + TCP: connections, packets, errors, handshake, + UDP: packets, errors, + broadcast: bandwidth, packets, + multicast: bandwidth, packets + +- **IPv6 networking**
+ bandwidth, packets, errors, fragments, ECT, + UDP: packets, errors, + UDP-Lite: packets, errors, + broadcast: bandwidth, + multicast: bandwidth, packets, + ICMP: messages, errors, echos, router, neighbor, MLDv2, group membership, + break down by type + +- **Interprocess Communication - IPC**
+ such as semaphores and semaphores arrays + +- **netfilter / iptables Linux firewall**
+ connections, connection tracker events, errors + +- **Linux DDoS protection**
+ SYNPROXY metrics + +- **fping** latencies
+ for any number of hosts, showing latency, packets and packet loss + + ![image](https://cloud.githubusercontent.com/assets/2662304/20464811/9517d2b4-af57-11e6-8361-f6cc57541cd7.png) + + +- **Processes**
+ running, blocked, forks, active + +- **Entropy**
+ random numbers pool, using in cryptography + +- **NFS file servers and clients**
+ NFS v2, v3, v4: I/O, cache, read ahead, RPC calls + +- **Network QoS**
+ the only tool that visualizes network `tc` classes in realtime + + ![qos-tc-classes](https://cloud.githubusercontent.com/assets/2662304/14093004/68966020-f553-11e5-98fe-ffee2086fafd.gif) + +- **Linux Control Groups**
+ containers: systemd, lxc, docker + +- **Applications**
+ by grouping the process tree and reporting CPU, memory, disk reads, + disk writes, swap, threads, pipes, sockets - per group + + ![apps](https://cloud.githubusercontent.com/assets/2662304/14093565/67c4002c-f557-11e5-86bd-0154f5135def.gif) + +- **Users and User Groups resource usage**
+ by summarizing the process tree per user and group, + reporting: CPU, memory, disk reads, disk writes, swap, threads, pipes, sockets + +- **Apache and lighttpd web servers**
+ `mod-status` (v2.2, v2.4) and cache log statistics, for multiple servers + +- **NGINX web servers**
+ `stub-status`, for multiple servers + +- **Tomcat**
+ accesses, threads, free memory, volume + +- **web server log files**
+ extracting in real-time, web server performance metrics and applying several health checks + +- **mySQL databases**
+ multiple servers, each showing: bandwidth, queries/s, handlers, locks, issues, + tmp operations, connections, binlog metrics, threads, innodb metrics, and more + +- **Postgres databases**
+ multiple servers, each showing: per database statistics (connections, tuples + read - written - returned, transactions, locks), backend processes, indexes, + tables, write ahead, background writer and more + +- **Redis databases**
+ multiple servers, each showing: operations, hit rate, memory, keys, clients, slaves + +- **mongodb**
+ operations, clients, transactions, cursors, connections, asserts, locks, etc. + +- **memcached databases**
+ multiple servers, each showing: bandwidth, connections, items + +- **elasticsearch**
+ search and index performance, latency, timings, cluster statistics, threads statistics, etc. + +- **ISC Bind name servers**
+ multiple servers, each showing: clients, requests, queries, updates, failures and several per view metrics + +- **NSD name servers**
+ queries, zones, protocols, query types, transfers, etc. + +- **Postfix email servers**
+ message queue (entries, size) + +- **exim email servers**
+ message queue (emails queued) + +- **Dovecot** POP3/IMAP servers
+ +- **ISC dhcpd**
+ pools utilization, leases, etc. + +- **IPFS**
+ bandwidth, peers + +- **Squid proxy servers**
+ multiple servers, each showing: clients bandwidth and requests, servers bandwidth and requests + +- **HAproxy**
+ bandwidth, sessions, backends, etc. + +- **varnish**
+ threads, sessions, hits, objects, backends, etc. + +- **OpenVPN**
+ status per tunnel + +- **Hardware sensors**
+ `lm_sensors` and `IPMI`: temperature, voltage, fans, power, humidity + +- **NUT and APC UPSes**
+ load, charge, battery voltage, temperature, utility metrics, output metrics + +- **PHP-FPM**
+ multiple instances, each reporting connections, requests, performance + +- **hddtemp**
+ disk temperatures + +- **smartd**
+ disk S.M.A.R.T. values + +- **SNMP devices**
+ can be monitored too (although you will need to configure these) + +- **statsd**
+ [netdata is a fully featured statsd server](https://github.com/firehol/netdata/wiki/statsd) + +And you can extend it, by writing plugins that collect data from any source, using any computer language. + +## Links + + * Report a bug: https://github.com/YunoHost-Apps/netdata_ynh/issues + * NetData website: http://my-netdata.io/ diff --git a/pages/04.applications/10.docs/neutrinet/app_neutrinet.fr.md b/pages/04.applications/10.docs/neutrinet/app_neutrinet.fr.md new file mode 100644 index 00000000..18f9b9ac --- /dev/null +++ b/pages/04.applications/10.docs/neutrinet/app_neutrinet.fr.md @@ -0,0 +1,39 @@ +--- +title: Neutrinet +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_neutrinet' +--- + +[![Installer Neutrinet avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=neutrinet) [![Integration level](https://dash.yunohost.org/integration/neutrinet.svg)](https://dash.yunohost.org/appci/app/neutrinet) + +*Neutrinet* est destinée aux membres Neutrinet qui ont un VPN Neutrinet. Elle vérifie et renouvelle automatiquement les certificats VPN. Ce package contient également une page web avec des informations de contact et d'autres liens utiles. + +### Avertissements / informations importantes + +**Pour les contributeurs** + +**Déboguer** + +Vous pouvez exécuter manuellement la tâche cron qui tente de renouveler les certificats : +``` +sudo /etc/cron.daily/neutrinet-renew-cert +``` +Ceci exécute le script qui est dans `/opt/neutrinet/renew_cert/` : +``` +cd /opt/neutrinet/renew_cert +sudo ./renew_cert_cron.sh +``` +Vous pouvez augmenter la verbosité avec l'option `-v` : +``` +sudo ./renew_cert_cron.sh -v +``` +Pour installer l'application sans vérifier les certificats : `export PACKAGE_CHECK_EXEC=1`. + +## Liens utiles + ++ Site web : [gitlab.domainepublic.net/Neutrinet/neutrinet_ynh](https://gitlab.domainepublic.net/Neutrinet/neutrinet_ynh) ++ Dépôt logiciel de l'application : [gitlab.domainepublic.net - Neutrinet/neutrinet - YunoHost-Apps/neutrinet](https://gitlab.domainepublic.net/Neutrinet/neutrinet_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [gitlab.domainepublic.net - Neutrinet/neutrinet - YunoHost-Apps/neutrinet/issues](https://git.domainepublic.net/Neutrinet/neutrinet_ynh/-/issues) diff --git a/pages/04.applications/10.docs/neutrinet/app_neutrinet.md b/pages/04.applications/10.docs/neutrinet/app_neutrinet.md new file mode 100644 index 00000000..f7f7af1d --- /dev/null +++ b/pages/04.applications/10.docs/neutrinet/app_neutrinet.md @@ -0,0 +1,39 @@ +--- +title: Neutrinet +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_neutrinet' +--- + +[![Installer Neutrinet with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=neutrinet) [![Integration level](https://dash.yunohost.org/integration/neutrinet.svg)](https://dash.yunohost.org/appci/app/neutrinet) + +*Neutrinet* is for Neutrinet members that have a Neutrinet VPN. It automatically checks and renews the VPN certificates. This package also contains a web page with contact information and other useful links. + +### Disclaimers / important information + +**For contributers** + +**Debugging** + +You can manually run the cron job that attempts to renew the certificates: +``` +sudo /etc/cron.daily/neutrinet-renew-cert +``` +This actually runs the script in `/opt/neutrinet/renew_cert/`: +``` +cd /opt/neutrinet/renew_cert +sudo ./renew_cert_cron.sh +``` +You can increase the verbosity with the option `-v`: +``` +sudo ./renew_cert_cron.sh -v +``` +To install the app without checking for certificates, run `export PACKAGE_CHECK_EXEC=1`. + +## Useful links + ++ Website: [gitlab.domainepublic.net/Neutrinet/neutrinet_ynh](https://gitlab.domainepublic.net/Neutrinet/neutrinet_ynh) ++ Application software repository: [gitlab.domainepublic.net - Neutrinet/neutrinet - YunoHost-Apps/neutrinet](https://gitlab.domainepublic.net/Neutrinet/neutrinet_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [gitlab.domainepublic.net - Neutrinet/neutrinet - YunoHost-Apps/neutrinet/issues](https://git.domainepublic.net/Neutrinet/neutrinet_ynh/-/issues) diff --git a/pages/04.applications/10.docs/nextcloud/app_nextcloud.fr.md b/pages/04.applications/10.docs/nextcloud/app_nextcloud.fr.md new file mode 100644 index 00000000..bc09f194 --- /dev/null +++ b/pages/04.applications/10.docs/nextcloud/app_nextcloud.fr.md @@ -0,0 +1,285 @@ +--- +title: Nextcloud +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nextcloud' +--- + +![logo de Nextcloud](image://nextcloud_logo.png) + +Nextcloud est un service d'hébergement de fichiers. De nombreuses applications peuvent être installées afin d'offrir à Nextcloud de nouvelles fonctionnalités telles qu'un agenda, un répertoire de contacts, des notes et plein d'autres possibles (vous pouvez trouver quelques applications dans la section [applications tierces](#applications-tierces), il en existe une multitude suivant vos besoins). + + +## Découverte de l'environnement de Nextcloud +Du fait de la constitution de Nextcloud, une base avec des applications tierces à installer, ce chapitre ne concernera que la base de Nextcloud sans applications ajoutés. Plus d'informations sur les applications dans la partie dédiée ou sur le catalogue d'application de Nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com). +Nextcloud est avant tout un service de cloud (comme Seafile et d'autres logiciels), il permet une synchronisation et le partage de fichiers sur internet et entre plusieurs terminaux (ordinateurs, smartphone) mais aussi avec plusieurs personnes. + + +## Logiciels clients +Il existe des logiciels clients pour de nombreux terminaux. Vous pouvez les retrouver sur le site de Nextcloud : [nextcloud.com/install/#install-clients](https://nextcloud.com/install/#install-clients) + + +## Manipulations utiles & problèmes rencontrés + +### Ajouter de l'espace à Nextcloud +La solution I. permet d'ajouter un lien vers un dossier local ou distant. +La solution II. permet de déplacer l'espace de stockage principal de Nextcloud. + +#### I. Ajouter un espace de stockage externe + +Paramètre => [Administration] Stockages externe. + +En bas de la liste vous pouvez rajouter un dossier (Il est possible de définir un sous dossier en utilisant la convention `dossier/sousDossier`.) +Sélectionner un type de stockage et indiquez les informations de connexion demandées. +Vous pouvez restreindre ce dossier à un ou plusieurs utilisateurs nextcloud avec la colonne `Disponible pour`. +Avec l'engrenage vous pouvez autoriser ou interdire la prévisualisation et le partage des fichiers. +Enfin cliquer sur la coche pour valider le dossier. + +#### II. Migrer les données de Nextcloud dans une partition plus grosse + +**Remarque** : Ce qui suit suppose que vous avez un disque dur monté sur `/media/stockage`. Référez-vous à [cet article](/external_storage) pour préparer votre système. + +**Remarque** : Remplacez `nextcloud` par le nom de son instance, si vous avez plusieurs apps Nextcloud installées. + +Commencez par éteindre le serveur web avec la commande : +```bash +systemctl stop nginx +``` + +##### Choix de l'emplacement + +**Cas A : Stockage vierge, exclusif à Nextcloud** + +Pour l'instant seul root peut y écrire dans `/media/stockage` ; ce qui signifie que NGINX et Nextcloud ne pourront donc pas l'utiliser. + +```bash +chown -R nextcloud:nextcloud /media/stockage +chmod 775 -R /media/stockage +``` + +**Cas B : Stockage partagé, données déjà présentes, données Nextcloud dans un sous-dossier** + +Si vous souhaitez utiliser ce disque pour d'autres applications, vous pouvez créer un sous-dossier appartenant à Nextcloud. + +```bash +mkdir -p /media/stockage/nextcloud_data +chown -R nextcloud /media/stockage/nextcloud_data +chmod 775 -R /media/stockage/nextcloud_data +``` + +##### Migrer les données + +Migrez vos données vers le nouveau disque. Pour ce faire *(soyez patient, cela peut être long)* : + +```bash +Cas A : cp -ir /home/yunohost.app/nextcloud /media/stockage +Cas B : cp -ir /home/yunohost.app/nextcloud /media/stockage/nextcloud_data +``` + +L'option `i` permet de vous demander quoi faire en cas de conflit de fichier, notamment si vous écrasez un ancien dossier de données Owncloud ou Nextcloud. +Pour vérifier que tout s'est bien passé, comparer ce qu'affichent ces deux commandes (le contenu doit être identique) : + +```bash +ls -la /home/yunohost.app/nextcloud + +Cas A : ls -al /media/stockage +Cas B : ls -al /media/stockage/nextcloud_data/nextcloud +``` + +##### Configurer Nextcloud + +Pour informer Nextcloud de son nouveau répertoire, modifiez le fichier `/var/www/nextcloud/config/config.php` avec la commande : + +```bash +nano /var/www/nextcloud/config/config.php +``` + +Cherchez la ligne : + +```bash +'datadirectory' => '/home/yunohost.app/nextcloud/data', +``` + +Que vous modifiez : + +```bash +CAS A : 'datadirectory' => '/media/stockage', +CAS B : 'datadirectory' => '/media/stockage/nextcloud_data/nextcloud/data', +``` + +Sauvegardez avec `ctrl+x` puis `y` ou `o` (dépend de la locale de votre serveur). + +Relancez le serveur web : + +```bash +systemctl start nginx +``` + +Ajouter le fichier .ocdata +```bash +CAS A : nano /media/stockage/.ocdata +CAS B : nano /media/stockage/nextcloud_data/nextcloud/data/.ocdata +``` +Ajouter un espace au fichier pour pouvoir le sauvegarder + +Sauvegardez avec `ctrl+x` puis `y` ou `o` (dépend de la locale de votre serveur). + +Lancez un scan du nouveau répertoire par Nextcloud: + +```bash +cd /var/www/nextcloud +sudo -u nextcloud php8.1 --define apc.enable_cli=1 files:scan --all +``` + +C'est terminé. À présent testez si tout va bien, essayez de vous connecter à votre instance Nextcloud, envoyer un fichier, vérifiez sa bonne synchronisation. + +### Partager un dossier entre Nextcloud et une application +Il est relativement simple de monter des dossiers accessibles depuis Nextcloud en lecture/écriture et de les +partager avec d'autres applications (par exemple [Jellyfin](app_jellyfin), [Funkwhale](app_funkwhale), [Transmission](app_transmission), ...) + +Il vous faut commencer par monter un dossier qui sera disponible pour votre application (je prends jellyfin dans mon +exemple). Je commence donc par créer un nouveau dossier. +```bash +mkdir /media/data/jellyfin +``` + +Il nous faut maintenant créer un groupe qui pourra faire la liaison entre les applications. Ici mon groupe se nomme +`multimedia` +```bash +sudo su + +groupadd multimedia + +usermod nextcloud -a -G multimedia +usermod jellyfin -a -G multimedia + +chown nextcloud:multimedia -R /media/data/jellyfin +``` + +Dans l'interface de vos applications vous pouvez ajouter ce chemin, il sera accessible pour les 2 applications, dans +`Nextcloud` > `Paramètres` > `Administration` > `Stockage externe` + +### Nextcloud et Cloudflare + +Si vous utilisez Cloudflare pour vos DNS, *ce qui peut-être pratique si vous avez une IP dynamique*, vous aurez très probablement des problèmes d'authentification avec l'application Nextcloud. Sur Internet beaucoup de gens proposent de créer une règle ayant pour effet de désactiver toutes les options reliées à la sécurité et à la vitesse de Cloudflare pour l'URL pointant sur votre instance Nextcloud. Bien que cela fonctionne, ce n'est pas la solution optimale. Je vous propose, certes de créer une règle pour l'URL pointant sur votre instance Nextcloud, mais de désactiver seulement 2 options. Voici donc comment : + +#### Cloudflare Page Rules + +Dans le panneau de contrôle de Cloudflare, choisissez votre domaine et trouvez Page Rules +l'URL dans votre barre d'adresse ressemblera à : https://dash.cloudflare.com/*/domain.tld/page-rules + +#### Ajouter une règle + +La règle à ajouter doit s'appliquer pour l'URL de votre instance Nextcloud soit : +- `https://nextcloud.domain.tld/*` si vous utilisez un sous-domaine +- `https://domain.tld/nextcloud/*` si vous avez déployé Nextcloud dans un répertoire + +Les options à désactiver (Off) sont : + +- Rocket Loader +- Email Obfuscation + +Sauvegarder et nettoyer vos caches (Cloudflare, navigateur...) et le tour est joué. + +# Applications Tierces +Certaines applications sont disponibles directement depuis Nextcloud. +![image](image://nextcloud_menu_parameter.jpg) + +## Collabora online + +Collabora permet d'éditer en ligne les documents stockés sur Nextcloud. + +### Architectures autres qu'ARM + +Pour les serveurs ayant une architecture autre qu'ARM (x86...), le plus simple est d'utiliser l'application [Collabora](https://yunohost.org/fr/app_collabora), présente dans le catalogue d'applications de YunoHost. + +Cette application n'est cependant pas compatible avec les architectures ARM. Le projet Collabora a bien développé une version spécifique ARM, mais celle-ci n'est compatible qu'avec Ubuntu, pas Debian, donc ne fonctionne pas sous YunoHost. + +### Architectures ARM + +Il existe une solution pour faire tourner Collabora Online Document Server sur des architectures ARM (Raspberry Pi...), via Nextcloud. + +#### 1. Télécharger et activer le Collabora Online Document Server + +#### Attention : cette étape doit être réalisée depuis un terminal, et non depuis l'interface graphique de Nextcloud + +Dans un terminal, se placer en super user + +```bash +sudo su +``` + +puis lancer la commande d'installation du CODE : + +```bash +sudo -u nextcloud php --define apc.enable_cli=1 -d memory_limit=512M /var/www/nextcloud/occ app:install richdocumentscode_arm64 +``` + +#### 2. Corriger la configuration de Nginx pour Nextcloud + +Pour que le CODE soit connecté à Nextcloud, le proxy doit faire le lien entre CODE (richdocumentscode_arm64) et Nextcloud. +Or le fichier config par défaut de NGINX pour Nextcloud fait référence à richdocumentscode au lieu de rich documentscode_arm64, qui est le nom de l'application dans notre cas des architectures ARM. + +Il faut donc faire : + +```bash +cd /etc/nginx/conf.d/[nextcloud.votredomaine.com].d +``` + +```bash +sudo nano nextcloud.conf +``` +Dans le fichier, repérer la ligne comportant "richdocumentscode", puis ajouter "_arm64" juste après, enregistrer (Ctrl+S) et sortir (Ctrl+X). + +Puis redémarrer NGINX (par exemple en redémarrant le serveur depuis l'interface d'aministration de YunoHost). + +#### 3. Télécharger et activer l'application Nextcloud Collabora, sous le nom de "Nextcloud Office" + +Dès lors, on peut télécharger l'application "Nextcloud Office" dans Nextcloud, et normalement le serveur CODE est choisi par défaut (sinon voir les paramètres de Nextcloud). + + +## À propos de Keeweb + +L'application Keeweb sur le catalogue de Nextcloud - [apps.nextcloud.com/keeweb](https://apps.nextcloud.com/apps/keeweb) + +L'application KeeWeb est un gestionnaire de mots de passe incorporé à Nextcloud. Elle permet par exemple de lire un fichier de type KeePass (*.kdbx*) stocké sur votre instance Nextcloud. + +Mais il arrive parfois que Nextcloud ne laisse pas l'application prendre en charge ces fichiers, ce qui rend alors impossible leur lecture de KeeWeb. Pour remédier à cela, +[une solution](https://github.com/jhass/nextcloud-keeweb/blob/master/README.md#mimetype-detection) existe. + +Se rendre dans le répertoire de configuration de Nextcloud : + +```bash +cd /var/www/nextcloud/config/ +``` + +S'il n'existe pas, créer le fichier *mimetypemapping.json* dont le propriétaire est l'utilisateur *nextcloud* : + +```bash +sudo su nextcloud -c "nano mimetypemapping.json" +``` + +Puis ajouter dans ce fichier le texte suivent : + +```bash +{ + "kdbx": ["x-application/kdbx"] +} +``` + +Enregistrer le fichier (**CTRL** + **o**) et quitter nano (**CTRL** + **c**). + +Ensuite lancer un scan en tant que root : + +```bash +sudo -u nextcloud php8.1 --define apc.enable_cli=1 files:scan --all +``` + +À présent, le problème est corrigé. + +## Quelques liens utiles + ++ Site officiel : [nextcloud.com (en)](https://nextcloud.com/) ++ Catalogue d'application pour Nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com/) diff --git a/pages/04.applications/10.docs/nextcloud/app_nextcloud.md b/pages/04.applications/10.docs/nextcloud/app_nextcloud.md new file mode 100644 index 00000000..45c0fe9a --- /dev/null +++ b/pages/04.applications/10.docs/nextcloud/app_nextcloud.md @@ -0,0 +1,206 @@ +--- +title: Nextcloud +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nextcloud' +--- + +![Nextcloud's logo](image://nextcloud_logo.png) + +Nextcloud is a file hosting service, many applications can be installed to offer it new features such as a calendar, a directory, notes and many others (you can find some applications in the [third-party applications](#AppsTiers) part but there are many others depending on your needs). + +## Discovering the Nextcloud environment + +Due to the creation of Nextcloud, a database with third-party applications to install, this chapter will only concern the nextcloud database without added applications. More information on applications in the dedicated section or in the nextcloud application catalogue: [apps.nextcloud.com](https://apps.nextcloud.com). +Nextcloud is first and foremost a cloud service (like Seafile and others), it allows synchronization and file sharing on the Internet and between several terminals (computers, smartphone) but also with several people. + +## Mobile and computer client software + +There are client software for all platforms. You can find them on the official nextcloud website: https://nextcloud.com/install/#install-clients + +## Useful Manipulations & Problems Encountered + +### Add storage space + +Solution I. allows you to add a link to a local or remote folder. +Solution II. allows to move the main storage space of Nextcloud. + +#### I. Add an external storage space + +Parameter =>[Administration] External storage. + +At the bottom of the list you can add a folder (It is possible to define a subfolder using the `folder/subfolder` convention.) +Select a storage type and specify the requested connection information. +You can restrict this folder to one or more nextcloud users with the column `Available for`. +With the gear you can allow or prohibit previewing and file sharing. +Finally click on the check mark to validate the folder. + +#### II. Migrate Nextcloud data to a larger partition + +**Note**: The following assumes that you have a hard disk mounted on `/media/storage`. Refer to[this article](/external_storage) to prepare your system. + +**Note**: Replace `nextcloud` with the name of its instance, if you have several Nextcloud apps installed. + +First turn off the web server with the command: +```bash +systemctl stop nginx +``` + +##### Choice of location + +**Case A: Blank storage, exclusive to Nextcloud** + +For the moment only root can write to it in `/media/storage`, which means that NGINX and Nextcloud will not be able to use it. + +```bash +chown -R nextcloud:nextcloud /media/storage +chmod 775 -R /media/storage +``` + +**Case B: Shared storage, data already present, Nextcloud data in a subfolder** + +If you want to use this disk for other applications, you can create a subfolder belonging to Nextcloud. + +```bash +mkdir -p /media/storage/nextcloud_data +chown -R nextcloud /media/storage/nextcloud_data +chmod 775 -R /media/storage/nextcloud_data +``` + +##### Migrate data + +Migrate your data to the new disk. To do this *(be patient, it can take a long time)*: + +```bash +Case A: cp -ia /home/yunohost.app/nextcloud /media/storage +Case B: cp -ia /home/yunohost.app/nextcloud /media/storage/nextcloud_data +``` + +The `i` option allows you to ask yourself what to do if there is a file conflict, especially if you overwrite an old Owncloud or Nextcloud data folder. +To check that everything went well, compare what these two commands display (the content must be identical): + +```bash +ls -la /home/yunohost.app/nextcloud + +Case A: ls -al /media/storage +Case B: ls -al /media/storage/nextcloud_data/nextcloud +``` + +##### Configure Nextcloud + +To inform Nextcloud of its new directory, modify the `/var/www/nextcloud/config/config.php` file with the command: + +```bash +nano /var/www/nextcloud/config/config.php +``` + +Look for the line: + +```bash +'datadirectory' => '/home/yunohost.app/nextcloud/data', +``` + +That you modify: + +```bash +CASE A:'datadirectory' =>'/media/storage', +CASE B:'datadirectory' =>'/media/storage/nextcloud_data/nextcloud/data', +``` + +Save it with `ctrl+x` then `y` or `o` (depending on your server locale). + +Restart the web server: + +```bash +systemctl start nginx +``` + +Add the.ocdata file +```bash +CASE A: nano /media/storage/.ocdata +CASE B: nano /media/storage/nextcloud_data/nextcloud/data/.ocdata +``` +Add a space to the file to be able to save it + +Back up with `ctrl+x` then `y` or `o` (depending on your server locale). + +Run a scan of the new directory by Nextcloud: + +```bash +cd /var/www/nextcloud +sudo -u nextcloud php8.1 --define apc.enable_cli=1 files:scan --all +``` + +Update the YunoHost setting, so automatic upgrades and backups know where the datadir is located: +```bash +Case A: yunohost app setting nextcloud datadir -v /media/storage +Case B: yunohost app setting nextcloud datadir -v /media/storage/nextcloud_data/nextcloud/data/ +``` + +It's over now. Now test if everything is fine, try connecting to your Nextcloud instance, upload a file, check its proper synchronization. + +### Nextcloud and Cloudflare + +If you use Cloudflare for your DNS, *which may be useful if you have a dynamic IP*, you will most likely have authentication problems with the Nextcloud application. On the Internet many people propose to create a rule that disables all options related to security and Cloudflare speed for the URL pointing to your Nextcloud instance. Although it works, it is not the optimal solution. I propose, certainly to create a rule for the URL pointing to your Nextcloud instance but to disable only 2 options. So here's how: + +#### Cloudflare Page Rules + +In the Cloudflare control panel select your domain and find Page Rules +the URL in your address bar will look like this: https://dash.cloudflare.com/*/domain.tld/page-rules + +##### Add a rule + +The rule to be added must apply to the URL of your Nextcloud instance either: + +- `https://nextcloud.domain.tld/**` if you use a subdomain +- `https://domain.tld/nextcloud/*` if you have deployed Nextcloud in a directory + +The options to disable (Off) are: + +- Rocket Loader +- Email Obfuscation + +Save and clean your caches (Cloudflare, browser...) and that's it. + +## About Keeweb + +The KeeWeb application is a password manager integrated into Nextcloud. For example, it allows you to read a KeePass file (*.kdbx*) stored on your Nextcloud instance. +But sometimes Nextcloud does not let the application support these files, which makes it impossible to read them from KeeWeb. To remedy this, +[a solution](https://github.com/jhass/nextcloud-keeweb/blob/master/README.md#mimetype-detection) exists. + +Go to the Nextcloud configuration directory: + +```bash +cd /var/www/nextcloud/config/ +``` + +If it does not exist, create the *mimetypemapping.json* file whose owner is the user *nextcloud* : + +```bash +sudo su nextcloud -c "nano mimetypemapping.json" +``` + +Then add in this file the following text: + +```bash +{ + "kdbx": ["x-application/kdbx"] +} +``` + +Save the file (**CTRL** + **o**) and exit nano (**CTRL** + **c**). + +Then run a scan by executing next command as root: + +```bash +sudo -u nextcloud php8.1 --define apc.enable_cli=1 files:scan --all +``` + +Now the problem is fixed. + +## Useful links + + - Official website: [nextcloud.com](https://nextcloud.com/) + - Application catalogue for Nextcloud: [apps.nextcloud.com](https://apps.nextcloud.com/) diff --git a/pages/04.applications/10.docs/nextcloud_keeweb/app_nextcloud_keeweb.fr.md b/pages/04.applications/10.docs/nextcloud_keeweb/app_nextcloud_keeweb.fr.md new file mode 100644 index 00000000..68aa53bf --- /dev/null +++ b/pages/04.applications/10.docs/nextcloud_keeweb/app_nextcloud_keeweb.fr.md @@ -0,0 +1,45 @@ +--- +title: KeeWeb pour Nextcloud +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nextcloud_keeweb' +--- + +L'application Keeweb sur le catalogue de nextcloud - [apps.nextcloud.com/keeweb](https://apps.nextcloud.com/apps/keeweb) + +L'application KeeWeb est un gestionnaire de mots de passe incorporé à Nextcloud. Elle permet par exemple de lire un fichier de type KeePass (*.kdbx*) stocké sur votre instance Nextcloud. + +Mais il arrive parfois que Nextcloud ne laisse pas l'application prendre en charge ces fichiers, ce qui rend alors impossible leur lecture de KeeWeb. Pour remédier à cela, +[une solution](https://github.com/jhass/nextcloud-keeweb/blob/master/README.md#mimetype-detection) existe. + +Se rendre dans le répertoire de configuration de Nextcloud : + +```bash +cd /var/www/nextcloud/config/ +``` + +S'il n'existe pas, créer le fichier *mimetypemapping.json* dont le propriétaire est l'utilisateur *nextcloud* : + +```bash +sudo su nextcloud -c "nano mimetypemapping.json" +``` + +Puis ajouter dans ce fichier le texte suivent : + +```bash +{ + "kdbx": ["x-application/kdbx"] +} +``` + +Enregistrer le fichier (**CTRL** + **o**) et quitter nano (**CTRL** + **c**). + +Ensuite lancer un scan en tant que root : + +```bash +sudo -u nextcloud php /var/www/nextcloud/occ files:scan --all +``` + +À présent, le problème est corrigé. diff --git a/pages/04.applications/10.docs/nextcloud_keeweb/app_nextcloud_keeweb.md b/pages/04.applications/10.docs/nextcloud_keeweb/app_nextcloud_keeweb.md new file mode 100644 index 00000000..5d50ce28 --- /dev/null +++ b/pages/04.applications/10.docs/nextcloud_keeweb/app_nextcloud_keeweb.md @@ -0,0 +1,42 @@ +--- +title: KeeWeb for Nextcloud +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nextcloud_keeweb' +--- + +The KeeWeb application is a password manager integrated into Nextcloud. For example, it allows you to read a KeePass file (*.kdbx*) stored on your Nextcloud instance. +But sometimes Nextcloud does not let the application support these files, which makes it impossible to read them from KeeWeb. To remedy this, +[a solution](https://github.com/jhass/nextcloud-keeweb/blob/master/README.md#mimetype-detection) exists. + +Go to the Nextcloud configuration directory: + +```bash +cd /var/www/nextcloud/config/ +``` + +If it does not exist, create the *mimetypemapping.json* file whose owner is the user *nextcloud* : + +```bash +sudo su nextcloud -c "nano mimetypemapping.json" +``` + +Then add in this file the following text: + +```bash +{ + "kdbx": ["x-application/kdbx"] +} +``` + +Save the file (**CTRL** + **o**) and exit nano (**CTRL** + **c**). + +Then run a scan by executing next command as root: + +```bash +sudo -u nextcloud php /var/www/nextcloud/occ files:scan --all +``` + +Now the problem is fixed. diff --git a/pages/04.applications/10.docs/nitter/app_nitter.fr.md b/pages/04.applications/10.docs/nitter/app_nitter.fr.md new file mode 100644 index 00000000..bb1f3594 --- /dev/null +++ b/pages/04.applications/10.docs/nitter/app_nitter.fr.md @@ -0,0 +1,46 @@ +--- +title: Nitter +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nitter' +--- + +[![Installer Nitter avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nitter) [![Integration level](https://dash.yunohost.org/integration/nitter.svg)](https://dash.yunohost.org/appci/app/nitter) + +*Nitter* est une interface alternative pour Twitter qui est plus rapide que le site officiel. Cette application respecte votre vie privée et ne nécessite pas de s'enregistrer. Son interface s'adapte aux écrans de toutes tailles. Nitter offre aussi de générer des flux RSS à partir des timelines des utilisateurs Twitter. + +### Fonctionnalités + +- Pas de JavaScript ni de publicités +- Toutes les demandes passent par le backend, le client ne communique jamais avec Twitter +- Empêche Twitter de suivre votre adresse IP ou votre empreinte JavaScript +- Utilise l'API non officielle de Twitter (aucune limite de débit ni compte de développeur requis) +- Léger (pour @nim_lang, 60KB contre 784KB de twitter.com) +- Flux RSS +- Thèmes +- Support mobile (conception réactive) + +## Captures d'écran + +![Capture d'écran de Nitter](https://github.com/YunoHost-Apps/nitter_ynh/blob/master/doc/screenshots/screenshot.png) + +### Avertissements / informations importantes + +#### Configuration + +Cette application nécéssite un domaine dedié. + +Le ficher de configuration de Nitter se trouve à `/var/www/nitter/nitter.conf` (pour la première installation, les prochaines installations iront dans `nitter__2`, `nitter__3`, etc). Les utilisateurs peuvent modifier les paramétres par défaut en visitant `https://instance-domain.tld/settings`. + +### :red_circle: Fonctions indésirables + +- **Services de réseau non libres** : Favorise ou dépend entièrement d'un service de réseau non libre. + +## Liens utiles + ++ Site web : [nitter.net](https://nitter.net/) ++ Démonstration : [Démo](https://nitter.net/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/nitter](https://github.com/YunoHost-Apps/nitter_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/nitter/issues](https://github.com/YunoHost-Apps/nitter_ynh/issues) diff --git a/pages/04.applications/10.docs/nitter/app_nitter.md b/pages/04.applications/10.docs/nitter/app_nitter.md new file mode 100644 index 00000000..ee9ad3ad --- /dev/null +++ b/pages/04.applications/10.docs/nitter/app_nitter.md @@ -0,0 +1,46 @@ +--- +title: Nitter +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nitter' +--- + +[![Installer Nitter with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nitter) [![Integration level](https://dash.yunohost.org/integration/nitter.svg)](https://dash.yunohost.org/appci/app/nitter) + +*Nitter* is a free and open source alternative Twitter front-end focused on privacy and performance. Inspired by the Invidious project. + +#### Features + +- No JavaScript or ads +- All requests go through the backend, client never talks to Twitter +- Prevents Twitter from tracking your IP or JavaScript fingerprint +- Uses Twitter's unofficial API (no rate limits or developer account required) +- Lightweight (for @nim_lang, 60KB vs 784KB from twitter.com) +- RSS feeds +- Themes +- Mobile support (responsive design) + +### Screenshots + +![Screenshot of Nitter](https://github.com/YunoHost-Apps/nitter_ynh/blob/master/doc/screenshots/screenshot.png) + +### Disclaimers / important information + +#### Configuration + +This app requires a dedicated root domain. + +Nitter config file is stored in `/var/www/nitter/nitter.conf` (for the first instance, subsequent installs will go in `nitter__2`, `nitter__3`, etc). Users can override the defaults and set custom settings at `https://instance-domain.tld/settings`. + +### :red_circle: Antifeatures + +- **Non-free Network Services**: Promotes or depends entirely on a non-free network service. + +## Useful links + ++ Website: [nitter.net](https://nitter.net/) ++ Demonstration: [Demo](https://nitter.net/) ++ Application software repository: [github.com - YunoHost-Apps/nitter](https://github.com/YunoHost-Apps/nitter_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/nitter/issues](https://github.com/YunoHost-Apps/nitter_ynh/issues) diff --git a/pages/04.applications/10.docs/noalyss/app_noalyss.fr.md b/pages/04.applications/10.docs/noalyss/app_noalyss.fr.md new file mode 100644 index 00000000..d9f0effa --- /dev/null +++ b/pages/04.applications/10.docs/noalyss/app_noalyss.fr.md @@ -0,0 +1,20 @@ +--- +title: Noalyss +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_noalyss' +--- + +Logiciel de comptabilité open source développé en PHP. + +Toute les infos sur ce logiciel sont disponible sur le [site du projet](http://www.noalyss.eu). + +Pour apprendre à l'utiliser je vous invite à lire la [documentation utilisateur du projet](https://www.noalyss.eu/?page_id=1031). + +Le GitHub du module YunoHost est [ici](https://github.com/YunoHost-Apps/noalyss_ynh). + +Vous pouvez essayer le projet [ici](http://demo.noalyss.eu/index.php) avec les identifiants : demo / demo + +Les identifiants et mot de passe administrateur lors de la première connexion sont ceux définis à l'installation (également envoyés sur l'adresse email de l'administrateur sur votre domaine YNH). diff --git a/pages/04.applications/10.docs/noalyss/app_noalyss.md b/pages/04.applications/10.docs/noalyss/app_noalyss.md new file mode 100644 index 00000000..0b2a32bb --- /dev/null +++ b/pages/04.applications/10.docs/noalyss/app_noalyss.md @@ -0,0 +1,20 @@ +--- +title: Noalyss +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_noalyss' +--- + +Open source accounting software developed in PHP. + +All the information on this software is available on the [project website](http://www.noalyss.eu). + +To learn how to use it I invite you to read the [user documentation of the project](https://www.noalyss.eu/?page_id=1031). + +The GitHub of the YunoHost module is [here](https://github.com/YunoHost-Apps/noalyss_ynh_ynh). + +You can try the project [here](http://demo.noalyss.eu/index.php) with the identifiers: demo / demo + +The administrator IDs and passwords for the first login are those defined during the package installation (sent as a memo to the email address of this app's administrator at your YNH domain). diff --git a/pages/04.applications/10.docs/nocodb/app_nocodb.fr.md b/pages/04.applications/10.docs/nocodb/app_nocodb.fr.md new file mode 100644 index 00000000..3cc65d3a --- /dev/null +++ b/pages/04.applications/10.docs/nocodb/app_nocodb.fr.md @@ -0,0 +1,38 @@ +--- +title: NocoDB +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nocodb' +--- + +[![Installer NocoDB avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nocodb) [![Integration level](https://dash.yunohost.org/integration/nocodb.svg)](https://dash.yunohost.org/appci/app/nocodb) + +*NocoDB* est une plateforme NoCode open source qui transforme n'importe quelle base de données en un tableur intelligent, c'est une alternative à Airtable. + +* Connectez-vous à une base de données SQL nouvelle/existante et transformez-la en feuille de calcul. +* Créez une grille, une galerie, une vue kanban et une vue calendrier sur vos données. +* Recherchez, triez, filtrez les colonnes et les lignes avec une grande facilité. +* Invitez votre équipe avec un contrôle d'accès précis. +* Partage des vues publiquement et également avec une protection par mot de passe +* Fournit des API REST et GraphQL avec une interface graphique Swagger et GraphiQL. + +*(issu du site web de NocoDB)* + +### Captures d'écran + +![Capture d'écran de NocoDB](https://github.com/YunoHost-Apps/nocodb_ynh/blob/master/doc/screenshots/example.png) + +### Avertissements / informations importantes + +NocoDB possède son propre système d'authentification qui ne repose pas sur le SSO ou le serveur LDAP de YunoHost. + * Vous pouvez le rendre public, notamment si vous avez besoin de son API. + * Vous devrez créer le premier administrateur juste après l'installation. + +## Liens utiles + ++ Site web : [nocodb.com](https://www.nocodb.com/) ++ Démonstration : [Démo](https://www.nocodb.com/demos) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/nocodb](https://github.com/YunoHost-Apps/nocodb_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/nocodb/issues](https://github.com/YunoHost-Apps/nocodb_ynh/issues) diff --git a/pages/04.applications/10.docs/nocodb/app_nocodb.md b/pages/04.applications/10.docs/nocodb/app_nocodb.md new file mode 100644 index 00000000..ca735231 --- /dev/null +++ b/pages/04.applications/10.docs/nocodb/app_nocodb.md @@ -0,0 +1,38 @@ +--- +title: NocoDB +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nocodb' +--- + +[![Installer NocoDB with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nocodb) [![Integration level](https://dash.yunohost.org/integration/nocodb.svg)](https://dash.yunohost.org/appci/app/nocodb) + +*NocoDB* is an open source NoCode platform that turns any database into a smart spreadsheet, alternative to Airtable. + +* Connect to new/existing SQL database and turn them into spreadsheet. +* Create grid view, gallery view, kanban view and calendar view on top your data +* Search, sort, filter columns and rows with ultra ease +* Invite your team with fine grained Access Control +* Share views publicly and also with password protection +* Provides REST & GraphQL APIs with Swagger & GraphiQL GUI + +*(from NocoDB's website)* + +### Screenshots + +![Screenshot of NocoDB](https://github.com/YunoHost-Apps/nocodb_ynh/blob/master/doc/screenshots/example.png) + +### Disclaimers / important information + +NocoDB has its own authentication system which does not rely on YunoHost's SSO or LDAP server. + * You can make it public, especially if you need its API. + * You will need to create the first admin right after installation. + +## Useful links + ++ Website: [nocodb.com](https://www.nocodb.com/) ++ Demonstration: [Demo](https://www.nocodb.com/demos) ++ Application software repository: [github.com - YunoHost-Apps/nocodb](https://github.com/YunoHost-Apps/nocodb_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/nocodb/issues](https://github.com/YunoHost-Apps/nocodb_ynh/issues) diff --git a/pages/04.applications/10.docs/nodebb/app_nodebb.fr.md b/pages/04.applications/10.docs/nodebb/app_nodebb.fr.md new file mode 100644 index 00000000..7d6b0d82 --- /dev/null +++ b/pages/04.applications/10.docs/nodebb/app_nodebb.fr.md @@ -0,0 +1,24 @@ +--- +title: NodeBB +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nodebb' +--- + +[![Installer NodeBB avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nodebb) [![Integration level](https://dash.yunohost.org/integration/nodebb.svg)](https://dash.yunohost.org/appci/app/nodebb) + +*NodeBB* est construit à l'aide de la plateforme JavaScript Node.js côté serveur, offrant des performances inégalées. +Construire sur cette plateforme haute performance signifie une exécution rapide et fiable qui supportera même la plus grande et la plus active communauté. + +### Captures d'écran + +![Capture d'écran de NodeBB](https://github.com/YunoHost-Apps/nodebb_ynh/blob/master/doc/screenshots/screenshot.png) + +## Liens utiles + ++ Site web : [nodebb.org](https://nodebb.org/) ++ Démonstration : [Démo](https://try.nodebb.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/nodebb](https://github.com/YunoHost-Apps/nodebb_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/nodebb/issues](https://github.com/YunoHost-Apps/nodebb_ynh/issues) diff --git a/pages/04.applications/10.docs/nodebb/app_nodebb.md b/pages/04.applications/10.docs/nodebb/app_nodebb.md new file mode 100644 index 00000000..648c21a3 --- /dev/null +++ b/pages/04.applications/10.docs/nodebb/app_nodebb.md @@ -0,0 +1,26 @@ +--- +title: NodeBB +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nodebb' +--- + +[![Installer NodeBB with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nodebb) [![Integration level](https://dash.yunohost.org/integration/nodebb.svg)](https://dash.yunohost.org/appci/app/nodebb) + +*NodeBB* is built using the Node.js server-side JavaScript platform, delivering unmatched performance. +Building on this high performance platform means fast and dependable performance that will support even the biggest and most active community. + +### Screenshots + +![Screenshot of NodeBB](## Screenshots + +![Screenshot of NodeBB](./doc/screenshots/screenshot.png)) + +## Useful links + ++ Website: [nodebb.org](https://nodebb.org/) ++ Demonstration: [Demo](https://try.nodebb.org/) ++ Application software repository: [github.com - YunoHost-Apps/nodebb](https://github.com/YunoHost-Apps/nodebb_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/nodebb/issues](https://github.com/YunoHost-Apps/nodebb_ynh/issues) diff --git a/pages/04.applications/10.docs/nullboard/app_nullboard.fr.md b/pages/04.applications/10.docs/nullboard/app_nullboard.fr.md new file mode 100644 index 00000000..9a37cbea --- /dev/null +++ b/pages/04.applications/10.docs/nullboard/app_nullboard.fr.md @@ -0,0 +1,29 @@ +--- +title: Nullboard +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nullboard' +--- + +[![Installer Nullboard avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nullboard) [![Integration level](https://dash.yunohost.org/integration/nullboard.svg)](https://dash.yunohost.org/appci/app/nullboard) + +*Nullboard* est un Kanban minimaliste, axé sur la compacité et la lisibilité. + +### Captures d'écran + +![Capture d'écran de Nullboard](https://github.com/YunoHost-Apps/nullboard_ynh/blob/master/doc/screenshots/screenshot.png) + +### Avertissements / informations importantes + +### Limitations + +* :warning: Utilise localStorage pour stocker les tableaux/listes/notes, soyez prudent lorsque vous effacez votre cache. + +## Liens utiles + ++ Site web : [nullboard.io](https://nullboard.io/) ++ Démonstration : [Démo](https://nullboard.io/preview) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/nullboard](https://github.com/YunoHost-Apps/nullboard_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/nullboard/issues](https://github.com/YunoHost-Apps/nullboard_ynh/issues) diff --git a/pages/04.applications/10.docs/nullboard/app_nullboard.md b/pages/04.applications/10.docs/nullboard/app_nullboard.md new file mode 100644 index 00000000..5e9228de --- /dev/null +++ b/pages/04.applications/10.docs/nullboard/app_nullboard.md @@ -0,0 +1,30 @@ +--- +title: Nullboard +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nullboard' +--- + +[![Installer Nullboard with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nullboard) [![Integration level](https://dash.yunohost.org/integration/nullboard.svg)](https://dash.yunohost.org/appci/app/nullboard) + +*Nullboard* is a minimalist kanban board, focused on compactness and readability. + +### Screenshots + +![Screenshots of Nullboard](https://github.com/YunoHost-Apps/nullboard_ynh/blob/master/doc/screenshots/screenshot.png) + +### Disclaimers / important information + +### Limitations + +* :warning: Uses localStorage for storing boards/lists/notes, so be careful around clearing your cache. + + +## Useful links + ++ Website: [nullboard.io](https://nullboard.io/) ++ Demonstration: [Demo](https://nullboard.io/preview) ++ Application software repository: [github.com - YunoHost-Apps/nullboard](https://github.com/YunoHost-Apps/nullboard_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/nullboard/issues](https://github.com/YunoHost-Apps/nullboard_ynh/issues) diff --git a/pages/04.applications/10.docs/omeka-s/app_omeka-s.fr.md b/pages/04.applications/10.docs/omeka-s/app_omeka-s.fr.md new file mode 100644 index 00000000..1222d901 --- /dev/null +++ b/pages/04.applications/10.docs/omeka-s/app_omeka-s.fr.md @@ -0,0 +1,23 @@ +--- +title: Omeka S +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_omeka-s' +--- + +[![Installer Omeka S avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=omeka-s) [![Integration level](https://dash.yunohost.org/integration/omeka-s.svg)](https://dash.yunohost.org/appci/app/omeka-s) + +*Omeka S* est un système de publication web destiné aux universités, galeries, bibliothèques, archives et musées. Il s'agit d'un réseau local d'expositions organisées de manière indépendante et partageant un ensemble d'articles, de médias et de métadonnées construit en collaboration. + +### Captures d'écran + +![Capture d'écran de Omeka S](https://github.com/YunoHost-Apps/omeka-s_ynh/blob/master/doc/screenshots/omeka-s.png) + +## Liens utiles + ++ Site web : [omeka.org](https://omeka.org/s/) ++ Démonstration : [Démo](https://omeka.org/s/download/#sandbox) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/omeka-s](https://github.com/YunoHost-Apps/omeka-s_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/omeka-s/issues](https://github.com/YunoHost-Apps/omeka-s_ynh/issues) diff --git a/pages/04.applications/10.docs/omeka-s/app_omeka-s.md b/pages/04.applications/10.docs/omeka-s/app_omeka-s.md new file mode 100644 index 00000000..1d74db5e --- /dev/null +++ b/pages/04.applications/10.docs/omeka-s/app_omeka-s.md @@ -0,0 +1,23 @@ +--- +title: Omeka S +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_omeka-s' +--- + +[![Installer Omeka S with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=omeka-s) [![Integration level](https://dash.yunohost.org/integration/omeka-s.svg)](https://dash.yunohost.org/appci/app/omeka-s) + +*Omeka S* is a web publication system for universities, galleries, libraries, archives, and museums. It consists of a local network of independently curated exhibits sharing a collaboratively built pool of items, media, and their metadata. + +### Screenshots + +![Screenshot of Omeka S](https://github.com/YunoHost-Apps/omeka-s_ynh/blob/master/doc/screenshots/omeka-s.png) + +## Useful links + ++ Website: [omeka.org](https://omeka.org/s/) ++ Demonstration: [Demo](https://omeka.org/s/download/#sandbox) ++ Application software repository: [github.com - YunoHost-Apps/omeka-s](https://github.com/YunoHost-Apps/omeka-s_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/omeka-s/issues](https://github.com/YunoHost-Apps/omeka-s_ynh/issues) diff --git a/pages/04.applications/10.docs/onlyoffice/app_onlyoffice.fr.md b/pages/04.applications/10.docs/onlyoffice/app_onlyoffice.fr.md new file mode 100644 index 00000000..0658c934 --- /dev/null +++ b/pages/04.applications/10.docs/onlyoffice/app_onlyoffice.fr.md @@ -0,0 +1,31 @@ +--- +title: OnlyOffice Server +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_onlyoffice' +--- + +![logo de OnlyOffice](image://OnlyOffice_logo.png?height=80) + +[![Installer OnlyOffice avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=onlyoffice) [![Integration level](https://dash.yunohost.org/integration/onlyoffice.svg)](https://dash.yunohost.org/appci/app/onlyoffice) + +OnlyOffice Server est une suite bureautique collaborative en ligne gratuite comprenant des visualiseurs et des éditeurs de texte, de feuilles de calcul et de présentations, entièrement compatible avec les formats Office Open XML : .docx, .xlsx, .pptx et permettant l'édition collaborative en temps réel. + +## Configurer OnlyOffice Server avec Nextcloud + +1. Installer [OnlyOffice Server](https://github.com/YunoHost-Apps/onlyoffice_ynh) dans un domaine différent de celui utilisé par Nextcloud : `https://onlyoffice.domain.org` et `https://domain.org/nextcloud` (par exemple) + +2. Installer [ONLYOFFICE connector](https://apps.nextcloud.com/apps/onlyoffice) dans Nextcloud +- Connectez-vous à Nextcloud en tant qu'administrateur et installer ONLYOFFICE Connector : -> Applications -> installez ONLYOFFICE. (Le numéro de version d'ONLYOFFICE Connector n'a pas besoin d'être le même que celui d'OnlyOffice Server). +- Dans Paramètres (`https://domain.org/nextcloud/settings/admin/onlyoffice`), entrez l'adresse de votre serveur OnlyOffice Server (par exemple : `https://onlyoffice.domain.org`) + +OnlyOffice Server est maintenant connecté à Nextcloud. + +## Liens utiles + ++ Site web : [www.onlyoffice.com](https://www.onlyoffice.com/) ++ ONLYOFFICE connector : [Nextcloud ONLYOFFICE Connector](https://apps.nextcloud.com/apps/onlyoffice) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/onlyoffice_ynh](https://github.com/YunoHost-Apps/onlyoffice_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/onlyoffice/issues](https://github.com/YunoHost-Apps/onlyoffice_ynh/issues) diff --git a/pages/04.applications/10.docs/onlyoffice/app_onlyoffice.md b/pages/04.applications/10.docs/onlyoffice/app_onlyoffice.md new file mode 100644 index 00000000..f99f5d70 --- /dev/null +++ b/pages/04.applications/10.docs/onlyoffice/app_onlyoffice.md @@ -0,0 +1,31 @@ +--- +title: OnlyOffice Server +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_onlyoffice' +--- + +![OnlyOffice's Logo](image://OnlyOffice_logo.png?height=80) + +[![Install OnlyOffice with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=onlyoffice) [![Integration level](https://dash.yunohost.org/integration/onlyoffice.svg)](https://dash.yunohost.org/appci/app/onlyoffice) + +ONLYOFFICE Server is a free collaborative online office suite comprising viewers and editors for texts, spreadsheets and presentations, fully compatible with Office Open XML formats: .docx, .xlsx, .pptx and enabling collaborative editing in real time. + +## Connect OnlyOffice Server with Nextcloud + +1. Install [OnlyOffice Server](https://github.com/YunoHost-Apps/onlyoffice_ynh) in a different domain than the one used by Nextcloud: `https://onlyoffice.domain.org` and `https://domain.org/nextcloud` (for example) + +2. Install [ONLYOFFICE connector](https://apps.nextcloud.com/apps/onlyoffice) in Nextcloud +- Connect to Nextcloud as admin and install ONLYOFFICE Connector: -> Applications -> install ONLYOFFICE. (ONLYOFFICE Connector doesn't need to match your OnlyOffice Server version number). +- In Settings (`https://domain.org/nextcloud/settings/admin/onlyoffice`), enter your OnlyOffice Server address (for example: `https://onlyoffice.domain.org`) + +OnlyOffice Server is now connected to Nextcloud. + +## Useful links + ++ Website: [www.onlyoffice.com](https://www.onlyoffice.com/) ++ ONLYOFFICE connector: [Nextcloud ONLYOFFICE Connector](https://apps.nextcloud.com/apps/onlyoffice) ++ Application software repository: [github.com - YunoHost-Apps/onlyoffice_ynh](https://github.com/YunoHost-Apps/onlyoffice_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/onlyoffice/issues](https://github.com/YunoHost-Apps/onlyoffice_ynh/issues) diff --git a/pages/04.applications/10.docs/opennote/app_opennote.fr.md b/pages/04.applications/10.docs/opennote/app_opennote.fr.md new file mode 100644 index 00000000..36bd79a4 --- /dev/null +++ b/pages/04.applications/10.docs/opennote/app_opennote.fr.md @@ -0,0 +1,27 @@ +--- +title: OpenNote +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_opennote' +--- + +[![Installer OpenNote avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=opennote) [![Integration level](https://dash.yunohost.org/integration/opennote.svg)](https://dash.yunohost.org/appci/app/opennote) + +*OpenNote* est un éditeur web de texte/logiciel de prise de notes. + +### Captures d'écran + +![Capture d'écran de OpenNote](https://github.com/YunoHost-Apps/opennote_ynh/blob/master/doc/screenshots/screenshot.png) + +### Avertissements / informations importantes + +Cette application fonctionne avec le stockage local du navigateur, les utilisateurs ne retrouveront pas les notes s'ils changent de navigateur. + +## Liens utiles + ++ Site web : [foxusa.github.io/OpenNote/OpenNote/](https://foxusa.github.io/OpenNote/OpenNote/#/folder) ++ Démonstration : [Démo](https://foxusa.github.io/OpenNote/OpenNote/#/folder) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/opennote](https://github.com/YunoHost-Apps/opennote_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/opennote/issues](https://github.com/YunoHost-Apps/opennote_ynh/issues) diff --git a/pages/04.applications/10.docs/opennote/app_opennote.md b/pages/04.applications/10.docs/opennote/app_opennote.md new file mode 100644 index 00000000..97dec168 --- /dev/null +++ b/pages/04.applications/10.docs/opennote/app_opennote.md @@ -0,0 +1,27 @@ +--- +title: OpenNote +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_opennote' +--- + +[![Installer OpenNote with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=opennote) [![Integration level](https://dash.yunohost.org/integration/opennote.svg)](https://dash.yunohost.org/appci/app/opennote) + +*OpenNote* is a web based text editor/note taking software. + +### Screenshots + +![Screenshot of OpenNote](https://github.com/YunoHost-Apps/opennote_ynh/blob/master/doc/screenshots/screenshot.png) + +### Disclaimers / important information + +This app works with the browser's local storage, so users won't find the notes if they switch their browser. + +## Useful links + ++ Website: [foxusa.github.io/OpenNote/OpenNote/](https://foxusa.github.io/OpenNote/OpenNote/#/folder) ++ Demonstration: [Demo](https://foxusa.github.io/OpenNote/OpenNote/#/folder) ++ Application software repository: [github.com - YunoHost-Apps/opennote](https://github.com/YunoHost-Apps/opennote_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/opennote/issues](https://github.com/YunoHost-Apps/opennote_ynh/issues) diff --git a/pages/04.applications/10.docs/opensondage/app_opensondage.fr.md b/pages/04.applications/10.docs/opensondage/app_opensondage.fr.md new file mode 100644 index 00000000..d1a75074 --- /dev/null +++ b/pages/04.applications/10.docs/opensondage/app_opensondage.fr.md @@ -0,0 +1,28 @@ +--- +title: Opensondage +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_opensondage' +--- + +![logo de opensondage](image://opensondage_logo.png?height=80) + +[![Install Opensondage with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=opensondage) [![Integration level](https://dash.yunohost.org/integration/opensondage.svg)](https://dash.yunohost.org/appci/app/opensondage) + +Opensondage-Framadate est un service en ligne permettant de planifier un rendez-vous ou prendre des décisions rapidement et simplement. Aucune inscription préalable n’est nécessaire. +Voici comment ça fonctionne : + +1. Créez un sondage +2. Déterminez les dates ou les sujets à choisir +3. Envoyez le lien du sondage à vos amis ou collègues +4. Discutez et prenez votre décision + +## Liens utiles + ++ Site web : [framadate.org](https://framadate.org) ++ Documentation officielle : [docs.framasoft.org/fr/framadate](https://docs.framasoft.org/fr/framadate) ++ Démonstration: [Démo](https://framadate.org) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/opensondage](https://github.com/YunoHost-Apps/opensondage_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/opensondage/issues](https://github.com/YunoHost-Apps/opensondage_ynh/issues) diff --git a/pages/04.applications/10.docs/opensondage/app_opensondage.md b/pages/04.applications/10.docs/opensondage/app_opensondage.md new file mode 100644 index 00000000..210c45b3 --- /dev/null +++ b/pages/04.applications/10.docs/opensondage/app_opensondage.md @@ -0,0 +1,28 @@ +--- +title: Opensondage +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_opensondage' +--- + +![opensondage's logo](image://opensondage_logo.png?height=80) + +[![Install Opensondage with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=opensondage) [![Integration level](https://dash.yunohost.org/integration/opensondage.svg)](https://dash.yunohost.org/appci/app/opensondage) + +Opensondage-Framadate is an online service for planning an appointment or making a decision quickly and easily. No registration is required. It's a community free/libre software alternative to Doodle. +Here is how it works: + +1. Create a poll +2. Define dates or subjects to choose from +3. Send the poll link to your friends or colleagues +4. Discuss and make a decision + +## Useful links + ++ Website: [framadate.org](https://framadate.org) ++ Official documentation: [docs.framasoft.org/fr/framadate](https://docs.framasoft.org/en/framadate) ++ Demonstration: [Demo](https://framadate.org) ++ Application software repository: [github.com - YunoHost-Apps/opensondage](https://github.com/YunoHost-Apps/opensondage_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/opensondage/issues](https://github.com/YunoHost-Apps/opensondage_ynh/issues) diff --git a/pages/04.applications/10.docs/opentracker/app_opentracker.fr.md b/pages/04.applications/10.docs/opentracker/app_opentracker.fr.md new file mode 100644 index 00000000..d29b7e52 --- /dev/null +++ b/pages/04.applications/10.docs/opentracker/app_opentracker.fr.md @@ -0,0 +1,29 @@ +--- +title: OpenTracker +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_opentracker' +--- + +[![Installer OpenTracker avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=opentracker) [![Integration level](https://dash.yunohost.org/integration/opentracker.svg)](https://dash.yunohost.org/appci/app/opentracker) + +*OpenTracker* est un tracker Bittorrent. + +### Avertissements / informations importantes + +### Configuration + +`udp://serverIP:6969` + +Par défaut, le tracker s'exécutera sur le port 6969 à la fois sur UDP et TCP. + +Visitez `http://serverIP:6969/stats` pour afficher les statistiques du tracker. + +## Liens utiles + ++ Site web : [erdgeist.org/arts/software/opentracker/](https://erdgeist.org/arts/software/opentracker/) ++ Démonstration : [Démo](https://dispatch.khlieng.com/connect) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/opentracker](https://github.com/YunoHost-Apps/opentracker_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/opentracker/issues](https://github.com/YunoHost-Apps/opentracker_ynh/issues) diff --git a/pages/04.applications/10.docs/opentracker/app_opentracker.md b/pages/04.applications/10.docs/opentracker/app_opentracker.md new file mode 100644 index 00000000..58ce0db9 --- /dev/null +++ b/pages/04.applications/10.docs/opentracker/app_opentracker.md @@ -0,0 +1,29 @@ +--- +title: OpenTracker +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_opentracker' +--- + +[![Installer OpenTracker with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=opentracker) [![Integration level](https://dash.yunohost.org/integration/opentracker.svg)](https://dash.yunohost.org/appci/app/opentracker) + +*OpenTracker* is a Bittorrent tracker. + +### Disclaimers / important information + +### Configuration + +`udp://serverIP:6969` + +By default the tracker will run on 6969 port on both UDP and TCP. + +Visit `http://serverIP:6969/stats` to view the tracker stats. + +## Useful links + ++ Website: [erdgeist.org/arts/software/opentracker/](https://erdgeist.org/arts/software/opentracker/) ++ Demonstration: [Demo](https://dispatch.khlieng.com/connect) ++ Application software repository: [github.com - YunoHost-Apps/opentracker](https://github.com/YunoHost-Apps/opentracker_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/opentracker/issues](https://github.com/YunoHost-Apps/opentracker_ynh/issues) diff --git a/pages/04.applications/10.docs/osada/app_osada.fr.md b/pages/04.applications/10.docs/osada/app_osada.fr.md new file mode 100644 index 00000000..07f32cab --- /dev/null +++ b/pages/04.applications/10.docs/osada/app_osada.fr.md @@ -0,0 +1,43 @@ +--- +title: Osada +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_osada' +--- + +[![Installer Osada avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=osada) [![Integration level](https://dash.yunohost.org/integration/osada.svg)](https://dash.yunohost.org/appci/app/osada) + +*Osada* utilise le protocole **Zot6** qui est la prochaine version du protocole **zot5**. Osada a un support natif pour le **protocole ActivityPub** (norme W3C) ainsi que pour les fonctionnalités plus avancées. Il peut inter-opérer avec d'autres applications et projets de réseaux sociaux dans l'un ou l'autre de ces espaces, notamment **Mastodon, Pleroma, Pixelfed, PeerTube, Funkwhale, Zap, Friendica, Hubzilla,** et bien d'autres. + +### Captures d'écran + +![Capture d'écran de Osada](https://github.com/YunoHost-Apps/osada_ynh/blob/master/doc/screenshots/comment_on_posts.gif) + +### Avertissements / informations importantes + +### Cette application présente les caractéristiques suivantes : +- [X] intégration LDAP +- [X] Multi-instance +- [X] Ajout du fichier php.log dans le dossier root pour le débogage de PHP, avec logrotate intégré à celui-ci (accessible par **admin->logs** et en entrant le fichier **php.log**) +- [X] Fail2Ban +- [X] Option pour choisir entre **Mysql** et **PostgreSQL** pour Osada + +### Droits d'utilisateur de l'administrateur Ldap, journaux et échecs de mise à jour de la base de données : + +- **Pour les droits d'administrateur** : Une fois l'installation terminée, vous devrez vous rendre sur la page de votre nouveau hub et vous connecter avec le **nom d'utilisateur du compte admin** qui a été saisi au moment de l'installation. Vous devriez alors être en mesure de créer votre premier canal et avoir les **droits d'administrateur** pour le hub. + +- **Pour les utilisateurs standards de YunoHost** : Les utilisateurs standards ils peuvent se connecter via l'authentification LDAP et créer leurs canaux. + +- **Non obtention des droits d'administrateur** : Si l'administrateur ne peut pas accéder aux paramètres d'administration à l'adresse `https://osada.example.com/admin`, vous devez **ajouter manuellement 4096** aux **account_roles** sous **comptes** pour cet utilisateur dans la **base de données via phpMyAdmin**. + +- **Pour les journaux** : Allez dans **admin->logs** et entrez le nom du fichier **php.log**. + +- La mise à jour de la base de données échoue parfois après la mise à niveau de la version. Vous pouvez aller sur le hub, par exemple `https://osada.example.com/admin/dbsync/`, et vérifier le nombre de mises à jour qui ont échoué. Ces mises à jour devront être exécutées manuellement par **phpMyAdmin**. + +## Liens utiles + ++ Site web : [codeberg.org/zot/osada](https://codeberg.org/zot/osada) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/osada](https://github.com/YunoHost-Apps/osada_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/osada/issues](https://github.com/YunoHost-Apps/osada_ynh/issues) diff --git a/pages/04.applications/10.docs/osada/app_osada.md b/pages/04.applications/10.docs/osada/app_osada.md new file mode 100644 index 00000000..7beb899c --- /dev/null +++ b/pages/04.applications/10.docs/osada/app_osada.md @@ -0,0 +1,43 @@ +--- +title: Osada +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_osada' +--- + +[![Installer Osada with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=osada) [![Integration level](https://dash.yunohost.org/integration/osada.svg)](https://dash.yunohost.org/appci/app/osada) + +*Osada* uses **Zot6 protocol** which is next version of **zot5 protocol**. Osada has native support for the **ActivityPub protocol** (W3C standard) as well as the more advanced features. It can inter-operate with other social networking applications and projects in either of these spaces, including **Mastodon, Pleroma, Pixelfed, PeerTube, Funkwhale, Zap, Friendica, Hubzilla,** and many more. + +### Screenshots + +![Screenshot of Osada](https://github.com/YunoHost-Apps/osada_ynh/blob/master/doc/screenshots/comment_on_posts.gif) + +### Disclaimers / important information + +### This app claims following features: +- [X] LDAP integration +- [X] Multi-instance +- [X] Adeed php.log in the root folder for debugging PHP, with logrotate applied on it (can be accesssed by **admin->logs** and entering the **php.log**). +- [X] Fail2Ban +- [X] Option to choose between **Mysql** and **PostgreSQL** for the Osada + +### Ldap Admin user rights, logs and failed database updates + +- **For admin rights**: When installation is complete, you will need to visit your new hub's page and login with the **admin account username** which was entered at the time of installation process. You should then be able to create your first channel and have the **admin rights** for the hub. + +- **For normal YunoHost users**: Normal LDAP users can login through LDAP authentication and create there channels. + +- **Failing to get admin rights**: If the admin cannot access the admin settings at `https://osada.example.com/admin` then you have to **manually add 4096** to the **account_roles** under **accounts** for that user in the **database through phpMyAdmin**. + +- **For logs**: Go to **admin->logs** and enter the file name **php.log**. + +- **Failed Database after Upgrade:** Some times databse upgrade fails after version upgrade. You can go to hub eg. `https://osada.example.com/admin/dbsync/` and check the numbers of failled update. These updates will have to be ran manually by **phpMyAdmin**. + +## Useful links + ++ Website: [codeberg.org/zot/osada](https://codeberg.org/zot/osada) ++ Application software repository: [github.com - YunoHost-Apps/osada](https://github.com/YunoHost-Apps/osada_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/osada/issues](https://github.com/YunoHost-Apps/osada_ynh/issues) diff --git a/pages/04.applications/10.docs/osticket/app_osticket.fr.md b/pages/04.applications/10.docs/osticket/app_osticket.fr.md new file mode 100644 index 00000000..be5025e4 --- /dev/null +++ b/pages/04.applications/10.docs/osticket/app_osticket.fr.md @@ -0,0 +1,24 @@ +--- +title: osTicket +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_osticket' +--- + +![logo de osticket](image://osticket_logo.svg?resize=,80) + +[![Install osTicket with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=osticket) [![Integration level](https://dash.yunohost.org/integration/osticket.svg)](https://dash.yunohost.org/appci/app/osticket) + +osTicket est un système de tickets d'assistance open source largement utilisé. Il intègre de manière transparente les demandes créées par courrier électronique et les formulaires en ligne dans une interface web multi-utilisateurs simple et facile à utiliser. Gérez, organisez et archivez facilement toutes vos demandes d'assistance et vos réponses en un seul endroit tout en offrant à vos clients la responsabilité et la réactivité qu'ils méritent. + +osTicket est une alternative attrayante aux systèmes de support client plus coûteux et complexes ; simple, léger, fiable, open source, et facile à installer et à utiliser. Le meilleur, c'est qu'il est entièrement gratuit. + +## Liens utiles + ++ Site web : [osticket.com](https://osticket.com/) ++ Documentation officielle : [docs.osticket.com](https://docs.osticket.com/) ++ Démonstration : [Démo](http://www.ostickethacks.com/demo/demo_info.php) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/osticket](https://github.com/YunoHost-Apps/osticket_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/osticket/issues](https://github.com/YunoHost-Apps/osticket_ynh/issues) diff --git a/pages/04.applications/10.docs/osticket/app_osticket.md b/pages/04.applications/10.docs/osticket/app_osticket.md new file mode 100644 index 00000000..7ca6f680 --- /dev/null +++ b/pages/04.applications/10.docs/osticket/app_osticket.md @@ -0,0 +1,24 @@ +--- +title: osTicket +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_osticket' +--- + +![osticket's logo](image://osticket_logo.svg?resize=,80) + +[![Install osTicket with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=osticket) [![Integration level](https://dash.yunohost.org/integration/osticket.svg)](https://dash.yunohost.org/appci/app/osticket) + +osTicket is a widely-used open source support ticket system. It seamlessly integrates inquiries created via email and web-based forms into a simple easy to use multi-user web interface. Easily manage, organize and archive all your support requests and responses in one place while providing your clients with accountability and responsiveness they deserve. + +osTicket is an attractive alternative to higher-cost and complex customer support systems; simple, lightweight, reliable, open source, and easy to setup and use. The best part is, it's completely free. + +## Useful links + ++ Website : [osticket.com](https://osticket.com/) ++ Official documentation : [docs.osticket.com](https://docs.osticket.com/) ++ Demonstration : [Demo](http://www.ostickethacks.com/demo/demo_info.php) ++ Application software repository : [github.com - YunoHost-Apps/osticket](https://github.com/YunoHost-Apps/osticket_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/osticket/issues](https://github.com/YunoHost-Apps/osticket_ynh/issues) diff --git a/pages/04.applications/10.docs/owncast/app_owncast.fr.md b/pages/04.applications/10.docs/owncast/app_owncast.fr.md new file mode 100644 index 00000000..7b257798 --- /dev/null +++ b/pages/04.applications/10.docs/owncast/app_owncast.fr.md @@ -0,0 +1,40 @@ +--- +title: Owncast +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_owncast' +--- + +[![Installer Owncast avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=owncast) [![Integration level](https://dash.yunohost.org/integration/owncast.svg)](https://dash.yunohost.org/appci/app/owncast) + +*Owncast* est un serveur de diffusion en direct et de chat open source, auto-hébergé, décentralisé et à utilisateur unique pour exécuter vos propres diffusions en direct dans un style similaire aux grandes options grand public. Il offre une propriété complète sur votre contenu, votre interface, votre modération et votre audience. + +### Captures d'écran + +![Capture d'écran de Owncast](https://github.com/YunoHost-Apps/owncast_ynh/blob/master/doc/screenshots/owncast-screenshot.png) + +### Avertissements / informations importantes + +### Configuration + +Vous pouvez configurer Owncast dans la page d'administration : `domain.ltd/admin` avec `admin` et `abc123` comme identifiant. N'oubliez pas de changer la clé de flux (Stream Key). + +### Application de diffusion en continu + +OBS peut être utilisé comme application de streaming vidéo : https://obsproject.com/ + +1. Installez **OBS** ou **Streamlabs OBS** et faites-le fonctionner avec votre configuration locale. +1. Ouvrez les **paramètres** OBS et allez dans **Stream**. +1. Sélectionnez **Personnalisé…** comme service. +1. Entrez l'URL du serveur exécutant votre service de streaming au format `rtmp://myserver.net/live`. +1. Saisissez votre « Stream key » qui correspond à votre clé de streaming choisie lors de l'installation. +1. Appuyez sur **Démarrer le streaming** (OBS) ou **Go Live** (Streamlabs) sur OBS. + +## Liens utiles + ++ Site web : [owncast.online](https://owncast.online/) ++ Démonstration : [Démo](https://watch.owncast.online/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/owncast](https://github.com/YunoHost-Apps/owncast_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/owncast/issues](https://github.com/YunoHost-Apps/owncast_ynh/issues) diff --git a/pages/04.applications/10.docs/owncast/app_owncast.md b/pages/04.applications/10.docs/owncast/app_owncast.md new file mode 100644 index 00000000..281bd51f --- /dev/null +++ b/pages/04.applications/10.docs/owncast/app_owncast.md @@ -0,0 +1,44 @@ +--- +title: Owncast +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_owncast' +--- + +[![Installer Owncast with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=owncast) [![Integration level](https://dash.yunohost.org/integration/owncast.svg)](https://dash.yunohost.org/appci/app/owncast) + +*Owncast* is an open source, self-hosted, decentralized, single user live streaming and chat server for running your own live streams similar in style to the large mainstream options. It offers complete ownership over your content, interface, moderation and audience. + +### Screenshots + +![Screenshot of Owncast](https://github.com/YunoHost-Apps/owncast_ynh/blob/master/doc/screenshots/owncast-screenshot.png) + +### Disclaimers / important information + +### Configuration + +You can configure Owncast in the admin page: `domain.ltd/admin` with `admin` and `abc123` as credential. Don't forget to change the stream key. + +### Streaming app + +OBS can be used as streaming video app: https://obsproject.com/ + +1. Install OBS or Streamlabs OBS and get it working with your local setup. +1. Open OBS Settings and go to **Stream**. +1. Select **Custom…** as the service. +1. Enter the URL of the server running your streaming service in the format of `rtmp://myserver.net/live`. +1. Enter your **Stream Key** that matches your key file. +1. Press **Start Streaming** (OBS) or **Go Live** (Streamlabs) on OBS. + +### Standalone chat mode + +`https://live.domain.ltd/index-standalone-chat-readwrite.html` + +## Useful links + ++ Website: [owncast.online](https://owncast.online/) ++ Demonstration: [Demo](https://watch.owncast.online/) ++ Application software repository: [github.com - YunoHost-Apps/owncast](https://github.com/YunoHost-Apps/owncast_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/owncast/issues](https://github.com/YunoHost-Apps/owncast_ynh/issues) diff --git a/pages/04.applications/10.docs/owntracks/app_owntracks.fr.md b/pages/04.applications/10.docs/owntracks/app_owntracks.fr.md new file mode 100644 index 00000000..6a96adf5 --- /dev/null +++ b/pages/04.applications/10.docs/owntracks/app_owntracks.fr.md @@ -0,0 +1,44 @@ +--- +title: OwnTracks +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_owntracks' +--- + +[![Installer OwnTracks avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=owntracks) [![Integration level](https://dash.yunohost.org/integration/owntracks.svg)](https://dash.yunohost.org/appci/app/owntracks) + +*OwnTracks* permet de gérez votre historique de géolocalisation. + +### Captures d'écran + +![Captures d'écran de OwnTracks](https://github.com/YunoHost-Apps/owntracks_ynh/blob/master/doc/screenshots/screenshot.png) + +### Avertissements / informations importantes + +### Caractéristiques + +- [Fonctionnalités d'OwnTracks pour une API HTTP](http://owntracks.org/booklet/tech/http/), limité aux [fonctionnalités implémentées par l'enregistreur PHP](https://github.com/tomyvi/php-owntracks-recorder#features). Notamment, pas de fonction Amis. L'[enregistreur PHP en amont a été modifié](https://github.com/tituspijean/php-owntracks-recorder) pour supprimer une dépendance PHP encombrante. +- Multi-utilisateur : chaque utilisateur YunoHost peut se connecter via l'authentification HTTP de base, et n'a accès qu'à ses données. + +### Installation + +- Installez l'application sur votre serveur YunoHost +- Installez l'application mobile sur votre appareil, consultez le [site Web d'OwnTracks](http://owntracks.org) +- Configurez votre application mobile : + - Autorisez-le à accéder à votre emplacement + - Préférence > Connexion + - Mode : `http privé` + - Hébergeur : `https://DOMAIN/PATH/record.php` + - Identification + - Authentification: `enabled` + - Nom d'utilisateur/mot de passe : vos identifiants YNH + - ID de l'appareil : comme vous le souhaitez + - Reportez-vous à la [documentation d'OwnTracks](http://owntracks.org/booklet) pour les autres paramètres + +## Liens utiles + ++ Site web : [owntracks.org](https://owntracks.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/owntracks](https://github.com/YunoHost-Apps/owntracks_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/owntracks/issues](https://github.com/YunoHost-Apps/owntracks_ynh/issues) diff --git a/pages/04.applications/10.docs/owntracks/app_owntracks.md b/pages/04.applications/10.docs/owntracks/app_owntracks.md new file mode 100644 index 00000000..b9b51d4e --- /dev/null +++ b/pages/04.applications/10.docs/owntracks/app_owntracks.md @@ -0,0 +1,44 @@ +--- +title: OwnTracks +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_owntracks' +--- + +[![Installer OwnTracks with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=owntracks) [![Integration level](https://dash.yunohost.org/integration/owntracks.svg)](https://dash.yunohost.org/appci/app/owntracks) + +*OwnTracks* allow to keep track of your location history. + +### Screenshots + +![Screenshots](https://github.com/YunoHost-Apps/owntracks_ynh/blob/master/doc/screenshots/screenshot.png) + +### Disclaimers / important information + +### Features + +- [OwnTracks features for a HTTP API](http://owntracks.org/booklet/tech/http/), limited to the [features implemented by the PHP recorder](https://github.com/tomyvi/php-owntracks-recorder#features). Notably, no Friends feature. The [upstream PHP recorder has been tweaked](https://github.com/tituspijean/php-owntracks-recorder) to remove a cumbersome PHP dependency. +- Multi-user: each YunoHost user can connect though basic HTTP authentication, and has only access to their data. + +### Installation + +- Install the app on your YunoHost server +- Install the mobile app on your device, see [OwnTracks website](http://owntracks.org) +- Configure your mobile app: + - Allow it to access your location + - Preference > Connection + - Mode: `Private http` + - Host: `https://DOMAIN/PATH/record.php` + - Identification + - Authentication: `enabled` + - Username/password: your YNH credentials + - Device ID: as you wish + - Refer to the [OwnTracks documentation](http://owntracks.org/booklet) for the other settings + +## Useful links + ++ Website: [owntracks.eu (en)](https://owntracks.eu/site/) ++ Application software repository: [github.com - YunoHost-Apps/owntracks](https://github.com/YunoHost-Apps/owntracks_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/owntracks/issues](https://github.com/YunoHost-Apps/owntracks_ynh/issues) diff --git a/pages/04.applications/10.docs/peertube-search-index/app_peertube-search-index.fr.md b/pages/04.applications/10.docs/peertube-search-index/app_peertube-search-index.fr.md new file mode 100644 index 00000000..acad2d6f --- /dev/null +++ b/pages/04.applications/10.docs/peertube-search-index/app_peertube-search-index.fr.md @@ -0,0 +1,33 @@ +--- +title: PeerTube search-index +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_peertube-search-index' +--- + +[![Installer PeerTube search-index avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=peertube-search-index) [![Integration level](https://dash.yunohost.org/integration/peertube-search-index.svg)](https://dash.yunohost.org/appci/app/peertube-search-index) + +*PeerTube search-index* est un moteur de recherche pour les vidéos et les chaînes [PeerTube](https://joinpeertube.org/), développé par Framasoft. + +### Captures d'écran + +![Captures d'écran de PeerTube search-index](https://github.com/YunoHost-Apps/peertube-search-index_ynh/blob/master/doc/screenshots/sepia-search-screenshot.png) + +### Avertissements / informations importantes + +### Important points to read before installing + +1. **PeerTube search-index** nécessite un **domaine principal** dédié, par exemple search.domain.tld + +### Configuration + +Pour configurer cette application : éditer le fichier `/var/www/peertube-search-index/config/production.yaml` via SSH. + +## Liens utiles + ++ Site web : [search.joinpeertube.org](https://search.joinpeertube.org/) ++ Démonstration : [Démo](https://search.joinpeertube.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/peertube-search-index](https://github.com/YunoHost-Apps/peertube-search-index_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/peertube-search-index/issues](https://github.com/YunoHost-Apps/peertube-search-index_ynh/issues) diff --git a/pages/04.applications/10.docs/peertube-search-index/app_peertube-search-index.md b/pages/04.applications/10.docs/peertube-search-index/app_peertube-search-index.md new file mode 100644 index 00000000..95349fcd --- /dev/null +++ b/pages/04.applications/10.docs/peertube-search-index/app_peertube-search-index.md @@ -0,0 +1,33 @@ +--- +title: PeerTube search-index +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_peertube-search-index' +--- + +[![Installer PeerTube search-index with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=peertube-search-index) [![Integration level](https://dash.yunohost.org/integration/peertube-search-index.svg)](https://dash.yunohost.org/appci/app/peertube-search-index) + +*PeerTube search-index* is a search engine for [PeerTube](https://joinpeertube.org/) videos and channels, developed by Framasoft. + +### Screenshots + +![Screenshots of PeerTube search-index](https://github.com/YunoHost-Apps/peertube-search-index_ynh/blob/master/doc/screenshots/sepia-search-screenshot.png) + +### Disclaimers / important information + +### Important points to read before installing + +1. **PeerTube search-index** requires a dedicated **root domain**, e.g. search.domain.tld + +### Configuration + +To configure this app: modify the file `/var/www/peertube-search-index/config/production.yaml` with SSH. + +## Useful links + ++ Website: [search.joinpeertube.org](https://search.joinpeertube.org/) ++ Demonstration: [Demo](https://search.joinpeertube.org/) ++ Application software repository: [github.com - YunoHost-Apps/peertube-search-index](https://github.com/YunoHost-Apps/peertube-search-index_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/peertube-search-index/issues](https://github.com/YunoHost-Apps/peertube-search-index_ynh/issues) diff --git a/pages/04.applications/10.docs/peertube/app_peertube.fr.md b/pages/04.applications/10.docs/peertube/app_peertube.fr.md new file mode 100644 index 00000000..d4e11b4f --- /dev/null +++ b/pages/04.applications/10.docs/peertube/app_peertube.fr.md @@ -0,0 +1,22 @@ +--- +title: PeerTube +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_peertube' +--- + +![logo de peertube](image://peertube_logo.svg?resize=,80) + +[![Install PeerTube with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=peertube) [![Integration level](https://dash.yunohost.org/integration/peertube.svg)](https://dash.yunohost.org/appci/app/peertube) + +PeerTube est un projet de logiciel d'hébergement vidéo. Il vous permet de regarder et de partager des vidéos avec d'autres personnes en utilisant votre propre serveur, qu'il s'agisse d'un simple PC à la maison ou dans un Datacenter. Vous n'avez pas besoin d'héberger des milliers de vidéos pour rendre votre instance intéressante pour une utilisation quotidienne. De manière fédérée, il dialoguera avec d'autres serveurs de votre choix pour agréger les références à leurs vidéos sans vraiment les héberger localement. + + +## Liens utiles + ++ Site web : [joinpeertube.org](https://joinpeertube.org) ++ Documentation officielle : [docs.joinpeertube.org](https://docs.joinpeertube.org) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/peertube](https://github.com/YunoHost-Apps/peertube_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/peertube/issues](https://github.com/YunoHost-Apps/peertube_ynh/issues) diff --git a/pages/04.applications/10.docs/peertube/app_peertube.md b/pages/04.applications/10.docs/peertube/app_peertube.md new file mode 100644 index 00000000..f10cc8fd --- /dev/null +++ b/pages/04.applications/10.docs/peertube/app_peertube.md @@ -0,0 +1,22 @@ +--- +title: PeerTube +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_peertube' +--- + +![peertube's logo](image://peertube_logo.svg?resize=,80) + +[![Install PeerTube with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=peertube) [![Integration level](https://dash.yunohost.org/integration/peertube.svg)](https://dash.yunohost.org/appci/app/peertube) + +PeerTube is a video hosting software project. It allows you to watch and share videos with others using your own server, be it a simple computer at home or in a datacenter. You don't need to host thousands of videos to make your instance interesting for daily use. In a federated fashion, it will talk with other servers of your choice to aggregate references to their videos without really hosting them locally. + + +## Useful links + ++ Website: [joinpeertube.org](https://joinpeertube.org) ++ Official documentation: [docs.joinpeertube.org](https://docs.joinpeertube.org) ++ Application software repository: [github.com - YunoHost-Apps/peertube](https://github.com/YunoHost-Apps/peertube_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/peertube/issues](https://github.com/YunoHost-Apps/peertube_ynh/issues) diff --git a/pages/04.applications/10.docs/petrolette/app_petrolette.fr.md b/pages/04.applications/10.docs/petrolette/app_petrolette.fr.md new file mode 100644 index 00000000..5997d8d9 --- /dev/null +++ b/pages/04.applications/10.docs/petrolette/app_petrolette.fr.md @@ -0,0 +1,29 @@ +--- +title: Petrolette +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_petrolette' +--- + +[![Installer Petrolette avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=petrolette) [![Integration level](https://dash.yunohost.org/integration/petrolette.svg)](https://dash.yunohost.org/appci/app/petrolette) + +*Petrolette* est la page d'actu qui ne sait rien de toi. + +### Captures d'écran + +![Captures d'écran de Petrolette](https://github.com/YunoHost-Apps/petrolette_ynh/blob/master/doc/screenshots/petrolette.png) + +### Avertissements / informations importantes + +- nécessite un domaine dédié + +- l'application ne stocke rien localement. L'opération de restauration/mise à niveau revient à réinstaller l'application. + +## Liens utiles + ++ Site web : [framagit.org/yphil/petrolette](https://framagit.org/yphil/petrolette) ++ Démonstration : [Démo](https://petrolette.space/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/petrolette](https://github.com/YunoHost-Apps/petrolette_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/petrolette/issues](https://github.com/YunoHost-Apps/petrolette_ynh/issues) diff --git a/pages/04.applications/10.docs/petrolette/app_petrolette.md b/pages/04.applications/10.docs/petrolette/app_petrolette.md new file mode 100644 index 00000000..9a6d58ea --- /dev/null +++ b/pages/04.applications/10.docs/petrolette/app_petrolette.md @@ -0,0 +1,29 @@ +--- +title: Petrolette +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_petrolette' +--- + +[![Installer Petrolette with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=petrolette) [![Integration level](https://dash.yunohost.org/integration/petrolette.svg)](https://dash.yunohost.org/appci/app/petrolette) + +*Petrolette* is the news reader that doesn't know you. + +### Screenshots + +![Screenshots of Petrolette](https://github.com/YunoHost-Apps/petrolette_ynh/blob/master/doc/screenshots/petrolette.png) + +### Disclaimers / important information + +- require a dedicated domain + +- the application doesn't store anything locally. Restore/uprade operation is basically reinstalling the app. + +## Useful links + ++ Website: [framagit.org/yphil/petrolette](https://framagit.org/yphil/petrolette) ++ Demonstration: [Demo](https://petrolette.space/) ++ Application software repository: [github.com - YunoHost-Apps/petrolette](https://github.com/YunoHost-Apps/petrolette_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/petrolette/issues](https://github.com/YunoHost-Apps/petrolette_ynh/issues) diff --git a/pages/04.applications/10.docs/photoview/app_photoview.fr.md b/pages/04.applications/10.docs/photoview/app_photoview.fr.md new file mode 100644 index 00000000..76eb5a2f --- /dev/null +++ b/pages/04.applications/10.docs/photoview/app_photoview.fr.md @@ -0,0 +1,23 @@ +--- +title: Photoview +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_photoview' +--- + +[![Installer Photoview avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=photoview) [![Integration level](https://dash.yunohost.org/integration/photoview.svg)](https://dash.yunohost.org/appci/app/photoview) + +*Photoview* est une application de galerie photos simple et facile à utiliser, faite pour les photographes. + +### Captures d'écran + +![Captures d'écran de Photoview](https://github.com/YunoHost-Apps/photoview_ynh/blob/master/doc/screenshots/screenshot1.png) + +## Liens utiles + ++ Site web : [photoview.github.io/](https://photoview.github.io/) ++ Démonstration : [Démo](https://photos.qpqp.dk/login) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/photoview](https://github.com/YunoHost-Apps/photoview_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/photoview/issues](https://github.com/YunoHost-Apps/photoview_ynh/issues) diff --git a/pages/04.applications/10.docs/photoview/app_photoview.md b/pages/04.applications/10.docs/photoview/app_photoview.md new file mode 100644 index 00000000..20f13e9f --- /dev/null +++ b/pages/04.applications/10.docs/photoview/app_photoview.md @@ -0,0 +1,23 @@ +--- +title: Photoview +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_photoview' +--- + +[![Installer Photoview with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=photoview) [![Integration level](https://dash.yunohost.org/integration/photoview.svg)](https://dash.yunohost.org/appci/app/photoview) + +*Photoview* is a simple and user-friendly photo gallery that's made for photographers and aims to provide an easy and fast way to navigate directories, with thousands of high resolution photos. + +### Screenshots + +![Screenshots of Photoview](https://github.com/YunoHost-Apps/photoview_ynh/blob/master/doc/screenshots/screenshot1.png) + +## Useful links + ++ Website: [photoview.github.io/](https://photoview.github.io/) ++ Demonstration: [Demo](https://photos.qpqp.dk/login) ++ Application software repository: [github.com - YunoHost-Apps/photoview](https://github.com/YunoHost-Apps/photoview_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/photoview/issues](https://github.com/YunoHost-Apps/photoview_ynh/issues) diff --git a/pages/04.applications/10.docs/phpbb/app_phpbb.fr.md b/pages/04.applications/10.docs/phpbb/app_phpbb.fr.md new file mode 100644 index 00000000..33ff48f9 --- /dev/null +++ b/pages/04.applications/10.docs/phpbb/app_phpbb.fr.md @@ -0,0 +1,31 @@ +--- +title: phpBB +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpbb' +--- + +[![Installer phpBB avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=phpbb) [![Integration level](https://dash.yunohost.org/integration/phpbb.svg)](https://dash.yunohost.org/appci/app/phpbb) + +*phpBB* est une solution logicielle gratuite de forum "à plat" qui peut être utilisée pour rester en contact avec un groupe de personnes ou pour alimenter l'ensemble de votre site Web. Avec une vaste base de données d'extensions créées par les utilisateurs et une base de données de styles contenant des centaines de styles et d'images pour personnaliser votre forum, vous pouvez créer un forum unique en quelques minutes. + +### Captures d'écran + +![Capture d'écran de phpBB](https://github.com/YunoHost-Apps/phpbb_ynh/blob/master/doc/screenshots/screenshot.png) + +### Avertissements / informations importantes + +### Configuration + +1. L'application devra terminer le processus d'enregistrement une fois l'installation terminée en **visitant le domaine** sur lequel *phpBB* est installé. +1. Les informations d'identification de la base de données MySQL seront envoyées à la **messagerie admin**. +1. Veuillez supprimer, déplacer ou renommer le répertoire d'installation (`mv /var/www/phpbb/install /var/www/phpbb/install_old`) avant d'utiliser votre forum. Si ce répertoire est toujours présent, seul le panneau de configuration d'administration (ACP) sera accessible. + +## Liens utiles + ++ Site web : [phpbb.com](https://www.phpbb.com/) ++ Démonstration : [Démo](https://www.phpbb.com/demo/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/phpbb](https://github.com/YunoHost-Apps/phpbb_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/phpbb/issues](https://github.com/YunoHost-Apps/phpbb_ynh/issues) diff --git a/pages/04.applications/10.docs/phpbb/app_phpbb.md b/pages/04.applications/10.docs/phpbb/app_phpbb.md new file mode 100644 index 00000000..d37693e7 --- /dev/null +++ b/pages/04.applications/10.docs/phpbb/app_phpbb.md @@ -0,0 +1,31 @@ +--- +title: phpBB +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpbb' +--- + +[![Installer phpBB with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=phpbb) [![Integration level](https://dash.yunohost.org/integration/phpbb.svg)](https://dash.yunohost.org/appci/app/phpbb) + +*phpBB* is a free flat-forum bulletin board software solution that can be used to stay in touch with a group of people or can power your entire website. With an extensive database of user-created extensions and styles database containing hundreds of style and image packages to customise your board, you can create a very unique forum in minutes. + +### Screenshots + +![Screenshot of phpBB](https://github.com/YunoHost-Apps/phpbb_ynh/blob/master/doc/screenshots/screenshot.png) + +### Disclaimers / important information + +### Configuration + +1. The app will require to complete the registration process after the instllation is complete by **visiting the domain** on which *phpBB* is installed. +1. The MySQL database credentials will be sent to the **admin mail**. +1. Please delete, move or rename the install directory (`mv /var/www/phpbb/install /var/www/phpbb/install_old`) before you use your board. If this directory is still present, only the Administration Control Panel (ACP) will be accessible. + +## Useful links + ++ Website: [phpbb.com](https://www.phpbb.com/) ++ Demonstration: [Demo](https://www.phpbb.com/demo/) ++ Application software repository: [github.com - YunoHost-Apps/phpbb](https://github.com/YunoHost-Apps/phpbb_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/phpbb/issues](https://github.com/YunoHost-Apps/phpbb_ynh/issues) diff --git a/pages/04.applications/10.docs/phpinfo/app_phpinfo.fr.md b/pages/04.applications/10.docs/phpinfo/app_phpinfo.fr.md new file mode 100644 index 00000000..d47e89e0 --- /dev/null +++ b/pages/04.applications/10.docs/phpinfo/app_phpinfo.fr.md @@ -0,0 +1,18 @@ +--- +title: Phpinfo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpinfo' +--- + +[![Installer Phpinfo avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=phpinfo) [![Integration level](https://dash.yunohost.org/integration/phpinfo.svg)](https://dash.yunohost.org/appci/app/phpinfo) + +*Phpinfo* est un simple visualiseur d'informations PHP. + +## Liens utiles + ++ Site web : [php.net/manual/fr/function.phpinfo.php](https://www.php.net/manual/fr/function.phpinfo.php) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/phpinfo](https://github.com/YunoHost-Apps/phpinfo_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/phpinfo/issues](https://github.com/YunoHost-Apps/phpinfo_ynh/issues) diff --git a/pages/04.applications/10.docs/phpinfo/app_phpinfo.md b/pages/04.applications/10.docs/phpinfo/app_phpinfo.md new file mode 100644 index 00000000..c4a24b75 --- /dev/null +++ b/pages/04.applications/10.docs/phpinfo/app_phpinfo.md @@ -0,0 +1,18 @@ +--- +title: Phpinfo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpinfo' +--- + +[![Installer Phpinfo with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=phpinfo) [![Integration level](https://dash.yunohost.org/integration/phpinfo.svg)](https://dash.yunohost.org/appci/app/phpinfo) + +*Phpinfo* is a simple phpinfo. + +## Useful links + ++ Website: [php.net/manual/fr/function.phpinfo.php](https://www.php.net/manual/fr/function.phpinfo.php) ++ Application software repository: [github.com - YunoHost-Apps/phpinfo](https://github.com/YunoHost-Apps/phpinfo_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/phpinfo/issues](https://github.com/YunoHost-Apps/phpinfo_ynh/issues) diff --git a/pages/04.applications/10.docs/phpldapadmin/app_phpldapadmin.fr.md b/pages/04.applications/10.docs/phpldapadmin/app_phpldapadmin.fr.md new file mode 100644 index 00000000..91684bb0 --- /dev/null +++ b/pages/04.applications/10.docs/phpldapadmin/app_phpldapadmin.fr.md @@ -0,0 +1,23 @@ +--- +title: phpLDAPadmin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpldapadmin' +--- + +[![Installer phpLDAPadmin avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=phpldapadmin) [![Integration level](https://dash.yunohost.org/integration/phpldapadmin.svg)](https://dash.yunohost.org/appci/app/phpldapadmin) + +*phpLDAPadmin* est une application web pour administrer les serveurs LDAP (Lightweight Directory Access Protocol). + +### Captures d'écran + +![Captures d'écran de phpLDAPadmin](https://github.com/YunoHost-Apps/phpldapadmin_ynh/blob/master/doc/screenshots/screenshot.png) + +## Liens utiles + ++ Site web : [phpldapadmin.org](www.phpldapadmin.org) ++ Démonstration : [Démo](https://olddemo.phpldapadmin.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/phpldapadmin](https://github.com/YunoHost-Apps/phpldapadmin_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/phpldapadmin/issues](https://github.com/YunoHost-Apps/phpldapadmin_ynh/issues) diff --git a/pages/04.applications/10.docs/phpldapadmin/app_phpldapadmin.md b/pages/04.applications/10.docs/phpldapadmin/app_phpldapadmin.md new file mode 100644 index 00000000..4865a768 --- /dev/null +++ b/pages/04.applications/10.docs/phpldapadmin/app_phpldapadmin.md @@ -0,0 +1,23 @@ +--- +title: phpLDAPadmin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpldapadmin' +--- + +[![Installer phpLDAPadmin with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=phpldapadmin) [![Integration level](https://dash.yunohost.org/integration/phpldapadmin.svg)](https://dash.yunohost.org/appci/app/phpldapadmin) + +*phpLDAPadmin* is a web app for administering Lightweight Directory Access Protocol (LDAP) servers. + +### Screenshots + +![Screenshots of phpLDAPadmin](https://github.com/YunoHost-Apps/phpldapadmin_ynh/blob/master/doc/screenshots/screenshot.png) + +## Useful links + ++ Website: [phpldapadmin.org](www.phpldapadmin.org) ++ Demonstration: [Demo](https://olddemo.phpldapadmin.org/) ++ Application software repository: [github.com - YunoHost-Apps/phpldapadmin](https://github.com/YunoHost-Apps/phpldapadmin_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/phpldapadmin/issues](https://github.com/YunoHost-Apps/phpldapadmin_ynh/issues) diff --git a/pages/04.applications/10.docs/phpmyadmin/app_phpmyadmin.fr.md b/pages/04.applications/10.docs/phpmyadmin/app_phpmyadmin.fr.md new file mode 100644 index 00000000..597e47c3 --- /dev/null +++ b/pages/04.applications/10.docs/phpmyadmin/app_phpmyadmin.fr.md @@ -0,0 +1,21 @@ +--- +title: phpMyAdmin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpmyadmin' +--- + +![logo de phpmyadmin](image://phpmyadmin_logo.svg?resize=,80) + +[![Install phpMyAdmin with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=phpmyadmin) [![Integration level](https://dash.yunohost.org/integration/phpmyadmin.svg)](https://dash.yunohost.org/appci/app/phpmyadmin) + +*phpMyAdmin* est un outil logiciel libre écrit en PHP, destiné à gérer l'administration de MySQL sur le Web. phpMyAdmin supporte un large éventail d'opérations sur MySQL et MariaDB. Les opérations fréquemment utilisées (gestion des bases de données, des tables, des colonnes, des relations, des index, des utilisateurs, des autorisations, etc.) peuvent être effectuées via l'interface utilisateur, tout en ayant la possibilité d'exécuter directement n'importe quelle instruction SQL. + +## Liens utiles + ++ Site web : [www.phpmyadmin.net](https://www.phpmyadmin.net/) ++ Documentation officielle : [www.phpmyadmin.net/docs](https://www.phpmyadmin.net/docs/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/phpmyadmin](https://github.com/YunoHost-Apps/phpmyadmin_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/phpmyadmin/issues](https://github.com/YunoHost-Apps/phpmyadmin_ynh/issues) diff --git a/pages/04.applications/10.docs/phpmyadmin/app_phpmyadmin.md b/pages/04.applications/10.docs/phpmyadmin/app_phpmyadmin.md new file mode 100644 index 00000000..a8473422 --- /dev/null +++ b/pages/04.applications/10.docs/phpmyadmin/app_phpmyadmin.md @@ -0,0 +1,21 @@ +--- +title: phpMyAdmin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpmyadmin' +--- + +![phpmyadmin's logo](image://phpmyadmin_logo.svg?resize=,80) + +[![Install phpMyAdmin with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=phpmyadmin) [![Integration level](https://dash.yunohost.org/integration/phpmyadmin.svg)](https://dash.yunohost.org/appci/app/phpmyadmin) + +*phpMyAdmin* is a free software tool written in PHP, intended to handle the administration of MySQL over the Web. phpMyAdmin supports a wide range of operations on MySQL and MariaDB. Frequently used operations (managing databases, tables, columns, relations, indexes, users, permissions, etc.) can be performed via the user interface, while you still have the ability to directly execute any SQL statement. + +## Useful links + ++ Website: [www.phpmyadmin.net](https://www.phpmyadmin.net/) ++ Official documentation: [www.phpmyadmin.net/docs](https://www.phpmyadmin.net/docs/) ++ Application software repository: [github.com - YunoHost-Apps/phpmyadmin](https://github.com/YunoHost-Apps/phpmyadmin_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/phpmyadmin/issues](https://github.com/YunoHost-Apps/phpmyadmin_ynh/issues) diff --git a/pages/04.applications/10.docs/phpsysinfo/app_phpsysinfo.fr.md b/pages/04.applications/10.docs/phpsysinfo/app_phpsysinfo.fr.md new file mode 100644 index 00000000..8ff1807b --- /dev/null +++ b/pages/04.applications/10.docs/phpsysinfo/app_phpsysinfo.fr.md @@ -0,0 +1,21 @@ +--- +title: phpSysInfo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpsysinfo' +--- + +![logo de phpsysinfo](image://phpsysinfo_logo.png?height=80) + +[![Install phpSysInfo with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=phpsysinfo) [![Integration level](https://dash.yunohost.org/integration/phpsysinfo.svg)](https://dash.yunohost.org/appci/app/phpsysinfo) + +*phpSysInfo* est un script PHP personnalisable qui affiche bien les informations sur votre système (CPU, RAM, disques...). + +## Liens utiles + ++ Site web : [phpsysinfo.github.io/phpsysinfo](https://phpsysinfo.github.io/phpsysinfo/) ++ Démonstration : [Démo](https://phpsysinfo.github.io/phpsysinfo/demos.html) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/phpsysinfo](https://github.com/YunoHost-Apps/phpsysinfo_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/phpsysinfo/issues](https://github.com/YunoHost-Apps/phpsysinfo_ynh/issues) diff --git a/pages/04.applications/10.docs/phpsysinfo/app_phpsysinfo.md b/pages/04.applications/10.docs/phpsysinfo/app_phpsysinfo.md new file mode 100644 index 00000000..1c57e309 --- /dev/null +++ b/pages/04.applications/10.docs/phpsysinfo/app_phpsysinfo.md @@ -0,0 +1,21 @@ +--- +title: phpSysInfo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpsysinfo' +--- + +![phpsysinfo's logo](image://phpsysinfo_logo.png?height=80) + +[![Install phpSysInfo with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=phpsysinfo) [![Integration level](https://dash.yunohost.org/integration/phpsysinfo.svg)](https://dash.yunohost.org/appci/app/phpsysinfo) + +*phpSysInfo* is a customizable PHP script that displays information about your system (CPU, RAM, disks). + +## Useful links + ++ Website: [phpsysinfo.github.io/phpsysinfo](https://phpsysinfo.github.io/phpsysinfo/) ++ Demonstration: [Demo](https://phpsysinfo.github.io/phpsysinfo/demos.html) ++ Application software repository: [github.com - YunoHost-Apps/phpsysinfo](https://github.com/YunoHost-Apps/phpsysinfo_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/phpsysinfo/issues](https://github.com/YunoHost-Apps/phpsysinfo_ynh/issues) diff --git a/pages/04.applications/10.docs/pihole/app_pihole.fr.md b/pages/04.applications/10.docs/pihole/app_pihole.fr.md new file mode 100644 index 00000000..a31a384a --- /dev/null +++ b/pages/04.applications/10.docs/pihole/app_pihole.fr.md @@ -0,0 +1,79 @@ +--- +title: Pi-hole +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pihole' +--- + +![logo de Pi-hole](image://pihole_logo.png) + +[![Installer Pi-hole avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=pihole)[![Niveau d'intégration](https://dash.yunohost.org/integration/pihole.svg)](https://dash.yunohost.org/appci/app/pihole) + +*Pi-hole* est un bloqueur de publicité au niveau du réseau qui agit comme un DNS menteur et éventuellement un serveur DHCP3, destiné à être utilisé sur un réseau privé. Il est conçu pour être installé sur des périphériques intégrés dotés de capacités réseau, tels que le Raspberry Pi, mais il peut être utilisé sur d'autres machines exécutant GNU/Linux ou dans des environnements virtualisés. + +## Utiliser Pi-hole comme serveur DHCP + +> **Attention, vous devez savoir que toucher à votre DHCP pourrait casser votre réseau. +Dans le cas où votre serveur serait inaccessible, vous perdriez votre résolution dns et votre adresse IP. +Ainsi, vous perdriez toute connexion à internet et même la connexion à votre routeur.** + +> **Si vous rencontrez ce genre de problèmes, merci de lire la section "Comment restaurer mon réseau".** + +### Configurer Pi-hole + +Il y a 2 manière de configurer Pi-hole pour qu'il soit utilisé comme votre serveur DHCP. +- Soit vous pouvez choisir de l'utiliser lorsque vous installez l'application. +- Soit vous pouvez activer le serveur DHCP par la suite dans l'onglet "Settings", partie "Pi-hole DHCP Server". +Dans ce second cas, il peut être préférable de forcer l'ip du serveur à une adresse statique. + +### Configurer mon routeur + +Votre routeur ou celui de votre FAI dispose d'un serveur DHCP activé par défaut. +Si vous gardez ce DHCP, en même temps que celui de Pi-hole, vous allez avoir des conflits transparents entre eux. +Le premier serveur DHCP à répondre va distribuer ses propres ip et paramètres. +Donc vous devez éteindre le serveur DHCP de votre routeur et laisser Pi-hole gérer votre réseau. + +#### Pourquoi je devrais utiliser le DHCP de Pi-hole ? + +En utilisant le DHCP de Pi-hole, vous lui permettez de donner sa configuration dns à chacun de vos clients. De cette manière, chaque requête sera filtrée par Pi-hole. + +Un autre cas d'usage du DHCP de Pi-hole est le cas où vous rencontrez des problèmes de hairpinning (Vous ne pouvez pas vous connecter à votre serveur parce que son ip est votre ip publique, et votre routeur n'autorise pas cela). +Dans ce cas, utilisez le dns de Pi-hole va vous permettre de vous connecter à votre serveur par son adresse locale plutôt que son adresse publique. + +### Restaurer le réseau + +> Oups ! +Votre serveur Pi-hole est tombé, et vous n'avez plus de DHCP. +Ne paniquez pas, on va surmonter ça \o/ + +Utilisez votre terminal favori sur votre ordinateur de bureau. +Et tout d'abord, récupérer votre interface réseau (Le plus souvent `eth0`). + +``` bash +sudo ifconfig +``` + +Ensuite, changer votre ip pour une ip statique. + +``` bash +sudo ifconfig eth0 192.168.1.100 +``` + +Maintenant, vous pouvez vous connecter à votre routeur et rallumer son serveur DHCP pour l'utiliser à nouveau. +Vous pouvez maintenant retirer votre ip statique et réobtenir une ip dynamique. + +``` bash +sudo ifconfig eth0 0.0.0.0 && sudo dhclient eth0 +``` + +> N'oubliez pas d'éteindre le DHCP de votre routeur si votre serveur fonctionne à nouveau. + +## Liens utiles + + + Site web : [pi-hole.net (en)](https://pi-hole.net) + + Documentation officielle : [docs.pi-hole.net (en)](https://docs.pi-hole.net/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/pihole](https://github.com/YunoHost-Apps/pihole_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/pihole/issues](https://github.com/YunoHost-Apps/pihole_ynh/issues) + diff --git a/pages/04.applications/10.docs/pihole/app_pihole.md b/pages/04.applications/10.docs/pihole/app_pihole.md new file mode 100644 index 00000000..2fdd5d60 --- /dev/null +++ b/pages/04.applications/10.docs/pihole/app_pihole.md @@ -0,0 +1,78 @@ +--- +title: Pi-hole +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pihole' +--- + +![Pi-hole's logo](image://pihole_logo.png?width=80) + +[![Install Pi-hole with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=pihole) [![Integration level](https://dash.yunohost.org/integration/pihole.svg)](https://dash.yunohost.org/appci/app/pihole) + +*Pi-hole* is a network-level ad blocker that acts as a DNS layer and possibly a DHCP3 server for use on a private network. It is designed to be installed on embedded devices with network capabilities, such as the Raspberry Pi, but can be used on other machines running GNU/Linux or in virtualised environments. + +## Using Pi-hole as a DHCP server + +> **Warning, you should be aware that touching your DHCP could break your network. +In case your server is inaccessible, you will lose your dns resolution and IP address. +Thus, you would lose any connection to the internet and even the connection to your router.** + +> If you encounter this kind of problem, please read the section "How to restore my network". + +### Configure Pi-hole + +There are 2 ways to configure Pi-hole to be used as your DHCP server. +- Either you can choose to use it when you install the application. +- Or you can activate the DHCP server afterwards in the "Settings" tab, part "Pi-hole DHCP Server". +In this second case, it may be preferable to force the server IP to a static address. + +### Configure my router + +Your router or your ISP's router has a DHCP server enabled by default. +If you keep this DHCP, along with Pi-hole's, you will have transparent conflicts between them. +The first DHCP server to respond will distribute its own IP and settings. +So you need to turn off your router's DHCP server and let Pi-hole manage your network. + +#### Why should I use Pi-hole's DHCP? + +By using Pi-hole's DHCP, you allow Pi-hole to give its dns configuration to each of your clients. This way, every request will be filtered by Pi-hole. + +Another case of using Pi-hole DHCP is if you have hairpinning problems (you can't connect to your server because its IP is your public IP, and your router doesn't allow this). +In this case, using Pi-hole's dns will allow you to connect to your server by its local address rather than its public address. + +### Restore network + +> Oops! +Your Pi-hole server has crashed, and you don't have DHCP anymore. +Don't panic. We'll get through this. + +Use your favorite device on your desktop computer. +And first, get your network interface (usually `eth0`). + +```bash +sudo ifconfig +``` + +Then change your IP to a static one. + +```bash +sudo ifconfig eth0 192.168.1.100 +``` + +Now you can connect to your router and reboot its DHCP server to use it again. +You can now remove your static IP and get a dynamic IP again. + +```bash +sudo ifconfig eth0 0.0.0 && sudo dhclient eth0 +``` + +> Remember to turn off your router's DHCP if your server is running again. + +## Useful links + ++ Website: [pi-hole.net](https://pi-hole.net) ++ Official documentation: [docs.pi-hole.net](https://docs.pi-hole.net/) ++ Application software repository: [github.com - YunoHost-Apps/pihole](https://github.com/YunoHost-Apps/pihole_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/pihole/issues](https://github.com/YunoHost-Apps/pihole_ynh/issues) diff --git a/pages/04.applications/10.docs/piwigo/app_piwigo.fr.md b/pages/04.applications/10.docs/piwigo/app_piwigo.fr.md new file mode 100644 index 00000000..b2595ad2 --- /dev/null +++ b/pages/04.applications/10.docs/piwigo/app_piwigo.fr.md @@ -0,0 +1,44 @@ +--- +title: Piwigo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_piwigo' +--- + +![logo de Piwigo](image://piwigo.org.svg?resize=,80) + +[![Installer Piwigo avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=piwigo) [![Niveau d'intégration](https://dash.yunohost.org/integration/piwigo.svg)](https://dash.yunohost.org/appci/app/piwigo) + +**[Piwigo](https://fr.piwigo.org)** est un logiciel de galerie photos pour le Web, bâti par une communauté active d'utilisateurs et de développeurs. + +Les extensions rendent Piwigo facilement personnalisable. Cerise sur le gâteau, Piwigo est libre et gratuit. + +## Fonctionnalités + +En plus des [fonctionnalités principales](https://fr.piwigo.org/fonctionnalites) de Piwigo, ce paquet propose également : + +* une intégration avec le système de gestion des utilisateurs et le SSO de YunoHost : + * installation privée : limitée aux utilisateurs de YunoHost + * installation publique : + * SSO pour les utilisateurs YunoHost + * permet de gérer l'accès à d'autres utilisateurs, et mode invité possible +* de permettre à un utilisateur d'être administrateur (réglage lors de l'installation) + +![Capture d'écran de Piwigo](image://piwigo_screenshot.jpg) + +## Applications clientes + +| Nom de l'application | Plateforme | Multi-comptes | Play Store | F-Droid | Apple Store | Autre | +|-----------------------|------------|---------------|------------|---------|-------------|---------| +| Piwigo | Android / iOS | ? | [Playstore - Piwigo](https://play.google.com/store/apps/details?id=org.piwigo.android&hl=fr) | [Piwigo - F-Droid](https://f-droid.org/packages/org.piwigo.android/)| [App Store - Piwigo](https://apps.apple.com/fr/app/piwigo/id472225196) | | +| digiKam | GNU/Linux / macOS / Windows | ? | | | | [digiKam Download](https://www.digikam.org/download/) | +| Shotwell | GNU/Linux | ? | | | | [Install Shotwell](https://wiki.gnome.org/Apps/Shotwell/BuildingAndInstalling) | + +## Liens utiles + ++ Site web : [Site Piwigo](https://fr.piwigo.org) ++ Documentation officielle : [Documentation](https://piwigo.org/doc/doku.php) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/piwigo](https://github.com/YunoHost-Apps/piwigo_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/piwigo/issues](https://github.com/YunoHost-Apps/piwigo_ynh/issues) diff --git a/pages/04.applications/10.docs/piwigo/app_piwigo.md b/pages/04.applications/10.docs/piwigo/app_piwigo.md new file mode 100644 index 00000000..38fbafff --- /dev/null +++ b/pages/04.applications/10.docs/piwigo/app_piwigo.md @@ -0,0 +1,44 @@ +--- +title: Piwigo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_piwigo' +--- + +![Piwigo's logo](image://piwigo.org.svg?resize=,80) + +[![Install Piwigo with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=piwigo) [![Integration level](https://dash.yunohost.org/integration/piwigo.svg)](https://dash.yunohost.org/appci/app/piwigo) + +[Piwigo](http://piwigo.org) is a photo gallery software for the Web, built by an active community of users and developers. + +Extensions make Piwigo easily customizable. Icing on the cake, Piwigo is free and opensource. + +![Screenshot Piwigo](image://piwigo_screenshot.jpg) + +## Features + +In addition to Piwigo [core features](http://piwigo.org/basics/features), the following are made available with +this package: + + * Integrate with YunoHost users and SSO: + * private mode: limit access to YunoHost users + * public mode: + * SSO for YunoHost users + * allow other users management, and guest mode + * Allow one YunoHost user to be the administrator (set at the installation) + +## Customer Applications +| Application name | Platform | Multi-account | Play Store | F-Droid | Apple Store | *Other* | +|------------------|----------|---------------|------------|---------|-------------|---------| +| Piwigo | Android / iOS | ? | [Playstore - Piwigo](https://play.google.com/store/apps/details?id=org.piwigo.android&hl=en) | [Piwigo - F-Droid](https://f-droid.org/packages/org.piwigo.android/)| [App Store - Piwigo](https://apps.apple.com/fr/app/piwigo/id472225196) | | +| digiKam | GNU/Linux / macOS / Windows | ? | | | | [digiKam Download](https://www.digikam.org/download/) | +| Shotwell | GNU/Linux | ? | | | | [Install Shotwell](https://wiki.gnome.org/Apps/Shotwell/BuildingAndInstalling) | + +## Useful links + ++ Website: [Piwigo](http://piwigo.org/) ++ Official documentation: [Documentation](https://piwigo.org/doc/doku.php) ++ Application software repository: [github.com - YunoHost-Apps/piwigo](https://github.com/YunoHost-Apps/piwigo_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/piwigo/issues](https://github.com/YunoHost-Apps/piwigo_ynh/issues) diff --git a/pages/04.applications/10.docs/plainpad/app_plainpad.fr.md b/pages/04.applications/10.docs/plainpad/app_plainpad.fr.md new file mode 100644 index 00000000..32ed0b0b --- /dev/null +++ b/pages/04.applications/10.docs/plainpad/app_plainpad.fr.md @@ -0,0 +1,34 @@ +--- +title: Plainpad +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_plainpad' +--- + +[![Installer Plainpad avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=plainpad) [![Integration level](https://dash.yunohost.org/integration/plainpad.svg)](https://dash.yunohost.org/appci/app/plainpad) + +*Plainpad* est une application de prise de notes open source auto-hébergée qui est très facile à configurer sur votre serveur. Vos données ne quitteront jamais votre serveur et vous pourrez y accéder depuis n'importe quel appareil connecté à Internet. +Avec Plainpad, vous pouvez autoriser plusieurs utilisateurs à accéder à l'application sans pouvoir voir les notes des autres. Les notes sont cryptées et stockées en toute sécurité dans la base de données. + +### Captures d'écran + +![Captures d'écran de Plainpad](https://github.com/YunoHost-Apps/plainpad_ynh/blob/master/doc/screenshots/screenshot.png) + +### Avertissements / informations importantes + +### Configuration + +Les identifiants par défaut sont : +``` +username: admin@example.org +password: 12345 +``` + +## Liens utiles + ++ Site web : [alextselegidis.com/get/plainpad/](https://alextselegidis.com/get/plainpad/) ++ Démonstration : [Démo](https://alextselegidis.com/try/plainpad/#/login) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/plainpad](https://github.com/YunoHost-Apps/plainpad_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/plainpad/issues](https://github.com/YunoHost-Apps/plainpad_ynh/issues) diff --git a/pages/04.applications/10.docs/plainpad/app_plainpad.md b/pages/04.applications/10.docs/plainpad/app_plainpad.md new file mode 100644 index 00000000..93f3acd7 --- /dev/null +++ b/pages/04.applications/10.docs/plainpad/app_plainpad.md @@ -0,0 +1,34 @@ +--- +title: Plainpad +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_plainpad' +--- + +[![Installer Plainpad with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=plainpad) [![Integration level](https://dash.yunohost.org/integration/plainpad.svg)](https://dash.yunohost.org/appci/app/plainpad) + +*Plainpad* is a self hosted, open source note taking application that is very easy to setup on your server. Your data will never leave your server and you will be able to access them from any device connected to the internet. +With Plainpad you can allow multiple users to access the application without being able to see each other's notes. The notes are being encrypted and stored safely in the database. + +### Screenshots + +![Screenshots of Plainpad](https://github.com/YunoHost-Apps/plainpad_ynh/blob/master/doc/screenshots/screenshot.png) + +### Disclaimers / important information + +### Configuration + +The default credentials are: +``` +username: admin@example.org +password: 12345 +``` + +## Useful links + ++ Website: [alextselegidis.com/get/plainpad/](https://alextselegidis.com/get/plainpad/) ++ Demonstration: [Demo](https://alextselegidis.com/try/plainpad/#/login) ++ Application software repository: [github.com - YunoHost-Apps/plainpad](https://github.com/YunoHost-Apps/plainpad_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/plainpad/issues](https://github.com/YunoHost-Apps/plainpad_ynh/issues) diff --git a/pages/04.applications/10.docs/pleroma/app_pleroma.fr.md b/pages/04.applications/10.docs/pleroma/app_pleroma.fr.md new file mode 100644 index 00000000..2b09e298 --- /dev/null +++ b/pages/04.applications/10.docs/pleroma/app_pleroma.fr.md @@ -0,0 +1,61 @@ +--- +title: Pleroma +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pleroma' +--- + +![logo de Pleroma](image://pleroma_logo.png) + + - [Découverte de l'interface de Pleroma](#d%C3%A9couverte-de-linterface-de-pleroma) + - [Logiciels Clients pour mobile et ordinateur](#applications-clients) + - [Liens utiles](#quelques-liens-utiles) + +Pleroma est un réseau social décentralisé de micro-blogging qui propose une alternative à Twitter, le protocole [Activy Pub](https://en.wikipedia.org/wiki/ActivityPub) qu'il utilise permet d'interagir avec le [fediverse](https://fediverse.party/en/fediverse) composé notamment de Mastodon, GNU Social, et d'autres. Il a l'avantage d'être plus léger que mastodon et se prête donc plus facilement à l'auto-hébergement. + +## Découverte de l'interface de Pleroma + +Pour celles et ceux qui n'ont pas ou peu l'habitude des réseaux sociaux, voici en détail l'utilisation de chacune des fenêtres proposées : + +### Accueil de l'interface + +![Capture écran accueil de Pleroma](image://capture_globale.png) + +1. Barre de menu + + ![Capture du bouton à gauche de la barre de menu](image://capture_menu_gauche.png) Le bouton à gauche portant le nom de l'instance - dans la capture ci-dessus *Meta - Pleroma* - renvoie vers la page d'accueil de l'instance. Dans le cas où vous êtes connecté⋅e cela vous renverra vers la visualisation de votre *journal*, si ce n'est pas le cas vers *Le réseau connu*. + + ![Capture des boutons à droite de la barre de menu](image://capture_menu_droite.png) Si vous êtes connecté⋅e vous aurez trois boutons, si vous ne l'êtes pas il n'y en aura que deux. Dans l'ordre, de gauche à droite : + + ![Capture bouton chercher un⋅e utilisateur⋅trice](image://capture_menu_droite_chercher_utilisateur.png) Permet d'ajouter de nouveaux utilisateurs et nouvelles utilisatrices afin de les suivre et ainsi vous abonner à leurs publications. Il est possible de rechercher un·e utilisateur·trice avec seulement son pseudonyme (par exemple : *yunohost*) ou alors sous la forme @pseudonyme@instance.domaine (par exemple : *@yunohost@mastodon.social*) + + ![Capture bouton préférences](image://capture_menu_droite_preferences.png) Permet d'accéder aux paramétres d'affichages de votre session. + /!\ Si vous n'êtes pas connecté·e les modifications effectuées ne seront valables qu'un temps (jusqu'à ce que les cookies de fonctionnement soient effacés). + + ![Capture Déconnexion](image://capture_menu_droite_deconnexion.png) Permet de se déconnecter de l'instance. Si vous n'êtes pas sur votre ordinateur personnel pensez-y ! + +2. Espace de Publications / Fenêtre de connexion +![Fenêtre de connexion à la place de la zone de publications](image://capture_espace_connexion.png) Si vous êtes connecté·e cet espace vous permet de publier vos messages et d'y joindre un média (images, GIF, vidéos, etc). Vous êtes limité⋅e dans le nombre de caractères, avec Pleroma la limitation est définie par l'administrateur·trice de l'instance. Si vous avez des questions envoyez lui un message. + +3. Fenêtre de visualisations +C'est ici le centre ~~du monde~~ de Pleroma, vous pourrez y voir les différentes publications de vos contacts ou qui circulent sur l'instance ainsi que les re-toots et qui a publié. + +4. Le journal +Cette zone permet de voir les différentes publications des comptes que vous suivez mais aussi l'ensemble des publications visibles sur votre instance. Vous trouverez aussi les messages privés et les notifications où vous trouverez tous vos toots et les publications où vous avez été cité⋅e. + +5. Interface utilisateur·trice +Cet espace permet de choisir l'agencement de Pleroma, il est proposé deux agencements : un spécifique à Pleroma et un fork (une copie) de l'agencement de Mastodon, selon vos préférences d'usages et de visualisations ; à vous de faire votre choix. + +6. Notifications +On retrouve dans cette zone les messages où vous avez été cité⋅e, mais aussi les abonnements à votre compte. + +## Applications clients + +| Nom de l'applications | Plateforme | Multi-comptes | Autre réseaux supportés | Play Store | F-Droid | Apple Store | +|---|---|---|---|---|---|---| +| Tusky | Android | Oui | Mastodon | [https://play.google.com/id=com.keylesspalace.tusky](https://play.google.com/store/apps/details?id=com.keylesspalace.tusky) | [f-droid.org/com.keylesspalace.tusky](https://f-droid.org/fr/packages/com.keylesspalace.tusky/) | +| Fedilab | Android | Oui | Mastodon, Pleroma, Peertube, GNU Social, Friendica, Pixelfed | [play.google.com/app.fedilab.android](https://play.google.com/store/apps/details?id=app.fedilab.android&hl=fr) | [f-droid.org//fr.gouv.etalab.mastodon](https:/f-droid.org/fr/packages/fr.gouv.etalab.mastodon/) +| Twidere | Android | Oui | Twitter, Mastodon | [play.google.com/org.mariotaku.twidere](https://play.google.com/store/apps/details?id=org.mariotaku.twidere) | [https://f-droid.org/org.mariotaku.twidere](https://f-droid.org/fr/packages/org.mariotaku.twidere/) | +| Librem Social | Android | Non | ? | [play.google.com/one.librem.social](https://play.google.com/store/apps/details?id=one.librem.social&hl=fr) | [https://f-droid.org/one.librem.social](https://f-droid.org/fr/packages/one.librem.social) | | + +## Quelques liens utiles + ++ Site officiel : [pleroma.social (En anglais)](https://pleroma.social) ++ Trouver d'autres instances de Pleroma : [fediverse.network/pleroma](https://fediverse.network/pleroma) diff --git a/pages/04.applications/10.docs/pleroma/app_pleroma.md b/pages/04.applications/10.docs/pleroma/app_pleroma.md new file mode 100644 index 00000000..5885a7b2 --- /dev/null +++ b/pages/04.applications/10.docs/pleroma/app_pleroma.md @@ -0,0 +1,10 @@ +--- +title: Pleroma +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pleroma' +--- + +Unfortunately, this page only exists in french for now. diff --git a/pages/04.applications/10.docs/plume/app_plume.fr.md b/pages/04.applications/10.docs/plume/app_plume.fr.md new file mode 100644 index 00000000..7b569f39 --- /dev/null +++ b/pages/04.applications/10.docs/plume/app_plume.fr.md @@ -0,0 +1,25 @@ +--- +title: Plume +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_plume' +--- + +![logo de plume](image://plume_logo.svg?resize=,80) + +[![Install Plume with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=plume) [![Integration level](https://dash.yunohost.org/integration/plume.svg)](https://dash.yunohost.org/appci/app/plume) + +Plume est un moteur de blog décentralisé et fédéré en cours de développement. + +* Décentralisé : Chaque instance peut suivre une ou plusieurs autres instances Plume afin de permettre à ses utilisateur·rices de visionner les vidéos de celles-ci. +* Fédéré : Via le protocole ActivityPub, Plume peut interagir avec d'autres logiciels qui font partie du Fediverse, comme Mastodon ou PixelFed par exemple. + +## Liens utiles + ++ Site web : [joinplu.me](https://joinplu.me/) ++ Documentation officielle : [docs.joinplu.me](https://docs.joinplu.me/) ++ Démonstration : [Démo](https://joinplu.me/#instances) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/plume](https://github.com/YunoHost-Apps/plume_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/plume/issues](https://github.com/YunoHost-Apps/plume_ynh/issues) diff --git a/pages/04.applications/10.docs/plume/app_plume.md b/pages/04.applications/10.docs/plume/app_plume.md new file mode 100644 index 00000000..f02fc0b8 --- /dev/null +++ b/pages/04.applications/10.docs/plume/app_plume.md @@ -0,0 +1,26 @@ +--- +title: Plume +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_plume' +--- + +![plume's logo](image://plume_logo.svg?resize=,80) + +[![Install Plume with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=plume) [![Integration level](https://dash.yunohost.org/integration/plume.svg)](https://dash.yunohost.org/appci/app/plume) + +Plume is a decentralized and federated blog engine under development. + +* Decentralized: Each instance can follow one or more other Plume instances in order to allow its rice-users to view their videos. +* Federated: Via the ActivityPub protocol, Plume can interact with other software that are part of the Fediverse, such as Mastodon or PixelFed for example. + + +## Useful links + ++ Website : [joinplu.me](https://joinplu.me/) ++ Official documentation : [docs.joinplu.me](https://docs.joinplu.me/) ++ Demonstration : [Demo](https://joinplu.me/#instances) ++ Application software repository : [github.com - YunoHost-Apps/plume](https://github.com/YunoHost-Apps/plume_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/plume/issues](https://github.com/YunoHost-Apps/plume_ynh/issues) diff --git a/pages/04.applications/10.docs/pluxml/app_pluxml.fr.md b/pages/04.applications/10.docs/pluxml/app_pluxml.fr.md new file mode 100644 index 00000000..d6ba7c18 --- /dev/null +++ b/pages/04.applications/10.docs/pluxml/app_pluxml.fr.md @@ -0,0 +1,41 @@ +--- +title: PluXml +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pluxml' +--- + +![PluXml_logo](image://PluXml_logo.png) + +[![Install PluXml with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=pluxml) [![Integration level](https://dash.yunohost.org/integration/pluxml.svg)](https://dash.yunohost.org/appci/app/pluxml) + +PluXml est un moteur de blog/CMS stockant ces données en XML et ne nécessitant pas de base de données SQL. + +## Configuration + +### Connexion à l’interface d’administration + +Pour configurer l'application il faut se rendre à l'adresse : `https://domain.tld/path/core/admin` + +## Capture d'écran + +![PluXml_screenshot](image://PluXml_screenshot.jpg) + +## Plugins et thèmes + +Les plugins et thèmes doivent être installés manuellement respectivement dans les dossiers `/var/www/pluxml/plugins` et `/var/www/pluxml/themes`. + +## Sauvegarde + +Pour sauvegarder votre blog, il est nécessaire de réaliser une copie du dossier `/var/www/pluxml/data`. Cette procédure de sauvegarde est également recommandée avant toute mise à jour de l'application. + +## Liens utiles + + + Site web : [www.pluxml.org](https://www.pluxml.org/) + + Documentation officielle : [wiki.pluxml.org Wiki](https://wiki.pluxml.org/) + + Démo officielle : [https://demo.pluxml.org/](https://demo.pluxml.org/) + + Forum : [https://forum.pluxml.org/](https://forum.pluxml.org/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/pluxml](https://github.com/YunoHost-Apps/pluxml_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/pluxml/issues](https://github.com/YunoHost-Apps/pluxml_ynh/issues) diff --git a/pages/04.applications/10.docs/pluxml/app_pluxml.md b/pages/04.applications/10.docs/pluxml/app_pluxml.md new file mode 100644 index 00000000..20a067f4 --- /dev/null +++ b/pages/04.applications/10.docs/pluxml/app_pluxml.md @@ -0,0 +1,40 @@ +--- +title: PluXml +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pluxml' +--- + +![PluXml_logo](image://PluXml_logo.png) + +[![Install PluXml with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=pluxml) [![Integration level](https://dash.yunohost.org/integration/pluxml.svg)](https://dash.yunohost.org/appci/app/pluxml) + +PluXml is a blog/CMS storing data in XML and not in a SQL database. + +## Configuration + +### Connecting to the administration interface + +To configure the app, go to the address: `https://domain.tld/path/core/admin` + +## Overview + +![PluXml_screenshot](image://PluXml_screenshot.jpg) + +## Plugins and themes + +Plugins and themes should respectively be installed in the following folders: `/var/www/pluxml/plugins`, `/var/www/pluxml/themes`. + +## Backup + +To restore your blog, you should keep a copy of the folder `/var/www/pluxml/data`. It is recommended to do this backup before any upgrade. + +## Useful links + + Website : [www.pluxml.org](https://www.pluxml.org/) + + Official documentation : [wiki.pluxml.org Wiki](https://wiki.pluxml.org/) + + Official demo : [https://demo.pluxml.org/](https://demo.pluxml.org/) + + Forum : [https://forum.pluxml.org/](https://forum.pluxml.org/) + + Apps software repository : [github.com - YunoHost-Apps/pluxml](https://github.com/YunoHost-Apps/pluxml_ynh) + + Fix a bug or suggest an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/pluxml/issues](https://github.com/YunoHost-Apps/pluxml_ynh/issues) diff --git a/pages/04.applications/10.docs/prettynoemiecms/app_prettynoemiecms.fr.md b/pages/04.applications/10.docs/prettynoemiecms/app_prettynoemiecms.fr.md new file mode 100644 index 00000000..76712232 --- /dev/null +++ b/pages/04.applications/10.docs/prettynoemiecms/app_prettynoemiecms.fr.md @@ -0,0 +1,41 @@ +--- +title: PrettyNoemie CMS +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_prettynoemiecms' +--- + +[![Installer PrettyNoemie CMS avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=prettynoemiecms) [![Integration level](https://dash.yunohost.org/integration/prettynoemiecms.svg)](https://dash.yunohost.org/appci/app/prettynoemiecms) + +*PrettyNoemie CMS* est un CMS offrant à ses utilisateurs une solution ergonomique, simple et élégante pour construire en un rien de temps des sites vitrines responsives au design moderne. +La construction de votre site consistera à agencer à votre convenance des modules variés, d'éditer leurs contenus, et de personnaliser votre site en choisissant les polices de caractère, la mise en forme du texte, ainsi que les couleurs d'affichage. + +### Captures d'écran + +![Capture d'écran de PrettyNoemie CMS](https://github.com/YunoHost-Apps/prettynoemiecms_ynh/blob/master/doc/screenshots/pages-framasite-theme-light.gif) + +### Avertissements / informations importantes + +### Configuration + +Configurer cette application via le panneau d'administration : `votre.domain.tld/votre_chemin/admin` + +### Essayez le ! + +https://demo-pretty-noemie.frama.site + +Connectez-vous avec : +``` +login : pretty +mdp : 12345678 +``` +Lorsque plusieurs personnes sont connectées en même temps au même site avec le même compte, NoemieCms peut estimer qu'il y a usurpation et renvoie des erreurs (CSRF). + +## Liens utiles + ++ Site web : [framagit.org/framasoft/PrettyNoemieCMS](https://framagit.org/framasoft/PrettyNoemieCMS) ++ Démonstration : [Démo](https://demo-pretty-noemie.frama.site) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/prettynoemiecms](https://github.com/YunoHost-Apps/prettynoemiecms_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/prettynoemiecms/issues](https://github.com/YunoHost-Apps/prettynoemiecms_ynh/issues) diff --git a/pages/04.applications/10.docs/prettynoemiecms/app_prettynoemiecms.md b/pages/04.applications/10.docs/prettynoemiecms/app_prettynoemiecms.md new file mode 100644 index 00000000..17f10b59 --- /dev/null +++ b/pages/04.applications/10.docs/prettynoemiecms/app_prettynoemiecms.md @@ -0,0 +1,41 @@ +--- +title: PrettyNoemie CMS +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_prettynoemiecms' +--- + +[![Installer PrettyNoemie CMS with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=prettynoemiecms) [![Integration level](https://dash.yunohost.org/integration/prettynoemiecms.svg)](https://dash.yunohost.org/appci/app/prettynoemiecms) + +*PrettyNoemie CMS* offers its users an ergonomic solution, simple and elegant to build in no time responsive windows sites with modern design. +The construction of your site will consist of arranging at your convenience various modules, edit their content, and customize your site by choosing fonts, formatting text, and display colors. + +## Screenshots + +![Screenshot of PrettyNoemie CMS](https://github.com/YunoHost-Apps/prettynoemiecms_ynh/blob/master/doc/screenshots/pages-framasite-theme-light.gif) + +## Disclaimers / important information + +## Configuration + +Configure this app with the admin panel: `your.domain.tld/your_path/admin` + +### Try it ! + +https://demo-pretty-noemie.frama.site + +Log in with: +``` +login : pretty +mdp : 12345678 +``` +When several people are connected at the same time to the same site with the same account, NoemieCms may consider that there is a usurpation and return errors (CSRF). + +## Useful links + ++ Website: [framagit.org/framasoft/PrettyNoemieCMS](https://framagit.org/framasoft/PrettyNoemieCMS) ++ Demonstration: [Demo](https://demo-pretty-noemie.frama.site) ++ Application software repository: [github.com - YunoHost-Apps/prettynoemiecms](https://github.com/YunoHost-Apps/prettynoemiecms_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/prettynoemiecms/issues](https://github.com/YunoHost-Apps/prettynoemiecms_ynh/issues) diff --git a/pages/04.applications/10.docs/privatebin/app_privatebin.fr.md b/pages/04.applications/10.docs/privatebin/app_privatebin.fr.md new file mode 100644 index 00000000..e0466a6a --- /dev/null +++ b/pages/04.applications/10.docs/privatebin/app_privatebin.fr.md @@ -0,0 +1,22 @@ +--- +title: PrivateBin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_privatebin' +--- + +![logo de privatebin](image://zerobin_logo.svg?resize=,80) + +[![Install PrivateBin with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=privatebin) [![Integration level](https://dash.yunohost.org/integration/privatebin.svg)](https://dash.yunohost.org/appci/app/privatebin) + +PrivateBin est un service web permettant de stocker temporairement et de partager du texte simple de manière chiffrée, sans stockage lisible sur le serveur. La clef de chiffrement/déchiffrement n'est pas stockée sur le serveur mais dans l'URL transmise. Ainsi vous pouvez partager des informations sensibles (mots de passe, codes d'accès, et même une discussion) de manière confidentielle en communiquant à vos interlocuteurs l'adresse spécifique de votre contenu. De plus ce contenu a une valeur limitée dans le temps et est détruit passé un délai personnalisable. + +## Liens utiles + ++ Site web : [privatebin.info](https://privatebin.info/) ++ Documentation officielle : [github.com/PrivateBin/PrivateBin/wiki](https://github.com/PrivateBin/PrivateBin/wiki) ++ Démonstration : [Démo](https://privatebin.net/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/privatebin](https://github.com/YunoHost-Apps/privatebin_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/privatebin/issues](https://github.com/YunoHost-Apps/privatebin_ynh/issues) diff --git a/pages/04.applications/10.docs/privatebin/app_privatebin.md b/pages/04.applications/10.docs/privatebin/app_privatebin.md new file mode 100644 index 00000000..b871b108 --- /dev/null +++ b/pages/04.applications/10.docs/privatebin/app_privatebin.md @@ -0,0 +1,22 @@ +--- +title: PrivateBin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_privatebin' +--- + +![PrivateBin's logo](image://zerobin_logo.svg?resize=,80) + +[![Install PrivateBin with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=privatebin) [![Integration level](https://dash.yunohost.org/integration/privatebin.svg)](https://dash.yunohost.org/appci/app/privatebin) + +PrivateBin is a web service for temporarily storing and sharing plain text in encrypted form without readable storage on the server. The encryption/decryption key is not stored on the server but in the transmitted URL. Thus you can share sensitive information (passwords, access codes, and even a discussion) in a confidential way by communicating to your interlocutors the specific address of your content. Moreover this content has a limited value in time and is destroyed after a customizable delay. + +## Useful links + ++ Website : [privatebin.info](https://privatebin.info/) ++ Official documentation : [github.com/PrivateBin/PrivateBin/wiki](https://github.com/PrivateBin/PrivateBin/wiki) ++ Demonstration : [Demo](https://privatebin.net/) ++ Application software repository : [github.com - YunoHost-Apps/privatebin](https://github.com/YunoHost-Apps/privatebin_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/privatebin/issues](https://github.com/YunoHost-Apps/privatebin_ynh/issues) diff --git a/pages/04.applications/10.docs/prometheus/app_prometheus.fr.md b/pages/04.applications/10.docs/prometheus/app_prometheus.fr.md new file mode 100644 index 00000000..04fd507f --- /dev/null +++ b/pages/04.applications/10.docs/prometheus/app_prometheus.fr.md @@ -0,0 +1,24 @@ +--- +title: Prometheus +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_prometheus' +--- + +[![Installer Prometheus avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=prometheus) [![Integration level](https://dash.yunohost.org/integration/prometheus.svg)](https://dash.yunohost.org/appci/app/prometheus) + +*Prometheus* est une application de supervision chronologique de systèmes et services. + +### Avertissements / informations importantes + +* Le port assigné à l'app est consultable dans `/etc/yunohost/apps/prometheus/settings.yml` ou avec la commande `yunohost app info prometheus --full` +* L'app est configurable dans le fichier `/opt/yunohost/prometheus/prometheus.yml`, ensuite redémarrez le service de l'app. + +## Liens utiles + ++ Site web : [prometheus.io](https://prometheus.io/) ++ Démonstration : [Démo](https://demo.do.prometheus.io/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/prometheus](https://github.com/YunoHost-Apps/prometheus_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/prometheus/issues](https://github.com/YunoHost-Apps/prometheus_ynh/issues) diff --git a/pages/04.applications/10.docs/prometheus/app_prometheus.md b/pages/04.applications/10.docs/prometheus/app_prometheus.md new file mode 100644 index 00000000..90eab6b1 --- /dev/null +++ b/pages/04.applications/10.docs/prometheus/app_prometheus.md @@ -0,0 +1,24 @@ +--- +title: Prometheus +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_prometheus' +--- + +[![Installer Prometheus with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=prometheus) [![Integration level](https://dash.yunohost.org/integration/prometheus.svg)](https://dash.yunohost.org/appci/app/prometheus) + +*Prometheus* is a monitoring system and time series database. + +### Disclaimers / important information + +* Port assigned to the app can be read in `/etc/yunohost/apps/prometheus/settings.yml` or within CLI with `yunohost app info prometheus --full` +* The app is configurable within the file `/opt/yunohost/prometheus/prometheus.yml`, then reboot the app service. + +## Useful links + ++ Website: [prometheus.io](https://prometheus.io/) ++ Demonstration: [Demo](https://demo.do.prometheus.io/) ++ Application software repository: [github.com - YunoHost-Apps/prometheus](https://github.com/YunoHost-Apps/prometheus_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/prometheus/issues](https://github.com/YunoHost-Apps/prometheus_ynh/issues) diff --git a/pages/04.applications/10.docs/prowlarr/app_prowlarr.fr.md b/pages/04.applications/10.docs/prowlarr/app_prowlarr.fr.md new file mode 100644 index 00000000..e1d9cffc --- /dev/null +++ b/pages/04.applications/10.docs/prowlarr/app_prowlarr.fr.md @@ -0,0 +1,29 @@ +--- +title: Prowlarr +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_prowlarr' +--- + +[![Installer Prowlarr avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=prowlarr) [![Integration level](https://dash.yunohost.org/integration/prowlarr.svg)](https://dash.yunohost.org/appci/app/prowlarr) + +*Prowlarr* est une application de gestion complète de vos indexeurs pour Radarr, Sonarr, Lidarr... + +### Captures d'écran + +![Capture d'écran de Prowlarr](https://github.com/YunoHost-Apps/prowlarr_ynh/blob/master/doc/screenshots/screenshot.jpg) + +### Avertissements / informations importantes + +* Les architectures compatibles sont `arm`, `arm64`, et `amd64` +* Le contrôle de l'accès se fait avec le système de permissions de YunoHost. + * L'API (`domain.tld/path/api`) est accessible aux visiteurs pour permettre le contrôle via des clients externes. + +## Liens utiles + ++ Site web : [prowlarr.com](https://prowlarr.com/) ++ Démonstration : [Démo](https://demo.prowlarr.eu/login) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/prowlarr](https://github.com/YunoHost-Apps/prowlarr_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/prowlarr/issues](https://github.com/YunoHost-Apps/prowlarr_ynh/issues) diff --git a/pages/04.applications/10.docs/prowlarr/app_prowlarr.md b/pages/04.applications/10.docs/prowlarr/app_prowlarr.md new file mode 100644 index 00000000..dbeff93f --- /dev/null +++ b/pages/04.applications/10.docs/prowlarr/app_prowlarr.md @@ -0,0 +1,29 @@ +--- +title: Prowlarr +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_prowlarr' +--- + +[![Installer Prowlarr with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=prowlarr) [![Integration level](https://dash.yunohost.org/integration/prowlarr.svg)](https://dash.yunohost.org/appci/app/prowlarr) + +*Prowlarr* is a complete management of your indexers for Radarr, Sonarr, Lidarr... + +### Screenshots + +![Screenshot of Prowlarr](https://github.com/YunoHost-Apps/prowlarr_ynh/blob/master/doc/screenshots/screenshot.jpg) + +### Disclaimers / important information + +* Supported architectures are `arm`, `arm64`, and `amd64` +* Access control is done with YunoHost's permissions system. + * API (`domain.tld/path/api`) can be accessed by visitors to allow control by remote clients. + +## Useful links + ++ Website: [prowlarr.com](https://prowlarr.com/) ++ Demonstration: [Demo](https://demo.prowlarr.eu/login) ++ Application software repository: [github.com - YunoHost-Apps/prowlarr](https://github.com/YunoHost-Apps/prowlarr_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/prowlarr/issues](https://github.com/YunoHost-Apps/prowlarr_ynh/issues) diff --git a/pages/04.applications/10.docs/proxitok/app_proxitok.fr.md b/pages/04.applications/10.docs/proxitok/app_proxitok.fr.md new file mode 100644 index 00000000..bd113023 --- /dev/null +++ b/pages/04.applications/10.docs/proxitok/app_proxitok.fr.md @@ -0,0 +1,19 @@ +--- +title: ProxiTok +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_proxitok' +--- + +[![Installer ProxiTok avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=proxitok) [![Integration level](https://dash.yunohost.org/integration/proxitok.svg)](https://dash.yunohost.org/appci/app/proxitok) + +*ProxiTok* vous permet d'utiliser TikTok via une interface alternative inspirée de Nitter. Toutes les requêtes adressées à TikTok sont effectuées côté serveur, vous ne vous connecterez donc jamais à leurs serveurs. + +## Liens utiles + ++ Site web : [proxitok.herokuapp.com](https://proxitok.herokuapp.com/) ++ Démonstration : [Démo](https://proxitok.herokuapp.com/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/proxitok](https://github.com/YunoHost-Apps/proxitok_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/galette/issues](https://github.com/YunoHost-Apps/proxitok_ynh/issues) diff --git a/pages/04.applications/10.docs/proxitok/app_proxitok.md b/pages/04.applications/10.docs/proxitok/app_proxitok.md new file mode 100644 index 00000000..e88d25ea --- /dev/null +++ b/pages/04.applications/10.docs/proxitok/app_proxitok.md @@ -0,0 +1,19 @@ +--- +title: ProxiTok +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_proxitok' +--- + +[![Install ProxiTok with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=proxitok) [![Integration level](https://dash.yunohost.org/integration/proxitok.svg)](https://dash.yunohost.org/appci/app/proxitok) + +*ProxiTok* allows you to use TikTok via an alternative interface inspired by Nitter. All requests made to TikTok are server-side, so you will never connect to their servers. + +## Useful links + ++ Website: [proxitok.herokuapp.com](https://proxitok.herokuapp.com/) ++ Démonstration: [Démo](https://proxitok.herokuapp.com/) ++ Application software repository: [github.com - YunoHost-Apps/proxitok](https://github.com/YunoHost-Apps/proxitok_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/galette/issues](https://github.com/YunoHost-Apps/proxitok_ynh/issues) diff --git a/pages/04.applications/10.docs/qr/app_qr.fr.md b/pages/04.applications/10.docs/qr/app_qr.fr.md new file mode 100644 index 00000000..073a74a9 --- /dev/null +++ b/pages/04.applications/10.docs/qr/app_qr.fr.md @@ -0,0 +1,23 @@ +--- +title: LibreQR +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_qr' +--- + +[![Installer LibreQR avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=qr) [![Integration level](https://dash.yunohost.org/integration/qr.svg)](https://dash.yunohost.org/appci/app/qr) + +*LibreQR* est une interface Web pour générer des codes QR. + +### Captures d'écran + +![Capture d'écran de LibreQR](https://code.antopie.org/miraty/qr_ynh/media/branch/master/doc/screenshots/screenshot.png) + +## Liens utiles + ++ Site web : [code.antopie.org/miraty/libreqr](https://code.antopie.org/miraty/libreqr) ++ Démonstration : [Démo](https://qr.antopie.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/qr](https://github.com/YunoHost-Apps/qr_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/qr/issues](https://github.com/YunoHost-Apps/qr_ynh/issues) diff --git a/pages/04.applications/10.docs/qr/app_qr.md b/pages/04.applications/10.docs/qr/app_qr.md new file mode 100644 index 00000000..7ca24c0c --- /dev/null +++ b/pages/04.applications/10.docs/qr/app_qr.md @@ -0,0 +1,23 @@ +--- +title: LibreQR +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_qr' +--- + +[![Installer LibreQR with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=qr) [![Integration level](https://dash.yunohost.org/integration/qr.svg)](https://dash.yunohost.org/appci/app/qr) + +*LibreQR* is a web interface for generating QR codes. + +### Screenshots + +![Screenshot of LibreQR](https://code.antopie.org/miraty/qr_ynh/media/branch/master/doc/screenshots/screenshot.png) + +## Useful links + ++ Website: [code.antopie.org/miraty/libreqr](https://code.antopie.org/miraty/libreqr) ++ Demonstration: [Demo](https://qr.antopie.org/) ++ Application software repository: [github.com - YunoHost-Apps/qr](https://github.com/YunoHost-Apps/qr_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/qr/issues](https://github.com/YunoHost-Apps/qr_ynh/issues) diff --git a/pages/04.applications/10.docs/question2answer/app_question2answer.fr.md b/pages/04.applications/10.docs/question2answer/app_question2answer.fr.md new file mode 100644 index 00000000..1245c6e2 --- /dev/null +++ b/pages/04.applications/10.docs/question2answer/app_question2answer.fr.md @@ -0,0 +1,29 @@ +--- +title: Question2Answer +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_question2answer' +--- + +[![Installer Question2Answer avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=question2answer) [![Integration level](https://dash.yunohost.org/integration/question2answer.svg)](https://dash.yunohost.org/appci/app/question2answer) + +*Question2Answer* (Q2A) est une plateforme de Questions/Réponses pour PHP/MySQL.. + +### Captures d'écran + +![Capture d'écran de Question2Answer](https://github.com/YunoHost-Apps/question2answer_ynh/blob/master/doc/screenshots/install_screenshot.png) + +### Avertissements / informations importantes + +### Configuration + +Cette application se configure via son interface administrateur, accessible sur `https://mondomaine/monquestion2answer/index.php/admin/` + +## Liens utiles + ++ Site web : [question2answer.org](https://www.question2answer.org/) ++ Démonstration : [Démo](http://demo.question2answer.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/question2answer](https://github.com/YunoHost-Apps/question2answer_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/question2answer/issues](https://github.com/YunoHost-Apps/question2answer_ynh/issues) diff --git a/pages/04.applications/10.docs/question2answer/app_question2answer.md b/pages/04.applications/10.docs/question2answer/app_question2answer.md new file mode 100644 index 00000000..3e7cab32 --- /dev/null +++ b/pages/04.applications/10.docs/question2answer/app_question2answer.md @@ -0,0 +1,29 @@ +--- +title: Question2Answer +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_question2answer' +--- + +[![Installer Question2Answer with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=question2answer) [![Integration level](https://dash.yunohost.org/integration/question2answer.svg)](https://dash.yunohost.org/appci/app/question2answer) + +*Question2Answer* (Q2A) is a popular open source Q&A platform for PHP/MySQL. + +### Screenshots + +![Screenshot of Question2Answer](https://github.com/YunoHost-Apps/question2answer_ynh/blob/master/doc/screenshots/install_screenshot.png) + +### Disclaimers / important information + +### Configuration + +This app can be configured via its admin panel, available at `https://mydomain/myquestion2answer/index.php/admin/` + +## Useful links + ++ Website: [question2answer.org](https://www.question2answer.org/) ++ Demonstration: [Demo](http://demo.question2answer.org/) ++ Application software repository: [github.com - YunoHost-Apps/question2answer](https://github.com/YunoHost-Apps/question2answer_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/question2answer/issues](https://github.com/YunoHost-Apps/question2answer_ynh/issues) diff --git a/pages/04.applications/10.docs/quizzes/app_quizzes.fr.md b/pages/04.applications/10.docs/quizzes/app_quizzes.fr.md new file mode 100644 index 00000000..43951fa4 --- /dev/null +++ b/pages/04.applications/10.docs/quizzes/app_quizzes.fr.md @@ -0,0 +1,31 @@ +--- +title: Quizzes +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_quizzes' +--- + +[![Installer Quizzes avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=quizzes) [![Integration level](https://dash.yunohost.org/integration/quizzes.svg)](https://dash.yunohost.org/appci/app/quizzes) + +*Quizzes* est une plate-forme de quizz à choix multiples (QCM) avec interface d'analyse des résultats. + +### Captures d'écran + +![Capture d'écran de Quizzes](https://github.com/YunoHost-Apps/quizzes_ynh/blob/master/doc/screenshots/score_par_theme.png) + +### Avertissements / informations importantes + +First time credentials: + +``` +Admin +test +``` + +## Liens utiles + ++ Site web : [github.com/hipay/quizzes/](https://github.com/hipay/quizzes/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/quizzes](https://github.com/YunoHost-Apps/quizzes_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/quizzes/issues](https://github.com/YunoHost-Apps/quizzes_ynh/issues) diff --git a/pages/04.applications/10.docs/quizzes/app_quizzes.md b/pages/04.applications/10.docs/quizzes/app_quizzes.md new file mode 100644 index 00000000..0b7b1ae7 --- /dev/null +++ b/pages/04.applications/10.docs/quizzes/app_quizzes.md @@ -0,0 +1,31 @@ +--- +title: Quizzes +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_quizzes' +--- + +[![Installer Quizzes with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=quizzes) [![Integration level](https://dash.yunohost.org/integration/quizzes.svg)](https://dash.yunohost.org/appci/app/quizzes) + +*Quizzes* is a multiple choice quiz platform with results analysis interface. + +### Screenshots + +![Screenshot of Quizzes](https://github.com/YunoHost-Apps/quizzes_ynh/blob/master/doc/screenshots/score_par_theme.png) + +### Disclaimers / important information + +First time credentials: + +``` +Admin +test +``` + +## Useful links + ++ Website: [github.com/hipay/quizzes/](https://github.com/hipay/quizzes/) ++ Application software repository: [github.com - YunoHost-Apps/quizzes](https://github.com/YunoHost-Apps/quizzes_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/quizzes/issues](https://github.com/YunoHost-Apps/quizzes_ynh/issues) diff --git a/pages/04.applications/10.docs/radicale/app_radicale.fr.md b/pages/04.applications/10.docs/radicale/app_radicale.fr.md new file mode 100644 index 00000000..6eae0c51 --- /dev/null +++ b/pages/04.applications/10.docs/radicale/app_radicale.fr.md @@ -0,0 +1,126 @@ +--- +title: Radicale +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_radicale' +--- + +*Radicale* est un serveur de calendrier et de contact CalDAV/CardDAV. Il ne dispose pas d’interface graphique d’administration. + +Radicale est installé par défaut avec le client web InfCloud qui permettra de visualiser et de modifier vos calendriers et carnets d’adresses. + +Pour connecter un autre client au serveur radicale, il faut renseigner ces adresses : + +### Collection CalDAV/CardDAV complète d’un utilisateur + +- URL : https://domain.tld/path/user/ +- Exemple : https://example.org/radicale/moi/ + +### Pour connecter un calendrier en particulier + +- URL : https://domain.tld/path/user/calendar.ics/ +- Exemple : https://example.org/radicale/moi/calendar.ics/ + +### Pour connecter un carnet d’adresses en particulier + +- URL : https://domain.tld/path/user/AddressBook.vcf/ +- Exemple : https://example.org/radicale/moi/AddressBook.vcf/ + +### Créer un nouveau calendrier ou un nouveau carnet d’adresses + +Créer un nouveau calendrier ou un nouveau carnet d’adresses est très simple avec radicale, il suffit d’y accéder ! Radicale créera tout nouveau calendrier ou carnet d’adresses inexistant si vous tentez d’y accéder. + +Il suffit donc de se connecter (comme précédemment) à un calendrier ou un carnet d’adresses inexistant pour le créer. +Cela peut être fait simplement avec un navigateur, pour le voir apparaître dans une collection déjà connectée à un client. + +### Accéder à un calendrier ou un carnet d’adresses d’un autre utilisateur + +Les adresses précédentes fonctionnent également pour accéder à des ressources n’appartenant pas à l’utilisateur authentifié. + +> Exemple : +> User1 peut se connecter à la collection de user2 +> https://example.org/radicale/user2/ +> Il lui suffira d’indiquer le login et mot de passe de user1. +> Ce sont les règles de partage (voir ci-dessous) qui permettront ou pas à user1 de voir le contenu de la collection de user2. +> Par défaut, aucun partage n’est autorisé. + +--- + +### Configurer les droits d’accès et les partages de calendriers et de carnets d’adresses + +Par défaut, tout utilisateur a le droit de lecture et d’écriture sur ses propres calendriers et carnets d’adresses. +Il est toutefois possible d’affiner ces règles par défaut et d’autoriser des partages en autorisant des utilisateurs à accéder à des ressources ne leurs appartenant pas. +Les règles régissant ces droits doivent être inscrite dans le fichier */etc/radicale/rights* + +Chaque règle se présente sous cette forme : + +```bash +## Commentaire précédant la règle et l’expliquant (optionnel évidemment) +[Nom de la règle] +user: utilisateur concerné +collection: calendrier, carnet ou collection concernée. +permission: permission, r (lecture), w (écriture) ou rw (lecture/écriture) +``` + +Le fichier *rights* contient plusieurs exemples pouvant être exploités. +Pour valider les modifications apportées au fichier */etc/radicale/rights*, radicale doit être rechargé via le service uWSGI. + +```bash +sudo service uwsgi restart +``` + +### Partager des ressources + +Pour partager un calendrier ou un carnet d’adresses, il suffit d’écrire une règle le permettant. Le partage peut se faire avec un autre utilisateur. + +```bash +user: ^user1$ +collection: ^user2/shared2.ics$ +permission: rw +``` + +Ou publiquement pour un utilisateur distant n’utilisant pas le même serveur. + +```bash +user: .* +collection: ^user2/shared2$ +permission: r +``` + +Dans les deux cas, le partage ne fonctionnera qu’en utilisant l’adresse complète du calendrier ou de la collection. Autrement dit, les partages n’apparaissent pas dans la collection d’un utilisateur. +Cette limitation peut s’avérer bloquante pour des clients gérant une seule collection, tel que InfCloud. Pour ce cas particulier, une solution permet de contourner ce problème. + +#### Partager des ressources directement dans la collection d’un utilisateur + +> Cette solution est fonctionnelle, mais reste du bidouillage... + +Pour permettre à un partage d’apparaître directement dans la collection d’un utilisateur, il faut exploiter l’usage des fichiers sous Radicale. +En créant simplement un lien symbolique de la ressource à partager. + +```bash +ln -sr user2/shared.ics user1/user2_shared.ics +``` + +La ressource partagée devient ainsi une ressource de la collection de user1, alors qu’elle reste physiquement dans la collection de user2. +En revanche, sans avoir recours à des règles pour chaque ressource de la collection de user1, la règle générale s’applique. user1 obtient donc le droit de lecture ET d’écriture par défaut sur la ressource partagée, car elle fait partie de sa collection. + +--- + +### Rendre le log de Radicale plus loquace + +Par défaut, le log de Radicale est réglé sur INFO. Ce mode épargne le disque dur mais ne permet pas de débugger Radicale en cas de problème. +Pour passer Radicale en mode DEBUG, il faut éditer le fichier */etc/radicale/logging* et passer INFO à DEBUG dans les sections *[logger_root]* et *[handler_file]* puis recharger le service uWSGI. +Dès lors, le log affiche toutes les requêtes qui sont faites à Radicale ainsi que l’analyse du fichier *rights*. +Il est toutefois déconseillé de rester sur ce mode, car le log se remplie très rapidement. + +--- + +### Modifier la configuration de InfCloud + +La configuration de InfCloud se trouve dans le fichier *infcloud/config.js* +Pour prendre en compte une modification dans le fichier *config.js* (ou tout autre fichier de InfCloud) il faut recharger le cache avec le script fourni. +```bash +sudo ./cache_update.sh +``` diff --git a/pages/04.applications/10.docs/radicale/app_radicale.md b/pages/04.applications/10.docs/radicale/app_radicale.md new file mode 100644 index 00000000..0adbf716 --- /dev/null +++ b/pages/04.applications/10.docs/radicale/app_radicale.md @@ -0,0 +1,125 @@ +--- +title: Radicale +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_radicale' +--- + +*Radicale* is a calendar and contact server CalDAV/CardDAV. It does not have a graphical administration interface. + +Radicale is installed by default with the web client InfCloud that will view and edit your calendars and address books. + +To connect another client to radical, we must inform these addresses: + +### Complete CalDAV/CardDAV collection of a user + +- URL: https://domain.tld/path/user/ +- Exemple : https://example.org/radicale/me/ + +### To connect a calendar in particular + +- URL: https://domain.tld/path/user/calendar.ics/ +- Exemple: https://example.org/radicale/me/calendar.ics/ + +### To connect an address book in particular + +- URL: https://domain.tld/path/user/AddressBook.vcf/ +- Exemple: https://example.org/radicale/me/AddressBook.vcf/ + +### Create a new schedule or a new address book + +Create a new schedule or a new address book is very simple with Radicale, just go there! Radicale creates all new calendar or notebook to nonexistent addresses if you try to access it. +So just log on (as before) to a calendar or a nonexistent address book to create it. +This can be done simply with a browser, to appear in a collection already connected to a client. + +### Go to a calendar or an address book of another user + +Previous addresses also work to access resources not owned by the authenticated user. + +> Example: +> User1 can connect to the collection of user2 +> https://example.org/radicale/user2/ +> Simply to indicate the login and password of user1. +> It's sharing rules (see below) that will allow or not to user1 to see the contents of the collection of user2. +> By default, no sharing is allowed. + +--- + +### Configure the access rights and sharing of calendars and address books + +By default, any user has the right to read and write on its own calendars and address books. +It is possible to refine these default rules and to allow sharing by allowing users to access their resources do not own. +The rules governing these rights should be included in the */etc/radicale/rights* + +Each rule is in this form: + +```bash +# Comment before rule and explaining that (optional of course): +[Rule Name] +user: user concerned +collection: calendar, book or collection concerned. +permission: permission, r (read), w (write) or rw (read/write) +``` + +*Rights* file contains several examples that can be exploited. +To validate changes to the */etc/radicale/rights* file, radical must be recharged via uWSGI service. + +```bash +sudo service uwsgi restart +``` + +### Share resources + +To share a calendar or address book, just write a rule permitting. Sharing can be done with another user. + +```bash +user: ^user1$ +collection: ^user2/shared2.ics$ +permission: rw +``` + +Or publicly for a remote user does not use the same server. + +```bash +user: .* +collection: ^user2/shared2.ics$ +permission: r +``` + +In both cases, the sharing works only using the full address of the calendar or collection. In other words, the shares do not appear in the collection of a user. +This limitation may be blocking for clients managing a single collection, as InfCloud. In this particular case, a solution overcomes this problem. + +#### Share resources directly in the collection of a user + +> This solution is functional, but is an hack... + +To enable sharing to occur directly in the collection of a user, it must exploit the use of files in Radicale. +By simply creating a symbolic link to the resource sharing. + +```bash +ln -sr user2/shared.ics user1/user2_shared.ics +``` + +The shared resource becomes a resource from the collection of user1, while it physically remains in the collection of user2. +However, without recourse to the rules for each resource in the collection of user1, the general rule applies. user1 gets so read and write access by default on the shared resource because it is part of his collection. + +--- + +### Making Radical log more verbose + +By default, the Radical log is set to INFO. This method savings the hard drive but does not debug Radicale in case of problems. +To pass Radicale in DEBUG mode, edit the */etc/radicale/logging* and change INFO to DEBUG in sections *[logger_root]* and *[handler_file]*. Then reload the uWSGI service. +Now, the log displays all requests that are made to Radicale and analysis of *rights* file. +However, do not stay on this mode because the log is filled very quickly. + +--- + +### Change config of InfCloud + +The configuration of InfCloud is in the *infcloud/config.js* file +To load any changes in the *config.js* file (or other file of InfCloud) must reload the cache with the script provided. +```bash +sudo ./cache_update.sh +``` diff --git a/pages/04.applications/10.docs/rainloop/app_rainloop.fr.md b/pages/04.applications/10.docs/rainloop/app_rainloop.fr.md new file mode 100644 index 00000000..41b80646 --- /dev/null +++ b/pages/04.applications/10.docs/rainloop/app_rainloop.fr.md @@ -0,0 +1,50 @@ +--- +title: Rainloop +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_rainloop' +--- + +![logo de Rainloop](image://rainloop-logo.png?height=100) + +[![Install Rainloop with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=rainloop) [![Integration level](https://dash.yunohost.org/integration/rainloop.svg)](https://dash.yunohost.org/appci/app/rainloop) + +Rainloop est un webmail simple et léger. + +## Configuration + +Pour le configurer après l'installation, veuillez vous rendre sur http://DOMAIN.TLD/rainloop/app/?admin + +- Le nom d'utilisateur admin par défaut est : admin +- Le mot de passe admin par défaut est : Mot de passe choisi lors de l'installation +- Si vous avez oublié votre mot de passe, vous pouvez le retrouver avec `sudo yunohost app setting rainloop password` + +### Carnet d'adresses + +Rainloop intègre par défaut un carnet d'adresse avec les utilisateurs du serveur YunoHost. Chaque utilisateur peut ajouter un carnet d'adresse distant CardDAV via leurs propres paramètres. +- Si vous utilisez Baïkal, l'adresse à renseigner est du type : https://DOMAIN.TLD/baikal/card.php/addressbooks/UTILISATEUR/default/ +- Si vous utilisez Nextcloud, l'adresse à renseigner est du type : https://DOMAIN.TLD/nextcloud/remote.php/carddav/addressbooks/USER/contacts + +### Gestion des domaines + +Les utilisateurs peuvent se servir de Rainloop pour accéder à d'autres boites mail que celle fournie par YunoHost (par exemple gmail.com ou laposte.net). L'option est disponible par le bouton "compte -> ajouter un compte". +L'administrateur doit pour cela autoriser la connexion à des domaines tiers, via une liste blanche dans l'interface administration. + +### Gestion des clés PGP + +Rainloop stocke les clés PGP privées dans le stockage de navigateur. Cela implique que vos clés seront perdues quand vous videz le stockage de navigateur (navigation incognito, changement d'ordinateur, ...). Ce paquet intègre donc [PGPback de chtixof](https://github.com/chtixof/pgpback_ynh) pour que vous puissiez stocker vos clés privées PGP de manière sécurisée sur le serveur. Rendez-vous à l'adresse **http://DOMAIN.TLD/rainloop/pgpback** pour stocker vos clés privées PGP sur le serveur ou les restaurer dans un nouveau navigateur. + +### Mise à jour +Pour mettre à jour Rainloop lorsqu'une nouvelle version est disponible, lancez en console locale (SSH ou autre) : + +`sudo yunohost app upgrade -u https://github.com/YunoHost-Apps/rainloop_ynh rainloop` + +## Liens utiles + ++ Site web : [www.rainloop.net](https://www.rainloop.net/) ++ Documentation officielle : [www.rainloop.net/docs/configuration](https://www.rainloop.net/docs/configuration/) ++ Démonstration : [Démo](https://mail.rainloop.net/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/rainloop](https://github.com/YunoHost-Apps/rainloop_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/rainloop/issues](https://github.com/YunoHost-Apps/rainloop_ynh/issues) diff --git a/pages/04.applications/10.docs/rainloop/app_rainloop.md b/pages/04.applications/10.docs/rainloop/app_rainloop.md new file mode 100644 index 00000000..65b002aa --- /dev/null +++ b/pages/04.applications/10.docs/rainloop/app_rainloop.md @@ -0,0 +1,52 @@ +--- +title: Rainloop +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_rainloop' +--- + +![Rainloop's logo](image://rainloop-logo.png?height=100) + +[![Install Rainloop with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=rainloop) [![Integration level](https://dash.yunohost.org/integration/rainloop.svg)](https://dash.yunohost.org/appci/app/rainloop) + +### Index + +- [Configuration](#configuration) +- [Useful links](#useful-links) + +Rainloop is a lightweight webmail. + +## Configuration + +To configure it, go to http://DOMAIN.TLD/rainloop/app/?admin + +- The default login is: admin +- The default password is: Password chosen during install +- If you lost the admin password, you can retrieve it using `sudo yunohost app setting rainloop password` + +### CardDAV +Each user can add a remote cardDAV server from their own parameters interface. + +- If you use Baïkal, the CardDAV address is: https://DOMAIN.TLD/baikal/card.php/addressbooks/USER/default/ +- If you use Nextcloud, the CardDAV address is: https://DOMAIN.TLD/nextcloud/remote.php/carddav/addressbooks/USER/contacts + +### Domains +Users can use Rainloop to access mailboxes other than the one provided by YunoHost (e.g. gmail.com or live.com). The option is available through the "account -> add an account" button. +The administrator must authorize the connection to third party domains, via a white list in the administration interface. + +### PGP Keys +Rainloop saves your PGP private keys in the browser storage. This means that you will loose your private keys if you clear your browser storage (e.g., private browsing, different computer...). This packages integrates [PGPback by chtixof](https://github.com/chtixof/pgpback_ynh) so you can store your PGP private keys on the server securely. Go to **http://DOMAIN.TLD/rainloop/pgpback** to backup your PGP keys on the server or restore them. + +### Upgrade +To upgrade the app once a new rainloop version is available, simply run in a local shell via ssh or otherwise: +`sudo yunohost app upgrade -u https://github.com/YunoHost-Apps/rainloop_ynh rainloop` + +## Useful links + ++ Website : [www.rainloop.net](https://www.rainloop.net/) ++ Official documentation : [www.rainloop.net/docs/configuration](https://www.rainloop.net/docs/configuration/) ++ Demonstration : [Demo](https://mail.rainloop.net/) ++ Application software repository : [github.com - YunoHost-Apps/rainloop](https://github.com/YunoHost-Apps/rainloop_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/rainloop/issues](https://github.com/YunoHost-Apps/rainloop_ynh/issues) diff --git a/pages/04.applications/10.docs/retroarch/app_retroarch.fr.md b/pages/04.applications/10.docs/retroarch/app_retroarch.fr.md new file mode 100644 index 00000000..f374c776 --- /dev/null +++ b/pages/04.applications/10.docs/retroarch/app_retroarch.fr.md @@ -0,0 +1,40 @@ +--- +title: Retroarch Web Player +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_retroarch' +--- + +[![Installer RetroArch avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=retroarch) [![Integration level](https://dash.yunohost.org/integration/retroarch.svg)](https://dash.yunohost.org/appci/app/retroarch) + +*RetroArch* est une interface pour les émulateurs, les moteurs de jeux et les lecteurs multimédias. +Il vous permet d'exécuter des jeux classiques sur un large éventail d'ordinateurs et de consoles grâce à son interface graphique élégante. Les paramètres sont également unifiés afin que la configuration soit effectuée une fois pour toutes. +En outre, vous êtes en mesure d'exécuter des disques de jeux originaux (CD) à partir de RetroArch. +RetroArch dispose de fonctions avancées telles que les shaders, le netplay, le rembobinage, les temps de réponse de l'image suivante, le runahead, la traduction automatique, les fonctions d'accessibilité aux aveugles, et bien plus encore ! + +### Captures d'écran + +![Captures d'écran de RetroArch](https://github.com/YunoHost-Apps/retroarch_ynh/blob/master/doc/screenshots/ozone-main-menu.jpg) + +### Avertissements / informations importantes + +#### Bibliothèque partagée + +Même si vous pouvez uploader une ROM depuis l'application, RetroArch peut accéder à celle déjà sur votre serveur: +* Les jeux sont situés dans `/opt/yunohost/retroarch/assets/cores`. Un lien symbolique est créé vers `/home/yunohost.multimedia/share/Games` de façon à ce que vous puissiez les y mettre facilement. +* Les cores doivent être indexés pour fonctionner : le script `/opt/yunohost/retroarch/indexer.sh` tourne toutes les 5 minutes pour indexer tous les jeux dans `opt/yunohost/retroarch/assets/cores` + +#### Limitations + +* On ne peut pas sauvegarder. En fait, on ne peut pas écrire dans les fichiers du tout, donc la configuration est perdue à chaque fois... +* Pas de gestion d'utilisateurs +* Certains cores sont listés mais ne sont pas implémentés : ils ne fonctionnent donc pas, le problème vient de l'application elle même. + +## Liens utiles + ++ Site web : [retroarch.com](https://www.retroarch.com/) ++ Démonstration : [Démo](https://web.libretro.com/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/retroarch](https://github.com/YunoHost-Apps/retroarch_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/retroarch/issues](https://github.com/YunoHost-Apps/retroarch_ynh/issues) diff --git a/pages/04.applications/10.docs/retroarch/app_retroarch.md b/pages/04.applications/10.docs/retroarch/app_retroarch.md new file mode 100644 index 00000000..9438a011 --- /dev/null +++ b/pages/04.applications/10.docs/retroarch/app_retroarch.md @@ -0,0 +1,38 @@ +--- +title: Retroarch Web Player +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_retroarch' +--- + +[![Installer RetroArch with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=retroarch) [![Integration level](https://dash.yunohost.org/integration/retroarch.svg)](https://dash.yunohost.org/appci/app/retroarch) + +*Retroarch Web Player* is a frontend for emulators, game engines and media players. It enables you to run classic games on a wide range of computers and consoles through its slick graphical interface. Settings are also unified so configuration is done once and for all. In addition to this, you are able to run original game discs (CDs) from RetroArch. RetroArch has advanced features like shaders, netplay, rewinding, next-frame response times, runahead, machine translation, blind accessibility features, and more! + +### Screenshots + +![Screenshots of Retroarch Web Player](https://github.com/YunoHost-Apps/retroarch_ynh/blob/master/doc/screenshots/ozone-main-menu.jpg) + +### Disclaimers / important information + +#### Use Shared ROMs library + +Although you can upload a ROM at runtime, retroarch may have access to the ROMs you already have on your server: + +* Games are located in `/opt/yunohost/retroarch/assets/cores`. A symbolic link is created to this folder in `/home/yunohost.multimedia/share/Games`, so that you can place your games from here +* cores have to be indexed to work : script `/opt/yunohost/retroarch/indexer.sh` run every 5 minutes to index all games in `opt/yunohost/retroarch/assets/cores` + +#### Limitations + +* Cannot save game, in fact, cannot write at all... so configuration is lost each time you start again +* No user management +* Some core are listed but not implemented : they do not work, the issue is from the upstream app. + +## Useful links + ++ Website: [retroarch.com](https://www.retroarch.com/) ++ Demonstration: [Demo](https://web.libretro.com/) ++ Application software repository: [github.com - YunoHost-Apps/retroarch](https://github.com/YunoHost-Apps/retroarch_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/retroarch/issues](https://github.com/YunoHost-Apps/retroarch_ynh/issues) diff --git a/pages/04.applications/10.docs/roundcube/app_roundcube.fr.md b/pages/04.applications/10.docs/roundcube/app_roundcube.fr.md new file mode 100644 index 00000000..3704bdf1 --- /dev/null +++ b/pages/04.applications/10.docs/roundcube/app_roundcube.fr.md @@ -0,0 +1,37 @@ +--- +title: Roundcube +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_roundcube' +--- + +![logo de roundcube](image://roundcube_logo.svg?resize=,80) + +[![Install Roundcube with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=roundcube) [![Integration level](https://dash.yunohost.org/integration/roundcube.svg)](https://dash.yunohost.org/appci/app/roundcube) + +*Roundcube* est un client web de courrier électronique libre ou aussi appelé un webmail. + +### Synchronisation des contacts + +Roundcube vous propose à l'installation, via un greffon tiers, de pouvoir synchroniser vos contacts avec un serveur CardDAV. Utiliser un serveur CardDAV comme Baïkal ou l’application « Contacts » de Nextcloud, tous deux disponibles pour YunoHost, a l’avantage de permettre une gestion centralisée de vos contacts. + +De la même façon que le protocole IMAP vous permet de synchroniser vos courriels avec votre serveur mail, CardDAV vous permet d’avoir accès à vos contacts depuis une multitude de clients, dont Roundcube. Avec CardDAV, nous n’aurez donc plus besoin d’importer vos contacts dans chaque client. + +Notez que si Baïkal ou Nextcloud sont déjà installés, les carnets d'adresses qui y sont définis seront automatiquement ajoutés pour chaque utilisateur dans Roundcube. + +---- + +Si vous avez installé Nextcloud après, voici comment ajouter vos carnets d'adresses : + +* Rendez-vous dans la section « Contacts » de votre espace Nextcloud et cliquez sur l’icône représentant une roue dentée en bas à gauche. Ensuite, cliquez sur l’icône « Lien CardDAV » et copiez l’URL qui s’affiche en dessous. +* Rendez-vous ensuite dans la section CardDAV des paramètres de Roundcube et entrez « nextcloud » dans le champ « Label », collez l’URL que vous venez de copier et enfin entrez votre nom d’utilisateur et votre mot de passe. Vos contacts sont désormais synchronisés ! + +## Liens utiles + ++ Site web : [roundcube.net](https://roundcube.net/) ++ Documentation officielle : [github.com/roundcube/roundcubemail/wiki](https://github.com/roundcube/roundcubemail/wiki) ++ Démonstration : [Démo](https://demo.yunohost.org/webmail/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/roundcube](https://github.com/YunoHost-Apps/roundcube_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/roundcube/issues](https://github.com/YunoHost-Apps/roundcube_ynh/issues) diff --git a/pages/04.applications/10.docs/roundcube/app_roundcube.md b/pages/04.applications/10.docs/roundcube/app_roundcube.md new file mode 100644 index 00000000..9e285b31 --- /dev/null +++ b/pages/04.applications/10.docs/roundcube/app_roundcube.md @@ -0,0 +1,37 @@ +--- +title: Roundcube +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_roundcube' +--- + +![Roundcube's logo](image://roundcube_logo.svg?resize=,80) + +[![Install Roundcube with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=roundcube) [![Integration level](https://dash.yunohost.org/integration/roundcube.svg)](https://dash.yunohost.org/appci/app/roundcube) + +*Roundcube* is a web client for email messaging also called webmail. + +### Synchronize your contacts + +Roundcube offers you at the installation to synchronize your contacts with a CardDAV server, through a third party plugin. Using a CardDAV server like Baïkal or Nextcloud's "Contacts" application, both available in YunoHost, allows you to centralize and manage your contacts. + +Similarly to IMAP that allows you to synchronize your emails with your mail server, CardDAV allows you to access your contacts through multiple clients, such as Roundcube. Thanks to CardDAV, you will not have to import your contacts in each of your devices. + +Note that addressbooks defined in Baïkal or Nextcloud will be automatically added in Roundcube for each user if they are already installed. + +---- + +In case you've installed Nextcloud after, here is how to add your addressbooks: + +* Go to "Contacts" section of your Nextcloud application and click on the gear wheel icon located at the bottom left. Then, click on "CardDAV link" and copy the URL that appeared. +* Go to Roundcube's CardDAV section and type in "nextcloud" in "Label" field, paste the previously copied URL and type your username and password. Your contacts are now synchronized! + +## Useful links + ++ Website : [roundcube.net](https://roundcube.net/) ++ Official documentation : [github.com/roundcube/roundcubemail/wiki](https://github.com/roundcube/roundcubemail/wiki) ++ Demonstration : [Demo](https://demo.yunohost.org/webmail/) ++ Application software repository : [github.com - YunoHost-Apps/roundcube](https://github.com/YunoHost-Apps/roundcube_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/roundcube/issues](https://github.com/YunoHost-Apps/roundcube_ynh/issues) diff --git a/pages/04.applications/10.docs/rss-bridge/app_rss-bridge.fr.md b/pages/04.applications/10.docs/rss-bridge/app_rss-bridge.fr.md new file mode 100644 index 00000000..82f6f291 --- /dev/null +++ b/pages/04.applications/10.docs/rss-bridge/app_rss-bridge.fr.md @@ -0,0 +1,71 @@ +--- +title: RSS-Bridge +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_rss-bridge' +--- + +[![Installer RSS-Bridge avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=rss-bridge) [![Integration level](https://dash.yunohost.org/integration/rss-bridge.svg)](https://dash.yunohost.org/appci/app/rss-bridge) + +*RSS-Bridge* est un projet PHP capable de générer des flux RSS et Atom pour les sites web qui n'en ont pas. Il peut être utilisé sur des serveurs web ou comme une application autonome en mode CLI. + +Important : RSS-Bridge n'est pas un lecteur de flux ou un agrégateur de flux, mais un outil pour générer des flux qui sont consommés par des lecteurs de flux et des agrégateurs de flux. Vous trouverez une liste d'agrégateurs de flux sur Wikipedia. + +#### Sites/pages supportés (principal) + + * `FlickrExplore` : [Dernières images intéressantes](http://www.flickr.com/explore) de Flickr + * `GoogleSearch` : Les résultats les plus récents de la recherche Google. + * `GooglePlus` : Les messages les plus récents de la chronologie de l'utilisateur. + * `Twitter` : Recherche par mot-clé/hashtag ou ligne de temps de l'utilisateur. + * `Identi.ca` : Chronologie de l'utilisateur Identica (devrait être compatible avec les autres instances Pump.io) + * YouTube : chaîne, liste de lecture ou recherche d'un utilisateur de YouTube. + * `Cryptome` : Retourne les documents les plus récents de [Cryptome.org](http://cryptome.org/) + * `DansTonChat` : Les citations les plus récentes de [danstonchat.com](http://danstonchat.com/) + * `DuckDuckGo` : Résultats les plus récents de [DuckDuckGo.com](https://duckduckgo.com/) + * `Instagram` : Les photos les plus récentes d'un utilisateur d'Instagram + * `OpenClassrooms` : Les derniers tutoriels de [fr.openclassrooms.com](http://fr.openclassrooms.com/) + * `Pinterest` : Les photos les plus récentes d'un utilisateur ou d'une recherche + * `ScmbBridge` : Les histoires les plus récentes de [secouchermoinsbete.fr](http://secouchermoinsbete.fr/) + * `Wikipedia` : articles en surbrillance de [Wikipedia](https://wikipedia.org/) en anglais, allemand, français ou espéranto. + * `Bandcamp` : renvoie la dernière version de [bandcamp](https://bandcamp.com/) pour un tag + * `ThePirateBay` : Retourne les derniers torrents indexés de [The Pirate Bay](https://thepiratebay.se/) avec des mots-clés. + * `Facebook` : Retourne les dernières publications sur une page ou un profil sur [Facebook](https://facebook.com/) + +Plus [de nombreux autres ponts](bridges/) à activer, grâce à la communauté + +#### Format de sortie + +Le format de sortie peut prendre plusieurs formes : + + * `Atom` : Fil ATOM, à utiliser dans les lecteurs RSS/Feed. + * `Mrss` : Flux MRSS, à utiliser dans les lecteurs RSS/Feed. + * `Json` : Json, pour la lecture par d'autres applications. + * `Html` : Page html simple. + * `Plaintext` : Texte brut (objet php, tel que retourné par print_r). + +### Captures d'écran + +![Capture d'écran de RSS-Bridge](https://github.com/YunoHost-Apps/rss-bridge_ynh/blob/master/doc/screenshots/screenshot_rss-bridge_welcome.png) + +### Avertissements / informations importantes + +### Configuration + +#### Activation/désactivation des ponts + +Par défaut, le script crée `whitelist.txt` et ajoute les ponts principaux (voir ci-dessus). Vous pouvez le modifier : + + * pour activer les ponts supplémentaires (un pont par ligne) + * pour désactiver les ponts principaux (supprimer la ligne) + * pour activer tous les ponts (juste un joker `*` comme contenu du fichier) + +Pour des raisons de simplicité, ce paquet YunoHost active tous les ponts par défaut. + +## Liens utiles + ++ Site web : [github.com/RSS-Bridge/rss-bridge](https://github.com/RSS-Bridge/rss-bridge) ++ Démonstration : [Démo](https://wtf.roflcopter.fr/rss-bridge/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/rss-bridge](https://github.com/YunoHost-Apps/rss-bridge_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/rss-bridge/issues](https://github.com/YunoHost-Apps/rss-bridge_ynh/issues) diff --git a/pages/04.applications/10.docs/rss-bridge/app_rss-bridge.md b/pages/04.applications/10.docs/rss-bridge/app_rss-bridge.md new file mode 100644 index 00000000..9759fc66 --- /dev/null +++ b/pages/04.applications/10.docs/rss-bridge/app_rss-bridge.md @@ -0,0 +1,71 @@ +--- +title: RSS-Bridge +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_rss-bridge' +--- + +[![Installer RSS-Bridge with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=rss-bridge) [![Integration level](https://dash.yunohost.org/integration/rss-bridge.svg)](https://dash.yunohost.org/appci/app/rss-bridge) + +*RSS-Bridge* is a PHP project capable of generating RSS and Atom feeds for websites that don't have one. It can be used on webservers or as a stand-alone application in CLI mode. + +Important: RSS-Bridge is not a feed reader or feed aggregator, but a tool to generate feeds that are consumed by feed readers and feed aggregators. Find a list of feed aggregators on Wikipedia. + +#### Supported sites/pages (main) + + * `FlickrExplore` : [Latest interesting images](http://www.flickr.com/explore) from Flickr + * `GoogleSearch` : Most recent results from Google Search + * `GooglePlus` : Most recent posts of user timeline + * `Twitter` : Return keyword/hashtag search or user timeline + * `Identi.ca` : Identica user timeline (Should be compatible with other Pump.io instances) + * `YouTube` : YouTube user channel, playlist or search + * `Cryptome` : Returns the most recent documents from [Cryptome.org](http://cryptome.org/) + * `DansTonChat`: Most recent quotes from [danstonchat.com](http://danstonchat.com/) + * `DuckDuckGo`: Most recent results from [DuckDuckGo.com](https://duckduckgo.com/) + * `Instagram`: Most recent photos from an Instagram user + * `OpenClassrooms`: Lastest tutorials from [fr.openclassrooms.com](http://fr.openclassrooms.com/) + * `Pinterest`: Most recent photos from user or search + * `ScmbBridge`: Newest stories from [secouchermoinsbete.fr](http://secouchermoinsbete.fr/) + * `Wikipedia`: highlighted articles from [Wikipedia](https://wikipedia.org/) in English, German, French or Esperanto + * `Bandcamp` : Returns last release from [bandcamp](https://bandcamp.com/) for a tag + * `ThePirateBay` : Returns the newest indexed torrents from [The Pirate Bay](https://thepiratebay.se/) with keywords + * `Facebook` : Returns the latest posts on a page or profile on [Facebook](https://facebook.com/) + +Plus [many other bridges](bridges/) to enable, thanks to the community + +#### Output format + +Output format can take several forms: + + * `Atom` : ATOM Feed, for use in RSS/Feed readers + * `Mrss` : MRSS Feed, for use in RSS/Feed readers + * `Json` : Json, for consumption by other applications. + * `Html` : Simple html page. + * `Plaintext` : raw text (php object, as returned by print_r) + +### Screenshots + +![Screenshots of RSS-Bridge](https://github.com/YunoHost-Apps/rss-bridge_ynh/blob/master/doc/screenshots/screenshot_rss-bridge_welcome.png) + +### Disclaimers / important information + +### Configuration + +#### Enabling/Disabling bridges + +By default, the script creates `whitelist.txt` and adds the main bridges (see above). you can edit it: + + * to enable extra bridges (one bridge per line) + * to disable main bridges (remove the line) + * to enable all bridges (just one wildcard `*` as file content) + +As a matter of simplicity, this YunoHost package enables every bridge by default. + +## Useful links + ++ Website: [github.com/RSS-Bridge/rss-bridge](https://github.com/RSS-Bridge/rss-bridge) ++ Demonstration: [Demo](https://wtf.roflcopter.fr/rss-bridge/) ++ Application software repository: [github.com - YunoHost-Apps/rss-bridge](https://github.com/YunoHost-Apps/rss-bridge_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/rss-bridge/issues](https://github.com/YunoHost-Apps/rss-bridge_ynh/issues) diff --git a/pages/04.applications/10.docs/seafile/app_seafile.fr.md b/pages/04.applications/10.docs/seafile/app_seafile.fr.md new file mode 100644 index 00000000..12305a31 --- /dev/null +++ b/pages/04.applications/10.docs/seafile/app_seafile.fr.md @@ -0,0 +1,100 @@ +--- +title: Seafile +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_seafile' +--- + +[![Installer Seafile avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=seafile) [![Integration level](https://dash.yunohost.org/integration/seafile.svg)](https://dash.yunohost.org/appci/app/seafile) + +*Seafile* est une application open source de stockage en ligne (cloud). + +Il s'agit d'une plateforme de synchronisation et de partage de fichiers d'entreprise avec une fiabilité et des performances élevées. Il s'agit d'une plateforme d'hébergement de fichiers avec une fiabilité et des performances élevées. Placez des fichiers sur votre propre serveur. Synchronisez et partagez des fichiers sur différents appareils, ou accédez à tous les fichiers sous forme de disque virtuel. + +### Captures d'écran + +![Capture d'écran de Seafile](https://github.com/YunoHost-Apps/seafile_ynh/blob/master/doc/screenshots/access-logs.jpg) + +### Avertissements / informations importantes + +#### Support multi-utilisateurs + +Cette application supporte LDAP et l'authentification SSO. + +Si vous avez installé Seafile avant 7.x et que vous avez plus d'un domaine pour les utilisateurs dans YunoHost ou que l'application Seafile est installée sur un domaine différent, vous devez migrer vos comptes. +Vous pouvez utiliser l'action fournie à `https://domain.tld/yunohost/admin/#/apps/seafile/actions`. Vous pouvez également utiliser la commande suivante pour migrer tous vos comptes : +``` +yunohost app action run seafile migrate_user_email_to_mail_email +``` +Voir [issue#44](https://github.com/YunoHost-Apps/seafile_ynh/issues/44) +pour plus d'information. + +#### Les architectures prises en charge + +Depuis Seafile 6.3, l'architecture i386 n'est plus supportée. + +Seafile ne distribue pas de binaire pour les architectures génériques armhf mais les binaires rpi fonctionnent généralement sur toutes les cartes arm. + +#### Informations complémentaires + +#### Installation + +Depuis la ligne de commande : + +``` +yunohost app install seafile +``` + +#### Mise à niveau + +Par défaut, une sauvegarde est effectuée avant la mise à niveau. Pour éviter cela, vous avez les possibilités suivantes : +- Passez la variable env `NO_BACKUP_UPGRADE` avec `1` à chaque mise à jour. Par exemple `NO_BACKUP_UPGRADE=1 yunohost app upgrade synapse`. +- Définissez le paramètre `disable_backup_before_upgrade` à `1`. Vous pouvez le faire avec cette commande : +``` +yunohost app setting synapse disable_backup_before_upgrade -v 1 +``` + +Après cela, les paramètres seront appliqués pour **toutes** les prochaines mises à jour. + +En ligne de commande : + +``` +yunohost app upgrade seafile +``` + +#### Sauvegarde + +Cette application utilise maintenant la fonctionnalité de sauvegarde intégré à YunoHost. Pour conserver l'intégrité des données et avoir une meilleure garantie de restauration, il est recommandé de procéder comme suit : + +- Arrêtez le service seafile avec la commande suivante : +``` +systemctl stop seafile.service seahub.service +``` +- Lancez la sauvegarde de seafile avec la commande suivante : +``` +yunohost backup create --app seafile +``` +- Faites une sauvegarde de vos données avec votre stratégie spécifique (cela peut être avec rsync, borg backup ou juste cp). Les données sont stockées dans `/home/yunohost.app/seafile-data`. +- Redémarrez le service seafile avec cette commande : +``` +systemctl start seafile.service seahub.service +``` + +#### Désinstallation + +En raison de la fonctionnalité de sauvegarde du noyau uniquement, le répertoire de données dans `/home/yunohost.app/seafile-data` **n'est pas supprimé**. Il doit être supprimé manuellement pour purger les données des utilisateurs de l'application. + +#### Changer l'URL + +Depuis maintenant, il est possible de changer le domaine ou l'url de seafile. + +Pour cela lancez : `yunohost app change-url seafile -d new_domain.tld -p PATH new_path`. + +## Liens utiles + ++ Site web : [seafile.com](https://www.seafile.com/en/home/) ++ Démonstration : [Démo](https://demo.seafile.com/accounts/login/?next=/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/seafile](https://github.com/YunoHost-Apps/seafile_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/seafile/issues](https://github.com/YunoHost-Apps/seafile_ynh/issues) diff --git a/pages/04.applications/10.docs/seafile/app_seafile.md b/pages/04.applications/10.docs/seafile/app_seafile.md new file mode 100644 index 00000000..575bb9e1 --- /dev/null +++ b/pages/04.applications/10.docs/seafile/app_seafile.md @@ -0,0 +1,120 @@ +--- +title: Seafile +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_seafile' +--- + +[![Installer Seafile with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=seafile) [![Integration level](https://dash.yunohost.org/integration/seafile.svg)](https://dash.yunohost.org/appci/app/seafile) + +*Seafile* is an open Source Cloud Storage application. + +It's a Enterprise file sync and share platform with high reliability and performance. It's a file hosting platform with high reliability and performance. Put files on your own server. Sync and share files across different devices, or access all the files as a virtual disk. + +### Screenshots + +![Screenshot of Seafile](https://github.com/YunoHost-Apps/seafile_ynh/blob/master/doc/screenshots/access-logs.jpg) + +### Disclaimers / important information + +#### Multi-users support + +This app support LDAP and the SSO authentification. + +If you have Seafile installed before 7.x and you have more than one domain for users in Yunohost or Seafile app is installed on a different domain, you need to migrate your accounts. +You can use the provided action at https://domain.tld/yunohost/admin/#/apps/seafile/actions. You can also use this following command to migrate all of your accounts: +``` +yunohost app action run seafile migrate_user_email_to_mail_email +``` +See [issue#44](https://github.com/YunoHost-Apps/seafile_ynh/issues/44) +for more information. + +#### Supported architectures + +Since seafile 6.3 the i386 architecture is no more supported. + +Seafile don't distribute binary for generic armhf architectures but rpi binary generally work on all arm board. + +#### Additional informations + +#### Links + + * Report a bug: https://github.com/YunoHost-Apps/seafile_ynh/issues + * App website: https://www.seafile.com + * YunoHost website: https://yunohost.org/ + +--- + +#### Install + +From command line: + +`yunohost app install seafile` + +#### Upgrade + +By default a backup is made before the upgrade. To avoid this you have theses following possibilites: +- Pass the `NO_BACKUP_UPGRADE` env variable with `1` at each upgrade. By example `NO_BACKUP_UPGRADE=1 yunohost app upgrade synapse`. +- Set the settings `disable_backup_before_upgrade` to `1`. You can set this with this command: +``` +yunohost app setting synapse disable_backup_before_upgrade -v 1 +``` + +After this settings will be applied for **all** next upgrade. + +From command line: +``` +yunohost app upgrade seafile +``` + +#### Backup + +This app use now the core-only feature of the backup. To keep the integrity of the data and to have a better guarantee of the restoration is recommended to proceed like this: + +- Stop seafile service with theses following command: +``` +systemctl stop seafile.service seahub.service +``` +- Launch the backup of seafile with this following command: +``` +yunohost backup create --app seafile +``` +- Do a backup of your data with your specific strategy (could be with rsync, borg backup or just cp). The data is stored in `/home/yunohost.app/seafile-data`. +- Restart the seafile service with theses command: +``` +systemctl start seafile.service seahub.service +``` + +#### Remove + +Due of the backup core only feature the data directory in `/home/yunohost.app/seafile-data` **is not removed**. It need to be removed manually to purge app user data. + +#### Change URL + +Since now it's possible to change domain or the url of seafile. + +To do this run : `yunohost app change-url seafile -d new_domain.tld -p PATH new_path` + +#### Developers infos + +Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/seafile_ynh/tree/testing). + +To try the testing branch, please proceed like that. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/seafile_ynh/tree/testing --debug +or +sudo yunohost app upgrade seafile -u https://github.com/YunoHost-Apps/seafile_ynh/tree/testing --debug +``` + +TODO + +- Find a way to fix the issue https://github.com/YunoHost-Apps/seafile_ynh/issues/5 + +## Useful links + ++ Website: [seafile.com](https://www.seafile.com/en/home/) ++ Demonstration: [Demo](https://demo.seafile.com/accounts/login/?next=/) ++ Application software repository: [github.com - YunoHost-Apps/seafile](https://github.com/YunoHost-Apps/seafile_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/seafile/issues](https://github.com/YunoHost-Apps/seafile_ynh/issues) diff --git a/pages/04.applications/10.docs/searx/app_searx.fr.md b/pages/04.applications/10.docs/searx/app_searx.fr.md new file mode 100644 index 00000000..f9e04d48 --- /dev/null +++ b/pages/04.applications/10.docs/searx/app_searx.fr.md @@ -0,0 +1,24 @@ +--- +title: Searx +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_searx' +--- + +![logo de searx](image://searx_logo.svg?resize=,80) + +[![Install Searx with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=searx) [![Integration level](https://dash.yunohost.org/integration/searx.svg)](https://dash.yunohost.org/appci/app/searx) + +*Searx* est un métamoteur de recherche libre et décentralisé. Les requêtes effectuées ne sont pas enregistrées par Searx afin de protéger la vie privée des utilisateur·rice·s. +En tant que métamoteur, Searx collecte et affiche les résultats issus de plusieurs dizaines de moteurs de recherche. Les moteurs utilisés (ou non) sont paramétrables dans les préférences. +En tant que logiciel décentralisé, Searx est installé sur différentes instances (différents serveurs). En France, des associations comme Framasoft, Aquilenet ou La Quadrature du Net l'ont installé sur leurs serveurs. + +## Liens utiles + ++ Site web : [searx.me](https://searx.me/) ++ Documentation officielle : [asciimoo.github.io/searx](https://asciimoo.github.io/searx/) ++ Démonstration : [Démo](https://demo.yunohost.org/searx/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/searx](https://github.com/YunoHost-Apps/searx_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/searx/issues](https://github.com/YunoHost-Apps/searx_ynh/issues) diff --git a/pages/04.applications/10.docs/searx/app_searx.md b/pages/04.applications/10.docs/searx/app_searx.md new file mode 100644 index 00000000..2a0980c0 --- /dev/null +++ b/pages/04.applications/10.docs/searx/app_searx.md @@ -0,0 +1,23 @@ +--- +title: Searx +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_searx' +--- + +![searx's logo](image://searx_logo.svg?resize=,80) + +[![Install Searx with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=searx) [![Integration level](https://dash.yunohost.org/integration/searx.svg)](https://dash.yunohost.org/appci/app/searx) + +*Searx* is a free and decentralized meta-search engine. The queries made are not saved by Searx in order to protect the privacy of the user. As a metasearch engine, searx collects and displays results from dozens of search engines. The search engines used (or not) can be configured in the preferences. +As a decentralized software, searx is installed on different instances (different servers). In France, associations such as Framasoft, Aquilenet or La Quadrature du Net have installed it on their servers. + +## Useful links + ++ Website: [searx.me](https://searx.me/) ++ Official documentation: [asciimoo.github.io/searx](https://asciimoo.github.io/searx/) ++ Demonstration: [Demo](https://demo.yunohost.org/searx/) ++ Application software repository: [github.com - YunoHost-Apps/searx](https://github.com/YunoHost-Apps/searx_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/searx/issues](https://github.com/YunoHost-Apps/searx_ynh/issues) diff --git a/pages/04.applications/10.docs/send/app_send.fr.md b/pages/04.applications/10.docs/send/app_send.fr.md new file mode 100644 index 00000000..6efcf19c --- /dev/null +++ b/pages/04.applications/10.docs/send/app_send.fr.md @@ -0,0 +1,31 @@ +--- +title: Send +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_send' +--- + +[![Installer Send avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=send) [![Integration level](https://dash.yunohost.org/integration/send.svg)](https://dash.yunohost.org/appci/app/send) + +*Send* est un fork du Firefox Send de Mozilla. Mozilla a arrêté Send, et ce fork est un effort de la communauté pour maintenir le projet en vie. +Send est une expérience de partage de fichiers qui permet d'envoyer des fichiers chiffrés à d'autres utilisateurs. + +### Captures d'écran + +![Capture d'écran de Send](https://github.com/YunoHost-Apps/send_ynh/blob/master/doc/screenshots/screenshot.png) + +### Avertissements / informations importantes + +### Configuration + +Le chemin du fichier de configuration est `var/www/send/server/config.js`. +Vous pouvez configurer des paramètres tels que les taille de fichier, nombre de téléchargements, ou temps d'expiration des fichiers maximums. + +## Liens utiles + ++ Site web : [send.vis.ee](https://send.vis.ee/) ++ Démonstration : [Démo](https://send.vis.ee/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/send](https://github.com/YunoHost-Apps/send_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/send/issues](https://github.com/YunoHost-Apps/send_ynh/issues) diff --git a/pages/04.applications/10.docs/send/app_send.md b/pages/04.applications/10.docs/send/app_send.md new file mode 100644 index 00000000..fed26069 --- /dev/null +++ b/pages/04.applications/10.docs/send/app_send.md @@ -0,0 +1,31 @@ +--- +title: Send +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_send' +--- + +[![Installer Send with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=send) [![Integration level](https://dash.yunohost.org/integration/send.svg)](https://dash.yunohost.org/appci/app/send) + +*Send* a fork of Mozilla's Firefox Send. Mozilla discontinued Send, this fork is a community effort to keep the project up-to-date and alive. +Send is a file sharing experiment which allows you to send encrypted files to other users. + +### Screenshots + +![Screenshot of Send](https://github.com/YunoHost-Apps/send_ynh/blob/master/doc/screenshots/screenshot.png) + +### Disclaimers / important information + +### Configuration + +The config file path is `var/www/send/server/config.js`. +You can configure things such as the max file size, max downloads, or max file expire time. + +## Useful links + ++ Website: [send.vis.ee](https://send.vis.ee/) ++ Demonstration: [Demo](https://send.vis.ee/) ++ Application software repository: [github.com - YunoHost-Apps/send](https://github.com/YunoHost-Apps/send_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/send/issues](https://github.com/YunoHost-Apps/send_ynh/issues) diff --git a/pages/04.applications/10.docs/shaarli/app_shaarli.fr.md b/pages/04.applications/10.docs/shaarli/app_shaarli.fr.md new file mode 100644 index 00000000..b272dffa --- /dev/null +++ b/pages/04.applications/10.docs/shaarli/app_shaarli.fr.md @@ -0,0 +1,24 @@ +--- +title: Shaarli +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_shaarli' +--- + +## Présentation + +Shaarli est un clone libre de feu del.icio.us : il s'agit d'une application légère permettant d'archiver et de partager des marque-pages, étiquetés à l'aide de tags. Chaque marque-page peut être "public" ou "privé", et peut recevoir une note descriptive. + +Le moteur de recherche intégré à l'application interroge les tags, le titre des pages archivées, ainsi que le contenu de l'éventuelle note associée. Il est ainsi très aisé de retrouver une marque-page, même plusieurs années après son enregistrement. + +L'enregistrement d'une page peut s'effectuer de plusieurs façons : grâce à un bookmarklet, depuis l'application elle-même, ou depuis une application Android. + +Shaarli est intéressant pour toutes celles et tous ceux qui souhaitent conserver la trace de pages Web et y accéder depuis partout, et ce sans surcharger les marque-pages (ou "favoris") de leur navigateur. + +## Liens utiles + +- [Page officielle](https://sebsauvage.net/wiki/doku.php?id=php:shaarli) de Shaarli +- [Application Shaarlier](https://f-droid.org/fr/packages/com.dimtion.shaarlier/) sur Android +- [Fil de discussion](https://forum.yunohost.org/t/shaarli-version-0-10-4/2200) concernant Shaarli sur le forum diff --git a/pages/04.applications/10.docs/shaarli/app_shaarli.md b/pages/04.applications/10.docs/shaarli/app_shaarli.md new file mode 100644 index 00000000..cdf6c315 --- /dev/null +++ b/pages/04.applications/10.docs/shaarli/app_shaarli.md @@ -0,0 +1,10 @@ +--- +title: Shaarli +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_shaarli' +--- + +(This page only exists in french for now) diff --git a/pages/04.applications/10.docs/shellinabox/app_shellinabox.fr.md b/pages/04.applications/10.docs/shellinabox/app_shellinabox.fr.md new file mode 100644 index 00000000..3de2c6b4 --- /dev/null +++ b/pages/04.applications/10.docs/shellinabox/app_shellinabox.fr.md @@ -0,0 +1,21 @@ +--- +title: Shellinabox +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_shellinabox' +--- + +![logo de shellinabox](image://shellinabox_logo.svg?resize=,80) + +[![Install Shellinabox with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=shellinabox) [![Integration level](https://dash.yunohost.org/integration/shellinabox.svg)](https://dash.yunohost.org/appci/app/shellinabox) + +Shellinabox met en œuvre un serveur web qui peut saisir des lignes de commande arbitraires vers un émulateur de terminal. Cet émulateur est accessible à tout navigateur Web compatible JavaScript et CSS et ne nécessite pas de plugins supplémentaires à votre navigateur Internet. + +## Liens utiles + ++ Site web : [github.com/shellinabox/shellinabox](https://github.com/shellinabox/shellinabox) ++ Documentation officielle : [github.com/shellinabox/shellinabox/wiki/shellinaboxd_man](https://github.com/shellinabox/shellinabox/wiki/shellinaboxd_man) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/shellinabox](https://github.com/YunoHost-Apps/shellinabox_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/shellinabox/issues](https://github.com/YunoHost-Apps/shellinabox_ynh/issues) diff --git a/pages/04.applications/10.docs/shellinabox/app_shellinabox.md b/pages/04.applications/10.docs/shellinabox/app_shellinabox.md new file mode 100644 index 00000000..935a0991 --- /dev/null +++ b/pages/04.applications/10.docs/shellinabox/app_shellinabox.md @@ -0,0 +1,21 @@ +--- +title: Shellinabox +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_shellinabox' +--- + +![Shellinabox's logo](image://yunohost_package.png?height=80) + +[![Install Shellinabox with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=shellinabox) [![Integration level](https://dash.yunohost.org/integration/shellinabox.svg)](https://dash.yunohost.org/appci/app/shellinabox) + +Shellinabox implements a web server that can export arbitrary command line tools to a web based terminal emulator. This emulator is accessible to any JavaScript and CSS enabled web browser and does not require any additional browser plugins. + +## Useful links + ++ Website: [github.com/shellinabox/shellinabox](https://github.com/shellinabox/shellinabox) ++ Official documentation: [github.com/shellinabox/shellinabox/wiki/shellinaboxd_man](https://github.com/shellinabox/shellinabox/wiki/shellinaboxd_man) ++ Application software repository: [github.com - YunoHost-Apps/shellinabox](https://github.com/YunoHost-Apps/shellinabox_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/shellinabox/issues](https://github.com/YunoHost-Apps/shellinabox_ynh/issues) diff --git a/pages/04.applications/10.docs/simple-torrent/app_simple-torrent.fr.md b/pages/04.applications/10.docs/simple-torrent/app_simple-torrent.fr.md new file mode 100644 index 00000000..ceff36d0 --- /dev/null +++ b/pages/04.applications/10.docs/simple-torrent/app_simple-torrent.fr.md @@ -0,0 +1,20 @@ +--- +title: Simple Torrent +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_simple-torrent' +--- + +![logo de Simple Torrent](image://simple-torrent_logo.png?width=80) + +[![Install Simple Torrent with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=simple-torrent) [![Integration level](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) + +Simple Torrent est un client torrent distant auto-hébergé, écrit en Go (golang). Démarrez des torrents à distance, téléchargez des ensembles de fichiers sur le disque local du serveur, qui sont ensuite récupérables ou diffusables via HTTP. + +## Liens utiles + + + Documentation officielle : [wiki](https://github.com/boypt/simple-torrent/wiki) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/simple-torrent](https://github.com/YunoHost-Apps/simple-torrent_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/simple-torrent/issues](https://github.com/YunoHost-Apps/simple-torrent_ynh/issues) diff --git a/pages/04.applications/10.docs/simple-torrent/app_simple-torrent.md b/pages/04.applications/10.docs/simple-torrent/app_simple-torrent.md new file mode 100644 index 00000000..f614bf30 --- /dev/null +++ b/pages/04.applications/10.docs/simple-torrent/app_simple-torrent.md @@ -0,0 +1,20 @@ +--- +title: Simple Torrent +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_simple-torrent' +--- + +![simple-torrent's logo](image://simple-torrent_logo.png?width=80) + +[![Install Simple Torrent with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=simple-torrent) [![Integration level](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) + +Simple Torrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. + +## Useful links + ++ Official documentation: [wiki](https://github.com/boypt/simple-torrent/wiki) ++ Application software repository: [github.com - YunoHost-Apps/simple-torrent](https://github.com/YunoHost-Apps/simple-torrent_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/simple-torrent/issues](https://github.com/YunoHost-Apps/simple-torrent_ynh/issues) diff --git a/pages/04.applications/10.docs/sitemagiccms/app_sitemagiccms.fr.md b/pages/04.applications/10.docs/sitemagiccms/app_sitemagiccms.fr.md new file mode 100644 index 00000000..1b3f2d70 --- /dev/null +++ b/pages/04.applications/10.docs/sitemagiccms/app_sitemagiccms.fr.md @@ -0,0 +1,23 @@ +--- +title: Sitemagic CMS +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_sitemagiccms' +--- + +[![Installer Sitemagic CMS avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=sitemagiccms) [![Integration level](https://dash.yunohost.org/integration/sitemagiccms.svg)](https://dash.yunohost.org/appci/app/sitemagiccms) + +*Sitemagic CMS* est un système de gestion de contenu. Il est très unique dans son approche de la conception. Sitemagic CMS est un système de gestion de contenu complet qui permet à quiconque de gérer facilement les pages, les fichiers, le menu, les formulaires et les modules externes tels que les cartes, les plugins de médias sociaux, les vidéos et plus encore. Mais il y a aussi une tonne de fonctionnalités cachées qui vous aident à gagner du temps, comme le mobile automatique et les optimisations des moteurs de recherche (SEO). + +### Captures d'écran + +![Capture d'écran de Sitemagic CMS](https://github.com/YunoHost-Apps/SitemagicCMS_ynh/blob/master/doc/screenshots/Designer.jpeg) + +## Liens utiles + ++ Site web : [sitemagic.org/](https://sitemagic.org/) ++ Démonstration : [Démo](https://demo.sitemagiccms.eu/login) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/sitemagiccms](https://github.com/YunoHost-Apps/sitemagiccms_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/sitemagiccms/issues](https://github.com/YunoHost-Apps/sitemagiccms_ynh/issues) diff --git a/pages/04.applications/10.docs/sitemagiccms/app_sitemagiccms.md b/pages/04.applications/10.docs/sitemagiccms/app_sitemagiccms.md new file mode 100644 index 00000000..1c5fc5cb --- /dev/null +++ b/pages/04.applications/10.docs/sitemagiccms/app_sitemagiccms.md @@ -0,0 +1,23 @@ +--- +title: Sitemagic CMS +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_sitemagiccms' +--- + +[![Installer Sitemagic CMS with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=sitemagiccms) [![Integration level](https://dash.yunohost.org/integration/sitemagiccms.svg)](https://dash.yunohost.org/appci/app/sitemagiccms) + +*Sitemagic CMS* is a Content Management System. It's very unique in its approach to design. Sitemagic CMS is a comprehensive Content Management System that allows anyone to easily manage pages, files, menu, forms, and external modules such as maps, social media plugins, videos, and more. But there's also a ton of hidden features that helps you save time such as automatic mobile and search engine optimizations (SEO). + +### Screenshots + +![Screenshot of Sitemagic CMS](https://github.com/YunoHost-Apps/SitemagicCMS_ynh/blob/master/doc/screenshots/Designer.jpeg) + +## Useful links + ++ Website: [sitemagic.org](https://sitemagic.org/) ++ Demonstration: [Demo](https://demo.sitemagiccms.eu/login) ++ Application software repository: [github.com - YunoHost-Apps/sitemagiccms](https://github.com/YunoHost-Apps/sitemagiccms_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/sitemagiccms/issues](https://github.com/YunoHost-Apps/sitemagiccms_ynh/issues) diff --git a/pages/04.applications/10.docs/slingcode/app_slingcode.fr.md b/pages/04.applications/10.docs/slingcode/app_slingcode.fr.md new file mode 100644 index 00000000..cf5f04c3 --- /dev/null +++ b/pages/04.applications/10.docs/slingcode/app_slingcode.fr.md @@ -0,0 +1,20 @@ +--- +title: Slingcode +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_slingcode' +--- + +![logo de Slingcode](image://slingcode_logo.svg?resize=,80) + +[![Install Slingcode with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=slingcode) [![Integration level](https://dash.yunohost.org/integration/slingcode.svg)](https://dash.yunohost.org/appci/app/slingcode) + +Slingcode est un éditeur de code contenu dans un unique fichier HTML. Il n'a pas de composant serveur, ce qui signifie que toutes vos données sont stockées dans le cache de votre navigateur. Cependant, il est toujours possible de créer des applications Web, de les exécuter, de les exporter et même de les partager en peer-to-peer. + +## Liens utiles + ++ Site web : [slingcode.net (en)](https://slingcode.net/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/slingcode](https://github.com/chr15m/slingcode) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/slingcode/issues](https://github.com/YunoHost-Apps/slingcode_ynh/issues) diff --git a/pages/04.applications/10.docs/slingcode/app_slingcode.md b/pages/04.applications/10.docs/slingcode/app_slingcode.md new file mode 100644 index 00000000..aa4c97d8 --- /dev/null +++ b/pages/04.applications/10.docs/slingcode/app_slingcode.md @@ -0,0 +1,20 @@ +--- +title: Slingcode +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_slingcode' +--- + +![Slingcode's logo](image://slingcode_logo.svg?resize=,80) + +[![Install Slingcode with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=slingcode) [![Integration level](https://dash.yunohost.org/integration/slingcode.svg)](https://dash.yunohost.org/appci/app/slingcode) + +Slingcode is a code editor contained in a single HTML file. Therefore, it has no server component, so all of your data is stored in your browser's cache. However, it is still possible to make web apps, run them, export them, and even share them using peer-to-peer. + +## Useful links + ++ Website: [slingcode.net](https://slingcode.net/) ++ Application software repository: [github.com - YunoHost-Apps/slingcode](https://github.com/chr15m/slingcode) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/slingcode/issues](https://github.com/YunoHost-Apps/slingcode_ynh/issues) diff --git a/pages/04.applications/10.docs/snipeit/app_snipeit.fr.md b/pages/04.applications/10.docs/snipeit/app_snipeit.fr.md new file mode 100644 index 00000000..07c10579 --- /dev/null +++ b/pages/04.applications/10.docs/snipeit/app_snipeit.fr.md @@ -0,0 +1,23 @@ +--- +title: Snipe-IT +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_snipeit' +--- + +[![Installer Snipe-IT avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=snipeit) [![Integration level](https://dash.yunohost.org/integration/snipeit.svg)](https://dash.yunohost.org/appci/app/snipeit) + +*Snipe-IT* est un gestionnaire de ressources informatiques. + +### Captures d'écran + +![Capture d'écran de Snipe-IT](https://github.com/YunoHost-Apps/snipeit_ynh/blob/master/doc/screenshots/screenshot-license-list.png) + +## Liens utiles + ++ Site web : [snipeitapp.com](https://snipeitapp.com/) ++ Démonstration : [Démo](https://snipeitapp.com/demo/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/snipeit](https://github.com/YunoHost-Apps/snipeit_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/snipeit/issues](https://github.com/YunoHost-Apps/snipeit_ynh/issues) diff --git a/pages/04.applications/10.docs/snipeit/app_snipeit.md b/pages/04.applications/10.docs/snipeit/app_snipeit.md new file mode 100644 index 00000000..f410063d --- /dev/null +++ b/pages/04.applications/10.docs/snipeit/app_snipeit.md @@ -0,0 +1,23 @@ +--- +title: Snipe-IT +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_snipeit' +--- + +[![Installer Snipe-IT with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=snipeit) [![Integration level](https://dash.yunohost.org/integration/snipeit.svg)](https://dash.yunohost.org/appci/app/snipeit) + +*Snipe-IT* is a manage assets for IT operations. + +### Screenshots + +![Screenshot of Snipe-IT](https://github.com/YunoHost-Apps/snipeit_ynh/blob/master/doc/screenshots/screenshot-license-list.png) + +## Useful links + ++ Website: [snipeitapp.com](https://snipeitapp.com/) ++ Demonstration: [Demo](https://snipeitapp.com/demo/) ++ Application software repository: [github.com - YunoHost-Apps/snipeit](https://github.com/YunoHost-Apps/snipeit_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/snipeit/issues](https://github.com/YunoHost-Apps/snipeit_ynh/issues) diff --git a/pages/04.applications/10.docs/snserver/app_snserver.fr.md b/pages/04.applications/10.docs/snserver/app_snserver.fr.md new file mode 100644 index 00000000..c101f095 --- /dev/null +++ b/pages/04.applications/10.docs/snserver/app_snserver.fr.md @@ -0,0 +1,25 @@ +--- +title: Standard Notes Server +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_snserver' +--- + +[![Installer Standard Notes Server avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=snserver) [![Integration level](https://dash.yunohost.org/integration/snserver.svg)](https://dash.yunohost.org/appci/app/snserver) + +*Standard Notes Server* est une application de prise de notes chiffrée de bout en bout. Capturez vos notes, vos fichiers et le travail de votre vie en un seul endroit sécurisé. + +### Avertissements / informations importantes + +* Pas d'authentification unique ou d'intégration LDAP. +* Besoins en mémoire vive (4 Go de mémoire swap seront créés pendant l'installation) : +* La configuration peut être modifiée sous : https://my_domain.tld/yunohost/admin/#/apps/$app_id/config-panel + +## Liens utiles + ++ Site web : [standardnotes.com](https://standardnotes.com/) ++ Démonstration : [Démo](https://standardnotes.com/demo) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/snserver](https://github.com/YunoHost-Apps/snserver_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/snserver/issues](https://github.com/YunoHost-Apps/snserver_ynh/issues) diff --git a/pages/04.applications/10.docs/snserver/app_snserver.md b/pages/04.applications/10.docs/snserver/app_snserver.md new file mode 100644 index 00000000..0ed386cf --- /dev/null +++ b/pages/04.applications/10.docs/snserver/app_snserver.md @@ -0,0 +1,25 @@ +--- +title: Standard Notes Server +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_snserver' +--- + +[![Installer Standard Notes Server with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=snserver) [![Integration level](https://dash.yunohost.org/integration/snserver.svg)](https://dash.yunohost.org/appci/app/snserver) + +*Standard Notes Server* is an end-to-end encrypted note-taking app. Capture your notes, files, and life’s work all in one secure place. + +### Disclaimers / important information + +* No single-sign on or LDAP integration +* Ram requirements ( 4GB swap memory will be created during install ): +* Configuration can be changed under: https://my_domain.tld/yunohost/admin/#/apps/$app_id/config-panel + +## Useful links + ++ Website: [standardnotes.com](https://standardnotes.com/) ++ Demonstration: [Demo](https://standardnotes.com/demo) ++ Application software repository: [github.com - YunoHost-Apps/snserver](https://github.com/YunoHost-Apps/snserver_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/snserver/issues](https://github.com/YunoHost-Apps/snserver_ynh/issues) diff --git a/pages/04.applications/10.docs/snweb/app_snweb.fr.md b/pages/04.applications/10.docs/snweb/app_snweb.fr.md new file mode 100644 index 00000000..6c228875 --- /dev/null +++ b/pages/04.applications/10.docs/snweb/app_snweb.fr.md @@ -0,0 +1,36 @@ +--- +title: Standard Notes +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_snweb' +--- + +[![Installer Standard Notes avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=snweb) [![Integration level](https://dash.yunohost.org/integration/snweb.svg)](https://dash.yunohost.org/appci/app/snweb) + +*Standard Notes* est une application de prise de notes chiffrées. + +### Captures d'écran + +![Capture d'écran de Standard Notes](https://github.com/YunoHost-Apps/snweb_ynh/blob/master/doc/screenshots/standard_notes.png) + +### Avertissements / informations importantes + +* Pas d'authentification unique ou d'intégration LDAP. +* L'application nécessite jusqu'à 1500 MB de RAM pour être installée. +* L'application nécessite au moins 100 Mo de RAM pour fonctionner correctement. +* L'application nécessite environ 3500 MB de disque. + +* Un domaine dédié est nécessaire si vous voulez utiliser les extensions. + * notes.votre-domaine.tld/ -> les extensions fonctionnent. + * notes.votre-domaine.tld/notes/ -> les extensions ne fonctionnent pas. + +* Le fichier de configuration est stocké dans "/opt/yunohost/$app/live/.env". + +## Liens utiles + ++ Site web : [standardnotes.com](https://standardnotes.com/) ++ Démonstration : [Démo](https://demo.snweb.eu/login) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/snweb](https://github.com/YunoHost-Apps/snweb_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/snweb/issues](https://github.com/YunoHost-Apps/snweb_ynh/issues) diff --git a/pages/04.applications/10.docs/snweb/app_snweb.md b/pages/04.applications/10.docs/snweb/app_snweb.md new file mode 100644 index 00000000..a29b59e7 --- /dev/null +++ b/pages/04.applications/10.docs/snweb/app_snweb.md @@ -0,0 +1,36 @@ +--- +title: Standard Notes +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_snweb' +--- + +[![Installer Standard Notes with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=snweb) [![Integration level](https://dash.yunohost.org/integration/snweb.svg)](https://dash.yunohost.org/appci/app/snweb) + +*Standard Notes* is a end-to-end encrypted note-taking app. + +### Screenshots + +![Screenshot of Standard Notes](https://github.com/YunoHost-Apps/snweb_ynh/blob/master/doc/screenshots/standard_notes.png) + +### Disclaimers / important information + +* No single-sign on or LDAP integration +* The app requires up 1500 MB of RAM to install +* The app requires at least 100 MB of RAM to work properly. +* The app requires around 3500 MB of disk. + +* A dedicated domain is requierd if you want to use extensions. + * notes.your-domain.tld/ -> Extensions are working + * your-domain.tld/notes/ -> Extensions are not working + +* The config-file is stored under "/opt/yunohost/$app/live/.env" + +## Useful links + ++ Website: [standardnotes.com](https://standardnotes.com/) ++ Demonstration: [Demo](https://demo.snweb.eu/login) ++ Application software repository: [github.com - YunoHost-Apps/snweb](https://github.com/YunoHost-Apps/snweb_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/snweb/issues](https://github.com/YunoHost-Apps/snweb_ynh/issues) diff --git a/pages/04.applications/10.docs/sogo/app_sogo.fr.md b/pages/04.applications/10.docs/sogo/app_sogo.fr.md new file mode 100644 index 00000000..8157b047 --- /dev/null +++ b/pages/04.applications/10.docs/sogo/app_sogo.fr.md @@ -0,0 +1,19 @@ +--- +title: SOGo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_sogo' +--- + +![logo de SOGo](image://sogo_logo.png?height=80) + +[![Installer SOGo avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=sogo) [![Integration level](https://dash.yunohost.org/integration/sogo.svg)](https://dash.yunohost.org/appci/app/sogo) + +SOGo est un service de webmail pour votre serveur email, c'est une alternative à [RoundCube](/app_roundcube). Il permet aussi la gestion des agendas et contacts présents sur le serveur. + +## Quelques liens utiles + + + Site officiel de SOGo : [sogo.nu](https://sogo.nu) + + Dépot de l'application pour YunoHost : [github.com/YunoHost-Apps/sogo_ynh](https://github.com/YunoHost-Apps/sogo_ynh) diff --git a/pages/04.applications/10.docs/sogo/app_sogo.md b/pages/04.applications/10.docs/sogo/app_sogo.md new file mode 100644 index 00000000..7bfd2c9e --- /dev/null +++ b/pages/04.applications/10.docs/sogo/app_sogo.md @@ -0,0 +1,19 @@ +--- +title: SOGo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_sogo' +--- + +![SOGo's Logo](image://sogo_logo.png?height=80) + +[![Install SOGo with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=sogo) [![Integration level](https://dash.yunohost.org/integration/sogo.svg)](https://dash.yunohost.org/appci/app/sogo) + +SOGo is an opensource groupware solution which has Webmail, a global address book, calender and contacts which can be synced via CalDAV or CardDAV. + +## Useful links + ++ Application software repository: [sogo.nu](https://sogo.nu) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com/YunoHost-Apps/sogo_ynh](https://github.com/YunoHost-Apps/sogo_ynh) diff --git a/pages/04.applications/10.docs/spip/app_spip.fr.md b/pages/04.applications/10.docs/spip/app_spip.fr.md new file mode 100644 index 00000000..354b6f54 --- /dev/null +++ b/pages/04.applications/10.docs/spip/app_spip.fr.md @@ -0,0 +1,28 @@ +--- +title: SPIP +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_spip' +--- + +### SPIP c'est quoi ? + +SPIP est un système de publication pour l’Internet qui s’attache particulièrement au fonctionnement collectif, au multilinguisme et à la facilité d’emploi. C’est un logiciel libre, distribué sous la licence GNU/GPL. Il peut ainsi être utilisé pour tout site Internet, qu’il soit associatif ou institutionnel, personnel ou marchand. + +Source : [spip.net](https://www.spip.net/fr_rubrique91.html) + +### Fonctionnalité de l'application pour YunoHost + +* Installation de la base sans passer par le système d'installation +* Support multilingue +* Support LDAP + +#### Utilisation + +Accéder à l'administration du site en écrivant l'adresse suivante dans votre navigateur. + +https://www.domain.tld/spip/ecrire + +Faire une demande de "mot de passe oublié" pour changer votre mot de passe, vous recevez un email vous indiquant comment procéder au changement de mot de passe. diff --git a/pages/04.applications/10.docs/spip/app_spip.md b/pages/04.applications/10.docs/spip/app_spip.md new file mode 100644 index 00000000..46fd6ca9 --- /dev/null +++ b/pages/04.applications/10.docs/spip/app_spip.md @@ -0,0 +1,28 @@ +--- +title: SPIP +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_spip' +--- + +#### SPIP is what? + +SPIP is an Internet publishing system that focuses on collective functioning, multilingualism and ease of use. It is free software, distributed under the GNU/GPL license. It can therefore be used for any website, whether associative or institutional, personal or commercial. + +Source:[spip.net](https://www.spip.net/fr_rubrique91.html_rubrique91.html) + +#### Application functionality for YunoHost + +* Installation of the base without going through the installation system +* Multilingual support +* LDAP support + +##### Use + +Access the administration of the site by entering the following address in your browser. + +https://www.domain.tld/spip/ecrire + +Make a "forgotten password" request to change your password, you will receive an email telling you how to change your password. diff --git a/pages/04.applications/10.docs/squid3/app_squid3.fr.md b/pages/04.applications/10.docs/squid3/app_squid3.fr.md new file mode 100644 index 00000000..99ee5289 --- /dev/null +++ b/pages/04.applications/10.docs/squid3/app_squid3.fr.md @@ -0,0 +1,41 @@ +--- +title: squid3 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_squid3' +--- + +[![Installer squid3 avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=squid3) [![Integration level](https://dash.yunohost.org/integration/squid3.svg)](https://dash.yunohost.org/appci/app/squid3) + +*squid3* est un proxy de mise en cache pour le Web prenant en charge HTTP, HTTPS, FTP, etc. Il réduit la bande passante et améliore les temps de réponse en mettant en cache et en réutilisant les pages Web fréquemment demandées. Squid dispose de contrôles d'accès étendus et constitue un excellent accélérateur de serveur. + +### Avertissements / informations importantes + +### Instruction + +1. L'application ne peut pas être **multi-instance** (ne peut pas être installée plusieurs fois sur le même serveur). +2. **LDAP** est présent (les utilisateurs enregistrés peuvent utiliser leur nom d'utilisateur et leur mot de passe pour naviguer sur Internet via le proxy). +3. Le **numéro de port** utilisé par le proxy sera envoyé à la **messagerie administrative** du serveur Yunohost. +4. Le nom d'utilisateur et le mot de passe sont **demandés deux fois** la première fois que vous démarrez le navigateur (je n'ai aucune idée pourquoi cela se produit). + +### Configurer Squid3 pour Firefox + +1. Allez dans **Préférences -> Général -> proxy réseau**. +1. Sélectionnez **Configuration manuelle du proxy**. +1. Dans **HTTP Proxy**, entrez votre **nom de domaine ou IP de serveur** et dans **Port**, entrez le port envoyé à votre **admin email**. +1. Cochez **Utiliser ce serveur proxy pour tous les protocoles**. +1. Sous **No Proxy for**, entrez ce **localhost, 127.0.0.1**. +1. **Sauvergarder et redémarrer** Firefox. + +Si vous essayez Squid 3 d'une autre manière, veuillez écrire l'instruction dans l'issue afin que je puisse l'ajouter au readme. + +### Remerciements particuliers +Merci à **Fred** d'avoir écrit l'instruction pour configurer Squid pour YunoHost. Français : https://memo-linux.com/installer-squid3-sur-un-serveur-yunohost/ + +## Liens utiles + ++ Site web : [squid-cache.org](http://www.squid-cache.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/squid3](https://github.com/YunoHost-Apps/squid3_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/squid3/issues](https://github.com/YunoHost-Apps/squid3_ynh/issues) diff --git a/pages/04.applications/10.docs/squid3/app_squid3.md b/pages/04.applications/10.docs/squid3/app_squid3.md new file mode 100644 index 00000000..6a2bdbe5 --- /dev/null +++ b/pages/04.applications/10.docs/squid3/app_squid3.md @@ -0,0 +1,41 @@ +--- +title: squid3 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_squid3' +--- + +[![Installer squid3 with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=squid3) [![Integration level](https://dash.yunohost.org/integration/squid3.svg)](https://dash.yunohost.org/appci/app/squid3) + +*squid3* is a caching proxy for the Web supporting HTTP, HTTPS, FTP, and more. It reduces bandwidth and improves response times by caching and reusing frequently-requested web pages. Squid has extensive access controls and makes a great server accelerator. + +### Disclaimers / important information + +### Instruction + +1. The app can not be **multi-instance**(can't be installed many times on same server). +2. **LDAP** is there(Registered users can use there login username and password to browser internet through the proxy) +3. **Port number** used by the proxy will be sent to the **admin mail** of the Yunohost server. +4. The username and password is **asked twice** first time you start the browser(I have no idea why this happens). + +### Configure Squid3 for Firefox + +1. Go to **Preferences -> General -> network proxy** +1. Select **Manual proxy configuration** +1. In **HTTP Proxy** enter your **domain name or server IP** and in **Port** enter the port sent to your **admin email**. +1. Check **Use this proxy server for all protocols**. +1. Under **No Proxy for** enter this **localhost, 127.0.0.1**. +1. **Save and restart** the Firefox. + +If you try Squid 3 in any other way please write the instruction in the issue so that I can add it to the readme + +### Special Thanks +Thanks to **Fred** to write the instruction to configure Squid for YunoHost. French: https://memo-linux.com/installer-squid3-sur-un-serveur-yunohost/ + +## Useful links + ++ Website: [squid-cache.org](http://www.squid-cache.org/) ++ Application software repository: [github.com - YunoHost-Apps/squid3](https://github.com/YunoHost-Apps/squid3_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/squid3/issues](https://github.com/YunoHost-Apps/squid3_ynh/issues) diff --git a/pages/04.applications/10.docs/streama/app_streama.fr.md b/pages/04.applications/10.docs/streama/app_streama.fr.md new file mode 100644 index 00000000..7c586c64 --- /dev/null +++ b/pages/04.applications/10.docs/streama/app_streama.fr.md @@ -0,0 +1,39 @@ +--- +title: Streama +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_streama' +--- + +[![Installer Streama avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=streama) [![Integration level](https://dash.yunohost.org/integration/streama.svg)](https://dash.yunohost.org/appci/app/streama) + +*Streama* est un serveur de streaming auto-hébergé. + +### Captures d'écran + +![Capture d'écran de Streama](https://github.com/YunoHost-Apps/streama_ynh/blob/master/doc/screenshots/screenshot.jpg) + +### Guide d’installation + +> :warning: Streama doit être installé dans le domaine racine ou un sous-domaine dédié. + +Le répertoire de téléchargement par défaut est : `/home/yunohost.app/streama` (doit être mentionné dans la page *Paramètres* ou peut être modifié) + +Le répertoire vidéo local par défaut est : `/home/yunohost.app/streama/upload` (doit être mentionné dans la page *Paramètres* ou peut être modifié) + +### Informations additionnelles + +* Après l’installation : + - **Nom d’utilisateur** : admin + - **Mot de passe** : admin + +Ceci pourra être changé dans les paramètres. + +## Liens utiles + ++ Site web : [streamaserver.org](https://streamaserver.org) ++ Démonstration : [Démo](https://streama.demo-version.net/login/auth) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/streama](https://github.com/YunoHost-Apps/streama_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/streama/issues](https://github.com/YunoHost-Apps/streama_ynh/issues) diff --git a/pages/04.applications/10.docs/streama/app_streama.md b/pages/04.applications/10.docs/streama/app_streama.md new file mode 100644 index 00000000..97e3ac55 --- /dev/null +++ b/pages/04.applications/10.docs/streama/app_streama.md @@ -0,0 +1,40 @@ +--- +title: Streama +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_streama' +--- + +[![Installer Streama with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=streama) [![Integration level](https://dash.yunohost.org/integration/streama.svg)](https://dash.yunohost.org/appci/app/streama) + +*Streama* is a self hosted streaming media server. + +### Screenshots + +![Screenshot of Streama](https://github.com/YunoHost-Apps/streama_ynh/blob/master/doc/screenshots/screenshot.jpg) + + +### Installation guide + +> :warning: Streama must be installed in the root domain or subdomain. + +Default upload directory is: `/home/yunohost.app/streama` (must be mentioned in *Settings* page or can be changed) + +Default local video directory is: `/home/yunohost.app/streama/upload` (must be mentioned in *Settings* page or can be changed) + +### Additional information + +* After install: + - **Username**: admin + - **Password**: admin + +This can be changed in settings. + +## Useful links + ++ Website: [streamaserver.org](https://streamaserver.org) ++ Demonstration: [Demo](https://streama.demo-version.net/login/auth) ++ Application software repository: [github.com - YunoHost-Apps/streama](https://github.com/YunoHost-Apps/streama_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/streama/issues](https://github.com/YunoHost-Apps/streama_ynh/issues) diff --git a/pages/04.applications/10.docs/strut/app_strut.fr.md b/pages/04.applications/10.docs/strut/app_strut.fr.md new file mode 100644 index 00000000..11bb8500 --- /dev/null +++ b/pages/04.applications/10.docs/strut/app_strut.fr.md @@ -0,0 +1,21 @@ +--- +title: Strut +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_strut' +--- + +![logo de strut](image://strut_logo.png?height=80) + +[![Install Strut with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=strut) [![Integration level](https://dash.yunohost.org/integration/strut.svg)](https://dash.yunohost.org/appci/app/strut) + +*Strut* est un logiciel de création en ligne de diaporamas. Il permet de créer des diapositives simples en incluant textes, images, formes, sites web ou vidéos, ainsi que la disposition des diapos. Il utilise la librairie Impress.js et vous permet de sauvegarder votre projet en local ou de l'exporter en ZIP contenant les fichiers sources et le HTML. + +## Liens utiles + ++ Site web : [strut.io](http://strut.io) ++ Démonstration: [Démo](http://strut.io/dist/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/strut](https://github.com/YunoHost-Apps/strut_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/strut/issues](https://github.com/YunoHost-Apps/strut_ynh/issues) diff --git a/pages/04.applications/10.docs/strut/app_strut.md b/pages/04.applications/10.docs/strut/app_strut.md new file mode 100644 index 00000000..6e59f308 --- /dev/null +++ b/pages/04.applications/10.docs/strut/app_strut.md @@ -0,0 +1,21 @@ +--- +title: Strut +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_strut' +--- + +![strut's logo](image://strut_logo.png?height=80) + +[![Install Strut with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=strut) [![Integration level](https://dash.yunohost.org/integration/strut.svg)](https://dash.yunohost.org/appci/app/strut) + +*Strut* is an online slideshow creation software. It allows you to create simple slides by including text, images, shapes, websites or videos, as well as the layout of the slides. It uses the Impress.js library and allows you to save your project locally or export it as a ZIP file containing the source files and HTML. + +## Useful links + ++ Website: [strut.io](http://strut.io) ++ Demonstration: [Demo](http://strut.io/dist/) ++ Application software repository: [github.com - YunoHost-Apps/strut](https://github.com/YunoHost-Apps/strut_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/strut/issues](https://github.com/YunoHost-Apps/strut_ynh/issues) diff --git a/pages/04.applications/10.docs/synapse/app_synapse.fr.md b/pages/04.applications/10.docs/synapse/app_synapse.fr.md new file mode 100644 index 00000000..52b9c6ae --- /dev/null +++ b/pages/04.applications/10.docs/synapse/app_synapse.fr.md @@ -0,0 +1,140 @@ +--- +title: Synapse +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_synapse' +--- + +[![Installer Synapse avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=synapse) [![Integration level](https://dash.yunohost.org/integration/synapse.svg)](https://dash.yunohost.org/appci/app/synapse) + +*Synapse* est un serveurs de messagerie instantanée. +Chatroom de YunoHost avec Matrix : [https://matrix.to/#/#yunohost:matrix.org](https://matrix.to/#/#yunohost:matrix.org) + +### Avertissements / informations importantes + +### Configuration + +#### Installation sur les architectures ARM (ou architectures lentes) + +Pour toutes les architectures lentes ou ARM, il est recommandé de construire le fichier dh avant l'installation pour avoir une installation plus rapide. +Vous pouvez le construire par cette commande : `openssl dhparam -out /etc/ssl/private/dh2048.pem 2048 > /dev/null` +Après cela, vous pouvez l'installer sans problème. + +Le paquet utilise un environnement virtuel python préétabli. Les binaires proviennent du dépôt suivant : https://github.com/Josue-T/synapse_python_build +Le script pour construire les binaires est également disponible. + +#### Client Web + +Si vous voulez un client web, vous pouvez aussi installer Element avec ce paquet : https://github.com/YunoHost-Apps/element_ynh. + +#### Accès par une fédération + +Si le nom de votre serveur est identique au domaine sur lequel Synapse est installé, et que le port par défaut 8448 est utilisé, votre serveur est normalement déjà accessible par la fédération. + +Si ce n'est pas le cas, vous pouvez ajouter la ligne suivante dans la configuration dns mais vous n'en avez normalement pas besoin car un fichier .well-known est édité pendant l'installation pour déclarer le nom et le port de votre serveur à la fédération. + +``` +_matrix._tcp. IN SRV 10 0 +``` + +Par exemple : + +``` +_matrix._tcp.example.com. 3600 IN SRV 10 0 SYNAPSE_PORT synapse.example.com. +``` + +Vous devez remplacer `SYNAPSE_PORT` par le port réel. Ce port peut être obtenu par la commande : `yunohost app setting SYNAPSE_INSTANCE_NAME synapse_tls_port` + +Pour plus de détails, voir : https://github.com/matrix-org/synapse/blob/master/docs/federate.m + +Si cela ne se fait pas automatiquement, vous devez l'ouvrir dans la box de votre FAI. + +Vous avez également besoin d'un certificat TLS valide pour le domaine utilisé par synapse. Pour ce faire, vous pouvez vous référer à la documentation ici : https://yunohost.org/fr/certificate + +#### Turnserver + +Pour la VoIP et la vidéoconférence, un turnserver est également installé (et configuré). Le turnserver écoute sur deux ports UDP et TCP. Vous pouvez les obtenir avec ces commandes : + +``` +yunohost app setting synapse turnserver_tls_port +yunohost app setting synapse turnserver_alt_tls_port + +``` + +Le turnserver choisira également un port de manière dynamique lorsqu'un nouvel appel est lancé. La plage est comprise entre 49153 et 49193. + +Pour des raisons de sécurité, la plage de ports (49153-49193) n'est pas automatiquement ouverte par défaut. Si vous souhaitez utiliser le serveur synapse pour la voix ou la conférence, vous devrez ouvrir cette plage de ports manuellement. Pour ce faire, il suffit d'exécuter cette commande : + +``` +yunohost firewall allow Both 49153:49193 +``` + +Vous devrez peut-être aussi ouvrir ces ports (si cela n'est pas fait automatiquement) sur la box de votre FAI. + +Pour éviter la situation où le serveur est derrière un NAT, l'IP publique est écrite dans la configuration du turnserver. De cette façon, le turnserver peut envoyer son IP publique réelle au client. Pour plus d'informations, voir [l'exemple de fichier de configuration de coturn](https://github.com/coturn/coturn/blob/master/examples/etc/turnserver.conf#L102-L120). Donc si votre IP change, vous pouvez exécuter le script `/opt/yunohost/__SYNAPSE_INSTANCE_NAME__/Coturn_config_rotate.sh` pour mettre à jour votre configuration. + +Si vous avez une adresse IP dynamique, vous pouvez aussi avoir besoin de mettre à jour cette configuration automatiquement. Pour cela, éditez simplement un fichier nommé `/etc/cron.d/coturn_config_rotate` et ajoutez le contenu suivant (adaptez juste le `__SYNAPSE_INSTANCE_NAME__` qui pourrait être `synapse` ou peut-être `synapse__2`). + +``` +*/15 * * * * root bash /opt/yunohost/__SYNAPSE_INSTANCE_NAME__/Coturn_config_rotate.sh; +``` + +##### OpenVPN + +Dans le cas où vous avez un serveur OpenVPN, vous pouvez vouloir que `coturn-synapse` redémarre quand le VPN redémarre. Pour ce faire, créez un fichier nommé `/usr/local/bin/openvpn_up_script.sh` avec ce contenu : + +``` +#!/bin/bash + +( + sleep 5 + sudo systemctl restart coturn-synapse.service +) & +exit 0 +``` + +Ajouter cette ligne dans le fichier de configuration sudo `/etc/sudoers` + +``` +openvpn ALL=(ALL) NOPASSWD: /bin/systemctl restart coturn-synapse.service +``` + +Et ajoutez cette ligne dans votre fichier de configuration OpenVPN + +``` +ipchange /usr/local/bin/openvpn_up_script.sh +``` + +#### Remarque importante sur la sécurité + +Nous ne recommandons pas d'exécuter Element à partir du même nom de domaine que votre serveur domestique Matrix (Synapse). La raison en est le risque de vulnérabilité XSS (cross-site-scripting) qui pourraient se produire si quelqu'un faisait en sorte que Element charge et rende contenu malveillant généré par l'utilisateur à partir d'une API Matrix qui a ensuite un accès de confiance à Element (ou à d'autres applications) en raison du partage du même domaine. + +Nous avons mis en place des mesures d'atténuation sommaires pour essayer de nous protéger contre cette situation, mais ce n'est toujours pas une bonne pratique de le faire en premier lieu. Voir https://github.com/vector-im/element-web/issues/1977 pour plus de détails. + +### Caractéristiques spécifiques à YunoHost + +### Limitations + +Synapse utilise beaucoup de ressources. Ainsi, sur une architecture lente (comme une petite carte ARM), cette application pourrait prendre beaucoup de CPU et de RAM. + +Cette application ne fournit pas une bonne interface web. Il est donc recommandé d'utiliser le client Element pour se connecter à cette application. Cette application est disponible [ici] (https://github.com/YunoHost-Apps/element_ynh) + +### Informations supplémentaires + +#### Support multi-instan + +Pour avoir la possibilité d'avoir plusieurs domaines, vous pouvez utiliser plusieurs instances de synapse. Dans ce cas, toutes les instances fonctionneront sur des ports différents, il est donc très important de mettre un enregistrement SRV dans votre domaine. Vous pouvez obtenir le port que vous devez mettre dans votre enregistrement SRV avec la commande suivante + +``` +yunohost app setting synapse__ synapse_tls_port +``` + +Avant d'installer une deuxième instance de l'application, il est vraiment recommandé de mettre à jour toutes les instances existantes. + +## Liens utiles + ++ Site web : [matrix.org](https://matrix.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/synapse](https://github.com/YunoHost-Apps/synapse_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/synapse/issues](https://github.com/YunoHost-Apps/synapse_ynh/issues) diff --git a/pages/04.applications/10.docs/synapse/app_synapse.md b/pages/04.applications/10.docs/synapse/app_synapse.md new file mode 100644 index 00000000..65af01d7 --- /dev/null +++ b/pages/04.applications/10.docs/synapse/app_synapse.md @@ -0,0 +1,141 @@ +--- +title: Synapse +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_synapse' +--- + +[![Installer Synapse with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=synapse) [![Integration level](https://dash.yunohost.org/integration/synapse.svg)](https://dash.yunohost.org/appci/app/synapse) + +*Synapse* is an instant messaging server Matrix network. + +YunoHost chatroom with Matrix: [https://matrix.to/#/#yunohost:matrix.org](https://matrix.to/#/#yunohost:matrix.org). + +### Disclaimers / important information + +### Configuration + +#### Install for ARM architecture (or slow arch) + +For all slow or ARM architecture it's recommended to build the dh file before the install to have a quicker install. +You could build it by this cmd: `openssl dhparam -out /etc/ssl/private/dh2048.pem 2048 > /dev/null` +After that you can install it without problem. + +The package uses a prebuilt python virtual environnement. The binary are taken from this repository: https://github.com/Josue-T/synapse_python_build +The script to build the binary is also available. + +#### Web client + +If you want a web client you can also install Element with this package: https://github.com/YunoHost-Apps/element_ynh . + +#### Access by federation + +If your server name is identical to the domain on which synapse is installed, and the default port 8448 is used, your server is normally already accessible by the federation. + +If not, you can add the following line in the DNS configuration but you normally don't need it as a .well-known file is edited during the install to declare your server name and port to the federation. + +``` +_matrix._tcp. IN SRV 10 0 +``` + +for example + +``` +_matrix._tcp.example.com. 3600 IN SRV 10 0 SYNAPSE_PORT synapse.example.com. +``` + +You need to replace `SYNAPSE_PORT` by the real port. This port can be obtained by the command: `yunohost app setting SYNAPSE_INSTANCE_NAME synapse_tls_port` + +For more details, see: https://github.com/matrix-org/synapse/blob/master/docs/federate.md + +If it is not automatically done, you need to open this in your ISP box. + +You also need a valid TLS certificate for the domain used by Synapse. To do that you can refer to the documentation here: https://yunohost.org/#/certificate_en + +#### Turnserver + +For VoIP and video conferencing a turnserver is also installed (and configured). The turnserver listens on two UDP and TCP ports. You can get them with these commands: + +``` +yunohost app setting synapse turnserver_tls_port +yunohost app setting synapse turnserver_alt_tls_port + +``` + +The turnserver will also choose a port dynamically when a new call starts. The range is between 49153-49193. + +For some security reason the ports range (49153-49193) isn't automatically open by default. If you want to use the synapse server for voip or conferencing you will need to open this port range manually. To do this just run this command: + +``` +yunohost firewall allow Both 49153:49193 +``` + +You might also need to open these ports (if it is not automatically done) on your ISP box. + +To prevent the situation when the server is behind a NAT, the public IP is written in the turnserver config. By this the turnserver can send its real public IP to the client. For more information see [the coturn example config file](https://github.com/coturn/coturn/blob/master/examples/etc/turnserver.conf#L102-L120).So if your IP changes, you could run the script `/opt/yunohost/__SYNAPSE_INSTANCE_NAME__/Coturn_config_rotate.sh` to update your config. + +If you have a dynamic IP address, you also might need to update this config automatically. To do that just edit a file named `/etc/cron.d/coturn_config_rotate` and add the following content (just adapt the `__SYNAPSE_INSTANCE_NAME__` which could be `synapse` or maybe `synapse__2`). + +``` +*/15 * * * * root bash /opt/yunohost/__SYNAPSE_INSTANCE_NAME__/Coturn_config_rotate.sh; +``` + +##### OpenVPN + +In case of you have an OpenVPN server you might want than `coturn-synapse` restart when the VPN restart. To do this create a file named `/usr/local/bin/openvpn_up_script.sh` with this content: + +``` +#!/bin/bash + +( + sleep 5 + sudo systemctl restart coturn-synapse.service +) & +exit 0 +``` + +Add this line in you sudo config file `/etc/sudoers` + +``` +openvpn ALL=(ALL) NOPASSWD: /bin/systemctl restart coturn-synapse.service +``` + +And add this line in your OpenVPN config file + +``` +ipchange /usr/local/bin/openvpn_up_script.sh +``` + +#### Important Security Note + +We do not recommend running Element from the same domain name as your Matrix homeserver (synapse). The reason is the risk of XSS (cross-site-scripting) vulnerabilities that could occur if someone caused Element to load and render malicious user generated content from a Matrix API which then had trusted access to Element (or other apps) due to sharing the same domain. + +We have put some coarse mitigations into place to try to protect against this situation, but it's still not a good practice to do it in the first place. See https://github.com/vector-im/element-web/issues/1977 for more details. + +### YunoHost specific features + +### Limitations + +Synapse uses a lot of ressource. So on slow architecture (like small ARM board), this app could take a lot of CPU and RAM. + +This app doesn't provide any real good web interface. So it's recommended to use Element client to connect to this app. This app is available [here](https://github.com/YunoHost-Apps/element_ynh) + +### Additional information + +#### Multi instance support + +To give a possibility to have multiple domains you can use multiple instances of synapse. In this case all instances will run on different ports so it's really important to put a SRV record in your domain. You can get the port that you need to put in your SRV record with this following command: + +``` +yunohost app setting synapse__ synapse_tls_port +``` + +Before installing a second instance of the app it's really recommended to update all existing instances. + +## Useful links + ++ Website: [matrix.org](https://matrix.org/) ++ Application software repository: [github.com - YunoHost-Apps/synapse](https://github.com/YunoHost-Apps/synapse_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/synapse/issues](https://github.com/YunoHost-Apps/synapse_ynh/issues) diff --git a/pages/04.applications/10.docs/syncthing/app_syncthing.fr.md b/pages/04.applications/10.docs/syncthing/app_syncthing.fr.md new file mode 100644 index 00000000..3caf608d --- /dev/null +++ b/pages/04.applications/10.docs/syncthing/app_syncthing.fr.md @@ -0,0 +1,22 @@ +--- +title: Syncthing +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_syncthing' +--- + +[![Installer Syncthing avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=syncthing) [![Integration level](https://dash.yunohost.org/integration/syncthing.svg)](https://dash.yunohost.org/appci/app/syncthing) + +*Syncthing* est un programme de synchronisation continue de fichiers. Il synchronise les fichiers entre deux ou plusieurs ordinateurs en temps réel, à l'abri des regards indiscrets. Vos données sont vos seules données et vous méritez de choisir où elles sont stockées, si elles sont partagées avec un tiers et comment elles sont transmises sur Internet. + +### Captures d'écran + +![Capture d'écran de Syncthing](https://github.com/YunoHost-Apps/syncthing_ynh/blob/master/doc/screenshots/screenshot1.png) + +## Liens utiles + ++ Site web : [syncthing.net](https://syncthing.net/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/syncthing](https://github.com/YunoHost-Apps/syncthing_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/syncthing/issues](https://github.com/YunoHost-Apps/syncthing_ynh/issues) diff --git a/pages/04.applications/10.docs/syncthing/app_syncthing.md b/pages/04.applications/10.docs/syncthing/app_syncthing.md new file mode 100644 index 00000000..336cfd96 --- /dev/null +++ b/pages/04.applications/10.docs/syncthing/app_syncthing.md @@ -0,0 +1,22 @@ +--- +title: Syncthing +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_syncthing' +--- + +[![Installer Syncthing with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=syncthing) [![Integration level](https://dash.yunohost.org/integration/syncthing.svg)](https://dash.yunohost.org/appci/app/syncthing) + +*Syncthing* is a continuous file synchronization program. It synchronizes files between two or more computers in real time, safely protected from prying eyes. Your data is your data alone and you deserve to choose where it is stored, whether it is shared with some third party, and how it's transmitted over the internet. + +### Screenshots + +![Screenshot of Syncthing](https://github.com/YunoHost-Apps/syncthing_ynh/blob/master/doc/screenshots/screenshot1.png) + +## Useful links + ++ Website: [syncthing.net](https://syncthing.net/) ++ Application software repository: [github.com - YunoHost-Apps/syncthing](https://github.com/YunoHost-Apps/syncthing_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/syncthing/issues](https://github.com/YunoHost-Apps/syncthing_ynh/issues) diff --git a/pages/04.applications/10.docs/teampass/app_teampass.fr.md b/pages/04.applications/10.docs/teampass/app_teampass.fr.md new file mode 100644 index 00000000..c66cf089 --- /dev/null +++ b/pages/04.applications/10.docs/teampass/app_teampass.fr.md @@ -0,0 +1,29 @@ +--- +title: TeamPass +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_teampass' +--- + +[![Installer TeamPass avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=teampass) [![Integration level](https://dash.yunohost.org/integration/teampass.svg)](https://dash.yunohost.org/appci/app/teampass) + +*TeamPass* est un gestionnaire de mots de passe dédié à la gestion des mots de passe de manière collaborative en les partageant entre les membres d'une équipe. Teampass offre un large ensemble de fonctionnalités permettant de gérer vos mots de passe et les données associées de manière organisée dans le respect des droits d'accès définis pour chaque utilisateur. + +### Captures d'écran + +![Capture d'écran de Teampass](https://github.com/YunoHost-Apps/teampass_ynh/blob/master/doc/screenshots/screenshot.png) + +### Avertissements / informations importantes + +### Configuration + +Utilisez le panel admin de votre teampass pour configurer cette app. +Pour trouver le panel admin, utiliser le login 'admin' et le mot de passe choisi durant l'installation. + +## Liens utiles + ++ Site web : [teampass.net](https://teampass.net/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/teampass](https://github.com/YunoHost-Apps/teampass_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/teampass/issues](https://github.com/YunoHost-Apps/teampass_ynh/issues) diff --git a/pages/04.applications/10.docs/teampass/app_teampass.md b/pages/04.applications/10.docs/teampass/app_teampass.md new file mode 100644 index 00000000..695e5519 --- /dev/null +++ b/pages/04.applications/10.docs/teampass/app_teampass.md @@ -0,0 +1,30 @@ +--- +title: TeamPass +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_teampass' +--- + +[![Installer TeamPass with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=teampass) [![Integration level](https://dash.yunohost.org/integration/teampass.svg)](https://dash.yunohost.org/appci/app/teampass) + +*TeamPass* is a Passwords Manager dedicated for managing passwords in a collaborative way by sharing them among team members. +Teampass offers a large set of features permitting to manage your passwords and related data in an organized way in respect to the access rights defined for each users. + +### Screenshots + +![Screenshot of Teampass](https://github.com/YunoHost-Apps/teampass_ynh/blob/master/doc/screenshots/screenshot.png) + +### Disclaimers / important information + +### Configuration + +Use the admin panel of your teampass to configure this app. +To find the admin panel, use the login 'admin' and the password choose during the installation. + +## Useful links + ++ Website: [teampass.net](https://teampass.net/) ++ Application software repository: [github.com - YunoHost-Apps/teampass](https://github.com/YunoHost-Apps/teampass_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/teampass/issues](https://github.com/YunoHost-Apps/teampass_ynh/issues) diff --git a/pages/04.applications/10.docs/thelounge/app_thelounge.fr.md b/pages/04.applications/10.docs/thelounge/app_thelounge.fr.md new file mode 100644 index 00000000..c27322b5 --- /dev/null +++ b/pages/04.applications/10.docs/thelounge/app_thelounge.fr.md @@ -0,0 +1,29 @@ +--- +title: The Lounge +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_thelounge' +--- + +[![Installer The Lounge avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=thelounge) [![Integration level](https://dash.yunohost.org/integration/thelounge.svg)](https://dash.yunohost.org/appci/app/thelounge) + +*The Lounge* est un client web IRC moderne conçu pour l'auto-hébergement. + +#### Caractéristiques: + +- Toujours connecté +- Interface réactive +- Support multi-utilisateurs + +### Captures d'écran + +![Captures d'écran de The Lounge](https://github.com/YunoHost-Apps/thelounge_ynh/blob/master/doc/screenshots/thelounge-screenshot.png) + +## Liens utiles + ++ Site web : [thelounge.chat](https://thelounge.chat/) ++ Démonstration : [Démo](https://demo.thelounge.chat) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/thelounge](https://github.com/YunoHost-Apps/thelounge_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/thelounge/issues](https://github.com/YunoHost-Apps/thelounge_ynh/issues) diff --git a/pages/04.applications/10.docs/thelounge/app_thelounge.md b/pages/04.applications/10.docs/thelounge/app_thelounge.md new file mode 100644 index 00000000..b0612696 --- /dev/null +++ b/pages/04.applications/10.docs/thelounge/app_thelounge.md @@ -0,0 +1,29 @@ +--- +title: The Lounge +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_thelounge' +--- + +[![Installer The Lounge with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=thelounge) [![Integration level](https://dash.yunohost.org/integration/thelounge.svg)](https://dash.yunohost.org/appci/app/thelounge) + +*The Lounge* is a modern web IRC client designed for self-hosting + +### Features: + +- Always connected +- Responsive interface +- Multi-user support + +### Screenshots + +![Screenshots of The Lounge](https://github.com/YunoHost-Apps/thelounge_ynh/blob/master/doc/screenshots/thelounge-screenshot.png) + +## Useful links + ++ Website: [thelounge.chat](https://thelounge.chat/) ++ Demonstration: [Demo](https://demo.thelounge.chat) ++ Application software repository: [github.com - YunoHost-Apps/thelounge](https://github.com/YunoHost-Apps/thelounge_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/thelounge/issues](https://github.com/YunoHost-Apps/thelounge_ynh/issues) diff --git a/pages/04.applications/10.docs/tiddlywiki/app_tiddlywiki.fr.md b/pages/04.applications/10.docs/tiddlywiki/app_tiddlywiki.fr.md new file mode 100644 index 00000000..d39267a4 --- /dev/null +++ b/pages/04.applications/10.docs/tiddlywiki/app_tiddlywiki.fr.md @@ -0,0 +1,33 @@ +--- +title: TiddlyWiki +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_tiddlywiki' +--- + +[![Installer TiddlyWiki avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=tiddlywiki) [![Integration level](https://dash.yunohost.org/integration/tiddlywiki.svg)](https://dash.yunohost.org/appci/app/tiddlywiki) + +*TiddlyWiki* est un wiki interactif complet en JavaScript. Il peut être utilisé comme un simple fichier HTML dans le navigateur ou comme une puissante application Node.js. Il est hautement personnalisable : toute l'interface utilisateur est elle-même implémentée en WikiText paramétrable. + +### Captures d'écran + +![Capture d'écran de TiddlyWiki](https://github.com/YunoHost-Apps/tiddlywiki_ynh/blob/master/doc/screenshots/screenshot.png) + +### Avertissements / informations importantes + +### Sauvez your Tiddlers ! + +Il est très important que vous sauvegardiez régulièrement vos notes (tiddlers) localement. + +- Cliquez sur l'icône du nuage -> `Save snapshot for offline use`. + +Pour restaurer une sauvegarde locale sur le serveur, glissez et déposez votre fichier de sauvegarde des tiddlers dans votre page TiddlyWiki. + +## Liens utiles + ++ Site web : [tiddlywiki.com](https://tiddlywiki.com/) ++ Démonstration : [Démo](https://tiddlywiki.com/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/tiddlywiki](https://github.com/YunoHost-Apps/tiddlywiki_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/tiddlywiki/issues](https://github.com/YunoHost-Apps/tiddlywiki_ynh/issues) diff --git a/pages/04.applications/10.docs/tiddlywiki/app_tiddlywiki.md b/pages/04.applications/10.docs/tiddlywiki/app_tiddlywiki.md new file mode 100644 index 00000000..e8c8e805 --- /dev/null +++ b/pages/04.applications/10.docs/tiddlywiki/app_tiddlywiki.md @@ -0,0 +1,33 @@ +--- +title: TiddlyWiki +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_tiddlywiki' +--- + +[![Installer TiddlyWiki with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=tiddlywiki) [![Integration level](https://dash.yunohost.org/integration/tiddlywiki.svg)](https://dash.yunohost.org/appci/app/tiddlywiki) + +*TiddlyWiki* is a complete interactive wiki in JavaScript. It can be used as a single HTML file in the browser or as a powerful Node.js application. It is highly customisable: the entire user interface is itself implemented in hackable WikiText. + +### Screenshots + +![Screenshot of TiddlyWiki](https://github.com/YunoHost-Apps/tiddlywiki_ynh/blob/master/doc/screenshots/screenshot.png) + +### Disclaimers / important information + +### Save your Tiddlers! + +It is very important that you regularly backup your notes (tiddlers) locally. + +- Click on the cloud icon -> `Save snapshot for offline use` + +To restore a local backup to the server, drag and drop your tiddlers backup file into your TiddlyWiki page. + +## Useful links + ++ Website: [tiddlywiki.com](https://tiddlywiki.com/) ++ Demonstration: [Demo](https://tiddlywiki.com/) ++ Application software repository: [github.com - YunoHost-Apps/tiddlywiki](https://github.com/YunoHost-Apps/tiddlywiki_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/tiddlywiki/issues](https://github.com/YunoHost-Apps/tiddlywiki_ynh/issues) diff --git a/pages/04.applications/10.docs/timemachine/app_timemachine.md b/pages/04.applications/10.docs/timemachine/app_timemachine.md new file mode 100644 index 00000000..fc235872 --- /dev/null +++ b/pages/04.applications/10.docs/timemachine/app_timemachine.md @@ -0,0 +1,22 @@ +--- +title: Time Machine +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_timemachine' +--- + +[![Install Time Machine with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=timemachine) +[![Integration level](https://dash.yunohost.org/integration/timemachine.svg)](https://dash.yunohost.org/appci/app/timemachine) + +**Time Machine** creates a Samba Network Drive on your server which can be used by your Mac to create Time Machine backups. The local instance is automatically discovered in Time Machine and shows up as `*.local` + + +To setup the drive so that it can be used over the internet, simply use the connection string sent to the admin user's email to connect via Finder (`Command + K` in Finder). Then the drive will show up as your domain/IP in Time Machine's Backup Disk list. + + +## Useful links + +* Application software repository: [https://github.com/YunoHost-Apps/timemachine_ynh](https://github.com/YunoHost-Apps/timemachine_ynh) +* Report a bug: [https://github.com/YunoHost-Apps/timemachine_ynh/issues](https://github.com/YunoHost-Apps/timemachine_ynh/issues) diff --git a/pages/04.applications/10.docs/transmission/app_transmission.fr.md b/pages/04.applications/10.docs/transmission/app_transmission.fr.md new file mode 100644 index 00000000..936d0a35 --- /dev/null +++ b/pages/04.applications/10.docs/transmission/app_transmission.fr.md @@ -0,0 +1,51 @@ +--- +title: Transmission +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_transmission' +--- + +![logo de Transmission](image://transmission.png) Transmission + +### C’est quoi Transmission ? +Transmission est un logiciel de téléchargement et de partage de fichiers basé sur le protocole BitTorrent. +* [Site de transmission](http://transmissionbt.com/) + +### Comment télécharger des fichiers complétés ? +Il est possible de télécharger les fichiers complétés en cliquant sur le bouton « Download ». + +Si vous avez installé Transmission sur `/torrent/`, vous pourrez télécharger vos fichiers complétés à l’adresse suivante : https://votre-domaine.org/torrent/downloads/ + +### Envoi de fichier vers le serveur pour seeder +Dans YunoHost, les fichiers complétés sont enregistrés dans : `/home/yunohost.transmission/completed` + +#### Avec SFTP (simple) +À partir de votre [gestionnaire de fichiers](https://fr.wikipedia.org/wiki/Gestionnaire_de_fichier) (sous GNU/Linux) faites `CTRL + L` puis entrez : +```bash +sftp://@/home/yunohost.transmission/completed +``` +utilisateur = admin ou root + +#### Avec SCP (avancé) +Pour transférer le fichier, entrez la commande suivante : + +```bash +scp -r /votre/fichier/ admin@votre-domaine.org:/home/yunohost.transmission/completed +``` + +##### Comment télécharger un répertoire entier ? +Une fois connecté en [SSH](/ssh), placez-vous dans le répertoire de téléchargement et zippez le répertoire : +```bash +cd /home/yunohost.transmission/completed +zip -r votre_archive.zip [dossier] +``` + +Pour plus de détails sur le transfert de fichier avec *scp* voir ici : http://doc.ubuntu-fr.org/ssh#transfert_-_copie_de_fichiers + +#### Problèmes de droits +Si vous rencontrez des problèmes de droits `Permission denied` après l’ajout de fichiers à seeder, changez l’utilisateur qui possède les droits sur ces fichiers : +```bash +chown -R debian-transmission: /home/yunohost.transmission/completed/* +``` diff --git a/pages/04.applications/10.docs/transmission/app_transmission.md b/pages/04.applications/10.docs/transmission/app_transmission.md new file mode 100644 index 00000000..6e1ed3a9 --- /dev/null +++ b/pages/04.applications/10.docs/transmission/app_transmission.md @@ -0,0 +1,48 @@ +--- +title: Transmission +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_transmission' +--- + +![Transmission's logo](image://transmission.png) + +### What is Transmission? + +Transmission is a share software based on BitTorrent protocol. +* [Transmission web site](http://transmissionbt.com/) + +### How to download completed files? + +If Transmission is installed on `/torrent/`, you could download your completed files to the following address: https://your-domain-name.org/torrent/downloads/ + +### Sending files towards server for seeding + +In YunoHost, completed files are saved in: `/home/yunohost.transmission/completed` + +#### With SFTP + +With your [file manager](https://en.wikipedia.org/wiki/File_manager) (under GNU/Linux) do `CTRL + L` then enter: + +```bash +sftp://@/home/yunohost.transmission/completed +``` +user = admin or root + +#### With SCP (complex) +To transfer file, type in the following command: + +```bash +scp (-r) /your/file/ root@your-domain.org:/home/yunohost.transmission/completed +``` + +##### How to download a complete folder? +Once connected to your server, using [SSH](/ssh), move to the download folder and ZIP it: +```bash +cd /home/yunohost.transmission/completed +zip -r your_archive.zip [dossier] +``` + +More informations about file transfer using *scp*: http://doc.ubuntu-fr.org/ssh#transfert_-_copie_de_fichiers (French, need English documentation) diff --git a/pages/04.applications/10.docs/trilium/app_trilium.fr.md b/pages/04.applications/10.docs/trilium/app_trilium.fr.md new file mode 100644 index 00000000..8a1875fa --- /dev/null +++ b/pages/04.applications/10.docs/trilium/app_trilium.fr.md @@ -0,0 +1,29 @@ +--- +title: Trilium Notes +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_trilium' +--- + +[![Installer Trilium Notes avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=trilium) [![Integration level](https://dash.yunohost.org/integration/trilium.svg)](https://dash.yunohost.org/appci/app/trilium) + +*Trilium Notes* est une application de prise de note hiérarchique semblable à Evernote, avec maintes fonctions avancées, centrée sur la construction d'une large base de connaissances personnelles. + +### Captures d'écran + +![Capture d'écran de Trilium Notes](https://github.com/YunoHost-Apps/trilium_ynh/blob/master/doc/screenshots/screenshot.png) +![Capture d'écran de Trilium Notes](https://github.com/YunoHost-Apps/trilium_ynh/blob/master/doc/screenshots/example.jpg) + +### Avertissements / informations importantes + +### Configuration + +On vous demandera de choisir un nom d'utilisateur et mot de passe quand vous installez l'application. Vous pouvez configurer Trillium depuis le menu de configuration de l'interface web. + +## Liens utiles + ++ Site web : [github.com/zadam/trilium](https://github.com/zadam/trilium) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/trilium](https://github.com/YunoHost-Apps/trilium_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/trilium/issues](https://github.com/YunoHost-Apps/trilium_ynh/issues) diff --git a/pages/04.applications/10.docs/trilium/app_trilium.md b/pages/04.applications/10.docs/trilium/app_trilium.md new file mode 100644 index 00000000..31549b28 --- /dev/null +++ b/pages/04.applications/10.docs/trilium/app_trilium.md @@ -0,0 +1,29 @@ +--- +title: Trilium Notes +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_trilium' +--- + +[![Installer Trilium Notes with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=trilium) [![Integration level](https://dash.yunohost.org/integration/trilium.svg)](https://dash.yunohost.org/appci/app/trilium) + +*Trilium Notes* is an Evernote-like hierarchical note taking application with many advanced features, focused on building a large personal knowledge base. + +### Screenshots + +![Screenshot of Trilium Notes](https://github.com/YunoHost-Apps/trilium_ynh/blob/master/doc/screenshots/screenshot.png) +![Screenshot of Trilium Notes](https://github.com/YunoHost-Apps/trilium_ynh/blob/master/doc/screenshots/example.jpg) + +### Disclaimers / important information + +### Configuration + +You will be asked to choose a username and password when you first access the app. You can configure Trillium from the settings menu of the app interface. + +## Useful links + ++ Website: [github.com/zadam/trilium](https://github.com/zadam/trilium) ++ Application software repository: [github.com - YunoHost-Apps/trilium](https://github.com/YunoHost-Apps/trilium_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/trilium/issues](https://github.com/YunoHost-Apps/trilium_ynh/issues) diff --git a/pages/04.applications/10.docs/ttrss/app_ttrss.fr.md b/pages/04.applications/10.docs/ttrss/app_ttrss.fr.md new file mode 100644 index 00000000..7b663867 --- /dev/null +++ b/pages/04.applications/10.docs/ttrss/app_ttrss.fr.md @@ -0,0 +1,36 @@ +--- +title: Tiny Tiny RSS +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ttrss' +--- + +![logo de Tiny Tiny RSS](image://ttrss.png?width=80) + +[![Installer Tiny Tiny RSS avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=ttrss) [![Integration level](https://dash.yunohost.org/integration/ttrss.svg)](https://dash.yunohost.org/appci/app/ttrss) + +Tiny Tiny RSS est un lecteur de flux d’actualité utilisant les protocoles RSS et Atom. + +### Exportation/importation des flux + +Il est possible de faire une sauvegarde de ces flux d’actualité en format opml. + +Pour cela, il faut aller dans Actions -> Configuration -> onglet flux -> chapitre OPML -> Exporter/Importer en OPML. + +### Client Android + +Il est possible d’utiliser le client Android ttrss-reader pour consulter ces flux : **[ttrss-reader](https://f-droid.org/packages/org.ttrssreader/)** + +Sur l’interface web, dans Actions -> Configuration, cochez « Activer l’accès par API » +puis dans ttrss-reader sur Android, l’adresse du serveur Tiny Tiny RSS : https://votredomaine.org/ttrss, nom d’utilisateur, mot de passe. (pas besoin d’utiliser l’authentification HTTP) + +**Note** : vous pouvez avoir besoin de désinstaller, puis réinstaller entièrement l'application Tiny Tiny RSS via l’administration de YunoHost pour que la connexion puisse se faire. + +## Liens utiles + + + Site web : [git.tt-rss.org/git/tt-rss/wiki](https://git.tt-rss.org/git/tt-rss/wiki) + + Site de démonstration (login : `demo`, `demo`): [srv.tt-rss.org/tt-rss/](https://srv.tt-rss.org/tt-rss/) + + Dépôt logiciel de Tiny Tiny RSS : [github.com - YunoHost-Apps/ttrss](https://github.com/YunoHost-Apps/ttrss_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/ttrss/issues](https://github.com/YunoHost-Apps/ttrss_ynh/issues) diff --git a/pages/04.applications/10.docs/ttrss/app_ttrss.md b/pages/04.applications/10.docs/ttrss/app_ttrss.md new file mode 100644 index 00000000..3889c3f4 --- /dev/null +++ b/pages/04.applications/10.docs/ttrss/app_ttrss.md @@ -0,0 +1,34 @@ +--- +title: Tiny Tiny RSS +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ttrss' +--- + +![Tiny Tiny RSS's logo](image://ttrss.png?width=80) + +[![Install Tiny Tiny RSS with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=ttrss) [![Integration level](https://dash.yunohost.org/integration/ttrss.svg)](https://dash.yunohost.org/appci/app/ttrss) + +Tiny Tiny RSS is a news feed reader using RSS and Atom protocols. + +### Exporting/importing feeds +Tiny Tiny RSS allows you to save your feeds in opml format. +In order to do so, go to Actions -> Configuration -> feed tab -> OPML section -> Export/Import OPML. + +### Android Client + +You can read your feeds on Android using ttrss-reader application: **[ttrss-reader](https://f-droid.org/packages/org.ttrssreader/)** + +To use it, you need to go to Actions -> Configuration, in Tiny Tiny RSS web interface and select "Activate API". +Then, in your android ttrss-reader, fill the Tiny Tiny RSS server address: https://yourdomain.org/ttrss, username, password (no need to use HTTP authentication). + +**Note**: you may need to uninstall and reinstall the Tiny Tiny RSS application through the YunoHost admin panel in order to be able to connect. + +## Useful links + + + Website: [git.tt-rss.org/git/tt-rss/wiki](https://git.tt-rss.org/git/tt-rss/wiki) + + Official documentation: (login as `demo`, `demo`): [srv.tt-rss.org/tt-rss/](https://srv.tt-rss.org/tt-rss/) + + Application software repository: [github.com - YunoHost-Apps/ttrss](https://github.com/YunoHost-Apps/ttrss_ynh) + + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/ttrss/issues](https://github.com/YunoHost-Apps/ttrss_ynh/issues) diff --git a/pages/04.applications/10.docs/tyto/app_tyto.fr.md b/pages/04.applications/10.docs/tyto/app_tyto.fr.md new file mode 100644 index 00000000..ac01910a --- /dev/null +++ b/pages/04.applications/10.docs/tyto/app_tyto.fr.md @@ -0,0 +1,22 @@ +--- +title: Tyto +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_tyto' +--- + +[![Installer Tyto avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=tyto) [![Integration level](https://dash.yunohost.org/integration/tyto.svg)](https://dash.yunohost.org/appci/app/tyto) + +*Tyto* est un outil de gestion et d'organisation extensible et personnalisable. + +### Captures d'écran + +![Captures d'écran](https://github.com/YunoHost-Apps/tyto_ynh/blob/master/doc/screenshots/screenshot.png) + +## Liens utiles + ++ Site web : [jh3y.github.io/tyto](https://jh3y.github.io/tyto/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/tyto](https://github.com/YunoHost-Apps/tyto_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/tyto/issues](https://github.com/YunoHost-Apps/tyto_ynh/issues) diff --git a/pages/04.applications/10.docs/tyto/app_tyto.md b/pages/04.applications/10.docs/tyto/app_tyto.md new file mode 100644 index 00000000..0f576410 --- /dev/null +++ b/pages/04.applications/10.docs/tyto/app_tyto.md @@ -0,0 +1,22 @@ +--- +title: Tyto +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_tyto' +--- + +[![Installer Tyto with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=tyto) [![Integration level](https://dash.yunohost.org/integration/tyto.svg)](https://dash.yunohost.org/appci/app/tyto) + +*Tyto* is an extensible and customizable management and organisation tool. + +## Screenshots + +![Screenshots](https://github.com/YunoHost-Apps/tyto_ynh/blob/master/doc/screenshots/screenshot.png) + +## Useful links + ++ Website: [jh3y.github.io/tyto](https://jh3y.github.io/tyto/) ++ Application software repository: [github.com - YunoHost-Apps/tyto](https://github.com/YunoHost-Apps/tyto_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/tyto/issues](https://github.com/YunoHost-Apps/tyto_ynh/issues) diff --git a/pages/04.applications/10.docs/ulogger/app_ulogger.md b/pages/04.applications/10.docs/ulogger/app_ulogger.md new file mode 100644 index 00000000..d3a66f7b --- /dev/null +++ b/pages/04.applications/10.docs/ulogger/app_ulogger.md @@ -0,0 +1,45 @@ +--- +title: μlogger +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ulogger' +--- + +![μlogger's logo](image://ulogger-logo.png?resize=100) + + +[![Install μlogger with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=ulogger) +[![Integration level](https://dash.yunohost.org/integration/ulogger.svg)](https://dash.yunohost.org/appci/app/ulogger) + +**μlogger** is a web application for real-time collection of geolocation data, tracks viewing and management. Together with a dedicated μlogger mobile client (*F-Droid Store*) it may be used as a complete self hosted server–client solution for logging and monitoring users' geolocation. + +## Features: +- simple +- allows live tracking +- track statistics +- altitudes graph +- multiple users +- user authentication +- Google Maps +- OpenLayers (OpenStreet and other layers) +- user preferences stored in cookies +- simple admin menu +- export tracks to gpx and kml +- import tracks from gpx + +## Configuration +- Edit `scripts/setup.php` script, enable it by setting `$enabled` value to `true` +- Open http://YOUR_HOST/scripts/setup.php page in your browser +- Follow instructions in setup script. It will add database tables and set up your μlogger user +- **Remember to remove or disable `scripts/setup.php` script** +- Log in with your new user on your host, +- You may also want to set your new user as an admin in config file `$admin_user = "";` + +## Useful links + +* Upstream app code repository: [https://github.com/bfabiszewski/ulogger-server](https://github.com/bfabiszewski/ulogger-server) +* Demo: [https://ulogger.lima.zone](https://ulogger.lima.zone) +* Application software repository: [https://github.com/YunoHost-Apps/ulogger_ynh](https://github.com/YunoHost-Apps/ulogger_ynh) +* Report a bug: [https://github.com/YunoHost-Apps/ulogger_ynh/issues](https://github.com/YunoHost-Apps/ulogger_ynh/issues) diff --git a/pages/04.applications/10.docs/unattended_upgrades/app_unattended_upgrades.fr.md b/pages/04.applications/10.docs/unattended_upgrades/app_unattended_upgrades.fr.md new file mode 100644 index 00000000..76f3be98 --- /dev/null +++ b/pages/04.applications/10.docs/unattended_upgrades/app_unattended_upgrades.fr.md @@ -0,0 +1,21 @@ +--- +title: Unattented upgrades +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_unattended_upgrades' +--- + +![logo de unattended_upgrades](image://unattended_upgrades_logo.svg?resize=,80) + +[![Install unattended_upgrades with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=unattended_upgrades) [![Integration level](https://dash.yunohost.org/integration/unattended_upgrades.svg)](https://dash.yunohost.org/appci/app/unattended_upgrades) + +Unattended_upgrades est un outil qui permet de télécharger et installer les mises à jour de sécurité automatiquement et sans surveillance, en prenant soin de n'installer que les paquets provenant de la source APT configurée, et en vérifiant les invites dpkg concernant les modifications du fichier de configuration. +Apticron est un simple script qui envoie des courriels sur les mises à jour de paquets en attente comme les mises à jour de sécurité, en gérant correctement les paquets en attente. + +## Liens utiles + ++ Documentation officielle : [wiki.debian.org/UnattendedUpgrades](https://wiki.debian.org/UnattendedUpgrades) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/unattended_upgrades](https://github.com/YunoHost-Apps/unattended_upgrades_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/unattended_upgrades/issues](https://github.com/YunoHost-Apps/unattended_upgrades_ynh/issues) diff --git a/pages/04.applications/10.docs/unattended_upgrades/app_unattended_upgrades.md b/pages/04.applications/10.docs/unattended_upgrades/app_unattended_upgrades.md new file mode 100644 index 00000000..8c069635 --- /dev/null +++ b/pages/04.applications/10.docs/unattended_upgrades/app_unattended_upgrades.md @@ -0,0 +1,21 @@ +--- +title: Unattended upgrades +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_unattended_upgrades' +--- + +![Unattended_upgrades's logo](image://yunohost_package.png?height=80) + +[![Install unattended_upgrades with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=unattended_upgrades) [![Integration level](https://dash.yunohost.org/integration/unattended_upgrades.svg)](https://dash.yunohost.org/appci/app/unattended_upgrades) + +Unattended-upgrades can download and install security upgrades automatically and unattended, taking care to only install packages from the configured APT source, and checking for dpkg prompts about configuration file changes. +Apticron is a simple script which sends emails about pending package updates such as security updates, properly handling packages on hold both by dselect and aptitude. + +## Useful links + ++ Official documentation: [wiki.debian.org/UnattendedUpgrades](https://wiki.debian.org/UnattendedUpgrades) ++ Application software repository: [github.com - YunoHost-Apps/unattended_upgrades](https://github.com/YunoHost-Apps/unattended_upgrades_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/unattended_upgrades/issues](https://github.com/YunoHost-Apps/unattended_upgrades_ynh/issues) diff --git a/pages/04.applications/10.docs/vaultwarden/app_vaultwarden.fr.md b/pages/04.applications/10.docs/vaultwarden/app_vaultwarden.fr.md new file mode 100644 index 00000000..6888d912 --- /dev/null +++ b/pages/04.applications/10.docs/vaultwarden/app_vaultwarden.fr.md @@ -0,0 +1,49 @@ +--- +title: Vaultwarden +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_vaultwarden' + aliases: + - '/app_bitwarden' +--- + +![logo de Bitwarden](image://bitwarden_logo.png?width=80) + +[![Install Vaultwarden with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=vaultwarden) [![Integration level](https://dash.yunohost.org/integration/vaultwarden.svg)](https://dash.yunohost.org/appci/app/vaultwarden) + +Vaultwarden est un gestionnaire de mots de passe freemium et open source sous licence AGPL, qui permet de générer et de conserver des mots de passe de manière sécurisée. Ces éléments sont protégés par un seul et unique mot de passe appelé « mot de passe maître ». Il est créé en 2016 par Kyle Spearrin, un architecte logiciel. + +Le logiciel est disponible sur la plupart des systèmes d'exploitation (GNU/Linux, Windows, macOS, iOS, Android ainsi qu'en ligne de commande), et comme module d'extension pour navigateur web. Il est également possible de consulter ses mot de passe depuis un site web.[¹](#sources) + +## Configuration + +Pour configurer l'application il faut se rendre à l'adresse : `sous.domaine.tld/admin` + +## Limitations avec YunoHost + +Les authentification HTTP et LDAP ne sont pas pris en charges. + +## Applications clientes + +| Nom de l'application [²] | Plateforme | Multi-comptes | Source | Play Store | F-Droid | Apple Store | +|--------------------------|------------|---------------|--------|------------|---------|-------------| +| Bitwarden | GNU/Linux / macOS / Windows | Oui | [bitwarden.com - download](https://bitwarden.com/#download) | +| Bitwarden | Android / iOS | ? | | [Playstore - Birwarden](https://play.google.com/store/apps/details?id=com.x8bit.bitwarden) | X | [App Store - Bitwarden](https://itunes.apple.com/app/bitwarden-free-password-manager/id1137397744?mt=8) | + + +> [²]: (of) : Officielle / (no) : non officiel + +## Liens utiles + + + Site web : [bitwarden.com (en)](https://bitwarden.com/) + + Documentation officielle : [help.bitwarden.com (en)](https://help.bitwarden.com/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/vaultwarden](https://github.com/YunoHost-Apps/vaultwarden_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/vaultwarden/issues](https://github.com/YunoHost-Apps/vaultwarden_ynh/issues) + + ------ + + ### Sources + +¹ [wikipedia.org - Bitwarden](https://fr.wikipedia.org/wiki/Bitwarden) diff --git a/pages/04.applications/10.docs/vaultwarden/app_vaultwarden.it.md b/pages/04.applications/10.docs/vaultwarden/app_vaultwarden.it.md new file mode 100644 index 00000000..5a5110ce --- /dev/null +++ b/pages/04.applications/10.docs/vaultwarden/app_vaultwarden.it.md @@ -0,0 +1,60 @@ +--- +title: Vaultwarden +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_vaultwarden' + aliases: + - '/app_bitwarden' +--- + +![Logo di Bitwarden](image://bitwarden_logo.png?width=80) + +[![Installa Vaultwarden con YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=vaultwarden) [![Livello di integrazione](https://dash.yunohost.org/integration/vaultwarden.svg)](https://dash.yunohost.org/appci/app/vaultwarden) + +### Indice + +- [Configurazione](#configurazione) +- [Limiti con YunoHost](#limiti-con-yunohost) +- [Applicazioni per utenti](#applicazioni-per-utenti) +- [Collegamenti utili](#collegamenti-utili) + +Vaultwarden è un gestore di password gratuito con funzioni a pagamento, con licenza AGPL, che permette di generare e custodire password in maniera sicura. Una singola password, chiamata 'master password', protegge l'accesso alla cassaforte. Il progetto Bitwarden è stato iniziato nel 2016 da Kyle Spearrin, un ingegnere software. + +Il programma è disponibile sui principali sistemi operativi (GNU/Linux, Windows, macOS, iOS, Android e da riga di comando), e come estensione per i browser. È, inoltre, possibile accedere alle password dal sito.[¹](#fonti) + +## Configurazione + +Per configurare l'applicazione, visita: `sotto.dominio.tld/admin` + +### Token admin + +Se installata da web, Vaultwarden non comunica il token necessario per accedere all'interfaccia di amministrazione. Per recuperare la password, è necessario: +- fare il login da riga di comando (`ssh admin@sotto.dominio.tld`) ed +- eseguire `grep "admin_token" /etc/yunohost/apps/vaultwarden/settings.yml` + +## Limiti con YunoHost + +HTTP e l'autenticazione LDAP non sono supportati. + +## Applicazioni per utenti + +| Nome applicazione | Piattaforma | Multi-account | Fonte | Play Store | F-Droid | Apple Store | +|----------------------|----------|---------------|--------|------------|---------|-------------| +| Bitwarden | GNU/Linux / macOS / Windows | [Sì](https://bitwarden.com/help/account-switching/) | [bitwarden.com - download](https://bitwarden.com/download) | +| Bitwarden | Android / iOS | [Sì](https://bitwarden.com/help/account-switching/) | | [Playstore - Bitwarden](https://play.google.com/store/apps/details?id=com.x8bit.bitwarden) | Sì ([repo da aggiungere](https://mobileapp.bitwarden.com/fdroid/)) | [App Store - Bitwarden](https://itunes.apple.com/app/bitwarden-free-password-manager/id1137397744?mt=8) | + + +## Collegamenti utili + ++ Sito: [bitwarden.com](https://bitwarden.com/) ++ Documentazione ufficiale: [help.bitwarden.com](https://help.bitwarden.com/) ++ Repository dell'applicazione YunoHost: [github.com - YunoHost-Apps/vaultwarden](https://github.com/YunoHost-Apps/vaultwarden_ynh) ++ Segnala un problema o miglioramento aprendo una segnalazione (issue): [github.com - YunoHost-Apps/vaultwarden/issues](https://github.com/YunoHost-Apps/vaultwarden_ynh/issues) + +----- + +### Fonti + +¹ [wikipedia.org - Bitwarden](https://en.wikipedia.org/wiki/Bitwarden) diff --git a/pages/04.applications/10.docs/vaultwarden/app_vaultwarden.md b/pages/04.applications/10.docs/vaultwarden/app_vaultwarden.md new file mode 100644 index 00000000..43f8235c --- /dev/null +++ b/pages/04.applications/10.docs/vaultwarden/app_vaultwarden.md @@ -0,0 +1,48 @@ +--- +title: Vaultwarden +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_vaultwarden' + aliases: + - '/app_bitwarden' +--- + +![Bitwarden's logo](image://bitwarden_logo.png?width=80) + +[![Install Vaultwarden with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=vaultwarden) [![Integration level](https://dash.yunohost.org/integration/vaultwarden.svg)](https://dash.yunohost.org/appci/app/vaultwarden) + +Vaultwarden is a freemium libre password manager under AGPL license, allowing generation and storage of passwords in a secure way. These are protected by a single password called the "master password". It was created in 2016 by Kyle Spearrin, a software architect. + +The software is available for most operating systems (GNU/Linux, Windows, macOS, iOS, Android and command-line), and as a web browser plug-in. It is also possible to view passwords from a website.[¹](#sources) + +## Configuration + +To configure the app, go to this address: `sub.domain.tld/admin` + +## Limitations with YunoHost + +HTTP and LDAP authentication are not supported. + +## Customer applications + +| Application name [²] | Platform | Multi-account | Source | Play Store | F-Droid | Apple Store | +|----------------------|----------|---------------|--------|------------|---------|-------------| +| Bitwarden | GNU/Linux / macOS / Windows | Oui | [bitwarden.com - download](https://bitwarden.com/#download) | +| Bitwarden | Android / iOS | ? | | [Playstore - Birwarden](https://play.google.com/store/apps/details?id=com.x8bit.bitwarden) | X | [App Store - Bitwarden](https://itunes.apple.com/app/bitwarden-free-password-manager/id1137397744?mt=8) | + +> [²]: (of) : Official / (un) : Unofficial + +## Useful links + ++ Website: [bitwarden.com](https://bitwarden.com/) ++ Official documentation: [help.bitwarden.com](https://help.bitwarden.com/) ++ Application software repository: [github.com - YunoHost-Apps/vaultwarden](https://github.com/YunoHost-Apps/vaultwarden_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/vaultwarden/issues](https://github.com/YunoHost-Apps/vaultwarden_ynh/issues) + +----- + +### Sources + +¹ [wikipedia.org - Bitwarden](https://en.wikipedia.org/wiki/Bitwarden) diff --git a/pages/04.applications/10.docs/vikunja/app_vikunja.fr.md b/pages/04.applications/10.docs/vikunja/app_vikunja.fr.md new file mode 100644 index 00000000..6b6ec8ea --- /dev/null +++ b/pages/04.applications/10.docs/vikunja/app_vikunja.fr.md @@ -0,0 +1,40 @@ +--- +title: Vikunja +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_vikunja' +--- + +[![Installer Vikunja avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=vikunja) [![Integration level](https://dash.yunohost.org/integration/vikunja.svg)](https://dash.yunohost.org/appci/app/vikunja) + +*Vikunja* est une application de liste de tâches Open Source auto-hébergée pour toutes les plateformes. + +### Caractéristiques + +- Restez organisé +- Collaborez avec vos pairs +- Tâches +- Tableau Kanban +- CalDAV +- Liens + +### Captures d'écran + +![Capture d'écran de Vikunja](https://github.com/YunoHost-Apps/vikunja_ynh/blob/master/doc/screenshots/kanban.png) + +### Avertissements / informations importantes + +### Configuration + +Vous pouvez configurer Vikunja avec les config panels ou en modifiant le fichier `/opt/vikunja/config.yml` en vous aidant de la [documentation](https://vikunja.io/docs/config-options/). + +L'API est accessible par le lien suivant : https://domain.ltd/api/v1/docs. + +## Liens utiles + ++ Site web : [vikunja.io](https://vikunja.io/) ++ Démonstration : [Démo](https://try.vikunja.io/login) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/vikunja](https://github.com/YunoHost-Apps/vikunja_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/vikunja/issues](https://github.com/YunoHost-Apps/vikunja_ynh/issues) diff --git a/pages/04.applications/10.docs/vikunja/app_vikunja.md b/pages/04.applications/10.docs/vikunja/app_vikunja.md new file mode 100644 index 00000000..3c3ce701 --- /dev/null +++ b/pages/04.applications/10.docs/vikunja/app_vikunja.md @@ -0,0 +1,40 @@ +--- +title: Vikunja +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_vikunja' +--- + +[![Installer Vikunja with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=vikunja) [![Integration level](https://dash.yunohost.org/integration/vikunja.svg)](https://dash.yunohost.org/appci/app/vikunja) + +*Vikunja* is a self-hosted open-source to-do list application for all platforms. + +### Features + +- Stay organized +- Collaborate with peers +- Tasks +- Kanban board +- CalDAV +- Links + +### Screenshots + +![Screenshot of Vikunja](https://github.com/YunoHost-Apps/vikunja_ynh/blob/master/doc/screenshots/kanban.png) + +### Disclaimers / important information + +### Configuration + +You can configure Vikunja with the config panels in the webadmin or by editing this file `/opt/vikunja/config.yml` using the [documentation](https://vikunja.io/docs/config-options/). + +The API is accesible with this path: https://domain.ltd/api/v1/docs. + +## Useful links + ++ Website: [vikunja.io](https://vikunja.io/) ++ Demonstration: [Demo](https://try.vikunja.io/login) ++ Application software repository: [github.com - YunoHost-Apps/vikunja](https://github.com/YunoHost-Apps/vikunja_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/vikunja/issues](https://github.com/YunoHost-Apps/vikunja_ynh/issues) diff --git a/pages/04.applications/10.docs/wallabag2/app_wallabag2.fr.md b/pages/04.applications/10.docs/wallabag2/app_wallabag2.fr.md new file mode 100644 index 00000000..306bd356 --- /dev/null +++ b/pages/04.applications/10.docs/wallabag2/app_wallabag2.fr.md @@ -0,0 +1,37 @@ +--- +title: Wallabag2 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wallabag2' +--- + +![logo de wallabag2](image://wallabag2_logo.svg?resize=,80) + +[![Install Wallabag2 with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wallabag2) [![Integration level](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) + +Wallabag est une application de lecture différée : elle permet simplement d’archiver une page web en ne conservant que le contenu. Les éléments superflus (menus, publicités, etc.) sont supprimés. Sont disponibles : une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). + +### Fonctionnalités + +En plus des fonctionnalités principales de Wallabag, ce paquet propose également : + +* Une intégration avec le système de gestion des utilisateurs et le SSO de YunoHost - e.g. un bouton de déconnexion +* De permettre à un utilisateur d'être administrateur (réglage lors de l'installation) +* Un import asynchrone utilisant Redis (à activer dans les *Paramètres Internes*). L'import via RabbitMQ n'est pas (encore ?) supporté. + +## Liens utiles + ++ Site web : [www.wallabag.org](https://www.wallabag.org/) ++ Documentation officielle : [doc.wallabag.org](https://doc.wallabag.org/) ++ Démonstration : [Démo](https://vimeo.com/video/167435064) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/wallabag2](https://github.com/YunoHost-Apps/wallabag2_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/wallabag2/issues](https://github.com/YunoHost-Apps/wallabag2_ynh/issues) + +---- + +### Mettre à niveau depuis la v1.x + +La mise à niveau depuis le paquet YunoHost de Wallabag v1 demande une opération manuelle, c'est pourquoi un nouveau paquet est fourni. Pour le processus de migration, merci de vous référer à [la documentation officielle +de Wallabag](https://doc.wallabag.org/fr/user/import/wallabagv1.html). diff --git a/pages/04.applications/10.docs/wallabag2/app_wallabag2.md b/pages/04.applications/10.docs/wallabag2/app_wallabag2.md new file mode 100644 index 00000000..f0fb43cf --- /dev/null +++ b/pages/04.applications/10.docs/wallabag2/app_wallabag2.md @@ -0,0 +1,38 @@ +--- +title: Wallabag2 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wallabag2' +--- + +![wallabag2's logo](image://wallabag2_logo.svg?resize=,80) + +[![Install Wallabag2 with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wallabag2) [![Integration level](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) + +Wallabag is a self hostable Read-It-Later application allowing you to not miss any content anymore. Click, save, read it when you can. +It extracts content so that you can read it when you have time. + +### Features + +In addition to Wallabag core features, the following are made available with this package: + + * Integrate with YunoHost users and SSO - i.e. logout button + * Allow one user to be the administrator (set at the installation) + * Asynchronous import using Redis (need to be enabled in the *Internal Settings*). RabbitMQ import not supported (yet ?) + +## Useful links + ++ Website : [www.wallabag.org](https://www.wallabag.org/) ++ Official documentation : [doc.wallabag.org](https://doc.wallabag.org/) ++ Demonstration : [Demo](https://vimeo.com/video/167435064) ++ Application software repository : [github.com - YunoHost-Apps/wallabag2](https://github.com/YunoHost-Apps/wallabag2_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/wallabag2/issues](https://github.com/YunoHost-Apps/wallabag2_ynh/issues) + +---- + +### Upgrade from v1.x + +No automatic upgrade process is available. You need a manual (but simple) migration from Wallabag v1. +Please take a look at the [official documentation](https://doc.wallabag.org/en/user/import/wallabagv1.html). diff --git a/pages/04.applications/10.docs/weblate/app_weblate.fr.md b/pages/04.applications/10.docs/weblate/app_weblate.fr.md new file mode 100644 index 00000000..bea030c6 --- /dev/null +++ b/pages/04.applications/10.docs/weblate/app_weblate.fr.md @@ -0,0 +1,25 @@ +--- +title: Weblate +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_weblate' +--- + +![logo de weblate](image://weblate_logo.svg?resize=,80) + +[![Install Weblate with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=weblate) [![Integration level](https://dash.yunohost.org/integration/weblate.svg)](https://dash.yunohost.org/appci/app/weblate) + +Weblate est un outil de traduction en mode web fortement lié aux systèmes de contrôle de versions. A travers une interface utilisateur claire et simple, Weblate permet la propagation de traductions entre sous-projets, peut vérifier la qualité des traductions et est automatiquement lié aux fichiers sources. +Weblate fonctionne très bien avec un serveur GitLab, GitHub, Bitbucket. Il est possible d'importer les traductions déjà existantes d'un projet, de permettre à tout le monde de contribuer à la traduction d'un projet via son interface Web, et ensuite pousser les traductions sur le repository. +Il y a un système de revue, de suggestions, de commentaires sur une traduction. +On peut installer une authentification tiers, par exemple on peut se connecter avec son compte GitHub. Notre compte permet ensuite de garder un historique. + +## Liens utiles + ++ Site web : [weblate.org](https://weblate.org/) ++ Documentation officielle : [docs.weblate.org](https://docs.weblate.org/) ++ Démonstration: [Démo](https://docs.weblate.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/weblate](https://github.com/YunoHost-Apps/weblate_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/weblate/issues](https://github.com/YunoHost-Apps/weblate_ynh/issues) diff --git a/pages/04.applications/10.docs/weblate/app_weblate.md b/pages/04.applications/10.docs/weblate/app_weblate.md new file mode 100644 index 00000000..9b439209 --- /dev/null +++ b/pages/04.applications/10.docs/weblate/app_weblate.md @@ -0,0 +1,27 @@ +--- +title: Weblate +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_weblate' +--- + +![weblate's logo](image://weblate_logo.svg?resize=,80) + +[![Install Weblate with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=weblate) [![Integration level](https://dash.yunohost.org/integration/weblate.svg)](https://dash.yunohost.org/appci/app/weblate) + +Weblate is a web-based translation tool strongly linked to version control systems. Through a clear and simple user interface, Weblate allows the propagation of translations between sub-projects, can check the +quality of the translations and is automatically linked to the source files. +Weblate works very well with a GitLab, GitHub, Bitbucket server. It is possible to import already existing translations of a project, allowing everyone to contribute to the translation of a project via its web interface, +and then push the translations to the repository. +There is a system for reviewing, suggesting, commenting on a translation. +You can install a third party authentication, for example you can log in with your GitHub account. Our account then allows us to keep a history. + +## Useful links + ++ Website: [weblate.org](https://weblate.org/) ++ Official documentation: [docs.weblate.org](https://docs.weblate.org/) ++ Demonstration: [Demo](https://docs.weblate.org/) ++ Application software repository: [github.com - YunoHost-Apps/weblate](https://github.com/YunoHost-Apps/weblate_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/weblate/issues](https://github.com/YunoHost-Apps/weblate_ynh/issues) diff --git a/pages/04.applications/10.docs/webmin/app_webmin.md b/pages/04.applications/10.docs/webmin/app_webmin.md new file mode 100644 index 00000000..33d74df5 --- /dev/null +++ b/pages/04.applications/10.docs/webmin/app_webmin.md @@ -0,0 +1,32 @@ +--- +title: Webmin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_webmin' +--- + +![webmin's logo](image://webmin_logo.png?resize=100) + +[![Install Webmin with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=webmin) [![Integration level](https://dash.yunohost.org/integration/webmin.svg)](https://dash.yunohost.org/appci/app/webmin) + +## Overview + +Webmin is a web-based interface for system administration for Unix. Using any modern web browser, you can setup user accounts, Apache, DNS, file sharing and much more. Webmin removes the need to manually edit Unix configuration files like `/etc/passwd`, and lets you manage a system from the console or remotely. + +## Important information + +* This app has **root** access which can change core things in the system, thus **breaking the YunoHost**. Use it carefully and read the [documents](https://doxfer.webmin.com/Webmin/Main_Page) two times before changing values. +* Only **user** given permission at time of the installation can **access** the Webmin login interface +* To login to webmin, use root and root password +* Webmin will **update itself** when system updates are run. So no need to **run upgrade script** once installed. + + +## Useful links + +* Official app website: [http://www.webmin.com](http://www.webmin.com) +* Upstream app code repository: [https://github.com/webmin/webmin](https://github.com/webmin/webmin) +* YunoHost documentation for this app: [https://yunohost.org/app_webmin](https://yunohost.org/app_webmin) +* Report a bug: [https://github.com/YunoHost-Apps/webmin_ynh/issues](https://github.com/YunoHost-Apps/webmin_ynh/issues) + diff --git a/pages/04.applications/10.docs/webtrees/app_webtrees.fr.md b/pages/04.applications/10.docs/webtrees/app_webtrees.fr.md new file mode 100644 index 00000000..fca91947 --- /dev/null +++ b/pages/04.applications/10.docs/webtrees/app_webtrees.fr.md @@ -0,0 +1,14 @@ +--- +title: Webtrees +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_webtrees' +--- + +webtrees est le chef de file sur le Web des logiciels de généalogie conversationnels en ligne. C'est un logiciel Open Source et il coûte zéro $ - oui, totalement GRATUIT ! + +Vous n'avez besoin que d'un serveur web avec PHP et MySQL. + +Il exploite les fichiers de généalogie au format GEDCOM standard, par conséquent, il est compatible avec toutes les applications de bureau majeures; il vise à être efficient et efficace en utilisant la bonne combinaison d'outils tiers, des techniques de conception et des normes d'ouverture standards. diff --git a/pages/04.applications/10.docs/webtrees/app_webtrees.md b/pages/04.applications/10.docs/webtrees/app_webtrees.md new file mode 100644 index 00000000..603a3d74 --- /dev/null +++ b/pages/04.applications/10.docs/webtrees/app_webtrees.md @@ -0,0 +1,15 @@ +--- +title: Webtrees +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_webtrees' +--- + +webtrees is the web's leading online collaborative genealogy application. + + * It works from standard GEDCOM files, and is therefore compatible with every major desktop application. + * It aims to to be efficient and effective by using the right combination of third-party tools, design techniques and open standards. + +webtrees allows you to view and edit your genealogy on your website. It has full editing capabilities, full privacy functions, and supports imedia such as photos and document images. As an online program, it fosters extended family participation and good ancestral recording habits, as it simplifies the process of collaborating with others working on your family lines. Your latest information is always on your web site and available for others to see, defined by viewing rules you set. diff --git a/pages/04.applications/10.docs/wekan/app_wekan.fr.md b/pages/04.applications/10.docs/wekan/app_wekan.fr.md new file mode 100644 index 00000000..7545490b --- /dev/null +++ b/pages/04.applications/10.docs/wekan/app_wekan.fr.md @@ -0,0 +1,22 @@ +--- +title: Wekan +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wekan' +--- + +![logo de wekan](image://wekan_logo.svg?resize=,80) + +[![Install Wekan with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wekan) [![Integration level](https://dash.yunohost.org/integration/wekan.svg)](https://dash.yunohost.org/appci/app/wekan) + +Wekan est un gestionnaire de tâches collaboratif en ligne. Il facilite la gestion de projets par l'élaboration de todo listes. +Wekan propose une grande diversité de fonctionnalités, ce qui en fait un service très complet et adapté à des projets complexes. Si vous cherchez un outil kanban plus simple, vous pouvez utiliser [Kanboard](/app_kanboard). + +## Liens utiles + ++ Site web : [wekan.github.io](https://wekan.github.io/) ++ Documentation officielle : [github.com/wekan/wekan/wiki](https://github.com/wekan/wekan/wiki) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/wekan](https://github.com/YunoHost-Apps/wekan_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/wekan/issues](https://github.com/YunoHost-Apps/wekan_ynh/issues) diff --git a/pages/04.applications/10.docs/wekan/app_wekan.md b/pages/04.applications/10.docs/wekan/app_wekan.md new file mode 100644 index 00000000..98054938 --- /dev/null +++ b/pages/04.applications/10.docs/wekan/app_wekan.md @@ -0,0 +1,22 @@ +--- +title: Wekan +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wekan' +--- + +![wekan's logo](image://wekan_logo.svg?resize=,80) + +[![Install Wekan with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wekan) [![Integration level](https://dash.yunohost.org/integration/wekan.svg)](https://dash.yunohost.org/appci/app/wekan) + +Wekan is an online collaborative task manager. It facilitates the management of projects through the development of todo lists. +Wekan offers a wide range of features, making it a very complete service adapted to complex projects. If you are looking for a simpler kanban tool, you can use [Kanboard](/app_kanboard) + +## Useful links + ++ Website: [wekan.github.io](https://wekan.github.io/) ++ Official documentation: [github.com/wekan/wekan/wiki](https://github.com/wekan/wekan/wiki) ++ Application software repository: [github.com - YunoHost-Apps/wekan](https://github.com/YunoHost-Apps/wekan_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/wekan/issues](https://github.com/YunoHost-Apps/wekan_ynh/issues) diff --git a/pages/04.applications/10.docs/wemawema/app_wemawema.fr.md b/pages/04.applications/10.docs/wemawema/app_wemawema.fr.md new file mode 100644 index 00000000..ede2aa08 --- /dev/null +++ b/pages/04.applications/10.docs/wemawema/app_wemawema.fr.md @@ -0,0 +1,23 @@ +--- +title: WemaWema +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wemawema' +--- + +[![Installer WemaWema avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=wemawema) [![Integration level](https://dash.yunohost.org/integration/wemawema.svg)](https://dash.yunohost.org/appci/app/wemawema) + +*WemaWema* est un générateur de mème « WE MAKE PORN » mais il peut faire bien plus. + +### Captures d'écran + +![Captures d'écran de WemaWema](https://github.com/YunoHost-Apps/wemawema_ynh/blob/master/doc/screenshots/WemaWema.png) + +## Liens utiles + ++ Site web : [framagit.org/luc/wemawema](https://framagit.org/luc/wemawema) ++ Démonstration : [Démo](https://luc.frama.io/wemawema/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/wemawema](https://github.com/YunoHost-Apps/wemawema_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/wemawema/issues](https://github.com/YunoHost-Apps/wemawema_ynh/issues) diff --git a/pages/04.applications/10.docs/wemawema/app_wemawema.md b/pages/04.applications/10.docs/wemawema/app_wemawema.md new file mode 100644 index 00000000..35cfa90c --- /dev/null +++ b/pages/04.applications/10.docs/wemawema/app_wemawema.md @@ -0,0 +1,23 @@ +--- +title: WemaWema +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wemawema' +--- + +[![Installer WemaWema with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=wemawema) [![Integration level](https://dash.yunohost.org/integration/wemawema.svg)](https://dash.yunohost.org/appci/app/wemawema) + +*WemaWema* is a "WE MAKE PORN" meme generator but it can do more. + +### Screenshots + +![Screenshots of WemaWema](https://github.com/YunoHost-Apps/wemawema_ynh/blob/master/doc/screenshots/WemaWema.png) + +## Useful links + ++ Website: [framagit.org/luc/wemawema](https://framagit.org/luc/wemawema) ++ Demonstration: [Demo (fr)](https://luc.frama.io/wemawema/) ++ Application software repository: [github.com - YunoHost-Apps/wemawema](https://github.com/YunoHost-Apps/wemawema_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/wemawema/issues](https://github.com/YunoHost-Apps/wemawema_ynh/issues) diff --git a/pages/04.applications/10.docs/wetty/app_wetty.fr.md b/pages/04.applications/10.docs/wetty/app_wetty.fr.md new file mode 100644 index 00000000..4c5cfd63 --- /dev/null +++ b/pages/04.applications/10.docs/wetty/app_wetty.fr.md @@ -0,0 +1,38 @@ +--- +title: Wetty +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wetty' +--- + +[![Installer Wetty avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=wetty) [![Integration level](https://dash.yunohost.org/integration/wetty.svg)](https://dash.yunohost.org/appci/app/wetty) + +*Wetty* est une application Terminal sur HTTP et HTTPS. WeTTy est une alternative à ajaxterm et anyterm mais bien meilleure qu'eux car WeTTy utilise xterm.js qui est une implémentation complète de l'émulation de terminal écrite entièrement en JavaScript. WeTTy utilise des websockets plutôt que Ajax et donc un meilleur temps de réponse. + +### Captures d'écran + +![Capture d'écran de Wetty](https://github.com/YunoHost-Apps/wetty_ynh/blob/master/doc/screenshots/terminal.png) + +### Avertissements / informations importantes + +#### Configuration + +Il y a peu de configuration dans Wetty : +* La configuration de démarrage (port d'écoute, chemin d'URL, hôte SSH) est contenue dans le fichier de service systemd +* La configuration de l'interface utilisateur se fait via l'interface graphique Web elle-même. + +* L'authentification LDAP et HTTP est-elle prise en charge ? **Non** + * Vous devez vous connecter manuellement. + * Vous pouvez spécifier l'utilisateur en accédent directement `https:///wetty/ssh/` + +* Vous pouvez spécifier à l'installation si Wetty devrait être accessible par des visiteurs non connectés sur YunoHost. + +* Vous ne pouvez pas vous authentifier par une clé SSH. + +## Liens utiles + ++ Site web : [github.com/butlerx/wetty](https://github.com/butlerx/wetty) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/wetty](https://github.com/YunoHost-Apps/wetty_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/wetty/issues](https://github.com/YunoHost-Apps/wetty_ynh/issues) diff --git a/pages/04.applications/10.docs/wetty/app_wetty.md b/pages/04.applications/10.docs/wetty/app_wetty.md new file mode 100644 index 00000000..a87519f7 --- /dev/null +++ b/pages/04.applications/10.docs/wetty/app_wetty.md @@ -0,0 +1,38 @@ +--- +title: Wetty +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wetty' +--- + +[![Installer Wetty with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=wetty) [![Integration level](https://dash.yunohost.org/integration/wetty.svg)](https://dash.yunohost.org/appci/app/wetty) + +*Wetty* is a Terminal application over HTTP and HTTPS. WeTTy is an alternative to ajaxterm and anyterm but much better than them because WeTTy uses xterm.js which is a full fledged implementation of terminal emulation written entirely in JavaScript. WeTTy uses websockets rather then Ajax and hence better response time. + +### Screenshots + +![Screenshot of Wetty](https://github.com/YunoHost-Apps/wetty_ynh/blob/master/doc/screenshots/terminal.png) + +### Disclaimers / important information + +#### Configuration + +There is few configuration in Wetty: +* Startup config (listen port, URL path, SSH host) is contained in the systemd service file +* User interface configuration is done through the web GUI itself. + +* Is LDAP and HTTP authentication supported? **No** + * You need to manually log in. + * You can log in as a specific user using `https:///wetty/ssh/` + +* You can specify at install if Wetty should be visible by users not logged into YunoHost. + +* You can't use ssh key authentication. + +## Useful links + ++ Website: [github.com/butlerx/wetty](https://github.com/butlerx/wetty) ++ Application software repository: [github.com - YunoHost-Apps/wetty](https://github.com/YunoHost-Apps/wetty_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/wetty/issues](https://github.com/YunoHost-Apps/wetty_ynh/issues) diff --git a/pages/04.applications/10.docs/wikijs/app_wikijs.fr.md b/pages/04.applications/10.docs/wikijs/app_wikijs.fr.md new file mode 100644 index 00000000..c1ca217b --- /dev/null +++ b/pages/04.applications/10.docs/wikijs/app_wikijs.fr.md @@ -0,0 +1,25 @@ +--- +title: Wiki.js +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wikijs' +--- + +![logo de Wiki.js](image://wikijs_logo.svg?resize=,80) + +[![Install Wiki.js with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wikijs) [![Integration level](https://dash.yunohost.org/integration/wikijs.svg)](https://dash.yunohost.org/appci/app/wikijs) + +Wiki.js est un wiki libre, moderne et rapide basé sur Node.js, Git et Markdown. + +## Configuration + +Wiki.js nécessite un domaine racine dédié, par exemple `wikijs.domaine.tld`. + +## Liens utiles + + + Site web : [wiki.js.org (en)](https://wiki.js.org/) + + Documentation officielle : [docs.requarks.io (en)](https://docs.requarks.io/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/wikijs](https://github.com/YunoHost-Apps/wikijs_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/wikijs/issues](https://github.com/YunoHost-Apps/wikijs_ynh/issues) diff --git a/pages/04.applications/10.docs/wikijs/app_wikijs.md b/pages/04.applications/10.docs/wikijs/app_wikijs.md new file mode 100644 index 00000000..750199ea --- /dev/null +++ b/pages/04.applications/10.docs/wikijs/app_wikijs.md @@ -0,0 +1,25 @@ +--- +title: Wiki.js +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wikijs' +--- + +![Wiki.js's logo](image://wikijs_logo.svg?resize=,80) + +[![Install Wiki.js with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wikijs) [![Integration level](https://dash.yunohost.org/integration/wikijs.svg)](https://dash.yunohost.org/appci/app/wikijs) + +Wiki.js is a free, modern and fast wiki based on Node.js, Git and Markdown. + +## Configuration + +Wiki.js requires a dedicated root domain, e.g. `wikijs.domain.tld` + +## Useful links + ++ Website: [wiki.js.org](https://wiki.js.org/) ++ Official documentation: [docs.requarks.io](https://docs.requarks.io/) ++ Application software repository: [github.com - YunoHost-Apps/wikijs](https://github.com/YunoHost-Apps/wikijs_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/wikijs/issues](https://github.com/YunoHost-Apps/wikijs_ynh/issues) diff --git a/pages/04.applications/10.docs/wordpress/app_wordpress.fr.md b/pages/04.applications/10.docs/wordpress/app_wordpress.fr.md new file mode 100644 index 00000000..fee4828d --- /dev/null +++ b/pages/04.applications/10.docs/wordpress/app_wordpress.fr.md @@ -0,0 +1,33 @@ +--- +title: WordPress +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wordpress' +--- + +![logo de WordPress](image://wordpress_logo.svg?resize=,80) + +[![Install Wordpress with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wordpress) [![Integration level](https://dash.yunohost.org/integration/wordpress.svg)](https://dash.yunohost.org/appci/app/wordpress) + +WordPress est un système de gestion de contenu (SGC ou content management system (CMS) en anglais) gratuit, libre et open-source. Ce logiciel écrit en PHP repose sur une base de données MySQL et est distribué par l'entreprise américaine Automattic. Les fonctionnalités de WordPress lui permettent de créer et gérer différents types de sites Web : site vitrine, site de vente en ligne, site applicatif, blogue, ou encore portfolio. Il est distribué selon les termes de la licence GNU GPL version 2.[¹](#sources) + +## Limitations avec YunoHost + +Le multisite est uniquement disponible sur des sous-répertoires. + +Comme le plugin de mise à jour automatique ne fonctionne pas comme prévu, faites attention à garder wordpress à jour depuis le panneau d'administration de WordPress, et pas seulement depuis le panneau d'administration de YunoHost. Pour des raisons de sécurité, contrôler que toutes les mises à jour sont régulièrement appliquées dans le panneau d'administration de WordPress ainsi que dans le panneau d'administration de YunoHost. + +## Liens utiles + ++ Site web : [wordpress.org](https://fr.wordpress.org/) ++ Documentation officielle : [codex.wordpress.org (en)](https://codex.wordpress.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/wordpress](https://github.com/YunoHost-Apps/wordpress_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/wordpress/issues](https://github.com/YunoHost-Apps/wordpress_ynh/issues) + +----------- + +### Sources + +¹ [wikipedia.org - WordPress](https://fr.wikipedia.org/wiki/WordPress) diff --git a/pages/04.applications/10.docs/wordpress/app_wordpress.md b/pages/04.applications/10.docs/wordpress/app_wordpress.md new file mode 100644 index 00000000..f3848e9f --- /dev/null +++ b/pages/04.applications/10.docs/wordpress/app_wordpress.md @@ -0,0 +1,33 @@ +--- +title: WordPress +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wordpress' +--- + +![WordPress's logo](image://wordpress_logo.svg?resize=,80) + +[![Install APPLICATION with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wordpress) [![Integration level](https://dash.yunohost.org/integration/wordpress.svg)](https://dash.yunohost.org/appci/app/wordpress) + +WordPress is a free, open-source, open source content management system (CMS). This software written in PHP is based on a MySQL database and is distributed by the American company Automattic. WordPress' functionalities allow it to create and manage different types of websites: showcase site, online store site, application site, blog, or portfolio. It is distributed under the terms of the GNU GPL version 2 license.[¹](#sources) + +## Limitations with YunoHost + +Multisite is only available on subdirectories. + +As the auto-update plugin does not work as expected, be careful to keep wordpress up to date from the WordPress admin panel, not just from the YunoHost admin panel. For security reasons, make sure that all updates are regularly applied in the WordPress Control Panel as well as in the YunoHost Control Panel. + +## Useful links + ++ Website: [wordpress.org](https://wordpress.org/) ++ Official documentation: [codex.wordpress.org](https://codex.wordpress.org/) ++ Application software repository: [github.com - YunoHost-Apps/wordpress](https://github.com/YunoHost-Apps/wordpress_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com -YunoHost-Apps/wordpress/issues](https://github.com/YunoHost-Apps/wordpress_ynh/issues) + +----------- + +### Sources + +¹ [wikipedia.org - WordPress (fr)](https://fr.wikipedia.org/wiki/WordPress) diff --git a/pages/04.applications/10.docs/writefreely/app_writefreely.md b/pages/04.applications/10.docs/writefreely/app_writefreely.md new file mode 100644 index 00000000..36e2a46e --- /dev/null +++ b/pages/04.applications/10.docs/writefreely/app_writefreely.md @@ -0,0 +1,56 @@ +--- +title: WriteFreely +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_writefreely' +--- + +![WriteFreely's logo](image://writefreely-logo.png?height=100) + + +[![Install WriteFreely with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=writefreely) +[![Integration level](https://dash.yunohost.org/integration/writefreely.svg)](https://dash.yunohost.org/appci/app/writefreely) + +**WriteFreely** is a clean, minimalist publishing platform made for writers. Start a blog, share knowledge within your organization, or build a community around the shared act of writing. + +## Features: +### Made for writing + +Built on a plain, auto-saving editor, WriteFreely gives you a distraction-free writing environment. Once published, your words are front and center, and easy to read. + +### A connected community + +Start writing together, publicly or privately. Connect with other communities, whether running WriteFreely, [Plume](https://yunohost.org/en/app_plume), or other ActivityPub-powered software. And bring members on board from your existing platforms, thanks to our OAuth 2.0 support. + +### Intuitive organization + +Categorize articles [with hashtags](https://writefreely.org/docs/latest/writer/hashtags), and create static pages from normal posts by [_pinning_ them](https://writefreely.org/docs/latest/writer/static) to your blog. Create draft posts and publish to multiple blogs from one account. + +### International + +Blog elements are localized in 20+ languages, and WriteFreely includes first-class support for non-Latin and right-to-left (RTL) script languages. + +### Private by default + +WriteFreely collects minimal data, and never publicizes more than a writer consents to. Writers can seamlessly create multiple blogs from a single account for different pen names or purposes without publicly revealing their association. + + + +## Important information: + +* **WriteFreely** require a dedicated **root domain**, eg. writefreely.domain.tld +* i386 architectures not supported +* No LDAP and no HTTP auth supported + +* If User Mode is configured Multiple users, the app be used by multiple users +* Additionals parameters can be configured in Settings / Admin settings. + +## Useful links + +* Official app website: [https://writefreely.org](https://writefreely.org) +* Official user documentation: [https://writefreely.org/start](https://writefreely.org/start) +* Upstream app code repository: [https://github.com/writeas/writefreely](https://github.com/writeas/writefreely) +* Application software repository: [https://github.com/YunoHost-Apps/writefreely_ynh](https://github.com/YunoHost-Apps/writefreely_ynh) +* Report a bug: [https://github.com/YunoHost-Apps/writefreely_ynh/issues](https://github.com/YunoHost-Apps/writefreely_ynh/issues) diff --git a/pages/04.applications/10.docs/writing_guide/app_writing_guide.fr.md b/pages/04.applications/10.docs/writing_guide/app_writing_guide.fr.md new file mode 100644 index 00000000..de1007b7 --- /dev/null +++ b/pages/04.applications/10.docs/writing_guide/app_writing_guide.fr.md @@ -0,0 +1,35 @@ +--- +title: Canevas pour la documentation des apps +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_writing_guide' +--- + +![logo de APPLICATION](image://APPLICATION_logo.svg?resize=,80) + +[![Install APPLICATION with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=APPLICATION) [![Integration level](https://dash.yunohost.org/integration/APPLICATION.svg)](https://dash.yunohost.org/appci/app/APPLICATION) + +**Présentation générale de l'application.** *Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce rutrum sodales mauris eu viverra. Sed dapibus, tellus sit amet interdum condimentum, enim eros faucibus ligula, sed suscipit orci velit at felis. Etiam quam lacus, vulputate eu scelerisque ac, sollicitudin rutrum orci. Cras eu ante porttitor, laoreet odio sed, hendrerit tellus. Nulla luctus sem in arcu scelerisque cursus. Nulla ut tellus at leo porttitor tincidunt. Morbi vitae purus convallis, elementum lectus non, dignissim orci. Integer eget egestas mauris. Nunc nunc dolor, cursus in quam mollis, rutrum fermentum nibh. Aliquam molestie velit a nulla porttitor, sit amet tincidunt erat laoreet.* + +## Configuration + +**Si la configuration de l'application ne se fait pas avec le panel admin de YunoHost.** *Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce rutrum sodales mauris eu viverra. Sed dapibus, tellus sit amet interdum condimentum, enim eros faucibus ligula, sed suscipit orci velit at felis. Etiam quam lacus, vulputate eu scelerisque ac, sollicitudin rutrum orci. Cras eu ante porttitor, laoreet odio sed, hendrerit tellus. Nulla luctus sem in arcu scelerisque cursus. Nulla ut tellus at leo porttitor tincidunt. Morbi vitae purus convallis, elementum lectus non, dignissim orci. Integer eget egestas mauris. Nunc nunc dolor, cursus in quam mollis, rutrum fermentum nibh. Aliquam molestie velit a nulla porttitor, sit amet tincidunt erat laoreet.* + +## Limitations avec YunoHost + +**Explication des limitations actuelles en utilisation de l'application avec YunoHost.** *Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce rutrum sodales mauris eu viverra. Sed dapibus, tellus sit amet interdum condimentum, enim eros faucibus ligula, sed suscipit orci velit at felis. Etiam quam lacus, vulputate eu scelerisque ac, sollicitudin rutrum orci. Cras eu ante porttitor, laoreet odio sed, hendrerit tellus. Nulla luctus sem in arcu scelerisque cursus. Nulla ut tellus at leo porttitor tincidunt. Morbi vitae purus convallis, elementum lectus non, dignissim orci. Integer eget egestas mauris. Nunc nunc dolor, cursus in quam mollis, rutrum fermentum nibh. Aliquam molestie velit a nulla porttitor, sit amet tincidunt erat laoreet.* + +## Applications clientes + +| Nom de l'application | Plateforme | Multi-comptes | Autres réseaux supportés | Play Store | F-Droid | Apple Store | *Autres* | +|-----------------------|------------|---------------|-------------------------|------------|---------|-------------|----------| +| | | | | | | | | + +## Liens utiles + + + Site web : [SITE WEB](#) + + Documentation officielle : [DOCUMENTATION](#) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/APPLICATION](https://github.com/YunoHost-Apps/APPLICATION_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/APPLICATION/issues](https://github.com/YunoHost-Apps/APPLICATION_ynh/issues) diff --git a/pages/04.applications/10.docs/writing_guide/app_writing_guide.md b/pages/04.applications/10.docs/writing_guide/app_writing_guide.md new file mode 100644 index 00000000..a249c07b --- /dev/null +++ b/pages/04.applications/10.docs/writing_guide/app_writing_guide.md @@ -0,0 +1,35 @@ +--- +title: Template for app documentation +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_writing_guide' +--- + +![APPLICATION's logo](image://APPLICATION_logo.svg?resize=,80) + +[![Install APPLICATION with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=APPLICATION) [![Integration level](https://dash.yunohost.org/integration/APPLICATION.svg)](https://dash.yunohost.org/appci/app/APPLICATION) + +**General presentation of the application.** *Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce rutrum sodales mauris eu viverra. Sed dapibus, tellus sit amet interdum condimentum, enim eros faucibus ligula, sed suscipit orci velit at felis. Etiam quam lacus, vulputate eu scelerisque ac, sollicitudin rutrum orci. Cras eu ante porttitor, laoreet odio sed, hendrerit tellus. Nulla luctus sem in arcu scelerisque cursus. Nulla ut tellus at leo porttitor tincidunt. Morbi vitae purus convallis, elementum lectus non, dignissim orci. Integer eget egestas mauris. Nunc nunc dolor, cursus in quam mollis, rutrum fermentum nibh. Aliquam molestie velit a nulla porttitor, sit amet tincidunt erat laoreet.* + +## Configuration + +**If the configuration of the application is not done with the admin panel of YunoHost.** *Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce rutrum sodales mauris eu viverra. Sed dapibus, tellus sit amet interdum condimentum, enim eros faucibus ligula, sed suscipit orci velit at felis. Etiam quam lacus, vulputate eu scelerisque ac, sollicitudin rutrum orci. Cras eu ante porttitor, laoreet odio sed, hendrerit tellus. Nulla luctus sem in arcu scelerisque cursus. Nulla ut tellus at leo porttitor tincidunt. Morbi vitae purus convallis, elementum lectus non, dignissim orci. Integer eget egestas mauris. Nunc nunc dolor, cursus in quam mollis, rutrum fermentum nibh. Aliquam molestie velit a nulla porttitor, sit amet tincidunt erat laoreet.* + +## Limitations with YunoHost + +**Explanation of the current limitations in using the application with YunoHost.** *Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce rutrum sodales mauris eu viverra. Sed dapibus, tellus sit amet interdum condimentum, enim eros faucibus ligula, sed suscipit orci velit at felis. Etiam quam lacus, vulputate eu scelerisque ac, sollicitudin rutrum orci. Cras eu ante porttitor, laoreet odio sed, hendrerit tellus. Nulla luctus sem in arcu scelerisque cursus. Nulla ut tellus at leo porttitor tincidunt. Morbi vitae purus convallis, elementum lectus non, dignissim orci. Integer eget egestas mauris. Nunc nunc dolor, cursus in quam mollis, rutrum fermentum nibh. Aliquam molestie velit a nulla porttitor, sit amet tincidunt erat laoreet.* + +## Customer applications + +| Application name | Platform | Multi-account | Other supported networks | Play Store | F-Droid | Apple Store | *Other* | +|------------------|----------|---------------|--------------------------|------------|---------|-------------|---------| +| | | | | | | | | + +## Useful links + ++ Website: [WEBSITE](#) ++ Official documentation: [DOCUMENTATION](#) ++ Application software repository: [github.com - YunoHost-Apps/APPLICATION](https://github.com/YunoHost-Apps/APPLICATION_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/APPLICATION/issues](https://github.com/YunoHost-Apps/APPLICATION_ynh/issues) diff --git a/pages/04.applications/10.docs/yellow/app_yellow.fr.md b/pages/04.applications/10.docs/yellow/app_yellow.fr.md new file mode 100644 index 00000000..9da915d3 --- /dev/null +++ b/pages/04.applications/10.docs/yellow/app_yellow.fr.md @@ -0,0 +1,23 @@ +--- +title: Yellow +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_yellow' +--- + +[![Installer Yellow avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=yellow) [![Integration level](https://dash.yunohost.org/integration/yellow.svg)](https://dash.yunohost.org/appci/app/yellow) + +*Yellow* est un système de gestion de contenu (CMS) pour un site simple. + +## Captures d'écran + +![Capture d'écran de Yellow](https://github.com/YunoHost-Apps/yellow_ynh/blob/master/doc/screenshots/datenstrom-yellow-en.png) + +## Liens utiles + ++ Site web : [datenstrom.se/yellow/](https://datenstrom.se/yellow/) ++ Démonstration : [Démo](https://datenstrom.se/yellow/demo/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/yellow](https://github.com/YunoHost-Apps/yellow_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/yellow/issues](https://github.com/YunoHost-Apps/yellow_ynh/issues) diff --git a/pages/04.applications/10.docs/yellow/app_yellow.md b/pages/04.applications/10.docs/yellow/app_yellow.md new file mode 100644 index 00000000..3dbbc148 --- /dev/null +++ b/pages/04.applications/10.docs/yellow/app_yellow.md @@ -0,0 +1,23 @@ +--- +title: Yellow +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_yellow' +--- + +[![Installer Yellow with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=yellow) [![Integration level](https://dash.yunohost.org/integration/yellow.svg)](https://dash.yunohost.org/appci/app/yellow) + +*Yellow* is a content management system (CMS) for simple website. + +### Screenshots + +![Screenshot of Yellow](https://github.com/YunoHost-Apps/yellow_ynh/blob/master/doc/screenshots/datenstrom-yellow-en.png) + +## Useful links + ++ Website: [datenstrom.se/yellow/](https://datenstrom.se/yellow/) ++ Demonstration: [Demo](https://datenstrom.se/yellow/demo/) ++ Application software repository: [github.com - YunoHost-Apps/yellow](https://github.com/YunoHost-Apps/yellow_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/yellow/issues](https://github.com/YunoHost-Apps/yellow_ynh/issues) diff --git a/pages/04.applications/10.docs/yeswiki/app_yeswiki.fr.md b/pages/04.applications/10.docs/yeswiki/app_yeswiki.fr.md new file mode 100644 index 00000000..d23084d9 --- /dev/null +++ b/pages/04.applications/10.docs/yeswiki/app_yeswiki.fr.md @@ -0,0 +1,38 @@ +--- +title: YesWiki +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_yeswiki' +--- + +[![Installer YesWiki avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=yeswiki) [![Integration level](https://dash.yunohost.org/integration/yeswiki.svg)](https://dash.yunohost.org/appci/app/yeswiki) + +*YesWiki* est un wiki conçu pour rester simple, très facile à installer, en français traduit en anglais, espagnol, catalan, flamand... + +Néanmoins, avec un YesWiki on peut fabriquer un site internet aux usages multiples : +- Rassembler toutes les infos d'un projet ou d'un groupe (fonction de "gare centrale") +- Cartographier des membres ou des lieux de façon participative +- Partager des ressources, des listes, des agendas grâce à des bases de données coopératives puissantes +- Faire communiquer des flux d'informations +- Cultiver un bout de liberté... + +### Captures d'écran + +![Capture d'écran de YesWiki](https://github.com/YunoHost-Apps/yeswiki_ynh/blob/master/doc/screenshots/yeswiki_screenshots.png) + +### Avertissements / informations importantes + +##### Support multi-utilisateurs + +L'intégration au LDAP est la seule méthode supportée pour les nouvelles installations. Il est possible de la désactiver sur les anciennes installations en retirant l'extension loginldap. **Attention : Ne pas retirer l'extension sans connaitre d'identifiants administrateurs du wiki** + +Pour le moment l'authentification SSO n'est pas prise en charge. Il est nécessaire de se connecter sur le wiki. + +## Liens utiles + ++ Site web : [yeswiki.net](https://yeswiki.net) ++ Démonstration : [Démo](https://ferme.yeswiki.net/?CreerSonWiki) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/yeswiki](https://github.com/YunoHost-Apps/yeswiki_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/yeswiki/issues](https://github.com/YunoHost-Apps/yeswiki_ynh/issues) diff --git a/pages/04.applications/10.docs/yeswiki/app_yeswiki.md b/pages/04.applications/10.docs/yeswiki/app_yeswiki.md new file mode 100644 index 00000000..e9e91c87 --- /dev/null +++ b/pages/04.applications/10.docs/yeswiki/app_yeswiki.md @@ -0,0 +1,38 @@ +--- +title: YesWiki +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_yeswiki' +--- + +[![Installer YesWiki with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=yeswiki) [![Integration level](https://dash.yunohost.org/integration/yeswiki.svg)](https://dash.yunohost.org/appci/app/yeswiki) + +*YesWiki* is a wiki designed to remain simple, very easy to install, in French translated into English, Spanish, Catalan, Flemish... + +However, with a YesWiki we can build a website with multiple uses: +- Gather all the information of a project or a group (function of "central station") +- Mapping members or places in a participatory way +- Share resources, lists, calendars thanks to powerful cooperative databases +- Communicate information flows +- Cultivate a bit of freedom... + +### Screenshots + +![Screenshot of YesWiki](https://github.com/YunoHost-Apps/yeswiki_ynh/blob/master/doc/screenshots/yeswiki_screenshots.png) + +### Disclaimers / important information + +##### Multi-users support + +LDAP integration is supported and required on new installs. It is possible to disable it on older installs by removing the loginldap plugin. **Warning: only do it if you know credentials for a wiki admin account** + +At the moment SSO authentication is not supported. It is necessary to login on the wiki. + +## Useful links + ++ Website: [yeswiki.net](https://yeswiki.net) ++ Demonstration: [Demo (fr)](https://ferme.yeswiki.net/?CreerSonWiki) ++ Application software repository: [github.com - YunoHost-Apps/yeswiki](https://github.com/YunoHost-Apps/yeswiki_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/yeswiki/issues](https://github.com/YunoHost-Apps/yeswiki_ynh/issues) diff --git a/pages/04.applications/10.docs/yourls/app_yourls.md b/pages/04.applications/10.docs/yourls/app_yourls.md new file mode 100644 index 00000000..a0ff6a0c --- /dev/null +++ b/pages/04.applications/10.docs/yourls/app_yourls.md @@ -0,0 +1,35 @@ +--- +title: Yourls +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_yourls' +--- + +![Yourls's logo](image://yourls-logo.png?height=100) + + +[![Install Yourls with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=yourls) +[![Integration level](https://dash.yunohost.org/integration/yourls.svg)](https://dash.yunohost.org/appci/app/yourls) + + +**YOURLS** stands for Your Own URL Shortener. It is a small set of PHP scripts that will allow you to run your own URL shortening service (a la TinyURL or bitly). + +Running your own URL shortener is fun, geeky and useful: you own your data and don't depend on third-party services. It's also a great way to add branding to your short URLs, instead of using the same public URL shortener everyone uses. + +## Features: +- Private (your links only) or Public (everybody can create short links, fine for an intranet) +- Dozens of plugins to easily implement new features +- Handy bookmarklets to easily shorten and share links +- Awesome stats: historical click reports, referrers tracking, visitors geo-location +- Developer API to integrate YOURLS into other applications +- Sample files to create your own public interface + +## Useful links + +* Official app website: [https://yourls.org/](https://yourls.org/) +* Official admin documentation: [https://docs.yourls.org/](https://docs.yourls.org/) +* Upstream app code repository: [https://github.com/YOURLS/YOURLS](https://github.com/YOURLS/YOURLS) +* YunoHost documentation for this app: [https://yunohost.org/app_yourls](https://yunohost.org/app_yourls) +* Report a bug: [https://github.com/YunoHost-Apps/yourls_ynh/issues](https://github.com/YunoHost-Apps/yourls_ynh/issues) diff --git a/pages/04.applications/10.docs/yunofav/app_yunofav.fr.md b/pages/04.applications/10.docs/yunofav/app_yunofav.fr.md new file mode 100644 index 00000000..101f42c0 --- /dev/null +++ b/pages/04.applications/10.docs/yunofav/app_yunofav.fr.md @@ -0,0 +1,15 @@ +--- +title: Yunofav +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_yunofav' +--- + +### Page de liens favoris pour YunoHost + +page d'accueil : https://github.com/YunoHost-Apps/yunofav_ynh + + +Fonctionnalité : Crée une page pour vos liens préférés, en utilisant le style et le fonctionnement des tuiles YunoHost. diff --git a/pages/04.applications/10.docs/yunofav/app_yunofav.md b/pages/04.applications/10.docs/yunofav/app_yunofav.md new file mode 100644 index 00000000..9a7b7fe5 --- /dev/null +++ b/pages/04.applications/10.docs/yunofav/app_yunofav.md @@ -0,0 +1,14 @@ +--- +title: Yunofav +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_yunofav' +--- + +### Page of favorite links for YunoHost + +homepage: https://github.com/YunoHost-Apps/yunofav_ynh + +Functionality: Creates a page for your favorite links, using the YunoHost tiles look and feel. diff --git a/pages/04.applications/10.docs/zap/app_zap.fr.md b/pages/04.applications/10.docs/zap/app_zap.fr.md new file mode 100644 index 00000000..e327fe86 --- /dev/null +++ b/pages/04.applications/10.docs/zap/app_zap.fr.md @@ -0,0 +1,52 @@ +--- +title: Zap +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_zap' +--- + +[![Installer Zap avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=zap) [![Integration level](https://dash.yunohost.org/integration/zap.svg)](https://dash.yunohost.org/appci/app/zap) + +*Zap* est une alternative éthique au Fediverse qui fournit des fonctionnalités puissantes pour créer des sites web interconnectés avec une identité décentralisée, des communications et un cadre de permissions construit en utilisant la technologie commune des serveurs web. + +Compatible avec **Mastodon**, **Pleroma**, **Pixelfed**, **Friendica**, **Hubzilla**, **Funkwhale**, **Peertube**, **Plume**, **WriteFreely** et beaucoup, beaucoup d'autres. + +### Caractéristiques uniques de ZAP + +- **Groupes** : publics, privés, et modérés. +- **Événements** : Calendrier et présence ; notifications automatiques d'anniversaire pour les amis utilisant cette fonctionnalité. +- **Cloud**storage : Stockage de fichiers en réseau intégré avec accès aux réseaux sociaux. +- Éditeur** : Supporte à la fois markdown et bbcode. Utilisez l'un ou l'autre, ou les deux, si vous le souhaitez. +- **Partage** : Glissez-déposez un certain nombre de choses différentes comme des fichiers, des photos, des pages Web, des cartes, des numéros de téléphone pour les partager. +- Listes** : Parfois appelé cercles ou aspects, cela vous permet de définir vos propres groupes d'amis liés et de communiquer avec eux comme un groupe privé. +- **Extension** : Modifiez ou mettez à niveau les fonctionnalités de votre logiciel comme vous le souhaitez en installant des fonctions supplémentaires à partir de modules complémentaires et de la collection d'applications gratuites. + +### Avertissements / informations importantes + +### Installation + +Avant de procéder à l'installation, lisez les [Instructions d'installation de Zap](https://codeberg.org/zot/zap/src/branch/release/install/INSTALL.txt) pour obtenir des informations importantes sur les points suivants + +#### Enregistrer un nouveau domaine et l'ajouter à YunoHost + +- Zap nécessite un domaine dédié, alors obtenez-en un et ajoutez-le en utilisant le panneau d'administration de YunoHost. **Domaines -> Ajouter un domaine**. Comme Zap utilise le domaine complet et est installé à la racine, vous pouvez créer un sous-domaine tel que `zap.domain.tld`. N'oubliez pas de mettre à jour vos DNS si vous les gérez manuellement. + +### Droits d'utilisateur de l'administrateur LDAP, journaux et échecs de mise à jour de la base de données + +- **Pour les droits d'administration** : Une fois l'installation terminée, vous devrez vous rendre sur la page de votre nouveau hub et vous connecter avec le **nom d'utilisateur du compte admin** qui a été saisi au moment de l'installation. Vous devriez alors être en mesure de créer votre premier canal et avoir les **droits d'administrateur** pour le hub. + +- **Pour les utilisateurs normaux de YunoHost :** Les utilisateurs normaux de LDAP peuvent se connecter via l'authentification Ldap et créer leurs canaux. + +- Si l'administrateur ne peut pas accéder aux paramètres d'administration à `https://zap.example.com/admin` ou si vous voulez accorder des droits d'administration à un autre utilisateur sur le hub, alors vous devez **ajouter manuellement 4096** aux **rôles_comptes** sous **comptes** pour cet utilisateur dans la **base de données via phpMYAdmin**. + +- **Pour les logs:** Allez dans **admin->logs** et entrez le nom du fichier **php.log**. + +- Échec de la base de données après la mise à jour:** Parfois, la mise à jour de la base de données échoue après la mise à jour de la version. Vous pouvez aller sur le hub, par exemple `https://zap.example.com/admin/dbsync/` et vérifier le nombre de mises à jour qui ont échoué. Ces mises à jour devront être exécutées manuellement par **phpMYAdmin**. + +## Liens utiles + ++ Site web : [codeberg.org/zot/zap](https://codeberg.org/zot/zap) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/zap](https://github.com/YunoHost-Apps/zap_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/zap/issues](https://github.com/YunoHost-Apps/zap_ynh/issues) diff --git a/pages/04.applications/10.docs/zap/app_zap.md b/pages/04.applications/10.docs/zap/app_zap.md new file mode 100644 index 00000000..f3c4c435 --- /dev/null +++ b/pages/04.applications/10.docs/zap/app_zap.md @@ -0,0 +1,52 @@ +--- +title: Zap +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_zap' +--- + +[![Installer Zap with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=zap) [![Integration level](https://dash.yunohost.org/integration/zap.svg)](https://dash.yunohost.org/appci/app/zap) + +*Zap* is an an ethical alternative to Fediverse that provides powerful features for creating interconnected websites featuring a decentralized identity, communications, and permissions framework built using common webserver technology. + +Compatible with **Mastodon**, **Pleroma**, **Pixelfed**, **Friendica**, **Hubzilla**, **Funkwhale**, **Peertube**, **Plume**, **WriteFreely** and many, many more. + +### Unique Features of ZAP + +- **Groups** : public, private, and moderated. +- **Events** : Calendar and attendance; automatic birthday notifications for friends using this feature. +- **Cloud**storage : Built-in network file storage integrated with social networking access. +- **Editor** : Supports both markdown and bbcode. Use either or both - if you want. +- **Share**: Drag-and-drop a number of different things such as files, photos, webpages, maps, phone numbers to share- them. +- **Lists**: Sometimes referred to as circles or aspects, this lets you define your own groups of related friends and- communicate with them as a private group. +- **Extend** : Change or upgrade your software functionality as desired by installing additional features from addons and- the free app collection. + +### Disclaimers / important information + +### Installation + +Before installing, read the [Zap installation instructions](https://codeberg.org/zot/zap/src/branch/release/install/INSTALL.txt) for important information about: + +#### Register a new domain and add it to YunoHost + +- Zap requires a dedicated domain, so obtain one and add it using the YunoHost admin panel. **Domains -> Add domain**. As Zap uses the full domain and is installed on the root, you can create a subdomain such as `zap.domain.tld`. Don't forget to update your DNS if you manage them manually. + +### LDAP Admin user rights, logs and failed database updates + +- **For admin rights**: When installation is complete, you will need to visit your new hub's page and login with the **admin account username** which was entered at the time of installation process. You should then be able to create your first channel and have the **admin rights** for the hub. + +- **For normal YunoHost users :** Normal LDAP users can login through Ldap authentication and create there channels. + +- **Failing to get admin rights :** If the admin cannot access the admin settings at `https://zap.example.com/admin` or you want to grant admin rights to any other user(s) on the hub, then you have to **manually add 4096** to the **account_roles** under **accounts** for that user in the **database through phpMYAdmin**. + +- **For logs:** Go to **admin->logs** and enter the file name **php.log**. + +- **Failed Database after Upgrade:** Some times databse upgrade fails after version upgrade. You can go to hub eg. `https://zap.example.com/admin/dbsync/` and check the numbers of failled update. These updates will have to be ran manually by **phpMYAdmin**. + +## Useful links + ++ Website: [codeberg.org/zot/zap](https://codeberg.org/zot/zap) ++ Application software repository: [github.com - YunoHost-Apps/zap](https://github.com/YunoHost-Apps/zap_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/zap/issues](https://github.com/YunoHost-Apps/zap_ynh/issues) diff --git a/pages/04.applications/10.docs/zerobin/app_zerobin.fr.md b/pages/04.applications/10.docs/zerobin/app_zerobin.fr.md new file mode 100644 index 00000000..0dc1b22c --- /dev/null +++ b/pages/04.applications/10.docs/zerobin/app_zerobin.fr.md @@ -0,0 +1,22 @@ +--- +title: Zerobin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_zerobin' +--- + +![logo de zerobin](image://zerobin_logo.svg?resize=,80) + +[![Install zerobin with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=zerobin) [![Integration level](https://dash.yunohost.org/integration/zerobin.svg)](https://dash.yunohost.org/appci/app/zerobin) + +Zerobin est un service web permettant de stocker temporairement et de partager du texte simple de manière chiffrée, sans stockage lisible sur le serveur. La clef de chiffrement/déchiffrement n'est pas stockée sur le serveur mais dans l'URL transmise. Ainsi vous pouvez partager des informations sensibles (mots de passe, codes d'accès, et même une discussion) de manière confidentielle en communiquant à vos interlocuteurs l'adresse spécifique de votre contenu. De plus ce contenu a une valeur limitée dans le temps et est détruit passé un délai personnalisable. + +## Liens utiles + ++ Site web : [privatebin.info](https://privatebin.info/) ++ Documentation officielle : [github.com/PrivateBin/PrivateBin/wiki](https://github.com/PrivateBin/PrivateBin/wiki) ++ Démonstration : [Démo](https://privatebin.net/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/zerobin](https://github.com/YunoHost-Apps/zerobin_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/zerobin/issues](https://github.com/YunoHost-Apps/zerobin_ynh/issues) diff --git a/pages/04.applications/10.docs/zerobin/app_zerobin.md b/pages/04.applications/10.docs/zerobin/app_zerobin.md new file mode 100644 index 00000000..65a084cc --- /dev/null +++ b/pages/04.applications/10.docs/zerobin/app_zerobin.md @@ -0,0 +1,22 @@ +--- +title: Zerobin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_zerobin' +--- + +![zerobin's logo](image://zerobin_logo.svg?resize=,80) + +[![Install zerobin with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=zerobin) [![Integration level](https://dash.yunohost.org/integration/zerobin.svg)](https://dash.yunohost.org/appci/app/zerobin) + +Zerobin is a web service for temporarily storing and sharing plain text in encrypted form without readable storage on the server. The encryption/decryption key is not stored on the server but in the transmitted URL. Thus you can share sensitive information (passwords, access codes, and even a discussion) in a confidential way by communicating to your interlocutors the specific address of your content. Moreover this content has a limited value in time and is destroyed after a customizable delay. + +## Useful links + ++ Website : [privatebin.info](https://privatebin.info/) ++ Official documentation : [github.com/PrivateBin/PrivateBin/wiki](https://github.com/PrivateBin/PrivateBin/wiki) ++ Demonstration : [Demo](https://privatebin.net/) ++ Application software repository : [github.com - YunoHost-Apps/zerobin](https://github.com/YunoHost-Apps/zerobin_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/zerobin/issues](https://github.com/YunoHost-Apps/zerobin_ynh/issues) diff --git a/pages/04.applications/15.framasoft/apps_framasoft.md b/pages/04.applications/15.framasoft/apps_framasoft.md new file mode 100644 index 00000000..43a3f4d8 --- /dev/null +++ b/pages/04.applications/15.framasoft/apps_framasoft.md @@ -0,0 +1,52 @@ +--- +title: Equivalent Framasoft applications +template: docs +taxonomy: + category: docs +routes: + default: '/apps_framasoft' +--- + +| Framasoft App | Original project | Package | +| :---: | :---: | :---: | +| Framabag | [Wallabag ](https://www.wallabag.it) | [[fa=git /]](https://github.com/YunoHost-Apps/wallabag2_ynh) ![](https://ci-apps.yunohost.org/ci/badges/wallabag2.status.svg) ![](https://dash.yunohost.org/integration/wallabag2.svg) | +| Framabee | [Searx ](https://searx.ir) | [[fa=git /]](https://github.com/YunoHost-Apps/searx_ynh) ![](https://ci-apps.yunohost.org/ci/badges/searx.status.svg) ![](https://dash.yunohost.org/integration/searx.svg) | +| Framabin | [PrivateBin ](https://privatebin.info) | [[fa=git /]](https://github.com/YunoHost-apps/zerobin_ynh) ![](https://ci-apps.yunohost.org/ci/badges/zerobin.status.svg) ![](https://dash.yunohost.org/integration/zerobin.svg) | +| Framaboard | [Kanboard ](https://kanboard.org) | [[fa=git /]](https://github.com/YunoHost-Apps/kanboard_ynh) ![](https://ci-apps.yunohost.org/ci/badges/kanboard.status.svg) ![](https://dash.yunohost.org/integration/kanboard.svg) | +| Framabookin | [BicBucStriim ](https://github.com/rvolz/BicBucStriim) | [[fa=git /]](https://github.com/YunoHost-Apps/bicbucstriim_ynh) ![](https://ci-apps.yunohost.org/ci/badges/bicbucstriim.status.svg) ![](https://dash.yunohost.org/integration/bicbucstriim.svg) | +| Framacalc | [Ethercalc ](https://ethercalc.net) | [[fa=git /]](https://github.com/YunoHost-Apps/ethercalc_ynh) ![](https://ci-apps.yunohost.org/ci/badges/ethercalc.status.svg) ![](https://dash.yunohost.org/integration/ethercalc.svg) | +| Framacarte | [uMap ](http://umap.openstreetmap.fr) | [[fa=git /]](https://github.com/YunoHost-Apps/umap_ynh) ![](https://ci-apps.yunohost.org/ci/badges/umap.status.svg) ![](https://dash.yunohost.org/integration/umap.svg) | +| Framaclic | [Dolomon ](https://dolomon.org) | Non Packagé | +| Framadate | [OpenSondage ](https://framadate.org) | [[fa=git /]](https://github.com/YunoHost-Apps/opensondage_ynh) ![](https://ci-apps.yunohost.org/ci/badges/opensondage.status.svg) ![](https://dash.yunohost.org/integration/opensondage.svg) | +| Framadrive | [Nextcloud ](https://nextcloud.com) | [[fa=git /]](https://github.com/YunoHost-apps/nextcloud_ynh) ![](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![](https://dash.yunohost.org/integration/nextcloud.svg) | +| Framadrop | [Lufi ](https://framagit.org/fiat-tux/hat-softwares/lufi) | [[fa=git /]](https://github.com/YunoHost-Apps/lufi_ynh) ![](https://ci-apps.yunohost.org/ci/badges/lufi.status.svg) ![](https://dash.yunohost.org/integration/lufi.svg) | +| Framaestro | [Framaestro ](https://framaestro.org) | [[fa=git /]](https://github.com/YunoHost-Apps/framaestro_ynh) ![](https://ci-apps.yunohost.org/ci/badges/framaestro.status.svg) ![](https://dash.yunohost.org/integration/framaestro.svg) | +| Framaforms | [Framaforms ](https://framaforms.org) | [[fa=git /]](https://github.com/YunoHost-Apps/framaforms_ynh) ![](https://ci-apps.yunohost.org/ci/badges/framaforms.status.svg) ![](https://dash.yunohost.org/integration/framaforms.svg) | +| Framagames | [Framagames ](https://framagames.org) | [[fa=git /]](https://github.com/YunoHost-Apps/framagames_ynh) ![](https://ci-apps.yunohost.org/ci/badges/framagames.status.svg) ![](https://dash.yunohost.org/integration/framagames.svg) | +| Framagenda | [Nextcloud Calendar](https://apps.nextcloud.com/apps/calendar) | c.f. Nextcloud | +| Framagit | [GitLab ](https://about.gitlab.com) | [[fa=git /]](https://github.com/YunoHost-Apps/gitlab_ynh) ![](https://ci-apps.yunohost.org/ci/badges/gitlab.status.svg) ![](https://dash.yunohost.org/integration/gitlab.svg) | +| Frama.link | [Lstu ](https://lstu.fr) | [[fa=git /]](https://github.com/YunoHost-Apps/lstu_ynh) ![](https://ci-apps.yunohost.org/ci/badges/lstu.status.svg) ![](https://dash.yunohost.org/integration/lstu.svg) | +| Framalistes | [Sympa ](http://www.sympa.org) | [[fa=git /]](https://github.com/alexAubin/sympa_ynh) ![](https://ci-apps.yunohost.org/ci/badges/sympa.status.svg) ![](https://dash.yunohost.org/integration/sympa.svg) | +| Framanews | [TinyTinyRSS ](https://tt-rss.org) | [[fa=git /]](https://github.com/YunoHost-apps/ttrss_ynh) ![](https://ci-apps.yunohost.org/ci/badges/ttrss.status.svg) ![](https://dash.yunohost.org/integration/ttrss.svg) | +| Framanotes | [Turtl ](https://turtlapp.com) | [[fa=git /]](https://github.com/YunoHost-Apps/turtl_ynh) ![](https://ci-apps.yunohost.org/ci/badges/turtl.status.svg) ![](https://dash.yunohost.org/integration/turtl.svg) | +| Framapad | [Etherpad](https://etherpad.org) + [MyPads](https://framagit.org/framasoft/Etherpad/ep_mypads) | [[fa=git /]](https://github.com/YunoHost-Apps/etherpad_mypads_ynh) ![](https://ci-apps.yunohost.org/ci/badges/etherpad_mypads.status.svg) ![](https://dash.yunohost.org/integration/etherpad_mypads.svg) | +| Framapiaf | [Mastodon ](https://joinmastodon.org) | [[fa=git /]](https://github.com/YunoHost-Apps/mastodon_ynh) ![](https://ci-apps.yunohost.org/ci/badges/mastodon.status.svg) ![](https://dash.yunohost.org/integration/mastodon.svg) | +| Framapic | [Lutim ](https://lut.im/) | [[fa=git /]](https://github.com/YunoHost-Apps/lutim_ynh) ![](https://ci-apps.yunohost.org/ci/badges/lutim.status.svg) ![](https://dash.yunohost.org/integration/lutim.svg) | +| Framasites | [Grav ](https://getgrav.org) | [[fa=git /]](https://github.com/YunoHost-Apps/grav_ynh) ![](https://ci-apps.yunohost.org/ci/badges/grav.status.svg) ![](https://dash.yunohost.org/integration/grav.svg) | +| Framaslides | [Strut ](https://strut.io) | [[fa=git /]](https://github.com/YunoHost-Apps/strut_ynh) ![](https://ci-apps.yunohost.org/ci/badges/strut.status.svg) ![](https://dash.yunohost.org/integration/strut.svg) | +| Framasphère | [Diaspora ](https://diasporafoundation.org) | [[fa=git /]](https://github.com/aymhce/diaspora_ynh) ![](https://ci-apps.yunohost.org/ci/badges/diaspora.status.svg) ![](https://dash.yunohost.org/integration/diaspora.svg) | +| Framatalk | [Jitsi Meet ](https://meet.jit.si) | [[fa=git /]](https://github.com/YunoHost-Apps/jitsi_ynh) ![](https://ci-apps.yunohost.org/ci/badges/jitsi.status.svg) ![](https://dash.yunohost.org/integration/jitsi.svg) | +| Framateam | [Mattermost ](https://mattermost.com) | [[fa=git /]](https://github.com/YunoHost-Apps/mattermost_ynh) ![](https://ci-apps.yunohost.org/ci/badges/mattermost.status.svg) ![](https://dash.yunohost.org/integration/mattermost.svg) | +| Framatrad | [Weblate ](https://weblate.org) | [[fa=git /]](https://github.com/YunoHost-Apps/weblate_ynh) ![](https://ci-apps.yunohost.org/ci/badges/weblate.status.svg) ![](https://dash.yunohost.org/integration/weblate.svg) | +| Framatube | [Peertube ](https://joinpeertube.org) | [[fa=git /]](https://github.com/YunoHost-Apps/peertube_ynh) ![](https://ci-apps.yunohost.org/ci/badges/peertube.status.svg) ![](https://dash.yunohost.org/integration/peertube.svg) | +| Framavectoriel | [SVG-Edit ](https://github.com/SVG-Edit/svgedit) | [[fa=git /]](https://github.com/YunoHost-Apps/svgedit_ynh) ![](https://ci-apps.yunohost.org/ci/badges/svgedit.status.svg) ![](https://dash.yunohost.org/integration/svgedit.svg) | +| Framavox | [Loomio ](https://www.loomio.org) | Non packagé | +| Framemo | [Scrumblr ](http://scrumblr.ca) | [[fa=git /]](https://github.com/YunoHost-Apps/scrumblr_ynh) ![](https://ci-apps.yunohost.org/ci/badges/scrumblr.status.svg) ![](https://dash.yunohost.org/integration/scrumblr.svg) | +| Framindmap | [Wisemapping ](https://www.wisemapping.com) | [[fa=git /]](https://github.com/YunoHost-Apps/wisemapping_ynh) ![](https://ci-apps.yunohost.org/ci/badges/wisemapping.status.svg) ![](https://dash.yunohost.org/integration/wisemapping.svg) | +| Framinetest | [Minetest ](https://www.minetest.net) | [[fa=git /]](https://github.com/YunoHost-Apps/minetest_ynh) ![](https://ci-apps.yunohost.org/ci/badges/minetest.status.svg) ![](https://dash.yunohost.org/integration/minetest.svg) | +| MyFrama | [Shaarli ](https://github.com/shaarli/Shaarli) | [[fa=git /]](https://github.com/YunoHost-Apps/shaarli_ynh) ![](https://ci-apps.yunohost.org/ci/badges/shaarli.status.svg) ![](https://dash.yunohost.org/integration/shaarli.svg) | + +### See also + +- [Complete list of packaged applications](/apps) +- [The roadmap 'Dégooglisons'](https://github.com/YunoHost/issues/milestone/13) diff --git a/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.ca.md b/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.ca.md new file mode 100644 index 00000000..8d878678 --- /dev/null +++ b/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.ca.md @@ -0,0 +1,203 @@ +--- +title: Use cases for NGOs +template: docs +taxonomy: + category: docs +routes: + default: '/use_case_non-profit_organisations' +page-toc: + active: true +--- + +! TODO: this page should be updated. + +L'objectiu d'aquest document és presentar un cas d'ús específic de [YunoHost](https://yunohost.org) per a organitzacions sense ànim de lucre. + +## Qui + +Organitzacions sense ànim de lucre, ONGs o qualsevol tipus d'associació. + +## Què + +Normalment les organitzacions sense ànim de lucre han de donar alguns serveis públics: + +* Consell d'administració / Comitè director / Voluntàries amb: + * [Correus electrònics](#mails) + * [Calendari](#calendar) + * [Contacte](#contact) + * [Fitxers compartits / Drive](#shared-files) + * [Missatgeria instantània](#instant-communication) + * [Intranet / base de coneixements](#intranet) + * [ERP / Comptabilitat](#erp-accounting) +* Membres amb: + * [Pàgina web pública amb accés privat i individual](#public-web-site) + * [Adhesió](#membership) + * [Inscripció a esdeveniments](#events-registration) + * [Butlletí d'informació](#newsletter-mailing) + * [Fòrum](#forum) +* Públic amb: + * [Pàgina web pública](#public-web-site) + * [Butlletí d'informació](#newsletter-mailing) + +## Quan + +Quan l'organització estigui preparada per a fer el pas. + +## On + +El servidor YunoHost de l'organització pot estar allotjat en diferents llocs: +* Allotjament propi en un servidor, ordinador o Raspberry darrera una connexió ADSL, SDSL o fibra +* Serveis d'allotjament de [Chatons](https://chatons.org), [librehosters](https://framagit.org/librehosters/awesome-librehosters) +* Serveis d'allotjament comercials que ofereixin màquines virtuals Debian + +## Per què + +YunoHost pot cobrir la majoria de necessitats d'una organització sense ànim de lucre i permet tenir el control sobre les dades de l'organització. + + +## Com + +### YunoHost + +YunoHost és una distribució GNU/Linux basada en Debian empaquetada amb programari lliure que automatitza la instal·lació d'un servidor web personal. L'objectiu de YunoHost és permetre a les usuàries allotjar fàcilment els seus propis serveis web al oferir una interfície web en la que es poden instal·lar diferents aplicacions només amb uns quants clics. + +![](https://upload.wikimedia.org/wikipedia/commons/0/07/Yunohost_user_portal.png) + +YunoHost de base ofereix: +* Un sistema d'aplicacions +* Una interfície web +* Una interfície per línia de comandes (CLI): Moulinette +* Un servidor web: NGINX +* Un servidor DNS: Dnsmasq +* Una base de dades: MariaDB +* Un sistema de còpies de seguretat +* Un SSO: SSOwat +* OpenLDAP +* Correu electrònic: + * SMTP: Postfix + * IMAP & POP3: Dovecot + * Un antispam: rspamd, rmilter +* Un servidor de missatgeria instantània XMPP: Metronome IM + +### Nom de domini + +La primera cosa que s'haurà de tenir per poder instal·lar un servidor YunoHost és un nom de domini. Habitualment el nom de domini el pot oferir el mateix servei d'allotjament. + +### Correus electrònics + +De base, YunoHost ofereix un sistema de correus electrònics disponible utilitzant POP / IMAP / SMTP. +Els comptes de correu electrònic es poden gestionar per mitjà de la interfície web o de la línia de comandes. Els comptes creats es guarden en l'OpenLDAP. + +Es poden instal·lar paquets addicionals per donar més funcionalitats al sistema de correu electrònic de YunoHost: +* Un client web utilitzant [Roundcube](https://github.com/YunoHost-Apps/roundcube_ynh), [Rainloop](https://github.com/YunoHost-Apps/rainloop_ynh) +* ActiveSync utilitzant [Z-Push](https://github.com/YunoHost-Apps/z-push_ynh) +* Un grup de difusió interna utilitzant [Mailman](https://github.com/YunoHost-Apps/mailman_ynh) + +### Calendari + +Per oferir calendaris personals o compartits haureu d'instal·lar: +* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) +* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) + +### Contactes + +Per oferir un sistema de contactes personal haureu d'instal·lar: +* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) + +### Fitxers compartits + +Per oferir un sistema de fitxers compartit: carpetes personals i compartides, podeu instal·lar [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh). +Els fitxers estaran disponibles a través d'una interfície web o bé utilitzant un client de sincronització. + +### Missatgeria instantània + +De base YunoHost ofereix un servidor XMPP, pel que podeu instal·lar un client web: [Jappix](https://github.com/YunoHost-Apps/jappix_ynh). + +També podeu instal·lar un servidor matrix: +* El servidor: [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) +* Un client web: [Riot](https://github.com/YunoHost-Apps/riot_ynh) + +### Intranet + +Per a una organització sense ànim de lucre, una bona manera d'implementar una intranet és oferir una wiki interna per a que les usuàries puguin llegir, editar i afegir contingut. Vegeu aquí alguns paquets que permeten implementar una wiki: +* [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) utilitzant la sintaxi wiki +* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) utilitzant la sintaxi markdown + +### ERP / Comptabilitat + +Arribats a un cert punt una organització sense ànim de lucre podria necessitar un sistema de comptabilitat / ERP, aquí hi ha dos propostes: +* [OpenERP/Odoo](https://github.com/YunoHost-Apps/libreerp_ynh) +* [Dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh) + +### Pàgina web pública + +Hi ha múltiples maneres d'implementar una pàgina web pública: +* Un pàgina simple amb HTML, CSS, etc. utilitzant: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) +* Utilitzant un CMS (sistema de gestió de contingut) com [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh) , [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) + +Però us proposem una alternativa una mica més potent: [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh): +* Drupal és un entorn de treball potent de codi obert per la gestió de contingut +* amb CiviCRM que és un CRM de codi obert per a les organitzacions sense ànim de lucre + +### Adhesió + +Amb CiviCRM podeu tenir adhesions en línia i pagament. + +### Inscripció a esdeveniments + +Amb CiviCRM, podeu posar a disposició una agenda en línia per permetre als membres o al públic inscriure's gratuïtament o pagant. + +### Butlletí d'informació + +La millor manera de gestionar-ho és utilitzar el mòdul de llistes de difusió de CiviCRM. + +### Fòrum + +Hi ha múltiples opcions, tenir un fòrum integrat a Drupal o utilitzar un sistema dedicat com ara [Flarum](https://github.com/YunoHost-Apps/flarum_ynh). + +### Còpies de seguretat + +YunoHost ofereix el seu propi sistema de còpies de seguretat. Abans de cada actualització, YunoHost fa una còpia de seguretat de la versió actual del paquet i la restaura automàticament si falla l'actualització. +Les còpies de seguretat de YunoHost s'emmagatzemen localment a `/home/yunohost.backup/archives`. + +Però per un servidor en producció, còpies de seguretat locals no són suficients, així que s'hauran d'implementar còpies de seguretat alternatives: +* Còpia de seguretat de la màquina virtual si ho permet el sistema d'allotjament. +* [Archivist](https://github.com/YunoHost-Apps/archivist_ynh) és un sistema de còpies de seguretat automàtiques del servidor. Les còpies de seguretat es poden enviar a d'altres llocs, locals o distants. +* [Borg](https://github.com/YunoHost-Apps/borg_ynh) i [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) permeten externalitzar les còpies de seguretat. +* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), si teniu de servidors YunoHost, permet tenir un servidor secundari que pot ser utilitzat en cas que caigui el servidor principal. Aquest servidor secundari permetrà desplegar una còpia del servidor i tornar a posar en marxar YunoHost durant la caiguda. + +### Anar més enllà + +#### Galeria de fotografies federada + +* [Pixelfed](https://github.com/YunoHost-Apps/pixelfed_ynh) + +#### Galeria àudio federada + +* [Reel2Bits](https://github.com/YunoHost-Apps/reel2bits_ynh) +* [Funkwhale](https://github.com/YunoHost-Apps/funkwhale_ynh) + +#### Galeria vídeo federada + +* [PeerTube](https://github.com/YunoHost-Apps/peertube_ynh) + +#### Xarxa social federada + +* [Mastodon](https://github.com/YunoHost-Apps/mastodon_ynh) +* [Pleroma](https://github.com/YunoHost-Apps/pleroma_ynh) +* [Mobilizon](https://github.com/YunoHost-Apps/mobilizon_ynh) + +#### Blog federat + +* [Plume](https://github.com/YunoHost-Apps/plume_ynh) +* [Writefreely](https://github.com/YunoHost-Apps/writefreely_ynh) + +#### Xat + +* [Mattermost](https://github.com/YunoHost-Apps/mattermost_ynh) + +## Conclusió + +YunoHost por cobrir el 99% de les necessitats de les organitzacions sense ànim de lucre, permetent així que recuperin la sobirania i puguin protegir les seves dades, així com escollir les aplicacions que volen utilitzar. +I si n'hi ha alguna que no està disponible, poden [empaquetar-la per YunoHost](/contributordoc), és molt senzill. diff --git a/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.fr.md b/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.fr.md new file mode 100644 index 00000000..787d3112 --- /dev/null +++ b/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.fr.md @@ -0,0 +1,202 @@ +--- +title: Cas d'usages pour associations +template: docs +taxonomy: + category: docs +routes: + default: '/use_case_non-profit_organisations' +page-toc: + active: true +--- + +! TODO: cette page devrait être retravaillée. + +L'objet de ce document est de présenter une utilisation spécifique de [YunoHost](https://yunohost.org/) pour des organisations à but non lucratif. + +## Qui + +Organisations à but non lucratif, ONG ou tout type d'association. + +## Quoi + +Les organisations à but non lucratif doivent généralement fournir différents services à différents publics : + +* Conseil d'administration / Comité directeur / Bénévoles avec : + * [Mails](#mails) + * [Calendrier](#calendrier) + * [Contact](#contact) + * [Fichiers partagés / Drive](#fichiers-partag-s) + * [Communication instantanée](#communication-instantan-e) + * [Intranet / Base de connaissances](#intranet) + * [ERP / Comptabilité](#erp-comptabilit-) +* Membres avec : + * [Site Web public avec accès privé et individuel](#site-web-public) + * [Adhésion](#adh-sion) + * [Inscriptions aux événements](#inscriptions-aux-v-nements) + * [Mailings](#newsletter-mailing) + * [Forum](#forum) +* Public avec : + * [Site Web public](#site-web-public) + * [Newsletter](#newsletter-mailing) + +## Quand + +Lorsque l'organisation à but non lucratif est prête à franchir le pas. + +## Où + +Le serveur YunoHost peut être hébergé à différents endroits : +* Hébergement en propre sur un serveur, un ordinateur ou Raspberry derrière ADSL, SDSL ou Fibre +* [Chatons](https://chatons.org), [librehosters](https://framagit.org/librehosters/awesome-librehosters) +* Services d'hébergement commercial fournissant une machine virtuelle Debian + +## Pourquoi + +YunoHost peut répondre à tous les besoins d'une organisation à but non lucratif et lui permettre de conserver la maîtrise de ses données. + +## Comment + +### YunoHost + +YunoHost est une distribution basée sur Debian GNU/Linux qui automatise l’installation d’un serveur Web personnel. Le but de YunoHost est de permettre aux utilisateurs d’héberger facilement leurs propres services Web en proposant une interface Web simple, pointer-cliquer, pour installer diverses applications Web. + +![](https://upload.wikimedia.org/wikipedia/commons/0/07/Yunohost_user_portal.png) + +YunoHost fournit immédiatement: +* Un système d'application +* Une interface Web +* Une interface de ligne de commande (CLI) : Moulinette +* Un serveur Web : NGINX +* Un serveur DNS : Dnsmasq +* Une base de données : MariaDB +* Un système de sauvegarde +* Un SSO : SSOwat +* OpenLDAP +* Email : + * SMTP : Postfix + * IMAP & POP3 : Dovecot + * Un antispam : rspamd, rmilter +* Serveur XMPP de messagerie instantanée : Metronome IM + +### Nom de domaine + +La première chose dont vous aurez besoin pour implémenter un serveur YunoHost est un nom de domaine. Le nom de domaine peut généralement être fourni avec votre service d'hébergement. + +### Mails + +YunoHost fournit par défaut un système de messagerie disponible en utilisant POP / IMAP / SMTP. +Les comptes de messagerie seront gérés à l'aide de l'interface Web ou de la ligne de commande. Les comptes créés sont stockés dans OpenLDAP. + +Des packages supplémentaires peuvent être installés pour fournir davantage de fonctionnalités au système de messagerie YunoHost : +* un webmail en utilisant [Roundcube](https://github.com/YunoHost-Apps/roundcube_ynh), [Rainloop](https://github.com/YunoHost-Apps/rainloop_ynh) +* ActiveSync utilisant [Z-Push](https://github.com/YunoHost-Apps/z-push_ynh) +* Groupe de distribution interne en utilisant [Mailman](https://github.com/YunoHost-Apps/mailman_ynh) + +### Calendrier + +Pour fournir des calendriers personnels ou partagés, vous devrez installer : +* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) + +### Contact + +Pour fournir un système de contact personnel, vous devrez installer : +* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) + +### Fichiers partagés + +Pour fournir un système de fichiers partagés : dossiers personnels et dossiers partagés, vous pouvez installer [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh). +Les fichiers seront disponibles à partir d'une interface Web ou à l'aide d'un client de synchronisation. + +### Communication instantanée + +Par défaut, YunoHost fournit immédiatement un serveur XMPP pour lequel vous pouvez installer un client Web : [Jappix](https://github.com/YunoHost-Apps/jappix_ynh) + +Vous pouvez également installer un serveur Matrix : +* Le serveur : [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) +* Un client Web : [Element](https://github.com/YunoHost-Apps/element_ynh) + +### Intranet + +Pour une organisation à but non lucratif, un bon moyen de mettre en œuvre un intranet est de fournir un wiki permettant aux utilisateurs internes de lire, éditer et ajouter du contenu. Voici quelques paquets pour implémenter un wiki : +* [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) utilisant une syntaxe wiki +* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) utilisant une syntaxe Markdown + +### ERP / Comptabilité + +À un moment donné, une organisation à but non lucratif pourrait avoir besoin d’un système de Comptabilité / ERP, voici deux propositions : +* [OpenERP/Odoo](https://github.com/YunoHost-Apps/libreerp_ynh) +* [Dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh) + +### Site Web Public + +Il existe plusieurs façons d'implémenter un site Web public : +* Un simple site HTML, CSS, etc. en utilisant : [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) +* Utiliser un CMS (système de gestion de contenu) comme [WordPress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh), [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) + +Mais nous proposerons quelque chose de plus puissant : [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh) : +* Drupal qui est un puissant framework de gestion de contenu +* avec CiviCRM qui est un CRM open source à destination des organisations à but non lucratif + +#### Adhésion + +Avec CiviCRM, vous pourrez mettre en place des adhésions en ligne avec paiement. + +#### Inscriptions aux événements + +Avec CiviCRM, vous pourrez mettre à disposition un agenda en ligne avec la possibilité pour les membres ou le public de s'inscrire gratuitement ou en payant. + +#### Newsletter/Mailing + +Le meilleur moyen de gérer cela consiste à utiliser CiviCRM et son module de mailing. + +### Forum + +Vous avez plusieurs choix, avoir un forum intégré dans Drupal ou utiliser un système de forum dédié tel que [Flarum](https://github.com/YunoHost-Apps/flarum_ynh). + +### Sauvegarde + +YunoHost fournit son propre système de sauvegarde. Avant toute mise à niveau de paquet, YunoHost sauvegarde la version actuelle du paquet et la restaure automatiquement si la mise à niveau échoue. +Les sauvegardes YunoHost sont stockées localement dans `/home/yunohost.backup/archives`. + +Mais pour la production, la sauvegarde stockée localement ne suffit pas, vous devez donc mettre en œuvre des stratégies de sauvegarde supplémentaires : +* Sauvegarde de la machine virtuelle si fournie par le système d'hébergement. +* [Archivist](https://github.com/YunoHost-Apps/archivist_ynh) est un système de sauvegarde automatique de votre serveur. Vos sauvegardes peuvent être envoyées à de nombreux autres endroits, locaux ou distants. +* [Borg](https://github.com/YunoHost-Apps/borg_ynh) and [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) permettent d'externaliser les sauvegardes. +* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), si vous avez deux serveurs YunoHost, fournissez un moyen d'avoir un serveur secondaire que vous pourrez utiliser si votre serveur principal tombe en panne. Ce serveur secondaire vous permettra de déployer une copie de votre serveur pour ramener votre YunoHost lors de votre panne. + +### Aller plus loin + +#### Galerie de photos fédérées + +* [Pixelfed](https://github.com/YunoHost-Apps/pixelfed_ynh) + +#### Galerie audio fédérée + +* [Reel2Bits](https://github.com/YunoHost-Apps/reel2bits_ynh) +* [Funkwhale](https://github.com/YunoHost-Apps/funkwhale_ynh) + +#### Galerie vidéo fédérée + +* [PeerTube](https://github.com/YunoHost-Apps/peertube_ynh) + +#### Réseaux sociaux fédérés + +* [Mastodon](https://github.com/YunoHost-Apps/mastodon_ynh) +* [Pleroma](https://github.com/YunoHost-Apps/pleroma_ynh) +* [Mobilizon](https://github.com/YunoHost-Apps/mobilizon_ynh) + +#### Blog fédéré + +* [Plume](https://github.com/YunoHost-Apps/plume_ynh) +* [Writefreely](https://github.com/YunoHost-Apps/writefreely_ynh) + +#### Chat + +* [Mattermost](https://github.com/YunoHost-Apps/mattermost_ynh) + +## Conclusion + +YunoHost peut couvrir 99% des besoins des organisations à but non lucratif, leur permettant de posséder et de protéger leurs données, de choisir les applications qu'elles souhaitent utiliser. +Et s’ils ne sont pas disponibles, ils peuvent [les packager pour YunoHost](/contributordoc), c’est très simple. diff --git a/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.md b/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.md new file mode 100644 index 00000000..e477d492 --- /dev/null +++ b/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.md @@ -0,0 +1,203 @@ +--- +title: Use cases for NGOs +template: docs +taxonomy: + category: docs +routes: + default: '/use_case_non-profit_organisations' +page-toc: + active: true +--- + +! TODO: this page should be updated. + +The purpose of this document is to present a specific use of [YunoHost](https://yunohost.org/) for non-profit organizations. + +## Who + +Non-profit organizations, NGO or any kind of association. + +## What + +Usually non-profit organizations need to provide several services to several publics: + +* Board of Directors / Steering Committee / Volunteers with: + * [Mails](#mails) + * [Calendar](#calendar) + * [Contact](#contact) + * [Shared files / Drive](#shared-files) + * [Instant communication](#instant-communication) + * [Intranet / knowledge database](#intranet) + * [ERP / Accounting](#erp-accounting) +* Members with: + * [Public website with private and individual access](#public-web-site) + * [Membership](#membership) + * [Events registrations](#events-registrations) + * [Mailings](#newsletter-mailing) + * [Forum](#forum) +* Public with: + * [Public website](#public-web-site) + * [Newsletter](#newsletter-mailing) + +## When + +When ready to move forward. + +## Where + +You YunoHost for non profit can be hosted in several places: +* Own hosting on a server, computer or Raspberry behind ASDL, SDSL or Fiber +* [Chatons](https://chatons.org), [librehosters](https://framagit.org/librehosters/awesome-librehosters) hosting services +* Commercial hosting services providing Debian virtual machine + +## Why + +YunoHost can provide mostly all needs of a non-profit organization. +Keeping their data on their own. + +## How + +### YunoHost + +YunoHost is a Debian GNU/Linux based distribution packaged with free software that automates the installation of a personal web server. The purpose of YunoHost is to allow users to easily host their own web services by enabling a simple point-and-click web interface for installing various web apps. + +![](https://upload.wikimedia.org/wikipedia/commons/0/07/Yunohost_user_portal.png) + +Out of the box YunoHost provide: +* A system of application +* A web interface +* A command-line interface (CLI): Moulinette +* A web server: NGINX +* A DNS server: Dnsmasq +* A database: MariaDB +* A backup system +* An SSO: SSOwat +* OpenLDAP +* Email: + * SMTP: Postfix + * IMAP & POP3: Dovecot + * An antispam: rspamd,rmilter +* Instant messaging XMPP server: Metronome IM + +### Domain Name + +The first thing you will need to implement a YunoHost server is a domain name. The domain name can usually be provided with your hosting service. + +### Mails + +From scratch, YunoHost provide mail system available using POP/IMAP/SMTP. +Mails accounts will be managed using the web interface or the command line. Created accounts are stored in OpenLDAP. + +Additional package can be installed to provide more functionality to the YunoHost mail system: +* Webmail using [Roundcube](https://github.com/YunoHost-Apps/roundcube_ynh), [Rainloop](https://github.com/YunoHost-Apps/rainloop_ynh) +* ActiveSync using [Z-Push](https://github.com/YunoHost-Apps/z-push_ynh) +* Internal distribution group using [Mailman](https://github.com/YunoHost-Apps/mailman_ynh) + +### Calendar + +To provide personal or shared calendars you will need to install: +* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) + +### Contact + +To provide personal contact system you will need to install: +* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) + +### Shared files + +To provide shared files system: personal and shared drive, you can install [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh). +Files will be available from a web interface or using a synchronization client. + +### Instant communication + +Out of the box, YunoHost provide an XMPP server, for which you can install a web client: [Jappix](https://github.com/YunoHost-Apps/jappix_ynh). + +You can also install a matrix server: +* The server: [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) +* A web client: [Element](https://github.com/YunoHost-Apps/element_ynh) + +### Intranet + +For an non-profit organization a good way to implement an intranet is to provide a wiki to let internal users read, edit and add content. Here are some packages to implement a wiki: +* [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) using wiki syntax +* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) using Markdown syntax + +### ERP / Accounting + +At some time a non-profit organization could need an accounting/erp system, here are two propositions: +* [OpenERP/Odoo](https://github.com/YunoHost-Apps/libreerp_ynh) +* [Dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh) + +### Public Web Site + +There are several way to implement a Public Web Site: +* Simple HTML, CSS, etc. Website using: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) +* Using a CMS (Content Management System) like [WordPress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh), [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) + +But we will propose something more powerful: [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh): +* Drupal that is a powerful open source content management framework +* with CiviCRM that is an open source constituent relationship management for non-profits + +#### Membership + +With CiviCRM you can provide online membership and payment. + +#### Events Registrations + +With CiviCRM, you can provide an online diary to let members or public register for free or with a payment. + +#### Newsletter/Mailing + +Best way to manage that is using CiviCRM and its mailing module. + +### Forum + +You have several choices, or having an integrated forum in Drupal or using a dedicated forum system like [Flarum](https://github.com/YunoHost-Apps/flarum_ynh). + +### Backup + +YunoHost provide is own backup system. Before any package upgrade, YunoHost backup the current version of the package and automaticaly restore it if the upgrade fails. +YunoHost backup are stored localy in `/home/yunohost.backup/archives`. + +But for production, localy stored backup are not enough, so you will need to implement aditional backup strategies: +* Backup of the the Virtual Machine if provided by the hosting system. +* [Archivist](https://github.com/YunoHost-Apps/archivist_ynh) is an automatic backup system for your server. Your backups can be send to many other places, local or distant. +* [Borg](https://github.com/YunoHost-Apps/borg_ynh) and [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) allow to externalize backups. +* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), if you have two YunoHost servers, provide a way to have a secondary server which you can used if your main server goes down. This secondary server will allow you to deploy a copy of your server to bring back your YunoHost during your break down. + +### Go further + +#### Federated Photo Gallery + +* [Pixelfed](https://github.com/YunoHost-Apps/pixelfed_ynh) + +#### Federated Audio Gallery + +* [Reel2Bits](https://github.com/YunoHost-Apps/reel2bits_ynh) +* [Funkwhale](https://github.com/YunoHost-Apps/funkwhale_ynh) + +#### Federated Video Gallery + +* [PeerTube](https://github.com/YunoHost-Apps/peertube_ynh) + +#### Federated Social Networking + +* [Mastodon](https://github.com/YunoHost-Apps/mastodon_ynh) +* [Pleroma](https://github.com/YunoHost-Apps/pleroma_ynh) +* [Mobilizon](https://github.com/YunoHost-Apps/mobilizon_ynh) + +#### Federated Blog + +* [Plume](https://github.com/YunoHost-Apps/plume_ynh) +* [Writefreely](https://github.com/YunoHost-Apps/writefreely_ynh) + +#### Chat + +* [Mattermost](https://github.com/YunoHost-Apps/mattermost_ynh) + +## Conclusion + +YunoHost can cover 99% of the needs of non-profit organizations, allowing them to own and protect their data, choose applications they want to use. +And if one is not available, they can [package it for YunoHost](/contributordoc), it's very simple. diff --git a/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.oc.md b/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.oc.md new file mode 100644 index 00000000..842133bb --- /dev/null +++ b/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.oc.md @@ -0,0 +1,202 @@ +--- +title: Use cases for NGOs +template: docs +taxonomy: + category: docs +routes: + default: '/use_case_non-profit_organisations' +page-toc: + active: true +--- + +! TODO: this page should be updated. + +L'objectiu d’aqueste document es de presentar una utilizacion especifica de [YunoHost](https://yunohost.org/) per d’organizacions sens tòca lucrativa. + +## Qual + +Organizacions sens tòca lucrativa, ONG o qualque siá associacion. + +## Qué + +Las organizacions sens tòca lucrativa devon generalament fornir diferents servicis a diferents publics : + +* Conselh d'administracion / Comitat director / Benevòls amb : + * [Mails](#mails) + * [Calendièr](#calendièr) + * [Contacte](#contacte) + * [Fichièrs partejats / Drive](#fichièrs-partejats) + * [Comunicacion instantanèa](#comunicacion-instantan-a) + * [Intranet / Basa de coneissenças](#intranet) + * [ERP / Comptabilitat](#erp-comptabilitat) +* Membres amb : + * [Site Web public amb accès privat e individual](#site-web-public) + * [Adhesion](#adhesion) + * [Inscripcions als eveniments](#inscriptions-als-eveniments) + * [Infoletras](#infoletras) + * [Forum](#forum) +* Public amb : + * [Site Web public](#site-web-public) + * [Infoletras](#newsletter-mailing) + +## Quand + +Quand l'organizacion sens tòca lucrativa es prèsta a passar lo pas. + +## Ont + +Lo servidor YunoHost pòt èsser albergat a diferents endreches : +* Albergament en pròpri sus un servidor, un ordenador o Raspberry darrièr una connexion ADSL, SDSL o Fibra +* [Chatons](https://chatons.org), [librehosters](https://framagit.org/librehosters/awesome-librehosters) +* Servicis d'albergament comercial que fornís una maquina virtuala Debian + +## Perque + +YunoHost pòt correspondre als besonhs d'una organizacion sens tòca lucrativa e li permetre de servar lo mestritge de sas donadas. + +## Cossí + +### YunoHost + +YunoHost es una distribucion basada sus Debian GNU/Linux qu’automatiza l’installacion d’un servidor Web personal. La tòca de YunoHost es de permetre als utilizaires d’albergar facilament lors pròpris servicis Web en prepausant una interfàcia Web simpla, als clics, per installar divèrsas aplicacions Web. + +![](https://upload.wikimedia.org/wikipedia/commons/0/07/Yunohost_user_portal.png) + +YunoHost provesís sul pic: +* Un sistèma d'aplicacion +* Una interfàcia web +* Una interfàcia en linha de comanda (CLI) : Moulinette +* Un servidor Web : NGINX +* Un servidor DNS : Dnsmasq +* Una basa de donadas : MariaDB +* Un sistèma de salvagarda +* Un SSO: SSOwat +* OpenLDAP +* Corrièls : + * SMTP: Postfix + * IMAP & POP3 : Dovecot + * Un antispam : rspamd, rmilter +* Servidor XMPP de messatjariá instantanèa : Metronome IM + +### Nom de domeni + +La primièra causa que vos fa mestièr per installar un servidor YunoHost es un nom de domeni. Lo nom de domeni pòt èsser generalament fornit amb lo servici d’albergament. + +### Corrièls + +A la prima installacion YunoHost fornís un sistèma de messatjariá disponible en utilizant POP / IMAP / SMTP. +Los comptes de messatjariá seràn gerits amb l'interfàcia Web o en linha de comanda. Los comptes creats seràn gardats dins l’OpenLDAP. + +De paquets suplementaris pòdon èsser installats per provesir mai de foncionalitats al sistèma de messatjariá YunoHost : +* un webmail en utilizant [Roundcube](https://github.com/YunoHost-Apps/roundcube_ynh), [Rainloop](https://github.com/YunoHost-Apps/rainloop_ynh) +* ActiveSync utilizant [Z-Push](https://github.com/YunoHost-Apps/z-push_ynh) +* Grop de distribucion intèrne en utilizant [Mailman](https://github.com/YunoHost-Apps/mailman_ynh) + +### Calendièr + +Per fornir de calendièrs personals o partejats, vos calrà installar : +* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) + +### Contacte + +Per fornir un sistèma de contacte personal, vos caldrà installar : +* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) +* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) + +### Fichièrs partejats + +Per fornir un sistèma de fichièrs partejats : dorsièrs personals e dorsièrs partejats, podètz installar [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh). +Las fichièrs seràn disponibles d’una interfàcia web estant o amb un client de sincronizacion. + +### Comunicacion instantanèa + +Tras l’installacion YunoHost fornís sul pic un servidor XMPP per lo qual podètz installar un client Web : [Jappix](https://github.com/YunoHost-Apps/jappix_ynh) + +Podètz tanben installar un servidor Matrix : +* Lo servidor: [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) +* Un client web: [Riot](https://github.com/YunoHost-Apps/riot_ynh) + +### Intranet + +Per una organizacion sens tòca lucrativa, un bon biais de metre en plaça un intranet es de fornir un wiki que permet als utilizaires intèrne de legir, modificar e ajustar de contengut. Vaquí unes paquets per installar un wiki : +* [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) utiliza la sintaxi wiki +* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) utiliza la sintaxi markdown + +### ERP / Comptabilitat + +Arriba un moment ont a l’organizacion sens tòca lucrativa li pòsca far besonh un sistèma de comptabilitat / ERP, vaquí doas proposicions : +* [OpenERP/Odoo](https://github.com/YunoHost-Apps/libreerp_ynh) +* [Dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh) + +### Site Web Public + +Existís mantuns biaisses de construire un site Web public : +* Un simple site HTML, CSS, etc. en utilizant : [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) +* Utilizar un CMS (sistèma de gestion de contengut) coma [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh), [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) + +Mas prepausam quicòm de mai potent : [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh) : +* Drupal qu’es un framework potent de gestion de contengut +* amb CiviCRM qu’es un CRM OpenSource a destinacion de las organizacions sens tòca lucrativa + +#### Adhesion + +Amb CiviCRM, poiretz metre en plaça d’adhesions en linha amb pagament. + +#### Inscripcions als eveniments + +Amb CiviCRM, poiretz metre a disposicion un agenda en linha amb la possibilitat pels membres o lo public de s’inscriure gratuitament o en pagant. + +#### Infoletra/Lista de difusion + +Çò melhor per gerir aquò es d’utilizar CiviCRM e son modul de lista de difusion. + +### Forum + +Avètz mantun possibilitats, aver un forum integrat a Drupal o utilizar un sistèma dedicat coma [Flarum](https://github.com/YunoHost-Apps/flarum_ynh). + +### Salvagarda + +YunoHost fornís son pròpri sistèma de salvagarda. Abans tota mesa a nivèl de paquet, YunoHost salvagarda la version actuala del paquet e la restaura automaticament se la mesa a nivèl se debana pas corrèctament. +Las salvagardas YunoHost son gardadas localament dins `/home/yunohost.backup/archives`. + +Mas per la produccion, la salvagarda gardada localament basta pas, vos cal emplegar d’estrategias de salvagarda suplementàrias : +* Salvagarda de la maquina virtuala se fornida pel sistèma d’albergament. +* [Archivist](https://github.com/YunoHost-Apps/archivist_ynh) es un sistèma de salvagarda automatic de vòstre servidor. Vòstras salvagardas pòdon èsser enviadas a mantun endreches, locals o alonhats. +* [Borg](https://github.com/YunoHost-Apps/borg_ynh) e [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) permeton d’externalizar las salvagardas. +* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), se avètz dos servidors YunoHost, ajatz los mejans d’aver un servidor segondari que poiretz utilizar se lo primièr ven a foncionar pas mai. Aqueste servidor segondari vos permetrà de restablir una còpia de vòstre servidor per dire de corregir los problèmas de l’autre servidor YunoHost. + +### Anar mai luènh + +#### Galariá de fotografias federada + +* [Pixelfed](https://github.com/YunoHost-Apps/pixelfed_ynh) + +#### Galariá àudio federada + +* [Reel2Bits](https://github.com/YunoHost-Apps/reel2bits_ynh) +* [Funkwhale](https://github.com/YunoHost-Apps/funkwhale_ynh) + +#### Galariá vidèo federada + +* [PeerTube](https://github.com/YunoHost-Apps/peertube_ynh) + +#### Malhums socials federats + +* [Mastodon](https://github.com/YunoHost-Apps/mastodon_ynh) +* [Pleroma](https://github.com/YunoHost-Apps/pleroma_ynh) +* [Mobilizon](https://github.com/YunoHost-Apps/mobilizon_ynh) + +#### Blog federats + +* [Plume](https://github.com/YunoHost-Apps/plume_ynh) +* [Writefreely](https://github.com/YunoHost-Apps/writefreely_ynh) + +#### Chat + +* [Mattermost](https://github.com/YunoHost-Apps/mattermost_ynh) + +## Conclusion + +YunoHost pòt cumplir 99% dels besonhs de las organizacions sens tòca lucrativa, en lor permetent de téner e protegir lors donadas, de causir las aplicacions que vòlon utilizar. +E se son pas disponiblas, pòdon [crear un paquet per YunoHost](/contributordoc), es fòrça simple. diff --git a/pages/04.applications/20.app_bundle/app_bundle.md b/pages/04.applications/20.app_bundle/app_bundle.md new file mode 100644 index 00000000..52d238b4 --- /dev/null +++ b/pages/04.applications/20.app_bundle/app_bundle.md @@ -0,0 +1,12 @@ +--- +title: Application bundles +template: docs +taxonomy: + category: docs +routes: + default: '/bundles' +--- + +! TODO: this page needs to be written + +This page aims to list app bundles to answer to typical use cases. \ No newline at end of file diff --git a/pages/04.applications/99.wishlist/apps_wishlist.md b/pages/04.applications/99.wishlist/apps_wishlist.md new file mode 100644 index 00000000..6979c662 --- /dev/null +++ b/pages/04.applications/99.wishlist/apps_wishlist.md @@ -0,0 +1,382 @@ +--- +title: Apps wishlist +template: docs +taxonomy: + category: docs +routes: + default: '/apps_wishlist' +--- + +The following list is a compiled wishlist of applications that would be nice-to-have. + +You can [contribute to this list by adding something you'd like to be packaged](/write_documentation), or learn more on [how to package applications](/packaging_apps) to create a new package or improve a package draft. + +! Before adding an app in this wish-list, please check your app is not [already available in YunoHost's app catalogue](/apps) or [about to be added into it](https://github.com/YunoHost/apps/pulls) + +| Name | Description | Upstream | Package draft | +| ------ | ----------- | -------- | ------------- | +| 10er10 | 10er10 is an HTML5 audio jukebox | [Upstream](https://github.com/dready92/10er10) | | +| [Access to Memory (AtoM)](https://www.accesstomemory.org/) | Web-based, open source application for standards-based archival description and access in a multilingual, multi-repository environment. | [Upstream](https://github.com/artefactual/atom) | | +| adhocserver | An ad hoc server for the Sony PSP | | [Package Draft](https://github.com/matlink/adhocserver_ynh) | +| [Ajenti](https://ajenti.org) | Ajenti is a Linux & BSD modular server admin panel | [Upstream](https://github.com/ajenti/ajenti/) | | +| Akaunting | Manage payments/invoices/expenses | [Upstream](https://github.com/akaunting/akaunting) | | +| [Amara](https://amara.org/) | Collaborative translation of subtitles for videos. | [Upstream](https://gitlab.com/hanklank/amara-archive) | | +| Anki Sync Server | a personal Anki server |[Upstream](https://github.com/ankicommunity/anki-sync-server) | | +| [AnonAddy](https://anonaddy.com/) | Anonymous email forwarding - Create Unlimited Email Aliases For Free | [Upstream](https://github.com/anonaddy/anonaddy) | | +| [Ansible Matrix Docker Deploy](https://github.com/spantaleev/matrix-docker-ansible-deploy) | Full Featured Matrix Server Setup with All Bridges and Integrations | [Upstream](https://github.com/spantaleev/matrix-docker-ansible-deploy) | | +| [Apache Superset](https://superset.apache.org/) | Apache Superset is a Data Visualization and Data Exploration Platform | [Upstream](https://github.com/apache/superset) | | +| [Appflowy.IO](https://appflowy.io/) | Open-source alternative to Notion | [Upstream](https://github.com/AppFlowy-IO/appflowy) | | +| [askbot](https://askbot.com/) | Questions and answers | | [Package Draft](https://github.com/zamentur/askbot_ynh) | +| [Archivematica](https://www.archivematica.org/) | Mature digital preservation system designed to maintain standards-based, long-term access to collections of digital objects. | [Upstream](https://github.com/artefactual/archivematica) | | +| [ArchivesSpace](https://archivesspace.org/) | Archives information management application for managing and providing Web access to archives, manuscripts and digital objects. | [Upstream](https://github.com/archivesspace/archivesspace) | | +| [Asqatasun.org](https://asqatasun.org/) | website analyser for web accessibility and SEO | [Upstream](https://gitlab.com/asqatasun/Asqatasun) | | +| [ass](https://github.com/tycrek/ass) | ass is a self-hosted ShareX upload server written in Node.js. |[Upstream](https://github.com/tycrek/ass)| | +| [Astral](https://astralapp.com/) | Organize Your GitHub Stars With Ease |[Upstream](https://github.com/astralapp/astral)| | +| [Azuracast](https://azuracast.com/) | A Simple, Self-Hosted Web Radio Management Suite |[Upstream](https://github.com/AzuraCast/AzuraCast)| | +| [Backstage.io](https://backstage.io/) | Open source Enterprise Developer Portal with Eco-System | [Upstream](https://github.com/backstage/backstage) | | +| [Baserow](https://baserow.io/) | Open source no-code database tool and Airtable alternative. | [Upstream](https://gitlab.com/bramw/baserow) | | +| [Beatbump](https://beatbump.ml/home) | An alternative frontend for YouTube Music | [Upstream](https://github.com/snuffyDev/Beatbump) | | +| [Beeper](https://www.beeper.com/) | A unified inbox for 15 chat networks. | [Upstream](https://gitlab.com/beeper) | | +| [BigBlueButton](https://bigbluebutton.org) | Web conferencing system | [Upstream](https://github.com/bigbluebutton/bigbluebutton) | | +| [BitcartCC](https://bitcartcc.com) | BitcartCC is a self-hosted, open-source cryptocurrency all-in-one solution | [Upstream](https://github.com/bitcartcc/bitcart) | | +| [Bitmessage](https://bitmessage.org/) | P2P communication protocol used to send encrypted messages | [Upstream](https://github.com/Bitmessage/PyBitmessage) | | +| Blynk | | [Upstream](https://github.com/blynkkk/blynk-library) | | +| [Bolt](https://bolt.cm/) | Content Management Tool | | [Package Draft](https://github.com/realitygaps/bolt_ynh) | +| [BorgWarehouse](https://borgwarehouse.com/) | A fast and modern WebUI for a BorgBackup's central repository server. | [Upstream](https://github.com/ravinou/borgwarehouse) | | +| [Budibase](https://budibase.com/) | Low code platform for creating internal apps, workflows, and admin panels in minutes. | [Upstream](https://github.com/Budibase/budibase) | | +| [BTCPay Server](https://btcpayserver.org) | BTCPay Server is a free and open-source Bitcoin payment processor | [Upstream](https://github.com/btcpayserver/btcpayserver) | | +| [Cactus Comments](https://cactus.chat/) | Federated comment system, to embed into your webpages, based on the Matrix protocol. | [Upstream](https://gitlab.com/cactus-comments) | [Package Draft](https://github.com/h3ndrik/cactus-comments_ynh) | +| [Cagette](https://www.cagette.net/) | A marketplace for local farmers and producers | [Upstream](https://github.com/CagetteNet/cagette) | | +| [Cal.com](https://cal.com/) | Formerly Calendso. Volunteer shift management and meeting scheduling. "The open source Calendly alternative." | [Upstream](https://github.com/calcom/cal.com) | | +| [Caliopen](https://www.caliopen.org) | A unified inteface for all your private communications | | | +| [cgit](https://git.zx2c4.com/cgit/about) | | | | +| Chaskiq | A full featured Live Chat, Support & Marketing platform, alternative to Intercom, Drift, Crisp | [Upstream](https://github.com/chaskiq/chaskiq) | | +| changedetection.io | Self-hosted open source change monitoring of web pages | [Upstream](https://github.com/dgtlmoon/changedetection.io) | | +| [Chatterbox](https://element.io/solutions/chatterbox-embedded-live-chat-for-customer-service) | Embedded live chat for customer service | [Upstream]([https://github.com/sourcegraph/checkup](https://github.com/vector-im/chatterbox)) | | +| [Chatwoot](https://www.chatwoot.com/docs/self-hosted/) | Open-source customer engagement suite, an alternative to Intercom, Zendesk, Salesforce Service Cloud | [Upstream](https://github.com/chatwoot/chatwoot) | | +| [CheckUp](https://sourcegraph.github.io/checkup) | | [Upstream](https://github.com/sourcegraph/checkup) | | +| [Checkmk](https://checkmk.com/) | Checkmk provides powerful monitoring of networks, servers, clouds, containers and applications | [Upstream](https://github.com/tribe29/checkmk) | | +| [Citadel-suite](https://www.citadel.org) | Groupware platform | | | +| [CKAN](https://ckan.org/) | A tool for making open data websites | [Upstream](https://github.com/ckan/ckan) | | +| [CloudTube](https://tube.cadence.moe/) | CloudTube front-end for YouTube | [Upstream](https://git.sr.ht/~cadence/cloudtube) | | +| [Commafeed](https://www.commafeed.com/) | Self-hosted RSS reader | [Upstream](https://github.com/Athou/commafeed) | | +| [Conduit](https://conduit.rs/) | Conduit is a lightweight open-source server implementation of the Matrix Specification with a focus on easy setup and low system requirements. | [Upstream](https://gitlab.com/famedly/conduit) | [Package Draft](https://github.com/YunoHost-Apps/conduit_ynh) | +| cops | Calibre OPDS | | [Package Draft](https://github.com/YunoHost-Apps/cops_ynh) | +| [Coquelicot](https://coquelicot.potager.org/) | A “one-click” file sharing web application | | [Package Draft](https://github.com/YunoHost-Apps/coquelicot_ynh) | +| [Cozy](https://cozy.io/en/) | | | | +| Croodle | Vote for a schedule / polling | [Upstream](https://github.com/jelhan/croodle) | | +| [Cusdis](https://cusdis.com/) | A lightweight, privacy-friendly comment system alternative to Disqus. |[Upstream](https://github.com/djyde/cusdis)| | +| [Darkwire.io](https://darkwire.io/) | End-to-end encrypted instant web chat | [Upstream](https://github.com/seripap/darkwire.io) | | +| [Dataverse](https://dataverse.org) | Open source research data repository software | [Upstream](https://github.com/IQSS/dataverse) | | +| [DavMail](http://davmail.sourceforge.net/) | Gateway from OWA and O365 to IMAP, POP, and CalDav for email and calendars | [Upstream](https://github.com/mguessan/davmail) | | +| [democracyOS](https://democracyos.org/) | Vote / make decisions in a collective | | [Package Draft](https://github.com/YunoHost-Apps/democracyos_ynh) | +| [diasporadocker](https://diasporafoundation.org/) | A open and powerfull social network | | [Package Draft](https://github.com/aymhce/diasporadocker_ynh) | +| DirectoryLister | | [Upstream](https://github.com/DirectoryLister/DirectoryLister) | | +| Django_app | Skeleton for django apps | | [Package Draft](https://github.com/Jojo144/django_app_ynh) | +| Docker_container | Deploy applications with Docker | | [Package Draft](https://github.com/scith/docker_container_ynh) | +| Docker_rstudio | A web development environment for statistics with R | | [Package Draft](https://github.com/scith/docker_rstudio_ynh) | +| Docker-registry | | [Upstream](https://github.com/docker/distribution/) | [Package Draft](https://github.com/plopoyop/docker-registry_ynh) | +| DockerUI | Deploy applications with Docker | | [Package Draft](https://github.com/YunoHost-Apps/dockerui_ynh) | +| Docspell | Simple document organizer | [Upstream](https://github.com/eikek/docspell) | | +| Docusaurus | Static site generator/SPA to build documentations | [Upstream](https://github.com/facebook/docusaurus) | | +| [DomainMOD](https://domainmod.org) | Domain portfolio management application | | | +| Dynette | Dynette is a dyndns server | [Upstream](https://github.com/YunoHost/dynette) | [Package Draft](https://github.com/YunoHost-Apps/dynette_ynh) | +| DrakonHub | Online editor for Drakon diagrams | [Upstream](https://github.com/stepan-mitkin/drakonhub) | | +| [Drawpile](https://drawpile.net) | Collaborative drawing program that allows multiple users to sketch on the same canvas simultaneously | [Upstream](https://github.com/drawpile/Drawpile) | | +| [Earthstar-Project Server](https://earthstar-project.org/tutorials/run-a-server) | Run and configure an Earthstar server capable of syncing with other peers | [Upstream](https://github.com/earthstar-project/earthstar) | | +| [Element Call](https://element.io/blog/element-call-beta-2-encryption-spatial-audio-walkie-talkie-mode-and-more/) | Showcase for full mesh video chat powered by Matrix | [Upstream](https://github.com/vector-im/element-call) | | +| [Elk](https://elk.zone) | A nimble Mastodon web client. It also works with other Fediverse servers like Pleroma or GotoSocial | [upstream](https://github.com/elk-zone/elk) | | +| Endlessh | SSH Tarpit | [upstream](https://github.com/skeeto/endlessh) | | +| [erine.email](https://erine.email/) | | [Upstream](https://gitlab.com/mdavranche/erine.email) | | +| [ERPnext](https://erpnext.com/) | | [Upstream](https://github.com/frappe/erpnext) | | +| [EteSync](https://www.etesync.com/) | | [Upstream](https://github.com/etesync) | | +| [Excalibur](https://excalibur-py.readthedocs.io/en/master/) | A web interface to extract tabular data from PDFs (based on Camelot) | [Upstream](https://github.com/camelot-dev/excalibur) | | +| [Farside](https://farside.link/) | A redirecting service for FOSS alternative frontends | [Updtream](https://github.com/benbusby/farside) | | +| [Federated wiki](http://fed.wiki.org/view/welcome-visitors/view/federated-wiki) | Farm for fedwiki sites | [Upstream](https://github.com/fedwiki) | | +| [Ferdi server](https://getferdi.com) | Messaging aggregation | [Upstream](https://github.com/getferdi/server) | | +| [FEX](https://fex.rus.uni-stuttgart.de/) | | | | +| [Firefly-III Data Importer](https://docs.firefly-iii.org/data-importer) | Import data from banks to Firefly | [Upstream](https://github.com/firefly-iii/data-importer) | [Draft Package](https://github.com/marcoil/firefly-iii-di_ynh) | +| [Filestash](https://www.filestash.app/) | | [Upstream](https://github.com/mickael-kerjean/filestash) | | +| [fishnet](https://lichess.org/get-fishnet) | Distributed Stockfish analysis for lichess.org | [Upstream](https://github.com/niklasf/fishnet) | | +| FlareSolverr | Proxy server to bypass Cloudflare protection | [Upstream](https://github.com/FlareSolverr/FlareSolverr) | | +| Flask | Skeleton for flask apps | | [Package Draft](https://github.com/YunoHost-Apps/flask_ynh) | +| [foodsoft](https://foodcoops.github.io/foodsoft-hosting/) | Manage a non-profit food cooperative | | [Package Draft](https://github.com/YunoHost-Apps/foodsoft_ynh) | +| [Forem](https://www.forem.com/) | Forem is open source software for building communities. | [Upstream](https://github.com/forem/selfhost) | | +| [Fossil](https://www.fossil-scm.org) | | | | +| [Fractale](https://fractale.co/) | Fractale is a platform for self-organization.| [Upstream](https://github.com/fractal6/fractal6.go) | | +| full-text-rss | | [Upstream](https://bitbucket.org/fivefilters/full-text-rss/src/master/) | | +| Framaestro | Online service aggregator | [Upstream](https://framagit.org/framasoft/framaestro) | [Package Draft](https://github.com/YunoHost-Apps/framaestro_ynh) | +| Framaestro_hub | Online service aggregator hub | [Upstream](https://github.com/mozilla/togetherjs.git) | [Package Draft](https://github.com/YunoHost-Apps/framaestro_hub_ynh) | +| [freeboard](https://freeboard.io/) | A real-time dashboard builder for IOT | | [Package Draft](https://github.com/YunoHost-Apps/freeboard_ynh) | +| [freepbx](https://freepbx.org) | VOIP | | [Package Draft](https://github.com/YunoHost-Apps/freepbx_ynh) | +| [Freescout](https://freescout.net/) | Helpdesk & Shared Mailbox | [Upstream](https://github.com/freescout-helpdesk/freescout) | | +| [ftssolr](https://wiki.dovecot.org/Plugins/FTS/Solr) | Full-text search via IMAP through a Solr indexing server | | [Package Draft](https://github.com/YunoHost-Apps/ftssolr_ynh) | +| [Gancio](https://gancio.org/) | | [Upstream](https://framagit.org/les/gancio) | | +| [Garage](https://garagehq.deuxfleurs.fr) | A self-hostable distributed storage service (S3 compatible) | [Upstream](https://git.deuxfleurs.fr/Deuxfleurs/garage) | | +| gateone | HTML5-powered terminal emulator and SSH client | | [Package Draft](https://github.com/Kloadut/gateone_ynh) | +| [Gatsby](https://www.gatsbyjs.com/) | Build blazing fast, modern apps and websites with React | [Upstream](https://github.com/gatsbyjs/gatsby) | | +| [Geneweb](https://geneweb.tuxfamily.org) | | [Upstream](https://github.com/geneweb/geneweb) | | +| gitolite | Git server | | [Package Draft](https://github.com/matlink/gitolite_ynh) | +| gitrepositories | | | [Package Draft](https://github.com/YunoHost-Apps/gitrepositories_ynh) | +| gitweb | Git forge (c.f. Gitolite) | | [Package Draft](https://github.com/matlink/gitweb_ynh) | +| gnusocial | Create a federated comunication node | | [Package Draft](https://github.com/YunoHost-Apps/gnusocial_ynh) | +| [Goaccess](https://goaccess.io) | Web log analyzer | [Upstream](https://github.com/allinurl/goaccess) | | +| [GoatCounter](https://www.goatcounter.com/) | privacy-friendly web analytics | [Upstream](https://github.com/arp242/goatcounter) | | +| gogs_webhost | Turn a Gogs repository to static web hosting | | [Package Draft](https://github.com/YunoHost-Apps/gogs_webhost_ynh) | +| Gollum | A simple Git-powered wiki | [Upstream](https://github.com/gollum/gollum) | [Package Draft](https://github.com/YunoHost-Apps/gollum_ynh) | +| Goploader | | [Upstream](https://github.com/Depado/goploader) | | +| [gocd](https://go.cd) | CI/CD server | [Upstream](https://github.com/gocd/gocd) | | +| Granary | | [Upstream](https://github.com/snarfed/granary) | | +| [Graphhopper](https://www.graphhopper.com/) | | [Upstream](https://github.com/graphhopper/graphhopper) | | +| [Greenlight](https://blabla.aquilenet.fr/b) | A really simple end-user interface for your BigBlueButton server | [Upstream](https://github.com/bigbluebutton/greenlight) | | +| [Grist](https://www.getgrist.com/) | The evolution of spreadsheets | [Upstream](https://github.com/gristlabs/grist-core/) | [Package Draft](https://github.com/ketsapiwiq/grist_ynh) | +| [Habitica](https://habitica.com/) | | [Upstream](https://github.com/HabitRPG/habitica) | | +| [Hashbase](https://github.com/beakerbrowser/hashbase/tree/master/docs) | A public peer service for Dat archives, provides a HTTP-accessible interface for creating an account and uploading Dats. | [Upstream](https://github.com/beakerbrowser/hashbase) | | +| [Headscale](https://github.com/juanfont/headscale) | An open source, self-hosted implementation of the Tailscale Mesh-VPN control server | [Upstream Daemon](https://github.com/juanfont/headscale) [Upstream UI](https://github.com/gurucomputing/headscale-ui) | | +| Helpy | | [Upstream](https://github.com/helpyio/helpy) | | +| [Hexo](https://hexo.io/) | | [Upstream](https://github.com/hexojs/hexo) | | +| [HistoPad](https://github.com/24eme/histopad) | Web application for logging pads (etherpad) and archiving them in a git repository. | [Upstream](https://github.com/24eme/histopad) | | +| Hometown | A Mastodon fork with local-only posting, support for more content types, and other features and tweaks. | [Upstream](https://github.com/hometown-fork/hometown) | | +| [htpc-manager](https://htpc.io) | Manage your HTPC from anywhere | | [Package Draft](https://github.com/scith/htpc-manager_ynh) | +| [hyperion](https://docs.hyperion-project.org/) | Ambient lightning software | [Upstream](https://github.com/hyperion-project/hyperion.ng) | | +| [Hypothes.is](https://hypothes.is) | Web Annotation server (and client) to crate and share highlights and notes | [Hypothes.is server](https://github.com/hypothesis/h) | | +| [Icecast 2](https://www.icecast.org) | | [Upstream](https://gitlab.xiph.org/xiph/icecast-server/) | | +| [ikiwiki](https://ikiwiki.info) | | | | +| [InfCloud](https://inf-it.com/open-source/clients/infcloud/) | A contacts, calendar and tasks web client for CalDAV and CardDAV | [Upstream](https://inf-it.com/open-source/download/InfCloud_0.13.1.zip) | | +| [Inginious](https://inginious.org) | Secure and automated exercises assessment platform using your own tests, also providing a pluggable interface with your existing LMS. | [Upstream](https://github.com/UCL-INGI/INGInious) || +| [Inventaire](https://inventaire.io) | a libre collaborative resource mapper powered by open-knowledge, starting with books! 📚 | [Upstream](https://github.com/inventaire/inventaire) | | +| [InvoicePlane](https://invoiceplane.com) | | [Upstream](https://github.com/InvoicePlane/InvoicePlane) | | +| [IPFS](https://ipfs.io) | | [Upstream](https://github.com/ipfs/ipfs) | [Package Draft](https://github.com/YunoHost-Apps/ipfs_ynh) | +| [Isso](https://posativ.org/isso) | Comment server | [Upstream](https://github.com/posativ/isso) | | +| jappix_mini | Jappix Mini XMPP chat website integration | | [Package Draft](https://github.com/YunoHost-Apps/jappix_mini_ynh) | +| [Joplin](https://joplin.cozic.net/) | | [Upstream](https://github.com/laurent22/joplin) | | +| Joplin-web | | [Upstream](https://github.com/foxmask/joplin-web) | | +| [JS Bin](https://jsbin.com/) | | [Upstream](https://github.com/jsbin/jsbin) | | +| [Karaoke-forever](https://www.karaoke-forever.com/) | Organize karaoke parties | [Upstream](https://github.com/bhj/karaoke-forever) | | +| Kenoma | Pleroma frontend | [Upstream](https://git.pleroma.social/lambadalambda/kenoma) | | +| Keyoxide | Keyoxide is a privacy-friendly tool to create and verify decentralized online identities. | [Upstream](https://codeberg.org/keyoxide) | | +| [Kill the newsletter](https://kill-the-newsletter.com/) | Convert email newsletters to RSS feeds | [Upstream](https://github.com/leafac/kill-the-newsletter.com) | | +| [Kitchenowl](https://kitchenowl.org/) | grocery list and recipe manager | [Upstream](https://github.com/TomBursch/kitchenowl) | | +| [Klaxon](https://newsklaxon.org) | Easily create alerts for changes on the web | [Upstream](https://github.com/themarshallproject/klaxon) | | +| [Known](https://withknown.com) | | [Upstream](https://github.com/idno/known) | | +| [Koel](https://koel.phanan.net) | | [Upstream](https://github.com/phanan/koel) | | +| [Koha](https://koha-community.org/) | The world's first free and open source library system | [Upstream](https://git.koha-community.org/Koha-community/Koha) | | +| Kontalk | | [Upstream](https://github.com/kontalk) | | +| [Koozip](https://koozic.net) | | [Upstream](https://github.com/DocMarty84/koozic) | | +| L'atelier | | [Upstream](https://github.com/jbl2024/latelier) | | +| [LBCAlerte](https://alerte.ilatumi.org/) | | | [Package Draft](https://github.com/YunoHost-Apps/LBCAlerte_ynh) | +| lektor | A static website generator | | [Package Draft](https://github.com/YunoHost-Apps/lektor_ynh) | +| [LessPass](https://www.lesspass.com/) | | [Upstream](https://github.com/lesspass/lesspass) | | +| [Lessy](https://lessy.io) | | [Upstream](https://github.com/lessy-community/lessy) | | +| [Librarian](https://lbry.bcow.xyz/) | An alternative frontend for LBRY/Odysee | [Upstream](https://codeberg.org/librarian/librarian) | | +| Lichen | Gemtext to HTML translator | [Upstream](https://git.sensorstation.co/lichen.git) | | +| [Lila](https://lichess.org/) | Online chess game server | [Upstream](https://github.com/ornicar/lila) | | +| [LiquidSoap](https://www.liquidsoap.info/) | Audio and video streaming language | [Upstream](https://github.com/savonet/liquidsoap) | | +| LocomotiveCMS | | [Upstream](https://github.com/locomotivecms/engine) | | +| [Logitech Media Server](https://en.wikipedia.org/wiki/Logitech_Media_Server) | (formerly SlimServer, SqueezeCenter and Squeezebox Server) is a streaming audio server | [Debian package](http://mysqueezebox.com/download) [Source](https://github.com/Logitech/slimserver) | [Package Draft](https://github.com/lunarok/squeezebox_ynh) | +| [Loomio](https://www.loomio.org) | | [Upstream](https://github.com/loomio/loomio/) | | +| [MaidSafe](https://maidsafe.net) | | [Upstream](https://github.com/maidsafe) | | +| [Mailpile](https://www.mailpile.is) | | [Upstream](https://github.com/mailpile/Mailpile) | | +| [Mailtrain](https://mailtrain.org/) | | [Upstream](https://github.com/Mailtrain-org/mailtrain) | | +| [Maloja](https://maloja.krateng.ch) | Self-hosted music scrobble database, alternative to Last.fm | [Upstream](https://github.com/krateng/maloja) | | +| [mautrix-discord](https://github.com/mautrix/discord) | Matrix bridge for discord | [Upstream](https://github.com/mautrix/discord) | [Package Draft](https://github.com/YunoHost-Apps/mautrix_whatsapp_ynh) | +| [Tileserver-GL](https://maps.earth/) | Tile server light SVG for map service | [Upstream](https://github.com/maptiler/tileserver-gl) | | +| [Mealie](https://hay-kot.github.io/mealie/) | Recipe manager and meal planner | [Upstream](https://github.com/hay-kot/mealie/) | | +| [Mediagoblin](https://mediagoblin.org/) | Video streaming platform | [Upstream](https://savannah.gnu.org/projects/mediagoblin) | [Package Draft](https://github.com/YunoHost-Apps/mediagoblin_ynh) | +| [medusa](https://pymedusa.com/) | Automatic TV shows downloader | | [Package Draft](https://github.com/YunoHost-Apps/medusa_ynh) | +| [Megaglest](https://megaglest.org/) | realtime stategy game | [Upstream](https://megaglest.org/linux-packages.html) | | +| microblog.pub | | [Upstream](https://github.com/tsileo/microblog.pub) | | +| [Meshery](https://meshery.io/) | Cloudnative solution to bind multiple Service-Meshes together, not only K8s | [Upstream](https://github.com/meshery/meshery) | | +| meteor-movielist | An open source web app for managing movie lists built with self-hosting in mind. Movie information is fetched from TMDb. | [Upstream](https://github.com/nunof07/meteor-movielist) | | +| [Mindustry](https://mindustrygame.github.io/) | A sandbox tower-defense game | [Upstream](https://github.com/Anuken/Mindustry) | | +| [Mirakel](https://mirakel.azapps.de/taskwarrior.html) | | [Upstream](https://github.com/GothenburgBitFactory/taskwarrior) | | +| modernpaste | A modern, feature-rich Pastebin alternative | [Upstream](https://github.com/LINKIWI/modern-paste) | [Package Draft](https://github.com/YunoHost-Apps/modernpaste_ynh) | +| [Modoboa](https://modoboa.org) | | [Upstream](https://github.com/modoboa/) | | +| [MongoPassion](https://mongopassion.24eme.fr/demo/) | Web-based project for management of MongoDB databases | [Upstream](https://github.com/24eme/MongoPassion) | | +| MotionEye | | [Upstream](https://github.com/ccrisan/motioneye) | | +| morss | Get full text RSS feeds | [Upstream](https://github.com/pictuga/morss) | | +| mumble_admin_plugin | Mumble-server web interface | | [Package Draft](https://github.com/matlink/mumble_admin_plugin_ynh) | +| munin | Resource monitoring tool | | [Package Draft](https://github.com/YunoHost-Apps/munin_ynh) | +| Museek+ | | [Upstream](https://github.com/eLvErDe/museek-plus) | | +| mycryptochat | Encrypted IM | | [Package Draft](https://github.com/mrtino/mycryptochat_ynh) | +| mx-puppet-discord | A bridge between Matrix and Discord | [Upstream](https://github.com/matrix-discord/mx-puppet-discord) | | +| [Nautilus](https://myactivity.stream/) | Turn your website into an ActivityPub profile | [Upstream](https://github.com/aaronpk/Nautilus) | | +| [Nebula](https://nebula.defined.net/docs/) | Scalable overlay networking tool with a focus on performance, simplicity and security. | [Upstream](https://github.com/slackhq/nebula) | | +| Netrunner | | [Upstream](https://github.com/mtgred/netrunner) | | +| [Netbird](https://netbird.io/) | Create an overlay peer-to-peer network connecting machines regardless of their location | [Upstream](https://github.com/netbirdio/netbird) | | +| [nostr](https://nostr.com/) | The simplest open protocol that is able to create a censorship-resistant global "social" network once for all. | [Upstream](https://github.com/nostr-protocol/nostr) || +| [Netlify CMS](https://netlifycms.org/) | A CMS for any static site generator that connects to a Gitlab/Github repo (requires netlify/gotrue) | [Upstream](https://github.com/netlify/netlify-cms) | | +| [NewsBlur](https://www.newsblur.com) | This is the most complete RSS reader that exists to date | [Upstream](https://github.com/samuelclay/NewsBlur) | | +| nexusoss | Sonatype Nexus Repository manager OSS | | [Package Draft](https://github.com/YunoHost-Apps/nexusoss_ynh) | +| [ntopng](https://www.ntop.org/) | | | [Package Draft](https://github.com/YunoHost-Apps/ntopng_ynh) | +| OhMyForm | | [Upstream](https://github.com/ohmyform) | | +| Ombi | | [Upstream](https://github.com/tidusjar/Ombi) | | +| [Omnivore](https://omnivore.app) | Omnivore is a complete, open source read-it-later solution for people who like reading. | [Upstream](https://github.com/omnivore-app/omnivore) | | +| [OpenBazaar](https://openbazaar.org) | | [Upstream](https://github.com/openbazaar) | | +| [OpenCart](https://www.opencart.com) | | [Upstream](https://github.com/opencart/opencart) | | +| [OpenEats](https://open-eats.github.io/) | | [Upstream](https://github.com/open-eats/OpenEats) | | +| [openHAB](https://www.openhab.org/) | Smart home platform | [Upstream](https://github.com/openhab) | | +| openid-simplesamlphp | OpenID provider based on SimpleSAMLphp | | [Package Draft](https://github.com/julienmalik/openid-simplesamlphp_ynh) | +| OpenSourceBilling | | [Upstream](https://github.com/vteams/open-source-billing) | | +| [osmw](https://www.openstreetmap.org/) | Cartography software | | [Package Draft](https://github.com/YunoHost-Apps/osmw_ynh) | +| OSRM | | [Upstream](https://github.com/Project-OSRM/osrm-backend) | | +| [OX Open-Xchange](https://www.open-xchange.com) | Linux groupware solution | [Upstream](https://github.com/open-xchange/) | | +| [pd3f](https://pd3f.com/) | PDF text extraction (OCR) pipeline using machine-learning | [Upstream](https://github.com/pd3f/pd3f) | | +| [Padloc](https://padloc.app/) | Simple, secure password and data management for individuals and teams | [Upstream](https://github.com/padloc/padloc) | | +| [Paperwork](https://paperwork.cloud) | | [Upstream](https://github.com/paperwork/paperwork) | | +| [Passbolt](https://www.passbolt.com) | Password manager | [Upstream](https://github.com/passbolt) | | +| Pelias | | [Upstream](https://github.com/pelias/pelias) | | +| [Penpot](https://penpot.app/) | Design Freedom for Teams | [Upstream](https://github.com/penpot) | | +| personal-management-system | Your web application for managing personal data. | [Upstream](https://github.com/Volmarg/personal-management-system) | | +| [PHPList](https://www.phplist.com) | | [Upstream](https://github.com/phpList) | | +| [Phraseanet](https://docs.phraseanet.com/3.8/fr/index.html#) | | [Upstream](https://github.com/alchemy-fr/Phraseanet-Docs) | | +| [pia](https://github.com/LINCnil/pia) | A tool to help carrying out Privacy Impact Assessments | | [Package Draft](https://github.com/YunoHost-Apps/pia_ynh) | +| [PicApport](https://www.picapport.de/) | Self-hosted private photo server | | | +| [Picsur](https://picsur.org/) | Simple open-source image host | [Upstream](https://github.com/rubikscraft/Picsur) | | +| [Pinry](https://docs.getpinry.com/) | Open source tiling image board | [Upstream](https://github.com/pinry/pinry/) | | +| [Piped](https://github.com/TeamPiped/Piped/wiki/Instances) | An open-source alternative frontend for YouTube which is efficient by design. | [Upstream](https://github.com/TeamPiped/Piped) | | +| Pol | RSS generator website | [Upstream](https://github.com/taroved/pol) | | +| [Planka](https://planka.app/) | Free open source kanban board for workgroups. | [Upstream](https://github.com/plankanban/planka) | | +| [Plausible Analytics](https://plausible.io) | Simple, Open Source, and privacy-friendly web analytics alternative to Google Analytics. | [Upstream](https://github.com/plausible/analytics) | | +| Playmaker | | [Upstream](https://github.com/NoMore201/playmaker) | | +| [plonecms](plone.org) | Create a modern website with a CMS written in Python | | [Package Draft](https://github.com/YunoHost-Apps/plonecms_ynh) | +| [Presentator](https://presentator.io/) | A design collaboration platform | | | +| [Privoxy](https://www.privoxy.org) | | | | +| [ProcessMaker](https://www.processmaker.com) | | | | +| proftpd | | | [Package Draft](https://github.com/abeudin/proftpd_ynh) | +| [ProtonMail Bridge](https://proton.me/mail/bridge) | Use Proton Mail with your email client | [Upstream](https://github.com/ProtonMail/proton-bridge) | | +| ProtonMail’s WebClient | | [Upstream](https://github.com/ProtonMail/WebClient) | | +| [Psono](https://psono.com/) | Password Manager for Teams | [Upstream](https://gitlab.com/psono/psono-server) | | +| [pterodactyl](https://pterodactyl.io/) | | | [Package Draft](https://github.com/YunoHost-Apps/pterodactyl_ynh) | +| Pump.io | File sharing and synchronization | [Upstream](https://github.com/pump-io/pump.io) | | +| [qBit MatUI](https://qbit-material-webui-demo.herokuapp.com/) | A WebUI for qBittorrent | [Upstream](https://github.com/bill-ahmed/qbit-matUI) | | +| [QGis server](https://qgis.org/fr/site/) | QGis server allows to publish QGis desktop projets and maps as OGC-compliant services, that can be used in openlayers, leaflet etc. | [Upstream](https://github.com/qgis/QGIS) | | +| [QWC2](https://github.com/qgis/qwc2) | QWC (Qgis Web Client) is a react and openlayers-based web UI to publish and display qgis desktop projects. | [Upstream](https://github.com/qgis/qwc2) | | +| [racktables](https://racktables.org) | | [Upstream](https://github.com/RackTables/racktables) | | +| Race for the galaxy | | [Upstream](https://github.com/bnordli/rftg) | | +| [Raindrop](https://raindrop.io) | All-in-one bookmark manager | [Upstream](https://github.com/raindropio/app) | | +| [Raspap](https://raspap.com/) | | [Upstream](https://github.com/RaspAP/raspap-webgui) | | +| Redash | Connect to any data source, easily visualize, dashboard and share your data. | [Upstream](https://github.com/getredash/redash) | | +| remoteStorage | A remoteStorage server implementation written in PHP | [Upstream](https://github.com/fkooman/php-remote-storage) | [Package Draft](https://github.com/YunoHost-Apps/RemoteStorage_ynh) | +| [Renovate](https://www.mend.io/renovate/) | Bot for automating dependency updates on Gitlab / Gitea / Forgejo | [Upstream](https://github.com/renovatebot/renovate) | | +| [Request Tracker](https://bestpractical.com) | | [Upstream](https://github.com/bestpractical/rt) | | +| [Restya](https://restya.com) | | [Upstream](https://github.com/RestyaPlatform/board/) | | +| [Retroshare](https://retroshare.cc/) | | [Upstream](https://github.com/RetroShare/RetroShare) | | +| [Revolt](https://revolt.chat/) | Chat software similar to Discord | [Upstream](https://github.com/revoltchat) | | +| [Rimgo](https://i.bcow.xyz/) | An alternative frontend for Imgur | [Upstream](https://codeberg.org/video-prize-ranch/rimgo) | | +| [roadiz](https://www.roadiz.io) | Create a modern website | | [Package Draft](https://github.com/YunoHost-Apps/roadiz_ynh) | +| rs-short | An URL shortener | [Upstream](https://git.42l.fr/42l/rs-short) | | +| RSS-proxy | RSS-proxy allows you to do create an RSS or ATOM feed of almost any website, just by analyzing just the static HTML structure. | [Upstream](https://github.com/damoeb/rss-proxy) | | +| RSSHub | open source, easy to use, and extensible RSS feed generator. It's capable of generating RSS feeds from pretty much everything | [Upstream](https://github.com/DIYgod/RSSHub) | | +| [RustDesk](https://rustdesk.com/server 'RustDesk Server') | [TeamViewer](https://teamviewer.com) alternative | [Upstream](https://github.com/rustdesk/rustdesk-server 'RustDesk Server on GitHub') and [easy install script](https://github.com/dinger1986/rustdeskinstall) | | +| rutorrent | Torrent client | | [Package Draft](https://github.com/CotzaDev/rutorrent_ynh) | +| rwtxt | Minimalist CMS | [Upstream](https://github.com/schollz/rwtxt) | | +| [SABnzbd](https://sabnzbd.org/) | The automated Usenet download tool | [Upstream](https://github.com/sabnzbd/sabnzbd) | | +| [sat](https://salut-a-toi.org) | An all-in-one tool to manage all your communications | | [Package Draft](https://github.com/YunoHost-Apps/sat_ynh) | +| [satdress] | Federated Lightning addresses server | | [Upstream](https://github.com/nbd-wtf/satdress) | +| [ScenariChain-server](https://download.scenari.software/SCENARIchain-server/) | | | | +| [Schleuder](https://schleuder.org/schleuder/docs/concept.html) | A GPG-enabled mailing list manager | | | +| scm-manager | Share and manage Git, Mercurial and Subversion repositories | | [Package Draft](https://github.com/drfred1981/scm-manager_ynh) | +| [Screego](https://screego.net/) | Screen sharing webrtc | [Upstream](https://github.com/screego/server) | | +| [Scribe](https://scribe.rip/) | An alternative frontend to Medium | [Upstream](https://git.sr.ht/~edwardloveall/scribe) | | +| [Scuttlebutt Pub](https://www.scuttlebutt.nz/contributing) | | | | +| [seenthis](https://www.seenthis.net/) | Short-blogging destiné à la veille d’actualité | | [Package Draft](https://github.com/magikcypress/seenthis_ynh) | +| [Semantic MediaWiki](https://www.semantic-mediawiki.org/wiki/Semantic_MediaWiki) | lets you store and query data with­in the [MediaWiki](https://en.wikipedia.org/wiki/MediaWiki)'s pages | [Upstream](https://github.com/SemanticMediaWiki/SemanticMediaWiki) | | +| [shadowsocks](https://shadowsocks.org) | A SOCKS5 proxy to protect your Internet traffic | | [Package Draft](https://github.com/YunoHost-Apps/shadowsocks_ynh) | +| shinken | A flexible and scalable monitoring framework | [Upstream](https://github.com/naparuba/shinken) | [Package Draft](https://github.com/YunoHost-apps/shinken_ynh) | +| sickbeard | Automatic TV show downloader | | [Package Draft](https://github.com/YunoHost-Apps/sickbeard_ynh) | +| Semaphore | A fediverse (Mastodon-API compatible) accessible, simple and fast web client client | [Upstream](https://github.com/NickColley/semaphore) | | +| [sickrage](https://sickchill.github.io/) | Automatic TV shows downloader | | [Package Draft](https://github.com/YunoHost-Apps/sickrage_ynh) | +| [Signal Proxy](https://signal.org/blog/help-iran-reconnect/) | Fight censorship and bypass traffic securely to the Signal service | [Upstream](https://github.com/signalapp/Signal-TLS-Proxy) | | +| simpad | Simple markdown editor | [Upstream](https://github.com/beli3ver/SiMPad) | [Package Draft](https://github.com/YunoHost-Apps/simpad_ynh) | +| [SimpleLogin](https://simplelogin.io) | Privacy-first e-mail forwarding and identity provider service | [Upstream](https://github.com/simple-login/app) | | +| [SimplyTranslate-Web](https://simplytranslate.org/) | This is a simple web interface for SimplyTranslate | [Upstream](https://codeberg.org/SimpleWeb/SimplyTranslate-Web) | | +| [smokeping](https://oss.oetiker.ch/smokeping/) | | [Upstream](https://github.com/oetiker/SmokePing) | | +| [SocialHome](https://socialhome.network) | A federated personal profile | [Upstream](https://github.com/jaywink/socialhome) | | +| [sonerezh](https://www.sonerezh.bzh) | Stream music from everywhere | | [Package Draft](https://github.com/YunoHost-Apps/sonerezh_ynh) | +| [SparkleShare (Dazzle)](https://www.sparkleshare.org/) | SparkleShare host | [Upstream](https://github.com/hbons/Dazzle) | | +| sphinx | | [Upstream](https://github.com/sphinx-doc/sphinx) | [Package Draft](https://github.com/YunoHost-Apps/sphinx_ynh) | +| Spreed standalone signaling server (Nextcloud Talk HPB) | | [Upstream](https://github.com/strukturag/nextcloud-spreed-signaling) | | +| [Stackedit](https://stackedit.io) | | [Upstream](https://github.com/benweet/stackedit) | | +| [Storj](https://www.storj.io/node) | | [Upstream](https://github.com/storj/storj) | | +| [Strapi](https://strapi.io) | Open source Node.js Headless CMS to easily build customisable APIs | [Upstream](https://github.com/strapi/strapi) | | +| Streisand | | [Upstream](https://github.com/jlund/streisand) | | +| [Stremio](https://strem.io) Web | a modern media center. | [Upstream frontend](https://github.com/Stremio/stremio-web) [Upstream backend](https://github.com/Stremio/stremio-core-web) | | +| studs | A survey tool, the ancestor of OpenSondage | | [Package Draft](https://github.com/YunoHost-Apps/studs_ynh) | +| subsonic | Subsonic is an open source, web-based media server | | [Package Draft](https://github.com/drfred1981/subsonic_ynh) | +| Subspace | A simple WireGuard VPN server GUI | [Upstream](https://github.com/subspacecloud/subspace) | | +| SuiteCRM | An open-source CRM | [Upstream](https://github.com/salesagility/SuiteCRM) | | +| Superalgos | Free, open-source crypto trading bot, automated bitcoin / cryptocurrency trading software, algorithmic trading bots. | [Upstream](https://github.com/Superalgos/Superalgos) | | +| Sydent | Identity-serverfor matrix | [Upstream](https://github.com/matrix-org/sydent) | | +| [sympa](https://www.sympa.org/) | Mailing List manager | | [Package Draft](https://github.com/YunoHost-Apps/sympa_ynh) | +| [Syspass](https://www.syspass.org/) | | [Upstream](https://github.com/nuxsmin/sysPass) | | +| [Tahoe-LAFS](https://tahoe-lafs.org/) | Decentralized cloud storage system | [Upstream](https://github.com/tahoe-lafs/tahoe-lafs) | | +| [Taiga](https://taiga.io) | | [Upstream](https://github.com/taigaio/) | | +| [Tailscale](https://tailscale.com/) | [Wireguard](https://www.wireguard.com/)-based Mesh-VPN | [Upstream](https://github.com/tailscale/tailscale) | | +| [Takahē](https://jointakahe.org) | An efficient ActivityPub Server, for small installs with multiple domains | [Upstream](https://github.com/jointakahe/takahe) | | +| [Taskwarrior](https://taskwarrior.org) | | [Upstream](https://github.com/GothenburgBitFactory/taskwarrior) | | +| [Technitium DNS](https://technitium.com/dns/) | | [Upstream](https://github.com/TechnitiumSoftware/DnsServer) | | +| [Teddy.io](https://teedy.io/) | Document manager | [Upstream](https://github.com/sismics/docs) | | +| telegram_chatbot | Telegram chatbot - mini chatbot for Telegram | | [Package Draft](https://github.com/YunoHost-Apps/telegram_chatbot_ynh) | +| [Teleport](https://goteleport.com/) | Multi-protocol access proxy which understands SSH, HTTPS, RDP, Kubernetes API, MySQL, MongoDB and PostgreSQL wire protocols. | [Upstream](https://github.com/gravitational/teleport) | | +| TellForm | | [Upstream](https://github.com/tellform/tellform) | | +| [tes3mp](https://tes3mp.com/) | | | [Package Draft](https://github.com/YunoHost-Apps/tes3mp_ynh) | +| [Theia-IDE](https://theia-ide.org/) | VS Code-like cloud IDE |[Upstream](https://hub.docker.com/r/theiaide/theia-full)| | +| Thredded | | [Upstream](https://github.com/thredded/thredded) | | +| Tinylist | | [Upstream](https://github.com/baggachipz/tinylist) | | +| [TMate](https://tmate.io/) | | [Upstream](https://github.com/tmate-io/tmate) | | +| torrelay | | | [Package Draft](https://github.com/matlink/torrelay_ynh) | +| Traccar | Modern GPS Tracking Platform | [Upstream](https://github.com/traccar/traccar) | | +| transpay | Interface to receive and manage donations with Stripe | | [Package Draft](https://github.com/YunoHost-Apps/transpay_ynh) | +| transwhat | A gateway to WhatsApp from Jabber | | [Package Draft](https://github.com/Josue-T/transwhat_ynh) | +| [Tryton](https://www.tryton.org/) | A solid ERP system | | | +| [trivy](https://www.aquasec.com/products/trivy/) | OSS Vulnerability and Misconfiguration Scanning. |[Upstream](https://github.com/aquasecurity/trivy) | | +| tubesync | Syncs YouTube channels and playlists to a locally hosted media server | [Upstream](https://github.com/meeb/tubesync) | | +| tutao | End-to-end encrypted e-mail client | [Upstream](https://github.com/tutao/tutanota/) | [Package Draft](https://github.com/YunoHost-Apps/tutao_ynh) | +| [Twake](https://twake.app/fr)| All of the organizational tools you need to make your projects succeed brought together on one platform.| | | +| Twister | | [Upstream](https://github.com/miguelfreitas/twister-core/) | | +| [TwitRSS.me](https://twitrss.me/) | Create RSS feeds from Twitter | [Upstream](https://github.com/ciderpunx/twitrssme) | | +| [ultrasonics](https://github.com/XDGFX/ultrasonics) | Sync music playlists between all your music services: Spotify, Deezer, Apple Music, Plex, etc. | [Upstream](https://github.com/XDGFX/ultrasonics) | | +| [umap](https://umap.openstreetmap.fr/) | Cartography software | | [Package Draft](https://github.com/YunoHost-Apps/umap_ynh) | +| [unbound](https://nlnetlabs.nl/projects/unbound/about/) | | | [Package Draft](https://github.com/YunoHost-Apps/unbound_ynh) | +| [upmpdcli](https://www.lesbonscomptes.com/upmpdcli/) | UPNP-server and -renderer. Serves local files, internet-radio (radio-browser.info), BBC-Radio, Deezer, HighresAudio, Qobuz, Spotify and Tidal | [Upstream](https://framagit.org/medoc92/upmpdcli) | | +| [Uwazi](https://www.uwazi.io/) | | [Upstream](https://github.com/huridocs/uwazi) | | +| [Volumio](https://volumio.org) | | [Upstream](https://github.com/volumio) | | +| [vpnserver](https://openvpn.net) | Create/provide VPNs from your server | | [Package Draft](https://github.com/YunoHost-Apps/vpnserver_ynh) | +| [Webhook.site](https://docs.webhook.site/) | | [Upstream](https://github.com/fredsted/webhook.site) | | +| [WebODF](https://webodf.org) | | [Upstream](https://github.com/webodf/WebODF) | | +| Webterminal | A web-based Jump Host / Bastion, supports VNC, SSH, RDP, Telnet, SFTP... | [Upstream](https://github.com/jimmy201602/webterminal/) | | +| [WebThings Gateway](https://iot.mozilla.org/gateway/) | | [Upstream](https://github.com/mozilla-iot/) | | +| [wg-access-server](https://github.com/freifunkMUC/wg-access-server) | VPN Server OIDC ipv4 ipv6 | [Upstream](https://github.com/freifunkMUC/wg-access-server) | | +| Whoogle | A metasearch engine | [Upstream](https://github.com/benbusby/whoogle-search) | | +| [Wikiless](https://wikiless.org/) | A free open source alternative Wikipedia front-end focused on privacy. | [Upstream](https://codeberg.org/orenom/wikiless) | | +| [WikiSuite](https://wikisuite.org/Software) | The most comprehensive and integrated Open Source enterprise solution. | [Upstream](https://gitlab.com/wikisuite) | | +| [Winter CMS](https://wintercms.com/) | Powerful Laravel based CMS | | | +| [wildfly](https://wildfly.org) | | | [Package Draft](https://github.com/YunoHost-Apps/wildfly_ynh) | +| Wisemapping | An online mind mapping editor | [Upstream](https://bitbucket.org/wisemapping/wisemapping-open-source) | [Package Draft](https://github.com/YunoHost-Apps/wisemapping_ynh) | +| WildDuck | Opinionated email server | [Upstream](https://github.com/nodemailer/wildduck) | | +| WorkAdventure | A web-based collaborative workspace for small to medium teams | [Upstream](https://github.com/thecodingmachine/workadventure) | | +| [xBrowserSync](https://www.xbrowsersync.org/) | A self-hosted bookmark sync tool, with browser plugins and mobile clients available | [Upstream](https://github.com/xbrowsersync/api) | | +| Xibo | A FLOSS digital signage solution | [Upstream](https://github.com/xibosignage) | | +| [Xonotic](https://xonotic.org) | | [Upstream](https://gitlab.com/xonotic) | | +| [Yggdrasil](https://yggdrasil-network.github.io/) | | [Upstream](https://github.com/yggdrasil-network/yggdrasil-go) | | +| your_spotify | Self hosted Spotify tracking dashboard | [Upstream](https://github.com/Yooooomi/your_spotify) | | +| youtube-dl-webui | Web interface for youtube-dl | | [Package Draft](https://github.com/YunoHost-Apps/youtube-dl-webui_ynh) | +| yunofav | A page of favorite links | | [Package Draft](https://github.com/YunoHost-Apps/yunofav_ynh) | +| [yunohost](https://yunohost.org) | YunoHost in YunoHost, crazy :D ! | | [Package Draft](https://github.com/aymhce/yunohost_ynh) | +| Zammad | | [Upstream](https://github.com/zammad/zammad) | | +| [zigbee2mqtt.io](https://www.zigbee2mqtt.io/) | [Zigbee](https://en.wikipedia.org/wiki/Zigbee)-to-[MQTT](https://en.wikipedia.org/wiki/MQTT) software-bridge supporting [more than 1000 Zigbee devices](https://www.zigbee2mqtt.io/information/supported_devices.html) | [Upstream](https://github.com/koenkk/zigbee2mqtt) | | +| [Zola](https://www.getzola.org/) | Static site generator | | | +| zomburl | An URL shortening service | | [Package Draft](https://github.com/courgette/zomburl_ynh) | +| Zoneminder | | [Upstream](https://github.com/ZoneMinder/zoneminder) | | +| [Zulip](https://zulipchat.com/) | | [Upstream](https://github.com/zulip/zulip) | | +| Zusam | A truly private space for you and your friends | [Upstream](https://github.com/zusam/zusam) | [Package Draft](https://github.com/zusam/zusam_ynh) | + + +### Other references listing self-hosted applications + +- [List of awesome selfhosted apps](https://github.com/Kickball/awesome-selfhosted) +- [List of awesome sysadmin apps](https://github.com/kahun/awesome-sysadmin) +- [List of awesome Node.js projects](https://github.com/sqreen/awesome-nodejs-projects) +- [List of SIP softwares/applications](https://en.wikipedia.org/wiki/List_of_SIP_software#Free_and_open-source_license) +- [Awesomeopensource.com](https://awesomeopensource.com) : topic-based list of open source projects sorted by github-stars diff --git a/pages/05.community/05.forum/forum.fr.md b/pages/05.community/05.forum/forum.fr.md new file mode 100644 index 00000000..8bd374e9 --- /dev/null +++ b/pages/05.community/05.forum/forum.fr.md @@ -0,0 +1,5 @@ +--- +title: Forum +template: docs +redirect: 'https://forum.yunohost.org/tag/fr' +--- diff --git a/pages/05.community/05.forum/forum.md b/pages/05.community/05.forum/forum.md new file mode 100644 index 00000000..6a686595 --- /dev/null +++ b/pages/05.community/05.forum/forum.md @@ -0,0 +1,5 @@ +--- +title: Forum +template: docs +redirect: 'https://forum.yunohost.org/tag/en' +--- diff --git a/pages/05.community/10.chat_rooms/chat_rooms.es.md b/pages/05.community/10.chat_rooms/chat_rooms.es.md new file mode 100644 index 00000000..06331a9a --- /dev/null +++ b/pages/05.community/10.chat_rooms/chat_rooms.es.md @@ -0,0 +1,46 @@ +--- +title: Salas de chat +template: docs +taxonomy: + category: docs +routes: + default: '/chat_rooms' +--- + +El proyecto YunoHost utiliza salas de chat como medio de communicación. + +Puede unirse a una sala de chat utilizando : +- un [cliente IRC](https://es.wikipedia.org/wiki/Anexo:Clientes_IRC) por ejemplo [KiwiIRC](https://web.libera.chat/#yunohost) +- un [cliente XMPP](https://es.wikipedia.org/wiki/Anexo:Comparaci%C3%B3n_de_clientes_de_mensajer%C3%ADa_instant%C3%A1nea) +- un [cliente Matrix](https://matrix.org/docs/guides/faq.html#what-clients-are-available%3F) + + +#### Sala de chat de ayuda y soporte + +Existen salas publicas de chat de [soporte](/help) y ayuda para YunoHost: +- IRC: **#yunohost** on libera.chat ; +- Matrix: **[#yunohost:matrix.org](https://matrix.to/#/#yunohost:matrix.org)** ; +- XMPP: **[support@conference.yunohost.org](xmpp:support@conference.yunohost.org?join)** + +#### sala de chat para desarrolladores + +Salas de chat para el desarollo de YunoHost: +- IRC: **#yunohost-dev** on libera.chat ; +- Matrix: **#[yunohost-dev:matrix.org](https://matrix.to/#/#yunohost-dev:libera.chat)** ; +- XMPP: **[dev@conference.yunohost.org](xmpp:dev@conference.yunohost.org?join)** + +Actualmente, la sala principal de chat para contribuciones en YunoHost +Para mas ayuda, vea la sala de chat **#yunohost** encima. + +#### Sala de chat para las integración de aplicaciones +Estos permite la ayuda mutua para los integradores de aplicaciones y también para conversar de evoluciones et de herramientas de integración continua. +- IRC: **#yunohost-apps** en libera.chat +- Matrix: **[#yunohost-apps:matrix.org](https://matrix.to/#/#yunohost-apps:matrix.org)** +- XMPP: **[apps@conference.yunohost.org](xmpp:apps@conference.yunohost.org?join)** + +#### Sala de chat de Documentación +Lugar donde la comunidad conversa sincroniza y mantiene actualisado la documentación en los aspectos varios como (backend, frontend, apps, proyecto, comunidad...) +Puede tambien compartir sus materiales sobre YunoHost (videos, presentaciones, etc.). +- IRC: **#yunohost-doc** on libera.chat +- Matrix: **[#yunohost-doc:matrix.org](https://matrix.to/#/#yunohost-doc:matrix.org)** +- XMPP: **[doc@conference.yunohost.org](xmpp:doc@conference.yunohost.org?join)** diff --git a/pages/05.community/10.chat_rooms/chat_rooms.fr.md b/pages/05.community/10.chat_rooms/chat_rooms.fr.md new file mode 100644 index 00000000..f91c5e50 --- /dev/null +++ b/pages/05.community/10.chat_rooms/chat_rooms.fr.md @@ -0,0 +1,45 @@ +--- +title: Salons de discussions +template: docs +taxonomy: + category: docs +routes: + default: '/chat_rooms' +--- + +Parmi d’autres outils, le projet YunoHost se sert de salons de discussions pour communiquer. + +Vous pouvez rejoindre ces salons avec : +- un [Client IRC](https://fr.wikipedia.org/wiki/Liste_de_clients_IRC) par exemple [KiwiIRC](https://web.libera.chat/#yunohost) +- un [Client XMPP](https://fr.wikipedia.org/wiki/Clients_XMPP) +- un [Client Matrix](https://linuxfr.org/news/matrix-pour-decentraliser-skype-whatsapp-signal-slack-et-discord) + + +#### Salon d'entraide et de support +Le salon d’[entraide](/help) est là pour permettre aux utilisateurs de YunoHost de s'aider mutuellement. +- IRC : **#yunohost** sur libera.chat (voir KiwiIRC ci-dessus) +- Matrix : **[#yunohost:matrix.org](https://matrix.to/#/#yunohost:matrix.org)** +- XMPP : **[support@conference.yunohost.org](xmpp:support@conference.yunohost.org?join)** + +#### Développement +Salon de développement du cœur de YunoHost : +- IRC : **#yunohost-dev** sur libera.chat +- Matrix : **[#yunohost-dev:matrix.org](https://matrix.to/#/#yunohost-dev:matrix.org)** +- XMPP : **[dev@conference.yunohost.org](xmpp:dev@conference.yunohost.org?join)** + +C'est le salon principal pour les contributions autour du projet. +Pour chercher de l’aide, merci d'aller sur le salon d’entraide ci-dessus. + +#### Applications +Salon de développement du packaging d’application. Il permet aux packageurs de s’entraider. +Il sert également à discuter de l’évolution du packaging, des outils d’intégration continue sur les applications. +- IRC : **#yunohost-apps** sur libera.chat +- Matrix : **[#yunohost-apps:matrix.org](https://matrix.to/#/#yunohost-apps:matrix.org)** +- XMPP : **[apps@conference.yunohost.org](xmpp:apps@conference.yunohost.org?join)** + +#### Documentation +Le salon de documentation du projet YunoHost. Il permet aux contributeurs d'échanger, pour synchroniser et maintenir une documentation à jour sur les différents aspects du projet : backend, frontend, apps, projet, communauté... +Vous pouvez aussi y partager vos communications au public à propos de YunoHost (présentations, vidéos...) pour permettre leur référencement dans la documentation. +- IRC : **#yunohost-doc** sur libera.chat +- Matrix : **[#yunohost-doc:matrix.org](https://matrix.to/#/#yunohost-doc:matrix.org)** +- XMPP : **[doc@conference.yunohost.org](xmpp:doc@conference.yunohost.org?join)** diff --git a/pages/05.community/10.chat_rooms/chat_rooms.md b/pages/05.community/10.chat_rooms/chat_rooms.md new file mode 100644 index 00000000..8ba85ccd --- /dev/null +++ b/pages/05.community/10.chat_rooms/chat_rooms.md @@ -0,0 +1,49 @@ +--- +title: Chat rooms +template: docs +taxonomy: + category: docs +routes: + default: '/chat_rooms' +--- + +Amoung other communication tools, YunoHost project use chat rooms to communicate. + +You could join those chat rooms using: +- an [IRC Client](https://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients) for example [KiwiIRC](https://web.libera.chat/#yunohost) +- an [XMPP client](https://en.wikipedia.org/wiki/Comparison_of_instant_messaging_clients) +- a [Matrix client](https://matrix.org/docs/guides/faq.html#what-clients-are-available%3F) + + +#### Help and support chat room + +There is a [support](/help) chat room for YunoHost users mutual support and help. + +- IRC: **#yunohost** on libera.chat +- Matrix: **[#yunohost:matrix.org](https://matrix.to/#/#yunohost:matrix.org)** +- XMPP: **[support@conference.yunohost.org](xmpp:support@conference.yunohost.org?join)** + +#### Development chat room + +YunoHost core development chat room: +- IRC: **#yunohost-dev** on libera.chat +- Matrix: **[#yunohost-dev:matrix.org](https://matrix.to/#/#yunohost-dev:matrix.org)** +- XMPP: **[dev@conference.yunohost.org](xmpp:dev@conference.yunohost.org?join)** + +Currently, the main chat room for contributions on YunoHost project. +For help, please see **#yunohost** chat room above. + +#### Applications chat room +Application packaging development chat room. It allow packagers to help each other. +It also allow to discuss packaging evolution, continuous integration tools: +- IRC: **#yunohost-apps** on libera.chat +- Matrix: **[#yunohost-apps:matrix.org](https://matrix.to/#/#yunohost-apps:matrix.org)** +- XMPP: **[apps@conference.yunohost.org](xmpp:apps@conference.yunohost.org?join)** + +#### Documentation chat room +YunoHost project documentation chat room. It allow people to discuss, synchronize and maintain +an up-to-date documentation on the differents aspects of the project (backend, frontend, apps, project, community...). +You may also share here your public communications about YunoHost (videos, presentations, etc.), to allow proper referencing. +- IRC: **#yunohost-doc** on libera.chat +- Matrix: **[#yunohost-doc:matrix.org](https://matrix.to/#/#yunohost-doc:matrix.org)** +- XMPP: **[doc@conference.yunohost.org](xmpp:doc@conference.yunohost.org?join)** diff --git a/pages/05.community/15.help/help.ar.md b/pages/05.community/15.help/help.ar.md new file mode 100644 index 00000000..44ed6b50 --- /dev/null +++ b/pages/05.community/15.help/help.ar.md @@ -0,0 +1,70 @@ +--- +title: هل تبحث عن مساعدة +template: docs +taxonomy: + category: docs +routes: + default: '/help' +--- + +

إتصل بغرفة المساعدة

+ +!!! **ProTips™** +!!! - Non c'è bisogno di chiedere se puoi chiedere qualcosa, chiedi e basta ! +!!! - *Sii paziente*, potrebbero servire alcuni minuti prima che qualcuno veda i tuoi messaggi. +!!! - لا تطرح سؤالا لمُجرّد الطرح، بل إطرح سؤالك ! +!!! - تحلّى بالصبر، في بعض الأحيان يمكن أن تمر بضع دقائق قبل أن يرى أحد المستخدمين سؤالك. + +
+ +الإسم المستعار : + + + +
+
+ملاحظة : يمكن الإتصال كذلك بغرفة المحادثة باستخدام تطبيق XMPP الخاص بك على العنوان التالي
+support@conference.yunohost.org
+kiwiirc باستخدام libera.chat على #yunohost IRC أو
+Riot باستخدام Matrix أو
+
+
+ +

... أو إطرح سؤالك في المنتدى !

+ +
+ +
+ +

هل إكتشفت علة أو خللًا ؟

+ +
+
+يرجى الإبلاغ عن المشاكل على أداة متعقّب الأخطاء الخاصة بالمشروع أو إتصل بالمطوّرين

+ + +
+
+
+
+ملاحظة : يمكن الإتصال كذلك بغرفة التطوير باستخدام تطبيق XMPP الخاص بك على العناوين التالية
+dev@conference.yunohost.org and apps@conference.yunohost.org
+
+ + diff --git a/pages/05.community/15.help/help.fr.md b/pages/05.community/15.help/help.fr.md new file mode 100644 index 00000000..7cbbfaa5 --- /dev/null +++ b/pages/05.community/15.help/help.fr.md @@ -0,0 +1,57 @@ +--- +title: Besoin d'aide ? +template: docs +taxonomy: + category: docs +routes: + default: '/help' +--- + +## Comment demander de l'aide + +[columns count=2 width=200px] +!!!! - **Soyez courtois**: l'aide dans le salon de discussion ou le forum est prodiguée par nos utilisateurs ou contributeurs, tous bénévoles. +!!!! - **Exposez le contexte** de votre demande de manière complète mais concise. +!!!! - Il est impératif de **partager les journaux d'erreur (*log*) avec YunoPaste** (boutons verts de votre webadmin, puis partagez l'adresse de la page générée). +!!!! - **Soyez patient**, vos messages ne seront peut-être pas vus immédiatement. + +!! - Ne demandez pas d'aide sur votre tentative de solution, présentez avant tout votre problème initial (cf. [Problème XY](https://xyproblem.info/) (en anglais)). +!! - Evitez les formulations du type "le serveur ne veut pas", "l'app ne se charge pas", ou autres descriptions vides de sens. +!! - Ne tronquez pas les messages d'erreur, mais ne copiez pas non plus un pavé de code illisible ou sans formatage. (Utilisez [YunoPaste](https://paste.yunohost.org)) +!! - Ne tournez pas votre question comme un sondage ("est-ce que quelqu'un a réussi à...?"). +[/columns] + +## Connectez-vous au salon de support + +S'il vous plaît, changez votre pseudo, nous avons des légions de `ynhuser`s. + +[center] + +[/center] + +!!! **Note:** ce salon est accessible via +!!! - Matrix (`#yunohost:matrix.org` [en utilisant Element](https://app.element.io/#/room/#yunohost:matrix.org)) +!!! - IRC (`#yunohost` on libera.chat, [en utilisant Kiwiirc](https://web.libera.chat/#yunohost)) +!!! - XMPP (`support@conference.yunohost.org`) + +## ... ou demandez sur le forum ! + +S'il vous plaît, suivez le canevas des messages de la section Support. Cela aide tout le monde à comprendre le contexte de votre demande. + +[center] +[[fa=comment /] Aller sur le forum](https://forum.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +[/center] + +## Vous avez trouvé un bug ? + +!!!! Veuillez rapporter les bugs sur nos *bugtrackers* ou contactez les développeurs + +[center] + +[[fa=exclamation-circle /] Rapporter un bug dans le cœur de YunoHost](https://github.com/yunohost/issues/issues?target=_blank&classes=btn,btn-lg,btn-warning) +[[fa=exclamation-circle /] Rapporter un bug dans une des apps de YunoHost](https://github.com/YunoHost-Apps?target=_blank&classes=btn,btn-lg,btn-warning) +[[fa=comment /] Contacter les développeur.euse.s](https://web.libera.chat/#yunohost-dev?target=_blank&classes=btn,btn-lg,btn-warning) + +[/center] + +!!! Note : vous pouvez aussi vous connecter aux salons de discussions dev et apps, voir [la page correspondante](/chat_rooms) diff --git a/pages/05.community/15.help/help.it.md b/pages/05.community/15.help/help.it.md new file mode 100644 index 00000000..54426b7c --- /dev/null +++ b/pages/05.community/15.help/help.it.md @@ -0,0 +1,62 @@ +--- +title: Cerchi aiuto? +template: docs +taxonomy: + category: docs +routes: + default: '/help' +--- + +

Connettiti alla chat di supporto

+ +!!! **ProTips™** +!!! - Non c'è bisogno di chiedere se puoi chiedere qualcosa, chiedi e basta ! +!!! - *Sii paziente*, potrebbero servire alcuni minuti prima che qualcuno veda i tuoi messaggi. + +
+ + + +
+
+Nota : questa stanza e disponibile via IRC (#yunohost su libera.chat - usando kiwiirc), via XMPP (support@conference.yunohost.org), o Matrix (#yunohost:matrix.org - usando Element) +
+ +

... o chiedi nel forum !

+ +
+ +
+ +

Hai trovato un problema ?

+ +
+
+Per favore segnalalo nel nostro bugtracker o contatta gli sviluppatori

+ + +
+
+Nota : puoi anche connetterti alla stanza degli sviluppatori, utilizzando il tuo client XMPP preferito, su
+dev@conference.yunohost.org e apps@conference.yunohost.org
+
+ + + diff --git a/pages/05.community/15.help/help.md b/pages/05.community/15.help/help.md new file mode 100644 index 00000000..35df1a73 --- /dev/null +++ b/pages/05.community/15.help/help.md @@ -0,0 +1,57 @@ +--- +title: Looking for help? +template: docs +taxonomy: + category: docs +routes: + default: '/help' +--- + +## How to ask for help + +[columns count=2 width=200px] +!!!! - **Be courteous**: help in the chatrooms or on the forum is given by our users and contributors, all volunteers. +!!!! - **Explain the context** of your request in a complete but concise way. +!!!! - It is paramount to **share the error logs with YunoPaste** (green buttons in your webadmin, then share the link to the generated page). +!!!! - **Be patient**, as your messages might not be seen instantly. + +!! - Do not ask about your attempted solution but rather your actual problem (see [XY problem](https://xyproblem.info/)). +!! - Avoid phrases like "server does not want", "the app does not load", or other meaningless sentences. +!! - Do not trim error messages, but do not paste a wall of illegible unformatted code either. (Use [YunoPaste](https://paste.yunohost.org)) +!! - Do not ask your question like a poll ("does anyone else succeeded in...?"). +[/columns] + +## Connect to the support chatroom + +Please change your username, as we got legions of `ynhuser`s. + +[center] + +[/center] + +!!! **Note:** this room is available via +!!! - Matrix (`#yunohost:matrix.org` [using Element](https://riot.im/app/#/room/#yunohost:matrix.org?target=_blank)) +!!! - IRC (`#yunohost` on libera.chat, [using kiwiirc](https://web.libera.chat/#yunohost)) +!!! - XMPP (`support@conference.yunohost.org`) + +## ... or ask on the forum ! + +Please follow the Support section post template. It helps everyone understand the context of your request. + +[center] +[[fa=comment /] Go to the forum](https://forum.yunohost.org/?target=_blank&classes=btn,btn-lg,btn-success) +[/center] + +## You've found a bug ? + +!!!! Please report bugs on our bugtrackers or contact the developers + +[center] + +[[fa=exclamation-circle /] Report a bug in YunoHost's core](https://github.com/yunohost/issues/issues?target=_blank&classes=btn,btn-lg,btn-warning) +[[fa=exclamation-circle /] Report a bug in one of YunoHost's apps](https://github.com/YunoHost-Apps?target=_blank&classes=btn,btn-lg,btn-warning) +[[fa=comment /] Contact the developers](https://web.libera.chat/#yunohost-dev&classes=btn,btn-lg,btn-warning) + +[/center] + +!!! Note : you can also connect to the dev and apps chatrooms, see [the corresponding page](/chat_rooms) diff --git a/pages/05.community/20.faq/faq.de.md b/pages/05.community/20.faq/faq.de.md new file mode 100644 index 00000000..5a066f24 --- /dev/null +++ b/pages/05.community/20.faq/faq.de.md @@ -0,0 +1,115 @@ +--- +title: Häufig gestellte Fragen +template: docs +taxonomy: + category: docs +routes: + default: '/faq' +--- + +#### Unter welcher Lizenz wird YunoHost angeboten ? + +YunoHost steht unter der freien GNU AGPL v.3 Lizenz. + +YunoHost basiert auf Debian, also auch auf Lizenzen von Debian Bestandteilen. + +Die Anwendungen und Applikations-Pakete stehen unter ihren jeweiligen, eigenen Lizenzen. + + +#### Was ist das Ziel von YunoHost ? + +Wir glauben, dass Dezentralisierung sowie Kontrolle und Verantwortung über die eigenen Daten und Dienste ein wichtiger Bestandteil einer freien und demokratischen Gesellschaft ist. + +Das YunoHost Projekt zielt darauf ab, eigenverantwortliches Hosting zu demokratisieren. + +Wir bieten eine Software an, die es für jeden möglichst einfach machen soll, einen eigenen Server zu betreiben und zu verwalten - mit einem minimalen Aufwand an Wissen und Zeit. + + +#### Aber was *macht* YunoHost überhaupt ? + +YunoHost könnte eine Distribution oder ein Betriebssystem genannt werden, aber es ist eigentlich "nur" eine Ebene, die über Debian betrieben wird und welche die meiste, schwierige Arbeit für Sie übernimmt. + +Zum Beispiel, wenn Sie Wordpress installieren möchten, müssten Sie einige Befehle eintippen, um Benutzer zu generieren, einen Webserver einrichten, einen SQL Server einrichten, das Wordpress Archiv herunterladen, entpacken, den Webserver konfigurieren, die SQL Datenbank konfigurieren und schließlich Wordpress einrichten. YunoHost übernimmt all das für Sie, zähmt das technische Chaos und "tippt alle Befehle für Sie", sodass Sie sich auf das konzentrieren können, was wirklich wichtig ist. + +Mehr Informationen finden Sie [hier](/whatsyunohost) ! + + +#### Kann ich meine eigene, persönliche Internetseite mit YunoHost betreiben ? + +Ja ! Werfen Sie einen Blick auf die [Custom Web app](https://github.com/YunoHost-Apps/my_webapp_ynh). +Dort erhalten Sie ein "leeres Gefäß" : nach der Installation, laden Sie einfach Ihre Dateien and den jeweiligen Ort hoch (via SSH/SCP or SFTP). PHP und eine SQL Datenbank steht Ihnen bei Bedarf zur Verfügung. + + +#### Kann ich viele voneinander unabhängige Internetseiten mit unterschiedlichen Domain-Namen betreiben ? + +Ja ! YunoHost ermöglicht das Anlegen mehrerer Benutzer und Domain-Namen. Manche Apllikationen wie *WordPress* oder *Web App Multi Custom* sind mehrinstanzenfähig und können mehrmals installiert werden. + + +#### Wieso kann ich Anwendungen nicht über die IP-Adresse erreichen ? + +Die [SSO](https://github.com/Kloadut/SSOwat/) (Single Sign-on) Technik kann Benutzer nicht richtig authentifizieren, wenn sie auf den Server nur über die IP zugreifen. Wenn Sie keine Möglichkeit haben, die DNS korrekt zu konfigurieren, können Sie als temporäre Notlösung [die `Hosts` Datei (letztes §)](/dns_local_network) auf Ihrem Computer modifizieren. + + +#### Was ist das Geschäftsmodell von YunoHost ? + +Momentan wird YunoHost nur von Freiwiligen betrieben, die in ihrer Freizeit an dem Projekt arbeiten. Im Grunde ist bisher kein Geld im Spiel (abgesehen von Serverkosten oder Stickern :P). + +Vor dem Hintergrund, dass einige Mitwirkende sehr viel zeit in das Projekt investieren, überlegen wir derzeit, wie wir das Projekt langfristig tragfähig machen können. + +Dies könnte durch Spenden oder öffentliche Gelder erricht werden. Einige Mitwirkenden arbeiten an professionellen Angeboten in Zusammenhang mit YunoHost. + + +#### Kann ich für das Projekt spenden ? + +Ja, das können Sie ! YunoHost braucht Geld, um die Server und Domain-Namen zu bezahlen. Wir möchten außerdem erreichen, dass die Mitwirkenden weiterhin zum Projekt beitragen können und sich nicht nach anderen Jobs umschauen müssen. + +Sie können [auf Liberapay spenden](https://liberapay.com/yunohost). + +Wenn Ihnen das möglich ist, können Sie auch gerne Sachspenden leisten (ein Teil unserer Infrastruktur ist auf Server von Dritten angewiesen). + + +#### Wie kann ich zum Projekt beitragen ? + +Es gibt viele Wege [zum Projekt beizutragen](/contribute) :). + +Zögern Sie nicht, mit uns über Ihre Ideen zu sprechen! + +Es ist ein weit verbreitetes Missverständnis, dass Neulinge bei offenen Softwareprojekten nicht "ausreichend qualifiziert" sind. Wer ist das schon :) ? Was wirklich zählt, ist, [dass Sie mögen, was Sie tun](https://www.youtube.com/watch?v=zIbR5TAz2xQ&t=113s), nett zu anderen Menschen, geduldig und starrköpfig gegenüber Maschinen sind und etwas freie Zeit haben. Abgesehen davon ist einfach alles was Sie tun können, schon mehr als genug! + + +#### Was sind YunoHost organisatorische Grundsätze ? + +Das beschreiben wir in [diesem Dokument](/project_organization) :). + + +#### Werdet ihr YunoHosts für [Lieblingsdistribution hier einfügen] portieren ? + +Die kurze Antwort: Nein. Wir haben nicht die Energie dafür und es ist eh irrelevant. + +Die lange Antwort +
+

Wer sich auf Distrowars einlässt oder denkt, dass Dabian "schmutzig" sei, ist nicht die Zielgruppe von YunoHost.

+ +

YunoHost soll nicht-technikversierte Leute ansprechen, die einfach nur wollen, dass ihr Server funktioniert. Debian hat seine Macken, aber es ist eine bekannte und verbreitete Distributionen für Server. Es ist stabil. Die meiste self-hosted Software ist auf die eine oder andere Weise kompatibel mit Debian. Wer ein bisschen CLI auf seinem eigenen Ubuntu/Mint Computer betreibt, kann sich selbst etwas zusammenhacken. Es gibt kein Killer-Feature in anderen Distributionen, das es notwendig macht, dass YunoHost wechselt oder portiert wird.

+ +

Sollte Sie das nicht überzeugen, gibt es ausreichend andere Projekte für andere Distributionen mit einer anderen Philosophie dahinter.

+
+ + +#### Ich hab gesehen, wie das Packen von Apps funktioniert? Warum erfindet ihr das Rad neu und benutzt nicht [hier bevorzugtes Paketformat einfügen] ? + +Kurze Antwort: Machen wir nicht. + +Mittellange Antwort: Früher wurden die Apps in .deb gepackt. Was für ein Albtraum. Wir sind jetzt glücklicher ;). + +Die lange Antwort +
+ +

Das Ziel von YunoHost ist es das Packen einfacher zu machen. Von Anfang an wollten wir es so simple wie möglich gestalten, nach dem Motto: « wer die App manuell installieren kann, sollte die Schritte für die Installation und Deinstallation der Pakete ohne besonderes Training kopieren und einfügen können ». Bei Debian Paketen ist das nicht der Fall.

+ +

Es hat sich herausgestellt, dass das Packen für YunoHost einen leicht anderen Zweck erfüllt als das Erstellen klassischer Pakete wie .deb. Debian Pakete haben nur den Anspruch Dateien, Befehle, Programme und Dienste auf dem System zu installieren. Es bleibt oft an Ihnen diese richtig zu konfigurieren, weil es einfach keinen standardisierte Server-Konfiguration gibt. Typischerweise erfordern Web-Apps einen sehr hohen Konfigurationsaufwand, weil sie auf dem Webserver und einer Datenbank (und dem single sign-on) aufbauen.

+ +

YunoHost richtet Konzepte auf höchster Ebene ein (Apps, Domain-Namen, Benutzer...) und definiert eine standardmäßige Einrichtung (NGINX, Postfix, Metronome, SSOwat...) und kann deshalb die Konfiguration für den Anwender übernehmen.

+ +

Wer trotzdem glaubt, man könne deb Pakete dazu bringen, all dies zu leisten, möge sich die vorherige Antwort anschauen.

+
diff --git a/pages/05.community/20.faq/faq.fr.md b/pages/05.community/20.faq/faq.fr.md new file mode 100644 index 00000000..f443438d --- /dev/null +++ b/pages/05.community/20.faq/faq.fr.md @@ -0,0 +1,101 @@ +--- +title: Foire aux questions +template: docs +taxonomy: + category: docs +routes: + default: '/faq' +--- + +#### Sous quelle licence est distribué YunoHost ? + +Les paquets qui composent YunoHost sont sous licence libre GNU AGPL v.3. + +YunoHost est basé sur Debian, donc sur les licences des éléments sur lesquels Debian est basé. + +Les applications et leurs paquets ont leurs licences respectives. + + +#### Quel est l’objectif de YunoHost ? + +Nous pensons que la décentralisation d’Internet, et la reprise du contrôle et de la responsabilité des données et services par les personnes est un enjeu crucial pour garantir une société libre et démocratique. + +Le projet YunoHost cherche à démocratiser l’auto-hébergement. + +Nous fournissons un logiciel qui cherche à rendre simple le fait de gérer et d’administrer un serveur soi-même, en minimisant les compétences et le temps requis. + + +#### Mais qu’est-ce que ça fait *vraiment* ? + +YunoHost est à la fois une distribution, dans le sens où c'est une version de GNU/Linux-Debian dédié à un objectif précis et que YunoHost distribue un ensemble d'applications via son catalogue, mais c'est aussi un « simple » programme qui configure Debian de manière automatique, et gère les manipulations pénibles à votre place. + +Par exemple, pour installer un WordPress à la main, il vous faudrait taper toute une série de commandes pour créer des utilisateurs, mettre en place un serveur web, mettre en place un serveur SQL, télécharger l’archive de WordPress, la décompresser, configurer le serveur web, configurer la base de données SQL, et finalement configurer WordPress. YunoHost gère toute cette partie technique et « tape les commandes à votre place », pour que vous puissiez vous concentrer sur ce qui compte vraiment. + +Plus d’informations sur [cette page](/whatsyunohost) ! + + +#### Puis-je gérer mon propre site web avec YunoHost ? + +Oui ! Il faut regarder du côté de [cette app](https://github.com/YunoHost-Apps/my_webapp_ynh). +Elle fournit une « coquille vide » : après l’installation, il suffit d’envoyer vos fichiers (via SSH/SCP ou SFTP) au bon endroit. Il est aussi possible d’avoir du PHP et une base de donnée SQL si besoin. + + +#### Peut-on héberger plusieurs sites indépendants avec des noms de domaines différents ? + +On peut tout à fait héberger plusieurs sites web car YunoHost est multi-domaine et que certaines applications de gestion de sites web, comme *WordPress* ou *My Webapp*, sont multi-instances, c’est-à-dire que l’application peut-être installée plusieurs fois. + +#### Pourquoi je ne peux pas accéder à mes applications avec l’adresse IP ? + +Pour des raisons techniques, le [SSO](https://github.com/YunoHost/SSOwat/) ne permet pas aux utilisateurs de se connecter à l’espace utilisateur lorsque l’on accède au serveur uniquement avec l’IP. Si vous ne pouvez réellement pas configurer un nom de domaine, une solution temporaire peut être de modifier le [fichier `hosts` (dernier §)](/dns_local_network) de son ordinateur. + + +#### Quel est le modèle économique de YunoHost ? + +YunoHost est maintenu par une équipe de bénévoles travaillant pendant leur temps libre. Le projet reçoit régulièrement des dons qui financent principalement des frais de serveurs et de communication (stickers ;P). Le projet a reçu dans le passé (ou continue de recevoir) des subventions de la part d'organismes comme [NLnet](https://nlnet.nl/) ou [CodeLutin](https://www.codelutin.com/) pour financer des développements précis. + +Les dons au projet étant de plus en plus important, des initiatives sont en cours pour tenter de redistribuer l'argent aux contributeur·ice·s principales et ainsi aider à pérenniser le projet. Des contributeur·ice·s mènent par ailleurs des activités professionnelles basées partiellement sur YunoHost. + + +#### Puis-je faire un don au projet ? + +Oui, c'est possible ! YunoHost a besoin de payer des serveurs et noms de domaine, et nous souhaitons permettre aux contributeur·ice·s de continuer à développer YunoHost plutôt que de chercher un emploi ailleurs. + +Pour faire un don ça se passe via [notre interface de don](https://donate.yunohost.org) + +Si vous le pouvez, vous pouvez aussi faire des contributions en nature (une partie de notre infrastructure vient d'associations qui nous fournissent des serveurs). + + +#### Comment puis-je contribuer au projet ? + +Il existe [plusieurs façons de contribuer](/contribute) :). + +N’hésitez pas à venir nous parler de vos idées ! + +Le syndrome de l'imposteur (ne pas se sentir « assez compétent·e ») est assez répandu, mais en pratique, croyez-le, personne ne se sent compétent même 10 ans après sa première contrib' :). Ce qui compte vraiment est : [d’aimer ce que vous faites](https://www.youtube.com/watch?v=zIbR5TAz2xQ&t=113s), être sympathique avec les autres êtres humains du projet, être patient et têtu avec les machines, et avoir du temps libre. À part ça, juste faire ce que vous pouvez, c’est déjà trop cool ! + +#### Quelle est l'organisation politique du projet YunoHost ? + +Elle est décrite dans [ce document](/project_organization) :). + + +#### Pouvez-vous porter YunoHost sur [ma distro préférée] ? + +Si vous vous préoccupez des guéguerres de distro, ou pensez que « Debian c’est sale », vous n’êtes pas le public de YunoHost. + +YunoHost vise un public de non-technophiles ou de bidouilleur·euse·s qui veulent simplement que « ça marche » sans devoir investir des semaines entières. Debian a probablement des défauts, mais c’est une (la ?) distribution la plus connue et utilisée pour gérer des serveurs. C’est une distribution stable. La plupart des services auto-hébergeables sont compatibles d’une manière ou d’une autre avec Debian. Elle est facilement bidouillable par quelqu’un qui a déjà utilisé la ligne de commande sur son ordinateur personnel. Il n’y a pas de « killer feature » particulière dans les autres distributions qui rendrait pertinent de porter YunoHost dessus. + +Si cela ne vous convient pas, il existe d’autres projets sous d’autres distributions ou avec d’autres philosophies. + +#### J’ai regardé comment le packaging des apps fonctionne. Pourquoi réinventez-vous [mon format de paquet préféré] ? + +Des personnes ont été tentées de comparer le système de packaging de YunoHost aux `.deb` de Debian. Pourtant, l’objectif des paquets d’application YunoHost est de celui des paquets traditionnels (comme les .deb de Debian) qui remplissent le rôle d’installer des éléments bas-niveau tels que des fichiers, commandes, programmes ou services sur le système. Il est à la charge de l’administrateur de les configurer ensuite proprement, simplement parce qu’il n’existe pas d’environnement standard. Typiquement, les applications web requièrent beaucoup de configuration car elles ont besoin de s’interfacer avec un serveur web et une base de données (et le système de connexion unique / SSO). + +YunoHost manipule des abstractions haut-niveau (apps, domaines, utilisateurs…) et définit un environnement standard (NGINX, Postfix, Metronome, SSOwat...) et, grâce à cela, peut gérer la configuration à la place de l’administrateur. + +#### Quand est-ce que [cette fonctionnalité] sera ajoutée ? Pourquoi [cette app] n'a pas encore été packagée ? Je n'en reviens pas que vous ne fassiez pas encore [cela] ! + +Nous ne donnons pas de calendrier. + +Nous sommes une poignée de volontaires travaillant sur notre temps libre pour maintenir et développer YunoHost. Nous n'avons pas de responsable produit ou de chef de projet, nous ne sommes pas une entreprise. Nous faisons ce que nous pouvons, parce que nous aimons ce logiciel, quand nous le pouvons. + +Si vous souhaitez vraiment voir une fonctionnalité codée ou documentée, ou une application packagée, [envisagez de contributer](/contribute)! Nous adorerions vous aider à vous mettre en selle. diff --git a/pages/05.community/20.faq/faq.md b/pages/05.community/20.faq/faq.md new file mode 100644 index 00000000..1fc73d7d --- /dev/null +++ b/pages/05.community/20.faq/faq.md @@ -0,0 +1,126 @@ +--- +title: Frequently Asked Questions +template: docs +taxonomy: + category: docs +routes: + default: '/faq' +--- + +#### Under which license is YunoHost distributed? + +YunoHost packages are under free licenses GNU AGPL v.3. + +YunoHost is based on Debian, so on Debian's components' licenses. + +Applications and applications packages have their own licenses. + + +#### What's YunoHost goal? + +We believe that decentralizing the Internet, and empowering people to take control and responsibility back over their own data and services, is a crucial issue to guarantee a free and democratic society. + +The YunoHost project aims to democratize self-hosting. + +It provides a software that aims to make it easy for people to run and administer their own server, with minimal knowledge and required time. + + +#### But what does YunoHost exactly *do*? + +YunoHost is a distribution, in the sense that it is a purpose-specific version of GNU/Linux-Debian and it distributes a set of application via its catalog, but it is also "just" a program that automatically configures Debian and does most of the hard work for you. + +For instance, if you wanted to install WordPress, you would need to type a bunch of commands to create some users, setup a web server, setup a SQL server, download the WordPress archive, uncompress it, configure the web server, configure the SQL database, and finally configure WordPress. YunoHost handles the technical details and "types all these commands for you", so that you can focus on what really matters. + +More info on [this page](/whatsyunohost)! + +#### Can I host my own personal website with YunoHost? + +Yes! Have a look at the [Custom Web app](https://github.com/YunoHost-Apps/my_webapp_ynh). It provides an "empty shell" : after installing it, just upload your files (via SSH/SCP or SFTP) to the right location. You can have PHP and a SQL database if you need. + +#### Can I host many independent websites with different domain names? + +Yes! YunoHost is multi-user and multi-domain. Some applications like *WordPress* or *My webapp*, are multi-instances, which means that the application can be installed many times. + + +#### Why can't I access applications via the IP address? + +The [SSO](https://github.com/Kloadut/SSOwat/) (single sign-on) cannot properly authenticate users when they access your server with only its IP. If you really can't properly configure the DNS, you can temporarily work around it by [modifying the `hosts` file (last §)](/dns_local_network) on your computer. + + +#### What's YunoHost's business model? + +YunoHost is maintained by volunteers working on their free time. The project regularly receives donations which pay for the servers' bills and stickers. The project received (or continues to receive) grants from organization like [NLnet](https://nlnet.nl/) or [CodeLutin](https://www.codelutin.com/) to fund specific developments + +Donations to the project are increasing, and we are in the process of defining the way we redistribute this money to main contributors and therefore help make the project sustainable. Additionally, some contributors do have professional activities based (at least partially) on YunoHost. + +#### Can I donate to the project? + +Yes, you can! YunoHost needs money to pay servers and domain names. We would also like contributors to be able to spend more time contributing rather than looking for jobs. + +You can donate using [our donation interface](https://donate.yunohost.org) + +If you can, you can also make in-kind contributions, like servers (some of our infrastructure relies on servers from a few associations). + +#### How can I contribute to the project? + +There are [many ways to contribute](/contribute) :). + +Don't hesitate to come talk to us about your ideas! + +A common misconception for newcomers in free software projects is to think that they are "not skilled enough". In practice, nobody is "skilled" :). What really matter is: [liking what you do](https://www.youtube.com/watch?v=zIbR5TAz2xQ&t=113s), being friendly with other human beings, being patient and stubborn with machines, and having some free time. Other than that, just doing what you can is already awesome! + + +#### How is the YunoHost project organized? + +It is described in [this document](/project_organization) :). + + +#### Will you port YunoHost to [insert favorite distro]? + +If you care about distrowars, or think 'Debian is dirty', then YunoHost is not for you. + +YunoHost is aimed at non-tech people who just want their server to work. Debian has its flaws, but it's (one of?) the most widely known and used distribution for servers. It's stable. Most self-hosted software are one way or another compatible with Debian. It's easily hackable by anybody who's been doing a bit of CLI on their personal Ubuntu/Mint computer. There is no killer feature in other distributions that makes it relevant for YunoHost to switch or port to it. + +If this does not convince you, there are other projects running on other distributions or with different philosophies. + + +#### I checked how apps packaging work. Why are you reinventing [insert favorite package format]? + +People have been tempted to compare YunoHost packages to traditional package managers (such as Debian's `.deb`), which hold a different purpose. Traditional package managers are meant to install low-level purpose of installing files, commands, programs and services on the system. It is often your duty to configure them properly, simply because there is no standard server setup. Typically, web apps requires a lot of configuration because they rely on a web server and a database (and the single sign-on). + +YunoHost manages high-level abstractions (apps, domains, users...) and defines a standard setup (NGINX, Postfix, Metronome, SSOwat...) and, because of this, can handle the configuration for the user. + +#### When will [this feature] be implemented? Why isn't [that app] packaged yet? I cannot believe you do not do [this] yet! + +We do not give timelines. + +We are a bunch of volunteers working on our free time to maintain and develop YunoHost. We have no product owner or project manager handling resources, we are not a business. We do what we can, because we love this software, when we can. + +If you really want to have a feature implemented or documented, or an app packaged, [consider contributing yourself](/contribute)! We would love helping you get started. + +### What is YunoHost's policy regarding the apps included in the official catalog ? + +The rule of thumb is that we only include software licensed under a free-software license in the official app catalog. + +However, as YunoHost evolved, some gray-cases appeared with softwares that would be relevant for YunoHost's goal and match its spirit, while not being strictly-speaking free-software. Situations such as: +- software promoting the use of centralized services, though precisely to avoid their direct usage ; +- software relying on non-free dependencies or assets ; +- "new" post-open-source / ethical-yet-not-free licenses such as the [ACSL](https://anticapitalist.software/), the [HL3](https://firstdonoharm.dev/) or the [CoopCycle License](https://github.com/coopcycle/coopcycle-web/blob/master/LICENSE) ; +- "open-core" models, trademark clauses, or business-related license clauses (such as the BSL) which are meant to ensure the project's sustainability while still remaining ethical. + +While we believe free software principles are an essential footstep towards [YunoHost's goal](#what-s-yunohost-goal), we believe they are a means and not an end. We reject the purist vision according to which software is either free or proprietary, and the flawed premise that technology is fundamentally neutral. We believe that ethical software and technology can and should exist beyond the definition of free software layed 40 years ago (see also: [Freedom isn't Free](https://logicmag.io/failure/freedom-isnt-free/) and [Post-Open Source](https://www.boringcactus.com/2020/08/13/post-open-source.html)). + +The project therefore allows the inclusion inside the official app catalog, ***on a case-by-case basis***, of apps which does not qualify as "free software", yet considered to be ethical and worthy of interest for [YunoHost's goal](#what-s-yunohost-goal). Such apps are tagged in the catalog, such that an explicit message displayed before their installation. + +If you notice an app is missing such a tag/disclaimer, feel free to open a discussion or pull requet on [the app catalog](https://github.com/YunoHost/apps/). + +If you run YunoHost for your business, you are responsible for doing your due diligence by checking the licenses of the software you want to install on your server. + +### Why won't you include [feature X] ? + +YunoHost is primarily designed for not-so-tech-savvy users and aims to remain relatively simple in terms of UI/UX. At the same time, the project has limited time and energy available to be maintained and developed. Therefore we may lower the priority of features, or refuse entirely the inclusion of features, based on the criteria that they: +- would only be meaningful for advanced / power-users stuff which is out of the scope of the project ; +- would introduce too much UI/UX bloat ; +- would only cover unrealistic threat models ; +- would be there only to satisfy purists ; +- or overall would not be worth it in terms of development/maintenance time/energy for what it brings to the project. \ No newline at end of file diff --git a/pages/05.community/25.project_organization/yunohost_project_organization.fr.md b/pages/05.community/25.project_organization/yunohost_project_organization.fr.md new file mode 100644 index 00000000..aba0729e --- /dev/null +++ b/pages/05.community/25.project_organization/yunohost_project_organization.fr.md @@ -0,0 +1,9 @@ +--- +title: Organisation du projet +template: docs +redirect: 'https://github.com/YunoHost/project-organization/' +routes: + default: '/yunohost_project_organization' + aliases: + - '/project_organization' +--- diff --git a/pages/05.community/25.project_organization/yunohost_project_organization.md b/pages/05.community/25.project_organization/yunohost_project_organization.md new file mode 100644 index 00000000..e58ed648 --- /dev/null +++ b/pages/05.community/25.project_organization/yunohost_project_organization.md @@ -0,0 +1,9 @@ +--- +title: Project organisation +template: docs +redirect: 'https://github.com/YunoHost/project-organization/' +routes: + default: '/yunohost_project_organization' + aliases: + - '/project_organization' +--- diff --git a/pages/05.community/30.project_sponsors/sponsors_partners.fr.md b/pages/05.community/30.project_sponsors/sponsors_partners.fr.md new file mode 100644 index 00000000..e180c8a6 --- /dev/null +++ b/pages/05.community/30.project_sponsors/sponsors_partners.fr.md @@ -0,0 +1,22 @@ +--- +title: Mécènes et partenaires +template: docs +taxonomy: + category: docs +routes: + default: '/sponsors_partners' +--- + +Afin d'avancer et de faire fonctionner le projet, en plus du travail des bénévoles et des dons, YunoHost bénéficie du soutien de mécènes et de partenaires. + +Une liste des mécènes de YunoHost, fournissant l'infrastructure et des services aux projets : +- [GITOYEN](https://gitoyen.net) : association regroupant plusieurs entreprises et associations intervenant comme fournisseur d’infrastructure d’hébergement et d’accès à Internet. +- [GLOBENET](http://www.globenet.org) : association militante, au service de la liberté d’expression, proposant des services Internet. +- [LDN-NET](https://ldn-fai.net/) : association pour la défense d’un Internet libre, neutre et décentralisé dont le moyen d’action principale est d’être un fournisseur d’accès à Internet (FAI) assocatif et local. +- [NBS System](https://www.nbs-system.com/): société spécialisée dans l’hébergement, la sécurisation des Clouds, l’infogérance (Systèmes d’information, Applications SaaS, Plateformes web) et les services managés. +- [NLNET](https://nlnet.nl/) : La Fondation NLnet soutient les organisations et les personnes qui contribuent à une société de l'information ouverte. +- [TETANEUTRAL-NET](https://tetaneutral.net/) : fournisseur d'accès à Internet associatif opérant actuellement un réseau radio sur Toulouse et ses environs et un hébergeur. + +Une liste des partenaires de YunoHost : +- [FFDN](https://www.ffdn.org/) : La fédération FDN regroupe des fournisseurs d'accès à Internet associatifs se reconnaissant dans des valeurs communes : bénévolat, solidarité, fonctionnement démocratique et à but non lucratif ; défense et promotion de la neutralité du Net. +- [Framasoft](https://framasoft.org/) : association d’éducation populaire, un groupe d’ami·es convaincu·es qu’un monde numérique émancipateur est possible, persuadé·es qu’il adviendra grâce à des actions concrètes sur le terrain et en ligne avec vous et pour vous ! diff --git a/pages/05.community/30.project_sponsors/sponsors_partners.md b/pages/05.community/30.project_sponsors/sponsors_partners.md new file mode 100644 index 00000000..7cb0e06e --- /dev/null +++ b/pages/05.community/30.project_sponsors/sponsors_partners.md @@ -0,0 +1,22 @@ +--- +title: Sponsors and partners +template: docs +taxonomy: + category: docs +routes: + default: '/sponsors_partners' +--- + +In order to advance and make the project works, in addition to the work of volunteers and donations, YunoHost benefits from the support of sponsors and partners. + +Here is a list of YunoHost sponsors, providing infrastructure and services to the project: +- [GITOYEN](https://gitoyen.net): association bringing together several companies and associations acting as a provider of hosting infrastructure and Internet access. +- [GLOBENET](http://www.globenet.org): activist association, at the service of freedom of expression, offering internet services. +- [LDN-NET](https://ldn-fai.net/) : association for the defense of a free, neutral and decentralized Internet whose main means of action is to be an Internet access provider associative and local. +- [NBS System](https://www.nbs-system.com/): company specialized in hosting, securing Clouds, outsourcing (Information Systems, SaaS Applications, Web Platforms) and managed services. +- [NLNET](https://nlnet.nl/): The NLnet Foundation supports organizations and people that contribute to an open information society. +- [TETANEUTRAL-NET](https://tetaneutral.net/): associative Internet access provider currently operating a radio network in Toulouse and its surroundings and a hoster. + +Here is a list of YunoHost partners: +- [FFDN](https://www.ffdn.org/): The FDN federation gathers associative Internet Access Providers who recognize themselves in common values: volunteering, solidarity, democratic functioning and non-profit; defense and promotion of net neutrality. +- [Framasoft](https://framasoft.org/) : popular education association, a group of friends convinced that an emancipatory digital world is possible, convinced that it will happen thanks to concrete actions on the ground and online with you and for you! diff --git a/pages/05.community/35.project_budget/project_budget.fr.md b/pages/05.community/35.project_budget/project_budget.fr.md new file mode 100644 index 00000000..b2b5a3c6 --- /dev/null +++ b/pages/05.community/35.project_budget/project_budget.fr.md @@ -0,0 +1,42 @@ +--- +title: Budget du projet +template: docs +taxonomy: + category: docs +routes: + default: '/project_budget' +--- + +# Budget prévisionnel pour 2019/2020 + +## Revenus attendus + +* Dons via Liberapay : 3000€ +* Subvention de NLNet : 20K€ + +## Dépenses prévues + +* Developpement : 20K€ +* Location Serveur : ~500 € + * VPS Scaleway: 20.33*12: 243.96€/year + * VPS Digital O. (forum): 172.80€/year +* Noms de domaine : ~150 € + * nohost.me : 11.99 €HT/ans + * ynh.fr : 6.99 €HT/ans (doit être confirmé avec frju ?) + * noho.st : ~35 €TTC/ans + * yunohost.org : 13.99 €HT/ans + * yunohost.com : 9.99 €HT/ans + * labriqueinter.net : 12.49 €Ht/ans + * internetcu.be : 17.99 €HT/ans +* Communication : ~400 € + * Stickers : 100€ + * Tracts : 100€ + * T-shirt : 200€ +* Déplacements (ex. : aller aux conférences) : ~700 € + * AG FFDN 2020 : 225€ (en tout) + * Event colibris : 150€ + * FOSDEM ou autre conf : 300€ +* Compte bancaire fees : 7×12 € soit ~100 € +* Brique Camp : 500€ + +**Balance 2020-2021** : +650 € diff --git a/pages/05.community/35.project_budget/project_budget.md b/pages/05.community/35.project_budget/project_budget.md new file mode 100644 index 00000000..19f4e059 --- /dev/null +++ b/pages/05.community/35.project_budget/project_budget.md @@ -0,0 +1,39 @@ +--- +title: Project budget +template: docs +taxonomy: + category: docs +routes: + default: '/project_budget' +--- + +# Estimated budget for 2020/2021 + +## Expected revenues + +* Donations: 3000€/year +* Grant from NLNet: 20K€ + +## Expected expenses + +* Development: 20K€ +* Server renting: 500€ + * VPS Scaleway: 20.33*12: 243.96€/year + * VPS Digital O. (forum): 172.80€/year +* Domain names: ~150€ + * nohost.me: 11.99€HT/year + * ynh.fr: 6.99€HT/year (to be confirmed with frju?) + * noho.st: ~35€ TTC/year + * YunoHost.org: 13.99€HT/year + * YunoHost.com: 9.99€HT/year + * labriqueinter.net: 12.49€HT/year + * internetcu.be: 17.99€HT/year +* Communication: ~400€ +* Travel (e.g. to go to conferences): ~700€ + * AG FFDN 2020: 225€ (en tout) + * Event colibris: 150€ + * FOSDEM ou autre conf: 300€ +* Bank account fees: 7x12€ => ~100€ +* Brique Camp: 500€ + +**Balance 2020-2021**: +650€ diff --git a/pages/05.community/35.security_team/security_team.fr.md b/pages/05.community/35.security_team/security_team.fr.md new file mode 100644 index 00000000..3186cffb --- /dev/null +++ b/pages/05.community/35.security_team/security_team.fr.md @@ -0,0 +1,23 @@ +--- +title: Équipe sécurité +template: docs +taxonomy: + category: docs +routes: + default: '/security_team' +--- + +Contactez l'équipe sécurité par email : `security@yunohost.org`. + +Nous vous recommandons fortement de chiffrer votre mail avec GPG. Notre clé +publique est disponible sur les serveurs de clés. L'empreinte est ci-dessous : + +```bash +gpg --fingerprint security@yunohost.org +pub 4096R/17351899 2016-07-01 + Empreinte de la clef = 6CBC 45EB A625 FBF3 513D 1227 749D 8972 1735 1899 +uid YunoHost Security +sub 4096R/446838AF 2016-07-01 +``` + +Voyez https://gist.github.com/opi/4496024dc3ff29ab2e068fd57092ab7c et https://twitter.com/yunohost/status/748975105393459200 pour d'autres empreintes de confiance diff --git a/pages/05.community/35.security_team/security_team.md b/pages/05.community/35.security_team/security_team.md new file mode 100644 index 00000000..fd97120b --- /dev/null +++ b/pages/05.community/35.security_team/security_team.md @@ -0,0 +1,22 @@ +--- +title: Security team +template: docs +taxonomy: + category: docs +routes: + default: '/security_team' +--- + +Contact the security team by mail: `security@yunohost.org`. + +We strongly advise you to encrypt your mail with GPG. Our public key is available on key servers. Below is our fingerprint + +```bash +gpg --fingerprint security@yunohost.org +pub 4096R/17351899 2016-07-01 + Empreinte de la clef = 6CBC 45EB A625 FBF3 513D 1227 749D 8972 1735 1899 +uid YunoHost Security +sub 4096R/446838AF 2016-07-01 +``` + +See https://gist.github.com/opi/4496024dc3ff29ab2e068fd57092ab7c or https://twitter.com/yunohost/status/748975105393459200 for other trustable fingerprints diff --git a/pages/05.community/40.press_kit/press_kit.md b/pages/05.community/40.press_kit/press_kit.md new file mode 100644 index 00000000..c59c579c --- /dev/null +++ b/pages/05.community/40.press_kit/press_kit.md @@ -0,0 +1,72 @@ +--- +title: Communication +template: docs +taxonomy: + category: docs +routes: + default: '/press_kit' + aliases: + - '/communication' +--- + +! TODO: Add logo and kakemono file +! TODO: Add kakemono photo https://matrix-client.matrix.org/_matrix/media/r0/download/pijean.ovh/TqtyOjqllOeSXYziawxeGzIP +! TODO: Add "About YunoHost" section +! TODO: Add email contact + +## Talks / conf + +- (EN) [BattleMeshV12 - YunoHost and the Internet Cube (Brique Internet)](https://www.battlemesh.org/BattleMeshV12/Events#YunoHost_and_the_Internet_Cube_.28Brique_Internet.29) +* (EN) [FOSDEM 2019 - The operating system to build the decentralized Internet](https://cinema.yunohost.support/videos/watch/1eb49594-0283-4a01-8691-3817a3cb31e6) ([slides](https://github.com/YunoHost/yunohost-fosdem-2019)) +* (FR) [Capitole du libre 2018 - YunoHost: un des chemins vers la décentralisation - Bram](https://www.youtube.com/watch?v=OEXEStoOYpw) ([slides](https://psycojoker.github.io/yunohost-cdl-2018/)) +* (FR) [Journées du logiciel libre 2018 - YunoHost : vers l’auto-hébergement et au-delà - Bram](https://www.videos-libr.es/videos/watch/45b48b1e-1b10-4e09-b29a-a404bd42c5d0) ([slides](https://psycojoker.github.io/yunohost-jdll-2018/)) +* (FR) Ubuntu Party Novembre 2017 - De Framasoft à YunoHost, réapproprions nous le cloud ([slides](https://blog.genma.fr/?De-Framasoft-a-Yunohost-reapproprions-nous-le-cloud)) +* (FR) [Capitole du libre 2017 - YunoHost : vers l'auto-hébergement et au-delà - JimboJoe](https://2017.capitoledulibre.org/programme/#yunohost-vers-lauto-hebergement-et-au-dela) ([slides](https://github.com/YunoHost/yunohost-cdl-2017/raw/master/YunoHost-CDL2017.pdf)) +* (FR) [PSES 2017 – Construire l’Internet du Futur avec YunoHost – Aleks, ljf](https://data.passageenseine.org/2017/aleks-ljf_internet-futur-yunohost.webm) ([slides](https://data.passageenseine.org/2017/aleks-ljf_internet-futur-yunohost.pdf)) +* (FR) [Université de technologie de compiègne 2017 – Agir pour un internet éthique – LJF](http://webtv.utc.fr/watch_video.php?v=O34AA7RBR1AH) +* (EN) [FOSDEM 2017 – Internet Cube – kload](https://archive.fosdem.org/2017/schedule/event/internet_cube/) +* (EN) [FOSDEM 2017 – YunoHost – Bram](https://archive.fosdem.org/2017/schedule/event/yunohost/) +* (FR) [Capitole du libre 2016 – 1 an et ½ de Brique Internet – Bram](http://videos2016.capitoledulibre.org/communaute-du-libre/bram-1-an-et-demi-de-brique-internet.mp4) +* (FR) [PSES 2015 - La Brique Internet](http://www.youtube.com/watch?v=NCRn0yRfkIE) +* (FR) [THSF 2015 – beudbeud](https://vimeo.com/128055751) +* (FR) [RMLL 2014 - Hébergez-vous ! – kload & beudbeud]() +* (FR) [Capitole du libre 2013 - L’auto-hébergement pour tous avec YunoHost - beudbeud](http://2013.capitoledulibre.org/conferences/internet-libre/lauto-hebergement-pour-tous-avec-yunohost.html) +* (EN) [FOSDEM 2013 — kload](https://www.youtube.com/watch?v=siN1OLAgGJk) + +## Articles / Press review + +[![](image://Linuxfr.png?resize=180)](https://linuxfr.org/news/yunohost-2-0-l-auto-hebergement-a-portee-de-clic) +[![](image://linux-pratique-96.jpg?resize=150)](https://www.linux-pratique.com/2016/07/et-si-vous-passiez-a-lauto-hebergement/) +[![](image://linux-magazine-208.jpg?resize=150)](https://www.linux-magazine.com/Issues/2018/208/YunoHost) +* LinuxFr (french): + - [YunoHost 2.0 : self hosting at click range](https://linuxfr.org/news/yunohost-2-0-l-auto-hebergement-a-portee-de-clic) + - [Internet cube and YunoHost projects evolutions](https://linuxfr.org/news/evolutions-des-projets-la-brique-internet-et-yunohost-des-versions-2-2-2-4-et-2-5) +- (FR) [Linux Pratique n°96 – YunoHost, l’auto-hébergement à portée de main – juillet 2016](http://connect.ed-diamond.com/Linux-Pratique/LP-096/YunoHost-l-auto-hebergement-a-portee-de-main) +- (EN) [Linux Magazine n°208 – YunoHost, Personal server for a private cloud – Mars 2018](http://www.linux-magazine.com/Issues/2018/208/YunoHost) +- (FR) [Linux Pratique HS n° 044 février 2019 - Le choix de l’auto-hébergement avec YunoHost : rencontre avec l’équipe du projet](https://connect.ed-diamond.com/Linux-Pratique/LPHS-044/Le-choix-de-l-auto-hebergement-avec-YunoHost-rencontre-avec-l-equipe-du-projet) +- (FR) [Duhaz.fr: Devenir votre propre hébergeur](https://www.duhaz.fr/blog/devenir-votre-propre-h%C3%A9bergeur/) +- (FR) [Faimaison.net: au revoir Google, bonjour liberté!](https://www.faimaison.net/actualites/chatons-leprette-mai2019.html) +- (FR) [Tineternet.net: Reprendre la main sur ses données avec l'auto-hébergement](https://www.tinternet.net/article/2019/05/dossier-reprendre-la-main-sur-ses-donnees-avec-lauto-hebergement) +- (DE) [YunoHost Serverinstallation auf Laptop](https://www.giammi.com/2019/04/19/yunohost-serverinstallation-auf-laptop/) +- (FR) [Cenabumix: Retour d’expérience YunoHost sur Raspberry](https://wiki.cenabumix.org/wordpress/2018/03/17/retour-dexperience-yunohost-sur-raspberry/) +- (FR) [Geber.ga: YunoHost, ou l'auto-hébergement à portée de main...](https://www.geber.ga/yunohost-ou-l-auto-hebergement-a-portee-de-main/) +- (EN) [Nequalsonelifestyle.com: Self Hosting Without Self Owning](https://www.nequalsonelifestyle.com/2019/05/04/self-hosting-without-self-owning/) +- (EN) [Skysilk.com: How to Install YunoHost On a Debian VPS](https://www.skysilk.com/blog/2019/how-to-install-yunohost-on-a-debian-vps/) +- (FR) [Alternativelibertaire.org: Auto-hébergement](https://www.alternativelibertaire.org/?Auto-hebergement-1-Un-serveur-a-mon-seul-service) +- (ES) [Sololinux.es: Instalar YunoHost en Debian 9 Stretch](https://www.sololinux.es/instalar-yunohost-en-debian-9-stretch/) +- (FR) [Bog.hugopoi.net: Le cloud maison](https://blog.hugopoi.net/2019/03/30/le-cloud-maison/) + +## Past Events / Workshops + +- (FR) [INFOTHEMA: Présentation de l’avancée du projet YunoHost INFOTHEMA + Présentation du collectif CHATONS](https://www.infothema.fr/begard-samedi-22-juin-2019-seance-infothema/) +- (FR) [Normandie-libre.fr: Héberger ses sites web à la maison](https://normandie-libre.fr/heberger-ses-sites-web-a-la-maison/) +- (FR) [Viregul.fr: Auto-hébergement, pour un Internet décentralisé](https://viregul.fr/auto-hebergement-pour-un-internet-decentralise-le-samedi-25-mai-2019/) +- (EN) [35C3: Hands-on introduction to self-Hosting with YunoHos](https://events.ccc.de/congress/2018/wiki/index.php/Session:Hands-on_introduction_to_self-Hosting_with_YunoHost) +- (FR) [Journées du Logiciel Libre 2019: l'auto-hébergement avec YunoHost](https://pretalx.jdll.org/jdll2019/talk/88GSPH/) + +## YunoHost was cited in : + +* [EXPERIMENTA 2018](https://livestream.com/accounts/26482307/events/8034656/player?width=960&height=540&enableInfoAndActivity=true&defaultDrawer=&autoPlay=true&mute=false) at 57.47 (depuis https://www.experimenta.fr/direct/) +* [Capitole du libre 2017 - « Contributopia », Dégoogliser ne suffit pas](https://www.youtube.com/watch?v=ip6_VMkWpr8&feature=youtu.be&t=4793) +* [Contributopia - Essaimage (Framasoft)](https://contributopia.org/fr/essaimage/) +- (FR) [Triple A: Émission Underscore #144 du 19 mai 2019](https://www.triplea.fr/blog/podcast/emission-underscore-144-du-19-mai-2019/) diff --git a/pages/05.community/45.chatons/chatons.fr.md b/pages/05.community/45.chatons/chatons.fr.md new file mode 100644 index 00000000..183fbf1b --- /dev/null +++ b/pages/05.community/45.chatons/chatons.fr.md @@ -0,0 +1,5 @@ +--- +title: Créer son CHATONS avec YunoHost +template: docs +redirect: 'https://wiki.chatons.org/doku.php/heberger/administration_systeme/yunohost' +--- diff --git a/pages/05.community/45.chatons/chatons.md b/pages/05.community/45.chatons/chatons.md new file mode 100644 index 00000000..6406cce7 --- /dev/null +++ b/pages/05.community/45.chatons/chatons.md @@ -0,0 +1,5 @@ +--- +title: Creating a CHATONS with YunoHost +template: docs +redirect: 'https://wiki.chatons.org/doku.php/heberger/administration_systeme/yunohost' +--- diff --git a/pages/05.community/community.fr.md b/pages/05.community/community.fr.md new file mode 100644 index 00000000..5a297ef5 --- /dev/null +++ b/pages/05.community/community.fr.md @@ -0,0 +1,10 @@ +--- +title: Communauté +template: chapter +taxonomy: + category: docs +routes: + default: '/community' +--- + +# Communauté diff --git a/pages/05.community/community.md b/pages/05.community/community.md new file mode 100644 index 00000000..54a832c6 --- /dev/null +++ b/pages/05.community/community.md @@ -0,0 +1,10 @@ +--- +title: Community +template: chapter +taxonomy: + category: docs +routes: + default: /community +--- + +# Community diff --git a/pages/06.contribute/05.write_documentation/01.writing_documentation_guide/doc_writing_guide.fr.md b/pages/06.contribute/05.write_documentation/01.writing_documentation_guide/doc_writing_guide.fr.md new file mode 100644 index 00000000..296d25f1 --- /dev/null +++ b/pages/06.contribute/05.write_documentation/01.writing_documentation_guide/doc_writing_guide.fr.md @@ -0,0 +1,43 @@ +--- +title: Guide de rédaction de la documentation des applications +template: docs +taxonomy: + category: docs +routes: + default: '/doc_writing_guide' +--- + +## Page de documentation utilisateurs·rices / administrateurs⋅rices + +Ajouter un bouton installer en un clic (comme par exemple : https://yunohost.org/app_piwigo) et un bouton sur le niveau d'intégration de l'application. + +Classement des applications disponibles par tags (genre, Git, gestion associations, courriels, etc.). + +## Quelques usages types et d'ordre général (trame de rédaction) + + + Lorsqu'un lien renvoie vers une page qui n'est pas dans la langue de la page d'origine, il est d'usage d'ajouter `(en)`(Pour un lien qui pointe vers une page en anglais). + + renommer les images dans l'ordre suivant :`nomapplication_descriptif.ext` + +### Trame générale documentation applications + + 1. Logo (dimension 80 pixels de hauteur) + titre de niveau 1. + 1. Bouton installer en un clic, Niveau d'intégration pour chaque type de processeur. + 1. Un index en tête de documentation avec renvoi vers l'ensemble des chapitres de la documentation. + 1. Une présentation générale de l'application et de sa fonction. + 2. Une partie configuration de l'application. + 1. Une partie administration de l'application. + 1. Une partie sur les limitations liées à YunoHost. + 1. Une partie sur les clients desktop (s'il en existe). Lien vers différentes applications tierces s'il en existe plusieurs (lien possible avec le catalogue d'applications [framalibre.org](https://framalibre.org)) ou un lien vers la page concernant les applications desktop si des applications officielles sont fournies. + 1. Une partie avec : + - le lien vers le site officiel + - le lien vers la documentation officielle + - les liens vers le package de YunoHost et issues + +Trame pour la rédaction des pages de documentations : [ici](/app_writing_guide) + +## Feuille de route + +1. Documenter les applications. + 1. Documenter les applications au travail (marqué : work) niveau 8/7/6. + 1. Traduire la page de documentation a minima en français et en anglais. + 1. Faire une PR sur le dépôt de l'application concernée vers la page de documentation. diff --git a/pages/06.contribute/05.write_documentation/01.writing_documentation_guide/doc_writing_guide.md b/pages/06.contribute/05.write_documentation/01.writing_documentation_guide/doc_writing_guide.md new file mode 100644 index 00000000..b853e359 --- /dev/null +++ b/pages/06.contribute/05.write_documentation/01.writing_documentation_guide/doc_writing_guide.md @@ -0,0 +1,42 @@ +--- +title: Guide to writing application documentation +template: docs +taxonomy: + category: docs +routes: + default: '/doc_writing_guide' +--- + +## Users / Administrators documentation pages + +Add a one-click install button (such as https://yunohost.org/app_piwigo) and a button on the application integration level. + +Classification of available applications by tags (genre, Git, association management, e-mails, etc.). + +## Some typical and general uses (writing framework) + + + rename the images in the following order:`description_application.ext`. + +### General frame application documentation + + 1. Logo (dimension 80 pixels high) + level 1 title. + 1. One-click install button, Integration level for each type of processor. + 1. An index at the top of the documentation with cross-references to all the chapters of the documentation. + 1. A general presentation of the application and its function. + 2. A configuration part of the application. + 1. An administration part of the application. + 1. A part on limitations related to YunoHost. + 1. A part on desktop clients (if any). A link to different third-party applications if there are several (possible link to the applications catalgue [framalibre.org](https://framalibre.org)) or a link to the page about desktop applications if official applications are provided. + 1. A part with: + - the link to the official site + - the link to the documentation + - Links to the YunoHost package and issues + +Screen for writing documentation pages: [here](/app_writing_guide) + +## Roadmap + +1. Document applications. + 1. Document applications at work (marked: work) level 8/7/6. + 1. Translate the documentation page at least into French and English. + 1. Do a PR on the application repository diff --git a/pages/06.contribute/05.write_documentation/02.markdown_guide/doc_markdown_guide.fr.md b/pages/06.contribute/05.write_documentation/02.markdown_guide/doc_markdown_guide.fr.md new file mode 100644 index 00000000..7ea595fb --- /dev/null +++ b/pages/06.contribute/05.write_documentation/02.markdown_guide/doc_markdown_guide.fr.md @@ -0,0 +1,260 @@ +--- +title: Guide Markdown +template: docs +taxonomy: + category: docs +routes: + default: '/doc_markdown_guide' +--- + +Le Markdown est un langage de balisage créé en 2004, de nombreux add-on développant les possibilités de ce langage existent. L'objectif de ce guide est de tendre vers l’exhaustivité des possibilités de ce langage de formatage dans le cadre de la documentation de YunoHost et non des langages Markdown en général. + +Markdown permet de formater du texte à l'aide de balises, il permet une lecture *humaine* du texte ; même avec le formatage. Même si un unique bloc note est nécessaire il existe de nombreux logiciels markdowns (Markdown sur [framalibre.org](https://framalibre.org/recherche-par-crit-res?keys=markdown)). Sa prise en main est relativement facile. + +## Les différents niveaux de titres + +En rédigeant des titres comme suit : +```markdown +# Titre de niveau 1 +## Titre de niveau 2 +### Titre de niveau 3 +#### Titre de niveau 4 +##### Titre de niveau 5 +###### Titre de niveau 6 +``` + +Ils apparaissent comme cela : +# Titre de niveau 1 +## Titre de niveau 2 +### Titre de niveau 3 +#### Titre de niveau 4 +##### Titre de niveau 5 +###### Titre de niveau 6 + +## Formatage dans les paragraphes + +Pour taper un retour à la ligne sans créer de nouveau paragraphe, il est nécessaire de taper **deux espaces consécutifs**.Sans cela, le texte continuera à la suite en respectant les contraintes générales du style de la page. + +En rédigeant ça : + +```markdown +Pour du texte en *italique il faut encadrer par un astérisque* `*` +Pour rédiger du **texte en gras par deux astérisques** `**` +On peut aussi ~~barrer le texte~~ en encadrant avec deux tildes `~` +``` + +On peut lire ça : + +Pour du texte en *italique il faut encadrer par un astérisque* `*` +Pour rédiger du **texte en gras par deux astérisques** `**` +On peut aussi ~~barrer le texte~~ en encadrant avec deux tildes `~` + +## Créer des liens + +Pour créer un lien vers un site hors de la documentation de YunoHost : + +```markdown +[Texte à afficher](https://lelien.tld) +``` + +s'affichera comme tel : +[Texte à afficher](https://lelien.tld) + +C'est identique pour les pages de la documentation, excepté que le lien est interne. Le nom de la page est sa route par défault définie dans son *header*: +```markdown +[Page du wiki](/write_documentation) +``` + +Le lien renverra vers la page avec la bonne configuration de langue si la page existe, ou vers une autre langue disponible (l'anglais, généralement) si elle n'existe pas. +[Page du wiki](/write_documentation) + +! Notez qu'il ne faut donc pas préciser le code de langue au début des liens vers d'autres pages de la documentation : `/fr`, `/en`, etc. sont superflus. + +### Créer des ancres +Une ancre permet de faire un lien vers un point précis dans une page, c'est comme ça que fonctionnent les index en haut de page. Pour créer une ancre, il faut insérer du code à l'endroit de l'ancre sous la forme suivante : + +```markdown +Du texte qui ne sait même pas qu'il a une ancre +``` + +Ce qui s'affiche : +Du texte qui ne sait même pas qu'il a une ancre + +Il est aussi possible de directement renvoyer une ancre au titre, en notant le lien en minuscule avec des `-` à la place des espaces. +Il ne reste plus qu'à désigner l'ancre au texte que l'on souhaite rendre interactif : + +```markdown +[Mon ancre qui renvoie vers les listes](#nomdelancre) +[Mon ancre qui renvoie vers le titre des tableaux](#les-tableaux) +``` + +[Mon ancre qui renvoie vers les listes](#nomdelancre) +[Mon ancre qui renvoie vers le titre des tableaux](#les-tableaux) + +## Afficher des images + +Pour afficher des images, le principe est identique aux liens, excepté l'ajout d'un `!` avant le texte à afficher qui est ici considéré comme le texte à afficher en cas d'impossibilité de chargement de l'image. Une description de l'image convient. + +```markdown +![Logo YunoHost](image://logo.png) +``` +![Logo YunoHost](image://logo.png) + + +Il est possible de faire un lien avec une image, exemple : +```markdown +[![Logo YunoHost](image://logo.png)](/write_documentation) +``` +[![Logo YunoHost](image://logo.png)](/write_documentation) + +L'encart de *texte à afficher en cas d'impossibilité de chargement de l'image* entre les crochets dans le lien de l'image n'est pas obligatoire mais fortement recommandé. + +## Formater une citation + +Les citations permettent de mettre en valeur un propos tenu par une autre personne, le wiki gère lui-même la façon dont c'est valorisé. Markdown utilise un chevron fermant, ce symbole : `>`, pour annoncer une citation. Il suffit de les rajouter avant la citation, comme tel : + +```markdown +>Du texte de citation du premier niveau +>qui peut être formaté en différentes lignes + +>> Et une seconde citation +>> avec des doubles chevrons +``` +S'affichera : + +>Du texte de citation du premier niveau +>qui peut être formaté en différentes lignes + +>> Et une seconde citation +>> avec des doubles chevrons + +## Les listes + +Les listes permettent d'afficher une suite de textes dans une présentation facile, c'est ainsi que sont rédigés les index tels que celui de la page de la [documentation contributeur](/contributordoc). + +### Listes ordonnées + +Les listes ordonnées peuvent s'incrémenter autant que vous le désirez, il n'est pas obligé de donner la bonne correspondance au nombre. Il est possible de noter avec des `1.` et installer trois espaces pour marquer l'incrémentation. Pour une meilleure compréhension du texte brut, il peut être pratique d'utiliser les chiffres de manière croissante pour marquer l'incrémentation, mais ce sont bien les trois `espaces` conséquents avant la sous-liste qui désigneront l'incrémentation. + +```markdown +1. Liste 1 +1. Liste 2 +1. liste 3 + 1. Liste 3a + 1. Liste 3b + 1. Liste 3b1 + 1. Liste 3b2 + 1. Liste 3b3 + 1. Liste 1 + 1. Liste 2 + 1. liste 3 +5. Liste 4 +3. Liste 5 +4. liste 6 +``` + +On obtient : + +1. Liste 1 +1. Liste 2 +1. liste 3 + 1. Liste 3a + 1. Liste 3b + 1. Liste 3b1 + 1. Liste 3b2 + 1. Liste 3b3 + 1. Liste 1 + 1. Liste 2 + 1. liste 3 +5. Liste 4 +3. Liste 5 +4. liste 6 + +### Listes non ordonnées + +Pour créer une liste non ordonnée, il faut utiliser les symboles `*`, `+` ou `*`. Cela ne changera pas l'apparence du marqueur dans la restitution du texte. C'est l'incrémentation de la liste qui définira le visuel. Pour une meilleure lecture du texte brut, il peut être pratique d'utiliser les différents symboles pour marquer l'incrémentation, mais ce sont bien les trois espaces avant la sous-liste qui désigneront l'incrémentation. +Comme tel : +```markdown ++ Liste 1 ++ Liste 2 ++ liste 3 + - Liste 3a + - Liste 3b + * Liste 3b1 + * Liste 3b2 + * Liste 3b3 + + Liste 1 + + Liste 2 + + liste 3 +- Liste 4 +* Liste 5 ++ liste 6 +``` + +Ce qui affichera : ++ Liste 1 ++ Liste 2 ++ liste 3 + - Liste 3a + - Liste 3b + * Liste 3b1 + * Liste 3b2 + * Liste 3b3 + + Liste 1 + + Liste 2 + + liste 3 +- Liste 4 +* Liste 5 ++ liste 6 + +## Les tableaux + +Pour créer un tableau, il faut utiliser la barre verticale `|` (appelé 'pipe') et les tirets `-`. Il est obligatoire d'ajouter une ligne de tirets sous la première ligne du tableau. Il n'y a aucune contrainte dans la taille de ce dernier. Il est possible de formater le tableau avec les `:` dans la seconde ligne du tableau, trois options s'offrent à vous : + +| Colonne alignée à gauche | Colonne centrée | Colonne alignée à droite | +|:-------------------------|:---------------:|-------------------------:| +|`:-----` | `:----:` | `-----:` | + +```markdown +| **Un tableau** | Une colonne | Une seconde | Autant que l'on veut | +|:--------------:|:-----------:|:-----------:|:--------------------:| +| Une ligne formatée | | Et du **texte en gras** | Ou en *italique* | +| D'autres lignes | |![une image](image://cd.jpg) | [Ou un lien](/contributordoc) | +``` +Ce qui affichera ça : + +| **Un tableau** | Une colonne | Une seconde | Autant que l'on veut | +|:--------------:|:-----------:|:-----------:|:--------------------:| +| Une ligne formatée | | Et du **texte en gras** | Ou en *italique* | +| D'autres lignes | |![une image](image://cd.jpg) | [Ou un lien](/contributordoc) | + +## Bloc de codes + +Pour afficher du texte en brut, des `blocs de code` peuvent être créés en utilisant l'accent grave `Alt Gr + è` : + +```markdown +Soit inline, par exemple pour mettre en valeur une touche comme `Ctrl` +``` + +ou directement en bloc. +La seule différence est dans la quantité d'accents graves : +Minimum trois accents graves en ouverture et fermeture de bloc et deux accents graves qui encadrent le morceau de texte à formater dans une ligne + +Ce qui donnera au rendu : + +Soit inline, par exemple pour mettre en valeur une touche comme `Ctrl` +''' +```markdown +ou directement en bloc. +La seule différence est dans la quantité d'accents graves : +Minimum trois accents graves en ouverture et fermeture de bloc et deux accents graves qui encadrent le morceau de texte à formater dans une ligne +``` +''' +## Liens utiles + + + La documentation du langage originel Markdown : [daringfireball.net/projects/markdown (en)](https://daringfireball.net/projects/markdown/) + + Tutoriel Markdown sur [markdowntutorial.com](https://markdowntutorial.com) + +## Aller plus loin + +De manière plus générale, pour comprendre comment est formaté un texte il suffit juste d'inspecter le document source avec une application note. Ce n'est pas pour autant que le wiki de YunoHost pourra l'exploiter. Il existe bien d'autres possibilités d'utiliser la syntaxe markdown, n'hésitez pas à ajouter des fonctionnalités manquantes. Si vous avez observé des manques et/ou que vous avez des questions, contactez-nous sur [le forum](https://forum.yunohost.org) ou par message direct sur le salon IRC : **#yunohost** sur [libera.chat](https://libera.chat). diff --git a/pages/06.contribute/05.write_documentation/02.markdown_guide/doc_markdown_guide.md b/pages/06.contribute/05.write_documentation/02.markdown_guide/doc_markdown_guide.md new file mode 100644 index 00000000..fdec1bf2 --- /dev/null +++ b/pages/06.contribute/05.write_documentation/02.markdown_guide/doc_markdown_guide.md @@ -0,0 +1,261 @@ +--- +title: Guide Markdown +template: docs +taxonomy: + category: docs +routes: + default: '/doc_markdown_guide' +--- + +Markdown is a markup language created in 2004, many add-ons developing the possibilities of this language exist. The objective of this guide is to aim for the exhaustiveness of the possibilities of this formatting language within the framework of the YunoHost documentation and not Markdown languages in general. + +Markdown allows text to be formatted using tags, it allows *human* reading of the text; even with formatting. Even if only one notepad is needed there are many markdowns software (Markdown on [framalibre.org (fr)](https://framalibre.org/recherche-par-crit-res?keys=markdown)). It is relatively easy to use. + +## The different levels of titles + +By writing titles as follows: +```markdown +# Level 1 title +## Level 2 title +### Level 3 title +#### Level 4 title +##### Level 5 title +###### Level 6 title +``` + +They appear like this: +# Level 1 title +## Level 2 title +### Level 3 title +#### Level 4 title +##### Level 5 title +###### Level 6 title + +## Formatting in paragraphs + +To type a line break without creating a new paragraph, it is necessary to type **two consecutive spaces**. Otherwise, the text will continue in a row respecting the general constraints of the page style. + +By writing this: + +```markdown +For text in *italic you have to frame it with an asterisk* `*` +To write **bold text by two asterisks** `**` +You can also ~~bar the text~~ by framing it with two tildes `~` +``` + +It reads like this: + +For text in *italic you have to frame it with an asterisk* `*` +To write **bold text by two asterisks** `**` +You can also ~~bar the text~~ by framing it with two tildes `~` + +## Create links + +To create a link to a site outside of the YunoHost documentation: + +```markdown +[Text to display](https://lelien.tld) +``` + +will be displayed as such: +[Text to display](https://lelien.tld) + +It is the same for the documentation pages, except that the link is internal. The page name is its default route, as defined in its page header: +```markdown +[Wiki Page](/write_documentation) +``` + +The link will return to the page with the correct language setting if the page exists, or defaults to the next available language (French, usually): +[Wiki page](/write_documentation) + +! Note that language codes are thus not to be included at the beginning of the links to other documentation pages: `/en`, `/fr`, etc. are superfluous. + +### Create anchors +An anchor allows you to make a link to a specific point in a page, that's how the indexes at the top of the page work. To create an anchor, you need to insert code at the anchor location in the following form : + +```markdown +Text that will be doesn't even know it has an anchor. +``` + +What's displayed is: +Text that will be doesn't even know it has an anchor. + +It is also possible to return an anchor directly to the title, noting the link in lower case with `-`s instead of spaces. +All that remains is to designate the anchor to the text you want to make interactive: + +```markdown +[My Anchor Returns to Lists](#anchorname) +[My Anchor that refers to the title of the tables](#tables) +``` + +[My Anchor Returns to Lists](#anchorame) +[My Anchor that refers to the title of the tables](#tables) + +## Displaying images + +To display images, the principle is the same as for links, except that a `!` is added before the text to be displayed, which is considered here as the text to be displayed if the image cannot be loaded. A description of the image is appropriate. + +```markdown +![YunoHost Logo](image://logo.png) +``` +![YunoHost Logo](image://logo.png) + + +It is possible to make a link with an image, for example: +```markdown +[![YunoHost Logo](image://logo.png)](/write_documentation) +``` +[![YunoHost Logo](image://logo.png)](/write_documentation) + +The insert of *text to be displayed if the image cannot be loaded* between the brackets in the image link is not mandatory but strongly recommended. + +## Format a quote + +Quotes are used to highlight a statement made by another person, the wiki itself manages the way it is highlighted. Markdown uses a closing chevron, this symbol: `>`, to announce a quote. Just add it before the quote, as such: + +```markdown +>First level quotation text +>which can be formatted in different lines + +>> And a second quote +>> with double rafters +``` +Will be displayed: + +>First level quotation text +>which can be formatted in different lines + +>> And a second quote +>> with double rafters + +## Lists + +Lists allow to display a series of texts in an easy presentation, this is how indexes such as the [contributing documentation](/contributordoc) page are written. + +### Ordered lists + +The ordered lists can be incremented as much as you wish, it is not necessary to give the right match to the number. It is possible to write down with `1.` and put in three spaces to mark the increment. For a better understanding of the plain text, it may be fine to use the numbers in ascending order to mark the increment, but it is the three consistent `spaces' before the sub-list that will mark the increment. + +```markdown +1. List 1 +1. List 2 +1. list 3 + 1. List 3a + 1. List 3b + 1. List 3b1 + 1. List 3b2 + 1. List 3b3 + 1. List 1 + 1. List 2 + 1. list 3 +1. List 4 +1. List 5 +1. list 6 +``` + +You get: + +1. List 1 +1. List 2 +1. list 3 + 1. List 3a + 1. List 3b + 1. List 3b1 + 1. List 3b2 + 1. List 3b3 + 1. List 1 + 1. List 2 + 1. list 3 +5. List 4 +3. List 5 +4. list 6 + +### Unordered lists + +To create an unordered list, use the symbols `*`, `+` or `*`. This will not change the appearance of the marker in the text output. It is the incrementing of the list that will define the visual. For a better reading of the plain text, it may be good to use the different symbols to mark the increment, but it is the three spaces before the sub-list that will indicate the increment. +As such: +```markdown ++ List 1 ++ List 2 ++ list 3 + - List 3a + - List 3b + * List 3b1 + * List 3b2 + * List 3b3 + + List 1 + + List 2 + + list 3 +- List 4 +* List 5 ++ list 6 +``` + +This will read: ++ List 1 ++ List 2 ++ list 3 + - List 3a + - List 3b + * List 3b1 + * List 3b2 + * List 3b3 + + List 1 + + List 2 + + list 3 +- List 4 +* List 5 ++ list 6 + +## Tables + +To create an array, use the vertical bar `|` and dashes `--`. It is mandatory to add a line of dashes under the first line of the table. There is no constraint in the size of the table. It is possible to format the array with the `:` in the second row of the array, three options are available: + +| Left aligned column | Centered column | Right aligned column | +|:--------------------|:---------------:|---------------------:| +|`:-----` | `:----:` | `-----:` | + +```markdown +| **One table** | One column | One second | As many as you want | +|:-------------:|:----------:|:----------:|:-------------------:| +| | And formatted line | | And bold text | | Or *italic* | +| More lines | |![An image](image://cd.jpg) | [Or a link](/contributordoc) | +``` +Which would say this: + +| **One table** | One column | One second | As many as you want | +|:-------------:|:----------:|:----------:|:-------------------:| +| | And formatted line | | And bold text | | Or *italic* | +| More lines | |![An image](image://cd.jpg) | [Or a link](/contributordoc) | + +## Code block + +To display plain text, `blocks of code' can be created using the grave accent `Alt Gr + è` : + +```markdown +Either inline, for example to highlight a key like `Ctrl`. +``` + +or directly as a block. +The only difference is in the amount of bass accents: +At least three low pitched accents at the opening and closing of the block and two low pitched accents that frame the piece of text to be formatted in a line. + +Which will give the rendering: + +Either inline, for example to highlight a key like `Ctrl`. +''' +```markdown +or directly as a block. +The only difference is in the amount of bass accents: +At least three low pitched accents at the opening and closing of the block and two low pitched accents that frame the piece of text to be formatted in a line. +``` +''' + +## Useful links + + + The documentation of the original Markdown language: [daringfireball.net/projects/markdown](https://daringfireball.net/projects/markdown/) + + Markdown Tutorial on [markdowntutorial.com](https://markdowntutorial.com) + +## Going further + +In a more general way, to understand how a text is formatted just inspect the source document with a note application. This does not mean that the YunoHost wiki will be able to exploit it. There are many other possibilities to use markdown syntax, feel free to add missing features. If you've noticed some missing features and/or have questions, please contact us on [the forum](https://forum.yunohost.org) or by direct message on the IRC room: **#yunohost** on [libera.chat](https://libera.chat). diff --git a/pages/06.contribute/05.write_documentation/03.git/doc_use_git.fr.md b/pages/06.contribute/05.write_documentation/03.git/doc_use_git.fr.md new file mode 100644 index 00000000..ddcf1516 --- /dev/null +++ b/pages/06.contribute/05.write_documentation/03.git/doc_use_git.fr.md @@ -0,0 +1,52 @@ +--- +title: Propulser une contribution avec Git +template: docs +taxonomy: + category: docs +routes: + default: '/doc_use_git' +--- + +Il est bien sûr possible de contribuer directement sur la documentation de YunoHost, mais ce n’est pas la manière la plus pratique de le faire tant pour le·la contributeur·rice que pour la personne qui va injecter votre contribution dans la documentation. Voici un tutoriel pour comprendre et créer une contribution à la documentation de YunoHost en utilisant l’outil [Git (en)](https://git-scm.com/) et [github.com](http://github.com/) qui est le service de forge Git qui héberge et stocke le code source de YunoHost ainsi que sa documentation. + +## Création d’un compte sur github.com +Pour pouvoir envoyer vos contributions via GitHub, il est nécessaire d’avoir un compte sur GitHub. Pour créer le compte vous aurez besoin d’une adresse e-mail valide à laquelle vous avez accès. GitHub est un outil puissant qui propose de nombreuses fonctionnalités, l’interface peut être un peu effrayante au début. +Vous n’êtes pas obligé·e de donner vos noms et prénoms, vous pouvez utiliser un pseudonyme (lors de l’inscription `Username`). + + +## Forker la documentation de YunoHost dans votre dépôt personnel +Forker le code source permet de créer une nouvelle branche de développement d’un code source de logiciel ou dans le cas présent, le code source de la documentation. En créant une nouvelle branche, cela vous permet de modifier le code et d’ajouter vos contributions sans altérer le code de la branche `master` qui est le rendu public de la documentation. Ce qui vous permet de ne pas devoir tout marquer mais le faire en plusieurs étapes. (Notamment pour les contributions demandant plus de temps de travail). + +Forker un projet sur GitHub est extrêmement simple, il suffit de cliquer sur le bouton Fork, cela créera un nouveau dépôt sur votre espace de GitHub. +![Capture d’écran bouton fork GitHub](image://github_fork_button.png) + +Dans le titre du nouveau dépôt, vous verrez de quelle provenance vient le dépôt, dans le cas présent `YunoHost/doc` +![Capture d’écran titre et sous-titre du dépot](image://github_fork_title.png) + +> **Point de vigilance !** + +> Si vous forkez le dépôt d’un·e autre contributeur·rice que YunoHost, vous aurez les mêmes fichiers. Sauf que quand vous enverrez vos modifications, elles seront envoyées au contributeur et non au dépôt YunoHost. L’avantage est que ça vous permet de développer une autre branche créée par le·la contributeur·rice et ainsi travailler avec une autre personne à une amélioration avant proposition au dépôt principal. +> Il n’est pas possible d’avoir un fork du dépot d’un·e contributeur·rice et le fork dépôt d’origine au même moment dans votre propre dépôt. + +## Modifier et ajouter votre contribution +Une fois le dépôt forké (copié), il faudra créer une nouvelle branche de développement au sein de votre dépôt. C’est à travers cette branche que vous allez modifier les fichiers et ainsi proposer des améliorations de la documentation. Le fait que ce soit une nouvelle branche vous permettra par la suite de faire une Pull Request, c’est à dire une demande d’ajout de vos contributions au sein de la branche `master` qui est la branche principale de la documentation. Les règles de développement sur GitHub changent selon les développeurs de chaque dépôt, certains ont une branche testing dans laquelle il faut proposer les contributions. +Plus d’informations sur ce qu’est une branche sur git-scm.com : [Les branches avec Git - Ce qu’est une branche](https://git-scm.com/book/fr/v1/Les-branches-avec-Git-Ce-qu-est-une-branche). + +## Envoyer votre contribution par une Pull Request +Faire une Pull Request correspond au moment où vous souhaitez partager votre travail avec le reste des contributeurs⋅rices et l’intégrer au dépot master (dépôt principal de YunoHost). Lors de la publication d’une Pull Request, couramment nommée PR, les contributeurs⋅rices pourront amender, commenter, ajouter, corriger votre contribution avant intégration complète au dépôt. + +## Suivre votre contribution et prendre en compte les retours des contributeurs·trices +Lorsque vous avez déjà fait une PR (Pull Request), les modifications de votre branche de développement sur le dépôt Git se rajouteront automatiquement à la PR. Cela ne nécessite aucune action supplémentaire. Vous pouvez aussi intégrer les propositions de modifications de contributeurs, qui lorsqu’ils·elles auditeront le code, peuvent trouver des erreurs ou de nouvelles formulations plus adaptées. + +## Faire remonter des erreurs et des souhaits par des issues +YunoHost dispose d’un dépôt Git spécifique pour le recueil des issues : [github.com/YunoHost/issues](https://github.com/YunoHost/issues) +Une issue aussi appelé ticket, est un problème identifié ou alors un souhait de développement ; dans le cas présent pour la documentation, mais c’est valable pour tout dépôt logiciel. Dans le cadre de la documentation de YunoHost il sera surtout proposé des issues pour le développement de la documentation, les problèmes identifiés étant facilement corrigeables. + +## Aller plus loin avec Git et travailler sur son poste de travail +Utiliser la puissance de Git et ainsi travailler sur son ordinateur personnel, permet entre autres de ne pas avoir à créer de `commit` à chaque enregistrement intermédiaire des pages de documentations modifiées. Cela permet aussi d’utiliser des outils et logiciels qui permettent une distinction plus facile des codes utilisés dans une page de documentation. + +- Ressource en ligne : [docs.microsoft.com - Configurer un référentiel Git localement pour la documentation](https://docs.microsoft.com/fr-fr/contribute/get-started-setup-local) + +## Quelques ressources ailleurs sur le net pour aller plus loin + - [Gérer son code avec Git et GitHub - openclassrooms.com](https://openclassrooms.com/fr/courses/2342361-gerez-votre-code-avec-git-et-github) + - [Interface utilisateurs·trices de Git - git-scm.com](https://git-scm.com/download/gui/linux) diff --git a/pages/06.contribute/05.write_documentation/03.git/doc_use_git.md b/pages/06.contribute/05.write_documentation/03.git/doc_use_git.md new file mode 100644 index 00000000..7726cfa7 --- /dev/null +++ b/pages/06.contribute/05.write_documentation/03.git/doc_use_git.md @@ -0,0 +1,49 @@ +--- +title: Propel a contribution with GitHub +template: docs +taxonomy: + category: docs +routes: + default: '/doc_use_git' +--- + +It is of course possible to contribute directly to the YunoHost documentation, but this is not the most convenient way to do so for both the contributor and the person who will inject your contribution into the documentation. Here is a tutorial to understand and create a contribution to the YunoHost documentation using [Git](https://git-scm.com/) and [github.com](http://github.com/) which is the Git forge service that hosts and stores the YunoHost source code and documentation. + +## Create an account on github.com +To be able to send your contributions via GitHub, you need to have an account on GitHub, to create the account you will need a valid email address that you have access to. GitHub is a powerful tool with many features, the interface can be a little scary at first. +You don't have to give your first and last names, you can use a nickname (when you register `Username`). + +## Fork the YunoHost documentation in your personal repository +To fork the source code allows you to create a new branch of development of a software source code or in this case the source code of the documentation. By creating a new branch, this allows you to modify the code and add your contributions without altering the code of the `master` branch, which is the public release of the documentation. This allows you not to have to write down everything at once, but to do it in several steps. (Especially for contributions that require more time). + +Forking a project on GitHub is extremely simple, just click on the Fork button, this will create a new repository on your GitHub account. +![Screenshot GitHub fork button screenshot](image://github_fork_button.png) +In the title of the new repository, you will see where the repository comes from, in this case `YunoHost/doc`. +![Screenshots title and subtitle of the repository](image://github_fork_title.png) + +> **Point of vigilance !** +> If you forge the repository of another contributor than yunohost, you'll get the same files. Except that when you send your changes, they will be sent to the contributor and not to the yunohost repository. The advantage is that it allows you to develop another branch created by the contributor and work with another person on an improvement before submitting it to the main repository. +> It is not possible to have a fork from a contributor's repository and the original repository fork at the same time in your own account. + +## Modify and add your contribution +Once the repository is forked (copied), you will need to create a new development branch within your repository. It is through this branch that you will modify the files and thus propose improvements to the documentation. The fact that it is a new branch will allow you to make a Pull Request, i.e. a request to add your contributions to the `master` branch, which is the main documentation branch. The development rules on GitHub change depending on the developers of each repository, some have a testing branch in which to offer contributions. +More information on what a branch on git-scm.com is: [Branching with Git - What a branch is](https://git-scm.com/book/fr/v1/Les-branches-avec-Git-Ce-qu-est-une-branche). + +## Send your contribution by a Pull Request +Create a Pull Request when you want to share your work with the other contributors and integrate it into the master repository (YunoHost's main repository). When publishing a Pull Request, commonly called PR, contributors will be able to amend, comment, add, correct your contribution before it is fully integrated into the repository. + +## Track your contribution and take into account feedback from contributors +When you've already create a Pull Request (PR), changes to your development branch in the Git repository will automatically be added to the PR. This doesn't require any additional action. You can also include proposed changes from contributors, who, when they audit the code, may find errors or new, better wording. + +## Bringing up mistakes and wishes through issues +YunoHost has a specific Git repository to collect issues: [github.com/YunoHost/issues](https://github.com/YunoHost/issues) +An issue, also called a ticket, is an identified problem or a development wish; in this case for documentation, but it is valid for any software repository. Within the framework of the YunoHost documentation it will be mainly proposed issues for the development of the documentation, the identified problems being easily correctable. + +## Going further with Git and working on his workstation +Using the power of Git to work on your personal computer means you don't have to create a `commit` each time you save modified documentation pages. It also allows you to use tools and software that make it easier to distinguish between tags used in a documentation page. + +- Online resource: [docs.microsoft.com - Setting up a Git repository locally for documentation](https://docs.microsoft.com/fr-fr/contribute/get-started-setup-local) + +## Some resources elsewhere on the net to go further + - [Managing your code with Git and GitHub - openclassrooms.com](https://openclassrooms.com/fr/courses/2342361-gerez-votre-code-avec-git-et-github) + - [Git User Interface - git-scm.com](https://git-scm.com/download/gui/linux) diff --git a/pages/06.contribute/05.write_documentation/write_documentation.de.md b/pages/06.contribute/05.write_documentation/write_documentation.de.md new file mode 100644 index 00000000..c3cf71c6 --- /dev/null +++ b/pages/06.contribute/05.write_documentation/write_documentation.de.md @@ -0,0 +1,148 @@ +--- +title: Dokumentation schreiben +template: docs +taxonomy: + category: docs +routes: + default: '/write_documentation' +--- + +## Über GitHub + +Die YunoHost-Dokumentation wird über ein [Git-Repository](https://github.com/YunoHost/doc) verwaltet. + +Wenn Sie mit GitHub nicht vertraut sind, oben auf jeder Seite befindet sich die Schaltfläche "Edit", mit der Sie zum GitHub-Online-Editor weitergeleitet werden, mit dem Sie Änderungsvorschläge machen können (Pull Requests, PR). + +Wenn Sie sich jedoch mehrere Bearbeitungen vornehmen oder aktiv mitarbeiten wollen, sollten Sie das Repository forken. Sie können dann alle gewünschten Commits (Änderungen) in Ihrem Fork vornehmen und alle gleichzeitig in dem selben Pull-Requests senden. Die Etikette von GitHub empfiehlt Ihnen, alle damit verbundenen Commits in derselben PR zusammenzufassen. + +Da der Online-Editor das Hochladen von Dateien nicht unterstützt, ist die Verwendung von Git die bevorzugte Methode, wenn Sie Medien (z. B. Bilder) hochladen müssen. + +## Grav + +Unter der Haube wird die Dokumentation vom [Grav CMS](https://getgrav.org/?target=_blank) bereitgestellt. + +Die Struktur des Repositorys wird nachfolgend beschrieben: + +```bash ++ -- config + + -- site.yaml + + -- system.yaml + + -- themes + + -- yunohost-docs.yaml + # Einige Einstellungen für das Dokumentationstheme ++ -- images + # Enthält die auf den Dokumentationsseiten verwendeten Bilder. ++ -- pages + # Das Verzeichnis mit den Dokumentationsseiten. + # Die Seitenhierarchie spiegelt sich in der Verzeichnishierarchie wider. + + -- 00.home + + -- 01.administer + + -- 02.applications + + -- 03.community + + -- 04.contribute ++ -- themes + + -- learn4 + + -- yunohost-docs + # Enthält den Code des Themes, dies erweitert den Code des Learn4-Themes ++ -- .gitignore + # Enthält die Anweisungen, keine sensiblen + # oder nutzlosen Dateien an das Git-Repository zu senden ++ -- README.md +``` + +!!!! Weitere Informationen zu den Funktionen von Grav finden Sie in der [Dokumentation](https://learn.getgrav.org?target=_blank). Der Rest dieser Seite zeigt Ihnen einige spezifische Anweisungen, die Sie zur Dokumentation von YunoHost beachten sollten.. + +## Grav-Header + +Jede Seite beginnt mit einem Header, der Grav Anweisungen zur Verarbeitung gibt. Werfen wir einen Blick in die Kopfzeile dieser Seite: + +``` +--- +title: Dokumentation schreiben +template: docs +taxonomie: + category: docs +routes: + default: '/write_documentation' +--- +``` +1. Die Kopfzeile beginnt und endet mit einer Zeile, die `---` enthält +2. Der `title:` verwaltet die erste Titel-Überschrift der Seite, ihren Namen im Navigationsmenü links und den Namen des Browser-Tab`s +3. Die Punkte `template` und `taxonomie` sollten immer unverändert bleiben. Sie weisen Grav an, das richtige Theme zu verwenden und die Seiten richtig auf zu bauen. +4. Die Schlüssel `routes` und `default` machen die Seite standardmäßig unter `https://yunohost.org/docs/write_documentation` verfügbar, um sie nicht unter `https://yunohost.org/docs/contribute/write_documentation` aufrufen zu müssen, wo sie in der Verzeichnishierarchie gespeichert ist. + +## Syntax + +Sie können die Markdown-Syntax verwenden. Weitere Informationen finden Sie in der [Dokumentation](/doc_markdown_guide). + +! Beachten Sie, dass Sprachcodes nicht am Anfang der Links zu anderen Dokumentationsseiten stehen dürfen: `/en`,` /fr` usw. sind überflüssig. + +Um die Markdown-Funktionen zu verbessern, werden zusätzliche Plugins in Grav installiert. In der eigenen Dokumentation auf GitHub erfahren Sie, wie Sie sie verwenden. +``` +anchors +external_links +flex-objects +highlight +image-captions +markdown-notices +presentation +presentation-deckset +shortcode-core +``` + +## Sonderseiten + +Einige Seiten der Dokumentation werden automatisch oder dynamisch generiert. + +| Seite | Pfad | Anmerkungen | +| --------------- | ------- | ------- | +| Apps-Katalog | `/pages/02.applications/01.catalog/apps.md` | Ruft [app.json](https://github.com/YunoHost/apps/blob/master/apps.json?target=_blank) ab und verarbeitet sie | +| Apps-Helfer | `pages/04.contribute/04.packaging_apps/11.helpers/package_apps_helpers.md` | Erstellt von diesem [Skript](https://github.com/YunoHost/yunohost/blob/dev/doc/generate_helper_doc.py?target=_blank) aus dieser [Vorlage](https://github.com/YunoHost/yunohost/blob/dev/doc/helper_doc_template.md?target=_blank) | +| Pro-App-Dokumentation | `pages/02.applications/02.docs/docs.md` | Listet die Unterseiten im selben Verzeichnis auf, deren Header `taxonomy.category: docs, apps` enthält + +## Hosten Sie Ihre eigene Testdokumentation + +! Diese Anweisungen müssen noch vollständig getestet werden. Bitte helfen Sie uns, indem Sie Probleme melden, die Sie möglicherweise mit ihnen haben. + +0. Forken Sie das YunoHost Dokumentations Repository +1. Installieren Sie das YunoHost-Paket Grav : `yunohost app install grav` +2. Installieren Sie die folgenden Plugins durch das Grav Admin-Panel oder CLI: +``` +anchors +breadcrumbs +external_links +feed +flex-objects +git-sync +highlight +image-captions +langswitcher +markdown-notices +presentation +presentation-deckset +shortcode-core +tntsearch +``` +3. Git Sync Plugin einrichten. + 1. Melden Sie sich mit Ihren Anmeldeinformationen auf GitHub an + 2. Legen Sie das Repo fest, z. B. `https://github.com/username/doc`. + 3. Kopieren Sie die URL des Webhooks, z. B. `https://grav.example/_git-sync-ca25c111f0de`. + 4. Grundeinstellungen> Ordner im Sync: `pages`` images` `themes` + 5. Git Repo-Einstellungen> Benutzer nicht erforderlich: Aktiviert + 6. Git Repo-Einstellungen> Web Hooks-Geheimnis: Aktiviert + 7. Erweiterte Einstellungen> Lokaler Branch:`master` + 8. Erweiterte Einstellungen> Remote Branch: `master` + (Sie können` master` ändern, wenn Sie an einem anderen Zweig arbeiten möchten, aber vergessen Sie nicht, ihn zuerst auf GitHub zu erstellen.) + 9. Erweiterte Einstellungen> Committer-Name: Ihr GitHub-Benutzername + 10. Erweiterte Einstellungen> Committer-E-Mail : Ihre E-Mail auf GitHub +4. Lokale Kopie speichern und zurücksetzen +5. Konfigurieren Sie `commits` und `tree` in `config/theme/yunohost-docs.yaml`, so das sie auf Ihren Fork des Repositorys verweisen. +6. Stellen Sie sicher, dass die Verzeichnisse `user/pages/01.home` und `user/pages/02.typography` gelöscht werden. +7. Konfiguration> System: + 1. Sprache> Unterstützt: `en` `fr` `de` `es` `ar` + 2. Sprache> Standardsprache überschreiben:` en` + 3. Sprache> Sprache vom Browser einstellen: `Ja` + 4. HTTP-Header> Etag: `Ja` + 5. Erweitert> Blueprint-Kompatibilität:` Ja` + 6. Erweitert> YAML-Kompatibilität: `Ja` + 7. Erweitert> Twig-Kompatibilität:` Ja` diff --git a/pages/06.contribute/05.write_documentation/write_documentation.fr.md b/pages/06.contribute/05.write_documentation/write_documentation.fr.md new file mode 100644 index 00000000..7249951e --- /dev/null +++ b/pages/06.contribute/05.write_documentation/write_documentation.fr.md @@ -0,0 +1,150 @@ +--- +title: Rédaction de la documentation +template: docs +taxonomy: + category: docs +routes: + default: '/write_documentation' +--- + +## Via GitHub + +La documentation de YunoHost est gérée sur un [dépôt Git](https://github.com/YunoHost/doc). + +Si vous n'êtes pas familier avec GitHub, il y a un bouton "Éditer" en haut de chaque page qui vous redirigera vers l'éditeur en ligne de GitHub et qui vous aidera à proposer vos modifications (appelées *Pull Requests*, PR). + +Cependant, si vous êtes lancé sur une série de contributions, vous devriez faire un *fork* du dépôt sur GitHub. Vous pouvez ensuite faire toutes les modifications (*commits*) que vous voulez sur votre dépôt, et les soumettre tous ensemble dans la même PR. L'étiquette sur GitHub vous encouragerait à rassembler dans une même PR tous les *commits* d'une même thématique. + +Puisque l'éditeur en ligne ne permet pas d'ajouter des fichiers, utiliser Git par la ligne de commande est la méthode recommandée si vous voulez ajouter des médias (comme des images). + +## Grav + +Sous le capot, la documentation est déployée avec le [CMS Grav](https://getgrav.org/?target=_blank). + +La structure du dépôt est décrite ici: + +```bash ++-- config + +-- site.yaml + +-- system.yaml + +-- themes + +-- yunohost-docs.yaml + # Quelques paramètres pour le thème de la documentation ++-- images + # Contains the images used in the documentation pages. ++-- pages + # The directory containing the documentation pages. + # The pages hierarchy is reflected by the directory hierarchy. + +-- 00.home + +-- 01.administrate + +-- 02.applications + +-- 03.community + +-- 04.contribute ++-- themes + +-- learn4 + +-- yunohost-docs + # Contient le code du thème, qui est une extension du thème Learn4 ++-- .gitignore + # Contient les instructions pour ne pas envoyer de fichier + # sensible ou inutile vers le dépôt Git ++-- README.md +``` + +!!!! Pour en apprendre plus sur les fonctionnalités de Grav, vous pouvez consulter sa [documentation](https://learn.getgrav.org?target=_blank) (en anglais). Le reste de cette page donne quelques consignes spécifiques pour contribuer à la documentation de YunoHost. + +## L'en-tête des pages Grav + +Chaque page commence par un en-tête qui donne les instructions à Grav sur comment la traiter. Regardons l'en-tête de cette page : + +``` +--- +title: Rédaction de la documentation +template: docs +taxonomy: + category: docs +routes: + default: '/write_documentation' +--- + +``` + +1. L'en-tête commence et finit par une ligne contenant `---` ; +2. La clé `title` gère le premier titre de la page, son nom dans le menu de navigation à gauche, et son nom dans l'onglet du navigateur ; +3. Les clés `template` et `taxonomy` doivent toujours être inclues et laissées telles quelles. Elles informent Grav sur quel thème appliquer aux pages, et permettent de les ordonner correctement. +4. La clé `routes` et son enfant `default` font que la page est accessible par défaut à l'adresse `https://yunohost.org/docs/write_documentation` au lieu de devoir la chercher à l'adresse `https://yunohost.org/docs/contribute/write_documentation`, qui correspond à son emplacement réel dans la hiérarchie des dossiers. + +## Syntaxe + +Vous pouvez utiliser la syntaxe Markdown, consultez la page de [documentation dédiée](/doc_markdown_guide) pour plus d'information. + +! Notez qu'il ne faut pas préciser le code de langue au début des liens vers d'autres pages de la documentation : `/fr`, `/en`, etc. sont superflus. + +Pour étendre les fonctionnalités de Markdown, des extensions ont été ajoutées à Grav. Vous pouvez consulter leur propre documentation sur GitHub pour découvrir comment vous en servir. +```text +anchors +external_links +flex-objects +highlight +image-captions +markdown-notices +presentation +presentation-deckset +shortcode-core +``` + +## Pages spéciales + +Quelques pages de la documentation sont générées automatiquement ou dynamiquement. + +| Page | Chemin | Notes | +|---------------|--------|-------| +| Catalogue d'applications | `/pages/02.applications/01.catalog/apps.md` | Récupère et traite le fichier [app.json](https://github.com/YunoHost/apps/blob/master/apps.json?target=_blank) | +| Apps helpers | `pages/04.contribute/04.packaging_apps/11.helpers/packaging_apps_helpers.md` | Générée par ce [script](https://github.com/YunoHost/yunohost/blob/dev/doc/generate_helper_doc.py?target=_blank), à partir de ce [canevas](https://github.com/YunoHost/yunohost/blob/dev/doc/helper_doc_template.md?target=_blank) | +| Documentation des apps | `pages/02.applications/02.docs/docs.md` | Liste les sous-pages du même dossier qui ont les clés `taxonomy.category: docs, apps` dans leur en-tête | + +## Hébergez votre propre documentation de test + +! Ces instructions ne sont pas encore complètement testées. Aidez-nous en nous rapportant tout problème que vous rencontriez. + +0. *Fork* le dépôt de la documentation YunoHost sur GitHub +1. Installez l'app Grav pour YunoHost : `yunohost app install grav` +2. Installez les extensions suivantes via l'admin ou la ligne de commande de Grav : +```text +anchors +breadcrumbs +external_links +feed +flex-objects +git-sync +highlight +image-captions +langswitcher +markdown-notices +presentation +presentation-deckset +shortcode-core +tntsearch +``` +3. Paramétrez l'extension Git Sync. + 1. Choisissez `GitHub` et vos identifiants GitHub + 2. Entrez l'adresse de votre *fork*, par exemple `https://github.com/username/doc` + 3. Copiez l'URL du webhook, par exemple `https://grav.example/_git-sync-ca25c111f0de` + 4. "Basic settings" > "Folders to Sync" : `pages` `images` `themes` + 5. "Git Repo Settings" > "User not required" : Enabled + 6. "Git Repo Settings" > "Web Hooks secret" : Enabled + 7. "Advanced settings" > "local branch" : `master` + 8. "Advanced settings" > "remote branch" : `master` +(vous pouvez changer `master` en une autre branche si vous le souhaitez, mais n'oubliez pas de la créer au préalable sur GitHub) + 9. "Advanced settings" > "Committer Name" : votre nom d'utilisateur sur GitHub + 10. "Advanced settings" > "Committer Email" : votre email renseigné sur GitHub + 11. Enregistrez et cliquez sur "Reset Local Copy" + 12. Renseignez les adresses dans les clés `commits` et `tree` dans `config/themes/yunohost-docs.yaml` pour quelles pointent vers l'adresse de votre *fork* sur GitHub +4. Assurez-vous que les dossiers `user/pages/01.home` et `user/pages/02.typography` sont supprimés. +5. Dans l'administration de Grav, dans "Configuration" > "System" : + 1. "Language" > "Supported" : `en` `fr` `de` `es` `ar` + 2. "Language" > "Override Default Language" : `en` + 3. "Language" > "Set language from browser" : `Yes` + 4. "HTTP Headers" > "Etag" : `Yes` + 5. "Advanced" > "Blueprint Compatibility" : `Yes` + 6. "Advanced" > "YAML Compatibility" : `Yes` + 7. "Advanced" > "Twig Compatibility" : `Yes` diff --git a/pages/06.contribute/05.write_documentation/write_documentation.md b/pages/06.contribute/05.write_documentation/write_documentation.md new file mode 100644 index 00000000..a1fbc4b2 --- /dev/null +++ b/pages/06.contribute/05.write_documentation/write_documentation.md @@ -0,0 +1,151 @@ +--- +title: Write documentation +template: docs +taxonomy: + category: docs +routes: + default: '/write_documentation' +--- + + +## Via GitHub + +The YunoHost documentation is managed through a [Git repository](https://github.com/YunoHost/doc). + +If you are not familiar with GitHub, there is an "Edit" button at the top of each page that will redirect you to the GitHub online editor that will help you make change proposals (Pull Requests, PR). + +However, if you are on an editing spree, you should fork the repository. You can then make all the commits (changes) you want on your forked repository, and submit them all at once in the same pull requests. GitHub's etiquette would advise you to gather in the same PR all related commits. + +Because the online editor doesn't support uploading files, using Git is the prefered way if you need to upload media (e.g. images). + +## Grav + +Under the hood, the documentation is served by the [Grav CMS](https://getgrav.org/?target=_blank). + +The structure of the repository is described below: + +```bash ++-- config + +-- site.yaml + +-- system.yaml + +-- themes + +-- yunohost-docs.yaml + # Some settings for the documentation theme ++-- images + # Contains the images used in the documentation pages. ++-- pages + # The directory containing the documentation pages. + # The pages hierarchy is reflected by the directory hierarchy. + +-- 00.home + +-- 01.administer + +-- 02.applications + +-- 03.community + +-- 04.contribute ++-- themes + +-- learn4 + +-- yunohost-docs + # Contains the theme's code, which extends Learn4 theme's code ++-- .gitignore + # Contains the instructions to not send sensitive + # or useless files over to the Git repository ++-- README.md +``` + +!!!! To learn more about Grav's features, you can head over to its [documentation](https://learn.getgrav.org?target=_blank). The remainder of this page will show you some specific instructions to contribute to YunoHost's documentation. + +## Grav header + +Each page starts with a header that gives instructions to Grav on how to process them. Let us have a look into the header of this page: + +``` +--- +title: Write documentation +template: docs +taxonomy: + category: docs +routes: + default: '/write_documentation' +--- + +``` + +1. The header starts and ends with a line containing `---` +2. The `title` key manages the first heading title of the page, its name in the navigation menu on the left, and its name in the browser tab +3. `template` and `taxonomy` keys should always be left as is. They instruct Grav to use the proper theme and order the pages properly. +4. `routes`' `default` key makes the page available by default on `https://yunohost.org/docs/write_documentation` instead of needing to reaching it on `https://yunohost.org/docs/contribute/write_documentation`, which is where it is stored in the directory hierarchy. + +## Syntax + +You can use Markdown syntax, refer to the [documentation](/doc_markdown_guide) for further information. + +! Note that language codes are not to be included at the beginning of the links to other documentation pages: `/en`, `/fr`, etc. are superfluous. + +To improve Markdown capabilities, additional plugins are installed in Grav. You can refer to their own documentation on GitHub to see how to use them. +```text +anchors +external_links +flex-objects +highlight +image-captions +markdown-notices +presentation +presentation-deckset +shortcode-core +``` + +## Special pages + +Some pages of the documentation are automatically or dynamically generated. + +| Page | Path | Notes | +|---------------|-------|-------| +| Apps catalog | `/pages/02.applications/01.catalog/apps.md` | Retrieves and processes [app.json](https://github.com/YunoHost/apps/blob/master/apps.json?target=_blank) | +| Apps helpers | `pages/04.contribute/04.packaging_apps/11.helpers/packaging_apps_helpers.md` | Generated by this [script](https://github.com/YunoHost/yunohost/blob/dev/doc/generate_helper_doc.py?target=_blank), from this [template](https://github.com/YunoHost/yunohost/blob/dev/doc/helper_doc_template.md?target=_blank) | +| Per-app documentation | `pages/02.applications/02.docs/docs.md` | Lists the subpages in the same directory which have `taxonomy.category: docs, apps` in its header | + +## Host your own testing documentation + +! These instructions are yet to be fully tested. Please help us by reporting any issue you may have with them. + +0. Fork YunoHost documentation repository +1. Install Grav's YunoHost package: `yunohost app install grav` +2. Install the following plugins through Grav's admin panel or CLI: +```text +anchors +breadcrumbs +external_links +feed +flex-objects +git-sync +highlight +image-captions +langswitcher +markdown-notices +presentation +presentation-deckset +shortcode-core +tntsearch +``` +3. Set-up Git Sync plugin. + 1. Choose GitHub and your credentials on GitHub + 2. Set the repo, e.g. `https://github.com/username/doc` + 3. Copy the Webhook's URL, e.g. `https://grav.example/_git-sync-ca25c111f0de` + 4. Basic settings > Folders to Sync: `pages` `images` `themes` + 5. Git Repo Settings > User not required: Enabled + 6. Git Repo Settings > Web Hooks secret: Enabled + 7. Advanced settings > local branch: `master` + 8. Advanced settings > remote branch: `master` +(you can change `master` if you want to work on another branch, but do not forget to create it on GitHub first) + 9. Advanced settings > Committer Name: your GitHub username + 10. Advanced settings > Committer Email: your email saved on GitHub + 11. Save and Reset Local Copy + 12. Set `commits` and `tree` keys in `config/themes/yunohost-docs.yaml` to point to your fork's repository +4. Make sure `user/pages/01.home` and `user/pages/02.typography` directories are deleted. +5. Configuration > System: + 1. Language > Supported: `en` `fr` `de` `es` `ar` + 2. Language > Override Default Language: `en` + 3. Language > Set language from browser: `Yes` + 4. HTTP Headers > Etag: `Yes` + 5. Advanced > Blueprint Compatibility: `Yes` + 6. Advanced > YAML Compatibility: `Yes` + 7. Advanced > Twig Compatibility: `Yes` diff --git a/pages/06.contribute/10.packaging_apps/10.manifest/docs.md b/pages/06.contribute/10.packaging_apps/10.manifest/docs.md new file mode 100644 index 00000000..4e0e226f --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/10.manifest/docs.md @@ -0,0 +1,171 @@ +--- +title: 'Writing the app manifest' +template: docs +taxonomy: + category: + - docs +routes: + default: /packaging_manifest +--- + +The app's `manifest.toml` can be seen as the ID card of the app. It declares various basic metadata such as the id, name, description of the app, its version, install questions to be asked to the admin prior to installation, etc. + +In this page, the data are described according to a somewhat dummy app called `helloworld` + +!!! If you want to convert an application from the packaging v1 to v2 format, [please see here](/packaging_v2)! + +## General information + +```toml +packaging_format = 2 +id = "helloworld" +name = "Hello World" +description.en = "A dummy basic app to illustrate YunoHost's app packaging." +description.fr = "Une app simple et bidon pour illustrer comme le packaging d'app de YunoHost fonctionne" + +version = "0.1~ynh1" + +maintainers = ["alexAubin"] +``` + +- `packaging_format` (`int`) is the packaging version format used to package this app. Newly packaged apps are strongly encouraged to use the new "v2" format (starting with YunoHost 11.1) while older apps may still be in "v1" format. +- `id` (`str`) is expected to be lower-case alphanumeric (and possibly `-`). This is what will be used for instance in the syntax `yunohost app install `. This will also be the name of various folder or conf files such as `/etc/yunohost/apps/` or `/etc/nginx/conf.d/.d/.conf` (if applicable), and a dedicated system user. +- `name` (`str`) is the display name of the app, shown for example in the webadmin UI or user portal. It is limited to 22 chars (though not sure why this number?). +- `description` (`dict` of `lang code`->`str`) contains *short*, *concise* descriptions of the app in different languages (at least `en`). It is limited to 150 chars. It will be displayed on the app catalog and should allow people to understand what this app is about at a glance. A more extensive description of the app can be provided in `doc/DESCRIPTION.md`. +- `version` (`str`) is composed of the *upstream* version of the app shipped, and an `~ynhX` suffix. Changing this version is what effectively triggers an available upgrade for YunoHost instances which installed this package (hence no upgrade will be displayed as available if you forget to change it). The point of the `~ynhX` suffix is to have a way to increment the version when commiting changes unrelated to the upstream but still trigger an upgrade. +- `maintainers` (`list` or `str`) may allow to declare which person should be the referring person for this package (though packages are often maintained collectively and not really used in practice). This should contain a list of easily identifiable persons (eg your Github or Matrix username) + +## Upstream section + +This section is meant to provide various metadata about the app upstream such that YunoHost admins can easily obtain further information regarding this app (or, kinda important, try the upstream's demo before deciding to install it). + +Apart from the license, all fields are *optional* and should only be provided if they are relevant (e.g. don't provide `website` if the upstream project has no website...) + +```toml +[upstream] +license = "WTFPL" +website = "https://www.hello-world.com/" +code = "https://github.com/octocat/Hello-World" +demo = ... +admindoc = ... +userdoc = ... +``` + +- `license` (`str`) : the license code of the *upstream* project. (Note that only apps based on free software will be accepted in the official YunoHost app catalog.). The license code should be [a valid SPDX identified](https://spdx.org/licenses/). +- (optional) `website` (`url`) : the url of the upstream project's website, if there is indeed a website (please don't just copypasta the git repo url) +- (optional) `demo` (`url`) : an url where people can try out the app before installing it (ideally maintained by the upstream project) +- (optional) `code` (`url`) : the url of the upstream project's code repository, which is very much expected to exist for free software ... but may not exist for special "no upstream" apps ;) +- (optional) `admindoc` (`url`) : the url of the *upstream* project's admin documentation, which may help YunoHost admins with adminstrating the app (YunoHost-specific documentation can be provided in `doc/ADMIN.md`). +- (optional) `userdoc` (`url`) : the url of the *upstream* project's user documentation, which may help YunoHost end-users with effectively using the app. +- (optional) `cpe` (`str`) corresponds to the [Common Platform Enumerations code in NIST db](https://nvd.nist.gov/products/cpe). For example for Wekan this is `cpe:2.3:a:wekan_project:wekan`. Not really used at the moment, but may be used in the future to check for known vulnerabilities (CVE) in the app catalog. + +## Integration section + +This section is meant to contain info related to the relation between the app and YunoHost, or things like typical resource usage. + +```toml +[integration] +yunohost = ">= 11.1" +architectures = "all" +multi_instance = false +ldap = "not_relevant" +sso = "not_relevant" +disk = "1M" +ram.build = "1M" +ram.runtime = "1M" +``` + +- `yunohost` (`str`) contains the minimum YunoHost version required for this app to work. +- `architectures` : `"all"` OR a list of supported archs using the `dpkg --print-architecture` nomenclature, i.e. among : `amd64` (= x86 64bit), `i386` (= x86 32bit), `armhf` (= ARM 32bit), `arm64` (= ARM 64bit) +- `multi_instance` (`bool`) : wether or not the app supports being installed multiple time (in which case, during installation, the actual app id is not just the `id` of the manifest, but something like `hellowold__2`, `helloworld__3`, etc. for subsequent installs) +- `ldap` (`bool` OR `"not_relevant"`) : not to confused with the `sso` key : this corresponds to wether or not the app is configured to use YunoHost's LDAP DB as the user account DB. This should be set to `"not_relevant"` if and only if there is no notion of user account for this app (for example, Hextris). LDAP integration is often a prerequisite for the SSO to work. +- `sso` (`bool` OR `"not_relevant"`) : not to be confused with the `ldap` key : this corresponds to wether or not a user is *automatically logged-in* on the app when logged-in on the YunoHost portal. This should be set to `"not_relevant"` if and only if there is no notion of user account for this app (for example, Hextris). +- `disk` (size) : an *estimate* minimum disk requirement. For example: 20M, 400M, 1G, ... +- `ram.build` (size) : an *estimate* minimum ram requirement when building the app (this may be way different than `ram.runtime` because some apps have a peak 1~2G RAM when building sometimes...). For example: 50M, 400M, 1G, ... +- `ram.runtime` (size) : an *estimate* minimum ram requirement when the app is active and running. For example: 50M, 400M, 1G, ... + + +## Install questions + +This section contains questions that should be asked to the admin prior to starting the actual install + +```toml +[install] + [install.domain] + # this is a generic question - ask strings are automatically handled by YunoHost's core + type = "domain" + + [install.path] + # this is a generic question - ask strings are automatically handled by YunoHost's core + type = "path" + default = "/helloworld" + + [install.init_main_permission] + # this is a generic question - ask strings are automatically handled by YunoHost's core + type = "group" + default = "visitors" + + [install.prefered_pet] + ask.en = "Do you prefer cats or dogs?" + help.en = "Think carefully!" + type = "string" + choices.cat = "Cats :3 !" + choices.dog = "Doggos <3" + choices.both = "OMG Both ! I can't choose !" +``` + +- `domain` and `path` (with `type = "domain"/"path"`) are classic questions to allow the admin to choose where the app is installed (in terms of web url endpoint) + - e.g. if the admin answers `domain.tld` and `/foobar`, the app will be available under `domain.tld/foobar` + - some webapp do require a full dedicated domain and do not support the "subpath" install scheme. In that case, you typically want to remove the `path` question entirely + - these questions are part of YunoHost's generic app questions and therefore you do not need to define the `ask.en` strings that contain the actual question displayed in the UI along the line of "Choose a domain to install this app on" +- `init_main_permission` is also a classic question (similar to `is_public` in v1 packaging) and define what user group will be able to access the app after it is installed. Typical answer are : `visitors` (= everybody including anonymous users, the app is "public"), `all_users` (= only people with a YunoHost account, the app is "private"), or any custom user group that may have been defined by the YunoHost admins prior to the install. +- `prefered_pet` is a custom question: + - `ask.en` defines the human-readable question to be asked (at least the english version) + - `help.en` is an optional additional message to provide further info about this question + - `type` is the type of question, in this case `string` + - in this example, we don't want a free user input but choosing between `cat`, `dog` or `both` (with proper human-readable versions of these choices) + - this will later automatically create a yunohost app setting named `prefered_pet` + - .. and in the bash install script, the bash variable will automatically be available `$prefered_pet` with the chosen value + +### Regarding install question types + +FIXME : This should be way more documented in a separate section (and is also related to config panels...) + +The full list of question types is : `string`, `text`, `select`, `tags`, `email`, `url`, `date`, `time`, `color`, `password`, `path`, `boolean`, `domain`, `user`, `group`, `number`, `range`, `alert`, `markdown`, `file`, `app`. + +`password`-type questions have special behavior and are NOT automatically saved as setting (user-chosen password should ideally not be stored, at least not hashed...) + +Every install question is not necessarily mandatory (e.g. a question to propose to add an api key for a better user experience, although the app still works without). To make those questions optional, just write `optional = true`. + +## Resource system + +The resource section corresponds to recurring app needs that are to be provisioned/deprovisioned by the core of YunoHost. They include for example: downloading the app's sources, creating a system user, installing apt dependencies, creating the install dir, creating the data dir, finding an available internal port, configuring permissions, initializing an SQL database... Each resource is to be provisioned *before* running the install script, deprovisioned *after* the remove script, and automatically upgraded if needed before running the upgrade script (or provisionned if introduced in the new app version, or deprovisioned if removed w.r.t. the previous app version) + +```toml +[resources] +```toml + [resources.sources.main] + url = "https://some.domain/url/where/to/download/the/app/sources.tar.gz" + sha256 = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + + [resources.system_user] + + [resources.install_dir] + + [resources.permissions] + main.url = "/" + + [resources.apt] + packages = "nyancat, lolcat, sl" +``` + +In this example: +- `sources.main`: the URL+checksum from which the app sources will be downloaded + validated +- `system_user`: a system (unix) user will be created for this app, using the app id as username. +- `install_dir`: an install dir will be initialized, named `/var/www/$app` by default. Additional `owner` and `group` property allow to change the owner/group and r/w/x permissions on the created folder. +- `permissions`: an SSOwat `$app.main` permission will be initialized such that the SSO allows access to the app's endpoint according to the chosen `init_main_permission` question. The `main.url = "/"` is here to tell that the main endpoint is the "root" of the app, that is `https://domain.tld/helloworld/` if the app is installed with `domain=domain.tld` and `path=/helloworld` +- `apt`: the packages `nyancat`, `lolcat`, `sl` will be installed with `apt`. These are just dummy apt dependencies to illustrate the syntax. + +### List of app resources + +The full documentation on resources is available [here](/packaging_apps_resources). diff --git a/pages/06.contribute/10.packaging_apps/20.scripts/scripts.md b/pages/06.contribute/10.packaging_apps/20.scripts/scripts.md new file mode 100644 index 00000000..6901d3bc --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/20.scripts/scripts.md @@ -0,0 +1,156 @@ +--- +title: Writing app scripts +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_scripts' +--- + + +App scripts are the essential logic defining what happens when an app is `install`ed, `remove`d, `upgrade`d, `backup`ed, or `restore`d. They are written in [Bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell)) which is the same stuff you type in interactive mode in a terminal, though we added a bunch of custom YunoHost functions that we call `helpers` to standardize many common operations - for example adding the nginx configuration. + +Note that starting from packaging v2, the logic or what happens when an app is installed, etc. is also contained partially in the resource configuration in the `manifest.toml`. + +In the `scripts` folder of an app, you can expect to find: + +```text +manifest.toml +scripts/ + - _common.sh # Some "common" definition, typically custom helpers or global variables used accross all scripts + - install # The install procedure + - remove # The remove procedure + - upgrade # The upgrade procedure + - backup # The backup procedure - in fact it only "declares" what should be backup / no actual real backup happens at this point except dumping SQL databases + - restore # The restore procedure + - change_url # Some apps do also provide a change url script, which corresponds to changing the URL endpoint of the app, which may be as simple as changing the nginx conf, or may involve significant changes in the app DB +``` + +Here is an example of the simple install script for the `helloworld` app: + +```bash +#!/bin/bash + +# This is where we load the official YunoHost helpers +source /usr/share/yunohost/helpers + +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +# This is where we would usually fetch the .tar.gz archive +# from the upstream and extract it into our local install dir +#================================================= +# At the beginning of each major operation, we call this helper +# that creates a progress bar +ynh_script_progression --message="Setting up source files..." --weight=1 + +echo "Hello world!" > $install_dir/index.html +chown -R www-data: "$install_dir" + +#================================================= +# NGINX CONFIGURATION +# This is where the nginx conf snippet for the app is created using the +# configuration template provided in conf/nginx.conf +# and added to /etc/nginx/conf.d/$domain.d/$app.conf +#================================================= +ynh_script_progression --message="Configuring nginx web server..." --weight=1 + +ynh_add_nginx_config +``` + +Note that the scripts are run with the `set -eu` options (except for the remove script), which means that any failing command or use of non-existing variable will trigger an error and stop the script execution. + + +## Variables available in a script context + +Special variables are automatically defined in the context of a script: + +- `$app` is the app ID. It will typically be the ID from the app's manifest.toml, for example `helloworld`, but will be `helloworld__2`, `__3` etc for multi-instance installs. +- During install, answers to install questions are automatically available as bash variables. For example, the `$domain` setting corresponds to the `domain` question, same for `$prefered_pet`, etc... Note that - apart from special questions such as `init_main_permission` or user-provided passwords - they are also automatically saved as settings (cf next section). +- During other scripts, all app settings are also loaded and automatically available. +- Note that some settings are automatically created/updated by app ressources. For example, the `install_dir` setting will automatically be available too and corresponds to typically `/var/www/$app` +- In the `change_url` context, variables called `new_domain`, `new_path`, `old_domain`, `old_path` will be available, as well as `change_domain` and `change_path` equal to `0` (false) or `1` (true) depending if the domain / path changed + + +## Setting system + +Application often need to store long term information in between scripts triggered by the admin. For this, YunoHost has a key-value store for each application called "setting" and is stored in `/etc/yunohost/apps/$app/settings.yml`. + +Apps can interact with this key value store in this way: + +```bash +# Retrieve a setting into variable "db_name" +db_name=$(ynh_app_setting_get --app=$app --key=db_name) + +# Update a setting +ynh_app_setting_set --app=$app --key=db_name --value=$db_name +``` + +## Helper system + +We call helpers a set of custom bash function created by the YunoHost project to standardize common operations accross all apps. They are all prefixed with `ynh_`. The full list and documentation of these helpers is available on [this page](/packaging_apps_helpers). Some of these helpers are now partially obsolete as they are now handled by the core via app resources. + +Here is the list of the major ones: + +- `ynh_app_setting_get` / `ynh_app_setting_set` +- `ynh_script_progression` +- `ynh_setup_source` +- nginx: `ynh_add_nginx_config` / `ynh_remove_nginx_config` +- php: `ynh_add_fpm_config` / `ynh_remove_fpm_config` +- systemd: `ynh_add_systemd_config` / `ynh_remove_systemd_config` +- fail2ban: `ynh_add_fail2ban_config` / `ynh_remove_fail2ban_config` +- custom: `ynh_add_config` +- nodejs: `ynh_install_nodejs` / `ynh_use_nodejs` +- `ynh_exec_warn_less` +- `ynh_local_curl` +- `ynh_secure_remove` +- `ynh_backup` / `ynh_restore_file` + +## Configuration/template system + +App scripts will often need to create a bunch of configuration files. + +Configuration templates are canonically stored provided in the `conf/` folder of the app, such as `nginx.conf`, `extra_php-fpm.conf`, `systemd.conf`, or `some-custom-app-conf.env` ... + +In these templates, you can use the syntax `__FOOBAR__` which will automatically be replaced by the variable `$foobar` during runtime, when the conf is installed via the `ynh_add_*_config` helpers. + +For example, an app's NGINX conf snippet may look like: + +```text +# The next line starting with '#sub_path_only' is automatically uncommented only when $path is not / +#sub_path_only rewrite ^__PATH__$ __PATH__/ permanent; +location __PATH__/ { + + alias __INSTALL_DIR__/; + + # Some headers and tweaks + +} +``` + + +## App sources + +App sources were historically defined in `conf/app.src` files containing the URL + checksum of assets to download. + +This is now integrated in `manifest.toml` using the `sources` resource, which pre-download the assets prior to entering the install or upgrade scripts. The sources can then be effectively deployed using `ynh_setup_source`. + +For example, for YesWiki, the sources are defined in `manifest.toml` using: + +```toml +[resources.sources.main] +url = "https://github.com/YesWiki/yeswiki/archive/refs/tags/v4.4.0.tar.gz" +sha256 = "5ceb12d225c20de2ba3cb4ce483348ed1a8ad5b1789d4f4f8f89dc4871524007" +``` + +More infos on the `source` resource in [the resource system documentation](/packaging_apps_resources). + +## Common operations (TODO/FIXME) + +#### installing/upgrading app sources +#### adding configurations +#### adding a systemd service +#### curl / automatizing install forms +#### classic stuff for nodejs apps +#### classic stuff for php apps +#### classic stuff for python apps +#### classic stuff for ??? apps diff --git a/pages/06.contribute/10.packaging_apps/30.doc/doc.md b/pages/06.contribute/10.packaging_apps/30.doc/doc.md new file mode 100644 index 00000000..8b4a3512 --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/30.doc/doc.md @@ -0,0 +1,44 @@ +--- +title: Adding documentation to your app +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_app_doc' +--- + +Properly documenting your app is important for user experience ;). YunoHost provides several mechanism to display information to users. + +## Extensive description : `doc/DESCRIPTION.md` and `doc/screenshots/` + +You are encouraged to add a `doc/DESCRIPTION.md` which should contain a more extensive description than the short description contained in `manifest.toml`. This usually corresponds to listing the key features of the app. + +You are also encouraged to add a `.png` or `.jpg` screenshot of what the app looks like in `doc/screenshots/`. There is no constrain on the exact filename, but the file weight should be kept below 512kb. + +This description and screenshot will be shown when the admin open the catalog page for this app and the app info page in the webadmin after the admin installs this app. + +You can also add translated versions of the `.md` file in, for example, `doc/DESCRIPTION_fr.md`, `_es.md`, `_it.md`, etc. + +If your app repository is part of the YunoHost-Apps org, the provided description will be used to auto-regenerate the README.md of your github repo via `yunohost-bot`. + +## Specific notes for admins : `doc/ADMIN.md`, `doc/.md` + +Sometimes, you may want to ship YunoHost-specific notes regarding the administration of this app. For example, integrating OnlyOffice inside Nextcloud. + +You can do so by adding a `doc/ADMIN.md` file or even a `doc/.md` page for each specific topic - and similarly add `_` suffix for translations. + +Note that you can even use the `__FOOBAR__` syntax which will automatically be replaced with the `foobar` setting. + +These notes will be available in the app info page in the webadmin after the app installation. + +## Pre/post-install notes, pre/post-upgrade notes + +Sometimes, you may want to display important information to the admin at key points in the app's life cycle. You can do so by providing special markdown files: +- `doc/PRE_INSTALL.md`: displayed right before the installation (for example to warn that « This app install is expected to take around 30 minutes, be patient! » or « This app will automatically add 1GB swap to your system ») + - NB: try to not overlap with the anti-feature tags from the catalog (cf Publishing your app in the catalog) which can be used to warn that the app's upstream is alpha-stage or deprecated among other things. +- `doc/POST_INSTALL.md`: displayed in a popup after the installation AND a dismissable note in the webadmin app info view. +- `doc/PRE_UPGRADE.md`: displayed right before any upgrade of this app (NB: the pre-upgrade note from the NEW version will be used, not the one from the installed version) + - You can also create `doc/PRE_UPGRADE.d/{version}.md` to have a note displayed before upgrading to a version equal or higher than `{version}` +- `doc/POST_UPGRADE.md`: displayed in a popup after the upgrade AND a dismissable note in the webadmin app info view. + +Same as `ADMIN.md` and others: in these files, you can use the `__FOOBAR__` syntax which will automatically be replaced with the `foobar` setting. diff --git a/pages/06.contribute/10.packaging_apps/40.testing/testing.md b/pages/06.contribute/10.packaging_apps/40.testing/testing.md new file mode 100644 index 00000000..9125bfe9 --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/40.testing/testing.md @@ -0,0 +1,81 @@ +--- +title: Testing your app +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_testing' + aliases: + - '/packaging_apps_levels' +--- + +Once you're done writing you app package, you'll want to check that everything works correctly. At first, you can manually try to install your app on some test server of your own : `sudo yunohost app install ./path/to/mycustomapp_ynh` + +Testing everything manually often becomes tedious ;). The YunoHost maintains several tools to automatically and somewhat "objectively" analyze and tests our 400+ apps catalog. + +## Package linter + +The [package linter](https://github.com/YunoHost/package_linter) performs a static analysis of your app to check a bunch of recommended practice. + +It is pretty straightforward to run considering that you should only need Python installed. + +## Package check + +[Package check](https://github.com/YunoHost/package_check) is a more elaborate software that will tests many scenarios for you app such as: +- installing, removing and reinstalling your app + validating that the app can indeed be accessed on its URL endpoint (with no 404/502 error) + - when installing on a root domain (`domain.tld/`) + - when installing in a domain subpatch (`domain.tld/foobar`) + - installing in private mode + - installing multiple instances +- upgrading from the same version +- upgrading from older versions +- backup/restore +- ... + +Package check will then summarize the results and compute a quality level ranging from 0 to 8. + +To run its tests, package check uses a LXC container to manipulate the package in a clean environment without any previous installations. Installing LXC/LXD is unfortunately not that straighforward (it kinda depends on your OS/distribution), though we documented how to do so [in the README](https://github.com/YunoHost/package_check#deploying-package_check). + +### Package check's `tests.toml` + +Package check interfaces with your app's `tests.toml` which allows to control a few things about which tests are run - though it is usually pretty empty as many things can be deduced from the app's manifest. + +More info about the syntax here are also available [in the README](https://github.com/YunoHost/package_check#teststoml-syntax) + +### Application quality levels + +Package check will compute a quality level ranging from 0 to 8. + +Apps with level equal or lower than 4 are considered "bad quality" and YunoHost will discourage people from installing such apps. + +While this definition may vary with time, the current definition as of February 2023 is roughly: + +- level 0 (« Broken ») : the application doesn't work at all or doesn't pass level 1 criterias +- level 1 (« Installable in at least one scenario ») : At least one install succeeded, and there's no critical issue reported in the linter +- level 2 (« Installable in all scenarios ») : All install scenarios tested (typically install on full domain, domain+subpath, multi-instance, private/public) succeeded +- level 3 (« Can be upgraded ») : All upgrades tests from the current commit succeeded +- level 4 (« Can be backuped/restored ») : All backup/restore tests succeeded +- level 5 (« No linter error ») : No red errors reported by the linter +- level 6 (« App is in a community-operated git org ») : The app is hosted on YunoHost-Apps organization. (From a maintenance / security point of view, we want to avoid the catalog being filled with apps that are privately-hosted and that the initial maintainer will ultimately abandon and that can't be maintained easily by the community) +- level 7 (« All tests succeeded + No linter warning ») : Pass all test (including for example upgrade from past commits) and no warning reported by the linter +- level 8 (« Maintained and long-term good quality ») : The app is not flagged as not-maintained / alpha / deprecated / obsolete in the catalog, and has been at least level 5 during the past ~year + + +## Continous integration (CI) + +The YunoHost project also developed an interface called [`yunorunner`](https://github.com/YunoHost/yunorunner) which interfaces with `package_check`, handles a job queue, and automatically add jobs to the queue using some triggers. + +The two major ones are: +- [The "official" CI](https://ci-apps.yunohost.org/ci): This where the "official" quality level of each app comes from. Jobs are triggered after each commit on the repo's master branch. +- [The "dev" CI](https://ci-apps-dev.yunohost.org/ci/): This is where people validate their pull request which is often more convenient than running `package_check` yourself, and has the advantage of the results being automatically public, which facilitates collective debugging. + +Members of the YunoHost-Apps organization can trigger jobs on the dev CI directly from a pull request simply by commenting something like `!testme` (cf for example [here](https://github.com/YunoHost-Apps/nextcloud_ynh/pull/532#issuecomment-1402751409)). A .png summary of the tests will be automatically displayed once the job completes (and you can click the link to see the entire job execution and debug it). + + +#### Why create `package_check` + `yunorunner` rather than using well-known solutions like Gitlab-CI ? + +Constrain 1 : Gitlab-CI or other similar solutions are mostly based around Docker, while we use LXC. In particular, we do want to reuse LXC snapshots of successful install during other tests (upgrade, backup/restore, ..) rather than reinstalling the app from scratch everytime, which drastically reduces the test time. We could do so using Gitlab artifacts, but such artifacts are automatically made public which is not convenient because they contain a full filesystem and their only use it to speed up the test process. Moreover, in the Gitlab-CI paradigm, jobs are not running on the same machine and they would need to download the snapshot which can be lengthy. The other mechanism, caching, is explicitly advertised as not reliable in Gitlab's-CI doc. What would be helpful would be some non-public artifact system (see similar discussion [here](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/336)) + +Constrain 2 : Our test workflow is somewhat complex and we have 400+ apps to maintain. It's not acceptable to have to duplicate/maintain the CI logic in app each repository, so we need some sort of repo that handles the CI logic, while still being to supersed some behavior from the app repo itself. Gitlab-CI has some syntax which can allow this, but this remains quite laborious. + +Constrain 3 : Having a common job queue/dashboard UI accross all app. In the Gitlab-CI paradigm, each repository has its own job queue/dashboard UI, but this is not really convenient. diff --git a/pages/06.contribute/10.packaging_apps/50.publishing/publishing.md b/pages/06.contribute/10.packaging_apps/50.publishing/publishing.md new file mode 100644 index 00000000..2ffce557 --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/50.publishing/publishing.md @@ -0,0 +1,16 @@ +--- +title: Publishing your app on the catalog +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_publishing' +--- + +The official YunoHost's app catalog is maintained [in this repository](https://github.com/YunoHost/apps/), in particular [the `apps.toml` file](https://github.com/YunoHost/apps/blob/master/apps.toml). + +For your app to be made available to everybody, you should make a pull request that adds your app inside the `apps.toml` (see the [detailed instructions in the README](https://github.com/YunoHost/apps/#how-to-add-your-app-to-the-application-catalog)) + +Note that the "real" catalog used by YunoHost servers is https://app.yunohost.org/default/v3/apps.json which is rebuilt every 4 hours. + +NB: The `level` key is not to be set manually by maintainers. The `yunohost-bot` will [automatically create a pull request](https://github.com/YunoHost/apps/blob/master/tools/update_app_levels/update_app_levels.py) every Friday evening with results from the official CI, which are then to be manually reviewed and merged by the community. diff --git a/pages/06.contribute/10.packaging_apps/60.advanced/20.config_panels/config_panels.md b/pages/06.contribute/10.packaging_apps/60.advanced/20.config_panels/config_panels.md new file mode 100644 index 00000000..9d02b98a --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/60.advanced/20.config_panels/config_panels.md @@ -0,0 +1,337 @@ +--- +title: Configuration panel for apps +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_config_panels' +--- + +Configuration panels allow to let admins manage parameters or runs actions for which the upstream's app doesn't provide any appropriate UI itself. It's a good way to reduce manual change on config files and avoid conflicts on it. + +Those panels can also be used to quickly create interfaces that extend the capabilities of YunoHost (e.g. VPN Client, Hotspost, Borg, etc.). + +! Please: Keep in mind the YunoHost spirit, and try to build your panels in such a way as to expose only really useful, "high-level" parameters, and if there are many of them, to relegate those corresponding to rarer use cases to "Advanced" sub-sections. Keep it simple, focus on common needs, don't expect the admins to have 3 PhDs in computer science. + +## `config_panel.toml`'s principle and general format + +To create configuration panels for apps, you should at least create a `config_panel.toml` at the root of the package. For more complex cases, this TOML file can be paired with a `config` script inside the scripts directory of your package, which will handle specific controller logic. + +The `config_panel.toml` describes one or several panels, containing sections, each containing questions generally binded to a params in the app's actual configuration files. + +Let's imagine that the upstream app is configured using this simple `config.yml` file stored in the app's install directory (typically `/var/www/$app/config.yml`): +```yaml +title: 'My dummy app' +theme: 'white' +max_rate: 10 +max_age: 365 +``` + +We could for example create a simple configuration panel for it like this one, by following the syntax `[PANEL.SECTION.QUESTION]`: +```toml +version = "1.0" +[main] + + [main.main] + [main.main.title] + ask.en = "Title" + type = "string" + bind = ":__INSTALL_DIR__/config.yml" + + [main.main.theme] + ask.en = "Theme" + type = "select" + choices = ["white", "dark"] + bind = ":__INSTALL_DIR__/config.yml" + + [main.limits] + [main.limits.max_rate] + ask.en = "Maximum display rate" + type = "number" + bind = ":__INSTALL_DIR__/config.yml" + + [main.limits.max_age] + ask.en = "Duration of a dummy" + type = "number" + bind = ":__INSTALL_DIR__/config.yml" +``` + +Here we have created one `main` panel, containing the `main` and `limits` sections, containing questions according to params name of our `config.yml` file. Thanks to the `bind` properties, all those questions are bind to their values in the `config.yml` file. + +### Questions short keys have to be unique + +For performance reasons, questions short keys have to be unique in all the `config_panel.toml` file, not just inside its panel or its section. Hence it's not possible to have: +```toml +[manual.vpn.server_ip] +[advanced.dns.server_ip] +``` +In which two questions have "real variable name" `is server_ip` and therefore conflict with each other. + +### Supported questions types and properties + +See [the full list of questions types and properties](/dev/forms) + + +### Reading and writing values + +You can read and write values with 2 mechanisms: the `bind` property in the `config_panel.toml` and for complex use cases the getter/setter in a `config` script. + +### `bind` property + +The `bind` property allows to define where read and write the value bind to the question. + +#### Default behaviour + +If you did not define a specific getter/setter (see below), and no `bind` argument was defined, YunoHost will read/write the value from/to the app's `/etc/yunohost/$app/settings.yml` file. + +#### Read / write into a var of an actual configuration file + +If you want to read/write the value from/to the app's actual configural file (be it `.env`-like, JSON, YAML, INI, PHP, `.py`, ...): + +```toml +[main.main.theme] +# (other properties ommited) +bind = ":__INSTALL_DIR__/config.yml" +``` + +In which case, YunoHost will look for something like a key/value, with the key being `theme`. + +If the question id in the config panel (here, `theme`) differs from the key in the actual conf file (let's say it's not `theme` but `css_theme`), then you can write: +```toml +[main.main.theme] +# (other properties ommited) +bind = "css_theme:__FINALPATH__/config.yml" +``` + +!!!! Note: This mechanism is quasi language agnostic and will use regexes to find something that looks like a key=value or common variants. However, it does assume that the key and value are stored on the same line. It doesn't support multiline text or file in a variable with this method. If you need to save multiline content in a configuration variable, you should create a custom getter/setter (see below). + +Nested syntax is also supported, which may be useful for example to remove ambiguities about stuff looking like: +```json +{ + "foo": { + "max": 123 + }, + "bar": { + "max": 456 + } +} +``` + +which we can `bind` to using: + +```toml +bind = "foo>max:__INSTALL_DIR__/conf.json" +``` + +#### Read / write an entire file + +Useful when using a question `file` or `text` for which you want to save the raw content directly as a file on the system. +```toml +[main.main.logo] +# (other properties ommited) +bind = "__INSTALL_DIR__/img/logo.png" +``` + +### Custom getter / setter + +Sometimes the `bind` mechanism is not enough: + * the config file format is not supported (e.g. xml, csv) + * the data is not contained in a config file (e.g. database, directory, web resources...) + * the data should be written but not read (e.g. password) + * the data should be read but not written (e.g. fetching status information) + * we want to change other things than the value (e.g. the choices list of a select) + * the question answer contains several values to dispatch in several places + * and so on + +You can create specific getter/setters functions inside the `scripts/config` of your app to customize how the information is read/written. + +```bash +#!/bin/bash +source /usr/share/yunohost/helpers + +ynh_abort_if_errors + +# Put your getter, setter and validator here + +# Keep this last line +ynh_app_config_run $1 +``` + +#### Getter + +A question's getter is the function used to read the current value/state. Custom getters are defined using bash functions called `getter__QUESTION_SHORT_KEY()` which returns data through stdout. + +Stdout can generated using one of those formats: + 1) either a raw format, in which case the return is binded directly to the value of the question + 2) or a yaml format, in this case you dynamically provide properties for your question (for example the `style` of an `alert`, the list of available `choices` of a `select`, etc.) + +[details summary="Basic example with raw stdout: get the timezone on the system" class="helper-card-subtitle text-muted"] + +`config_panel.toml` + +```toml +[main.main.timezone] +ask = "Timezone" +type = "string" +``` + +`scripts/config` + +```bash +get__timezone() { + echo "$(cat /etc/timezone)" +} +``` +[/details] + +[details summary="Basic example with yaml-formated stdout : Display a list of available plugins" class="helper-card-subtitle text-muted"] + +`config_panel.toml` +```toml + [main.plugins.plugins] + ask = "Plugin to activate" + type = "tags" + choices = [] +``` + +`scripts/config` + +```bash +get__plugins() { + echo "choices: [$(ls $install_dir/plugins/ | tr '\n' ',')]" +} +``` + +[/details] + +[details summary="Advanced example with yaml-formated stdout : Display the status of a VPN" class="helper-card-subtitle text-muted"] + +`config_panel.toml` + +```toml + [main.cube.status] + ask = "Custom getter alert" + type = "alert" + style = "info" + bind = "null" # no behaviour on +``` + +`scripts/config` + +```bash +get__status() { + if [ -f "/sys/class/net/tun0/operstate" ] && [ "$(cat /sys/class/net/tun0/operstate)" == "up" ] + then + cat << EOF +style: success +ask: + en: Your VPN is running :) +EOF + else + cat << EOF +style: danger +ask: + en: Your VPN is down +EOF + fi +} +``` +[/details] + +#### Setter + +A question's setter is the function used to set new value/state. Custom setters are defined using bash functions called `setter__QUESTION_SHORT_KEY()`. In the context of the setter function, variables named with the various quetion's short keys are avaible ... for example the user-specified date for question `[main.main.theme]` is available as `$theme`. + +When doing non-trivial operations to set a value, you may want to use `ynh_print_info` to inform the admin about what's going on. + +[details summary="Basic example : Set the system timezone" class="helper-card-subtitle text-muted"] + +`config_panel.toml` + +```toml +[main.main.timezone] +ask = "Timezone" +type = "string" +``` + +`scripts/config` + +```bash +set__timezone() { + echo "$timezone" > /etc/timezone + ynh_print_info "The timezone has been changed to $timezone" +} +``` +[/details] + +## Validation + +You will often need to validate data answered by the user before to save it somewhere. + +Validation can be made with regex through `pattern` argument +```toml + pattern.regexp = '^.+@.+$' + pattern.error = 'An email is required for this field' +``` + +You can also restrict several types with a choices list. +```toml + choices.foo = "Foo (some explanation)" + choices.bar = "Bar (moar explanation)" + choices.loremipsum = "Lorem Ipsum Dolor Sit Amet" +``` + +Some other type specific argument exist like +| type | validation arguments | +| ----- | --------------------------- | +| `number`, `range` | `min`, `max`, `step` | +| `file` | `accept` | +| `boolean` | `yes` `no` | + +Finally, if you need specific or multi variable validation, you can use custom validators function: +```bash +validate__login_user() { + if [[ "${#login_user}" -lt 4 ]]; then echo 'User login is too short, should be at least 4 chars'; fi +} +``` + +## Other actions than read, validate and save + +### Restart a service at the end + +You can use the services key to specify which service need to be reloaded or restarted. + +```toml +services = [ 'nginx', '__APP__' ] +``` + +This argument can be set on a single question, to a section, or to an entire panel. + +### Overwrite config panel mechanism + +All main configuration helpers are overwritable, example: + +```bash +ynh_app_config_apply() { + + # Stop vpn client + touch /tmp/.ynh-vpnclient-stopped + systemctl stop ynh-vpnclient + + _ynh_app_config_apply + + # Start vpn client + systemctl start ynh-vpnclient + rm -f /tmp/.ynh-vpnclient-stopped + +} +``` + +List of main configuration helpers + * `ynh_app_config_get` + * `ynh_app_config_show` + * `ynh_app_config_validate` + * `ynh_app_config_apply` + * `ynh_app_config_run` + +More info on this can be found by reading [vpnclient_ynh config script](https://github.com/YunoHost-Apps/vpnclient_ynh/blob/master/scripts/config) diff --git a/pages/06.contribute/10.packaging_apps/60.advanced/30.sso_ldap_integration/sso_ldap_integration.md b/pages/06.contribute/10.packaging_apps/60.advanced/30.sso_ldap_integration/sso_ldap_integration.md new file mode 100644 index 00000000..249a7311 --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/60.advanced/30.sso_ldap_integration/sso_ldap_integration.md @@ -0,0 +1,77 @@ +--- +title: SSO/LDAP integration +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_sso_ldap_integration' +--- + +One powerful aspect of YunoHost is that apps are meant to be integrated with the SSO/LDAP stack, such that users logged in on YunoHost's user portal can be directly logged in each app without having to create an account in each of them nor having to re-log in each app every time. + +It should be stressed that there are two different aspects here: +- the LDAP integration, meaning that the user accounts in the app are directly mapped to YunoHost user accounts +- the SSO integration, meaning that a user logged in on the YunoHost user portal is automatically logged in on the app as well. + +Sometimes, LDAP integration is possible, but not SSO integration (though the opposite would be really weird as LDAP integration is somewhat required for the SSO to work) + +The SSO system is handled by [SSOwat](https://github.com/YunoHost/ssowat) and also handles the "permission" system which defines wether or not a user (or anonymous visitor) can access the app. + +## LDAP integration + +LDAP is a de-facto standard when it comes to sharing a common user account database between multiple applications, hence its use in the context of YunoHost. + +However, each app does implement LDAP support in its own specific way (or doesn't), and needs to be provided with parameters to actually talk to YunoHost's LDAP database, usually via its config file. It is advise to look for real-life example of apps implementing these (such as Nextcloud, Wekan...) but you will usually need to provide: + +- LDAP host: `localhost` / `127.0.0.1` +- LDAP port: `389` +- Base DN : `dc=yunohost,dc=org` +- User DN : `ou=users,dc=yunohost,dc=org` +- Search filter: `(&(|(objectclass=posixAccount))(uid=%uid)(permission=cn=__APP__.main,ou=permission,dc=yunohost,dc=org))` (this makes sure that only people with the appropriate YunoHost/SSowat permission can access the app) +- Username attribute: `uid` +- Display name attribute: `displayname` +- Email attribute: `mail` + +TODO/FIXME: moar explanations? What is missing? + +## SSO integration + +Internally, SSOwat will on-the-fly inject [HTTP Basic Auth Headers](https://en.wikipedia.org/wiki/Basic_access_authentication) like `Authorization: Basic `. Some applications may include Basic Auth support out of the box... PHP apps do often require this line in the NGINX config: + +```text +fastcgi_param REMOTE_USER $remote_user; +``` + +`$remote_user` being a special variable in NGINX that maps to the user provided in the HTTP Basic Auth headers. The PHP application will then use the `HTTP_REMOTE_USER` info in its code. + + +TODO/FIXME: moar explanations of how this is done for non-PHP apps? + + +## Configuring SSOwat permissions for the app + +SSOwat permissions are configured using the 'permission' resource in your app's manifest.toml + +If relevant, you can create "sub" permissions for your app, for instance to only allow a specific group of people to access the admin UI of the app. For example: + +```toml +[resources.permissions] + +# This configures the main permission, i.e. general access to `https://domain.tld/$app/` +# Initial access is defined using the `init_main_permission` install question. +main.url = "/" + +# This configures an additional "admin" permission regarding access to `https://domain.tld/$app/admin` +admin.url = "/admin" +admin.show_tile = false # This means that this permission won't correspond to a tile in YunoHost's user portal +admin.allowed = "admins" # Initialize the access for the "admins" group ... You can also use an install question called `init_admin_permission` to let the server admin choose this. +``` + +See the page about app resources for the full description of behavior and properties. + + +## Logging out on the app vs. Logging out of YunoHost + +A common [known issue](https://github.com/YunoHost/issues/issues/501) is that sometimes, logging out of YunoHost apps will not log people out of every app. This is for example the case for [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh/issues/19), because it uses its own authentication cookies which are not cleared when people log out of YunoHost. This is not trivial to fix. + +Similarly, logging out of the app doesn't necessarily log people from YunoHost entirely (which is more acceptable that clicking Log out and... not being logged out at all because you're still logged-in on the SSO, hence logged in on the app). Some YunoHost app do integrate custom patches such that the logout process of the app does automatically redirects to `https://domain.tld/yunohost/sso/?action=logout` which logs them out. diff --git a/pages/06.contribute/10.packaging_apps/60.advanced/50.hooks/packaging_apps_hooks.fr.md b/pages/06.contribute/10.packaging_apps/60.advanced/50.hooks/packaging_apps_hooks.fr.md new file mode 100644 index 00000000..5bbb3490 --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/60.advanced/50.hooks/packaging_apps_hooks.fr.md @@ -0,0 +1,36 @@ +--- +title: Hooks +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_hooks' +--- +YunoHost comprend un mécanisme de hooks déclenchés lors de nombreuses opérations modifiant le système. Vous pouvez utiliser ce mécanisme afin d'étendre le comportement d'une commande YunoHost. + +Le cas le plus évident est l'ajout d'un utilisateur. Si vous aviez un hook `post_user_create`, ce hook sera déclenché dès qu'un utilisateur sera ajouté. + +## Comment ajouter un hook personnalisé sur une instance spécifique +!!! Nous imaginons ci-dessous que nous voulons lancer une commande après chaque création d'utilisateur pour ajouter l'utilisateur à l'utilisateur samba. + +Vous devez créer un répertoire avec le nom des hooks dans `/etc/yunohost/hooks.d/` : +``` +mkdir -p /etc/yunohost/hooks.d/post_user_create +``` + +Créez ensuite un script bash à l'intérieur de ce répertoire, préfixé par 2 chiffres et un tiret : +```bash +nano /etc/yunohost/hooks.d/post_user_create/05-add-user-to-samba +``` + +## Comment ajouter un hook dans un paquetage d'application +Si vous empaquetez une application, vous ne devez pas mettre vous-même le hook dans `/etc/yunohost/hooks.d` mais vous devez créer un répertoire hooks à la racine de votre paquet. +``` +. +├─── conf +├─── hooks +├── scripts +``` +Dans le dossier des hooks, créer un script bash appelé avec le type de hook que vous voulez créer par exemple `post_create_user`. + +## -> [Liste des hooks et leurs variables](https://yunohost.org/en/packaging_apps_hooks) diff --git a/pages/06.contribute/10.packaging_apps/60.advanced/50.hooks/packaging_apps_hooks.md b/pages/06.contribute/10.packaging_apps/60.advanced/50.hooks/packaging_apps_hooks.md new file mode 100644 index 00000000..4894506d --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/60.advanced/50.hooks/packaging_apps_hooks.md @@ -0,0 +1,633 @@ +--- +title: Hooks +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_hooks' +--- + +YunoHost includes a hook mechanism triggered on a lot of operation changing the system. You can use this mechanism in order to extend the behaviour of a YunoHost command. + +The most obvious case is adding a user. If you had a `post_user_create` hook, this hook will be triggered as soon as a user is added. + +## How to add a custom hook on a specific instance +!!! Below we imagine we want to run a command after each user creation to add the user to samba user. + +You should create a directory with the name of the hooks into `/etc/yunohost/hooks.d/`: +``` +mkdir -p /etc/yunohost/hooks.d/post_user_create +``` + + +Next create a bash script inside this directory prefixed by 2 numbers and a dash: +```bash +nano /etc/yunohost/hooks.d/post_user_create/05-add-user-to-samba +``` + +By default, the directory must be readable and traversable by root, but if you notice your hook is not run at all by YunoHost, you can check permissions with `ls -l /etc/yunohost/hooks.d/` and apply these commands if needed: +``` +chown root:root /etc/yunohost/hooks.d/post_user_create +chmod u+rx /etc/yunohost/hooks.d/post_user_create +``` + +## How to add a hook in an app package +If you are packaging an app, you should not set by yourself the hook into `/etc/yunohost/hooks.d` instead you should create a hooks dir at the root of your package. +``` +. +├── conf +├── hooks +├── scripts +``` + +In the hooks dir, create a bash script called with the type of hook you want to create for example `post_create_user`. + +## Hooks referencies +### User and permissions +#### post_user_create +[details summary="Triggered after user creation" class="helper-card-subtitle text-muted"] + +This hook is run at the end of the command `yunohost user create` or equivalent action in webadmin. + +##### Environment variables + + - YNH_USER_USERNAME: The username of the created user + - YNH_USER_MAIL: The mail of the created user + - YNH_USER_PASSWORD: The **clear** password of the created user + - YNH_USER_FIRSTNAME: The firstname of the created user ([should be removed in future](https://github.com/YunoHost/issues/issues/296)) + - YNH_USER_LASTNAME: The lastname of the created user ([should be removed in future](https://github.com/YunoHost/issues/issues/296)) + +##### Positionnal arguments (deprecated) + + - $1: The username of the created user + - $2: The mail of the created user + +##### No waited return + +##### Examples + +###### Send automatically a mail to new user +```bash +#!/bin/bash +domain=$(cat /etc/hostname) + +message="Hello $YNH_USER_FIRSTNAME, +Welcome on $domain ! +Feel free to change your password. +Let me know if you have a problem, +The admin of $domain +" + +echo $message | mail -s "Welcome on $domain !" $YNH_USER_MAIL +``` +[/details] + + + +#### post_user_delete +[details summary="Triggered at the end of user deletion" class="helper-card-subtitle text-muted"] + +This hook is run at the end of the command `yunohost user delete` or equivalent action in webadmin. + +##### No environment variables + +##### Positionnal arguments + + - $1: The username of the user deleted + - $2: True if --purge option is used + +##### No waited return + +##### Examples + +###### +```bash +#!/bin/bash +``` +[/details] + + + +### post_user_update +[details summary="Triggered at the end of the user update" class="helper-card-subtitle text-muted"] + +This hook is run at the end of the command `yunohost user update` or equivalent action in webadmin. + +##### Environment variables + +! Only arguments given to the cli/api are given as environment variable. + - YNH_USER_USERNAME: The username of the updated user + - YNH_USER_FIRSTNAME: The firstname of the updated user ([should be removed in future](https://github.com/YunoHost/issues/issues/296)) + - YNH_USER_LASTNAME: The lastname of the updated user ([should be removed in future](https://github.com/YunoHost/issues/issues/296)) + - YNH_USER_PASSWORD: The new password of the updated user + - YNH_USER_MAILS: The mail and mail aliases of the updated user seperated by comma + - YNH_USER_MAILFORWARDS: The list of forward mails of the updated user separated by comma + - YNH_USER_MAILQUOTA: The quota of the updated user (could be 0 or a number following by one of this unit: b, k, M, G or T) + +##### No positionnal arguments + +##### No waited return + +##### Examples + +###### Send a mail on password changing +```bash +#!/bin/bash +" +domain=$(cat /etc/hostname) + +message="Hello, +Your password has been successfully changed on $domain. +If you have not asked for changing your password, you probably should contact the admin of $domain. +" + +echo $message | mail -s "Your password has been changed on $domain !" $YNH_USER_USERNAME +``` +[/details] + + + +### post_app_addaccess +[details summary="Triggered after adding a permission to users or groups " class="helper-card-subtitle text-muted"] + +This hook is run at the end of the command `yunohost user permission add` or equivalent action in webadmin. + +##### No environment variables + +##### Positionnal arguments (deprecated) + + - $1: The app name + - $2: The list of users added separated by comma + - $3: The name of the sub permission (`main`, `admin`, etc.) + - $4: The list of groups added separated by comma + +##### No waited return + +##### Examples +[/details] + + + +### post_app_removeaccess +[details summary="Triggered after removing a pemission to users or groups" class="helper-card-subtitle text-muted"] + +This hook is run at the end of the command `yunohost user permission remove` or equivalent action in webadmin. + +##### No environment variables + +##### Positionnal arguments (deprecated) + + - $1: The app name + - $2: The list of users removed from the permission separated by comma + - $3: The name of the sub permission (`main`, `admin`, etc.) + - $4: The list of groups removed from the permission separated by comma + +##### No waited return + +##### Examples +[/details] + + + + + + + +## Domain, certificates and DNS +### post_domain_add +[details summary="Triggered at the end of the domain add operation" class="helper-card-subtitle text-muted"] + +This hook is run at the end of the command `yunohost domain add` or equivalent action in webadmin. + +##### No environment variable + +##### Positionnal arguments (deprecated) + + - $1: The domain added + +##### No waited return + +##### Examples + +###### +```bash + +``` +[/details] + + + + +### post_domain_remove +[details summary="Triggered after removing the domain" class="helper-card-subtitle text-muted"] + +This hook is run at the end of the command `yunohost domain remove` or equivalent action in webadmin. + +##### No environment variable + +##### Positionnal arguments (deprecated) + + - $1: The domain removed + +##### No waited return + +##### Examples +[/details] + + + + +### post_cert_update +[details summary="Triggered after Let's encrypt certificate update" class="helper-card-subtitle text-muted"] + +This hook is run at the end of the command `yunohost domain cert update` or equivalent action in webadmin. + +##### No environment variable + +##### Positionnal arguments + + - $1: The domain for which we have updated the certificate + +##### No waited return + +##### Examples + +###### Restart a service after cert renewal +```bash +#!/bin/bash +systemctl restart gemserv +``` +[/details] + + + + +### custom_dns_rules +[details summary="Customized your DNS rules for your domains" class="helper-card-subtitle text-muted"] + +This hook is run at the end of the command `yunohost domain dns suggest` or equivalent action in webadmin. + +Thanks to This hook you can customize + +##### No environment variable + +##### Positionnal arguments + + - $1: The base domain for which we want to build a DNS suggestion + +##### Waited return +The script should return a JSON array with dictionnary in this format: +```json +[ + { + 'type': 'SRV', + 'name': 'stuff.foo.bar', + 'value': 'yoloswag', + 'ttl': 3600 + } +] +``` + + +##### Examples + +###### Validate Let's Encrypt DNS challenge with a YunoHost DynDNS domain +```bash +#!/bin/bash +if [[ "$1" == "XXXX.nohost.me" ]] ; then + echo "[ + { + 'type': 'TXT', + 'name': '_acme-challenge', + 'value': 'LETSENCRYPT_VALUE', + 'ttl': 3600 + } + ]" +fi + +``` +[/details] + + + + + +## Apps +### post_app_change_url +[details summary="Triggered after an app has changed of URL" class="helper-card-subtitle text-muted"] + +This hook is run at the end of the command `yunohost app change-url` or equivalent action in webadmin. + +##### Environment variables + + - YNH_APP_OLD_DOMAIN: The old domain of the app + - YNH_APP_OLD_PATH: The old path of the app + - YNH_APP_NEW_DOMAIN: The new domain of the app + - YNH_APP_NEW_PATH: The new path of the app + +##### No positionnal arguments + +##### No waited return + +##### Examples +[/details] + +### post_app_upgrade +[details summary="Triggered on app upgrade" class="helper-card-subtitle text-muted"] + +This hook is run at the end of the command `yunohost app upgrade` or equivalent action in webadmin. + +##### Environment variables + + - YNH_APP_ID: The app id (for example nextcloud) + - YNH_APP_INSTANCE_NAME: The app instance name (for example nextcloud__2) + - YNH_APP_INSTANCE_NUMBER: The app instance number (for example 2) + - YNH_APP_MANIFEST_VERSION: The app manifest version (for example 1 or ?) + - YNH_ARCH: The arch as returned by `dpkg --print-architecture` + - YNH_APP_UPGRADE_TYPE: The type of upgrade (UPGRADE_PACKAGE, UPGRADE_APP, UPGRADE_FULL) + - YNH_APP_MANIFEST_VERSION: The version number + - YNH_APP_CURRENT_VERSION: The version number of the app (in the yunohost format) + - NO_BACKUP_UPGRADE: 1 if we don't want to backup else 0 + +##### No positionnal arguments + +##### No waited return + +##### Examples + +###### Change a settings in an app config file (unmanaged by config panel) +```bash +#!/bin/bash + +source /usr/share/yunohost/helpers +app=$YNH_APP_INSTANCE_NAME + +if [[ "$app" == "etherpad_mypads" ]]; then + ynh_write_var_in_file --file=/var/www/etherpad_mypads/settings.json --key=max --value=100 --after=importExportRateLimiting + systemctl restart etherpad_mypads +fi + +``` +[/details] + +### post_app_install +[details summary="Triggered at the end of an app installation" class="helper-card-subtitle text-muted"] + +This hook is run at the end of the command `yunohost app install` or equivalent action in webadmin. + +##### Environment variables + + - YNH_APP_ID: The app id (for example nextcloud) + - YNH_APP_INSTANCE_NAME: The app instance name (for example nextcloud__2) + - YNH_APP_INSTANCE_NUMBER: The app instance number (for example 2) + - YNH_APP_MANIFEST_VERSION: The app manifest version (for example 1 or ?) + - YNH_ARCH: The arch as returned by `dpkg --print-architecture` + - YNH_APP_ARG_XXXXXXX: The argument of the manifest + +##### No positionnal arguments + +##### No waited return + +##### Examples +[/details] + + +### post_app_remove +[details summary="Triggered after removing an app" class="helper-card-subtitle text-muted"] + +This hook is run at the end of the command `yunohost app remove` or equivalent action in webadmin. + +##### Environment variables + + - YNH_APP_ID: The app id (for example nextcloud) + - YNH_APP_INSTANCE_NAME: The app instance name (for example nextcloud__2) + - YNH_APP_INSTANCE_NUMBER: The app instance number (for example 2) + - YNH_APP_MANIFEST_VERSION: The app manifest version (for example 1 or ?) + - YNH_ARCH: The arch as returned by `dpkg --print-architecture` + - YNH_APP_PURGE: 1 if the --purge option has been activated + +##### No positionnal arguments + +##### No waited return + +##### Examples +[/details] + +## Backup / Restore +### backup +[details summary="Add some files to backup" class="helper-card-subtitle text-muted"] + +This hook is run at the end of the command `yunohost backup create` or equivalent action in webadmin. + +##### Environment variables + + - YNH_BACKUP_DIR: The work dir in which we can store temporary data to backup like database dump + - YNH_BACKUP_CSV: The CSV in which we add the things to backup. Don't use this directly and use ynh_backup helper instead. + - YNH_APP_BACKUP_DIR: To document + +##### Positionnal arguments + - $1: The work dir in which we can store temporary data to backup like database dump + +##### No waited return + +##### Examples + +###### Backup some files in more (for example your custom hooks) +```bash +#!/bin/bash + +# Source YNH helpers +source /usr/share/yunohost/helpers + +ynh_backup_dest (){ + YNH_CWD="${YNH_BACKUP_DIR%/}/$1" + mkdir -p $YNH_CWD + cd "$YNH_CWD" +} + +# Exit hook on subcommand error or unset variable +ynh_abort_if_errors + +# MISC +ynh_backup_dest "conf/custom/misc" +ynh_backup "/etc/sysctl.d/noipv6.conf" +ynh_backup "/usr/local/bin/" + +ynh_backup "/etc/yunohost/hooks.d/backup/99-conf_custom" +ynh_backup "/etc/yunohost/hooks.d/restore/99-conf_custom" + +``` +[/details] + +### restore +[details summary="Restore some files" class="helper-card-subtitle text-muted"] + +This hook is run at the end of the command `yunohost backup restore` or equivalent action in webadmin. + +##### Environment variables + + - YNH_BACKUP_DIR: The work dir in which we can store temporary data to backup like database dump + - YNH_BACKUP_CSV: The CSV in which we add the things to backup. Don't use this directly and use ynh_backup helper instead. + +##### Positionnal arguments + - $1: The work dir in which we can store temporary data to backup like database dump + +##### No waited return + +##### Examples + +###### restore custom files +```bash +#!/bin/bash + +# Source YNH helpers +source /usr/share/yunohost/helpers + +ynh_restore_dest (){ + YNH_CWD="${YNH_BACKUP_DIR%/}/$1" + cd "$YNH_CWD" +} + +# Exit hook on subcommand error or unset variable +ynh_abort_if_errors + +# MISC +ynh_restore_dest "conf/custom/misc" +ynh_restore_file "/etc/sysctl.d/noipv6.conf" +ynh_restore_file "/usr/local/bin/" + +ynh_restore_file "/etc/yunohost/hooks.d/backup/99-conf_custom" +ynh_restore_file "/etc/yunohost/hooks.d/restore/99-conf_custom" + + +``` + +[/details] + +### backup_method +[details summary="Define a new way to backup and restore files" class="helper-card-subtitle text-muted"] + +This hook is run during the command `yunohost backup create` or equivalent action in webadmin. + +This hook is called several times with different action keywords. + +##### No environment variables + +##### Positionnal arguments + + + - $1: The action ("need_mount", "backup", "mount") + - $2: The work dir + - $3: The name of the backup + - $4: The repository in which the backup should be done + - $5: An estimation size of the files to backup + - $6: A description of the archive + + +##### No waited return + +##### Examples + +###### A very simple backup on rotationnal disks +```bash +#!/bin/bash +set -euo pipefail + +work_dir="$2" +name="$3" +repo="$4" +size="$5" +description="$6" + +case "$1" in + need_mount) + # Set false if your method can itself put files in good place in your archive + true + ;; + backup) + mount /dev/sda1 /mnt/hdd + if [[ "$(df /mnt/hdd | tail -n1 | cut -d" " -f1)" != "/dev/sda1" ]] + then + exit 1 + fi + pushd "$work_dir" + current_date=$(date +"%Y-%m-%d_%H:%M") + cp -a "${work_dir}" "/mnt/hdd/${current_date}_$name" + popd + umount /mnt/hdd + ;; + *) + echo "hook called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +exit 0 + +``` +[/details] + +## Configuration and firewall +### post_iptable_rules +[details summary="Triggered after reloaded the firewall rules" class="helper-card-subtitle text-muted"] + +This hook is run at the end of the command `yunohost firewall reload` or equivalent action in webadmin. + +##### No environment variables + + +##### Positionnal arguments + + - $1: True if upnp has succeeded + - $2: True if ipv6 is available + +##### No waited return + +##### Examples + +###### Forbid completely the outgoing 25 port except for postfix user +```bash +#!/bin/bash +iptables -A OUTPUT -p tcp --dport 25 -m owner --uid-owner postfix -j ACCEPT +iptables -A OUTPUT -p tcp --dport 25 -m tcp -j REJECT --reject-with icmp-port-unreachable +``` +[/details] + +### conf_regen +[details summary="Change configuration suggested as default config in regen-conf mechanism" class="helper-card-subtitle text-muted"] + +This hook is run during the command `yunohost tools regen-conf` or equivalent action in webadmin. + +This hook is called several times with different actions keywords (pre and post operations). + +##### Environment variables + + - YNH_DOMAINS: The list of domains managed by YunoHost separated by comma + - YNH_MAIN_DOMAINS: The list of main domains separated by comma + +##### Positionnal arguments + + - $1: The pre or post action + - $2: Empty string due to legacy + - $3: Empty string due to legacy + - $4: In post mode the list of file which should be modified. In pre mode the dir in which we store pending configuration + +##### No waited return + +##### Examples + +###### Fix the warning about postfix compatibility mode in postfix logs +```bash +#!/bin/bash + +action=$1 +pending_dir=$4 +postfix_conf=$pending_dir/../postfix/etc/postfix/main.cf + +[[ "$action" == "pre" ]] || exit 0 +[[ -e $postfix_conf ]] || exit 0 +echo ' +compatibility_level = 2' >> $postfix_conf +``` +[/details] + diff --git a/pages/06.contribute/10.packaging_apps/60.advanced/60.advanced_packagers/advanced_packagers.md b/pages/06.contribute/10.packaging_apps/60.advanced/60.advanced_packagers/advanced_packagers.md new file mode 100644 index 00000000..325a502e --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/60.advanced/60.advanced_packagers/advanced_packagers.md @@ -0,0 +1,204 @@ +--- +title: Advanced packagers +template: docs +taxonomy: + category: docs +routes: + default: '/advanced_packagers' +--- + +Here comes the time: +- you masterise [apps packaging](/packaging_apps), [package_check](https://github.com/YunoHost/package_check), [example_ynh](https://github.com/YunoHost/example_ynh) and [experimental helpers](https://github.com/YunoHost-Apps/Experimental_helpers) +- you have integrated the [YunoHost Apps Group](https://yunohost.org/#/project_organization) +- you know what means `¯\_(ツ)_/¯` +- you use to say `Don't ask to ask, just ask` in the [YunoHost support room](https://yunohost.org/#/help) + +Here are few ideas that could help you to improve YunoHost apps packaging. + +Usually, there are things that slow you down: +- Installing your freshly done package because of dependencies installation or npm/rust/elixir/composer builds +- Waiting a package_check to see the level of your package +- etc... + +The idea is to use YunoHost stuffs to help you improve this lost time. + +## Building your infrastructure +First idea is to build several VMs, LXCs or VirtualBoxs with YunoHost to let you parallelize actions, like having the first one installing an app, the second installing another app, the third one debugging an app upgrade, etc... + +After first installation of those VMs/LXCs, each one has to be reacheable with its domain name, like for example: +- ynh1.mydomain.org +- ynh2.mydomain.org +- ynh3.mydomain.org + +For that you will need a public IP for each one or reverse proxy... +If your are lucky enough to have IPV6 and a /64 IPV6 scope, it won't be a problem to assign a public IPV6 to each YunoHost. + +Another way the DNS stuff is to simply use an hosts file. + +In addition, it's helpfull to have several domains names for each YunoHost, for example: +- ynh1.mydomain.org + - test11.mydomain.org + - test12.mydomain.org + - test13.mydomain.org +- ynh2.mydomain.org + - test21.mydomain.org + - test22.mydomain.org + - test23.mydomain.org +- ynh3.mydomain.org + - test31.mydomain.org + - test32.mydomain.org + - test33.mydomain.org + +With that you will be able to install two apps on the same YunoHost first one at https://test11.mydomain.org and a second app at https://test12.mydomain.org (let say the first app is nextcloud_ynh the second one is collabora_ynh or onlyoffice_ynh) + +When your infrastructure is up and ready, you will have to do snapshots of each VMs/LXCs. Doing that, you will be able to revert back to an happy and healthy YunoHost after doing install/backup/restore/upgrade of and app... + +Don't forget to regularly upgrade your YunoHosts VMs/LXCs to the last release doing: revert back to last happy/healthy YunoHost snapshot and doing `yunohost domain cert-renew --no-check && yunohost tools update && yunohost tools upgrade --apps && yunohost tools upgrade --system && apt autoremove`. Take a snapshot after that successfull full upgrade. And after some testings or one week later, remove old snapshot. PS: that can be automated... + +Example of a script to upgrade a master VirtualBox VM + +``` +#!/bin/bash + +# printers +normal="\e[0m" +bold="\e[1m" +white="\e[97m" +blue="\e[34m" +echo_info() +{ + echo -e "[${bold}${blue}INFO${normal}] ${bold}${white}$1${normal}" +} + +echo_info "### Update host" +sudo apt update +sudo apt dist-upgrade + +sudo yunohost settings set security.password.user.strength -v -1 +sudo yunohost settings set security.password.admin.strength -v -1 + +echo_info "### Update package_check" +( cd package_check; git pull) +echo_info "### Update LXC container" +package_check/sub_scripts/lxc_upgrade.sh + +echo_info "### Clean hosts" +sudo apt autoclean +sudo apt autoremove + +echo_info "### Fill free space with zero" +cat /dev/zero > zeros ; sync ; rm zeros + +echo_info "### Run 'VBoxManage modifyhd --compact file.vdi' to reduce the size of this VM" +``` + +Example of a script to customize a cloned VM + +``` +#!/bin/bash + +master_domain=domain1.fr +domainX=domain2.fr +master_ip=70 +ipX=68 + + +sudo yunohost --admin-password admin domain add $domainX +sudo yunohost --admin-password admin domain add sous.$domainX +sudo yunohost --admin-password admin tools maindomain -n $domainX +sudo yunohost --admin-password admin domain remove $master_domain +sudo yunohost --admin-password admin domain remove sous.$master_domain + +sudo sed -i "s/address 192.168.1.$master_ip/address 192.168.1.${ipX}/" /etc/network/interfaces + +sudo reboot +``` + +Doing that you will have all the time a full/ready to go YunoHosts infrastructure for advanced packagers. And if require, you can have some VMs/LXCs runnning the YunoHost testing or YunoHost next Debian main version. + +## Having your packages/commits available in each VMs/LXCs +There are several ways to have your freshly created package available from each VMs/LXCs +1- Do an ssh from the YunoHost VM/LXC to a central repository on your computer +2- Having a shared directory available from each VMs, LXCs VirtualBoxs +3- Rsync you central repository to each VM/LXC +4- Use [syncthing](https://github.com/YunoHost-Apps/syncthing_ynh) to syncrhonise you main repository on each VM/LXC + +Example of a script to mount as shared directory a packaging directory into a VirtualBox VM + +``` +#!/bin/bash + +shared_folder=my_directory + +# printers +normal="\e[0m" +bold="\e[1m" +white="\e[97m" +blue="\e[34m" +echo_info() +{ + echo -e "[${bold}${blue}INFO${normal}] ${bold}${white}$1${normal}" +} + +# Create the main directory for the mount +sudo mkdir -p "./$shared_folder" + +# Mount ynh-dev directory from the host +echo_info "Mount shared directory $shared_folder" +sudo mount -o defaults -t vboxsf $shared_folder "./$shared_folder" +``` + +## Shortcuts +Use and abuse of `yunohost app install` `--args` argument + +You can do ugly thing considering mynewapp is the name/REPLACEBYYOURAPP of your app + +To install your mynewapp app: + +```bash +YNHAPP=mynewapp +yunohost app install /mycentralrepo/${YNHAPP}_ynh/ --debug --force --args domain=test11.mydomain.org&path=/myapp&admin=alice&is_public=true&language=en&password=awesomepassword +``` + +To remove your mynewapp app and reinstall it + +```bash +YNHAPP=mynewapp +yunohost app remove ${YNHAPP} --debug && yunohost app install /mycentralrepo/${YNHAPP}_ynh/ --debug --force --args domain=test11.mydomain.org&path=/myapp&admin=alice&is_public=true&language=en&password=awesomepassword +``` + +To backup your mynewapp app + +```bash +YNHAPP=mynewapp +yunohost backup create --apps ${YNHAPP} --debug +``` + +To restore your mynewapp app from the backup just made + +```bash +YNHAPP=mynewapp +yunohost backup restore XXXXXXXX-XXXXXX --apps ${YNHAPP} --debug +``` + +To upgrade your mynewapp + +```bash +YNHAPP=mynewapp +yunohost app upgrade ${YNHAPP} -f /mycentralrepo/${YNHAPP}_ynh/ --debug + + +``` + +With that, you will be able to launch different actions on differents YunoHost VMs/LXCs + +## Package_check + +With advanced packaging comes [CI_package_check](https://github.com/YunoHost/CI_package_check), it lets you serialize and automate package_check. + +## Managing all the parallel packaging you are working on + +When you do several things at the same time, sometimes you don't remember what is the next step for this or that app. +A good tool to keep your TODO list organized is to use a kaban like apps: +- [Kanboard](https://github.com/YunoHost-Apps/kanboard_ynh) +- [Wekan](https://github.com/YunoHost-Apps/wekan_ynh) diff --git a/pages/06.contribute/10.packaging_apps/60.advanced/70.notes_about_new_packaging_v2/docs.md b/pages/06.contribute/10.packaging_apps/60.advanced/70.notes_about_new_packaging_v2/docs.md new file mode 100644 index 00000000..a9fa9cf2 --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/60.advanced/70.notes_about_new_packaging_v2/docs.md @@ -0,0 +1,71 @@ +--- +title: 'Packaging v2' +template: docs +taxonomy: + category: + - docs +routes: + default: /packaging_v2 +--- + +Packaging v2 is a major improvement for the packaging introduced in YunoHost 11.1 + +### Motivation + +The motivations for this new format is: +- to get rid of some boring or unecessarily complex or duplicateds stuff such as saving/loading settings, creating a system user, etc.. during the install/upgrade/restore script, which are common things accross many apps. +- to get rid of funky historical, not-super-semantic stuff such as `__FINALPATH__` being replaced by `$final_path` (with underscore), or `__PATH__` being replaced by `$path_url`, etc. +- formalize some aspects such as the existence of the install dir, data dir, apt dependencies, database, etc. which in turn unlock possible future developments such as computing the space used by an app at one given moment, auto-upgrading apt dependencies during Debian major migration, etc. +- formalize some meta-info such as LDAP/SSO support, architectures supports, and other pre-install / post-install, pre-upgrade / post-upgrade notifications (replacing the infamous `ynh_send_readme_to_admin`) for better UI/UX during the install and upgrade process. + +However, this "v2" is not the end of the story and should be seen as an intermediate stage before a "v3" packaging. In particular this "v3" packaging should also formalize the handling of the system and app configurations files and ultimately rework the entire paradigm of the install/remove/upgrade/backup/restore scripts. + + +### Adapting a v1 app to v2 + +A script is available in and will attempt to convert what it can from the v1 format to the v2 format, in particular: +- initializing a `manifest.toml` and prefilling it with info scrapped from the various scripts +- comment out now-unecessary lines in the various scripts + +Usage: `python3 convert_app_to_packaging_v2.py /path/yo/your/app` + +This will edit the file in place and you should then carefully review and iterate over what the script did for you. + +### Highlights of the new format + +The [example repo](https://github.com/YunoHost/example_ynh) illustrates the below. + +- **The manifest is now written as toml (`manifest.toml`)** instead of json (`manifest.json`). The structure of the manifest itself has been reworked and now include: + - The `upstream` section (now mandatory) + - An `integration` section meant to formalize what minimum YunoHost version is required, the list of supported architectures, declare if SSO/LDAP is supported, typical resource usage. This is meant to be displayed both in the catalog (similar to app stores) and on the app info page after installing the app - though this is still work in progress. + - A `resource` section (detailed below) +- **Install questions are now automatically saved as settings** (except user-provided password and other specific infos) +- **All settings are now automatically loaded in app script environments** (so e.g. directly define `$domain`, etc.) +- **Auto-enable `set -eu`** a.k.a. `ynh_abort_if_errors` in appropriate scripts +- **The safety-backup-before-upgrade is now automatically handled by the core** +- **Simplify writing change-url scripts**: old the `new`/`old`/`change` `domain`/`path` are now automatically available in the context and a new helper `ynh_change_url_nginx_config` takes care of tweaking the nginx conf. Your script should essentially just call that helper and possibly tweak the app's conf and possibly restart the app's service +- **Introduce a new `resource` mechanism** + - Resources are declared in the `manifest.toml`. + - They are meant to formalize recurring app needs that are to be provisioned/deprovisioned by the core. + - They include for example: system user, apt dependencies, install dir, data dir, port, permissions, SQL database... + - Each resource is to be provisioned *before* running the install script, deprovisioned *after* the remove script, and automatically upgraded if needed before running the upgrade script (or provisionned if introduced in the new app version, or deprovisioned if removed w.r.t. the previous app version) + - More infos about resources and their options and behavior are available in the dedicated doc page +- **Permissions are automatically initialized using the answer to the `init_main_permission` install question** (replacing the `is_public` question). No need to write a boring `if $is_public ...` in the install script to add visitors anymore ! There is a similar mechanism to init other permissions, eg `init_admin_permission` (cf also the doc about the `permission` resource) +- **The content of the `doc/` folder is now meant to be integrated in the webadmin** (though this is still WIP as of writing this). In particular: + - `DESCRIPTION.md` and the `screenshots/` folder are expected to be displayed prior to the app install form (similar to app stores on mobile) + - `ADMIN.md` is expected to be made available somewhere in the info page and should contain technical admin notes. Other pages can be defined (just name it `WHATEVER.md`). Lang codes are also supported following the existing scheme for the README, eg `README_fr.md` is the French version, hence you can create `ADMIN_fr.md`, etc. + - Note that the `ADMIN.md` page supports the `__FOOBAR__` notation that will be automatically replaced with the app's `foobar` setting +- **Special files called 'notifications' are meant to replace the `ynh_send_readme_to_admin` mechanics**. They are also to be added to the `doc` folder: + - `doc/PRE_INSTALL.md`: a note to be displayed prior to the app install. Typically to warn of something unusual, such as "the app install will automatically add 1GB swap to the system". + - `doc/POST_INSTALL.md`: a note to be displayed after the app install. Typically to explain post-install operations to be performed manually by the admin and that cannot be automated. + - `doc/PRE_UPGRADE.md`: a note to be displayed prior to any upgrade of this app. + - `doc/PRE_UPGRADE.d/{version}.md`: a note to be displayed prior to a specific version upgrade. + - `doc/POST_UPGRADE.md`: a note to be displayed after the app upgrade. For example in the context of Nextcloud, the fact that you may need to re-enable custom modules manually? + - Note that the notifications, like `ADMIN.md`, supports the `__FOOBAR__` notation that will be automatically replaced with the app's `foobar` setting + - **Replace some historical names with more sensible ones**, or homogenize some practices: + - `final_path` is now `install_dir` (this migration should be automatically handled by the core and the `convert_app_to_packaging_v2.py` script) + - `datadir` is now `data_dir` to be consistent with `install_dir` (this migration should be automatically handled by the core and the `convert_app_to_packaging_v2.py` script) + - `path` is now always loaded as `$path`, no funky `$path_url`-but-it-is-saved-as-`path` anymore (this migration should be automatically handled by the core and the `convert_app_to_packaging_v2.py` script) + - `mysqldbpwd` and `psqlpwd` or whatever are now always saved as `db_pwd` (cf the `database` resource) (this migration should be automatically handled by the core and the `convert_app_to_packaging_v2.py` script) + - ports settings are now always named either `$port` or `$port_foo_bar` instead of `$foo_bar_port` (cf the `port` resource) (this migration should be automatically handled by the core and the `convert_app_to_packaging_v2.py` script) + - the install dir is to be set to `/var/www/$app` by default for web apps (or can be changed to `/opt/????` for non-webapps). Note that YunoHost will **automatically move** the old install dir to the new `install_dir` during the corresponding upgrade. diff --git a/pages/06.contribute/10.packaging_apps/80.resources/03.git/packaging_apps_git.fr.md b/pages/06.contribute/10.packaging_apps/80.resources/03.git/packaging_apps_git.fr.md new file mode 100644 index 00000000..829a8f5d --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/80.resources/03.git/packaging_apps_git.fr.md @@ -0,0 +1,208 @@ +--- +title: Utiliser Git pour packager les applications +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_git' +--- + +Git... Notre cher Git bien-aimé, que l'on peut aussi décrire comme "Goddamn Idiotic Truckload of sh\*t" (Un stupide putain gros tas de m\*rde), selon Linus. +Si vous ne connaissez pas encore Git, soyez sûr que vous serez bientôt d'accord avec cette description. + +YunoHost et toutes nos applications sont sur la forge Git GitHub. Ce qui veut dire que si vous voulez travailler sur une application, tôt ou tard vous allez devoir faire face à Git. +Alors voyons comment travailler avec Git pour pouvoir contribuer dans le contexte de YunoHost. + +## Travailler avec GitHub + +Commençons par la partie facile, GitHub est livré avec une interface web "facile" à utiliser. + +*Tout d'abord et malheureusement, il n'y a pas moyen de contourner ça, vous devez avoir un compte sur GitHub.* + +#### Branches + +Ensuite, et c'est probablement l'une des choses les plus importantes, **ne travaillez pas directement sur la branche master**. +Désolé, il fallait que ce soit dit ! + +Les branches sont, comme l'explique GitHub, "*une version parallèle d'un dépôt. Elle est contenue dans le dépôt, mais n'affecte pas les autres branches. Elle vous permet de travailler librement sans perturber la version "live".*" + +La branche master est la branche qui contient la version de l'application que les utilisateurs installeront et utiliseront effectivement. +La bonne habitude à prendre est de travailler à partir de la branche testing, et lorsque tout est réglé et testé, vous pouvez fusionner la branche testing dans master, afin que les utilisateurs puissent profiter de la nouvelle version de votre package. + +Pour voir et modifier la branche actuelle, utilisez ce bouton : +![](image://github_branch.png) + +#### Modifier un fichier + +Maintenant que vous êtes sur la bonne branche, voyons comment éditer un fichier sur GitHub. + +Vous pouvez éditer n'importe quel fichier en utilisant l'icône du petit crayon : +![](image://github_edit.png) + +Si vous n'avez pas la permission d'écrire sur le dépôt, vous verrez (comme sur l'image) que vous allez créer un fork (nous verrons plus loin ce qu'est un fork). +Si vous avez la permission d'écrire, vous allez simplement modifier le fichier, sans forker. + +#### Validez vos modifications + +Lorsque vous avez fini de modifier le fichier, vous pouvez faire un commit de vos modifications. +Derrière ce mot, l'idée est assez simple, vous allez juste enregistrer vos modifications... +![](image://github_commit.png) + +Le premier champ est le nom de votre commit, une phrase très courte pour expliquer pourquoi vous avez fait cette modification. +Le deuxième champ est un champ plus grand pour une explication plus complète, si vous en avez besoin. + +Enfin, si vous modifiez un dépôt sur lequel vous avez la permission d'écrire, vous pouvez soit faire un commit directement sur la branche en cours, soit créer une nouvelle branche. +Il est généralement préférable de créer une nouvelle branche, de cette façon vous gardez vos modifications sur une version *parallèle* du dépôt. Vos modifications seront discutées dans une pull request (expliquée ci-dessous) puis finalement fusionnées dans la branche d'origine. + +#### Forker ou ne pas forker + +Un fork est une copie d'un dépôt sur votre propre compte. +Nous avons déjà vu que si vous n'avez pas l'autorisation d'écrire dans un dépôt, la modification d'un fichier créera automatiquement un fork. +Comme le fork est sur votre compte, vous avez toujours la permission d'écrire dessus. +Mais même si un fork n'est pas le véritable dépôt, mais juste une copie, un fork est toujours lié à son parent. Nous verrons plus tard que la création d'un fork est vraiment utile lors de l'ouverture d'une pull request. + +Lorsque vous créez un nouveau package, il est courant d'utiliser l'[application exemple](https://github.com/YunoHost/example_ynh) comme base. +Mais, comme vous ne voulez pas garder ce lien vers l'application d'exemple, vous ne devez pas forker l'application d'exemple. Vous la clonerez plutôt. +Malheureusement, cloner une application est un peu plus compliqué sur GitHub. Nous verrons plus tard comment cloner vers un dépôt local à la place. + +Nous avons vu comment éditer un fichier, et comment cela peut forker l'application. +Mais, lorsque vous voulez éditer plusieurs fichiers, l'interface GitHub n'est pas vraiment la meilleure solution. Dans une telle situation, vous préférerez cloner le dépôt et travailler sur un dépôt local. +Il se peut que vous deviez tout de même forker sur votre propre compte pour pouvoir enregistrer vos modifications si vous n'avez pas les autorisations sur le dépôt distant. + +#### Pull request + +Après avoir effectué vos commits, que ce soit sur une branche ou un fork, vous souhaitez proposer vos modifications pour qu'elles soient intégrées dans le dépôt principal, ou dans la branche d'origine. +Pour ce faire, vous allez créer une pull request. GitHub vous demande généralement directement si vous souhaitez le faire. +Sinon, vous trouverez le bouton de création d'une pull request juste ici : +![](image://github_pull_request.png) + +Lors de la création d'une pull request à partir d'un fork, pour faciliter le travail de révision du code, **ne jamais** décocher la case *Allow edits from maintainers*. Cette option permet simplement aux mainteneurs du dépôt d'origine de modifier directement votre travail. + +#### Organisation YunoHost-Apps + +Conformément au [guide de création d'applications dans YunoHost](/packaging_apps_intro), votre application doit être intégrée à l'organisation YunoHost-Apps, mais si vous n'avez jamais contribué à une application auparavant ou si vous n'avez jamais eu d'application dans cette organisation, vous n'en aurez peut-être pas l'autorisation. + +Tout d'abord, vous devez avoir la permission d'écrire dans l'organisation, pour ce faire, demandez au groupe Apps sur le salon XMPP Apps. + +Pour transférer votre application sur l'organisation YunoHost-Apps, allez dans votre dépôt et dans l'onglet *Settings*. +En bas de la page, vous trouverez *Transfer ownership*. +Dans le champ *New owner’s GitHub username or organization name*, tapez *YunoHost-Apps*. +Votre dépôt sera déplacé dans l'organisation, vous n'avez pas besoin de supprimer le dépôt d'origine. + + +## Travailler avec Git en local + +Comme nous l'avons vu, vous pouvez faire beaucoup de choses directement sur GitHub. +Mais lorsque vous devez modifier plusieurs fichiers, ou lorsque vous devez travailler sur votre code de votre côté, il est préférable de travailler directement sur votre ordinateur. + +Avant d'aller dans la partie infernale de Git, voyons 2 façons différentes de commencer à travailler avec Git. + +#### Premier cas : Créer un nouveau package + +Vous avez découvert, choqué, que la merveilleuse application que vous aimez utiliser tous les jours n'a pas encore son package YunoHost. Et parce que vous êtes sympa, vous avez décidé de créer vous-même le package, pour que tout le monde puisse apprécier cette application. +Quelle bonne idée ! + +Le mieux est de commencer par l'[application d'exemple](https://github.com/YunoHost/example_ynh). Mais comme nous l'avons déjà expliqué, vous ne voulez pas forker, parce que si vous le faites, vous allez garder ce lien vers l'application d'exemple et c'est vraiment ennuyeux. +Donc, vous allez le faire différemment. Vous allez cloner ! + +##### `git clone` + +Pour cloner, vous allez faire : +```bash +git clone https://github.com/YunoHost/example_ynh +``` +`git clone` téléchargera une copie du dépôt. Vous aurez le dépôt complet, avec ses branches, ses commits, et tout le reste (dans cet apparent petit répertoire `.git`). + +git clone est généralement le point de départ de tout travail local avec Git. + +*Toutefois, si vous comptez envoyer vos modifications sur le dépôt distant sur GitHub, assurez-vous d'avoir les droits d'écriture sur ce dépôt. Sinon, forkez avant et clonez votre fork, pour lequel vous avez la permission.* + +##### Mon nouveau package, suite + +Dans le contexte d'un nouveau package, vous devrez également créer un dépôt sur GitHub pour y mettre votre package. +Ce qui n'est pas plus compliqué qu'un gros bouton vert *New*. +Ne vous embêtez pas avec des README, .gitignore ou licence. Créez simplement le dépôt lui-même. +vous pouvez maintenant cloner ce nouveau dépôt avec Git. +![](image://github_create_new_repo.png) + +Vous disposez maintenant de 2 dépôts clonés sur votre ordinateur. +Copiez tous les fichiers de l'application example_ynh, **excepté le répertoire .git** (vous voulez juste les fichiers eux-mêmes) dans votre nouveau package. + +*Si vous le souhaitez, vous pouvez supprimer l'application example_ynh. Nous n'en avons plus besoin.* + +Vous êtes prêt à travailler sur votre nouveau package ! + +#### Deuxième cas : Travailler localement sur un dépôt + +Vous disposez déjà d'un dépôt, mais ce que vous voulez, c'est travailler localement, de sorte que vous puissiez modifier plusieurs fichiers. +Il vous suffit de cloner le dépôt, le répertoire .git est le lien vers le dépôt distant. Rien d'autre à faire qu'un `git clone`. + +#### Branches + +Vous avez bien votre copie local du dépôt, mais comme vous avez lu attentivement cette documentation jusque-là, vous savez que vous devez vous assurer d'être sur la branche testing avant de commencer à travailler. + +Pour voir les branches, et savoir sur quelle branche vous êtes réellement, alors que vous êtes dans le répertoire de votre dépôt, tapez `git branch`. +La branche courante est mise en évidence et précédée d'un "\*". + +#### `git checkout` + +S'il apparaît que vous n'êtes pas sur la branche où vous vouliez être, ou que vous êtes en fait sur master (ce qui est mal !), vous pouvez passer à une autre branche avec `git checkout`. +```bash +git checkout testing +``` +*Lisez attentivement ce que Git dit quand vous validez une commande, n'oubliez jamais que Git est sournois...* + +#### `git pull` avant tout + +Vous êtes enfin dans la bonne branche, et prêt à travailler. +**Attendez ! Un vilain piège vous attend...** +Avant de vous retrouver dans une situation inextricable. Commencez par un `git pull` pour mettre à jour votre branche avec les derniers changements du dépôt distant. + +*Parfois, vous rencontrerez une situation impossible où Git vous dira que vous ne pouvez pas pull parce que vous avez des changements locaux. Mais vous ne vous souciez pas de ces modifications locales, vous voulez juste obtenir la dernière version de la branche distante. Mais Git ne se soucie pas de ce que VOUS voulez...* +*Je dois admettre que ma seule solution est aussi efficace que sale... Un bon vieux `rm -r` du dépôt et un `git clone`* + +#### Il est temps de travailler + +Vous pouvez finalement travailler sur votre code. +Lorsque vous êtes enfin d'accord avec ce que vous avez fait, il est temps de valider votre travail. + +La première étape consiste à informer Git sur le(s) fichier(s) à valider. Pour ce faire, nous utiliserons `git add`. +```bash +git add mon_fichier +ajouter mon_autre_fichier et_aussi_celui_ci +``` +Si vous souhaitez valider l'ensemble de votre travail, vous pouvez aussi simplement faire +```bash +git add --all +``` + +Pour vérifier l'état actuel de votre validation, vous pouvez utiliser `git status`. Il vous montrera quels fichiers seront inclus dans votre commit, et quels fichiers sont modifiés, mais pas encore inclus. +`git status -v` vous indiquera également quelle partie des fichiers est modifiée. Une bonne façon de s'assurer que vous n'avez pas fait d'erreur avant de faire un commit. + +#### `git checkout -b` + +Avant de faire un commit, ou après, ou avant de commencer à travailler. Quand vous en avez envie ! +Vous devriez envisager d'ajouter votre travail à une branche séparée, de cette façon, il sera facile de créer une pull request dans la branche testing et de discuter avec les autres packagers de ce que vous suggérez de changer. + +Pour créer une nouvelle branche et passer à cette branche, vous pouvez utiliser `git checkout -b my_new_branch`. + +#### `git commit` + +Faire un commit, c'est simplement valider son travail dans Git. Comme vous pouvez le faire dans GitHub. +Pour avoir les mêmes champs que vous aviez sur GitHub, avec le nom du commit, et une explication plus longue. Vous pouvez simplement utiliser `git commit`. +La première ligne, avant les commentaires, est pour le nom du commit. +Après tous les commentaires, vous pouvez ajouter une explication si vous le souhaitez. + +Si vous voulez faire un commit avec seulement un nom pour votre commit, vous pouvez utiliser une simple commande : +```bash +git commit -m "My commit name" +``` + +#### `git push` vers le dépôt distant + +Vos modifications sont validées, mais uniquement sur votre clone local du dépôt. Maintenant, vous devez renvoyer ces modifications sur le dépôt distant sur GitHub. +Pour ce faire, vous devez savoir quelle est votre branche actuelle. (Si vous ne le savez pas, `git branch` vous donnera cette information). +Ensuite, vous pouvez git push +```bash +git push -u origin BRANCH_NAME +``` diff --git a/pages/06.contribute/10.packaging_apps/80.resources/03.git/packaging_apps_git.md b/pages/06.contribute/10.packaging_apps/80.resources/03.git/packaging_apps_git.md new file mode 100644 index 00000000..7a6f5852 --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/80.resources/03.git/packaging_apps_git.md @@ -0,0 +1,208 @@ +--- +title: Use Git to package apps +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_git' +--- + +Git... Our dear beloved Git, which can be described also as "Goddamn Idiotic Truckload of sh\*t", according to Linus. +Be sure if you don't know Git yet that you will soon agree with that description. + +YunoHost and all our apps are on the Git forge GitHub. Which means that if you want to work on an app, sooner or later you're going to have to deal with Git. +So let's see how to work with Git to be able to contribute in the context of YunoHost. + +## Working with GitHub + +Let's go first for the easy part, GitHub comes with an "easy" web interface to deal with. + +*First things first, unfortunately there's no way around, you need an account on GitHub.* + +#### Branches + +Then, probably one of the most important thing, **do not work directly on the master branch**. +Sorry, it has to be said ! + +Branches are, as GitHub explains, "*a parallel version of a repository. It is contained within the repository, but does not affect the other branches. Allowing you to work freely without disrupting the "live" version.*" + +The master branch is the branch that contains the version of the app users will actually install and use. +The usual thing to do is to work from the testing branch, and when everything is settled and tested, you can merge the testing branch in master, so users will enjoy the new release of your package. + +To see and change the current branch, use this button: +![](image://github_branch.png) + +#### Edit a file + +Now that you're on the right branch, let's see how to edit a file on GitHub. + +You can edit any file by using the small pencil icon: +![](image://github_edit.png) + +If you don't have the permission to write on the repository, you will see (as on the picture) that you're going to create a fork (we'll see below what a fork is). +If you have the permission to write, you will just edit the file, without forking. + +#### Commit your changes + +When you're done with your modification on the file, you can commit your changes. +Behind that word, the idea is quite simple, you're just going to save your changes... +![](image://github_commit.png) + +The first field is the name of your commit, a very short sentence to explain why you did this modification. +The second field is a large one for a more complete explanation, if you need it. + +Finally, if you're editing a repository on which you have permission to write, you can either commit directly to the current branch or create a new branch. +It's usually better to create a new branch, that way you keep your modifications on a *parallel* version of the repository. Your modifications will be discussed in a pull request (explained below) then finally merged into the original branch. + +#### To fork or not to fork + +A fork is a copy of a repository into your own account. +We have seen before that if you don't have permission to write into a repository, editing a file will automatically create a fork. +Because the fork is on your account, you always have the permission to write on it. +But even if a fork is not the real repository, but just a copy, a fork is always linked to its parent. We'll see later that to create a fork is really useful when opening a pull request. + +When you create a new package, it's common to use the [example app](https://github.com/YunoHost/example_ynh) as a base. +But, because you don't want to keep that link to the example app, you should not fork the example app. You will rather clone the app. +Unfortunately, to clone an app is a little bit trickier on GitHub. We will see later how to clone to a local repository instead. + +We have seen how to edit a file, and how this could fork the app. +But, when you want to edit multiple files, the GitHub interface isn't really the best way. In such situation, you would rather clone the repository and work on a local repository. +You may still need to fork on your own account to be able to save your modifications if you don't have the permission on the distant repository. + +#### Pull request + +After you have committed your changes, whether on a branch or a fork, you want to propose your modifications to be integrated into the main repository, or the original branch. +To do so, you're going to *create a pull request*. GitHub usually ask you directly if you want to do so. +Otherwise, you'll find the button to create a pull request just here: +![](image://github_pull_request.png) + +When creating a pull request from a fork, to ease the work of the reviewers, **do never** uncheck the checkbox *Allow edits from maintainers*. That option simply allow the maintainers of the original repository to edit directly your work. + +#### YunoHost-Apps organization + +Following the [guide for packaging application within YunoHost](/packaging_apps_intro), your app has to be into the YunoHost-Apps organization, but if you have never contributed to an app before or never had any app into this organization you may not have the permission. + +First, you need the permission to write into the organization, to do so, ask to the Apps group on the Apps XMPP room. + +To transfer your app to the YunoHost-Apps organization, go to your repository and to *Settings* tab. +At the bottom of the page, you will find *Transfer ownership*. +Into the field *New owner’s GitHub username or organization name*, type *YunoHost-Apps*. +Your repo will be moved into the organization, you don't have to remove the original repository. + + +## Working with Git locally + +As we have seen, you can do a lot of things directly on GitHub. +But when you need to edit multiple files, or when you need to work on your code on your own, it's better to work directly on your computer. + +Before going to the hellish part of Git, let's see two different ways to start working with Git. + +#### First case: Creating a new package + +You have shockingly discovered that the wonderful app you love to use everyday does not yet have its YunoHost package. And because you're nice, you decided to create yourself the package, so everyone will enjoy that app the way you do. +What a good idea! + +The best is to start from the [example app](https://github.com/YunoHost/example_ynh). But as we have explained before, you don't want to fork, because if you do so, you're going to keep that link to the example app and it's really annoying. +So, you're going to do it differently. You're going to clone! + +##### git clone + +To clone, you're going to do: +```bash +git clone https://github.com/YunoHost/example_ynh +``` +`git clone` will download a copy of the repository. You will have the complete repository, with its branches, commits, and everything (into that apparently little `.git` directory). + +To git clone is usually the starting point of any local work with Git. + +*A side note though, if you expect to send your modifications back to the distant repository on GitHub, be sure to have the permission to write on this repository. Otherwise, fork before and clone your fork, on which you do have the permission.* + +##### My brand new package, continued + +In the context of a new package, you will also need to create a repository on GitHub to nest your package. +Which is as simple as a big green *New* button. +Don't bother with README, .gitignore or license. Just create the repository itself. +you can now git clone that new repository. +![](image://github_create_new_repo.png) + +You now have 2 repositories cloned on your computer. +Copy all the files from the example_ynh app, **except the .git directory** (You just want the files themselves) to your new package. + +*If you want, you can remove the example_ynh app. We don't need it anymore.* + +You're ready to work on your new package ! + +#### Second case: Working locally on a repository + +You already have a repository, but what you want is just to work locally, so you can modify multiple files. +Simply clone the repository, the .git directory is the link to the distant repository. Nothing else to do than a `git clone`. + +#### Branches + +You do have your local copy of the repository, but because you have read carefully this documentation until then, you know that you should be sure to be on the testing branch before starting to work. + +To see the branches, and to know on which you actually are, while into the directory of your repository, type `git branch`. +The current branch is highlighted and preceded by a `*`. + +#### `git checkout` + +If it appears that you're not on the branch you wanted to be, or you're actually on master (which is bad !), you can move to another branch with `git checkout` +```bash +git checkout testing +``` +*Read carefully what Git says when you validate a command, do never forget that Git is sneaky...* + +#### `git pull` before anything else + +You're finally on the right branch, and ready to work. +**Wait ! A nasty trap is waiting for you...** +Before ending up in an inextricable situation. Start with a `git pull` to update your branch to the latest change from the distant repository. + +*Sometimes, you will encounter an impossible situation where Git is saying that you can't pull because you have local changes. But you don't care of those local modifications, you just want to get the last version of the distant branch. But Git don't care about what YOU want...* +*I have to admit that my only solution is as highly efficient as dirty... A good old `rm -r` of the repository and a `git clone`* + +#### Let's work + +Eventually, you can work on your code. +When you are finally ok with what you have done, it's time to validate your work. + +The first step is to inform Git about which file(s) to validate. To do so, we'll use `git add` +```bash +git add my_file +git add my_other_file and_also_this_one +``` +If you want to validate all your work, you can also simply do +```bash +git add --all +``` + +To check the current status of your validation, you can use `git status`. It will show you which files will be included into your commit, and which files are modified, but not yet included. +`git status -v` will show also which part of the files are modified. A good way to be sure that you didn't make a mistake before committing. + +#### `git checkout -b` + +Before committing, or after, or before starting to work. Whenever you feel like it ! +You should consider adding your work to a separate branch, that way, it will be easy to create a pull request to merge into the testing branch and discuss with the other packagers what you suggest to change. + +To create a new branch and move to this branch, you can use `git checkout -b my_new_branch`. + +#### `git commit` + +To commit is simply to validate your work in Git. As you can do in GitHub. +To have the same fields that you had on GitHub, with the name of the commit, and a longer explanation. You can simply use `git commit`. +The first line, before the comments, is for the name of the commit. +After all the comments, you can add an explanation if you want to. + +If you want to commit with only a name for your commit, you can use a simple command: +```bash +git commit -m "My commit name" +``` + +#### Push to the distant repository + +Your changes are validated, but only on your local clone of the repository. Now, you have to send those modifications back to the distant repository on GitHub. +In order to do that, you need to know what is your current branch. (If you don't know, `git branch` will give you that info). +Then you can git push +```bash +git push -u origin BRANCH_NAME +``` diff --git a/pages/06.contribute/10.packaging_apps/80.resources/04.virtualbox/packaging_apps_virtualbox.fr.md b/pages/06.contribute/10.packaging_apps/80.resources/04.virtualbox/packaging_apps_virtualbox.fr.md new file mode 100644 index 00000000..d132ab69 --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/80.resources/04.virtualbox/packaging_apps_virtualbox.fr.md @@ -0,0 +1,99 @@ +--- +title: Créer un environnement de développement avec VirtualBox +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_virtualbox' +--- + +Cette page de documentation va vous expliquer comment mettre en place un serveur YunoHost virtuel, avec VirtualBox, pour travailler sur le packaging d'application. + +## Pourquoi utiliser VirtualBox plutôt qu’un serveur YunoHost de production pour packager une application ? + +Il y a principalement deux raisons pour préférer l'usage d'un serveur virtuel plutôt que votre propre serveur : + +- Vous pouvez torturer à loisir un serveur virtuel sans courir le risque de le casser, puisque vous pourrez toujours restaurer un état précédent. Alors qu'il serait dommage de casser son propre serveur ! +- Un serveur virtuel sera restauré avant de travailler dessus, pour garder en permanence un système sans résidus d'une précédente installation. Cela permet de se rapprocher au plus près d'une première installation par un utilisateur. + +Nous parlerons ici de VirtualBox, pour son approche graphique facile à utiliser. Si vous préférez une interface en ligne de commande pour la gestion de la machine virtuelle, tournez-vous de préférence vers [ynh-dev](/dev). + +## Installer VirtualBox + +Depuis un système GNU/Linux, installer simplement le paquet `virtualbox-qt`. +Depuis un système Windows ou macOS, il faudra se référer à la page de [téléchargement de VirtualBox](https://www.virtualbox.org/wiki/Downloads) pour récupérer le fichier d'installation adéquat. Le paquet virtualbox est déprécié depuis Debian 9, un fichier d'installation `.deb` est disponible sur la même page. + +Quel que soit votre système, il ne devrait pas être nécessaire d'installer l'extension pack ou les additions invités. + +## Installer YunoHost sur VirtualBox + +Suivez simplement la documentation idoine pour l'[installation sur VirtualBox](/install_on_virtualbox) puis la documentation sur la [post-installation](/postinstall). + +Lors de la post-installation, il est inutile d'utiliser un nom de domaine en `.nohost.me` ou `.noho.st`, votre serveur virtuel ne sera pas accessible depuis l'extérieur de votre réseau local. +Nous préférerons l'usage d'un faux nom de domaine qui restera cantonné au réseau local. Par exemple, `yunohost.packaging`. + +Ce nom de domaine n'étant enregistré dans aucun serveur DNS, on l'enregistrera dans le fichier `hosts` de l'ordinateur qui y accédera. Voir la documentation sur le [DNS local](/dns_local_network). + +Votre serveur virtuel est à présent installé. Avant de commencer à l'utiliser, nous allons voir comment créer un premier instantané et comment les utiliser. + +## Utiliser les instantanés + +VirtualBox prend tout son intérêt avec l'usage des instantanés, qui permettent d'enregistrer l'état de la machine à un moment donné et d'y revenir rapidement. +Nous verrons également par la suite comment utiliser plusieurs branches d'instantanés pour travailler sur des apps différentes sur une même machine. + +#### Tout d'abord, créons un premier instantané + +Avant de commencer à jouer avec la machine virtuelle, il convient de faire un premier instantané, pour ne pas avoir à recommencer le processus d'installation à chaque fois. +Arrêtez la machine virtuelle avant tout. + +La gestion des instantanés se fait dans l'onglet "Instantanés" +![](image://virtualbox_packaging1-fr.jpg) + +Et on crée un premier instantané +![](image://virtualbox_packaging2-fr.jpg) + +À présent on peut commencer à travailler sur la machine virtuelle et créer autant d'instantanés que souhaité pour jalonner le travail. + +![](image://virtualbox_packaging3-fr.jpg) + +Dans cet exemple, on pourra facilement revenir en arrière, après avoir testé la suppression du package par exemple et restaurer la machine virtuelle dans l'état précédent avec le package encore installé avec succès. +Et lorsque le package sera pleinement fonctionnel, il suffira de supprimer les instantanés liés à ce package pour revenir à l'état initial de la machine virtuelle. +Nous disposerons ainsi d'un serveur YunoHost vierge de toute installation d'application pour notre prochain test. + +#### Utiliser plusieurs branches d'instantanés + +En plus de l'usage d'instantanés successifs, il est également possible de dériver un nouvel état actuel et de nouveaux instantanés depuis un instantané plus ancien que le dernier. + +![](image://virtualbox_packaging4-fr.jpg) + +Dans cet exemple, j'ai dérivé deux branches depuis mon installation réussie du package, pour tester indépendamment la suppression simple de l'application, l'upgrade et le backup/restore. +Finalement je suis reparti de la base de la machine virtuelle pour démarrer un nouveau test sur un autre package, sans pour autant abandonner le précédent test. +À tout moment, il est possible de revenir sur un instantané précédent en le restaurant. +La machine démarrera toujours sur l'"État actuel". + +![](image://virtualbox_packaging5-fr.jpg) + +> Il est toujours possible de créer un nouvel instantané, que la machine soit à l'arrêt ou non. +Mais pour restaurer un instantané, la machine ne doit pas être en cours d'exécution. + +## Comment se connecter à la machine virtuelle ? + +On se connecte à la machine virtuelle comme à n'importe quel serveur YunoHost, en utilisant SSH. + +```bash +ssh admin@mon.domain +``` +Ou, si le domaine n'a pas été ajouté dans le hosts, en utilisant son ip. + +```bash +ssh admin@11.22.33.44 +``` + +À présent, on peut travailler sur la machine virtuelle en CLI. + +Pour copier facilement les fichiers du package ou utiliser un éditeur de texte graphique, on peut également se connecter en SFTP avec un explorateur de fichier. + +Il suffit de se connecter à l'adresse `sftp://admin@mon.domain/` avec l'explorateur. +![](image://virtualbox_packaging6.jpg) + +> Sur Windows ou macOS, l'explorateur de fichier ne supporte pas nativement le protocole SFTP... diff --git a/pages/06.contribute/10.packaging_apps/80.resources/04.virtualbox/packaging_apps_virtualbox.md b/pages/06.contribute/10.packaging_apps/80.resources/04.virtualbox/packaging_apps_virtualbox.md new file mode 100644 index 00000000..4a3c12af --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/80.resources/04.virtualbox/packaging_apps_virtualbox.md @@ -0,0 +1,98 @@ +--- +title: Create a development environment with VirtualBox +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_virtualbox' +--- + +This documentation page aims at explaining how to setup a YunoHost virtual server, using VirtualBox, to work on application packaging. + +## Why use VirtualBox rather than an actual YunoHost production server to package an application? + +There are mostly two reasons why one should prefer a virtual server rather than their own server: + +- You can freely torture a virtual server without any risk of breaking it, since you can always restore it to a former working state. It would really be a pity to break your own real server! +- In a typical workflow, a virtual server state would be restored from a known snapshot before starting any work on it, so as to always keep a clean system, without any residues of a former installation. This allows to always be as close a possible to a user first installation. + +We will discuss VirtualBox in this guide, as it comes with an easy to use GUI. If you prefer a pure commandline approach to handling your virtual machine, you should use [ynh-dev](/dev) instead. + +## Installing VirtualBox + +From a GNU/Linux system, simply install the `virtualbox-qt` package. +From a Windows or macOS machine, you'd have to refer to the [VirtualBox download page](https://www.virtualbox.org/wiki/Downloads) to fetch the appropriate installation package. The virtualbox package is deprecated since Debian 9, a `.deb` installation package is available on the abovementioned referenced page. + +Whatever your system, there should be no need to install the extension pack or the guest addons. + +## Installing YunoHost on VirtualBox + +Simply follow the appropriate documentation for [installing on VirtualBox](/install_on_virtualbox) then the [post-installation](/postinstall) guide. + +During post-install, there is no need to use an actual domain name in `.nohost.me` or `.noho.st`, as your virtual server won't be reachable from outside your local network. +We prefer using a fake domain name which will remain associated with your local network, for instance `yunohost.packaging`. + +This domain name, not being registered with any DNS server, will be stored in the `hosts` file of the computer which will need to access it. Please refer to the documentation about [using a local DNS](/dns_local_network) for more information. + +Your virtual server is now installed. Before starting to use it, we'll see how to create a first snapshot and how to use that feature. + +## Using snapshots + +VirtualBox becomes even more interesting with its snapshotting feature, which allow to store the virtualized machine state and restore it quickly. +We'll also see how to use multiple snapshot branches to work on different apps on the same machine. + +#### Now, let's create a first snapshot + +Before starting to play with the virtual machine, now is a good time to take a first snapshot, so that we don't have to redo the full install process every time. +First, stop the virtual machine. + +Managing snapshots is done in the 'Snapshots' tab +![](image://virtualbox_packaging1-en.png) + +Here, we're creating a first snapshot +![](image://virtualbox_packaging2-en.png) + +We can now start to work on the virtual machine and create as many snapshots as desired for each milestone of our modifications. + +![](image://virtualbox_packaging3-en.png) + +In this example, after having validated our particular package removal works fine, we can easily get back in time by restoring the virtual machine to its previous state with the package still installed. +Once the package will be fully functional, it will just be a matter of deleting the snaphots associated with this package work to get the virtual machine back to its initial state. +For our next test, we will then be back to a freshly installed YunoHost serveur, without any trace of package installation. + +#### Using multiple snapshot branches + +In addition to successive snapshots, it is also possible to create a new machine state and additional snapshots from an older machine snapshot/state. + +![](image://virtualbox_packaging4-en.png) + +In this example, I have created two branches since my successful package installation, so as to independently test just the application removal, upgrade and backup/restore steps. +I eventually got back to the virtual machine base state to start a new test on another package, without dropping my former test whatsoever. +At any time, it is possible to get back to a previous snapshot simply by restoring it. +The machine always start on the "Current state" state. + +![](image://virtualbox_packaging5-en.png) + +> It is always possible to create a new snapshot, whether the machine is stopped or not. To restore a snapshot however, the machine cannot be running. + +## How do we connect to the virtual machine? + +Virtual machine connection is similar to any YunoHost server connection, that is by using SSH. + +```bash +ssh admin@my.domain +``` +Or, if the domain has not been added to the `hosts` file, via its IP address. + +```bash +ssh admin@11.22.33.44 +``` + +We can now work on the virtual machine using the commandline. + +To easily copy the package files or use a graphical text editor, one can also connect via SFTP using a file explorer. + +It's a simple matter of using the `sftp://admin@my.domain/` address. +![](image://virtualbox_packaging6.jpg) + +> Note: on Windows or macOS, the file explorer does not natively support the SFTP protocol... diff --git a/pages/06.contribute/10.packaging_apps/80.resources/11.helpers/packaging_apps_helpers.md b/pages/06.contribute/10.packaging_apps/80.resources/11.helpers/packaging_apps_helpers.md new file mode 100644 index 00000000..139689db --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/80.resources/11.helpers/packaging_apps_helpers.md @@ -0,0 +1,2675 @@ +--- +title: App helpers +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_helpers' +--- + +Doc auto-generated by [this script](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/doc/generate_helper_doc.py) on 22/07/2023 (YunoHost version 11.2.3) + + +## APPS + +#### ynh_install_apps +[details summary="Install others YunoHost apps" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_install_apps --apps="appfoo?domain=domain.foo&path=/foo appbar?domain=domain.bar&path=/bar&admin=USER&language=fr&is_public=1&pass?word=pass&port=666"` + +**Arguments**: +- `-a`, `--apps=`: apps to install + +**Details**:
+Requires YunoHost version *.*.* or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/apps#L9) +[/details] +---------------- + +#### ynh_remove_apps +[details summary="Remove other YunoHost apps" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_remove_apps` + +**Details**:
+Other YunoHost apps will be removed only if no other apps need them. + +Requires YunoHost version *.*.* or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/apps#L65) +[/details] +---------------- + +#### ynh_spawn_app_shell +[details summary="Spawn a Bash shell with the app environment loaded" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_spawn_app_shell --app="app" + | arg: -a, --app= - the app ID` + +**Examples**: + + +- ` ynh_spawn_app_shell --app="APP" <<< 'echo "$USER"'` + + + +- ` ynh_spawn_app_shell --app="APP" < /tmp/some_script.bash` + + + +**Details**:
+Requires YunoHost version 11.0.* or higher, and that the app relies on packaging v2 or higher. +The spawned shell will have environment variables loaded and environment files sourced +from the app's service configuration file (defaults to $app.service, overridable by the packager with `service` setting). +If the app relies on a specific PHP version, then `php` will be aliased that version. The PHP command will also be appended with the `phpflags` settings. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/apps#L128) +[/details] +---------------- + + +## APT + +#### ynh_package_is_installed +[details summary="Check either a package is installed or not" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_package_is_installed --package=name` + +**Arguments**: +- `-p`, `--package=`: the package name to check + +**Returns**: 0 if the package is installed, 1 else. + +**Example**: `ynh_package_is_installed --package=yunohost && echo "installed"` + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/apt#L53) +[/details] +---------------- + +#### ynh_package_version +[details summary="Get the version of an installed package" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_package_version --package=name` + +**Arguments**: +- `-p`, `--package=`: the package name to get version + +**Returns**: the version or an empty string + +**Example**: `version=$(ynh_package_version --package=yunohost)` + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/apt#L75) +[/details] +---------------- + +#### ynh_package_update +[details summary="Update package index files" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_package_update` + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/apt#L107) +[/details] +---------------- + +#### ynh_package_install +[details summary="Install package(s)" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_package_install name [name [...]]` + +**Arguments**: +- `name`: the package name to install + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/apt#L117) +[/details] +---------------- + +#### ynh_package_remove +[details summary="Remove package(s)" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_package_remove name [name [...]]` + +**Arguments**: +- `name`: the package name to remove + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/apt#L128) +[/details] +---------------- + +#### ynh_package_autoremove +[details summary="Remove package(s) and their uneeded dependencies" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_package_autoremove name [name [...]]` + +**Arguments**: +- `name`: the package name to remove + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/apt#L138) +[/details] +---------------- + +#### ynh_package_autopurge +[details summary="Purge package(s) and their uneeded dependencies" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_package_autopurge name [name [...]]` + +**Arguments**: +- `name`: the package name to autoremove and purge + +**Details**:
+Requires YunoHost version 2.7.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/apt#L148) +[/details] +---------------- + +#### ynh_install_app_dependencies +[details summary="Define and install dependencies with a equivs control file" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_install_app_dependencies dep [dep [...]]` + +**Arguments**: +- `dep`: the package name to install in dependence. +- `"dep1|dep2|…"`: You can specify alternatives. It will require to install (dep1 or dep2, etc). + +**Details**:
+This helper can/should only be called once per app + +example : ynh_install_app_dependencies dep1 dep2 "dep3|dep4|dep5" + +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/apt#L225) +[/details] +---------------- + +#### ynh_add_app_dependencies +[details summary="Add dependencies to install with ynh_install_app_dependencies" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_add_app_dependencies --package=phpversion [--replace]` + +**Arguments**: +- `-p`, `--package=`: Packages to add as dependencies for the app. + +**Details**:
+Requires YunoHost version 3.8.1 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/apt#L338) +[/details] +---------------- + +#### ynh_remove_app_dependencies +[details summary="Remove fake package and its dependencies" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_remove_app_dependencies` + +**Details**:
+Dependencies will removed only if no other package need them. + +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/apt#L357) +[/details] +---------------- + +#### ynh_install_extra_app_dependencies +[details summary="Install packages from an extra repository properly." class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_install_extra_app_dependencies --repo="repo" --package="dep1 dep2" [--key=key_url] [--name=name]` + +**Arguments**: +- `-r`, `--repo=`: Complete url of the extra repository. +- `-p`, `--package=`: The packages to install from this extra repository +- `-k`, `--key=`: url to get the public key. +- `-n`, `--name=`: Name for the files for this repo, $app as default value. + +**Details**:
+Requires YunoHost version 3.8.1 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/apt#L391) +[/details] +---------------- + + +## BACKUP + +#### ynh_backup +[details summary="Add a file or a directory to the list of paths to backup" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_backup --src_path=src_path [--dest_path=dest_path] [--is_big] [--not_mandatory]` + +**Arguments**: +- `-s`, `--src_path=`: file or directory to bind or symlink or copy. it shouldn't be in the backup dir. +- `-d`, `--dest_path=`: destination file or directory inside the backup dir +- `-b`, `--is_big`: Indicate data are big (mail, video, image ...) +- `-m`, `--not_mandatory`: Indicate that if the file is missing, the backup can ignore it. + +**Details**:
+This helper can be used both in a system backup hook, and in an app backup script + +`ynh_backup` writes `src_path` and the relative `dest_path` into a CSV file, and it +creates the parent destination directory + +If `dest_path` is ended by a slash it complete this path with the basename of `src_path`. + +Example in the context of a wordpress app : +``` +ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" +# => This line will be added into CSV file +# "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/etc/nginx/conf.d/$domain.d/$app.conf" + +ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf/nginx.conf" +# => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/nginx.conf" + +ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf/" +# => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/$app.conf" + +ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf" +# => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf" + +#Deprecated usages (maintained for retro-compatibility) +ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "${backup_dir}/conf/nginx.conf" +# => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/nginx.conf" + +ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "/conf/" +# => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/$app.conf" + +``` + +How to use `--is_big`: + +`--is_big` is used to specify that this part of the backup can be quite huge. +So, you don't want that your package does backup that part during ynh_backup_before_upgrade. +In the same way, an user may doesn't want to backup this big part of the app for +each of his backup. And so handle that part differently. + +As this part of your backup may not be done, your restore script has to handle it. +In your restore script, use `--not_mandatory` with `ynh_restore_file` +As well in your remove script, you should not remove those data ! Or an user may end up with +a failed upgrade restoring an app without data anymore ! + +To have the benefit of `--is_big` while doing a backup, you can whether set the environement +variable `BACKUP_CORE_ONLY` to 1 (`BACKUP_CORE_ONLY=1`) before the backup command. It will affect +only that backup command. +Or set the config `do_not_backup_data` to 1 into the `settings.yml` of the app. This will affect +all backups for this app until the setting is removed. + +Requires YunoHost version 2.4.0 or higher. +Requires YunoHost version 3.5.0 or higher for the argument `--not_mandatory` + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/backup#L64) +[/details] +---------------- + +#### ynh_restore +[details summary="Restore all files that were previously backuped in a core backup script or app backup script" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_restore` + +**Details**:
+Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/backup#L179) +[/details] +---------------- + +#### ynh_restore_file +[details summary="Restore a file or a directory" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_restore_file --origin_path=origin_path [--dest_path=dest_path] [--not_mandatory]` + +**Arguments**: +- `-o`, `--origin_path=`: Path where was located the file or the directory before to be backuped or relative path to $YNH_CWD where it is located in the backup archive +- `-d`, `--dest_path=`: Path where restore the file or the dir. If unspecified, the destination will be `ORIGIN_PATH` or if the `ORIGIN_PATH` doesn't exist in the archive, the destination will be searched into `backup.csv` +- `-m`, `--not_mandatory`: Indicate that if the file is missing, the restore process can ignore it. + +**Examples**: + + +- ` ynh_restore_file -o "/etc/nginx/conf.d/$domain.d/$app.conf"` + + + +- `You can also use relative paths:` + + + +- ` ynh_restore_file -o "conf/nginx.conf"` + + + +**Details**:
+Use the registered path in backup_list by ynh_backup to restore the file at the right place. + +If `DEST_PATH` already exists and is lighter than 500 Mo, a backup will be made in +`/var/cache/yunohost/appconfbackup/`. Otherwise, the existing file is removed. + +if `apps/$app/etc/nginx/conf.d/$domain.d/$app.conf` exists, restore it into +`/etc/nginx/conf.d/$domain.d/$app.conf` +if no, search for a match in the csv (eg: conf/nginx.conf) and restore it into +`/etc/nginx/conf.d/$domain.d/$app.conf` + +Requires YunoHost version 2.6.4 or higher. +Requires YunoHost version 3.5.0 or higher for the argument --not_mandatory + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/backup#L238) +[/details] +---------------- + +#### ynh_store_file_checksum +[details summary="Calculate and store a file checksum into the app settings" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_store_file_checksum --file=file` + +**Arguments**: +- `-f`, `--file=`: The file on which the checksum will performed, then stored. + +**Details**:
+$app should be defined when calling this helper + +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/backup#L306) +[/details] +---------------- + +#### ynh_backup_if_checksum_is_different +[details summary="Verify the checksum and backup the file if it's different" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_backup_if_checksum_is_different --file=file` + +**Arguments**: +- `-f`, `--file=`: The file on which the checksum test will be perfomed. + +**Returns**: the name of a backup file, or nothing + +**Details**:
+This helper is primarily meant to allow to easily backup personalised/manually +modified config files. + +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/backup#L357) +[/details] +---------------- + +#### ynh_delete_file_checksum +[details summary="Delete a file checksum from the app settings" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_delete_file_checksum --file=file` + +**Arguments**: +- `-f`, `--file=`: The file for which the checksum will be deleted + +**Details**:
+$app should be defined when calling this helper + +Requires YunoHost version 3.3.1 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/backup#L397) +[/details] +---------------- + +#### ynh_backup_before_upgrade +[details summary="Make a backup in case of failed upgrade" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_backup_before_upgrade` + +**Details**:
+Usage in a package script: +``` + ynh_backup_before_upgrade + ynh_clean_setup () { + ynh_restore_upgradebackup + } + ynh_abort_if_errors +``` + +Requires YunoHost version 2.7.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/backup#L432) +[/details] +---------------- + +#### ynh_restore_upgradebackup +[details summary="Restore a previous backup if the upgrade process failed" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_restore_upgradebackup` + +**Details**:
+Usage in a package script: +``` + ynh_backup_before_upgrade + ynh_clean_setup () { + ynh_restore_upgradebackup + } + ynh_abort_if_errors +``` + +Requires YunoHost version 2.7.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/backup#L480) +[/details] +---------------- + + +## CONFIG + + +## FAIL2BAN + +#### ynh_add_fail2ban_config +[details summary="Create a dedicated fail2ban config (jail and filter conf files)" class="helper-card-subtitle text-muted"] + +**Usage**: `1: ynh_add_fail2ban_config --logpath=log_file --failregex=filter [--max_retry=max_retry] [--ports=ports] +2: ynh_add_fail2ban_config --use_template` + +**Arguments**: +- `-l`, `--logpath=`: Log file to be checked by fail2ban +- `-r`, `--failregex=`: Failregex to be looked for by fail2ban +- `-m`, `--max_retry=`: Maximum number of retries allowed before banning IP address - default: 3 +- `-p`, `--ports=`: Ports blocked for a banned IP address - default: http,https +- `-t`, `--use_template`: Use this helper in template mode + +**Details**:
+----------------------------------------------------------------------------- + +This will use a template in `../conf/f2b_jail.conf` and `../conf/f2b_filter.conf` +See the documentation of `ynh_add_config` for a description of the template +format and how placeholders are replaced with actual variables. + +Generally your template will look like that by example (for synapse): +``` +f2b_jail.conf: + [__APP__] + enabled = true + port = http,https + filter = __APP__ + logpath = /var/log/__APP__/logfile.log + maxretry = 3 +``` +``` +f2b_filter.conf: + [INCLUDES] + before = common.conf + [Definition] + +# Part of regex definition (just used to make more easy to make the global regex) + __synapse_start_line = .? \- synapse\..+ \- + +# Regex definition. + failregex = ^%(__synapse_start_line)s INFO \- POST\-(\d+)\- \- \d+ \- Received request\: POST /_matrix/client/r0/login\??%(__synapse_start_line)s INFO \- POST\-\1\- Got login request with identifier: \{u'type': u'm.id.user', u'user'\: u'(.+?)'\}, medium\: None, address: None, user\: u'\5'%(__synapse_start_line)s WARNING \- \- (Attempted to login as @\5\:.+ but they do not exist|Failed password login for user @\5\:.+)$ + +ignoreregex = +``` + +----------------------------------------------------------------------------- + +Note about the "failregex" option: + +regex to match the password failure messages in the logfile. The host must be +matched by a group named "`host`". The tag "``" can be used for standard +IP/hostname matching and is only an alias for `(?:::f{4,6}:)?(?P[\w\-.^_]+)` + +You can find some more explainations about how to make a regex here : +https://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Filters + +Note that the logfile need to exist before to call this helper !! + +To validate your regex you can test with this command: +``` +fail2ban-regex /var/log/YOUR_LOG_FILE_PATH /etc/fail2ban/filter.d/YOUR_APP.conf +``` + +Requires YunoHost version 4.1.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/fail2ban#L64) +[/details] +---------------- + +#### ynh_remove_fail2ban_config +[details summary="Remove the dedicated fail2ban config (jail and filter conf files)" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_remove_fail2ban_config` + +**Details**:
+Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/fail2ban#L119) +[/details] +---------------- + + +## GETOPTS + + +## HARDWARE + +#### ynh_get_ram +[details summary="Get the total or free amount of RAM+swap on the system" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_get_ram [--free|--total] [--ignore_swap|--only_swap]` + +**Arguments**: +- `-f`, `--free`: Count free RAM+swap +- `-t`, `--total`: Count total RAM+swap +- `-s`, `--ignore_swap`: Ignore swap, consider only real RAM +- `-o`, `--only_swap`: Ignore real RAM, consider only swap + +**Returns**: the amount of free ram, in MB (MegaBytes) + +**Details**:
+Requires YunoHost version 3.8.1 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/hardware#L13) +[/details] +---------------- + +#### ynh_require_ram +[details summary="Return 0 or 1 depending if the system has a given amount of RAM+swap free or total" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_require_ram --required=RAM [--free|--total] [--ignore_swap|--only_swap]` + +**Arguments**: +- `-r`, `--required=`: The amount to require, in MB +- `-f`, `--free`: Count free RAM+swap +- `-t`, `--total`: Count total RAM+swap +- `-s`, `--ignore_swap`: Ignore swap, consider only real RAM +- `-o`, `--only_swap`: Ignore real RAM, consider only swap + +**Returns**: 1 if the ram is under the requirement, 0 otherwise. + +**Details**:
+Requires YunoHost version 3.8.1 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/hardware#L75) +[/details] +---------------- + + +## LOGGING + +#### ynh_die +[details summary="Print a message to stderr and exit" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_die --message=MSG [--ret_code=RETCODE]` + +**Arguments**: +- `-m`, `--message=`: Message to display +- `-c`, `--ret_code=`: Exit code to exit with + +**Details**:
+Requires YunoHost version 2.4.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/logging#L10) +[/details] +---------------- + +#### ynh_print_info +[details summary="Display a message in the 'INFO' logging category" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_print_info --message="Some message"` + +**Arguments**: +- `-m`, `--message=`: Message to display + +**Details**:
+Requires YunoHost version 3.2.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/logging#L30) +[/details] +---------------- + +#### ynh_print_warn +[details summary="Print a warning on stderr" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_print_warn --message="Text to print"` + +**Arguments**: +- `-m`, `--message=`: The text to print + +**Details**:
+Requires YunoHost version 3.2.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/logging#L56) +[/details] +---------------- + +#### ynh_print_err +[details summary="Print an error on stderr" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_print_err --message="Text to print"` + +**Arguments**: +- `-m`, `--message=`: The text to print + +**Details**:
+Requires YunoHost version 3.2.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/logging#L73) +[/details] +---------------- + +#### ynh_exec_err +[details summary="Execute a command and print the result as an error" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_exec_err your command and args` + +**Arguments**: +- `command`: command to execute + +**Details**:
+Note that you should NOT quote the command but only prefix it with ynh_exec_err + +Requires YunoHost version 3.2.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/logging#L92) +[/details] +---------------- + +#### ynh_exec_warn +[details summary="Execute a command and print the result as a warning" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_exec_warn your command and args` + +**Arguments**: +- `command`: command to execute + +**Details**:
+Note that you should NOT quote the command but only prefix it with ynh_exec_warn + +Requires YunoHost version 3.2.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/logging#L113) +[/details] +---------------- + +#### ynh_exec_warn_less +[details summary="Execute a command and force the result to be printed on stdout" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_exec_warn_less your command and args` + +**Arguments**: +- `command`: command to execute + +**Details**:
+Note that you should NOT quote the command but only prefix it with ynh_exec_warn + +Requires YunoHost version 3.2.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/logging#L134) +[/details] +---------------- + +#### ynh_exec_quiet +[details summary="Execute a command and redirect stdout in /dev/null" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_exec_quiet your command and args` + +**Arguments**: +- `command`: command to execute + +**Details**:
+Note that you should NOT quote the command but only prefix it with ynh_exec_warn + +Requires YunoHost version 3.2.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/logging#L155) +[/details] +---------------- + +#### ynh_exec_fully_quiet +[details summary="Execute a command and redirect stdout and stderr in /dev/null" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_exec_quiet your command and args` + +**Arguments**: +- `command`: command to execute + +**Details**:
+Note that you should NOT quote the command but only prefix it with ynh_exec_quiet + +Requires YunoHost version 3.2.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/logging#L176) +[/details] +---------------- + +#### ynh_script_progression +[details summary="Print a progress bar showing the progression of an app script" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_script_progression --message=message [--weight=weight] [--time]` + +**Arguments**: +- `-m`, `--message=`: The text to print +- `-w`, `--weight=`: The weight for this progression. This value is 1 by default. Use a bigger value for a longer part of the script. +- `-t`, `--time`: Print the execution time since the last call to this helper. Especially usefull to define weights. The execution time is given for the duration since the previous call. So the weight should be applied to this previous call. +- `-l`, `--last`: Use for the last call of the helper, to fill the progression bar. + +**Details**:
+Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/logging#L237) +[/details] +---------------- + +#### ynh_return +[details summary="Return data to the YunoHost core for later processing +(to be used by special hooks like app config panel and core diagnosis)" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_return somedata` + +**Details**:
+Requires YunoHost version 3.6.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/logging#L325) +[/details] +---------------- + + +## LOGROTATE + +#### ynh_use_logrotate +[details summary="Use logrotate to manage the logfile" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_use_logrotate [--logfile=/log/file] [--nonappend] [--specific_user=user/group]` + +**Arguments**: +- `-l`, `--logfile=`: absolute path of logfile +- `-n`, `--nonappend`: (optional) Replace the config file instead of appending this new config. +- `-u`, `--specific_user=`: run logrotate as the specified user and group. If not specified logrotate is runned as root. + +**Details**:
+If no `--logfile` is provided, `/var/log/$app` will be used as default. +`logfile` can point to a directory or a file. + +It's possible to use this helper multiple times, each config will be added to +the same logrotate config file. Unless you use the option `--non-append` + +Requires YunoHost version 2.6.4 or higher. +Requires YunoHost version 3.2.0 or higher for the argument `--specific_user` + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/logrotate#L18) +[/details] +---------------- + +#### ynh_remove_logrotate +[details summary="Remove the app's logrotate config." class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_remove_logrotate` + +**Details**:
+Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/logrotate#L109) +[/details] +---------------- + + +## MULTIMEDIA + +#### ynh_multimedia_build_main_dir +[details summary="Initialize the multimedia directory system" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_multimedia_build_main_dir` + +**Details**:
+Requires YunoHost version 4.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/multimedia#L11) +[/details] +---------------- + +#### ynh_multimedia_addfolder +[details summary="Add a directory in yunohost.multimedia" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_multimedia_addfolder --source_dir="source_dir" --dest_dir="dest_dir"` + +**Arguments**: +- `-s`, `--source_dir=`: Source directory - The real directory which contains your medias. +- `-d`, `--dest_dir=`: Destination directory - The name and the place of the symbolic link, relative to "/home/yunohost.multimedia" + +**Details**:
+This "directory" will be a symbolic link to a existing directory. + +Requires YunoHost version 4.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/multimedia#L64) +[/details] +---------------- + +#### ynh_multimedia_addaccess +[details summary="Allow an user to have an write authorisation in multimedia directories" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_multimedia_addaccess user_name` + +**Arguments**: +- `-u`, `--user_name=`: The name of the user which gain this access. + +**Details**:
+Requires YunoHost version 4.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/multimedia#L93) +[/details] +---------------- + + +## MYSQL + +#### ynh_mysql_connect_as +[details summary="Open a connection as a user" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_mysql_connect_as --user=user --password=password [--database=database]` + +**Arguments**: +- `-u`, `--user=`: the user name to connect as +- `-p`, `--password=`: the user password +- `-d`, `--database=`: the database to connect to + +**Examples**: + + +- ` ynh_mysql_connect_as --user="user" --password="pass" <<< "UPDATE ...;"` + + + +- ` ynh_mysql_connect_as --user="user" --password="pass" < /path/to/file.sql` + + + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/mysql#L15) +[/details] +---------------- + +#### ynh_mysql_execute_as_root +[details summary="Execute a command as root user" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_mysql_execute_as_root --sql=sql [--database=database]` + +**Arguments**: +- `-s`, `--sql=`: the SQL command to execute +- `-d`, `--database=`: the database to connect to + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/mysql#L36) +[/details] +---------------- + +#### ynh_mysql_execute_file_as_root +[details summary="Execute a command from a file as root user" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_mysql_execute_file_as_root --file=file [--database=database]` + +**Arguments**: +- `-f`, `--file=`: the file containing SQL commands +- `-d`, `--database=`: the database to connect to + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/mysql#L60) +[/details] +---------------- + +#### ynh_mysql_dump_db +[details summary="Dump a database" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_mysql_dump_db --database=database` + +**Arguments**: +- `-d`, `--database=`: the database name to dump + +**Returns**: The mysqldump output + +**Example**: `ynh_mysql_dump_db --database=roundcube > ./dump.sql` + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/mysql#L128) +[/details] +---------------- + +#### ynh_mysql_user_exists +[details summary="Check if a mysql user exists" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_mysql_user_exists --user=user` + +**Arguments**: +- `-u`, `--user=`: the user for which to check existence + +**Returns**: 0 if the user exists, 1 otherwise. + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/mysql#L160) +[/details] +---------------- + +#### ynh_mysql_setup_db +[details summary="Create a database, an user and its password. Then store the password in the app's config" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_mysql_setup_db --db_user=user --db_name=name [--db_pwd=pwd]` + +**Arguments**: +- `-u`, `--db_user=`: Owner of the database +- `-n`, `--db_name=`: Name of the database +- `-p`, `--db_pwd=`: Password of the database. If not provided, a password will be generated + +**Details**:
+After executing this helper, the password of the created database will be available in `$db_pwd` +It will also be stored as "`mysqlpwd`" into the app settings. + +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/mysql#L198) +[/details] +---------------- + +#### ynh_mysql_remove_db +[details summary="Remove a database if it exists, and the associated user" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_mysql_remove_db --db_user=user --db_name=name` + +**Arguments**: +- `-u`, `--db_user=`: Owner of the database +- `-n`, `--db_name=`: Name of the database + +**Details**:
+Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/mysql#L224) +[/details] +---------------- + + +## NETWORK + +#### ynh_find_port +[details summary="Find a free port and return it" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_find_port --port=begin_port` + +**Arguments**: +- `-p`, `--port=`: port to start to search + +**Returns**: the port number + +**Example**: `port=$(ynh_find_port --port=8080)` + +**Details**:
+Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/network#L12) +[/details] +---------------- + +#### ynh_port_available +[details summary="Test if a port is available" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_find_port --port=XYZ` + +**Arguments**: +- `-p`, `--port=`: port to check + +**Returns**: 0 if the port is available, 1 if it is already used by another process. + +**Example**: `ynh_port_available --port=1234 || ynh_die --message="Port 1234 is needs to be available for this app"` + +**Details**:
+Requires YunoHost version 3.8.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/network#L36) +[/details] +---------------- + +#### ynh_validate_ip4 +[details summary="Validate an IPv4 address" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_validate_ip4 --ip_address=ip_address` + +**Arguments**: +- `-i`, `--ip_address=`: the ipv4 address to check + +**Returns**: 0 for valid ipv4 addresses, 1 otherwise + +**Example**: `ynh_validate_ip4 111.222.333.444` + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/network#L99) +[/details] +---------------- + +#### ynh_validate_ip6 +[details summary="Validate an IPv6 address" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_validate_ip6 --ip_address=ip_address` + +**Arguments**: +- `-i`, `--ip_address=`: the ipv6 address to check + +**Returns**: 0 for valid ipv6 addresses, 1 otherwise + +**Example**: `ynh_validate_ip6 2000:dead:beef::1` + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/network#L119) +[/details] +---------------- + + +## NGINX + +#### ynh_add_nginx_config +[details summary="Create a dedicated nginx config" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_add_nginx_config` + +**Details**:
+This will use a template in `../conf/nginx.conf` +See the documentation of `ynh_add_config` for a description of the template +format and how placeholders are replaced with actual variables. + +Additionally, ynh_add_nginx_config will replace: +- `#sub_path_only` by empty string if `path_url` is not `'/'` +- `#root_path_only` by empty string if `path_url` *is* `'/'` + +This allows to enable/disable specific behaviors dependenging on the install +location + +Requires YunoHost version 4.1.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/nginx#L19) +[/details] +---------------- + +#### ynh_remove_nginx_config +[details summary="Remove the dedicated nginx config" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_remove_nginx_config` + +**Details**:
+Requires YunoHost version 2.7.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/nginx#L41) +[/details] +---------------- + +#### ynh_change_url_nginx_config +[details summary="Move / regen the nginx config in a change url context" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_change_url_nginx_config` + +**Details**:
+Requires YunoHost version 11.1.9 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/nginx#L52) +[/details] +---------------- + + +## NODEJS + +#### ynh_use_nodejs +[details summary="Load the version of node for an app, and set variables." class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_use_nodejs` + +**Details**:
+`ynh_use_nodejs` has to be used in any app scripts before using node for the first time. +This helper will provide alias and variables to use in your scripts. + +To use npm or node, use the alias `ynh_npm` and `ynh_node`. + +Those alias will use the correct version installed for the app. +For example: use `ynh_npm install` instead of `npm install` + +With `sudo` or `ynh_exec_as`, use instead the fallback variables `$ynh_npm` and `$ynh_node` +And propagate $PATH to sudo with $ynh_node_load_PATH +Exemple: `ynh_exec_as $app $ynh_node_load_PATH $ynh_npm install` + +$PATH contains the path of the requested version of node. +However, $PATH is duplicated into $node_PATH to outlast any manipulation of `$PATH` +You can use the variable `$ynh_node_load_PATH` to quickly load your node version +in $PATH for an usage into a separate script. +Exemple: $ynh_node_load_PATH $final_path/script_that_use_npm.sh` + +Finally, to start a nodejs service with the correct version, 2 solutions + Either the app is dependent of node or npm, but does not called it directly. + In such situation, you need to load PATH : +``` +Environment="__NODE_ENV_PATH__" +ExecStart=__FINALPATH__/my_app +``` +You will replace __NODE_ENV_PATH__ with $ynh_node_load_PATH. + +Or node start the app directly, then you don't need to load the PATH variable +``` +ExecStart=__YNH_NODE__ my_app run +``` +You will replace __YNH_NODE__ with $ynh_node + +2 other variables are also available + - $nodejs_path: The absolute path to node binaries for the chosen version. + - $nodejs_version: Just the version number of node for this app. Stored as 'nodejs_version' in settings.yml. + +Requires YunoHost version 2.7.12 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/nodejs#L52) +[/details] +---------------- + +#### ynh_install_nodejs +[details summary="Install a specific version of nodejs" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_install_nodejs --nodejs_version=nodejs_version` + +**Arguments**: +- `-n`, `--nodejs_version=`: Version of node to install. When possible, your should prefer to use major version number (e.g. 8 instead of 8.10.0). The crontab will then handle the update of minor versions when needed. + +**Details**:
+ynh_install_nodejs will install the version of node provided as argument by using n. + +`n` (Node version management) uses the `PATH` variable to store the path of the version of node it is going to use. +That's how it changes the version + +Refer to `ynh_use_nodejs` for more information about available commands and variables + +Requires YunoHost version 2.7.12 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/nodejs#L92) +[/details] +---------------- + +#### ynh_remove_nodejs +[details summary="Remove the version of node used by the app." class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_remove_nodejs` + +**Details**:
+This helper will check if another app uses the same version of node. +- If not, this version of node will be removed. +- If no other app uses node, n will be also removed. + +Requires YunoHost version 2.7.12 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/nodejs#L165) +[/details] +---------------- + + +## PERMISSION + +#### ynh_permission_create +[details summary="Create a new permission for the app" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_permission_create --permission="permission" [--url="url"] [--additional_urls="second-url" [ "third-url" ]] [--auth_header=true|false] + [--allowed=group1 [ group2 ]] [--label="label"] [--show_tile=true|false] + [--protected=true|false]` + +**Arguments**: +- `-p`, `--permission=`: the name for the permission (by default a permission named "main" already exist) +- `-u`, `--url=`: (optional) URL for which access will be allowed/forbidden. Note that if 'show_tile' is enabled, this URL will be the URL of the tile. +- `-A`, `--additional_urls=`: (optional) List of additional URL for which access will be allowed/forbidden +- `-h`, `--auth_header=`: (optional) Define for the URL of this permission, if SSOwat pass the authentication header to the application. Default is true +- `-a`, `--allowed=`: (optional) A list of group/user to allow for the permission +- `-l`, `--label=`: (optional) Define a name for the permission. This label will be shown on the SSO and in the admin. Default is "APP_LABEL (permission name)". +- `-t`, `--show_tile=`: (optional) Define if a tile will be shown in the SSO. If yes the name of the tile will be the 'label' parameter. Defaults to false for the permission different than 'main'. +- `-P`, `--protected=`: (optional) Define if this permission is protected. If it is protected the administrator won't be able to add or remove the visitors group of this permission. Defaults to 'false'. + +**Details**:
+Example 1: `ynh_permission_create --permission=admin --url=/admin --additional_urls=domain.tld/admin /superadmin --allowed=alice bob \ + --label="My app admin" --show_tile=true` + +This example will create a new permission permission with this following effect: +- A tile named "My app admin" in the SSO will be available for the users alice and bob. This tile will point to the relative url '/admin'. +- Only the user alice and bob will have the access to theses following url: /admin, domain.tld/admin, /superadmin + +Example 2: + +ynh_permission_create --permission=api --url=domain.tld/api --auth_header=false --allowed=visitors \ + --label="MyApp API" --protected=true + +This example will create a new protected permission. So the admin won't be able to add/remove the visitors group of this permission. +In case of an API with need to be always public it avoid that the admin break anything. +With this permission all client will be allowed to access to the url 'domain.tld/api'. +Note that in this case no tile will be show on the SSO. +Note that the auth_header parameter is to 'false'. So no authentication header will be passed to the application. +Generally the API is requested by an application and enabling the auth_header has no advantage and could bring some issues in some case. +So in this case it's better to disable this option for all API. + +If provided, 'url' or 'additional_urls' is assumed to be relative to the app domain/path if they +start with '/'. For example: + / -> domain.tld/app + /admin -> domain.tld/app/admin + domain.tld/app/api -> domain.tld/app/api + +'url' or 'additional_urls' can be treated as a PCRE (not lua) regex if it starts with "re:". +For example: + re:/api/[A-Z]*$ -> domain.tld/app/api/[A-Z]*$ + re:domain.tld/app/api/[A-Z]*$ -> domain.tld/app/api/[A-Z]*$ + +Note that globally the parameter 'url' and 'additional_urls' are same. The only difference is: +- 'url' is only one url, 'additional_urls' can be a list of urls. There are no limitation of 'additional_urls' +- 'url' is used for the url of tile in the SSO (if enabled with the 'show_tile' parameter) + +About the authentication header (auth_header parameter). +The SSO pass (by default) to the application theses following HTTP header (linked to the authenticated user) to the application: + - "Auth-User": username + - "Remote-User": username + - "Email": user email + +Generally this feature is usefull to authenticate automatically the user in the application but in some case the application don't work with theses header and theses header need to be disabled to have the application to work correctly. +See https://github.com/YunoHost/issues/issues/1420 for more informations + +Requires YunoHost version 3.7.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/permission#L66) +[/details] +---------------- + +#### ynh_permission_delete +[details summary="Remove a permission for the app (note that when the app is removed all permission is automatically removed)" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_permission_delete --permission="permission"` + +**Arguments**: +- `-p`, `--permission=`: the name for the permission (by default a permission named "main" is removed automatically when the app is removed) + +**Example**: `ynh_permission_delete --permission=editors` + +**Details**:
+Requires YunoHost version 3.7.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/permission#L152) +[/details] +---------------- + +#### ynh_permission_exists +[details summary="Check if a permission exists" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_permission_exists --permission=permission +| exit: Return 1 if the permission doesn't exist, 0 otherwise` + +**Arguments**: +- `-p`, `--permission=`: the permission to check + +**Details**:
+Requires YunoHost version 3.7.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/permission#L169) +[/details] +---------------- + +#### ynh_permission_url +[details summary="Redefine the url associated to a permission" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_permission_url --permission "permission" [--url="url"] [--add_url="new-url" [ "other-new-url" ]] [--remove_url="old-url" [ "other-old-url" ]] + [--auth_header=true|false] [--clear_urls]` + +**Arguments**: +- `-p`, `--permission=`: the name for the permission (by default a permission named "main" is removed automatically when the app is removed) +- `-u`, `--url=`: (optional) URL for which access will be allowed/forbidden. Note that if you want to remove url you can pass an empty sting as arguments (""). +- `-a`, `--add_url=`: (optional) List of additional url to add for which access will be allowed/forbidden. +- `-r`, `--remove_url=`: (optional) List of additional url to remove for which access will be allowed/forbidden +- `-h`, `--auth_header=`: (optional) Define for the URL of this permission, if SSOwat pass the authentication header to the application +- `-c`, `--clear_urls`: (optional) Clean all urls (url and additional_urls) + +**Details**:
+Requires YunoHost version 3.7.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/permission#L192) +[/details] +---------------- + +#### ynh_permission_update +[details summary="Update a permission for the app" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_permission_update --permission "permission" [--add="group" ["group" ...]] [--remove="group" ["group" ...]] + [--label="label"] [--show_tile=true|false] [--protected=true|false]` + +**Arguments**: +- `-p`, `--permission=`: the name for the permission (by default a permission named "main" already exist) +- `-a`, `--add=`: the list of group or users to enable add to the permission +- `-r`, `--remove=`: the list of group or users to remove from the permission +- `-l`, `--label=`: (optional) Define a name for the permission. This label will be shown on the SSO and in the admin. +- `-t`, `--show_tile=`: (optional) Define if a tile will be shown in the SSO +- `-P`, `--protected=`: (optional) Define if this permission is protected. If it is protected the administrator won't be able to add or remove the visitors group of this permission. + +**Details**:
+Requires YunoHost version 3.7.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/permission#L260) +[/details] +---------------- + +#### ynh_permission_has_user +[details summary="Check if a permission has an user" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_permission_has_user --permission=permission --user=user +| exit: Return 1 if the permission doesn't have that user or doesn't exist, 0 otherwise` + +**Arguments**: +- `-p`, `--permission=`: the permission to check +- `-u`, `--user=`: the user seek in the permission + +**Example**: `ynh_permission_has_user --permission=main --user=visitors` + +**Details**:
+Requires YunoHost version 3.7.1 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/permission#L329) +[/details] +---------------- + +#### ynh_legacy_permissions_exists +[details summary="Check if a legacy permissions exist" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_legacy_permissions_exists +| exit: Return 1 if the permission doesn't exist, 0 otherwise` + +**Details**:
+Requires YunoHost version 4.1.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/permission#L359) +[/details] +---------------- + +#### ynh_legacy_permissions_delete_all +[details summary="Remove all legacy permissions" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_legacy_permissions_delete_all` + +**Example**: `if ynh_legacy_permissions_exists then ynh_legacy_permissions_delete_all # You can recreate the required permissions here with ynh_permission_create fi Requires YunoHost version 4.1.2 or higher.` + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/permission#L379) +[/details] +---------------- + + +## PHP + +#### ynh_add_fpm_config +[details summary="Create a dedicated PHP-FPM config" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_add_fpm_config` + +**Details**:
+Case 1 (recommended) : your provided a snippet conf/extra_php-fpm.conf + +The actual PHP configuration will be automatically generated, +and your extra_php-fpm.conf will be appended (typically contains PHP upload limits) + +The resulting configuration will be deployed to the appropriate place, /etc/php/$phpversion/fpm/pool.d/$app.conf + +Performance-related options in the PHP conf, such as : +pm.max_children, pm.start_servers, pm.min_spare_servers pm.max_spare_servers +are computed from two parameters called "usage" and "footprint" which can be set to low/medium/high. (cf details below) + +If you wish to tweak those, please initialize the settings `fpm_usage` and `fpm_footprint` +*prior* to calling this helper. Otherwise, "low" will be used as a default for both values. + +Otherwise, if you want the user to have control over these, we encourage to create a config panel +(which should ultimately be standardized by the core ...) + +Case 2 (deprecate) : you provided an entire conf/php-fpm.conf + +The configuration will be hydrated, replacing __FOOBAR__ placeholders with $foobar values, etc. + +The resulting configuration will be deployed to the appropriate place, /etc/php/$phpversion/fpm/pool.d/$app.conf + +---------------------- + +fpm_footprint: Memory footprint of the service (low/medium/high). +low - Less than 20 MB of RAM by pool. +medium - Between 20 MB and 40 MB of RAM by pool. +high - More than 40 MB of RAM by pool. +N - Or you can specify a quantitative footprint as MB by pool (use watch -n0.5 ps -o user,cmd,%cpu,rss -u APP) + +fpm_usage: Expected usage of the service (low/medium/high). +low - Personal usage, behind the SSO. +medium - Low usage, few people or/and publicly accessible. +high - High usage, frequently visited website. + +The footprint of the service will be used to defined the maximum footprint we can allow, which is half the maximum RAM. +So it will be used to defined 'pm.max_children' +A lower value for the footprint will allow more children for 'pm.max_children'. And so for + 'pm.start_servers', 'pm.min_spare_servers' and 'pm.max_spare_servers' which are defined from the + value of 'pm.max_children' +NOTE: 'pm.max_children' can't exceed 4 times the number of processor's cores. + +The usage value will defined the way php will handle the children for the pool. +A value set as 'low' will set the process manager to 'ondemand'. Children will start only if the + service is used, otherwise no child will stay alive. This config gives the lower footprint when the + service is idle. But will use more proc since it has to start a child as soon it's used. +Set as 'medium', the process manager will be at dynamic. If the service is idle, a number of children + equal to pm.min_spare_servers will stay alive. So the service can be quick to answer to any request. + The number of children can grow if needed. The footprint can stay low if the service is idle, but + not null. The impact on the proc is a little bit less than 'ondemand' as there's always a few + children already available. +Set as 'high', the process manager will be set at 'static'. There will be always as many children as + 'pm.max_children', the footprint is important (but will be set as maximum a quarter of the maximum + RAM) but the impact on the proc is lower. The service will be quick to answer as there's always many + children ready to answer. + +Requires YunoHost version 4.1.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/php#L70) +[/details] +---------------- + +#### ynh_remove_fpm_config +[details summary="Remove the dedicated PHP-FPM config" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_remove_fpm_config` + +**Details**:
+Requires YunoHost version 2.7.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/php#L281) +[/details] +---------------- + +#### ynh_composer_exec +[details summary="Execute a command with Composer" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_composer_exec [--phpversion=phpversion] [--workdir=$install_dir] --commands="commands"` + +**Arguments**: +- `-v`, `--phpversion`: PHP version to use with composer +- `-w`, `--workdir`: The directory from where the command will be executed. Default $install_dir or $final_path +- `-c`, `--commands`: Commands to execute. + +**Details**:
+Requires YunoHost version 4.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/php#L514) +[/details] +---------------- + +#### ynh_install_composer +[details summary="Install and initialize Composer in the given directory" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_install_composer [--phpversion=phpversion] [--workdir=$install_dir] [--install_args="--optimize-autoloader"] [--composerversion=composerversion]` + +**Arguments**: +- `-v`, `--phpversion`: PHP version to use with composer +- `-w`, `--workdir`: The directory from where the command will be executed. Default $install_dir. +- `-a`, `--install_args`: Additional arguments provided to the composer install. Argument --no-dev already include +- `-c`, `--composerversion`: Composer version to install + +**Details**:
+Requires YunoHost version 4.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/php#L546) +[/details] +---------------- + + +## POSTGRESQL + +#### ynh_psql_connect_as +[details summary="Open a connection as a user" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_psql_connect_as --user=user --password=password [--database=database]` + +**Arguments**: +- `-u`, `--user=`: the user name to connect as +- `-p`, `--password=`: the user password +- `-d`, `--database=`: the database to connect to + +**Examples**: + + +- ` ynh_psql_connect_as 'user' 'pass' <<< "UPDATE ...;"` + + + +- ` ynh_psql_connect_as 'user' 'pass' < /path/to/file.sql` + + + +**Details**:
+Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/postgresql#L18) +[/details] +---------------- + +#### ynh_psql_execute_as_root +[details summary="Execute a command as root user" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_psql_execute_as_root --sql=sql [--database=database]` + +**Arguments**: +- `-s`, `--sql=`: the SQL command to execute +- `-d`, `--database=`: the database to connect to + +**Details**:
+Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/postgresql#L39) +[/details] +---------------- + +#### ynh_psql_execute_file_as_root +[details summary="Execute a command from a file as root user" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_psql_execute_file_as_root --file=file [--database=database]` + +**Arguments**: +- `-f`, `--file=`: the file containing SQL commands +- `-d`, `--database=`: the database to connect to + +**Details**:
+Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/postgresql#L64) +[/details] +---------------- + +#### ynh_psql_dump_db +[details summary="Dump a database" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_psql_dump_db --database=database` + +**Arguments**: +- `-d`, `--database=`: the database name to dump + +**Returns**: the psqldump output + +**Example**: `ynh_psql_dump_db 'roundcube' > ./dump.sql` + +**Details**:
+Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/postgresql#L135) +[/details] +---------------- + +#### ynh_psql_user_exists +[details summary="Check if a psql user exists" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_psql_user_exists --user=user +| exit: Return 1 if the user doesn't exist, 0 otherwise` + +**Arguments**: +- `-u`, `--user=`: the user for which to check existence + +**Details**:
+Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/postgresql#L168) +[/details] +---------------- + +#### ynh_psql_database_exists +[details summary="Check if a psql database exists" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_psql_database_exists --database=database +| exit: Return 1 if the database doesn't exist, 0 otherwise` + +**Arguments**: +- `-d`, `--database=`: the database for which to check existence + +**Details**:
+Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/postgresql#L190) +[/details] +---------------- + +#### ynh_psql_setup_db +[details summary="Create a database, an user and its password. Then store the password in the app's config" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_psql_setup_db --db_user=user --db_name=name [--db_pwd=pwd]` + +**Arguments**: +- `-u`, `--db_user=`: Owner of the database +- `-n`, `--db_name=`: Name of the database +- `-p`, `--db_pwd=`: Password of the database. If not provided, a password will be generated + +**Details**:
+After executing this helper, the password of the created database will be available in $db_pwd +It will also be stored as "psqlpwd" into the app settings. + +Requires YunoHost version 2.7.13 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/postgresql#L234) +[/details] +---------------- + +#### ynh_psql_remove_db +[details summary="Remove a database if it exists, and the associated user" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_psql_remove_db --db_user=user --db_name=name` + +**Arguments**: +- `-u`, `--db_user=`: Owner of the database +- `-n`, `--db_name=`: Name of the database + +**Details**:
+Requires YunoHost version 2.7.13 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/postgresql#L265) +[/details] +---------------- + + +## SETTING + +#### ynh_app_setting_get +[details summary="Get an application setting" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_app_setting_get --app=app --key=key` + +**Arguments**: +- `-a`, `--app=`: the application id +- `-k`, `--key=`: the setting to get + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/setting#L10) +[/details] +---------------- + +#### ynh_app_setting_set +[details summary="Set an application setting" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_app_setting_set --app=app --key=key --value=value` + +**Arguments**: +- `-a`, `--app=`: the application id +- `-k`, `--key=`: the setting name to set +- `-v`, `--value=`: the setting value to set + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/setting#L36) +[/details] +---------------- + +#### ynh_app_setting_delete +[details summary="Delete an application setting" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_app_setting_delete --app=app --key=key` + +**Arguments**: +- `-a`, `--app=`: the application id +- `-k`, `--key=`: the setting to delete + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/setting#L62) +[/details] +---------------- + +#### ynh_webpath_available +[details summary="Check availability of a web path" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_webpath_available --domain=domain --path_url=path` + +**Arguments**: +- `-d`, `--domain=`: the domain/host of the url +- `-p`, `--path_url=`: the web path to check the availability of + +**Example**: `ynh_webpath_available --domain=some.domain.tld --path_url=/coffee` + +**Details**:
+Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/setting#L123) +[/details] +---------------- + +#### ynh_webpath_register +[details summary="Register/book a web path for an app" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_webpath_register --app=app --domain=domain --path_url=path` + +**Arguments**: +- `-a`, `--app=`: the app for which the domain should be registered +- `-d`, `--domain=`: the domain/host of the web path +- `-p`, `--path_url=`: the web path to be registered + +**Example**: `ynh_webpath_register --app=wordpress --domain=some.domain.tld --path_url=/coffee` + +**Details**:
+Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/setting#L145) +[/details] +---------------- + + +## STRING + +#### ynh_string_random +[details summary="Generate a random string" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_string_random [--length=string_length]` + +**Arguments**: +- `-l`, `--length=`: the string length to generate (default: 24) +- `-f`, `--filter=`: the kind of characters accepted in the output (default: 'A-Za-z0-9') + +**Returns**: the generated string + +**Example**: `pwd=$(ynh_string_random --length=8)` + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/string#L13) +[/details] +---------------- + +#### ynh_replace_string +[details summary="Substitute/replace a string (or expression) by another in a file" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_replace_string --match_string=match_string --replace_string=replace_string --target_file=target_file` + +**Arguments**: +- `-m`, `--match_string=`: String to be searched and replaced in the file +- `-r`, `--replace_string=`: String that will replace matches +- `-f`, `--target_file=`: File in which the string will be replaced. + +**Details**:
+As this helper is based on sed command, regular expressions and references to +sub-expressions can be used (see sed manual page for more information) + +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/string#L40) +[/details] +---------------- + +#### ynh_replace_special_string +[details summary="Substitute/replace a special string by another in a file" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_replace_special_string --match_string=match_string --replace_string=replace_string --target_file=target_file` + +**Arguments**: +- `-m`, `--match_string=`: String to be searched and replaced in the file +- `-r`, `--replace_string=`: String that will replace matches +- `-t`, `--target_file=`: File in which the string will be replaced. + +**Details**:
+This helper will use ynh_replace_string, but as you can use special +characters, you can't use some regular expressions and sub-expressions. + +Requires YunoHost version 2.7.7 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/string#L71) +[/details] +---------------- + +#### ynh_sanitize_dbid +[details summary="Sanitize a string intended to be the name of a database" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_sanitize_dbid --db_name=name` + +**Arguments**: +- `-n`, `--db_name=`: name to correct/sanitize + +**Returns**: the corrected name + +**Example**: `dbname=$(ynh_sanitize_dbid $app)` + +**Details**:
+Underscorify the string (replace - and . by _) + +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/string#L103) +[/details] +---------------- + + +## SYSTEMD + +#### ynh_add_systemd_config +[details summary="Create a dedicated systemd config" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_add_systemd_config [--service=service] [--template=template]` + +**Arguments**: +- `-s`, `--service=`: Service name (optionnal, `$app` by default) +- `-t`, `--template=`: Name of template file (optionnal, this is 'systemd' by default, meaning `../conf/systemd.service` will be used as template) + +**Details**:
+This will use the template `../conf/.service`. + +See the documentation of `ynh_add_config` for a description of the template +format and how placeholders are replaced with actual variables. + +Requires YunoHost version 4.1.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/systemd#L15) +[/details] +---------------- + +#### ynh_remove_systemd_config +[details summary="Remove the dedicated systemd config" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_remove_systemd_config [--service=service]` + +**Arguments**: +- `-s`, `--service=`: Service name (optionnal, $app by default) + +**Details**:
+Requires YunoHost version 2.7.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/systemd#L38) +[/details] +---------------- + +#### ynh_systemd_action +[details summary="Start (or other actions) a service, print a log in case of failure and optionnaly wait until the service is completely started" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_systemd_action [--service_name=service_name] [--action=action] [ [--line_match="line to match"] [--log_path=log_path] [--timeout=300] [--length=20] ]` + +**Arguments**: +- `-n`, `--service_name=`: Name of the service to start. Default : `$app` +- `-a`, `--action=`: Action to perform with systemctl. Default: start +- `-l`, `--line_match=`: Line to match - The line to find in the log to attest the service have finished to boot. If not defined it don't wait until the service is completely started. +- `-p`, `--log_path=`: Log file - Path to the log file. Default : `/var/log/$app/$app.log` +- `-t`, `--timeout=`: Timeout - The maximum time to wait before ending the watching. Default : 300 seconds. +- `-e`, `--length=`: Length of the error log displayed for debugging : Default : 20 + +**Details**:
+Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/systemd#L67) +[/details] +---------------- + + +## USER + +#### ynh_user_exists +[details summary="Check if a YunoHost user exists" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_user_exists --username=username` + +**Arguments**: +- `-u`, `--username=`: the username to check + +**Returns**: 0 if the user exists, 1 otherwise. + +**Example**: `ynh_user_exists 'toto' || echo "User does not exist"` + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/user#L12) +[/details] +---------------- + +#### ynh_user_get_info +[details summary="Retrieve a YunoHost user information" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_user_get_info --username=username --key=key` + +**Arguments**: +- `-u`, `--username=`: the username to retrieve info from +- `-k`, `--key=`: the key to retrieve + +**Returns**: the value associate to that key + +**Example**: `mail=$(ynh_user_get_info --username="toto" --key=mail)` + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/user#L33) +[/details] +---------------- + +#### ynh_user_list +[details summary="Get the list of YunoHost users" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_user_list` + +**Returns**: one username per line as strings + +**Example**: `for u in $(ynh_user_list); do ... ; done` + +**Details**:
+Requires YunoHost version 2.4.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/user#L53) +[/details] +---------------- + +#### ynh_system_user_exists +[details summary="Check if a user exists on the system" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_system_user_exists --username=username` + +**Arguments**: +- `-u`, `--username=`: the username to check + +**Returns**: 0 if the user exists, 1 otherwise. + +**Details**:
+Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/user#L64) +[/details] +---------------- + +#### ynh_system_group_exists +[details summary="Check if a group exists on the system" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_system_group_exists --group=group` + +**Arguments**: +- `-g`, `--group=`: the group to check + +**Returns**: 0 if the group exists, 1 otherwise. + +**Details**:
+Requires YunoHost version 3.5.0.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/user#L82) +[/details] +---------------- + +#### ynh_system_user_create +[details summary="Create a system user" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_system_user_create --username=user_name [--home_dir=home_dir] [--use_shell] [--groups="group1 group2"]` + +**Arguments**: +- `-u`, `--username=`: Name of the system user that will be create +- `-h`, `--home_dir=`: Path of the home dir for the user. Usually the final path of the app. If this argument is omitted, the user will be created without home +- `-s`, `--use_shell`: Create a user using the default login shell if present. If this argument is omitted, the user will be created with /usr/sbin/nologin shell +- `-g`, `--groups`: Add the user to system groups. Typically meant to add the user to the ssh.app / sftp.app group (e.g. for borgserver, my_webapp) + +**Details**:
+Create a nextcloud user with no home directory and /usr/sbin/nologin login shell (hence no login capability) : +``` +ynh_system_user_create --username=nextcloud +``` +Create a discourse user using /var/www/discourse as home directory and the default login shell : +``` +ynh_system_user_create --username=discourse --home_dir=/var/www/discourse --use_shell +``` + +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/user#L111) +[/details] +---------------- + +#### ynh_system_user_delete +[details summary="Delete a system user" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_system_user_delete --username=user_name` + +**Arguments**: +- `-u`, `--username=`: Name of the system user that will be create + +**Details**:
+Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/user#L153) +[/details] +---------------- + +#### ynh_exec_as +[details summary="Execute a command as another user" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_exec_as $USER COMMAND [ARG ...]` + +**Details**:
+Requires YunoHost version 4.1.7 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/user#L179) +[/details] +---------------- + + +## UTILS + +#### ynh_abort_if_errors +[details summary="Exits if an error occurs during the execution of the script." class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_abort_if_errors` + +**Details**:
+This configure the rest of the script execution such that, if an error occurs +or if an empty variable is used, the execution of the script stops immediately +and a call to `ynh_clean_setup` is triggered if it has been defined by your script. + +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/utils#L61) +[/details] +---------------- + +#### ynh_setup_source +[details summary="Download, check integrity, uncompress and patch the source from app.src" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_setup_source --dest_dir=dest_dir [--source_id=source_id] [--keep="file1 file2"] [--full_replace]` + +**Arguments**: +- `-d`, `--dest_dir=`: Directory where to setup sources +- `-s`, `--source_id=`: Name of the source, defaults to `main` (when the sources resource exists in manifest.toml) or (legacy) `app` otherwise +- `-k`, `--keep=`: Space-separated list of files/folders that will be backup/restored in $dest_dir, such as a config file you don't want to overwrite. For example 'conf.json secrets.json logs/' +- `-r`, `--full_replace=`: Remove previous sources before installing new sources + +**Details**:
+#### New 'sources' resources + +(See also the resources documentation which may be more complete?) + +This helper will read infos from the 'sources' resources in the manifest.toml of the app +and expect a structure like: + +```toml +[resources.sources] + [resources.sources.main] + url = "https://some.address.to/download/the/app/archive" + sha256 = "0123456789abcdef" # The sha256 sum of the asset obtained from the URL +``` + +##### Optional flags + +```text +format = "tar.gz"/xz/bz2 # automatically guessed from the extension of the URL, but can be set explicitly. Will use `tar` to extract + "zip" # automatically guessed from the extension of the URL, but can be set explicitly. Will use `unzip` to extract + "docker" # useful to extract files from an already-built docker image (instead of rebuilding them locally). Will use `docker-image-extract` to extract + "whatever" # an arbitrary value, not really meaningful except to imply that the file won't be extracted + +in_subdir = true # default, there's an intermediate subdir in the archive before accessing the actual files + false # sources are directly in the archive root + n # (special cases) an integer representing a number of subdirs levels to get rid of + +extract = true # default if file is indeed an archive such as .zip, .tar.gz, .tar.bz2, ... + = false # default if file 'format' is not set and the file is not to be extracted because it is not an archive but a script or binary or whatever asset. + # in which case the file will only be `mv`ed to the location possibly renamed using the `rename` value + +rename = "whatever_your_want" # to be used for convenience when `extract` is false and the default name of the file is not practical +platform = "linux/amd64" # (defaults to "linux/$YNH_ARCH") to be used in conjonction with `format = "docker"` to specify which architecture to extract for +``` + +You may also define assets url and checksum per-architectures such as: +```toml +[resources.sources] + [resources.sources.main] + amd64.url = "https://some.address.to/download/the/app/archive/when/amd64" + amd64.sha256 = "0123456789abcdef" + armhf.url = "https://some.address.to/download/the/app/archive/when/armhf" + armhf.sha256 = "fedcba9876543210" +``` + +In which case ynh_setup_source --dest_dir="$install_dir" will automatically pick the appropriate source depending on the arch + + + +#### Legacy format '.src' + +This helper will read `conf/${source_id}.src`, download and install the sources. + +The src file need to contains: +``` +SOURCE_URL=Address to download the app archive +SOURCE_SUM=Sha256 sum +SOURCE_FORMAT=tar.gz +SOURCE_IN_SUBDIR=false +SOURCE_FILENAME=example.tar.gz +SOURCE_EXTRACT=(true|false) +SOURCE_PLATFORM=linux/arm64/v8 +``` + +The helper will: +- Download the specific URL if there is no local archive +- Check the integrity with the specific sha256 sum +- Uncompress the archive to `$dest_dir`. + - If `in_subdir` is true, the first level directory of the archive will be removed. + - If `in_subdir` is a numeric value, the N first level directories will be removed. +- Patches named `sources/patches/${src_id}-*.patch` will be applied to `$dest_dir` +- Extra files in `sources/extra_files/$src_id` will be copied to dest_dir + +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/utils#L154) +[/details] +---------------- + +#### ynh_local_curl +[details summary="Curl abstraction to help with POST requests to local pages (such as installation forms)" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_local_curl "page_uri" "key1=value1" "key2=value2" ...` + +**Arguments**: +- `page_uri`: Path (relative to `$path_url`) of the page where POST data will be sent +- `key1=value1`: (Optionnal) POST key and corresponding value +- `key2=value2`: (Optionnal) Another POST key and corresponding value +- `...`: (Optionnal) More POST keys and values + +**Example**: `ynh_local_curl "/install.php?installButton" "foo=$var1" "bar=$var2"` + +**Details**:
+For multiple calls, cookies are persisted between each call for the same app + +`$domain` and `$path_url` should be defined externally (and correspond to the domain.tld and the /path (of the app?)) + +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/utils#L397) +[/details] +---------------- + +#### ynh_add_config +[details summary="Create a dedicated config file from a template" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_add_config --template="template" --destination="destination"` + +**Arguments**: +- `-t`, `--template=`: Template config file to use +- `-d`, `--destination=`: Destination of the config file + +**Examples**: + + +- ` ynh_add_config --template=".env" --destination="$install_dir/.env" use the template file "../conf/.env"` + + + +- ` ynh_add_config --template="/etc/nginx/sites-available/default" --destination="etc/nginx/sites-available/mydomain.conf"` + + + +**Details**:
+The template can be by default the name of a file in the conf directory +of a YunoHost Package, a relative path or an absolute path. + +The helper will use the template `template` to generate a config file +`destination` by replacing the following keywords with global variables +that should be defined before calling this helper : +``` + __PATH__ by $path_url + __NAME__ by $app + __NAMETOCHANGE__ by $app + __USER__ by $app + __FINALPATH__ by $final_path + __PHPVERSION__ by $YNH_PHP_VERSION (packaging v1 only, packaging v2 uses phpversion setting implicitly set by apt resource) + __YNH_NODE_LOAD_PATH__ by $ynh_node_load_PATH +``` +And any dynamic variables that should be defined before calling this helper like: +``` + __DOMAIN__ by $domain + __APP__ by $app + __VAR_1__ by $var_1 + __VAR_2__ by $var_2 +``` + +The helper will verify the checksum and backup the destination file +if it's different before applying the new template. + +And it will calculate and store the destination file checksum +into the app settings when configuration is done. + +Requires YunoHost version 4.1.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/utils#L481) +[/details] +---------------- + +#### ynh_read_var_in_file +[details summary="Get a value from heterogeneous file (yaml, json, php, python...)" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_read_var_in_file --file=PATH --key=KEY` + +**Arguments**: +- `-f`, `--file=`: the path to the file +- `-k`, `--key=`: the key to get + +**Details**:
+This helpers match several var affectation use case in several languages +We don't use jq or equivalent to keep comments and blank space in files +This helpers work line by line, it is not able to work correctly +if you have several identical keys in your files + +Example of line this helpers can managed correctly +.yml + title: YunoHost documentation + email: 'yunohost@yunohost.org' +.json + "theme": "colib'ris", + "port": 8102 + "some_boolean": false, + "user": null +.ini + some_boolean = On + action = "Clear" + port = 20 +.php + $user= + user => 20 +.py + USER = 8102 + user = 'https://donate.local' + CUSTOM['user'] = 'YunoHost' + +Requires YunoHost version 4.3 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/utils#L635) +[/details] +---------------- + +#### ynh_write_var_in_file +[details summary="Set a value into heterogeneous file (yaml, json, php, python...)" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_write_var_in_file --file=PATH --key=KEY --value=VALUE` + +**Arguments**: +- `-f`, `--file=`: the path to the file +- `-k`, `--key=`: the key to set +- `-v`, `--value=`: the value to set + +**Details**:
+Requires YunoHost version 4.3 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/utils#L712) +[/details] +---------------- + +#### ynh_get_debian_release +[details summary="Fetch the Debian release codename" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_get_debian_release` + +**Returns**: The Debian release codename (i.e. jessie, stretch, ...) + +**Details**:
+Requires YunoHost version 2.7.12 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/utils#L827) +[/details] +---------------- + +#### ynh_secure_remove +[details summary="Remove a file or a directory securely" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_secure_remove --file=path_to_remove` + +**Arguments**: +- `-f`, `--file=`: File or directory to remove + +**Details**:
+Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/utils#L858) +[/details] +---------------- + +#### ynh_read_manifest +[details summary="Read the value of a key in a ynh manifest file" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_read_manifest --manifest="manifest.json" --key="key"` + +**Arguments**: +- `-m`, `--manifest=`: Path of the manifest to read +- `-k`, `--key=`: Name of the key to find + +**Returns**: the value associate to that key + +**Details**:
+Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/utils#L892) +[/details] +---------------- + +#### ynh_app_upstream_version +[details summary="Read the upstream version from the manifest or `$YNH_APP_MANIFEST_VERSION`" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_app_upstream_version [--manifest="manifest.json"]` + +**Arguments**: +- `-m`, `--manifest=`: Path of the manifest to read + +**Returns**: the version number of the upstream app + +**Details**:
+If the `manifest` is not specified, the envvar `$YNH_APP_MANIFEST_VERSION` will be used. + +The version number in the manifest is defined by `~ynh`. + +For example, if the manifest contains `4.3-2~ynh3` the function will return `4.3-2` + +Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/utils#L935) +[/details] +---------------- + +#### ynh_app_package_version +[details summary="Read package version from the manifest" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_app_package_version [--manifest="manifest.json"]` + +**Arguments**: +- `-m`, `--manifest=`: Path of the manifest to read + +**Returns**: the version number of the package + +**Details**:
+The version number in the manifest is defined by `~ynh`. + +For example, if the manifest contains `4.3-2~ynh3` the function will return `3` + +Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/utils#L964) +[/details] +---------------- + +#### ynh_check_app_version_changed +[details summary="Checks the app version to upgrade with the existing app version and returns:" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_check_app_version_changed` + +**Returns**: `UPGRADE_APP` if the upstream version changed, `UPGRADE_PACKAGE` otherwise. + +**Details**:
+This helper should be used to avoid an upgrade of an app, or the upstream part +of it, when it's not needed + +You can force an upgrade, even if the package is up to date, with the `--force` (or `-F`) argument : +``` +sudo yunohost app upgrade --force +``` +Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/utils#L989) +[/details] +---------------- + +#### ynh_compare_current_package_version +[details summary="Compare the current package version against another version given as an argument." class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_compare_current_package_version --comparison (lt|le|eq|ne|ge|gt) --version ` + +**Arguments**: +- `--comparison`: Comparison type. Could be : `lt` (lower than), `le` (lower or equal), `eq` (equal), `ne` (not equal), `ge` (greater or equal), `gt` (greater than) +- `--version`: The version to compare. Need to be a version in the yunohost package version type (like `2.3.1~ynh4`) + +**Returns**: 0 if the evaluation is true, 1 if false. + +**Example**: `ynh_compare_current_package_version --comparison lt --version 2.3.2~ynh1` + +**Details**:
+This helper is usually used when we need to do some actions only for some old package versions. + +Generally you might probably use it as follow in the upgrade script : +``` +if ynh_compare_current_package_version --comparison lt --version 2.3.2~ynh1 +then + # Do something that is needed for the package version older than 2.3.2~ynh1 +fi +``` + +Requires YunoHost version 3.8.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/helpers/utils#L1019) +[/details] +---------------- + diff --git a/pages/06.contribute/10.packaging_apps/80.resources/15.appresources/packaging_apps_resources.md b/pages/06.contribute/10.packaging_apps/80.resources/15.appresources/packaging_apps_resources.md new file mode 100644 index 00000000..a91b0946 --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/80.resources/15.appresources/packaging_apps_resources.md @@ -0,0 +1,326 @@ +--- +title: App resources +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_resources' +--- + +Doc auto-generated by [this script](https://github.com/YunoHost/yunohost/blob/465f6da5cd4d716bbcb802dfd742114083034235/doc/generate_resource_doc.py) on 22/07/2023 (YunoHost version 11.2.3) + + +---------------- + +## Apt + +Create a virtual package in apt, depending on the list of specified packages that the app needs. The virtual packages is called `$app-ynh-deps` (with `_` being replaced by `-` in the app name, see `ynh_install_app_dependencies`) + +##### Example +```toml +[resources.apt] +packages = ["nyancat", "lolcat", "sl"] + +# (this part is optional and corresponds to the legacy ynh_install_extra_app_dependencies helper) +extras.yarn.repo = "deb https://dl.yarnpkg.com/debian/ stable main" +extras.yarn.key = "https://dl.yarnpkg.com/debian/pubkey.gpg" +extras.yarn.packages = ["yarn"] +``` + +##### Properties +- `packages`: List of packages to be installed via `apt` +- `packages_from_raw_bash`: A multi-line bash snippet (using triple quotes as open/close) which should echo additional packages to be installed. Meant to be used for packages to be conditionally installed depending on architecture, debian version, install questions, or other logic. +- `extras`: A dict of (repo, key, packages) corresponding to "extra" repositories to fetch dependencies from + +##### Provision/Update +- The code literally calls the bash helpers `ynh_install_app_dependencies` and `ynh_install_extra_app_dependencies`, similar to what happens in v1. +- Note that when `packages` contains some phpX.Y-foobar dependencies, this will automagically define a `phpversion` setting equal to `X.Y` which can therefore be used in app scripts ($phpversion) or templates (`__PHPVERSION__`) + +##### Deprovision +- The code literally calls the bash helper `ynh_remove_app_dependencies` + +---------------- + +## Data Dir + +Creates a directory to be used by the app as the data store directory, typically where the app multimedia or large assets added by users are located. The corresponding path is stored in the settings as `data_dir`. This resource behaves very similarly to install_dir. + +##### Example +```toml +[resources.data_dir] +# (empty - defaults are usually okay) +``` + +##### Properties +- `dir`: (default: `/home/yunohost.app/__APP__`) The full path of the data dir +- `subdirs`: (default: empty list) A list of subdirs to initialize inside the data dir. For example, `['foo', 'bar']` +- `owner`: (default: `__APP__:rwx`) The owner (and owner permissions) for the data dir +- `group`: (default: `__APP__:rx`) The group (and group permissions) for the data dir + +##### Provision/Update +- if the dir path changed and a folder exists at the old location, the folder will be `mv`'ed to the new location +- otherwise, creates the directory if it doesn't exists yet +- create each subdir declared and which do not exist already +- (re-)apply permissions (only on the folder itself and declared subdirs, not recursively) +- save the value of `dir` as `data_dir` in the app's settings, which can be then used by the app scripts (`$data_dir`) and conf templates (`__DATA_DIR__`) + +##### Deprovision +- (only if the purge option is chosen by the user) recursively deletes the directory if it exists +- also delete the corresponding setting + +##### Legacy management +- In the past, the setting may have been called `datadir`. The code will automatically rename it as `data_dir`. +- As explained in the 'Provision/Update' section, the folder will also be moved if the location changed + +---------------- + +## Database + +Initialize a database, either using MySQL or Postgresql. Relevant DB infos are stored in settings `$db_name`, `$db_user` and `$db_pwd`. + +NB: only one DB can be handled in such a way (is there really an app that would need two completely different DB ?...) + +NB2: no automagic migration will happen in an suddenly change `type` from `mysql` to `postgresql` or viceversa in its life + +##### Example +```toml +[resources.database] +type = "mysql" # or : "postgresql". Only these two values are supported +``` + +##### Properties +- `type`: The database type, either `mysql` or `postgresql` + +##### Provision/Update +- (Re)set the `$db_name` and `$db_user` settings with the sanitized app name (replacing `-` and `.` with `_`) +- If `$db_pwd` doesn't already exists, pick a random database password and store it in that setting +- If the database doesn't exists yet, create the SQL user and DB using `ynh_mysql_create_db` or `ynh_psql_create_db`. + +##### Deprovision +- Drop the DB using `ynh_mysql_remove_db` or `ynh_psql_remove_db` +- Deletes the `db_name`, `db_user` and `db_pwd` settings + +##### Legacy management +- In the past, the sql passwords may have been named `mysqlpwd` or `psqlpwd`, in which case it will automatically be renamed as `db_pwd` + +---------------- + +## Install Dir + +Creates a directory to be used by the app as the installation directory, typically where the app sources and assets are located. The corresponding path is stored in the settings as `install_dir` + +##### Example +```toml +[resources.install_dir] +# (empty - defaults are usually okay) +``` + +##### Properties +- `dir`: (default: `/var/www/__APP__`) The full path of the install dir +- `owner`: (default: `__APP__:rwx`) The owner (and owner permissions) for the install dir +- `group`: (default: `__APP__:rx`) The group (and group permissions) for the install dir + +##### Provision/Update +- during install, the folder will be deleted if it already exists (FIXME: is this what we want?) +- if the dir path changed and a folder exists at the old location, the folder will be `mv`'ed to the new location +- otherwise, creates the directory if it doesn't exists yet +- (re-)apply permissions (only on the folder itself, not recursively) +- save the value of `dir` as `install_dir` in the app's settings, which can be then used by the app scripts (`$install_dir`) and conf templates (`__INSTALL_DIR__`) + +##### Deprovision +- recursively deletes the directory if it exists + +##### Legacy management +- In the past, the setting was called `final_path`. The code will automatically rename it as `install_dir`. +- As explained in the 'Provision/Update' section, the folder will also be moved if the location changed + +---------------- + +## Permissions + +Configure the SSO permissions/tiles. Typically, webapps are expected to have a 'main' permission mapped to '/', meaning that a tile pointing to the `$domain/$path` will be available in the SSO for users allowed to access that app. + +Additional permissions can be created, typically to have a specific tile and/or access rules for the admin part of a webapp. + +The list of allowed user/groups may be initialized using the content of the `init_{perm}_permission` question from the manifest, hence `init_main_permission` replaces the `is_public` question and shall contain a group name (typically, `all_users` or `visitors`). + +##### Example +```toml +[resources.permissions] +main.url = "/" +# (these two previous lines should be enough in the majority of cases) + +admin.url = "/admin" +admin.show_tile = false +admin.allowed = "admins" # Assuming the "admins" group exists (cf future developments ;)) +``` + +##### Properties (for each perm name) +- `url`: The relative URI corresponding to this permission. Typically `/` or `/something`. This property may be omitted for non-web permissions. +- `show_tile`: (default: `true` if `url` is defined) Wether or not a tile should be displayed for that permission in the user portal +- `allowed`: (default: nobody) The group initially allowed to access this perm, if `init_{perm}_permission` is not defined in the manifest questions. Note that the admin may tweak who is allowed/unallowed on that permission later on, this is only meant to **initialize** the permission. +- `auth_header`: (default: `true`) Define for the URL of this permission, if SSOwat pass the authentication header to the application. Default is true +- `protected`: (default: `false`) Define if this permission is protected. If it is protected the administrator won't be able to add or remove the visitors group of this permission. Defaults to 'false'. +- `additional_urls`: (default: none) List of additional URL for which access will be allowed/forbidden + +##### Provision/Update +- Delete any permissions that may exist and be related to this app yet is not declared anymore +- Loop over the declared permissions and create them if needed or update them with the new values + +##### Deprovision +- Delete all permission related to this app + +##### Legacy management +- Legacy `is_public` setting will be deleted if it exists + +---------------- + +## Ports + +Book port(s) to be used by the app, typically to be used to the internal reverse-proxy between nginx and the app process. + +Note that because multiple ports can be booked, each properties is prefixed by the name of the port. `main` is a special name and will correspond to the setting `$port`, whereas for example `xmpp_client` will correspond to the setting `$port_xmpp_client`. + +##### Example +```toml +[resources.ports] +# (empty should be fine for most apps... though you can customize stuff if absolutely needed) + + +main.default = 12345 # if you really want to specify a prefered value .. but shouldnt matter in the majority of cases + +xmpp_client.default = 5222 # if you need another port, pick a name for it (here, "xmpp_client") +xmpp_client.exposed = "TCP" # here, we're telling that the port needs to be publicly exposed on TCP on the firewall +``` + +##### Properties (for every port name) +- `default`: The prefered value for the port. If this port is already being used by another process right now, or is booked in another app's setting, the code will increment the value until it finds a free port and store that value as the setting. If no value is specified, a random value between 10000 and 60000 is used. +- `exposed`: (default: `false`) Wether this port should be opened on the firewall and be publicly reachable. This should be kept to `false` for the majority of apps than only need a port for internal reverse-proxying! Possible values: `false`, `true`(=`Both`), `Both`, `TCP`, `UDP`. This will result in the port being opened on the firewall, and the diagnosis checking that a program answers on that port. +- `fixed`: (default: `false`) Tells that the app absolutely needs the specific value provided in `default`, typically because it's needed for a specific protocol + +##### Provision/Update (for every port name) +- If not already booked, look for a free port, starting with the `default` value (or a random value between 10000 and 60000 if no `default` set) +- If `exposed` is not `false`, open the port in the firewall accordingly - otherwise make sure it's closed. +- The value of the port is stored in the `$port` setting for the `main` port, or `$port_NAME` for other `NAME`s + +##### Deprovision +- Close the ports on the firewall if relevant +- Deletes all the port settings + +##### Legacy management +- In the past, some settings may have been named `NAME_port` instead of `port_NAME`, in which case the code will automatically rename the old setting. + +---------------- + +## Sources + +Declare what are the sources / assets used by this app. Typically, this corresponds to some tarball published by the upstream project, that needs to be downloaded and extracted in the install dir using the ynh_setup_source helper. + +This resource is intended both to declare the assets, which will be parsed by ynh_setup_source during the app script runtime, AND to prefetch and validate the sha256sum of those asset before actually running the script, to be able to report an error early when the asset turns out to not be available for some reason. + +Various options are available to accomodate the behavior according to the asset structure + +##### Example + +```toml +[resources.sources] + + [resources.sources.main] + url = "https://github.com/foo/bar/archive/refs/tags/v1.2.3.tar.gz" + sha256 = "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" + + autoupdate.strategy = "latest_github_tag" +``` + +Or more complex examples with several element, including one with asset that depends on the arch + +```toml +[resources.sources] + + [resources.sources.main] + in_subdir = false + amd64.url = "https://github.com/foo/bar/archive/refs/tags/v1.2.3.amd64.tar.gz" + amd64.sha256 = "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" + i386.url = "https://github.com/foo/bar/archive/refs/tags/v1.2.3.386.tar.gz" + i386.sha256 = "53c234e5e8472b6ac51c1ae1cab3fe06fad053beb8ebfd8977b010655bfdd3c3" + armhf.url = "https://github.com/foo/bar/archive/refs/tags/v1.2.3.arm.tar.gz" + armhf.sha256 = "4355a46b19d348dc2f57c046f8ef63d4538ebb936000f3c9ee954a27460dd865" + + autoupdate.strategy = "latest_github_release" + autoupdate.asset.amd64 = ".*\.amd64.tar.gz" + autoupdate.asset.i386 = ".*\.386.tar.gz" + autoupdate.asset.armhf = ".*\.arm.tar.gz" + + [resources.sources.zblerg] + url = "https://zblerg.com/download/zblerg" + sha256 = "1121cfccd5913f0a63fec40a6ffd44ea64f9dc135c66634ba001d10bcf4302a2" + format = "script" + rename = "zblerg.sh" + +``` + +##### Properties (for each source) + +- `prefetch` : `true` (default) or `false`, wether or not to pre-fetch this asset during the provisioning phase of the resource. If several arch-dependent url are provided, YunoHost will only prefetch the one for the current system architecture. +- `url` : the asset's URL + - If the asset's URL depend on the architecture, you may instead provide `amd64.url`, `i386.url`, `armhf.url` and `arm64.url` (depending on what architectures are supported), using the same `dpkg --print-architecture` nomenclature as for the supported architecture key in the manifest +- `sha256` : the asset's sha256sum. This is used both as an integrity check, and as a layer of security to protect against malicious actors which could have injected malicious code inside the asset... + - Same as `url` : if the asset's URL depend on the architecture, you may instead provide `amd64.sha256`, `i386.sha256`, ... +- `format` : The "format" of the asset. It is typically automatically guessed from the extension of the URL (or the mention of "tarball", "zipball" in the URL), but can be set explicitly: + - `tar.gz`, `tar.xz`, `tar.bz2` : will use `tar` to extract the archive + - `zip` : will use `unzip` to extract the archive + - `docker` : useful to extract files from an already-built docker image (instead of rebuilding them locally). Will use `docker-image-extract` + - `whatever`: whatever arbitrary value, not really meaningful except to imply that the file won't be extracted (eg because it's a .deb to be manually installed with dpkg/apt, or a script, or ...) +- `in_subdir`: `true` (default) or `false`, depending on if there's an intermediate subdir in the archive before accessing the actual files. Can also be `N` (an integer) to handle special cases where there's `N` level of subdir to get rid of to actually access the files +- `extract` : `true` or `false`. Defaults to `true` for archives such as `zip`, `tar.gz`, `tar.bz2`, ... Or defaults to `false` when `format` is not something that should be extracted. When `extract = false`, the file will only be `mv`ed to the location, possibly renamed using the `rename` value +- `rename`: some string like `whatever_your_want`, to be used for convenience when `extract` is `false` and the default name of the file is not practical +- `platform`: for example `linux/amd64` (defaults to `linux/$YNH_ARCH`) to be used in conjonction with `format = "docker"` to specify which architecture to extract for + +###### Regarding `autoupdate` + +Strictly speaking, this has nothing to do with the actual app install. `autoupdate` is expected to contain metadata for automatic maintenance / update of the app sources info in the manifest. It is meant to be a simpler replacement for "autoupdate" Github workflow mechanism. + +The infos are used by this script : https://github.com/YunoHost/apps/blob/master/tools/autoupdate_app_sources/autoupdate_app_sources.py which is ran by the YunoHost infrastructure periodically and will create the corresponding pull request automatically. + +The script will rely on the code repo specified in the upstream section of the manifest. + +`autoupdate.strategy` is expected to be one of : +- `latest_github_tag` : look for the latest tag (by sorting tags and finding the "largest" version). Then using the corresponding tar.gz url. Tags containing `rc`, `beta`, `alpha`, `start` are ignored, and actually any tag which doesn't look like `x.y.z` or `vx.y.z` +- `latest_github_release` : similar to `latest_github_tags`, but starting from the list of releases. Pre- or draft releases are ignored. Releases may have assets attached to them, in which case you can define: + - `autoupdate.asset = "some regex"` (when there's only one asset to use). The regex is used to find the appropriate asset among the list of all assets + - or several `autoupdate.asset.$arch = "some_regex"` (when the asset is arch-specific). The regex is used to find the appropriate asset for the specific arch among the list of assets +- `latest_github_commit` : will use the latest commit on github, and the corresponding tarball. If this is used for the 'main' source, it will also assume that the version is YYYY.MM.DD corresponding to the date of the commit. + +It is also possible to define `autoupdate.upstream` to use a different Git(hub) repository instead of the code repository from the upstream section of the manifest. This can be useful when, for example, the app uses other assets such as plugin from a different repository. + +##### Provision/Update +- For elements with `prefetch = true`, will download the asset (for the appropriate architecture) and store them in `/var/cache/yunohost/download/$app/$source_id`, to be later picked up by `ynh_setup_source`. (NB: this only happens during install and upgrade, not restore) + +##### Deprovision +- Nothing (just cleanup the cache) + +---------------- + +## System User + +Provision a system user to be used by the app. The username is exactly equal to the app id + +##### Example +```toml +[resources.system_user] +# (empty - defaults are usually okay) +``` + +##### Properties +- `allow_ssh`: (default: False) Adds the user to the ssh.app group, allowing SSH connection via this user +- `allow_sftp`: (default: False) Adds the user to the sftp.app group, allowing SFTP connection via this user +- `allow_email`: (default: False) Enable authentication on the mail stack for the system user and send mail using `__APP__@__DOMAIN__`. A `mail_pwd` setting is automatically defined (similar to `db_pwd` for databases). You can then configure the app to use `__APP__` and `__MAIL_PWD__` as SMTP credentials (with host 127.0.0.1). You can also tweak the user-part of the domain-part of the email used by manually defining a custom setting `mail_user` or `mail_domain` +- `home`: (default: `/var/www/__APP__`) Defines the home property for this user. NB: unfortunately you can't simply use `__INSTALL_DIR__` or `__DATA_DIR__` for now + +##### Provision/Update +- will create the system user if it doesn't exists yet +- will add/remove the ssh/sftp.app groups + +##### Deprovision +- deletes the user and group + diff --git a/pages/06.contribute/10.packaging_apps/80.resources/20.bash_tips/shell_variables_scope.fr.md b/pages/06.contribute/10.packaging_apps/80.resources/20.bash_tips/shell_variables_scope.fr.md new file mode 100644 index 00000000..7226dd7b --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/80.resources/20.bash_tips/shell_variables_scope.fr.md @@ -0,0 +1,226 @@ +--- +title: Portée générales des variables +template: docs +taxonomy: + category: docs +routes: + default: '/shell_variables_scope' +--- + +Les variables existent pour le shell courant et ses enfants uniquement. +Un script exécuté depuis le script n'est pas un enfant, c'est un autre shell qui n'héritera que des variables d'environnement du script appelant, pas des variables globales ou locales. + +Lors de l'appel d'un script, il n'est pas démarré dans le shell courant, mais dans une nouvelle instance de bash qui hérite des variables d'environnements de son parent. +```bash +var1=value1 +export var2=value2 + +echo "$var1" +echo "$var2" +# var1 et var2 existent + +echo "-" + +echo " +echo \"\$var1\" +echo \"\$var2\"" > other_script.sh +chmod +x other_script.sh +./other_script.sh +# Ici, var1 n'existe pas, seul var2 existe encore. +# Car c'est une variable d'environnement. +``` +Dans le shell courant, d'où le script est appelé, faite +```bash +echo $var1 - $var2 +``` +Aucune des 2 variables n'existent, car leur portée se limite au script appelé. Jamais au parent. + + +### Les fonctions dans un script + +Utiliser une fonction ne change pas la portée des variables. +```bash +var1=value1 +export var2=value2 + +set_variable () { + var3=value3 + export var4=value4 + + echo "$var1" + echo "$var2" + echo "$var3" + echo "$var4" + # Toutes les variables existent ici + # car la fonction hérite des variables du script. +} + +set_variable + +echo "$var1" +echo "$var2" +echo "$var3" +echo "$var4" +# var1 var2, var3 et var4 existent +# var3 existe car la fonction est exécutée dans le même shell que le script lui-même. + +echo "-" + +echo " +echo \"\$var1\" +echo \"\$var2\" +echo \"\$var3\" +echo \"\$var4\"" > other_script.sh +chmod +x other_script.sh +./other_script.sh +# Ici, var1 et var3 n'existent pas, seul var2 et var4 existe encore. +# Car ce sont des variables d'environnements. +``` + +### L'usage des variables locales + +Les variables locales sont limitées à une fonction et ses enfants +```bash +var1=value1 +export var2=value2 + +set_variable () { + var3=value3 + export var4=value4 + local var5=value5 + + echo "$var1" + echo "$var2" + echo "$var3" + echo "$var4" + echo "$var5" + # Toutes les variables existent ici + # car la fonction hérite des variables du script. +} + +set_variable + +echo "-" + +echo "$var1" +echo "$var2" +echo "$var3" +echo "$var4" +echo "$var5" +# var1 var2, var3 et var4 existent +# var3 existe car la fonction est exécutée dans le même shell que le script lui-même. +# var5 n'existe pas, car sa portée se limite à la fonction qui l'a déclaré + +echo "-" + +echo " +echo \"\$var1\" +echo \"\$var2\" +echo \"\$var3\" +echo \"\$var4\" +echo \"\$var5\"" > other_script.sh +chmod +x other_script.sh +./other_script.sh +# Ici, var1, var3 et var5 n'existent pas, seul var2 et var4 existe encore. +# Car ce sont des variables d'environnements. +``` + +L'intérêt d'utiliser une variable locale est donc de limiter cette variable à la seule fonction qui l'a déclaré. Et donc ne pas polluer le script dans sa globalité avec des variables inutile pour ce dernier. +Il existe également un second avantage à l'usage d'une variable locale, c'est de ne pas modifier le contenu d'une variable globale. +```bash +var1=value1 +var2=value2 +var3=value3 + +set_variable () { + echo "$var1" + echo "$var2" + echo "$var3" + + echo "-" + + var2=new_value2 + local var3=new_value3 + + echo "$var1" + echo "$var2" + echo "$var3" + # La valeurs de var2 et var3 sont modifiées dans la fonction +} + +set_variable + +echo "-" + +echo "$var1" +echo "$var2" +echo "$var3" +# var3 a repris sa valeur initiale, +# car dans la fonction var3 a été déclaré comme une nouvelle variable locale. +# Mais var2 a été modifiée directement, donc sa valeur reste modifiée. +# Car var2 dans la fonction est resté une variable globale. +``` + +Comme vu précédemment, les variables modifiée ou créée dans la fonction affecte le script car la fonction est exécutée dans le même shell que celui-ci. +Cela change si on exécute la fonction dans un sous-shell, la fonction devient un enfant qui hérite de son parent uniquement. +```bash +var1=value1 +var2=value2 +var3=value3 + +fonction2 () { + echo "-" + echo "var1=$var1" + echo "var2=$var2" + echo "var3=$var3" + echo "var4=$var4" + echo "var5=$var5" + # Même var3, qui est locale, est héritée par la fonction enfant. +} + +set_variable () { + echo "var1=$var1" + echo "var2=$var2" + echo "var3=$var3" + # Les variables sont héritées du parent. + + echo "-" + + var2=new_value2 + local var3=new_value3 + var4=new_value4 + export var5=new_value5 + + echo "var1=$var1" + echo "var2=$var2" + echo "var3=$var3" + echo "var4=$var4" + echo "var5=$var5" + # La valeurs de var2 et var3 sont modifiées dans la fonction + + (fonction2) +} + +(set_variable) +# Démarre la fonction dans un shell fils. + +echo "-" + +echo "var1=$var1" +echo "var2=$var2" +echo "var3=$var3" +echo "var4=$var4" +echo "var5=$var5" +# var2 et var3 ont repris leur valeurs initiales, +# Car la fonction est dans un shell enfant qui n'affecte pas son parent. +# De même, var4 et var5 n'existent pas, car elle sont déclarées dans un shell enfant. +# Le parent n'hérite pas des shells enfants. +``` + +### Conclusion + +- La portée d'une variable est toujours le shell courant et ses enfants, jamais son shell parent. +- Une variable d'environnement peut être exportée sur un nouveau shell, indépendant du premier. À condition que ce dernier exécute le second. Mais ne peut pas affecter les parents. +- Une variable locale dans une fonction, exécutée dans le shell courant, n'affecte pas son environnement en dehors de la fonction. Et permet également de ne pas affecter le contenu d'une variable globale de même nom. +- Une fonction exécutée dans un sous-shell n'affecte jamais le parent, que ses variables soient globales ou locales. +- Le parent n'est JAMAIS affecté par les variables définies ou modifiées par ses shells enfants. diff --git a/pages/06.contribute/10.packaging_apps/80.resources/20.bash_tips/shell_variables_scope.md b/pages/06.contribute/10.packaging_apps/80.resources/20.bash_tips/shell_variables_scope.md new file mode 100644 index 00000000..c32b5515 --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/80.resources/20.bash_tips/shell_variables_scope.md @@ -0,0 +1,226 @@ +--- +title: General scope of variables +template: docs +taxonomy: + category: docs +routes: + default: '/shell_variables_scope' +--- + +Variables exists for the current shell and its children only. +Another script executed from the script is not a child, it's another shell which herited only the environment variables from its caller script, not its globals or locals variables. + +When a script is called, it isn't started in the current shell, but in a new instance of bash which herite environment variables from its parent. +```bash +var1=value1 +export var2=value2 + +echo "$var1" +echo "$var2" +# var1 and var2 exist + +echo "-" + +echo " +echo \"\$var1\" +echo \"\$var2\"" > other_script.sh +chmod +x other_script.sh +./other_script.sh +# Here, var1 doesn't exist, only var2 still exists. +# Because it's an environment variable. +``` +In your current shell, where you launch this script, try +```bash +echo $var1 - $var2 +``` +None of this 2 variables exists, because their scope is limited to the script itself. Never its parent. + + +### Functions inside a script + +Use a function would not change the scope of variables. +```bash +var1=value1 +export var2=value2 + +set_variable () { + var3=value3 + export var4=value4 + + echo "$var1" + echo "$var2" + echo "$var3" + echo "$var4" + # All variables exists here + # Because the function inherite its variables from the script. +} + +set_variable + +echo "$var1" +echo "$var2" +echo "$var3" +echo "$var4" +# var1 var2, var3 and var4 exist +# var3 exist because the function is executed in the same shell than the script itself. + +echo "-" + +echo " +echo \"\$var1\" +echo \"\$var2\" +echo \"\$var3\" +echo \"\$var4\"" > other_script.sh +chmod +x other_script.sh +./other_script.sh +# Here, var1 and var3 don't exist, only var2 and var4 still exist. +# Because they're environment variables. +``` + +### The usage of locales variables + +Locales variables are limited to the function and its children. +```bash +var1=value1 +export var2=value2 + +set_variable () { + var3=value3 + export var4=value4 + local var5=value5 + + echo "$var1" + echo "$var2" + echo "$var3" + echo "$var4" + echo "$var5" + # All variables exists here + # Because the function inherite its variables from the script. +} + +set_variable + +echo "-" + +echo "$var1" +echo "$var2" +echo "$var3" +echo "$var4" +echo "$var5" +# var1 var2, var3 and var4 exist +# var3 exist because the function is executed in the same shell than the script itself. +# var5 doesn't exist, because its scope is limited to the function which declare it. + +echo "-" + +echo " +echo \"\$var1\" +echo \"\$var2\" +echo \"\$var3\" +echo \"\$var4\" +echo \"\$var5\"" > other_script.sh +chmod +x other_script.sh +./other_script.sh +# Here, var1, var3 and var5 don't exist, only var2 and var4 still exist. +# Because they're environment variables. +``` + +Using a local variable is usefull for limit it scope to the function only. And not bother the script in its globality with useless variables. +But there's also another advantage with local variable, do not modify the content of a global variable. +```bash +var1=value1 +var2=value2 +var3=value3 + +set_variable () { + echo "$var1" + echo "$var2" + echo "$var3" + + echo "-" + + var2=new_value2 + local var3=new_value3 + + echo "$var1" + echo "$var2" + echo "$var3" + # Values of var2 and var3 are modified in the function. +} + +set_variable + +echo "-" + +echo "$var1" +echo "$var2" +echo "$var3" +# var3 retake is original value, +# because in the function, var3 was declared as a new locale variable. +# But var2 was directly modified, so its value still changed. +# Because, var2 in the function is still a global variable. +``` + +As seen previously, modified or created variables in a function can affect the main script because the function is executed in the same shell. +But, the things are different if the function is executed in a sub shell, the function become a child which only inherite from its parent. +```bash +var1=value1 +var2=value2 +var3=value3 + +fonction2 () { + echo "-" + echo "var1=$var1" + echo "var2=$var2" + echo "var3=$var3" + echo "var4=$var4" + echo "var5=$var5" + # Even var3, which is local, is inherited from the parent function. +} + +set_variable () { + echo "var1=$var1" + echo "var2=$var2" + echo "var3=$var3" + # Variables are inherited from the parent. + + echo "-" + + var2=new_value2 + local var3=new_value3 + var4=new_value4 + export var5=new_value5 + + echo "var1=$var1" + echo "var2=$var2" + echo "var3=$var3" + echo "var4=$var4" + echo "var5=$var5" + # Values of var2 and var3 are modified in the function. + + (fonction2) +} + +(set_variable) +# Start the function in a sub shell. + +echo "-" + +echo "var1=$var1" +echo "var2=$var2" +echo "var3=$var3" +echo "var4=$var4" +echo "var5=$var5" +# var2 and var3 retake their original values. +# Because the function is in a child shell which never affect its parent. +# Likewise, var4 and var5 don't exist, because they're been declared in child shell. +# The parent never inherite from its children shell. +``` + +### Conclusion + +- The scope of a variable is always the current shell and its children, never its parent shell. +- An environment variable may be exported to a new shell, detached from the first one. If the last one executed the second one. But, it can't affect the parents. +- A locale variable in a function, executed in the current shell, can't affect the environment outside of the function. End allow also to not affect a global variable with the same name. +- A function executed in a sub shell will never affect its parent, with global or local variables. +- A parent can NEVER be affected by variables defined or modified in its children shell. diff --git a/pages/06.contribute/10.packaging_apps/packaging_apps_intro.fr.md b/pages/06.contribute/10.packaging_apps/packaging_apps_intro.fr.md new file mode 100644 index 00000000..50d05075 --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/packaging_apps_intro.fr.md @@ -0,0 +1,117 @@ +--- +title: Introduction au packaging +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_intro' + aliases: + - '/packaging_apps' +--- + +Cette documentation a pour but de fournir tous les concepts de base et le vocabulaire nécessaire pour comprendre le packaging d'applications. + +Nous détaillerons ce qu'est un paquet d'applications YunoHost, comment il fonctionne, comment créer votre propre paquet et comment trouver de l'aide si vous en avez besoin. + + +## 1. La Philosophie du Packaging + +La possibilité d'installer facilement des applications à partir d'un catalogue est une caractéristique clé de YunoHost. Alors que vous vous plongez dans le processus de packaging d'applications de YunoHost, vous devez vous souvenir de ces principes clés : + +- **L'administrateur ne doit pas avoir un doctorat en informatique pour pouvoir installer, configurer et utiliser votre application** : partez du principe que l'administrateur ne connaît pas les concepts informatiques avancés; + +- **Less is more**, **Keep it simple!**: ne surchargez pas l'administrateur avec une douzaine de questions techniques ; + +- **Les choses doivent être opérationnelles dès le départ** : par exemple, l'administrateur ne doit pas avoir à terminer manuellement le processus d'installation en remplissant manuellement les informations d'identification de la base de données; + +- Le packaging d'une application YunoHost **ne se limite pas à l'installation** des sources et des dépendances : il concerne également la maintenance (mise à jour, sauvegarde...) et l'intégration de l'application dans l'écosystème YunoHost (NGINX, SSO/LDAP, Fail2Ban, catalogue d'applications, UI/UX...). + + +## 2. Prérequis + +Avant d'entrer dans le vif du sujet, cette documentation part du principe que : + +1. Vous êtes déjà administrateur YunoHost et vous savez déjà à quoi ressemble le processus d'installation ;) +2. Vous êtes familiarisé avec l'administration système et la programmation bash (ou vous êtes prêt à les apprendre) ; +3. Vous êtes familier avec Git (ou vous êtes prêt à l'apprendre) ; +4. Vous êtes à l'aise avec le bricolage et le débogage de matériel informatique en général. + +Nous vous encourageons également à rejoindre le [salon de discussion sur le packaging](/chat_rooms) pour poser toutes les questions que vous pourriez avoir ! + +À un moment donné, vous voudrez aussi avoir un environnement de développement/test, soit en utilisant [VirtualBox](/packaging_apps_virtualbox) ou [LXC/ynh-dev](https://github.com/yunohost/ynh-dev) qui est destiné au noyau mais peut tout à fait être utilisé pour le développement d'applications. Vous pouvez également mettre en place un VPS de développement/test sur votre hébergeur préféré, ou même développer sur votre prod si vous aimez vivre dangereusement ;). + +## 3. Notes sur l'histoire du packaging des applications de YunoHost + +Beaucoup de choses dans YunoHost, et dans le format d'emballage de l'application YunoHost, sont historiques ou ont été conçues de manière organique. Certains aspects peuvent donc légitimement sembler anciens. + +La **"v0" du packaging d'applications** consistait à écrire des scripts bash bruts sans réelle standardisation/contrainte. + +Au fil du temps, les étapes récurrentes (comme l'installation des dépendances avec apt, ou la configuration de NGINX) ont été formalisées dans des fonctions bash standardisées, appelées "helpers". Cela a marqué **le début de l'ère de la "v1" packaging**. + +Divers outils ont été mis en place pour tester l'application et normaliser son comportement. + +Après un certain temps, un ensemble de pratiques et de conventions communes a émergé et est en quelque sorte reflété et maintenu dans l'application modèle `example_ynh`. Bien qu'il soit tentant pour les développeurs de changer les schémas de nommage des variables ou de refactoriser la structure des scripts, il s'avère qu'il est encore plus important de s'en tenir à l'ensemble des pratiques communes (même si elles sont arbitraires et peu élégantes) pour faciliter la maintenance de toutes les applications par n'importe quel membre de la communauté du packaging à travers tous les dépôts ! + +Néanmoins, même si les aides existaient, la structure inhérente des applications était difficile et ennuyeuse à maintenir avec trop de morceaux de code redondants ou remplis de conventions historiques bizarres. **Un nouveau format v2** [a été conçu et ajouté à YunoHost 11.1 début 2023] (https://github.com/YunoHost/yunohost/pull/1289) dans l'espoir de moderniser et de simplifier l'emballage des applications et d'améliorer l'UI/UX de YunoHost. + +Cependant, [**un futur format v3** est encore à venir] (https://github.com/YunoHost/issues/issues/2136) pour simplifier davantage l'empaquetage des applications (comme la prise en charge des configurations NGINX/systemd/..., l'élimination du besoin d'écrire manuellement des scripts de suppression/sauvegarde/restauration, etc.) + + +## 4. Aperçu général de la structure d'une application YunoHost + +Une application YunoHost est construite dans un dépôt Git. Nous vous encourageons à jeter un coup d'oeil à ces dépôts de code pour vous familiariser avec les structures des dépôts d'applications : +- [l'application `helloworld_ynh`](https://github.com/YunoHost-Apps/helloworld_ynh) +- [l'application `example_ynh`](https://github.com/YunoHost/example_ynh) qui contient toutes les fonctionnalités générales et le formattage recommandé +- votre application "réelle" préférée dans la liste des dépots [YunoHost-Apps](https://github.com/orgs/YunoHost-Apps/repositories) + +Parmi les fichiers contenus dans un paquet, les plus importants sont les suivants : + +- le **manifeste de l'application** `manifest.toml` (ou `.json` dans le passé) + - Il peut être considéré comme la carte d'identité de l'application, contenant diverses métadonnées. + - Il contient également les questions posées lors de l'installation de l'application. + - ainsi qu'un ensemble de "ressource" à initialiser, telles que les sources de l'app à télécharger ou les dépendances apt à installer +- **scripts/** contient un ensemble de scripts bash correspondant aux actions exposées dans YunoHost + - `_common.sh`: common variables or custom functions included in other scripts + - `install`/`remove` : la procédure d'installation et de suppression + - `upgrade` : la procédure de mise à niveau + - `backup`/`restore` : les procédures de sauvegarde/restauration + - (`change_url`) : changer l'endroit où l'application est installée en termes de son url d'accès web +- **conf/** contient un ensemble de modèles de configuration utilisés lors de l'installation de l'application. Voici quelques exemples de fichiers couramment trouvés : + - `nginx.conf` : le modèle de configuration de NGINX (=serveur web) pour cette application + - `systemd.service` : le modèle de configuration du service systemd pour cette application + - `config.json/yaml/???` : le modèle de configuration de l'application + +Grosso modo, l'installation proprement dite se compose généralement des opérations suivantes (qui peuvent toutefois varier en fonction de la complexité et des technologies utilisées par l'application) - pas nécessairement dans cet ordre exact : + +1. YunoHost récupère le dépôt Git du paquet. +2. YunoHost pose à l'administrateur les questions d'installation définies dans `manifest.toml`. +3. L'administrateur remplit le formulaire et démarre l'installation. +4. YunoHost fournit un ensemble de pré-requis techniques (appelés 'ressources') tels que : + - initialise le magasin de clés/valeurs de l'application `settings.yml` avec les réponses de l'administrateur au formulaire d'installation + - crée un utilisateur UNIX pour cette application + - installe les dépendances apt nécessaires à cette application + - choisit un port pour le reverse-proxying interne + - initialise une base de données SQL vide + - configure les permissions SSOwat + - ... +5. Le script `install` de l'application est exécuté et ses fonctions typiques sont de : + - récupérer et déployer les sources de l'application + - configurer l'application (typiquement les identifiants de la base de données, le port interne du reverse-proxy...) + - ajouter la configuration de NGINX + - ajoute la configuration systemd du daemon de l'application + - démarre le daemon de l'application + - divers réglages de finalisation +6. ??? +7. L'application est prête à l'emploi ! + + +## 5. Créer votre tout premier paquet YunoHost + +A moins que vous ne souhaitiez vraiment partir de zéro ou de [`example_ynh`] (https://github.com/YunoHost/example_ynh), une pratique courante consiste à identifier une application similaire à celle que vous essayez d'empaqueter - typiquement parce qu'elle repose sur les mêmes technologies - à cloner le dépôt de code correspondant, et à adapter les différents fichiers. + +TODO/FIXME : here we should list a bunch of well-knowh apps for classic technologies + +- Applications PHP : +- Applications NodeJS : +- Applications Python : +- ??? diff --git a/pages/06.contribute/10.packaging_apps/packaging_apps_intro.md b/pages/06.contribute/10.packaging_apps/packaging_apps_intro.md new file mode 100644 index 00000000..59df3dc4 --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/packaging_apps_intro.md @@ -0,0 +1,117 @@ +--- +title: Introduction to packaging +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_intro' + aliases: + - '/packaging_apps' +--- + +This documentation is here to provide all the basic concepts and vocabulary needed to understand app packaging. + +We will detail what a YunoHost application package is, how it works, how to make your own package and how to find help if you need it. + + +## 1. Packaging philosophy + +The ability to easily install applications from a catalog is a key feature of YunoHost. While you dive in the process of YunoHost application packaging, you should remember these key principles: + +- **The admin should not have a PhD in computer science to be able to install, configure and use your application**: try to assume that the admin doesn't know about advanced computer concepts; + +- **Less is more**, **Keep it simple!**: don't overcrowd the admin with a dozens technical questions; + +- **Things should work out of the box**: for example, the admin should not have to manually finish the installation process by manually filling in database credentials; + +- YunoHost app packaging is **not just about installing** sources and dependencies: it's also about maintenance (upgrade, backup...) and integrating the app in the YunoHost ecosystem (NGINX, SSO/LDAP, Fail2Ban, application catalog, UI/UX...) + + +## 2. Prerequisites + +Before diving in, this documentation assumes that: + +1. You already are a YunoHost admin yourself and already know what the install workflow looks like;) +2. You are somewhat familiar with (or are willing to learn) system administration and bash programming; +3. You are somewhat familiar with (or are willing to learn) Git; +4. You are comfortable with tinkering and debugging computer stuff in general. + +You are also encouraged to join the [app packaging chatroom](/chat_rooms) to ask any question you may have! + +At some point, you will also want to have a dev/test environment, either using [VirtualBox](/packaging_apps_virtualbox) or [LXC/ynh-dev](https://github.com/yunohost/ynh-dev) which is meant for the core but can totally be used for developping apps. You can also setup a dev/test VPS on your favourite hosting provider, or even develop on your prod if you like to live dangerously;). + +## 3. Notes about the history of YunoHost's app packaging + +Many things in YunoHost, and YunoHost app packaging format, are historical or were designed in an organic fashion. Thus some aspects may legitimately feel old. + +The **"v0" of app packaging** consisted in writing raw bash scripts with no real standardization/constrain. + +Over time, recurrent steps (such as installing dependencies with apt, or setting up the NGINX config) where formalized into standardized bash functions, aka "helpers". This pretty much marked **the beginning of the "v1" packaging era**. + +Various tools were implemented to test the app and standardize their behavior. + +After a while, a set of common practices and conventions emerged and is somewhat reflected and maintain in the `example_ynh` template application. While it is tempting for dev-oriented folks to change variable naming schemes or refactorize the structure of scripts, it turns out that it is even more important to stick to the common set of practices (even though arbitrary and not elegant) to ease the maintenance of all apps by any member of the packaging community accross all repos! + +Nevertheless, even though helpers existed, the inherent structure of apps was hard and boring to maintain with too many redundant pieces of code or filled with funky historical conventions. **A new v2 format** [has been designed and added to YunoHost 11.1 in early 2023](https://github.com/YunoHost/yunohost/pull/1289) in the hope to modernize and simplify app packaging and improve the UI/UX of YunoHost. + +However, [**a future v3 format** has yet to come](https://github.com/YunoHost/issues/issues/2136) to further simplify app packaging (such as taking care of NGINX/systemd/... configurations, removing the need to manually write remove/backup/restore scripts, etc.) + + +## 4. General overview of a YunoHost app structure + +A YunoHost app consists in a Git repository. We encourage you to have a look at those code repository to get familiar witch app repository structures: +- [the `helloworld_ynh` app](https://github.com/YunoHost-Apps/helloworld_ynh) +- [the `example_ynh` app](https://github.com/YunoHost/example_ynh) which illustrates all common features and recommended formatting +- your favourite "real-life" app in the [YunoHost-Apps organization](https://github.com/orgs/YunoHost-Apps/repositories) + +Among the file contained in a package, the most important ones are: + +- the **app manifest** `manifest.toml` (or `.json` in the past) + - this can be seen as the ID card of the application, containing various metadatas. + - it also contains the questions asked during the installation of the app. + - and a bunch of "resources" to initialize, such as sources to download or apt dependencies to install +- **scripts/** contains a bunch of bash scripts corresponding to actions exposed in YunoHost + - `_common.sh`: common variables or custom functions included in other scripts + - `install`/`remove`: the install and remove procedure + - `upgrade`: the upgrade procedure + - `backup`/`restore`: the backup/restore procedures + - (`change_url`): changing where the app is installed in terms of web access url +- **conf/** contains a bunch of configuration templates used when installing the app. Here are some example of commonly found files: + - `nginx.conf`: the NGINX (=web server) configuration template for this app + - `systemd.service`: the systemd service configuration template for this app + - `config.json/yaml/???`: the app's configuration template + +Roughly speaking, the install itself generally consists of the following operations (though these may vary depending on the complexity and technologies used by the app) - not necessarily in that exact order: + +1. YunoHost fetches the package's Git repository +2. YunoHost asks to the admin the install questions defined in `manifest.toml` +3. The admin fills the form and starts the install +4. YunoHost provisions a bunch of technical prerequisites (called 'resources') such as: + - initializes the app'skey/value store `settings.yml` with the admin's answers to the install form + - creates a UNIX system user for this app + - install apt dependencies needed for this app + - picks up a port for internal reverse-proxying + - initializes an empty SQL database + - configures SSOwat permissions + - ... +5. The actual app's `install` script is ran and typically does: + - fetch and deploy the app sources + - configure the app (typically DB credentials, internal reverse-proxy port...) + - add the NGINX configuration + - add the systemd configuration the app's daemon + - starts the app daemon + - various finialization tweaks +6. ??? +7. Application is ready to use! + + +## 5. Creating your very first YunoHost package + +Unless you really want to start from scratch or from [`example_ynh`](https://github.com/YunoHost/example_ynh), one common practice is to identify an app similar to the one you're trying to package - typically because it relies on the same technologies - clone the corresponding code repository, and adapt the various files. + +TODO/FIXME : here we should list a bunch of well-knowh apps for classic technologies + +- PHP apps: +- NodeJS apps: +- Python apps: +- ??? diff --git a/pages/06.contribute/15.dev/02.maindomain/maindomain.md b/pages/06.contribute/15.dev/02.maindomain/maindomain.md new file mode 100644 index 00000000..9f06c209 --- /dev/null +++ b/pages/06.contribute/15.dev/02.maindomain/maindomain.md @@ -0,0 +1,22 @@ +--- +title: How is used the main domain +template: docs +taxonomy: + category: docs +routes: + default: '/dev/maindomain' +--- + +Here is a list of situations in which we use the main domain concept: +- to expose the web portal: currently the web portal is only reachable through the main domain address (could be changed for multi tenant support in future) +- to define the hostname of the machine: we believe we do this to avoid some sudo errors (may be it's not relvant anymore or could be made in /etc/hosts) +- to TLS encrypt SMTP and dovecot: so user should define the main domain in their email client to avoid TLS warning +- To be able to do mail forwarding using the main domain as Sender Rewriting Scheme Domain see: https://en.wikipedia.org/wiki/Sender_Rewriting_Scheme +- to define default email as (root@ abuse@) but we probably should do it on all parent domain instead +- to define `myhostname` in postfix config, used as EHLO and reverseDNS (refering to https://mxtoolbox.com/emailhealth test it should be a FQDN, so a subdomain) +- to generate the self-signed Local Authority: having just one allow to upload it in a browser and get an x509 authenticated https connexion. +- to define default xmpp DNS field: dns field are only set on the main domain by default + +Finally we can imagine some apps use the main domain too, see +https://github.com/search?q=org%3AYunoHost-Apps+main_domain&type=code +https://github.com/search?q=org%3AYunoHost-Apps+current_host&type=code diff --git a/pages/06.contribute/15.dev/03.forms/forms.md b/pages/06.contribute/15.dev/03.forms/forms.md new file mode 100644 index 00000000..b7cdd191 --- /dev/null +++ b/pages/06.contribute/15.dev/03.forms/forms.md @@ -0,0 +1,144 @@ +--- +title: Forms +template: docs +taxonomy: + category: docs +routes: + default: '/dev/forms' +--- + +# Forms + +YunoHost uses a lot of forms. You can found here information on supported types question and properties. + +## Questions +!!! Questions are called `Options` in the code. + +### Generic properties + +| Property | Scope | Description | Example | +|----------|--------------|-------------|---------| +| `type` | Everywhere | Specify the type of the question (see bellow for the list) | `type = "string"` | +| `ask` | Everywhere | The title of the question | `ask.en = "Cats or dogs ?"` | +| `help` | Everywhere | An help message | `help.en = "Think carefully!"` | +| `optional`| Everywhere | Set true if the question is not mandatory | `optional = true` | +| `readonly`| Everywhere | Avoid user to be able to change the value | `readonly = true` | +| `example` | Everywhere | Give an example to help to understand the format of the answer| `example = "camille@example.com"` | +| `pattern.regexp` | Everywhere | Regex to validate the new value| `pattern.regexp = "^.+@.+$"` | +| `pattern.error` | Everywhere | Error to display if the pattern doesn't match | | +| `redact` | Everywhere | Avoid a confidential value to be logged | `redact = true` | +| `default` | Install | A default value for the question | | +| `visible` | ConfigPanel | A simple js expression based on other short keys questions to hide or display dynamically the question| `visible = "login && ! private_key"` | +| `bind` | AppConfigPanel | See [App configuration panel doc](/packaging_config_panels) | `bind = "__INSTALL_DIR__/config.yml"` | + + * `help`, `optional`, `readonly` and `visible` are also available on panels and sections entities. + * Long help messages could not to be correctly displayed for user using yunohost CLI + * For the moment `default` properties are not supported in app config panel and you have to initialize the value by yourself in config file or settings. + + +### `display_text` (readonly) +Display a simple text. + +### `markdown` (readonly) +Display a markdown (if you don't use markdown features, prefer display_text) + +### `alert` (readonly) +Display an alert box with different style. + +| Property | Description | Default | +|----------|--------------|---------| +| `style` | Style of the alert box (success, info, warning, danger) | info | + +### `button` +Display a button with different style (useful for custom actions). + +| Property | Description | Default | +|----------|--------------|---------| +| `style` | Style of the alert box (success, info, warning, danger) | success| +| `enabled` | Enable or disable the button | True | + +### `string` +Input text monoline. + +### `text` +Input text multilines + +| Property | Description | Default | +|----------|--------------|---------| +| `redact` | Style of the alert box (success, info, warning, danger) | success| + +### `password` +Password input. `{}` chars are forbidden and value is not added to logs. + +### `color` +Hexadecimal color starting with # with a color picker. + +### `number` +An integer. + +| Property | Description | Example | +|----------|--------------|---------| +| `min` | Minimal value | | +| `max` | Maximum value | | +| `step` | Steps between each next possible value | | + +### `range` +| Property | Description | Example | +|----------|--------------|---------| +| `min` | Minimal value | | +| `max` | Maximum value | | +| `step` | Steps between each next possible value | | + +### `boolean` +| Property | Description | Example | +|----------|--------------|---------| +| `yes` | | | +| `no` | | | + +### `date` +A date picker with date in the format YYYY-MM-DD + +### `time` +A time picker + +### `email` +An email input + +### `path` +### `url` +By default it ask for a web URL but you can change the `pattern` if you want to. + +### `file` +File question + +| Property | Description | Example | +|----------|--------------|---------| +| `accept` | Same format than HTML file input | | + +! This file type is not made for big files transfer, it's just for small logo, or config files. + +### `select` +Dropdown + +| Property | Description | Example | +|----------|--------------|---------| +| `choices` | list or dictionary of choices | | + +### `tags` +Multi choices selection. + +| Property | Description | Example | +|----------|--------------|---------| +| `choices` | List or dictionary of choices | | + +### `domain` +List all added domains + +### `app` +List all installed apps + +### `user` +List all users + +### `group` +List all groups diff --git a/pages/06.contribute/15.dev/dev.fr.md b/pages/06.contribute/15.dev/dev.fr.md new file mode 100644 index 00000000..66a674a9 --- /dev/null +++ b/pages/06.contribute/15.dev/dev.fr.md @@ -0,0 +1,113 @@ +--- +title: Contribuer au cœur de YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/dev' +--- + +Vous souhaitez ajouter une nouvelle fonctionnalité au cœur de YunoHost, mais ne savez pas comment procéder ? Ce guide parcourt les étapes du développement et du processus de contribution. + +Si vous cherchez quelque chose à implémenter ou un bug à réparer, le bug tracker est [ici](https://github.com/yunohost/issues/issues) ! + +**Venez dire coucou sur le [salon de dev](/chat_rooms)** ! + +### Mettre en place un environnement de développement + +- **Utilisez [ynh-dev](https://github.com/YunoHost/ynh-dev)** (voir le README) pour mettre en place un environnement de développement - en local sur une machine virtuelle, ou bien sur un VPS. Ceci installera une instance fonctionelle de YunoHost, en utilisant directement les dépôts Git à l'aide de liens symboliques. De cette façon, il vous sera possible de modifier les fichiers, de tester les changements en temps réel, et de commiter et push/pull directement depuis cet environnement. + +- **Implémentez et testez votre fonctionnalité**. Suivant ce sur quoi vous + voulez travailler : + - **Cœur Python/ligne de commande** : allez dans `/ynh-dev/yunohost/` + - **Webadmin** : allez dans `/ynh-dev/yunohost-admin/` + - Vous pouvez aussi travailler sur les autres projets liés sur lesquels s'appuie YunoHost (SSOwat, Moulinette) de façon similaire. + +### Vue d'ensemble des 4 morceaux principaux de YunoHost + +##### Moulinette + +C'est un petit framework "fait maison". [Son rôle principal](https://moulinette.readthedocs.io/en/latest/actionsmap.html) est de permettre de construire une API Web et une API en ligne de commande à partir d'un même code Python et d'un schéma YAML que nous appelons [l'actionmap](https://github.com/YunoHost/yunohost/blob/dev/share/actionsmap.yml). + +Il prend en charge d'autres mécanismes tels que l'authentification, l'internationalisation et des petites fonctions utilitaires techniques (par ex. lecture/écriture de fichiers JSON). + +Moulinette dispose de sa propre documentation [ici](https://moulinette.readthedocs.io/en/latest/). + +##### YunoHost + +C'est le cœur même de YunoHost. Il contient : +- [le code Python](https://github.com/YunoHost/yunohost/tree/dev/src) qui gère les utilisateurs, domaines, applications, services et autres +- des [helpers bash](https://github.com/YunoHost/yunohost/tree/dev/helpers) principalement utilisés par les packageurs d'applications dans les scripts de ces applications +- des [hooks](https://github.com/YunoHost/yunohost/tree/dev/hooks) et [templates](https://github.com/YunoHost/yunohost/tree/dev/conf) qui sont utilisés pour configurer les différents éléments de l'écosystème tels que NGINX, Postfix... +- des [chaînes internationalisées](https://github.com/YunoHost/yunohost/tree/dev/locales) +- des [tests](https://github.com/YunoHost/yunohost/tree/dev/tests) + +##### SSOwat + +C'est le système de connexion unique (single sign-on) de YunoHost. Il contient principalement : +- [du code LUA](https://github.com/YunoHost/ssowat) interfacé directement avec NGINX et qui gère tous les aspects "techniques" de l'authentification et de la gestion des accès aux ressources. +- le [portail web utilisateur](https://github.com/YunoHost/SSOwat/tree/dev/portal) qui est l'interface finale visible par les utilisateurs de YunoHost. + +SSOwat est configuré via `/etc/ssowat/conf.json` qui est généré par YunoHost. + +##### YunoHost-admin + +C'est une dépendance *optionnelle* de YunoHost et correspond à une interface pour l'API web créée par YunoHost et Moulinette (service `yunohost-api`). + +Il contient essentiellement : +- [des templates pour les vues](https://github.com/YunoHost/yunohost-admin/tree/dev/app/src/views) +- les [contrôleurs JavaScript](https://github.com/YunoHost/yunohost-admin/tree/dev/src/js/yunohost/controllers) correspondants, qui interagissent avec l'API YunoHost +- et ses [chaînes internationalisées](https://github.com/YunoHost/yunohost-admin/tree/dev/app/src/i18n/locales) + +### Travailler sur le cœur Python / ligne de commande + +- Allez dans `/ynh-dev/yunohost/`. + +- Exécutez `cd /ynh-dev && ./ynh-dev use-git yunohost`. + +- Le fichier actionsmap (`data/actionsmap/yunohost.yml`) définit les différentes catégories, actions et arguments de la ligne de commande YunoHost. Choisissez comment vous voulez que les utilisateurs utilisent votre fonctionnalité, et ajoutez/éditez les catégories, actions et arguments correspondants. Par exemple, dans `yunohost domain add some.domain.tld`, la catégorie est `domain`, l'action est `add` et `some.domain.tld` est un argument. + +- Moulinette va automatiquement faire le lien entre les commandes de l'actionsmap et les fonctions Python (ainsi que leurs arguments) dans `src/yunohost/`. Par exemple, `yunohost domain add some.domain.tld` déclenchera un appel de `domain_add(domainName)` dans `domain.py`, avec l'argument `domainName` qui vaudra `"some.domain.tld"`. + +##### Helpers / style de code + +- Pour gérer les exceptions, il existe un type `YunohostError()` + +- Pour aider avec l'internationalisation des messages, utilisez `m18n.n('some-message-id')` et mettez le message correspondant dans `locales/en.json`. Vous pouvez aussi utiliser des arguments pour construire les messages, avec `{{some-argument:s}}`. Ne modifiez pas de fichiers de locales autres que `en.json`, la traduction sera faite avec [Weblate](https://translate.yunohost.org/) ! + +- YunoHost essaye de suivre le style de code [PEP8](http://pep8.org/). Des outils existent pour vérifier automatiquement la conformité du code. + +- Mettre un `_` devant les noms des fonctions "privées". + +### Travailler sur la webadmin + +- Allez dans `/ynh-dev/yunohost-admin/src/`. + +- Exécutez `cd /ynh-dev && ./ynh-dev use-git yunohost-admin`. Ceci lance gulp, de sorte qu'à chaque fois que vous modifiez les sources, il recompilera le code (JS) et vous pourrez voir les changements dans le navigateur web (Ctrl+F5). Pour stopper la commande, faites simplement Ctrl+C. + +- L'interface web utilise une API pour communiquer avec YunoHost. Les commandes/requêtes de l'API sont également définies dans l'actionsmap. Par exemple, accéder à la page `https://domain.tld/yunohost/api/users` correspond à une requête `GET /users` vers l'API YunoHost. Cette requête est mappée sur `user_list()`. Accéder à cette URL devrait afficher le JSON retourné par cette fonction. Les requêtes 'GET' sont typiquement destinées à demander de l'information au serveur, tandis que les requêtes 'POST' sont destinées à demander au serveur de modifier/changer des informations ou de réaliser des actions. + +- `js/yunohost/controllers` contient les parties JavaScript, et définit quelles requêtes faire à l'API pendant le chargement d'une page donnée de l'interface, et comment traiter les données récupérées pour générer la page, en utilisant des templates. + +- `views` contient les templates des pages de l'interface. Dans le template, les données venant du JavaScript peuvent être utilisées avec la syntaxe `{{some-variable}}`, qui sera remplacée pendant la construction de la page. Il est également possible d'avoir des conditions avec la syntaxe d'[handlebars.js](http://handlebarsjs.com) : `{{#if + some-variable}}

du HTML conditionnel ici !

{{/if}}` + +- Pour l'internationalisation des messages, utilisez `y18n.t('some-string-code')` dans le JavaScript, ou `{{t 'some-string-code'}}` dans le template HTML, et mettez votre message dans `locales/en.json`. Ne modifiez pas de fichiers de locales autres que `en.json`, la traduction sera faite avec [Weblate](https://translate.yunohost.org/) ! + +##### N'oubliez pas + +- À chaque modification de l'actionsmap, il faut redémarrer l'API YunoHost : `service yunohost-api restart` (Il faudra retaper le mot de passe administrateur dans l'interface web) + +- Il faudra peut-être régulièrement forcer le rafraîchissement du cache navigateur pour propager correctement le JavaScript et/ou HTML (à chaque fois que l'on change quelque chose dans `js` ou `views`, donc). + + +### Votre fonctionnalité est prête et vous souhaitez qu'elle soit intégrée dans YunoHost + +- Forkez le dépôt correspondant sur GitHub, et commitez vos changements dans une nouvelle branche. Il est recommandé de nommer la branche avec la convention suivante : + - Pour une nouvelle fonctionnalité ou amélioration : `enh-ISSUENUMBER-description-fonctionnalité` + - Pour une correction de bug : `fix-REDMINETICKET-description-correctif` + - `ISSUENUMBER` est optionnel et correspond au numéro du ticket sur le bug tracker + +- Une fois prêt, ouvrez une Pull Request (PR) sur GitHub. De préférence, inclure `[fix]` ou `[enh]` au début du titre de la PR. + +- Après relecture, test et validation par les autres contributeurs, votre branche sera mergée dans `unstable` ! diff --git a/pages/06.contribute/15.dev/dev.md b/pages/06.contribute/15.dev/dev.md new file mode 100644 index 00000000..b3d26255 --- /dev/null +++ b/pages/06.contribute/15.dev/dev.md @@ -0,0 +1,163 @@ +--- +title: Contributing to the YunoHost core +template: docs +taxonomy: + category: docs +routes: + default: '/dev' +--- + +You wish to add a new feature in the YunoHost core, but don't know how to +proceed? This guide takes you through the various steps of the development and +contribution process. + +If you're looking for stuff to implement or fix, the bug-tracker is +[here](https://github.com/YunoHost/issues/issues)! + +**Come say hi to us in the [dev chat room](/chat_rooms)**! + +### Setting up a development environment + +- **Use [ynh-dev](https://github.com/YunoHost/ynh-dev)** (see the README) to + setup a development environment - locally in a virtual machine, or on a VPS. + This will setup a working YunoHost instance, using directly the Git repositories + (with symlinks). That way, you will be able to edit files, test your changes in real + time, commit stuff and push/pull directly from your development environment. + +- **Implement and test your feature**. Depending on what you want to develop, you + will want to: + - **Python/CLI core**: work in `/ynh-dev/yunohost/` + - **Web administration interface**: work in `/ynh-dev/yunohost-admin/` + - You can also work on the other projects on which YunoHost is built + (SSOwat, Moulinette) in similar ways + +### Overview of the 4 main pieces of YunoHost + +#### Moulinette + +It is a small "homemade" framework. [Its major role](https://moulinette.readthedocs.io/en/latest/actionsmap.html) +is to allow us to build both a web API and a command-line API from the same +Python code thanks to a YAML schema which we call +[the actionmap](https://github.com/YunoHost/yunohost/blob/dev/share/actionsmap.yml). + +It handles other mechanisms like authentication, internationalization and +small technical utilitary functions (e.g. reading/writing JSON). + +Moulinette has its own documentation available [here](https://moulinette.readthedocs.io/en/latest/). + +#### YunoHost + +This piece is the very core of YunoHost. It contains: +- [the Python code](https://github.com/YunoHost/yunohost/tree/dev/src) that manages users, domains, apps, services and other things +- [bash helpers](https://github.com/YunoHost/yunohost/tree/dev/helpers) mainly used by application packagers to package applications +- [hooks](https://github.com/YunoHost/yunohost/tree/dev/hooks) and [templates](https://github.com/YunoHost/yunohost/tree/dev/conf) that are used to configure the various pieces of the ecosystem such as NGINX, Postfix... +- [internationalized strings](https://github.com/YunoHost/yunohost/tree/dev/locales) +- [tests](https://github.com/YunoHost/yunohost/tree/dev/tests) + +#### SSOwat + +This is the single sign-on system of YunoHost. It both contains: +- [Lua scripts](https://github.com/YunoHost/ssowat) that are directly interfaced with NGINX and handle all the "technical" aspects of authentication and route accesses +- the web [user portal](https://github.com/YunoHost/SSOwat/tree/dev/portal) which is the interface used by YunoHost's end users to log in and browse installed apps + +SSOwat is configured through `/etc/ssowat/conf.json` which is generated by YunoHost. + +#### YunoHost-admin + +It is an *optional* dependency of YunoHost and corresponds to an interface for the web API created by YunoHost and Moulinette (c.f. the `yunohost-api` service). + +It essentially contains: +- [view templates](https://github.com/YunoHost/yunohost-admin/tree/dev/app/src/views) +- corresponding [JavaScript controllers](https://github.com/YunoHost/yunohost-admin/tree/dev/src/js/yunohost/controllers) that interact with the YunoHost API +- and [internationalized strings](https://github.com/YunoHost/yunohost-admin/tree/dev/app/src/i18n/locales) + +### Working on the YunoHost Python/CLI core + +- Work in `/ynh-dev/yunohost/`. + +- Run `cd /ynh_dev/ && ./ynh-dev use-git yunohost`. + +- The actionsmap file (`data/actionsmap/yunohost.yml`) defines the various + categories, actions and arguments of the yunohost CLI. Define how you want + users to use your feature, and add/edit the corresponding categories, actions + and arguments. For example in `yunohost domain add some.domain.tld`, the + category is `domain`, the action is `add`, and `some.domain.tld` is an + argument. + +- Moulinette will automatically map commands in the actionsmap to Python + functions (and their arguments) located in `src/yunohost/`. For example, typing + `yunohost domain add some.domain.tld` will call the function + `domain_add(domainName)` in `domain.py`, with the argument `domainName` equal + to `"some.domain.tld"`. + +##### Helpers / coding style + +- To handle exceptions, you should raise some `YunohostError()` + +- To help with internationalizing the messages, use `m18n.n('some-message-id')` + and put your string in `locales/en.json`. You can also put arguments and use + them in the string with `{{some-argument:s}}`. Don't edit other locales files, + this will be done using [weblate](https://translate.yunohost.org/) ! + +- YunoHost tries to follow the [pep8](http://pep8.org/) coding style. Tools + exist to automatically check conformity. + +- Name of "private" functions should start with a `_` + +### Working on the YunoHost web administration interface + +- Work in `/ynh-dev/yunohost-admin/src/`. + +- Run `cd /ynh-dev && ./ynh-dev use-git yunohost-admin`. It launches gulp, such as each + time you modify sources, it recompiles the code and you can use it by + refreshing (Ctrl+F5) your web administration. To stop the command, just do Ctrl+C. + +- The web interface uses the API to interact with YunoHost. The API + commands/requests are also defined via the actionsmap. For instance, accessing + the page `https://domain.tld/yunohost/api/users` corresponds to a `GET + /users` requests on the YunoHost API. It is mapped to the function + `user_list()`. Accessing the URL should display the JSON returned by this + function. 'GET' requests are typically meant to ask information to the server. + 'POST' requests are meant to ask the server to edit/change some information, + or to execute some actions. + +- `js/yunohost/controllers` contains the JavaScript parts, + and define which requests to make to the API when loading a specific page of + the interface, and how to process the data to generate the page, using + templates. + +- `views` contains the various templates for the pages of the interface. In the + template, data coming from the JavaScript part can be used with the syntax + `{{some-variable}}`, which will be replaced when building/accessing the page. + It is also possible to have conditions using the + [handlebars.js](http://handlebarsjs.com) syntax: `{{#if + some-variable}}

Some conditional HTML code here !

{{/if}}` + +- For internationalized strings, use `y18n.t('some-string-code')` in the + JavaScript, or `{{t 'some-string-code'}}` in the HTML template, and put your + string in `locales/en.json`. Don't edit other locales files, + this will be done using [Weblate](https://translate.yunohost.org/)! + +##### Don't forget + +- Each time you edit the actionsmap or the Python code, you should restart the YunoHost api: + `systemctl restart yunohost-api` + (You'll need to retype your admin and password in the web interface) + +- You might need to force-clear the cache of your browser sometimes to refresh + the JavaScript and/or HTML (so each time you edit something in `js` or `views`). + + +### Your feature is ready and you want it to be integrated in YunoHost + +- Fork the relevant repo on GitHub, and commit stuff to a new branch. We recommend + to name the branch with the following convention: + - For an enhancement or new feature: `enh-ISSUENUMBER-name-of-feature` + - For a bugfix `fix-ISSUENUMBER-description-of-fix` + - `ISSUENUMBER` is optional and is the id of a corresponding ticket on the bug tracker. + +- Once you're ready, open a Pull Request (PR) on GitHub. Please include `[fix]` or + `[enh]` at the beginning of the title of your PR. + +- After reviewing, testing and validation by other contributors, your branch +should be merged in `unstable`! diff --git a/pages/06.contribute/contribute.de.md b/pages/06.contribute/contribute.de.md new file mode 100644 index 00000000..d26d9ee1 --- /dev/null +++ b/pages/06.contribute/contribute.de.md @@ -0,0 +1,126 @@ +--- +title: Beteilige dich! +template: docs +taxonomy: + category: docs +routes: + default: '/contributordoc' + aliases: + - '/contribute' +--- + +

+YunoHost hängt ausschließlich von der Beteiligung von Leuten wie dir ab. +

+ +
+ +[columns] +[center] +[size=30] +[fa=heart /] Weitererzählen +[/size] +[/center] + +[center] +Sprich mit Freunden, Verwandten und bei der Arbeit über Softwarefreiheit, [Selbsthosting](/selfhosting) und YunoHost. Wir verlassen uns auf Evangelisten der Datenfreiheit wie dich. <3 +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=user /] Benutzern helfen +[/size] +[/center] + +[center] +Unsere Unterstützung basiert auf Mitwirkenden wie dir. Besuche einfach [den Support-Chatroom](/help) und hilf neuen Benutzern beim Einstieg oder suche dir eine Frage im Forum, bei der du helfen kannst.. +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=edit /] Schreiben +[/size] +[/center] + +[center] +Verbessere die Dokumentation, indem du [neue Seiten schreibst](/write_documentation) oder vorhandene in deine Sprache übersetzt. +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=globe /] Lokalisation +[/size] +[/center] + +[center] +Mach mit, indem du YunoHost-Schnittstellen in deiner Sprache verfügbar machst. +Leg los!! +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=flask /] Testen +[/size] +[/center] + +[center] + +Wir brauchen Leute, die YunoHost gründlich testen. Wenn du einen Fehler findest, versuche ihn zu identifizieren und melde ihn in unserem bug tracker. +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=gift /] Pakete erstellen +[/size] +[/center] + +[center] +Erweitere den Funktionsumfang von YunoHost, indem du neue [Dienste und Webanwendungen in neue Pakete packst](/packaging_apps). +Schaue dir an, [was schon getan wurde](/apps)! +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=cog /] Programmieren +[/size] +[/center] + +[center] + +Du kannst dich, unabhängig von deinen Fähigkeiten, an der Entwicklung des YunoHost beteiligen. +Sysadmins, Webentwickler, Designer und Pythonisten sind herzlich willkommen! +
+Erfahre im [Entwickler-Chatroom](xmpp:dev@conference.yunohost.org?join), wie du zum, Projekt [beitragen](/dev) kannst. +[/center] +[/columns] + + +--- + +[center] +### Bitte komm auf jeden Fall mit uns in den [Entwickler-Chatroom](/chat_rooms) :-) +[/center] diff --git a/pages/06.contribute/contribute.fr.md b/pages/06.contribute/contribute.fr.md new file mode 100644 index 00000000..c34cb505 --- /dev/null +++ b/pages/06.contribute/contribute.fr.md @@ -0,0 +1,120 @@ +--- +title: Contribuer +template: docs +taxonomy: + category: docs +routes: + default: '/contributordoc' + aliases: + - '/contribute' +--- + + +

+YunoHost dépend entièrement de la participation de gens comme vous. +

+ + +
+ +[columns] +[center] +[size=30] +[fa=heart /] Passez le mot +[/size] +[/center] + +[center] +Parlez de logiciel libre, d’[auto-hébergement](/selfhosting), de YunoHost à vos proches et à votre travail. Nous comptons sur des évangélistes du Datalove comme vous <3 +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=user /] Aidez les utilisateurices +[/size] +[/center] + +[center] +Notre support est communautaire et s’appuie sur des contributeurices comme vous. Venez simplement sur le [salon d'aide](/help), ou tentez de répondre aux questions du Forum. +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=edit /] Écrivez +[/size] +[/center] + +[center] +Améliorez cette documentation en [proposant de nouvelles pages](/write_documentation) ou en traduisant les existantes dans votre langue. +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=globe /] Traduisez +[/size] +[/center] + +[center] +Participez en rendant les interfaces de YunoHost disponibles dans votre langue. Lancez-vous ! +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=flask /] Testez +[/size] +[/center] + +[center] +Nous avons besoin de tester YunoHost profondément. Si vous trouvez un bug, essayez de l’identifier, puis reportez-le sur notre bug tracker. +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=gift /] Packagez +[/size] +[/center] + +[center] +Étendez les capacités de YunoHost en [packageant de nouveaux services et applications web](/packaging_apps). Jetez un œil à [ce qui a déjà été fait](/apps) ! +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=cog /] Codez +[/size] +[/center] + +[center] +Vous pouvez vous impliquer dans le développement de YunoHost peu importe votre niveau. Administrateurs système, développeurs web, designers et pythonistes sont les bienvenus. Découvrez [comment contribuer](/dev), et rejoignez-nous sur le [salon de discussion](xmpp:dev@conference.yunohost.org?join) ! +[/center] +[/columns] + +--- + +[center] +### Dans tous les cas, venez discuter avec nous sur [le salon de développement](/chat_rooms) :-) +[/center] diff --git a/pages/06.contribute/contribute.md b/pages/06.contribute/contribute.md new file mode 100644 index 00000000..00a70704 --- /dev/null +++ b/pages/06.contribute/contribute.md @@ -0,0 +1,123 @@ +--- +title: Get involved +template: docs +taxonomy: + category: docs +routes: + default: '/contributordoc' + aliases: + - '/contribute' +--- + +

+YunoHost depends exclusively on the participation of people like you. +

+ +
+ +[columns] +[center] +[size=30] +[fa=heart /] Spread the word +[/size] +[/center] + +[center] +Talk about software freedom, [self-hosting](/selfhosting) and YunoHost to your relatives and at your work. We rely on Datalove evangelists like you <3 +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=user /] Helping users +[/size] +[/center] + +[center] +Our support relies on contributors like you. Just come to [the support chatroom](/help) and help new users getting started, or pick a question on the Forum. +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=edit /] Write +[/size] +[/center] + +[center] +Improve this documentation by [writing new pages](/write_documentation) or translating existing ones to your language. +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=globe /] Localization +[/size] +[/center] + +[center] +Get involved by making YunoHost interfaces available in your language +Get started! +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=flask /] Testing +[/size] +[/center] + +[center] +We need people able to test YunoHost deeply. If you find a bug, try to identify it, and report it on our bug tracker. +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=gift /] Packaging +[/size] +[/center] + +[center] +Extend YunoHost capabilities by [packaging new services and web applications](/packaging_apps). +Have a look of [what has been done yet](/apps)! +[/center] +[/columns] + +
+ +[columns] +[center] +[size=30] +[fa=cog /] Coding +[/size] +[/center] + +[center] +You can involve in the YunoHost's development regardless of your skill. +Sysadmins, web developers, designers and pythonists are welcome! +Learn [how to contribute](/dev), and join us on the [development chat room](xmpp:dev@conference.yunohost.org?join). +[/center] +[/columns] + + +--- + +[center] +### In any case, please come chat with us on [the dev chatroom](/chat_rooms) :-) +[/center] diff --git a/pages/error/error.fr.md b/pages/error/error.fr.md new file mode 100644 index 00000000..2830bbd4 --- /dev/null +++ b/pages/error/error.fr.md @@ -0,0 +1,16 @@ +--- +title: Page introuvable +robots: noindex,nofollow +template: error +routable: false +http_response_code: 404 +twig_first: true +process: + twig: true +expires: 0 +--- + +## Oups. Il semblerait que la page n'existe pas... encore ! + + Vous pouvez contribuer à la documentation en l' +éditant ! diff --git a/pages/error/error.md b/pages/error/error.md new file mode 100644 index 00000000..37d474f2 --- /dev/null +++ b/pages/error/error.md @@ -0,0 +1,16 @@ +--- +title: Page not Found +robots: noindex,nofollow +template: error +routable: false +http_response_code: 404 +twig_first: true +process: + twig: true +expires: 0 +--- + +## Woops. Looks like this page doesn't exist... yet! + + You can contribute to the documentation by +Editing it! diff --git a/pages/error/error.ru.md b/pages/error/error.ru.md new file mode 100644 index 00000000..95b049e8 --- /dev/null +++ b/pages/error/error.ru.md @@ -0,0 +1,16 @@ +--- +title: Страница не найдена +robots: noindex,nofollow +template: error +routable: false +http_response_code: 404 +twig_first: true +process: + twig: true +expires: 0 +--- + +## Упс. Похоже, этой страницы не существует... пока! + + Вы можете внести свой вклад в документацию, выполнив +Редактирование этого! diff --git a/tests/dead_links.sh b/tests/dead_links.sh new file mode 100755 index 00000000..3624f13f --- /dev/null +++ b/tests/dead_links.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +returncode=0 + +# Parse default routes +grep -roh "^ *default: .*" ./pages | awk '{print $2}' | tr -d "'" | sort | uniq > .known_pages + +# Parse aliases +grep -rh "^---$" ./pages -B 50 | grep "^ *\- '/" | awk '{print $2}' | tr -d "'" | sort | uniq >> .known_pages + +# Find all markdown links and generate a list of filename.md:N:linktarget (with N the line number) + +while IFS= read -r LINK; do + PAGE=$(echo "$LINK" | awk -F: '{print $3}' | tr -d ']()/') + grep -qw "$PAGE" ./.known_pages || { echo "$LINK"; returncode=1; } +done < <(grep -nr -o -E "\]\(\/?(\w|-)+\)" ./pages) + +exit $returncode diff --git a/themes/learn4 b/themes/learn4 new file mode 160000 index 00000000..704a233b --- /dev/null +++ b/themes/learn4 @@ -0,0 +1 @@ +Subproject commit 704a233bdba73dcfb197f3d3fcdd9e89778445c3 diff --git a/themes/yunohost-docs/CHANGELOG.md b/themes/yunohost-docs/CHANGELOG.md new file mode 100644 index 00000000..72f8f647 --- /dev/null +++ b/themes/yunohost-docs/CHANGELOG.md @@ -0,0 +1,5 @@ +# v0.1.0 +## 11/14/2020 + +1. [](#new) + * ChangeLog started... diff --git a/themes/yunohost-docs/LICENSE b/themes/yunohost-docs/LICENSE new file mode 100644 index 00000000..0a25f8a4 --- /dev/null +++ b/themes/yunohost-docs/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2020 tituspijean + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/themes/yunohost-docs/README.md b/themes/yunohost-docs/README.md new file mode 100644 index 00000000..e4c35b14 --- /dev/null +++ b/themes/yunohost-docs/README.md @@ -0,0 +1,7 @@ +# YunoHost Docs Theme + +The **YunoHost Docs** Theme is for [Grav CMS](http://github.com/getgrav/grav). This README.md file should be modified to describe the features, installation, configuration, and general usage of this theme. + +## Description + +YunoHost Documentation theme, based off Grav Learn diff --git a/themes/yunohost-docs/blueprints.yaml b/themes/yunohost-docs/blueprints.yaml new file mode 100644 index 00000000..c21003f6 --- /dev/null +++ b/themes/yunohost-docs/blueprints.yaml @@ -0,0 +1,18 @@ +name: YunoHost Docs +slug: yunohost-docs +type: theme +version: 0.1.0 +description: YunoHost Documentation theme, based off Grav Learn4 +icon: rebel +author: + name: tituspijean + email: tituspijean@outlook.com +#homepage: https://github.com/tituspijean/grav-theme-yunohost-docs +#demo: http://demo.yoursite.com +keywords: grav, theme, etc +#bugs: https://github.com/tituspijean/grav-theme-yuno-host-docs/issues +#readme: https://github.com/tituspijean/grav-theme-yuno-host-docs/blob/develop/README.md +license: MIT + +dependencies: + - { name: grav, version: '>=1.6.0' } diff --git a/themes/yunohost-docs/css/custom.css b/themes/yunohost-docs/css/custom.css new file mode 100644 index 00000000..e53aff45 --- /dev/null +++ b/themes/yunohost-docs/css/custom.css @@ -0,0 +1,723 @@ +/*######################################## +########################################## + PLEASE DO NOT MODIFY THE CSS FILE +IF YOU WANT TO CHANGE THE CSS, DO IT IN THE + SCSS FILES AND "COMPILE" THEM: + https://sass-lang.com/guide +########################################## +########################################*/ +body.light-mode { + background-color: white; + /*================================================= + Side Bar + =================================================*/ + /*================================================= + App catalog + =================================================*/ + /*================================================= + Hardware image + =================================================*/ + /*================================================= + Other + =================================================*/ +} +body.light-mode ::selection { + background-color: #dddddd; +} +body.light-mode #body-wrapper, +body.light-mode #page-wrapper { + background-color: white; + color: #171b21; +} +body.light-mode a { + color: #0070d3; +} +body.light-mode .card, +body.light-mode #footer, +body.light-mode .dropmenu ul ul { + background-color: #f0f0f0 !important; +} +body.light-mode h1, +body.light-mode h2, +body.light-mode h3, +body.light-mode h4, +body.light-mode h5, +body.light-mode h6, +body.light-mode #header a { + color: #242931; +} +body.light-mode .label.label-primary { + color: #242931; + background-color: #0070d3; +} +body.light-mode .label.label-secondary { + color: #171b21; + background-color: #dddddd; +} +body.light-mode .pagination li { + border-color: #dddddd; + background: #f0f0f0; +} +body.light-mode #sidebar-id { + background: white; +} +body.light-mode .menu, +body.light-mode .learn-brand, +body.light-mode .learn-nav { + color: #111418; +} +body.light-mode .menu .menu-item > a:focus, +body.light-mode .menu .menu-item > a:hover, +body.light-mode #top-bar #navigation > a:hover { + background: #f0f0f0; +} +body.light-mode #sidebar ul.related-pages li { + border-bottom-color: #dddddd; +} +body.light-mode .form-input, +body.light-mode .search-input, +body.light-mode [data-grav-field=array] input, +body.light-mode [data-grav-field=array] textarea { + background: #f0f0f0; +} +body.light-mode .off-canvas .learn-sidebar .learn-brand #logo path { + fill: #171b21 !important; +} +body.light-mode .simplebar-content h5 { + border-top-color: #dddddd; +} +body.light-mode .off-canvas #sidebar-id { + border-right: 0.05rem solid #dddddd; +} +body.light-mode .off-canvas .learn-sidebar .learn-nav ul.searched a, +body.light-mode .off-canvas .learn-sidebar .searchbox input { + color: #171b21; +} +body.light-mode .off-canvas .learn-sidebar .learn-nav ul li.active > a, +body.light-mode .off-canvas .learn-sidebar .searchbox ::placeholder { + color: #111418; + background-color: transparent; +} +body.light-mode .off-canvas .learn-sidebar .learn-nav ul.searched .search-match a:hover, +body.light-mode .off-canvas .learn-sidebar .learn-nav ul.searched .search-match a { + color: #0070d3; +} +body.light-mode .off-canvas .learn-sidebar .learn-nav ul.topics > li.active, +body.light-mode .off-canvas .learn-sidebar .learn-nav ul.topics > li.parent { + background-color: rgba(0, 0, 0, 0.1); +} +body.light-mode .off-canvas .learn-sidebar .learn-nav .read-icon, +body.light-mode .off-canvas .learn-sidebar .searchbox { + color: #171b21; +} +body.light-mode .off-canvas .learn-sidebar .search-options .version-chooser select { + color: #171b21; +} +body.light-mode .off-canvas .learn-sidebar a, +body.light-mode .off-canvas .learn-sidebar .learn-nav ul li a, +body.light-mode .off-canvas .learn-sidebar .learn-nav ul li a > i, +body.light-mode .off-canvas .learn-sidebar .learn-nav ul li a > span > b { + color: #171b21; +} +body.light-mode .off-canvas .learn-sidebar a:hover { + color: #111418; +} +body.light-mode #filter-app-icon, +body.light-mode #filter-app-cards { + color: #171b21; + background-color: #f0f0f0; +} +body.light-mode #app-cards-list .app-title { + color: #242931; +} +body.light-mode #app-cards-list .app-buttons { + border-top: 0.05rem solid #f0f0f0; +} +body.light-mode #app-cards-list .app-buttons > .btn-default { + color: #242931; + background-color: #dddddd; +} +body.light-mode #app-cards-list .app-buttons > .btn:first-child { + border-right: 0.1rem solid #f0f0f0; +} +body.light-mode #app-cards-list .app-card { + border-color: #dddddd; +} +body.light-mode #app-cards-list .label { + color: black; +} +body.light-mode .hardware-image .card { + background-color: white !important; + border-color: #dddddd; +} +body.light-mode .hardware-image .btn-group .btn.btn-info { + color: #f0f0f0; +} +body.light-mode .hardware-image .btn-group .btn.btn-info:hover, +body.light-mode .btn.btn-info:focus { + color: #f0f0f0; +} +body.light-mode table tbody tr:nth-of-type(2n + 1) { + background: #f0f0f0; +} +body.light-mode table td, +body.light-mode table th { + border-bottom-color: #dddddd; +} +body.light-mode .danger { + background-color: #f2dede; +} +body.light-mode .warning { + background-color: #fcf8e3; +} +body.light-mode .success { + background-color: #dff0d8; +} +body.light-mode .page-toc { + background-color: #f0f0f0; +} +body.light-mode .page-toc li, +body.light-mode .page-toc li > a { + color: #242931; +} + +/*================================================= + Light mode specific +=================================================*/ +body.light-mode { + /* Give a gray background to the white logo*/ +} +body.light-mode img#whitelogo { + background-color: gray; + padding: 10px; +} + +/*! + * Dark Mode Theme + * + * Inspired by Louis Charette + * https://github.com/lcharette/website/blob/cc855a6eb29693613e5e4e1d589a17ba7faf4aa9/themes/quark-custom/css/darkMode.scss + */ +body.dark-mode { + background-color: #171b21; + /*================================================= + Side Bar + =================================================*/ + /*================================================= + App catalog + =================================================*/ + /*================================================= + Hardware image + =================================================*/ + /*================================================= + Other + =================================================*/ +} +body.dark-mode ::selection { + background-color: #3f4755; +} +body.dark-mode #body-wrapper, +body.dark-mode #page-wrapper { + background-color: #171b21; + color: #e8e9eb; +} +body.dark-mode a { + color: #72b6ec; +} +body.dark-mode .card, +body.dark-mode #footer, +body.dark-mode .dropmenu ul ul { + background-color: #111418 !important; +} +body.dark-mode h1, +body.dark-mode h2, +body.dark-mode h3, +body.dark-mode h4, +body.dark-mode h5, +body.dark-mode h6, +body.dark-mode #header a { + color: white; +} +body.dark-mode .label.label-primary { + color: white; + background-color: #72b6ec; +} +body.dark-mode .label.label-secondary { + color: #e8e9eb; + background-color: #3f4755; +} +body.dark-mode .pagination li { + border-color: #3f4755; + background: #111418; +} +body.dark-mode #sidebar-id { + background: #171b21; +} +body.dark-mode .menu, +body.dark-mode .learn-brand, +body.dark-mode .learn-nav { + color: #a5a9af; +} +body.dark-mode .menu .menu-item > a:focus, +body.dark-mode .menu .menu-item > a:hover, +body.dark-mode #top-bar #navigation > a:hover { + background: #111418; +} +body.dark-mode #sidebar ul.related-pages li { + border-bottom-color: #3f4755; +} +body.dark-mode .form-input, +body.dark-mode .search-input, +body.dark-mode [data-grav-field=array] input, +body.dark-mode [data-grav-field=array] textarea { + background: #111418; +} +body.dark-mode .off-canvas .learn-sidebar .learn-brand #logo path { + fill: #e8e9eb !important; +} +body.dark-mode .simplebar-content h5 { + border-top-color: #3f4755; +} +body.dark-mode .off-canvas #sidebar-id { + border-right: 0.05rem solid #3f4755; +} +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul.searched a, +body.dark-mode .off-canvas .learn-sidebar .searchbox input { + color: #e8e9eb; +} +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul li.active > a, +body.dark-mode .off-canvas .learn-sidebar .searchbox ::placeholder { + color: #a5a9af; + background-color: transparent; +} +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul.searched .search-match a:hover, +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul.searched .search-match a { + color: #72b6ec; +} +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul.topics > li.active, +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul.topics > li.parent { + background-color: rgba(255, 255, 255, 0.1); +} +body.dark-mode .off-canvas .learn-sidebar .learn-nav .read-icon, +body.dark-mode .off-canvas .learn-sidebar .searchbox { + color: #e8e9eb; +} +body.dark-mode .off-canvas .learn-sidebar .search-options .version-chooser select { + color: #e8e9eb; +} +body.dark-mode .off-canvas .learn-sidebar a, +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul li a, +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul li a > i, +body.dark-mode .off-canvas .learn-sidebar .learn-nav ul li a > span > b { + color: #e8e9eb; +} +body.dark-mode .off-canvas .learn-sidebar a:hover { + color: #a5a9af; +} +body.dark-mode #filter-app-icon, +body.dark-mode #filter-app-cards { + color: #e8e9eb; + background-color: #111418; +} +body.dark-mode #app-cards-list .app-title { + color: white; +} +body.dark-mode #app-cards-list .app-buttons { + border-top: 0.05rem solid #111418; +} +body.dark-mode #app-cards-list .app-buttons > .btn-default { + color: white; + background-color: #3f4755; +} +body.dark-mode #app-cards-list .app-buttons > .btn:first-child { + border-right: 0.1rem solid #111418; +} +body.dark-mode #app-cards-list .app-card { + border-color: #3f4755; +} +body.dark-mode #app-cards-list .label { + color: black; +} +body.dark-mode .hardware-image .card { + background-color: #171b21 !important; + border-color: #3f4755; +} +body.dark-mode .hardware-image .btn-group .btn.btn-info { + color: #111418; +} +body.dark-mode .hardware-image .btn-group .btn.btn-info:hover, +body.dark-mode .btn.btn-info:focus { + color: #111418; +} +body.dark-mode table tbody tr:nth-of-type(2n + 1) { + background: #111418; +} +body.dark-mode table td, +body.dark-mode table th { + border-bottom-color: #3f4755; +} +body.dark-mode .danger { + background-color: #712c2c; +} +body.dark-mode .warning { + background-color: #845804; +} +body.dark-mode .success { + background-color: #335723; +} +body.dark-mode .page-toc { + background-color: #111418; +} +body.dark-mode .page-toc li, +body.dark-mode .page-toc li > a { + color: white; +} + +/*================================================= + Dark mode specific +=================================================*/ +body.dark-mode img { + filter: brightness(0.85) contrast(1.2); +} +body.dark-mode img#whitelogo { + background-color: unset; + padding: 10px; +} +body.dark-mode #ynhlogo { + filter: invert(1); +} +body.dark-mode .notices.yellow { + border-left-color: #935b0c; + background-color: #31220b; + color: #eea034; +} +body.dark-mode .notices.red { + border-left-color: #89211e; + background-color: #2e0b0b; + color: #db5a56; +} +body.dark-mode .notices.blue, +body.dark-mode .notices.note { + border-left-color: #1b6e86; + background-color: #13222a; + color: #4bb9da; +} +body.dark-mode .notices.green { + border-left-color: #347834; + background-color: #192c13; + color: #7ac57a; +} +body.dark-mode code { + background: #3a3a3a; + color: #ece5ad; +} + +.learn-sidebar:before { + background: none !important; +} + +#chapter { + max-width: 80%; +} + +/* Images helper classes */ +img.inline { + display: inline; + margin: 5px 15px 5px 5px; + vertical-align: middle; +} + +img.center { + display: block; + margin: 5px 15px 5px 5px; + margin-left: auto; + margin-right: auto; +} + +td img { + margin: 0.2rem auto; +} + +/* Figures and caption */ +figure img { + margin: auto; +} + +figure figcaption { + font-style: italic; +} + +/* List spacing */ +ul li, +ol li { + margin-top: 0; +} + +ul, +ol { + margin-bottom: 0; +} + +li p { + margin: inherit; +} + +/* Paragraphs */ +p { + margin: 0 0 1rem; +} + +.notices p { + margin: 0 0 0 0.5rem; +} + +/* Flex */ +.flex-container { + display: flex; + justify-content: space-around; + flex-wrap: wrap; +} + +.flex-child { + display: inline-flex; + text-align: center; +} + +.nomargin * { + margin: 0px auto; +} + +/* Fonts and headings */ +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: "Source Sans Pro", "Metropolis", "Helvetica Neue", sans-serif; + margin-top: 1rem; + margin-bottom: 1rem; +} + +.simplebar-content h5 .fa { + font-size: 0.75em; + margin-right: 0.2em; + margin-left: 0.4em; +} + +.simplebar-content h5 { + letter-spacing: 0em; + border-top: 1px solid; + padding: 0.8em 0; + margin: 0; +} + +@font-face { + font-family: "Source Sans Pro"; + src: url("../fonts/SourceSansPro-Bold-webfont.eot"); + src: url("../fonts/SourceSansPro-Bold-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/SourceSansPro-Bold-webfont.woff") format("woff"), url("../fonts/SourceSansPro-Bold-webfont.ttf") format("truetype"), url("../fonts/SourceSansPro-Bold-webfont.svg#fonts/SourceSansProBold") format("svg"); + font-weight: 700; + font-style: normal; +} +/*================================================= + TOP BAR +=================================================*/ +body #top-bar { + background: none; + border-bottom: none; +} + +body #top-bar #navigation > a, +body #top-bar #navigation > span { + border-left: none; +} + +body #top-bar .progress { + display: none; +} + +body #top-bar #navigation { + margin-left: auto; + margin-right: 0; +} + +/*================================================= + SIDE BAR +=================================================*/ +body .off-canvas .learn-sidebar .learn-brand { + box-shadow: none; +} + +body .off-canvas .learn-sidebar .learn-nav ul li ul li.active > a { + background-color: rgba(0, 0, 0, 0.1); + border-left: 4px solid mediumturquoise; +} + +/*================================================= + SHORTCODE UI +=================================================*/ +.tabs-wrapper.ui-theme-lite .tab { + background-color: inherit !important; +} + +/* +############################################################################### + Style sheet for button on install pages +############################################################################### +*/ +.hardware img { + height: 75px; +} + +/* +############################################################################### + Style sheet for the cards +############################################################################### +*/ +.hardware.active { + box-shadow: 0 0 15px #bbb; + border-radius: 5px; +} + +.hardware-image #cards-list:after { + content: ""; + display: block; + clear: both; +} + +.hardware-image .card { + margin-bottom: 20px; + width: 270px; + float: left; + min-height: 1px; + margin-right: 10px; + margin-left: 10px; +} + +.hardware-image .card .panel-body > h3 { + margin-top: 0; + margin-bottom: 5px; + font-size: 1.2em; +} + +.hardware-image .card-desc { + height: 135px; + overflow: hidden; +} + +.hardware-image .card .btn-group { + width: 100%; + margin-left: 0px; +} + +.hardware-image .card > .btn-group > .btn { + border-bottom: 0; +} + +.hardware-image .card > .btn-group { + border-left: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + margin-left: 0px; +} + +.hardware-image .card-comment { + font-size: 0.8em; + margin-top: -5px; +} + +.hardware-image .card > .annotations { + text-align: center; + font-size: small; +} + +.hardware-image .card img { + margin: 1rem auto; +} + +.hardware-image .btn-group .btn.btn-info { + background-color: #5bc0de; + border-color: #46b8da; +} + +.hardware-image .btn-group .btn.btn-info:hover, +.btn.btn-info:focus { + background-color: #39b3d7; + border-color: #269abc; +} + +/*================================================= + App catalog +=================================================*/ +#filter-app-icon, +#filter-app-cards { + padding: 6px 12px; + margin-right: -2px; + border: none; +} + +#filter-app-cards, +#app-cards-list { + width: 100%; +} + +#app-cards-list:after { + content: ""; + display: block; + clear: both; +} + +#app-cards-list .app-card { + margin-bottom: 30px; + width: 28%; + float: left; + min-height: 1px; + margin-right: 15px; + margin-left: 15px; + border-radius: 3px; + position: relative; + height: 230px; +} + +#app-cards-list .app-title { + margin-top: 0; + margin-bottom: 5px; + font-size: 1.2em; + font-weight: 700; + line-height: 1.1; + padding: 1rem 1rem; + padding-bottom: 0; +} + +#app-cards-list .app-title .label { + font-size: 0.5em; + display: inline-block; + vertical-align: middle; + padding: 0.5em 0.6em; + padding-bottom: 0.3em; +} + +#app-cards-list .app-descr { + height: 120px; + overflow: hidden; + padding: 0.2rem 1rem; +} + +#app-cards-list .app-footer { + width: 100%; + position: absolute; + bottom: 0; +} + +#app-cards-list .app-buttons { + width: 100%; +} + +#app-cards-list .app-buttons > .btn { + border: 0; + font-size: 0.9em; + line-height: 1.58; + -webkit-appearance: none; +} + +/*# sourceMappingURL=custom.css.map */ diff --git a/themes/yunohost-docs/css/custom.css.map b/themes/yunohost-docs/css/custom.css.map new file mode 100644 index 00000000..6d5b30e8 --- /dev/null +++ b/themes/yunohost-docs/css/custom.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../scss/custom.scss","../scss/theme/light/_custom.scss","../scss/theme/dark/_custom.scss","../scss/theme/_global.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;EAeE,kBAbmB;AA4FnB;AAAA;AAAA;AAkEA;AAAA;AAAA;AAmCA;AAAA;AAAA;AAkBA;AAAA;AAAA;;AApMA;EACE,kBAXa;;AAcf;AAAA;EAEE,kBArBiB;EAsBjB,OArBW;;AAyBb;EACE,OArBW;;AAyBb;AAAA;AAAA;EAGE;;AAIF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE,OA3CkB;;AA+CpB;EACE,OAhDkB;EAiDlB,kBA7CW;;AA+Cb;EACE,OArDW;EAsDX,kBAlDa;;AAsDf;EACE,cAvDa;EAwDb,YAzDc;;AA4DhB;EACE,YAjEiB;;AAoEnB;AAAA;AAAA;EAGE,OApEkB;;AAuEpB;AAAA;AAAA;EAGE,YAzEc;;AA4EhB;EACE,qBA5Ea;;AAgFf;AAAA;AAAA;AAAA;EAIE,YArFc;;AA4FhB;EACE;;AAIF;EACE,kBAjGa;;AAoGf;EACE;;AAIF;AAAA;EAEE,OA/GW;;AAmHb;AAAA;EAGE,OApHkB;EAqHlB;;AAIF;AAAA;EAEE,OAxHW;;AA4Hb;AAAA;EAEE;;AAIF;AAAA;EAEE,OAzIW;;AA6Ib;EACE,OA9IW;;AAkJb;AAAA;AAAA;AAAA;EAIE,OAtJW;;AAyJb;EACE,OAxJkB;;AA+JpB;AAAA;EAEE,OAnKW;EAoKX,kBAjKc;;AAoKhB;EACE,OAvKkB;;AA0KpB;EACE;;AAGF;EACE,OA/KkB;EAgLlB,kBA7Ka;;AAgLf;EACE;;AAGF;EACE,cArLa;;AAwLf;EACE;;AAOF;EACE;EACA,cAlMa;;AAqMf;EACE,OAvMc;;AA0MhB;AAAA;EAEE,OA5Mc;;AAoNhB;EACE,YArNc;;AAwNhB;AAAA;EAEE,qBAzNa;;AA6Nf;EACE,kBA3NO;;AA6NT;EACE,kBA7NQ;;AA+NV;EACE,kBA/NQ;;AAkOV;EACE,kBAzOc;;AA4OhB;AAAA;EAEE,OAhPkB;;;AAoPtB;AAAA;AAAA;AAGA;AACE;;AACA;EACE;EACA;;;AC/PJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EAeE,kBAbmB;AA6FnB;AAAA;AAAA;AAkEA;AAAA;AAAA;AAmCA;AAAA;AAAA;AAkBA;AAAA;AAAA;;AArMA;EACE,kBAXa;;AAef;AAAA;EAEE,kBAtBiB;EAuBjB,OAtBW;;AA0Bb;EACE,OAtBW;;AA0Bb;AAAA;AAAA;EAGE;;AAIF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE,OA5CkB;;AAgDpB;EACE,OAjDkB;EAkDlB,kBA9CW;;AAgDb;EACE,OAtDW;EAuDX,kBAnDa;;AAuDf;EACE,cAxDa;EAyDb,YA1Dc;;AA6DhB;EACE,YAlEiB;;AAqEnB;AAAA;AAAA;EAGE,OArEkB;;AAwEpB;AAAA;AAAA;EAGE,YA1Ec;;AA6EhB;EACE,qBA7Ea;;AAiFf;AAAA;AAAA;AAAA;EAIE,YAtFc;;AA6FhB;EACE;;AAIF;EACE,kBAlGa;;AAqGf;EACE;;AAIF;AAAA;EAEE,OAhHW;;AAoHb;AAAA;EAGE,OArHkB;EAsHlB;;AAIF;AAAA;EAEE,OAzHW;;AA6Hb;AAAA;EAEE;;AAIF;AAAA;EAEE,OA1IW;;AA8Ib;EACE,OA/IW;;AAmJb;AAAA;AAAA;AAAA;EAIE,OAvJW;;AA0Jb;EACE,OAzJkB;;AAgKpB;AAAA;EAEE,OApKW;EAqKX,kBAlKc;;AAqKhB;EACE,OAxKkB;;AA2KpB;EACE;;AAGF;EACE,OAhLkB;EAiLlB,kBA9Ka;;AAiLf;EACE;;AAGF;EACE,cAtLa;;AAyLf;EACE;;AAOF;EACE;EACA,cAnMa;;AAsMf;EACE,OAxMc;;AA2MhB;AAAA;EAEE,OA7Mc;;AAqNhB;EACE,YAtNc;;AAyNhB;AAAA;EAEE,qBA1Na;;AA8Nf;EACE,kBA5NO;;AA8NT;EACE,kBA9NQ;;AAgOV;EACE,kBAhOQ;;AAmOV;EACE,kBA1Oc;;AA6OhB;AAAA;EAEE,OAjPkB;;;AAqPtB;AAAA;AAAA;AAKE;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;AAAA;EAEE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;;;AC7SJ;EACE;;;AAGF;EACE;;;AAGF;AACA;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AACA;EACE;;;AAGF;EACE;;;AAGF;AACA;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;EACE;;;AAGF;AACA;EACE;;;AAGF;EACE;;;AAGF;AACA;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EAIA;EACA;;AAGF;AAAA;AAAA;AAIA;EACE;EACA;;;AAGF;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;EACE;EACA;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAMA;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAGF;AAAA;AAAA;AAIA;AAAA;EAEE;EACA;EACA;;;AAGF;AAAA;EAEE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA","file":"custom.css"} \ No newline at end of file diff --git a/themes/yunohost-docs/css/swagger-ui.css b/themes/yunohost-docs/css/swagger-ui.css new file mode 100644 index 00000000..6530993f --- /dev/null +++ b/themes/yunohost-docs/css/swagger-ui.css @@ -0,0 +1,4 @@ +.swagger-ui{color:#3b4151; + /*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */font-family:sans-serif}.swagger-ui html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;line-height:1.15}.swagger-ui body{margin:0}.swagger-ui article,.swagger-ui aside,.swagger-ui footer,.swagger-ui header,.swagger-ui nav,.swagger-ui section{display:block}.swagger-ui h1{font-size:2em;margin:.67em 0}.swagger-ui figcaption,.swagger-ui figure,.swagger-ui main{display:block}.swagger-ui figure{margin:1em 40px}.swagger-ui hr{box-sizing:content-box;height:0;overflow:visible}.swagger-ui pre{font-family:monospace,monospace;font-size:1em}.swagger-ui a{-webkit-text-decoration-skip:objects;background-color:transparent}.swagger-ui abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.swagger-ui b,.swagger-ui strong{font-weight:inherit;font-weight:bolder}.swagger-ui code,.swagger-ui kbd,.swagger-ui samp{font-family:monospace,monospace;font-size:1em}.swagger-ui dfn{font-style:italic}.swagger-ui mark{background-color:#ff0;color:#000}.swagger-ui small{font-size:80%}.swagger-ui sub,.swagger-ui sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.swagger-ui sub{bottom:-.25em}.swagger-ui sup{top:-.5em}.swagger-ui audio,.swagger-ui video{display:inline-block}.swagger-ui audio:not([controls]){display:none;height:0}.swagger-ui img{border-style:none}.swagger-ui svg:not(:root){overflow:hidden}.swagger-ui button,.swagger-ui input,.swagger-ui optgroup,.swagger-ui select,.swagger-ui textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}.swagger-ui button,.swagger-ui input{overflow:visible}.swagger-ui button,.swagger-ui select{text-transform:none}.swagger-ui [type=reset],.swagger-ui [type=submit],.swagger-ui button,.swagger-ui html [type=button]{-webkit-appearance:button}.swagger-ui [type=button]::-moz-focus-inner,.swagger-ui [type=reset]::-moz-focus-inner,.swagger-ui [type=submit]::-moz-focus-inner,.swagger-ui button::-moz-focus-inner{border-style:none;padding:0}.swagger-ui [type=button]:-moz-focusring,.swagger-ui [type=reset]:-moz-focusring,.swagger-ui [type=submit]:-moz-focusring,.swagger-ui button:-moz-focusring{outline:1px dotted ButtonText}.swagger-ui fieldset{padding:.35em .75em .625em}.swagger-ui legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}.swagger-ui progress{display:inline-block;vertical-align:baseline}.swagger-ui textarea{overflow:auto}.swagger-ui [type=checkbox],.swagger-ui [type=radio]{box-sizing:border-box;padding:0}.swagger-ui [type=number]::-webkit-inner-spin-button,.swagger-ui [type=number]::-webkit-outer-spin-button{height:auto}.swagger-ui [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.swagger-ui [type=search]::-webkit-search-cancel-button,.swagger-ui [type=search]::-webkit-search-decoration{-webkit-appearance:none}.swagger-ui ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.swagger-ui details,.swagger-ui menu{display:block}.swagger-ui summary{display:list-item}.swagger-ui canvas{display:inline-block}.swagger-ui [hidden],.swagger-ui template{display:none}.swagger-ui .debug *{outline:1px solid gold}.swagger-ui .debug-white *{outline:1px solid #fff}.swagger-ui .debug-black *{outline:1px solid #000}.swagger-ui .debug-grid{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTRDOTY4N0U2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTRDOTY4N0Q2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3NjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3NzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsBS+GMAAAAjSURBVHjaYvz//z8DLsD4gcGXiYEAGBIKGBne//fFpwAgwAB98AaF2pjlUQAAAABJRU5ErkJggg==) repeat 0 0}.swagger-ui .debug-grid-16{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODYyRjhERDU2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODYyRjhERDQ2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QTY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3QjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvCS01IAAABMSURBVHjaYmR4/5+BFPBfAMFm/MBgx8RAGWCn1AAmSg34Q6kBDKMGMDCwICeMIemF/5QawEipAWwUhwEjMDvbAWlWkvVBwu8vQIABAEwBCph8U6c0AAAAAElFTkSuQmCC) repeat 0 0}.swagger-ui .debug-grid-8-solid{background:#fff url(data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAAAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzExMSA3OS4xNTgzMjUsIDIwMTUvMDkvMTAtMDE6MTA6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIxMjI0OTczNjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIxMjI0OTc0NjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjEyMjQ5NzE2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjEyMjQ5NzI2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAbGhopHSlBJiZBQi8vL0JHPz4+P0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHAR0pKTQmND8oKD9HPzU/R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0f/wAARCAAIAAgDASIAAhEBAxEB/8QAWQABAQAAAAAAAAAAAAAAAAAAAAYBAQEAAAAAAAAAAAAAAAAAAAIEEAEBAAMBAAAAAAAAAAAAAAABADECA0ERAAEDBQAAAAAAAAAAAAAAAAARITFBUWESIv/aAAwDAQACEQMRAD8AoOnTV1QTD7JJshP3vSM3P//Z) repeat 0 0}.swagger-ui .debug-grid-16-solid{background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzY3MkJEN0U2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzY3MkJEN0Y2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3RDY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pve6J3kAAAAzSURBVHjaYvz//z8D0UDsMwMjSRoYP5Gq4SPNbRjVMEQ1fCRDg+in/6+J1AJUxsgAEGAA31BAJMS0GYEAAAAASUVORK5CYII=) repeat 0 0}.swagger-ui .border-box,.swagger-ui a,.swagger-ui article,.swagger-ui body,.swagger-ui code,.swagger-ui dd,.swagger-ui div,.swagger-ui dl,.swagger-ui dt,.swagger-ui fieldset,.swagger-ui footer,.swagger-ui form,.swagger-ui h1,.swagger-ui h2,.swagger-ui h3,.swagger-ui h4,.swagger-ui h5,.swagger-ui h6,.swagger-ui header,.swagger-ui html,.swagger-ui input[type=email],.swagger-ui input[type=number],.swagger-ui input[type=password],.swagger-ui input[type=tel],.swagger-ui input[type=text],.swagger-ui input[type=url],.swagger-ui legend,.swagger-ui li,.swagger-ui main,.swagger-ui ol,.swagger-ui p,.swagger-ui pre,.swagger-ui section,.swagger-ui table,.swagger-ui td,.swagger-ui textarea,.swagger-ui th,.swagger-ui tr,.swagger-ui ul{box-sizing:border-box}.swagger-ui .aspect-ratio{height:0;position:relative}.swagger-ui .aspect-ratio--16x9{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1{padding-bottom:100%}.swagger-ui .aspect-ratio--object{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}@media screen and (min-width:30em){.swagger-ui .aspect-ratio-ns{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-ns{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-ns{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-ns{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-ns{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-ns{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-ns{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-ns{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-ns{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-ns{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-ns{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-ns{padding-bottom:100%}.swagger-ui .aspect-ratio--object-ns{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .aspect-ratio-m{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-m{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-m{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-m{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-m{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-m{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-m{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-m{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-m{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-m{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-m{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-m{padding-bottom:100%}.swagger-ui .aspect-ratio--object-m{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}@media screen and (min-width:60em){.swagger-ui .aspect-ratio-l{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-l{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-l{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-l{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-l{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-l{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-l{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-l{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-l{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-l{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-l{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-l{padding-bottom:100%}.swagger-ui .aspect-ratio--object-l{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}.swagger-ui img{max-width:100%}.swagger-ui .cover{background-size:cover!important}.swagger-ui .contain{background-size:contain!important}@media screen and (min-width:30em){.swagger-ui .cover-ns{background-size:cover!important}.swagger-ui .contain-ns{background-size:contain!important}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .cover-m{background-size:cover!important}.swagger-ui .contain-m{background-size:contain!important}}@media screen and (min-width:60em){.swagger-ui .cover-l{background-size:cover!important}.swagger-ui .contain-l{background-size:contain!important}}.swagger-ui .bg-center{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left{background-position:0;background-repeat:no-repeat}@media screen and (min-width:30em){.swagger-ui .bg-center-ns{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-ns{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-ns{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-ns{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-ns{background-position:0;background-repeat:no-repeat}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .bg-center-m{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-m{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-m{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-m{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-m{background-position:0;background-repeat:no-repeat}}@media screen and (min-width:60em){.swagger-ui .bg-center-l{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-l{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-l{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-l{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-l{background-position:0;background-repeat:no-repeat}}.swagger-ui .outline{outline:1px solid}.swagger-ui .outline-transparent{outline:1px solid transparent}.swagger-ui .outline-0{outline:0}@media screen and (min-width:30em){.swagger-ui .outline-ns{outline:1px solid}.swagger-ui .outline-transparent-ns{outline:1px solid transparent}.swagger-ui .outline-0-ns{outline:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .outline-m{outline:1px solid}.swagger-ui .outline-transparent-m{outline:1px solid transparent}.swagger-ui .outline-0-m{outline:0}}@media screen and (min-width:60em){.swagger-ui .outline-l{outline:1px solid}.swagger-ui .outline-transparent-l{outline:1px solid transparent}.swagger-ui .outline-0-l{outline:0}}.swagger-ui .ba{border-style:solid;border-width:1px}.swagger-ui .bt{border-top-style:solid;border-top-width:1px}.swagger-ui .br{border-right-style:solid;border-right-width:1px}.swagger-ui .bb{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl{border-left-style:solid;border-left-width:1px}.swagger-ui .bn{border-style:none;border-width:0}@media screen and (min-width:30em){.swagger-ui .ba-ns{border-style:solid;border-width:1px}.swagger-ui .bt-ns{border-top-style:solid;border-top-width:1px}.swagger-ui .br-ns{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-ns{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-ns{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-ns{border-style:none;border-width:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .ba-m{border-style:solid;border-width:1px}.swagger-ui .bt-m{border-top-style:solid;border-top-width:1px}.swagger-ui .br-m{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-m{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-m{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-m{border-style:none;border-width:0}}@media screen and (min-width:60em){.swagger-ui .ba-l{border-style:solid;border-width:1px}.swagger-ui .bt-l{border-top-style:solid;border-top-width:1px}.swagger-ui .br-l{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-l{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-l{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-l{border-style:none;border-width:0}}.swagger-ui .b--black{border-color:#000}.swagger-ui .b--near-black{border-color:#111}.swagger-ui .b--dark-gray{border-color:#333}.swagger-ui .b--mid-gray{border-color:#555}.swagger-ui .b--gray{border-color:#777}.swagger-ui .b--silver{border-color:#999}.swagger-ui .b--light-silver{border-color:#aaa}.swagger-ui .b--moon-gray{border-color:#ccc}.swagger-ui .b--light-gray{border-color:#eee}.swagger-ui .b--near-white{border-color:#f4f4f4}.swagger-ui .b--white{border-color:#fff}.swagger-ui .b--white-90{border-color:hsla(0,0%,100%,.9)}.swagger-ui .b--white-80{border-color:hsla(0,0%,100%,.8)}.swagger-ui .b--white-70{border-color:hsla(0,0%,100%,.7)}.swagger-ui .b--white-60{border-color:hsla(0,0%,100%,.6)}.swagger-ui .b--white-50{border-color:hsla(0,0%,100%,.5)}.swagger-ui .b--white-40{border-color:hsla(0,0%,100%,.4)}.swagger-ui .b--white-30{border-color:hsla(0,0%,100%,.3)}.swagger-ui .b--white-20{border-color:hsla(0,0%,100%,.2)}.swagger-ui .b--white-10{border-color:hsla(0,0%,100%,.1)}.swagger-ui .b--white-05{border-color:hsla(0,0%,100%,.05)}.swagger-ui .b--white-025{border-color:hsla(0,0%,100%,.025)}.swagger-ui .b--white-0125{border-color:hsla(0,0%,100%,.013)}.swagger-ui .b--black-90{border-color:rgba(0,0,0,.9)}.swagger-ui .b--black-80{border-color:rgba(0,0,0,.8)}.swagger-ui .b--black-70{border-color:rgba(0,0,0,.7)}.swagger-ui .b--black-60{border-color:rgba(0,0,0,.6)}.swagger-ui .b--black-50{border-color:rgba(0,0,0,.5)}.swagger-ui .b--black-40{border-color:rgba(0,0,0,.4)}.swagger-ui .b--black-30{border-color:rgba(0,0,0,.3)}.swagger-ui .b--black-20{border-color:rgba(0,0,0,.2)}.swagger-ui .b--black-10{border-color:rgba(0,0,0,.1)}.swagger-ui .b--black-05{border-color:rgba(0,0,0,.05)}.swagger-ui .b--black-025{border-color:rgba(0,0,0,.025)}.swagger-ui .b--black-0125{border-color:rgba(0,0,0,.013)}.swagger-ui .b--dark-red{border-color:#e7040f}.swagger-ui .b--red{border-color:#ff4136}.swagger-ui .b--light-red{border-color:#ff725c}.swagger-ui .b--orange{border-color:#ff6300}.swagger-ui .b--gold{border-color:#ffb700}.swagger-ui .b--yellow{border-color:gold}.swagger-ui .b--light-yellow{border-color:#fbf1a9}.swagger-ui .b--purple{border-color:#5e2ca5}.swagger-ui .b--light-purple{border-color:#a463f2}.swagger-ui .b--dark-pink{border-color:#d5008f}.swagger-ui .b--hot-pink{border-color:#ff41b4}.swagger-ui .b--pink{border-color:#ff80cc}.swagger-ui .b--light-pink{border-color:#ffa3d7}.swagger-ui .b--dark-green{border-color:#137752}.swagger-ui .b--green{border-color:#19a974}.swagger-ui .b--light-green{border-color:#9eebcf}.swagger-ui .b--navy{border-color:#001b44}.swagger-ui .b--dark-blue{border-color:#00449e}.swagger-ui .b--blue{border-color:#357edd}.swagger-ui .b--light-blue{border-color:#96ccff}.swagger-ui .b--lightest-blue{border-color:#cdecff}.swagger-ui .b--washed-blue{border-color:#f6fffe}.swagger-ui .b--washed-green{border-color:#e8fdf5}.swagger-ui .b--washed-yellow{border-color:#fffceb}.swagger-ui .b--washed-red{border-color:#ffdfdf}.swagger-ui .b--transparent{border-color:transparent}.swagger-ui .b--inherit{border-color:inherit}.swagger-ui .br0{border-radius:0}.swagger-ui .br1{border-radius:.125rem}.swagger-ui .br2{border-radius:.25rem}.swagger-ui .br3{border-radius:.5rem}.swagger-ui .br4{border-radius:1rem}.swagger-ui .br-100{border-radius:100%}.swagger-ui .br-pill{border-radius:9999px}.swagger-ui .br--bottom{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left{border-bottom-right-radius:0;border-top-right-radius:0}@media screen and (min-width:30em){.swagger-ui .br0-ns{border-radius:0}.swagger-ui .br1-ns{border-radius:.125rem}.swagger-ui .br2-ns{border-radius:.25rem}.swagger-ui .br3-ns{border-radius:.5rem}.swagger-ui .br4-ns{border-radius:1rem}.swagger-ui .br-100-ns{border-radius:100%}.swagger-ui .br-pill-ns{border-radius:9999px}.swagger-ui .br--bottom-ns{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-ns{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-ns{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-ns{border-bottom-right-radius:0;border-top-right-radius:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .br0-m{border-radius:0}.swagger-ui .br1-m{border-radius:.125rem}.swagger-ui .br2-m{border-radius:.25rem}.swagger-ui .br3-m{border-radius:.5rem}.swagger-ui .br4-m{border-radius:1rem}.swagger-ui .br-100-m{border-radius:100%}.swagger-ui .br-pill-m{border-radius:9999px}.swagger-ui .br--bottom-m{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-m{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-m{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-m{border-bottom-right-radius:0;border-top-right-radius:0}}@media screen and (min-width:60em){.swagger-ui .br0-l{border-radius:0}.swagger-ui .br1-l{border-radius:.125rem}.swagger-ui .br2-l{border-radius:.25rem}.swagger-ui .br3-l{border-radius:.5rem}.swagger-ui .br4-l{border-radius:1rem}.swagger-ui .br-100-l{border-radius:100%}.swagger-ui .br-pill-l{border-radius:9999px}.swagger-ui .br--bottom-l{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-l{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-l{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-l{border-bottom-right-radius:0;border-top-right-radius:0}}.swagger-ui .b--dotted{border-style:dotted}.swagger-ui .b--dashed{border-style:dashed}.swagger-ui .b--solid{border-style:solid}.swagger-ui .b--none{border-style:none}@media screen and (min-width:30em){.swagger-ui .b--dotted-ns{border-style:dotted}.swagger-ui .b--dashed-ns{border-style:dashed}.swagger-ui .b--solid-ns{border-style:solid}.swagger-ui .b--none-ns{border-style:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .b--dotted-m{border-style:dotted}.swagger-ui .b--dashed-m{border-style:dashed}.swagger-ui .b--solid-m{border-style:solid}.swagger-ui .b--none-m{border-style:none}}@media screen and (min-width:60em){.swagger-ui .b--dotted-l{border-style:dotted}.swagger-ui .b--dashed-l{border-style:dashed}.swagger-ui .b--solid-l{border-style:solid}.swagger-ui .b--none-l{border-style:none}}.swagger-ui .bw0{border-width:0}.swagger-ui .bw1{border-width:.125rem}.swagger-ui .bw2{border-width:.25rem}.swagger-ui .bw3{border-width:.5rem}.swagger-ui .bw4{border-width:1rem}.swagger-ui .bw5{border-width:2rem}.swagger-ui .bt-0{border-top-width:0}.swagger-ui .br-0{border-right-width:0}.swagger-ui .bb-0{border-bottom-width:0}.swagger-ui .bl-0{border-left-width:0}@media screen and (min-width:30em){.swagger-ui .bw0-ns{border-width:0}.swagger-ui .bw1-ns{border-width:.125rem}.swagger-ui .bw2-ns{border-width:.25rem}.swagger-ui .bw3-ns{border-width:.5rem}.swagger-ui .bw4-ns{border-width:1rem}.swagger-ui .bw5-ns{border-width:2rem}.swagger-ui .bt-0-ns{border-top-width:0}.swagger-ui .br-0-ns{border-right-width:0}.swagger-ui .bb-0-ns{border-bottom-width:0}.swagger-ui .bl-0-ns{border-left-width:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .bw0-m{border-width:0}.swagger-ui .bw1-m{border-width:.125rem}.swagger-ui .bw2-m{border-width:.25rem}.swagger-ui .bw3-m{border-width:.5rem}.swagger-ui .bw4-m{border-width:1rem}.swagger-ui .bw5-m{border-width:2rem}.swagger-ui .bt-0-m{border-top-width:0}.swagger-ui .br-0-m{border-right-width:0}.swagger-ui .bb-0-m{border-bottom-width:0}.swagger-ui .bl-0-m{border-left-width:0}}@media screen and (min-width:60em){.swagger-ui .bw0-l{border-width:0}.swagger-ui .bw1-l{border-width:.125rem}.swagger-ui .bw2-l{border-width:.25rem}.swagger-ui .bw3-l{border-width:.5rem}.swagger-ui .bw4-l{border-width:1rem}.swagger-ui .bw5-l{border-width:2rem}.swagger-ui .bt-0-l{border-top-width:0}.swagger-ui .br-0-l{border-right-width:0}.swagger-ui .bb-0-l{border-bottom-width:0}.swagger-ui .bl-0-l{border-left-width:0}}.swagger-ui .shadow-1{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}@media screen and (min-width:30em){.swagger-ui .shadow-1-ns{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-ns{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-ns{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-ns{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-ns{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .shadow-1-m{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-m{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-m{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-m{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-m{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}@media screen and (min-width:60em){.swagger-ui .shadow-1-l{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-l{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-l{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-l{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-l{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}.swagger-ui .pre{overflow-x:auto;overflow-y:hidden;overflow:scroll}.swagger-ui .top-0{top:0}.swagger-ui .right-0{right:0}.swagger-ui .bottom-0{bottom:0}.swagger-ui .left-0{left:0}.swagger-ui .top-1{top:1rem}.swagger-ui .right-1{right:1rem}.swagger-ui .bottom-1{bottom:1rem}.swagger-ui .left-1{left:1rem}.swagger-ui .top-2{top:2rem}.swagger-ui .right-2{right:2rem}.swagger-ui .bottom-2{bottom:2rem}.swagger-ui .left-2{left:2rem}.swagger-ui .top--1{top:-1rem}.swagger-ui .right--1{right:-1rem}.swagger-ui .bottom--1{bottom:-1rem}.swagger-ui .left--1{left:-1rem}.swagger-ui .top--2{top:-2rem}.swagger-ui .right--2{right:-2rem}.swagger-ui .bottom--2{bottom:-2rem}.swagger-ui .left--2{left:-2rem}.swagger-ui .absolute--fill{bottom:0;left:0;right:0;top:0}@media screen and (min-width:30em){.swagger-ui .top-0-ns{top:0}.swagger-ui .left-0-ns{left:0}.swagger-ui .right-0-ns{right:0}.swagger-ui .bottom-0-ns{bottom:0}.swagger-ui .top-1-ns{top:1rem}.swagger-ui .left-1-ns{left:1rem}.swagger-ui .right-1-ns{right:1rem}.swagger-ui .bottom-1-ns{bottom:1rem}.swagger-ui .top-2-ns{top:2rem}.swagger-ui .left-2-ns{left:2rem}.swagger-ui .right-2-ns{right:2rem}.swagger-ui .bottom-2-ns{bottom:2rem}.swagger-ui .top--1-ns{top:-1rem}.swagger-ui .right--1-ns{right:-1rem}.swagger-ui .bottom--1-ns{bottom:-1rem}.swagger-ui .left--1-ns{left:-1rem}.swagger-ui .top--2-ns{top:-2rem}.swagger-ui .right--2-ns{right:-2rem}.swagger-ui .bottom--2-ns{bottom:-2rem}.swagger-ui .left--2-ns{left:-2rem}.swagger-ui .absolute--fill-ns{bottom:0;left:0;right:0;top:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .top-0-m{top:0}.swagger-ui .left-0-m{left:0}.swagger-ui .right-0-m{right:0}.swagger-ui .bottom-0-m{bottom:0}.swagger-ui .top-1-m{top:1rem}.swagger-ui .left-1-m{left:1rem}.swagger-ui .right-1-m{right:1rem}.swagger-ui .bottom-1-m{bottom:1rem}.swagger-ui .top-2-m{top:2rem}.swagger-ui .left-2-m{left:2rem}.swagger-ui .right-2-m{right:2rem}.swagger-ui .bottom-2-m{bottom:2rem}.swagger-ui .top--1-m{top:-1rem}.swagger-ui .right--1-m{right:-1rem}.swagger-ui .bottom--1-m{bottom:-1rem}.swagger-ui .left--1-m{left:-1rem}.swagger-ui .top--2-m{top:-2rem}.swagger-ui .right--2-m{right:-2rem}.swagger-ui .bottom--2-m{bottom:-2rem}.swagger-ui .left--2-m{left:-2rem}.swagger-ui .absolute--fill-m{bottom:0;left:0;right:0;top:0}}@media screen and (min-width:60em){.swagger-ui .top-0-l{top:0}.swagger-ui .left-0-l{left:0}.swagger-ui .right-0-l{right:0}.swagger-ui .bottom-0-l{bottom:0}.swagger-ui .top-1-l{top:1rem}.swagger-ui .left-1-l{left:1rem}.swagger-ui .right-1-l{right:1rem}.swagger-ui .bottom-1-l{bottom:1rem}.swagger-ui .top-2-l{top:2rem}.swagger-ui .left-2-l{left:2rem}.swagger-ui .right-2-l{right:2rem}.swagger-ui .bottom-2-l{bottom:2rem}.swagger-ui .top--1-l{top:-1rem}.swagger-ui .right--1-l{right:-1rem}.swagger-ui .bottom--1-l{bottom:-1rem}.swagger-ui .left--1-l{left:-1rem}.swagger-ui .top--2-l{top:-2rem}.swagger-ui .right--2-l{right:-2rem}.swagger-ui .bottom--2-l{bottom:-2rem}.swagger-ui .left--2-l{left:-2rem}.swagger-ui .absolute--fill-l{bottom:0;left:0;right:0;top:0}}.swagger-ui .cf:after,.swagger-ui .cf:before{content:" ";display:table}.swagger-ui .cf:after{clear:both}.swagger-ui .cf{*zoom:1}.swagger-ui .cl{clear:left}.swagger-ui .cr{clear:right}.swagger-ui .cb{clear:both}.swagger-ui .cn{clear:none}@media screen and (min-width:30em){.swagger-ui .cl-ns{clear:left}.swagger-ui .cr-ns{clear:right}.swagger-ui .cb-ns{clear:both}.swagger-ui .cn-ns{clear:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .cl-m{clear:left}.swagger-ui .cr-m{clear:right}.swagger-ui .cb-m{clear:both}.swagger-ui .cn-m{clear:none}}@media screen and (min-width:60em){.swagger-ui .cl-l{clear:left}.swagger-ui .cr-l{clear:right}.swagger-ui .cb-l{clear:both}.swagger-ui .cn-l{clear:none}}.swagger-ui .flex{display:flex}.swagger-ui .inline-flex{display:inline-flex}.swagger-ui .flex-auto{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none{flex:none}.swagger-ui .flex-column{flex-direction:column}.swagger-ui .flex-row{flex-direction:row}.swagger-ui .flex-wrap{flex-wrap:wrap}.swagger-ui .flex-nowrap{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse{flex-direction:column-reverse}.swagger-ui .flex-row-reverse{flex-direction:row-reverse}.swagger-ui .items-start{align-items:flex-start}.swagger-ui .items-end{align-items:flex-end}.swagger-ui .items-center{align-items:center}.swagger-ui .items-baseline{align-items:baseline}.swagger-ui .items-stretch{align-items:stretch}.swagger-ui .self-start{align-self:flex-start}.swagger-ui .self-end{align-self:flex-end}.swagger-ui .self-center{align-self:center}.swagger-ui .self-baseline{align-self:baseline}.swagger-ui .self-stretch{align-self:stretch}.swagger-ui .justify-start{justify-content:flex-start}.swagger-ui .justify-end{justify-content:flex-end}.swagger-ui .justify-center{justify-content:center}.swagger-ui .justify-between{justify-content:space-between}.swagger-ui .justify-around{justify-content:space-around}.swagger-ui .content-start{align-content:flex-start}.swagger-ui .content-end{align-content:flex-end}.swagger-ui .content-center{align-content:center}.swagger-ui .content-between{align-content:space-between}.swagger-ui .content-around{align-content:space-around}.swagger-ui .content-stretch{align-content:stretch}.swagger-ui .order-0{order:0}.swagger-ui .order-1{order:1}.swagger-ui .order-2{order:2}.swagger-ui .order-3{order:3}.swagger-ui .order-4{order:4}.swagger-ui .order-5{order:5}.swagger-ui .order-6{order:6}.swagger-ui .order-7{order:7}.swagger-ui .order-8{order:8}.swagger-ui .order-last{order:99999}.swagger-ui .flex-grow-0{flex-grow:0}.swagger-ui .flex-grow-1{flex-grow:1}.swagger-ui .flex-shrink-0{flex-shrink:0}.swagger-ui .flex-shrink-1{flex-shrink:1}@media screen and (min-width:30em){.swagger-ui .flex-ns{display:flex}.swagger-ui .inline-flex-ns{display:inline-flex}.swagger-ui .flex-auto-ns{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-ns{flex:none}.swagger-ui .flex-column-ns{flex-direction:column}.swagger-ui .flex-row-ns{flex-direction:row}.swagger-ui .flex-wrap-ns{flex-wrap:wrap}.swagger-ui .flex-nowrap-ns{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-ns{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-ns{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-ns{flex-direction:row-reverse}.swagger-ui .items-start-ns{align-items:flex-start}.swagger-ui .items-end-ns{align-items:flex-end}.swagger-ui .items-center-ns{align-items:center}.swagger-ui .items-baseline-ns{align-items:baseline}.swagger-ui .items-stretch-ns{align-items:stretch}.swagger-ui .self-start-ns{align-self:flex-start}.swagger-ui .self-end-ns{align-self:flex-end}.swagger-ui .self-center-ns{align-self:center}.swagger-ui .self-baseline-ns{align-self:baseline}.swagger-ui .self-stretch-ns{align-self:stretch}.swagger-ui .justify-start-ns{justify-content:flex-start}.swagger-ui .justify-end-ns{justify-content:flex-end}.swagger-ui .justify-center-ns{justify-content:center}.swagger-ui .justify-between-ns{justify-content:space-between}.swagger-ui .justify-around-ns{justify-content:space-around}.swagger-ui .content-start-ns{align-content:flex-start}.swagger-ui .content-end-ns{align-content:flex-end}.swagger-ui .content-center-ns{align-content:center}.swagger-ui .content-between-ns{align-content:space-between}.swagger-ui .content-around-ns{align-content:space-around}.swagger-ui .content-stretch-ns{align-content:stretch}.swagger-ui .order-0-ns{order:0}.swagger-ui .order-1-ns{order:1}.swagger-ui .order-2-ns{order:2}.swagger-ui .order-3-ns{order:3}.swagger-ui .order-4-ns{order:4}.swagger-ui .order-5-ns{order:5}.swagger-ui .order-6-ns{order:6}.swagger-ui .order-7-ns{order:7}.swagger-ui .order-8-ns{order:8}.swagger-ui .order-last-ns{order:99999}.swagger-ui .flex-grow-0-ns{flex-grow:0}.swagger-ui .flex-grow-1-ns{flex-grow:1}.swagger-ui .flex-shrink-0-ns{flex-shrink:0}.swagger-ui .flex-shrink-1-ns{flex-shrink:1}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .flex-m{display:flex}.swagger-ui .inline-flex-m{display:inline-flex}.swagger-ui .flex-auto-m{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-m{flex:none}.swagger-ui .flex-column-m{flex-direction:column}.swagger-ui .flex-row-m{flex-direction:row}.swagger-ui .flex-wrap-m{flex-wrap:wrap}.swagger-ui .flex-nowrap-m{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-m{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-m{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-m{flex-direction:row-reverse}.swagger-ui .items-start-m{align-items:flex-start}.swagger-ui .items-end-m{align-items:flex-end}.swagger-ui .items-center-m{align-items:center}.swagger-ui .items-baseline-m{align-items:baseline}.swagger-ui .items-stretch-m{align-items:stretch}.swagger-ui .self-start-m{align-self:flex-start}.swagger-ui .self-end-m{align-self:flex-end}.swagger-ui .self-center-m{align-self:center}.swagger-ui .self-baseline-m{align-self:baseline}.swagger-ui .self-stretch-m{align-self:stretch}.swagger-ui .justify-start-m{justify-content:flex-start}.swagger-ui .justify-end-m{justify-content:flex-end}.swagger-ui .justify-center-m{justify-content:center}.swagger-ui .justify-between-m{justify-content:space-between}.swagger-ui .justify-around-m{justify-content:space-around}.swagger-ui .content-start-m{align-content:flex-start}.swagger-ui .content-end-m{align-content:flex-end}.swagger-ui .content-center-m{align-content:center}.swagger-ui .content-between-m{align-content:space-between}.swagger-ui .content-around-m{align-content:space-around}.swagger-ui .content-stretch-m{align-content:stretch}.swagger-ui .order-0-m{order:0}.swagger-ui .order-1-m{order:1}.swagger-ui .order-2-m{order:2}.swagger-ui .order-3-m{order:3}.swagger-ui .order-4-m{order:4}.swagger-ui .order-5-m{order:5}.swagger-ui .order-6-m{order:6}.swagger-ui .order-7-m{order:7}.swagger-ui .order-8-m{order:8}.swagger-ui .order-last-m{order:99999}.swagger-ui .flex-grow-0-m{flex-grow:0}.swagger-ui .flex-grow-1-m{flex-grow:1}.swagger-ui .flex-shrink-0-m{flex-shrink:0}.swagger-ui .flex-shrink-1-m{flex-shrink:1}}@media screen and (min-width:60em){.swagger-ui .flex-l{display:flex}.swagger-ui .inline-flex-l{display:inline-flex}.swagger-ui .flex-auto-l{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-l{flex:none}.swagger-ui .flex-column-l{flex-direction:column}.swagger-ui .flex-row-l{flex-direction:row}.swagger-ui .flex-wrap-l{flex-wrap:wrap}.swagger-ui .flex-nowrap-l{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-l{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-l{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-l{flex-direction:row-reverse}.swagger-ui .items-start-l{align-items:flex-start}.swagger-ui .items-end-l{align-items:flex-end}.swagger-ui .items-center-l{align-items:center}.swagger-ui .items-baseline-l{align-items:baseline}.swagger-ui .items-stretch-l{align-items:stretch}.swagger-ui .self-start-l{align-self:flex-start}.swagger-ui .self-end-l{align-self:flex-end}.swagger-ui .self-center-l{align-self:center}.swagger-ui .self-baseline-l{align-self:baseline}.swagger-ui .self-stretch-l{align-self:stretch}.swagger-ui .justify-start-l{justify-content:flex-start}.swagger-ui .justify-end-l{justify-content:flex-end}.swagger-ui .justify-center-l{justify-content:center}.swagger-ui .justify-between-l{justify-content:space-between}.swagger-ui .justify-around-l{justify-content:space-around}.swagger-ui .content-start-l{align-content:flex-start}.swagger-ui .content-end-l{align-content:flex-end}.swagger-ui .content-center-l{align-content:center}.swagger-ui .content-between-l{align-content:space-between}.swagger-ui .content-around-l{align-content:space-around}.swagger-ui .content-stretch-l{align-content:stretch}.swagger-ui .order-0-l{order:0}.swagger-ui .order-1-l{order:1}.swagger-ui .order-2-l{order:2}.swagger-ui .order-3-l{order:3}.swagger-ui .order-4-l{order:4}.swagger-ui .order-5-l{order:5}.swagger-ui .order-6-l{order:6}.swagger-ui .order-7-l{order:7}.swagger-ui .order-8-l{order:8}.swagger-ui .order-last-l{order:99999}.swagger-ui .flex-grow-0-l{flex-grow:0}.swagger-ui .flex-grow-1-l{flex-grow:1}.swagger-ui .flex-shrink-0-l{flex-shrink:0}.swagger-ui .flex-shrink-1-l{flex-shrink:1}}.swagger-ui .dn{display:none}.swagger-ui .di{display:inline}.swagger-ui .db{display:block}.swagger-ui .dib{display:inline-block}.swagger-ui .dit{display:inline-table}.swagger-ui .dt{display:table}.swagger-ui .dtc{display:table-cell}.swagger-ui .dt-row{display:table-row}.swagger-ui .dt-row-group{display:table-row-group}.swagger-ui .dt-column{display:table-column}.swagger-ui .dt-column-group{display:table-column-group}.swagger-ui .dt--fixed{table-layout:fixed;width:100%}@media screen and (min-width:30em){.swagger-ui .dn-ns{display:none}.swagger-ui .di-ns{display:inline}.swagger-ui .db-ns{display:block}.swagger-ui .dib-ns{display:inline-block}.swagger-ui .dit-ns{display:inline-table}.swagger-ui .dt-ns{display:table}.swagger-ui .dtc-ns{display:table-cell}.swagger-ui .dt-row-ns{display:table-row}.swagger-ui .dt-row-group-ns{display:table-row-group}.swagger-ui .dt-column-ns{display:table-column}.swagger-ui .dt-column-group-ns{display:table-column-group}.swagger-ui .dt--fixed-ns{table-layout:fixed;width:100%}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .dn-m{display:none}.swagger-ui .di-m{display:inline}.swagger-ui .db-m{display:block}.swagger-ui .dib-m{display:inline-block}.swagger-ui .dit-m{display:inline-table}.swagger-ui .dt-m{display:table}.swagger-ui .dtc-m{display:table-cell}.swagger-ui .dt-row-m{display:table-row}.swagger-ui .dt-row-group-m{display:table-row-group}.swagger-ui .dt-column-m{display:table-column}.swagger-ui .dt-column-group-m{display:table-column-group}.swagger-ui .dt--fixed-m{table-layout:fixed;width:100%}}@media screen and (min-width:60em){.swagger-ui .dn-l{display:none}.swagger-ui .di-l{display:inline}.swagger-ui .db-l{display:block}.swagger-ui .dib-l{display:inline-block}.swagger-ui .dit-l{display:inline-table}.swagger-ui .dt-l{display:table}.swagger-ui .dtc-l{display:table-cell}.swagger-ui .dt-row-l{display:table-row}.swagger-ui .dt-row-group-l{display:table-row-group}.swagger-ui .dt-column-l{display:table-column}.swagger-ui .dt-column-group-l{display:table-column-group}.swagger-ui .dt--fixed-l{table-layout:fixed;width:100%}}.swagger-ui .fl{_display:inline;float:left}.swagger-ui .fr{_display:inline;float:right}.swagger-ui .fn{float:none}@media screen and (min-width:30em){.swagger-ui .fl-ns{_display:inline;float:left}.swagger-ui .fr-ns{_display:inline;float:right}.swagger-ui .fn-ns{float:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .fl-m{_display:inline;float:left}.swagger-ui .fr-m{_display:inline;float:right}.swagger-ui .fn-m{float:none}}@media screen and (min-width:60em){.swagger-ui .fl-l{_display:inline;float:left}.swagger-ui .fr-l{_display:inline;float:right}.swagger-ui .fn-l{float:none}}.swagger-ui .sans-serif{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica,helvetica neue,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.swagger-ui .serif{font-family:georgia,serif}.swagger-ui .system-sans-serif{font-family:sans-serif}.swagger-ui .system-serif{font-family:serif}.swagger-ui .code,.swagger-ui code{font-family:Consolas,monaco,monospace}.swagger-ui .courier{font-family:Courier Next,courier,monospace}.swagger-ui .helvetica{font-family:helvetica neue,helvetica,sans-serif}.swagger-ui .avenir{font-family:avenir next,avenir,sans-serif}.swagger-ui .athelas{font-family:athelas,georgia,serif}.swagger-ui .georgia{font-family:georgia,serif}.swagger-ui .times{font-family:times,serif}.swagger-ui .bodoni{font-family:Bodoni MT,serif}.swagger-ui .calisto{font-family:Calisto MT,serif}.swagger-ui .garamond{font-family:garamond,serif}.swagger-ui .baskerville{font-family:baskerville,serif}.swagger-ui .i{font-style:italic}.swagger-ui .fs-normal{font-style:normal}@media screen and (min-width:30em){.swagger-ui .i-ns{font-style:italic}.swagger-ui .fs-normal-ns{font-style:normal}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .i-m{font-style:italic}.swagger-ui .fs-normal-m{font-style:normal}}@media screen and (min-width:60em){.swagger-ui .i-l{font-style:italic}.swagger-ui .fs-normal-l{font-style:normal}}.swagger-ui .normal{font-weight:400}.swagger-ui .b{font-weight:700}.swagger-ui .fw1{font-weight:100}.swagger-ui .fw2{font-weight:200}.swagger-ui .fw3{font-weight:300}.swagger-ui .fw4{font-weight:400}.swagger-ui .fw5{font-weight:500}.swagger-ui .fw6{font-weight:600}.swagger-ui .fw7{font-weight:700}.swagger-ui .fw8{font-weight:800}.swagger-ui .fw9{font-weight:900}@media screen and (min-width:30em){.swagger-ui .normal-ns{font-weight:400}.swagger-ui .b-ns{font-weight:700}.swagger-ui .fw1-ns{font-weight:100}.swagger-ui .fw2-ns{font-weight:200}.swagger-ui .fw3-ns{font-weight:300}.swagger-ui .fw4-ns{font-weight:400}.swagger-ui .fw5-ns{font-weight:500}.swagger-ui .fw6-ns{font-weight:600}.swagger-ui .fw7-ns{font-weight:700}.swagger-ui .fw8-ns{font-weight:800}.swagger-ui .fw9-ns{font-weight:900}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .normal-m{font-weight:400}.swagger-ui .b-m{font-weight:700}.swagger-ui .fw1-m{font-weight:100}.swagger-ui .fw2-m{font-weight:200}.swagger-ui .fw3-m{font-weight:300}.swagger-ui .fw4-m{font-weight:400}.swagger-ui .fw5-m{font-weight:500}.swagger-ui .fw6-m{font-weight:600}.swagger-ui .fw7-m{font-weight:700}.swagger-ui .fw8-m{font-weight:800}.swagger-ui .fw9-m{font-weight:900}}@media screen and (min-width:60em){.swagger-ui .normal-l{font-weight:400}.swagger-ui .b-l{font-weight:700}.swagger-ui .fw1-l{font-weight:100}.swagger-ui .fw2-l{font-weight:200}.swagger-ui .fw3-l{font-weight:300}.swagger-ui .fw4-l{font-weight:400}.swagger-ui .fw5-l{font-weight:500}.swagger-ui .fw6-l{font-weight:600}.swagger-ui .fw7-l{font-weight:700}.swagger-ui .fw8-l{font-weight:800}.swagger-ui .fw9-l{font-weight:900}}.swagger-ui .input-reset{-webkit-appearance:none;-moz-appearance:none}.swagger-ui .button-reset::-moz-focus-inner,.swagger-ui .input-reset::-moz-focus-inner{border:0;padding:0}.swagger-ui .h1{height:1rem}.swagger-ui .h2{height:2rem}.swagger-ui .h3{height:4rem}.swagger-ui .h4{height:8rem}.swagger-ui .h5{height:16rem}.swagger-ui .h-25{height:25%}.swagger-ui .h-50{height:50%}.swagger-ui .h-75{height:75%}.swagger-ui .h-100{height:100%}.swagger-ui .min-h-100{min-height:100%}.swagger-ui .vh-25{height:25vh}.swagger-ui .vh-50{height:50vh}.swagger-ui .vh-75{height:75vh}.swagger-ui .vh-100{height:100vh}.swagger-ui .min-vh-100{min-height:100vh}.swagger-ui .h-auto{height:auto}.swagger-ui .h-inherit{height:inherit}@media screen and (min-width:30em){.swagger-ui .h1-ns{height:1rem}.swagger-ui .h2-ns{height:2rem}.swagger-ui .h3-ns{height:4rem}.swagger-ui .h4-ns{height:8rem}.swagger-ui .h5-ns{height:16rem}.swagger-ui .h-25-ns{height:25%}.swagger-ui .h-50-ns{height:50%}.swagger-ui .h-75-ns{height:75%}.swagger-ui .h-100-ns{height:100%}.swagger-ui .min-h-100-ns{min-height:100%}.swagger-ui .vh-25-ns{height:25vh}.swagger-ui .vh-50-ns{height:50vh}.swagger-ui .vh-75-ns{height:75vh}.swagger-ui .vh-100-ns{height:100vh}.swagger-ui .min-vh-100-ns{min-height:100vh}.swagger-ui .h-auto-ns{height:auto}.swagger-ui .h-inherit-ns{height:inherit}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .h1-m{height:1rem}.swagger-ui .h2-m{height:2rem}.swagger-ui .h3-m{height:4rem}.swagger-ui .h4-m{height:8rem}.swagger-ui .h5-m{height:16rem}.swagger-ui .h-25-m{height:25%}.swagger-ui .h-50-m{height:50%}.swagger-ui .h-75-m{height:75%}.swagger-ui .h-100-m{height:100%}.swagger-ui .min-h-100-m{min-height:100%}.swagger-ui .vh-25-m{height:25vh}.swagger-ui .vh-50-m{height:50vh}.swagger-ui .vh-75-m{height:75vh}.swagger-ui .vh-100-m{height:100vh}.swagger-ui .min-vh-100-m{min-height:100vh}.swagger-ui .h-auto-m{height:auto}.swagger-ui .h-inherit-m{height:inherit}}@media screen and (min-width:60em){.swagger-ui .h1-l{height:1rem}.swagger-ui .h2-l{height:2rem}.swagger-ui .h3-l{height:4rem}.swagger-ui .h4-l{height:8rem}.swagger-ui .h5-l{height:16rem}.swagger-ui .h-25-l{height:25%}.swagger-ui .h-50-l{height:50%}.swagger-ui .h-75-l{height:75%}.swagger-ui .h-100-l{height:100%}.swagger-ui .min-h-100-l{min-height:100%}.swagger-ui .vh-25-l{height:25vh}.swagger-ui .vh-50-l{height:50vh}.swagger-ui .vh-75-l{height:75vh}.swagger-ui .vh-100-l{height:100vh}.swagger-ui .min-vh-100-l{min-height:100vh}.swagger-ui .h-auto-l{height:auto}.swagger-ui .h-inherit-l{height:inherit}}.swagger-ui .tracked{letter-spacing:.1em}.swagger-ui .tracked-tight{letter-spacing:-.05em}.swagger-ui .tracked-mega{letter-spacing:.25em}@media screen and (min-width:30em){.swagger-ui .tracked-ns{letter-spacing:.1em}.swagger-ui .tracked-tight-ns{letter-spacing:-.05em}.swagger-ui .tracked-mega-ns{letter-spacing:.25em}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .tracked-m{letter-spacing:.1em}.swagger-ui .tracked-tight-m{letter-spacing:-.05em}.swagger-ui .tracked-mega-m{letter-spacing:.25em}}@media screen and (min-width:60em){.swagger-ui .tracked-l{letter-spacing:.1em}.swagger-ui .tracked-tight-l{letter-spacing:-.05em}.swagger-ui .tracked-mega-l{letter-spacing:.25em}}.swagger-ui .lh-solid{line-height:1}.swagger-ui .lh-title{line-height:1.25}.swagger-ui .lh-copy{line-height:1.5}@media screen and (min-width:30em){.swagger-ui .lh-solid-ns{line-height:1}.swagger-ui .lh-title-ns{line-height:1.25}.swagger-ui .lh-copy-ns{line-height:1.5}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .lh-solid-m{line-height:1}.swagger-ui .lh-title-m{line-height:1.25}.swagger-ui .lh-copy-m{line-height:1.5}}@media screen and (min-width:60em){.swagger-ui .lh-solid-l{line-height:1}.swagger-ui .lh-title-l{line-height:1.25}.swagger-ui .lh-copy-l{line-height:1.5}}.swagger-ui .link{text-decoration:none}.swagger-ui .link,.swagger-ui .link:active,.swagger-ui .link:focus,.swagger-ui .link:hover,.swagger-ui .link:link,.swagger-ui .link:visited{transition:color .15s ease-in}.swagger-ui .link:focus{outline:1px dotted currentColor}.swagger-ui .list{list-style-type:none}.swagger-ui .mw-100{max-width:100%}.swagger-ui .mw1{max-width:1rem}.swagger-ui .mw2{max-width:2rem}.swagger-ui .mw3{max-width:4rem}.swagger-ui .mw4{max-width:8rem}.swagger-ui .mw5{max-width:16rem}.swagger-ui .mw6{max-width:32rem}.swagger-ui .mw7{max-width:48rem}.swagger-ui .mw8{max-width:64rem}.swagger-ui .mw9{max-width:96rem}.swagger-ui .mw-none{max-width:none}@media screen and (min-width:30em){.swagger-ui .mw-100-ns{max-width:100%}.swagger-ui .mw1-ns{max-width:1rem}.swagger-ui .mw2-ns{max-width:2rem}.swagger-ui .mw3-ns{max-width:4rem}.swagger-ui .mw4-ns{max-width:8rem}.swagger-ui .mw5-ns{max-width:16rem}.swagger-ui .mw6-ns{max-width:32rem}.swagger-ui .mw7-ns{max-width:48rem}.swagger-ui .mw8-ns{max-width:64rem}.swagger-ui .mw9-ns{max-width:96rem}.swagger-ui .mw-none-ns{max-width:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .mw-100-m{max-width:100%}.swagger-ui .mw1-m{max-width:1rem}.swagger-ui .mw2-m{max-width:2rem}.swagger-ui .mw3-m{max-width:4rem}.swagger-ui .mw4-m{max-width:8rem}.swagger-ui .mw5-m{max-width:16rem}.swagger-ui .mw6-m{max-width:32rem}.swagger-ui .mw7-m{max-width:48rem}.swagger-ui .mw8-m{max-width:64rem}.swagger-ui .mw9-m{max-width:96rem}.swagger-ui .mw-none-m{max-width:none}}@media screen and (min-width:60em){.swagger-ui .mw-100-l{max-width:100%}.swagger-ui .mw1-l{max-width:1rem}.swagger-ui .mw2-l{max-width:2rem}.swagger-ui .mw3-l{max-width:4rem}.swagger-ui .mw4-l{max-width:8rem}.swagger-ui .mw5-l{max-width:16rem}.swagger-ui .mw6-l{max-width:32rem}.swagger-ui .mw7-l{max-width:48rem}.swagger-ui .mw8-l{max-width:64rem}.swagger-ui .mw9-l{max-width:96rem}.swagger-ui .mw-none-l{max-width:none}}.swagger-ui .w1{width:1rem}.swagger-ui .w2{width:2rem}.swagger-ui .w3{width:4rem}.swagger-ui .w4{width:8rem}.swagger-ui .w5{width:16rem}.swagger-ui .w-10{width:10%}.swagger-ui .w-20{width:20%}.swagger-ui .w-25{width:25%}.swagger-ui .w-30{width:30%}.swagger-ui .w-33{width:33%}.swagger-ui .w-34{width:34%}.swagger-ui .w-40{width:40%}.swagger-ui .w-50{width:50%}.swagger-ui .w-60{width:60%}.swagger-ui .w-70{width:70%}.swagger-ui .w-75{width:75%}.swagger-ui .w-80{width:80%}.swagger-ui .w-90{width:90%}.swagger-ui .w-100{width:100%}.swagger-ui .w-third{width:33.3333333333%}.swagger-ui .w-two-thirds{width:66.6666666667%}.swagger-ui .w-auto{width:auto}@media screen and (min-width:30em){.swagger-ui .w1-ns{width:1rem}.swagger-ui .w2-ns{width:2rem}.swagger-ui .w3-ns{width:4rem}.swagger-ui .w4-ns{width:8rem}.swagger-ui .w5-ns{width:16rem}.swagger-ui .w-10-ns{width:10%}.swagger-ui .w-20-ns{width:20%}.swagger-ui .w-25-ns{width:25%}.swagger-ui .w-30-ns{width:30%}.swagger-ui .w-33-ns{width:33%}.swagger-ui .w-34-ns{width:34%}.swagger-ui .w-40-ns{width:40%}.swagger-ui .w-50-ns{width:50%}.swagger-ui .w-60-ns{width:60%}.swagger-ui .w-70-ns{width:70%}.swagger-ui .w-75-ns{width:75%}.swagger-ui .w-80-ns{width:80%}.swagger-ui .w-90-ns{width:90%}.swagger-ui .w-100-ns{width:100%}.swagger-ui .w-third-ns{width:33.3333333333%}.swagger-ui .w-two-thirds-ns{width:66.6666666667%}.swagger-ui .w-auto-ns{width:auto}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .w1-m{width:1rem}.swagger-ui .w2-m{width:2rem}.swagger-ui .w3-m{width:4rem}.swagger-ui .w4-m{width:8rem}.swagger-ui .w5-m{width:16rem}.swagger-ui .w-10-m{width:10%}.swagger-ui .w-20-m{width:20%}.swagger-ui .w-25-m{width:25%}.swagger-ui .w-30-m{width:30%}.swagger-ui .w-33-m{width:33%}.swagger-ui .w-34-m{width:34%}.swagger-ui .w-40-m{width:40%}.swagger-ui .w-50-m{width:50%}.swagger-ui .w-60-m{width:60%}.swagger-ui .w-70-m{width:70%}.swagger-ui .w-75-m{width:75%}.swagger-ui .w-80-m{width:80%}.swagger-ui .w-90-m{width:90%}.swagger-ui .w-100-m{width:100%}.swagger-ui .w-third-m{width:33.3333333333%}.swagger-ui .w-two-thirds-m{width:66.6666666667%}.swagger-ui .w-auto-m{width:auto}}@media screen and (min-width:60em){.swagger-ui .w1-l{width:1rem}.swagger-ui .w2-l{width:2rem}.swagger-ui .w3-l{width:4rem}.swagger-ui .w4-l{width:8rem}.swagger-ui .w5-l{width:16rem}.swagger-ui .w-10-l{width:10%}.swagger-ui .w-20-l{width:20%}.swagger-ui .w-25-l{width:25%}.swagger-ui .w-30-l{width:30%}.swagger-ui .w-33-l{width:33%}.swagger-ui .w-34-l{width:34%}.swagger-ui .w-40-l{width:40%}.swagger-ui .w-50-l{width:50%}.swagger-ui .w-60-l{width:60%}.swagger-ui .w-70-l{width:70%}.swagger-ui .w-75-l{width:75%}.swagger-ui .w-80-l{width:80%}.swagger-ui .w-90-l{width:90%}.swagger-ui .w-100-l{width:100%}.swagger-ui .w-third-l{width:33.3333333333%}.swagger-ui .w-two-thirds-l{width:66.6666666667%}.swagger-ui .w-auto-l{width:auto}}.swagger-ui .overflow-visible{overflow:visible}.swagger-ui .overflow-hidden{overflow:hidden}.swagger-ui .overflow-scroll{overflow:scroll}.swagger-ui .overflow-auto{overflow:auto}.swagger-ui .overflow-x-visible{overflow-x:visible}.swagger-ui .overflow-x-hidden{overflow-x:hidden}.swagger-ui .overflow-x-scroll{overflow-x:scroll}.swagger-ui .overflow-x-auto{overflow-x:auto}.swagger-ui .overflow-y-visible{overflow-y:visible}.swagger-ui .overflow-y-hidden{overflow-y:hidden}.swagger-ui .overflow-y-scroll{overflow-y:scroll}.swagger-ui .overflow-y-auto{overflow-y:auto}@media screen and (min-width:30em){.swagger-ui .overflow-visible-ns{overflow:visible}.swagger-ui .overflow-hidden-ns{overflow:hidden}.swagger-ui .overflow-scroll-ns{overflow:scroll}.swagger-ui .overflow-auto-ns{overflow:auto}.swagger-ui .overflow-x-visible-ns{overflow-x:visible}.swagger-ui .overflow-x-hidden-ns{overflow-x:hidden}.swagger-ui .overflow-x-scroll-ns{overflow-x:scroll}.swagger-ui .overflow-x-auto-ns{overflow-x:auto}.swagger-ui .overflow-y-visible-ns{overflow-y:visible}.swagger-ui .overflow-y-hidden-ns{overflow-y:hidden}.swagger-ui .overflow-y-scroll-ns{overflow-y:scroll}.swagger-ui .overflow-y-auto-ns{overflow-y:auto}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .overflow-visible-m{overflow:visible}.swagger-ui .overflow-hidden-m{overflow:hidden}.swagger-ui .overflow-scroll-m{overflow:scroll}.swagger-ui .overflow-auto-m{overflow:auto}.swagger-ui .overflow-x-visible-m{overflow-x:visible}.swagger-ui .overflow-x-hidden-m{overflow-x:hidden}.swagger-ui .overflow-x-scroll-m{overflow-x:scroll}.swagger-ui .overflow-x-auto-m{overflow-x:auto}.swagger-ui .overflow-y-visible-m{overflow-y:visible}.swagger-ui .overflow-y-hidden-m{overflow-y:hidden}.swagger-ui .overflow-y-scroll-m{overflow-y:scroll}.swagger-ui .overflow-y-auto-m{overflow-y:auto}}@media screen and (min-width:60em){.swagger-ui .overflow-visible-l{overflow:visible}.swagger-ui .overflow-hidden-l{overflow:hidden}.swagger-ui .overflow-scroll-l{overflow:scroll}.swagger-ui .overflow-auto-l{overflow:auto}.swagger-ui .overflow-x-visible-l{overflow-x:visible}.swagger-ui .overflow-x-hidden-l{overflow-x:hidden}.swagger-ui .overflow-x-scroll-l{overflow-x:scroll}.swagger-ui .overflow-x-auto-l{overflow-x:auto}.swagger-ui .overflow-y-visible-l{overflow-y:visible}.swagger-ui .overflow-y-hidden-l{overflow-y:hidden}.swagger-ui .overflow-y-scroll-l{overflow-y:scroll}.swagger-ui .overflow-y-auto-l{overflow-y:auto}}.swagger-ui .static{position:static}.swagger-ui .relative{position:relative}.swagger-ui .absolute{position:absolute}.swagger-ui .fixed{position:fixed}@media screen and (min-width:30em){.swagger-ui .static-ns{position:static}.swagger-ui .relative-ns{position:relative}.swagger-ui .absolute-ns{position:absolute}.swagger-ui .fixed-ns{position:fixed}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .static-m{position:static}.swagger-ui .relative-m{position:relative}.swagger-ui .absolute-m{position:absolute}.swagger-ui .fixed-m{position:fixed}}@media screen and (min-width:60em){.swagger-ui .static-l{position:static}.swagger-ui .relative-l{position:relative}.swagger-ui .absolute-l{position:absolute}.swagger-ui .fixed-l{position:fixed}}.swagger-ui .o-100{opacity:1}.swagger-ui .o-90{opacity:.9}.swagger-ui .o-80{opacity:.8}.swagger-ui .o-70{opacity:.7}.swagger-ui .o-60{opacity:.6}.swagger-ui .o-50{opacity:.5}.swagger-ui .o-40{opacity:.4}.swagger-ui .o-30{opacity:.3}.swagger-ui .o-20{opacity:.2}.swagger-ui .o-10{opacity:.1}.swagger-ui .o-05{opacity:.05}.swagger-ui .o-025{opacity:.025}.swagger-ui .o-0{opacity:0}.swagger-ui .rotate-45{transform:rotate(45deg)}.swagger-ui .rotate-90{transform:rotate(90deg)}.swagger-ui .rotate-135{transform:rotate(135deg)}.swagger-ui .rotate-180{transform:rotate(180deg)}.swagger-ui .rotate-225{transform:rotate(225deg)}.swagger-ui .rotate-270{transform:rotate(270deg)}.swagger-ui .rotate-315{transform:rotate(315deg)}@media screen and (min-width:30em){.swagger-ui .rotate-45-ns{transform:rotate(45deg)}.swagger-ui .rotate-90-ns{transform:rotate(90deg)}.swagger-ui .rotate-135-ns{transform:rotate(135deg)}.swagger-ui .rotate-180-ns{transform:rotate(180deg)}.swagger-ui .rotate-225-ns{transform:rotate(225deg)}.swagger-ui .rotate-270-ns{transform:rotate(270deg)}.swagger-ui .rotate-315-ns{transform:rotate(315deg)}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .rotate-45-m{transform:rotate(45deg)}.swagger-ui .rotate-90-m{transform:rotate(90deg)}.swagger-ui .rotate-135-m{transform:rotate(135deg)}.swagger-ui .rotate-180-m{transform:rotate(180deg)}.swagger-ui .rotate-225-m{transform:rotate(225deg)}.swagger-ui .rotate-270-m{transform:rotate(270deg)}.swagger-ui .rotate-315-m{transform:rotate(315deg)}}@media screen and (min-width:60em){.swagger-ui .rotate-45-l{transform:rotate(45deg)}.swagger-ui .rotate-90-l{transform:rotate(90deg)}.swagger-ui .rotate-135-l{transform:rotate(135deg)}.swagger-ui .rotate-180-l{transform:rotate(180deg)}.swagger-ui .rotate-225-l{transform:rotate(225deg)}.swagger-ui .rotate-270-l{transform:rotate(270deg)}.swagger-ui .rotate-315-l{transform:rotate(315deg)}}.swagger-ui .black-90{color:rgba(0,0,0,.9)}.swagger-ui .black-80{color:rgba(0,0,0,.8)}.swagger-ui .black-70{color:rgba(0,0,0,.7)}.swagger-ui .black-60{color:rgba(0,0,0,.6)}.swagger-ui .black-50{color:rgba(0,0,0,.5)}.swagger-ui .black-40{color:rgba(0,0,0,.4)}.swagger-ui .black-30{color:rgba(0,0,0,.3)}.swagger-ui .black-20{color:rgba(0,0,0,.2)}.swagger-ui .black-10{color:rgba(0,0,0,.1)}.swagger-ui .black-05{color:rgba(0,0,0,.05)}.swagger-ui .white-90{color:hsla(0,0%,100%,.9)}.swagger-ui .white-80{color:hsla(0,0%,100%,.8)}.swagger-ui .white-70{color:hsla(0,0%,100%,.7)}.swagger-ui .white-60{color:hsla(0,0%,100%,.6)}.swagger-ui .white-50{color:hsla(0,0%,100%,.5)}.swagger-ui .white-40{color:hsla(0,0%,100%,.4)}.swagger-ui .white-30{color:hsla(0,0%,100%,.3)}.swagger-ui .white-20{color:hsla(0,0%,100%,.2)}.swagger-ui .white-10{color:hsla(0,0%,100%,.1)}.swagger-ui .black{color:#000}.swagger-ui .near-black{color:#111}.swagger-ui .dark-gray{color:#333}.swagger-ui .mid-gray{color:#555}.swagger-ui .gray{color:#777}.swagger-ui .silver{color:#999}.swagger-ui .light-silver{color:#aaa}.swagger-ui .moon-gray{color:#ccc}.swagger-ui .light-gray{color:#eee}.swagger-ui .near-white{color:#f4f4f4}.swagger-ui .white{color:#fff}.swagger-ui .dark-red{color:#e7040f}.swagger-ui .red{color:#ff4136}.swagger-ui .light-red{color:#ff725c}.swagger-ui .orange{color:#ff6300}.swagger-ui .gold{color:#ffb700}.swagger-ui .yellow{color:gold}.swagger-ui .light-yellow{color:#fbf1a9}.swagger-ui .purple{color:#5e2ca5}.swagger-ui .light-purple{color:#a463f2}.swagger-ui .dark-pink{color:#d5008f}.swagger-ui .hot-pink{color:#ff41b4}.swagger-ui .pink{color:#ff80cc}.swagger-ui .light-pink{color:#ffa3d7}.swagger-ui .dark-green{color:#137752}.swagger-ui .green{color:#19a974}.swagger-ui .light-green{color:#9eebcf}.swagger-ui .navy{color:#001b44}.swagger-ui .dark-blue{color:#00449e}.swagger-ui .blue{color:#357edd}.swagger-ui .light-blue{color:#96ccff}.swagger-ui .lightest-blue{color:#cdecff}.swagger-ui .washed-blue{color:#f6fffe}.swagger-ui .washed-green{color:#e8fdf5}.swagger-ui .washed-yellow{color:#fffceb}.swagger-ui .washed-red{color:#ffdfdf}.swagger-ui .color-inherit{color:inherit}.swagger-ui .bg-black-90{background-color:rgba(0,0,0,.9)}.swagger-ui .bg-black-80{background-color:rgba(0,0,0,.8)}.swagger-ui .bg-black-70{background-color:rgba(0,0,0,.7)}.swagger-ui .bg-black-60{background-color:rgba(0,0,0,.6)}.swagger-ui .bg-black-50{background-color:rgba(0,0,0,.5)}.swagger-ui .bg-black-40{background-color:rgba(0,0,0,.4)}.swagger-ui .bg-black-30{background-color:rgba(0,0,0,.3)}.swagger-ui .bg-black-20{background-color:rgba(0,0,0,.2)}.swagger-ui .bg-black-10{background-color:rgba(0,0,0,.1)}.swagger-ui .bg-black-05{background-color:rgba(0,0,0,.05)}.swagger-ui .bg-white-90{background-color:hsla(0,0%,100%,.9)}.swagger-ui .bg-white-80{background-color:hsla(0,0%,100%,.8)}.swagger-ui .bg-white-70{background-color:hsla(0,0%,100%,.7)}.swagger-ui .bg-white-60{background-color:hsla(0,0%,100%,.6)}.swagger-ui .bg-white-50{background-color:hsla(0,0%,100%,.5)}.swagger-ui .bg-white-40{background-color:hsla(0,0%,100%,.4)}.swagger-ui .bg-white-30{background-color:hsla(0,0%,100%,.3)}.swagger-ui .bg-white-20{background-color:hsla(0,0%,100%,.2)}.swagger-ui .bg-white-10{background-color:hsla(0,0%,100%,.1)}.swagger-ui .bg-black{background-color:#000}.swagger-ui .bg-near-black{background-color:#111}.swagger-ui .bg-dark-gray{background-color:#333}.swagger-ui .bg-mid-gray{background-color:#555}.swagger-ui .bg-gray{background-color:#777}.swagger-ui .bg-silver{background-color:#999}.swagger-ui .bg-light-silver{background-color:#aaa}.swagger-ui .bg-moon-gray{background-color:#ccc}.swagger-ui .bg-light-gray{background-color:#eee}.swagger-ui .bg-near-white{background-color:#f4f4f4}.swagger-ui .bg-white{background-color:#fff}.swagger-ui .bg-transparent{background-color:transparent}.swagger-ui .bg-dark-red{background-color:#e7040f}.swagger-ui .bg-red{background-color:#ff4136}.swagger-ui .bg-light-red{background-color:#ff725c}.swagger-ui .bg-orange{background-color:#ff6300}.swagger-ui .bg-gold{background-color:#ffb700}.swagger-ui .bg-yellow{background-color:gold}.swagger-ui .bg-light-yellow{background-color:#fbf1a9}.swagger-ui .bg-purple{background-color:#5e2ca5}.swagger-ui .bg-light-purple{background-color:#a463f2}.swagger-ui .bg-dark-pink{background-color:#d5008f}.swagger-ui .bg-hot-pink{background-color:#ff41b4}.swagger-ui .bg-pink{background-color:#ff80cc}.swagger-ui .bg-light-pink{background-color:#ffa3d7}.swagger-ui .bg-dark-green{background-color:#137752}.swagger-ui .bg-green{background-color:#19a974}.swagger-ui .bg-light-green{background-color:#9eebcf}.swagger-ui .bg-navy{background-color:#001b44}.swagger-ui .bg-dark-blue{background-color:#00449e}.swagger-ui .bg-blue{background-color:#357edd}.swagger-ui .bg-light-blue{background-color:#96ccff}.swagger-ui .bg-lightest-blue{background-color:#cdecff}.swagger-ui .bg-washed-blue{background-color:#f6fffe}.swagger-ui .bg-washed-green{background-color:#e8fdf5}.swagger-ui .bg-washed-yellow{background-color:#fffceb}.swagger-ui .bg-washed-red{background-color:#ffdfdf}.swagger-ui .bg-inherit{background-color:inherit}.swagger-ui .hover-black:focus,.swagger-ui .hover-black:hover{color:#000}.swagger-ui .hover-near-black:focus,.swagger-ui .hover-near-black:hover{color:#111}.swagger-ui .hover-dark-gray:focus,.swagger-ui .hover-dark-gray:hover{color:#333}.swagger-ui .hover-mid-gray:focus,.swagger-ui .hover-mid-gray:hover{color:#555}.swagger-ui .hover-gray:focus,.swagger-ui .hover-gray:hover{color:#777}.swagger-ui .hover-silver:focus,.swagger-ui .hover-silver:hover{color:#999}.swagger-ui .hover-light-silver:focus,.swagger-ui .hover-light-silver:hover{color:#aaa}.swagger-ui .hover-moon-gray:focus,.swagger-ui .hover-moon-gray:hover{color:#ccc}.swagger-ui .hover-light-gray:focus,.swagger-ui .hover-light-gray:hover{color:#eee}.swagger-ui .hover-near-white:focus,.swagger-ui .hover-near-white:hover{color:#f4f4f4}.swagger-ui .hover-white:focus,.swagger-ui .hover-white:hover{color:#fff}.swagger-ui .hover-black-90:focus,.swagger-ui .hover-black-90:hover{color:rgba(0,0,0,.9)}.swagger-ui .hover-black-80:focus,.swagger-ui .hover-black-80:hover{color:rgba(0,0,0,.8)}.swagger-ui .hover-black-70:focus,.swagger-ui .hover-black-70:hover{color:rgba(0,0,0,.7)}.swagger-ui .hover-black-60:focus,.swagger-ui .hover-black-60:hover{color:rgba(0,0,0,.6)}.swagger-ui .hover-black-50:focus,.swagger-ui .hover-black-50:hover{color:rgba(0,0,0,.5)}.swagger-ui .hover-black-40:focus,.swagger-ui .hover-black-40:hover{color:rgba(0,0,0,.4)}.swagger-ui .hover-black-30:focus,.swagger-ui .hover-black-30:hover{color:rgba(0,0,0,.3)}.swagger-ui .hover-black-20:focus,.swagger-ui .hover-black-20:hover{color:rgba(0,0,0,.2)}.swagger-ui .hover-black-10:focus,.swagger-ui .hover-black-10:hover{color:rgba(0,0,0,.1)}.swagger-ui .hover-white-90:focus,.swagger-ui .hover-white-90:hover{color:hsla(0,0%,100%,.9)}.swagger-ui .hover-white-80:focus,.swagger-ui .hover-white-80:hover{color:hsla(0,0%,100%,.8)}.swagger-ui .hover-white-70:focus,.swagger-ui .hover-white-70:hover{color:hsla(0,0%,100%,.7)}.swagger-ui .hover-white-60:focus,.swagger-ui .hover-white-60:hover{color:hsla(0,0%,100%,.6)}.swagger-ui .hover-white-50:focus,.swagger-ui .hover-white-50:hover{color:hsla(0,0%,100%,.5)}.swagger-ui .hover-white-40:focus,.swagger-ui .hover-white-40:hover{color:hsla(0,0%,100%,.4)}.swagger-ui .hover-white-30:focus,.swagger-ui .hover-white-30:hover{color:hsla(0,0%,100%,.3)}.swagger-ui .hover-white-20:focus,.swagger-ui .hover-white-20:hover{color:hsla(0,0%,100%,.2)}.swagger-ui .hover-white-10:focus,.swagger-ui .hover-white-10:hover{color:hsla(0,0%,100%,.1)}.swagger-ui .hover-inherit:focus,.swagger-ui .hover-inherit:hover{color:inherit}.swagger-ui .hover-bg-black:focus,.swagger-ui .hover-bg-black:hover{background-color:#000}.swagger-ui .hover-bg-near-black:focus,.swagger-ui .hover-bg-near-black:hover{background-color:#111}.swagger-ui .hover-bg-dark-gray:focus,.swagger-ui .hover-bg-dark-gray:hover{background-color:#333}.swagger-ui .hover-bg-mid-gray:focus,.swagger-ui .hover-bg-mid-gray:hover{background-color:#555}.swagger-ui .hover-bg-gray:focus,.swagger-ui .hover-bg-gray:hover{background-color:#777}.swagger-ui .hover-bg-silver:focus,.swagger-ui .hover-bg-silver:hover{background-color:#999}.swagger-ui .hover-bg-light-silver:focus,.swagger-ui .hover-bg-light-silver:hover{background-color:#aaa}.swagger-ui .hover-bg-moon-gray:focus,.swagger-ui .hover-bg-moon-gray:hover{background-color:#ccc}.swagger-ui .hover-bg-light-gray:focus,.swagger-ui .hover-bg-light-gray:hover{background-color:#eee}.swagger-ui .hover-bg-near-white:focus,.swagger-ui .hover-bg-near-white:hover{background-color:#f4f4f4}.swagger-ui .hover-bg-white:focus,.swagger-ui .hover-bg-white:hover{background-color:#fff}.swagger-ui .hover-bg-transparent:focus,.swagger-ui .hover-bg-transparent:hover{background-color:transparent}.swagger-ui .hover-bg-black-90:focus,.swagger-ui .hover-bg-black-90:hover{background-color:rgba(0,0,0,.9)}.swagger-ui .hover-bg-black-80:focus,.swagger-ui .hover-bg-black-80:hover{background-color:rgba(0,0,0,.8)}.swagger-ui .hover-bg-black-70:focus,.swagger-ui .hover-bg-black-70:hover{background-color:rgba(0,0,0,.7)}.swagger-ui .hover-bg-black-60:focus,.swagger-ui .hover-bg-black-60:hover{background-color:rgba(0,0,0,.6)}.swagger-ui .hover-bg-black-50:focus,.swagger-ui .hover-bg-black-50:hover{background-color:rgba(0,0,0,.5)}.swagger-ui .hover-bg-black-40:focus,.swagger-ui .hover-bg-black-40:hover{background-color:rgba(0,0,0,.4)}.swagger-ui .hover-bg-black-30:focus,.swagger-ui .hover-bg-black-30:hover{background-color:rgba(0,0,0,.3)}.swagger-ui .hover-bg-black-20:focus,.swagger-ui .hover-bg-black-20:hover{background-color:rgba(0,0,0,.2)}.swagger-ui .hover-bg-black-10:focus,.swagger-ui .hover-bg-black-10:hover{background-color:rgba(0,0,0,.1)}.swagger-ui .hover-bg-white-90:focus,.swagger-ui .hover-bg-white-90:hover{background-color:hsla(0,0%,100%,.9)}.swagger-ui .hover-bg-white-80:focus,.swagger-ui .hover-bg-white-80:hover{background-color:hsla(0,0%,100%,.8)}.swagger-ui .hover-bg-white-70:focus,.swagger-ui .hover-bg-white-70:hover{background-color:hsla(0,0%,100%,.7)}.swagger-ui .hover-bg-white-60:focus,.swagger-ui .hover-bg-white-60:hover{background-color:hsla(0,0%,100%,.6)}.swagger-ui .hover-bg-white-50:focus,.swagger-ui .hover-bg-white-50:hover{background-color:hsla(0,0%,100%,.5)}.swagger-ui .hover-bg-white-40:focus,.swagger-ui .hover-bg-white-40:hover{background-color:hsla(0,0%,100%,.4)}.swagger-ui .hover-bg-white-30:focus,.swagger-ui .hover-bg-white-30:hover{background-color:hsla(0,0%,100%,.3)}.swagger-ui .hover-bg-white-20:focus,.swagger-ui .hover-bg-white-20:hover{background-color:hsla(0,0%,100%,.2)}.swagger-ui .hover-bg-white-10:focus,.swagger-ui .hover-bg-white-10:hover{background-color:hsla(0,0%,100%,.1)}.swagger-ui .hover-dark-red:focus,.swagger-ui .hover-dark-red:hover{color:#e7040f}.swagger-ui .hover-red:focus,.swagger-ui .hover-red:hover{color:#ff4136}.swagger-ui .hover-light-red:focus,.swagger-ui .hover-light-red:hover{color:#ff725c}.swagger-ui .hover-orange:focus,.swagger-ui .hover-orange:hover{color:#ff6300}.swagger-ui .hover-gold:focus,.swagger-ui .hover-gold:hover{color:#ffb700}.swagger-ui .hover-yellow:focus,.swagger-ui .hover-yellow:hover{color:gold}.swagger-ui .hover-light-yellow:focus,.swagger-ui .hover-light-yellow:hover{color:#fbf1a9}.swagger-ui .hover-purple:focus,.swagger-ui .hover-purple:hover{color:#5e2ca5}.swagger-ui .hover-light-purple:focus,.swagger-ui .hover-light-purple:hover{color:#a463f2}.swagger-ui .hover-dark-pink:focus,.swagger-ui .hover-dark-pink:hover{color:#d5008f}.swagger-ui .hover-hot-pink:focus,.swagger-ui .hover-hot-pink:hover{color:#ff41b4}.swagger-ui .hover-pink:focus,.swagger-ui .hover-pink:hover{color:#ff80cc}.swagger-ui .hover-light-pink:focus,.swagger-ui .hover-light-pink:hover{color:#ffa3d7}.swagger-ui .hover-dark-green:focus,.swagger-ui .hover-dark-green:hover{color:#137752}.swagger-ui .hover-green:focus,.swagger-ui .hover-green:hover{color:#19a974}.swagger-ui .hover-light-green:focus,.swagger-ui .hover-light-green:hover{color:#9eebcf}.swagger-ui .hover-navy:focus,.swagger-ui .hover-navy:hover{color:#001b44}.swagger-ui .hover-dark-blue:focus,.swagger-ui .hover-dark-blue:hover{color:#00449e}.swagger-ui .hover-blue:focus,.swagger-ui .hover-blue:hover{color:#357edd}.swagger-ui .hover-light-blue:focus,.swagger-ui .hover-light-blue:hover{color:#96ccff}.swagger-ui .hover-lightest-blue:focus,.swagger-ui .hover-lightest-blue:hover{color:#cdecff}.swagger-ui .hover-washed-blue:focus,.swagger-ui .hover-washed-blue:hover{color:#f6fffe}.swagger-ui .hover-washed-green:focus,.swagger-ui .hover-washed-green:hover{color:#e8fdf5}.swagger-ui .hover-washed-yellow:focus,.swagger-ui .hover-washed-yellow:hover{color:#fffceb}.swagger-ui .hover-washed-red:focus,.swagger-ui .hover-washed-red:hover{color:#ffdfdf}.swagger-ui .hover-bg-dark-red:focus,.swagger-ui .hover-bg-dark-red:hover{background-color:#e7040f}.swagger-ui .hover-bg-red:focus,.swagger-ui .hover-bg-red:hover{background-color:#ff4136}.swagger-ui .hover-bg-light-red:focus,.swagger-ui .hover-bg-light-red:hover{background-color:#ff725c}.swagger-ui .hover-bg-orange:focus,.swagger-ui .hover-bg-orange:hover{background-color:#ff6300}.swagger-ui .hover-bg-gold:focus,.swagger-ui .hover-bg-gold:hover{background-color:#ffb700}.swagger-ui .hover-bg-yellow:focus,.swagger-ui .hover-bg-yellow:hover{background-color:gold}.swagger-ui .hover-bg-light-yellow:focus,.swagger-ui .hover-bg-light-yellow:hover{background-color:#fbf1a9}.swagger-ui .hover-bg-purple:focus,.swagger-ui .hover-bg-purple:hover{background-color:#5e2ca5}.swagger-ui .hover-bg-light-purple:focus,.swagger-ui .hover-bg-light-purple:hover{background-color:#a463f2}.swagger-ui .hover-bg-dark-pink:focus,.swagger-ui .hover-bg-dark-pink:hover{background-color:#d5008f}.swagger-ui .hover-bg-hot-pink:focus,.swagger-ui .hover-bg-hot-pink:hover{background-color:#ff41b4}.swagger-ui .hover-bg-pink:focus,.swagger-ui .hover-bg-pink:hover{background-color:#ff80cc}.swagger-ui .hover-bg-light-pink:focus,.swagger-ui .hover-bg-light-pink:hover{background-color:#ffa3d7}.swagger-ui .hover-bg-dark-green:focus,.swagger-ui .hover-bg-dark-green:hover{background-color:#137752}.swagger-ui .hover-bg-green:focus,.swagger-ui .hover-bg-green:hover{background-color:#19a974}.swagger-ui .hover-bg-light-green:focus,.swagger-ui .hover-bg-light-green:hover{background-color:#9eebcf}.swagger-ui .hover-bg-navy:focus,.swagger-ui .hover-bg-navy:hover{background-color:#001b44}.swagger-ui .hover-bg-dark-blue:focus,.swagger-ui .hover-bg-dark-blue:hover{background-color:#00449e}.swagger-ui .hover-bg-blue:focus,.swagger-ui .hover-bg-blue:hover{background-color:#357edd}.swagger-ui .hover-bg-light-blue:focus,.swagger-ui .hover-bg-light-blue:hover{background-color:#96ccff}.swagger-ui .hover-bg-lightest-blue:focus,.swagger-ui .hover-bg-lightest-blue:hover{background-color:#cdecff}.swagger-ui .hover-bg-washed-blue:focus,.swagger-ui .hover-bg-washed-blue:hover{background-color:#f6fffe}.swagger-ui .hover-bg-washed-green:focus,.swagger-ui .hover-bg-washed-green:hover{background-color:#e8fdf5}.swagger-ui .hover-bg-washed-yellow:focus,.swagger-ui .hover-bg-washed-yellow:hover{background-color:#fffceb}.swagger-ui .hover-bg-washed-red:focus,.swagger-ui .hover-bg-washed-red:hover{background-color:#ffdfdf}.swagger-ui .hover-bg-inherit:focus,.swagger-ui .hover-bg-inherit:hover{background-color:inherit}.swagger-ui .pa0{padding:0}.swagger-ui .pa1{padding:.25rem}.swagger-ui .pa2{padding:.5rem}.swagger-ui .pa3{padding:1rem}.swagger-ui .pa4{padding:2rem}.swagger-ui .pa5{padding:4rem}.swagger-ui .pa6{padding:8rem}.swagger-ui .pa7{padding:16rem}.swagger-ui .pl0{padding-left:0}.swagger-ui .pl1{padding-left:.25rem}.swagger-ui .pl2{padding-left:.5rem}.swagger-ui .pl3{padding-left:1rem}.swagger-ui .pl4{padding-left:2rem}.swagger-ui .pl5{padding-left:4rem}.swagger-ui .pl6{padding-left:8rem}.swagger-ui .pl7{padding-left:16rem}.swagger-ui .pr0{padding-right:0}.swagger-ui .pr1{padding-right:.25rem}.swagger-ui .pr2{padding-right:.5rem}.swagger-ui .pr3{padding-right:1rem}.swagger-ui .pr4{padding-right:2rem}.swagger-ui .pr5{padding-right:4rem}.swagger-ui .pr6{padding-right:8rem}.swagger-ui .pr7{padding-right:16rem}.swagger-ui .pb0{padding-bottom:0}.swagger-ui .pb1{padding-bottom:.25rem}.swagger-ui .pb2{padding-bottom:.5rem}.swagger-ui .pb3{padding-bottom:1rem}.swagger-ui .pb4{padding-bottom:2rem}.swagger-ui .pb5{padding-bottom:4rem}.swagger-ui .pb6{padding-bottom:8rem}.swagger-ui .pb7{padding-bottom:16rem}.swagger-ui .pt0{padding-top:0}.swagger-ui .pt1{padding-top:.25rem}.swagger-ui .pt2{padding-top:.5rem}.swagger-ui .pt3{padding-top:1rem}.swagger-ui .pt4{padding-top:2rem}.swagger-ui .pt5{padding-top:4rem}.swagger-ui .pt6{padding-top:8rem}.swagger-ui .pt7{padding-top:16rem}.swagger-ui .pv0{padding-bottom:0;padding-top:0}.swagger-ui .pv1{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0{padding-left:0;padding-right:0}.swagger-ui .ph1{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0{margin:0}.swagger-ui .ma1{margin:.25rem}.swagger-ui .ma2{margin:.5rem}.swagger-ui .ma3{margin:1rem}.swagger-ui .ma4{margin:2rem}.swagger-ui .ma5{margin:4rem}.swagger-ui .ma6{margin:8rem}.swagger-ui .ma7{margin:16rem}.swagger-ui .ml0{margin-left:0}.swagger-ui .ml1{margin-left:.25rem}.swagger-ui .ml2{margin-left:.5rem}.swagger-ui .ml3{margin-left:1rem}.swagger-ui .ml4{margin-left:2rem}.swagger-ui .ml5{margin-left:4rem}.swagger-ui .ml6{margin-left:8rem}.swagger-ui .ml7{margin-left:16rem}.swagger-ui .mr0{margin-right:0}.swagger-ui .mr1{margin-right:.25rem}.swagger-ui .mr2{margin-right:.5rem}.swagger-ui .mr3{margin-right:1rem}.swagger-ui .mr4{margin-right:2rem}.swagger-ui .mr5{margin-right:4rem}.swagger-ui .mr6{margin-right:8rem}.swagger-ui .mr7{margin-right:16rem}.swagger-ui .mb0{margin-bottom:0}.swagger-ui .mb1{margin-bottom:.25rem}.swagger-ui .mb2{margin-bottom:.5rem}.swagger-ui .mb3{margin-bottom:1rem}.swagger-ui .mb4{margin-bottom:2rem}.swagger-ui .mb5{margin-bottom:4rem}.swagger-ui .mb6{margin-bottom:8rem}.swagger-ui .mb7{margin-bottom:16rem}.swagger-ui .mt0{margin-top:0}.swagger-ui .mt1{margin-top:.25rem}.swagger-ui .mt2{margin-top:.5rem}.swagger-ui .mt3{margin-top:1rem}.swagger-ui .mt4{margin-top:2rem}.swagger-ui .mt5{margin-top:4rem}.swagger-ui .mt6{margin-top:8rem}.swagger-ui .mt7{margin-top:16rem}.swagger-ui .mv0{margin-bottom:0;margin-top:0}.swagger-ui .mv1{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0{margin-left:0;margin-right:0}.swagger-ui .mh1{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7{margin-left:16rem;margin-right:16rem}@media screen and (min-width:30em){.swagger-ui .pa0-ns{padding:0}.swagger-ui .pa1-ns{padding:.25rem}.swagger-ui .pa2-ns{padding:.5rem}.swagger-ui .pa3-ns{padding:1rem}.swagger-ui .pa4-ns{padding:2rem}.swagger-ui .pa5-ns{padding:4rem}.swagger-ui .pa6-ns{padding:8rem}.swagger-ui .pa7-ns{padding:16rem}.swagger-ui .pl0-ns{padding-left:0}.swagger-ui .pl1-ns{padding-left:.25rem}.swagger-ui .pl2-ns{padding-left:.5rem}.swagger-ui .pl3-ns{padding-left:1rem}.swagger-ui .pl4-ns{padding-left:2rem}.swagger-ui .pl5-ns{padding-left:4rem}.swagger-ui .pl6-ns{padding-left:8rem}.swagger-ui .pl7-ns{padding-left:16rem}.swagger-ui .pr0-ns{padding-right:0}.swagger-ui .pr1-ns{padding-right:.25rem}.swagger-ui .pr2-ns{padding-right:.5rem}.swagger-ui .pr3-ns{padding-right:1rem}.swagger-ui .pr4-ns{padding-right:2rem}.swagger-ui .pr5-ns{padding-right:4rem}.swagger-ui .pr6-ns{padding-right:8rem}.swagger-ui .pr7-ns{padding-right:16rem}.swagger-ui .pb0-ns{padding-bottom:0}.swagger-ui .pb1-ns{padding-bottom:.25rem}.swagger-ui .pb2-ns{padding-bottom:.5rem}.swagger-ui .pb3-ns{padding-bottom:1rem}.swagger-ui .pb4-ns{padding-bottom:2rem}.swagger-ui .pb5-ns{padding-bottom:4rem}.swagger-ui .pb6-ns{padding-bottom:8rem}.swagger-ui .pb7-ns{padding-bottom:16rem}.swagger-ui .pt0-ns{padding-top:0}.swagger-ui .pt1-ns{padding-top:.25rem}.swagger-ui .pt2-ns{padding-top:.5rem}.swagger-ui .pt3-ns{padding-top:1rem}.swagger-ui .pt4-ns{padding-top:2rem}.swagger-ui .pt5-ns{padding-top:4rem}.swagger-ui .pt6-ns{padding-top:8rem}.swagger-ui .pt7-ns{padding-top:16rem}.swagger-ui .pv0-ns{padding-bottom:0;padding-top:0}.swagger-ui .pv1-ns{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-ns{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-ns{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-ns{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-ns{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-ns{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-ns{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-ns{padding-left:0;padding-right:0}.swagger-ui .ph1-ns{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-ns{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-ns{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-ns{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-ns{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-ns{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-ns{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-ns{margin:0}.swagger-ui .ma1-ns{margin:.25rem}.swagger-ui .ma2-ns{margin:.5rem}.swagger-ui .ma3-ns{margin:1rem}.swagger-ui .ma4-ns{margin:2rem}.swagger-ui .ma5-ns{margin:4rem}.swagger-ui .ma6-ns{margin:8rem}.swagger-ui .ma7-ns{margin:16rem}.swagger-ui .ml0-ns{margin-left:0}.swagger-ui .ml1-ns{margin-left:.25rem}.swagger-ui .ml2-ns{margin-left:.5rem}.swagger-ui .ml3-ns{margin-left:1rem}.swagger-ui .ml4-ns{margin-left:2rem}.swagger-ui .ml5-ns{margin-left:4rem}.swagger-ui .ml6-ns{margin-left:8rem}.swagger-ui .ml7-ns{margin-left:16rem}.swagger-ui .mr0-ns{margin-right:0}.swagger-ui .mr1-ns{margin-right:.25rem}.swagger-ui .mr2-ns{margin-right:.5rem}.swagger-ui .mr3-ns{margin-right:1rem}.swagger-ui .mr4-ns{margin-right:2rem}.swagger-ui .mr5-ns{margin-right:4rem}.swagger-ui .mr6-ns{margin-right:8rem}.swagger-ui .mr7-ns{margin-right:16rem}.swagger-ui .mb0-ns{margin-bottom:0}.swagger-ui .mb1-ns{margin-bottom:.25rem}.swagger-ui .mb2-ns{margin-bottom:.5rem}.swagger-ui .mb3-ns{margin-bottom:1rem}.swagger-ui .mb4-ns{margin-bottom:2rem}.swagger-ui .mb5-ns{margin-bottom:4rem}.swagger-ui .mb6-ns{margin-bottom:8rem}.swagger-ui .mb7-ns{margin-bottom:16rem}.swagger-ui .mt0-ns{margin-top:0}.swagger-ui .mt1-ns{margin-top:.25rem}.swagger-ui .mt2-ns{margin-top:.5rem}.swagger-ui .mt3-ns{margin-top:1rem}.swagger-ui .mt4-ns{margin-top:2rem}.swagger-ui .mt5-ns{margin-top:4rem}.swagger-ui .mt6-ns{margin-top:8rem}.swagger-ui .mt7-ns{margin-top:16rem}.swagger-ui .mv0-ns{margin-bottom:0;margin-top:0}.swagger-ui .mv1-ns{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-ns{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-ns{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-ns{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-ns{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-ns{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-ns{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-ns{margin-left:0;margin-right:0}.swagger-ui .mh1-ns{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-ns{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-ns{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-ns{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-ns{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-ns{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-ns{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .pa0-m{padding:0}.swagger-ui .pa1-m{padding:.25rem}.swagger-ui .pa2-m{padding:.5rem}.swagger-ui .pa3-m{padding:1rem}.swagger-ui .pa4-m{padding:2rem}.swagger-ui .pa5-m{padding:4rem}.swagger-ui .pa6-m{padding:8rem}.swagger-ui .pa7-m{padding:16rem}.swagger-ui .pl0-m{padding-left:0}.swagger-ui .pl1-m{padding-left:.25rem}.swagger-ui .pl2-m{padding-left:.5rem}.swagger-ui .pl3-m{padding-left:1rem}.swagger-ui .pl4-m{padding-left:2rem}.swagger-ui .pl5-m{padding-left:4rem}.swagger-ui .pl6-m{padding-left:8rem}.swagger-ui .pl7-m{padding-left:16rem}.swagger-ui .pr0-m{padding-right:0}.swagger-ui .pr1-m{padding-right:.25rem}.swagger-ui .pr2-m{padding-right:.5rem}.swagger-ui .pr3-m{padding-right:1rem}.swagger-ui .pr4-m{padding-right:2rem}.swagger-ui .pr5-m{padding-right:4rem}.swagger-ui .pr6-m{padding-right:8rem}.swagger-ui .pr7-m{padding-right:16rem}.swagger-ui .pb0-m{padding-bottom:0}.swagger-ui .pb1-m{padding-bottom:.25rem}.swagger-ui .pb2-m{padding-bottom:.5rem}.swagger-ui .pb3-m{padding-bottom:1rem}.swagger-ui .pb4-m{padding-bottom:2rem}.swagger-ui .pb5-m{padding-bottom:4rem}.swagger-ui .pb6-m{padding-bottom:8rem}.swagger-ui .pb7-m{padding-bottom:16rem}.swagger-ui .pt0-m{padding-top:0}.swagger-ui .pt1-m{padding-top:.25rem}.swagger-ui .pt2-m{padding-top:.5rem}.swagger-ui .pt3-m{padding-top:1rem}.swagger-ui .pt4-m{padding-top:2rem}.swagger-ui .pt5-m{padding-top:4rem}.swagger-ui .pt6-m{padding-top:8rem}.swagger-ui .pt7-m{padding-top:16rem}.swagger-ui .pv0-m{padding-bottom:0;padding-top:0}.swagger-ui .pv1-m{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-m{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-m{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-m{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-m{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-m{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-m{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-m{padding-left:0;padding-right:0}.swagger-ui .ph1-m{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-m{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-m{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-m{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-m{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-m{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-m{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-m{margin:0}.swagger-ui .ma1-m{margin:.25rem}.swagger-ui .ma2-m{margin:.5rem}.swagger-ui .ma3-m{margin:1rem}.swagger-ui .ma4-m{margin:2rem}.swagger-ui .ma5-m{margin:4rem}.swagger-ui .ma6-m{margin:8rem}.swagger-ui .ma7-m{margin:16rem}.swagger-ui .ml0-m{margin-left:0}.swagger-ui .ml1-m{margin-left:.25rem}.swagger-ui .ml2-m{margin-left:.5rem}.swagger-ui .ml3-m{margin-left:1rem}.swagger-ui .ml4-m{margin-left:2rem}.swagger-ui .ml5-m{margin-left:4rem}.swagger-ui .ml6-m{margin-left:8rem}.swagger-ui .ml7-m{margin-left:16rem}.swagger-ui .mr0-m{margin-right:0}.swagger-ui .mr1-m{margin-right:.25rem}.swagger-ui .mr2-m{margin-right:.5rem}.swagger-ui .mr3-m{margin-right:1rem}.swagger-ui .mr4-m{margin-right:2rem}.swagger-ui .mr5-m{margin-right:4rem}.swagger-ui .mr6-m{margin-right:8rem}.swagger-ui .mr7-m{margin-right:16rem}.swagger-ui .mb0-m{margin-bottom:0}.swagger-ui .mb1-m{margin-bottom:.25rem}.swagger-ui .mb2-m{margin-bottom:.5rem}.swagger-ui .mb3-m{margin-bottom:1rem}.swagger-ui .mb4-m{margin-bottom:2rem}.swagger-ui .mb5-m{margin-bottom:4rem}.swagger-ui .mb6-m{margin-bottom:8rem}.swagger-ui .mb7-m{margin-bottom:16rem}.swagger-ui .mt0-m{margin-top:0}.swagger-ui .mt1-m{margin-top:.25rem}.swagger-ui .mt2-m{margin-top:.5rem}.swagger-ui .mt3-m{margin-top:1rem}.swagger-ui .mt4-m{margin-top:2rem}.swagger-ui .mt5-m{margin-top:4rem}.swagger-ui .mt6-m{margin-top:8rem}.swagger-ui .mt7-m{margin-top:16rem}.swagger-ui .mv0-m{margin-bottom:0;margin-top:0}.swagger-ui .mv1-m{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-m{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-m{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-m{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-m{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-m{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-m{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-m{margin-left:0;margin-right:0}.swagger-ui .mh1-m{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-m{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-m{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-m{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-m{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-m{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-m{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:60em){.swagger-ui .pa0-l{padding:0}.swagger-ui .pa1-l{padding:.25rem}.swagger-ui .pa2-l{padding:.5rem}.swagger-ui .pa3-l{padding:1rem}.swagger-ui .pa4-l{padding:2rem}.swagger-ui .pa5-l{padding:4rem}.swagger-ui .pa6-l{padding:8rem}.swagger-ui .pa7-l{padding:16rem}.swagger-ui .pl0-l{padding-left:0}.swagger-ui .pl1-l{padding-left:.25rem}.swagger-ui .pl2-l{padding-left:.5rem}.swagger-ui .pl3-l{padding-left:1rem}.swagger-ui .pl4-l{padding-left:2rem}.swagger-ui .pl5-l{padding-left:4rem}.swagger-ui .pl6-l{padding-left:8rem}.swagger-ui .pl7-l{padding-left:16rem}.swagger-ui .pr0-l{padding-right:0}.swagger-ui .pr1-l{padding-right:.25rem}.swagger-ui .pr2-l{padding-right:.5rem}.swagger-ui .pr3-l{padding-right:1rem}.swagger-ui .pr4-l{padding-right:2rem}.swagger-ui .pr5-l{padding-right:4rem}.swagger-ui .pr6-l{padding-right:8rem}.swagger-ui .pr7-l{padding-right:16rem}.swagger-ui .pb0-l{padding-bottom:0}.swagger-ui .pb1-l{padding-bottom:.25rem}.swagger-ui .pb2-l{padding-bottom:.5rem}.swagger-ui .pb3-l{padding-bottom:1rem}.swagger-ui .pb4-l{padding-bottom:2rem}.swagger-ui .pb5-l{padding-bottom:4rem}.swagger-ui .pb6-l{padding-bottom:8rem}.swagger-ui .pb7-l{padding-bottom:16rem}.swagger-ui .pt0-l{padding-top:0}.swagger-ui .pt1-l{padding-top:.25rem}.swagger-ui .pt2-l{padding-top:.5rem}.swagger-ui .pt3-l{padding-top:1rem}.swagger-ui .pt4-l{padding-top:2rem}.swagger-ui .pt5-l{padding-top:4rem}.swagger-ui .pt6-l{padding-top:8rem}.swagger-ui .pt7-l{padding-top:16rem}.swagger-ui .pv0-l{padding-bottom:0;padding-top:0}.swagger-ui .pv1-l{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-l{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-l{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-l{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-l{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-l{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-l{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-l{padding-left:0;padding-right:0}.swagger-ui .ph1-l{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-l{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-l{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-l{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-l{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-l{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-l{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-l{margin:0}.swagger-ui .ma1-l{margin:.25rem}.swagger-ui .ma2-l{margin:.5rem}.swagger-ui .ma3-l{margin:1rem}.swagger-ui .ma4-l{margin:2rem}.swagger-ui .ma5-l{margin:4rem}.swagger-ui .ma6-l{margin:8rem}.swagger-ui .ma7-l{margin:16rem}.swagger-ui .ml0-l{margin-left:0}.swagger-ui .ml1-l{margin-left:.25rem}.swagger-ui .ml2-l{margin-left:.5rem}.swagger-ui .ml3-l{margin-left:1rem}.swagger-ui .ml4-l{margin-left:2rem}.swagger-ui .ml5-l{margin-left:4rem}.swagger-ui .ml6-l{margin-left:8rem}.swagger-ui .ml7-l{margin-left:16rem}.swagger-ui .mr0-l{margin-right:0}.swagger-ui .mr1-l{margin-right:.25rem}.swagger-ui .mr2-l{margin-right:.5rem}.swagger-ui .mr3-l{margin-right:1rem}.swagger-ui .mr4-l{margin-right:2rem}.swagger-ui .mr5-l{margin-right:4rem}.swagger-ui .mr6-l{margin-right:8rem}.swagger-ui .mr7-l{margin-right:16rem}.swagger-ui .mb0-l{margin-bottom:0}.swagger-ui .mb1-l{margin-bottom:.25rem}.swagger-ui .mb2-l{margin-bottom:.5rem}.swagger-ui .mb3-l{margin-bottom:1rem}.swagger-ui .mb4-l{margin-bottom:2rem}.swagger-ui .mb5-l{margin-bottom:4rem}.swagger-ui .mb6-l{margin-bottom:8rem}.swagger-ui .mb7-l{margin-bottom:16rem}.swagger-ui .mt0-l{margin-top:0}.swagger-ui .mt1-l{margin-top:.25rem}.swagger-ui .mt2-l{margin-top:.5rem}.swagger-ui .mt3-l{margin-top:1rem}.swagger-ui .mt4-l{margin-top:2rem}.swagger-ui .mt5-l{margin-top:4rem}.swagger-ui .mt6-l{margin-top:8rem}.swagger-ui .mt7-l{margin-top:16rem}.swagger-ui .mv0-l{margin-bottom:0;margin-top:0}.swagger-ui .mv1-l{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-l{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-l{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-l{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-l{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-l{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-l{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-l{margin-left:0;margin-right:0}.swagger-ui .mh1-l{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-l{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-l{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-l{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-l{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-l{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-l{margin-left:16rem;margin-right:16rem}}.swagger-ui .na1{margin:-.25rem}.swagger-ui .na2{margin:-.5rem}.swagger-ui .na3{margin:-1rem}.swagger-ui .na4{margin:-2rem}.swagger-ui .na5{margin:-4rem}.swagger-ui .na6{margin:-8rem}.swagger-ui .na7{margin:-16rem}.swagger-ui .nl1{margin-left:-.25rem}.swagger-ui .nl2{margin-left:-.5rem}.swagger-ui .nl3{margin-left:-1rem}.swagger-ui .nl4{margin-left:-2rem}.swagger-ui .nl5{margin-left:-4rem}.swagger-ui .nl6{margin-left:-8rem}.swagger-ui .nl7{margin-left:-16rem}.swagger-ui .nr1{margin-right:-.25rem}.swagger-ui .nr2{margin-right:-.5rem}.swagger-ui .nr3{margin-right:-1rem}.swagger-ui .nr4{margin-right:-2rem}.swagger-ui .nr5{margin-right:-4rem}.swagger-ui .nr6{margin-right:-8rem}.swagger-ui .nr7{margin-right:-16rem}.swagger-ui .nb1{margin-bottom:-.25rem}.swagger-ui .nb2{margin-bottom:-.5rem}.swagger-ui .nb3{margin-bottom:-1rem}.swagger-ui .nb4{margin-bottom:-2rem}.swagger-ui .nb5{margin-bottom:-4rem}.swagger-ui .nb6{margin-bottom:-8rem}.swagger-ui .nb7{margin-bottom:-16rem}.swagger-ui .nt1{margin-top:-.25rem}.swagger-ui .nt2{margin-top:-.5rem}.swagger-ui .nt3{margin-top:-1rem}.swagger-ui .nt4{margin-top:-2rem}.swagger-ui .nt5{margin-top:-4rem}.swagger-ui .nt6{margin-top:-8rem}.swagger-ui .nt7{margin-top:-16rem}@media screen and (min-width:30em){.swagger-ui .na1-ns{margin:-.25rem}.swagger-ui .na2-ns{margin:-.5rem}.swagger-ui .na3-ns{margin:-1rem}.swagger-ui .na4-ns{margin:-2rem}.swagger-ui .na5-ns{margin:-4rem}.swagger-ui .na6-ns{margin:-8rem}.swagger-ui .na7-ns{margin:-16rem}.swagger-ui .nl1-ns{margin-left:-.25rem}.swagger-ui .nl2-ns{margin-left:-.5rem}.swagger-ui .nl3-ns{margin-left:-1rem}.swagger-ui .nl4-ns{margin-left:-2rem}.swagger-ui .nl5-ns{margin-left:-4rem}.swagger-ui .nl6-ns{margin-left:-8rem}.swagger-ui .nl7-ns{margin-left:-16rem}.swagger-ui .nr1-ns{margin-right:-.25rem}.swagger-ui .nr2-ns{margin-right:-.5rem}.swagger-ui .nr3-ns{margin-right:-1rem}.swagger-ui .nr4-ns{margin-right:-2rem}.swagger-ui .nr5-ns{margin-right:-4rem}.swagger-ui .nr6-ns{margin-right:-8rem}.swagger-ui .nr7-ns{margin-right:-16rem}.swagger-ui .nb1-ns{margin-bottom:-.25rem}.swagger-ui .nb2-ns{margin-bottom:-.5rem}.swagger-ui .nb3-ns{margin-bottom:-1rem}.swagger-ui .nb4-ns{margin-bottom:-2rem}.swagger-ui .nb5-ns{margin-bottom:-4rem}.swagger-ui .nb6-ns{margin-bottom:-8rem}.swagger-ui .nb7-ns{margin-bottom:-16rem}.swagger-ui .nt1-ns{margin-top:-.25rem}.swagger-ui .nt2-ns{margin-top:-.5rem}.swagger-ui .nt3-ns{margin-top:-1rem}.swagger-ui .nt4-ns{margin-top:-2rem}.swagger-ui .nt5-ns{margin-top:-4rem}.swagger-ui .nt6-ns{margin-top:-8rem}.swagger-ui .nt7-ns{margin-top:-16rem}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .na1-m{margin:-.25rem}.swagger-ui .na2-m{margin:-.5rem}.swagger-ui .na3-m{margin:-1rem}.swagger-ui .na4-m{margin:-2rem}.swagger-ui .na5-m{margin:-4rem}.swagger-ui .na6-m{margin:-8rem}.swagger-ui .na7-m{margin:-16rem}.swagger-ui .nl1-m{margin-left:-.25rem}.swagger-ui .nl2-m{margin-left:-.5rem}.swagger-ui .nl3-m{margin-left:-1rem}.swagger-ui .nl4-m{margin-left:-2rem}.swagger-ui .nl5-m{margin-left:-4rem}.swagger-ui .nl6-m{margin-left:-8rem}.swagger-ui .nl7-m{margin-left:-16rem}.swagger-ui .nr1-m{margin-right:-.25rem}.swagger-ui .nr2-m{margin-right:-.5rem}.swagger-ui .nr3-m{margin-right:-1rem}.swagger-ui .nr4-m{margin-right:-2rem}.swagger-ui .nr5-m{margin-right:-4rem}.swagger-ui .nr6-m{margin-right:-8rem}.swagger-ui .nr7-m{margin-right:-16rem}.swagger-ui .nb1-m{margin-bottom:-.25rem}.swagger-ui .nb2-m{margin-bottom:-.5rem}.swagger-ui .nb3-m{margin-bottom:-1rem}.swagger-ui .nb4-m{margin-bottom:-2rem}.swagger-ui .nb5-m{margin-bottom:-4rem}.swagger-ui .nb6-m{margin-bottom:-8rem}.swagger-ui .nb7-m{margin-bottom:-16rem}.swagger-ui .nt1-m{margin-top:-.25rem}.swagger-ui .nt2-m{margin-top:-.5rem}.swagger-ui .nt3-m{margin-top:-1rem}.swagger-ui .nt4-m{margin-top:-2rem}.swagger-ui .nt5-m{margin-top:-4rem}.swagger-ui .nt6-m{margin-top:-8rem}.swagger-ui .nt7-m{margin-top:-16rem}}@media screen and (min-width:60em){.swagger-ui .na1-l{margin:-.25rem}.swagger-ui .na2-l{margin:-.5rem}.swagger-ui .na3-l{margin:-1rem}.swagger-ui .na4-l{margin:-2rem}.swagger-ui .na5-l{margin:-4rem}.swagger-ui .na6-l{margin:-8rem}.swagger-ui .na7-l{margin:-16rem}.swagger-ui .nl1-l{margin-left:-.25rem}.swagger-ui .nl2-l{margin-left:-.5rem}.swagger-ui .nl3-l{margin-left:-1rem}.swagger-ui .nl4-l{margin-left:-2rem}.swagger-ui .nl5-l{margin-left:-4rem}.swagger-ui .nl6-l{margin-left:-8rem}.swagger-ui .nl7-l{margin-left:-16rem}.swagger-ui .nr1-l{margin-right:-.25rem}.swagger-ui .nr2-l{margin-right:-.5rem}.swagger-ui .nr3-l{margin-right:-1rem}.swagger-ui .nr4-l{margin-right:-2rem}.swagger-ui .nr5-l{margin-right:-4rem}.swagger-ui .nr6-l{margin-right:-8rem}.swagger-ui .nr7-l{margin-right:-16rem}.swagger-ui .nb1-l{margin-bottom:-.25rem}.swagger-ui .nb2-l{margin-bottom:-.5rem}.swagger-ui .nb3-l{margin-bottom:-1rem}.swagger-ui .nb4-l{margin-bottom:-2rem}.swagger-ui .nb5-l{margin-bottom:-4rem}.swagger-ui .nb6-l{margin-bottom:-8rem}.swagger-ui .nb7-l{margin-bottom:-16rem}.swagger-ui .nt1-l{margin-top:-.25rem}.swagger-ui .nt2-l{margin-top:-.5rem}.swagger-ui .nt3-l{margin-top:-1rem}.swagger-ui .nt4-l{margin-top:-2rem}.swagger-ui .nt5-l{margin-top:-4rem}.swagger-ui .nt6-l{margin-top:-8rem}.swagger-ui .nt7-l{margin-top:-16rem}}.swagger-ui .collapse{border-collapse:collapse;border-spacing:0}.swagger-ui .striped--light-silver:nth-child(odd){background-color:#aaa}.swagger-ui .striped--moon-gray:nth-child(odd){background-color:#ccc}.swagger-ui .striped--light-gray:nth-child(odd){background-color:#eee}.swagger-ui .striped--near-white:nth-child(odd){background-color:#f4f4f4}.swagger-ui .stripe-light:nth-child(odd){background-color:hsla(0,0%,100%,.1)}.swagger-ui .stripe-dark:nth-child(odd){background-color:rgba(0,0,0,.1)}.swagger-ui .strike{text-decoration:line-through}.swagger-ui .underline{text-decoration:underline}.swagger-ui .no-underline{text-decoration:none}@media screen and (min-width:30em){.swagger-ui .strike-ns{text-decoration:line-through}.swagger-ui .underline-ns{text-decoration:underline}.swagger-ui .no-underline-ns{text-decoration:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .strike-m{text-decoration:line-through}.swagger-ui .underline-m{text-decoration:underline}.swagger-ui .no-underline-m{text-decoration:none}}@media screen and (min-width:60em){.swagger-ui .strike-l{text-decoration:line-through}.swagger-ui .underline-l{text-decoration:underline}.swagger-ui .no-underline-l{text-decoration:none}}.swagger-ui .tl{text-align:left}.swagger-ui .tr{text-align:right}.swagger-ui .tc{text-align:center}.swagger-ui .tj{text-align:justify}@media screen and (min-width:30em){.swagger-ui .tl-ns{text-align:left}.swagger-ui .tr-ns{text-align:right}.swagger-ui .tc-ns{text-align:center}.swagger-ui .tj-ns{text-align:justify}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .tl-m{text-align:left}.swagger-ui .tr-m{text-align:right}.swagger-ui .tc-m{text-align:center}.swagger-ui .tj-m{text-align:justify}}@media screen and (min-width:60em){.swagger-ui .tl-l{text-align:left}.swagger-ui .tr-l{text-align:right}.swagger-ui .tc-l{text-align:center}.swagger-ui .tj-l{text-align:justify}}.swagger-ui .ttc{text-transform:capitalize}.swagger-ui .ttl{text-transform:lowercase}.swagger-ui .ttu{text-transform:uppercase}.swagger-ui .ttn{text-transform:none}@media screen and (min-width:30em){.swagger-ui .ttc-ns{text-transform:capitalize}.swagger-ui .ttl-ns{text-transform:lowercase}.swagger-ui .ttu-ns{text-transform:uppercase}.swagger-ui .ttn-ns{text-transform:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .ttc-m{text-transform:capitalize}.swagger-ui .ttl-m{text-transform:lowercase}.swagger-ui .ttu-m{text-transform:uppercase}.swagger-ui .ttn-m{text-transform:none}}@media screen and (min-width:60em){.swagger-ui .ttc-l{text-transform:capitalize}.swagger-ui .ttl-l{text-transform:lowercase}.swagger-ui .ttu-l{text-transform:uppercase}.swagger-ui .ttn-l{text-transform:none}}.swagger-ui .f-6,.swagger-ui .f-headline{font-size:6rem}.swagger-ui .f-5,.swagger-ui .f-subheadline{font-size:5rem}.swagger-ui .f1{font-size:3rem}.swagger-ui .f2{font-size:2.25rem}.swagger-ui .f3{font-size:1.5rem}.swagger-ui .f4{font-size:1.25rem}.swagger-ui .f5{font-size:1rem}.swagger-ui .f6{font-size:.875rem}.swagger-ui .f7{font-size:.75rem}@media screen and (min-width:30em){.swagger-ui .f-6-ns,.swagger-ui .f-headline-ns{font-size:6rem}.swagger-ui .f-5-ns,.swagger-ui .f-subheadline-ns{font-size:5rem}.swagger-ui .f1-ns{font-size:3rem}.swagger-ui .f2-ns{font-size:2.25rem}.swagger-ui .f3-ns{font-size:1.5rem}.swagger-ui .f4-ns{font-size:1.25rem}.swagger-ui .f5-ns{font-size:1rem}.swagger-ui .f6-ns{font-size:.875rem}.swagger-ui .f7-ns{font-size:.75rem}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .f-6-m,.swagger-ui .f-headline-m{font-size:6rem}.swagger-ui .f-5-m,.swagger-ui .f-subheadline-m{font-size:5rem}.swagger-ui .f1-m{font-size:3rem}.swagger-ui .f2-m{font-size:2.25rem}.swagger-ui .f3-m{font-size:1.5rem}.swagger-ui .f4-m{font-size:1.25rem}.swagger-ui .f5-m{font-size:1rem}.swagger-ui .f6-m{font-size:.875rem}.swagger-ui .f7-m{font-size:.75rem}}@media screen and (min-width:60em){.swagger-ui .f-6-l,.swagger-ui .f-headline-l{font-size:6rem}.swagger-ui .f-5-l,.swagger-ui .f-subheadline-l{font-size:5rem}.swagger-ui .f1-l{font-size:3rem}.swagger-ui .f2-l{font-size:2.25rem}.swagger-ui .f3-l{font-size:1.5rem}.swagger-ui .f4-l{font-size:1.25rem}.swagger-ui .f5-l{font-size:1rem}.swagger-ui .f6-l{font-size:.875rem}.swagger-ui .f7-l{font-size:.75rem}}.swagger-ui .measure{max-width:30em}.swagger-ui .measure-wide{max-width:34em}.swagger-ui .measure-narrow{max-width:20em}.swagger-ui .indent{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media screen and (min-width:30em){.swagger-ui .measure-ns{max-width:30em}.swagger-ui .measure-wide-ns{max-width:34em}.swagger-ui .measure-narrow-ns{max-width:20em}.swagger-ui .indent-ns{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-ns{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-ns{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .measure-m{max-width:30em}.swagger-ui .measure-wide-m{max-width:34em}.swagger-ui .measure-narrow-m{max-width:20em}.swagger-ui .indent-m{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-m{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-m{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:60em){.swagger-ui .measure-l{max-width:30em}.swagger-ui .measure-wide-l{max-width:34em}.swagger-ui .measure-narrow-l{max-width:20em}.swagger-ui .indent-l{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-l{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.swagger-ui .overflow-container{overflow-y:scroll}.swagger-ui .center{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto{margin-right:auto}.swagger-ui .ml-auto{margin-left:auto}@media screen and (min-width:30em){.swagger-ui .center-ns{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-ns{margin-right:auto}.swagger-ui .ml-auto-ns{margin-left:auto}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .center-m{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-m{margin-right:auto}.swagger-ui .ml-auto-m{margin-left:auto}}@media screen and (min-width:60em){.swagger-ui .center-l{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-l{margin-right:auto}.swagger-ui .ml-auto-l{margin-left:auto}}.swagger-ui .clip{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}@media screen and (min-width:30em){.swagger-ui .clip-ns{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .clip-m{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}}@media screen and (min-width:60em){.swagger-ui .clip-l{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}}.swagger-ui .ws-normal{white-space:normal}.swagger-ui .nowrap{white-space:nowrap}.swagger-ui .pre{white-space:pre}@media screen and (min-width:30em){.swagger-ui .ws-normal-ns{white-space:normal}.swagger-ui .nowrap-ns{white-space:nowrap}.swagger-ui .pre-ns{white-space:pre}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .ws-normal-m{white-space:normal}.swagger-ui .nowrap-m{white-space:nowrap}.swagger-ui .pre-m{white-space:pre}}@media screen and (min-width:60em){.swagger-ui .ws-normal-l{white-space:normal}.swagger-ui .nowrap-l{white-space:nowrap}.swagger-ui .pre-l{white-space:pre}}.swagger-ui .v-base{vertical-align:baseline}.swagger-ui .v-mid{vertical-align:middle}.swagger-ui .v-top{vertical-align:top}.swagger-ui .v-btm{vertical-align:bottom}@media screen and (min-width:30em){.swagger-ui .v-base-ns{vertical-align:baseline}.swagger-ui .v-mid-ns{vertical-align:middle}.swagger-ui .v-top-ns{vertical-align:top}.swagger-ui .v-btm-ns{vertical-align:bottom}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .v-base-m{vertical-align:baseline}.swagger-ui .v-mid-m{vertical-align:middle}.swagger-ui .v-top-m{vertical-align:top}.swagger-ui .v-btm-m{vertical-align:bottom}}@media screen and (min-width:60em){.swagger-ui .v-base-l{vertical-align:baseline}.swagger-ui .v-mid-l{vertical-align:middle}.swagger-ui .v-top-l{vertical-align:top}.swagger-ui .v-btm-l{vertical-align:bottom}}.swagger-ui .dim{opacity:1;transition:opacity .15s ease-in}.swagger-ui .dim:focus,.swagger-ui .dim:hover{opacity:.5;transition:opacity .15s ease-in}.swagger-ui .dim:active{opacity:.8;transition:opacity .15s ease-out}.swagger-ui .glow{transition:opacity .15s ease-in}.swagger-ui .glow:focus,.swagger-ui .glow:hover{opacity:1;transition:opacity .15s ease-in}.swagger-ui .hide-child .child{opacity:0;transition:opacity .15s ease-in}.swagger-ui .hide-child:active .child,.swagger-ui .hide-child:focus .child,.swagger-ui .hide-child:hover .child{opacity:1;transition:opacity .15s ease-in}.swagger-ui .underline-hover:focus,.swagger-ui .underline-hover:hover{text-decoration:underline}.swagger-ui .grow{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;transform:translateZ(0);transition:transform .25s ease-out}.swagger-ui .grow:focus,.swagger-ui .grow:hover{transform:scale(1.05)}.swagger-ui .grow:active{transform:scale(.9)}.swagger-ui .grow-large{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;transform:translateZ(0);transition:transform .25s ease-in-out}.swagger-ui .grow-large:focus,.swagger-ui .grow-large:hover{transform:scale(1.2)}.swagger-ui .grow-large:active{transform:scale(.95)}.swagger-ui .pointer:hover{cursor:pointer}.swagger-ui .shadow-hover{cursor:pointer;position:relative;transition:all .5s cubic-bezier(.165,.84,.44,1)}.swagger-ui .shadow-hover:after{border-radius:inherit;box-shadow:0 0 16px 2px rgba(0,0,0,.2);content:"";height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .5s cubic-bezier(.165,.84,.44,1);width:100%;z-index:-1}.swagger-ui .shadow-hover:focus:after,.swagger-ui .shadow-hover:hover:after{opacity:1}.swagger-ui .bg-animate,.swagger-ui .bg-animate:focus,.swagger-ui .bg-animate:hover{transition:background-color .15s ease-in-out}.swagger-ui .z-0{z-index:0}.swagger-ui .z-1{z-index:1}.swagger-ui .z-2{z-index:2}.swagger-ui .z-3{z-index:3}.swagger-ui .z-4{z-index:4}.swagger-ui .z-5{z-index:5}.swagger-ui .z-999{z-index:999}.swagger-ui .z-9999{z-index:9999}.swagger-ui .z-max{z-index:2147483647}.swagger-ui .z-inherit{z-index:inherit}.swagger-ui .z-initial{z-index:auto}.swagger-ui .z-unset{z-index:unset}.swagger-ui .nested-copy-line-height ol,.swagger-ui .nested-copy-line-height p,.swagger-ui .nested-copy-line-height ul{line-height:1.5}.swagger-ui .nested-headline-line-height h1,.swagger-ui .nested-headline-line-height h2,.swagger-ui .nested-headline-line-height h3,.swagger-ui .nested-headline-line-height h4,.swagger-ui .nested-headline-line-height h5,.swagger-ui .nested-headline-line-height h6{line-height:1.25}.swagger-ui .nested-list-reset ol,.swagger-ui .nested-list-reset ul{list-style-type:none;margin-left:0;padding-left:0}.swagger-ui .nested-copy-indent p+p{margin-bottom:0;margin-top:0;text-indent:.1em}.swagger-ui .nested-copy-seperator p+p{margin-top:1.5em}.swagger-ui .nested-img img{display:block;max-width:100%;width:100%}.swagger-ui .nested-links a{color:#357edd;transition:color .15s ease-in}.swagger-ui .nested-links a:focus,.swagger-ui .nested-links a:hover{color:#96ccff;transition:color .15s ease-in}.swagger-ui .wrapper{box-sizing:border-box;margin:0 auto;max-width:1460px;padding:0 20px;width:100%}.swagger-ui .opblock-tag-section{display:flex;flex-direction:column}.swagger-ui .try-out.btn-group{display:flex;flex:0.1 2 auto;padding:0}.swagger-ui .try-out__btn{margin-left:1.25rem}.swagger-ui .opblock-tag{align-items:center;border-bottom:1px solid rgba(59,65,81,.3);cursor:pointer;display:flex;padding:10px 20px 10px 10px;transition:all .2s}.swagger-ui .opblock-tag:hover{background:rgba(0,0,0,.02)}.swagger-ui .opblock-tag{color:#3b4151;font-family:sans-serif;font-size:24px;margin:0 0 5px}.swagger-ui .opblock-tag.no-desc span{flex:1}.swagger-ui .opblock-tag svg{transition:all .4s}.swagger-ui .opblock-tag small{color:#3b4151;flex:2;font-family:sans-serif;font-size:14px;font-weight:400;padding:0 10px}.swagger-ui .opblock-tag>div{flex:1 1 150px;font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width:640px){.swagger-ui .opblock-tag small,.swagger-ui .opblock-tag>div{flex:1}}.swagger-ui .parameter__type{color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;padding:5px 0}.swagger-ui .parameter-controls{margin-top:.75em}.swagger-ui .examples__title{display:block;font-size:1.1em;font-weight:700;margin-bottom:.75em}.swagger-ui .examples__section{margin-top:1.5em}.swagger-ui .examples__section-header{font-size:.9rem;font-weight:700;margin-bottom:.5rem}.swagger-ui .examples-select{display:inline-block;margin-bottom:.75em}.swagger-ui .examples-select .examples-select-element{width:100%}.swagger-ui .examples-select__section-label{font-size:.9rem;font-weight:700;margin-right:.5rem}.swagger-ui .example__section{margin-top:1.5em}.swagger-ui .example__section-header{font-size:.9rem;font-weight:700;margin-bottom:.5rem}.swagger-ui .view-line-link{cursor:pointer;margin:0 5px;position:relative;top:3px;transition:all .5s;width:20px}.swagger-ui .opblock{border:1px solid #000;border-radius:4px;box-shadow:0 0 3px rgba(0,0,0,.19);margin:0 0 15px}.swagger-ui .opblock .tab-header{display:flex;flex:1}.swagger-ui .opblock .tab-header .tab-item{cursor:pointer;padding:0 40px}.swagger-ui .opblock .tab-header .tab-item:first-of-type{padding:0 40px 0 0}.swagger-ui .opblock .tab-header .tab-item.active h4 span{position:relative}.swagger-ui .opblock .tab-header .tab-item.active h4 span:after{background:gray;bottom:-15px;content:"";height:4px;left:50%;position:absolute;transform:translateX(-50%);width:120%}.swagger-ui .opblock.is-open .opblock-summary{border-bottom:1px solid #000}.swagger-ui .opblock .opblock-section-header{align-items:center;background:hsla(0,0%,100%,.8);box-shadow:0 1px 2px rgba(0,0,0,.1);display:flex;min-height:50px;padding:8px 20px}.swagger-ui .opblock .opblock-section-header>label{align-items:center;color:#3b4151;display:flex;font-family:sans-serif;font-size:12px;font-weight:700;margin:0 0 0 auto}.swagger-ui .opblock .opblock-section-header>label>span{padding:0 10px 0 0}.swagger-ui .opblock .opblock-section-header h4{color:#3b4151;flex:1;font-family:sans-serif;font-size:14px;margin:0}.swagger-ui .opblock .opblock-summary-method{background:#000;border-radius:3px;color:#fff;font-family:sans-serif;font-size:14px;font-weight:700;min-width:80px;padding:6px 0;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.1)}.swagger-ui .opblock .opblock-summary-operation-id,.swagger-ui .opblock .opblock-summary-path,.swagger-ui .opblock .opblock-summary-path__deprecated{align-items:center;color:#3b4151;display:flex;font-family:monospace;font-size:16px;font-weight:600;padding:0 10px;word-break:break-word}@media (max-width:768px){.swagger-ui .opblock .opblock-summary-operation-id,.swagger-ui .opblock .opblock-summary-path,.swagger-ui .opblock .opblock-summary-path__deprecated{font-size:12px}}.swagger-ui .opblock .opblock-summary-path{flex-shrink:0;max-width:calc(100% - 110px - 15rem)}@media (max-width:640px){.swagger-ui .opblock .opblock-summary-path{flex-shrink:1;max-width:100%}}.swagger-ui .opblock .opblock-summary-path__deprecated{text-decoration:line-through}.swagger-ui .opblock .opblock-summary-operation-id{font-size:14px}.swagger-ui .opblock .opblock-summary-description{color:#3b4151;flex:1 1 auto;font-family:sans-serif;font-size:13px;word-break:break-word}.swagger-ui .opblock .opblock-summary{align-items:center;cursor:pointer;display:flex;padding:5px}.swagger-ui .opblock .opblock-summary .view-line-link{cursor:pointer;margin:0;position:relative;top:2px;transition:all .5s;width:0}.swagger-ui .opblock .opblock-summary:hover .view-line-link{margin:0 5px;width:18px}.swagger-ui .opblock .opblock-summary:hover .view-line-link.copy-to-clipboard{width:24px}.swagger-ui .opblock.opblock-post{background:rgba(73,204,144,.1);border-color:#49cc90}.swagger-ui .opblock.opblock-post .opblock-summary-method{background:#49cc90}.swagger-ui .opblock.opblock-post .opblock-summary{border-color:#49cc90}.swagger-ui .opblock.opblock-post .tab-header .tab-item.active h4 span:after{background:#49cc90}.swagger-ui .opblock.opblock-put{background:rgba(252,161,48,.1);border-color:#fca130}.swagger-ui .opblock.opblock-put .opblock-summary-method{background:#fca130}.swagger-ui .opblock.opblock-put .opblock-summary{border-color:#fca130}.swagger-ui .opblock.opblock-put .tab-header .tab-item.active h4 span:after{background:#fca130}.swagger-ui .opblock.opblock-delete{background:rgba(249,62,62,.1);border-color:#f93e3e}.swagger-ui .opblock.opblock-delete .opblock-summary-method{background:#f93e3e}.swagger-ui .opblock.opblock-delete .opblock-summary{border-color:#f93e3e}.swagger-ui .opblock.opblock-delete .tab-header .tab-item.active h4 span:after{background:#f93e3e}.swagger-ui .opblock.opblock-get{background:rgba(97,175,254,.1);border-color:#61affe}.swagger-ui .opblock.opblock-get .opblock-summary-method{background:#61affe}.swagger-ui .opblock.opblock-get .opblock-summary{border-color:#61affe}.swagger-ui .opblock.opblock-get .tab-header .tab-item.active h4 span:after{background:#61affe}.swagger-ui .opblock.opblock-patch{background:rgba(80,227,194,.1);border-color:#50e3c2}.swagger-ui .opblock.opblock-patch .opblock-summary-method{background:#50e3c2}.swagger-ui .opblock.opblock-patch .opblock-summary{border-color:#50e3c2}.swagger-ui .opblock.opblock-patch .tab-header .tab-item.active h4 span:after{background:#50e3c2}.swagger-ui .opblock.opblock-head{background:rgba(144,18,254,.1);border-color:#9012fe}.swagger-ui .opblock.opblock-head .opblock-summary-method{background:#9012fe}.swagger-ui .opblock.opblock-head .opblock-summary{border-color:#9012fe}.swagger-ui .opblock.opblock-head .tab-header .tab-item.active h4 span:after{background:#9012fe}.swagger-ui .opblock.opblock-options{background:rgba(13,90,167,.1);border-color:#0d5aa7}.swagger-ui .opblock.opblock-options .opblock-summary-method{background:#0d5aa7}.swagger-ui .opblock.opblock-options .opblock-summary{border-color:#0d5aa7}.swagger-ui .opblock.opblock-options .tab-header .tab-item.active h4 span:after{background:#0d5aa7}.swagger-ui .opblock.opblock-deprecated{background:hsla(0,0%,92%,.1);border-color:#ebebeb;opacity:.6}.swagger-ui .opblock.opblock-deprecated .opblock-summary-method{background:#ebebeb}.swagger-ui .opblock.opblock-deprecated .opblock-summary{border-color:#ebebeb}.swagger-ui .opblock.opblock-deprecated .tab-header .tab-item.active h4 span:after{background:#ebebeb}.swagger-ui .opblock .opblock-schemes{padding:8px 20px}.swagger-ui .opblock .opblock-schemes .schemes-title{padding:0 10px 0 0}.swagger-ui .filter .operation-filter-input{border:2px solid #d8dde7;margin:20px 0;padding:10px;width:100%}.swagger-ui .download-url-wrapper .failed,.swagger-ui .filter .failed{color:red}.swagger-ui .download-url-wrapper .loading,.swagger-ui .filter .loading{color:#aaa}.swagger-ui .model-example{margin-top:1em}.swagger-ui .tab{display:flex;list-style:none;padding:0}.swagger-ui .tab li{color:#3b4151;cursor:pointer;font-family:sans-serif;font-size:12px;min-width:60px;padding:0}.swagger-ui .tab li:first-of-type{padding-left:0;padding-right:12px;position:relative}.swagger-ui .tab li:first-of-type:after{background:rgba(0,0,0,.2);content:"";height:100%;position:absolute;right:6px;top:0;width:1px}.swagger-ui .tab li.active{font-weight:700}.swagger-ui .tab li button.tablinks{background:none;border:0;color:inherit;font-family:inherit;font-weight:inherit;padding:0}.swagger-ui .opblock-description-wrapper,.swagger-ui .opblock-external-docs-wrapper,.swagger-ui .opblock-title_normal{color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px;padding:15px 20px}.swagger-ui .opblock-description-wrapper h4,.swagger-ui .opblock-external-docs-wrapper h4,.swagger-ui .opblock-title_normal h4{color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .opblock-description-wrapper p,.swagger-ui .opblock-external-docs-wrapper p,.swagger-ui .opblock-title_normal p{color:#3b4151;font-family:sans-serif;font-size:14px;margin:0}.swagger-ui .opblock-external-docs-wrapper h4{padding-left:0}.swagger-ui .execute-wrapper{padding:20px;text-align:right}.swagger-ui .execute-wrapper .btn{padding:8px 40px;width:100%}.swagger-ui .body-param-options{display:flex;flex-direction:column}.swagger-ui .body-param-options .body-param-edit{padding:10px 0}.swagger-ui .body-param-options label{padding:8px 0}.swagger-ui .body-param-options label select{margin:3px 0 0}.swagger-ui .responses-inner{padding:20px}.swagger-ui .responses-inner h4,.swagger-ui .responses-inner h5{color:#3b4151;font-family:sans-serif;font-size:12px;margin:10px 0 5px}.swagger-ui .responses-inner .curl{white-space:normal}.swagger-ui .response-col_status{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .response-col_status .response-undocumented{color:#909090;font-family:monospace;font-size:11px;font-weight:600}.swagger-ui .response-col_links{color:#3b4151;font-family:sans-serif;font-size:14px;max-width:40em;padding-left:2em}.swagger-ui .response-col_links .response-undocumented{color:#909090;font-family:monospace;font-size:11px;font-weight:600}.swagger-ui .response-col_links .operation-link{margin-bottom:1.5em}.swagger-ui .response-col_links .operation-link .description{margin-bottom:.5em}.swagger-ui .opblock-body .opblock-loading-animation{display:block;margin:3em auto}.swagger-ui .opblock-body pre.microlight{word-wrap:break-word;background:#333;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;-webkit-hyphens:auto;hyphens:auto;margin:0;padding:10px;white-space:pre-wrap;word-break:break-all;word-break:break-word}.swagger-ui .opblock-body pre.microlight .headerline{display:block}.swagger-ui .highlight-code{position:relative}.swagger-ui .highlight-code>.microlight{max-height:400px;min-height:6em;overflow-y:auto}.swagger-ui .highlight-code>.microlight code{white-space:pre-wrap!important;word-break:break-all}.swagger-ui .curl-command{position:relative}.swagger-ui .download-contents{align-items:center;background:#7d8293;border-radius:4px;bottom:10px;color:#fff;cursor:pointer;display:flex;font-family:sans-serif;font-size:14px;font-weight:600;height:30px;justify-content:center;padding:5px;position:absolute;right:10px;text-align:center}.swagger-ui .scheme-container{background:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.15);margin:0 0 20px;padding:30px 0}.swagger-ui .scheme-container .schemes{align-items:flex-end;display:flex}.swagger-ui .scheme-container .schemes>label{color:#3b4151;display:flex;flex-direction:column;font-family:sans-serif;font-size:12px;font-weight:700;margin:-20px 15px 0 0}.swagger-ui .scheme-container .schemes>label select{min-width:130px;text-transform:uppercase}.swagger-ui .loading-container{align-items:center;display:flex;flex-direction:column;justify-content:center;margin-top:1em;min-height:1px;padding:40px 0 60px}.swagger-ui .loading-container .loading{position:relative}.swagger-ui .loading-container .loading:after{color:#3b4151;content:"loading";font-family:sans-serif;font-size:10px;font-weight:700;left:50%;position:absolute;text-transform:uppercase;top:50%;transform:translate(-50%,-50%)}.swagger-ui .loading-container .loading:before{-webkit-animation:rotation 1s linear infinite,opacity .5s;animation:rotation 1s linear infinite,opacity .5s;-webkit-backface-visibility:hidden;backface-visibility:hidden;border:2px solid rgba(85,85,85,.1);border-radius:100%;border-top-color:rgba(0,0,0,.6);content:"";display:block;height:60px;left:50%;margin:-30px;opacity:1;position:absolute;top:50%;width:60px}@-webkit-keyframes rotation{to{transform:rotate(1turn)}}@keyframes rotation{to{transform:rotate(1turn)}}.swagger-ui .response-controls{display:flex;padding-top:1em}.swagger-ui .response-control-media-type{margin-right:1em}.swagger-ui .response-control-media-type--accept-controller select{border-color:green}.swagger-ui .response-control-media-type__accept-message{color:green;font-size:.7em}.swagger-ui .response-control-examples__title,.swagger-ui .response-control-media-type__title{display:block;font-size:.7em;margin-bottom:.2em}@-webkit-keyframes blinker{50%{opacity:0}}@keyframes blinker{50%{opacity:0}}.swagger-ui .hidden{display:none}.swagger-ui .no-margin{border:none;height:auto;margin:0;padding:0}.swagger-ui .float-right{float:right}.swagger-ui .svg-assets{height:0;position:absolute;width:0}.swagger-ui section h3{color:#3b4151;font-family:sans-serif}.swagger-ui a.nostyle{display:inline}.swagger-ui a.nostyle,.swagger-ui a.nostyle:visited{color:inherit;cursor:pointer;text-decoration:inherit}.swagger-ui .fallback{color:#aaa;padding:1em}.swagger-ui .version-pragma{height:100%;padding:5em 0}.swagger-ui .version-pragma__message{display:flex;font-size:1.2em;height:100%;justify-content:center;line-height:1.5em;padding:0 .6em;text-align:center}.swagger-ui .version-pragma__message>div{flex:1;max-width:55ch}.swagger-ui .version-pragma__message code{background-color:#dedede;padding:4px 4px 2px;white-space:pre}.swagger-ui .opblock-link{font-weight:400}.swagger-ui .opblock-link.shown{font-weight:700}.swagger-ui span.token-string{color:#555}.swagger-ui span.token-not-formatted{color:#555;font-weight:700}.swagger-ui .btn{background:transparent;border:2px solid gray;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.1);color:#3b4151;font-family:sans-serif;font-size:14px;font-weight:700;padding:5px 23px;transition:all .3s}.swagger-ui .btn.btn-sm{font-size:12px;padding:4px 23px}.swagger-ui .btn[disabled]{cursor:not-allowed;opacity:.3}.swagger-ui .btn:hover{box-shadow:0 0 5px rgba(0,0,0,.3)}.swagger-ui .btn.cancel{background-color:transparent;border-color:#ff6060;color:#ff6060;font-family:sans-serif}.swagger-ui .btn.authorize{background-color:transparent;border-color:#49cc90;color:#49cc90;display:inline;line-height:1}.swagger-ui .btn.authorize span{float:left;padding:4px 20px 0 0}.swagger-ui .btn.authorize svg{fill:#49cc90}.swagger-ui .btn.execute{background-color:#4990e2;border-color:#4990e2;color:#fff}.swagger-ui .btn-group{display:flex;padding:30px}.swagger-ui .btn-group .btn{flex:1}.swagger-ui .btn-group .btn:first-child{border-radius:4px 0 0 4px}.swagger-ui .btn-group .btn:last-child{border-radius:0 4px 4px 0}.swagger-ui .authorization__btn{background:none;border:none;padding:0 0 0 10px}.swagger-ui .authorization__btn.locked{opacity:1}.swagger-ui .authorization__btn.unlocked{opacity:.4}.swagger-ui .model-box-control,.swagger-ui .models-control,.swagger-ui .opblock-summary-control{all:inherit;border-bottom:0;cursor:pointer;flex:1;padding:0}.swagger-ui .model-box-control:focus,.swagger-ui .models-control:focus,.swagger-ui .opblock-summary-control:focus{outline:auto}.swagger-ui .expand-methods,.swagger-ui .expand-operation{background:none;border:none}.swagger-ui .expand-methods svg,.swagger-ui .expand-operation svg{height:20px;width:20px}.swagger-ui .expand-methods{padding:0 10px}.swagger-ui .expand-methods:hover svg{fill:#404040}.swagger-ui .expand-methods svg{fill:#707070;transition:all .3s}.swagger-ui button{cursor:pointer}.swagger-ui button.invalid{-webkit-animation:shake .4s 1;animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui .copy-to-clipboard{align-items:center;background:#7d8293;border:none;border-radius:4px;bottom:10px;display:flex;height:30px;justify-content:center;position:absolute;right:100px;width:30px}.swagger-ui .copy-to-clipboard button{background:url("data:image/svg+xml;charset=utf-8,") 50% no-repeat;border:none;flex-grow:1;flex-shrink:1;height:25px}.swagger-ui .curl-command .copy-to-clipboard{bottom:5px;height:20px;right:10px;width:20px}.swagger-ui .curl-command .copy-to-clipboard button{height:18px}.swagger-ui .opblock .opblock-summary .view-line-link.copy-to-clipboard{height:26px;position:unset}.swagger-ui select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#f7f7f7 url("data:image/svg+xml;charset=utf-8,") right 10px center no-repeat;background-size:20px;border:2px solid #41444e;border-radius:4px;box-shadow:0 1px 2px 0 rgba(0,0,0,.25);color:#3b4151;font-family:sans-serif;font-size:14px;font-weight:700;padding:5px 40px 5px 10px}.swagger-ui select[multiple]{background:#f7f7f7;margin:5px 0;padding:5px}.swagger-ui select.invalid{-webkit-animation:shake .4s 1;animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui .opblock-body select{min-width:230px}@media (max-width:768px){.swagger-ui .opblock-body select{min-width:180px}}@media (max-width:640px){.swagger-ui .opblock-body select{min-width:100%;width:100%}}.swagger-ui label{color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;margin:0 0 5px}@media (max-width:768px){.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text]{max-width:175px}}.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text],.swagger-ui textarea{background:#fff;border:1px solid #d9d9d9;border-radius:4px;margin:5px 0;min-width:100px;padding:8px 10px}.swagger-ui input[type=email].invalid,.swagger-ui input[type=file].invalid,.swagger-ui input[type=password].invalid,.swagger-ui input[type=search].invalid,.swagger-ui input[type=text].invalid,.swagger-ui textarea.invalid{-webkit-animation:shake .4s 1;animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui input[disabled],.swagger-ui select[disabled],.swagger-ui textarea[disabled]{background-color:#fafafa;color:#888;cursor:not-allowed}.swagger-ui select[disabled]{border-color:#888}.swagger-ui textarea[disabled]{background-color:#41444e;color:#fff}@-webkit-keyframes shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}@keyframes shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}.swagger-ui textarea{background:hsla(0,0%,100%,.8);border:none;border-radius:4px;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;min-height:280px;outline:none;padding:10px;width:100%}.swagger-ui textarea:focus{border:2px solid #61affe}.swagger-ui textarea.curl{background:#41444e;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;margin:0;min-height:100px;padding:10px;resize:none}.swagger-ui .checkbox{color:#303030;padding:5px 0 10px;transition:opacity .5s}.swagger-ui .checkbox label{display:flex}.swagger-ui .checkbox p{color:#3b4151;font-family:monospace;font-style:italic;font-weight:400!important;font-weight:600;margin:0!important}.swagger-ui .checkbox input[type=checkbox]{display:none}.swagger-ui .checkbox input[type=checkbox]+label>.item{background:#e8e8e8;border-radius:1px;box-shadow:0 0 0 2px #e8e8e8;cursor:pointer;display:inline-block;flex:none;height:16px;margin:0 8px 0 0;padding:5px;position:relative;top:3px;width:16px}.swagger-ui .checkbox input[type=checkbox]+label>.item:active{transform:scale(.9)}.swagger-ui .checkbox input[type=checkbox]:checked+label>.item{background:#e8e8e8 url("data:image/svg+xml;charset=utf-8,") 50% no-repeat}.swagger-ui .dialog-ux{bottom:0;left:0;position:fixed;right:0;top:0;z-index:9999}.swagger-ui .dialog-ux .backdrop-ux{background:rgba(0,0,0,.8);bottom:0;left:0;position:fixed;right:0;top:0}.swagger-ui .dialog-ux .modal-ux{background:#fff;border:1px solid #ebebeb;border-radius:4px;box-shadow:0 10px 30px 0 rgba(0,0,0,.2);left:50%;max-width:650px;min-width:300px;position:absolute;top:50%;transform:translate(-50%,-50%);width:100%;z-index:9999}.swagger-ui .dialog-ux .modal-ux-content{max-height:540px;overflow-y:auto;padding:20px}.swagger-ui .dialog-ux .modal-ux-content p{color:#41444e;color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .dialog-ux .modal-ux-content h4{color:#3b4151;font-family:sans-serif;font-size:18px;font-weight:600;margin:15px 0 0}.swagger-ui .dialog-ux .modal-ux-header{align-items:center;border-bottom:1px solid #ebebeb;display:flex;padding:12px 0}.swagger-ui .dialog-ux .modal-ux-header .close-modal{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;padding:0 10px}.swagger-ui .dialog-ux .modal-ux-header h3{color:#3b4151;flex:1;font-family:sans-serif;font-size:20px;font-weight:600;margin:0;padding:0 20px}.swagger-ui .model{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600}.swagger-ui .model .deprecated span,.swagger-ui .model .deprecated td{color:#a0a0a0!important}.swagger-ui .model .deprecated>td:first-of-type{text-decoration:line-through}.swagger-ui .model-toggle{cursor:pointer;display:inline-block;font-size:10px;margin:auto .3em;position:relative;top:6px;transform:rotate(90deg);transform-origin:50% 50%;transition:transform .15s ease-in}.swagger-ui .model-toggle.collapsed{transform:rotate(0deg)}.swagger-ui .model-toggle:after{background:url("data:image/svg+xml;charset=utf-8,") 50% no-repeat;background-size:100%;content:"";display:block;height:20px;width:20px}.swagger-ui .model-jump-to-path{cursor:pointer;position:relative}.swagger-ui .model-jump-to-path .view-line-link{cursor:pointer;position:absolute;top:-.4em}.swagger-ui .model-title{position:relative}.swagger-ui .model-title:hover .model-hint{visibility:visible}.swagger-ui .model-hint{background:rgba(0,0,0,.7);border-radius:4px;color:#ebebeb;padding:.1em .5em;position:absolute;top:-1.8em;visibility:hidden;white-space:nowrap}.swagger-ui .model p{margin:0 0 1em}.swagger-ui .model .property{color:#999;font-style:italic}.swagger-ui .model .property.primitive{color:#6b6b6b}.swagger-ui table.model tr.description{color:#666;font-weight:400}.swagger-ui table.model tr.description td:first-child,.swagger-ui table.model tr.property-row.required td:first-child{font-weight:700}.swagger-ui table.model tr.property-row td{vertical-align:top}.swagger-ui table.model tr.property-row td:first-child{padding-right:.2em}.swagger-ui table.model tr.property-row .star{color:red}.swagger-ui table.model tr.extension{color:#777}.swagger-ui table.model tr.extension td:last-child{vertical-align:top}.swagger-ui section.models{border:1px solid rgba(59,65,81,.3);border-radius:4px;margin:30px 0}.swagger-ui section.models .pointer{cursor:pointer}.swagger-ui section.models.is-open{padding:0 0 20px}.swagger-ui section.models.is-open h4{border-bottom:1px solid rgba(59,65,81,.3);margin:0 0 5px}.swagger-ui section.models h4{align-items:center;color:#606060;cursor:pointer;display:flex;font-family:sans-serif;font-size:16px;margin:0;padding:10px 20px 10px 10px;transition:all .2s}.swagger-ui section.models h4 svg{transition:all .4s}.swagger-ui section.models h4 span{flex:1}.swagger-ui section.models h4:hover{background:rgba(0,0,0,.02)}.swagger-ui section.models h5{color:#707070;font-family:sans-serif;font-size:16px;margin:0 0 10px}.swagger-ui section.models .model-jump-to-path{position:relative;top:5px}.swagger-ui section.models .model-container{background:rgba(0,0,0,.05);border-radius:4px;margin:0 20px 15px;position:relative;transition:all .5s}.swagger-ui section.models .model-container:hover{background:rgba(0,0,0,.07)}.swagger-ui section.models .model-container:first-of-type{margin:20px}.swagger-ui section.models .model-container:last-of-type{margin:0 20px}.swagger-ui section.models .model-container .models-jump-to-path{opacity:.65;position:absolute;right:5px;top:8px}.swagger-ui section.models .model-box{background:none}.swagger-ui .model-box{background:rgba(0,0,0,.1);border-radius:4px;display:inline-block;padding:10px}.swagger-ui .model-box .model-jump-to-path{position:relative;top:4px}.swagger-ui .model-box.deprecated{opacity:.5}.swagger-ui .model-title{color:#505050;font-family:sans-serif;font-size:16px}.swagger-ui .model-title img{bottom:0;margin-left:1em;position:relative}.swagger-ui .model-deprecated-warning{color:#f93e3e;font-family:sans-serif;font-size:16px;font-weight:600;margin-right:1em}.swagger-ui span>span.model .brace-close{padding:0 0 0 10px}.swagger-ui .prop-name{display:inline-block;margin-right:1em}.swagger-ui .prop-type{color:#55a}.swagger-ui .prop-enum{display:block}.swagger-ui .prop-format{color:#606060}.swagger-ui .servers>label{color:#3b4151;font-family:sans-serif;font-size:12px;margin:-20px 15px 0 0}.swagger-ui .servers>label select{max-width:100%;min-width:130px;width:100%}.swagger-ui .servers h4.message{padding-bottom:2em}.swagger-ui .servers table tr{width:30em}.swagger-ui .servers table td{display:inline-block;max-width:15em;padding-bottom:10px;padding-top:10px;vertical-align:middle}.swagger-ui .servers table td:first-of-type{padding-right:1em}.swagger-ui .servers table td input{height:100%;width:100%}.swagger-ui .servers .computed-url{margin:2em 0}.swagger-ui .servers .computed-url code{display:inline-block;font-size:16px;margin:0 1em;padding:4px}.swagger-ui .servers-title{font-size:12px;font-weight:700}.swagger-ui .operation-servers h4.message{margin-bottom:2em}.swagger-ui table{border-collapse:collapse;padding:0 10px;width:100%}.swagger-ui table.model tbody tr td{padding:0;vertical-align:top}.swagger-ui table.model tbody tr td:first-of-type{padding:0 0 0 2em;width:174px}.swagger-ui table.headers td{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600;vertical-align:middle}.swagger-ui table.headers .header-example{color:#999;font-style:italic}.swagger-ui table tbody tr td{padding:10px 0 0;vertical-align:top}.swagger-ui table tbody tr td:first-of-type{min-width:6em;padding:10px 0}.swagger-ui table thead tr td,.swagger-ui table thead tr th{border-bottom:1px solid rgba(59,65,81,.2);color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;padding:12px 0;text-align:left}.swagger-ui .parameters-col_description{margin-bottom:2em;width:99%}.swagger-ui .parameters-col_description input{max-width:340px;width:100%}.swagger-ui .parameters-col_description select{border-width:1px}.swagger-ui .parameter__name{color:#3b4151;font-family:sans-serif;font-size:16px;font-weight:400;margin-right:.75em}.swagger-ui .parameter__name.required{font-weight:700}.swagger-ui .parameter__name.required span{color:red}.swagger-ui .parameter__name.required:after{color:rgba(255,0,0,.6);content:"required";font-size:10px;padding:5px;position:relative;top:-6px}.swagger-ui .parameter__extension,.swagger-ui .parameter__in{color:gray;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__deprecated{color:red;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__empty_value_toggle{display:block;font-size:13px;padding-bottom:12px;padding-top:5px}.swagger-ui .parameter__empty_value_toggle input{margin-right:7px}.swagger-ui .parameter__empty_value_toggle.disabled{opacity:.7}.swagger-ui .table-container{padding:20px}.swagger-ui .response-col_description{width:99%}.swagger-ui .response-col_links{min-width:6em}.swagger-ui .response__extension{color:gray;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .topbar{background-color:#1b1b1b;padding:10px 0}.swagger-ui .topbar .topbar-wrapper,.swagger-ui .topbar a{align-items:center;display:flex}.swagger-ui .topbar a{color:#fff;flex:1;font-family:sans-serif;font-size:1.5em;font-weight:700;max-width:300px;text-decoration:none}.swagger-ui .topbar a span{margin:0;padding:0 10px}.swagger-ui .topbar .download-url-wrapper{display:flex;flex:3;justify-content:flex-end}.swagger-ui .topbar .download-url-wrapper input[type=text]{border:2px solid #62a03f;border-radius:4px 0 0 4px;margin:0;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label{align-items:center;color:#f0f0f0;display:flex;margin:0;max-width:600px;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label span{flex:1;font-size:16px;padding:0 10px 0 0;text-align:right}.swagger-ui .topbar .download-url-wrapper .select-label select{border:2px solid #62a03f;box-shadow:none;flex:2;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .download-url-button{background:#62a03f;border:none;border-radius:0 4px 4px 0;color:#fff;font-family:sans-serif;font-size:16px;font-weight:700;padding:4px 30px}.swagger-ui .info{margin:50px 0}.swagger-ui .info.failed-config{margin-left:auto;margin-right:auto;max-width:880px;text-align:center}.swagger-ui .info hgroup.main{margin:0 0 20px}.swagger-ui .info hgroup.main a{font-size:12px}.swagger-ui .info pre{font-size:14px}.swagger-ui .info li,.swagger-ui .info p,.swagger-ui .info table{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .info h1,.swagger-ui .info h2,.swagger-ui .info h3,.swagger-ui .info h4,.swagger-ui .info h5{color:#3b4151;font-family:sans-serif}.swagger-ui .info a{color:#4990e2;font-family:sans-serif;font-size:14px;transition:all .4s}.swagger-ui .info a:hover{color:#1f69c0}.swagger-ui .info>div{margin:0 0 5px}.swagger-ui .info .base-url{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300!important;font-weight:600;margin:0}.swagger-ui .info .title{color:#3b4151;font-family:sans-serif;font-size:36px;margin:0}.swagger-ui .info .title small{background:#7d8492;border-radius:57px;display:inline-block;font-size:10px;margin:0 0 0 5px;padding:2px 4px;position:relative;top:-5px;vertical-align:super}.swagger-ui .info .title small.version-stamp{background-color:#89bf04}.swagger-ui .info .title small pre{color:#fff;font-family:sans-serif;margin:0;padding:0}.swagger-ui .auth-btn-wrapper{display:flex;justify-content:center;padding:10px 0}.swagger-ui .auth-btn-wrapper .btn-done{margin-right:1em}.swagger-ui .auth-wrapper{display:flex;flex:1;justify-content:flex-end}.swagger-ui .auth-wrapper .authorize{margin-left:10px;margin-right:10px;padding-right:20px}.swagger-ui .auth-container{border-bottom:1px solid #ebebeb;margin:0 0 10px;padding:10px 20px}.swagger-ui .auth-container:last-of-type{border:0;margin:0;padding:10px 20px}.swagger-ui .auth-container h4{margin:5px 0 15px!important}.swagger-ui .auth-container .wrapper{margin:0;padding:0}.swagger-ui .auth-container input[type=password],.swagger-ui .auth-container input[type=text]{min-width:230px}.swagger-ui .auth-container .errors{background-color:#fee;border-radius:4px;color:red;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;margin:1em;padding:10px}.swagger-ui .auth-container .errors b{margin-right:1em;text-transform:capitalize}.swagger-ui .scopes h2{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .scopes h2 a{color:#4990e2;cursor:pointer;font-size:12px;padding-left:10px;text-decoration:underline}.swagger-ui .scope-def{padding:0 0 20px}.swagger-ui .errors-wrapper{-webkit-animation:scaleUp .5s;animation:scaleUp .5s;background:rgba(249,62,62,.1);border:2px solid #f93e3e;border-radius:4px;margin:20px;padding:10px 20px}.swagger-ui .errors-wrapper .error-wrapper{margin:0 0 10px}.swagger-ui .errors-wrapper .errors h4{color:#3b4151;font-family:monospace;font-size:14px;font-weight:600;margin:0}.swagger-ui .errors-wrapper .errors small{color:#606060}.swagger-ui .errors-wrapper .errors .message{white-space:pre-line}.swagger-ui .errors-wrapper .errors .message.thrown{max-width:100%}.swagger-ui .errors-wrapper .errors .error-line{cursor:pointer;text-decoration:underline}.swagger-ui .errors-wrapper hgroup{align-items:center;display:flex}.swagger-ui .errors-wrapper hgroup h4{color:#3b4151;flex:1;font-family:sans-serif;font-size:20px;margin:0}@-webkit-keyframes scaleUp{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes scaleUp{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.swagger-ui .Resizer.vertical.disabled{display:none}.swagger-ui .markdown p,.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown p,.swagger-ui .renderedMarkdown pre{margin:1em auto;word-break:break-all;word-break:break-word}.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown pre{background:none;color:#000;font-weight:400;padding:0;white-space:pre-wrap}.swagger-ui .markdown code,.swagger-ui .renderedMarkdown code{background:rgba(0,0,0,.05);border-radius:4px;color:#9012fe;font-family:monospace;font-size:14px;font-weight:600;padding:5px 7px}.swagger-ui .markdown pre>code,.swagger-ui .renderedMarkdown pre>code{display:block} + +/*# sourceMappingURL=swagger-ui.css.map*/ \ No newline at end of file diff --git a/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.eot b/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.eot new file mode 100644 index 00000000..7a7d1566 Binary files /dev/null and b/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.eot differ diff --git a/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.svg b/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.svg new file mode 100644 index 00000000..0452c4e1 --- /dev/null +++ b/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.svg @@ -0,0 +1,855 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : 2010 2012 Adobe Systems Incorporated All Rights Reserved +Designer : Paul D Hunt +Foundry : Adobe Systems Incorporated +Foundry URL : httpwwwadobecomtype + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.ttf b/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.ttf new file mode 100644 index 00000000..8da080cf Binary files /dev/null and b/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.ttf differ diff --git a/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.woff b/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.woff new file mode 100644 index 00000000..19644594 Binary files /dev/null and b/themes/yunohost-docs/fonts/SourceSansPro-Bold-webfont.woff differ diff --git a/themes/yunohost-docs/images/favicon.ico b/themes/yunohost-docs/images/favicon.ico new file mode 100644 index 00000000..49ffcee4 Binary files /dev/null and b/themes/yunohost-docs/images/favicon.ico differ diff --git a/themes/yunohost-docs/images/favicon.png b/themes/yunohost-docs/images/favicon.png new file mode 100644 index 00000000..1981a6c7 Binary files /dev/null and b/themes/yunohost-docs/images/favicon.png differ diff --git a/themes/yunohost-docs/js/darkMode.js b/themes/yunohost-docs/js/darkMode.js new file mode 100644 index 00000000..7df345a2 --- /dev/null +++ b/themes/yunohost-docs/js/darkMode.js @@ -0,0 +1,52 @@ + +/** + * Custom dark mode + */ + +// Get user preference +const prefersDarkScheme = window.matchMedia("(prefers-color-scheme: dark)").matches; + +// Select the theme preference from localStorage +const currentTheme = localStorage.getItem("theme") ? localStorage.getItem("theme") : null; + +// If the current theme in localStorage is "dark" or user prefer dark, apply it +if (currentTheme == "dark" || (currentTheme == null && prefersDarkScheme)) { + document.body.classList.add("dark-mode"); +} +else +{ + document.body.classList.add("light-mode"); +} + +// Get all elements with switch class +const switches = document.querySelectorAll(".dark-mode-switcher"); + +// Apply event function to each element +for (var i = 0; i < switches.length; i++) { + switches[i].addEventListener('click', darkModeSwith); +} + +function darkModeSwith(event) { + + // Prevent href action + event.preventDefault(); + + // Toggle the .dark-theme class + document.body.classList.toggle("dark-mode"); + document.body.classList.toggle("light-mode"); + + // If the body contains the .dark-theme class... + // Then save the choice in localStorage + if (document.body.classList.contains("dark-mode")) { + localStorage.setItem("theme", "dark"); + } else { + localStorage.setItem("theme", "light"); + } + + // Close mobile menu + if (toggle = document.querySelector('#toggle')) + toggle.classList.remove('active'); + if (overlay = document.querySelector('#overlay')) + overlay.classList.remove('open'); + document.body.classList.remove('mobile-nav-open'); +} \ No newline at end of file diff --git a/themes/yunohost-docs/js/openapi.js b/themes/yunohost-docs/js/openapi.js new file mode 100644 index 00000000..97daa220 --- /dev/null +++ b/themes/yunohost-docs/js/openapi.js @@ -0,0 +1 @@ +var openapiJSON = {"openapi": "3.0.3", "info": {"title": "YunoHost API", "description": "This is the YunoHost API used on all YunoHost instances. This API is essentially used by YunoHost Webadmin.", "version": "11.0.7"}, "servers": [{"url": "https://{domain}/yunohost/api", "variables": {"domain": {"default": "demo.yunohost.org", "description": "Your yunohost domain"}}}], "tags": [{"name": "public", "description": "Public route"}, {"name": "user", "description": "Manage users and groups"}, {"name": "user group", "description": "Manage user groups"}, {"name": "user permission", "description": "Manage permissions"}, {"name": "user ssh", "description": "Manage ssh access"}, {"name": "domain", "description": "Manage domains"}, {"name": "domain config", "description": "Domain settings"}, {"name": "domain dns", "description": "Manage domains DNS"}, {"name": "domain cert", "description": "Manage domain certificates"}, {"name": "app", "description": "Manage apps"}, {"name": "app action", "description": "Handle apps actions"}, {"name": "app config", "description": "Applications configuration panel"}, {"name": "backup", "description": "Manage backups"}, {"name": "settings", "description": "Manage YunoHost global settings"}, {"name": "service", "description": "Manage services"}, {"name": "firewall", "description": "Manage firewall rules"}, {"name": "dyndns", "description": "Subscribe and Update DynDNS Hosts"}, {"name": "tools", "description": "Specific tools"}, {"name": "tools migrations", "description": "Manage migrations"}, {"name": "hook", "description": "Manage hooks"}, {"name": "log", "description": "Manage debug logs"}, {"name": "diagnosis", "description": "Look for possible issues on the server"}], "paths": {"/login": {"post": {"tags": ["public"], "summary": "Logs in and returns the authentication cookie", "parameters": [{"name": "X-Requested-With", "in": "header", "required": true, "schema": {"type": "string", "default": "Swagger API"}}], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"credentials": {"type": "string", "format": "password"}}, "required": ["credentials"]}}}}, "security": [], "responses": {"200": {"description": "Successfully login", "headers": {"Set-Cookie": {"schema": {"type": "string"}}}}}}}, "/installed": {"get": {"tags": ["public"], "summary": "Test if the API is working", "parameters": [], "security": [], "responses": {"200": {"description": "Successfully working"}}}}, "/users": {"get": {"tags": ["user"], "operationId": "user_list", "summary": "List users", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "fields", "in": "query", "description": "fields to fetch (username, fullname, mail, mail-alias, mail-forward, mailbox-quota, groups, shell, home-path)", "required": true, "schema": {"type": "array"}, "explode": true}]}, "post": {"tags": ["user"], "operationId": "user_create", "summary": "Create user", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "X-Requested-With", "in": "header", "required": true, "schema": {"type": "string", "default": "Swagger API"}}], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"username": {"type": "string", "description": "The unique username to create"}, "firstname": {"type": "string", "description": ""}, "lastname": {"type": "string", "description": ""}, "password": {"type": "string", "description": "User password"}, "domain": {"type": "string", "description": "Domain for the email address and xmpp account"}, "mailbox_quota": {"type": "string", "description": "Mailbox size quota", "default": "0"}}, "required": ["username"]}}}}}}, "/users/": {"delete": {"tags": ["user"], "operationId": "user_delete", "summary": "Delete user", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "username", "in": "query", "description": "Username to delete", "required": true, "schema": {"type": "string"}, "explode": false}, {"name": "purge", "in": "query", "description": "Purge user's home and mail directories", "required": false, "schema": {"type": "boolean"}, "explode": false}]}, "put": {"tags": ["user"], "operationId": "user_update", "summary": "Update user informations", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"username": {"type": "string", "description": "Username to update"}, "firstname": {"type": "string", "description": ""}, "lastname": {"type": "string", "description": ""}, "mail": {"type": "string", "description": ""}, "change_password": {"type": "string", "description": "New password to set", "format": "password"}, "add_mailforward": {"type": "array", "description": "Mailforward addresses to add", "format": "mail"}, "remove_mailforward": {"type": "array", "description": "Mailforward addresses to remove", "format": "mail"}, "add_mailalias": {"type": "array", "description": "Mail aliases to add", "format": "mail"}, "remove_mailalias": {"type": "array", "description": "Mail aliases to remove", "format": "mail"}, "mailbox_quota": {"type": "string", "description": "Mailbox size quota"}}, "required": ["username"]}}}}}, "get": {"tags": ["user"], "operationId": "user_info", "summary": "Get user information", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "username", "in": "query", "description": "Username or email to get information", "required": true, "schema": {"type": "string"}, "explode": false}]}}, "/users/export": {"get": {"tags": ["user"], "operationId": "user_export", "summary": "Export users into CSV", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": []}}, "/users/import": {"post": {"tags": ["user"], "operationId": "user_import", "summary": "Import several users from CSV", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "X-Requested-With", "in": "header", "required": true, "schema": {"type": "string", "default": "Swagger API"}}], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"csvfile": {"type": "file", "description": "CSV file with columns username, firstname, lastname, password, mail, mailbox-quota, mail-alias, mail-forward, groups (separated by coma)"}, "update": {"type": "boolean", "description": "Update all existing users contained in the CSV file (by default existing users are ignored)"}, "delete": {"type": "boolean", "description": "Delete all existing users that are not contained in the CSV file (by default existing users are kept)"}}, "required": ["csvfile"]}}}}}}, "/users/groups": {"get": {"tags": ["user group"], "operationId": "user group_list", "summary": "List existing groups", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "short", "in": "query", "description": "List only the names of groups", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "full", "in": "query", "description": "Display all informations known about each groups", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "include_primary_groups", "in": "query", "description": "Also display primary groups (each user has an eponym group that only contains itself)", "required": false, "schema": {"type": "boolean", "default": false}, "explode": false}]}, "post": {"tags": ["user group"], "operationId": "user group_create", "summary": "Create group", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "X-Requested-With", "in": "header", "required": true, "schema": {"type": "string", "default": "Swagger API"}}], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"groupname": {"type": "string", "description": "Name of the group to be created"}}, "required": ["groupname"]}}}}}}, "/users/groups/": {"delete": {"tags": ["user group"], "operationId": "user group_delete", "summary": "Delete group", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "groupname", "in": "query", "description": "Name of the group to be deleted", "required": true, "schema": {"type": "string"}, "explode": false}]}, "get": {"tags": ["user group"], "operationId": "user group_info", "summary": "Get information about a specific group", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "groupname", "in": "query", "description": "Name of the group to fetch info about", "required": true, "schema": {"type": "string"}, "explode": false}]}}, "/users/groups//add/": {"put": {"tags": ["user group"], "operationId": "user group_add", "summary": "Add users to group", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"groupname": {"type": "string", "description": "Name of the group to add user(s) to"}, "usernames": {"type": "array", "description": "User(s) to add in the group"}}, "required": ["groupname"]}}}}}}, "/users/groups//remove/": {"put": {"tags": ["user group"], "operationId": "user group_remove", "summary": "Remove users from group", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"groupname": {"type": "string", "description": "Name of the group to remove user(s) from"}, "usernames": {"type": "array", "description": "User(s) to remove from the group"}}, "required": ["groupname"]}}}}}}, "/users/permissions": {"get": {"tags": ["user permission"], "operationId": "user permission_list", "summary": "List permissions and corresponding accesses", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "apps", "in": "query", "description": "Apps to list permission for (all by default)", "required": false, "schema": {"type": "array"}, "explode": true}, {"name": "short", "in": "query", "description": "Only list permission names", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "full", "in": "query", "description": "Display all info known about each permission, including the full user list of each group it is granted to.", "required": false, "schema": {"type": "boolean"}, "explode": false}]}}, "/users/permissions/": {"get": {"tags": ["user permission"], "operationId": "user permission_info", "summary": "Get information about a specific permission", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "permission", "in": "query", "description": "Name of the permission to fetch info about (use \"yunohost user permission list\" and \"yunohost user permission -f\" to see all the current permissions)", "required": true, "schema": {"type": "string"}, "explode": false}]}, "put": {"tags": ["user permission"], "operationId": "user permission_update", "summary": "Manage group or user permissions", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"permission": {"type": "string", "description": "Permission to manage (e.g. mail or nextcloud or wordpress.editors) (use \"yunohost user permission list\" and \"yunohost user permission -f\" to see all the current permissions)"}, "label": {"type": "string", "description": "Label for this permission. This label will be shown on the SSO and in the admin"}, "show_tile": {"type": "string", "description": "Define if a tile will be shown in the SSO", "enum": ["True", "False"]}}, "required": ["permission"]}}}}}, "delete": {"tags": ["user permission"], "operationId": "user permission_reset", "summary": "Reset allowed groups to the default (all_users) for a given permission", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "permission", "in": "query", "description": "Permission to manage (e.g. mail or nextcloud or wordpress.editors) (use \"yunohost user permission list\" and \"yunohost user permission -f\" to see all the current permissions)", "required": true, "schema": {"type": "string"}, "explode": false}]}}, "/users/permissions//add/": {"put": {"tags": ["user permission"], "operationId": "user permission_add", "summary": "Grant permission to group or user", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"permission": {"type": "string", "description": "Permission to manage (e.g. mail or nextcloud or wordpress.editors) (use \"yunohost user permission list\" and \"yunohost user permission -f\" to see all the current permissions)"}, "names": {"type": "array", "description": "Group or usernames to grant this permission to"}}, "required": ["permission"]}}}}}}, "/users/permissions//remove/": {"put": {"tags": ["user permission"], "operationId": "user permission_remove", "summary": "Revoke permission to group or user", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"permission": {"type": "string", "description": "Permission to manage (e.g. mail or nextcloud or wordpress.editors) (use \"yunohost user permission list\" and \"yunohost user permission -f\" to see all the current permissions)"}, "names": {"type": "array", "description": "Group or usernames to revoke this permission to"}}, "required": ["permission"]}}}}}}, "/users/ssh/keys": {"get": {"tags": ["user ssh"], "operationId": "user ssh_list-keys", "summary": "Show user's authorized ssh keys", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "username", "in": "query", "description": "Username of the user", "required": true, "schema": {"type": "string"}, "explode": false}]}}, "/users/ssh/key": {"post": {"tags": ["user ssh"], "operationId": "user ssh_add-key", "summary": "Add a new authorized ssh key for this user", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "X-Requested-With", "in": "header", "required": true, "schema": {"type": "string", "default": "Swagger API"}}], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"username": {"type": "string", "description": "Username of the user"}, "key": {"type": "string", "description": "The key to be added"}, "comment": {"type": "string", "description": "Optional comment about the key"}}, "required": ["username", "key"]}}}}}, "delete": {"tags": ["user ssh"], "operationId": "user ssh_remove-key", "summary": "Remove an authorized ssh key for this user", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "username", "in": "query", "description": "Username of the user", "required": true, "schema": {"type": "string"}, "explode": false}, {"name": "key", "in": "query", "description": "The key to be removed", "required": true, "schema": {"type": "string"}, "explode": false}]}}, "/domains": {"get": {"tags": ["domain"], "operationId": "domain_list", "summary": "List domains", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "exclude_subdomains", "in": "query", "description": "Filter out domains that are obviously subdomains of other declared domains", "required": false, "schema": {"type": "boolean"}, "explode": false}]}, "post": {"tags": ["domain"], "operationId": "domain_add", "summary": "Create a custom domain", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "X-Requested-With", "in": "header", "required": true, "schema": {"type": "string", "default": "Swagger API"}}], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"domain": {"type": "string", "description": "Domain name to add"}, "dyndns": {"type": "boolean", "description": "Subscribe to the DynDNS service"}}, "required": ["domain"]}}}}}}, "/domains/": {"delete": {"tags": ["domain"], "operationId": "domain_remove", "summary": "Delete domains", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "domain", "in": "query", "description": "Domain to delete", "required": true, "schema": {"type": "string"}, "explode": false}, {"name": "remove_apps", "in": "query", "description": "Remove apps installed on the domain", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "force", "in": "query", "description": "Do not ask confirmation to remove apps", "required": false, "schema": {"type": "boolean"}, "explode": false}]}}, "/domains/main": {"get": {"tags": ["domain"], "operationId": "domain_main-domain", "summary": "Check the current main domain, or change it", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "new_main_domain", "in": "query", "description": "Change the current main domain", "required": false, "schema": {"type": "string"}, "explode": false}]}}, "/domains//main": {"put": {"tags": ["domain"], "operationId": "domain_main-domain_1", "summary": "Check the current main domain, or change it", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"new_main_domain": {"type": "string", "description": "Change the current main domain"}}, "required": []}}}}}}, "/domain//urlavailable": {"get": {"tags": ["domain"], "operationId": "domain_url-available", "summary": "Check availability of a web path", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "domain", "in": "query", "description": "The domain for the web path (e.g. your.domain.tld)", "required": true, "schema": {"type": "string"}, "explode": false}, {"name": "path", "in": "query", "description": "The path to check (e.g. /coffee)", "required": true, "schema": {"type": "string"}, "explode": false}]}}, "/domains//config": {"get": {"tags": ["domain config"], "operationId": "domain config_get", "summary": "Display a domain configuration", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "domain", "in": "query", "description": "Domain name", "required": true, "schema": {"type": "string"}, "explode": false}, {"name": "key", "in": "query", "description": "A specific panel, section or a question identifier", "required": false, "schema": {"type": "string"}, "explode": false}, {"name": "full", "in": "query", "description": "Display all details (meant to be used by the API)", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "export", "in": "query", "description": "Only export key/values, meant to be reimported using \"config set --args-file\"", "required": false, "schema": {"type": "boolean"}, "explode": false}]}, "put": {"tags": ["domain config"], "operationId": "domain config_set", "summary": "Apply a new configuration", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"domain": {"type": "string", "description": "Domain name"}, "key": {"type": "string", "description": "The question or form key"}, "value": {"type": "string", "description": "new value"}, "args": {"type": "string", "description": "Serialized arguments for new configuration (i.e. \"mail_in=0&mail_out=0\")"}}, "required": ["domain"]}}}}}}, "/domains//dns": {"get": {"tags": ["domain dns"], "operationId": "domain dns_suggest", "summary": "Generate sample DNS configuration for a domain", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "domain", "in": "query", "description": "Target domain", "required": true, "schema": {"type": "string"}, "explode": false}]}}, "/domains//dns/suggest": {"get": {"tags": ["domain dns"], "operationId": "domain dns_suggest_1", "summary": "Generate sample DNS configuration for a domain", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "domain", "in": "query", "description": "Target domain", "required": true, "schema": {"type": "string"}, "explode": false}]}}, "/domains//dns/push": {"post": {"tags": ["domain dns"], "operationId": "domain dns_push", "summary": "Push DNS records to registrar", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "X-Requested-With", "in": "header", "required": true, "schema": {"type": "string", "default": "Swagger API"}}], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"domain": {"type": "string", "description": "Domain name to push DNS conf for"}, "dry_run": {"type": "boolean", "description": "Only display what's to be pushed"}, "force": {"type": "boolean", "description": "Also update/remove records which were not originally set by Yunohost, or which have been manually modified"}, "purge": {"type": "boolean", "description": "Delete all records"}}, "required": ["domain"]}}}}}}, "/domains//cert": {"get": {"tags": ["domain cert"], "operationId": "domain cert_status", "summary": "List status of current certificates (all by default).", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "domain_list", "in": "query", "description": "Domains to check", "required": false, "schema": {"type": "array"}, "explode": true}, {"name": "full", "in": "query", "description": "Show more details", "required": false, "schema": {"type": "boolean"}, "explode": false}]}, "put": {"tags": ["domain cert"], "operationId": "domain cert_install", "summary": "Install Let's Encrypt certificates for given domains (all by default).", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"domain_list": {"type": "array", "description": "Domains for which to install the certificates"}, "force": {"type": "boolean", "description": "Install even if current certificate is not self-signed"}, "no_checks": {"type": "boolean", "description": "Does not perform any check that your domain seems correctly configured (DNS, reachability) before attempting to install. (Not recommended)"}, "self_signed": {"type": "boolean", "description": "Install self-signed certificate instead of Let's Encrypt"}}, "required": []}}}}}}, "/domains//cert/renew": {"put": {"tags": ["domain cert"], "operationId": "domain cert_renew", "summary": "Renew the Let's Encrypt certificates for given domains (all by default).", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"domain_list": {"type": "array", "description": "Domains for which to renew the certificates"}, "force": {"type": "boolean", "description": "Ignore the validity threshold (30 days)"}, "email": {"type": "boolean", "description": "Send an email to root with logs if some renewing fails"}, "no_checks": {"type": "boolean", "description": "Does not perform any check that your domain seems correctly configured (DNS, reachability) before attempting to renew. (Not recommended)"}}, "required": []}}}}}}, "/apps/catalog": {"get": {"tags": ["app"], "operationId": "app_catalog", "summary": "Show the catalog of installable application", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "full", "in": "query", "description": "Display all details, including the app manifest and various other infos", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "with_categories", "in": "query", "description": "Also return a list of app categories", "required": false, "schema": {"type": "boolean"}, "explode": false}]}}, "/apps/manifest": {"get": {"tags": ["app"], "operationId": "app_manifest", "summary": "Return the manifest of a given app from the catalog, or from a remote git repo", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "app", "in": "query", "description": "Name, local path or git URL of the app to fetch the manifest of", "required": true, "schema": {"type": "string"}, "explode": false}]}}, "/apps": {"get": {"tags": ["app"], "operationId": "app_list", "summary": "List installed apps", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "full", "in": "query", "description": "Display all details, including the app manifest and various other infos", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "upgradable", "in": "query", "description": "List only apps that can upgrade to a newer version", "required": false, "schema": {"type": "boolean"}, "explode": false}]}, "post": {"tags": ["app"], "operationId": "app_install", "summary": "Install apps", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "X-Requested-With", "in": "header", "required": true, "schema": {"type": "string", "default": "Swagger API"}}], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"app": {"type": "string", "description": "Name, local path or git URL of the app to install"}, "label": {"type": "string", "description": "Custom name for the app"}, "args": {"type": "string", "description": "Serialized arguments for app script (i.e. \"domain=domain.tld&path=/path\")"}, "no_remove_on_failure": {"type": "boolean", "description": "Debug option to avoid removing the app on a failed installation"}, "force": {"type": "boolean", "description": "Do not ask confirmation if the app is not safe to use (low quality, experimental or 3rd party)"}}, "required": ["app"]}}}}}}, "/apps/": {"get": {"tags": ["app"], "operationId": "app_info", "summary": "Show infos about a specific installed app", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "app", "in": "query", "description": "Specific app ID", "required": true, "schema": {"type": "string"}, "explode": false}, {"name": "full", "in": "query", "description": "Display all details, including the app manifest and various other infos", "required": false, "schema": {"type": "boolean"}, "explode": false}]}, "delete": {"tags": ["app"], "operationId": "app_remove", "summary": "Remove app", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "app", "in": "query", "description": "App to remove", "required": true, "schema": {"type": "string"}, "explode": false}, {"name": "purge", "in": "query", "description": "Also remove all application data", "required": false, "schema": {"type": "boolean"}, "explode": false}]}}, "/apps/map": {"get": {"tags": ["app"], "operationId": "app_map", "summary": "Show the mapping between urls and apps", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "app", "in": "query", "description": "Specific app to map", "required": false, "schema": {"type": "string"}, "explode": false}, {"name": "raw", "in": "query", "description": "Return complete dict", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "user", "in": "query", "description": "Allowed app map for a user", "required": false, "schema": {"type": "string"}, "explode": false}]}}, "/apps//upgrade": {"put": {"tags": ["app"], "operationId": "app_upgrade", "summary": "Upgrade app", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"app": {"type": "array", "description": "App(s) to upgrade (default all)"}, "url": {"type": "string", "description": "Git url to fetch for upgrade"}, "file": {"type": "string", "description": "Folder or tarball for upgrade"}, "force": {"type": "boolean", "description": "Force the update, even though the app is up to date"}, "no_safety_backup": {"type": "boolean", "description": "Disable the safety backup during upgrade"}}, "required": []}}}}}}, "/apps//changeurl": {"put": {"tags": ["app"], "operationId": "app_change-url", "summary": "Change app's URL", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"app": {"type": "string", "description": "Target app instance name"}, "domain": {"type": "string", "description": "New app domain on which the application will be moved"}, "path": {"type": "string", "description": "New path at which the application will be moved"}}, "required": ["app"]}}}}}}, "/apps//settings": {"get": {"tags": ["app"], "operationId": "app_setting", "summary": "Set or get an app setting value", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "app", "in": "query", "description": "App ID", "required": true, "schema": {"type": "string"}, "explode": false}, {"name": "key", "in": "query", "description": "Key to get/set", "required": true, "schema": {"type": "string"}, "explode": false}, {"name": "value", "in": "query", "description": "Value to set", "required": false, "schema": {"type": "string"}, "explode": false}, {"name": "delete", "in": "query", "description": "Delete the key", "required": false, "schema": {"type": "boolean"}, "explode": false}]}}, "/apps//default": {"put": {"tags": ["app"], "operationId": "app_makedefault", "summary": "Redirect domain root to an app", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"app": {"type": "string", "description": "App name to put on domain root"}, "domain": {"type": "string", "description": "Specific domain to put app on (the app domain by default)"}, "undo": {"type": "boolean", "description": "Undo redirection"}}, "required": ["app"]}}}}}}, "/apps//label": {"put": {"tags": ["app"], "operationId": "app_change-label", "summary": "Change app label", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"app": {"type": "string", "description": "App ID"}, "new_label": {"type": "string", "description": "New app label"}}, "required": ["app", "new_label"]}}}}}}, "/apps//actions": {"get": {"tags": ["app action"], "operationId": "app action_list", "summary": "List app actions", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "app", "in": "query", "description": "App name", "required": true, "schema": {"type": "string"}, "explode": false}]}}, "/apps//actions/": {"put": {"tags": ["app action"], "operationId": "app action_run", "summary": "Run app action", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"app": {"type": "string", "description": "App name"}, "action": {"type": "string", "description": "action id"}, "args": {"type": "string", "description": "Serialized arguments for app script (i.e. \"domain=domain.tld&path=/path\")"}}, "required": ["app", "action"]}}}}}}, "/apps//config-panel": {"get": {"tags": ["app config"], "operationId": "app config_get", "summary": "Display an app configuration", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "app", "in": "query", "description": "App name", "required": true, "schema": {"type": "string"}, "explode": false}, {"name": "key", "in": "query", "description": "A specific panel, section or a question identifier", "required": false, "schema": {"type": "string"}, "explode": false}, {"name": "full", "in": "query", "description": "Display all details (meant to be used by the API)", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "export", "in": "query", "description": "Only export key/values, meant to be reimported using \"config set --args-file\"", "required": false, "schema": {"type": "boolean"}, "explode": false}]}}, "/apps//config": {"put": {"tags": ["app config"], "operationId": "app config_set", "summary": "Apply a new configuration", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"app": {"type": "string", "description": "App name"}, "key": {"type": "string", "description": "The question or panel key"}, "value": {"type": "string", "description": "new value"}, "args": {"type": "string", "description": "Serialized arguments for new configuration (i.e. \"domain=domain.tld&path=/path\")"}, "args_file": {"type": "file", "description": "YAML or JSON file with key/value couples"}}, "required": ["app"]}}}}}}, "/backups": {"post": {"tags": ["backup"], "operationId": "backup_create", "summary": "Create a backup local archive. If neither --apps or --system are given, this will backup all apps and all system parts. If only --apps if given, this will only backup apps and no system parts. Similarly, if only --system is given, this will only backup system parts and no apps.", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "X-Requested-With", "in": "header", "required": true, "schema": {"type": "string", "default": "Swagger API"}}], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"name": {"type": "string", "description": "Name of the backup archive"}, "description": {"type": "string", "description": "Short description of the backup"}, "output_directory": {"type": "string", "description": "Output directory for the backup"}, "methods": {"type": "array", "description": "List of backup methods to apply (copy or tar by default)"}, "system": {"type": "array", "description": "List of system parts to backup (or all if none given)."}, "apps": {"type": "array", "description": "List of application names to backup (or all if none given)"}, "dry_run": {"type": "boolean", "description": "'Simulate' the backup and return the size details per item to backup"}}, "required": []}}}}}, "get": {"tags": ["backup"], "operationId": "backup_list", "summary": "List available local backup archives", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "with_info", "in": "query", "description": "Show backup information for each archive", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "human_readable", "in": "query", "description": "Print sizes in human readable format", "required": false, "schema": {"type": "boolean"}, "explode": false}]}}, "/backups//restore": {"put": {"tags": ["backup"], "operationId": "backup_restore", "summary": "Restore from a local backup archive. If neither --apps or --system are given, this will restore all apps and all system parts in the archive. If only --apps if given, this will only restore apps and no system parts. Similarly, if only --system is given, this will only restore system parts and no apps.", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"name": {"type": "string", "description": "Name of the local backup archive"}, "system": {"type": "array", "description": "List of system parts to restore (or all if none is given)"}, "apps": {"type": "array", "description": "List of application names to restore (or all if none is given)"}, "force": {"type": "boolean", "description": "Force restauration on an already installed system"}}, "required": ["name"]}}}}}}, "/backups/": {"get": {"tags": ["backup"], "operationId": "backup_info", "summary": "Show info about a local backup archive", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "name", "in": "query", "description": "Name of the local backup archive", "required": true, "schema": {"type": "string"}, "explode": false}, {"name": "with_details", "in": "query", "description": "Show additional backup information", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "human_readable", "in": "query", "description": "Print sizes in human readable format", "required": false, "schema": {"type": "boolean"}, "explode": false}]}, "delete": {"tags": ["backup"], "operationId": "backup_delete", "summary": "Delete a backup archive", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "name", "in": "query", "description": "Name of the archive to delete", "required": true, "schema": {"type": "string"}, "explode": false}]}}, "/backups//download": {"get": {"tags": ["backup"], "operationId": "backup_download", "summary": "(API only) Request to download the file", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "name", "in": "query", "description": "Name of the local backup archive", "required": true, "schema": {"type": "string"}, "explode": false}]}}, "/settings": {"get": {"tags": ["settings"], "operationId": "settings_list", "summary": "list all entries of the settings", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": []}, "delete": {"tags": ["settings"], "operationId": "settings_reset-all", "summary": "reset all settings to their default value", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": []}}, "/settings/": {"get": {"tags": ["settings"], "operationId": "settings_get", "summary": "get an entry value in the settings", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "key", "in": "query", "description": "Settings key", "required": true, "schema": {"type": "string"}, "explode": false}, {"name": "full", "in": "query", "description": "Show more details", "required": false, "schema": {"type": "boolean"}, "explode": false}]}, "post": {"tags": ["settings"], "operationId": "settings_set", "summary": "set an entry value in the settings", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "X-Requested-With", "in": "header", "required": true, "schema": {"type": "string", "default": "Swagger API"}}], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"key": {"type": "string", "description": "Settings key"}, "value": {"type": "string", "description": "new value"}}, "required": ["key"]}}}}}, "delete": {"tags": ["settings"], "operationId": "settings_reset", "summary": "set an entry value to its default one", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "key", "in": "query", "description": "Settings key", "required": true, "schema": {"type": "string"}, "explode": false}]}}, "/services//start": {"put": {"tags": ["service"], "operationId": "service_start", "summary": "Start one or more services", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"names": {"type": "array", "description": "Service name to start"}}, "required": ["names"]}}}}}}, "/services//stop": {"put": {"tags": ["service"], "operationId": "service_stop", "summary": "Stop one or more services", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"names": {"type": "array", "description": "Service name to stop"}}, "required": ["names"]}}}}}}, "/services//restart": {"put": {"tags": ["service"], "operationId": "service_restart", "summary": "Restart one or more services. If the services are not running yet, they will be started.", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"names": {"type": "array", "description": "Service name to restart"}}, "required": ["names"]}}}}}}, "/services//enable": {"put": {"tags": ["service"], "operationId": "service_enable", "summary": "Enable one or more services", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"names": {"type": "array", "description": "Service name to enable"}}, "required": ["names"]}}}}}}, "/services//disable": {"put": {"tags": ["service"], "operationId": "service_disable", "summary": "Disable one or more services", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"names": {"type": "array", "description": "Service name to disable"}}, "required": ["names"]}}}}}}, "/services": {"get": {"tags": ["service"], "operationId": "service_status", "summary": "Show status information about one or more services (all by default)", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "names", "in": "query", "description": "Service name to show", "required": false, "schema": {"type": "array"}, "explode": true}]}}, "/services/": {"get": {"tags": ["service"], "operationId": "service_status_1", "summary": "Show status information about one or more services (all by default)", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "names", "in": "query", "description": "Service name to show", "required": false, "schema": {"type": "array"}, "explode": true}]}}, "/services//log": {"get": {"tags": ["service"], "operationId": "service_log", "summary": "Log every log files of a service", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "name", "in": "query", "description": "Service name to log", "required": true, "schema": {"type": "string"}, "explode": false}, {"name": "number", "in": "query", "description": "Number of lines to display", "required": false, "schema": {"type": "int", "default": 50}, "explode": false}]}}, "/firewall": {"get": {"tags": ["firewall"], "operationId": "firewall_list", "summary": "List all firewall rules", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "raw", "in": "query", "description": "Return the complete YAML dict", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "by_ip_version", "in": "query", "description": "List rules by IP version", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "list_forwarded", "in": "query", "description": "List forwarded ports with UPnP", "required": false, "schema": {"type": "boolean"}, "explode": false}]}}, "/firewall//allow/": {"put": {"tags": ["firewall"], "operationId": "firewall_allow", "summary": "Allow connections on a port", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"protocol": {"type": "string", "description": "Protocol type to allow (TCP/UDP/Both)", "enum": ["TCP", "UDP", "Both"], "default": "TCP"}, "port": {"type": "string", "description": "Port or range of ports to open"}, "ipv4_only": {"type": "boolean", "description": "Only add a rule for IPv4 connections"}, "ipv6_only": {"type": "boolean", "description": "Only add a rule for IPv6 connections"}, "no_upnp": {"type": "boolean", "description": "Do not add forwarding of this port with UPnP"}, "no_reload": {"type": "boolean", "description": "Do not reload firewall rules"}}, "required": ["protocol", "port"]}}}}}}, "/firewall//disallow/": {"put": {"tags": ["firewall"], "operationId": "firewall_disallow", "summary": "Disallow connections on a port", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"protocol": {"type": "string", "description": "Protocol type to allow (TCP/UDP/Both)", "enum": ["TCP", "UDP", "Both"], "default": "TCP"}, "port": {"type": "string", "description": "Port or range of ports to close"}, "ipv4_only": {"type": "boolean", "description": "Only remove the rule for IPv4 connections"}, "ipv6_only": {"type": "boolean", "description": "Only remove the rule for IPv6 connections"}, "upnp_only": {"type": "boolean", "description": "Only remove forwarding of this port with UPnP"}, "no_reload": {"type": "boolean", "description": "Do not reload firewall rules"}}, "required": ["protocol", "port"]}}}}}}, "/firewall/upnp/": {"put": {"tags": ["firewall"], "operationId": "firewall_upnp", "summary": "Manage port forwarding using UPnP", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"action": {"type": "string", "description": "", "enum": ["enable", "disable", "status", "reload"], "default": "status"}, "no_refresh": {"type": "boolean", "description": "Do not refresh port forwarding"}}, "required": []}}}}}}, "/adminpw": {"put": {"tags": ["tools"], "operationId": "tools_adminpw", "summary": "Change password of admin and root users", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"new_password": {"type": "string", "description": ""}}, "required": []}}}}}}, "/postinstall": {"post": {"tags": ["tools"], "operationId": "tools_postinstall", "summary": "YunoHost post-install", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "X-Requested-With", "in": "header", "required": true, "schema": {"type": "string", "default": "Swagger API"}}], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"domain": {"type": "string", "description": "YunoHost main domain"}, "password": {"type": "string", "description": "YunoHost admin password"}, "ignore_dyndns": {"type": "boolean", "description": "Do not subscribe domain to a DynDNS service"}, "force_password": {"type": "boolean", "description": "Use this if you really want to set a weak password"}, "force_diskspace": {"type": "boolean", "description": "Use this if you really want to install YunoHost on a setup with less than 10 GB on the root filesystem"}}, "required": []}}}}}}, "/update/": {"put": {"tags": ["tools"], "operationId": "tools_update", "summary": "YunoHost update", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"target": {"type": "string", "description": "What to update, \"apps\" (application catalog) or \"system\" (fetch available package upgrades, equivalent to apt update), \"all\" for both", "enum": ["apps", "system", "all"], "default": "all"}}, "required": []}}}}}}, "/upgrade/": {"put": {"tags": ["tools"], "operationId": "tools_upgrade", "summary": "YunoHost upgrade", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"target": {"type": "string", "description": "What to upgrade, either \"apps\" (all apps) or \"system\" (all system packages)", "enum": ["apps", "system"]}}, "required": []}}}}}}, "/shutdown": {"put": {"tags": ["tools"], "operationId": "tools_shutdown", "summary": "Shutdown the server", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"force": {"type": "boolean", "description": "skip the shutdown confirmation"}}, "required": []}}}}}}, "/reboot": {"put": {"tags": ["tools"], "operationId": "tools_reboot", "summary": "Reboot the server", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"force": {"type": "boolean", "description": "skip the reboot confirmation"}}, "required": []}}}}}}, "/regenconf": {"put": {"tags": ["tools"], "operationId": "tools_regen-conf", "summary": "Regenerate the configuration file(s)", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"names": {"type": "array", "description": "Categories to regenerate configuration of (all by default)"}, "with_diff": {"type": "boolean", "description": "Show differences in case of configuration changes"}, "force": {"type": "boolean", "description": "Override all manual modifications in configuration files"}, "dry_run": {"type": "boolean", "description": "Show what would have been regenerated"}, "list_pending": {"type": "boolean", "description": "List pending configuration files and exit"}}, "required": []}}}}}}, "/regenconf/": {"put": {"tags": ["tools"], "operationId": "tools_regen-conf_1", "summary": "Regenerate the configuration file(s)", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"names": {"type": "array", "description": "Categories to regenerate configuration of (all by default)"}, "with_diff": {"type": "boolean", "description": "Show differences in case of configuration changes"}, "force": {"type": "boolean", "description": "Override all manual modifications in configuration files"}, "dry_run": {"type": "boolean", "description": "Show what would have been regenerated"}, "list_pending": {"type": "boolean", "description": "List pending configuration files and exit"}}, "required": []}}}}}}, "/versions": {"get": {"tags": ["tools"], "operationId": "tools_versions", "summary": "Display YunoHost's packages versions", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": []}}, "/migrations": {"get": {"tags": ["tools migrations"], "operationId": "tools migrations_list", "summary": "List migrations", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "pending", "in": "query", "description": "list only pending migrations", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "done", "in": "query", "description": "list only migrations already performed", "required": false, "schema": {"type": "boolean"}, "explode": false}]}, "put": {"tags": ["tools migrations"], "operationId": "tools migrations_run", "summary": "Run migrations", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"targets": {"type": "array", "description": "Migrations to run (all pendings by default)"}, "skip": {"type": "boolean", "description": "Skip specified migrations (to be used only if you know what you are doing)"}, "force_rerun": {"type": "boolean", "description": "Re-run already-ran specified migration (to be used only if you know what you are doing)"}, "auto": {"type": "boolean", "description": "Automatic mode, won't run manual migrations (to be used only if you know what you are doing)"}, "accept_disclaimer": {"type": "boolean", "description": "Accept disclaimers of migrations (please read them before using this option)"}}, "required": []}}}}}}, "/migrations/": {"put": {"tags": ["tools migrations"], "operationId": "tools migrations_run_1", "summary": "Run migrations", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"targets": {"type": "array", "description": "Migrations to run (all pendings by default)"}, "skip": {"type": "boolean", "description": "Skip specified migrations (to be used only if you know what you are doing)"}, "force_rerun": {"type": "boolean", "description": "Re-run already-ran specified migration (to be used only if you know what you are doing)"}, "auto": {"type": "boolean", "description": "Automatic mode, won't run manual migrations (to be used only if you know what you are doing)"}, "accept_disclaimer": {"type": "boolean", "description": "Accept disclaimers of migrations (please read them before using this option)"}}, "required": []}}}}}}, "/hooks/": {"get": {"tags": ["hook"], "operationId": "hook_list", "summary": "List available hooks for an action", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "action", "in": "query", "description": "Action name", "required": true, "schema": {"type": "string"}, "explode": false}, {"name": "list_by", "in": "query", "description": "Property to list hook by", "required": false, "schema": {"type": "string", "enum": ["name", "priority", "folder"], "default": "name"}, "explode": false}, {"name": "show_info", "in": "query", "description": "Show hook information", "required": false, "schema": {"type": "boolean"}, "explode": false}]}}, "/logs": {"get": {"tags": ["log"], "operationId": "log_list", "summary": "List logs", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "limit", "in": "query", "description": "Maximum number of operations to list (default to 50)", "required": false, "schema": {"type": "int", "default": 50}, "explode": false}, {"name": "with_details", "in": "query", "description": "Show additional infos (e.g. operation success) but may significantly increase command time. Consider using --limit in combination with this.", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "with_suboperations", "in": "query", "description": "Include metadata about operations that are not the main operation but are sub-operations triggered by another ongoing operation... (e.g. initializing groups/permissions when installing an app)", "required": false, "schema": {"type": "boolean"}, "explode": false}]}}, "/logs/": {"get": {"tags": ["log"], "operationId": "log_show", "summary": "Display a log content", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "path", "in": "query", "description": "Log file which to display the content", "required": true, "schema": {"type": "string"}, "explode": false}, {"name": "number", "in": "query", "description": "Number of lines to display", "required": false, "schema": {"type": "int", "default": 50}, "explode": false}, {"name": "share", "in": "query", "description": "(Deprecated, see yunohost log share) Share the full log using yunopaste", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "filter_irrelevant", "in": "query", "description": "Do not show some lines deemed not relevant (like set +x or helper argument parsing)", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "with_suboperations", "in": "query", "description": "Include metadata about sub-operations of this operation... (e.g. initializing groups/permissions when installing an app)", "required": false, "schema": {"type": "boolean"}, "explode": false}]}}, "/logs//share": {"get": {"tags": ["log"], "operationId": "log_share", "summary": "Share the full log on yunopaste (alias to show --share)", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "path", "in": "query", "description": "Log file to share", "required": true, "schema": {"type": "string"}, "explode": false}]}}, "/diagnosis/categories": {"get": {"tags": ["diagnosis"], "operationId": "diagnosis_list", "summary": "List diagnosis categories", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": []}}, "/diagnosis": {"get": {"tags": ["diagnosis"], "operationId": "diagnosis_show", "summary": "Show most recents diagnosis results", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "categories", "in": "query", "description": "Diagnosis categories to display (all by default)", "required": false, "schema": {"type": "array"}, "explode": true}, {"name": "full", "in": "query", "description": "Display additional information", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "issues", "in": "query", "description": "Only display issues", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "share", "in": "query", "description": "Share the logs using yunopaste", "required": false, "schema": {"type": "boolean"}, "explode": false}, {"name": "human_readable", "in": "query", "description": "Show a human-readable output", "required": false, "schema": {"type": "boolean"}, "explode": false}]}}, "/diagnosis/": {"get": {"tags": ["diagnosis"], "operationId": "diagnosis_get", "summary": "Low-level command to fetch raw data and status about a specific diagnosis test", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [{"name": "category", "in": "query", "description": "Diagnosis category to fetch results from", "required": true, "schema": {"type": "string"}, "explode": false}, {"name": "item", "in": "query", "description": "List of criteria describing the test. Must correspond exactly to the 'meta' infos in 'yunohost diagnosis show'", "required": false, "schema": {"type": "array"}, "explode": true}]}}, "/diagnosis/run": {"put": {"tags": ["diagnosis"], "operationId": "diagnosis_run", "summary": "Run diagnosis", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"categories": {"type": "array", "description": "Diagnosis categories to run (all by default)"}, "force": {"type": "boolean", "description": "Ignore the cached report even if it is still 'fresh'"}, "except_if_never_ran_yet": {"type": "boolean", "description": "Don't run anything if diagnosis never ran yet ... (this is meant to be used by the webadmin)"}, "email": {"type": "boolean", "description": "Send an email to root with issues found (this is meant to be used by cron job)"}}, "required": []}}}}}}, "/diagnosis/ignore": {"put": {"tags": ["diagnosis"], "operationId": "diagnosis_ignore", "summary": "Configure some diagnosis results to be ignored and therefore not considered as actual issues", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"filter": {"type": "array", "description": "Add a filter. The first element should be a diagnosis category, and other criterias can be provided using the infos from the 'meta' sections in 'yunohost diagnosis show'. For example: 'dnsrecords domain=yolo.test category=xmpp'"}, "list": {"type": "boolean", "description": "List active ignore filters"}}, "required": []}}}}}}, "/diagnosis/unignore": {"put": {"tags": ["diagnosis"], "operationId": "diagnosis_unignore", "summary": "Configure some diagnosis results to be unignored and therefore considered as actual issues", "description": "", "responses": {"200": {"description": "successful operation"}}, "parameters": [], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"type": "object", "properties": {"filter": {"type": "array", "description": "Remove a filter (it should be an existing filter as listed with --list)"}}, "required": []}}}}}}}} \ No newline at end of file diff --git a/themes/yunohost-docs/js/simplebar.min.js b/themes/yunohost-docs/js/simplebar.min.js new file mode 100644 index 00000000..f016bf68 --- /dev/null +++ b/themes/yunohost-docs/js/simplebar.min.js @@ -0,0 +1,10 @@ +/** + * SimpleBar.js - v4.0.0-alpha.3 + * Scrollbars, simpler. + * https://grsmto.github.io/simplebar/ + * + * Made by Adrien Denat from a fork by Jonathan Nicol + * Under MIT License + */ + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).SimpleBar=e()}(this,function(){"use strict";var t=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t},e=function(t){try{return!!t()}catch(t){return!0}},i={}.toString,r=function(t){return i.call(t).slice(8,-1)},n="".split,s=e(function(){return!Object("z").propertyIsEnumerable(0)})?function(t){return"String"==r(t)?n.call(t,""):Object(t)}:Object,o=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},a=function(t){return Object(o(t))},l=Math.ceil,c=Math.floor,u=function(t){return isNaN(t=+t)?0:(t>0?c:l)(t)},h=Math.min,f=function(t){return t>0?h(u(t),9007199254740991):0},d=function(t){return"object"==typeof t?null!==t:"function"==typeof t},p=Array.isArray||function(t){return"Array"==r(t)},v="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function g(t,e){return t(e={exports:{}},e.exports),e.exports}var b,m,y,x,E="object"==typeof window&&window&&window.Math==Math?window:"object"==typeof self&&self&&self.Math==Math?self:Function("return this")(),w=!e(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),O=E.document,_=d(O)&&d(O.createElement),S=!w&&!e(function(){return 7!=Object.defineProperty((t="div",_?O.createElement(t):{}),"a",{get:function(){return 7}}).a;var t}),L=function(t){if(!d(t))throw TypeError(String(t)+" is not an object");return t},A=function(t,e){if(!d(t))return t;var i,r;if(e&&"function"==typeof(i=t.toString)&&!d(r=i.call(t)))return r;if("function"==typeof(i=t.valueOf)&&!d(r=i.call(t)))return r;if(!e&&"function"==typeof(i=t.toString)&&!d(r=i.call(t)))return r;throw TypeError("Can't convert object to primitive value")},M=Object.defineProperty,k={f:w?M:function(t,e,i){if(L(t),e=A(e,!0),L(i),S)try{return M(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported");return"value"in i&&(t[e]=i.value),t}},W=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},T=w?function(t,e,i){return k.f(t,e,W(1,i))}:function(t,e,i){return t[e]=i,t},j=function(t,e){try{T(E,t,e)}catch(i){E[t]=e}return e},R=g(function(t){var e=E["__core-js_shared__"]||j("__core-js_shared__",{});(t.exports=function(t,i){return e[t]||(e[t]=void 0!==i?i:{})})("versions",[]).push({version:"3.0.1",mode:"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})}),N=0,z=Math.random(),C=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++N+z).toString(36))},V=!e(function(){return!String(Symbol())}),D=R("wks"),B=E.Symbol,I=function(t){return D[t]||(D[t]=V&&B[t]||(V?B:C)("Symbol."+t))},P=I("species"),H=function(t,e){var i;return p(t)&&("function"!=typeof(i=t.constructor)||i!==Array&&!p(i.prototype)?d(i)&&null===(i=i[P])&&(i=void 0):i=void 0),new(void 0===i?Array:i)(0===e?0:e)},q=function(e,i){var r=1==e,n=2==e,o=3==e,l=4==e,c=6==e,u=5==e||c,h=i||H;return function(i,d,p){for(var v,g,b=a(i),m=s(b),y=function(e,i,r){if(t(e),void 0===i)return e;switch(r){case 0:return function(){return e.call(i)};case 1:return function(t){return e.call(i,t)};case 2:return function(t,r){return e.call(i,t,r)};case 3:return function(t,r,n){return e.call(i,t,r,n)}}return function(){return e.apply(i,arguments)}}(d,p,3),x=f(m.length),E=0,w=r?h(i,x):n?h(i,0):void 0;x>E;E++)if((u||E in m)&&(g=y(v=m[E],E,b),e))if(r)w[E]=g;else if(g)switch(e){case 3:return!0;case 5:return v;case 6:return E;case 2:w.push(v)}else if(l)return!1;return c?-1:o||l?l:w}},F=I("species"),$={}.propertyIsEnumerable,X=Object.getOwnPropertyDescriptor,Y={f:X&&!$.call({1:2},1)?function(t){var e=X(this,t);return!!e&&e.enumerable}:$},G=function(t){return s(o(t))},K={}.hasOwnProperty,U=function(t,e){return K.call(t,e)},J=Object.getOwnPropertyDescriptor,Q={f:w?J:function(t,e){if(t=G(t),e=A(e,!0),S)try{return J(t,e)}catch(t){}if(U(t,e))return W(!Y.f.call(t,e),t[e])}},Z=R("native-function-to-string",Function.toString),tt=E.WeakMap,et="function"==typeof tt&&/native code/.test(Z.call(tt)),it=R("keys"),rt={},nt=E.WeakMap;if(et){var st=new nt,ot=st.get,at=st.has,lt=st.set;b=function(t,e){return lt.call(st,t,e),e},m=function(t){return ot.call(st,t)||{}},y=function(t){return at.call(st,t)}}else{var ct=it[x="state"]||(it[x]=C(x));rt[ct]=!0,b=function(t,e){return T(t,ct,e),e},m=function(t){return U(t,ct)?t[ct]:{}},y=function(t){return U(t,ct)}}var ut,ht,ft={set:b,get:m,has:y,enforce:function(t){return y(t)?m(t):b(t,{})},getterFor:function(t){return function(e){var i;if(!d(e)||(i=m(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return i}}},dt=g(function(t){var e=ft.get,i=ft.enforce,r=String(Z).split("toString");R("inspectSource",function(t){return Z.call(t)}),(t.exports=function(t,e,n,s){var o=!!s&&!!s.unsafe,a=!!s&&!!s.enumerable,l=!!s&&!!s.noTargetGet;"function"==typeof n&&("string"!=typeof e||U(n,"name")||T(n,"name",e),i(n).source=r.join("string"==typeof e?e:"")),t!==E?(o?!l&&t[e]&&(a=!0):delete t[e],a?t[e]=n:T(t,e,n)):a?t[e]=n:j(e,n)})(Function.prototype,"toString",function(){return"function"==typeof this&&e(this).source||Z.call(this)})}),pt=Math.max,vt=Math.min,gt=(ut=!1,function(t,e,i){var r,n=G(t),s=f(n.length),o=function(t,e){var i=u(t);return i<0?pt(i+e,0):vt(i,e)}(i,s);if(ut&&e!=e){for(;s>o;)if((r=n[o++])!=r)return!0}else for(;s>o;o++)if((ut||o in n)&&n[o]===e)return ut||o||0;return!ut&&-1}),bt=function(t,e){var i,r=G(t),n=0,s=[];for(i in r)!U(rt,i)&&U(r,i)&&s.push(i);for(;e.length>n;)U(r,i=e[n++])&&(~gt(s,i)||s.push(i));return s},mt=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],yt=mt.concat("length","prototype"),xt={f:Object.getOwnPropertyNames||function(t){return bt(t,yt)}},Et={f:Object.getOwnPropertySymbols},wt=E.Reflect,Ot=wt&&wt.ownKeys||function(t){var e=xt.f(L(t)),i=Et.f;return i?e.concat(i(t)):e},_t=function(t,e){for(var i=Ot(e),r=k.f,n=Q.f,s=0;s=0:u>h;h+=d)h in c&&(n=i(n,c[h],h,l));return n}(this,e,arguments.length,arguments[1],!1)}});var Bt=k.f,It=Function.prototype,Pt=It.toString,Ht=/^\s*function ([^ (]*)/;!w||"name"in It||Bt(It,"name",{configurable:!0,get:function(){try{return Pt.call(this).match(Ht)[1]}catch(t){return""}}});var qt=Object.keys||function(t){return bt(t,mt)},Ft=Object.assign,$t=!Ft||e(function(){var t={},e={},i=Symbol();return t[i]=7,"abcdefghijklmnopqrst".split("").forEach(function(t){e[t]=t}),7!=Ft({},t)[i]||"abcdefghijklmnopqrst"!=qt(Ft({},e)).join("")})?function(t,e){for(var i=a(t),r=arguments.length,n=1,o=Et.f,l=Y.f;r>n;)for(var c,u=s(arguments[n++]),h=o?qt(u).concat(o(u)):qt(u),f=h.length,d=0;f>d;)l.call(u,c=h[d++])&&(i[c]=u[c]);return i}:Ft;Rt({target:"Object",stat:!0,forced:Object.assign!==$t},{assign:$t});var Xt="\t\n\v\f\r                 \u2028\u2029\ufeff",Yt="["+Xt+"]",Gt=RegExp("^"+Yt+Yt+"*"),Kt=RegExp(Yt+Yt+"*$"),Ut=E.parseInt,Jt=/^[-+]?0[xX]/,Qt=8!==Ut(Xt+"08")||22!==Ut(Xt+"0x16")?function(t,e){var i=function(t,e){return t=String(o(t)),1&e&&(t=t.replace(Gt,"")),2&e&&(t=t.replace(Kt,"")),t}(String(t),3);return Ut(i,e>>>0||(Jt.test(i)?16:10))}:Ut;Rt({global:!0,forced:parseInt!=Qt},{parseInt:Qt});var Zt,te,ee=RegExp.prototype.exec,ie=String.prototype.replace,re=ee,ne=(Zt=/a/,te=/b*/g,ee.call(Zt,"a"),ee.call(te,"a"),0!==Zt.lastIndex||0!==te.lastIndex),se=void 0!==/()??/.exec("")[1];(ne||se)&&(re=function(t){var e,i,r,n,s=this;return se&&(i=new RegExp("^"+s.source+"$(?!\\s)",function(){var t=L(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}.call(s))),ne&&(e=s.lastIndex),r=ee.call(s,t),ne&&r&&(s.lastIndex=s.global?r.index+r[0].length:e),se&&r&&r.length>1&&ie.call(r[0],i,function(){for(n=1;n=l?i?"":void 0:(r=s.charCodeAt(a))<55296||r>56319||a+1===l||(n=s.charCodeAt(a+1))<56320||n>57343?i?s.charAt(a):r:i?s.slice(a,a+2):n-56320+(r-55296<<10)+65536}(t,e,!0).length:1)},le=function(t,e){var i=t.exec;if("function"==typeof i){var n=i.call(t,e);if("object"!=typeof n)throw TypeError("RegExp exec method returned something other than an Object or null");return n}if("RegExp"!==r(t))throw TypeError("RegExp#exec called on incompatible receiver");return oe.call(t,e)},ce=I("species"),ue=!e(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")}),he=!e(function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var i="ab".split(t);return 2!==i.length||"a"!==i[0]||"b"!==i[1]}),fe=function(t,i,r,n){var s=I(t),o=!e(function(){var e={};return e[s]=function(){return 7},7!=""[t](e)}),a=o&&!e(function(){var e=!1,i=/a/;return i.exec=function(){return e=!0,null},"split"===t&&(i.constructor={},i.constructor[ce]=function(){return i}),i[s](""),!e});if(!o||!a||"replace"===t&&!ue||"split"===t&&!he){var l=/./[s],c=r(s,""[t],function(t,e,i,r,n){return e.exec===oe?o&&!n?{done:!0,value:l.call(e,i,r)}:{done:!0,value:t.call(i,e,r)}:{done:!1}}),u=c[0],h=c[1];dt(String.prototype,t,u),dt(RegExp.prototype,s,2==i?function(t,e){return h.call(t,this,e)}:function(t){return h.call(t,this)}),n&&T(RegExp.prototype[s],"sham",!0)}};fe("match",1,function(t,e,i){return[function(e){var i=o(this),r=null==e?void 0:e[t];return void 0!==r?r.call(e,i):new RegExp(e)[t](String(i))},function(t){var r=i(e,t,this);if(r.done)return r.value;var n=L(t),s=String(this);if(!n.global)return le(n,s);var o=n.unicode;n.lastIndex=0;for(var a,l=[],c=0;null!==(a=le(n,s));){var u=String(a[0]);l[c]=u,""===u&&(n.lastIndex=ae(s,f(n.lastIndex),o)),c++}return 0===c?null:l}]});var de=Math.max,pe=Math.min,ve=Math.floor,ge=/\$([$&`']|\d\d?|<[^>]*>)/g,be=/\$([$&`']|\d\d?)/g;fe("replace",2,function(t,e,i){return[function(i,r){var n=o(this),s=null==i?void 0:i[t];return void 0!==s?s.call(i,n,r):e.call(String(n),i,r)},function(t,n){var s=i(e,t,this,n);if(s.done)return s.value;var o=L(t),a=String(this),l="function"==typeof n;l||(n=String(n));var c=o.global;if(c){var h=o.unicode;o.lastIndex=0}for(var d=[];;){var p=le(o,a);if(null===p)break;if(d.push(p),!c)break;""===String(p[0])&&(o.lastIndex=ae(a,f(o.lastIndex),h))}for(var v,g="",b=0,m=0;m=b&&(g+=a.slice(b,x)+S,b=x+y.length)}return g+a.slice(b)}];function r(t,i,r,n,s,o){var l=r+t.length,c=n.length,u=be;return void 0!==s&&(s=a(s),u=ge),e.call(o,u,function(e,o){var a;switch(o.charAt(0)){case"$":return"$";case"&":return t;case"`":return i.slice(0,r);case"'":return i.slice(l);case"<":a=s[o.slice(1,-1)];break;default:var u=+o;if(0===u)return e;if(u>c){var h=ve(u/10);return 0===h?e:h<=c?void 0===n[h-1]?o.charAt(1):n[h-1]+o.charAt(1):e}a=n[u-1]}return void 0===a?"":a})}});for(var me in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var ye=E[me],xe=ye&&ye.prototype;if(xe&&xe.forEach!==Dt)try{T(xe,"forEach",Dt)}catch(t){xe.forEach=Dt}}var Ee=g(function(t,e){t.exports=function(){if("undefined"==typeof document)return 0;var t,e=document.body,i=document.createElement("div"),r=i.style;return r.position="absolute",r.top=r.left="-9999px",r.width=r.height="100px",r.overflow="scroll",e.appendChild(i),t=i.offsetWidth-i.clientWidth,e.removeChild(i),t}}),we="Expected a function",Oe=NaN,_e="[object Symbol]",Se=/^\s+|\s+$/g,Le=/^[-+]0x[0-9a-f]+$/i,Ae=/^0b[01]+$/i,Me=/^0o[0-7]+$/i,ke=parseInt,We="object"==typeof v&&v&&v.Object===Object&&v,Te="object"==typeof self&&self&&self.Object===Object&&self,je=We||Te||Function("return this")(),Re=Object.prototype.toString,Ne=Math.max,ze=Math.min,Ce=function(){return je.Date.now()};function Ve(t,e,i){var r,n,s,o,a,l,c=0,u=!1,h=!1,f=!0;if("function"!=typeof t)throw new TypeError(we);function d(e){var i=r,s=n;return r=n=void 0,c=e,o=t.apply(s,i)}function p(t){var i=t-l;return void 0===l||i>=e||i<0||h&&t-c>=s}function v(){var t=Ce();if(p(t))return g(t);a=setTimeout(v,function(t){var i=e-(t-l);return h?ze(i,s-(t-c)):i}(t))}function g(t){return a=void 0,f&&r?d(t):(r=n=void 0,o)}function b(){var t=Ce(),i=p(t);if(r=arguments,n=this,l=t,i){if(void 0===a)return function(t){return c=t,a=setTimeout(v,e),u?d(t):o}(l);if(h)return a=setTimeout(v,e),d(l)}return void 0===a&&(a=setTimeout(v,e)),o}return e=Be(e)||0,De(i)&&(u=!!i.leading,s=(h="maxWait"in i)?Ne(Be(i.maxWait)||0,e):s,f="trailing"in i?!!i.trailing:f),b.cancel=function(){void 0!==a&&clearTimeout(a),c=0,r=l=n=a=void 0},b.flush=function(){return void 0===a?o:g(Ce())},b}function De(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Be(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&Re.call(t)==_e}(t))return Oe;if(De(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=De(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Se,"");var i=Ae.test(t);return i||Me.test(t)?ke(t.slice(2),i?2:8):Le.test(t)?Oe:+t}var Ie=function(t,e,i){var r=!0,n=!0;if("function"!=typeof t)throw new TypeError(we);return De(i)&&(r="leading"in i?!!i.leading:r,n="trailing"in i?!!i.trailing:n),Ve(t,e,{leading:r,maxWait:e,trailing:n})},Pe="Expected a function",He=NaN,qe="[object Symbol]",Fe=/^\s+|\s+$/g,$e=/^[-+]0x[0-9a-f]+$/i,Xe=/^0b[01]+$/i,Ye=/^0o[0-7]+$/i,Ge=parseInt,Ke="object"==typeof v&&v&&v.Object===Object&&v,Ue="object"==typeof self&&self&&self.Object===Object&&self,Je=Ke||Ue||Function("return this")(),Qe=Object.prototype.toString,Ze=Math.max,ti=Math.min,ei=function(){return Je.Date.now()};function ii(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function ri(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&Qe.call(t)==qe}(t))return He;if(ii(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=ii(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Fe,"");var i=Xe.test(t);return i||Ye.test(t)?Ge(t.slice(2),i?2:8):$e.test(t)?He:+t}var ni=function(t,e,i){var r,n,s,o,a,l,c=0,u=!1,h=!1,f=!0;if("function"!=typeof t)throw new TypeError(Pe);function d(e){var i=r,s=n;return r=n=void 0,c=e,o=t.apply(s,i)}function p(t){var i=t-l;return void 0===l||i>=e||i<0||h&&t-c>=s}function v(){var t=ei();if(p(t))return g(t);a=setTimeout(v,function(t){var i=e-(t-l);return h?ti(i,s-(t-c)):i}(t))}function g(t){return a=void 0,f&&r?d(t):(r=n=void 0,o)}function b(){var t=ei(),i=p(t);if(r=arguments,n=this,l=t,i){if(void 0===a)return function(t){return c=t,a=setTimeout(v,e),u?d(t):o}(l);if(h)return a=setTimeout(v,e),d(l)}return void 0===a&&(a=setTimeout(v,e)),o}return e=ri(e)||0,ii(i)&&(u=!!i.leading,s=(h="maxWait"in i)?Ze(ri(i.maxWait)||0,e):s,f="trailing"in i?!!i.trailing:f),b.cancel=function(){void 0!==a&&clearTimeout(a),c=0,r=l=n=a=void 0},b.flush=function(){return void 0===a?o:g(ei())},b},si="Expected a function",oi="__lodash_hash_undefined__",ai="[object Function]",li="[object GeneratorFunction]",ci=/^\[object .+?Constructor\]$/,ui="object"==typeof v&&v&&v.Object===Object&&v,hi="object"==typeof self&&self&&self.Object===Object&&self,fi=ui||hi||Function("return this")();var di=Array.prototype,pi=Function.prototype,vi=Object.prototype,gi=fi["__core-js_shared__"],bi=function(){var t=/[^.]+$/.exec(gi&&gi.keys&&gi.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),mi=pi.toString,yi=vi.hasOwnProperty,xi=vi.toString,Ei=RegExp("^"+mi.call(yi).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),wi=di.splice,Oi=Ti(fi,"Map"),_i=Ti(Object,"create");function Si(t){var e=-1,i=t?t.length:0;for(this.clear();++e-1},Li.prototype.set=function(t,e){var i=this.__data__,r=Mi(i,t);return r<0?i.push([t,e]):i[r][1]=e,this},Ai.prototype.clear=function(){this.__data__={hash:new Si,map:new(Oi||Li),string:new Si}},Ai.prototype.delete=function(t){return Wi(this,t).delete(t)},Ai.prototype.get=function(t){return Wi(this,t).get(t)},Ai.prototype.has=function(t){return Wi(this,t).has(t)},Ai.prototype.set=function(t,e){return Wi(this,t).set(t,e),this},ji.Cache=Ai;var Ni=ji,zi=function(){if("undefined"!=typeof Map)return Map;function t(t,e){var i=-1;return t.some(function(t,r){return t[0]===e&&(i=r,!0)}),i}return function(){function e(){this.__entries__=[]}return Object.defineProperty(e.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),e.prototype.get=function(e){var i=t(this.__entries__,e),r=this.__entries__[i];return r&&r[1]},e.prototype.set=function(e,i){var r=t(this.__entries__,e);~r?this.__entries__[r][1]=i:this.__entries__.push([e,i])},e.prototype.delete=function(e){var i=this.__entries__,r=t(i,e);~r&&i.splice(r,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var i=0,r=this.__entries__;i0},t.prototype.connect_=function(){Ci&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Hi?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){Ci&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(t){var e=t.propertyName,i=void 0===e?"":e;Pi.some(function(t){return!!~i.indexOf(t)})&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),Fi=function(t,e){for(var i=0,r=Object.keys(e);i0},t}(),ir="undefined"!=typeof WeakMap?new WeakMap:new zi,rr=function(){return function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var i=qi.getInstance(),r=new er(e,i,this);ir.set(this,r)}}();["observe","unobserve","disconnect"].forEach(function(t){rr.prototype[t]=function(){var e;return(e=ir.get(this))[t].apply(e,arguments)}});var nr=void 0!==Vi.ResizeObserver?Vi.ResizeObserver:rr,sr=!("undefined"==typeof window||!window.document||!window.document.createElement),or=function(){function t(e,i){var r=this;this.onScroll=function(){r.scrollXTicking||(window.requestAnimationFrame(r.scrollX),r.scrollXTicking=!0),r.scrollYTicking||(window.requestAnimationFrame(r.scrollY),r.scrollYTicking=!0)},this.scrollX=function(){r.axis.x.isOverflowing&&(r.showScrollbar("x"),r.positionScrollbar("x")),r.scrollXTicking=!1},this.scrollY=function(){r.axis.y.isOverflowing&&(r.showScrollbar("y"),r.positionScrollbar("y")),r.scrollYTicking=!1},this.onMouseEnter=function(){r.showScrollbar("x"),r.showScrollbar("y")},this.onMouseMove=function(t){r.mouseX=t.clientX,r.mouseY=t.clientY,(r.axis.x.isOverflowing||r.axis.x.forceVisible)&&r.onMouseMoveForAxis("x"),(r.axis.y.isOverflowing||r.axis.y.forceVisible)&&r.onMouseMoveForAxis("y")},this.onMouseLeave=function(){r.onMouseMove.cancel(),(r.axis.x.isOverflowing||r.axis.x.forceVisible)&&r.onMouseLeaveForAxis("x"),(r.axis.y.isOverflowing||r.axis.y.forceVisible)&&r.onMouseLeaveForAxis("y"),r.mouseX=-1,r.mouseY=-1},this.onWindowResize=function(){r.scrollbarWidth=Ee(),r.hideNativeScrollbar()},this.hideScrollbars=function(){r.axis.x.track.rect=r.axis.x.track.el.getBoundingClientRect(),r.axis.y.track.rect=r.axis.y.track.el.getBoundingClientRect(),r.isWithinBounds(r.axis.y.track.rect)||(r.axis.y.scrollbar.el.classList.remove(r.classNames.visible),r.axis.y.isVisible=!1),r.isWithinBounds(r.axis.x.track.rect)||(r.axis.x.scrollbar.el.classList.remove(r.classNames.visible),r.axis.x.isVisible=!1)},this.onPointerEvent=function(t){var e,i;r.axis.x.scrollbar.rect=r.axis.x.scrollbar.el.getBoundingClientRect(),r.axis.y.scrollbar.rect=r.axis.y.scrollbar.el.getBoundingClientRect(),(r.axis.x.isOverflowing||r.axis.x.forceVisible)&&(i=r.isWithinBounds(r.axis.x.scrollbar.rect)),(r.axis.y.isOverflowing||r.axis.y.forceVisible)&&(e=r.isWithinBounds(r.axis.y.scrollbar.rect)),(e||i)&&(t.preventDefault(),t.stopPropagation(),"mousedown"===t.type&&(e&&r.onDragStart(t,"y"),i&&r.onDragStart(t,"x")))},this.drag=function(e){var i=r.axis[r.draggedAxis].track,n=i.rect[r.axis[r.draggedAxis].sizeAttr],s=r.axis[r.draggedAxis].scrollbar;e.preventDefault(),e.stopPropagation();var o=(("y"===r.draggedAxis?e.pageY:e.pageX)-i.rect[r.axis[r.draggedAxis].offsetAttr]-r.axis[r.draggedAxis].dragOffset)/i.rect[r.axis[r.draggedAxis].sizeAttr]*r.contentWrapperEl[r.axis[r.draggedAxis].scrollSizeAttr];"x"===r.draggedAxis&&(o=r.isRtl&&t.getRtlHelpers().isRtlScrollbarInverted?o-(n+s.size):o,o=r.isRtl&&t.getRtlHelpers().isRtlScrollingInverted?-o:o),r.contentWrapperEl[r.axis[r.draggedAxis].scrollOffsetAttr]=o},this.onEndDrag=function(t){t.preventDefault(),t.stopPropagation(),r.el.classList.remove(r.classNames.dragging),document.removeEventListener("mousemove",r.drag),document.removeEventListener("mouseup",r.onEndDrag)},this.el=e,this.flashTimeout,this.contentEl,this.contentWrapperEl,this.offsetEl,this.maskEl,this.globalObserver,this.mutationObserver,this.resizeObserver,this.scrollbarWidth,this.minScrollbarWidth=20,this.options=Object.assign({},t.defaultOptions,i),this.classNames=Object.assign({},t.defaultOptions.classNames,this.options.classNames),this.isRtl,this.axis={x:{scrollOffsetAttr:"scrollLeft",sizeAttr:"width",scrollSizeAttr:"scrollWidth",offsetAttr:"left",overflowAttr:"overflowX",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}},y:{scrollOffsetAttr:"scrollTop",sizeAttr:"height",scrollSizeAttr:"scrollHeight",offsetAttr:"top",overflowAttr:"overflowY",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}}},this.el.SimpleBar||(this.recalculate=Ie(this.recalculate.bind(this),64),this.onMouseMove=Ie(this.onMouseMove.bind(this),64),this.hideScrollbars=ni(this.hideScrollbars.bind(this),this.options.timeout),this.onWindowResize=ni(this.onWindowResize.bind(this),64,{leading:!0}),t.getRtlHelpers=Ni(t.getRtlHelpers),this.getContentElement=this.getScrollElement,this.init())}t.getRtlHelpers=function(){var e=document.createElement("div");e.innerHTML='
';var i=e.firstElementChild;document.body.appendChild(i);var r=i.firstElementChild;i.scrollLeft=0;var n=t.getOffset(i),s=t.getOffset(r);i.scrollLeft=999;var o=t.getOffset(r);return{isRtlScrollingInverted:n.left!==s.left&&s.left-o.left!=0,isRtlScrollbarInverted:n.left!==s.left}},t.initHtmlApi=function(){this.initDOMLoadedElements=this.initDOMLoadedElements.bind(this),"undefined"!=typeof MutationObserver&&(this.globalObserver=new MutationObserver(function(e){e.forEach(function(e){Array.prototype.forEach.call(e.addedNodes,function(e){1===e.nodeType&&(e.dataset.simplebar?!e.SimpleBar&&new t(e,t.getElOptions(e)):Array.prototype.forEach.call(e.querySelectorAll("[data-simplebar]"),function(e){!e.SimpleBar&&new t(e,t.getElOptions(e))}))}),Array.prototype.forEach.call(e.removedNodes,function(t){1===t.nodeType&&(t.dataset.simplebar&&"init"!==t.dataset.simplebar?t.SimpleBar&&t.SimpleBar.unMount():Array.prototype.forEach.call(t.querySelectorAll("[data-simplebar]"),function(t){t.SimpleBar&&t.SimpleBar.unMount()}))})})}),this.globalObserver.observe(document,{childList:!0,subtree:!0})),"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?window.setTimeout(this.initDOMLoadedElements):(document.addEventListener("DOMContentLoaded",this.initDOMLoadedElements),window.addEventListener("load",this.initDOMLoadedElements))},t.getElOptions=function(t){return Array.prototype.reduce.call(t.attributes,function(t,e){var i=e.name.match(/data-simplebar-(.+)/);if(i){var r=i[1].replace(/\W+(.)/g,function(t,e){return e.toUpperCase()});switch(e.value){case"true":t[r]=!0;break;case"false":t[r]=!1;break;case void 0:t[r]=!0;break;default:t[r]=e.value}}return t},{})},t.removeObserver=function(){this.globalObserver.disconnect()},t.initDOMLoadedElements=function(){document.removeEventListener("DOMContentLoaded",this.initDOMLoadedElements),window.removeEventListener("load",this.initDOMLoadedElements),Array.prototype.forEach.call(document.querySelectorAll("[data-simplebar]"),function(e){e.SimpleBar||new t(e,t.getElOptions(e))})},t.getOffset=function(t){var e=t.getBoundingClientRect();return{top:e.top+(window.pageYOffset||document.documentElement.scrollTop),left:e.left+(window.pageXOffset||document.documentElement.scrollLeft)}};var e=t.prototype;return e.init=function(){this.el.SimpleBar=this,sr&&(this.initDOM(),this.scrollbarWidth=Ee(),this.recalculate(),this.initListeners())},e.initDOM=function(){var t=this;if(Array.prototype.filter.call(this.el.children,function(e){return e.classList.contains(t.classNames.wrapper)}).length)this.wrapperEl=this.el.querySelector("."+this.classNames.wrapper),this.contentWrapperEl=this.el.querySelector("."+this.classNames.contentWrapper),this.offsetEl=this.el.querySelector("."+this.classNames.offset),this.maskEl=this.el.querySelector("."+this.classNames.mask),this.contentEl=this.el.querySelector("."+this.classNames.contentEl),this.placeholderEl=this.el.querySelector("."+this.classNames.placeholder),this.heightAutoObserverWrapperEl=this.el.querySelector("."+this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl=this.el.querySelector("."+this.classNames.heightAutoObserverEl),this.axis.x.track.el=this.el.querySelector("."+this.classNames.track+"."+this.classNames.horizontal),this.axis.y.track.el=this.el.querySelector("."+this.classNames.track+"."+this.classNames.vertical);else{for(this.wrapperEl=document.createElement("div"),this.contentWrapperEl=document.createElement("div"),this.offsetEl=document.createElement("div"),this.maskEl=document.createElement("div"),this.contentEl=document.createElement("div"),this.placeholderEl=document.createElement("div"),this.heightAutoObserverWrapperEl=document.createElement("div"),this.heightAutoObserverEl=document.createElement("div"),this.wrapperEl.classList.add(this.classNames.wrapper),this.contentWrapperEl.classList.add(this.classNames.contentWrapper),this.offsetEl.classList.add(this.classNames.offset),this.maskEl.classList.add(this.classNames.mask),this.contentEl.classList.add(this.classNames.contentEl),this.placeholderEl.classList.add(this.classNames.placeholder),this.heightAutoObserverWrapperEl.classList.add(this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl.classList.add(this.classNames.heightAutoObserverEl);this.el.firstChild;)this.contentEl.appendChild(this.el.firstChild);this.contentWrapperEl.appendChild(this.contentEl),this.offsetEl.appendChild(this.contentWrapperEl),this.maskEl.appendChild(this.offsetEl),this.heightAutoObserverWrapperEl.appendChild(this.heightAutoObserverEl),this.wrapperEl.appendChild(this.heightAutoObserverWrapperEl),this.wrapperEl.appendChild(this.maskEl),this.wrapperEl.appendChild(this.placeholderEl),this.el.appendChild(this.wrapperEl)}if(!this.axis.x.track.el||!this.axis.y.track.el){var e=document.createElement("div"),i=document.createElement("div");e.classList.add(this.classNames.track),i.classList.add(this.classNames.scrollbar),e.appendChild(i),this.axis.x.track.el=e.cloneNode(!0),this.axis.x.track.el.classList.add(this.classNames.horizontal),this.axis.y.track.el=e.cloneNode(!0),this.axis.y.track.el.classList.add(this.classNames.vertical),this.el.appendChild(this.axis.x.track.el),this.el.appendChild(this.axis.y.track.el)}this.axis.x.scrollbar.el=this.axis.x.track.el.querySelector("."+this.classNames.scrollbar),this.axis.y.scrollbar.el=this.axis.y.track.el.querySelector("."+this.classNames.scrollbar),this.options.autoHide||(this.axis.x.scrollbar.el.classList.add(this.classNames.visible),this.axis.y.scrollbar.el.classList.add(this.classNames.visible)),this.el.setAttribute("data-simplebar","init")},e.initListeners=function(){var t=this;this.options.autoHide&&this.el.addEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick","touchstart","touchend","touchmove"].forEach(function(e){t.el.addEventListener(e,t.onPointerEvent,!0)}),this.el.addEventListener("mousemove",this.onMouseMove),this.el.addEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.addEventListener("scroll",this.onScroll),window.addEventListener("resize",this.onWindowResize),this.resizeObserver=new nr(this.recalculate),this.resizeObserver.observe(this.el),this.resizeObserver.observe(this.contentEl)},e.recalculate=function(){var t=this.heightAutoObserverEl.offsetHeight<=1,e=this.heightAutoObserverEl.offsetWidth<=1;this.elStyles=window.getComputedStyle(this.el),this.isRtl="rtl"===this.elStyles.direction,this.contentEl.style.padding=this.elStyles.paddingTop+" "+this.elStyles.paddingRight+" "+this.elStyles.paddingBottom+" "+this.elStyles.paddingLeft,this.wrapperEl.style.margin="-"+this.elStyles.paddingTop+" -"+this.elStyles.paddingRight+" -"+this.elStyles.paddingBottom+" -"+this.elStyles.paddingLeft,this.contentWrapperEl.style.height=t?"auto":"100%",this.placeholderEl.style.width=e?this.contentEl.offsetWidth+"px":"auto",this.placeholderEl.style.height=this.contentEl.scrollHeight+"px",this.axis.x.isOverflowing=this.contentWrapperEl.scrollWidth>this.contentWrapperEl.offsetWidth,this.axis.y.isOverflowing=this.contentWrapperEl.scrollHeight>this.contentWrapperEl.offsetHeight,this.axis.x.isOverflowing="hidden"!==this.elStyles.overflowX&&this.axis.x.isOverflowing,this.axis.y.isOverflowing="hidden"!==this.elStyles.overflowY&&this.axis.y.isOverflowing,this.axis.x.forceVisible="x"===this.options.forceVisible||!0===this.options.forceVisible,this.axis.y.forceVisible="y"===this.options.forceVisible||!0===this.options.forceVisible,this.hideNativeScrollbar(),this.axis.x.track.rect=this.axis.x.track.el.getBoundingClientRect(),this.axis.y.track.rect=this.axis.y.track.el.getBoundingClientRect(),this.axis.x.scrollbar.size=this.getScrollbarSize("x"),this.axis.y.scrollbar.size=this.getScrollbarSize("y"),this.axis.x.scrollbar.el.style.width=this.axis.x.scrollbar.size+"px",this.axis.y.scrollbar.el.style.height=this.axis.y.scrollbar.size+"px",this.positionScrollbar("x"),this.positionScrollbar("y"),this.toggleTrackVisibility("x"),this.toggleTrackVisibility("y")},e.getScrollbarSize=function(t){void 0===t&&(t="y");var e,i=this.scrollbarWidth?this.contentWrapperEl[this.axis[t].scrollSizeAttr]:this.contentWrapperEl[this.axis[t].scrollSizeAttr]-this.minScrollbarWidth,r=this.axis[t].track.rect[this.axis[t].sizeAttr];if(this.axis[t].isOverflowing){var n=r/i;return e=Math.max(~~(n*r),this.options.scrollbarMinSize),this.options.scrollbarMaxSize&&(e=Math.min(e,this.options.scrollbarMaxSize)),e}},e.positionScrollbar=function(e){void 0===e&&(e="y");var i=this.contentWrapperEl[this.axis[e].scrollSizeAttr],r=this.axis[e].track.rect[this.axis[e].sizeAttr],n=parseInt(this.elStyles[this.axis[e].sizeAttr],10),s=this.axis[e].scrollbar,o=this.contentWrapperEl[this.axis[e].scrollOffsetAttr],a=(o="x"===e&&this.isRtl&&t.getRtlHelpers().isRtlScrollingInverted?-o:o)/(i-n),l=~~((r-s.size)*a);l="x"===e&&this.isRtl&&t.getRtlHelpers().isRtlScrollbarInverted?l+(r-s.size):l,s.el.style.transform="x"===e?"translate3d("+l+"px, 0, 0)":"translate3d(0, "+l+"px, 0)"},e.toggleTrackVisibility=function(t){void 0===t&&(t="y");var e=this.axis[t].track.el,i=this.axis[t].scrollbar.el;this.axis[t].isOverflowing||this.axis[t].forceVisible?(e.style.visibility="visible",this.contentWrapperEl.style[this.axis[t].overflowAttr]="scroll"):(e.style.visibility="hidden",this.contentWrapperEl.style[this.axis[t].overflowAttr]="hidden"),this.axis[t].isOverflowing?i.style.display="block":i.style.display="none"},e.hideNativeScrollbar=function(){if(this.offsetEl.style[this.isRtl?"left":"right"]=this.axis.y.isOverflowing||this.axis.y.forceVisible?"-"+(this.scrollbarWidth||this.minScrollbarWidth)+"px":0,this.offsetEl.style.bottom=this.axis.x.isOverflowing||this.axis.x.forceVisible?"-"+(this.scrollbarWidth||this.minScrollbarWidth)+"px":0,!this.scrollbarWidth){var t=[this.isRtl?"paddingLeft":"paddingRight"];this.contentWrapperEl.style[t]=this.axis.y.isOverflowing||this.axis.y.forceVisible?this.minScrollbarWidth+"px":0,this.contentWrapperEl.style.paddingBottom=this.axis.x.isOverflowing||this.axis.x.forceVisible?this.minScrollbarWidth+"px":0}},e.onMouseMoveForAxis=function(t){void 0===t&&(t="y"),this.axis[t].track.rect=this.axis[t].track.el.getBoundingClientRect(),this.axis[t].scrollbar.rect=this.axis[t].scrollbar.el.getBoundingClientRect(),this.isWithinBounds(this.axis[t].scrollbar.rect)?this.axis[t].scrollbar.el.classList.add(this.classNames.hover):this.axis[t].scrollbar.el.classList.remove(this.classNames.hover),this.isWithinBounds(this.axis[t].track.rect)?(this.showScrollbar(t),this.axis[t].track.el.classList.add(this.classNames.hover)):this.axis[t].track.el.classList.remove(this.classNames.hover)},e.onMouseLeaveForAxis=function(t){void 0===t&&(t="y"),this.axis[t].track.el.classList.remove(this.classNames.hover),this.axis[t].scrollbar.el.classList.remove(this.classNames.hover)},e.showScrollbar=function(t){void 0===t&&(t="y");var e=this.axis[t].scrollbar.el;this.axis[t].isVisible||(e.classList.add(this.classNames.visible),this.axis[t].isVisible=!0),this.options.autoHide&&this.hideScrollbars()},e.onDragStart=function(t,e){void 0===e&&(e="y");var i=this.axis[e].scrollbar.el,r="y"===e?t.pageY:t.pageX;this.axis[e].dragOffset=r-i.getBoundingClientRect()[this.axis[e].offsetAttr],this.draggedAxis=e,this.el.classList.add(this.classNames.dragging),document.addEventListener("mousemove",this.drag),document.addEventListener("mouseup",this.onEndDrag)},e.getScrollElement=function(){return this.contentEl},e.removeListeners=function(){var t=this;this.options.autoHide&&this.el.removeEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick","touchstart","touchend","touchmove"].forEach(function(e){t.el.removeEventListener(e,t.onPointerEvent)}),this.el.removeEventListener("mousemove",this.onMouseMove),this.el.removeEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.removeEventListener("scroll",this.onScroll),window.removeEventListener("resize",this.onWindowResize),this.mutationObserver&&this.mutationObserver.disconnect(),this.resizeObserver.disconnect(),this.recalculate.cancel(),this.onMouseMove.cancel(),this.hideScrollbars.cancel(),this.onWindowResize.cancel()},e.unMount=function(){this.removeListeners(),this.el.SimpleBar=null},e.isChildNode=function(t){return null!==t&&(t===this.el||this.isChildNode(t.parentNode))},e.isWithinBounds=function(t){return this.mouseX>=t.left&&this.mouseX<=t.left+t.width&&this.mouseY>=t.top&&this.mouseY<=t.top+t.height},t}();return or.defaultOptions={autoHide:!0,forceVisible:!1,classNames:{contentEl:"simplebar-content",contentWrapper:"simplebar-content-wrapper",offset:"simplebar-offset",mask:"simplebar-mask",wrapper:"simplebar-wrapper",placeholder:"simplebar-placeholder",scrollbar:"simplebar-scrollbar",track:"simplebar-track",heightAutoObserverWrapperEl:"simplebar-height-auto-observer-wrapper",heightAutoObserverEl:"simplebar-height-auto-observer",visible:"simplebar-visible",horizontal:"simplebar-horizontal",vertical:"simplebar-vertical",hover:"simplebar-hover",dragging:"simplebar-dragging"},scrollbarMinSize:25,scrollbarMaxSize:0,timeout:1e3},sr&&or.initHtmlApi(),or}); diff --git a/themes/yunohost-docs/js/swagger-ui-bundle.js b/themes/yunohost-docs/js/swagger-ui-bundle.js new file mode 100644 index 00000000..2e65f47d --- /dev/null +++ b/themes/yunohost-docs/js/swagger-ui-bundle.js @@ -0,0 +1,3 @@ +/*! For license information please see swagger-ui-bundle.js.LICENSE.txt */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SwaggerUIBundle=t():e.SwaggerUIBundle=t()}(this,(function(){return(()=>{var e={17967:(e,t)=>{"use strict";t.N=void 0;var r=/^([^\w]*)(javascript|data|vbscript)/im,n=/&#(\w+)(^\w|;)?/g,o=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,a=/^([^:]+):/gm,i=[".","/"];t.N=function(e){var t,s=(t=e||"",t.replace(n,(function(e,t){return String.fromCharCode(t)}))).replace(o,"").trim();if(!s)return"about:blank";if(function(e){return i.indexOf(e[0])>-1}(s))return s;var l=s.match(a);if(!l)return s;var u=l[0];return r.test(u)?"about:blank":s}},53795:(e,t,r)=>{"use strict";r.d(t,{Z:()=>P});var n=r(23101),o=r.n(n),a=r(61125),i=r.n(a),s=r(11882),l=r.n(s),u=r(97606),c=r.n(u),p=r(67294),f=r(43393);function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}function d(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function m(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=k(t,r),o=e||Object.keys(y({},r,{},t));return o.every(n)}function k(e,t){return function(r){if("string"==typeof r)return(0,f.is)(t[r],e[r]);if(Array.isArray(r))return(0,f.is)(S(t,r),S(e,r));throw new TypeError("Invalid key: expected Array or string: "+r)}}var C=function(e){function t(){return d(this,t),E(this,b(t).apply(this,arguments))}var r,n,o;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&w(e,t)}(t,e),r=t,n=[{key:"shouldComponentUpdate",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return!A(this.updateOnProps,this.props,e,"updateOnProps")||!A(this.updateOnStates,this.state,t,"updateOnStates")}}],n&&m(r.prototype,n),o&&m(r,o),t}(p.Component);const O=C;var j=r(23930),I=r.n(j),N=r(45697),T=r.n(N);class P extends O{constructor(){super(...arguments),i()(this,"getModelName",(e=>-1!==l()(e).call(e,"#/definitions/")?e.replace(/^.*#\/definitions\//,""):-1!==l()(e).call(e,"#/components/schemas/")?e.replace(/^.*#\/components\/schemas\//,""):void 0)),i()(this,"getRefSchema",(e=>{let{specSelectors:t}=this.props;return t.findDefinition(e)}))}render(){let{getComponent:e,getConfigs:t,specSelectors:n,schema:a,required:i,name:s,isRef:l,specPath:u,displayName:c,includeReadOnly:f,includeWriteOnly:h}=this.props;const d=e("ObjectModel"),m=e("ArrayModel"),g=e("PrimitiveModel");let v="object",y=a&&a.get("$$ref");if(!s&&y&&(s=this.getModelName(y)),!a&&y&&(a=this.getRefSchema(s)),!a)return p.createElement("span",{className:"model model-title"},p.createElement("span",{className:"model-title__text"},c||s),p.createElement("img",{src:r(2517),height:"20px",width:"20px"}));const b=n.isOAS3()&&a.get("deprecated");switch(l=void 0!==l?l:!!y,v=a&&a.get("type")||v,v){case"object":return p.createElement(d,o()({className:"object"},this.props,{specPath:u,getConfigs:t,schema:a,name:s,deprecated:b,isRef:l,includeReadOnly:f,includeWriteOnly:h}));case"array":return p.createElement(m,o()({className:"array"},this.props,{getConfigs:t,schema:a,name:s,deprecated:b,required:i,includeReadOnly:f,includeWriteOnly:h}));default:return p.createElement(g,o()({},this.props,{getComponent:e,getConfigs:t,schema:a,name:s,deprecated:b,required:i}))}}}i()(P,"propTypes",{schema:c()(I()).isRequired,getComponent:T().func.isRequired,getConfigs:T().func.isRequired,specSelectors:T().object.isRequired,name:T().string,displayName:T().string,isRef:T().bool,required:T().bool,expandDepth:T().number,depth:T().number,specPath:I().list.isRequired,includeReadOnly:T().bool,includeWriteOnly:T().bool})},5623:(e,t,r)=>{"use strict";r.d(t,{Z:()=>f});var n=r(61125),o=r.n(n),a=r(28222),i=r.n(a),s=r(67294),l=r(84564),u=r.n(l),c=r(90242),p=r(27504);class f extends s.Component{constructor(e,t){super(e,t),o()(this,"getDefinitionUrl",(()=>{let{specSelectors:e}=this.props;return new(u())(e.url(),p.Z.location).toString()}));let{getConfigs:r}=e,{validatorUrl:n}=r();this.state={url:this.getDefinitionUrl(),validatorUrl:void 0===n?"https://validator.swagger.io/validator":n}}UNSAFE_componentWillReceiveProps(e){let{getConfigs:t}=e,{validatorUrl:r}=t();this.setState({url:this.getDefinitionUrl(),validatorUrl:void 0===r?"https://validator.swagger.io/validator":r})}render(){let{getConfigs:e}=this.props,{spec:t}=e(),r=(0,c.Nm)(this.state.validatorUrl);return"object"==typeof t&&i()(t).length?null:this.state.url&&(0,c.hW)(this.state.validatorUrl)&&(0,c.hW)(this.state.url)?s.createElement("span",{className:"float-right"},s.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:`${r}/debug?url=${encodeURIComponent(this.state.url)}`},s.createElement(h,{src:`${r}?url=${encodeURIComponent(this.state.url)}`,alt:"Online validator badge"}))):null}}class h extends s.Component{constructor(e){super(e),this.state={loaded:!1,error:!1}}componentDidMount(){const e=new Image;e.onload=()=>{this.setState({loaded:!0})},e.onerror=()=>{this.setState({error:!0})},e.src=this.props.src}UNSAFE_componentWillReceiveProps(e){if(e.src!==this.props.src){const t=new Image;t.onload=()=>{this.setState({loaded:!0})},t.onerror=()=>{this.setState({error:!0})},t.src=e.src}}render(){return this.state.error?s.createElement("img",{alt:"Error"}):this.state.loaded?s.createElement("img",{src:this.props.src,alt:this.props.alt}):null}}},86019:(e,t,r)=>{"use strict";r.d(t,{Z:()=>me,s:()=>ge});var n=r(67294),o=r(89927);function a(e,t){if(Array.prototype.indexOf)return e.indexOf(t);for(var r=0,n=e.length;r=0;r--)!0===t(e[r])&&e.splice(r,1)}function s(e){throw new Error("Unhandled case for value: '"+e+"'")}var l=function(){function e(e){void 0===e&&(e={}),this.tagName="",this.attrs={},this.innerHTML="",this.whitespaceRegex=/\s+/,this.tagName=e.tagName||"",this.attrs=e.attrs||{},this.innerHTML=e.innerHtml||e.innerHTML||""}return e.prototype.setTagName=function(e){return this.tagName=e,this},e.prototype.getTagName=function(){return this.tagName||""},e.prototype.setAttr=function(e,t){return this.getAttrs()[e]=t,this},e.prototype.getAttr=function(e){return this.getAttrs()[e]},e.prototype.setAttrs=function(e){return Object.assign(this.getAttrs(),e),this},e.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},e.prototype.setClass=function(e){return this.setAttr("class",e)},e.prototype.addClass=function(e){for(var t,r=this.getClass(),n=this.whitespaceRegex,o=r?r.split(n):[],i=e.split(n);t=i.shift();)-1===a(o,t)&&o.push(t);return this.getAttrs().class=o.join(" "),this},e.prototype.removeClass=function(e){for(var t,r=this.getClass(),n=this.whitespaceRegex,o=r?r.split(n):[],i=e.split(n);o.length&&(t=i.shift());){var s=a(o,t);-1!==s&&o.splice(s,1)}return this.getAttrs().class=o.join(" "),this},e.prototype.getClass=function(){return this.getAttrs().class||""},e.prototype.hasClass=function(e){return-1!==(" "+this.getClass()+" ").indexOf(" "+e+" ")},e.prototype.setInnerHTML=function(e){return this.innerHTML=e,this},e.prototype.setInnerHtml=function(e){return this.setInnerHTML(e)},e.prototype.getInnerHTML=function(){return this.innerHTML||""},e.prototype.getInnerHtml=function(){return this.getInnerHTML()},e.prototype.toAnchorString=function(){var e=this.getTagName(),t=this.buildAttrsStr();return["<",e,t=t?" "+t:"",">",this.getInnerHtml(),""].join("")},e.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var e=this.getAttrs(),t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(r+'="'+e[r]+'"');return t.join(" ")},e}();var u=function(){function e(e){void 0===e&&(e={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=e.newWindow||!1,this.truncate=e.truncate||{},this.className=e.className||""}return e.prototype.build=function(e){return new l({tagName:"a",attrs:this.createAttrs(e),innerHtml:this.processAnchorText(e.getAnchorText())})},e.prototype.createAttrs=function(e){var t={href:e.getAnchorHref()},r=this.createCssClass(e);return r&&(t.class=r),this.newWindow&&(t.target="_blank",t.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length=s)return l.host.length==t?(l.host.substr(0,t-o)+r).substr(0,s+n):i(c,s).substr(0,s+n);var p="";if(l.path&&(p+="/"+l.path),l.query&&(p+="?"+l.query),p){if((c+p).length>=s)return(c+p).length==t?(c+p).substr(0,t):(c+i(p,s-c.length)).substr(0,s+n);c+=p}if(l.fragment){var f="#"+l.fragment;if((c+f).length>=s)return(c+f).length==t?(c+f).substr(0,t):(c+i(f,s-c.length)).substr(0,s+n);c+=f}if(l.scheme&&l.host){var h=l.scheme+"://";if((c+h).length0&&(d=c.substr(-1*Math.floor(s/2))),(c.substr(0,Math.ceil(s/2))+r+d).substr(0,s+n)}(e,r):"middle"===n?function(e,t,r){if(e.length<=t)return e;var n,o;null==r?(r="…",n=8,o=3):(n=r.length,o=r.length);var a=t-o,i="";return a>0&&(i=e.substr(-1*Math.floor(a/2))),(e.substr(0,Math.ceil(a/2))+r+i).substr(0,a+n)}(e,r):function(e,t,r){return function(e,t,r){var n;return e.length>t&&(null==r?(r="…",n=3):n=r.length,e=e.substring(0,t-n)+r),e}(e,t,r)}(e,r)},e}(),c=function(){function e(e){this.__jsduckDummyDocProp=null,this.matchedText="",this.offset=0,this.tagBuilder=e.tagBuilder,this.matchedText=e.matchedText,this.offset=e.offset}return e.prototype.getMatchedText=function(){return this.matchedText},e.prototype.setOffset=function(e){this.offset=e},e.prototype.getOffset=function(){return this.offset},e.prototype.getCssClassSuffixes=function(){return[this.getType()]},e.prototype.buildTag=function(){return this.tagBuilder.build(this)},e}(),p=function(e,t){return p=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},p(e,t)};function f(e,t){function r(){this.constructor=e}p(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var h=function(){return h=Object.assign||function(e){for(var t,r=1,n=arguments.length;r-1},e.isValidUriScheme=function(e){var t=e.match(this.uriSchemeRegex),r=t&&t[0].toLowerCase();return"javascript:"!==r&&"vbscript:"!==r},e.urlMatchDoesNotHaveProtocolOrDot=function(e,t){return!(!e||t&&this.hasFullProtocolRegex.test(t)||-1!==e.indexOf("."))},e.urlMatchDoesNotHaveAtLeastOneWordChar=function(e,t){return!(!e||!t)&&(!this.hasFullProtocolRegex.test(t)&&!this.hasWordCharAfterProtocolRegex.test(e))},e.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\/\//,e.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,e.hasWordCharAfterProtocolRegex=new RegExp(":[^\\s]*?["+C+"]"),e.ipRegex=/[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?(:[0-9]*)?\/?$/,e}(),V=(d=new RegExp("[/?#](?:["+N+"\\-+&@#/%=~_()|'$*\\[\\]{}?!:,.;^✓]*["+N+"\\-+&@#/%=~_()|'$*\\[\\]{}✓])?"),new RegExp(["(?:","(",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\/\/)(?!\d+\/?)(?:\/\/)?)/.source,M(2),")","|","(","(//)?",/(?:www\.)/.source,M(6),")","|","(","(//)?",M(10)+"\\.",L.source,"(?![-"+I+"])",")",")","(?::[0-9]+)?","(?:"+d.source+")?"].join(""),"gi")),$=new RegExp("["+N+"]"),W=function(e){function t(t){var r=e.call(this,t)||this;return r.stripPrefix={scheme:!0,www:!0},r.stripTrailingSlash=!0,r.decodePercentEncoding=!0,r.matcherRegex=V,r.wordCharRegExp=$,r.stripPrefix=t.stripPrefix,r.stripTrailingSlash=t.stripTrailingSlash,r.decodePercentEncoding=t.decodePercentEncoding,r}return f(t,e),t.prototype.parseMatches=function(e){for(var t,r=this.matcherRegex,n=this.stripPrefix,o=this.stripTrailingSlash,a=this.decodePercentEncoding,i=this.tagBuilder,s=[],l=function(){var r=t[0],l=t[1],c=t[4],p=t[5],f=t[9],h=t.index,d=p||f,m=e.charAt(h-1);if(!q.isValid(r,l))return"continue";if(h>0&&"@"===m)return"continue";if(h>0&&d&&u.wordCharRegExp.test(m))return"continue";if(/\?$/.test(r)&&(r=r.substr(0,r.length-1)),u.matchHasUnbalancedClosingParen(r))r=r.substr(0,r.length-1);else{var g=u.matchHasInvalidCharAfterTld(r,l);g>-1&&(r=r.substr(0,g))}var v=["http://","https://"].find((function(e){return!!l&&-1!==l.indexOf(e)}));if(v){var y=r.indexOf(v);r=r.substr(y),l=l.substr(y),h+=y}var w=l?"scheme":c?"www":"tld",E=!!l;s.push(new b({tagBuilder:i,matchedText:r,offset:h,urlMatchType:w,url:r,protocolUrlMatch:E,protocolRelativeMatch:!!d,stripPrefix:n,stripTrailingSlash:o,decodePercentEncoding:a}))},u=this;null!==(t=r.exec(e));)l();return s},t.prototype.matchHasUnbalancedClosingParen=function(e){var t,r=e.charAt(e.length-1);if(")"===r)t="(";else if("]"===r)t="[";else{if("}"!==r)return!1;t="{"}for(var n=0,o=0,a=e.length-1;o"===e?(m=new ne(h(h({},m),{name:H()})),W()):E.test(e)||x.test(e)||":"===e||V()}function w(e){">"===e?V():E.test(e)?f=3:V()}function _(e){S.test(e)||("/"===e?f=12:">"===e?W():"<"===e?$():"="===e||A.test(e)||k.test(e)?V():f=5)}function C(e){S.test(e)?f=6:"/"===e?f=12:"="===e?f=7:">"===e?W():"<"===e?$():A.test(e)&&V()}function O(e){S.test(e)||("/"===e?f=12:"="===e?f=7:">"===e?W():"<"===e?$():A.test(e)?V():f=5)}function j(e){S.test(e)||('"'===e?f=8:"'"===e?f=9:/[>=`]/.test(e)?V():"<"===e?$():f=10)}function I(e){'"'===e&&(f=11)}function N(e){"'"===e&&(f=11)}function T(e){S.test(e)?f=4:">"===e?W():"<"===e&&$()}function P(e){S.test(e)?f=4:"/"===e?f=12:">"===e?W():"<"===e?$():(f=4,c--)}function R(e){">"===e?(m=new ne(h(h({},m),{isClosing:!0})),W()):f=4}function M(t){"--"===e.substr(c,2)?(c+=2,m=new ne(h(h({},m),{type:"comment"})),f=14):"DOCTYPE"===e.substr(c,7).toUpperCase()?(c+=7,m=new ne(h(h({},m),{type:"doctype"})),f=20):V()}function D(e){"-"===e?f=15:">"===e?V():f=16}function L(e){"-"===e?f=18:">"===e?V():f=16}function B(e){"-"===e&&(f=17)}function F(e){f="-"===e?18:16}function z(e){">"===e?W():"!"===e?f=19:"-"===e||(f=16)}function U(e){"-"===e?f=17:">"===e?W():f=16}function q(e){">"===e?W():"<"===e&&$()}function V(){f=0,m=u}function $(){f=1,m=new ne({idx:c})}function W(){var t=e.slice(d,m.idx);t&&a(t,d),"comment"===m.type?i(m.idx):"doctype"===m.type?l(m.idx):(m.isOpening&&n(m.name,m.idx),m.isClosing&&o(m.name,m.idx)),V(),d=c+1}function H(){var t=m.idx+(m.isClosing?2:1);return e.slice(t,c).toLowerCase()}d=0&&n++},onText:function(e,r){if(0===n){var a=function(e,t){if(!t.global)throw new Error("`splitRegex` must have the 'g' flag set");for(var r,n=[],o=0;r=t.exec(e);)n.push(e.substring(o,r.index)),n.push(r[0]),o=r.index+r[0].length;return n.push(e.substring(o)),n}(e,/( | |<|<|>|>|"|"|')/gi),i=r;a.forEach((function(e,r){if(r%2==0){var n=t.parseText(e,i);o.push.apply(o,n)}i+=e.length}))}},onCloseTag:function(e){r.indexOf(e)>=0&&(n=Math.max(n-1,0))},onComment:function(e){},onDoctype:function(e){}}),o=this.compactMatches(o),o=this.removeUnwantedMatches(o)},e.prototype.compactMatches=function(e){e.sort((function(e,t){return e.getOffset()-t.getOffset()}));for(var t=0;to?t:t+1;e.splice(i,1);continue}e[t+1].getOffset()/g,">"));for(var t=this.parse(e),r=[],n=0,o=0,a=t.length;o/i.test(e)}function se(){var e=[],t=new oe({stripPrefix:!1,url:!0,email:!0,replaceFn:function(t){switch(t.getType()){case"url":e.push({text:t.matchedText,url:t.getUrl()});break;case"email":e.push({text:t.matchedText,url:"mailto:"+t.getEmail().replace(/^mailto:/i,"")})}return!1}});return{links:e,autolinker:t}}function le(e){var t,r,n,o,a,i,s,l,u,c,p,f,h,d,m=e.tokens,g=null;for(r=0,n=m.length;r=0;t--)if("link_close"!==(a=o[t]).type){if("htmltag"===a.type&&(d=a.content,/^\s]/i.test(d)&&p>0&&p--,ie(a.content)&&p++),!(p>0)&&"text"===a.type&&ae.test(a.content)){if(g||(f=(g=se()).links,h=g.autolinker),i=a.content,f.length=0,h.link(i),!f.length)continue;for(s=[],c=a.level,l=0;l({useUnsafeMarkdown:!1})};const me=de;function ge(e){let{useUnsafeMarkdown:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=t,n=t?[]:["style","class"];return t&&!ge.hasWarnedAboutDeprecation&&(console.warn("useUnsafeMarkdown display configuration parameter is deprecated since >3.26.0 and will be removed in v4.0.0."),ge.hasWarnedAboutDeprecation=!0),pe().sanitize(e,{ADD_ATTR:["target"],FORBID_TAGS:["style","form"],ALLOW_DATA_ATTR:r,FORBID_ATTR:n})}ge.hasWarnedAboutDeprecation=!1},45308:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>f});var n,o=r(86),a=r.n(o),i=r(8712),s=r.n(i),l=r(90242),u=r(27621);const c=r(95102),p={},f=p;a()(n=s()(c).call(c)).call(n,(function(e){if("./index.js"===e)return;let t=c(e);p[(0,l.Zl)(e)]=t.default?t.default:t})),p.SafeRender=u.default},55812:(e,t,r)=>{"use strict";r.r(t),r.d(t,{SHOW_AUTH_POPUP:()=>p,AUTHORIZE:()=>f,LOGOUT:()=>h,PRE_AUTHORIZE_OAUTH2:()=>d,AUTHORIZE_OAUTH2:()=>m,VALIDATE:()=>g,CONFIGURE_AUTH:()=>v,RESTORE_AUTHORIZATION:()=>y,showDefinitions:()=>b,authorize:()=>w,authorizeWithPersistOption:()=>E,logout:()=>x,logoutWithPersistOption:()=>_,preAuthorizeImplicit:()=>S,authorizeOauth2:()=>A,authorizeOauth2WithPersistOption:()=>k,authorizePassword:()=>C,authorizeApplication:()=>O,authorizeAccessCodeWithFormParams:()=>j,authorizeAccessCodeWithBasicAuthentication:()=>I,authorizeRequest:()=>N,configureAuth:()=>T,restoreAuthorization:()=>P,persistAuthorizationIfNeeded:()=>R,authPopup:()=>M});var n=r(35627),o=r.n(n),a=r(76986),i=r.n(a),s=r(84564),l=r.n(s),u=r(27504),c=r(90242);const p="show_popup",f="authorize",h="logout",d="pre_authorize_oauth2",m="authorize_oauth2",g="validate",v="configure_auth",y="restore_authorization";function b(e){return{type:p,payload:e}}function w(e){return{type:f,payload:e}}const E=e=>t=>{let{authActions:r}=t;r.authorize(e),r.persistAuthorizationIfNeeded()};function x(e){return{type:h,payload:e}}const _=e=>t=>{let{authActions:r}=t;r.logout(e),r.persistAuthorizationIfNeeded()},S=e=>t=>{let{authActions:r,errActions:n}=t,{auth:a,token:i,isValid:s}=e,{schema:l,name:c}=a,p=l.get("flow");delete u.Z.swaggerUIRedirectOauth2,"accessCode"===p||s||n.newAuthErr({authId:c,source:"auth",level:"warning",message:"Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"}),i.error?n.newAuthErr({authId:c,source:"auth",level:"error",message:o()(i)}):r.authorizeOauth2WithPersistOption({auth:a,token:i})};function A(e){return{type:m,payload:e}}const k=e=>t=>{let{authActions:r}=t;r.authorizeOauth2(e),r.persistAuthorizationIfNeeded()},C=e=>t=>{let{authActions:r}=t,{schema:n,name:o,username:a,password:s,passwordType:l,clientId:u,clientSecret:p}=e,f={grant_type:"password",scope:e.scopes.join(" "),username:a,password:s},h={};switch(l){case"request-body":!function(e,t,r){t&&i()(e,{client_id:t});r&&i()(e,{client_secret:r})}(f,u,p);break;case"basic":h.Authorization="Basic "+(0,c.r3)(u+":"+p);break;default:console.warn(`Warning: invalid passwordType ${l} was passed, not including client id and secret`)}return r.authorizeRequest({body:(0,c.GZ)(f),url:n.get("tokenUrl"),name:o,headers:h,query:{},auth:e})};const O=e=>t=>{let{authActions:r}=t,{schema:n,scopes:o,name:a,clientId:i,clientSecret:s}=e,l={Authorization:"Basic "+(0,c.r3)(i+":"+s)},u={grant_type:"client_credentials",scope:o.join(" ")};return r.authorizeRequest({body:(0,c.GZ)(u),name:a,url:n.get("tokenUrl"),auth:e,headers:l})},j=e=>{let{auth:t,redirectUrl:r}=e;return e=>{let{authActions:n}=e,{schema:o,name:a,clientId:i,clientSecret:s,codeVerifier:l}=t,u={grant_type:"authorization_code",code:t.code,client_id:i,client_secret:s,redirect_uri:r,code_verifier:l};return n.authorizeRequest({body:(0,c.GZ)(u),name:a,url:o.get("tokenUrl"),auth:t})}},I=e=>{let{auth:t,redirectUrl:r}=e;return e=>{let{authActions:n}=e,{schema:o,name:a,clientId:i,clientSecret:s,codeVerifier:l}=t,u={Authorization:"Basic "+(0,c.r3)(i+":"+s)},p={grant_type:"authorization_code",code:t.code,client_id:i,redirect_uri:r,code_verifier:l};return n.authorizeRequest({body:(0,c.GZ)(p),name:a,url:o.get("tokenUrl"),auth:t,headers:u})}},N=e=>t=>{let r,{fn:n,getConfigs:a,authActions:s,errActions:u,oas3Selectors:c,specSelectors:p,authSelectors:f}=t,{body:h,query:d={},headers:m={},name:g,url:v,auth:y}=e,{additionalQueryStringParams:b}=f.getConfigs()||{};if(p.isOAS3()){let e=c.serverEffectiveValue(c.selectedServer());r=l()(v,e,!0)}else r=l()(v,p.url(),!0);"object"==typeof b&&(r.query=i()({},r.query,b));const w=r.toString();let E=i()({Accept:"application/json, text/plain, */*","Content-Type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},m);n.fetch({url:w,method:"post",headers:E,query:d,body:h,requestInterceptor:a().requestInterceptor,responseInterceptor:a().responseInterceptor}).then((function(e){let t=JSON.parse(e.data),r=t&&(t.error||""),n=t&&(t.parseError||"");e.ok?r||n?u.newAuthErr({authId:g,level:"error",source:"auth",message:o()(t)}):s.authorizeOauth2WithPersistOption({auth:y,token:t}):u.newAuthErr({authId:g,level:"error",source:"auth",message:e.statusText})})).catch((e=>{let t=new Error(e).message;if(e.response&&e.response.data){const r=e.response.data;try{const e="string"==typeof r?JSON.parse(r):r;e.error&&(t+=`, error: ${e.error}`),e.error_description&&(t+=`, description: ${e.error_description}`)}catch(e){}}u.newAuthErr({authId:g,level:"error",source:"auth",message:t})}))};function T(e){return{type:v,payload:e}}function P(e){return{type:y,payload:e}}const R=()=>e=>{let{authSelectors:t,getConfigs:r}=e;if(r().persistAuthorization){const e=t.authorized();localStorage.setItem("authorized",o()(e.toJS()))}},M=(e,t)=>()=>{u.Z.swaggerUIRedirectOauth2=t,u.Z.open(e)}},93705:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>u,preauthorizeBasic:()=>c,preauthorizeApiKey:()=>p});var n=r(11189),o=r.n(n),a=r(43962),i=r(55812),s=r(60035),l=r(48302);function u(){return{afterLoad(e){this.rootInjects=this.rootInjects||{},this.rootInjects.initOAuth=e.authActions.configureAuth,this.rootInjects.preauthorizeApiKey=o()(p).call(p,null,e),this.rootInjects.preauthorizeBasic=o()(c).call(c,null,e)},statePlugins:{auth:{reducers:a.default,actions:i,selectors:s},spec:{wrapActions:l}}}}function c(e,t,r,n){const{authActions:{authorize:o},specSelectors:{specJson:a,isOAS3:i}}=e,s=i()?["components","securitySchemes"]:["securityDefinitions"],l=a().getIn([...s,t]);return l?o({[t]:{value:{username:r,password:n},schema:l.toJS()}}):null}function p(e,t,r){const{authActions:{authorize:n},specSelectors:{specJson:o,isOAS3:a}}=e,i=a()?["components","securitySchemes"]:["securityDefinitions"],s=o().getIn([...i,t]);return s?n({[t]:{value:r,schema:s.toJS()}}):null}},43962:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>c});var n=r(86),o=r.n(n),a=r(76986),i=r.n(a),s=r(43393),l=r(90242),u=r(55812);const c={[u.SHOW_AUTH_POPUP]:(e,t)=>{let{payload:r}=t;return e.set("showDefinitions",r)},[u.AUTHORIZE]:(e,t)=>{var r;let{payload:n}=t,a=(0,s.fromJS)(n),i=e.get("authorized")||(0,s.Map)();return o()(r=a.entrySeq()).call(r,(t=>{let[r,n]=t;if(!(0,l.Wl)(n.getIn))return e.set("authorized",i);let o=n.getIn(["schema","type"]);if("apiKey"===o||"http"===o)i=i.set(r,n);else if("basic"===o){let e=n.getIn(["value","username"]),t=n.getIn(["value","password"]);i=i.setIn([r,"value"],{username:e,header:"Basic "+(0,l.r3)(e+":"+t)}),i=i.setIn([r,"schema"],n.get("schema"))}})),e.set("authorized",i)},[u.AUTHORIZE_OAUTH2]:(e,t)=>{let r,{payload:n}=t,{auth:o,token:a}=n;o.token=i()({},a),r=(0,s.fromJS)(o);let l=e.get("authorized")||(0,s.Map)();return l=l.set(r.get("name"),r),e.set("authorized",l)},[u.LOGOUT]:(e,t)=>{let{payload:r}=t,n=e.get("authorized").withMutations((e=>{o()(r).call(r,(t=>{e.delete(t)}))}));return e.set("authorized",n)},[u.CONFIGURE_AUTH]:(e,t)=>{let{payload:r}=t;return e.set("configs",r)},[u.RESTORE_AUTHORIZATION]:(e,t)=>{let{payload:r}=t;return e.set("authorized",(0,s.fromJS)(r.authorized))}}},60035:(e,t,r)=>{"use strict";r.r(t),r.d(t,{shownDefinitions:()=>y,definitionsToAuthorize:()=>b,getDefinitionsByNames:()=>w,definitionsForRequirements:()=>E,authorized:()=>x,isAuthorized:()=>_,getConfigs:()=>S});var n=r(86),o=r.n(n),a=r(14418),i=r.n(a),s=r(92039),l=r.n(s),u=r(11882),c=r.n(u),p=r(97606),f=r.n(p),h=r(28222),d=r.n(h),m=r(20573),g=r(43393);const v=e=>e,y=(0,m.P1)(v,(e=>e.get("showDefinitions"))),b=(0,m.P1)(v,(()=>e=>{var t;let{specSelectors:r}=e,n=r.securityDefinitions()||(0,g.Map)({}),a=(0,g.List)();return o()(t=n.entrySeq()).call(t,(e=>{let[t,r]=e,n=(0,g.Map)();n=n.set(t,r),a=a.push(n)})),a})),w=(e,t)=>e=>{var r;let{specSelectors:n}=e;console.warn("WARNING: getDefinitionsByNames is deprecated and will be removed in the next major version.");let a=n.securityDefinitions(),i=(0,g.List)();return o()(r=t.valueSeq()).call(r,(e=>{var t;let r=(0,g.Map)();o()(t=e.entrySeq()).call(t,(e=>{let t,[n,i]=e,s=a.get(n);var l;"oauth2"===s.get("type")&&i.size&&(t=s.get("scopes"),o()(l=t.keySeq()).call(l,(e=>{i.contains(e)||(t=t.delete(e))})),s=s.set("allowedScopes",t));r=r.set(n,s)})),i=i.push(r)})),i},E=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,g.List)();return e=>{let{authSelectors:r}=e;const n=r.definitionsToAuthorize()||(0,g.List)();return i()(n).call(n,(e=>l()(t).call(t,(t=>t.get(e.keySeq().first())))))}},x=(0,m.P1)(v,(e=>e.get("authorized")||(0,g.Map)())),_=(e,t)=>e=>{var r;let{authSelectors:n}=e,o=n.authorized();return g.List.isList(t)?!!i()(r=t.toJS()).call(r,(e=>{var t,r;return-1===c()(t=f()(r=d()(e)).call(r,(e=>!!o.get(e)))).call(t,!1)})).length:null},S=(0,m.P1)(v,(e=>e.get("configs")))},48302:(e,t,r)=>{"use strict";r.r(t),r.d(t,{execute:()=>n});const n=(e,t)=>{let{authSelectors:r,specSelectors:n}=t;return t=>{let{path:o,method:a,operation:i,extras:s}=t,l={authorized:r.authorized()&&r.authorized().toJS(),definitions:n.securityDefinitions()&&n.securityDefinitions().toJS(),specSecurity:n.security()&&n.security().toJS()};return e({path:o,method:a,operation:i,securities:l,...s})}}},70714:(e,t,r)=>{"use strict";r.r(t),r.d(t,{UPDATE_CONFIGS:()=>n,TOGGLE_CONFIGS:()=>o,update:()=>a,toggle:()=>i,loaded:()=>s});const n="configs_update",o="configs_toggle";function a(e,t){return{type:n,payload:{[e]:t}}}function i(e){return{type:o,payload:e}}const s=()=>e=>{let{getConfigs:t,authActions:r}=e;if(t().persistAuthorization){const e=localStorage.getItem("authorized");e&&r.restoreAuthorization({authorized:JSON.parse(e)})}}},92256:(e,t,r)=>{"use strict";r.r(t),r.d(t,{parseYamlConfig:()=>o});var n=r(1272);const o=(e,t)=>{try{return n.ZP.load(e)}catch(e){return t&&t.errActions.newThrownErr(new Error(e)),{}}}},1661:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>c});var n=r(15163),o=r(92256),a=r(70714),i=r(22698),s=r(69018),l=r(37743);const u={getLocalConfig:()=>(0,o.parseYamlConfig)(n)};function c(){return{statePlugins:{spec:{actions:i,selectors:u},configs:{reducers:l.default,actions:a,selectors:s}}}}},37743:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>a});var n=r(43393),o=r(70714);const a={[o.UPDATE_CONFIGS]:(e,t)=>e.merge((0,n.fromJS)(t.payload)),[o.TOGGLE_CONFIGS]:(e,t)=>{const r=t.payload,n=e.get(r);return e.set(r,!n)}}},69018:(e,t,r)=>{"use strict";r.r(t),r.d(t,{get:()=>a});var n=r(58309),o=r.n(n);const a=(e,t)=>e.getIn(o()(t)?t:[t])},22698:(e,t,r)=>{"use strict";r.r(t),r.d(t,{downloadConfig:()=>o,getConfigByUrl:()=>a});var n=r(92256);const o=e=>t=>{const{fn:{fetch:r}}=t;return r(e)},a=(e,t)=>r=>{let{specActions:o}=r;if(e)return o.downloadConfig(e).then(a,a);function a(r){r instanceof Error||r.status>=400?(o.updateLoadingStatus("failedConfig"),o.updateLoadingStatus("failedConfig"),o.updateUrl(""),console.error(r.statusText+" "+e.url),t(null)):t((0,n.parseYamlConfig)(r.text))}}},31970:(e,t,r)=>{"use strict";r.r(t),r.d(t,{setHash:()=>n});const n=e=>e?history.pushState(null,null,`#${e}`):window.location.hash=""},34980:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(41599),o=r(60877),a=r(34584);function i(){return[n.default,{statePlugins:{configs:{wrapActions:{loaded:(e,t)=>function(){e(...arguments);const r=decodeURIComponent(window.location.hash);t.layoutActions.parseDeepLinkHash(r)}}}},wrapComponents:{operation:o.default,OperationTag:a.default}}]}},41599:(e,t,r)=>{"use strict";r.r(t),r.d(t,{show:()=>b,scrollTo:()=>w,parseDeepLinkHash:()=>E,readyToScroll:()=>x,scrollToElement:()=>_,clearScrollTo:()=>S,default:()=>A});var n=r(58309),o=r.n(n),a=r(24278),i=r.n(a),s=r(97606),l=r.n(s),u=r(11882),c=r.n(u),p=r(31970),f=r(45172),h=r.n(f),d=r(90242),m=r(43393),g=r.n(m);const v="layout_scroll_to",y="layout_clear_scroll",b=(e,t)=>{let{getConfigs:r,layoutSelectors:n}=t;return function(){for(var t=arguments.length,a=new Array(t),i=0;i({type:v,payload:o()(e)?e:[e]}),E=e=>t=>{let{layoutActions:r,layoutSelectors:n,getConfigs:o}=t;if(o().deepLinking&&e){var a;let t=i()(e).call(e,1);"!"===t[0]&&(t=i()(t).call(t,1)),"/"===t[0]&&(t=i()(t).call(t,1));const o=l()(a=t.split("/")).call(a,(e=>e||"")),s=n.isShownKeyFromUrlHashArray(o),[u,p="",f=""]=s;if("operations"===u){const e=n.isShownKeyFromUrlHashArray([p]);c()(p).call(p,"_")>-1&&(console.warn("Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead."),r.show(l()(e).call(e,(e=>e.replace(/_/g," "))),!0)),r.show(e,!0)}(c()(p).call(p,"_")>-1||c()(f).call(f,"_")>-1)&&(console.warn("Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead."),r.show(l()(s).call(s,(e=>e.replace(/_/g," "))),!0)),r.show(s,!0),r.scrollTo(s)}},x=(e,t)=>r=>{const n=r.layoutSelectors.getScrollToKey();g().is(n,(0,m.fromJS)(e))&&(r.layoutActions.scrollToElement(t),r.layoutActions.clearScrollTo())},_=(e,t)=>r=>{try{t=t||r.fn.getScrollParent(e),h().createScroller(t).to(e)}catch(e){console.error(e)}},S=()=>({type:y});const A={fn:{getScrollParent:function(e,t){const r=document.documentElement;let n=getComputedStyle(e);const o="absolute"===n.position,a=t?/(auto|scroll|hidden)/:/(auto|scroll)/;if("fixed"===n.position)return r;for(let t=e;t=t.parentElement;)if(n=getComputedStyle(t),(!o||"static"!==n.position)&&a.test(n.overflow+n.overflowY+n.overflowX))return t;return r}},statePlugins:{layout:{actions:{scrollToElement:_,scrollTo:w,clearScrollTo:S,readyToScroll:x,parseDeepLinkHash:E},selectors:{getScrollToKey:e=>e.get("scrollToKey"),isShownKeyFromUrlHashArray(e,t){const[r,n]=t;return n?["operations",r,n]:r?["operations-tag",r]:[]},urlHashArrayFromIsShownKey(e,t){let[r,n,o]=t;return"operations"==r?[n,o]:"operations-tag"==r?[n]:[]}},reducers:{[v]:(e,t)=>e.set("scrollToKey",g().fromJS(t.payload)),[y]:e=>e.delete("scrollToKey")},wrapActions:{show:b}}}}},34584:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(61125),o=r.n(n),a=r(67294);const i=(e,t)=>class extends a.Component{constructor(){super(...arguments),o()(this,"onLoad",(e=>{const{tag:r}=this.props,n=["operations-tag",r];t.layoutActions.readyToScroll(n,e)}))}render(){return a.createElement("span",{ref:this.onLoad},a.createElement(e,this.props))}}},60877:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(61125),o=r.n(n),a=r(67294);r(23930);const i=(e,t)=>class extends a.Component{constructor(){super(...arguments),o()(this,"onLoad",(e=>{const{operation:r}=this.props,{tag:n,operationId:o}=r.toObject();let{isShownKey:a}=r.toObject();a=a||["operations",n,o],t.layoutActions.readyToScroll(a,e)}))}render(){return a.createElement("span",{ref:this.onLoad},a.createElement(e,this.props))}}},48011:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>d});var n=r(76986),o=r.n(n),a=r(63460),i=r.n(a),s=r(11882),l=r.n(s),u=r(35627),c=r.n(u),p=r(20573),f=r(43393),h=r(27504);function d(e){let{fn:t}=e;return{statePlugins:{spec:{actions:{download:e=>r=>{let{errActions:n,specSelectors:a,specActions:s,getConfigs:l}=r,{fetch:u}=t;const c=l();function p(t){if(t instanceof Error||t.status>=400)return s.updateLoadingStatus("failed"),n.newThrownErr(o()(new Error((t.message||t.statusText)+" "+e),{source:"fetch"})),void(!t.status&&t instanceof Error&&function(){try{let t;if("URL"in h.Z?t=new(i())(e):(t=document.createElement("a"),t.href=e),"https:"!==t.protocol&&"https:"===h.Z.location.protocol){const e=o()(new Error(`Possible mixed-content issue? The page was loaded over https:// but a ${t.protocol}// URL was specified. Check that you are not attempting to load mixed content.`),{source:"fetch"});return void n.newThrownErr(e)}if(t.origin!==h.Z.location.origin){const e=o()(new Error(`Possible cross-origin (CORS) issue? The URL origin (${t.origin}) does not match the page (${h.Z.location.origin}). Check the server returns the correct 'Access-Control-Allow-*' headers.`),{source:"fetch"});n.newThrownErr(e)}}catch(e){return}}());s.updateLoadingStatus("success"),s.updateSpec(t.text),a.url()!==e&&s.updateUrl(e)}e=e||a.url(),s.updateLoadingStatus("loading"),n.clear({source:"fetch"}),u({url:e,loadSpec:!0,requestInterceptor:c.requestInterceptor||(e=>e),responseInterceptor:c.responseInterceptor||(e=>e),credentials:"same-origin",headers:{Accept:"application/json,*/*"}}).then(p,p)},updateLoadingStatus:e=>{let t=[null,"loading","failed","success","failedConfig"];return-1===l()(t).call(t,e)&&console.error(`Error: ${e} is not one of ${c()(t)}`),{type:"spec_update_loading_status",payload:e}}},reducers:{spec_update_loading_status:(e,t)=>"string"==typeof t.payload?e.set("loadingStatus",t.payload):e},selectors:{loadingStatus:(0,p.P1)((e=>e||(0,f.Map)()),(e=>e.get("loadingStatus")||null))}}}}}},34966:(e,t,r)=>{"use strict";r.r(t),r.d(t,{NEW_THROWN_ERR:()=>o,NEW_THROWN_ERR_BATCH:()=>a,NEW_SPEC_ERR:()=>i,NEW_SPEC_ERR_BATCH:()=>s,NEW_AUTH_ERR:()=>l,CLEAR:()=>u,CLEAR_BY:()=>c,newThrownErr:()=>p,newThrownErrBatch:()=>f,newSpecErr:()=>h,newSpecErrBatch:()=>d,newAuthErr:()=>m,clear:()=>g,clearBy:()=>v});var n=r(7710);const o="err_new_thrown_err",a="err_new_thrown_err_batch",i="err_new_spec_err",s="err_new_spec_err_batch",l="err_new_auth_err",u="err_clear",c="err_clear_by";function p(e){return{type:o,payload:(0,n.serializeError)(e)}}function f(e){return{type:a,payload:e}}function h(e){return{type:i,payload:e}}function d(e){return{type:s,payload:e}}function m(e){return{type:l,payload:e}}function g(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{type:u,payload:e}}function v(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!0;return{type:c,payload:e}}},56982:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>c});var n=r(14418),o=r.n(n),a=r(97606),i=r.n(a),s=r(54061),l=r.n(s);const u=[r(2392),r(21835)];function c(e){var t;let r={jsSpec:{}},n=l()(u,((e,t)=>{try{let n=t.transform(e,r);return o()(n).call(n,(e=>!!e))}catch(t){return console.error("Transformer error:",t),e}}),e);return i()(t=o()(n).call(n,(e=>!!e))).call(t,(e=>(!e.get("line")&&e.get("path"),e)))}},2392:(e,t,r)=>{"use strict";r.r(t),r.d(t,{transform:()=>p});var n=r(97606),o=r.n(n),a=r(11882),i=r.n(a),s=r(24278),l=r.n(s),u=r(24282),c=r.n(u);function p(e){return o()(e).call(e,(e=>{var t;let r="is not of a type(s)",n=i()(t=e.get("message")).call(t,r);if(n>-1){var o,a;let t=l()(o=e.get("message")).call(o,n+r.length).split(",");return e.set("message",l()(a=e.get("message")).call(a,0,n)+function(e){return c()(e).call(e,((e,t,r,n)=>r===n.length-1&&n.length>1?e+"or "+t:n[r+1]&&n.length>2?e+t+", ":n[r+1]?e+t+" ":e+t),"should be a")}(t))}return e}))}},21835:(e,t,r)=>{"use strict";r.r(t),r.d(t,{transform:()=>n});r(97606),r(11882),r(27361),r(43393);function n(e,t){let{jsSpec:r}=t;return e}},77793:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(93527),o=r(34966),a=r(87667);function i(e){return{statePlugins:{err:{reducers:(0,n.default)(e),actions:o,selectors:a}}}}},93527:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>v});var n=r(76986),o=r.n(n),a=r(97606),i=r.n(a),s=r(39022),l=r.n(s),u=r(14418),c=r.n(u),p=r(2250),f=r.n(p),h=r(34966),d=r(43393),m=r(56982);let g={line:0,level:"error",message:"Unknown error"};function v(){return{[h.NEW_THROWN_ERR]:(e,t)=>{let{payload:r}=t,n=o()(g,r,{type:"thrown"});return e.update("errors",(e=>(e||(0,d.List)()).push((0,d.fromJS)(n)))).update("errors",(e=>(0,m.default)(e)))},[h.NEW_THROWN_ERR_BATCH]:(e,t)=>{let{payload:r}=t;return r=i()(r).call(r,(e=>(0,d.fromJS)(o()(g,e,{type:"thrown"})))),e.update("errors",(e=>{var t;return l()(t=e||(0,d.List)()).call(t,(0,d.fromJS)(r))})).update("errors",(e=>(0,m.default)(e)))},[h.NEW_SPEC_ERR]:(e,t)=>{let{payload:r}=t,n=(0,d.fromJS)(r);return n=n.set("type","spec"),e.update("errors",(e=>(e||(0,d.List)()).push((0,d.fromJS)(n)).sortBy((e=>e.get("line"))))).update("errors",(e=>(0,m.default)(e)))},[h.NEW_SPEC_ERR_BATCH]:(e,t)=>{let{payload:r}=t;return r=i()(r).call(r,(e=>(0,d.fromJS)(o()(g,e,{type:"spec"})))),e.update("errors",(e=>{var t;return l()(t=e||(0,d.List)()).call(t,(0,d.fromJS)(r))})).update("errors",(e=>(0,m.default)(e)))},[h.NEW_AUTH_ERR]:(e,t)=>{let{payload:r}=t,n=(0,d.fromJS)(o()({},r));return n=n.set("type","auth"),e.update("errors",(e=>(e||(0,d.List)()).push((0,d.fromJS)(n)))).update("errors",(e=>(0,m.default)(e)))},[h.CLEAR]:(e,t)=>{var r;let{payload:n}=t;if(!n||!e.get("errors"))return e;let o=c()(r=e.get("errors")).call(r,(e=>{var t;return f()(t=e.keySeq()).call(t,(t=>{const r=e.get(t),o=n[t];return!o||r!==o}))}));return e.merge({errors:o})},[h.CLEAR_BY]:(e,t)=>{var r;let{payload:n}=t;if(!n||"function"!=typeof n)return e;let o=c()(r=e.get("errors")).call(r,(e=>n(e)));return e.merge({errors:o})}}}},87667:(e,t,r)=>{"use strict";r.r(t),r.d(t,{allErrors:()=>a,lastError:()=>i});var n=r(43393),o=r(20573);const a=(0,o.P1)((e=>e),(e=>e.get("errors",(0,n.List)()))),i=(0,o.P1)(a,(e=>e.last()))},49978:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(4309);function o(){return{fn:{opsFilter:n.default}}}},4309:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var n=r(14418),o=r.n(n),a=r(11882),i=r.n(a);function s(e,t){return o()(e).call(e,((e,r)=>-1!==i()(r).call(r,t)))}},25474:(e,t,r)=>{"use strict";r.r(t),r.d(t,{UPDATE_LAYOUT:()=>o,UPDATE_FILTER:()=>a,UPDATE_MODE:()=>i,SHOW:()=>s,updateLayout:()=>l,updateFilter:()=>u,show:()=>c,changeMode:()=>p});var n=r(90242);const o="layout_update_layout",a="layout_update_filter",i="layout_update_mode",s="layout_show";function l(e){return{type:o,payload:e}}function u(e){return{type:a,payload:e}}function c(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e=(0,n.AF)(e),{type:s,payload:{thing:e,shown:t}}}function p(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e=(0,n.AF)(e),{type:i,payload:{thing:e,mode:t}}}},26821:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var n=r(5672),o=r(25474),a=r(4400),i=r(28989);function s(){return{statePlugins:{layout:{reducers:n.default,actions:o,selectors:a},spec:{wrapSelectors:i}}}}},5672:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var n=r(39022),o=r.n(n),a=r(43393),i=r(25474);const s={[i.UPDATE_LAYOUT]:(e,t)=>e.set("layout",t.payload),[i.UPDATE_FILTER]:(e,t)=>e.set("filter",t.payload),[i.SHOW]:(e,t)=>{const r=t.payload.shown,n=(0,a.fromJS)(t.payload.thing);return e.update("shown",(0,a.fromJS)({}),(e=>e.set(n,r)))},[i.UPDATE_MODE]:(e,t)=>{var r;let n=t.payload.thing,a=t.payload.mode;return e.setIn(o()(r=["modes"]).call(r,n),(a||"")+"")}}},4400:(e,t,r)=>{"use strict";r.r(t),r.d(t,{current:()=>i,currentFilter:()=>s,isShown:()=>l,whatMode:()=>u,showSummary:()=>c});var n=r(20573),o=r(90242),a=r(43393);const i=e=>e.get("layout"),s=e=>e.get("filter"),l=(e,t,r)=>(t=(0,o.AF)(t),e.get("shown",(0,a.fromJS)({})).get((0,a.fromJS)(t),r)),u=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return t=(0,o.AF)(t),e.getIn(["modes",...t],r)},c=(0,n.P1)((e=>e),(e=>!l(e,"editor")))},28989:(e,t,r)=>{"use strict";r.r(t),r.d(t,{taggedOperations:()=>a});var n=r(24278),o=r.n(n);const a=(e,t)=>function(r){for(var n=arguments.length,a=new Array(n>1?n-1:0),i=1;i=0&&(s=o()(s).call(s,0,f)),s}},9150:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>a});var n=r(11189),o=r.n(n);function a(e){let{configs:t}=e;const r={debug:0,info:1,log:2,warn:3,error:4},n=e=>r[e]||-1;let{logLevel:a}=t,i=n(a);function s(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o=i&&console[e](...r)}return s.warn=o()(s).call(s,null,"warn"),s.error=o()(s).call(s,null,"error"),s.info=o()(s).call(s,null,"info"),s.debug=o()(s).call(s,null,"debug"),{rootInjects:{log:s}}}},67002:(e,t,r)=>{"use strict";r.r(t),r.d(t,{UPDATE_SELECTED_SERVER:()=>n,UPDATE_REQUEST_BODY_VALUE:()=>o,UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG:()=>a,UPDATE_REQUEST_BODY_INCLUSION:()=>i,UPDATE_ACTIVE_EXAMPLES_MEMBER:()=>s,UPDATE_REQUEST_CONTENT_TYPE:()=>l,UPDATE_RESPONSE_CONTENT_TYPE:()=>u,UPDATE_SERVER_VARIABLE_VALUE:()=>c,SET_REQUEST_BODY_VALIDATE_ERROR:()=>p,CLEAR_REQUEST_BODY_VALIDATE_ERROR:()=>f,CLEAR_REQUEST_BODY_VALUE:()=>h,setSelectedServer:()=>d,setRequestBodyValue:()=>m,setRetainRequestBodyValueFlag:()=>g,setRequestBodyInclusion:()=>v,setActiveExamplesMember:()=>y,setRequestContentType:()=>b,setResponseContentType:()=>w,setServerVariableValue:()=>E,setRequestBodyValidateError:()=>x,clearRequestBodyValidateError:()=>_,initRequestBodyValidateError:()=>S,clearRequestBodyValue:()=>A});const n="oas3_set_servers",o="oas3_set_request_body_value",a="oas3_set_request_body_retain_flag",i="oas3_set_request_body_inclusion",s="oas3_set_active_examples_member",l="oas3_set_request_content_type",u="oas3_set_response_content_type",c="oas3_set_server_variable_value",p="oas3_set_request_body_validate_error",f="oas3_clear_request_body_validate_error",h="oas3_clear_request_body_value";function d(e,t){return{type:n,payload:{selectedServerUrl:e,namespace:t}}}function m(e){let{value:t,pathMethod:r}=e;return{type:o,payload:{value:t,pathMethod:r}}}const g=e=>{let{value:t,pathMethod:r}=e;return{type:a,payload:{value:t,pathMethod:r}}};function v(e){let{value:t,pathMethod:r,name:n}=e;return{type:i,payload:{value:t,pathMethod:r,name:n}}}function y(e){let{name:t,pathMethod:r,contextType:n,contextName:o}=e;return{type:s,payload:{name:t,pathMethod:r,contextType:n,contextName:o}}}function b(e){let{value:t,pathMethod:r}=e;return{type:l,payload:{value:t,pathMethod:r}}}function w(e){let{value:t,path:r,method:n}=e;return{type:u,payload:{value:t,path:r,method:n}}}function E(e){let{server:t,namespace:r,key:n,val:o}=e;return{type:c,payload:{server:t,namespace:r,key:n,val:o}}}const x=e=>{let{path:t,method:r,validationErrors:n}=e;return{type:p,payload:{path:t,method:r,validationErrors:n}}},_=e=>{let{path:t,method:r}=e;return{type:f,payload:{path:t,method:r}}},S=e=>{let{pathMethod:t}=e;return{type:f,payload:{path:t[0],method:t[1]}}},A=e=>{let{pathMethod:t}=e;return{type:h,payload:{pathMethod:t}}}},73723:(e,t,r)=>{"use strict";r.r(t),r.d(t,{definitionsToAuthorize:()=>f});var n=r(86),o=r.n(n),a=r(14418),i=r.n(a),s=r(24282),l=r.n(s),u=r(20573),c=r(43393),p=r(7779);const f=(h=(0,u.P1)((e=>e),(e=>{let{specSelectors:t}=e;return t.securityDefinitions()}),((e,t)=>{var r;let n=(0,c.List)();return t?(o()(r=t.entrySeq()).call(r,(e=>{let[t,r]=e;const a=r.get("type");var s;if("oauth2"===a&&o()(s=r.get("flows").entrySeq()).call(s,(e=>{let[o,a]=e,s=(0,c.fromJS)({flow:o,authorizationUrl:a.get("authorizationUrl"),tokenUrl:a.get("tokenUrl"),scopes:a.get("scopes"),type:r.get("type"),description:r.get("description")});n=n.push(new c.Map({[t]:i()(s).call(s,(e=>void 0!==e))}))})),"http"!==a&&"apiKey"!==a||(n=n.push(new c.Map({[t]:r}))),"openIdConnect"===a&&r.get("openIdConnectData")){let e=r.get("openIdConnectData"),a=e.get("grant_types_supported")||["authorization_code","implicit"];o()(a).call(a,(o=>{var a;let s=e.get("scopes_supported")&&l()(a=e.get("scopes_supported")).call(a,((e,t)=>e.set(t,"")),new c.Map),u=(0,c.fromJS)({flow:o,authorizationUrl:e.get("authorization_endpoint"),tokenUrl:e.get("token_endpoint"),scopes:s,type:"oauth2",openIdConnectUrl:r.get("openIdConnectUrl")});n=n.push(new c.Map({[t]:i()(u).call(u,(e=>void 0!==e))}))}))}})),n):n})),(e,t)=>function(){const r=t.getSystem().specSelectors.specJson();for(var n=arguments.length,o=new Array(n),a=0;a{"use strict";r.r(t),r.d(t,{default:()=>u});var n=r(23101),o=r.n(n),a=r(97606),i=r.n(a),s=r(67294),l=(r(23930),r(43393));const u=e=>{var t;let{callbacks:r,getComponent:n,specPath:a}=e;const u=n("OperationContainer",!0);if(!r)return s.createElement("span",null,"No callbacks");let c=i()(t=r.entrySeq()).call(t,(t=>{var r;let[n,c]=t;return s.createElement("div",{key:n},s.createElement("h2",null,n),i()(r=c.entrySeq()).call(r,(t=>{var r;let[c,p]=t;return"$$ref"===c?null:s.createElement("div",{key:c},i()(r=p.entrySeq()).call(r,(t=>{let[r,i]=t;if("$$ref"===r)return null;let p=(0,l.fromJS)({operation:i});return s.createElement(u,o()({},e,{op:p,key:r,tag:"",method:r,path:c,specPath:a.push(n,c,r),allowTryItOut:!1}))})))})))}));return s.createElement("div",null,c)}},86775:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>f});var n=r(61125),o=r.n(n),a=r(76986),i=r.n(a),s=r(14418),l=r.n(s),u=r(97606),c=r.n(u),p=r(67294);class f extends p.Component{constructor(e,t){super(e,t),o()(this,"onChange",(e=>{let{onChange:t}=this.props,{value:r,name:n}=e.target,o=i()({},this.state.value);n?o[n]=r:o=r,this.setState({value:o},(()=>t(this.state)))}));let{name:r,schema:n}=this.props,a=this.getValue();this.state={name:r,schema:n,value:a}}getValue(){let{name:e,authorized:t}=this.props;return t&&t.getIn([e,"value"])}render(){var e;let{schema:t,getComponent:r,errSelectors:n,name:o}=this.props;const a=r("Input"),i=r("Row"),s=r("Col"),u=r("authError"),f=r("Markdown",!0),h=r("JumpToPath",!0),d=(t.get("scheme")||"").toLowerCase();let m=this.getValue(),g=l()(e=n.allErrors()).call(e,(e=>e.get("authId")===o));if("basic"===d){var v;let e=m?m.get("username"):null;return p.createElement("div",null,p.createElement("h4",null,p.createElement("code",null,o||t.get("name")),"  (http, Basic)",p.createElement(h,{path:["securityDefinitions",o]})),e&&p.createElement("h6",null,"Authorized"),p.createElement(i,null,p.createElement(f,{source:t.get("description")})),p.createElement(i,null,p.createElement("label",null,"Username:"),e?p.createElement("code",null," ",e," "):p.createElement(s,null,p.createElement(a,{type:"text",required:"required",name:"username","aria-label":"auth-basic-username",onChange:this.onChange,autoFocus:!0}))),p.createElement(i,null,p.createElement("label",null,"Password:"),e?p.createElement("code",null," ****** "):p.createElement(s,null,p.createElement(a,{autoComplete:"new-password",name:"password",type:"password","aria-label":"auth-basic-password",onChange:this.onChange}))),c()(v=g.valueSeq()).call(v,((e,t)=>p.createElement(u,{error:e,key:t}))))}var y;return"bearer"===d?p.createElement("div",null,p.createElement("h4",null,p.createElement("code",null,o||t.get("name")),"  (http, Bearer)",p.createElement(h,{path:["securityDefinitions",o]})),m&&p.createElement("h6",null,"Authorized"),p.createElement(i,null,p.createElement(f,{source:t.get("description")})),p.createElement(i,null,p.createElement("label",null,"Value:"),m?p.createElement("code",null," ****** "):p.createElement(s,null,p.createElement(a,{type:"text","aria-label":"auth-bearer-value",onChange:this.onChange,autoFocus:!0}))),c()(y=g.valueSeq()).call(y,((e,t)=>p.createElement(u,{error:e,key:t})))):p.createElement("div",null,p.createElement("em",null,p.createElement("b",null,o)," HTTP authentication: unsupported scheme ",`'${d}'`))}}},76467:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>p});var n=r(33427),o=r(42458),a=r(15757),i=r(56617),s=r(9928),l=r(45327),u=r(86775),c=r(96796);const p={Callbacks:n.default,HttpAuth:u.default,RequestBody:o.default,Servers:i.default,ServersContainer:s.default,RequestBodyEditor:l.default,OperationServers:c.default,operationLink:a.default}},15757:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>u});var n=r(35627),o=r.n(n),a=r(97606),i=r.n(a),s=r(67294);r(23930);class l extends s.Component{render(){const{link:e,name:t,getComponent:r}=this.props,n=r("Markdown",!0);let a=e.get("operationId")||e.get("operationRef"),l=e.get("parameters")&&e.get("parameters").toJS(),u=e.get("description");return s.createElement("div",{className:"operation-link"},s.createElement("div",{className:"description"},s.createElement("b",null,s.createElement("code",null,t)),u?s.createElement(n,{source:u}):null),s.createElement("pre",null,"Operation `",a,"`",s.createElement("br",null),s.createElement("br",null),"Parameters ",function(e,t){var r;if("string"!=typeof t)return"";return i()(r=t.split("\n")).call(r,((t,r)=>r>0?Array(e+1).join(" ")+t:t)).join("\n")}(0,o()(l,null,2))||"{}",s.createElement("br",null)))}}const u=l},96796:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(61125),o=r.n(n),a=r(67294);r(23930);class i extends a.Component{constructor(){super(...arguments),o()(this,"setSelectedServer",(e=>{const{path:t,method:r}=this.props;return this.forceUpdate(),this.props.setSelectedServer(e,`${t}:${r}`)})),o()(this,"setServerVariableValue",(e=>{const{path:t,method:r}=this.props;return this.forceUpdate(),this.props.setServerVariableValue({...e,namespace:`${t}:${r}`})})),o()(this,"getSelectedServer",(()=>{const{path:e,method:t}=this.props;return this.props.getSelectedServer(`${e}:${t}`)})),o()(this,"getServerVariable",((e,t)=>{const{path:r,method:n}=this.props;return this.props.getServerVariable({namespace:`${r}:${n}`,server:e},t)})),o()(this,"getEffectiveServerValue",(e=>{const{path:t,method:r}=this.props;return this.props.getEffectiveServerValue({server:e,namespace:`${t}:${r}`})}))}render(){const{operationServers:e,pathServers:t,getComponent:r}=this.props;if(!e&&!t)return null;const n=r("Servers"),o=e||t,i=e?"operation":"path";return a.createElement("div",{className:"opblock-section operation-servers"},a.createElement("div",{className:"opblock-section-header"},a.createElement("div",{className:"tab-header"},a.createElement("h4",{className:"opblock-title"},"Servers"))),a.createElement("div",{className:"opblock-description-wrapper"},a.createElement("h4",{className:"message"},"These ",i,"-level options override the global server options."),a.createElement(n,{servers:o,currentServer:this.getSelectedServer(),setSelectedServer:this.setSelectedServer,setServerVariableValue:this.setServerVariableValue,getServerVariable:this.getServerVariable,getEffectiveServerValue:this.getEffectiveServerValue})))}}},45327:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>c});var n=r(61125),o=r.n(n),a=r(67294),i=r(94184),s=r.n(i),l=r(90242);const u=Function.prototype;class c extends a.PureComponent{constructor(e,t){super(e,t),o()(this,"applyDefaultValue",(e=>{const{onChange:t,defaultValue:r}=e||this.props;return this.setState({value:r}),t(r)})),o()(this,"onChange",(e=>{this.props.onChange((0,l.Pz)(e))})),o()(this,"onDomChange",(e=>{const t=e.target.value;this.setState({value:t},(()=>this.onChange(t)))})),this.state={value:(0,l.Pz)(e.value)||e.defaultValue},e.onChange(e.value)}UNSAFE_componentWillReceiveProps(e){this.props.value!==e.value&&e.value!==this.state.value&&this.setState({value:(0,l.Pz)(e.value)}),!e.value&&e.defaultValue&&this.state.value&&this.applyDefaultValue(e)}render(){let{getComponent:e,errors:t}=this.props,{value:r}=this.state,n=t.size>0;const o=e("TextArea");return a.createElement("div",{className:"body-param"},a.createElement(o,{className:s()("body-param__text",{invalid:n}),title:t.size?t.join(", "):"",value:r,onChange:this.onDomChange}))}}o()(c,"defaultProps",{onChange:u,userHasEditedBody:!1})},42458:(e,t,r)=>{"use strict";r.r(t),r.d(t,{getDefaultRequestBodyValue:()=>m,default:()=>g});var n=r(97606),o=r.n(n),a=r(11882),i=r.n(a),s=r(58118),l=r.n(s),u=r(58309),c=r.n(u),p=r(67294),f=(r(23930),r(43393)),h=r(90242),d=r(2518);const m=(e,t,r)=>{const n=e.getIn(["content",t]),o=n.get("schema").toJS(),a=void 0!==n.get("examples"),i=n.get("example"),s=a?n.getIn(["examples",r,"value"]):i,l=(0,h.xi)(o,t,{includeWriteOnly:!0},s);return(0,h.Pz)(l)},g=e=>{let{userHasEditedBody:t,requestBody:r,requestBodyValue:n,requestBodyInclusionSetting:a,requestBodyErrors:s,getComponent:u,getConfigs:g,specSelectors:v,fn:y,contentType:b,isExecute:w,specPath:E,onChange:x,onChangeIncludeEmpty:_,activeExamplesKey:S,updateActiveExamplesKey:A,setRetainRequestBodyValueFlag:k}=e;const C=e=>{x(e.target.files[0])},O=e=>{let t={key:e,shouldDispatchInit:!1,defaultValue:!0};return"no value"===a.get(e,"no value")&&(t.shouldDispatchInit=!0),t},j=u("Markdown",!0),I=u("modelExample"),N=u("RequestBodyEditor"),T=u("highlightCode"),P=u("ExamplesSelectValueRetainer"),R=u("Example"),M=u("ParameterIncludeEmpty"),{showCommonExtensions:D}=g(),L=r&&r.get("description")||null,B=r&&r.get("content")||new f.OrderedMap;b=b||B.keySeq().first()||"";const F=B.get(b,(0,f.OrderedMap)()),z=F.get("schema",(0,f.OrderedMap)()),U=F.get("examples",null),q=null==U?void 0:o()(U).call(U,((e,t)=>{var n;const o=null===(n=e)||void 0===n?void 0:n.get("value",null);return o&&(e=e.set("value",m(r,b,t),o)),e}));if(s=f.List.isList(s)?s:(0,f.List)(),!F.size)return null;const V="object"===F.getIn(["schema","type"]),$="binary"===F.getIn(["schema","format"]),W="base64"===F.getIn(["schema","format"]);if("application/octet-stream"===b||0===i()(b).call(b,"image/")||0===i()(b).call(b,"audio/")||0===i()(b).call(b,"video/")||$||W){const e=u("Input");return w?p.createElement(e,{type:"file",onChange:C}):p.createElement("i",null,"Example values are not available for ",p.createElement("code",null,b)," media types.")}if(V&&("application/x-www-form-urlencoded"===b||0===i()(b).call(b,"multipart/"))&&z.get("properties",(0,f.OrderedMap)()).size>0){var H;const e=u("JsonSchemaForm"),t=u("ParameterExt"),r=z.get("properties",(0,f.OrderedMap)());return n=f.Map.isMap(n)?n:(0,f.OrderedMap)(),p.createElement("div",{className:"table-container"},L&&p.createElement(j,{source:L}),p.createElement("table",null,p.createElement("tbody",null,f.Map.isMap(r)&&o()(H=r.entrySeq()).call(H,(r=>{var i,d;let[m,g]=r;if(g.get("readOnly"))return;let v=D?(0,h.po)(g):null;const b=l()(i=z.get("required",(0,f.List)())).call(i,m),E=g.get("type"),S=g.get("format"),A=g.get("description"),k=n.getIn([m,"value"]),C=n.getIn([m,"errors"])||s,I=a.get(m)||!1,N=g.has("default")||g.has("example")||g.hasIn(["items","example"])||g.hasIn(["items","default"]),T=g.has("enum")&&(1===g.get("enum").size||b),P=N||T;let R="";"array"!==E||P||(R=[]),("object"===E||P)&&(R=(0,h.xi)(g,!1,{includeWriteOnly:!0})),"string"!=typeof R&&"object"===E&&(R=(0,h.Pz)(R)),"string"==typeof R&&"array"===E&&(R=JSON.parse(R));const L="string"===E&&("binary"===S||"base64"===S);return p.createElement("tr",{key:m,className:"parameters","data-property-name":m},p.createElement("td",{className:"parameters-col_name"},p.createElement("div",{className:b?"parameter__name required":"parameter__name"},m,b?p.createElement("span",null," *"):null),p.createElement("div",{className:"parameter__type"},E,S&&p.createElement("span",{className:"prop-format"},"($",S,")"),D&&v.size?o()(d=v.entrySeq()).call(d,(e=>{let[r,n]=e;return p.createElement(t,{key:`${r}-${n}`,xKey:r,xVal:n})})):null),p.createElement("div",{className:"parameter__deprecated"},g.get("deprecated")?"deprecated":null)),p.createElement("td",{className:"parameters-col_description"},p.createElement(j,{source:A}),w?p.createElement("div",null,p.createElement(e,{fn:y,dispatchInitialValue:!L,schema:g,description:m,getComponent:u,value:void 0===k?R:k,required:b,errors:C,onChange:e=>{x(e,[m])}}),b?null:p.createElement(M,{onChange:e=>_(m,e),isIncluded:I,isIncludedOptions:O(m),isDisabled:c()(k)?0!==k.length:!(0,h.O2)(k)})):null))})))))}const J=m(r,b,S);let K=null;return(0,d.O)(J)&&(K="json"),p.createElement("div",null,L&&p.createElement(j,{source:L}),q?p.createElement(P,{userHasEditedBody:t,examples:q,currentKey:S,currentUserInputValue:n,onSelect:e=>{A(e)},updateValue:x,defaultToFirstExample:!0,getComponent:u,setRetainRequestBodyValueFlag:k}):null,w?p.createElement("div",null,p.createElement(N,{value:n,errors:s,defaultValue:J,onChange:x,getComponent:u})):p.createElement(I,{getComponent:u,getConfigs:g,specSelectors:v,expandDepth:1,isExecute:w,schema:F.get("schema"),specPath:E.push("content",b),example:p.createElement(T,{className:"body-param__example",getConfigs:g,language:K,value:(0,h.Pz)(n)||J}),includeWriteOnly:!0}),q?p.createElement(R,{example:q.get(S),getComponent:u,getConfigs:g}):null)}},9928:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(67294);class o extends n.Component{render(){const{specSelectors:e,oas3Selectors:t,oas3Actions:r,getComponent:o}=this.props,a=e.servers(),i=o("Servers");return a&&a.size?n.createElement("div",null,n.createElement("span",{className:"servers-title"},"Servers"),n.createElement(i,{servers:a,currentServer:t.selectedServer(),setSelectedServer:r.setSelectedServer,setServerVariableValue:r.setServerVariableValue,getServerVariable:t.serverVariableValue,getEffectiveServerValue:t.serverEffectiveValue})):null}}},56617:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>p});var n=r(61125),o=r.n(n),a=r(51679),i=r.n(a),s=r(97606),l=r.n(s),u=r(67294),c=r(43393);r(23930);class p extends u.Component{constructor(){super(...arguments),o()(this,"onServerChange",(e=>{this.setServer(e.target.value)})),o()(this,"onServerVariableValueChange",(e=>{let{setServerVariableValue:t,currentServer:r}=this.props,n=e.target.getAttribute("data-variable"),o=e.target.value;"function"==typeof t&&t({server:r,key:n,val:o})})),o()(this,"setServer",(e=>{let{setSelectedServer:t}=this.props;t(e)}))}componentDidMount(){var e;let{servers:t,currentServer:r}=this.props;r||this.setServer(null===(e=t.first())||void 0===e?void 0:e.get("url"))}UNSAFE_componentWillReceiveProps(e){let{servers:t,setServerVariableValue:r,getServerVariable:n}=e;if(this.props.currentServer!==e.currentServer||this.props.servers!==e.servers){var o;let a=i()(t).call(t,(t=>t.get("url")===e.currentServer)),s=i()(o=this.props.servers).call(o,(e=>e.get("url")===this.props.currentServer))||(0,c.OrderedMap)();if(!a)return this.setServer(t.first().get("url"));let u=s.get("variables")||(0,c.OrderedMap)(),p=(i()(u).call(u,(e=>e.get("default")))||(0,c.OrderedMap)()).get("default"),f=a.get("variables")||(0,c.OrderedMap)(),h=(i()(f).call(f,(e=>e.get("default")))||(0,c.OrderedMap)()).get("default");l()(f).call(f,((t,o)=>{n(e.currentServer,o)&&p===h||r({server:e.currentServer,key:o,val:t.get("default")||""})}))}}render(){var e,t;let{servers:r,currentServer:n,getServerVariable:o,getEffectiveServerValue:a}=this.props,s=(i()(r).call(r,(e=>e.get("url")===n))||(0,c.OrderedMap)()).get("variables")||(0,c.OrderedMap)(),p=0!==s.size;return u.createElement("div",{className:"servers"},u.createElement("label",{htmlFor:"servers"},u.createElement("select",{onChange:this.onServerChange,value:n},l()(e=r.valueSeq()).call(e,(e=>u.createElement("option",{value:e.get("url"),key:e.get("url")},e.get("url"),e.get("description")&&` - ${e.get("description")}`))).toArray())),p?u.createElement("div",null,u.createElement("div",{className:"computed-url"},"Computed URL:",u.createElement("code",null,a(n))),u.createElement("h4",null,"Server variables"),u.createElement("table",null,u.createElement("tbody",null,l()(t=s.entrySeq()).call(t,(e=>{var t;let[r,a]=e;return u.createElement("tr",{key:r},u.createElement("td",null,r),u.createElement("td",null,a.get("enum")?u.createElement("select",{"data-variable":r,onChange:this.onServerVariableValueChange},l()(t=a.get("enum")).call(t,(e=>u.createElement("option",{selected:e===o(n,r),key:e,value:e},e)))):u.createElement("input",{type:"text",value:o(n,r)||"",onChange:this.onServerVariableValueChange,"data-variable":r})))}))))):null)}}},7779:(e,t,r)=>{"use strict";r.r(t),r.d(t,{isOAS3:()=>l,isSwagger2:()=>u,OAS3ComponentWrapFactory:()=>c});var n=r(23101),o=r.n(n),a=r(27043),i=r.n(a),s=r(67294);function l(e){const t=e.get("openapi");return"string"==typeof t&&(i()(t).call(t,"3.0.")&&t.length>4)}function u(e){const t=e.get("swagger");return"string"==typeof t&&i()(t).call(t,"2.0")}function c(e){return(t,r)=>n=>{if(r&&r.specSelectors&&r.specSelectors.specJson){return l(r.specSelectors.specJson())?s.createElement(e,o()({},n,r,{Ori:t})):s.createElement(t,n)}return console.warn("OAS3 wrapper: couldn't get spec"),null}}},97451:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>p});var n=r(92044),o=r(73723),a=r(91741),i=r(76467),s=r(37761),l=r(67002),u=r(5065),c=r(62109);function p(){return{components:i.default,wrapComponents:s.default,statePlugins:{spec:{wrapSelectors:n,selectors:a},auth:{wrapSelectors:o},oas3:{actions:l,reducers:c.default,selectors:u}}}}},62109:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>p});var n=r(8712),o=r.n(n),a=r(86),i=r.n(a),s=r(24282),l=r.n(s),u=r(43393),c=r(67002);const p={[c.UPDATE_SELECTED_SERVER]:(e,t)=>{let{payload:{selectedServerUrl:r,namespace:n}}=t;const o=n?[n,"selectedServer"]:["selectedServer"];return e.setIn(o,r)},[c.UPDATE_REQUEST_BODY_VALUE]:(e,t)=>{let{payload:{value:r,pathMethod:n}}=t,[a,s]=n;if(!u.Map.isMap(r))return e.setIn(["requestData",a,s,"bodyValue"],r);let l,c=e.getIn(["requestData",a,s,"bodyValue"])||(0,u.Map)();u.Map.isMap(c)||(c=(0,u.Map)());const[...p]=o()(r).call(r);return i()(p).call(p,(e=>{let t=r.getIn([e]);c.has(e)&&u.Map.isMap(t)||(l=c.setIn([e,"value"],t))})),e.setIn(["requestData",a,s,"bodyValue"],l)},[c.UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG]:(e,t)=>{let{payload:{value:r,pathMethod:n}}=t,[o,a]=n;return e.setIn(["requestData",o,a,"retainBodyValue"],r)},[c.UPDATE_REQUEST_BODY_INCLUSION]:(e,t)=>{let{payload:{value:r,pathMethod:n,name:o}}=t,[a,i]=n;return e.setIn(["requestData",a,i,"bodyInclusion",o],r)},[c.UPDATE_ACTIVE_EXAMPLES_MEMBER]:(e,t)=>{let{payload:{name:r,pathMethod:n,contextType:o,contextName:a}}=t,[i,s]=n;return e.setIn(["examples",i,s,o,a,"activeExample"],r)},[c.UPDATE_REQUEST_CONTENT_TYPE]:(e,t)=>{let{payload:{value:r,pathMethod:n}}=t,[o,a]=n;return e.setIn(["requestData",o,a,"requestContentType"],r)},[c.UPDATE_RESPONSE_CONTENT_TYPE]:(e,t)=>{let{payload:{value:r,path:n,method:o}}=t;return e.setIn(["requestData",n,o,"responseContentType"],r)},[c.UPDATE_SERVER_VARIABLE_VALUE]:(e,t)=>{let{payload:{server:r,namespace:n,key:o,val:a}}=t;const i=n?[n,"serverVariableValues",r,o]:["serverVariableValues",r,o];return e.setIn(i,a)},[c.SET_REQUEST_BODY_VALIDATE_ERROR]:(e,t)=>{let{payload:{path:r,method:n,validationErrors:o}}=t,a=[];if(a.push("Required field is not provided"),o.missingBodyValue)return e.setIn(["requestData",r,n,"errors"],(0,u.fromJS)(a));if(o.missingRequiredKeys&&o.missingRequiredKeys.length>0){const{missingRequiredKeys:t}=o;return e.updateIn(["requestData",r,n,"bodyValue"],(0,u.fromJS)({}),(e=>l()(t).call(t,((e,t)=>e.setIn([t,"errors"],(0,u.fromJS)(a))),e)))}return console.warn("unexpected result: SET_REQUEST_BODY_VALIDATE_ERROR"),e},[c.CLEAR_REQUEST_BODY_VALIDATE_ERROR]:(e,t)=>{let{payload:{path:r,method:n}}=t;const a=e.getIn(["requestData",r,n,"bodyValue"]);if(!u.Map.isMap(a))return e.setIn(["requestData",r,n,"errors"],(0,u.fromJS)([]));const[...i]=o()(a).call(a);return i?e.updateIn(["requestData",r,n,"bodyValue"],(0,u.fromJS)({}),(e=>l()(i).call(i,((e,t)=>e.setIn([t,"errors"],(0,u.fromJS)([]))),e))):e},[c.CLEAR_REQUEST_BODY_VALUE]:(e,t)=>{let{payload:{pathMethod:r}}=t,[n,o]=r;const a=e.getIn(["requestData",n,o,"bodyValue"]);return a?u.Map.isMap(a)?e.setIn(["requestData",n,o,"bodyValue"],(0,u.Map)()):e.setIn(["requestData",n,o,"bodyValue"],""):e}}},5065:(e,t,r)=>{"use strict";r.r(t),r.d(t,{selectedServer:()=>g,requestBodyValue:()=>v,shouldRetainRequestBodyValue:()=>y,hasUserEditedBody:()=>b,requestBodyInclusionSetting:()=>w,requestBodyErrors:()=>E,activeExamplesMember:()=>x,requestContentType:()=>_,responseContentType:()=>S,serverVariableValue:()=>A,serverVariables:()=>k,serverEffectiveValue:()=>C,validateBeforeExecute:()=>O,validateShallowRequired:()=>I});var n=r(97606),o=r.n(n),a=r(86),i=r.n(a),s=r(28222),l=r.n(s),u=r(11882),c=r.n(u),p=r(43393),f=r(7779),h=r(42458),d=r(90242);function m(e){return function(){for(var t=arguments.length,r=new Array(t),n=0;n{const n=t.getSystem().specSelectors.specJson();return(0,f.isOAS3)(n)?e(...r):null}}}const g=m(((e,t)=>{const r=t?[t,"selectedServer"]:["selectedServer"];return e.getIn(r)||""})),v=m(((e,t,r)=>e.getIn(["requestData",t,r,"bodyValue"])||null)),y=m(((e,t,r)=>e.getIn(["requestData",t,r,"retainBodyValue"])||!1)),b=(e,t,r)=>e=>{const{oas3Selectors:n,specSelectors:o}=e.getSystem(),a=o.specJson();if((0,f.isOAS3)(a)){let e=!1;const a=n.requestContentType(t,r);let i=n.requestBodyValue(t,r);if(p.Map.isMap(i)&&(i=(0,d.Pz)(i.mapEntries((e=>p.Map.isMap(e[1])?[e[0],e[1].get("value")]:e)).toJS())),p.List.isList(i)&&(i=(0,d.Pz)(i)),a){const s=(0,h.getDefaultRequestBodyValue)(o.specResolvedSubtree(["paths",t,r,"requestBody"]),a,n.activeExamplesMember(t,r,"requestBody","requestBody"));e=!!i&&i!==s}return e}return null},w=m(((e,t,r)=>e.getIn(["requestData",t,r,"bodyInclusion"])||(0,p.Map)())),E=m(((e,t,r)=>e.getIn(["requestData",t,r,"errors"])||null)),x=m(((e,t,r,n,o)=>e.getIn(["examples",t,r,n,o,"activeExample"])||null)),_=m(((e,t,r)=>e.getIn(["requestData",t,r,"requestContentType"])||null)),S=m(((e,t,r)=>e.getIn(["requestData",t,r,"responseContentType"])||null)),A=m(((e,t,r)=>{let n;if("string"!=typeof t){const{server:e,namespace:o}=t;n=o?[o,"serverVariableValues",e,r]:["serverVariableValues",e,r]}else{n=["serverVariableValues",t,r]}return e.getIn(n)||null})),k=m(((e,t)=>{let r;if("string"!=typeof t){const{server:e,namespace:n}=t;r=n?[n,"serverVariableValues",e]:["serverVariableValues",e]}else{r=["serverVariableValues",t]}return e.getIn(r)||(0,p.OrderedMap)()})),C=m(((e,t)=>{var r,n;if("string"!=typeof t){const{server:o,namespace:a}=t;n=o,r=a?e.getIn([a,"serverVariableValues",n]):e.getIn(["serverVariableValues",n])}else n=t,r=e.getIn(["serverVariableValues",n]);r=r||(0,p.OrderedMap)();let a=n;return o()(r).call(r,((e,t)=>{a=a.replace(new RegExp(`{${t}}`,"g"),e)})),a})),O=(j=(e,t)=>((e,t)=>(t=t||[],!!e.getIn(["requestData",...t,"bodyValue"])))(e,t),function(){for(var e=arguments.length,t=new Array(e),r=0;r{const r=e.getSystem().specSelectors.specJson();let n=[...t][1]||[];return!r.getIn(["paths",...n,"requestBody","required"])||j(...t)}});var j;const I=(e,t)=>{var r;let{oas3RequiredRequestBodyContentType:n,oas3RequestContentType:o,oas3RequestBodyValue:a}=t,s=[];if(!p.Map.isMap(a))return s;let u=[];return i()(r=l()(n.requestContentType)).call(r,(e=>{if(e===o){let t=n.requestContentType[e];i()(t).call(t,(e=>{c()(u).call(u,e)<0&&u.push(e)}))}})),i()(u).call(u,(e=>{a.getIn([e,"value"])||s.push(e)})),s}},91741:(e,t,r)=>{"use strict";r.r(t),r.d(t,{servers:()=>u,isSwagger2:()=>p});var n=r(20573),o=r(43393),a=r(7779);const i=e=>e||(0,o.Map)(),s=(0,n.P1)(i,(e=>e.get("json",(0,o.Map)()))),l=(0,n.P1)(i,(e=>e.get("resolved",(0,o.Map)()))),u=(c=(0,n.P1)((e=>{let t=l(e);return t.count()<1&&(t=s(e)),t}),(e=>e.getIn(["servers"])||(0,o.Map)())),()=>function(e){const t=e.getSystem().specSelectors.specJson();if((0,a.isOAS3)(t)){for(var r=arguments.length,n=new Array(r>1?r-1:0),o=1;o()=>{const e=t.getSystem().specSelectors.specJson();return(0,a.isSwagger2)(e)}},92044:(e,t,r)=>{"use strict";r.r(t),r.d(t,{definitions:()=>h,hasHost:()=>d,securityDefinitions:()=>m,host:()=>g,basePath:()=>v,consumes:()=>y,produces:()=>b,schemes:()=>w,servers:()=>E,isOAS3:()=>x,isSwagger2:()=>_});var n=r(20573),o=r(33881),a=r(43393),i=r(7779);function s(e){return(t,r)=>function(){const n=r.getSystem().specSelectors.specJson();return(0,i.isOAS3)(n)?e(...arguments):t(...arguments)}}const l=e=>e||(0,a.Map)(),u=s((0,n.P1)((()=>null))),c=(0,n.P1)(l,(e=>e.get("json",(0,a.Map)()))),p=(0,n.P1)(l,(e=>e.get("resolved",(0,a.Map)()))),f=e=>{let t=p(e);return t.count()<1&&(t=c(e)),t},h=s((0,n.P1)(f,(e=>{const t=e.getIn(["components","schemas"]);return a.Map.isMap(t)?t:(0,a.Map)()}))),d=s((e=>f(e).hasIn(["servers",0]))),m=s((0,n.P1)(o.specJsonWithResolvedSubtrees,(e=>e.getIn(["components","securitySchemes"])||null))),g=u,v=u,y=u,b=u,w=u,E=s((0,n.P1)(f,(e=>e.getIn(["servers"])||(0,a.Map)()))),x=(e,t)=>()=>{const e=t.getSystem().specSelectors.specJson();return(0,i.isOAS3)(a.Map.isMap(e)?e:(0,a.Map)())},_=(e,t)=>()=>{const e=t.getSystem().specSelectors.specJson();return(0,i.isSwagger2)(a.Map.isMap(e)?e:(0,a.Map)())}},70356:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(67294);const o=(0,r(7779).OAS3ComponentWrapFactory)((e=>{let{Ori:t,...r}=e;const{schema:o,getComponent:a,errSelectors:i,authorized:s,onAuthChange:l,name:u}=r,c=a("HttpAuth");return"http"===o.get("type")?n.createElement(c,{key:u,schema:o,name:u,errSelectors:i,authorized:s,getComponent:a,onChange:l}):n.createElement(t,r)}))},37761:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>u});var n=r(22460),o=r(70356),a=r(69487),i=r(50058),s=r(53499),l=r(90287);const u={Markdown:n.default,AuthItem:o.default,JsonSchema_string:l.default,VersionStamp:a.default,model:s.default,onlineValidatorBadge:i.default}},90287:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(67294);const o=(0,r(7779).OAS3ComponentWrapFactory)((e=>{let{Ori:t,...r}=e;const{schema:o,getComponent:a,errors:i,onChange:s}=r,l=o&&o.get?o.get("format"):null,u=o&&o.get?o.get("type"):null,c=a("Input");return u&&"string"===u&&l&&("binary"===l||"base64"===l)?n.createElement(c,{type:"file",className:i.length?"invalid":"",title:i.length?i:"",onChange:e=>{s(e.target.files[0])},disabled:t.isDisabled}):n.createElement(t,r)}))},22460:(e,t,r)=>{"use strict";r.r(t),r.d(t,{Markdown:()=>f,default:()=>h});var n=r(81607),o=r.n(n),a=r(67294),i=r(94184),s=r.n(i),l=r(89927),u=r(7779),c=r(86019);const p=new l._("commonmark");p.block.ruler.enable(["table"]),p.set({linkTarget:"_blank"});const f=e=>{let{source:t,className:r="",getConfigs:n}=e;if("string"!=typeof t)return null;if(t){const{useUnsafeMarkdown:e}=n(),i=p.render(t),l=(0,c.s)(i,{useUnsafeMarkdown:e});let u;return"string"==typeof l&&(u=o()(l).call(l)),a.createElement("div",{dangerouslySetInnerHTML:{__html:u},className:s()(r,"renderedMarkdown")})}return null};f.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};const h=(0,u.OAS3ComponentWrapFactory)(f)},53499:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>u});var n=r(23101),o=r.n(n),a=r(67294),i=r(7779),s=r(53795);class l extends a.Component{render(){let{getConfigs:e,schema:t}=this.props,r=["model-box"],n=null;return!0===t.get("deprecated")&&(r.push("deprecated"),n=a.createElement("span",{className:"model-deprecated-warning"},"Deprecated:")),a.createElement("div",{className:r.join(" ")},n,a.createElement(s.Z,o()({},this.props,{getConfigs:e,depth:1,expandDepth:this.props.expandDepth||0})))}}const u=(0,i.OAS3ComponentWrapFactory)(l)},50058:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>a});var n=r(7779),o=r(5623);const a=(0,n.OAS3ComponentWrapFactory)(o.Z)},69487:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(67294);const o=(0,r(7779).OAS3ComponentWrapFactory)((e=>{const{Ori:t}=e;return n.createElement("span",null,n.createElement(t,e),n.createElement("small",{className:"version-stamp"},n.createElement("pre",{className:"version"},"OAS3")))}))},28560:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(87198),o=r.n(n);let a=!1;function i(){return{statePlugins:{spec:{wrapActions:{updateSpec:e=>function(){return a=!0,e(...arguments)},updateJsonSpec:(e,t)=>function(){const r=t.getConfigs().onComplete;return a&&"function"==typeof r&&(o()(r,0),a=!1),e(...arguments)}}}}}}},92135:(e,t,r)=>{"use strict";r.r(t),r.d(t,{requestSnippetGenerator_curl_powershell:()=>A,requestSnippetGenerator_curl_bash:()=>k,requestSnippetGenerator_curl_cmd:()=>C});var n=r(11882),o=r.n(n),a=r(81607),i=r.n(a),s=r(35627),l=r.n(s),u=r(97606),c=r.n(u),p=r(12196),f=r.n(p),h=r(74386),d=r.n(h),m=r(58118),g=r.n(m),v=r(27504),y=r(43393);const b=e=>{var t;const r="_**[]";return o()(e).call(e,r)<0?e:i()(t=e.split(r)[0]).call(t)},w=e=>"-d "===e||/^[_\/-]/g.test(e)?e:"'"+e.replace(/'/g,"'\\''")+"'",E=e=>"-d "===(e=e.replace(/\^/g,"^^").replace(/\\"/g,'\\\\"').replace(/"/g,'""').replace(/\n/g,"^\n"))?e.replace(/-d /g,"-d ^\n"):/^[_\/-]/g.test(e)?e:'"'+e+'"',x=e=>"-d "===e?e:/\n/.test(e)?'@"\n'+e.replace(/"/g,'\\"').replace(/`/g,"``").replace(/\$/,"`$")+'\n"@':/^[_\/-]/g.test(e)?e:"'"+e.replace(/"/g,'""').replace(/'/g,"''")+"'";function _(e){let t=[];for(let[r,n]of e.get("body").entrySeq()){let e=b(r);n instanceof v.Z.File?t.push(` "${e}": {\n "name": "${n.name}"${n.type?`,\n "type": "${n.type}"`:""}\n }`):t.push(` "${e}": ${l()(n,null,2).replace(/(\r\n|\r|\n)/g,"\n ")}`)}return`{\n${t.join(",\n")}\n}`}const S=function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",o=!1,a="";const i=function(){for(var e=arguments.length,r=new Array(e),n=0;na+=` ${r}`,p=function(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return a+=f()(e=" ").call(e,t)};let h=e.get("headers");if(a+="curl"+n,e.has("curlOptions")&&i(...e.get("curlOptions")),i("-X",e.get("method")),u(),p(),s(`${e.get("url")}`),h&&h.size)for(let t of d()(m=e.get("headers")).call(m)){var m;u(),p();let[e,r]=t;s("-H",`${e}: ${r}`),o=o||/^content-type$/i.test(e)&&/^multipart\/form-data$/i.test(r)}const w=e.get("body");var E;if(w)if(o&&g()(E=["POST","PUT","PATCH"]).call(E,e.get("method")))for(let[e,t]of w.entrySeq()){let r=b(e);u(),p(),s("-F"),t instanceof v.Z.File?i(`${r}=@${t.name}${t.type?`;type=${t.type}`:""}`):i(`${r}=${t}`)}else if(w instanceof v.Z.File)u(),p(),s(`--data-binary '@${w.name}'`);else{u(),p(),s("-d ");let t=w;y.Map.isMap(t)?s(_(e)):("string"!=typeof t&&(t=l()(t)),s(t))}else w||"POST"!==e.get("method")||(u(),p(),s("-d ''"));return a},A=e=>S(e,x,"`\n",".exe"),k=e=>S(e,w,"\\\n"),C=e=>S(e,E,"^\n")},86575:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(92135),o=r(4669),a=r(84206);const i=()=>({components:{RequestSnippets:a.default},fn:n,statePlugins:{requestSnippets:{selectors:o}}})},84206:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>w});var n=r(14418),o=r.n(n),a=r(25110),i=r.n(a),s=r(86),l=r.n(s),u=r(97606),c=r.n(u),p=r(67294),f=r(27361),h=r.n(f),d=r(23560),m=r.n(d),g=r(74855),v=r(36581);const y={cursor:"pointer",lineHeight:1,display:"inline-flex",backgroundColor:"rgb(250, 250, 250)",paddingBottom:"0",paddingTop:"0",border:"1px solid rgb(51, 51, 51)",borderRadius:"4px 4px 0 0",boxShadow:"none",borderBottom:"none"},b={cursor:"pointer",lineHeight:1,display:"inline-flex",backgroundColor:"rgb(51, 51, 51)",boxShadow:"none",border:"1px solid rgb(51, 51, 51)",paddingBottom:"0",paddingTop:"0",borderRadius:"4px 4px 0 0",marginTop:"-5px",marginRight:"-5px",marginLeft:"-5px",zIndex:"9999",borderBottom:"none"},w=e=>{var t,r;let{request:n,requestSnippetsSelectors:a,getConfigs:s}=e;const u=m()(s)?s():null,f=!1!==h()(u,"syntaxHighlight")&&h()(u,"syntaxHighlight.activated",!0),d=(0,p.useRef)(null),[w,E]=(0,p.useState)(null===(t=a.getSnippetGenerators())||void 0===t?void 0:t.keySeq().first()),[x,_]=(0,p.useState)(null==a?void 0:a.getDefaultExpanded());(0,p.useEffect)((()=>{}),[]),(0,p.useEffect)((()=>{var e;const t=o()(e=i()(d.current.childNodes)).call(e,(e=>{var t;return!!e.nodeType&&(null===(t=e.classList)||void 0===t?void 0:t.contains("curl-command"))}));return l()(t).call(t,(e=>e.addEventListener("mousewheel",j,{passive:!1}))),()=>{l()(t).call(t,(e=>e.removeEventListener("mousewheel",j)))}}),[n]);const S=a.getSnippetGenerators(),A=S.get(w),k=A.get("fn")(n),C=()=>{_(!x)},O=e=>e===w?b:y,j=e=>{const{target:t,deltaY:r}=e,{scrollHeight:n,offsetHeight:o,scrollTop:a}=t;n>o&&(0===a&&r<0||o+a>=n&&r>0)&&e.preventDefault()},I=f?p.createElement(v.d3,{language:A.get("syntax"),className:"curl microlight",style:(0,v.C2)(h()(u,"syntaxHighlight.theme"))},k):p.createElement("textarea",{readOnly:!0,className:"curl",value:k});return p.createElement("div",{className:"request-snippets",ref:d},p.createElement("div",{style:{width:"100%",display:"flex",justifyContent:"flex-start",alignItems:"center",marginBottom:"15px"}},p.createElement("h4",{onClick:()=>C(),style:{cursor:"pointer"}},"Snippets"),p.createElement("button",{onClick:()=>C(),style:{border:"none",background:"none"},title:x?"Collapse operation":"Expand operation"},p.createElement("svg",{className:"arrow",width:"10",height:"10"},p.createElement("use",{href:x?"#large-arrow-down":"#large-arrow",xlinkHref:x?"#large-arrow-down":"#large-arrow"})))),x&&p.createElement("div",{className:"curl-command"},p.createElement("div",{style:{paddingLeft:"15px",paddingRight:"10px",width:"100%",display:"flex"}},c()(r=S.entrySeq()).call(r,(e=>{let[t,r]=e;return p.createElement("div",{style:O(t),className:"btn",key:t,onClick:()=>(e=>{w!==e&&E(e)})(t)},p.createElement("h4",{style:t===w?{color:"white"}:{}},r.get("title")))}))),p.createElement("div",{className:"copy-to-clipboard"},p.createElement(g.CopyToClipboard,{text:k},p.createElement("button",null))),p.createElement("div",null,I)))}},4669:(e,t,r)=>{"use strict";r.r(t),r.d(t,{getGenerators:()=>f,getSnippetGenerators:()=>h,getActiveLanguage:()=>d,getDefaultExpanded:()=>m});var n=r(14418),o=r.n(n),a=r(58118),i=r.n(a),s=r(97606),l=r.n(s),u=r(20573),c=r(43393);const p=e=>e||(0,c.Map)(),f=(0,u.P1)(p,(e=>{const t=e.get("languages"),r=e.get("generators",(0,c.Map)());return!t||t.isEmpty()?r:o()(r).call(r,((e,r)=>i()(t).call(t,r)))})),h=e=>t=>{var r,n;let{fn:a}=t;return o()(r=l()(n=f(e)).call(n,((e,t)=>{const r=(e=>a[`requestSnippetGenerator_${e}`])(t);return"function"!=typeof r?null:e.set("fn",r)}))).call(r,(e=>e))},d=(0,u.P1)(p,(e=>e.get("activeLanguage"))),m=(0,u.P1)(p,(e=>e.get("defaultExpanded")))},36195:(e,t,r)=>{"use strict";r.r(t),r.d(t,{ErrorBoundary:()=>i,default:()=>s});var n=r(67294),o=r(56189),a=r(29403);class i extends n.Component{static getDerivedStateFromError(e){return{hasError:!0,error:e}}constructor(){super(...arguments),this.state={hasError:!1,error:null}}componentDidCatch(e,t){this.props.fn.componentDidCatch(e,t)}render(){const{getComponent:e,targetName:t,children:r}=this.props;if(this.state.hasError){const r=e("Fallback");return n.createElement(r,{name:t})}return r}}i.defaultProps={targetName:"this component",getComponent:()=>a.default,fn:{componentDidCatch:o.componentDidCatch},children:null};const s=i},29403:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(67294);const o=e=>{let{name:t}=e;return n.createElement("div",{className:"fallback"},"😱 ",n.createElement("i",null,"Could not render ","t"===t?"this component":t,", see the console."))}},56189:(e,t,r)=>{"use strict";r.r(t),r.d(t,{componentDidCatch:()=>i,withErrorBoundary:()=>s});var n=r(23101),o=r.n(n),a=r(67294);const i=console.error,s=e=>t=>{const{getComponent:r,fn:n}=e(),i=r("ErrorBoundary"),s=n.getDisplayName(t);class l extends a.Component{render(){return a.createElement(i,{targetName:s,getComponent:r,fn:n},a.createElement(t,o()({},this.props,this.context)))}}var u;return l.displayName=`WithErrorBoundary(${s})`,(u=t).prototype&&u.prototype.isReactComponent&&(l.prototype.mapStateToProps=t.prototype.mapStateToProps),l}},27621:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>c});var n=r(47475),o=r.n(n),a=r(7287),i=r.n(a),s=r(36195),l=r(29403),u=r(56189);const c=function(){let{componentList:e=[],fullOverride:t=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=>{var n;let{getSystem:a}=r;const c=t?e:["App","BaseLayout","VersionPragmaFilter","InfoContainer","ServersContainer","SchemesContainer","AuthorizeBtnContainer","FilterContainer","Operations","OperationContainer","parameters","responses","OperationServers","Models","ModelWrapper",...e],p=i()(c,o()(n=Array(c.length)).call(n,((e,t)=>{let{fn:r}=t;return r.withErrorBoundary(e)})));return{fn:{componentDidCatch:u.componentDidCatch,withErrorBoundary:(0,u.withErrorBoundary)(a)},components:{ErrorBoundary:s.default,Fallback:l.default},wrapComponents:p}}}},57050:(e,t,r)=>{"use strict";r.r(t),r.d(t,{sampleFromSchemaGeneric:()=>F,inferSchema:()=>z,createXMLExample:()=>U,sampleFromSchema:()=>q,memoizedCreateXMLExample:()=>$,memoizedSampleFromSchema:()=>W});var n=r(11882),o=r.n(n),a=r(86),i=r.n(a),s=r(58309),l=r.n(s),u=r(58118),c=r.n(u),p=r(92039),f=r.n(p),h=r(24278),d=r.n(h),m=r(51679),g=r.n(m),v=r(39022),y=r.n(v),b=r(97606),w=r.n(b),E=r(35627),x=r.n(E),_=r(53479),S=r.n(_),A=r(14419),k=r.n(A),C=r(41609),O=r.n(C),j=r(90242),I=r(60314);const N={string:e=>e.pattern?(e=>{try{return new(k())(e).gen()}catch(e){return"string"}})(e.pattern):"string",string_email:()=>"user@example.com","string_date-time":()=>(new Date).toISOString(),string_date:()=>(new Date).toISOString().substring(0,10),string_uuid:()=>"3fa85f64-5717-4562-b3fc-2c963f66afa6",string_hostname:()=>"example.com",string_ipv4:()=>"198.51.100.42",string_ipv6:()=>"2001:0db8:5b96:0000:0000:426f:8e17:642a",number:()=>0,number_float:()=>0,integer:()=>0,boolean:e=>"boolean"!=typeof e.default||e.default},T=e=>{e=(0,j.mz)(e);let{type:t,format:r}=e,n=N[`${t}_${r}`]||N[t];return(0,j.Wl)(n)?n(e):"Unknown Type: "+e.type},P=e=>(0,j.XV)(e,"$$ref",(e=>"string"==typeof e&&o()(e).call(e,"#")>-1)),R=["maxProperties","minProperties"],M=["minItems","maxItems"],D=["minimum","maximum","exclusiveMinimum","exclusiveMaximum"],L=["minLength","maxLength"],B=function(e,t){var r;let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const a=r=>{void 0===t[r]&&void 0!==e[r]&&(t[r]=e[r])};var s;(i()(r=["example","default","enum","xml","type",...R,...M,...D,...L]).call(r,(e=>a(e))),void 0!==e.required&&l()(e.required))&&(void 0!==t.required&&t.required.length||(t.required=[]),i()(s=e.required).call(s,(e=>{var r;c()(r=t.required).call(r,e)||t.required.push(e)})));if(e.properties){t.properties||(t.properties={});let r=(0,j.mz)(e.properties);for(let a in r){var u;if(Object.prototype.hasOwnProperty.call(r,a))if(!r[a]||!r[a].deprecated)if(!r[a]||!r[a].readOnly||n.includeReadOnly)if(!r[a]||!r[a].writeOnly||n.includeWriteOnly)if(!t.properties[a])t.properties[a]=r[a],!e.required&&l()(e.required)&&-1!==o()(u=e.required).call(u,a)&&(t.required?t.required.push(a):t.required=[a])}}return e.items&&(t.items||(t.items={}),t.items=B(e.items,t.items,n)),t},F=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e&&(0,j.Wl)(e.toJS)&&(e=e.toJS());let a=void 0!==r||e&&void 0!==e.example||e&&void 0!==e.default;const s=!a&&e&&e.oneOf&&e.oneOf.length>0,u=!a&&e&&e.anyOf&&e.anyOf.length>0;if(!a&&(s||u)){const r=(0,j.mz)(s?e.oneOf[0]:e.anyOf[0]);if(B(r,e,t),!e.xml&&r.xml&&(e.xml=r.xml),void 0!==e.example&&void 0!==r.example)a=!0;else if(r.properties){e.properties||(e.properties={});let n=(0,j.mz)(r.properties);for(let a in n){var p;if(Object.prototype.hasOwnProperty.call(n,a))if(!n[a]||!n[a].deprecated)if(!n[a]||!n[a].readOnly||t.includeReadOnly)if(!n[a]||!n[a].writeOnly||t.includeWriteOnly)if(!e.properties[a])e.properties[a]=n[a],!r.required&&l()(r.required)&&-1!==o()(p=r.required).call(p,a)&&(e.required?e.required.push(a):e.required=[a])}}}const h={};let{xml:m,type:v,example:b,properties:E,additionalProperties:x,items:_}=e||{},{includeReadOnly:S,includeWriteOnly:A}=t;m=m||{};let k,{name:C,prefix:I,namespace:N}=m,L={};if(n&&(C=C||"notagname",k=(I?I+":":"")+C,N)){h[I?"xmlns:"+I:"xmlns"]=N}n&&(L[k]=[]);const z=t=>f()(t).call(t,(t=>Object.prototype.hasOwnProperty.call(e,t)));e&&!v&&(E||x||z(R)?v="object":_||z(M)?v="array":z(D)?(v="number",e.type="number"):a||e.enum||(v="string",e.type="string"));const U=t=>{var r,n,o,a,i;null!==(null===(r=e)||void 0===r?void 0:r.maxItems)&&void 0!==(null===(n=e)||void 0===n?void 0:n.maxItems)&&(t=d()(t).call(t,0,null===(i=e)||void 0===i?void 0:i.maxItems));if(null!==(null===(o=e)||void 0===o?void 0:o.minItems)&&void 0!==(null===(a=e)||void 0===a?void 0:a.minItems)){let r=0;for(;t.length<(null===(s=e)||void 0===s?void 0:s.minItems);){var s;t.push(t[r++%t.length])}}return t},q=(0,j.mz)(E);let V,$=0;const W=()=>e&&null!==e.maxProperties&&void 0!==e.maxProperties&&$>=e.maxProperties,H=()=>{if(!e||!e.required)return 0;let t=0;var r,o;n?i()(r=e.required).call(r,(e=>t+=void 0===L[e]?0:1)):i()(o=e.required).call(o,(e=>{var r;return t+=void 0===(null===(r=L[k])||void 0===r?void 0:g()(r).call(r,(t=>void 0!==t[e])))?0:1}));return e.required.length-t},J=t=>{var r;return!(e&&e.required&&e.required.length)||!c()(r=e.required).call(r,t)},K=t=>!e||null===e.maxProperties||void 0===e.maxProperties||!W()&&(!J(t)||e.maxProperties-$-H()>0);if(V=n?function(r){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(e&&q[r]){if(q[r].xml=q[r].xml||{},q[r].xml.attribute){const e=l()(q[r].enum)?q[r].enum[0]:void 0,t=q[r].example,n=q[r].default;return void(h[q[r].xml.name||r]=void 0!==t?t:void 0!==n?n:void 0!==e?e:T(q[r]))}q[r].xml.name=q[r].xml.name||r}else q[r]||!1===x||(q[r]={xml:{name:r}});let a=F(e&&q[r]||void 0,t,o,n);var i;K(r)&&($++,l()(a)?L[k]=y()(i=L[k]).call(i,a):L[k].push(a))}:(e,r)=>{K(e)&&(L[e]=F(q[e],t,r,n),$++)},a){let o;if(o=P(void 0!==r?r:void 0!==b?b:e.default),!n){if("number"==typeof o&&"string"===v)return`${o}`;if("string"!=typeof o||"string"===v)return o;try{return JSON.parse(o)}catch(e){return o}}if(e||(v=l()(o)?"array":typeof o),"array"===v){if(!l()(o)){if("string"==typeof o)return o;o=[o]}const r=e?e.items:void 0;r&&(r.xml=r.xml||m||{},r.xml.name=r.xml.name||m.name);let a=w()(o).call(o,(e=>F(r,t,e,n)));return a=U(a),m.wrapped?(L[k]=a,O()(h)||L[k].push({_attr:h})):L=a,L}if("object"===v){if("string"==typeof o)return o;for(let t in o)Object.prototype.hasOwnProperty.call(o,t)&&(e&&q[t]&&q[t].readOnly&&!S||e&&q[t]&&q[t].writeOnly&&!A||(e&&q[t]&&q[t].xml&&q[t].xml.attribute?h[q[t].xml.name||t]=o[t]:V(t,o[t])));return O()(h)||L[k].push({_attr:h}),L}return L[k]=O()(h)?o:[{_attr:h},o],L}if("object"===v){for(let e in q)Object.prototype.hasOwnProperty.call(q,e)&&(q[e]&&q[e].deprecated||q[e]&&q[e].readOnly&&!S||q[e]&&q[e].writeOnly&&!A||V(e));if(n&&h&&L[k].push({_attr:h}),W())return L;if(!0===x)n?L[k].push({additionalProp:"Anything can be here"}):L.additionalProp1={},$++;else if(x){const r=(0,j.mz)(x),o=F(r,t,void 0,n);if(n&&r.xml&&r.xml.name&&"notagname"!==r.xml.name)L[k].push(o);else{const t=null!==e.minProperties&&void 0!==e.minProperties&&$F(B(_,e,t),t,void 0,n)));else if(l()(_.oneOf)){var Y;r=w()(Y=_.oneOf).call(Y,(e=>F(B(_,e,t),t,void 0,n)))}else{if(!(!n||n&&m.wrapped))return F(_,t,void 0,n);r=[F(_,t,void 0,n)]}return r=U(r),n&&m.wrapped?(L[k]=r,O()(h)||L[k].push({_attr:h}),L):r}let Q;if(e&&l()(e.enum))Q=(0,j.AF)(e.enum)[0];else{if(!e)return;if(Q=T(e),"number"==typeof Q){let t=e.minimum;null!=t&&(e.exclusiveMinimum&&t++,Q=t);let r=e.maximum;null!=r&&(e.exclusiveMaximum&&r--,Q=r)}if("string"==typeof Q&&(null!==e.maxLength&&void 0!==e.maxLength&&(Q=d()(Q).call(Q,0,e.maxLength)),null!==e.minLength&&void 0!==e.minLength)){let t=0;for(;Q.length(e.schema&&(e=e.schema),e.properties&&(e.type="object"),e),U=(e,t,r)=>{const n=F(e,t,r,!0);if(n)return"string"==typeof n?n:S()(n,{declaration:!0,indent:"\t"})},q=(e,t,r)=>F(e,t,r,!1),V=(e,t,r)=>[e,x()(t),x()(r)],$=(0,I.Z)(U,V),W=(0,I.Z)(q,V)},8883:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(57050);function o(){return{fn:n}}},51228:(e,t,r)=>{"use strict";r.r(t),r.d(t,{UPDATE_SPEC:()=>U,UPDATE_URL:()=>q,UPDATE_JSON:()=>V,UPDATE_PARAM:()=>$,UPDATE_EMPTY_PARAM_INCLUSION:()=>W,VALIDATE_PARAMS:()=>H,SET_RESPONSE:()=>J,SET_REQUEST:()=>K,SET_MUTATED_REQUEST:()=>G,LOG_REQUEST:()=>Z,CLEAR_RESPONSE:()=>Y,CLEAR_REQUEST:()=>Q,CLEAR_VALIDATE_PARAMS:()=>X,UPDATE_OPERATION_META_VALUE:()=>ee,UPDATE_RESOLVED:()=>te,UPDATE_RESOLVED_SUBTREE:()=>re,SET_SCHEME:()=>ne,updateSpec:()=>oe,updateResolved:()=>ae,updateUrl:()=>ie,updateJsonSpec:()=>se,parseToJson:()=>le,resolveSpec:()=>ce,requestResolvedSubtree:()=>he,changeParam:()=>de,changeParamByIdentity:()=>me,updateResolvedSubtree:()=>ge,invalidateResolvedSubtreeCache:()=>ve,validateParams:()=>ye,updateEmptyParamInclusion:()=>be,clearValidateParams:()=>we,changeConsumesValue:()=>Ee,changeProducesValue:()=>xe,setResponse:()=>_e,setRequest:()=>Se,setMutatedRequest:()=>Ae,logRequest:()=>ke,executeRequest:()=>Ce,execute:()=>Oe,clearResponse:()=>je,clearRequest:()=>Ie,setScheme:()=>Ne});var n=r(58309),o=r.n(n),a=r(97606),i=r.n(a),s=r(96718),l=r.n(s),u=r(24282),c=r.n(u),p=r(2250),f=r.n(p),h=r(6226),d=r.n(h),m=r(14418),g=r.n(m),v=r(3665),y=r.n(v),b=r(11882),w=r.n(b),E=r(86),x=r.n(E),_=r(28222),S=r.n(_),A=r(76986),k=r.n(A),C=r(70586),O=r.n(C),j=r(1272),I=r(43393),N=r(84564),T=r.n(N),P=r(7710),R=r(47037),M=r.n(R),D=r(23279),L=r.n(D),B=r(36968),F=r.n(B),z=r(90242);const U="spec_update_spec",q="spec_update_url",V="spec_update_json",$="spec_update_param",W="spec_update_empty_param_inclusion",H="spec_validate_param",J="spec_set_response",K="spec_set_request",G="spec_set_mutated_request",Z="spec_log_request",Y="spec_clear_response",Q="spec_clear_request",X="spec_clear_validate_param",ee="spec_update_operation_meta_value",te="spec_update_resolved",re="spec_update_resolved_subtree",ne="set_scheme";function oe(e){const t=(r=e,M()(r)?r:"").replace(/\t/g," ");var r;if("string"==typeof e)return{type:U,payload:t}}function ae(e){return{type:te,payload:e}}function ie(e){return{type:q,payload:e}}function se(e){return{type:V,payload:e}}const le=e=>t=>{let{specActions:r,specSelectors:n,errActions:o}=t,{specStr:a}=n,i=null;try{e=e||a(),o.clear({source:"parser"}),i=j.ZP.load(e,{schema:j.A8})}catch(e){return console.error(e),o.newSpecErr({source:"parser",level:"error",message:e.reason,line:e.mark&&e.mark.line?e.mark.line+1:void 0})}return i&&"object"==typeof i?r.updateJsonSpec(i):{}};let ue=!1;const ce=(e,t)=>r=>{let{specActions:n,specSelectors:a,errActions:s,fn:{fetch:u,resolve:c,AST:p={}},getConfigs:f}=r;ue||(console.warn("specActions.resolveSpec is deprecated since v3.10.0 and will be removed in v4.0.0; use requestResolvedSubtree instead!"),ue=!0);const{modelPropertyMacro:h,parameterMacro:d,requestInterceptor:m,responseInterceptor:g}=f();void 0===e&&(e=a.specJson()),void 0===t&&(t=a.url());let v=p.getLineNumberForPath?p.getLineNumberForPath:()=>{},y=a.specStr();return c({fetch:u,spec:e,baseDoc:t,modelPropertyMacro:h,parameterMacro:d,requestInterceptor:m,responseInterceptor:g}).then((e=>{let{spec:t,errors:r}=e;if(s.clear({type:"thrown"}),o()(r)&&r.length>0){let e=i()(r).call(r,(e=>(console.error(e),e.line=e.fullPath?v(y,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",l()(e,"message",{enumerable:!0,value:e.message}),e)));s.newThrownErrBatch(e)}return n.updateResolved(t)}))};let pe=[];const fe=L()((async()=>{const e=pe.system;if(!e)return void console.error("debResolveSubtrees: don't have a system to operate on, aborting.");const{errActions:t,errSelectors:r,fn:{resolveSubtree:n,fetch:a,AST:s={}},specSelectors:u,specActions:p}=e;if(!n)return void console.error("Error: Swagger-Client did not provide a `resolveSubtree` method, doing nothing.");let h=s.getLineNumberForPath?s.getLineNumberForPath:()=>{};const m=u.specStr(),{modelPropertyMacro:v,parameterMacro:b,requestInterceptor:w,responseInterceptor:E}=e.getConfigs();try{var x=await c()(pe).call(pe,(async(e,s)=>{const{resultMap:c,specWithCurrentSubtrees:p}=await e,{errors:x,spec:_}=await n(p,s,{baseDoc:u.url(),modelPropertyMacro:v,parameterMacro:b,requestInterceptor:w,responseInterceptor:E});if(r.allErrors().size&&t.clearBy((e=>{var t;return"thrown"!==e.get("type")||"resolver"!==e.get("source")||!f()(t=e.get("fullPath")).call(t,((e,t)=>e===s[t]||void 0===s[t]))})),o()(x)&&x.length>0){let e=i()(x).call(x,(e=>(e.line=e.fullPath?h(m,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",l()(e,"message",{enumerable:!0,value:e.message}),e)));t.newThrownErrBatch(e)}var S,A;_&&u.isOAS3()&&"components"===s[0]&&"securitySchemes"===s[1]&&await d().all(i()(S=g()(A=y()(_)).call(A,(e=>"openIdConnect"===e.type))).call(S,(async e=>{const t={url:e.openIdConnectUrl,requestInterceptor:w,responseInterceptor:E};try{const r=await a(t);r instanceof Error||r.status>=400?console.error(r.statusText+" "+t.url):e.openIdConnectData=JSON.parse(r.text)}catch(e){console.error(e)}})));return F()(c,s,_),F()(p,s,_),{resultMap:c,specWithCurrentSubtrees:p}}),d().resolve({resultMap:(u.specResolvedSubtree([])||(0,I.Map)()).toJS(),specWithCurrentSubtrees:u.specJson().toJS()}));delete pe.system,pe=[]}catch(e){console.error(e)}p.updateResolvedSubtree([],x.resultMap)}),35),he=e=>t=>{var r;w()(r=i()(pe).call(pe,(e=>e.join("@@")))).call(r,e.join("@@"))>-1||(pe.push(e),pe.system=t,fe())};function de(e,t,r,n,o){return{type:$,payload:{path:e,value:n,paramName:t,paramIn:r,isXml:o}}}function me(e,t,r,n){return{type:$,payload:{path:e,param:t,value:r,isXml:n}}}const ge=(e,t)=>({type:re,payload:{path:e,value:t}}),ve=()=>({type:re,payload:{path:[],value:(0,I.Map)()}}),ye=(e,t)=>({type:H,payload:{pathMethod:e,isOAS3:t}}),be=(e,t,r,n)=>({type:W,payload:{pathMethod:e,paramName:t,paramIn:r,includeEmptyValue:n}});function we(e){return{type:X,payload:{pathMethod:e}}}function Ee(e,t){return{type:ee,payload:{path:e,value:t,key:"consumes_value"}}}function xe(e,t){return{type:ee,payload:{path:e,value:t,key:"produces_value"}}}const _e=(e,t,r)=>({payload:{path:e,method:t,res:r},type:J}),Se=(e,t,r)=>({payload:{path:e,method:t,req:r},type:K}),Ae=(e,t,r)=>({payload:{path:e,method:t,req:r},type:G}),ke=e=>({payload:e,type:Z}),Ce=e=>t=>{let{fn:r,specActions:n,specSelectors:a,getConfigs:s,oas3Selectors:l}=t,{pathName:u,method:c,operation:p}=e,{requestInterceptor:f,responseInterceptor:h}=s(),d=p.toJS();var m,v;p&&p.get("parameters")&&x()(m=g()(v=p.get("parameters")).call(v,(e=>e&&!0===e.get("allowEmptyValue")))).call(m,(t=>{if(a.parameterInclusionSettingFor([u,c],t.get("name"),t.get("in"))){e.parameters=e.parameters||{};const r=(0,z.cz)(t,e.parameters);(!r||r&&0===r.size)&&(e.parameters[t.get("name")]="")}}));if(e.contextUrl=T()(a.url()).toString(),d&&d.operationId?e.operationId=d.operationId:d&&u&&c&&(e.operationId=r.opId(d,u,c)),a.isOAS3()){const t=`${u}:${c}`;e.server=l.selectedServer(t)||l.selectedServer();const r=l.serverVariables({server:e.server,namespace:t}).toJS(),n=l.serverVariables({server:e.server}).toJS();e.serverVariables=S()(r).length?r:n,e.requestContentType=l.requestContentType(u,c),e.responseContentType=l.responseContentType(u,c)||"*/*";const a=l.requestBodyValue(u,c),s=l.requestBodyInclusionSetting(u,c);var y;if(a&&a.toJS)e.requestBody=g()(y=i()(a).call(a,(e=>I.Map.isMap(e)?e.get("value"):e))).call(y,((e,t)=>(o()(e)?0!==e.length:!(0,z.O2)(e))||s.get(t))).toJS();else e.requestBody=a}let b=k()({},e);b=r.buildRequest(b),n.setRequest(e.pathName,e.method,b);e.requestInterceptor=async t=>{let r=await f.apply(void 0,[t]),o=k()({},r);return n.setMutatedRequest(e.pathName,e.method,o),r},e.responseInterceptor=h;const w=O()();return r.execute(e).then((t=>{t.duration=O()()-w,n.setResponse(e.pathName,e.method,t)})).catch((t=>{"Failed to fetch"===t.message&&(t.name="",t.message='**Failed to fetch.** \n**Possible Reasons:** \n - CORS \n - Network Failure \n - URL scheme must be "http" or "https" for CORS request.'),n.setResponse(e.pathName,e.method,{error:!0,err:(0,P.serializeError)(t)})}))},Oe=function(){let{path:e,method:t,...r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return n=>{let{fn:{fetch:o},specSelectors:a,specActions:i}=n,s=a.specJsonWithResolvedSubtrees().toJS(),l=a.operationScheme(e,t),{requestContentType:u,responseContentType:c}=a.contentTypeValues([e,t]).toJS(),p=/xml/i.test(u),f=a.parameterValues([e,t],p).toJS();return i.executeRequest({...r,fetch:o,spec:s,pathName:e,method:t,parameters:f,requestContentType:u,scheme:l,responseContentType:c})}};function je(e,t){return{type:Y,payload:{path:e,method:t}}}function Ie(e,t){return{type:Q,payload:{path:e,method:t}}}function Ne(e,t,r){return{type:ne,payload:{scheme:e,path:t,method:r}}}},37038:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var n=r(20032),o=r(51228),a=r(33881),i=r(77508);function s(){return{statePlugins:{spec:{wrapActions:i,reducers:n.default,actions:o,selectors:a}}}}},20032:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>d});var n=r(24282),o=r.n(n),a=r(97606),i=r.n(a),s=r(76986),l=r.n(s),u=r(43393),c=r(90242),p=r(27504),f=r(33881),h=r(51228);const d={[h.UPDATE_SPEC]:(e,t)=>"string"==typeof t.payload?e.set("spec",t.payload):e,[h.UPDATE_URL]:(e,t)=>e.set("url",t.payload+""),[h.UPDATE_JSON]:(e,t)=>e.set("json",(0,c.oG)(t.payload)),[h.UPDATE_RESOLVED]:(e,t)=>e.setIn(["resolved"],(0,c.oG)(t.payload)),[h.UPDATE_RESOLVED_SUBTREE]:(e,t)=>{const{value:r,path:n}=t.payload;return e.setIn(["resolvedSubtrees",...n],(0,c.oG)(r))},[h.UPDATE_PARAM]:(e,t)=>{let{payload:r}=t,{path:n,paramName:o,paramIn:a,param:i,value:s,isXml:l}=r,u=i?(0,c.V9)(i):`${a}.${o}`;const p=l?"value_xml":"value";return e.setIn(["meta","paths",...n,"parameters",u,p],s)},[h.UPDATE_EMPTY_PARAM_INCLUSION]:(e,t)=>{let{payload:r}=t,{pathMethod:n,paramName:o,paramIn:a,includeEmptyValue:i}=r;if(!o||!a)return console.warn("Warning: UPDATE_EMPTY_PARAM_INCLUSION could not generate a paramKey."),e;const s=`${a}.${o}`;return e.setIn(["meta","paths",...n,"parameter_inclusions",s],i)},[h.VALIDATE_PARAMS]:(e,t)=>{let{payload:{pathMethod:r,isOAS3:n}}=t;const a=(0,f.specJsonWithResolvedSubtrees)(e).getIn(["paths",...r]),i=(0,f.parameterValues)(e,r).toJS();return e.updateIn(["meta","paths",...r,"parameters"],(0,u.fromJS)({}),(t=>{var s;return o()(s=a.get("parameters",(0,u.List)())).call(s,((t,o)=>{const a=(0,c.cz)(o,i),s=(0,f.parameterInclusionSettingFor)(e,r,o.get("name"),o.get("in")),l=(0,c.Ik)(o,a,{bypassRequiredCheck:s,isOAS3:n});return t.setIn([(0,c.V9)(o),"errors"],(0,u.fromJS)(l))}),t)}))},[h.CLEAR_VALIDATE_PARAMS]:(e,t)=>{let{payload:{pathMethod:r}}=t;return e.updateIn(["meta","paths",...r,"parameters"],(0,u.fromJS)([]),(e=>i()(e).call(e,(e=>e.set("errors",(0,u.fromJS)([]))))))},[h.SET_RESPONSE]:(e,t)=>{let r,{payload:{res:n,path:o,method:a}}=t;r=n.error?l()({error:!0,name:n.err.name,message:n.err.message,statusCode:n.err.statusCode},n.err.response):n,r.headers=r.headers||{};let i=e.setIn(["responses",o,a],(0,c.oG)(r));return p.Z.Blob&&n.data instanceof p.Z.Blob&&(i=i.setIn(["responses",o,a,"text"],n.data)),i},[h.SET_REQUEST]:(e,t)=>{let{payload:{req:r,path:n,method:o}}=t;return e.setIn(["requests",n,o],(0,c.oG)(r))},[h.SET_MUTATED_REQUEST]:(e,t)=>{let{payload:{req:r,path:n,method:o}}=t;return e.setIn(["mutatedRequests",n,o],(0,c.oG)(r))},[h.UPDATE_OPERATION_META_VALUE]:(e,t)=>{let{payload:{path:r,value:n,key:o}}=t,a=["paths",...r],i=["meta","paths",...r];return e.getIn(["json",...a])||e.getIn(["resolved",...a])||e.getIn(["resolvedSubtrees",...a])?e.setIn([...i,o],(0,u.fromJS)(n)):e},[h.CLEAR_RESPONSE]:(e,t)=>{let{payload:{path:r,method:n}}=t;return e.deleteIn(["responses",r,n])},[h.CLEAR_REQUEST]:(e,t)=>{let{payload:{path:r,method:n}}=t;return e.deleteIn(["requests",r,n])},[h.SET_SCHEME]:(e,t)=>{let{payload:{scheme:r,path:n,method:o}}=t;return n&&o?e.setIn(["scheme",n,o],r):n||o?void 0:e.setIn(["scheme","_defaultScheme"],r)}}},33881:(e,t,r)=>{"use strict";r.r(t),r.d(t,{lastError:()=>O,url:()=>j,specStr:()=>I,specSource:()=>N,specJson:()=>T,specResolved:()=>P,specResolvedSubtree:()=>R,specJsonWithResolvedSubtrees:()=>D,spec:()=>L,isOAS3:()=>B,info:()=>F,externalDocs:()=>z,version:()=>U,semver:()=>q,paths:()=>V,operations:()=>$,consumes:()=>W,produces:()=>H,security:()=>J,securityDefinitions:()=>K,findDefinition:()=>G,definitions:()=>Z,basePath:()=>Y,host:()=>Q,schemes:()=>X,operationsWithRootInherited:()=>ee,tags:()=>te,tagDetails:()=>re,operationsWithTags:()=>ne,taggedOperations:()=>oe,responses:()=>ae,requests:()=>ie,mutatedRequests:()=>se,responseFor:()=>le,requestFor:()=>ue,mutatedRequestFor:()=>ce,allowTryItOutFor:()=>pe,parameterWithMetaByIdentity:()=>fe,parameterInclusionSettingFor:()=>he,parameterWithMeta:()=>de,operationWithMeta:()=>me,getParameter:()=>ge,hasHost:()=>ve,parameterValues:()=>ye,parametersIncludeIn:()=>be,parametersIncludeType:()=>we,contentTypeValues:()=>Ee,currentProducesFor:()=>xe,producesOptionsFor:()=>_e,consumesOptionsFor:()=>Se,operationScheme:()=>Ae,canExecuteScheme:()=>ke,validateBeforeExecute:()=>Ce,getOAS3RequiredRequestBodyContentType:()=>Oe,isMediaTypeSchemaPropertiesEqual:()=>je});var n=r(24278),o=r.n(n),a=r(86),i=r.n(a),s=r(11882),l=r.n(s),u=r(97606),c=r.n(u),p=r(14418),f=r.n(p),h=r(51679),d=r.n(h),m=r(24282),g=r.n(m),v=r(2578),y=r.n(v),b=r(92039),w=r.n(b),E=r(58309),x=r.n(E),_=r(20573),S=r(90242),A=r(43393);const k=["get","put","post","delete","options","head","patch","trace"],C=e=>e||(0,A.Map)(),O=(0,_.P1)(C,(e=>e.get("lastError"))),j=(0,_.P1)(C,(e=>e.get("url"))),I=(0,_.P1)(C,(e=>e.get("spec")||"")),N=(0,_.P1)(C,(e=>e.get("specSource")||"not-editor")),T=(0,_.P1)(C,(e=>e.get("json",(0,A.Map)()))),P=(0,_.P1)(C,(e=>e.get("resolved",(0,A.Map)()))),R=(e,t)=>e.getIn(["resolvedSubtrees",...t],void 0),M=(e,t)=>A.Map.isMap(e)&&A.Map.isMap(t)?t.get("$$ref")?t:(0,A.OrderedMap)().mergeWith(M,e,t):t,D=(0,_.P1)(C,(e=>(0,A.OrderedMap)().mergeWith(M,e.get("json"),e.get("resolvedSubtrees")))),L=e=>T(e),B=(0,_.P1)(L,(()=>!1)),F=(0,_.P1)(L,(e=>Ie(e&&e.get("info")))),z=(0,_.P1)(L,(e=>Ie(e&&e.get("externalDocs")))),U=(0,_.P1)(F,(e=>e&&e.get("version"))),q=(0,_.P1)(U,(e=>{var t;return o()(t=/v?([0-9]*)\.([0-9]*)\.([0-9]*)/i.exec(e)).call(t,1)})),V=(0,_.P1)(D,(e=>e.get("paths"))),$=(0,_.P1)(V,(e=>{if(!e||e.size<1)return(0,A.List)();let t=(0,A.List)();return e&&i()(e)?(i()(e).call(e,((e,r)=>{if(!e||!i()(e))return{};i()(e).call(e,((e,n)=>{l()(k).call(k,n)<0||(t=t.push((0,A.fromJS)({path:r,method:n,operation:e,id:`${n}-${r}`})))}))})),t):(0,A.List)()})),W=(0,_.P1)(L,(e=>(0,A.Set)(e.get("consumes")))),H=(0,_.P1)(L,(e=>(0,A.Set)(e.get("produces")))),J=(0,_.P1)(L,(e=>e.get("security",(0,A.List)()))),K=(0,_.P1)(L,(e=>e.get("securityDefinitions"))),G=(e,t)=>{const r=e.getIn(["resolvedSubtrees","definitions",t],null),n=e.getIn(["json","definitions",t],null);return r||n||null},Z=(0,_.P1)(L,(e=>{const t=e.get("definitions");return A.Map.isMap(t)?t:(0,A.Map)()})),Y=(0,_.P1)(L,(e=>e.get("basePath"))),Q=(0,_.P1)(L,(e=>e.get("host"))),X=(0,_.P1)(L,(e=>e.get("schemes",(0,A.Map)()))),ee=(0,_.P1)($,W,H,((e,t,r)=>c()(e).call(e,(e=>e.update("operation",(e=>{if(e){if(!A.Map.isMap(e))return;return e.withMutations((e=>(e.get("consumes")||e.update("consumes",(e=>(0,A.Set)(e).merge(t))),e.get("produces")||e.update("produces",(e=>(0,A.Set)(e).merge(r))),e)))}return(0,A.Map)()})))))),te=(0,_.P1)(L,(e=>{const t=e.get("tags",(0,A.List)());return A.List.isList(t)?f()(t).call(t,(e=>A.Map.isMap(e))):(0,A.List)()})),re=(e,t)=>{var r;let n=te(e)||(0,A.List)();return d()(r=f()(n).call(n,A.Map.isMap)).call(r,(e=>e.get("name")===t),(0,A.Map)())},ne=(0,_.P1)(ee,te,((e,t)=>g()(e).call(e,((e,t)=>{let r=(0,A.Set)(t.getIn(["operation","tags"]));return r.count()<1?e.update("default",(0,A.List)(),(e=>e.push(t))):g()(r).call(r,((e,r)=>e.update(r,(0,A.List)(),(e=>e.push(t)))),e)}),g()(t).call(t,((e,t)=>e.set(t.get("name"),(0,A.List)())),(0,A.OrderedMap)())))),oe=e=>t=>{var r;let{getConfigs:n}=t,{tagsSorter:o,operationsSorter:a}=n();return c()(r=ne(e).sortBy(((e,t)=>t),((e,t)=>{let r="function"==typeof o?o:S.wh.tagsSorter[o];return r?r(e,t):null}))).call(r,((t,r)=>{let n="function"==typeof a?a:S.wh.operationsSorter[a],o=n?y()(t).call(t,n):t;return(0,A.Map)({tagDetails:re(e,r),operations:o})}))},ae=(0,_.P1)(C,(e=>e.get("responses",(0,A.Map)()))),ie=(0,_.P1)(C,(e=>e.get("requests",(0,A.Map)()))),se=(0,_.P1)(C,(e=>e.get("mutatedRequests",(0,A.Map)()))),le=(e,t,r)=>ae(e).getIn([t,r],null),ue=(e,t,r)=>ie(e).getIn([t,r],null),ce=(e,t,r)=>se(e).getIn([t,r],null),pe=()=>!0,fe=(e,t,r)=>{const n=D(e).getIn(["paths",...t,"parameters"],(0,A.OrderedMap)()),o=e.getIn(["meta","paths",...t,"parameters"],(0,A.OrderedMap)()),a=c()(n).call(n,(e=>{const t=o.get(`${r.get("in")}.${r.get("name")}`),n=o.get(`${r.get("in")}.${r.get("name")}.hash-${r.hashCode()}`);return(0,A.OrderedMap)().merge(e,t,n)}));return d()(a).call(a,(e=>e.get("in")===r.get("in")&&e.get("name")===r.get("name")),(0,A.OrderedMap)())},he=(e,t,r,n)=>{const o=`${n}.${r}`;return e.getIn(["meta","paths",...t,"parameter_inclusions",o],!1)},de=(e,t,r,n)=>{const o=D(e).getIn(["paths",...t,"parameters"],(0,A.OrderedMap)()),a=d()(o).call(o,(e=>e.get("in")===n&&e.get("name")===r),(0,A.OrderedMap)());return fe(e,t,a)},me=(e,t,r)=>{var n;const o=D(e).getIn(["paths",t,r],(0,A.OrderedMap)()),a=e.getIn(["meta","paths",t,r],(0,A.OrderedMap)()),i=c()(n=o.get("parameters",(0,A.List)())).call(n,(n=>fe(e,[t,r],n)));return(0,A.OrderedMap)().merge(o,a).set("parameters",i)};function ge(e,t,r,n){t=t||[];let o=e.getIn(["meta","paths",...t,"parameters"],(0,A.fromJS)([]));return d()(o).call(o,(e=>A.Map.isMap(e)&&e.get("name")===r&&e.get("in")===n))||(0,A.Map)()}const ve=(0,_.P1)(L,(e=>{const t=e.get("host");return"string"==typeof t&&t.length>0&&"/"!==t[0]}));function ye(e,t,r){t=t||[];let n=me(e,...t).get("parameters",(0,A.List)());return g()(n).call(n,((e,t)=>{let n=r&&"body"===t.get("in")?t.get("value_xml"):t.get("value");return e.set((0,S.V9)(t,{allowHashes:!1}),n)}),(0,A.fromJS)({}))}function be(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(A.List.isList(e))return w()(e).call(e,(e=>A.Map.isMap(e)&&e.get("in")===t))}function we(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(A.List.isList(e))return w()(e).call(e,(e=>A.Map.isMap(e)&&e.get("type")===t))}function Ee(e,t){t=t||[];let r=D(e).getIn(["paths",...t],(0,A.fromJS)({})),n=e.getIn(["meta","paths",...t],(0,A.fromJS)({})),o=xe(e,t);const a=r.get("parameters")||new A.List,i=n.get("consumes_value")?n.get("consumes_value"):we(a,"file")?"multipart/form-data":we(a,"formData")?"application/x-www-form-urlencoded":void 0;return(0,A.fromJS)({requestContentType:i,responseContentType:o})}function xe(e,t){t=t||[];const r=D(e).getIn(["paths",...t],null);if(null===r)return;const n=e.getIn(["meta","paths",...t,"produces_value"],null),o=r.getIn(["produces",0],null);return n||o||"application/json"}function _e(e,t){t=t||[];const r=D(e),n=r.getIn(["paths",...t],null);if(null===n)return;const[o]=t,a=n.get("produces",null),i=r.getIn(["paths",o,"produces"],null),s=r.getIn(["produces"],null);return a||i||s}function Se(e,t){t=t||[];const r=D(e),n=r.getIn(["paths",...t],null);if(null===n)return;const[o]=t,a=n.get("consumes",null),i=r.getIn(["paths",o,"consumes"],null),s=r.getIn(["consumes"],null);return a||i||s}const Ae=(e,t,r)=>{let n=e.get("url").match(/^([a-z][a-z0-9+\-.]*):/),o=x()(n)?n[1]:null;return e.getIn(["scheme",t,r])||e.getIn(["scheme","_defaultScheme"])||o||""},ke=(e,t,r)=>{var n;return l()(n=["http","https"]).call(n,Ae(e,t,r))>-1},Ce=(e,t)=>{t=t||[];let r=e.getIn(["meta","paths",...t,"parameters"],(0,A.fromJS)([])),n=!0;return i()(r).call(r,(e=>{let t=e.get("errors");t&&t.count()&&(n=!1)})),n},Oe=(e,t)=>{var r;let n={requestBody:!1,requestContentType:{}},o=e.getIn(["resolvedSubtrees","paths",...t,"requestBody"],(0,A.fromJS)([]));return o.size<1||(o.getIn(["required"])&&(n.requestBody=o.getIn(["required"])),i()(r=o.getIn(["content"]).entrySeq()).call(r,(e=>{const t=e[0];if(e[1].getIn(["schema","required"])){const r=e[1].getIn(["schema","required"]).toJS();n.requestContentType[t]=r}}))),n},je=(e,t,r,n)=>{if((r||n)&&r===n)return!0;let o=e.getIn(["resolvedSubtrees","paths",...t,"requestBody","content"],(0,A.fromJS)([]));if(o.size<2||!r||!n)return!1;let a=o.getIn([r,"schema","properties"],(0,A.fromJS)([])),i=o.getIn([n,"schema","properties"],(0,A.fromJS)([]));return!!a.equals(i)};function Ie(e){return A.Map.isMap(e)?e:new A.Map}},77508:(e,t,r)=>{"use strict";r.r(t),r.d(t,{updateSpec:()=>u,updateJsonSpec:()=>c,executeRequest:()=>p,validateParams:()=>f});var n=r(28222),o=r.n(n),a=r(86),i=r.n(a),s=r(27361),l=r.n(s);const u=(e,t)=>{let{specActions:r}=t;return function(){e(...arguments),r.parseToJson(...arguments)}},c=(e,t)=>{let{specActions:r}=t;return function(){for(var t=arguments.length,n=new Array(t),a=0;a{l()(u,[e]).$ref&&r.requestResolvedSubtree(["paths",e])})),r.requestResolvedSubtree(["components","securitySchemes"])}},p=(e,t)=>{let{specActions:r}=t;return t=>(r.logRequest(t),e(t))},f=(e,t)=>{let{specSelectors:r}=t;return t=>e(t,r.isOAS3())}},34852:(e,t,r)=>{"use strict";r.r(t),r.d(t,{loaded:()=>n});const n=(e,t)=>function(){e(...arguments);const r=t.getConfigs().withCredentials;void 0!==r&&(t.fn.fetch.withCredentials="string"==typeof r?"true"===r:!!r)}},48792:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>qr});var n={};r.r(n),r.d(n,{JsonPatchError:()=>Fe,_areEquals:()=>Ge,applyOperation:()=>$e,applyPatch:()=>We,applyReducer:()=>He,deepClone:()=>ze,getValueByPointer:()=>Ve,validate:()=>Ke,validator:()=>Je});var o={};r.r(o),r.d(o,{compare:()=>nt,generate:()=>tt,observe:()=>et,unobserve:()=>Xe});var a={};r.r(a),r.d(a,{cookie:()=>kr,header:()=>Ar,path:()=>xr,query:()=>_r});var i=r(80093),s=r.n(i),l=r(30222),u=r.n(l),c=r(36594),p=r.n(c),f=r(20474),h=r.n(f),d=r(67375),m=r.n(d),g=r(58118),v=r.n(g),y=r(74386),b=r.n(y),w=r(25110),E=r.n(w),x=r(35627),_=r.n(x),S=r(97606),A=r.n(S),k=r(28222),C=r.n(k),O=r(39022),j=r.n(O),I=r(2018),N=r.n(I),T=r(14418),P=r.n(T),R=(r(31905),r(92495)),M=r.n(R),D=r(1272);const L="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:window,{FormData:B,Blob:F,File:z}=L;var U=r(15687),q=r.n(U),V=r(24278),$=r.n(V),W=function(e){return":/?#[]@!$&'()*+,;=".indexOf(e)>-1},H=function(e){return/^[a-z0-9\-._~]+$/i.test(e)};function J(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=r.escape,o=arguments.length>2?arguments[2]:void 0;return"number"==typeof e&&(e=e.toString()),"string"==typeof e&&e.length&&n?o?JSON.parse(e):A()(t=q()(e)).call(t,(function(e){var t,r;if(H(e))return e;if(W(e)&&"unsafe"===n)return e;var o=new TextEncoder;return A()(t=A()(r=E()(o.encode(e))).call(r,(function(e){var t;return $()(t="0".concat(e.toString(16).toUpperCase())).call(t,-2)}))).call(t,(function(e){return"%".concat(e)})).join("")})).join(""):e}function K(e){var t=e.value;return Array.isArray(t)?function(e){var t=e.key,r=e.value,n=e.style,o=e.explode,a=e.escape,i=function(e){return J(e,{escape:a})};if("simple"===n)return A()(r).call(r,(function(e){return i(e)})).join(",");if("label"===n)return".".concat(A()(r).call(r,(function(e){return i(e)})).join("."));if("matrix"===n)return A()(r).call(r,(function(e){return i(e)})).reduce((function(e,r){var n,a,i;return!e||o?j()(a=j()(i="".concat(e||"",";")).call(i,t,"=")).call(a,r):j()(n="".concat(e,",")).call(n,r)}),"");if("form"===n){var s=o?"&".concat(t,"="):",";return A()(r).call(r,(function(e){return i(e)})).join(s)}if("spaceDelimited"===n){var l=o?"".concat(t,"="):"";return A()(r).call(r,(function(e){return i(e)})).join(" ".concat(l))}if("pipeDelimited"===n){var u=o?"".concat(t,"="):"";return A()(r).call(r,(function(e){return i(e)})).join("|".concat(u))}return}(e):"object"===h()(t)?function(e){var t=e.key,r=e.value,n=e.style,o=e.explode,a=e.escape,i=function(e){return J(e,{escape:a})},s=C()(r);if("simple"===n)return s.reduce((function(e,t){var n,a,s,l=i(r[t]),u=o?"=":",",c=e?"".concat(e,","):"";return j()(n=j()(a=j()(s="".concat(c)).call(s,t)).call(a,u)).call(n,l)}),"");if("label"===n)return s.reduce((function(e,t){var n,a,s,l=i(r[t]),u=o?"=":".",c=e?"".concat(e,"."):".";return j()(n=j()(a=j()(s="".concat(c)).call(s,t)).call(a,u)).call(n,l)}),"");if("matrix"===n&&o)return s.reduce((function(e,t){var n,o,a=i(r[t]),s=e?"".concat(e,";"):";";return j()(n=j()(o="".concat(s)).call(o,t,"=")).call(n,a)}),"");if("matrix"===n)return s.reduce((function(e,n){var o,a,s=i(r[n]),l=e?"".concat(e,","):";".concat(t,"=");return j()(o=j()(a="".concat(l)).call(a,n,",")).call(o,s)}),"");if("form"===n)return s.reduce((function(e,t){var n,a,s,l,u=i(r[t]),c=e?j()(n="".concat(e)).call(n,o?"&":","):"",p=o?"=":",";return j()(a=j()(s=j()(l="".concat(c)).call(l,t)).call(s,p)).call(a,u)}),"");return}(e):function(e){var t,r=e.key,n=e.value,o=e.style,a=e.escape,i=function(e){return J(e,{escape:a})};if("simple"===o)return i(n);if("label"===o)return".".concat(i(n));if("matrix"===o)return j()(t=";".concat(r,"=")).call(t,i(n));if("form"===o)return i(n);if("deepObject"===o)return i(n,{},!0);return}(e)}const G=function(e,t){t.body=e};var Z={serializeRes:te,mergeInQueryOrForm:fe};function Y(e){return Q.apply(this,arguments)}function Q(){return Q=s()(u().mark((function e(t){var r,n,o,a,i,s=arguments;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=s.length>1&&void 0!==s[1]?s[1]:{},"object"===h()(t)&&(t=(r=t).url),r.headers=r.headers||{},Z.mergeInQueryOrForm(r),r.headers&&C()(r.headers).forEach((function(e){var t=r.headers[e];"string"==typeof t&&(r.headers[e]=t.replace(/\n+/g," "))})),!r.requestInterceptor){e.next=12;break}return e.next=8,r.requestInterceptor(r);case 8:if(e.t0=e.sent,e.t0){e.next=11;break}e.t0=r;case 11:r=e.t0;case 12:return n=r.headers["content-type"]||r.headers["Content-Type"],/multipart\/form-data/i.test(n)&&r.body instanceof B&&(delete r.headers["content-type"],delete r.headers["Content-Type"]),e.prev=14,e.next=17,(r.userFetch||fetch)(r.url,r);case 17:return o=e.sent,e.next=20,Z.serializeRes(o,t,r);case 20:if(o=e.sent,!r.responseInterceptor){e.next=28;break}return e.next=24,r.responseInterceptor(o);case 24:if(e.t1=e.sent,e.t1){e.next=27;break}e.t1=o;case 27:o=e.t1;case 28:e.next=39;break;case 30:if(e.prev=30,e.t2=e.catch(14),o){e.next=34;break}throw e.t2;case 34:throw(a=new Error(o.statusText||"response status is ".concat(o.status))).status=o.status,a.statusCode=o.status,a.responseError=e.t2,a;case 39:if(o.ok){e.next=45;break}throw(i=new Error(o.statusText||"response status is ".concat(o.status))).status=o.status,i.statusCode=o.status,i.response=o,i;case 45:return e.abrupt("return",o);case 46:case"end":return e.stop()}}),e,null,[[14,30]])}))),Q.apply(this,arguments)}var X=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return/(json|xml|yaml|text)\b/.test(e)};function ee(e,t){return t&&(0===t.indexOf("application/json")||t.indexOf("+json")>0)?JSON.parse(e):D.ZP.load(e)}function te(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=r.loadSpec,o=void 0!==n&&n,a={ok:e.ok,url:e.url||t,status:e.status,statusText:e.statusText,headers:ne(e.headers)},i=a.headers["content-type"],s=o||X(i),l=s?e.text:e.blob||e.buffer;return l.call(e).then((function(e){if(a.text=e,a.data=e,s)try{var t=ee(e,i);a.body=t,a.obj=t}catch(e){a.parseError=e}return a}))}function re(e){return v()(e).call(e,", ")?e.split(", "):e}function ne(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return"function"!=typeof b()(e)?{}:E()(b()(e).call(e)).reduce((function(e,t){var r=m()(t,2),n=r[0],o=r[1];return e[n]=re(o),e}),{})}function oe(e,t){return t||"undefined"==typeof navigator||(t=navigator),t&&"ReactNative"===t.product?!(!e||"object"!==h()(e)||"string"!=typeof e.uri):void 0!==z&&e instanceof z||(void 0!==F&&e instanceof F||(!!ArrayBuffer.isView(e)||null!==e&&"object"===h()(e)&&"function"==typeof e.pipe))}function ae(e,t){return Array.isArray(e)&&e.some((function(e){return oe(e,t)}))}var ie={form:",",spaceDelimited:"%20",pipeDelimited:"|"},se={csv:",",ssv:"%20",tsv:"%09",pipes:"|"};function le(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=t.collectionFormat,o=t.allowEmptyValue,a=t.serializationOption,i=t.encoding,s="object"!==h()(t)||Array.isArray(t)?t:t.value,l=r?function(e){return e.toString()}:function(e){return encodeURIComponent(e)},u=l(e);if(void 0===s&&o)return[[u,""]];if(oe(s)||ae(s))return[[u,s]];if(a)return ue(e,s,r,a);if(i){if([h()(i.style),h()(i.explode),h()(i.allowReserved)].some((function(e){return"undefined"!==e}))){var c=i.style,p=i.explode,f=i.allowReserved;return ue(e,s,r,{style:c,explode:p,allowReserved:f})}if(i.contentType){if("application/json"===i.contentType){var d="string"==typeof s?s:_()(s);return[[u,l(d)]]}return[[u,l(s.toString())]]}return"object"!==h()(s)?[[u,l(s)]]:Array.isArray(s)&&s.every((function(e){return"object"!==h()(e)}))?[[u,A()(s).call(s,l).join(",")]]:[[u,l(_()(s))]]}return"object"!==h()(s)?[[u,l(s)]]:Array.isArray(s)?"multi"===n?[[u,A()(s).call(s,l)]]:[[u,A()(s).call(s,l).join(se[n||"csv"])]]:[[u,""]]}function ue(e,t,r,n){var o,a,i,s=n.style||"form",l=void 0===n.explode?"form"===s:n.explode,u=!r&&(n&&n.allowReserved?"unsafe":"reserved"),c=function(e){return J(e,{escape:u})},p=r?function(e){return e}:function(e){return J(e,{escape:u})};return"object"!==h()(t)?[[p(e),c(t)]]:Array.isArray(t)?l?[[p(e),A()(t).call(t,c)]]:[[p(e),A()(t).call(t,c).join(ie[s])]]:"deepObject"===s?A()(a=C()(t)).call(a,(function(r){var n;return[p(j()(n="".concat(e,"[")).call(n,r,"]")),c(t[r])]})):l?A()(i=C()(t)).call(i,(function(e){return[p(e),c(t[e])]})):[[p(e),A()(o=C()(t)).call(o,(function(e){var r;return[j()(r="".concat(p(e),",")).call(r,c(t[e]))]})).join(",")]]}function ce(e){return N()(e).reduce((function(e,t){var r,n=m()(t,2),o=n[0],a=n[1],i=p()(le(o,a,!0));try{for(i.s();!(r=i.n()).done;){var s=m()(r.value,2),l=s[0],u=s[1];if(Array.isArray(u)){var c,f=p()(u);try{for(f.s();!(c=f.n()).done;){var h=c.value;if(ArrayBuffer.isView(h)){var d=new F([h]);e.append(l,d)}else e.append(l,h)}}catch(e){f.e(e)}finally{f.f()}}else if(ArrayBuffer.isView(u)){var g=new F([u]);e.append(l,g)}else e.append(l,u)}}catch(e){i.e(e)}finally{i.f()}return e}),new B)}function pe(e){var t=C()(e).reduce((function(t,r){var n,o=p()(le(r,e[r]));try{for(o.s();!(n=o.n()).done;){var a=m()(n.value,2),i=a[0],s=a[1];t[i]=s}}catch(e){o.e(e)}finally{o.f()}return t}),{});return M().stringify(t,{encode:!1,indices:!1})||""}function fe(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.url,r=void 0===t?"":t,n=e.query,o=e.form,a=function(){for(var e=arguments.length,t=new Array(e),r=0;r=48&&t<=57))return!1;r++}return!0}function Re(e){return-1===e.indexOf("/")&&-1===e.indexOf("~")?e:e.replace(/~/g,"~0").replace(/\//g,"~1")}function Me(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function De(e){if(void 0===e)return!0;if(e)if(Array.isArray(e)){for(var t=0,r=e.length;t0&&"constructor"==s[u-1]))throw new TypeError("JSON-Patch: modifying `__proto__` or `constructor/prototype` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README");if(r&&void 0===p&&(void 0===l[f]?p=s.slice(0,u).join("/"):u==c-1&&(p=t.path),void 0!==p&&h(t,0,e,p)),u++,Array.isArray(l)){if("-"===f)f=l.length;else{if(r&&!Pe(f))throw new Fe("Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index","OPERATION_PATH_ILLEGAL_ARRAY_INDEX",a,t,e);Pe(f)&&(f=~~f)}if(u>=c){if(r&&"add"===t.op&&f>l.length)throw new Fe("The specified index MUST NOT be greater than the number of elements in the array","OPERATION_VALUE_OUT_OF_BOUNDS",a,t,e);if(!1===(i=qe[t.op].call(t,l,f,e)).test)throw new Fe("Test operation failed","TEST_OPERATION_FAILED",a,t,e);return i}}else if(u>=c){if(!1===(i=Ue[t.op].call(t,l,f,e)).test)throw new Fe("Test operation failed","TEST_OPERATION_FAILED",a,t,e);return i}if(l=l[f],r&&u0)throw new Fe('Operation `path` property must start with "/"',"OPERATION_PATH_INVALID",t,e,r);if(("move"===e.op||"copy"===e.op)&&"string"!=typeof e.from)throw new Fe("Operation `from` property is not present (applicable in `move` and `copy` operations)","OPERATION_FROM_REQUIRED",t,e,r);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&void 0===e.value)throw new Fe("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_REQUIRED",t,e,r);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&De(e.value))throw new Fe("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED",t,e,r);if(r)if("add"==e.op){var o=e.path.split("/").length,a=n.split("/").length;if(o!==a+1&&o!==a)throw new Fe("Cannot perform an `add` operation at the desired path","OPERATION_PATH_CANNOT_ADD",t,e,r)}else if("replace"===e.op||"remove"===e.op||"_get"===e.op){if(e.path!==n)throw new Fe("Cannot perform the operation at a path that does not exist","OPERATION_PATH_UNRESOLVABLE",t,e,r)}else if("move"===e.op||"copy"===e.op){var i=Ke([{op:"_get",path:e.from,value:void 0}],r);if(i&&"OPERATION_PATH_UNRESOLVABLE"===i.name)throw new Fe("Cannot perform the operation from a path that does not exist","OPERATION_FROM_UNRESOLVABLE",t,e,r)}}function Ke(e,t,r){try{if(!Array.isArray(e))throw new Fe("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");if(t)We(Te(t),Te(e),r||!0);else{r=r||Je;for(var n=0;n0&&(e.patches=[],e.callback&&e.callback(n)),n}function rt(e,t,r,n,o){if(t!==e){"function"==typeof t.toJSON&&(t=t.toJSON());for(var a=Ne(t),i=Ne(e),s=!1,l=i.length-1;l>=0;l--){var u=e[p=i[l]];if(!Ie(t,p)||void 0===t[p]&&void 0!==u&&!1===Array.isArray(t))Array.isArray(e)===Array.isArray(t)?(o&&r.push({op:"test",path:n+"/"+Re(p),value:Te(u)}),r.push({op:"remove",path:n+"/"+Re(p)}),s=!0):(o&&r.push({op:"test",path:n,value:e}),r.push({op:"replace",path:n,value:t}),!0);else{var c=t[p];"object"==typeof u&&null!=u&&"object"==typeof c&&null!=c&&Array.isArray(u)===Array.isArray(c)?rt(u,c,r,n+"/"+Re(p),o):u!==c&&(!0,o&&r.push({op:"test",path:n+"/"+Re(p),value:Te(u)}),r.push({op:"replace",path:n+"/"+Re(p),value:Te(c)}))}}if(s||a.length!=i.length)for(l=0;l0){var o=t(e,r[r.length-1],r);o&&(n=j()(n).call(n,o))}if(Array.isArray(e)){var a=A()(e).call(e,(function(e,n){return pt(e,t,j()(r).call(r,n))}));a&&(n=j()(n).call(n,a))}else if(mt(e)){var i,s=A()(i=C()(e)).call(i,(function(n){return pt(e[n],t,j()(r).call(r,n))}));s&&(n=j()(n).call(n,s))}return n=ht(n)}function ft(e){return Array.isArray(e)?e:[e]}function ht(e){var t;return j()(t=[]).apply(t,q()(A()(e).call(e,(function(e){return Array.isArray(e)?ht(e):e}))))}function dt(e){return P()(e).call(e,(function(e){return void 0!==e}))}function mt(e){return e&&"object"===h()(e)}function gt(e){return e&&"function"==typeof e}function vt(e){if(wt(e)){var t=e.op;return"add"===t||"remove"===t||"replace"===t}return!1}function yt(e){return vt(e)||wt(e)&&"mutation"===e.type}function bt(e){return yt(e)&&("add"===e.op||"replace"===e.op||"merge"===e.op||"mergeDeep"===e.op)}function wt(e){return e&&"object"===h()(e)}function Et(e,t){try{return Ve(e,t)}catch(e){return console.error(e),{}}}var xt=r(28886),_t=r.n(xt),St=r(37659),At=r.n(St),kt=r(8575);function Ct(e,t){function r(){Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack;for(var e=arguments.length,r=new Array(e),n=0;n-1&&-1===Nt.indexOf(r)||Tt.indexOf(n)>-1||Pt.some((function(e){return n.indexOf(e)>-1}))}function Mt(e,t){var r,n=e.split("#"),o=m()(n,2),a=o[0],i=o[1],s=kt.resolve(a||"",t||"");return i?j()(r="".concat(s,"#")).call(r,i):s}var Dt="application/json, application/yaml",Lt=/^([a-z]+:\/\/|\/\/)/i,Bt=Ct("JSONRefError",(function(e,t,r){this.originalError=r,Ee()(this,t||{})})),Ft={},zt=new(_t()),Ut=[function(e){return"paths"===e[0]&&"responses"===e[3]&&"examples"===e[5]},function(e){return"paths"===e[0]&&"responses"===e[3]&&"content"===e[5]&&"example"===e[7]},function(e){return"paths"===e[0]&&"responses"===e[3]&&"content"===e[5]&&"examples"===e[7]&&"value"===e[9]},function(e){return"paths"===e[0]&&"requestBody"===e[3]&&"content"===e[4]&&"example"===e[6]},function(e){return"paths"===e[0]&&"requestBody"===e[3]&&"content"===e[4]&&"examples"===e[6]&&"value"===e[8]},function(e){return"paths"===e[0]&&"parameters"===e[2]&&"example"===e[4]},function(e){return"paths"===e[0]&&"parameters"===e[3]&&"example"===e[5]},function(e){return"paths"===e[0]&&"parameters"===e[2]&&"examples"===e[4]&&"value"===e[6]},function(e){return"paths"===e[0]&&"parameters"===e[3]&&"examples"===e[5]&&"value"===e[7]},function(e){return"paths"===e[0]&&"parameters"===e[2]&&"content"===e[4]&&"example"===e[6]},function(e){return"paths"===e[0]&&"parameters"===e[2]&&"content"===e[4]&&"examples"===e[6]&&"value"===e[8]},function(e){return"paths"===e[0]&&"parameters"===e[3]&&"content"===e[4]&&"example"===e[7]},function(e){return"paths"===e[0]&&"parameters"===e[3]&&"content"===e[5]&&"examples"===e[7]&&"value"===e[9]}],qt={key:"$ref",plugin:function(e,t,r,n){var o=n.getInstance(),a=$()(r).call(r,0,-1);if(!Rt(a)&&!function(e){return Ut.some((function(t){return t(e)}))}(a)){var i=n.getContext(r).baseDoc;if("string"!=typeof e)return new Bt("$ref: must be a string (JSON-Ref)",{$ref:e,baseDoc:i,fullPath:r});var s,l,u,c=Jt(e),p=c[0],f=c[1]||"";try{s=i||p?Wt(p,i):null}catch(t){return Ht(t,{pointer:f,$ref:e,basePath:s,fullPath:r})}if(function(e,t,r,n){var o,a,i=zt.get(n);i||(i={},zt.set(n,i));var s=function(e){if(0===e.length)return"";return"/".concat(A()(e).call(e,Xt).join("/"))}(r),l=j()(o="".concat(t||"","#")).call(o,e),u=s.replace(/allOf\/\d+\/?/g,""),c=n.contextTree.get([]).baseDoc;if(t===c&&er(u,e))return!0;var p="",f=r.some((function(e){var t;return p=j()(t="".concat(p,"/")).call(t,Xt(e)),i[p]&&i[p].some((function(e){return er(e,l)||er(l,e)}))}));if(f)return!0;return void(i[u]=j()(a=i[u]||[]).call(a,l))}(f,s,a,n)&&!o.useCircularStructures){var h=Mt(e,s);return e===h?null:it.replace(r,h)}if(null==s?(u=Yt(f),void 0===(l=n.get(u))&&(l=new Bt("Could not resolve reference: ".concat(e),{pointer:f,$ref:e,baseDoc:i,fullPath:r}))):l=null!=(l=Kt(s,f)).__value?l.__value:l.catch((function(t){throw Ht(t,{pointer:f,$ref:e,baseDoc:i,fullPath:r})})),l instanceof Error)return[it.remove(r),l];var d=Mt(e,s),m=it.replace(a,l,{$$ref:d});if(s&&s!==i)return[m,it.context(a,{baseDoc:s})];try{if(!function(e,t){var r=[e];return t.path.reduce((function(e,t){return r.push(e[t]),e[t]}),e),n(t.value);function n(e){return it.isObject(e)&&(r.indexOf(e)>=0||C()(e).some((function(t){return n(e[t])})))}}(n.state,m)||o.useCircularStructures)return m}catch(e){return null}}}},Vt=Ee()(qt,{docCache:Ft,absoluteify:Wt,clearCache:function(e){void 0!==e?delete Ft[e]:C()(Ft).forEach((function(e){delete Ft[e]}))},JSONRefError:Bt,wrapError:Ht,getDoc:Gt,split:Jt,extractFromDoc:Kt,fetchJSON:function(e){return fetch(e,{headers:{Accept:Dt},loadSpec:!0}).then((function(e){return e.text()})).then((function(e){return D.ZP.load(e)}))},extract:Zt,jsonPointerToArray:Yt,unescapeJsonPointerToken:Qt});const $t=Vt;function Wt(e,t){if(!Lt.test(e)){var r;if(!t)throw new Bt(j()(r="Tried to resolve a relative URL, without having a basePath. path: '".concat(e,"' basePath: '")).call(r,t,"'"));return kt.resolve(t,e)}return e}function Ht(e,t){var r,n;e&&e.response&&e.response.body?r=j()(n="".concat(e.response.body.code," ")).call(n,e.response.body.message):r=e.message;return new Bt("Could not resolve reference: ".concat(r),t,e)}function Jt(e){return(e+"").split("#")}function Kt(e,t){var r=Ft[e];if(r&&!it.isPromise(r))try{var n=Zt(t,r);return Ee()(Ae().resolve(n),{__value:n})}catch(e){return Ae().reject(e)}return Gt(e).then((function(e){return Zt(t,e)}))}function Gt(e){var t=Ft[e];return t?it.isPromise(t)?t:Ae().resolve(t):(Ft[e]=Vt.fetchJSON(e).then((function(t){return Ft[e]=t,t})),Ft[e])}function Zt(e,t){var r=Yt(e);if(r.length<1)return t;var n=it.getIn(t,r);if(void 0===n)throw new Bt("Could not resolve pointer: ".concat(e," does not exist in document"),{pointer:e});return n}function Yt(e){var t;if("string"!=typeof e)throw new TypeError("Expected a string, got a ".concat(h()(e)));return"/"===e[0]&&(e=e.substr(1)),""===e?[]:A()(t=e.split("/")).call(t,Qt)}function Qt(e){return"string"!=typeof e?e:new(At())("=".concat(e.replace(/~1/g,"/").replace(/~0/g,"~"))).get("")}function Xt(e){var t,r=new(At())([["",e.replace(/~/g,"~0").replace(/\//g,"~1")]]);return $()(t=r.toString()).call(t,1)}function er(e,t){if(!(r=t)||"/"===r||"#"===r)return!0;var r,n=e.charAt(t.length),o=$()(t).call(t,-1);return 0===e.indexOf(t)&&(!n||"/"===n||"#"===n)&&"#"!==o}const tr={key:"allOf",plugin:function(e,t,r,n,o){if(!o.meta||!o.meta.$$ref){var a=$()(r).call(r,0,-1);if(!Rt(a)){if(!Array.isArray(e)){var i=new TypeError("allOf must be an array");return i.fullPath=r,i}var s=!1,l=o.value;if(a.forEach((function(e){l&&(l=l[e])})),l=me()({},l),0!==C()(l).length){delete l.allOf;var u,c,p=[];if(p.push(n.replace(a,{})),e.forEach((function(e,t){if(!n.isObject(e)){if(s)return null;s=!0;var o=new TypeError("Elements in allOf must be objects");return o.fullPath=r,p.push(o)}p.push(n.mergeDeep(a,e));var i=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=r.specmap,o=r.getBaseUrlForNodePath,a=void 0===o?function(e){var r;return n.getContext(j()(r=[]).call(r,q()(t),q()(e))).baseDoc}:o,i=r.targetKeys,s=void 0===i?["$ref","$$ref"]:i,l=[];return jt()(e).forEach((function(){if(v()(s).call(s,this.key)&&"string"==typeof this.node){var e=this.path,r=j()(t).call(t,this.path),o=Mt(this.node,a(e));l.push(n.replace(r,o))}})),l}(e,$()(r).call(r,0,-1),{getBaseUrlForNodePath:function(e){var o;return n.getContext(j()(o=[]).call(o,q()(r),[t],q()(e))).baseDoc},specmap:n});p.push.apply(p,q()(i))})),l.example)p.push(n.remove(j()(u=[]).call(u,a,"example")));if(p.push(n.mergeDeep(a,l)),!l.$$ref)p.push(n.remove(j()(c=[]).call(c,a,"$$ref")));return p}}}}},rr={key:"parameters",plugin:function(e,t,r,n){if(Array.isArray(e)&&e.length){var o=Ee()([],e),a=$()(r).call(r,0,-1),i=me()({},it.getIn(n.spec,a));return e.forEach((function(e,t){try{o[t].default=n.parameterMacro(i,e)}catch(e){var a=new Error(e);return a.fullPath=r,a}})),it.replace(r,o)}return it.replace(r,e)}},nr={key:"properties",plugin:function(e,t,r,n){var o=me()({},e);for(var a in e)try{o[a].default=n.modelPropertyMacro(o[a])}catch(e){var i=new Error(e);return i.fullPath=r,i}return it.replace(r,o)}};var or=function(){function e(t){ve()(this,e),this.root=ar(t||{})}return be()(e,[{key:"set",value:function(e,t){var r=this.getParent(e,!0);if(r){var n=e[e.length-1],o=r.children;o[n]?ir(o[n],t,r):o[n]=ar(t,r)}else ir(this.root,t,null)}},{key:"get",value:function(e){if((e=e||[]).length<1)return this.root.value;for(var t,r,n=this.root,o=0;o1?r-1:0),o=1;o1?n-1:0),a=1;a0}))}},{key:"nextPromisedPatch",value:function(){var e;if(this.promisedPatches.length>0)return Ae().race(A()(e=this.promisedPatches).call(e,(function(e){return e.value})))}},{key:"getPluginHistory",value:function(e){var t=this.constructor.getPluginName(e);return this.pluginHistory[t]||[]}},{key:"getPluginRunCount",value:function(e){return this.getPluginHistory(e).length}},{key:"getPluginHistoryTip",value:function(e){var t=this.getPluginHistory(e);return t&&t[t.length-1]||{}}},{key:"getPluginMutationIndex",value:function(e){var t=this.getPluginHistoryTip(e).mutationIndex;return"number"!=typeof t?-1:t}},{key:"updatePluginHistory",value:function(e,t){var r=this.constructor.getPluginName(e);this.pluginHistory[r]=this.pluginHistory[r]||[],this.pluginHistory[r].push(t)}},{key:"updatePatches",value:function(e){var t=this;it.normalizeArray(e).forEach((function(e){if(e instanceof Error)t.errors.push(e);else try{if(!it.isObject(e))return void t.debug("updatePatches","Got a non-object patch",e);if(t.showDebug&&t.allPatches.push(e),it.isPromise(e.value))return t.promisedPatches.push(e),void t.promisedPatchThen(e);if(it.isContextPatch(e))return void t.setContext(e.path,e.value);if(it.isMutation(e))return void t.updateMutations(e)}catch(e){console.error(e),t.errors.push(e)}}))}},{key:"updateMutations",value:function(e){"object"===h()(e.value)&&!Array.isArray(e.value)&&this.allowMetaPatches&&(e.value=me()({},e.value));var t=it.applyPatch(this.state,e,{allowMetaPatches:this.allowMetaPatches});t&&(this.mutations.push(e),this.state=t)}},{key:"removePromisedPatch",value:function(e){var t,r=this.promisedPatches.indexOf(e);r<0?this.debug("Tried to remove a promisedPatch that isn't there!"):Ce()(t=this.promisedPatches).call(t,r,1)}},{key:"promisedPatchThen",value:function(e){var t=this;return e.value=e.value.then((function(r){var n=me()(me()({},e),{},{value:r});t.removePromisedPatch(e),t.updatePatches(n)})).catch((function(r){t.removePromisedPatch(e),t.updatePatches(r)})),e.value}},{key:"getMutations",value:function(e,t){var r;return e=e||0,"number"!=typeof t&&(t=this.mutations.length),$()(r=this.mutations).call(r,e,t)}},{key:"getCurrentMutations",value:function(){return this.getMutationsForPlugin(this.getCurrentPlugin())}},{key:"getMutationsForPlugin",value:function(e){var t=this.getPluginMutationIndex(e);return this.getMutations(t+1)}},{key:"getCurrentPlugin",value:function(){return this.currentPlugin}},{key:"getLib",value:function(){return this.libMethods}},{key:"_get",value:function(e){return it.getIn(this.state,e)}},{key:"_getContext",value:function(e){return this.contextTree.get(e)}},{key:"setContext",value:function(e,t){return this.contextTree.set(e,t)}},{key:"_hasRun",value:function(e){return this.getPluginRunCount(this.getCurrentPlugin())>(e||0)}},{key:"dispatch",value:function(){var e,t=this,r=this,n=this.nextPlugin();if(!n){var o=this.nextPromisedPatch();if(o)return o.then((function(){return t.dispatch()})).catch((function(){return t.dispatch()}));var a={spec:this.state,errors:this.errors};return this.showDebug&&(a.patches=this.allPatches),Ae().resolve(a)}if(r.pluginCount=r.pluginCount||{},r.pluginCount[n]=(r.pluginCount[n]||0)+1,r.pluginCount[n]>100)return Ae().resolve({spec:r.state,errors:j()(e=r.errors).call(e,new Error("We've reached a hard limit of ".concat(100," plugin runs")))});if(n!==this.currentPlugin&&this.promisedPatches.length){var i,s=A()(i=this.promisedPatches).call(i,(function(e){return e.value}));return Ae().all(A()(s).call(s,(function(e){return e.then(sr,sr)}))).then((function(){return t.dispatch()}))}return function(){r.currentPlugin=n;var e=r.getCurrentMutations(),t=r.mutations.length-1;try{if(n.isGenerator){var o,a=p()(n(e,r.getLib()));try{for(a.s();!(o=a.n()).done;){l(o.value)}}catch(e){a.e(e)}finally{a.f()}}else{l(n(e,r.getLib()))}}catch(e){console.error(e),l([Ee()(Object.create(e),{plugin:n})])}finally{r.updatePluginHistory(n,{mutationIndex:t})}return r.dispatch()}();function l(e){e&&(e=it.fullyNormalizeArray(e),r.updatePatches(e,n))}}}],[{key:"getPluginName",value:function(e){return e.pluginName}},{key:"getPatchesOfType",value:function(e,t){return P()(e).call(e,t)}}]),e}();var ur={refs:$t,allOf:tr,parameters:rr,properties:nr},cr=r(23159);function pr(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.requestInterceptor,n=t.responseInterceptor,o=e.withCredentials?"include":"same-origin";return function(t){return e({url:t,loadSpec:!0,requestInterceptor:r,responseInterceptor:n,headers:{Accept:Dt},credentials:o}).then((function(e){return e.body}))}}function fr(e){var t=e.fetch,r=e.spec,n=e.url,o=e.mode,a=e.allowMetaPatches,i=void 0===a||a,l=e.pathDiscriminator,c=e.modelPropertyMacro,p=e.parameterMacro,f=e.requestInterceptor,h=e.responseInterceptor,d=e.skipNormalization,m=e.useCircularStructures,g=e.http,v=e.baseDoc;return v=v||n,g=t||g||Y,r?y(r):pr(g,{requestInterceptor:f,responseInterceptor:h})(v).then(y);function y(e){v&&(ur.refs.docCache[v]=e),ur.refs.fetchJSON=pr(g,{requestInterceptor:f,responseInterceptor:h});var t,r=[ur.refs];return"function"==typeof p&&r.push(ur.parameters),"function"==typeof c&&r.push(ur.properties),"strict"!==o&&r.push(ur.allOf),(t={spec:e,context:{baseDoc:v},plugins:r,allowMetaPatches:i,pathDiscriminator:l,parameterMacro:p,modelPropertyMacro:c,useCircularStructures:m},new lr(t).dispatch()).then(d?function(){var e=s()(u().mark((function e(t){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",t);case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}():cr.K1)}}var hr=r(88436),dr=r.n(hr),mr=r(27361),gr=r.n(mr),vr=r(30006);function yr(e){return"[object Object]"===Object.prototype.toString.call(e)}function br(e){var t,r;return!1!==yr(e)&&(void 0===(t=e.constructor)||!1!==yr(r=t.prototype)&&!1!==r.hasOwnProperty("isPrototypeOf"))}const wr={body:function(e){var t=e.req,r=e.value;t.body=r},header:function(e){var t=e.req,r=e.parameter,n=e.value;t.headers=t.headers||{},void 0!==n&&(t.headers[r.name]=n)},query:function(e){var t=e.req,r=e.value,n=e.parameter;t.query=t.query||{},!1===r&&"boolean"===n.type&&(r="false");0===r&&["number","integer"].indexOf(n.type)>-1&&(r="0");if(r)t.query[n.name]={collectionFormat:n.collectionFormat,value:r};else if(n.allowEmptyValue&&void 0!==r){var o=n.name;t.query[o]=t.query[o]||{},t.query[o].allowEmptyValue=!0}},path:function(e){var t=e.req,r=e.value,n=e.parameter;t.url=t.url.split("{".concat(n.name,"}")).join(encodeURIComponent(r))},formData:function(e){var t=e.req,r=e.value,n=e.parameter;(r||n.allowEmptyValue)&&(t.form=t.form||{},t.form[n.name]={value:r,allowEmptyValue:n.allowEmptyValue,collectionFormat:n.collectionFormat})}};function Er(e,t){return v()(t).call(t,"application/json")?"string"==typeof e?e:_()(e):e.toString()}function xr(e){var t=e.req,r=e.value,n=e.parameter,o=n.name,a=n.style,i=n.explode,s=n.content;if(s){var l=C()(s)[0];t.url=t.url.split("{".concat(o,"}")).join(J(Er(r,l),{escape:!0}))}else{var u=K({key:n.name,value:r,style:a||"simple",explode:i||!1,escape:!0});t.url=t.url.split("{".concat(o,"}")).join(u)}}function _r(e){var t=e.req,r=e.value,n=e.parameter;if(t.query=t.query||{},n.content){var o=C()(n.content)[0];t.query[n.name]=Er(r,o)}else if(!1===r&&(r="false"),0===r&&(r="0"),r){var a=n.style,i=n.explode,s=n.allowReserved;t.query[n.name]={value:r,serializationOption:{style:a,explode:i,allowReserved:s}}}else if(n.allowEmptyValue&&void 0!==r){var l=n.name;t.query[l]=t.query[l]||{},t.query[l].allowEmptyValue=!0}}var Sr=["accept","authorization","content-type"];function Ar(e){var t=e.req,r=e.parameter,n=e.value;if(t.headers=t.headers||{},!(Sr.indexOf(r.name.toLowerCase())>-1))if(r.content){var o=C()(r.content)[0];t.headers[r.name]=Er(n,o)}else void 0!==n&&(t.headers[r.name]=K({key:r.name,value:n,style:r.style||"simple",explode:void 0!==r.explode&&r.explode,escape:!1}))}function kr(e){var t=e.req,r=e.parameter,n=e.value;t.headers=t.headers||{};var o=h()(n);if(r.content){var a,i=C()(r.content)[0];t.headers.Cookie=j()(a="".concat(r.name,"=")).call(a,Er(n,i))}else if("undefined"!==o){var s="object"===o&&!Array.isArray(n)&&r.explode?"":"".concat(r.name,"=");t.headers.Cookie=s+K({key:r.name,value:n,escape:!1,style:r.style||"form",explode:void 0!==r.explode&&r.explode})}}var Cr=r(92381),Or=r.n(Cr);const jr=(void 0!==Or()?Or():"undefined"!=typeof self?self:window).btoa;function Ir(e,t){var r=e.operation,n=e.requestBody,o=e.securities,a=e.spec,i=e.attachContentTypeForEmptyPayload,s=e.requestContentType;t=function(e){var t=e.request,r=e.securities,n=void 0===r?{}:r,o=e.operation,a=void 0===o?{}:o,i=e.spec,s=me()({},t),l=n.authorized,u=void 0===l?{}:l,c=a.security||i.security||[],p=u&&!!C()(u).length,f=gr()(i,["components","securitySchemes"])||{};if(s.headers=s.headers||{},s.query=s.query||{},!C()(n).length||!p||!c||Array.isArray(a.security)&&!a.security.length)return t;return c.forEach((function(e){C()(e).forEach((function(e){var t=u[e],r=f[e];if(t){var n=t.value||t,o=r.type;if(t)if("apiKey"===o)"query"===r.in&&(s.query[r.name]=n),"header"===r.in&&(s.headers[r.name]=n),"cookie"===r.in&&(s.cookies[r.name]=n);else if("http"===o){if(/^basic$/i.test(r.scheme)){var a,i=n.username||"",l=n.password||"",c=jr(j()(a="".concat(i,":")).call(a,l));s.headers.Authorization="Basic ".concat(c)}/^bearer$/i.test(r.scheme)&&(s.headers.Authorization="Bearer ".concat(n))}else if("oauth2"===o||"openIdConnect"===o){var p,h=t.token||{},d=h[r["x-tokenName"]||"access_token"],m=h.token_type;m&&"bearer"!==m.toLowerCase()||(m="Bearer"),s.headers.Authorization=j()(p="".concat(m," ")).call(p,d)}}}))})),s}({request:t,securities:o,operation:r,spec:a});var l=r.requestBody||{},u=C()(l.content||{}),c=s&&u.indexOf(s)>-1;if(n||i){if(s&&c)t.headers["Content-Type"]=s;else if(!s){var p=u[0];p&&(t.headers["Content-Type"]=p,s=p)}}else s&&c&&(t.headers["Content-Type"]=s);if(!e.responseContentType&&r.responses){var f,d=P()(f=N()(r.responses)).call(f,(function(e){var t=m()(e,2),r=t[0],n=t[1],o=parseInt(r,10);return o>=200&&o<300&&br(n.content)})).reduce((function(e,t){var r=m()(t,2)[1];return j()(e).call(e,C()(r.content))}),[]);d.length>0&&(t.headers.accept=d.join(", "))}if(n)if(s){if(u.indexOf(s)>-1)if("application/x-www-form-urlencoded"===s||"multipart/form-data"===s)if("object"===h()(n)){var g=(l.content[s]||{}).encoding||{};t.form={},C()(n).forEach((function(e){t.form[e]={value:n[e],encoding:g[e]||{}}}))}else t.form=n;else t.body=n}else t.body=n;return t}function Nr(e,t){var r,n,o=e.spec,a=e.operation,i=e.securities,s=e.requestContentType,l=e.responseContentType,u=e.attachContentTypeForEmptyPayload;if(t=function(e){var t=e.request,r=e.securities,n=void 0===r?{}:r,o=e.operation,a=void 0===o?{}:o,i=e.spec,s=me()({},t),l=n.authorized,u=void 0===l?{}:l,c=n.specSecurity,p=void 0===c?[]:c,f=a.security||p,h=u&&!!C()(u).length,d=i.securityDefinitions;if(s.headers=s.headers||{},s.query=s.query||{},!C()(n).length||!h||!f||Array.isArray(a.security)&&!a.security.length)return t;return f.forEach((function(e){C()(e).forEach((function(e){var t=u[e];if(t){var r=t.token,n=t.value||t,o=d[e],a=o.type,i=o["x-tokenName"]||"access_token",l=r&&r[i],c=r&&r.token_type;if(t)if("apiKey"===a){var p="query"===o.in?"query":"headers";s[p]=s[p]||{},s[p][o.name]=n}else if("basic"===a)if(n.header)s.headers.authorization=n.header;else{var f,h=n.username||"",m=n.password||"";n.base64=jr(j()(f="".concat(h,":")).call(f,m)),s.headers.authorization="Basic ".concat(n.base64)}else if("oauth2"===a&&l){var g;c=c&&"bearer"!==c.toLowerCase()?c:"Bearer",s.headers.authorization=j()(g="".concat(c," ")).call(g,l)}}}))})),s}({request:t,securities:i,operation:a,spec:o}),t.body||t.form||u)if(s)t.headers["Content-Type"]=s;else if(Array.isArray(a.consumes)){var c=m()(a.consumes,1);t.headers["Content-Type"]=c[0]}else if(Array.isArray(o.consumes)){var p=m()(o.consumes,1);t.headers["Content-Type"]=p[0]}else a.parameters&&P()(r=a.parameters).call(r,(function(e){return"file"===e.type})).length?t.headers["Content-Type"]="multipart/form-data":a.parameters&&P()(n=a.parameters).call(n,(function(e){return"formData"===e.in})).length&&(t.headers["Content-Type"]="application/x-www-form-urlencoded");else if(s){var f,h,d=a.parameters&&P()(f=a.parameters).call(f,(function(e){return"body"===e.in})).length>0,g=a.parameters&&P()(h=a.parameters).call(h,(function(e){return"formData"===e.in})).length>0;(d||g)&&(t.headers["Content-Type"]=s)}return!l&&Array.isArray(a.produces)&&a.produces.length>0&&(t.headers.accept=a.produces.join(", ")),t}var Tr=["http","fetch","spec","operationId","pathName","method","parameters","securities"],Pr=function(e){return Array.isArray(e)?e:[]},Rr=Ct("OperationNotFoundError",(function(e,t,r){this.originalError=r,Ee()(this,t||{})})),Mr={buildRequest:Lr};function Dr(e){var t=e.http,r=e.fetch,n=e.spec,o=e.operationId,a=e.pathName,i=e.method,s=e.parameters,l=e.securities,u=dr()(e,Tr),c=t||r||Y;a&&i&&!o&&(o=(0,cr.nc)(a,i));var p=Mr.buildRequest(me()({spec:n,operationId:o,parameters:s,securities:l,http:c},u));return p.body&&(br(p.body)||Array.isArray(p.body))&&(p.body=_()(p.body)),c(p)}function Lr(e){var t,r,n=e.spec,o=e.operationId,i=e.responseContentType,s=e.scheme,l=e.requestInterceptor,u=e.responseInterceptor,c=e.contextUrl,p=e.userFetch,f=e.server,h=e.serverVariables,d=e.http,g=e.signal,v=e.parameters,y=e.parameterBuilders,b=(0,cr.z6)(n);y||(y=b?a:wr);var w={url:"",credentials:d&&d.withCredentials?"include":"same-origin",headers:{},cookies:{}};g&&(w.signal=g),l&&(w.requestInterceptor=l),u&&(w.responseInterceptor=u),p&&(w.userFetch=p);var E=(0,cr.$r)(n,o);if(!E)throw new Rr("Operation ".concat(o," not found"));var x,_=E.operation,S=void 0===_?{}:_,k=E.method,O=E.pathName;if(w.url+=(x={spec:n,scheme:s,contextUrl:c,server:f,serverVariables:h,pathName:O,method:k},(0,cr.z6)(x.spec)?function(e){var t=e.spec,r=e.pathName,n=e.method,o=e.server,a=e.contextUrl,i=e.serverVariables,s=void 0===i?{}:i,l=gr()(t,["paths",r,(n||"").toLowerCase(),"servers"])||gr()(t,["paths",r,"servers"])||gr()(t,["servers"]),u="",c=null;if(o&&l&&l.length){var p=A()(l).call(l,(function(e){return e.url}));p.indexOf(o)>-1&&(u=o,c=l[p.indexOf(o)])}if(!u&&l&&l.length){u=l[0].url;var f=m()(l,1);c=f[0]}return u.indexOf("{")>-1&&function(e){for(var t,r=[],n=/{([^}]+)}/g;t=n.exec(e);)r.push(t[1]);return r}(u).forEach((function(e){if(c.variables&&c.variables[e]){var t=c.variables[e],r=s[e]||t.default,n=new RegExp("{".concat(e,"}"),"g");u=u.replace(n,r)}})),function(){var e,t,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",o=r&&n?kt.parse(kt.resolve(n,r)):kt.parse(r),a=kt.parse(n),i=Br(o.protocol)||Br(a.protocol)||"",s=o.host||a.host,l=o.pathname||"";return"/"===(e=i&&s?j()(t="".concat(i,"://")).call(t,s+l):l)[e.length-1]?$()(e).call(e,0,-1):e}(u,a)}(x):function(e){var t,r,n=e.spec,o=e.scheme,a=e.contextUrl,i=void 0===a?"":a,s=kt.parse(i),l=Array.isArray(n.schemes)?n.schemes[0]:null,u=o||l||Br(s.protocol)||"http",c=n.host||s.host||"",p=n.basePath||"";return"/"===(t=u&&c?j()(r="".concat(u,"://")).call(r,c+p):p)[t.length-1]?$()(t).call(t,0,-1):t}(x)),!o)return delete w.cookies,w;w.url+=O,w.method="".concat(k).toUpperCase(),v=v||{};var I=n.paths[O]||{};i&&(w.headers.accept=i);var N=function(e){var t={};e.forEach((function(e){t[e.in]||(t[e.in]={}),t[e.in][e.name]=e}));var r=[];return C()(t).forEach((function(e){C()(t[e]).forEach((function(n){r.push(t[e][n])}))})),r}(j()(t=j()(r=[]).call(r,Pr(S.parameters))).call(t,Pr(I.parameters)));N.forEach((function(e){var t,r,o=y[e.in];if("body"===e.in&&e.schema&&e.schema.properties&&(t=v),void 0===(t=e&&e.name&&v[e.name]))t=e&&e.name&&v[j()(r="".concat(e.in,".")).call(r,e.name)];else if(function(e,t){return P()(t).call(t,(function(t){return t.name===e}))}(e.name,N).length>1){var a;console.warn(j()(a="Parameter '".concat(e.name,"' is ambiguous because the defined spec has more than one parameter with the name: '")).call(a,e.name,"' and the passed-in parameter values did not define an 'in' value."))}if(null!==t){if(void 0!==e.default&&void 0===t&&(t=e.default),void 0===t&&e.required&&!e.allowEmptyValue)throw new Error("Required parameter ".concat(e.name," is not provided"));if(b&&e.schema&&"object"===e.schema.type&&"string"==typeof t)try{t=JSON.parse(t)}catch(e){throw new Error("Could not parse object parameter value string as JSON")}o&&o({req:w,parameter:e,value:t,operation:S,spec:n})}}));var T=me()(me()({},e),{},{operation:S});if((w=b?Ir(T,w):Nr(T,w)).cookies&&C()(w.cookies).length){var R=C()(w.cookies).reduce((function(e,t){var r=w.cookies[t];return e+(e?"&":"")+vr.serialize(t,r)}),"");w.headers.Cookie=R}return w.cookies&&delete w.cookies,fe(w),w}var Br=function(e){return e?e.replace(/\W/g,""):null};function Fr(e,t){return zr.apply(this,arguments)}function zr(){return zr=s()(u().mark((function e(t,r){var n,o,a,i,s,l,c,p,f,h,d,m,g=arguments;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=g.length>2&&void 0!==g[2]?g[2]:{},o=n.returnEntireTree,a=n.baseDoc,i=n.requestInterceptor,s=n.responseInterceptor,l=n.parameterMacro,c=n.modelPropertyMacro,p=n.useCircularStructures,f={pathDiscriminator:r,baseDoc:a,requestInterceptor:i,responseInterceptor:s,parameterMacro:l,modelPropertyMacro:c,useCircularStructures:p},h=(0,cr.K1)({spec:t}),d=h.spec,e.next=6,fr(me()(me()({},f),{},{spec:d,allowMetaPatches:!0,skipNormalization:!0}));case 6:return m=e.sent,!o&&Array.isArray(r)&&r.length&&(m.spec=gr()(m.spec,r)||null),e.abrupt("return",m);case 9:case"end":return e.stop()}}),e)}))),zr.apply(this,arguments)}var Ur=r(34852);function qr(e){let{configs:t,getConfigs:r}=e;return{fn:{fetch:(n=Y,o=t.preFetch,a=t.postFetch,a=a||function(e){return e},o=o||function(e){return e},function(e){return"string"==typeof e&&(e={url:e}),Z.mergeInQueryOrForm(e),e=o(e),a(n(e))}),buildRequest:Lr,execute:Dr,resolve:fr,resolveSubtree:function(e,t,n){if(void 0===n){const e=r();n={modelPropertyMacro:e.modelPropertyMacro,parameterMacro:e.parameterMacro,requestInterceptor:e.requestInterceptor,responseInterceptor:e.responseInterceptor}}for(var o=arguments.length,a=new Array(o>3?o-3:0),i=3;i{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(90242);function o(){return{fn:{shallowEqualKeys:n.be}}}},48347:(e,t,r)=>{"use strict";r.r(t),r.d(t,{getDisplayName:()=>n});const n=e=>e.displayName||e.name||"Component"},73420:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>u});var n=r(35627),o=r.n(n),a=r(90242),i=r(55776),s=r(48347),l=r(60314);const u=e=>{let{getComponents:t,getStore:r,getSystem:n}=e;const u=(c=(0,i.getComponent)(n,r,t),(0,a.HP)(c,(function(){for(var e=arguments.length,t=new Array(e),r=0;r(0,l.Z)(e,(function(){for(var e=arguments.length,t=new Array(e),r=0;r{"use strict";r.r(t),r.d(t,{getComponent:()=>ne,render:()=>re,withMappedContainer:()=>te});var n=r(23101),o=r.n(n),a=r(28222),i=r.n(a),s=r(67294),l=r(73935),u=r(97779),c=s.createContext(null);var p=function(e){e()},f=function(){return p},h={notify:function(){}};var d=function(){function e(e,t){this.store=e,this.parentSub=t,this.unsubscribe=null,this.listeners=h,this.handleChangeWrapper=this.handleChangeWrapper.bind(this)}var t=e.prototype;return t.addNestedSub=function(e){return this.trySubscribe(),this.listeners.subscribe(e)},t.notifyNestedSubs=function(){this.listeners.notify()},t.handleChangeWrapper=function(){this.onStateChange&&this.onStateChange()},t.isSubscribed=function(){return Boolean(this.unsubscribe)},t.trySubscribe=function(){this.unsubscribe||(this.unsubscribe=this.parentSub?this.parentSub.addNestedSub(this.handleChangeWrapper):this.store.subscribe(this.handleChangeWrapper),this.listeners=function(){var e=f(),t=null,r=null;return{clear:function(){t=null,r=null},notify:function(){e((function(){for(var e=t;e;)e.callback(),e=e.next}))},get:function(){for(var e=[],r=t;r;)e.push(r),r=r.next;return e},subscribe:function(e){var n=!0,o=r={callback:e,next:null,prev:r};return o.prev?o.prev.next=o:t=o,function(){n&&null!==t&&(n=!1,o.next?o.next.prev=o.prev:r=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}())},t.tryUnsubscribe=function(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null,this.listeners.clear(),this.listeners=h)},e}(),m="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement?s.useLayoutEffect:s.useEffect;const g=function(e){var t=e.store,r=e.context,n=e.children,o=(0,s.useMemo)((function(){var e=new d(t);return e.onStateChange=e.notifyNestedSubs,{store:t,subscription:e}}),[t]),a=(0,s.useMemo)((function(){return t.getState()}),[t]);m((function(){var e=o.subscription;return e.trySubscribe(),a!==t.getState()&&e.notifyNestedSubs(),function(){e.tryUnsubscribe(),e.onStateChange=null}}),[o,a]);var i=r||c;return s.createElement(i.Provider,{value:o},n)};var v=r(87462),y=r(63366),b=r(8679),w=r.n(b),E=r(72973),x=[],_=[null,null];function S(e,t){var r=e[1];return[t.payload,r+1]}function A(e,t,r){m((function(){return e.apply(void 0,t)}),r)}function k(e,t,r,n,o,a,i){e.current=n,t.current=o,r.current=!1,a.current&&(a.current=null,i())}function C(e,t,r,n,o,a,i,s,l,u){if(e){var c=!1,p=null,f=function(){if(!c){var e,r,f=t.getState();try{e=n(f,o.current)}catch(e){r=e,p=e}r||(p=null),e===a.current?i.current||l():(a.current=e,s.current=e,i.current=!0,u({type:"STORE_UPDATED",payload:{error:r}}))}};r.onStateChange=f,r.trySubscribe(),f();return function(){if(c=!0,r.tryUnsubscribe(),r.onStateChange=null,p)throw p}}}var O=function(){return[null,0]};function j(e,t){void 0===t&&(t={});var r=t,n=r.getDisplayName,o=void 0===n?function(e){return"ConnectAdvanced("+e+")"}:n,a=r.methodName,i=void 0===a?"connectAdvanced":a,l=r.renderCountProp,u=void 0===l?void 0:l,p=r.shouldHandleStateChanges,f=void 0===p||p,h=r.storeKey,m=void 0===h?"store":h,g=(r.withRef,r.forwardRef),b=void 0!==g&&g,j=r.context,I=void 0===j?c:j,N=(0,y.Z)(r,["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef","forwardRef","context"]),T=I;return function(t){var r=t.displayName||t.name||"Component",n=o(r),a=(0,v.Z)({},N,{getDisplayName:o,methodName:i,renderCountProp:u,shouldHandleStateChanges:f,storeKey:m,displayName:n,wrappedComponentName:r,WrappedComponent:t}),l=N.pure;var c=l?s.useMemo:function(e){return e()};function p(r){var n=(0,s.useMemo)((function(){var e=r.reactReduxForwardedRef,t=(0,y.Z)(r,["reactReduxForwardedRef"]);return[r.context,e,t]}),[r]),o=n[0],i=n[1],l=n[2],u=(0,s.useMemo)((function(){return o&&o.Consumer&&(0,E.isContextConsumer)(s.createElement(o.Consumer,null))?o:T}),[o,T]),p=(0,s.useContext)(u),h=Boolean(r.store)&&Boolean(r.store.getState)&&Boolean(r.store.dispatch);Boolean(p)&&Boolean(p.store);var m=h?r.store:p.store,g=(0,s.useMemo)((function(){return function(t){return e(t.dispatch,a)}(m)}),[m]),b=(0,s.useMemo)((function(){if(!f)return _;var e=new d(m,h?null:p.subscription),t=e.notifyNestedSubs.bind(e);return[e,t]}),[m,h,p]),w=b[0],j=b[1],I=(0,s.useMemo)((function(){return h?p:(0,v.Z)({},p,{subscription:w})}),[h,p,w]),N=(0,s.useReducer)(S,x,O),P=N[0][0],R=N[1];if(P&&P.error)throw P.error;var M=(0,s.useRef)(),D=(0,s.useRef)(l),L=(0,s.useRef)(),B=(0,s.useRef)(!1),F=c((function(){return L.current&&l===D.current?L.current:g(m.getState(),l)}),[m,P,l]);A(k,[D,M,B,l,F,L,j]),A(C,[f,m,w,g,D,M,B,L,j,R],[m,w,g]);var z=(0,s.useMemo)((function(){return s.createElement(t,(0,v.Z)({},F,{ref:i}))}),[i,t,F]);return(0,s.useMemo)((function(){return f?s.createElement(u.Provider,{value:I},z):z}),[u,z,I])}var h=l?s.memo(p):p;if(h.WrappedComponent=t,h.displayName=p.displayName=n,b){var g=s.forwardRef((function(e,t){return s.createElement(h,(0,v.Z)({},e,{reactReduxForwardedRef:t}))}));return g.displayName=n,g.WrappedComponent=t,w()(g,t)}return w()(h,t)}}function I(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function N(e,t){if(I(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var r=Object.keys(e),n=Object.keys(t);if(r.length!==n.length)return!1;for(var o=0;o=0;n--){var o=t[n](e);if(o)return o}return function(t,n){throw new Error("Invalid value of type "+typeof e+" for "+r+" argument when connecting component "+n.wrappedComponentName+".")}}function V(e,t){return e===t}function $(e){var t=void 0===e?{}:e,r=t.connectHOC,n=void 0===r?j:r,o=t.mapStateToPropsFactories,a=void 0===o?D:o,i=t.mapDispatchToPropsFactories,s=void 0===i?M:i,l=t.mergePropsFactories,u=void 0===l?B:l,c=t.selectorFactory,p=void 0===c?U:c;return function(e,t,r,o){void 0===o&&(o={});var i=o,l=i.pure,c=void 0===l||l,f=i.areStatesEqual,h=void 0===f?V:f,d=i.areOwnPropsEqual,m=void 0===d?N:d,g=i.areStatePropsEqual,b=void 0===g?N:g,w=i.areMergedPropsEqual,E=void 0===w?N:w,x=(0,y.Z)(i,["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"]),_=q(e,a,"mapStateToProps"),S=q(t,s,"mapDispatchToProps"),A=q(r,u,"mergeProps");return n(p,(0,v.Z)({methodName:"connect",getDisplayName:function(e){return"Connect("+e+")"},shouldHandleStateChanges:Boolean(e),initMapStateToProps:_,initMapDispatchToProps:S,initMergeProps:A,pure:c,areStatesEqual:h,areOwnPropsEqual:m,areStatePropsEqual:b,areMergedPropsEqual:E},x))}}const W=$();var H;H=l.unstable_batchedUpdates,p=H;var J=r(57557),K=r.n(J),G=r(6557),Z=r.n(G);const Y=e=>t=>{const{fn:r}=e();class n extends s.Component{render(){return s.createElement(t,o()({},e(),this.props,this.context))}}return n.displayName=`WithSystem(${r.getDisplayName(t)})`,n},Q=(e,t)=>r=>{const{fn:n}=e();class a extends s.Component{render(){return s.createElement(g,{store:t},s.createElement(r,o()({},this.props,this.context)))}}return a.displayName=`WithRoot(${n.getDisplayName(r)})`,a},X=(e,t,r)=>(0,u.qC)(r?Q(e,r):Z(),W(((r,n)=>{var o;const a={...n,...e()},i=(null===(o=t.prototype)||void 0===o?void 0:o.mapStateToProps)||(e=>({state:e}));return i(r,a)})),Y(e))(t),ee=(e,t,r,n)=>{for(const o in t){const a=t[o];"function"==typeof a&&a(r[o],n[o],e())}},te=(e,t,r)=>(t,n)=>{const{fn:o}=e(),a=r(t,"root");class l extends s.Component{constructor(t,r){super(t,r),ee(e,n,t,{})}UNSAFE_componentWillReceiveProps(t){ee(e,n,t,this.props)}render(){const e=K()(this.props,n?i()(n):[]);return s.createElement(a,e)}}return l.displayName=`WithMappedContainer(${o.getDisplayName(a)})`,l},re=(e,t,r,n)=>o=>{const a=r(e,t,n)("App","root");l.render(s.createElement(a,null),o)},ne=(e,t,r)=>function(n,o){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("string"!=typeof n)throw new TypeError("Need a string, to fetch a component. Was given a "+typeof n);const i=r(n);return i?o?"root"===o?X(e,i,t()):X(e,i):i:(a.failSilently||e().log.warn("Could not find component:",n),null)}},36581:(e,t,r)=>{"use strict";r.d(t,{d3:()=>T,C2:()=>Z});var n=r(28222),o=r.n(n),a=r(58118),i=r.n(a),s=r(63366);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=4?[t[0],t[1],t[2],t[3],"".concat(t[0],".").concat(t[1]),"".concat(t[0],".").concat(t[2]),"".concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[0]),"".concat(t[1],".").concat(t[2]),"".concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[1]),"".concat(t[2],".").concat(t[3]),"".concat(t[3],".").concat(t[0]),"".concat(t[3],".").concat(t[1]),"".concat(t[3],".").concat(t[2]),"".concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[1],".").concat(t[3]),"".concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[2],".").concat(t[3]),"".concat(t[0],".").concat(t[3],".").concat(t[1]),"".concat(t[0],".").concat(t[3],".").concat(t[2]),"".concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[1],".").concat(t[2],".").concat(t[3]),"".concat(t[1],".").concat(t[3],".").concat(t[0]),"".concat(t[1],".").concat(t[3],".").concat(t[2]),"".concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[0],".").concat(t[3]),"".concat(t[2],".").concat(t[1],".").concat(t[0]),"".concat(t[2],".").concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[3],".").concat(t[0]),"".concat(t[2],".").concat(t[3],".").concat(t[1]),"".concat(t[3],".").concat(t[0],".").concat(t[1]),"".concat(t[3],".").concat(t[0],".").concat(t[2]),"".concat(t[3],".").concat(t[1],".").concat(t[0]),"".concat(t[3],".").concat(t[1],".").concat(t[2]),"".concat(t[3],".").concat(t[2],".").concat(t[0]),"".concat(t[3],".").concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[1],".").concat(t[2],".").concat(t[3]),"".concat(t[0],".").concat(t[1],".").concat(t[3],".").concat(t[2]),"".concat(t[0],".").concat(t[2],".").concat(t[1],".").concat(t[3]),"".concat(t[0],".").concat(t[2],".").concat(t[3],".").concat(t[1]),"".concat(t[0],".").concat(t[3],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[3],".").concat(t[2],".").concat(t[1]),"".concat(t[1],".").concat(t[0],".").concat(t[2],".").concat(t[3]),"".concat(t[1],".").concat(t[0],".").concat(t[3],".").concat(t[2]),"".concat(t[1],".").concat(t[2],".").concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[2],".").concat(t[3],".").concat(t[0]),"".concat(t[1],".").concat(t[3],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[3],".").concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[0],".").concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[0],".").concat(t[3],".").concat(t[1]),"".concat(t[2],".").concat(t[1],".").concat(t[0],".").concat(t[3]),"".concat(t[2],".").concat(t[1],".").concat(t[3],".").concat(t[0]),"".concat(t[2],".").concat(t[3],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[3],".").concat(t[1],".").concat(t[0]),"".concat(t[3],".").concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[3],".").concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[3],".").concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[3],".").concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[3],".").concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[3],".").concat(t[2],".").concat(t[1],".").concat(t[0])]:void 0),d[n]}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2?arguments[2]:void 0,n=e.filter((function(e){return"token"!==e})),o=m(n);return o.reduce((function(e,t){return p({},e,r[t])}),t)}function v(e){return e.join(" ")}function y(e){var t=e.node,r=e.stylesheet,n=e.style,o=void 0===n?{}:n,a=e.useInlineStyles,i=e.key,s=t.properties,l=t.type,u=t.tagName,c=t.value;if("text"===l)return c;if(u){var d,m=function(e,t){var r=0;return function(n){return r+=1,n.map((function(n,o){return y({node:n,stylesheet:e,useInlineStyles:t,key:"code-segment-".concat(r,"-").concat(o)})}))}}(r,a);if(a){var b=Object.keys(r).reduce((function(e,t){return t.split(".").forEach((function(t){e.includes(t)||e.push(t)})),e}),[]),w=s.className&&s.className.includes("token")?["token"]:[],E=s.className&&w.concat(s.className.filter((function(e){return!b.includes(e)})));d=p({},s,{className:v(E)||void 0,style:g(s.className,Object.assign({},s.style,o),r)})}else d=p({},s,{className:v(s.className)});var x=m(t.children);return f.createElement(u,(0,h.Z)({key:i},d),x)}}var b=/\n/g;function w(e){var t=e.codeString,r=e.codeStyle,n=e.containerStyle,o=void 0===n?{float:"left",paddingRight:"10px"}:n,a=e.numberStyle,i=void 0===a?{}:a,s=e.startingLineNumber;return f.createElement("code",{style:Object.assign({},r,o)},function(e){var t=e.lines,r=e.startingLineNumber,n=e.style;return t.map((function(e,t){var o=t+r;return f.createElement("span",{key:"line-".concat(t),className:"react-syntax-highlighter-line-number",style:"function"==typeof n?n(o):n},"".concat(o,"\n"))}))}({lines:t.replace(/\n$/,"").split("\n"),style:i,startingLineNumber:s}))}function E(e,t){return{type:"element",tagName:"span",properties:{key:"line-number--".concat(e),className:["comment","linenumber","react-syntax-highlighter-line-number"],style:t},children:[{type:"text",value:e}]}}function x(e,t,r){var n;return p({},{display:"inline-block",minWidth:(n=r,"".concat(n.toString().length,".25em")),paddingRight:"1em",textAlign:"right",userSelect:"none"},"function"==typeof e?e(t):e)}function _(e){var t=e.children,r=e.lineNumber,n=e.lineNumberStyle,o=e.largestLineNumber,a=e.showInlineLineNumbers,i=e.lineProps,s=void 0===i?{}:i,l=e.className,u=void 0===l?[]:l,c=e.showLineNumbers,f=e.wrapLongLines,h="function"==typeof s?s(r):s;if(h.className=u,r&&a){var d=x(n,r,o);t.unshift(E(r,d))}return f&c&&(h.style=p({},h.style,{display:"flex"})),{type:"element",tagName:"span",properties:h,children:t}}function S(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],n=0;n2&&void 0!==arguments[2]?arguments[2]:[];return _({children:e,lineNumber:t,lineNumberStyle:s,largestLineNumber:i,showInlineLineNumbers:o,lineProps:r,className:a,showLineNumbers:n,wrapLongLines:l})}function m(e,t){if(n&&t&&o){var r=x(s,t,i);e.unshift(E(t,r))}return e}function g(e,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return t||n.length>0?d(e,r,n):m(e,r)}for(var v=function(){var e=c[h],t=e.children[0].value;if(t.match(b)){var r=t.split("\n");r.forEach((function(t,o){var i=n&&p.length+a,s={type:"text",value:"".concat(t,"\n")};if(0===o){var l=g(c.slice(f+1,h).concat(_({children:[s],className:e.properties.className})),i);p.push(l)}else if(o===r.length-1){if(c[h+1]&&c[h+1].children&&c[h+1].children[0]){var u=_({children:[{type:"text",value:"".concat(t)}],className:e.properties.className});c.splice(h+1,0,u)}else{var d=g([s],i,e.properties.className);p.push(d)}}else{var m=g([s],i,e.properties.className);p.push(m)}})),f=h}h++};h=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(e,["language","children","style","customStyle","codeTagProps","useInlineStyles","showLineNumbers","showInlineLineNumbers","startingLineNumber","lineNumberContainerStyle","lineNumberStyle","wrapLines","wrapLongLines","lineProps","renderer","PreTag","CodeTag","code","astGenerator"]);U=U||O;var V=m?f.createElement(w,{containerStyle:E,codeStyle:u.style||{},numberStyle:_,startingLineNumber:b,codeString:z}):null,$=o.hljs||o['pre[class*="language-"]']||{backgroundColor:"#fff"},W=C(U)?"hljs":"prismjs",H=h?Object.assign({},q,{style:Object.assign({},$,i)}):Object.assign({},q,{className:q.className?"".concat(W," ").concat(q.className):W,style:Object.assign({},i)});if(!U)return f.createElement(D,H,V,f.createElement(B,u,z));(void 0===S&&R||N)&&(S=!0),R=R||k;var J=[{type:"text",value:z}],K=function(e){var t=e.astGenerator,r=e.language,n=e.code,o=e.defaultCodeValue;if(C(t)){var a=function(e,t){return-1!==e.listLanguages().indexOf(t)}(t,r);return"text"===r?{value:o,language:"text"}:a?t.highlight(r,n):t.highlightAuto(n)}try{return r&&"text"!==r?{value:t.highlight(n,r)}:{value:o}}catch(e){return{value:o}}}({astGenerator:U,language:t,code:z,defaultCodeValue:J});null===K.language&&(K.value=J);var G=A(K,S,P,m,v,b,K.value.length+b,_,N);return u.style=p({},u.style,N?{whiteSpace:"pre-wrap"}:{whiteSpace:"pre"}),f.createElement(D,H,f.createElement(B,u,!v&&V,R({rows:G,stylesheet:o,useInlineStyles:h})))});N.registerLanguage=I.registerLanguage;const T=N;var P=r(96344);const R=r.n(P)();var M=r(82026);const D=r.n(M)();var L=r(42157);const B=r.n(L)();var F=r(61519);const z=r.n(F)();var U=r(54587);const q=r.n(U)();var V=r(30786);const $=r.n(V)();var W=r(66336);const H=r.n(W)(),J={hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#333",color:"white"},"hljs-name":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"},"hljs-code":{fontStyle:"italic",color:"#888"},"hljs-emphasis":{fontStyle:"italic"},"hljs-tag":{color:"#62c8f3"},"hljs-variable":{color:"#ade5fc"},"hljs-template-variable":{color:"#ade5fc"},"hljs-selector-id":{color:"#ade5fc"},"hljs-selector-class":{color:"#ade5fc"},"hljs-string":{color:"#a2fca2"},"hljs-bullet":{color:"#d36363"},"hljs-type":{color:"#ffa"},"hljs-title":{color:"#ffa"},"hljs-section":{color:"#ffa"},"hljs-attribute":{color:"#ffa"},"hljs-quote":{color:"#ffa"},"hljs-built_in":{color:"#ffa"},"hljs-builtin-name":{color:"#ffa"},"hljs-number":{color:"#d36363"},"hljs-symbol":{color:"#d36363"},"hljs-keyword":{color:"#fcc28c"},"hljs-selector-tag":{color:"#fcc28c"},"hljs-literal":{color:"#fcc28c"},"hljs-comment":{color:"#888"},"hljs-deletion":{color:"#333",backgroundColor:"#fc9b9b"},"hljs-regexp":{color:"#c6b4f0"},"hljs-link":{color:"#c6b4f0"},"hljs-meta":{color:"#fc9b9b"},"hljs-addition":{backgroundColor:"#a2fca2",color:"#333"}};T.registerLanguage("json",D),T.registerLanguage("js",R),T.registerLanguage("xml",B),T.registerLanguage("yaml",q),T.registerLanguage("http",$),T.registerLanguage("bash",z),T.registerLanguage("powershell",H),T.registerLanguage("javascript",R);const K={agate:J,arta:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#222",color:"#aaa"},"hljs-subst":{color:"#aaa"},"hljs-section":{color:"#fff",fontWeight:"bold"},"hljs-comment":{color:"#444"},"hljs-quote":{color:"#444"},"hljs-meta":{color:"#444"},"hljs-string":{color:"#ffcc33"},"hljs-symbol":{color:"#ffcc33"},"hljs-bullet":{color:"#ffcc33"},"hljs-regexp":{color:"#ffcc33"},"hljs-number":{color:"#00cc66"},"hljs-addition":{color:"#00cc66"},"hljs-built_in":{color:"#32aaee"},"hljs-builtin-name":{color:"#32aaee"},"hljs-literal":{color:"#32aaee"},"hljs-type":{color:"#32aaee"},"hljs-template-variable":{color:"#32aaee"},"hljs-attribute":{color:"#32aaee"},"hljs-link":{color:"#32aaee"},"hljs-keyword":{color:"#6644aa"},"hljs-selector-tag":{color:"#6644aa"},"hljs-name":{color:"#6644aa"},"hljs-selector-id":{color:"#6644aa"},"hljs-selector-class":{color:"#6644aa"},"hljs-title":{color:"#bb1166"},"hljs-variable":{color:"#bb1166"},"hljs-deletion":{color:"#bb1166"},"hljs-template-tag":{color:"#bb1166"},"hljs-doctag":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"},"hljs-emphasis":{fontStyle:"italic"}},monokai:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#272822",color:"#ddd"},"hljs-tag":{color:"#f92672"},"hljs-keyword":{color:"#f92672",fontWeight:"bold"},"hljs-selector-tag":{color:"#f92672",fontWeight:"bold"},"hljs-literal":{color:"#f92672",fontWeight:"bold"},"hljs-strong":{color:"#f92672"},"hljs-name":{color:"#f92672"},"hljs-code":{color:"#66d9ef"},"hljs-class .hljs-title":{color:"white"},"hljs-attribute":{color:"#bf79db"},"hljs-symbol":{color:"#bf79db"},"hljs-regexp":{color:"#bf79db"},"hljs-link":{color:"#bf79db"},"hljs-string":{color:"#a6e22e"},"hljs-bullet":{color:"#a6e22e"},"hljs-subst":{color:"#a6e22e"},"hljs-title":{color:"#a6e22e",fontWeight:"bold"},"hljs-section":{color:"#a6e22e",fontWeight:"bold"},"hljs-emphasis":{color:"#a6e22e"},"hljs-type":{color:"#a6e22e",fontWeight:"bold"},"hljs-built_in":{color:"#a6e22e"},"hljs-builtin-name":{color:"#a6e22e"},"hljs-selector-attr":{color:"#a6e22e"},"hljs-selector-pseudo":{color:"#a6e22e"},"hljs-addition":{color:"#a6e22e"},"hljs-variable":{color:"#a6e22e"},"hljs-template-tag":{color:"#a6e22e"},"hljs-template-variable":{color:"#a6e22e"},"hljs-comment":{color:"#75715e"},"hljs-quote":{color:"#75715e"},"hljs-deletion":{color:"#75715e"},"hljs-meta":{color:"#75715e"},"hljs-doctag":{fontWeight:"bold"},"hljs-selector-id":{fontWeight:"bold"}},nord:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#2E3440",color:"#D8DEE9"},"hljs-subst":{color:"#D8DEE9"},"hljs-selector-tag":{color:"#81A1C1"},"hljs-selector-id":{color:"#8FBCBB",fontWeight:"bold"},"hljs-selector-class":{color:"#8FBCBB"},"hljs-selector-attr":{color:"#8FBCBB"},"hljs-selector-pseudo":{color:"#88C0D0"},"hljs-addition":{backgroundColor:"rgba(163, 190, 140, 0.5)"},"hljs-deletion":{backgroundColor:"rgba(191, 97, 106, 0.5)"},"hljs-built_in":{color:"#8FBCBB"},"hljs-type":{color:"#8FBCBB"},"hljs-class":{color:"#8FBCBB"},"hljs-function":{color:"#88C0D0"},"hljs-function > .hljs-title":{color:"#88C0D0"},"hljs-keyword":{color:"#81A1C1"},"hljs-literal":{color:"#81A1C1"},"hljs-symbol":{color:"#81A1C1"},"hljs-number":{color:"#B48EAD"},"hljs-regexp":{color:"#EBCB8B"},"hljs-string":{color:"#A3BE8C"},"hljs-title":{color:"#8FBCBB"},"hljs-params":{color:"#D8DEE9"},"hljs-bullet":{color:"#81A1C1"},"hljs-code":{color:"#8FBCBB"},"hljs-emphasis":{fontStyle:"italic"},"hljs-formula":{color:"#8FBCBB"},"hljs-strong":{fontWeight:"bold"},"hljs-link:hover":{textDecoration:"underline"},"hljs-quote":{color:"#4C566A"},"hljs-comment":{color:"#4C566A"},"hljs-doctag":{color:"#8FBCBB"},"hljs-meta":{color:"#5E81AC"},"hljs-meta-keyword":{color:"#5E81AC"},"hljs-meta-string":{color:"#A3BE8C"},"hljs-attr":{color:"#8FBCBB"},"hljs-attribute":{color:"#D8DEE9"},"hljs-builtin-name":{color:"#81A1C1"},"hljs-name":{color:"#81A1C1"},"hljs-section":{color:"#88C0D0"},"hljs-tag":{color:"#81A1C1"},"hljs-variable":{color:"#D8DEE9"},"hljs-template-variable":{color:"#D8DEE9"},"hljs-template-tag":{color:"#5E81AC"},"abnf .hljs-attribute":{color:"#88C0D0"},"abnf .hljs-symbol":{color:"#EBCB8B"},"apache .hljs-attribute":{color:"#88C0D0"},"apache .hljs-section":{color:"#81A1C1"},"arduino .hljs-built_in":{color:"#88C0D0"},"aspectj .hljs-meta":{color:"#D08770"},"aspectj > .hljs-title":{color:"#88C0D0"},"bnf .hljs-attribute":{color:"#8FBCBB"},"clojure .hljs-name":{color:"#88C0D0"},"clojure .hljs-symbol":{color:"#EBCB8B"},"coq .hljs-built_in":{color:"#88C0D0"},"cpp .hljs-meta-string":{color:"#8FBCBB"},"css .hljs-built_in":{color:"#88C0D0"},"css .hljs-keyword":{color:"#D08770"},"diff .hljs-meta":{color:"#8FBCBB"},"ebnf .hljs-attribute":{color:"#8FBCBB"},"glsl .hljs-built_in":{color:"#88C0D0"},"groovy .hljs-meta:not(:first-child)":{color:"#D08770"},"haxe .hljs-meta":{color:"#D08770"},"java .hljs-meta":{color:"#D08770"},"ldif .hljs-attribute":{color:"#8FBCBB"},"lisp .hljs-name":{color:"#88C0D0"},"lua .hljs-built_in":{color:"#88C0D0"},"moonscript .hljs-built_in":{color:"#88C0D0"},"nginx .hljs-attribute":{color:"#88C0D0"},"nginx .hljs-section":{color:"#5E81AC"},"pf .hljs-built_in":{color:"#88C0D0"},"processing .hljs-built_in":{color:"#88C0D0"},"scss .hljs-keyword":{color:"#81A1C1"},"stylus .hljs-keyword":{color:"#81A1C1"},"swift .hljs-meta":{color:"#D08770"},"vim .hljs-built_in":{color:"#88C0D0",fontStyle:"italic"},"yaml .hljs-meta":{color:"#D08770"}},obsidian:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#282b2e",color:"#e0e2e4"},"hljs-keyword":{color:"#93c763",fontWeight:"bold"},"hljs-selector-tag":{color:"#93c763",fontWeight:"bold"},"hljs-literal":{color:"#93c763",fontWeight:"bold"},"hljs-selector-id":{color:"#93c763"},"hljs-number":{color:"#ffcd22"},"hljs-attribute":{color:"#668bb0"},"hljs-code":{color:"white"},"hljs-class .hljs-title":{color:"white"},"hljs-section":{color:"white",fontWeight:"bold"},"hljs-regexp":{color:"#d39745"},"hljs-link":{color:"#d39745"},"hljs-meta":{color:"#557182"},"hljs-tag":{color:"#8cbbad"},"hljs-name":{color:"#8cbbad",fontWeight:"bold"},"hljs-bullet":{color:"#8cbbad"},"hljs-subst":{color:"#8cbbad"},"hljs-emphasis":{color:"#8cbbad"},"hljs-type":{color:"#8cbbad",fontWeight:"bold"},"hljs-built_in":{color:"#8cbbad"},"hljs-selector-attr":{color:"#8cbbad"},"hljs-selector-pseudo":{color:"#8cbbad"},"hljs-addition":{color:"#8cbbad"},"hljs-variable":{color:"#8cbbad"},"hljs-template-tag":{color:"#8cbbad"},"hljs-template-variable":{color:"#8cbbad"},"hljs-string":{color:"#ec7600"},"hljs-symbol":{color:"#ec7600"},"hljs-comment":{color:"#818e96"},"hljs-quote":{color:"#818e96"},"hljs-deletion":{color:"#818e96"},"hljs-selector-class":{color:"#A082BD"},"hljs-doctag":{fontWeight:"bold"},"hljs-title":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"}},"tomorrow-night":{"hljs-comment":{color:"#969896"},"hljs-quote":{color:"#969896"},"hljs-variable":{color:"#cc6666"},"hljs-template-variable":{color:"#cc6666"},"hljs-tag":{color:"#cc6666"},"hljs-name":{color:"#cc6666"},"hljs-selector-id":{color:"#cc6666"},"hljs-selector-class":{color:"#cc6666"},"hljs-regexp":{color:"#cc6666"},"hljs-deletion":{color:"#cc6666"},"hljs-number":{color:"#de935f"},"hljs-built_in":{color:"#de935f"},"hljs-builtin-name":{color:"#de935f"},"hljs-literal":{color:"#de935f"},"hljs-type":{color:"#de935f"},"hljs-params":{color:"#de935f"},"hljs-meta":{color:"#de935f"},"hljs-link":{color:"#de935f"},"hljs-attribute":{color:"#f0c674"},"hljs-string":{color:"#b5bd68"},"hljs-symbol":{color:"#b5bd68"},"hljs-bullet":{color:"#b5bd68"},"hljs-addition":{color:"#b5bd68"},"hljs-title":{color:"#81a2be"},"hljs-section":{color:"#81a2be"},"hljs-keyword":{color:"#b294bb"},"hljs-selector-tag":{color:"#b294bb"},hljs:{display:"block",overflowX:"auto",background:"#1d1f21",color:"#c5c8c6",padding:"0.5em"},"hljs-emphasis":{fontStyle:"italic"},"hljs-strong":{fontWeight:"bold"}}},G=o()(K),Z=e=>i()(G).call(G,e)?K[e]:(console.warn(`Request style '${e}' is not available, returning default instead`),J)},90242:(e,t,r)=>{"use strict";r.d(t,{mz:()=>pe,oG:()=>fe,AF:()=>he,LQ:()=>de,Kn:()=>me,Wl:()=>ge,kJ:()=>ve,HP:()=>ye,Ay:()=>be,Q2:()=>we,_5:()=>Ee,iQ:()=>xe,gp:()=>_e,DR:()=>Se,Zl:()=>Ae,Ik:()=>Ce,xi:()=>Pe,UG:()=>Re,r3:()=>Me,wh:()=>De,GZ:()=>Le,be:()=>Be,Nm:()=>Fe,hW:()=>ze,QG:()=>Ue,oJ:()=>qe,J6:()=>Ve,nX:()=>$e,po:()=>We,XV:()=>He,Pz:()=>Je,D$:()=>Ke,V9:()=>Ge,cz:()=>Ze,Uj:()=>Ye,Xb:()=>Qe,O2:()=>et});var n=r(58309),o=r.n(n),a=r(97606),i=r.n(a),s=r(74386),l=r.n(s),u=r(86),c=r.n(u),p=r(14418),f=r.n(p),h=r(28222),d=r.n(h),m=(r(11189),r(24282)),g=r.n(m),v=r(76986),y=r.n(v),b=r(2578),w=r.n(b),E=r(24278),x=r.n(E),_=(r(39022),r(92039)),S=r.n(_),A=(r(58118),r(35627)),k=r.n(A),C=r(11882),O=r.n(C),j=r(51679),I=r.n(j),N=r(27043),T=r.n(N),P=r(81607),R=r.n(P),M=r(43393),D=r.n(M),L=r(17967),B=r(68929),F=r.n(B),z=r(11700),U=r.n(z),q=r(88306),V=r.n(q),$=r(13311),W=r.n($),H=r(59704),J=r.n(H),K=r(77813),G=r.n(K),Z=r(23560),Y=r.n(Z),Q=r(57050),X=r(27504),ee=r(8269),te=r.n(ee),re=r(19069),ne=r(92282),oe=r.n(ne),ae=r(89072),ie=r.n(ae),se=r(1272),le=r(48764).Buffer;const ue="default",ce=e=>D().Iterable.isIterable(e);function pe(e){return me(e)?ce(e)?e.toJS():e:{}}function fe(e){var t,r;if(ce(e))return e;if(e instanceof X.Z.File)return e;if(!me(e))return e;if(o()(e))return i()(r=D().Seq(e)).call(r,fe).toList();if(Y()(l()(e))){var n;const t=function(e){if(!Y()(l()(e)))return e;const t={},r="_**[]",n={};for(let o of l()(e).call(e))if(t[o[0]]||n[o[0]]&&n[o[0]].containsMultiple){if(!n[o[0]]){n[o[0]]={containsMultiple:!0,length:1},t[`${o[0]}${r}${n[o[0]].length}`]=t[o[0]],delete t[o[0]]}n[o[0]].length+=1,t[`${o[0]}${r}${n[o[0]].length}`]=o[1]}else t[o[0]]=o[1];return t}(e);return i()(n=D().OrderedMap(t)).call(n,fe)}return i()(t=D().OrderedMap(e)).call(t,fe)}function he(e){return o()(e)?e:[e]}function de(e){return"function"==typeof e}function me(e){return!!e&&"object"==typeof e}function ge(e){return"function"==typeof e}function ve(e){return o()(e)}const ye=V();function be(e,t){var r;return g()(r=d()(e)).call(r,((r,n)=>(r[n]=t(e[n],n),r)),{})}function we(e,t){var r;return g()(r=d()(e)).call(r,((r,n)=>{let o=t(e[n],n);return o&&"object"==typeof o&&y()(r,o),r}),{})}function Ee(e){return t=>{let{dispatch:r,getState:n}=t;return t=>r=>"function"==typeof r?r(e()):t(r)}}function xe(e){var t;let r=e.keySeq();return r.contains(ue)?ue:w()(t=f()(r).call(r,(e=>"2"===(e+"")[0]))).call(t).first()}function _e(e,t){if(!D().Iterable.isIterable(e))return D().List();let r=e.getIn(o()(t)?t:[t]);return D().List.isList(r)?r:D().List()}function Se(e){let t,r=[/filename\*=[^']+'\w*'"([^"]+)";?/i,/filename\*=[^']+'\w*'([^;]+);?/i,/filename="([^;]*);?"/i,/filename=([^;]*);?/i];if(S()(r).call(r,(r=>(t=r.exec(e),null!==t))),null!==t&&t.length>1)try{return decodeURIComponent(t[1])}catch(e){console.error(e)}return null}function Ae(e){return t=e.replace(/\.[^./]*$/,""),U()(F()(t));var t}function ke(e,t,r,n,a){if(!t)return[];let s=[],l=t.get("nullable"),u=t.get("required"),p=t.get("maximum"),h=t.get("minimum"),d=t.get("type"),m=t.get("format"),g=t.get("maxLength"),v=t.get("minLength"),y=t.get("uniqueItems"),b=t.get("maxItems"),w=t.get("minItems"),E=t.get("pattern");const x=r||!0===u,_=null!=e;if(l&&null===e||!d||!(x||_&&"array"===d||!(!x&&!_)))return[];let A="string"===d&&e,k="array"===d&&o()(e)&&e.length,C="array"===d&&D().List.isList(e)&&e.count();const O=[A,k,C,"array"===d&&"string"==typeof e&&e,"file"===d&&e instanceof X.Z.File,"boolean"===d&&(e||!1===e),"number"===d&&(e||0===e),"integer"===d&&(e||0===e),"object"===d&&"object"==typeof e&&null!==e,"object"===d&&"string"==typeof e&&e],j=S()(O).call(O,(e=>!!e));if(x&&!j&&!n)return s.push("Required field is not provided"),s;if("object"===d&&(null===a||"application/json"===a)){let r=e;if("string"==typeof e)try{r=JSON.parse(e)}catch(e){return s.push("Parameter string value must be valid JSON"),s}var I;if(t&&t.has("required")&&ge(u.isList)&&u.isList()&&c()(u).call(u,(e=>{void 0===r[e]&&s.push({propKey:e,error:"Required property not found"})})),t&&t.has("properties"))c()(I=t.get("properties")).call(I,((e,t)=>{const o=ke(r[t],e,!1,n,a);s.push(...i()(o).call(o,(e=>({propKey:t,error:e}))))}))}if(E){let t=((e,t)=>{if(!new RegExp(t).test(e))return"Value must follow pattern "+t})(e,E);t&&s.push(t)}if(w&&"array"===d){let t=((e,t)=>{if(!e&&t>=1||e&&e.length{if(e&&e.length>t)return`Array must not contain more then ${t} item${1===t?"":"s"}`})(e,b);t&&s.push({needRemove:!0,error:t})}if(y&&"array"===d){let t=((e,t)=>{if(e&&("true"===t||!0===t)){const t=(0,M.fromJS)(e),r=t.toSet();if(e.length>r.size){let e=(0,M.Set)();if(c()(t).call(t,((r,n)=>{f()(t).call(t,(e=>ge(e.equals)?e.equals(r):e===r)).size>1&&(e=e.add(n))})),0!==e.size)return i()(e).call(e,(e=>({index:e,error:"No duplicates allowed."}))).toArray()}}})(e,y);t&&s.push(...t)}if(g||0===g){let t=((e,t)=>{if(e.length>t)return`Value must be no longer than ${t} character${1!==t?"s":""}`})(e,g);t&&s.push(t)}if(v){let t=((e,t)=>{if(e.length{if(e>t)return`Value must be less than ${t}`})(e,p);t&&s.push(t)}if(h||0===h){let t=((e,t)=>{if(e{if(isNaN(Date.parse(e)))return"Value must be a DateTime"})(e):"uuid"===m?(e=>{if(e=e.toString().toLowerCase(),!/^[{(]?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}[)}]?$/.test(e))return"Value must be a Guid"})(e):(e=>{if(e&&"string"!=typeof e)return"Value must be a string"})(e),!t)return s;s.push(t)}else if("boolean"===d){let t=(e=>{if("true"!==e&&"false"!==e&&!0!==e&&!1!==e)return"Value must be a boolean"})(e);if(!t)return s;s.push(t)}else if("number"===d){let t=(e=>{if(!/^-?\d+(\.?\d+)?$/.test(e))return"Value must be a number"})(e);if(!t)return s;s.push(t)}else if("integer"===d){let t=(e=>{if(!/^-?\d+$/.test(e))return"Value must be an integer"})(e);if(!t)return s;s.push(t)}else if("array"===d){if(!k&&!C)return s;e&&c()(e).call(e,((e,r)=>{const o=ke(e,t.get("items"),!1,n,a);s.push(...i()(o).call(o,(e=>({index:r,error:e}))))}))}else if("file"===d){let t=(e=>{if(e&&!(e instanceof X.Z.File))return"Value must be a file"})(e);if(!t)return s;s.push(t)}return s}const Ce=function(e,t){let{isOAS3:r=!1,bypassRequiredCheck:n=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=e.get("required"),{schema:a,parameterContentMediaType:i}=(0,re.Z)(e,{isOAS3:r});return ke(t,a,o,n,i)},Oe=(e,t,r)=>{if(e&&(!e.xml||!e.xml.name)){if(e.xml=e.xml||{},!e.$$ref)return e.type||e.items||e.properties||e.additionalProperties?'\n\x3c!-- XML example cannot be generated; root element name is undefined --\x3e':null;{let t=e.$$ref.match(/\S*\/(\S+)$/);e.xml.name=t[1]}}return(0,Q.memoizedCreateXMLExample)(e,t,r)},je=[{when:/json/,shouldStringifyTypes:["string"]}],Ie=["object"],Ne=(e,t,r,n)=>{const o=(0,Q.memoizedSampleFromSchema)(e,t,n),a=typeof o,i=g()(je).call(je,((e,t)=>t.when.test(r)?[...e,...t.shouldStringifyTypes]:e),Ie);return J()(i,(e=>e===a))?k()(o,null,2):o},Te=(e,t,r,n)=>{const o=Ne(e,t,r,n);let a;try{a=se.ZP.dump(se.ZP.load(o),{lineWidth:-1},{schema:se.A8}),"\n"===a[a.length-1]&&(a=x()(a).call(a,0,a.length-1))}catch(e){return console.error(e),"error: could not generate yaml example"}return a.replace(/\t/g," ")},Pe=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return e&&ge(e.toJS)&&(e=e.toJS()),n&&ge(n.toJS)&&(n=n.toJS()),/xml/.test(t)?Oe(e,r,n):/(yaml|yml)/.test(t)?Te(e,r,t,n):Ne(e,r,t,n)},Re=()=>{let e={},t=X.Z.location.search;if(!t)return{};if(""!=t){let r=t.substr(1).split("&");for(let t in r)Object.prototype.hasOwnProperty.call(r,t)&&(t=r[t].split("="),e[decodeURIComponent(t[0])]=t[1]&&decodeURIComponent(t[1])||"")}return e},Me=e=>{let t;return t=e instanceof le?e:le.from(e.toString(),"utf-8"),t.toString("base64")},De={operationsSorter:{alpha:(e,t)=>e.get("path").localeCompare(t.get("path")),method:(e,t)=>e.get("method").localeCompare(t.get("method"))},tagsSorter:{alpha:(e,t)=>e.localeCompare(t)}},Le=e=>{let t=[];for(let r in e){let n=e[r];void 0!==n&&""!==n&&t.push([r,"=",encodeURIComponent(n).replace(/%20/g,"+")].join(""))}return t.join("&")},Be=(e,t,r)=>!!W()(r,(r=>G()(e[r],t[r])));function Fe(e){return"string"!=typeof e||""===e?"":(0,L.N)(e)}function ze(e){return!(!e||O()(e).call(e,"localhost")>=0||O()(e).call(e,"127.0.0.1")>=0||"none"===e)}function Ue(e){if(!D().OrderedMap.isOrderedMap(e))return null;if(!e.size)return null;const t=I()(e).call(e,((e,t)=>T()(t).call(t,"2")&&d()(e.get("content")||{}).length>0)),r=e.get("default")||D().OrderedMap(),n=(r.get("content")||D().OrderedMap()).keySeq().toJS().length?r:null;return t||n}const qe=e=>"string"==typeof e||e instanceof String?R()(e).call(e).replace(/\s/g,"%20"):"",Ve=e=>te()(qe(e).replace(/%20/g,"_")),$e=e=>f()(e).call(e,((e,t)=>/^x-/.test(t))),We=e=>f()(e).call(e,((e,t)=>/^pattern|maxLength|minLength|maximum|minimum/.test(t)));function He(e,t){var r;let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:()=>!0;if("object"!=typeof e||o()(e)||null===e||!t)return e;const a=y()({},e);return c()(r=d()(a)).call(r,(e=>{e===t&&n(a[e],e)?delete a[e]:a[e]=He(a[e],t,n)})),a}function Je(e){if("string"==typeof e)return e;if(e&&e.toJS&&(e=e.toJS()),"object"==typeof e&&null!==e)try{return k()(e,null,2)}catch(t){return String(e)}return null==e?"":e.toString()}function Ke(e){return"number"==typeof e?e.toString():e}function Ge(e){let{returnAll:t=!1,allowHashes:r=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!D().Map.isMap(e))throw new Error("paramToIdentifier: received a non-Im.Map parameter as input");const n=e.get("name"),o=e.get("in");let a=[];return e&&e.hashCode&&o&&n&&r&&a.push(`${o}.${n}.hash-${e.hashCode()}`),o&&n&&a.push(`${o}.${n}`),a.push(n),t?a:a[0]||""}function Ze(e,t){var r;const n=Ge(e,{returnAll:!0});return f()(r=i()(n).call(n,(e=>t[e]))).call(r,(e=>void 0!==e))[0]}function Ye(){return Xe(oe()(32).toString("base64"))}function Qe(e){return Xe(ie()("sha256").update(e).digest("base64"))}function Xe(e){return e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}const et=e=>!e||!(!ce(e)||!e.isEmpty())},2518:(e,t,r)=>{"use strict";function n(e){return function(e){try{return!!JSON.parse(e)}catch(e){return null}}(e)?"json":null}r.d(t,{O:()=>n})},27504:(e,t,r)=>{"use strict";r.d(t,{Z:()=>n});const n=function(){var e={location:{},history:{},open:()=>{},close:()=>{},File:function(){}};if("undefined"==typeof window)return e;try{e=window;for(var t of["File","Blob","FormData"])t in window&&(e[t]=window[t])}catch(e){console.error(e)}return e}()},19069:(e,t,r)=>{"use strict";r.d(t,{Z:()=>c});var n=r(14418),o=r.n(n),a=r(58118),i=r.n(a),s=r(43393),l=r.n(s);const u=l().Set.of("type","format","items","default","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","maxItems","minItems","uniqueItems","enum","multipleOf");function c(e){let{isOAS3:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!l().Map.isMap(e))return{schema:l().Map(),parameterContentMediaType:null};if(!t)return"body"===e.get("in")?{schema:e.get("schema",l().Map()),parameterContentMediaType:null}:{schema:o()(e).call(e,((e,t)=>i()(u).call(u,t))),parameterContentMediaType:null};if(e.get("content")){const t=e.get("content",l().Map({})).keySeq().first();return{schema:e.getIn(["content",t,"schema"],l().Map()),parameterContentMediaType:t}}return{schema:e.get("schema",l().Map()),parameterContentMediaType:null}}},60314:(e,t,r)=>{"use strict";r.d(t,{Z:()=>x});var n=r(58309),o=r.n(n),a=r(2250),i=r.n(a),s=r(25110),l=r.n(s),u=r(8712),c=r.n(u),p=r(51679),f=r.n(p),h=r(12373),d=r.n(h),m=r(18492),g=r.n(m),v=r(88306),y=r.n(v);const b=e=>t=>o()(e)&&o()(t)&&e.length===t.length&&i()(e).call(e,((e,r)=>e===t[r])),w=function(){for(var e=arguments.length,t=new Array(e),r=0;r1&&void 0!==arguments[1]?arguments[1]:w;const{Cache:r}=y();y().Cache=E;const n=y()(e,t);return y().Cache=r,n}},79742:(e,t)=>{"use strict";t.byteLength=function(e){var t=l(e),r=t[0],n=t[1];return 3*(r+n)/4-n},t.toByteArray=function(e){var t,r,a=l(e),i=a[0],s=a[1],u=new o(function(e,t,r){return 3*(t+r)/4-r}(0,i,s)),c=0,p=s>0?i-4:i;for(r=0;r>16&255,u[c++]=t>>8&255,u[c++]=255&t;2===s&&(t=n[e.charCodeAt(r)]<<2|n[e.charCodeAt(r+1)]>>4,u[c++]=255&t);1===s&&(t=n[e.charCodeAt(r)]<<10|n[e.charCodeAt(r+1)]<<4|n[e.charCodeAt(r+2)]>>2,u[c++]=t>>8&255,u[c++]=255&t);return u},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,a=[],i=16383,s=0,l=n-o;sl?l:s+i));1===o?(t=e[n-1],a.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],a.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return a.join("")};for(var r=[],n=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0,s=a.length;i0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function u(e,t,n){for(var o,a,i=[],s=t;s>18&63]+r[a>>12&63]+r[a>>6&63]+r[63&a]);return i.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},48764:(e,t,r)=>{"use strict";const n=r(79742),o=r(80645),a="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=l,t.SlowBuffer=function(e){+e!=e&&(e=0);return l.alloc(+e)},t.INSPECT_MAX_BYTES=50;const i=2147483647;function s(e){if(e>i)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,l.prototype),t}function l(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return p(e)}return u(e,t,r)}function u(e,t,r){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!l.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const r=0|m(e,t);let n=s(r);const o=n.write(e,t);o!==r&&(n=n.slice(0,o));return n}(e,t);if(ArrayBuffer.isView(e))return function(e){if(G(e,Uint8Array)){const t=new Uint8Array(e);return h(t.buffer,t.byteOffset,t.byteLength)}return f(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(G(e,ArrayBuffer)||e&&G(e.buffer,ArrayBuffer))return h(e,t,r);if("undefined"!=typeof SharedArrayBuffer&&(G(e,SharedArrayBuffer)||e&&G(e.buffer,SharedArrayBuffer)))return h(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return l.from(n,t,r);const o=function(e){if(l.isBuffer(e)){const t=0|d(e.length),r=s(t);return 0===r.length||e.copy(r,0,0,t),r}if(void 0!==e.length)return"number"!=typeof e.length||Z(e.length)?s(0):f(e);if("Buffer"===e.type&&Array.isArray(e.data))return f(e.data)}(e);if(o)return o;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return l.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function c(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function p(e){return c(e),s(e<0?0:0|d(e))}function f(e){const t=e.length<0?0:0|d(e.length),r=s(t);for(let n=0;n=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|e}function m(e,t){if(l.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||G(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let o=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return H(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return J(e).length;default:if(o)return n?-1:H(e).length;t=(""+t).toLowerCase(),o=!0}}function g(e,t,r){let n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return I(this,t,r);case"utf8":case"utf-8":return k(this,t,r);case"ascii":return O(this,t,r);case"latin1":case"binary":return j(this,t,r);case"base64":return A(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return N(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function v(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function y(e,t,r,n,o){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),Z(r=+r)&&(r=o?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(o)return-1;r=e.length-1}else if(r<0){if(!o)return-1;r=0}if("string"==typeof t&&(t=l.from(t,n)),l.isBuffer(t))return 0===t.length?-1:b(e,t,r,n,o);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):b(e,[t],r,n,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,r,n,o){let a,i=1,s=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;i=2,s/=2,l/=2,r/=2}function u(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(o){let n=-1;for(a=r;as&&(r=s-l),a=r;a>=0;a--){let r=!0;for(let n=0;no&&(n=o):n=o;const a=t.length;let i;for(n>a/2&&(n=a/2),i=0;i>8,o=r%256,a.push(o),a.push(n);return a}(t,e.length-r),e,r,n)}function A(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function k(e,t,r){r=Math.min(e.length,r);const n=[];let o=t;for(;o239?4:t>223?3:t>191?2:1;if(o+i<=r){let r,n,s,l;switch(i){case 1:t<128&&(a=t);break;case 2:r=e[o+1],128==(192&r)&&(l=(31&t)<<6|63&r,l>127&&(a=l));break;case 3:r=e[o+1],n=e[o+2],128==(192&r)&&128==(192&n)&&(l=(15&t)<<12|(63&r)<<6|63&n,l>2047&&(l<55296||l>57343)&&(a=l));break;case 4:r=e[o+1],n=e[o+2],s=e[o+3],128==(192&r)&&128==(192&n)&&128==(192&s)&&(l=(15&t)<<18|(63&r)<<12|(63&n)<<6|63&s,l>65535&&l<1114112&&(a=l))}}null===a?(a=65533,i=1):a>65535&&(a-=65536,n.push(a>>>10&1023|55296),a=56320|1023&a),n.push(a),o+=i}return function(e){const t=e.length;if(t<=C)return String.fromCharCode.apply(String,e);let r="",n=0;for(;nn.length?(l.isBuffer(t)||(t=l.from(t)),t.copy(n,o)):Uint8Array.prototype.set.call(n,t,o);else{if(!l.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(n,o)}o+=t.length}return n},l.byteLength=m,l.prototype._isBuffer=!0,l.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tr&&(e+=" ... "),""},a&&(l.prototype[a]=l.prototype.inspect),l.prototype.compare=function(e,t,r,n,o){if(G(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),t<0||r>e.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&t>=r)return 0;if(n>=o)return-1;if(t>=r)return 1;if(this===e)return 0;let a=(o>>>=0)-(n>>>=0),i=(r>>>=0)-(t>>>=0);const s=Math.min(a,i),u=this.slice(n,o),c=e.slice(t,r);for(let e=0;e>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const o=this.length-t;if((void 0===r||r>o)&&(r=o),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let a=!1;for(;;)switch(n){case"hex":return w(this,e,t,r);case"utf8":case"utf-8":return E(this,e,t,r);case"ascii":case"latin1":case"binary":return x(this,e,t,r);case"base64":return _(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,e,t,r);default:if(a)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),a=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const C=4096;function O(e,t,r){let n="";r=Math.min(e.length,r);for(let o=t;on)&&(r=n);let o="";for(let n=t;nr)throw new RangeError("Trying to access beyond buffer length")}function P(e,t,r,n,o,a){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function R(e,t,r,n,o){q(t,n,o,e,r,7);let a=Number(t&BigInt(4294967295));e[r++]=a,a>>=8,e[r++]=a,a>>=8,e[r++]=a,a>>=8,e[r++]=a;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=i,i>>=8,e[r++]=i,i>>=8,e[r++]=i,i>>=8,e[r++]=i,r}function M(e,t,r,n,o){q(t,n,o,e,r,7);let a=Number(t&BigInt(4294967295));e[r+7]=a,a>>=8,e[r+6]=a,a>>=8,e[r+5]=a,a>>=8,e[r+4]=a;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=i,i>>=8,e[r+2]=i,i>>=8,e[r+1]=i,i>>=8,e[r]=i,r+8}function D(e,t,r,n,o,a){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function L(e,t,r,n,a){return t=+t,r>>>=0,a||D(e,0,r,4),o.write(e,t,r,n,23,4),r+4}function B(e,t,r,n,a){return t=+t,r>>>=0,a||D(e,0,r,8),o.write(e,t,r,n,52,8),r+8}l.prototype.slice=function(e,t){const r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||T(e,t,this.length);let n=this[e],o=1,a=0;for(;++a>>=0,t>>>=0,r||T(e,t,this.length);let n=this[e+--t],o=1;for(;t>0&&(o*=256);)n+=this[e+--t]*o;return n},l.prototype.readUint8=l.prototype.readUInt8=function(e,t){return e>>>=0,t||T(e,1,this.length),this[e]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readBigUInt64LE=Q((function(e){V(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||$(e,this.length-8);const n=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,o=this[++e]+256*this[++e]+65536*this[++e]+r*2**24;return BigInt(n)+(BigInt(o)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||$(e,this.length-8);const n=t*2**24+65536*this[++e]+256*this[++e]+this[++e],o=this[++e]*2**24+65536*this[++e]+256*this[++e]+r;return(BigInt(n)<>>=0,t>>>=0,r||T(e,t,this.length);let n=this[e],o=1,a=0;for(;++a=o&&(n-=Math.pow(2,8*t)),n},l.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||T(e,t,this.length);let n=t,o=1,a=this[e+--n];for(;n>0&&(o*=256);)a+=this[e+--n]*o;return o*=128,a>=o&&(a-=Math.pow(2,8*t)),a},l.prototype.readInt8=function(e,t){return e>>>=0,t||T(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){e>>>=0,t||T(e,2,this.length);const r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt16BE=function(e,t){e>>>=0,t||T(e,2,this.length);const r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readBigInt64LE=Q((function(e){V(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||$(e,this.length-8);const n=this[e+4]+256*this[e+5]+65536*this[e+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||$(e,this.length-8);const n=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(n)<>>=0,t||T(e,4,this.length),o.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return e>>>=0,t||T(e,4,this.length),o.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return e>>>=0,t||T(e,8,this.length),o.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return e>>>=0,t||T(e,8,this.length),o.read(this,e,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(e,t,r,n){if(e=+e,t>>>=0,r>>>=0,!n){P(this,e,t,r,Math.pow(2,8*r)-1,0)}let o=1,a=0;for(this[t]=255&e;++a>>=0,r>>>=0,!n){P(this,e,t,r,Math.pow(2,8*r)-1,0)}let o=r-1,a=1;for(this[t+o]=255&e;--o>=0&&(a*=256);)this[t+o]=e/a&255;return t+r},l.prototype.writeUint8=l.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,1,255,0),this[t]=255&e,t+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigUInt64LE=Q((function(e,t=0){return R(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeBigUInt64BE=Q((function(e,t=0){return M(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);P(this,e,t,r,n-1,-n)}let o=0,a=1,i=0;for(this[t]=255&e;++o>0)-i&255;return t+r},l.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);P(this,e,t,r,n-1,-n)}let o=r-1,a=1,i=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===i&&0!==this[t+o+1]&&(i=1),this[t+o]=(e/a>>0)-i&255;return t+r},l.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},l.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigInt64LE=Q((function(e,t=0){return R(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeBigInt64BE=Q((function(e,t=0){return M(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeFloatLE=function(e,t,r){return L(this,e,t,!0,r)},l.prototype.writeFloatBE=function(e,t,r){return L(this,e,t,!1,r)},l.prototype.writeDoubleLE=function(e,t,r){return B(this,e,t,!0,r)},l.prototype.writeDoubleBE=function(e,t,r){return B(this,e,t,!1,r)},l.prototype.copy=function(e,t,r,n){if(!l.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function q(e,t,r,n,o,a){if(e>r||e3?0===t||t===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(a+1)}${n}`:`>= -(2${n} ** ${8*(a+1)-1}${n}) and < 2 ** ${8*(a+1)-1}${n}`:`>= ${t}${n} and <= ${r}${n}`,new F.ERR_OUT_OF_RANGE("value",o,e)}!function(e,t,r){V(t,"offset"),void 0!==e[t]&&void 0!==e[t+r]||$(t,e.length-(r+1))}(n,o,a)}function V(e,t){if("number"!=typeof e)throw new F.ERR_INVALID_ARG_TYPE(t,"number",e)}function $(e,t,r){if(Math.floor(e)!==e)throw V(e,r),new F.ERR_OUT_OF_RANGE(r||"offset","an integer",e);if(t<0)throw new F.ERR_BUFFER_OUT_OF_BOUNDS;throw new F.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${t}`,e)}z("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),z("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),z("ERR_OUT_OF_RANGE",(function(e,t,r){let n=`The value of "${e}" is out of range.`,o=r;return Number.isInteger(r)&&Math.abs(r)>2**32?o=U(String(r)):"bigint"==typeof r&&(o=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(o=U(o)),o+="n"),n+=` It must be ${t}. Received ${o}`,n}),RangeError);const W=/[^+/0-9A-Za-z-_]/g;function H(e,t){let r;t=t||1/0;const n=e.length;let o=null;const a=[];for(let i=0;i55295&&r<57344){if(!o){if(r>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(i+1===n){(t-=3)>-1&&a.push(239,191,189);continue}o=r;continue}if(r<56320){(t-=3)>-1&&a.push(239,191,189),o=r;continue}r=65536+(o-55296<<10|r-56320)}else o&&(t-=3)>-1&&a.push(239,191,189);if(o=null,r<128){if((t-=1)<0)break;a.push(r)}else if(r<2048){if((t-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function J(e){return n.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(W,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function K(e,t,r,n){let o;for(o=0;o=t.length||o>=e.length);++o)t[o+r]=e[o];return o}function G(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function Z(e){return e!=e}const Y=function(){const e="0123456789abcdef",t=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let o=0;o<16;++o)t[n+o]=e[r]+e[o]}return t}();function Q(e){return"undefined"==typeof BigInt?X:e}function X(){throw new Error("BigInt not supported")}},21924:(e,t,r)=>{"use strict";var n=r(40210),o=r(55559),a=o(n("String.prototype.indexOf"));e.exports=function(e,t){var r=n(e,!!t);return"function"==typeof r&&a(e,".prototype.")>-1?o(r):r}},55559:(e,t,r)=>{"use strict";var n=r(58612),o=r(40210),a=o("%Function.prototype.apply%"),i=o("%Function.prototype.call%"),s=o("%Reflect.apply%",!0)||n.call(i,a),l=o("%Object.getOwnPropertyDescriptor%",!0),u=o("%Object.defineProperty%",!0),c=o("%Math.max%");if(u)try{u({},"a",{value:1})}catch(e){u=null}e.exports=function(e){var t=s(n,i,arguments);if(l&&u){var r=l(t,"length");r.configurable&&u(t,"length",{value:1+c(0,e.length-(arguments.length-1))})}return t};var p=function(){return s(n,a,arguments)};u?u(e.exports,"apply",{value:p}):e.exports.apply=p},94184:(e,t)=>{var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e=[],t=0;t{"use strict";var n=r(11742),o={"text/plain":"Text","text/html":"Url",default:"Text"};e.exports=function(e,t){var r,a,i,s,l,u,c=!1;t||(t={}),r=t.debug||!1;try{if(i=n(),s=document.createRange(),l=document.getSelection(),(u=document.createElement("span")).textContent=e,u.style.all="unset",u.style.position="fixed",u.style.top=0,u.style.clip="rect(0, 0, 0, 0)",u.style.whiteSpace="pre",u.style.webkitUserSelect="text",u.style.MozUserSelect="text",u.style.msUserSelect="text",u.style.userSelect="text",u.addEventListener("copy",(function(n){if(n.stopPropagation(),t.format)if(n.preventDefault(),void 0===n.clipboardData){r&&console.warn("unable to use e.clipboardData"),r&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var a=o[t.format]||o.default;window.clipboardData.setData(a,e)}else n.clipboardData.clearData(),n.clipboardData.setData(t.format,e);t.onCopy&&(n.preventDefault(),t.onCopy(n.clipboardData))})),document.body.appendChild(u),s.selectNodeContents(u),l.addRange(s),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");c=!0}catch(n){r&&console.error("unable to copy using execCommand: ",n),r&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",e),t.onCopy&&t.onCopy(window.clipboardData),c=!0}catch(n){r&&console.error("unable to copy using clipboardData: ",n),r&&console.error("falling back to prompt"),a=function(e){var t=(/mac os x/i.test(navigator.userAgent)?"⌘":"Ctrl")+"+C";return e.replace(/#{\s*key\s*}/g,t)}("message"in t?t.message:"Copy to clipboard: #{key}, Enter"),window.prompt(a,e)}}finally{l&&("function"==typeof l.removeRange?l.removeRange(s):l.removeAllRanges()),u&&document.body.removeChild(u),i()}return c}},95299:(e,t,r)=>{var n=r(24848);e.exports=n},83450:(e,t,r)=>{var n=r(83363);e.exports=n},66820:(e,t,r)=>{var n=r(56243);e.exports=n},5023:(e,t,r)=>{var n=r(72369);e.exports=n},90093:(e,t,r)=>{var n=r(28196);e.exports=n},3688:(e,t,r)=>{var n=r(11955);e.exports=n},83838:(e,t,r)=>{var n=r(46279);e.exports=n},15684:(e,t,r)=>{var n=r(19373);e.exports=n},99826:(e,t,r)=>{var n=r(28427);e.exports=n},84234:(e,t,r)=>{var n=r(82073);e.exports=n},65362:(e,t,r)=>{var n=r(63383);e.exports=n},32271:(e,t,r)=>{var n=r(14471);e.exports=n},91254:(e,t,r)=>{var n=r(57396);e.exports=n},43536:(e,t,r)=>{var n=r(41910);e.exports=n},37331:(e,t,r)=>{var n=r(79427);e.exports=n},68522:(e,t,r)=>{var n=r(62857);e.exports=n},73151:(e,t,r)=>{var n=r(9534);e.exports=n},99565:(e,t,r)=>{var n=r(96507);e.exports=n},45012:(e,t,r)=>{var n=r(23059);e.exports=n},78690:(e,t,r)=>{var n=r(16670);e.exports=n},25626:(e,t,r)=>{var n=r(27460);e.exports=n},80281:(e,t,r)=>{var n=r(92547);e.exports=n},40031:(e,t,r)=>{var n=r(46509);e.exports=n},54493:(e,t,r)=>{r(77971),r(53242);var n=r(54058);e.exports=n.Array.from},24034:(e,t,r)=>{r(92737);var n=r(54058);e.exports=n.Array.isArray},15367:(e,t,r)=>{r(85906);var n=r(35703);e.exports=n("Array").concat},12710:(e,t,r)=>{r(66274),r(55967);var n=r(35703);e.exports=n("Array").entries},51459:(e,t,r)=>{r(48851);var n=r(35703);e.exports=n("Array").every},6172:(e,t,r)=>{r(80290);var n=r(35703);e.exports=n("Array").fill},62383:(e,t,r)=>{r(21501);var n=r(35703);e.exports=n("Array").filter},60009:(e,t,r)=>{r(44929);var n=r(35703);e.exports=n("Array").findIndex},17671:(e,t,r)=>{r(80833);var n=r(35703);e.exports=n("Array").find},99324:(e,t,r)=>{r(2437);var n=r(35703);e.exports=n("Array").forEach},80991:(e,t,r)=>{r(97690);var n=r(35703);e.exports=n("Array").includes},8700:(e,t,r)=>{r(99076);var n=r(35703);e.exports=n("Array").indexOf},95909:(e,t,r)=>{r(66274),r(55967);var n=r(35703);e.exports=n("Array").keys},6442:(e,t,r)=>{r(75915);var n=r(35703);e.exports=n("Array").lastIndexOf},23866:(e,t,r)=>{r(68787);var n=r(35703);e.exports=n("Array").map},52999:(e,t,r)=>{r(81876);var n=r(35703);e.exports=n("Array").reduce},91876:(e,t,r)=>{r(11490);var n=r(35703);e.exports=n("Array").reverse},24900:(e,t,r)=>{r(60186);var n=r(35703);e.exports=n("Array").slice},3824:(e,t,r)=>{r(36026);var n=r(35703);e.exports=n("Array").some},2948:(e,t,r)=>{r(4115);var n=r(35703);e.exports=n("Array").sort},78209:(e,t,r)=>{r(98611);var n=r(35703);e.exports=n("Array").splice},14423:(e,t,r)=>{r(66274),r(55967);var n=r(35703);e.exports=n("Array").values},81103:(e,t,r)=>{r(95160);var n=r(54058);e.exports=n.Date.now},27700:(e,t,r)=>{r(73381);var n=r(35703);e.exports=n("Function").bind},13830:(e,t,r)=>{r(66274),r(77971);var n=r(22902);e.exports=n},91031:(e,t,r)=>{r(52595),e.exports=r(21899)},16246:(e,t,r)=>{var n=r(7046),o=r(27700),a=Function.prototype;e.exports=function(e){var t=e.bind;return e===a||n(a,e)&&t===a.bind?o:t}},56043:(e,t,r)=>{var n=r(7046),o=r(15367),a=Array.prototype;e.exports=function(e){var t=e.concat;return e===a||n(a,e)&&t===a.concat?o:t}},13160:(e,t,r)=>{var n=r(7046),o=r(51459),a=Array.prototype;e.exports=function(e){var t=e.every;return e===a||n(a,e)&&t===a.every?o:t}},80446:(e,t,r)=>{var n=r(7046),o=r(6172),a=Array.prototype;e.exports=function(e){var t=e.fill;return e===a||n(a,e)&&t===a.fill?o:t}},2480:(e,t,r)=>{var n=r(7046),o=r(62383),a=Array.prototype;e.exports=function(e){var t=e.filter;return e===a||n(a,e)&&t===a.filter?o:t}},7147:(e,t,r)=>{var n=r(7046),o=r(60009),a=Array.prototype;e.exports=function(e){var t=e.findIndex;return e===a||n(a,e)&&t===a.findIndex?o:t}},32236:(e,t,r)=>{var n=r(7046),o=r(17671),a=Array.prototype;e.exports=function(e){var t=e.find;return e===a||n(a,e)&&t===a.find?o:t}},58557:(e,t,r)=>{var n=r(7046),o=r(80991),a=r(21631),i=Array.prototype,s=String.prototype;e.exports=function(e){var t=e.includes;return e===i||n(i,e)&&t===i.includes?o:"string"==typeof e||e===s||n(s,e)&&t===s.includes?a:t}},34570:(e,t,r)=>{var n=r(7046),o=r(8700),a=Array.prototype;e.exports=function(e){var t=e.indexOf;return e===a||n(a,e)&&t===a.indexOf?o:t}},57564:(e,t,r)=>{var n=r(7046),o=r(6442),a=Array.prototype;e.exports=function(e){var t=e.lastIndexOf;return e===a||n(a,e)&&t===a.lastIndexOf?o:t}},88287:(e,t,r)=>{var n=r(7046),o=r(23866),a=Array.prototype;e.exports=function(e){var t=e.map;return e===a||n(a,e)&&t===a.map?o:t}},68025:(e,t,r)=>{var n=r(7046),o=r(52999),a=Array.prototype;e.exports=function(e){var t=e.reduce;return e===a||n(a,e)&&t===a.reduce?o:t}},59257:(e,t,r)=>{var n=r(7046),o=r(80454),a=String.prototype;e.exports=function(e){var t=e.repeat;return"string"==typeof e||e===a||n(a,e)&&t===a.repeat?o:t}},91060:(e,t,r)=>{var n=r(7046),o=r(91876),a=Array.prototype;e.exports=function(e){var t=e.reverse;return e===a||n(a,e)&&t===a.reverse?o:t}},69601:(e,t,r)=>{var n=r(7046),o=r(24900),a=Array.prototype;e.exports=function(e){var t=e.slice;return e===a||n(a,e)&&t===a.slice?o:t}},28299:(e,t,r)=>{var n=r(7046),o=r(3824),a=Array.prototype;e.exports=function(e){var t=e.some;return e===a||n(a,e)&&t===a.some?o:t}},69355:(e,t,r)=>{var n=r(7046),o=r(2948),a=Array.prototype;e.exports=function(e){var t=e.sort;return e===a||n(a,e)&&t===a.sort?o:t}},18339:(e,t,r)=>{var n=r(7046),o=r(78209),a=Array.prototype;e.exports=function(e){var t=e.splice;return e===a||n(a,e)&&t===a.splice?o:t}},71611:(e,t,r)=>{var n=r(7046),o=r(3269),a=String.prototype;e.exports=function(e){var t=e.startsWith;return"string"==typeof e||e===a||n(a,e)&&t===a.startsWith?o:t}},62774:(e,t,r)=>{var n=r(7046),o=r(13348),a=String.prototype;e.exports=function(e){var t=e.trim;return"string"==typeof e||e===a||n(a,e)&&t===a.trim?o:t}},84426:(e,t,r)=>{r(32619);var n=r(54058),o=r(79730);n.JSON||(n.JSON={stringify:JSON.stringify}),e.exports=function(e,t,r){return o(n.JSON.stringify,null,arguments)}},91018:(e,t,r)=>{r(66274),r(37501),r(55967),r(77971);var n=r(54058);e.exports=n.Map},45999:(e,t,r)=>{r(49221);var n=r(54058);e.exports=n.Object.assign},35254:(e,t,r)=>{r(53882);var n=r(54058).Object;e.exports=function(e,t){return n.create(e,t)}},7702:(e,t,r)=>{r(74979);var n=r(54058).Object,o=e.exports=function(e,t){return n.defineProperties(e,t)};n.defineProperties.sham&&(o.sham=!0)},48171:(e,t,r)=>{r(86450);var n=r(54058).Object,o=e.exports=function(e,t,r){return n.defineProperty(e,t,r)};n.defineProperty.sham&&(o.sham=!0)},73081:(e,t,r)=>{r(94366);var n=r(54058);e.exports=n.Object.entries},286:(e,t,r)=>{r(46924);var n=r(54058).Object,o=e.exports=function(e,t){return n.getOwnPropertyDescriptor(e,t)};n.getOwnPropertyDescriptor.sham&&(o.sham=!0)},92766:(e,t,r)=>{r(88482);var n=r(54058);e.exports=n.Object.getOwnPropertyDescriptors},30498:(e,t,r)=>{r(35824);var n=r(54058);e.exports=n.Object.getOwnPropertySymbols},13966:(e,t,r)=>{r(17405);var n=r(54058);e.exports=n.Object.getPrototypeOf},48494:(e,t,r)=>{r(21724);var n=r(54058);e.exports=n.Object.keys},3065:(e,t,r)=>{r(90108);var n=r(54058);e.exports=n.Object.setPrototypeOf},98430:(e,t,r)=>{r(26614);var n=r(54058);e.exports=n.Object.values},52956:(e,t,r)=>{r(47627),r(66274),r(55967),r(98881),r(4560),r(91302),r(44349),r(77971);var n=r(54058);e.exports=n.Promise},21631:(e,t,r)=>{r(11035);var n=r(35703);e.exports=n("String").includes},80454:(e,t,r)=>{r(60986);var n=r(35703);e.exports=n("String").repeat},3269:(e,t,r)=>{r(94761);var n=r(35703);e.exports=n("String").startsWith},13348:(e,t,r)=>{r(57398);var n=r(35703);e.exports=n("String").trim},57473:(e,t,r)=>{r(85906),r(55967),r(35824),r(8555),r(52615),r(21732),r(35903),r(1825),r(28394),r(45915),r(61766),r(62737),r(89911),r(74315),r(63131),r(64714),r(70659),r(69120),r(79413),r(1502);var n=r(54058);e.exports=n.Symbol},24227:(e,t,r)=>{r(66274),r(55967),r(77971),r(1825);var n=r(11477);e.exports=n.f("iterator")},32304:(e,t,r)=>{r(66274),r(55967),r(54334);var n=r(54058);e.exports=n.WeakMap},27385:(e,t,r)=>{var n=r(95299);e.exports=n},81522:(e,t,r)=>{var n=r(83450);e.exports=n},32209:(e,t,r)=>{var n=r(66820);e.exports=n},30888:(e,t,r)=>{r(9668);var n=r(5023);e.exports=n},14122:(e,t,r)=>{var n=r(90093);e.exports=n},44442:(e,t,r)=>{var n=r(3688);e.exports=n},57152:(e,t,r)=>{var n=r(83838);e.exports=n},69447:(e,t,r)=>{var n=r(15684);e.exports=n},17579:(e,t,r)=>{var n=r(99826);e.exports=n},81493:(e,t,r)=>{var n=r(84234);e.exports=n},60269:(e,t,r)=>{var n=r(65362);e.exports=n},76094:(e,t,r)=>{var n=r(32271);e.exports=n},70573:(e,t,r)=>{var n=r(91254);e.exports=n},73685:(e,t,r)=>{var n=r(43536);e.exports=n},27533:(e,t,r)=>{var n=r(37331);e.exports=n},39057:(e,t,r)=>{var n=r(68522);e.exports=n},84710:(e,t,r)=>{var n=r(73151);e.exports=n},74303:(e,t,r)=>{var n=r(99565);e.exports=n},93799:(e,t,r)=>{var n=r(45012);e.exports=n},55122:(e,t,r)=>{var n=r(78690);e.exports=n},29531:(e,t,r)=>{var n=r(25626);r(89731),r(55708),r(30014),r(88731),e.exports=n},86600:(e,t,r)=>{var n=r(80281);r(28783),r(43975),r(65799),r(45414),r(46774),r(80620),r(36172),e.exports=n},9759:(e,t,r)=>{var n=r(40031);e.exports=n},24883:(e,t,r)=>{var n=r(21899),o=r(57475),a=r(69826),i=n.TypeError;e.exports=function(e){if(o(e))return e;throw i(a(e)+" is not a function")}},174:(e,t,r)=>{var n=r(21899),o=r(24284),a=r(69826),i=n.TypeError;e.exports=function(e){if(o(e))return e;throw i(a(e)+" is not a constructor")}},11851:(e,t,r)=>{var n=r(21899),o=r(57475),a=n.String,i=n.TypeError;e.exports=function(e){if("object"==typeof e||o(e))return e;throw i("Can't set "+a(e)+" as a prototype")}},18479:e=>{e.exports=function(){}},5743:(e,t,r)=>{var n=r(21899),o=r(7046),a=n.TypeError;e.exports=function(e,t){if(o(t,e))return e;throw a("Incorrect invocation")}},96059:(e,t,r)=>{var n=r(21899),o=r(10941),a=n.String,i=n.TypeError;e.exports=function(e){if(o(e))return e;throw i(a(e)+" is not an object")}},97135:(e,t,r)=>{var n=r(95981);e.exports=n((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},91860:(e,t,r)=>{"use strict";var n=r(89678),o=r(59413),a=r(10623);e.exports=function(e){for(var t=n(this),r=a(t),i=arguments.length,s=o(i>1?arguments[1]:void 0,r),l=i>2?arguments[2]:void 0,u=void 0===l?r:o(l,r);u>s;)t[s++]=e;return t}},56837:(e,t,r)=>{"use strict";var n=r(3610).forEach,o=r(34194)("forEach");e.exports=o?[].forEach:function(e){return n(this,e,arguments.length>1?arguments[1]:void 0)}},11354:(e,t,r)=>{"use strict";var n=r(21899),o=r(86843),a=r(78834),i=r(89678),s=r(75196),l=r(6782),u=r(24284),c=r(10623),p=r(55449),f=r(53476),h=r(22902),d=n.Array;e.exports=function(e){var t=i(e),r=u(this),n=arguments.length,m=n>1?arguments[1]:void 0,g=void 0!==m;g&&(m=o(m,n>2?arguments[2]:void 0));var v,y,b,w,E,x,_=h(t),S=0;if(!_||this==d&&l(_))for(v=c(t),y=r?new this(v):d(v);v>S;S++)x=g?m(t[S],S):t[S],p(y,S,x);else for(E=(w=f(t,_)).next,y=r?new this:[];!(b=a(E,w)).done;S++)x=g?s(w,m,[b.value,S],!0):b.value,p(y,S,x);return y.length=S,y}},31692:(e,t,r)=>{var n=r(74529),o=r(59413),a=r(10623),i=function(e){return function(t,r,i){var s,l=n(t),u=a(l),c=o(i,u);if(e&&r!=r){for(;u>c;)if((s=l[c++])!=s)return!0}else for(;u>c;c++)if((e||c in l)&&l[c]===r)return e||c||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},3610:(e,t,r)=>{var n=r(86843),o=r(95329),a=r(37026),i=r(89678),s=r(10623),l=r(64692),u=o([].push),c=function(e){var t=1==e,r=2==e,o=3==e,c=4==e,p=6==e,f=7==e,h=5==e||p;return function(d,m,g,v){for(var y,b,w=i(d),E=a(w),x=n(m,g),_=s(E),S=0,A=v||l,k=t?A(d,_):r||f?A(d,0):void 0;_>S;S++)if((h||S in E)&&(b=x(y=E[S],S,w),e))if(t)k[S]=b;else if(b)switch(e){case 3:return!0;case 5:return y;case 6:return S;case 2:u(k,y)}else switch(e){case 4:return!1;case 7:u(k,y)}return p?-1:o||c?c:k}};e.exports={forEach:c(0),map:c(1),filter:c(2),some:c(3),every:c(4),find:c(5),findIndex:c(6),filterReject:c(7)}},67145:(e,t,r)=>{"use strict";var n=r(79730),o=r(74529),a=r(62435),i=r(10623),s=r(34194),l=Math.min,u=[].lastIndexOf,c=!!u&&1/[1].lastIndexOf(1,-0)<0,p=s("lastIndexOf"),f=c||!p;e.exports=f?function(e){if(c)return n(u,this,arguments)||0;var t=o(this),r=i(t),s=r-1;for(arguments.length>1&&(s=l(s,a(arguments[1]))),s<0&&(s=r+s);s>=0;s--)if(s in t&&t[s]===e)return s||0;return-1}:u},50568:(e,t,r)=>{var n=r(95981),o=r(99813),a=r(53385),i=o("species");e.exports=function(e){return a>=51||!n((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},34194:(e,t,r)=>{"use strict";var n=r(95981);e.exports=function(e,t){var r=[][e];return!!r&&n((function(){r.call(null,t||function(){throw 1},1)}))}},46499:(e,t,r)=>{var n=r(21899),o=r(24883),a=r(89678),i=r(37026),s=r(10623),l=n.TypeError,u=function(e){return function(t,r,n,u){o(r);var c=a(t),p=i(c),f=s(c),h=e?f-1:0,d=e?-1:1;if(n<2)for(;;){if(h in p){u=p[h],h+=d;break}if(h+=d,e?h<0:f<=h)throw l("Reduce of empty array with no initial value")}for(;e?h>=0:f>h;h+=d)h in p&&(u=r(u,p[h],h,c));return u}};e.exports={left:u(!1),right:u(!0)}},15790:(e,t,r)=>{var n=r(21899),o=r(59413),a=r(10623),i=r(55449),s=n.Array,l=Math.max;e.exports=function(e,t,r){for(var n=a(e),u=o(t,n),c=o(void 0===r?n:r,n),p=s(l(c-u,0)),f=0;u{var n=r(95329);e.exports=n([].slice)},61388:(e,t,r)=>{var n=r(15790),o=Math.floor,a=function(e,t){var r=e.length,l=o(r/2);return r<8?i(e,t):s(e,a(n(e,0,l),t),a(n(e,l),t),t)},i=function(e,t){for(var r,n,o=e.length,a=1;a0;)e[n]=e[--n];n!==a++&&(e[n]=r)}return e},s=function(e,t,r,n){for(var o=t.length,a=r.length,i=0,s=0;i{var n=r(21899),o=r(1052),a=r(24284),i=r(10941),s=r(99813)("species"),l=n.Array;e.exports=function(e){var t;return o(e)&&(t=e.constructor,(a(t)&&(t===l||o(t.prototype))||i(t)&&null===(t=t[s]))&&(t=void 0)),void 0===t?l:t}},64692:(e,t,r)=>{var n=r(5693);e.exports=function(e,t){return new(n(e))(0===t?0:t)}},75196:(e,t,r)=>{var n=r(96059),o=r(7609);e.exports=function(e,t,r,a){try{return a?t(n(r)[0],r[1]):t(r)}catch(t){o(e,"throw",t)}}},21385:(e,t,r)=>{var n=r(99813)("iterator"),o=!1;try{var a=0,i={next:function(){return{done:!!a++}},return:function(){o=!0}};i[n]=function(){return this},Array.from(i,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var r=!1;try{var a={};a[n]=function(){return{next:function(){return{done:r=!0}}}},e(a)}catch(e){}return r}},82532:(e,t,r)=>{var n=r(95329),o=n({}.toString),a=n("".slice);e.exports=function(e){return a(o(e),8,-1)}},9697:(e,t,r)=>{var n=r(21899),o=r(22885),a=r(57475),i=r(82532),s=r(99813)("toStringTag"),l=n.Object,u="Arguments"==i(function(){return arguments}());e.exports=o?i:function(e){var t,r,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=l(e),s))?r:u?i(t):"Object"==(n=i(t))&&a(t.callee)?"Arguments":n}},38694:(e,t,r)=>{var n=r(95329)("".replace),o=String(Error("zxcasd").stack),a=/\n\s*at [^:]*:[^\n]*/,i=a.test(o);e.exports=function(e,t){if(i&&"string"==typeof e)for(;t--;)e=n(e,a,"");return e}},85616:(e,t,r)=>{"use strict";var n=r(65988).f,o=r(29290),a=r(87524),i=r(86843),s=r(5743),l=r(93091),u=r(47771),c=r(94431),p=r(55746),f=r(21647).fastKey,h=r(45402),d=h.set,m=h.getterFor;e.exports={getConstructor:function(e,t,r,u){var c=e((function(e,n){s(e,h),d(e,{type:t,index:o(null),first:void 0,last:void 0,size:0}),p||(e.size=0),null!=n&&l(n,e[u],{that:e,AS_ENTRIES:r})})),h=c.prototype,g=m(t),v=function(e,t,r){var n,o,a=g(e),i=y(e,t);return i?i.value=r:(a.last=i={index:o=f(t,!0),key:t,value:r,previous:n=a.last,next:void 0,removed:!1},a.first||(a.first=i),n&&(n.next=i),p?a.size++:e.size++,"F"!==o&&(a.index[o]=i)),e},y=function(e,t){var r,n=g(e),o=f(t);if("F"!==o)return n.index[o];for(r=n.first;r;r=r.next)if(r.key==t)return r};return a(h,{clear:function(){for(var e=g(this),t=e.index,r=e.first;r;)r.removed=!0,r.previous&&(r.previous=r.previous.next=void 0),delete t[r.index],r=r.next;e.first=e.last=void 0,p?e.size=0:this.size=0},delete:function(e){var t=this,r=g(t),n=y(t,e);if(n){var o=n.next,a=n.previous;delete r.index[n.index],n.removed=!0,a&&(a.next=o),o&&(o.previous=a),r.first==n&&(r.first=o),r.last==n&&(r.last=a),p?r.size--:t.size--}return!!n},forEach:function(e){for(var t,r=g(this),n=i(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:r.first;)for(n(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!y(this,e)}}),a(h,r?{get:function(e){var t=y(this,e);return t&&t.value},set:function(e,t){return v(this,0===e?0:e,t)}}:{add:function(e){return v(this,e=0===e?0:e,e)}}),p&&n(h,"size",{get:function(){return g(this).size}}),c},setStrong:function(e,t,r){var n=t+" Iterator",o=m(t),a=m(n);u(e,t,(function(e,t){d(this,{type:n,target:e,state:o(e),kind:t,last:void 0})}),(function(){for(var e=a(this),t=e.kind,r=e.last;r&&r.removed;)r=r.previous;return e.target&&(e.last=r=r?r.next:e.state.first)?"keys"==t?{value:r.key,done:!1}:"values"==t?{value:r.value,done:!1}:{value:[r.key,r.value],done:!1}:(e.target=void 0,{value:void 0,done:!0})}),r?"entries":"values",!r,!0),c(t)}}},8850:(e,t,r)=>{"use strict";var n=r(95329),o=r(87524),a=r(21647).getWeakData,i=r(96059),s=r(10941),l=r(5743),u=r(93091),c=r(3610),p=r(90953),f=r(45402),h=f.set,d=f.getterFor,m=c.find,g=c.findIndex,v=n([].splice),y=0,b=function(e){return e.frozen||(e.frozen=new w)},w=function(){this.entries=[]},E=function(e,t){return m(e.entries,(function(e){return e[0]===t}))};w.prototype={get:function(e){var t=E(this,e);if(t)return t[1]},has:function(e){return!!E(this,e)},set:function(e,t){var r=E(this,e);r?r[1]=t:this.entries.push([e,t])},delete:function(e){var t=g(this.entries,(function(t){return t[0]===e}));return~t&&v(this.entries,t,1),!!~t}},e.exports={getConstructor:function(e,t,r,n){var c=e((function(e,o){l(e,f),h(e,{type:t,id:y++,frozen:void 0}),null!=o&&u(o,e[n],{that:e,AS_ENTRIES:r})})),f=c.prototype,m=d(t),g=function(e,t,r){var n=m(e),o=a(i(t),!0);return!0===o?b(n).set(t,r):o[n.id]=r,e};return o(f,{delete:function(e){var t=m(this);if(!s(e))return!1;var r=a(e);return!0===r?b(t).delete(e):r&&p(r,t.id)&&delete r[t.id]},has:function(e){var t=m(this);if(!s(e))return!1;var r=a(e);return!0===r?b(t).has(e):r&&p(r,t.id)}}),o(f,r?{get:function(e){var t=m(this);if(s(e)){var r=a(e);return!0===r?b(t).get(e):r?r[t.id]:void 0}},set:function(e,t){return g(this,e,t)}}:{add:function(e){return g(this,e,!0)}}),c}}},24683:(e,t,r)=>{"use strict";var n=r(76887),o=r(21899),a=r(21647),i=r(95981),s=r(32029),l=r(93091),u=r(5743),c=r(57475),p=r(10941),f=r(90904),h=r(65988).f,d=r(3610).forEach,m=r(55746),g=r(45402),v=g.set,y=g.getterFor;e.exports=function(e,t,r){var g,b=-1!==e.indexOf("Map"),w=-1!==e.indexOf("Weak"),E=b?"set":"add",x=o[e],_=x&&x.prototype,S={};if(m&&c(x)&&(w||_.forEach&&!i((function(){(new x).entries().next()})))){var A=(g=t((function(t,r){v(u(t,A),{type:e,collection:new x}),null!=r&&l(r,t[E],{that:t,AS_ENTRIES:b})}))).prototype,k=y(e);d(["add","clear","delete","forEach","get","has","set","keys","values","entries"],(function(e){var t="add"==e||"set"==e;!(e in _)||w&&"clear"==e||s(A,e,(function(r,n){var o=k(this).collection;if(!t&&w&&!p(r))return"get"==e&&void 0;var a=o[e](0===r?0:r,n);return t?this:a}))})),w||h(A,"size",{configurable:!0,get:function(){return k(this).collection.size}})}else g=r.getConstructor(t,e,b,E),a.enable();return f(g,e,!1,!0),S[e]=g,n({global:!0,forced:!0},S),w||r.setStrong(g,e,b),g}},23489:(e,t,r)=>{var n=r(90953),o=r(31136),a=r(49677),i=r(65988);e.exports=function(e,t,r){for(var s=o(t),l=i.f,u=a.f,c=0;c{var n=r(99813)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(r){try{return t[n]=!1,"/./"[e](t)}catch(e){}}return!1}},64160:(e,t,r)=>{var n=r(95981);e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},31046:(e,t,r)=>{"use strict";var n=r(35143).IteratorPrototype,o=r(29290),a=r(31887),i=r(90904),s=r(12077),l=function(){return this};e.exports=function(e,t,r,u){var c=t+" Iterator";return e.prototype=o(n,{next:a(+!u,r)}),i(e,c,!1,!0),s[c]=l,e}},32029:(e,t,r)=>{var n=r(55746),o=r(65988),a=r(31887);e.exports=n?function(e,t,r){return o.f(e,t,a(1,r))}:function(e,t,r){return e[t]=r,e}},31887:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},55449:(e,t,r)=>{"use strict";var n=r(83894),o=r(65988),a=r(31887);e.exports=function(e,t,r){var i=n(t);i in e?o.f(e,i,a(0,r)):e[i]=r}},47771:(e,t,r)=>{"use strict";var n=r(76887),o=r(78834),a=r(82529),i=r(79417),s=r(57475),l=r(31046),u=r(249),c=r(88929),p=r(90904),f=r(32029),h=r(99754),d=r(99813),m=r(12077),g=r(35143),v=i.PROPER,y=i.CONFIGURABLE,b=g.IteratorPrototype,w=g.BUGGY_SAFARI_ITERATORS,E=d("iterator"),x="keys",_="values",S="entries",A=function(){return this};e.exports=function(e,t,r,i,d,g,k){l(r,t,i);var C,O,j,I=function(e){if(e===d&&M)return M;if(!w&&e in P)return P[e];switch(e){case x:case _:case S:return function(){return new r(this,e)}}return function(){return new r(this)}},N=t+" Iterator",T=!1,P=e.prototype,R=P[E]||P["@@iterator"]||d&&P[d],M=!w&&R||I(d),D="Array"==t&&P.entries||R;if(D&&(C=u(D.call(new e)))!==Object.prototype&&C.next&&(a||u(C)===b||(c?c(C,b):s(C[E])||h(C,E,A)),p(C,N,!0,!0),a&&(m[N]=A)),v&&d==_&&R&&R.name!==_&&(!a&&y?f(P,"name",_):(T=!0,M=function(){return o(R,this)})),d)if(O={values:I(_),keys:g?M:I(x),entries:I(S)},k)for(j in O)(w||T||!(j in P))&&h(P,j,O[j]);else n({target:t,proto:!0,forced:w||T},O);return a&&!k||P[E]===M||h(P,E,M,{name:d}),m[t]=M,O}},66349:(e,t,r)=>{var n=r(54058),o=r(90953),a=r(11477),i=r(65988).f;e.exports=function(e){var t=n.Symbol||(n.Symbol={});o(t,e)||i(t,e,{value:a.f(e)})}},55746:(e,t,r)=>{var n=r(95981);e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},61333:(e,t,r)=>{var n=r(21899),o=r(10941),a=n.document,i=o(a)&&o(a.createElement);e.exports=function(e){return i?a.createElement(e):{}}},63281:e=>{e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},34342:(e,t,r)=>{var n=r(2861).match(/firefox\/(\d+)/i);e.exports=!!n&&+n[1]},23321:e=>{e.exports="object"==typeof window},81046:(e,t,r)=>{var n=r(2861);e.exports=/MSIE|Trident/.test(n)},4470:(e,t,r)=>{var n=r(2861),o=r(21899);e.exports=/ipad|iphone|ipod/i.test(n)&&void 0!==o.Pebble},22749:(e,t,r)=>{var n=r(2861);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(n)},6049:(e,t,r)=>{var n=r(82532),o=r(21899);e.exports="process"==n(o.process)},58045:(e,t,r)=>{var n=r(2861);e.exports=/web0s(?!.*chrome)/i.test(n)},2861:(e,t,r)=>{var n=r(626);e.exports=n("navigator","userAgent")||""},53385:(e,t,r)=>{var n,o,a=r(21899),i=r(2861),s=a.process,l=a.Deno,u=s&&s.versions||l&&l.version,c=u&&u.v8;c&&(o=(n=c.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!o&&i&&(!(n=i.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=i.match(/Chrome\/(\d+)/))&&(o=+n[1]),e.exports=o},18938:(e,t,r)=>{var n=r(2861).match(/AppleWebKit\/(\d+)\./);e.exports=!!n&&+n[1]},35703:(e,t,r)=>{var n=r(54058);e.exports=function(e){return n[e+"Prototype"]}},56759:e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},18780:(e,t,r)=>{var n=r(95981),o=r(31887);e.exports=!n((function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",o(1,7)),7!==e.stack)}))},76887:(e,t,r)=>{"use strict";var n=r(21899),o=r(79730),a=r(95329),i=r(57475),s=r(49677).f,l=r(37252),u=r(54058),c=r(86843),p=r(32029),f=r(90953),h=function(e){var t=function(r,n,a){if(this instanceof t){switch(arguments.length){case 0:return new e;case 1:return new e(r);case 2:return new e(r,n)}return new e(r,n,a)}return o(e,this,arguments)};return t.prototype=e.prototype,t};e.exports=function(e,t){var r,o,d,m,g,v,y,b,w=e.target,E=e.global,x=e.stat,_=e.proto,S=E?n:x?n[w]:(n[w]||{}).prototype,A=E?u:u[w]||p(u,w,{})[w],k=A.prototype;for(d in t)r=!l(E?d:w+(x?".":"#")+d,e.forced)&&S&&f(S,d),g=A[d],r&&(v=e.noTargetGet?(b=s(S,d))&&b.value:S[d]),m=r&&v?v:t[d],r&&typeof g==typeof m||(y=e.bind&&r?c(m,n):e.wrap&&r?h(m):_&&i(m)?a(m):m,(e.sham||m&&m.sham||g&&g.sham)&&p(y,"sham",!0),p(A,d,y),_&&(f(u,o=w+"Prototype")||p(u,o,{}),p(u[o],d,m),e.real&&k&&!k[d]&&p(k,d,m)))}},95981:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},45602:(e,t,r)=>{var n=r(95981);e.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},79730:(e,t,r)=>{var n=r(18285),o=Function.prototype,a=o.apply,i=o.call;e.exports="object"==typeof Reflect&&Reflect.apply||(n?i.bind(a):function(){return i.apply(a,arguments)})},86843:(e,t,r)=>{var n=r(95329),o=r(24883),a=r(18285),i=n(n.bind);e.exports=function(e,t){return o(e),void 0===t?e:a?i(e,t):function(){return e.apply(t,arguments)}}},18285:(e,t,r)=>{var n=r(95981);e.exports=!n((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},98308:(e,t,r)=>{"use strict";var n=r(21899),o=r(95329),a=r(24883),i=r(10941),s=r(90953),l=r(93765),u=r(18285),c=n.Function,p=o([].concat),f=o([].join),h={},d=function(e,t,r){if(!s(h,t)){for(var n=[],o=0;o{var n=r(18285),o=Function.prototype.call;e.exports=n?o.bind(o):function(){return o.apply(o,arguments)}},79417:(e,t,r)=>{var n=r(55746),o=r(90953),a=Function.prototype,i=n&&Object.getOwnPropertyDescriptor,s=o(a,"name"),l=s&&"something"===function(){}.name,u=s&&(!n||n&&i(a,"name").configurable);e.exports={EXISTS:s,PROPER:l,CONFIGURABLE:u}},95329:(e,t,r)=>{var n=r(18285),o=Function.prototype,a=o.bind,i=o.call,s=n&&a.bind(i,i);e.exports=n?function(e){return e&&s(e)}:function(e){return e&&function(){return i.apply(e,arguments)}}},626:(e,t,r)=>{var n=r(54058),o=r(21899),a=r(57475),i=function(e){return a(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?i(n[e])||i(o[e]):n[e]&&n[e][t]||o[e]&&o[e][t]}},22902:(e,t,r)=>{var n=r(9697),o=r(14229),a=r(12077),i=r(99813)("iterator");e.exports=function(e){if(null!=e)return o(e,i)||o(e,"@@iterator")||a[n(e)]}},53476:(e,t,r)=>{var n=r(21899),o=r(78834),a=r(24883),i=r(96059),s=r(69826),l=r(22902),u=n.TypeError;e.exports=function(e,t){var r=arguments.length<2?l(e):t;if(a(r))return i(o(r,e));throw u(s(e)+" is not iterable")}},14229:(e,t,r)=>{var n=r(24883);e.exports=function(e,t){var r=e[t];return null==r?void 0:n(r)}},21899:(e,t,r)=>{var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof r.g&&r.g)||function(){return this}()||Function("return this")()},90953:(e,t,r)=>{var n=r(95329),o=r(89678),a=n({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return a(o(e),t)}},27748:e=>{e.exports={}},34845:(e,t,r)=>{var n=r(21899);e.exports=function(e,t){var r=n.console;r&&r.error&&(1==arguments.length?r.error(e):r.error(e,t))}},15463:(e,t,r)=>{var n=r(626);e.exports=n("document","documentElement")},2840:(e,t,r)=>{var n=r(55746),o=r(95981),a=r(61333);e.exports=!n&&!o((function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},37026:(e,t,r)=>{var n=r(21899),o=r(95329),a=r(95981),i=r(82532),s=n.Object,l=o("".split);e.exports=a((function(){return!s("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?l(e,""):s(e)}:s},81302:(e,t,r)=>{var n=r(95329),o=r(57475),a=r(63030),i=n(Function.toString);o(a.inspectSource)||(a.inspectSource=function(e){return i(e)}),e.exports=a.inspectSource},53794:(e,t,r)=>{var n=r(10941),o=r(32029);e.exports=function(e,t){n(t)&&"cause"in t&&o(e,"cause",t.cause)}},21647:(e,t,r)=>{var n=r(76887),o=r(95329),a=r(27748),i=r(10941),s=r(90953),l=r(65988).f,u=r(10946),c=r(684),p=r(91584),f=r(99418),h=r(45602),d=!1,m=f("meta"),g=0,v=function(e){l(e,m,{value:{objectID:"O"+g++,weakData:{}}})},y=e.exports={enable:function(){y.enable=function(){},d=!0;var e=u.f,t=o([].splice),r={};r[m]=1,e(r).length&&(u.f=function(r){for(var n=e(r),o=0,a=n.length;o{var n,o,a,i=r(38019),s=r(21899),l=r(95329),u=r(10941),c=r(32029),p=r(90953),f=r(63030),h=r(44262),d=r(27748),m="Object already initialized",g=s.TypeError,v=s.WeakMap;if(i||f.state){var y=f.state||(f.state=new v),b=l(y.get),w=l(y.has),E=l(y.set);n=function(e,t){if(w(y,e))throw new g(m);return t.facade=e,E(y,e,t),t},o=function(e){return b(y,e)||{}},a=function(e){return w(y,e)}}else{var x=h("state");d[x]=!0,n=function(e,t){if(p(e,x))throw new g(m);return t.facade=e,c(e,x,t),t},o=function(e){return p(e,x)?e[x]:{}},a=function(e){return p(e,x)}}e.exports={set:n,get:o,has:a,enforce:function(e){return a(e)?o(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!u(t)||(r=o(t)).type!==e)throw g("Incompatible receiver, "+e+" required");return r}}}},6782:(e,t,r)=>{var n=r(99813),o=r(12077),a=n("iterator"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||i[a]===e)}},1052:(e,t,r)=>{var n=r(82532);e.exports=Array.isArray||function(e){return"Array"==n(e)}},57475:e=>{e.exports=function(e){return"function"==typeof e}},24284:(e,t,r)=>{var n=r(95329),o=r(95981),a=r(57475),i=r(9697),s=r(626),l=r(81302),u=function(){},c=[],p=s("Reflect","construct"),f=/^\s*(?:class|function)\b/,h=n(f.exec),d=!f.exec(u),m=function(e){if(!a(e))return!1;try{return p(u,c,e),!0}catch(e){return!1}},g=function(e){if(!a(e))return!1;switch(i(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return d||!!h(f,l(e))}catch(e){return!0}};g.sham=!0,e.exports=!p||o((function(){var e;return m(m.call)||!m(Object)||!m((function(){e=!0}))||e}))?g:m},37252:(e,t,r)=>{var n=r(95981),o=r(57475),a=/#|\.prototype\./,i=function(e,t){var r=l[s(e)];return r==c||r!=u&&(o(t)?n(t):!!t)},s=i.normalize=function(e){return String(e).replace(a,".").toLowerCase()},l=i.data={},u=i.NATIVE="N",c=i.POLYFILL="P";e.exports=i},10941:(e,t,r)=>{var n=r(57475);e.exports=function(e){return"object"==typeof e?null!==e:n(e)}},82529:e=>{e.exports=!0},60685:(e,t,r)=>{var n=r(10941),o=r(82532),a=r(99813)("match");e.exports=function(e){var t;return n(e)&&(void 0!==(t=e[a])?!!t:"RegExp"==o(e))}},56664:(e,t,r)=>{var n=r(21899),o=r(626),a=r(57475),i=r(7046),s=r(32302),l=n.Object;e.exports=s?function(e){return"symbol"==typeof e}:function(e){var t=o("Symbol");return a(t)&&i(t.prototype,l(e))}},93091:(e,t,r)=>{var n=r(21899),o=r(86843),a=r(78834),i=r(96059),s=r(69826),l=r(6782),u=r(10623),c=r(7046),p=r(53476),f=r(22902),h=r(7609),d=n.TypeError,m=function(e,t){this.stopped=e,this.result=t},g=m.prototype;e.exports=function(e,t,r){var n,v,y,b,w,E,x,_=r&&r.that,S=!(!r||!r.AS_ENTRIES),A=!(!r||!r.IS_ITERATOR),k=!(!r||!r.INTERRUPTED),C=o(t,_),O=function(e){return n&&h(n,"normal",e),new m(!0,e)},j=function(e){return S?(i(e),k?C(e[0],e[1],O):C(e[0],e[1])):k?C(e,O):C(e)};if(A)n=e;else{if(!(v=f(e)))throw d(s(e)+" is not iterable");if(l(v)){for(y=0,b=u(e);b>y;y++)if((w=j(e[y]))&&c(g,w))return w;return new m(!1)}n=p(e,v)}for(E=n.next;!(x=a(E,n)).done;){try{w=j(x.value)}catch(e){h(n,"throw",e)}if("object"==typeof w&&w&&c(g,w))return w}return new m(!1)}},7609:(e,t,r)=>{var n=r(78834),o=r(96059),a=r(14229);e.exports=function(e,t,r){var i,s;o(e);try{if(!(i=a(e,"return"))){if("throw"===t)throw r;return r}i=n(i,e)}catch(e){s=!0,i=e}if("throw"===t)throw r;if(s)throw i;return o(i),r}},35143:(e,t,r)=>{"use strict";var n,o,a,i=r(95981),s=r(57475),l=r(29290),u=r(249),c=r(99754),p=r(99813),f=r(82529),h=p("iterator"),d=!1;[].keys&&("next"in(a=[].keys())?(o=u(u(a)))!==Object.prototype&&(n=o):d=!0),null==n||i((function(){var e={};return n[h].call(e)!==e}))?n={}:f&&(n=l(n)),s(n[h])||c(n,h,(function(){return this})),e.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:d}},12077:e=>{e.exports={}},10623:(e,t,r)=>{var n=r(43057);e.exports=function(e){return n(e.length)}},66132:(e,t,r)=>{var n,o,a,i,s,l,u,c,p=r(21899),f=r(86843),h=r(49677).f,d=r(42941).set,m=r(22749),g=r(4470),v=r(58045),y=r(6049),b=p.MutationObserver||p.WebKitMutationObserver,w=p.document,E=p.process,x=p.Promise,_=h(p,"queueMicrotask"),S=_&&_.value;S||(n=function(){var e,t;for(y&&(e=E.domain)&&e.exit();o;){t=o.fn,o=o.next;try{t()}catch(e){throw o?i():a=void 0,e}}a=void 0,e&&e.enter()},m||y||v||!b||!w?!g&&x&&x.resolve?((u=x.resolve(void 0)).constructor=x,c=f(u.then,u),i=function(){c(n)}):y?i=function(){E.nextTick(n)}:(d=f(d,p),i=function(){d(n)}):(s=!0,l=w.createTextNode(""),new b(n).observe(l,{characterData:!0}),i=function(){l.data=s=!s})),e.exports=S||function(e){var t={fn:e,next:void 0};a&&(a.next=t),o||(o=t,i()),a=t}},19297:(e,t,r)=>{var n=r(21899);e.exports=n.Promise},72497:(e,t,r)=>{var n=r(53385),o=r(95981);e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},28468:(e,t,r)=>{var n=r(95981),o=r(99813),a=r(82529),i=o("iterator");e.exports=!n((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,r="";return e.pathname="c%20d",t.forEach((function(e,n){t.delete("b"),r+=n+e})),a&&!e.toJSON||!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[i]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==r||"x"!==new URL("http://x",void 0).host}))},38019:(e,t,r)=>{var n=r(21899),o=r(57475),a=r(81302),i=n.WeakMap;e.exports=o(i)&&/native code/.test(a(i))},69520:(e,t,r)=>{"use strict";var n=r(24883),o=function(e){var t,r;this.promise=new e((function(e,n){if(void 0!==t||void 0!==r)throw TypeError("Bad Promise constructor");t=e,r=n})),this.resolve=n(t),this.reject=n(r)};e.exports.f=function(e){return new o(e)}},14649:(e,t,r)=>{var n=r(85803);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:n(e)}},70344:(e,t,r)=>{var n=r(21899),o=r(60685),a=n.TypeError;e.exports=function(e){if(o(e))throw a("The method doesn't accept regular expressions");return e}},24420:(e,t,r)=>{"use strict";var n=r(55746),o=r(95329),a=r(78834),i=r(95981),s=r(14771),l=r(87857),u=r(36760),c=r(89678),p=r(37026),f=Object.assign,h=Object.defineProperty,d=o([].concat);e.exports=!f||i((function(){if(n&&1!==f({b:1},f(h({},"a",{enumerable:!0,get:function(){h(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},r=Symbol(),o="abcdefghijklmnopqrst";return e[r]=7,o.split("").forEach((function(e){t[e]=e})),7!=f({},e)[r]||s(f({},t)).join("")!=o}))?function(e,t){for(var r=c(e),o=arguments.length,i=1,f=l.f,h=u.f;o>i;)for(var m,g=p(arguments[i++]),v=f?d(s(g),f(g)):s(g),y=v.length,b=0;y>b;)m=v[b++],n&&!a(h,g,m)||(r[m]=g[m]);return r}:f},29290:(e,t,r)=>{var n,o=r(96059),a=r(59938),i=r(56759),s=r(27748),l=r(15463),u=r(61333),c=r(44262),p=c("IE_PROTO"),f=function(){},h=function(e){return" diff --git a/themes/yunohost-docs/thumbnail.jpg b/themes/yunohost-docs/thumbnail.jpg new file mode 100644 index 00000000..e82d66ec Binary files /dev/null and b/themes/yunohost-docs/thumbnail.jpg differ diff --git a/themes/yunohost-docs/yunohost-docs.php b/themes/yunohost-docs/yunohost-docs.php new file mode 100644 index 00000000..42f87fc3 --- /dev/null +++ b/themes/yunohost-docs/yunohost-docs.php @@ -0,0 +1,9 @@ +