diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index 783a4aee..b4839ace --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,7 @@ -*~ -*.sw[op] +/* +!/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 index 18a27402..38a1a730 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,5 +2,3 @@ language: bash script: - bash tests/dead_links.sh - - bash tests/unreferenced_pages.sh - - bash tests/check_code_block_syntax.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 index ed5d3ad2..1c49b201 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,39 @@ # YunoHost Documentation * [Web Site](https://yunohost.org) -* Based on [Simone](https://github.com/YunoHost/Simone) +* Based on [Grav](https://getgrav.org/) Please report [issues on YunoHost bugtracker](https://github.com/YunoHost/issues/issues). -You can live test any changes by adding `/edit` to the URL on -[yunohost.org](https://yunohost.org). For example, if you make changes to -[apps.md](./apps.md), you can test them on [yunohost.org/#/apps/edit](https://yunohost.org/#/apps/edit). +# 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/admin_api.md b/admin_api.md deleted file mode 100644 index 5fbf4ede..00000000 --- a/admin_api.md +++ /dev/null @@ -1,55 +0,0 @@ -# Administration from the API or an external application - -All command line actions can also be ran from the web API. The API is available at https://your.server/yunohost/api. For now there's no documentation on the various routes... but you can get an idea by looking at the actionmap [here](https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/actionsmap/yunohost.yml) (in particular the `api` stuff). - -## Using cURL - -You must first retrieve a login cookie to perform the actions. Here is an example with cURL: - -```bash -# Login (with admin password) -curl -k -H "X-Requested-With: customscript" \ - -d "password=supersecretpassword" \ - -dump-header headers \ - https://your.server/yunohost/api/login - -# GET example -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 -``` - -## Using a PHP class - -To simplify the remote administration of a YunoHost instance in CHATONS/Librehosters projects, API classes have been developed by users. - -For example, this [PHP class](https://github.com/scith/yunohost-api-php) will allow you to administer your YunoHost instance from a PHP application (website, capacity management tool...). - -Here is an example of PHP code to add a user to your YunoHost instance: - -```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/admin_fr.md b/admin_fr.md deleted file mode 100644 index 64329b9a..00000000 --- a/admin_fr.md +++ /dev/null @@ -1,12 +0,0 @@ -# L’interface d’administration Web - -YunoHost est fourni avec une interface graphique d’administration. L’autre méthode est d’utiliser la [ligne de commande](/commandline). - -### Accès - -L’interface admin est accessible depuis votre instance YunoHost à l’adresse https://exemple.org/yunohost/admin (remplacez exemple.org par la bonne valeur) - -
- -
- diff --git a/admindoc.md b/admindoc.md deleted file mode 100644 index 1bf8daf3..00000000 --- a/admindoc.md +++ /dev/null @@ -1,64 +0,0 @@ -# Administrator documentation - -* Discovering self-hosting - * [What is Self-hosting](/selfhosting) - * [What is YunoHost](/whatsyunohost) - * [Try YunoHost](/try) - * [How to host yourself](howtohostyourself) - * [Choosing hardware](/hardware) - * [About the friendliness of internet service providers](/isp) -* [Installing YunoHost](/install) - * [On a regular computer](/install_iso) - * [On a dedicated or a virtual private server](/install_on_vps) - * [On a Raspberry Pi](/install_on_raspberry) - * [On an ARM board](/install_on_arm_board) - * [On Debian](/install_on_debian) - * [On VirtualBox](/install_on_virtualbox) -* Finalizing your setup - * [Post-installation](/postinstall) - * [Configuring port forwarding](/isp_box_config) - * [Configuring DNS records](/dns_config) - * [Installing an SSL certificate](/certificate) - * [Diagnose if your setup is working properly](/diagnostic) -* Getting to know YunoHost - * [Overview of YunoHost](/overview) - * [General advices and guidelines](/guidelines) - * [Web administration interface](/admin) - * [SSH](/ssh) and [command-line administration](/commandline) - * [Users and the SSO](/users) - * [Groups and permissions](/groups_and_permissions) - * [Applications](/apps_overview) - * [Domains, DNS and certificates](/domains) - * [Email](/email) - * [Forms to remove its IP address from the black lists](/blacklist_forms) - * [XMPP](/XMPP) - * [Backup](/backup) - * [Updating the system](/update) and [apps](/app_update) - * [Security](/security) -* Going further - * Domain names - * [Noho.st / nohost.me / ynh.fr domain names](/dns_nohost_me) - * [Configure a dynamic DNS with a dynamic IP address](/dns_dynamicip) - * [DNS and subdomains for apps](/dns_subdomains) - * [Managing DNS records at OVH](/OVH) - * Notes about some French ISPs - * [SFR](/isp_sfr) - * [Orange](/isp_orange) - * [Free](/isp_free) - * [Specific apps documentations](/appsdoc) - * [Equivalence between Framasoft service and apps](/apps_framasoft) - * [Exchange files with your server using a graphical interface](/filezilla) - * [Customize the appearance of the YunoHost portal](/theming) - * [Adding an external storage](/external_storage) - * [Moving an app folder to an other storage](/moving_app_folder) - * [Migrating emails to YunoHost](/email_migration) - * [Hide services with Tor](/torhiddenservice) - * [Using certificates other than Let's Encrypt](/certificate_custom) - * [A discussion about the advantages of using a VPN](/vpn_advantage) - * [Stretch->Buster migration procedure](stretch_buster_migration) - * [(old) Jessie->Stretch migration procedure](jessie_stretch_migration) -* Troubleshooting - * [Changing the administration password](/change_admin_password) - * [Recover access to your server](/noaccess) - * [Unban IPs in IPiptables/Fail2Ban](/fail2ban) - * [Configuring IPv6](/ipv6) diff --git a/admindoc_de.md b/admindoc_de.md deleted file mode 100644 index 462b4e0e..00000000 --- a/admindoc_de.md +++ /dev/null @@ -1,45 +0,0 @@ -# Administrator-Dokumentation - -* Self-Hosting entdecken - * [Was ist Self-Hosting](/selfhosting) - * [Was ist YunoHost](/whatsyunohost) - * [Probiere YunoHost aus](/try) - * [Wie du selber hostest](howtohostyourself) - * [Wähle die Hardware](/hardware) - * [Über die Freundlichkeit von Internet-Service-Providern](/isp) -* [YunoHost installieren](/install) - * [Auf einem normalen Computer](/install_iso) - * [Auf einem eigenen oder virtuellen Server](/install_on_vps) - * [Auf einem Raspberry Pi](/install_on_raspberry) - * [Auf einem ARM-Board](/install_on_arm_board) - * [Auf Debian](/install_on_debian) - * [Auf VirtualBox](/install_on_virtualbox) -* Setup abschließen - * [Nach der Installation](/postinstall) - * [Port-Forwarding konfigurieren](/isp_box_config) - * [DNS-Einträge konfigurieren](/dns_config) - * [SSL-Zertifikate installieren](/certificate) - * [Diagnostiziere deine Installation](/diagnostic) -* YunoHost kennenlernen - * [Übersicht über YunoHost](/overview) - * [Allgemeine Hinweise und Hilfestellungen](/guidelines) - * [Web-Administrations-Interface](/admin) - * [SSH](/ssh) and [command-line administration](/commandline) - * [Benutzer und SSO (Single-Sign-On)](/users) - * [Applikationen](/apps_overview) - * [Domains, DNS und Zertifikate](/domains) - * [E-Mail](/email) - * [XMPP](/XMPP) - * [Datensicherung](/backup) - * [System-Update](/update) and [apps](/app_update) - * [Sicherheit](/security) -* Weiteres - * [Noho.st / nohost.me / ynh.fr Domain-Namen](/dns_nohost_me) - * [Grafischer Dateiaustausch mit deinem Server](/filezilla) - * [Passe das Aussehen vom Yunohost-Portal an](/theming) - * [Für externen Speicher hinzu](/external_storage) - * [Migriere E-Mails zu Yunohost](/email_migration) - * [Verstecke Services mit Tor](/torhiddenservice) -* Hinweise zur Fehlersuche - * [Entsperren von IPs in Fail2Ban](/fail2ban) - * [Administrator-Passwort ändern](/change_admin_password) diff --git a/admindoc_fr.md b/admindoc_fr.md deleted file mode 100644 index d9a972eb..00000000 --- a/admindoc_fr.md +++ /dev/null @@ -1,64 +0,0 @@ -# Documentation pour les administrateurs YunoHost - -* Découvrir l'auto-hébergement - * [Qu'est-ce que l'auto-hébergement](/selfhosting) - * [Qu'est-ce que YunoHost](/whatsyunohost) - * [Essayer YunoHost](/try) - * [Choisir son mode d'hébergement](/howtohostyourself) - * [Matériel compatible](/hardware) - * [À propos des fournisseurs d'accès internet](/isp) -* [Guide d’installation](/install) - * [Sur un ordinateur "standard"](/install_iso) - * [Sur un serveur dédié ou virtuel (VPS)](/install_on_vps) - * [Sur un Raspberry Pi](/install_on_raspberry) - * [Sur une carte ARM](/install_on_arm_board) - * [Sur Debian](/install_on_debian) - * [Sur VirtualBox](/install_on_virtualbox) -* Finaliser son installation - * [Post-installation](/postinstall) - * [Configurer les redirections de port](/isp_box_config) - * [Configurer les enregistrements DNS](/dns_config) - * [Installer un certificat SSL](/certificate) - * [Diagnostic du bon fonctionnement du YunoHost](/diagnostic) -* Apprendre à connaitre YunoHost - * [Vue d'ensemble de YunoHost](/overview) - * [Conseil généraux](/guidelines) - * [L'interface d'administration web](/admin) - * [SSH](/ssh) et [l'administration en ligne de commande](/commandline) - * [Les utilisateurs et le SSO](/users) - * [Les groupes et les permissions](/groups_and_permissions) - * [Les applications](/apps_overview) - * [Les domaines, la configuration DNS et les certificats](/domains) - * [Les emails](/email) - * [Formulaires pour enlever son adresse IP des listes noires](/blacklist_forms) - * [XMPP](/XMPP) - * [Les sauvegardes](/backup) - * [Mettre à jour le système](/update) et [les applications](/app_update) - * [La sécurité](/security) -* Pour aller plus loin - * Noms de domaine - * [Nom de domaine en noho.st / nohost.me / ynh.fr](/dns_nohost_me) - * [Configurer un DNS dynamique avec une adresse IP dynamique](/dns_dynamicip) - * [DNS et installation d’une application sur un sous-domaine](/dns_subdomains) - * [Gérer les enregistrements DNS chez OVH](/OVH) - * Notes à propos de certains fournisseurs d'accès à Internet - * [SFR](/isp_sfr) - * [Orange](/isp_orange) - * [Free](/isp_free) - * [Documentation spécifique à certaines apps](/appsdoc) - * [Équivalence entre service Framasoft et apps](/apps_framasoft) - * [Échanger des fichiers avec son serveur à l'aide d'une interface graphique](/filezilla) - * [Modifier l'apparence du portail utilisateur](/theming) - * [Ajouter un stockage externe](/external_storage) - * [Déplacer un dossier d'app vers un autre stockage](/moving_app_folder) - * [Migrer ses emails vers YunoHost](/email_migration) - * [YunoHost avec un service caché Tor](/torhiddenservice) - * [Utilisation de certificats autres que Let's Encrypt](/certificate_custom) - * [Une discussion sur les avantages d'utiliser un VPN](/vpn_advantage) - * [Procedure de Migration Stretch->Buster](stretch_buster_migration) - * [(vieux) Procedure de Migration Jessie->Stretch](jessie_stretch_migration) -* Dépannage - * [Changer le mot de passe d’administration](/change_admin_password) - * [Récupérer l'accès à son serveur](/noaccess) - * [Débannir une IP dans Fail2Ban/IPtables](/fail2ban) - * [Configurer l'IPv6](/ipv6) diff --git a/app_collabora_fr.md b/app_collabora_fr.md deleted file mode 100644 index 659e2edb..00000000 --- a/app_collabora_fr.md +++ /dev/null @@ -1,15 +0,0 @@ -# logo de collabora Collabora - -[![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) - -### Index - -- [Liens utiles](#liens-utiles) - -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é. - -## 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/app_fallback.md b/app_fallback.md deleted file mode 100644 index 59c5c607..00000000 --- a/app_fallback.md +++ /dev/null @@ -1,20 +0,0 @@ -# Package Fallback - -[![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) - -### Index - -- [Configuration](#configuration) -- [Useful links](#useful-links) - -Fallback is a special app, only by command line interface, which provide a way to have a secondary server which you can used if your main server goes down. -This other server will allow you to deploy a copy of your server to bring back you to internet during your break down. - -## Configuration - -After the installation, you should not have anything else to configure. If you want anyway, you can find the list of app 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 an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/fallback/issues](https://github.com/YunoHost-Apps/fallback_ynh/issues) diff --git a/app_jappix.md b/app_jappix.md deleted file mode 100644 index 900961e9..00000000 --- a/app_jappix.md +++ /dev/null @@ -1,3 +0,0 @@ -# Jappix logo Jappix - -Jappix is a web client for [XMPP](/XMPP). diff --git a/app_jappix_fr.md b/app_jappix_fr.md deleted file mode 100644 index 7e8b4531..00000000 --- a/app_jappix_fr.md +++ /dev/null @@ -1,3 +0,0 @@ -# Jappix logo Jappix - -Jappix est un client web [XMPP](/XMPP). diff --git a/app_my_webapp.md b/app_my_webapp.md deleted file mode 100644 index 9a626334..00000000 --- a/app_my_webapp.md +++ /dev/null @@ -1,20 +0,0 @@ -# Documentation My_webapp - -In addition to the application's Readme.md, here are some useful tips. - -## Automatic update of the site content - -The application creates a new user with limited rights: it can connect (with a password) through SFTP to access the `/var/www/my_webapp` directory (or `/var/www/my_webapp__` if there are several installations of this application). - -This configuration requires updating the site content manually, with a password connection. - -If you want to automate things, you need to be able to connect without typing a password (i.e. "non-interactive"). Here are the steps to follow to get there: -- Enable public key connection, in `/etc/ssh/ssh/sshd_config`, on the server -- Create a public/private key pair for your script on the "writing" computer - without a protective passphrase. -- Copy the public key to the server, in `/var/www/my_webapp(__#)/.ssh/authorized_keys` -- Set the user `webapp#` as owner of the file and directory -- 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 the SSH, and configured in `/etc/ssh/sshd_config`. - -This tip allows you to automatically update your site. For example, the makefile of the Pelican tool allows you to use `make ftp_upload`. diff --git a/app_my_webapp_fr.md b/app_my_webapp_fr.md deleted file mode 100644 index b454209e..00000000 --- a/app_my_webapp_fr.md +++ /dev/null @@ -1,20 +0,0 @@ -# Documentation My_webapp - -En complément du Readme.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 appli). - -Cette configuration oblige à mettre à jour le contenu du site à la main, avec une connexion à mot de passe. - -Si vous souhaitez automatiser des choses, il vous faut une possibilité de connexion sans mot de passe à taper (dite "non-interactive"). Voici les étapes à suivre pour y arriver : -- Activer la connexion par clé publique, dans `/etc/ssh/sshd_config`, sur le serveur -- Créer une paire clé publique/privée pour votre script, sur l'ordinateur "de rédaction" - sans mettre de phrase de passe de protection. -- Copier la clé publique sur le serveur, dans `/var/www/my_webapp(__#)/.ssh/authorized_keys` -- Rentre l'utilisateur `webapp#` propriétaire du fichier et du dossier -- 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 asctuce 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/app_nextcloud_calendar.md b/app_nextcloud_calendar.md deleted file mode 120000 index 7800f978..00000000 --- a/app_nextcloud_calendar.md +++ /dev/null @@ -1 +0,0 @@ -default.md \ No newline at end of file diff --git a/app_nextcloud_carnet.md b/app_nextcloud_carnet.md deleted file mode 120000 index 7800f978..00000000 --- a/app_nextcloud_carnet.md +++ /dev/null @@ -1 +0,0 @@ -default.md \ No newline at end of file diff --git a/app_nextcloud_contact.md b/app_nextcloud_contact.md deleted file mode 120000 index 7800f978..00000000 --- a/app_nextcloud_contact.md +++ /dev/null @@ -1 +0,0 @@ -default.md \ No newline at end of file diff --git a/app_nextcloud_fr.md b/app_nextcloud_fr.md deleted file mode 100644 index 7c32edd0..00000000 --- a/app_nextcloud_fr.md +++ /dev/null @@ -1,169 +0,0 @@ -# logo de Nextcloud Nextcloud - - - [Découverte de l'environnement de Nextcloud](#EnvironnementNextcloud) - - [Logiciels Clients pour mobile et ordinateur](#LogicielsClients) - - [Manipulations & Problèmes rencontrés utiles](#ManipulationsUtiles) - - [Ajouter de l'espace à Nextcloud](#AjoutEspace) - - [Applications tiers](#AppsTiers) - - [Liens utiles](#liensutiles) - -Nextcloud est un service d'hébergement de fichiers, de nombreuses applications peuvent être installées afin de lui offrir de nouvelles fonctionnalités tel qu'un agenda, un répertoire de contacts, des notes et pleins d'autres possibles (vous pouvez trouver quelques applications dans la partie [applications tiers](#AppsTiers) mais 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 tiers à 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 information de connexion demandés. -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 php7.3 occ 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. - - -### 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'addresse 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 Tiers - - + [Calendrier](/app_nextcloud_calendar) - + [Contact](/app_nextcloud_contact) - + [KeeWeb](/app_nextcloud_keeweb) - + [Carnet](/app_nextcloud_carnet) - -## 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/app_piwigo.md b/app_piwigo.md deleted file mode 100644 index 817d7375..00000000 --- a/app_piwigo.md +++ /dev/null @@ -1,29 +0,0 @@ -# Piwigo's logo Piwigo - -[![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) - -### Index - -- [Useful links](#useful-links) - -[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. - -![](http://piwigo.org/screenshots/homepage/piwigo-batch-manager.png) - -## 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) - -## Links - - * Report a bug: https://github.com/YunoHost-Apps/piwigo_ynh/issues - * Piwigo website: http://piwigo.org/ diff --git a/app_pleroma.md b/app_pleroma.md deleted file mode 100644 index 595e2038..00000000 --- a/app_pleroma.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](app_pleroma_fr) for now. diff --git a/app_pluxml.md b/app_pluxml.md deleted file mode 100644 index ace7045a..00000000 --- a/app_pluxml.md +++ /dev/null @@ -1,23 +0,0 @@ -# PluXml - -![PluXml_logo](images/PluXml_logo.png) - -PluXml is a blog/CMS storing data in XML and not in a SQL database. - -## Overview - -![PluXml_screenshot](images/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. - -## Link - -PluXml : https://www.pluxml.org/ -Documentation : https://wiki.pluxml.org/ -Forum : https://forum.pluxml.org/ \ No newline at end of file diff --git a/app_pluxml_fr.md b/app_pluxml_fr.md deleted file mode 100644 index 4cd94e10..00000000 --- a/app_pluxml_fr.md +++ /dev/null @@ -1,23 +0,0 @@ -# PluXml - -![PluXml_logo](images/PluXml_logo.png) - -PluXml est un moteur de blog/CMS stockant ces données en XML et ne nécessitant pas de base de données SQL. - -## Aperçu - -![PluXml_screenshot](images/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 - -PluXml : https://www.pluxml.org/ -Documentation : https://wiki.pluxml.org/ -Forum : https://forum.pluxml.org/ \ No newline at end of file diff --git a/app_shaarli.md b/app_shaarli.md deleted file mode 100644 index 7f24e1a5..00000000 --- a/app_shaarli.md +++ /dev/null @@ -1 +0,0 @@ -(This page only exists in french for now) diff --git a/app_update.md b/app_update.md deleted file mode 100644 index ac1361e9..00000000 --- a/app_update.md +++ /dev/null @@ -1,38 +0,0 @@ -# Upgrade your applications - -Once you installed applications, you may need to upgrade them, sooner or later. - -**Caution:** please be advised to backup your databases (using phpMyAdmin application for example) and files before any upgrade. - -### Upgrade using the admin panel -Go to Tools > Update system - -Once the applications packages list is retrieved, you will be able to update official applications that have a pending upgrade. - -### Upgrade using command line -First, connect to your server through SSH and type in the following command (WordPress update): -```bash -yunohost app upgrade wordpress -``` -**Note:** in case you have multiple instances of the same type (ex: 2 wordpress) installed, you will need to specify the instance name (ex: wordpress or wordpress__2). - -#### Upgrade an unofficial application -Specify the Git repository containing the upgrade. - -For intance, to upgrade LimeSurvey: -```bash -yunohost app upgrade limesurvey -u https://github.com/zamentur/limesurvey_ynh -``` - -**Note:** be cautious when installing unofficial applications and upgrades. Be sure that theses updates are stables and are not a step in the development process. There may be a good reason if an application is not listed in the official repository. - -**Caution:** be sure to check the content of any update; installing or upgrading an unofficial application allows it to run scripts with the highest privileges. - -#### Command line options - -When upgrading apps from the command line, you can specify specific options to change the behaviour of the upgrade script. -To set those options, set the corresponding variable before the upgrade command: `sudo OPTION_TO_SET=1 yunohost app upgrade wordpress` - -Available options are: -- `NO_BACKUP_UPGRADE`: Do not perform the backup before the upgrade. Which means the upgrade will be operated without a security backup. -- `YNH_FORCE_UPGRADE`: Force the upgrade of the app and the package, even if the app is already up to date. diff --git a/app_update_fr.md b/app_update_fr.md deleted file mode 100644 index 05093042..00000000 --- a/app_update_fr.md +++ /dev/null @@ -1,39 +0,0 @@ -#Mettre à jour ses applications - -Une fois que vous avez installé des applications, il est nécessaire de les mettre à jour. Plusieurs méthodes existent et sont détaillées ci-dessous. - -** Attention : ** il est recommandé de faire une sauvegarde de la base de données (par exemple via l’application [phpMyAdmin](https://github.com/YunoHost-apps/phpmyadmin_ynh) ([installer](https://install-app.yunohost.org/?app=phpmyadmin))) ainsi que des fichiers avant une opération de mise à jour. - -### Mise à jour par l’interface Web -Pour cela, il faut aller dans l’onglet "Mettre à jour le système". - -Une fois la liste des paquets et des applications rafraîchie, il sera proposé de mettre à jour les applications et paquets qui peuvent l’être. - - -### Mise à jour en ligne de commande -Il faut d’abord se connecter sur le serveur en SSH, puis entrer la commande suivante (dans le cas d’une mise à jour WordPress) : -```bash -yunohost app upgrade wordpress -``` -**Note :** dans le cas où plusieurs applications du même type (ex : deux WordPress) sont installées sur le serveur, il est nécessaire de spécifier le nom d’instance (ex : wordpress ou wordpress__2). - -#### Mise à jour d’une application non officielle -Il faut pour cela indiquer le dépôt Git qui contient la mise à jour. - -Par exemple, pour mettre à jour LimeSurvey, entrer : -```bash -yunohost app upgrade limesurvey -u https://github.com/zamentur/limesurvey_ynh -``` - -**Note :** faites attention aux applications/mises à jour non officielles que vous installez. Assurez-vous que ces mises à jour sont stables et ne constituent pas une étape de développement. Si une application ou une mise à jour n’est pas intégrée au dépôt officiel, il y a sûrement une raison. - -**Attention :** assurez-vous du contenu de cette mise à jour ; l’installation ou la mise à jour d’une application non officielle permet à cette dernière d’exécuter des scripts avec les privilèges les plus élevés. Si le script est malicieux, il pourrait nuire à votre vie privée en communiquant à des tiers toute donnée présente sur le serveur, ou bien les détruire irrémédiablement. - -##### Options de ligne de commande - -Lorsque vous mettez à jour des applications à partir de la ligne de commande, vous pouvez spécifier des options spécifiques pour modifier le comportement du script d'upgrade. -Pour définir ces options, définissez la variable correspondante avant la commande d'upgrade : `sudo OPTION_TO_SET=1 yunohost app upgrade wordpress` - -Les options disponibles sont: -- `NO_BACKUP_UPGRADE`: Ne pas effectuer le backup avant la mise à jour. Ce qui veut dire que la mise à jour se fera sans sauvegarde de sécurité. -- `YNH_FORCE_UPGRADE`: Force la mise à jour de l'application et du package, même si l'application est déjà à jour. diff --git a/app_yunofav.md b/app_yunofav.md deleted file mode 100644 index 9b4e3e99..00000000 --- a/app_yunofav.md +++ /dev/null @@ -1,5 +0,0 @@ -# Yunofav: (unofficial) 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. \ No newline at end of file diff --git a/app_yunofav_fr.md b/app_yunofav_fr.md deleted file mode 100644 index d904a78e..00000000 --- a/app_yunofav_fr.md +++ /dev/null @@ -1,6 +0,0 @@ -# Yunofav : (non officiel) 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. \ No newline at end of file diff --git a/apps.md b/apps.md deleted file mode 100644 index 9bc87380..00000000 --- a/apps.md +++ /dev/null @@ -1,379 +0,0 @@ -# Application catalog - - -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. -
- -
- Applications flagged as not working are known to be broken and/or are still in development. **Do not install them** in a production environment! -
- -
- -
If you don't find the app you are looking for, you can try to look for a appname_ynh repository on GitHub or on the internet, or add it to the apps wishlist.
- - - - - - - - - - - - diff --git a/apps_fr.md b/apps_fr.md deleted file mode 100644 index 6221df0f..00000000 --- a/apps_fr.md +++ /dev/null @@ -1,378 +0,0 @@ -# Catalogue d’applications - - -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 low quality 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. -
- -
- Les applications étiquettées not working sont connues pour être cassées et/ou encore en développement. **Ne les installez pas** sur un serveur de production ! -
- -
- -
Si vous ne trouvez pas une application précise que vous recherchez, vous pouvez chercher un dépôt nommé nomdelapp_ynh sur GitHub ou internet, ou bien l'ajouter à la liste d'apps souhaitées.
- - - - - - - - - - - - diff --git a/apps_framasoft.md b/apps_framasoft.md deleted file mode 100644 index b8965af1..00000000 --- a/apps_framasoft.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](apps_framasoft_fr) for now. diff --git a/apps_framasoft_fr.md b/apps_framasoft_fr.md deleted file mode 100644 index d57bcdbd..00000000 --- a/apps_framasoft_fr.md +++ /dev/null @@ -1,48 +0,0 @@ -# Équivalence avec les applications Framasoft - -| App Framasoft | Équivalent | Package | -| :---: | :---: | :---: | -| Framabag | Wallabag | [](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://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://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://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/YunoHost-Apps/bicbucstriim_ynh) ![](https://ci-apps.yunohost.org/ci/badges/bicbucstriim.status.svg) ![](https://dash.yunohost.org/integration/bicbucstriim.svg) | -| Framacalc | Ethercalc | [](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 | [](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 | Matomo | [](https://github.com/YunoHost-Apps/matomo_ynh) ![](https://ci-apps.yunohost.org/ci/badges/matomo.status.svg) ![](https://dash.yunohost.org/integration/matomo.svg) | -| Framadate | OpenSondage | [](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://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://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://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://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://github.com/YunoHost-Apps/framagames_ynh) ![](https://ci-apps.yunohost.org/ci/badges/framagames.status.svg) ![](https://dash.yunohost.org/integration/framagames.svg) | -| Framagenda | (Agenda Nextcloud) | c.f. Nextcloud | -| Framagit | GitLab | [](https://github.com/YunoHost-Apps/gitlab_ynh) ![](https://ci-apps.yunohost.org/ci/badges/gitlab.status.svg) ![](https://dash.yunohost.org/integration/gitlab.svg) | -| | Gogs | [](https://github.com/YunoHost-Apps/gogs_ynh) ![](https://ci-apps.yunohost.org/ci/badges/gogs.status.svg) ![](https://dash.yunohost.org/integration/gogs.svg) | -| Frama.link | Lstu | [](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 | Mailman | [](https://github.com/YunoHost-Apps/mailman_ynh) ![](https://ci-apps.yunohost.org/ci/badges/mailman.status.svg) ![](https://dash.yunohost.org/integration/mailman.svg) | -| | Sympa | [](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://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://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 + mypads | [](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://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://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://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://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://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://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://github.com/YunoHost-Apps/mattermost_ynh) ![](https://ci-apps.yunohost.org/ci/badges/mattermost.status.svg) ![](https://dash.yunohost.org/integration/mattermost.svg) | -| Framatrad | ? | Non packagé | -| Framatube | Peertube | [](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/YunoHost-Apps/svgedit_ynh) ![](https://ci-apps.yunohost.org/ci/badges/svgedit.status.svg) ![](https://dash.yunohost.org/integration/svgedit.svg) | -| Framavox | Loomio | Non packagé | -| Framemo | Scrumblr | [](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://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://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/YunoHost-Apps/shaarli_ynh) ![](https://ci-apps.yunohost.org/ci/badges/shaarli.status.svg) ![](https://dash.yunohost.org/integration/shaarli.svg) | - -### Voir aussi - -- [Liste complète des applications packagées](/apps) -- [La roadmap 'Dégooglisons'](https://github.com/YunoHost/issues/milestone/13) - diff --git a/apps_overview.md b/apps_overview.md deleted file mode 100644 index fa0e33f1..00000000 --- a/apps_overview.md +++ /dev/null @@ -1,33 +0,0 @@ -# Applications - -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 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. - -Applications can be installed and managed through the webadmin interface in 'Applications' or through commands of the `yunohost app` category. - -## Application lists - -From the technical point of view, applications are public code repository (such as [this one](https://github.com/YunoHost-Apps/wordpress_ynh)). Existing applications are indexed using "application lists". Those lists can be managed in Applications > Install > Manage applications lists or with commands such as `yunohost app fetchlist`. - -The full list of application can be browsed at [this page](/apps). - -## Integration and quality levels - -Automated tests are being run regularly to test the integration and quality of all official apps, as well as community apps who were declared to be 'working'. The result is a level between 0 and 7, 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). - -## LDAP / SSO integration - -Applications may support integration with the LDAP / Single Sign On system, such that users who connects to the user portal can be automatically logged in all those apps. Some applications however do not support this as it can be either not implemented in the upstream, or the package didn't work on this part yet. - -## 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 > Install, and select again the application to install. - -## User access management - -Access to apps can be restricted to some users only. 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`. - -## Packaging applications - -If you want to learn or contribute to app packaging, please check the [contributor documentation](contributordoc). diff --git a/apps_overview_fr.md b/apps_overview_fr.md deleted file mode 100644 index 795ba4ea..00000000 --- a/apps_overview_fr.md +++ /dev/null @@ -1,33 +0,0 @@ -# Applications - -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 doivent être packagées manuellement par les packageurs/mainteneurs d'applications. Les applications peuvent être intégrées avec YunoHost pour gérer les mise à jour, la sauvegarde/restauration et l'intégration LDAP/SSO, entre autres. - -Les applications peuvent être installées et gérées via l'interface webadmin dans la partie 'Applications', ou via les commandes de la catégorie `yunohost app`. - -## Listes d'applications - -Du point de vue technique, les applications sont des dépôts de code public (comme [celui-ci](https://github.com/YunoHost-Apps/wordpress_ynh)). Les applications existantes sont indexées à l'aide de "listes d'applications". Ces listes peuvent être gérées dans Applications > Installer > Gérer les listes d'applications, ou avec des commandes telles que `yunohost app fetchlist`. - -La liste des applications existantes peut être consultée sur [cette page](/apps). - -## 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 officielles, ainsi que les applications communautaires qui ont été déclarées "working". Le résultat est un niveau entre 0 et 7, 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). - -## 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 peuvent être automatiquement authentifiés sur toutes ces applications. Certaines applications ne le supportent pas car cette fonctionnalité n'est, soit pas implémentée en amont du logiciel de l'application, soit le mainteneur n'a pas encore travaillé sur cette partie. - -## 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 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`. - -## Packaging d'applications - -Si vous voulez apprendre ou contribuer à l'empaquetage des applications, veuillez consulter la [documentation des contributeurs](contributordoc). diff --git a/appsdoc.md b/appsdoc.md deleted file mode 100644 index ac28678c..00000000 --- a/appsdoc.md +++ /dev/null @@ -1,117 +0,0 @@ -- [Adminer](app_adminer) -- [Airsonic](app_airsonic) -- [Ampache](app_ampache) -- [Anarchism](app_anarchism) -- [Anfora](app_anfora) -- [Archivist](app_archivist) -- [Baïkal](app_baikal) -- [Bitwarden](app_bitwarden) -- [Bibliogram](app_bibliogram) -- [Bludit](app_bludit) -- [Blogotext](app_blogotext) -- [Borg](app_borg) -- [BoZoN](app_bozon) -- [Calibre-Web](app_calibreweb) -- [Cheky](app_cheky) -- [CiviCRM](app_civicrm_drupal7) -- [CodiMD](app_codimd) -- [Collabora](app_collabora) -- [Collabora (in Docker)](app_collaboradocker) -- [Concret5](app_concrete5) -- [Cowyo](app_cowyo) -- [Custom Webapp](app_my_webapp) -- [Diagrams.net](app_diagramsnet) -- [Discourse](app_discourse) -- [Distbin](app_distbin) -- [Dokuwiki](app_dokuwiki) -- [Dolibarr](app_dolibarr) -- [Dotclear 2](app_dotclear2) -- [Drupal](app_drupal) -- [Drupal 7](app_drupal7) -- [Etherpad (with mypads's plugin)](app_etherpad_mypads) -- [Fallback](app_fallback) -- [FirefoxSync](app_ffsync) -- [Fireflyiii](app_firefly-iii) -- [Flarum](app_flarum) -- [FluxBB](app_fluxbb) -- [Framaforms](app_framaforms) -- [FreshRSS](app_freshrss) -- [Friendica](app_friendica) -- [Funkwhale](app_funkwhale) -- [Garradin](app_garradin) -- [Gitea](app_gitea) -- [GitLab](app_gitlab) -- [GitLab Runner](app_gitlab-runner) -- [Glowing Bear](app_glowing_bear) -- [Gogs](app_gogs) -- [Gotify](app_gotify) -- [Grav](app_grav) -- [Halcyon](app_halcyon) -- [Haste](app_haste) -- [HedgeDoc](app_hedgedoc) -- [Hextris](app_hextris) -- [Horde](app_horde) -- [Hubzilla](app_hubzilla) -- [InvoiceNinja](app_invoiceninja) -- [Jappix](app_jappix) -- [Jirafeau](app_jirafeau) -- [Jitsi](app_jitsi) -- [JupyterLab](app_jupyterlab) -- [Keeweb](app_keeweb) -- [Kresus](app_kresus) -- [Leed](app_leed) -- [Limesurvey](app_limesurvey) -- [Lstu](app_lstu) -- [Lufi](app_lufi) -- [Lutim](app_lutim) -- [Lychee](app_lychee) -- [Mattermost](app_mattermost) -- [Mailman](app_mailman) -- [Mantis](app_mantis) -- [Matomo](app_matomo) -- [Mattermost](app_mattermost) -- [Mediawiki](app_mediawiki) -- [Mindmaps](app_mindmaps) -- [Minetest](app_minetest) -- [Minidlna](app_minidlna) -- [Mobilizon](app_mobilizon) -- [Moodle](app_moodle) -- [Mumble](app_mumbleserver) -- [Navidrome](app_navidrome) -- [Netdata](app_netdata) -- [Nextcloud](app_nextcloud) -- [Noalyss](app_noalyss) -- [OnlyOffice](app_onlyoffice) -- [Opensondage](app_opensondage) -- [OSticket](app_osticket) -- [Peertube](app_peertube) -- [PHPmyadmin](app_phpmyadmin) -- [PHPsysinfo](app_phpsysinfo) -- [Pihole](app_pihole) -- [Piwigo](app_piwigo) -- [Pleroma](app_pleroma) -- [Plume](app_plume) -- [Pluxml](app_pluxml) -- [PrivateBin](app_privatebin) -- [Radicale](app_radicale) -- [Rainloop](app_rainloop) -- [Searx](app_searx) -- [Shaarli](app_shaarli) -- [Shellinabox](app_shellinabox) -- [Simple-torrent](app_simple-torrent) -- [Slingcode](app_slingcode) -- [Sogo](app_sogo) -- [Spip](app_spip) -- [Strut](app_strut) -- [Transmission](app_transmission) -- [TinyTinyRSS](app_ttrss) -- [Unattended upgrades](app_unattended_upgrades) -- [Wallabag2](app_wallabag2) -- [Weblate](app_weblate) -- [Wekan](app_wekan) -- [Wiki.js](app_wikijs) -- [Webtrees](app_webtrees) -- [WordPress](app_wordpress) -- [Yunofav](app_yunofav) -- [Zerobin](app_zerobin) -- (Note that you can add a new page here if you want to start document in another `app`...) diff --git a/backup.md b/backup.md deleted file mode 100644 index 611cf67d..00000000 --- a/backup.md +++ /dev/null @@ -1,170 +0,0 @@ -# Backing up your server and apps - -Backing up your server, apps and data is an important concern when administrating a server. This protects you from unexpected events that could happen (server lost in a fire, database corruption, loss of access, server compromised...). The backup policy you will put in place depends of the importance of the services and data hosted. For instance you won't care too much about having backup on a test server, but you will care about having a backup of critical data of your association or company, and having this backup *in a different physical place*. - -## Backups in the context of YunoHost - -YunoHost comes with a backup system, that allows to backup (and restore) system configurations and data (e.g. mails) 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.gz` archive containing all relevant files. In the future, YunoHost plans to support [Borg](https://www.borgbackup.org/) which is a more flexible, efficient and powerful solution. - -## Creating backups - -### From the webadmin - -You can easily create backup archives from the webadmin by going in 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](/images/backup.png) - -### From the command line - -You can create a new backup archive with the command line. Here are a few simple example 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 mails - - ```bash - yunohost backup create --system data_mail - ``` - -- Backing up mails and wordpress - - ```bash - yunohost backup create --system data_mail --apps wordpress - ``` - -For more informations and options about backup creation, consult `yunohost backup create --help`. You can also list system parts that can be backuped with `yunohost hook list backup`. - -### Apps-specific configuration - -Some apps such as Nextcloud may be related to a large quantity of data. If you want you can backup the app without the user data. This practice is referred to "backing up only the core" (of the app). -When performing an upgrade, apps with large quantity of data will, usually, do a backup without those data. - -To manually disable the backup of large data, for application that implement that feature, you can set the variable `BACKUP_CORE_ONLY`. To do so, the variable have to be set before the backup command: `sudo BACKUP_CORE_ONLY=1 yunohost backup create --apps nextcloud`. Be careful though that mean you will have to backup user data yourself. But doing so, you will be able to do incremental or differential backups of this large amount of data (which is not an option provided by yunohost yet). - -## Downloading and uploading backups - -After creating backup archives, it is possible to list and inspect them via the corresponding views in the webadmin, or via `yunohost backup list` and `yunohost backup info ` from the command line. By default, backups are stored in `/home/yunohost.backup/archives/`. - -Currently, the most accessible way to download archives is to use the program FileZilla as explained in [this page](/filezilla). - -Alternatively, a solution can be to install Nextcloud or a similar app and configure it to be able to access files in `/home/yunohost.backup/archives/` from a web browser. - -One solution consists in using `scp` (a program based on [`ssh`](/ssh)) to copy files between two machines via the command line. Hence, from a machine running GNU/Linux, you should be able to run the following to download a specific backup: - -```bash -scp admin@your.domain.tld:/home/yunohost.backup/archives/.tar.gz ./ -``` - -Similarly, you can upload a backup from a machine to your server with: - -```bash -scp /path/to/your/.tar.gz admin@your.domain.tld:/home/yunohost.backup/archives/ -``` - -## Restoring backups - -### 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](/images/restore.png) - -### From the command line - -From the command line, you can run `yunohost backup restore ` (without the `.tar.gz`) 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 for instance `yunohost backup restore --apps wordpress` which will restore only the wordpress app. - -### Constraints - -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. - -### Restoring during the postinstall - -One specific feature is the ability to restore a full archive *instead* of the postinstall step. This makes it useful when you want to reinstall a system entirely from an existing backup. To be able to do this, you will need to upload the archive on the server and place it in `/home/yunohost.backup/archives`. Then, **instead of** `yunohost tools postinstall` you can run: - -```bash -yunohost backup restore -``` - -Note: If your archive isn't in `/home/yunohost.backup/archives`, you can create the directory, move the archive into it, and restore it like this: - -```bash -mkdir -p /home/yunohost.backup/archives -mv /path/to/ /home/yunohost.backup/archives/ -yunohost backup restore -``` - -## To go futher - -### Storing backups on a different drive - -If you want, you can connect and mount an external drive to store backup archives on it (among other things). For this, plug in the drive and make sure that next time it is mounted automatically, by following the instruction at [Adding an external storage to your server](https://yunohost.org/#/external_storage). - -Then, move the existing archives and then add a symbolic link. - -```bash -PATH_TO_DRIVE="/media/my_external_drive" # For instance, depends of where you mounted your drive -mkdir $PATH_TO_DRIVE/yunohost_backup_archives # On your external drive create the folder where the backups will go -mv /home/yunohost.backup/archives $PATH_TO_DRIVE/yunohost_backup_archives # Move the archive folder including existing backups (if you made them) to the new folder on the external drive -ln -s $PATH_TO_DRIVE/yunohost_backup_archives /home/yunohost.backup/archives # Create a symbolic link from the old local folder to the new folder on the external drive -``` - -### Automatic backups - -You can add a simple cron job to trigger automatic backups regularly. For instance, to backup your wordpress weekly, create a file `/etc/cron.weekly/backup-wordpress` with the following content: - -```bash -#!/bin/bash -yunohost backup create --apps wordpress -``` - -then make it executable: - -```bash -chmod +x /etc/cron.weekly/backup-wordpress -``` - -Be careful what you backup exactly and when: you don't want to end up with your whole disk space saturated because you backuped 30 GB of data every day. - -#### Backing your server on a remote server - -You can follow this tutorial on the forum to setup Borg between two servers: - -Alternatively, the app Archivist allows to setup a similar system: - -#### Avoiding the backup of some folders -If needed, you can specify that some `/home/user` folders are left out of the `yunohost backup` command, by creating a blank file named `.nobackup` in them. - -#### Full backup with `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. For this, poweroff your ARM board, get the SD card in your computer then create a full image with something like: - -```bash -dd if=/dev/mmcblk0 of=./backup.img status=progress -``` - -(replace `/dev/mmcblk0` with the actual device of your SD card) - -You can also create a compressed image using gzip this way: -```bash -dd if=/dev/mmcblk0 | gzip > ./image.gz -``` diff --git a/backup_fr.md b/backup_fr.md deleted file mode 100644 index 9aa81911..00000000 --- a/backup_fr.md +++ /dev/null @@ -1,164 +0,0 @@ -# Sauvegarder son serveur et ses apps - -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 ê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*. - -## Les sauvegardes avec YunoHost - -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.gz` qui contiennent les fichiers pertinents. Pour le futur, YunoHost envisage de supporter nativement [Borg](https://www.borgbackup.org/) qui est une solution plus flexible, performante et puissante pour gérer des sauvegardes. - -## Créer des sauvegardes - -#### Depuis la webadmin - -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). - -![](/images/backup.png) - -#### Depuis 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`. - -#### Configuration spécifique à certaines apps - -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 manuellement 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 : `sudo BACKUP_CORE_ONLY=1 yunohost backup create --apps nextcloud`. Soyez prudent : il vous faudra alors sauvegarder vous-même les données des utilisateurs de Nextcloud. Choisir ce type de sauvegarde vous permettra de mettre en place manuellement des sauvegardes incrémentielles ou différentielles (que YunoHost ne permet pas encore de faire automatiquement). - -## Télécharger et téléverser des sauvegardes - -Après avoir créé des sauvegardes, il est possible de les lister et de les inspecter grâce aux vues correspondantes dans la webadmin, ou via `yunohost backup list` et `yunohost backup info ` depuis la ligne de commande. Par défaut, les sauvegardes sont stockées dans `/home/yunohost.backup/archives/`. - -À l'heure actuelle, la solution la plus accessible pour récupérer les sauvegardes est d'utiliser le programme FileZilla comme expliqué dans [cette page](/filezilla). - -Une autre solution alternative consiste à installer une application comme Nextcloud et à la configurer pour être en mesure d'accéder aux fichiers dans `/home/yunohost.backup/archives/` depuis un navigateur web. - -Enfin, 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@your.domain.tld:/home/yunohost.backup/archives/.tar.gz ./ -``` - -De façon similaire, vous pouvez téléverser une sauvegarde depuis une machine vers votre serveur avec : - -```bash -scp /path/to/your/.tar.gz admin@your.domain.tld:/home/yunohost.backup/archives/ -``` - -## Restaurer des sauvegardes - -#### Depuis la webadmin - -Allez dans Sauvegardes > Sauvegardes locales et sélectionnez l'archive. Vous pouvez ensuite choisir les différents éléments que vous voulez restaurer puis cliquer sur "Restaurer". - -![](/images/restore.png) - -#### Depuis la ligne de commande - -Depuis la ligne de commande, vous pouvez utiliser `yunohost backup restore ` (sans le `.tar.gz`) pour restaurer une archive. Tout comme `yunohost backup create`, cela restaure tout le contenu par défaut. Si vous souhaitez restaurer seulement certaines parties, vous pouvez utiliser par exemple `yunohost backup restore --apps wordpress` qui restaurera seulement l'app WordPress. - -#### Contraintes - -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. - -#### Restauration d'une archive à la place de la post-installation - -Une fonctionnalité particulière est la possibilité de restaurer une archive entière *à la place* de faire la post-installation. Ceci est utile pour réinstaller un système entièrement à partir d'une sauvegarde existante. Pour faire cela, il vous faudra d'abord téléverser l'archive sur le serveur et la placer dans `/home/yunohost.backup/archives`. - -Ensuite, **à la place de** `yunohost tools postinstall`, réalisez la restauration de l'archive téléversée par cette ligne de commande avec le nom de l'archive (sans le `.tar.gz`) : - -```bash -yunohost backup restore -``` - -Note: si votre archive n'est pas dans `/home/yunohost.backup/archives`, vous pouvez créer le répertoire et déplacer l'archive comme ceci : - -```bash -mkdir -p /home/yunohost.backup/archives -mv /chemin/vers/ /home/yunohost.backup/archives/ -yunohost backup restore -``` - -## Pour aller plus loin - -#### Stocker les archives sur un autre disque - -Si vous le souhaitez, vous pouvez connecter un disque externe à votre serveur pour (parmi d'autres choses) stocker les archives de backup dessus. Pour cela, il faut d'abord déplacer les archives existantes vers le disque, puis créer un lien symbolique: - -```bash -PATH_TO_DRIVE="/media/mon_disque_externe" # Par exemple - Tout dépend d'où le disque est monté -mv /home/yunohost.backup/archives $PATH_TO_DRIVE/yunohost_backup_archives -ln -s $PATH_TO_DRIVE/yunohost_backup_archives /home/yunohost.backup/archives -``` - -#### Sauvegardes automatiques - -Vous pouvez ajouter une tâche cron pour déclencher automatiquement une sauvegarde régulièrement. Par exemple pour sauvegarder l'application WordPress toutes les semaines, créez un fichier `/etc/cron.weekly/backup-wordpress` avec le contenu suivant : - -```bash -#!/bin/bash -yunohost backup create --apps wordpress -``` -puis rendez-le exécutable : - -```bash -chmod +x /etc/cron.weekly/backup-wordpress -``` - -Soyez prudent à propos de ce que vous sauvegardez et de la fréquence : il vaut mieux éviter de se retrouver avec un disque saturé car vous avez voulu sauvegarder 30 Go de données tous les jours... - -#### Sauvegarder sur un serveur distant - -Vous pouvez suivre ce tutoriel sur le forum pour mettre en place Borg entre deux serveurs : https://forum.yunohost.org/t/how-to-backup-your-yunohost-server-on-another-server/3153 - -Il existe aussi l'application Archivist qui permet un système similaire : https://forum.yunohost.org/t/new-app-archivist/3747 - -#### Éviter de sauvegarder certains dossiers -Si besoin, vous pouvez spécifier que certains dossiers `home` d'utilisateurs ne soient pas sauvegardés par la commande `yunohost backup`, en créant un fichier vide nommé `.nobackup` à l'intérieur. - -#### Backup complet avec `dd` - -Si vous êtes sur une carte ARM, une autre méthode pour créer une sauvegarde complète consiste à créer une image (copie) de la carte SD. Pour cela, éteignez votre serveur, insérez la carte SD dans votre ordinateur et créez une image avec une commande comme : - -```bash -dd if=/dev/mmcblk0 of=./backup.img status=progress -``` - -(remplacez `/dev/mmcblk0` par le vrai nom de votre carte SD) - -Vous pouvez aussi compresser l'image à l'aide de gzip : - -```bash -dd if=/dev/mmcblk0 | gzip > ./image.gz -``` diff --git a/blacklist_forms.md b/blacklist_forms.md deleted file mode 100644 index f67eeaa5..00000000 --- a/blacklist_forms.md +++ /dev/null @@ -1,20 +0,0 @@ -# Blacklist forms - -It could happen sometimes that your IP is blacklisted by some email provider, or anti-spam services. - -## Test your server - -* [Test sending an email](https://www.mail-tester.com) -- [Test from an IP address](http://whatismyipaddress.com/blacklist-check) - -Here is some forms that could help you remove your IP address from these lists - -## Email providers - -* [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) - -## Anti-spam services - -* [SpamHaus](http://www.spamhaus.org/lookup) -* http://whatismyipaddress.com/blacklist-check diff --git a/boot_and_graphical_install.md b/boot_and_graphical_install.md deleted file mode 100644 index de3b7dec..00000000 --- a/boot_and_graphical_install.md +++ /dev/null @@ -1,52 +0,0 @@ -# Graphical installation - -Now that your YunoHost install medium, you can start with the installation. - -## 1. Plug the network cable - -If you want the network configuration to be set up automatically, you have to plug your server with an **Ethernet** cable **right behind your main router**. - -The wireless connections are not supported yet, and if you use intermediate routers, the network ports opening will not be automatic: Your server will not be accessible externally. - - -## 2. Boot on CD / USB stick - -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 `````` - -## 3. Launch graphical installation - -You should see a screen like this: - - - - -* Select `Graphical install` - -* Select your language, your location and your keyboard layout - -* If a partitioning screen appears, confirm. - -
Caution: This will totally erase the data on your hard drive
- - -* Let the installer do the rest, it will download required packages and install them. - -
If it fails, you probably have an Internet connection issue. -Check that your computer is physically connected and retry.
- -* It should reboot automatically. - -## 4. Log in - -After the reboot, you should see a black screen with a few words asking you to -log in. You can log with the following credentials : - -* User: **root** -* Password: **yunohost** - -## 5. Proceed to post-installation - -Post-install documentation - - diff --git a/boot_and_graphical_install_fr.md b/boot_and_graphical_install_fr.md deleted file mode 100644 index 96f1287d..00000000 --- a/boot_and_graphical_install_fr.md +++ /dev/null @@ -1,50 +0,0 @@ -# Installation graphique - -Maintenant que vous possédez un support YunoHost, vous pouvez procéder à l’installation. - -## 1. Brancher le câble réseau - -Si vous souhaitez que la configuration réseau soit configurée automatiquement, vous devez brancher votre serveur avec un câble **Ethernet** directement **derrière votre routeur (ou box) principal**. - -Les connexions sans-fil ne sont pas supportées pour le moment, et si vous utilisez des routeurs intermédiaires, l’ouverture des ports réseau ne se fera pas automatiquement : votre serveur ne sera pas accessible depuis l’extérieur. - -## 2. Démarrer sur le CD/la clé USB - -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** en pressant l’une des touches suivantes (dépendant de votre ordinateur) : -```<Échap>```, ``````, ``````, ``````, `````` or `````` - -## 3. Lancer l’installation graphique - -Vous devriez voir un écran comme ça : - - - - -* Sélectionnez `Graphical install` - -* Sélectionnez votre langue, votre localisation et votre agencement de clavier. - -* Si un écran de partitionnement apparaît, confirmez simplement. - -
Attention : Cette opération effacera totalement les données sur votre disque dur
- -* Laissez l’installateur faire le reste, il téléchargera les paquets requis et les installera. - -
Si cette opération échoue, vous avez probablement un problème de connexion à Internet. -Vérifiez que votre serveur est bien branché et réessayez.
- -* L’ordinateur devrait redémarrer automatiquement à la fin de l’installation. - -## 4. Log in - -Après avoir redémarré, votre machine devrait afficher un écran noir avec -quelques mots vous invitant à vous identifier. Vous pouvez utiliser les -identifiants suivants : - -* User: **root** -* Password: **yunohost** - -## 5. Procéder à la post-installation - -Documentation de la post-installation - diff --git a/burn_or_copy_iso.md b/burn_or_copy_iso.md deleted file mode 100644 index eabe16e9..00000000 --- a/burn_or_copy_iso.md +++ /dev/null @@ -1,46 +0,0 @@ -# Flashing the YunoHost ISO - -Now that you downloaded the ISO image of YunoHost, you should flash/burn it on a physical medium. Typically, this is done on a **USB stick** or an **SD card**. - - - - - - -### (Recommended) With Etcher - -Download Etcher for your operating system and install it. - - - -Plug your USB stick, select your YunoHost ISO and click "Flash" - -### With UNetbootin - -Download UNetbootin for your operating system and install it. - - - -Put your USB stick on, select your YunoHost ISO and click "OK" - - -### 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 -``` - -### 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/) diff --git a/burn_or_copy_iso_fr.md b/burn_or_copy_iso_fr.md deleted file mode 100644 index ecc60dff..00000000 --- a/burn_or_copy_iso_fr.md +++ /dev/null @@ -1,45 +0,0 @@ -# Flasher l’ISO YunoHost - -Maintenant que vous avez téléchargé l’image ISO de YunoHost, vous devez la mettre sur un support physique. Classiquement, il s'agit d'une **Clé USB** ou d'une **Carte SD**. - - - - - - ---- - -### (Recommandé) Avec Etcher - -Téléchargez Etcher pour votre système d'exploitation et installez-le. - - - -Branchez votre clef USB, selectionnez l'ISO YunoHost puis cliquez sur 'Flash' - -### Avec UNetbootin - -Téléchargez UNetbootin pour votre système d'exploitation et installez-le. - - - -Branchez votre clef USB, selectionnez l'ISO YunoHost puis cliquez sur 'OK' - -### Avec `dd` - -Si vous êtes familier avec la ligne de commande, il est possible de flasher la clef USB ou carte SD avec `dd`. Vous pouvez identifier le nom du périphérique avec `fdisk -l` ou `lsblk`. Une carte SD s'apelle typiquement `/dev/mmcblk0`. ATTENTION à faire attention de prendre le bon nom ! - -```bash -# Remplacer /dev/mmcblk0 par le nom de votre périphérique -dd if=/chemin/de/yunohost.iso of=/dev/mmcblk0 -``` - -### 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/) diff --git a/commandline.md b/commandline.md deleted file mode 100644 index 47bbb507..00000000 --- a/commandline.md +++ /dev/null @@ -1,30 +0,0 @@ -# Administrate YunoHost in command line - -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 it is more difficult to learn. - -In the context of YunoHost, or system administration in general, the CLI is commonly used to remotely control machines after connecting through [connecting to it via SSH](/ssh). - -
-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/commandline_es.md b/commandline_es.md deleted file mode 100644 index eb240053..00000000 --- a/commandline_es.md +++ /dev/null @@ -1,30 +0,0 @@ -# Administrar YunoHost con la interfaz de línea de comandos - -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. - -En el contexto de YunoHost, o de la administración de sistemas en general, la línea de comandos comúnmente se utiliza después de haberse [conectado en SSH](/ssh). - -
-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. \ No newline at end of file diff --git a/commandline_fr.md b/commandline_fr.md deleted file mode 100644 index 003d524f..00000000 --- a/commandline_fr.md +++ /dev/null @@ -1,30 +0,0 @@ -# Administrer YunoHost en ligne de commande - -L'interface en ligne de commande (CLI) est, en informatique, la manière originale (et plus technique) d'interagir avec un ordinateur comparé aux interfaces graphiques. La ligne de commande est généralement considéré comme plus complète, puissante et efficace que les interfaces graphiques, bien que plus difficile à apprendre. - -Dans le contexte de YunoHost, ou de l'administration système en général, la ligne de commande est communément utilisée après s'être [connecté en SSH](/ssh). - -
-Fournir un tutorial complet sur la ligne de commande est bien au dela du cadre de la documentation de YunoHost : pour cela, référez-vous à des tutoriaux comme [celui-ci](https://doc.ubuntu-fr.org/tutoriel/console_ligne_de_commande) ou [celui-ci (en)](http://linuxcommand.org/). Mais soyez rassuré qu'il n'y a pas besoin d'être un expert pour commencer à l'utiliser ! -
- -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 en 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 - ^ ^ ^ ^ - | | | | - categorie action argument options -``` - -N'hesitez 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. 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/contribute.md b/contribute.md deleted file mode 100644 index b5887fb3..00000000 --- a/contribute.md +++ /dev/null @@ -1,93 +0,0 @@ -# Get involved - -

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

- ---- - -
-
-   Spread the word -
-
-Talk about software freedom, [self-hosting](/selfhosting) and YunoHost to your relatives and at your work. We rely on Datalove evangelists like you <3 -
-
- ---- - -
-
-   Testing -
-
-We need people able to test YunoHost deeply. If you find a bug, try to identify it, and report it on our bug tracker. -
-
- ---- - -
-
-   Helping users -
-
-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. -
-
- ---- - -
-
-   Coding -
-
-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). -
-
- ---- - -
-
-   Localization -
-
-Get involved by making YunoHost interfaces available in your language. -Get started! -
-
- ---- - -
-
-   Write -
-
-Improve this documentation by [writing new pages](/write_documentation) or translating existing ones to your language. -
-
- -
- -
-
-   Packaging -
-
-Extend YunoHost capabilities by [packaging new services and web applications](/packaging_apps). -Have a look of [what has been done yet](/apps)! -
-
- ---- - -
-

In any case, please come chat with us on [the dev chatroom](/chat_rooms) :-)

- diff --git a/contribute_ar.md b/contribute_ar.md deleted file mode 100644 index 8ad74232..00000000 --- a/contribute_ar.md +++ /dev/null @@ -1,92 +0,0 @@ -#
المساهمة
- -

-إنّ مصير واي يونوهوست YunoHost يُقرّره أناس و أنتم مِن بين هؤلاء -

- ---- - -
-
-   تحدثوا عن المشروع مِن حولكم -
-
-تحدثوا عن البرمجيات الحرّة، تحدثوا عن واي يونوهوست YunoHost مع أقربائكم و زملائكم في العمل. حدّثوهم عن [الإستضافة الذاتية](/selfhosting)، نحن بحاجة و واثقون مِن قدرات محبي البيانات مثلكم 3>
-
- ---- - -
-
-   جَرّبُوا -
-
-نحن بحاجة إلى تجريب حثيث لواي يونوهوست YunoHost. فإن صادفتم مشكلة، يرجى القيام بتحديد الخلل و ثم الإبلاغ عنه عبر -مُتعقب الأخطاء. -
-
- ---- - -
-
-   ساعدوا المستخدمِين -
-
-Notre support est communautaire et s’appuie sur des contributeurs comme vous. Venez simplement sur le [salon d'aide](/help), ou tentez de répondre aux questions du Forum. Vous pouvez aussi organiser des ateliers de formation. -
-
- ---- - -
-
-   أكتبوا الشفرة -
-
-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) ! -
-
- ---- - -
-
-   ترجِموا -
-
-ساهموا في توفير واجهات واي يونوهوست YunoHost بلغتكم. إبدأوا الآن ! -
-
- ---- - -
-
-   أكتبوا -
-
-ساهموا في تحسين هذا الدليل و ذلك [باقتراح صفحات جديدة](/write_documentation) أو بترجمة صفحاته إلى لغتكم. -
-
- ---- - -
-
-   ساهموا في التحزيم -
-
-É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) ! -
-Un [salon de développement](xmpp:dev@conference.yunohost.org?join) est également disponible. -
-
- ---- - -
-
-

على أي حال تعالوا و انضموا إلى [غرفة المحادثة الخاصة بالمطوّرين](xmpp:dev@conference.yunohost.org?join) إن كنتم ترغبون في المساهمة :-)

- diff --git a/contribute_fr.md b/contribute_fr.md deleted file mode 100644 index dd785aaa..00000000 --- a/contribute_fr.md +++ /dev/null @@ -1,90 +0,0 @@ -# Contribuer - -

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

- ---- - -
-
-   Passez le mot -
-
-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 -
-
- ---- - -
-
-   Testez -
-
-Nous avons besoin de tester YunoHost profondément. Si vous trouvez un bug, essayez de l’identifier, puis reportez-le sur notre bug tracker. -
-
- ---- - -
-
-   Aidez les utilisateurs -
-
-Notre support est communautaire et s’appuie sur des contributeurs comme vous. Venez simplement sur le [salon d'aide](/help), ou tentez de répondre aux questions du Forum. Vous pouvez aussi organiser des ateliers de formation. -
-
- ---- - -
-
-   Codez -
-
-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) ! -
-
- ---- - -
-
-   Traduisez -
-
-Participez en rendant les interfaces de YunoHost disponibles dans votre langue. Lancez-vous ! -
-
- ---- - -
-
-   Écrivez -
-
-Améliorez cette documentation en [proposant de nouvelles pages](/write_documentation) ou en traduisant les existantes dans votre langue. -
-
- ---- - -
-
-   Packagez -
-
-É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) ! -
-
- ---- - -
-
-

Dans tous les cas, venez discuter avec nous sur [le salon de développement](/chat_rooms) :-)

- diff --git a/contributordoc.md b/contributordoc.md deleted file mode 100644 index 1f76aa15..00000000 --- a/contributordoc.md +++ /dev/null @@ -1,45 +0,0 @@ -# Contributor documentation - -* [General ways of contributing to YunoHost](/contribute) -* [Chat rooms](/chat_rooms) -* [Writing documentation](/write_documentation) - * [Documentation writing guide](/doc_writing_guide) - * [Markdown guide](/doc_markdown_guide) - * [Power your code using Git & GitHub](/doc_use_git) -* Application packaging - * [Apps wishlist](/apps_wishlist) - * [General introduction to app packaging](/packaging_apps_start) - * [Technical introduction to app packaging](/packaging_apps) - * [How to use Git to package apps](/packaging_apps_git) - * [Setting up a dev environment with VirtualBox](/packaging_apps_virtualbox) - * [Manifest](/packaging_apps_manifest) - * [Scripts](/packaging_apps_scripts) - * [Arguments management](/packaging_apps_arguments_management) - * [Arguments format](/packaging_apps_arguments_format) - * [NGINX configuration](/packaging_apps_nginx_conf) - * [User groups and permissions](/groups_and_permissions) - * [Multi-instance](/packaging_apps_multiinstance) - * [Helpers](/packaging_apps_helpers) - * [Trap usage](/packaging_apps_trap) - * [App permissions](/packaging_apps_permissions) - * [Adding your app to the apps list](https://github.com/YunoHost/Apps/#contributing) - * [Advanced packaging features](/packaging_apps_advanced) - * [Application actions](/packaging_apps_actions) - * [Application configuration panel](/packaging_apps_config_panel) - * Quality tests - * [Package linter](https://github.com/YunoHost/package_linter) - * [Package check](https://github.com/YunoHost/package_check) - * [Applications levels](/packaging_apps_levels) - * [App Continuous Integration](https://ci-apps.yunohost.org) - * [App CI dashboard](https://dash.yunohost.org/appci/branch/stable) - * [App Continuous Integration for packagers](/packaging_apps_ci) - * [YEP - YunoHost Enhancement Proposals](/packaging_apps_guidelines) -* [Contributing to the YunoHost core](/dev) - * [Setting up a dev environment with ynh-dev](https://github.com/YunoHost/ynh-dev/blob/master/README.md) - * [Deb build chain](https://github.com/YunoHost/vinaigrette/blob/master/README.md) - * Image building - * [x86 ISO](https://github.com/YunoHost/cd_build) - * [Raspberry Pi images](https://github.com/YunoHost/rpi-image) - * [Other ARM board images](https://github.com/YunoHost/arm-images) -* [Using the YunoHost API outside of the webadmin](/admin_api) -* [A discussion about shell variable scope](/shell_variables_scope) diff --git a/contributordoc_fr.md b/contributordoc_fr.md deleted file mode 100644 index eb093a84..00000000 --- a/contributordoc_fr.md +++ /dev/null @@ -1,46 +0,0 @@ -# Guide du contributeur - -* [Liste des façons de contribuer à YunoHost](/contribute) -* [Salons de discussion](/chat_rooms) -* [Écrire de la documentation](/write_documentation) - * [Guide de redaction de la documentation](/doc_writing_guide) - * [Guide Markdown](/doc_markdown_guide) - * [Propulser son code avec Git & GitHub](/doc_use_git) -* Packaging d'application - * [Liste d'applications souhaitées par la communauté](/apps_wishlist) - * [Introduction générale au packaging d'apps](/packaging_apps_start) - * [Introduction technique au packaging d'apps](/packaging_apps) - * [Comment utiliser Git pour packager les applications](/packaging_apps_git) - * [Déployer un environnement de développement avec VirtualBox](/packaging_apps_virtualbox) - * [Manifest](/packaging_apps_manifest) - * [Scripts](/packaging_apps_scripts) - * [Gestion des arguments](/packaging_apps_arguments_management) - * [Format des arguments](/packaging_apps_arguments_format) - * [Configuration NGINX](/packaging_apps_nginx_conf) - * [Groupes et permissions](/groups_and_permissions) - * [Multi-instance](/packaging_apps_multiinstance) - * [Fonctions utiles](/packaging_apps_helpers) - * [Utilisation de 'trap'](/packaging_apps_trap) - * [App permissions](/packaging_apps_permissions) - * [Ajouter son application à la liste des apps](https://github.com/YunoHost/Apps/#contributing) - * [Feature de packaging avancées](/packaging_apps_advanced) - * [Actions pour une application](/packaging_apps_actions) - * [Panneau de configuration pour une application](/packaging_apps_config_panel) - * Tests de qualité - * [Package linter](https://github.com/YunoHost/package_linter) - * [Package check](https://github.com/YunoHost/package_check) - * [Niveaux des applications](/packaging_apps_levels) - * [Intégration continue des apps](https://ci-apps.yunohost.org) - * [Tableau de bord du CI des apps](https://dash.yunohost.org/appci/branch/stable) - * [Intégration continue pour packagers](/packaging_apps_ci) - * [YEP - YunoHost Enhancement Proposals](/packaging_apps_guidelines) -* [Contribuer à la partie "core" de YunoHost](/dev) - * [Déployer un environnement de dev avec ynh-dev](https://github.com/YunoHost/ynh-dev/blob/master/README.md) - * [Construction des paquets debian](https://github.com/YunoHost/vinaigrette/blob/master/README.md) - * [Feuilles de route du projet](https://github.com/YunoHost/issues/milestones?direction=asc&sort=title&state=open) - * Construction des images - * [x86 ISO](https://github.com/YunoHost/cd_build) - * [Images Raspberry Pi](https://github.com/YunoHost/rpi-image) - * [Autres images pour cartes ARM](https://github.com/YunoHost/arm-images) -* [Utiliser l'API YunoHost en dehors de la webadmin](/admin_api) -* [Une discussion sur la portée des variables en bash](/shell_variables_scope) diff --git a/diagnostic.md b/diagnostic.md deleted file mode 100644 index c4d74bd9..00000000 --- a/diagnostic.md +++ /dev/null @@ -1,10 +0,0 @@ -# Diagnose YunoHost functioning - -To diagnose that all critical aspects of your server are properly configured, -you should run a diagnosis from the webadmin in the "Diagnosis" section. (This -feature was added in YunoHost 3.8). - -TODO: elaborate on the fact that the diagnosis runs periodically, sends an email -to root which is forwarded to the very first user created, and that issues -should either be fixed or ignored (if they are understood/not relevant) -otherwise an email will be sent twice a day.. diff --git a/diagnostic_fr.md b/diagnostic_fr.md deleted file mode 100644 index 9e47e78f..00000000 --- a/diagnostic_fr.md +++ /dev/null @@ -1,13 +0,0 @@ -# Diagnostic du bon fonctionnement de YunoHost - -Pour vérifier que tous les aspects critiques de votre serveur sont correctement -configurés, il est recommandé d'utiliser le système de diagnostic disponible -dans la webadmin de YunoHost. (Cette fonctionnalité a été ajoutée dans la version -3.8) - -Quelques points à retenir: -* Le diagnostique tourne périodiquement -* Un email est envoyé à root, qui est normalement forwardé vers le premier utilisateur créé -* Les problèmes trouvés doivent soient être réglé, soit ignorés (si ils sont -compris ou ne sont pas pertinents) autrement un mail est envoyé deux fois par -jour. 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/docker.md b/docker.md deleted file mode 100644 index bbf8122b..00000000 --- a/docker.md +++ /dev/null @@ -1,23 +0,0 @@ -# Docker and YunoHost - -
- -YunoHost doesn’t support Docker officially since issues with versions 2.4+. -In question, YunoHost 2.4+ doesn’t work anymore on Docker -because YunoHost requires systemd and Docker has chosen to not support it natively (and -there are other problems link to the firewall and services). - -
- -## Community images - -However, community images exist and are available on Docker Hub: - - * AMD64 (classic) - * https://hub.docker.com/r/domainelibre/yunohost/ (YunoHost v4+) - * I386 (old computers) - * https://hub.docker.com/r/domainelibre/yunohost-i386/ (YunoHost v4+) - * ARMV7 (Raspberry Pi 2/3 ...) - * https://hub.docker.com/r/domainelibre/yunohost-arm/ (YunoHost v4+) - * ARMV6 (Raspberry Pi 1) - * https://hub.docker.com/r/tuxalex/yunohost-armv6/ (old yunoHost version) diff --git a/docker_fr.md b/docker_fr.md deleted file mode 100644 index 548b4819..00000000 --- a/docker_fr.md +++ /dev/null @@ -1,23 +0,0 @@ -# Docker et YunoHost - -
- -YunoHost ne supporte plus officiellement Docker depuis les problèmes rencontrés avec la version 2.4+. -En cause, YunoHost dépend désormait de systemd et docker a décidé qu’ils ne le -supporteraient pas nativement (et il y a d'autres problèmes liés au firewall et aux -services). - -
- -## Images communautaires - -Cependant il existe des images communautaires disponibles sur Docker Hub : - - * AMD64 (classique) - * https://hub.docker.com/r/domainelibre/yunohost/ (YunoHost v4+) - * I386 (anciens pc) - * https://hub.docker.com/r/domainelibre/yunohost-i386/ (YunoHost v4+) - * ARMV7 (Raspberry Pi 2/3 ...) - * https://hub.docker.com/r/domainelibre/yunohost-arm/ (YunoHost v4+) - * ARMV6 (Raspberry Pi 1) - * https://hub.docker.com/r/tuxalex/yunohost-armv6/ (ancienne version de YunoHost) diff --git a/docs.md b/docs.md deleted file mode 100644 index 9dd3f53e..00000000 --- a/docs.md +++ /dev/null @@ -1,34 +0,0 @@ -# Documentation - -

-YunoHost's documentation has 2 different sections: -

- -
- -
- Administrator guide -

Including installation, server management and application management

-
- -
- Contributor guide -

Which contains everything you have to know about us and the way we work

-
- -
- -* Project's life: - * [Frequently asked questions](/faq) - * [Project news](/news) - * [Project organization](/project_organization) - * [Project budget](/project_budget) - * [Forum](https://forum.yunohost.org) - * [Chat rooms](/chat_rooms) - * [Communication](/communication) - * [Support / Help](/help) - * [Sponsors and partners](/sponsors_partners) - -* Use example: - * [YunoHost for non-profit organisations](/use_case_non-profit_organisations) - * (FR) [YunoHost for CHATONS (A collective of independant, transparent, open, neutral and ethical hosters providing FLOSS-based online services.)](https://wiki.chatons.org/doku.php/yunohost) diff --git a/docs_ar.md b/docs_ar.md deleted file mode 100644 index ae7479ad..00000000 --- a/docs_ar.md +++ /dev/null @@ -1,31 +0,0 @@ -#
الدليل
- -

-دليل واي يونوهوست YunoHost يرتكز أساسًا على ثلاثة محاور : -

- -
- -
- دليل المدير -

يتطرق إلى طريقة التنصيب و إدارة السيرفر و التطبيقات

-
- -
- دليل المساهم -

يحتوي على كافة المعلومات التي تخصنا و أسلوب عملنا و مساهمتنا

-
- -
- -* Project's life: - * [Frequently asked questions](/faq) - * [Project organization](/project_organization) - * [Blog](https://forum.yunohost.org/c/announcement) - * [Forum](https://forum.yunohost.org) - * [Chat rooms](/chat_rooms) - * [Communication](/communication) - * [Support / Help](/help) - -* استخدم مثال: - * [YunoHost للمنظمات غير الهادفة للربح](/use_case_non-profit_organisations) diff --git a/docs_de.md b/docs_de.md deleted file mode 100644 index d3bf8e07..00000000 --- a/docs_de.md +++ /dev/null @@ -1,31 +0,0 @@ -# Documentation - -

-Die YunoHost Dokumentation ist in 2 Bereiche aufgeteilt: -

- -
- -
- Handbuch für Administratoren -

Befasst sich mit den Installationsschritten und der Verwaltung von Server und Apps.

-
- -
- Handbuch für Mitwirkende -

Alles, was du über uns und unsere Art zu arbeiten wissen musst.

-
- -
- -* Das Projektleben: - * [Häufig gestellte Fragen](/faq) - * [Projektorganisation](/project_organization) - * [Blog](https://forum.yunohost.org/c/announcement) - * [Forum](https://forum.yunohost.org) - * [Chaträume](/chat_rooms) - * [Kommunikation](/communication) - * [Support / Hilfe](/help) - -* Verwenden Sie ein Beispiel: - * [YunoHost für gemeinnützige Organisationen](/use_case_non-profit_organisations) diff --git a/docs_fr.md b/docs_fr.md deleted file mode 100644 index d7a641f2..00000000 --- a/docs_fr.md +++ /dev/null @@ -1,34 +0,0 @@ -# Documentation - -

-La documentation de YunoHost s’articule autour de deux sections : -

- -
- -
- Guide de l’administrateur -

Incluant l’installation, la gestion du serveur et des applications

-
- -
- Guide du contributeur -

Qui contient tout ce que vous devez savoir à propos de nous et de notre manière de travailler

-
- -
- -* Vie du projet : - * [Foire aux questions](/faq) - * [Nouvelles du projet](/news) - * [Organisation du projet](/project_organization) - * [Budget previsionnel](/project_budget) - * [Forum](https://forum.yunohost.org) - * [Salons de discussions](/chat_rooms) - * [Communication extérieure](/communication) - * [Support / Aide](/help) - * [Mécénes et partenaires](/sponsors_partners_fr) - -* Exemple d'utilisation : - * [YunoHost pour les organisations à but non lucratif](/use_case_non-profit_organisations) - * [YunoHost pour les CHATONS (Collectif des Hébergeurs Alternatifs, Transparents, Ouverts, Neutres et Solidaires)](https://wiki.chatons.org/doku.php/yunohost) diff --git a/docs_it.md b/docs_it.md deleted file mode 100644 index 4061eb11..00000000 --- a/docs_it.md +++ /dev/null @@ -1,31 +0,0 @@ -# Documentazione - -

-La documentazione di YunoHost ha 2 differenti sezioni: -

- -
- -
- Guida di amministrazione -

Include l'installazione, la gestione del server e delle applicazioni

-
- -
- Guida del contributore -

Contiene tutto quello che devi sapere su di noi e su come lavoriamo

-
- -
- -* Vita del progetto : - * [Frequently asked questions](/faq) - * [Project organization](/project_organization) - * [Blog](https://forum.yunohost.org/c/announcement) - * [Forum](https://forum.yunohost.org) - * [Chat rooms](/chat_rooms) - * [Communication](/communication) - * [Supporto / Aiuto](/help) - -* Usa l'esempio : - * [YunoHost per le organizzazioni senza scopo di lucro](/use_case_non-profit_organisations) diff --git a/domains.md b/domains.md deleted file mode 100644 index c98175cb..00000000 --- a/domains.md +++ /dev/null @@ -1,47 +0,0 @@ -# Domains, DNS conf and certificate - -YunoHost allows you to manage and serve several domains on the same server. 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. Each time you add a domain, it is expected that you bought it (or own it) on a domain registrar, so you can manage the [DNS configuration](dns). The exception is the [`.nohost.me`, `.noho.st` and `ynh.fr` domains](/dns_nohost_me) which are paid for by the YunoHost Project, and can be directly integrated with YunoHost thanks to an automated dynDNS setup. (To limit costs and abuses, each instance may only have one of these domains setup at any given time). - -The domain chosen during the postinstall is defined as the main domain of the server : this is where the SSO and the web admin interface 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`. - -Finally, take note that, in the context of YunoHost, there is no hierarchy between the domains it knows. In the previous example, you may add a third domain `foo.yolo.com` - but it would be considered as a domain independent of `yolo.com`. - -## Non-latin characters - -If your domain has special, non-latin characters, you need to use its [internationalized version](https://en.wikipedia.org/wiki/Internationalized_domain_name) through [Punycode](https://en.wikipedia.org/wiki/Punycode). You can use [this converter](https://www.charset.org/punycode), and use the converted domain name in your YunoHost configuration. - -## DNS configuration - -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 adresses called IP addresses (such as `11.22.33.44`). For this translation (and other features) to work, you must carefully configure DNS records. - -YunoHost can generate a recommended DNS configuration for each domain, including elements needed for mail and XMPP. The recommended DNS configuration is available in the webadmin via Domain > (the domain) > DNS configuration, or with the command `yunohost domain dns-conf the.domain.tld`. - -## 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. - -## Subpaths vs. individual domains per apps - -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. 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) -``` - diff --git a/domains_fr.md b/domains_fr.md deleted file mode 100644 index f1469e4c..00000000 --- a/domains_fr.md +++ /dev/null @@ -1,46 +0,0 @@ -# Domaines, configuration DNS et certificats - -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 instantannée XMPP. - -Les domaines peuvent être gérés dans la section 'Domaine' 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ôliez) le domaine, de sorte que vous puissiez gérer la [configuration DNS](dns) ce 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). - -Le domaine choisi lors de la postinstall est défini comme le domaine principal du serveur : c'est là que le SSO et l'interface d'administration web 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`. - -## Caractères non latins - -Si votre domain contient des caractères spéciaux, non latins, vous devez utiliser sa [version internationalisée](https://fr.wikipedia.org/wiki/Nom_de_domaine_internationalis%C3%A9) en [Punycode](https://fr.wikipedia.org/wiki/Punycode). Vous pouvez utiliser [ce convertisseur](https://www.charset.org/punycode), et utiliser le nom de domaine converti dans YunoHost. - -## 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 Domaine > (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. - -## 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é. Cela peut sembler plus joli pour les utilisateurs finaux, mais est généralement considéré comme plus compliqué et moins efficace dans le contexte de YunoHost, car vous devez ajouter un nouveau domaine à chaque fois. Néanmoins, certaines applications peuvent avoir besoin d'un domaine entier qui leur est dédié, pour des raisons techniques. - -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) -``` diff --git a/email_configure_client_fr.md b/email_configure_client_fr.md deleted file mode 100644 index 185173df..00000000 --- a/email_configure_client_fr.md +++ /dev/null @@ -1,43 +0,0 @@ -## Configurer un client email - -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 reproduire et corriger le problème !) - -### Réglages génériques - -Voici les éléments que vous devrez entrer pour configurer manuellement votre client email (`domain.tld` fait référence à ce qui est après le @ dans votre adresse email, et `nom_dutilisateur` ce qui est avant @). - -| Protocole | Port | Chiffrement | Authentification | Login | -| :--: | :-: | :--: | :--: | :--: | -| IMAP | 993 | SSL/TLS | Mot de passe normal | `nom_dutilisateur` (sans `@domain.tld`) | -| SMTP | 587 | STARTTLS | Mot de passe normal | `nom_dutilisateur` (sans `@domain.tld`) | - -### 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 possiblement accepter des certificats pour que tout fonctionne correctement.) - - - - -* [Gérer les alias mails](https://support.mozilla.org/en-US/kb/configuring-email-aliases) - -### Configurer K-9 Mail (sur Android) - -Suivez les instructions suivantes. (Comme pour Thunderbird, il vous faudra peut-être accepter des certificats à un moment) - - - - - - -### Configure Dekko (on 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 ! - - - - - diff --git a/email_configure_relay.md b/email_configure_relay.md deleted file mode 100644 index 1d4e7e3d..00000000 --- a/email_configure_relay.md +++ /dev/null @@ -1,77 +0,0 @@ -# Configure 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 a SMTP relay. - -## What is a SMTP relay? - -A 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, it will operate in a totally transparent manner, 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. - -
- -It's important to note that using a SMTP relay has to be seen as a (big) compromise in the world of self-hosting. Indeed, when using a SMTP relay, you will not only let a third party send emails on your behalf, but also be able to access to the full content of all the emails you'll send. Be also aware that a 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. -
- -## How to use a 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 on a 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! - -
- -From now on, a non trusty SMTP relay provider could send emails from your main domain without telling you. -
- -### Step 3: Setup YunoHost correctly - -In order to setup your YunoHost to use your SMTP relay, you will have to configure three things: -1. Your SMTP relay URL (for this tutorial we will use `smtprelay.tld`) -2. Your SMTP relay username (for this tutorial we will use `username`) -3. Your SMTP relay password (for this tutorial we will use `password`) - -Your SMTP relay will obviously provide you with these three 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 smtp.relay.host -v smtprelay.tld -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 -``` - -Your SMTP relay is now configured! - -
- -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](mail-tester.com) to check for any problem or discrepancy. diff --git a/external_storage.md b/external_storage.md deleted file mode 100644 index d9c436c7..00000000 --- a/external_storage.md +++ /dev/null @@ -1,121 +0,0 @@ -# Adding an external storage to your server - -## Introduction - -If you did not allocate a large partition to `/home` before installing YunoHost, and that your apps require a lot of spaces, you can still add an external driver after setting up your system. - -## Before starting - -Even though these steps are relatively simple, they may appear technical. In any case, they require you to **take your time**. - -You should be connected as root on your server, for instance via [SSH](/ssh). (Note: being logged as `admin`, you can upgrade to `root` with the command `sudo su`) - -It can be useful to [create a backup](/backup) of your install before starting. - -You should also have your external drive (plugged via USB or SATA). - -## 1. Connect and identify the disk - -Start by connecting your drive to the system. You shall then identify which name is used by the system to refer to the disk. - -You can do this with this command : - -```bash -lsblk -``` - -It may yield something like this : - -```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 an SD card of 16Go (the partitions `mmcblk0p1` et `mmcblk0p2` are used as the boot partition `/boot` and the system partition `/`). The external drive is `sda` which is about 1TB and has only one partition `sda1` which is not mounted (no "MOUNTPOINT"). - -
- On a different setup, your system partition might be `sda` and so your external drive might be `sdb` for instance. -
- -## 2. (Optional) Format the disk - -This operation is optional if your disk has already been formatted. - -First let's create a new partition on the disk : - -```bash -fdisk /dev/YOUR_DISK -``` - -then sucessfully type `n`, `p`, `1`, `Enter`, `Enter`, then `w` to create the new partition. - -Check with `lsblk` that your disk really does contain a single partition. - -Before you can use your disk it has to be formatted. - -You should be aware that **formating a drive implies to erasing every data on it !** If your disk is already "clean", you may ignore this step. - -To format the partition : - -```bash -mkfs.ext4 /dev/YOUR_DISK1 -# then 'y' to validate -``` - -(Replace `YOUR_DISK1` by the name of the first partition on the disk. Be careful not to do any mistake here, as it can mean erasing data on your main system if you are using the wrong name ! In the previous example, the name of our disk was `sda`.) - - -## 3. Mount the disk - -"Mounting" a disk corresponds to making it effectively accessible in the filesystem tree. Here, we choose the arbitrary name `/media/storage` but you can choose a different name (for instance, `/media/my_disk` ... ). - -Let's start by creating the directory : - -```bash -mkdir /media/storage -``` - -Then we can manually mount the disk with : - -```bash -mount /dev/YOUR_DISK1 /media/storage -``` - -(Here, `/dev/YOUR_DISK1` corresponds to the first partition on the disk) - -Next, you should be able to create files in `/media/storage`, and, for instance, add `/media/storage` as an external drive in Nextcloud. - -## 4. Mount the disk automatically at boot - -So far, we only mounted the disk manually. But it can be nice and useful to have it being mounted automatically at each boot. - -Let's start by finding the UUID (universal identifier) of the disk with : - -```bash -blkid | grep "/dev/YOUR_DISK1:" -# Should return something like -# /dev/sda1:UUID="cea0b7ae-2fbc-4f01-8884-3cb5884c8bb7" TYPE="ext4" PARTUUID="34e4b02c-02" -``` - -Let's add a line in the file `/etc/fstab` which manages which disks are mounted at boot. We open this file with `nano` : - -```bash -nano /etc/fstab -``` - -And add this line : - -```bash -UUID="cea0b7ae-2fbc-4f01-8884-3cb5884c8bb7" /media/storage ext4 defaults,nofail 0 0 -``` - -(this line should be adapated according to previous info and choices) - -Use Ctrl+X then `y` to save. - -You can then reboot the system to test if the disk is mounted automatically. - diff --git a/external_storage_fr.md b/external_storage_fr.md deleted file mode 100644 index 2283324f..00000000 --- a/external_storage_fr.md +++ /dev/null @@ -1,120 +0,0 @@ -# Ajouter un stockage externe à son serveur - -## Introduction - -Si vous n'avez pas dédié une grande partition à `/home` avant d'installer YunoHost, et que vos applications nécessitent beaucoup d'espace disque, vous pouvez toujours ajouter un disque externe *a posteriori*. - -## Avant de commencer - -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**. - -Vous devez également être connecté 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`) - -Il peut être utile de [faire un backup](/backup) de votre installation. - -Vous devez également disposer d'un disque dur supplémentaire (branché en USB ou en SATA). - -## 1. Connecter et identifier le disque - -Commencez par brancher ce disque dur à 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` corresponds à 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"). - -
- 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. -
- -## 2. (Optionnel) Formater le disque - -Cette opération est optionnelle si votre disque est déjà formaté. - -Créons une nouvelle 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é. - -Attention : **formater un disque implique de supprimer toutes les données inscrites dessus !** 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. 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 `sda`.) - - -## 3. Monter le disque - -"Monter" un disque corresponds à le rendre effectivement accessible dans l'arborescence des fichiers. Nous allons choisir arbitrairement de monter le disque dans `/media/stockage` mais vous pouvez le nommer différement (par exemple `/media/mon_disque` ...). - -Commençons par cŕeer le répertoire : -```bash -mkdir /media/stockage -``` - -Puis nous pouvons monter le disque manuellement avec : - -```bash -mount /dev/VOTRE_DISQUE1 /media/stockage -``` - -(Ici, `/dev/VOTRE_DISQUE1` corresponds à la première partition sur le disque) - -Ensuite, vous devriez pouvoir créer des fichiers dans `/media/stockage`, et, par exemple, ajouter `/media/stockage` comme périphérique externe dans Nextcloud. - -## 4. Monter le disque automatiquement au démarrage - -Jusqu'ici, nous avons monté manuellement le disque. Cependant, il peut être utile de configurer le système pour qu'il monte automatiquement le disque après un démarrage. - -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 cette ligne : - -```bash -UUID="cea0b7ae-2fbc-4f01-8884-3cb5884c8bb7" /media/stockage ext4 defaults,nofail 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 voir si le disque est monté automatiquement. - diff --git a/hardware.md b/hardware.md deleted file mode 100644 index 017d16ee..00000000 --- a/hardware.md +++ /dev/null @@ -1,14 +0,0 @@ -# Hardware - -YunoHost can be installed on the following hardware: -- ARM boards (Raspberry Pi, Olinuxino LIME1 & 2, Orange Pi, etc.); -- 'Old' desktop computers or laptops; -- Remote servers, a.k.a Virtual Private Servers (VPS). - -Corresponding installation guides can be found on [this page](/install). - -### Minimum requirements - -* 500 MHz CPU -* 512 MB RAM (recommended : 1 GB in order to run all the services and apps properly) -* 8 GB storage capacity (recommended : 32 GB to store mails and documents) diff --git a/hardware_de.md b/hardware_de.md deleted file mode 100644 index 198f0ee6..00000000 --- a/hardware_de.md +++ /dev/null @@ -1,14 +0,0 @@ -# Hardware - -YunoHost kann auf folgender Hardware installiert werden: -- ARM Boards (Raspberry Pi, Olinuxino LIME1 & 2, Orange Pi, etc.) ; -- 'Alte' Desktop Computer oder Laptops/Notebooks ; -- Remote servers, auch bekannt als Virtual Private Servers (VPS). - -Entsprechende Installationsanleitungen finden Sie auf [dieser Seite](/install). - -### Minimale Voraussetzungen - -* 500 MHz CPU -* 512 MB RAM (empfohlen : 1 GB um alle Apps und Programme schnell ausführen zu können) -* 8 GB Speicher/HDD (empfohlen : 32 GB bei Nutzung als Mail oder Dokumentenserver) diff --git a/hardware_es.md b/hardware_es.md deleted file mode 100644 index 10b21f70..00000000 --- a/hardware_es.md +++ /dev/null @@ -1,14 +0,0 @@ -# Hardware - -YunoHost puede ser instalado en este hardware : -- Tarjetas ARM (Raspberry Pi, Olinuxino LIME1 & 2, Orange Pi, etc.) ; -- 'Viejos' ordenadores de escritorio ou portátiles ; -- Servidores remotos, también llamado Virtual Private Servers (VPS). - -Los guías de instalación se encuentran en [esta página](/install). - -### Configuración minimal - -* Procesador 500 MHz -* 512 Mo de RAM (recomendado : 1Go para que los servicios y las aplicaciones funcionen correctamente -* 8 Go de espacio de almacenamiento (recomendado : 32 Go para poder almacenar emails y documentos) diff --git a/hardware_fr.md b/hardware_fr.md deleted file mode 100644 index 9301fd69..00000000 --- a/hardware_fr.md +++ /dev/null @@ -1,14 +0,0 @@ -# Matériel - -YunoHost peut être installé sur les types de matériel suivants : -- Cartes ARM (Raspberry Pi, Olinuxino LIME1 & 2, Orange Pi, etc.) ; -- 'Vieux' ordinateurs de bureau ou portables ; -- Serveurs distants, aussi appelé Virtual Private Servers (VPS). - -Les guides d'installations peuvent être trouvés sur [cette page](/install). - -### Configuration minimale - -* Processeur 500 MHz -* 512 Mo de RAM (recommandé : 1 Go pour pouvoir faire tourner les services et applications correctement) -* 8 Go d'espace de stockage (recommandé : 32 Go pour pouvoir stocker emails et documents) diff --git a/help.md b/help.md deleted file mode 100644 index 9e1f0be5..00000000 --- a/help.md +++ /dev/null @@ -1,59 +0,0 @@ -# Looking for help? - -

Connect to the support chatroom

-
-
-ProTips™ -
    -
  • Don't ask to ask, just ask !
  • -
  • Be patient, it can take a few minutes before someone sees your messages.
  • -
-
- - - -
-
-Note : this room is available via IRC (#yunohost on freenode - using kiwiirc), via XMPP (support@conference.yunohost.org), or Matrix (#freenode_#yunohost:matrix.org - using Riot) -
- -

... or ask on the forum !

- -
- -
- -

You've found a bug ?

- -
-
-Please report it on our bugtracker or contact the developers

- - -
-
-Note : you can also connect to the devrooms, using your favorite XMPP client, to
-dev@conference.yunohost.org and apps@conference.yunohost.org
-or with a Matrix client to
-#freenode_#yunohost-dev:matrix.org
-
- - - diff --git a/help_fr.md b/help_fr.md deleted file mode 100644 index 8e1290c2..00000000 --- a/help_fr.md +++ /dev/null @@ -1,61 +0,0 @@ -# Besoin d’aide ? - -

Connectez-vous au salon de support

-
-
-ProTips™ -
    -
  • Pas besoin de demander si vous pouvez poser une question - posez-la directement !
  • -
  • Soyez patient, cela peut prendre plusieurs minutes avant que quelqu'un remarque vos messages.
  • -
-
- - - -
-
-Note : ce salon est accessible via IRC (#yunohost sur freenode en utilisant Kiwiirc), via XMPP (support@conference.yunohost.org), ou Matrix (#freenode_#yunohost:matrix.org - en utilisant Element). -
- -

... ou demandez sur le forum !

- -
- -
- -

Vous avez trouvé un bug ?

- -
-
-Vous pouvez rapporter le bug sur le bugtracker ou contacter les développeurs

- - -
-
-Note : vous pouvez aussi vous connecter aux salons de dev, via votre client XMPP favori, à
-dev@conference.yunohost.org et apps@conference.yunohost.org
-ou bien via votre client matrix préféré, à
-#freenode_#yunohost-dev:matrix.org
-
- - - diff --git a/images.md b/images.md deleted file mode 100644 index 384a60cd..00000000 --- a/images.md +++ /dev/null @@ -1,122 +0,0 @@ -# Pre-installed images - - -This page requires Javascript enabled to display properly :s. -
-
-
- -N.B. : 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! - -
-
- - - - - - 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/PluXml_logo.png b/images/PluXml_logo.png index ccb4d96a..b5ce5498 100644 Binary files a/images/PluXml_logo.png and b/images/PluXml_logo.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/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/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/boot_screen.png b/images/boot_screen.png index 7aee93e0..f8c4f2b8 100644 Binary files a/images/boot_screen.png and b/images/boot_screen.png differ diff --git a/images/checkstart.png b/images/checkstart.png deleted file mode 100644 index 17fc4dc4..00000000 Binary files a/images/checkstart.png and /dev/null 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/dekko_config_1.png b/images/dekko_config_1.png old mode 100755 new mode 100644 diff --git a/images/dekko_config_2.png b/images/dekko_config_2.png old mode 100755 new mode 100644 diff --git a/images/dekko_config_3.png b/images/dekko_config_3.png old mode 100755 new mode 100644 diff --git a/images/dekko_config_4.png b/images/dekko_config_4.png old mode 100755 new mode 100644 diff --git a/images/df_h.png b/images/df_h.png deleted file mode 100644 index c4f1f8b7..00000000 Binary files a/images/df_h.png and /dev/null 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/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/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/free_m.png b/images/free_m.png deleted file mode 100644 index 2e4bf5e5..00000000 Binary files a/images/free_m.png and /dev/null 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/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/images_check.sh b/images/images_check.sh old mode 100755 new mode 100644 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/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/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/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/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/orga/organization_schema.png b/images/organization_schema.png similarity index 100% rename from orga/organization_schema.png rename to images/organization_schema.png 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_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/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/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/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/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.jpg b/images/rpi1.jpg new file mode 100644 index 00000000..bcb6fc62 Binary files /dev/null and b/images/rpi1.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/services_status.png b/images/services_status.png deleted file mode 100644 index 6b3a340f..00000000 Binary files a/images/services_status.png and /dev/null differ diff --git a/images/slingcode_logo.svg b/images/slingcode_logo.svg old mode 100755 new mode 100644 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/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/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/virtualbox_3.png b/images/virtualbox_3.png index 846f95c8..6b4aed77 100644 Binary files a/images/virtualbox_3.png and b/images/virtualbox_3.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/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/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/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/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_admin_etat_ip.png b/images/ynh_admin_etat_ip.png deleted file mode 100644 index 465ccd15..00000000 Binary files a/images/ynh_admin_etat_ip.png and /dev/null differ diff --git a/images/ynh_login.png b/images/ynh_login.png deleted file mode 100644 index 70c2878b..00000000 Binary files a/images/ynh_login.png and /dev/null 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 index 190617b2..bd844e5a 100644 Binary files a/images/yunohost_package.png and b/images/yunohost_package.png differ diff --git a/images_ar.md b/images_ar.md deleted file mode 100644 index f9213a43..00000000 --- a/images_ar.md +++ /dev/null @@ -1,115 +0,0 @@ -# الصور - -
-
- - - - - - - diff --git a/images_fr.md b/images_fr.md deleted file mode 100644 index 97b8cf2e..00000000 --- a/images_fr.md +++ /dev/null @@ -1,123 +0,0 @@ -# Images - - -Cette page requiert que Javascript soit activé pour s'afficher correctement :s. -
-
-
- -N.B. : 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 ! - -
-
- - - - - - - diff --git a/install.md b/install.md deleted file mode 100644 index 39ec8e87..00000000 --- a/install.md +++ /dev/null @@ -1,90 +0,0 @@ -# Installation guide - -There are multiple ways to install YunoHost. The process may differ slightly depending on whether it takes place at home or on a remote server, and depending on the hardware used: **[See the requirements](/hardware)** - -This page lists a few installation guides. - ---- - -

Give it a try

- -
- - - - - -
- - - - - - -
- ---- - -

Install at home

- - - -
- - ---- - -

Install on a remote server

- -
- Local associative ISP near you might be able to provide you with a *Virtual Private Server* (VPS), managed by human beings who respect users and care about [Net Neutrality](https://en.wikipedia.org/wiki/Net_neutrality) ! Check out [this page](https://db.ffdn.org/) for more information. -
- - - -
- ---- - -

Advanced / others

- - diff --git a/install_ar.md b/install_ar.md deleted file mode 100644 index 04705db4..00000000 --- a/install_ar.md +++ /dev/null @@ -1,83 +0,0 @@ -#
دليل التنصيب
- -
-يمكن تنصيب واي يونوهوست بِعدّة طُرُق و أساليب. فطريقة التنصيب تختلف قليلاً فقط إذا ما كُنتم تودون تثّبيتَهُ مَحلّياً في المنزل أو عَنْ بُعد و كذا نوع الجهاز : **[إطّلعوا على الأجهزة المتوافقة](/hardware)** -
-
-تقوم هذه الصفحة بإحصاء الطرق المختلفة للتنصيب مُرتبةً حسب المواضيع. -
- ---- - -

التجريب

- - - -
- ---- - -

عملية النتصيب في المنزل

- - - -
- ---- - -

التنصيب عن بُعد

- -
- بإِمكانْ جمعيات مُزَوِّدي الإنترنت القريبة منكم أن تُوفّر لكم *خادوماً إفتراضياً خاصاً* (VPS) ، خادوم يُديره بشرٌ و يحترمُ قيمةَ المُستخدِمين و [حِياديّةَ الإنترنت](https://fr.wikipedia.org/wiki/Neutralit%C3%A9_du_r%C3%A9seau) ! إطّلعوا على [هذه الصفحة](https://db.ffdn.org/) للمزيد مِن المعلومات. -
- - - -
- ---- - -

طُرُق مُتَقدِّمة / أخرى

- - diff --git a/install_es.md b/install_es.md deleted file mode 100644 index a6b597e8..00000000 --- a/install_es.md +++ /dev/null @@ -1,81 +0,0 @@ -# Guía de instalación - -Existen varias maneras de instalar YunoHost. El método y el hardware difieren un poco si quieres instalarlo en tu casa o en acceso remoto : **[ver el hardware compatible](/hardware)** - -Esta página enumera varios tipos de instalaciones, clasificados por categorías. - ---- - -

Probar

- - - -
- ---- - -

Instalar en casa

- - - -
- ---- - -

Instalación remota

- -
- Proveedores de Internet asociativos cerna de ti pueden proponerte un *Servidor Virtual Privado* (VPS), administrado por humanos que respetan los usuarios y la [Neutralitad de Internet](https://es.wikipedia.org/wiki/Neutralidad_de_red) ! Ver [esta página](https://db.ffdn.org/) por mas informaciones. -
- - - -
- ---- - -

Avanzado / otros

- - diff --git a/install_fr.md b/install_fr.md deleted file mode 100644 index f1e4b827..00000000 --- a/install_fr.md +++ /dev/null @@ -1,84 +0,0 @@ -# Guide d’installation - -Il existe plusieurs manières d’installer YunoHost. La méthode d’installation diffère légèrement si vous souhaitez l’installer chez vous ou à distance, et du matériel utilisé : **[voir le matériel compatible](/hardware)** - -Cette page liste plusieurs types d’installations, classés par catégories. - ---- - -

Essayer

- - - -
- ---- - -

Installer à la maison

- - - -
- ---- - -

Installer à distance

- -
- Des FAI associatifs près de chez vous sont peut-être capable de vous fournir un *Serveur Privé Virtuel* (VPS), géré par des humains qui respectent les utilisateurs et la [Neutralité du Net](https://fr.wikipedia.org/wiki/Neutralit%C3%A9_du_r%C3%A9seau) ! Voir [cette page](https://db.ffdn.org/) pour plus d'informations. -
- - - -
- ---- - -

Avancé / autres

- - diff --git a/install_iso.md b/install_iso.md deleted file mode 100644 index 43575844..00000000 --- a/install_iso.md +++ /dev/null @@ -1,36 +0,0 @@ -# Install on a regular computer - -*Find other ways to install YunoHost **[here](/install)**.* - -### Requirements - - - - - -* A x86-compatible hardware dedicated to YunoHost: laptop, nettop, netbook, desktop. -You can use any computer with **256MB RAM or more**. -* Another computer to read this guide and access to your server. -* A [reasonable ISP](/isp), preferably with a good and unlimited upstream bandwidth -* A **USB stick** of at least 1GB capacity **OR** a standard **blank CD** -* ***Particular case*** : If your server has no graphic card, [prepare iso for booting with serial port](https://github.com/luffah/debian-mkserialiso). - ---- - -## Installation steps - - -0. Download the YunoHost ISO image - -1. Burn the ISO image on a USB stick - -2. Boot the machine and run the installation - -3. Proceed with the initial configuration (post-installation) - ---- - -To connect directly to your computer or with [SSH](/ssh) (only on local network: -* User: **root** -* Password: **yunohost** - diff --git a/install_iso_de.md b/install_iso_de.md deleted file mode 100644 index f25dc7d6..00000000 --- a/install_iso_de.md +++ /dev/null @@ -1,35 +0,0 @@ -# Instalation auf einem normalen Computer - -*Um andere Wege zu finden, YunoHost zu instalieren, klicke **[hier](/install)**.* - -### Anforderungen - - - - - -* Einen x86-kompatibele Hardware für YunoHost: Laptop, Netbook oder Desktop. -Du kannst jeden Computer nutzen der **256MB RAM oder mehr** hat. -* Einen anderen Computer, um diesen Guide zu lesen und der auf deinen Server zugreift. -* Einen [angemessenen Internet-Provider](/isp), am besten mit guter und unlimitierter Bandweite. -* Einen **USB Stick** mit mindestens 1GB Speicher **ODER** eine normale **Blanko-CD** -* ***Sonderfall*** : Wenn dein Server keine Grafikkarte hat, bereite die ISO für einen Start mit Seriellem Port vor (https://github.com/luffah/debian-mkserialiso). - ---- - -## Instalationsschritte - - -0. Lade die YunoHost ISO Imagedatei herunter image - -1. Brenne die Iso-Datei auf einen USB-Stick oder eine CD - -2. Starte die Maschine und führe die Instalation aus - -3. Fahre fort mit der Erstkonfiguration (Nachinstalation) - ---- - -Um dich direkt mit dem Computer oder mit [SSH](/ssh) (only on local network) zu verbinden: -* Benutzername: **root** -* Passwort: **yunohost** diff --git a/install_iso_es.md b/install_iso_es.md deleted file mode 100644 index fe9f9896..00000000 --- a/install_iso_es.md +++ /dev/null @@ -1,38 +0,0 @@ -# Instalación en un ordenador - -*Encontrar otros medios de instalar YunoHost **[aquí](/install)**.* - -## Prerrequisitos - - - - - -* Un ordenador compatible x86 dedicado a YunoHost : portátil, netbook, ordenador de escritorio. Puedes reutilizar calquiera máquina con **256 Mo de RAM mínimo** -* Otro ordenador para examinar esta guía y acceder a tu servidor -* Un [proveedor de Internet ético](/isp), de preferencia con acceso de buena velocidad (ascendente) -* Una **memoria USB** con capacidad mínima de 1Go **O** un **CD en blanco** estándar -* ***Casos particulares*** : si tu servidor no tiene tarjeta gráfica, hay que preparar un ISO que se inicie sobre el puerto de serie](https://github.com/luffah/debian-mkserialiso). - ---- - -## Etapas de instalación - -0. Descargar la imagen ISO - -1. Copiar la imagen ISO - -2. Encender e instalar - -3. Post-instalación - ---- - -Para conectarse directamente al ordenador (únicamente en local) : -* Usuario : **root** -* Contraseña : **yunohost** - - -## Casos específicos / avanzados - -si el ordenador no tiene tarjeta gráfica pero sí tiene un puerto de serie : hay que modificar el ISO para un inicio con la consola de serie. Una solución es utilizar [un script que modifica las opciones de inicio](https://github.com/luffah/debian-mkserialiso). diff --git a/install_iso_fr.md b/install_iso_fr.md deleted file mode 100644 index 9b119b6e..00000000 --- a/install_iso_fr.md +++ /dev/null @@ -1,38 +0,0 @@ -# Installation sur ordinateur - -*Trouvez d’autres moyens d’installer YunoHost **[ici](/install)**.* - -## Prérequis - - - - - -* Un matériel compatible x86 dédié à YunoHost : portable, netbook, ordinateur. Vous pouvez réutiliser n’importe quelle machine avec **256 Mo de RAM minimum** -* Un autre ordinateur pour parcourir ce guide et accéder à votre serveur -* Un [fournisseur d’accès correct](/isp), de préférence avec une bonne vitesse de téléversement (débit montant) -* Une **clé USB** d’une capacité minimum d’1 Go **OU** un **CD vierge** standard -* ***Cas particulier*** : Si votre serveur n'a pas de carte graphique, il faut [préparer un ISO qui démarre sur le port série](https://github.com/luffah/debian-mkserialiso). - ---- - -## Étapes d’installation - -0. Télécharger l'image ISO de YunoHost - -1. Flasher l’image ISO sur une clef USB - -2. Démarrer la machine et installer YunoHost - -3. Effectuer la configuration initiale (post-installation) - ---- - -Pour se connecter directement sur l’ordinateur (uniquement en local) : -* Utilisateur : **root** -* Mot de passe : **yunohost** - - -## Cas spécifiques / avancés - -Si l'ordinateur n'a pas de carte graphique mais a un port série : il faut modifier l'ISO pour démarrer avec la console série. Une solution est d'utiliser [un script qui modifie les options de démarrage](https://github.com/luffah/debian-mkserialiso). diff --git a/install_iso_it.md b/install_iso_it.md deleted file mode 100644 index f4c702bc..00000000 --- a/install_iso_it.md +++ /dev/null @@ -1,36 +0,0 @@ -# Installazione in un computer - -*Altri modi per installare YunoHost **[Clicca qui](/install)**.* - -### Requisiti - - - - - -* Un computer con architettura x86: laptop, nettop, netbook, desktop. -Puoi usare qualsiasi computer con minimo 256 MB di ram**. -* Un altro computer per leggere questa guida e per accedere al tuo server. -* un [buon ISP](/isp), possibilmente con una banda illimitata. -* una **chiavetta USB** da almeno 1 GO **O** un classico **CD/DVD vuoto** -* ***casi particolari*** : se il tuo server non ha una scheda video, [prepara l'ISO per fare il boot con la porta seriale](https://github.com/luffah/debian-mkserialiso). - ---- - -## Installazione - - -0. Scarica l'ISO di YunoHost - -1. Scrivi l'immagine disco su una chiavetta USB - -2. Accendi il computer facendo il boot da USB - -3. Procedi con la prima configurazione (post-installation) - ---- - -To connect directly to your computer or with [SSH](/ssh) (only on local network) : -Per connettersi direttamente al computer o con [SSH](/ssh) (solo su rete locale) : -* User : **root** -* Password : **yunohost** diff --git a/install_it.md b/install_it.md deleted file mode 100644 index 94f95373..00000000 --- a/install_it.md +++ /dev/null @@ -1,89 +0,0 @@ -# Guida all'installazione - -Ci sono diverse maniere per installare YunoHost. Il procedimento può essere leggermente diverso a seconda che si esegua a casa o su un server remoto, e dipende dall'hardware usato: -**[Vedi i requisiti](/hardware)** - -Questa pagina elenca alcune guide all'installazione. - ---- - -

Provalo

- - - - - - - - -
- ---- - -

Installalo a casa

- - - -
- - ---- - -

Installalo su un server remoto

- -
- ISP locali potrebbero essere in grado di fornire un *Server Privato Vrituale* (VPS), gesito da esseri umani che rispettano gli utenti e si preoccupano della [Net Neutrality](https://en.wikipedia.org/wiki/Net_neutrality) ! Guarda [questa pagina](https://db.ffdn.org/) per maggiori informazioni. -
- - - -
- ---- - -

Avanzate / altri

- - - -
diff --git a/install_manually.md b/install_manually.md deleted file mode 100644 index 54bee66f..00000000 --- a/install_manually.md +++ /dev/null @@ -1,22 +0,0 @@ -# Installing YunoHost manually - -
-This procedure only works on **Debian 10** machines (with **kernel >= 3.12**)) -
- -Once you have access to a command line on your server (either directly or through SSH), you can install yunohost by running command as root : - -```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`)* - -Once the installation is finished, you may want to [**proceed to post-installation**](/postinstall) - ---- - -**Note for advanced users concerned with the `curl|bash` approach** - -If you strongly object to the `curl|bash` way (and similar commands) of installing software, 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). - diff --git a/install_manually_de.md b/install_manually_de.md deleted file mode 100644 index 00680e44..00000000 --- a/install_manually_de.md +++ /dev/null @@ -1,21 +0,0 @@ -# YunoHost manuell installieren - -
-Dieser Vorgang funktioniert nur unter **Debian 10** (mit **kernel >= 3.12**)) -
- -Sobald Du Zugriff auf die Kommandozeile auf Deinem Server hast (entweder direkt oder über SSH), kannst Du yunohost installieren, in dem Du das folgende Kommando als root ausführst: - -```bash -curl https://install.yunohost.org | bash -``` - -*(Falls `curl` noch nicht auf Deinem System installiert ist, musst Du es eventuell mit `apt install curl` installieren. Falls das Kommando fehlschlägt, ist eventuell ein `apt install ca-certificates` notwendig.)* - -Sobald die Installation abgeschlossen ist, fahre mit der [**Postinstallation**](/postinstall) fort. - ---- - -**Anmerkung für forgeschrittene Benutzer mit Sorge gegenüber dem `curl|bash` Ansatz** - -Falls Du stark gegen den `curl|bash` Weg (und ähnlicher Kommandos) zum installieren von Software eingestellt bist, empfehlen wir, ["Is curl|bash insecure?"](https://sandstorm.io/news/2015-09-24-is-curl-bash-insecure-pgp-verified-install) auf dem Sandstom Blog, und vielleicht [diese Diskussion auf Hacker News](https://news.ycombinator.com/item?id=12766350) zu lesen (beides Englisch). \ No newline at end of file diff --git a/install_manually_es.md b/install_manually_es.md deleted file mode 100644 index 128d6b24..00000000 --- a/install_manually_es.md +++ /dev/null @@ -1,22 +0,0 @@ -# Instalar YunoHost manualmente - -
-This procedure only works on **Debian 10** machines (with **kernel >= 3.12**)) -
- -Una vez que tienes acceso a tu servidor (directamente o con SSH), puedes instalar YunoHost ejecutando este comando como root : - -```bash -curl https://install.yunohost.org | bash -``` - -*(Si `curl` no está instalado en tu sistema, tal vez tendrás que instalarlo con `apt install curl`. De otro modo, si el comando no muestra nada, puedes intentar `apt install ca-certificates`)* - -Cuando la instalación esté terminada, habrá que [**proceder a la post-instalación**](/postinstall) - ---- - -**Nota para los usuarios expertos preocupados por el enfoque `curl|bash`** - -Si no te gusta utilizar `curl|bash` (ou comandos similares) para desplegar software, toma el tiempo de leer ["Is curl|bash insecure?"](https://sandstorm.io/news/2015-09-24-is-curl-bash-insecure-pgp-verified-install) en el blog de Sandstorm, y también [esta discusión en Hacker News](https://news.ycombinator.com/item?id=12766350). - diff --git a/install_manually_fr.md b/install_manually_fr.md deleted file mode 100644 index 101323ce..00000000 --- a/install_manually_fr.md +++ /dev/null @@ -1,22 +0,0 @@ -# Installer YunoHost manuellement - -
-Cette procédure fonctionne seulement sur des machines avec **Debian 10** (et **kernel >= 3.12**)) -
- -Une fois que vous avez accès à votre serveur (directement ou par SSH), vous pouvez installer YunoHost en exécutant cette commande en tant que root : - -```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`)* - -Une fois l'installation terminée, il vous faudra [**procéder à la post-installation**](/postinstall) - ---- - -**Note pour les utilisateurs avancés inquiets à propos de l'approche `curl|bash`** - -Si vous êtes suspicieux de la tendance à utiliser `curl|bash` (ou commandes similaires) pour déployer des logiciels, 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). - diff --git a/install_on_arm_board.md b/install_on_arm_board.md deleted file mode 100644 index 05b8e116..00000000 --- a/install_on_arm_board.md +++ /dev/null @@ -1,50 +0,0 @@ -# Install YunoHost on ARM board - -*Find other ways to install YunoHost **[here](/install)**.* - -
- - -
- -
-Before setting up a server at home, it is recommended that you know the [possible limitations imposed by your ISP](/isp). If they are too restrictive, you might consider using a VPN to bypass them. -
- -## Pre-requisites - -- An ARM board with 500MHz CPU and 512 MB of RAM; -- A power supply for your board; -- A microSD card: **8GB** capacity (at least) and **Class 10** speed rate are highly recommended (like the [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)); -- An ethernet cable (RJ-45) to connect your board to your router; -- A [reasonable ISP](/isp), preferably with a good and unlimited upload bandwidth. - ---- - -## Install with the pre-installed image (recommended) - -0. Download the pre-installed image for your board -
-If no pre-installed image exists for your board, you can follow the instructions to "Install on top of ARMbian" - -1. Flash the SD card with the image - -2. Power up the board and let it boot - -3. Connect to your server with SSH - -4. Proceed with the initial configuration (post-installation) - ---- - -## Install on top of ARMbian - -0. Download the ARMbian image for your board - -1. Flash the SD card with the image - -2. Plug & boot - -3. Connect to your server with SSH - -4. Follow the generic install procedure diff --git a/install_on_arm_board_es.md b/install_on_arm_board_es.md deleted file mode 100644 index 576b4930..00000000 --- a/install_on_arm_board_es.md +++ /dev/null @@ -1,49 +0,0 @@ -# Instalar YunoHost en una tarjeta ARM - -*Encontrar otros medios de instalar YunoHost **[aquí](/install)**.* - -
- - -
- -
-Antes de alojar tu propio servidor en tu casa, te recomendamos que consultes las [posibles restricciones impuestas por tu Proveedor de Internet](/isp). Si tu proveedor es demasiado restrictivo, puedes utilizar un VPN para eludir estas restricciones. -
- -- Una tarjeta ARM con un procesador de 500 MHz et 512 Mo de memoria RAM ; -- Un adaptador de corriente para alimentar la tarjeta ; -- Una tarjeta microSD : al menos **8 Go** y **Clase 10** (por ejemplo una [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; -- Un cable ethernet/RJ-45 para conectar la carte con el router / caja internet. (Con el Raspberry Pi 0, puedes conectar tu tarjeta con un cable OTG y un adaptador Wifi USB.) -- Un [proveedor de Internet ético](/isp), de preferencia con una buena velocidad de upload. - ---- - -## Instalación con la imagen pre-instalada (recomendada) - -0. Descargar la imagen pre-instalada para tu tarjeta ARM -
-Si no existe una imagen dedicada a tu tarjeta, puedes seguir la sección "Instalación encima de ARMbian". - -1. Poner la imagen en tu tarjeta SD - -2. Conectar y encender - -3. Conectarse en SSH - -4. Proceder a la post-instalación - ---- - -## Instalación encima de ARMbian - -0. Descargar la imagen ARMbian para tu tarjeta ARM - -1. Poner la imagen en tu tarjeta SD - -2. Conectar y encender - -3. Conectarse en SSH - -4. Proceder a la post-instalación genérica - diff --git a/install_on_arm_board_fr.md b/install_on_arm_board_fr.md deleted file mode 100644 index fb9481a0..00000000 --- a/install_on_arm_board_fr.md +++ /dev/null @@ -1,49 +0,0 @@ -# Installer YunoHost sur carte ARM - -*Toutes les autres façons d’installer YunoHost sont listées **[ici](/install)**.* - -
- - -
- -
-Avant d'héberger un serveur chez vous, il est recommandé de prendre connaissance des [possibles limitations liées à votre FAI](/isp). Si votre FAI est trop contraignant, vous pouvez envisager d'utiliser un VPN pour contourner ces limitations. -
- -- Une carte ARM avec un processeur de 500 MHz et 512 Mo de mémoire vive ; -- Un adaptateur secteur pour alimenter la carte ; -- Une carte microSD : au moins **8 Go** et **Classe 10** (par exemple une [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; -- Un câble ethernet/RJ-45 pour brancher la carte à votre routeur/box internet. (Avec le Raspberry Pi 0, vous pouvez connecter votre carte avec un câble OTG et un adaptateur Wifi USB.) -- Un [fournisseur d’accès correct](/isp), de préférence avec une bonne vitesse d’upload. - ---- - -## Installation avec l'image pré-installée (recommandée) - -0. Télécharger l'image pré-installée pour votre carte ARM -
-Si il n'existe pas d'image pré-installée pour votre carte, vous pouvez suivre la section "Installation par dessus ARMbian". - -1. Flasher la carte SD avec l'image - -2. Brancher la carte et la laisser démarrer - -3. Se connecter en SSH sur le serveur - -4. Effectuer la configuration initiale (post-installation) - ---- - -## Installation par dessus ARMbian - -0. Télécharger l'image ARMbian pour votre carte ARM - -1. Flasher la carte SD avec l'image - -2. Brancher & démarrer - -3. Se connecter en SSH - -4. Suivre la procédure d'installation générique - diff --git a/install_on_debian.md b/install_on_debian.md deleted file mode 100644 index 99fc194f..00000000 --- a/install_on_debian.md +++ /dev/null @@ -1,24 +0,0 @@ -# Installation on Debian - -*Find other ways to install YunoHost **[here](/install)**.* - -### Requirements - - - -An ARM box, a VPS, a dedicated server, a standard x86 computer, an old Macintosh, ... - -* with **Debian 10** (Buster) installed (with kernel >= 3.12) - * the Debian 10 ISO can be downloaded from [here](https://www.debian.org/releases/buster/debian-installer/). Take the 'netinst CD image' for your architecture. - * N.B. : having a graphical environment is *not* recommended! Servers are meant to be administrated remotely! -* connected to the Internet -* with a direct **root access** or via SSH - ---- - -## Installation steps - -1. Install manually - -2. Post-install - diff --git a/install_on_debian_ar.md b/install_on_debian_ar.md deleted file mode 100644 index 455830f8..00000000 --- a/install_on_debian_ar.md +++ /dev/null @@ -1,23 +0,0 @@ -
-# التنصيب على ديبيان - -*يمكنكم الإطلاع على طُرق أخرى لتنصيب واي يونوهوست YunoHost **[هنا](/install)**.* - -## المتطلبات - - - -على منصة ARM أو على خادوم إفتراضي خاص أو على خادوم إستضافة أو على حاسوب x86 عادي أو على حاسوب ماكينطوش قديم … إلخ - -* على **ديبيان 8** (جيسي) قد تم تنصيبه مِن قبل -* مُتصل بالإنترنت عبر كابل إيثرنت -* مباشرة عبر **النفاذ بالمستخدم الجذري root** أو عبر الـ SSH - ---- - -## خطوات التنصيب - -1. التنصيب يدويًا - -2. ما بعد التنصيب - diff --git a/install_on_debian_fr.md b/install_on_debian_fr.md deleted file mode 100644 index 013a492e..00000000 --- a/install_on_debian_fr.md +++ /dev/null @@ -1,24 +0,0 @@ -# Installation sur Debian - -*Trouvez d’autres moyens d’installer YunoHost **[ici](/install)**.* - -## Prérequis - - - -Sur une plateforme ARM, un VPS, un serveur dédié, un ordinateur x86 standard, un vieux Macintosh,... - -* avec **Debian 10** (Buster) installé (avec un kernel >= 3.12) - * l'ISO Debian 10 ISO peut être téléchargée depuis [cette page](https://www.debian.org/releases/buster/debian-installer/). Prenez la 'netinst CD image' pour votre architecture - * N.B. : Avoir un environnement graphique n'est *pas* recommandé ! Les serveurs sont généralement administrés à distance ! -* connecté à Internet -* avec un **accès root** directement ou par SSH - ---- - -## Étapes d’installation - -1. Installer manuellement - -2. Post-installation - diff --git a/install_on_debian_it.md b/install_on_debian_it.md deleted file mode 100644 index 844d77b5..00000000 --- a/install_on_debian_it.md +++ /dev/null @@ -1,23 +0,0 @@ -# Installazione su Debian - -*Altri sistemi per installare Debian **[qui](/install)**.* - -### Requisiti - - - -Su un computer ARM, un VPS, un server dedicato, un computer x86 standard, un vecchio Macintosh, ... - -* con **Debian 10** (Buster) installato (con un kernel >= 3.12) - * l'immagine ISO di Debian 10 può essere scaricata da [qui](https://www.debian.org/releases/buster/debian-installer/). Scegli l'immagine 'netinst CD' per la tua architettura. - * N.B.: l'uso di un'interfaccia grafica *non* è raccomandato! I server dovrebbero essere amministrati da remoto! -* connesso ad Internet -* con un **accesso root** diretto o via SSH - ---- - -## Passi per l'installazione - -1. Installazione manuale - -2. Post-installazione diff --git a/install_on_raspberry.md b/install_on_raspberry.md deleted file mode 100644 index 8770e2ab..00000000 --- a/install_on_raspberry.md +++ /dev/null @@ -1,60 +0,0 @@ -# Install YunoHost on a Raspberry Pi - -*Find all the ways to install YunoHost **[here](/install)**.* - -
- - -
- -
-Before setting up a server at home, it is recommended that you know the [possible limitations imposed by your ISP](/isp). If they are too restrictive, you might consider using a VPN to bypass them. -
- -## Pre-requisites - -- A Raspberry Pi 2, 3 or 4 (RPi 0 and 1 may work but require some tweaking... see [this issue](https://github.com/YunoHost/issues/issues/1423)) ; -- An microSD card: **8GB** capacity (at least) and **Class 10** speed rate are highly recommended (like the [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; -- A power supply (either an adapter or a MicroUSB cable)i ; -- An ethernet cable (RJ-45) to connect your Raspberry Pi to your router. (Raspberry Pi Zero users can connect the Pi using an OTG cable, [Wifi dongle](https://core-electronics.com.au/tutorials/raspberry-pi-zerow-headless-wifi-setup.html).) ; -- A [reasonable ISP](/isp), preferably with a good and unlimited upload bandwidth. - ---- - -## Install with the pre-installed image (recommended) - -0. Download the pre-installed image for Raspberry Pi - -1. Flash the SD card with the image - -2. Power up the board and let it boot - -3. Connect to your server with your web browser - -4. Proceed with the initial configuration (post-installation) - ---- - -## Manual installation (advanced users) - -
-We do not recommend the manual installation because it is more technical and longer than using the pre-installed image. This documentation is only intended for advanced users. -
- -
-The latest Raspberry Pi OS images requires a screen and a keyboard, as it is no longer possible to connect directly to the Raspberry through SSH. Nevertheless it is possible to re-enable SSH at boot: before starting your Raspberry, put in the boot partition of the SD card an empty file named `ssh` (without extension). -
- -0. Install Raspberry Pi OS Lite on the SD card ([instructions](https://www.raspberrypi.org/downloads/raspberry-pi-os/)). The Raspberry Pi OS Lite can be found here: https://downloads.raspberrypi.org/raspbian_lite/images/ - -1. Connect to your Raspberry Pi with the user `pi`. Set the root password with -```bash -sudo passwd root -``` - -2. Edit `/etc/ssh/sshd_config` to allow SSH login for root, by replacing `PermitRootLogin without-password` with `PermitRootLogin yes`. Reload the SSH daemon with `service ssh reload`. - -3. Disconnect and reconnect, this time as root. - -4. Then follow the generic manual install procedure. - diff --git a/install_on_raspberry_de.md b/install_on_raspberry_de.md deleted file mode 100644 index d7d0af50..00000000 --- a/install_on_raspberry_de.md +++ /dev/null @@ -1,60 +0,0 @@ -# YunoHost auf einem Raspberry Pi installieren - -*Alle Arten YunoHost zu installieren findest du **[hier](/install)**.* - -
- - -
- -
-Vor der Einrichtung eines Servers zuhause ist es empfehlenswert [mögliche Einschränkungen deines Providers](/isp) zu kennen. Wenn er zu viele Einschränkungen vornimmt, kann es sinnvoll sein ein VPN zu nutzen um diese zum umgehen. -
- -## Voraussetzungen - -- Einen Raspberry Pi 2, 3 oder 4 (RPi 0 and 1 may work but require some tweaking ... see [this issue](https://github.com/YunoHost/issues/issues/1423)) ; -- Eine microSD Karte: **8 GB** Speicherplatz (mindestens) und **Class 10** Geschwindigkeit werden empfohlen (wie zum Beispiel die [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; -- Ein Netzeil (entweder ein Steckernetzteil oder ein MicroUSB Kabel) ; -- An Netzwerkkabel (RJ-45) um den Raspberry mit dem router zu verbinden. (Raspberry Pi Zero Nutzer können ein OTG Kabel nutzen, [Wifi dongle](https://core-electronics.com.au/tutorials/raspberry-pi-zerow-headless-wifi-setup.html).) ; -- Einen [geeigneten Provider](/isp), am Besten einen mit einer guten upload Geschwindigkeit. - ---- - -## Install with the pre-installed image (recommended) - -0. Download the pre-installed image for Raspberry Pi - -1. Flash the SD card with the image - -2. Plug & boot - -3. Connect to your server with SSH - -4. Proceed to post-installation - ---- - -## Manual installation (advanced users) - -
-We do not recommend the manual installation because it is more technical and longer than using the pre-installed image. This documentation is only intended for advanced users. -
- -
-The latest Raspberry Pi OS Lite images requires a screen and a keyboard, as it is no longer possible to connect directly to the Raspberry through SSH. Nevertheless it is possible to re-enable SSH at boot: before starting your Raspberry, put in the boot partition of the SD card an empty file named `ssh` (without extension). -
- -0. Install Raspberry Pi OS Lite on the SD card ([instructions](https://www.raspberrypi.org/downloads/raspberry-pi-os/)). - -1. Connect to your Raspberry Pi with the user `pi`. Set the root password with -```bash -sudo passwd root -``` - -2. Edit `/etc/ssh/sshd_config` to allow SSH login for root, by replacing `PermitRootLogin without-password` with `PermitRootLogin yes`. Reload the SSH daemon with `service ssh reload`. - -3. Disconnect and reconnect, this time as root. - -4. Then follow the generic manual install procedure. - diff --git a/install_on_raspberry_es.md b/install_on_raspberry_es.md deleted file mode 100644 index d526d2c9..00000000 --- a/install_on_raspberry_es.md +++ /dev/null @@ -1,60 +0,0 @@ -# Instalar YunoHost en un Raspberry Pi - -*Encontrar otros medios de instalar YunoHost **[aquí](/install)**.* - -
- - -
- -
-Antes de alojar tu propio servidor en tu casa, te recomendamos que consultes las [posibles restricciones impuestas por tu Proveedor de Internet](/isp). Si tu proveedor es demasiado restrictivo, puedes utilizar un VPN para eludir estas restricciones. -
- -## Prerrequisitos - -- Un Raspberry Pi 2, 3 o 4 (RPi 0 and 1 may work but require some tweaking ... see [this issue](https://github.com/YunoHost/issues/issues/1423)) ; ; -- Un adaptador de corriente para alimentar la tarjeta ; -- Una tarjeta microSD : al menos **8 Go** y **Clase 10** (por ejemplo una [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; -- Un cable ethernet/RJ-45 para conectar la tarjeta con tu enrutador o tu caja internet. (Con el Raspberry Pi 0, puedes conectar tu tarjeta con un cable OTG y un adaptador Wifi USB.) -- Un [proveedor de Internet ético](/isp), de preferencia con buena velocidad de upload. - ---- - -## Instalación con la imagen pre-instalada (recomendada) - -1. Descargar la imagen para Raspberry Pi - -2. Poner la imagen en tu tarjeta SD - -3. Conectar y encender - -4. Conectarse en SSH - -5. Proceder a la post-instalación - ---- - -## Instalación manual (desaconsejada) - -
-No recomendamos la instalación manual porque es más técnica y más larga que la instalación vía la imagen per-instalada. Esta documentación sobre todo está destinada a los usuarios expertos. -
- -
-Las últimas versiones de Raspberry Pi OS necesitan una pantalla y un teclado porque ya no es posible conectarse directamente por SSH al Raspberry por defecto. Sin embargo, es posible reactivar el inicio de SSH al boot : solo hay que poner un archivo llamado `ssh` (vacío, sin extensión) en la partición boot de la tarjeta SD. -
- -0. Instalar Raspberry Pi OS Lite ([instrucciones](https://www.raspberrypi.org/downloads/raspberry-pi-os/)) en la tarjeta SD. - -1. Conéctate con SSH al Raspberry Pi con el usuario pi. Define una contraseña root con -```bash -sudo passwd root -``` - -2. Modifica `/etc/ssh/sshd_config` para autorizar root a que se conecte con ssh, reemplazando `PermitRootLogin without-password` por `PermitRootLogin yes`. Recarga el daemon ssh con `service ssh reload`, y luego re-conéctate como root. - -3. Desconéctate et reconéctate con el usuario root esta vez. - -4. Sigue con el procedimiento de instalación manual genérico. - diff --git a/install_on_raspberry_fr.md b/install_on_raspberry_fr.md deleted file mode 100644 index b649fce7..00000000 --- a/install_on_raspberry_fr.md +++ /dev/null @@ -1,61 +0,0 @@ -# Installer YunoHost sur Raspberry Pi - -*Toutes les autres façons d’installer YunoHost sont listées **[ici](/install)**.* - -
- - -
- -
-Avant d'héberger un serveur chez vous, il est recommandé de prendre connaissance des [possibles limitations liées à votre FAI](/isp). Si votre FAI est trop contraignant, vous pouvez envisager d'utiliser un VPN pour contourner ces limitations. -
- -## Prérequis - -- Un Raspberry Pi 2, 3 ou 4 (Les RPi 0 et 1 peuvent fonctionner mais nécessitent de bricoler un peu ... voir [cette issue](https://github.com/YunoHost/issues/issues/1423)) ; -- Un adaptateur secteur pour alimenter la carte ; -- Une carte microSD : au moins **8 Go** et **Classe 10** (par exemple une [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; -- Un câble ethernet/RJ-45 pour brancher la carte à votre routeur/box internet. (Avec le Raspberry Pi 0, vous pouvez connecter votre carte avec un câble OTG et un adaptateur Wifi USB.) -- Un [fournisseur d’accès correct](/isp), de préférence avec une bonne vitesse d’upload. - ---- - -## Installation avec l'image pré-installée (recommandée) - -1. Télécharger l'image pour Raspberry Pi - -2. Flasher la carte SD avec l'image - -3. Brancher la carte et la laisser démarrer - -4. Se connecter en SSH sur le serveur - -5. Effectuer la configuration initiale (post-installation) - ---- - -## Installation manuelle (déconseillée) - -
-Nous déconseillons l'installation manuelle car elle est plus technique et plus longue que l'installation via l'image pré-installée. Cette documentation est surtout destinée aux utilisateurs avancés. -
- -
-Les dernières versions de Raspbian nécessitent un écran et un clavier, car il n'est plus possible de se connecter directement en SSH au Raspberry par défaut. Néanmoins, il est possible de réactiver le lancement de SSH au boot : il suffit de placer dans la partition boot de la carte SD un fichier nommé `ssh`, vide et sans extension. -
- -0. Installez Raspberry Pi OS Lite ([instructions](https://www.raspberrypi.org/downloads/raspberry-pi-os/)) sur la carte SD. -Le lien vers Raspberry Pi OS Lite est ici : https://downloads.raspberrypi.org/raspbian_lite/images/ - -1. Connectez-vous en SSH au Raspberry Pi avec l'utilisateur pi. Définissez un mot de passe root avec -```bash -sudo passwd root -``` - -2. Modifiez `/etc/ssh/sshd_config` pour autoriser root à se logger en SSH, en remplaçant `PermitRootLogin without-password` par `PermitRootLogin yes`. Rechargez le daemon SSH avec `service ssh reload`, puis re-connectez-vous en root. - -3. Déconnectez-vous et reconnectez-vous avec l'utilisateur root cette fois. - -4. Poursuivez avec la procédure d'installation manuelle générique. - diff --git a/install_on_virtualbox.md b/install_on_virtualbox.md deleted file mode 100644 index 96eff312..00000000 --- a/install_on_virtualbox.md +++ /dev/null @@ -1,84 +0,0 @@ -# Install YunoHost on VitualBox - -*Find other ways to install YunoHost **[here](/install)**.* - -## Requirements - - - -* An x86 computer with VirtualBox installed and enough RAM capacity to be able to run a small virtual machine. -* The latest stable **YunoHost ISO image**, available [here](/images). - -
-N.B. : Installing YunoHost in a VirtualBox is usually intended for testing. To -run an actual server on the long-term, you usually need a dedicated physical -machine (old computer, ARM board...) or a VPS online. -
- ---- - -## 1. Create a new virtual machine - - - -
- -* It's okay if you can only have 32-bit versions, just be sure that you downloaded the 32-bit image previously. -* 256MB RAM is the minimum required, but at least 512MB is recommended (1Go or more if you can). -* 8GB storage is the minimum required for the system, add whatever is necessary for your apps. - ---- - -## 2. Change network settings - -**NB:** You must carry out this step. If not, the install will fail. - -Go to **Settings** > **Network**: - - - -
- -* Select `Bridged adapter` - -* Select your interface's name: - - **wlan0** if you are connected wirelessly, else **eth0**. - ---- - -## 3. Boot up the virtual machine - -Start the virtual machine - - - -
- -You will have to select your ISO image here, then you should see the YunoHost's boot screen. - -
- -If you encounter the error "VT-x is not available", you need probably need to enable Virtualization in the BIOS of your computer. - -
- - - -
- -* Select `Graphical install` - -* Select your language, your location, your keyboard layout and let the installer do the rest :-) - ---- - -## 4. Proceed to post-installation - -After the reboot, the system should ask you to proceed with the -post-installation - -Post-install documentation - - - diff --git a/install_on_virtualbox_es.md b/install_on_virtualbox_es.md deleted file mode 100644 index e359db06..00000000 --- a/install_on_virtualbox_es.md +++ /dev/null @@ -1,76 +0,0 @@ -# Instalar YunoHost en VirtualBox - -*Encontrar otros medios de instalar YunoHost **[aquí](/install)**.* - -## Prerrequisitos - - - -* Un ordenador x86 con VirtualBox instalado y bastante RAM disponible para iniciar una pequeña máquina virtual. -* La última **imagen ISO YunoHost** estable, disponible [aquí](/images). - -
-N.B. : Instalar YunoHost en VirtualBox es útil para probar la distribución. Para realmente autoalojarse a largo plazo, probablement necesitarás una máquina virtual (viejo ordenador, tarjeta ARM...) o un VPS. -
- ---- - -## 1. Crear una nueva máquina virtual - - - -
- -* No es grave si sólo la versión 32-bit está disponible, pero en este caso asegúrate que 32 bit previamente. -* 256Mo de RAM es el requisito mínimo, 512Mo está recomendado (1Go o más si puedes). -* 8Go de almacenaje mínimo requisito. - ---- - -## 2. Modificar la configuración de la red - -Ir a **Settings** > **Network** : - - - -
- -* Selectiona `Bridged adapter` - -* Elige tu interfaz según su nombre : - - **wlan0** si estás conectado sin hilo, **eth0** de otro modo. - ---- - -## 3. Inicia tu máquina virtual - -Inicia tu máquina virtual - - - -
- -Aquí tienes que seleccionar la imagen ISO, luego deberías ver esta pantalla de bienvenida. - -
- -Si te encuentras con el error "VT-x is not available", probablement hay que activar (enable) la virtualización en la opciones del BIOS de tu ordenador. - -
- - - -
- -* Elige `Instalación gráfica` - -* Selecciona tu idioma, tu ubicación, la distribución de tu teclado y deja el ordenador terminar el proceso :-) - ---- - -## 4. Efectuar la post-instalación - -Después del reinicio, la máquina debería proponerte de efectuar la post-instalación : - -Documentación de post-instalación diff --git a/install_on_virtualbox_fr.md b/install_on_virtualbox_fr.md deleted file mode 100644 index 8b851596..00000000 --- a/install_on_virtualbox_fr.md +++ /dev/null @@ -1,81 +0,0 @@ -# Installer YunoHost sur VirtualBox - -*Trouvez d’autres moyens d’installer YunoHost **[ici](/install)**.* - -## Prérequis - - - -* Un ordinateur x86 avec VirtualBox installé et assez de RAM disponible pour lancer une petite machine virtuelle. -* La dernière **image ISO YunoHost** stable, disponible [ici](/images). - -
-N.B. : Installer YunoHost dans une VirtualBox est utile pour tester la -distribution. Pour réellement s'autohéberger sur le long terme, il vous faudra -probablement une machine physique (vieil ordinateur, carte ARM...) ou un VPS en -ligne. -
- ---- - -## 1. Créer une nouvelle machine virtuelle - - - -
- -* Ce n'est pas grave si seulement la version 32-bit est dispo, mais dans ce cas soyez sur d'avoir téléchargé l'image 32 bit précédemment. -* 256Mo de RAM est le minimum requis, 512Mo est recommandé (1Go ou plus si vous pouvez). -* 8Go de stockage minimum requis pour le système, y ajouter l'espace pour vos applications. - ---- - -## 2. Modifier la configuration 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** sinon. - ---- - -## 3. Lancer votre machine virtuelle - -Démarrez votre machine virtuelle - - - -
- -Vous devez sélectionner ici l’image ISO, puis vous devriez voir cet écran d’accueil YunoHost. - -
- -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. - -
- - - -
- -* Choisissez `Installation graphique` - -* Sélectionnez votre langue, votre emplacement, la disposition de votre clavier et laissez l’installeur faire le reste :-) - ---- - -## 4. Effectuer la post-installation - -Après le redémarrage, la machine devrait vous proposer d'effectuer la -post-installation : - -Post-install -documentation diff --git a/install_on_vps.md b/install_on_vps.md deleted file mode 100644 index 16578276..00000000 --- a/install_on_vps.md +++ /dev/null @@ -1,19 +0,0 @@ -# Install on a dedicated server - -*Find other ways to install YunoHost **[here](/install)**.* - -### Pre-requisite - - - -* A dedicated or virtual private server -* with at least **512MB** RAM -* and **Debian 10.x (Buster) 64bits** as operating system - ---- - -## Installation steps - -1. Install manually - -2. Proceed with the initial configuration (post-installation) diff --git a/install_on_vps_de.md b/install_on_vps_de.md deleted file mode 100644 index 57916779..00000000 --- a/install_on_vps_de.md +++ /dev/null @@ -1,20 +0,0 @@ -# Installation auf einem dedizierten Server - -*Andere Wege Yunohost zu installieren findest Du **[hier](/install)**.* - -### Vorraussetzungen - - - -* Ein dedizierter (Root-Server) oder virtueller privater Server (VPS) -* mit mindestens **512MB** RAM -* und **Debian 10.x (Buster) 64bits** als Betriebssystem - ---- - -## Installationsschritte - -1. Manuelle Installation - -2. Weiter mit der Erstkonfiguration (nach der Installation) - diff --git a/install_on_vps_es.md b/install_on_vps_es.md deleted file mode 100644 index abf498f4..00000000 --- a/install_on_vps_es.md +++ /dev/null @@ -1,20 +0,0 @@ -# Instalación en un servidor dedicado - -*Encontrar otros medios de instalar YunoHost **[aquí](/install)**.* - -## Prerrequisitos - - - -* Un servidor dedicado o virtual -* con al menos **512MB** RAM -* y **Debian 10.x (Buster) 64bits** como sistema operativo - ---- - -## Etapas de instalación - -1. Instalar manualmente - -2. Post-instalación - diff --git a/install_on_vps_fr.md b/install_on_vps_fr.md deleted file mode 100644 index 09d224db..00000000 --- a/install_on_vps_fr.md +++ /dev/null @@ -1,19 +0,0 @@ -# Installation sur un serveur dédié - -*Trouvez d’autres moyens d’installer YunoHost **[ici](/install)**.* - -## Prérequis - - - -* Un serveur dédié ou virtuel -* avec au moins **512MB** RAM -* et **Debian 10.x (Buster) 64bits** comme système d'exploitation - ---- - -## Étapes d’installation - -1. Installer manuellement - -2. Effectuer la configuration initiale (post-installation) diff --git a/install_on_vps_it.md b/install_on_vps_it.md deleted file mode 100644 index 66658d32..00000000 --- a/install_on_vps_it.md +++ /dev/null @@ -1,20 +0,0 @@ -# Installa su un server dedicato - -*Scopri altri modi di installare YunoHost **[qui](/install)**.* - -### Pre-requisiti - - - -* Un server dedicato o un server privato virtuale (VPS) -* con almeno **512MB** di RAM -* e **Debian 10.x (Buster) 64bits** come sistema operativo - ---- - -## Procedura di installazione - -1. Installa manualmente - -2. Post-installazione - diff --git a/isp.md b/isp.md deleted file mode 100644 index 0e573114..00000000 --- a/isp.md +++ /dev/null @@ -1,61 +0,0 @@ -# Internet service providers - - Main configuration box - -Here is a non-comprehensive list of internet service providers by country, which contains criteria about tolerance to self-hosting. - -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. - -A list of French and Belgian ISPs is available on the [french page](/isp_fr). - -### 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. | - -### 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 | - -### 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. | - -### 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 | - -### 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 | - -### 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. - -### 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 | - | - | - -If you want to add international ISPs information, please do consider [modifying this page](/write_documentation). diff --git a/isp_es.md b/isp_es.md deleted file mode 100644 index 6c5ad805..00000000 --- a/isp_es.md +++ /dev/null @@ -1,47 +0,0 @@ -# Proveedores de acceso a Internet - - Configuración general del router - -Aquí tienes una lista (no exhaustiva) de proveedores de acceso a Internet por país, con criterios de compatibilidad con el [self-hosting](/selfhosting). - -Un « **no** » puede implicar problemas de utilización del servidor o puede obligarte a hacer configuraciones adicionales. El estatus entre paréntesis indica el comportamiento por defecto. - -### Francia - -*Nota que algunos de estos proveedores como OVH y Orange también están presentes en España.* - -Todos los proveedores de acceso a Internet [miembros de la Federación French Data Network](http://www.ffdn.org/fr/membres) tienen una política a favor del auto-alojamiento / self-hosting. -* ✔ : sí -* ✘ : no - -| Proveedor de acceso | OVH | [Free](/isp_free) | [SFR](/isp_sfr) | [Orange](/isp_orange) | Bouygues
Télécom | Darty | -| :---: | :---: | :---: | :---: | :---: | :---: | :---: | -| **Box/router** | Personal/OVH Télécom | Freebox | Neufbox | Livebox | Bbox | Dartybox | -| **[UPnP](https://fr.wikipedia.org/wiki/Universal_Plug_and_Play)** | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| **[Puerto 25 que se abre](/email)**
(cerrado por defecto) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ | -| **[Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ | -| **[Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup)
personalizable ** | ✔ | ✔ (excepto IPv6) | … | ✘ | ✘ | ✘ | -| **[IP fija](/dns_dynamicip)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ | -| **[IPv6](https://fr.wikipedia.org/wiki/IPv6)** | ✔ | ✔ | ✔ | ✔ | … | … | -| **[No listado en el DUL](https://en.wikipedia.org/wiki/Dialup_Users_List)** | … | ✘ | … | … | … | … | -Para obtener una lista más completa y precisa, refiérete a la muy buena documentación (fr) de [wiki.auto-hebergement.fr](http://wiki.auto-hebergement.fr/fournisseurs/fai#d%C3%A9tail_des_fai). - -**Truco** : [FDN](http://www.fdn.fr) propone unos [VPN](http://www.fdn.fr/-VPN-.html) que permiten recuperar una (o varias si lo pides) IPv4 fija y un /48 en IPv6 y así « limpiar » tu conexión si tu proveedor es uno los *proveedores limitantes* de la tabla más arriba. - -### Bélgica - -| Proveedor de acceso | Box/ router | uPnP activable | [Puerto 25 que se abre](/email)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fija | -| :---: | :---: | :---: | :---: | :---: | :---: | :---: | -| **Proximus** | BBox2 | sí (activado) | sí | **no** | **no** | **no** | -| | BBox3 | sí (activado) | sí | **no** | **no** | **no** | -| **Scarlet** | BBox2 | sí (activado) | sí | **no** | **no** | **no** | - -**Proximus** no estaría a favor del auto-alojamiento. Hacen que la apertura de los puertos esté más difícil para luchar contra el spam. Es mejor pasar por [Neutrinet](http://neutrinet.be), uno de los [miembros de la Federación French Data Network](http://www.ffdn.org/fr/membres). - -### Costa de Marfil - -| Proveedor de acceso | Box/ router | uPnP activable | [Puerto 25 que se abre](/email)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fija | -| :---: | :---: | :---: | :---: | :---: | :---: | :---: | -| **Orange** | Livebox2 | sí (activado) | no | **no** | **no** | **no** | -| **Moov** | | sí (activado) | | | | | -| **MTN** | | sí (activado) | | | | | \ No newline at end of file diff --git a/isp_fr.md b/isp_fr.md deleted file mode 100644 index 1630b19e..00000000 --- a/isp_fr.md +++ /dev/null @@ -1,45 +0,0 @@ -# Fournisseurs d’accès à Internet - - Configuration générale box - -Voici une liste non exhaustive des fournisseurs d’accès à Internet par pays, contenant les critères de tolérance à l’[auto-hébergement](/selfhosting). - -Un « **non** » peut entraîner des problèmes d’utilisation de votre serveur ou peut vous obliger à faire des configurations supplémentaires. Le statut entre parenthèses indique le comportement par défaut. - -### 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) | … | ✘ | ✘ | ✘ | -| **[IP fixe](/dns_dynamicip)** | ✔ | ✔ | ✔/✘ | ✔ (depuis la Livebox 4) | ✔ | ✔ | -| **[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. - -### 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). - -### 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é) | | | | | diff --git a/isp_free.md b/isp_free.md deleted file mode 100644 index e97c35fb..00000000 --- a/isp_free.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](isp_free_fr) for now. diff --git a/isp_orange.md b/isp_orange.md deleted file mode 100644 index 6649ed5f..00000000 --- a/isp_orange.md +++ /dev/null @@ -1,86 +0,0 @@ -# Orange - -*Find the list of other Internet service providers **[here](/isp)**.* - -#### Email - -The Orange box has port 25 closed so as to limit the amount of spam that could be sent from a compromised home connection. - -The remaining solution to host one own's email at home is to route it through the Orange SMTP servers. - -To that end, one has to edit the postfix configuration file with the following command: - -```bash -sudo nano /etc/postfix/main.cf -``` - -then, add the SMTP Orange server as a relay on the associated line: - -```bash -relayhost = smtp.orange.fr -``` - -restart Postfix : - -```bash -sudo service postfix restart -``` - -##### Problems - -If you are having an "Authentication required" error, the solution is as follows (note: french website): **[source](http://viruslocker.free.fr/?page_id=1749)**. - -Edit the postfix configuration file - -```bash -sudo nano /etc/postfix/main.cf -``` -then, add the following lines: - -```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 -``` - -Create the `mdp_fai.conf` file : - -```bash -sudo nano /etc/postfix/sasl/mdp_fai.conf -``` - -add - -```bash -# mdp_fai.conf -[smtp.orange.fr]:25 emailaddress@at.orange:my-own-password -``` -with your Orange account password. - -Integrate the password into Postfix : - -```bash -sudo postmap /etc/postfix/sasl/mdp_fai.conf -sudo postconf -e smtp_sasl_password_maps=hash:/etc/postfix/sasl/mdp_fai.conf -``` - -If you are having an "(SASL authentication failed; cannot authenticate to server smtp-auth.nowhere.com[38.123.22.160]: no mechanism available)" error - -Check that `libsasl2-modules` and `sasl2-bin` are present : - -```bash -apt search libsasl2-modules -apt search sasl2-bin -``` - -If they are not present, do install them : - -```bash -apt install libsasl2-modules sasl2-bin -``` - -It is possible that postfix does not immediately take into account your modifications. To force it to do so, run -```bash -systemctl restart postfix -``` diff --git a/isp_sfr.md b/isp_sfr.md deleted file mode 100644 index e5002600..00000000 --- a/isp_sfr.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](isp_sfr_fr) for now. diff --git a/isp_sfr_fr.md b/isp_sfr_fr.md deleted file mode 100644 index 73413126..00000000 --- a/isp_sfr_fr.md +++ /dev/null @@ -1,14 +0,0 @@ -# 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. - - - -#### Courrier électronique -Pour pouvoir envoyer des mails, il faut désactiver le filtrage. - - - -Source : https://assistance.sfr.fr/sfrmail-appli/sfrmail/envoyer-e-mail-serveur-smtp.html diff --git a/noaccess.md b/noaccess.md deleted file mode 100644 index a2ed2d20..00000000 --- a/noaccess.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](noaccess_fr) for now. diff --git a/orga/README.md b/orga/README.md deleted file mode 120000 index aa9ff0cb..00000000 --- a/orga/README.md +++ /dev/null @@ -1 +0,0 @@ -yunohost_project_organization_fr.md \ No newline at end of file diff --git a/orga/yunohost_project_organization.md b/orga/yunohost_project_organization.md deleted file mode 100644 index ce306c83..00000000 --- a/orga/yunohost_project_organization.md +++ /dev/null @@ -1,323 +0,0 @@ -# YunoHost project organisation - -## Document objective - -This document aims at allowing contributors to feel legitimate in contributing to the YunoHost project together with collective feedback. -The project is community-based and hasty decisions made by a restricted group of contributors can generate frustrations at a later stage. -To address this issue, the proposed solution here is to ensure that decisions are taken collectively and that they are sufficiently thought out. -An advisory council provides orientations for the evolution of the YunoHost project and special interest groups allow more efficient contribution in relation to each specific topic. - -## Definition of YunoHost - -###Objectives - -The goal of YunoHost is to make accessible to the largest number of people, the installation and administration of a server, without prejudice to the quality and reliability of the software. - -### Values - -#### A free and community-based software - -YunoHost is a software under free licence, fully community-based and based on applications which are themselves community-based and often free (Roundcube, baïkal, etc.) - -#### That everyone can appropriate - -Historically, the project has been very close to initiatives which aim at creating a neutral and decentralised Internet. This proximity especially with the [FFDN](https://www.ffdn.org/), has materialised by having some contributors to create the InternetCu.be whose mission is to facilitate self-hosting by providing a complete solution including a service (via a VPN) and a device. This militant aspect does not inhibit commercial software initiatives hereby companies could propose support or hosting. - -## YunoHost organisation - -### A theme-based, open structure - -The objective of the YunoHost organisation is to allow the largest number of people to contribute to software improvement, whether from a technical point of view (development, application packaging) or otherwise (communication, end-user assistance, documentation, etc.). Inspired by the projects which were reviewed at a recent event (Kodi, Debian, Django, Fedora, Wikipedia, etc.) and by ideas stemming from YunoHost contributors (Jérôme, Bram, opi, scith, ju), a decision was made to organise work by special interest groups, federated thanks to a council to key contributors. - -YunoHost project organisation schema - - - -#### Definition and structure of groups - -Groups are structured as a result of the fact that YunoHost counts many sub-projects (a total of 13), but without always knowing who is in charge or who is competent. It has therefore been decided to simplify the organisation into sub-projects according to theme-based groups: - -- ##### Core Dev Group - - YunoHost Core - - Moulinette - - Web admin - - SSOwat - - Dynette - - YNH-Dev - -- ##### Distribution Group - - Creation and maintenance of installation images on various architectures - - Distribution of images - - Management of Debian packages distribution - -- ##### Infra/Sysadmin Group - - Infrastructure - - Website (wiki, forum, chat room, redmine, Mumble) - - Demo - - Services - - [ip.yunohost.org](https://ip.yunohost.org/) and ip6.yunohost.org - - [yunoports](http://ports.yunohost.org/) - - nohost.me and noho.st - - [yunodash](https://dash.yunohost.org/) - - [yunopaste](http://paste.yunohost.org/) - -- ##### Apps Group - - apps.json list - - App development tools (package_checker, package linter) - -- ##### Communication Group - - Documentation - - Communication (announcement of project evolutions on the forum, social networks) - - Translation - - Mutual assistance (support) - -Groups are open to all contributors willing to participate to the development of YunoHost. Everyone can register with the communication channels associated with the group they want to get involved with. Everyone is free to exchange with the rest of the group and to submit a decision point which will follow a prior stage of exchange and improvement of the proposal. -In order to facilitate its management, each group names a coordinator (and a deputy) whose role is: - -- to welcome and to federate new regular contributors to the group -- to keep the Council informed of decisions taken within the group (see next point) - -The choice of a communication tool is left to each group depending on its relevance (forum, chat, email, etc.) - -#### Definition and structure of the Council - -YunoHost is growing and it's important to maintain a coherence among all the groups. However, it is impossible to impose on every member within every group to take interest or to get involved in all aspects of the project (due to time and competency constraints). To address this, it has been suggested that a meta-group be created where every group has at least one representative: hence the Council. -The Council is independent of groups and brings together contributors wishing to get involved in the project to the maximum extent. It's role is to: - -- take important decisions affecting YunoHost which are dependent on one single group (for instance, changing the wiki engine) -- regularly follow up on the overall aspect of the project to ensure its cohesion (Mumble meeting) -- call on the whole community of contributors (or even end-users) when a decision appears divisive between groups or within the Council - -To take part at Council-level votes, you must have contributed to the project and have obtained a right to vote (or right of entry) at the Council. This right is delivered by the Council (and may be upon request). The Council is free at any moment to change its decision process. -To be a member of the Council does not imply that you have access to all resources (infrastructure, repositories, etc.). - -### A decision process based on soft consensus - -Decisions to be taken can be of 2 kinds: - -1. for a group (for example, "to merge a PR" would be assumed by the Dev Group whereas to "post a tweet" would fall under the responsibility of the Communication Group) -2. for the overall project (for instance, to decide on a release with new features) - -If a consensus is not reached over a decision within a particular group, they must refer to the Council for further discussions. If no consensus has been reached, the proposal will be submitted to a vote by all contributors. - -#### The decision process in detail - -##### 1) Initiating a decision -- can be initiated by anyone following predefined media within each group (e.g. to open a PR automatically triggers this process) -- necessarily public with the exception of well-defined situations (bug related to a critical security issue or vote relative to individuals) -- an end-date is automatically set for every type of proposition. This date is used for various reasons: - - to leave enough time for everyone to express themselves and to avoid hasty decisions - - to maintain a certain rhythm otherwise if the quota of responses is reached then there's no need to wait for everyone's views within a group - - the quota is evaluated according to people registered in a group (or the Council, depending on the situation) who have expressed their desire to be considered as a regular voter => for instance kload could wish to give their opinion at a particular occasion, but with no intention of applying as a active voting member at the Council - - so it can be postponed upon simple request by any one member of the group—and only the group, not all contributors. - -##### 2) Opening a discussion with several possible responses: -Anyone can change their position at any moment, but it's expected to let the group react if necessary (e.g. avoid going from positive to negative to reject a proposal altogether after just 3 minutes). - -- "simple" replies - - "I agree" –> counts as a positive view - - "It seems good to me, but I'd rather abide by others' opinion" –> if there are only such views (or like the next one) and at least one positive view and the due date is past, then the proposal is accepted - - "no views" / "I'm not in a position to express a helpful view (e.g. I can't code in X)" - - delayed reponse - - request for clarification, in which case the decision is suspended - - refusal: any refusal should be argued and justified - -##### 3) Suspension/Postponement -- while there is no response, a decision is considered suspended; at the moment of a response, the end date is automatically postponed (if needed) (for a duration to be determined, which is shorter than the initial time) -- in a situation where there are positive and negative views, or where there is a choice between several proposals - -##### 4) Request for modifications -- however, it may happen that discussions take place around these modifications; if such is the case, there is a new decision to be added to the list of existing decisions, and the process applies again (with a postponement of the date) -- if there aren't enough people agreeing, the date is postponed and a recall must be sent -- if the result is very close, the group is invited to rediscuss the matter if it is important, otherwise this could turn into a divisive issue and of tensions in the future - -##### 5) Closure -- if the group is unanimous in its decision - - with agreements only - - with refusals only - - no opinions (relying on others' views) -- For a minor or standard decision, if the quota of responses is reached by the minimal deadline and there's a consensus. -- The quota of responses means necessary views as detailed below according to different types of decisions. The percentage is based on the number of active members in the group. The coordinator and its deputy are in charge of managing active and inactive members in a group, as they maintain an up-to-date list of members at least at every decision point within the group. (An inactive member who shows up for a decision automatically becomes active). -- If it isn't possible to have enough people (vacations, not enough members in a group to provide their views), a group can request closing a vote before the voting quota is reached; there's then a new postponement and if the new postponed date is reached, then the proposal is closed according to recorded views. - -###### Micro-decision: -- A decision taken and immediately applied by a single member. This kind of decision must necessarily be reversible, and can be questioned by anyone from any group. - -###### Minor decision -- Initial duration: 1 week. -- Minimal duration: 3 days. -- Postponement, if necessary: 3 days. -- Necessary views: 2 members of a group (the person who initiated the decision can express their view); in an anticipated format, 3 of which 2 members of the group. - -###### Standard decision: -- Initial duration: 2 weeks. -- Minimal duration: 1 week. -- Postponement, if necessary: 1 week. -- Necessary views: 50% of members of a group (the person who initiated the decision can express their view); in an anticipated format, 66% of members. -- Validation by voting (when applicable): 75% of positive votes. - -###### Major decision: -- Initial duration: 1 month. -- Postponement, if necessary: 2 weeks. -- Necessary views: 75% of members of a group (the person who initiated the decision can express their view). -- Validation by voting (when applicable): 90% of positive votes. - -##### 6) Application -Then a member of a group can announce their decision as effective (and proceed with necessary actions such as releasing, merging, announcing, etc.). If certain actions are required, it's important that people commit themselves to performing them, since a decision without designated people is of little use - -## Composition of groups - -- Council : Bram, ju, ljf, Maniack, Moul, opi, theodore -- Core Dev : AlexAubin, Bram, JimboJoe, Ju, ljf, Moul, opi -- Apps : Bram, cyp, frju365, JimboJoe, Josue-T, Ju, ljf, Maniack C, Maxime, Moul, Scith, Tostaki -- Infra : Bram, Ju, Maniack C, Moul, opi -- Communication - - Com : Bram, Moul, korbak, ljf, opi, frju365 - - Doc : Moul, Theodore - - Trans : Jean-Baptiste -- Distribution : Heyyounow - -## Summary table of the number of views required for a decision - -_Values are rounded (e.g. 5.4 => 5 and 5.5 => 6)._ - - -| | **Minor** | **Standard** | **Major** | -|----------------------|---------|----------|---------| -| **Council** | -| Standard closure | 2 | 4 | 5 | -| Anticipated closure | 3* | 5 | -| Closure by voting | 5 | 5 | 6 | -| **Core Dev** | -| Standard closure | 2 | 3 | 5 | -| Anticipated closure | 3* | 4 | -| Closure by voting | 4 | 5 | 5 | -| **Apps** | -| Standard closure | 2 | 5 | 8 | -| Anticipated closure | 3* | 7 | -| Closure by voting | 7 | 8 | 9 | -| **Infra** | -| Standard closure | 2 | 3 | 4 | -| Anticipated closure | 3* | 3 | -| Closure by voting | 3 | 4 | 5 | -| **Communication -> Com** | -| Standard closure | 2 | 2 | 3 | -| Anticipated closure | 3* | 3 | -| Closure by voting | 3 | 3 | 4 | -| **Communication -> Doc** | -| Standard closure | 1 | 1 | Council | -| Anticipated closure | 2* | 2* | -| Closure by voting | Council | Council | Council | -| **Distribution** | -| Standard closure | 1 | Council | Council | -| Anticipated closure | 1 | Council | -| Closure by voting | 1 | Council | Council | - -\* of which 1 view can be external to the group - -For the translation group, the process needs to be adapted. - -For the documentation group, the number of views for an anticipated closure of a minor decision eat for the moment limited (there are only 2 people in the group). The other types of decision are taken by the Council. - -For the distribution group, since there's only Heyyounow at the moment, the Council will have the task of making Standard and Major decisions. - -## Administration group's rights -This part list administration rights for differents groups of YunoHost project: - -(Warning, this is not decision rights here). - -### Council -- No administration right. Authorizations are completed through the other groups membership, -- Forum: ["Conseil" group member](https://forum.yunohost.org/groups/Conseil). - -### Core Dev -- GitHub: Devs team member inside YunoHost's organization (permission to push, merge…), -- Redmine: project member of [`YunoHost`](https://dev.yunohost.org/projects/yunohost) and [`Moulinette`](https://dev.yunohost.org/projects/moulinette), -- Continous integration: writting access to CI-Core, -- XMPP: ["dev"](xmpp:dev@conference.yunohost.org?join) channel moderator, -- Forum: ["Dev" group member](https://forum.yunohost.org/groups/Dev). - -### Infra -- Servers: SSH access using SSH key on some (as needed) or every servers, -- GitHub: [Infra team member inside YunoHost's organization](https://github.com/orgs/YunoHost/teams/infra) (permission to push, merge…), -- Redmine: [Infra project member](https://dev.yunohost.org/projects/y-u-no-infra/), -- Forum, Weblate, Redmine, XMPP, CI: administrator, -- Forum: [Infra group member](https://forum.yunohost.org/groups/Infra). - -### Apps -- GitHub: YunoHost-Apps [Owner](https://github.com/orgs/YunoHost-Apps/people?utf8=%E2%9C%93&query=%20role%3Aowner) (permission to push and merge on all repositories), -- Redmine: [Apps project member](https://dev.yunohost.org/projects/apps), -- GitHub: [Apps team member inside YunoHost's organization](https://github.com/orgs/YunoHost/teams/apps) (permission to push, merge…), -- Continous integration: access to [CI-Apps](https://ci-apps.yunohost.org), -- XMPP: [Apps channel moderator](https://im.yunohost.org/logs/apps), -- Forum: [Apps group member](https://forum.yunohost.org/groups/Apps). - -### Communication -- Forum: [Com group member](https://forum.yunohost.org/groups/Communication). - -#### Documentation -- GitHub: [Doc team member of YunoHost's organization](https://github.com/orgs/YunoHost/teams/doc). - -#### Communication -- Diaspora*: [account access](https://framasphere.org/people/01868d20330c013459cf2a0000053625), -- Twitter: [account access](https://twitter.com/yunohost), -- Forum: [account access](https://forum.yunohost.org/users/yunohost/activity). - -#### Translation -- Weblate: [translator tool admin](https://translate.yunohost.org/projects/yunohost/). - -#### Mutual assistance (support) -- Forum: moderator status, -- XMPP: [`support` chanel moderator](xmpp:support@conference.yunohost.org?join). - -### Distribution -- GitHub: [YunoHost's organisation `Distrib` team member](https://github.com/orgs/YunoHost/teams/distribution), -- Information: image distribution (ISO…) should be done in collaboration with `Infra` group (and `Doc`), -- Publication: SFTP access can be set up, -- Forum: [`Distribution` group team member](https://forum.yunohost.org/groups/Distribution). - -## Pending decisions for the groups - -### Council -- Should we elect Council members rather than co-opt them? There's a risk of it becoming a "political campaign"! -- Should special interest group membership be restricted to cooptation like for the Council? -- Proposal to change Council to Collegiate -- Migrate the project infrastructure server under YunoHost (with prepackaged apps like pad, dogs and mumble?) -- New system for documentation -- Improvement of documentation -- XMPP server migration -- Hosting of our Git forge -- Review the build system: stable <— testing <— branches -- Freeze nohost.me and abandoning services - -### Core Dev Group -- How to manage pull requests? - - Each ticket gives rise to a branch and a ticket; you make a pull/merge request, the community verifies that it works, a decision is taken to integrate. - -### Apps Group -- For community-based apps, issues are on GitHub as they should be, but discussions are on the forum - -### Communication Group -- Bug report from the forum -- Cleanup of the forum to avoid noise -- Proposal to delete support chat -- How to make the forum a more active and central hub -- How to organise rights on the forum (if groups want to vote on the forum) - -### Miscellaneous -- Request on the forum with notification to the Council members and to representatives of relevant special interest groups -- Vote over 2 weeks with a post on the forum -- Create 4 channels for Core Dev, Apps, Communication and Infrastructure -- A release should be validated by all 4 (or 5) interest groups -- Communication in French and English -- Directory or group contact for new people. Maybe just a directory to know who's who. https://yunohost.org/#/contribs to be completed. And to be highlighted. -- Proposal to leave YunoHost members auto-determine themselves -> How to manage access rights? - -## Current means of communication - -- Get-togethers at events -- Weekly Mumble meetings -- [Forum](https://forum.yunohost.org). -- [Bugtracker Redmine](https://dev.yunohost.org). -- Git Forge for code reviews: [YunoHost](https://github.com/YunoHost) [YunoHost-Apps](https://github.com/YunoHost-Apps). -- [XMPP chat rooms](https://yunohost.org/#/chat_rooms) diff --git a/orga/yunohost_project_organization_fr.md b/orga/yunohost_project_organization_fr.md deleted file mode 100644 index dde31a57..00000000 --- a/orga/yunohost_project_organization_fr.md +++ /dev/null @@ -1,299 +0,0 @@ -# Organisation du projet YunoHost - -## Objectif du document -Ce document a pour objectif de permettre aux contributeurs de se sentir légitimes d’effectuer une contribution dans le projet YunoHost avec un avis collectif. Il vise également à renforcer le projet en le structurant autour de groupes de travail autonomes pouvant résister au départ ou à l'absence de certains contributeurs. -Le projet étant communautaire, les décisions prises hâtivement et discrètement par un groupe restreint de contributeurs peuvent entraîner des frustrations postérieures. -Pour pallier ce problème, la solution proposée ici est de faire en sorte que les décisions soient prises collectivement, qu’elles soient suffisamment réfléchies, et qu'elles soient documentées ou rendues publiques. -Un conseil oriente l’évolution du projet YunoHost, et des groupes d’intérêts permettent de contribuer plus efficacement en fonction des domaines de prédilection de chacun. - -## Définition de YunoHost - -### Objectifs -Le but de YunoHost est de rendre accessibles au plus grand nombre l’installation et l’administration d’un serveur, sans délaisser la qualité et la fiabilité du logiciel. - -### Valeurs - -#### Un logiciel libre et communautaire - -YunoHost est un logiciel sous licence libre, entièrement communautaire, et reposant sur des applications elles-mêmes communautaires et souvent libres (Roundcube, Baïkal, etc.). - - -#### Que chacun peut s'approprier - -Historiquement, le projet est très proche des initiatives visant à la création d'un internet neutre et décentralisé. Cette proximité, notamment avec la [FFDN](https://www.ffdn.org/), a amené une partie des contributeurs de YunoHost à créer la Brique Internet dont la mission est de faciliter l'auto-hébergement en fournissant une solution complète incluant service (via un VPN) et matériel. Cet aspect militant n'entrave pas des initiatives commerciales du logiciel pour lequel des entreprises pourraient proposer du support ou de l'hébergement. - - -## Organisation de YunoHost - -### Une structure ouverte, organisée par thèmes -L'objectif de l'organisation de YunoHost est de permettre au plus grand nombre de contribuer à l'amélioration du logiciel, que ce soit d'un point de vue technique (développement, packaging d'application) ou non (communication, assistance aux utilisateurs, documentation, etc.). Inspiré par différents projets passés en revue lors de l'événement (Kodi, Debian, Django, Fedora, Wikipédia, etc.) et des idées de contributeur de YunoHost (Jérôme, Bram, opi, scith, ju), il a été décidé d'une organisation en groupes spécialisés, fédérés par un conseil de contributeurs clés. - -Schéma d’organisation du projet YunoHost : - - - - -#### Définition et constitution des groupes -La constitution de groupes part du constat que YunoHost compte beaucoup de sous-projets (treize au total), mais que l'on ne sait pas toujours qui en est en charge ou qui y est compétent. Il est donc proposé une simplification de l'organisation des sous-projets en groupes thématiques : - -- ##### Groupe Core Dev - - Core YunoHost - - Moulinette - - Admin web - - SSOwat - - Dynette - - YNH-Dev - -- ##### Groupe Distribution - - Création et maintenance des images d'installation sur diverses architectures - - Distribution des images - - Gestion de la distribution des paquets Debian. - -- ##### Groupe Infra/Adminsys - - Infrastructure - - Site web (wiki, forum, salon de discussion, Redmine, Mumble) - - Démo - - Services - - [ip.yunohost.org](https://ip.yunohost.org/) et ip6.yunohost.org - - [yunoports](http://ports.yunohost.org/) - - nohost.me et noho.st - - [yunodash](https://dash.yunohost.org/) - - [yunopaste](http://paste.yunohost.org/) - -- ##### Groupe Apps - - Apps Officielles - - Apps Communautaires - - outils de développements d'app (package_checker, package linter) - -- ##### Groupe Communication - - Documentation - - Communication (annonce évolutions du projet sur le forum, réseaux sociaux) - - Traduction - - Entraide (support) - -Les groupes sont ouverts à tous les contributeurs souhaitant participer au développement de YunoHost. Chacun peut s'inscrire aux canaux de communication associés aux groupes auxquels il souhaite prendre part. Chaque inscrit est libre d'échanger avec le reste du groupe et de proposer une prise de décision à la suite d'une étape d'échange et d'amélioration de la proposition. Il est recommandé aux contributeurs de documenter au maximum leurs décisions et leurs contributions. Ceci permet de renforcer l'autonomie des groupes en cas de départs ou d'absences de certains de leurs membres. -Afin de faciliter sa gestion, chaque groupe nomme donc un coordinateur (et un remplaçant) dont le rôle est : - -- d'accueillir et de fédérer les nouveaux contributeurs réguliers de son groupe -- de tenir informé le Conseil des décisions prises au sein du groupe (cf. point suivant) - -Le choix d'un outil de communication est laissé à chaque groupe en fonction de sa pertinence (forum, chat, ML, etc.). - -#### Définition et constitution du Conseil - -YunoHost grandissant, il est important de maintenir une cohérence entre tous les groupes, néanmoins il est impossible d'imposer à chacun des membres des groupes de s'intéresser ou de s'impliquer sur tous les aspects du projet (pour des raisons de temps et de compétences). Pour pallier à cela, il est proposé de créer un méta-groupe, où chaque groupe sera représenté par au moins un de ses membres : le Conseil. -Le Conseil est indépendant des groupes et réunit les contributeurs souhaitant s'impliquer le plus dans le projet, son rôle est de : - -- prendre les décisions importantes sur YunoHost qui ne dépendent pas d'un seul groupe (par exemple changer le moteur du wiki) -- faire des points réguliers sur l'ensemble du projet pour assurer sa cohésion. (réunion Mumble) -- solliciter l'ensemble de la communauté des contributeurs (ou même des utilisateurs) quand une décision divise les groupes et/ou le Conseil - -Le choix d'un outil de communication est laissé au Conseil, ses décisions doivent néanmoins être consultables par l'ensemble de la communauté de contributeurs. -Pour participer aux votes du Conseil, il faut avoir contribué au projet et avoir obtenu un droit de vote (ou d'entrée) au sein du Conseil. Ce droit est délivré par le Conseil (éventuellement sur demande). Le Conseil est libre à tout moment de modifier le processus de décision. -Être membre du Conseil n'implique pas forcément d'avoir l'ensemble des accès (infrastructure, dépôt etc.). - -### Processus de validation des pull requests - -Cette section détaille le processus de validation des pull requests dans les différents dépôts du projet. L'objectif de ce processus est de dégager un « consensus mou ». Il est important de préciser que ce processus est *recommandé* mais ne représente pas un impératif. En particulier, il ne couvre pas toutes les situations qui peuvent se présenter. Il est donc légitime de l'adapter (avec l'accord du groupe concerné) lorsqu'il n'est pas adapté au contexte. - -Si un consensus ne peut être trouvé au sein d'un groupe en suivant le processus décrit, il est invité à se tourner vers le Conseil pour en débattre. Si aucun consensus n'est trouvé, la proposition sera soumise au vote de tous les contributeurs. - -#### 1. Proposition - -N'importe quel contributeur peut proposer une pull request (abrégée PR dans la suite) dans les divers dépôts liés au projet YunoHost (core, apps, infra...). - -L'auteur est vivement encouragé à décrire sa proposition en donnant le maximum des informations -pertinentes. Le groupe peut, à cette fin, proposer un modèle des informations à -inclure, comme par exemple : -- status actuel de la PR (ex. : non terminé, en attente de revues, choix techniques à faire...) -- problème auquel réponds la PR (et références liées, par ex. : ticket sur le bugtracker, post sur le forum...) -- solution, stratégie, résumé des changements, et/ou choix techniques utilisés dans la PR -- comment tester la PR - -L'auteur est vivement encouragé à respecter les bonnes pratiques suivantes : -- une PR doit concerner exclusivement un sujet précis. Par exemple, elle ne doit pas à la fois résoudre un bug et ajouter une fonctionnalité (à moins que l'un implique l'autre) ; -- avant de débuter l'implémentation d'une fonctionnalité qui fait intervenir des choix de conception (nom et format de commande ou d'option, nouvelle API, interface utilisateur...), discuter en amont de manière informelle avec le groupe pour s'assurer que l'implémentation imaginée convienne au plus grand nombre et reste dans l'esprit du projet ; -- nommer sa PR avec un titre explicite, et la branche associée avec un nom explicite ; -- donner les références vers d'autres éléments liés à la PR (rapport de bug sur le bugtracker, message sur le forum...) - -Une PR peut être créée même si son auteur juge qu'elle n'est pas encore terminée. Dans ce cas, il doit déclarer explicitement dans le fil de discussion de la PR lorsqu'il juge la PR prête. Cela n'empêche pas les autres contributeurs d'émettre des avis sur la PR pendant ce temps. - -Il appartient aussi à l'auteur de la PR de juger de son importance. (Ce jugement pourra cependant être contesté par les autres membres du groupe concerné par la PR.) Les niveaux d'importance utilisés sont les suivants : -- **micro** : concerne uniquement un détail de forme et/ou qui ne nécessite pas d'être débattue et testée. Elle doit être facilement réversible. -- **mineure** : impacte de manière légère le projet (e.g. refactoring d'une petite partie de code, réparation d'un bug...) -- **moyenne** : impacte de manière significative l'architecture d'une partie du code (e.g. refactoring de tout un aspect ou de tout un fichier, ajout d'une fonctionnalité importante, sortie d'une version testing...) -- **majeure** : impacte lourdement l'ensemble du projet (e.g. migration d'une dépendance critique, changement de version de Debian, sortie d'une version stable...) - - -#### 2. Revue et validation collective - -(Cette section ne s'applique pas aux PR "micro" qui peuvent être validées directement par leur auteur.) - -Une fois la PR déclarée comme terminée, les contributeurs sont invités à donner leurs avis, relire et tester les changements proposés pour les valider. Lorsque des bugs ou des implémentations mauvaises ou incomplètes sont trouvées, les relecteurs rapportent cordialement le problème à l'auteur de la PR sur le fil de discussion. Si le problème trouvé est simple à corriger (e.g. typo ou détail de forme), le relecteur est encouragé à amender la PR pour corriger le problème lui-même. Sinon, l'auteur fait de son mieux pour corriger les problèmes soulevés. - -Les relecteurs rapportent également le degré de relecture et de tests effectués (c.f. liste ci-dessous). Selon l'importance de la PR (mineure, moyenne ou majeure), différents quotas de tests et approbations sont à remplir pour que celle-ci soit validée. Les relecteurs peuvent valider une fois chaque type de relecture/test nécessaire (par exemple, un relecteur peut donner un point d'accord sur le principe, un autre point de relecture en diagonale, et un autre point de test dans des cas simples.). L'auteur de la PR ne compte pas dans ces quotas de validation. La proposition doit aussi passer les tests automatiques disponibles dans le groupe (CI, tests unitaires/fonctionnels, linter...). - -| | **Mineure** | **Moyenne** | **Majeure** | -|-----------------------------------|-------------|--------------|-------------| -| **Accord sur le principe** | 2 | 3 | 4 | -| **Relecture en diagonale** | 1 | 2 | 3 | -| **Testé dans les cas simples** | 1 | 2 | 3 | -| **Relecture attentive** | 0 | 1 | 2 | -| **Testé dans des cas compliqués** | 0 | 1 | 2 | - -Si l'auteur ne fait pas parti du groupe concerné par la PR, tous ces quotas sont augmentés de 1. Dans tous les cas, ces quotas doivent être remplis au moins à 50% par des relecteurs membres du groupe concerné par la PR. (Ainsi, par exemple, un non-membre peut donner son accord sur le principe pour une PR mineure. Mais deux avis de non-membres pour une PR moyenne comptent uniquement pour un seul avis). - - -#### 3. Merge d'une pull request - -Une fois les quotas de relecture remplis, et si aucun refus n'a été prononcé et qu'aucune demande de changement n'est en attente, n'importe quel membre du groupe peut alors déclarer et marquer la PR comme "prête à être mergée". - -Pendant une durée de 3 jours suivant cette déclaration, les membres du groupe peuvent encore relire, demander des changements ou émettre un refus vis-à-vis de la PR. Dans ce cas, le merge est interrompu et le processus retourne à la partie 2. Pour les PRs moyennes et majeures, la durée est augmentée jusqu'à ce qu'il se soit écoulé au moins une semaine par rapport au moment où la PR a été déclarée comme prête par son auteur. - -À l'issue de cette durée, n'importe quel membre du groupe peut merger la PR. Lorsque celle-ci comporte plusieurs commits, il est recommandé d'utiliser la fonction "squash and merge" pour garder l'historique de commit propre. - -#### Cas particuliers - -Plusieurs cas particuliers peuvent se présenter et dont la résolution est décrite ci-après. - -##### Refus d'une PR - -Une PR peut être refusée et clôturée par n'importe quel membre du groupe concerné si : -- la PR a été créée au moins depuis deux semaines -- au moins deux membres du groupe ont manifesté un désaccord avec le principe de la PR -- aucun autre membre du groupe n'a manifesté son accord avec le principe de la PR - - -##### Co-création - -Une PR peut être développée par plusieurs personnes. Chacun est invité à y faire des commits en se concertant avec l'auteur initial ou le nouveau gestionnaire de PR si l'auteur est indisponible, manque de temps ou souhaite se consacrer à d'autres travaux. - -Si ces commits sont conséquents, dans ce cas on peut prendre **partiellement** en compte l'avis des auteurs dans les quotas de relectures et de tests. - -Exemple : si une PR est écrite par A et B (50/50), A et B pourront relire le code de l'autre. Dans ce cas, on pourra par exemple compter une relecture pour ces 2 relectures partielles. - - -##### Validation "allégé" en cas de manque de relecteurs - -En cas de manque de relecteurs, l'auteur d'une PR peut déclencher une procédure de validation alternative si : -- l'auteur est membre du groupe concerné par la PR -- il s'agit d'une PR mineure ou moyenne -- la PR a été déclarée comme prête -- il n'y a pas de demande de changement en attente -- les quotas de relecture "standards" n'ont pas été remplis -- une semaine s'est écoulée depuis le dernier commentaire ou commit - -Dans ce cas, l'auteur annonce sur le fil de discussion de la PR qu'il souhaite engager cette prodécure ainsi que sur la liste de diffusion (ou lors d'une réunion du mardi). À partir de ce moment, les quotas d'accord, relecture et tests pour valider cette PR sont diminués de 1. Au minimum une semaine devra s'écouler avant que cette PR ne soit effectivement mergée. Un autre membre du groupe peut à tout moment mettre fin à cette procédure si il juge la PR trop critique pour être mergée de la sorte. - -## Composition des groupes - -- Conseil : Bram, ju, ljf, Maniack, Moul, opi, theodore. -- Core Dev : AlexAubin, Bram, JimboJoe, Ju, ljf, Moul, opi -- Apps : Bram, cyp, frju365, JimboJoe, Josue-T, Ju, ljf, Maniack C, Maxime, Moul, Scith, Tostaki -- Infra : Bram, Ju, Maniack C, Moul, opi -- Communication - - Com : Bram, Moul, korbak, ljf, opi, frju365 - - Doc : Moul, Theodore - - Trad : Jean-Baptiste -- Distribution : Heyyounow - - -## Droits d’administration afférents aux groupes -Cette partie liste les kits de droits d’administration pour les différents groupes du projet YunoHost : - -(Attention, il ne s’agit pas des droits de prises de décisions dans ce cas). - -### Conseil -- Aucun droits d’administration. Les droits sont complétés avec le fait d’être présents dans les autres groupes, -- Forum : membre du [groupe `Conseil`](https://forum.yunohost.org/groups/Conseil). - -### Dev -- GitHub : membre de l’[équipe `Devs` de l’organisation `YunoHost`](https://github.com/orgs/YunoHost/teams/devs), -- Redmine : membre des projets [`YunoHost`](https://dev.yunohost.org/projects/yunohost) et [`Moulinette`](https://dev.yunohost.org/projects/moulinette), -- Intégration continue : droits sur les outils d’intégrations continue CI-core, -- XMPP : modérateur du salon [`dev`](xmpp:dev@conference.yunohost.org?join), -- Forum : membre du [groupe `Dev`](https://forum.yunohost.org/groups/Dev). - -### Infra -- Serveurs : accès SSH par clé sur certains (selon les besoins) ou sur la totalité des serveurs, -- GitHub : membre de l’[équipe `Infra` de l’organisation `YunoHost`](https://github.com/orgs/YunoHost/teams/infra), -- Redmine: membre du [projet `Infra`](https://dev.yunohost.org/projects/y-u-no-infra/), -- Forum, Weblate, Redmine, XMPP, CI: administrateur, -- Forum : membre du [groupe `Infra`](https://forum.yunohost.org/groups/Infra). - -### Apps -- GitHub : propriétaire (Owner) [de l’organisation YunoHost-Apps](https://github.com/orgs/YunoHost-Apps/people?utf8=%E2%9C%93&query=%20role%3Aowner), -- Redmine : membre du [projet `Apps`](https://dev.yunohost.org/projects/apps), -- GitHub : membre de l’[équipe `Apps` de l’organisation `YunoHost`](https://github.com/orgs/YunoHost/teams/apps), -- Intégration continue : accès à [CI-Apps](https://ci-apps.yunohost.org), -- XMPP : modérateur sur le [salon `Apps`](xmpp:apps@conference.yunohost.org?join), -- Forum : membre du [groupe `Apps`](https://forum.yunohost.org/groups/Apps). - -### Communication -- Forum : membre du [groupe `Com`](https://forum.yunohost.org/groups/Communication). - -#### Doc -- GitHub : membre de l’[équipe `Doc` de l’organisation `YunoHost`](https://github.com/orgs/YunoHost/teams/doc). - -#### Communication -- Diaspora* : accès au compte [YunoHost](https://framasphere.org/people/01868d20330c013459cf2a0000053625), -- Twitter : accès au compte [YunoHost](https://twitter.com/yunohost), -- Forum : accès au compte [`YunoHost`](https://forum.yunohost.org/users/yunohost/activity). - -#### Traduction -- Weblate : administrateur sur l’[outil de traduction](https://translate.yunohost.org/projects/yunohost/). - -#### Entraide -- Forum : statut de modérateur, -- XMPP : statut de modérateur sur le salon [`support`](xmpp:support@conference.yunohost.org?join). - -### Distribution -- GitHub : membre de l’[équipe `Distrib` de l’organisation `YunoHost`](https://github.com/orgs/YunoHost/teams/distribution), -- Information : la diffusion des images (ISO…) doit se faire en collaboration avec le groupe `Infra` (et `Doc`), -- Publication : un accès SFTP peut être mis en place, -- Forum : membre du [groupe `Distribution`](https://forum.yunohost.org/groups/Distribution). - -## Décisions à venir pour les groupes -### Conseil -- Faut-il élire les membres du Conseil plutôt que de les coopter ? Risque de se transformer en "campagne politique" ! -- Faut-il limiter l'ouverture des groupes d'intérêts par cooptation comme pour le Conseil ? -- Proposition de changer Conseil en Collégiale -- Migrer le serveur d’infrastructure du projet sous YunoHost. (avec apps déjà packagées pad, Gogs, Mumble?) -- Nouveau système pour la documentation -- Amélioration de la documentation -- Migration du serveur XMPP -- Hébergement de notre forge Git -- Revoir système de build : stable <— testing <— branches -- Gel de nohost.me et question de l'abandon des services - -### Groupe Dev - - Comment gérer les pull request ? - - Chaque ticket fait l'objet d'une branche et d'un ticket, tu fais une pull/merge request, la communauté vérifie que ça fonctionne, une décision est prise d'intégrer. - -### Groupe Apps - - Pour les apps communautaires, les issues sont bien sur GitHub, les discussions sur le forum - -### Groupe Communication -- Rapport de bug à partir du forum -- Faire en sorte de nettoyer le forum pour éviter le bruit -- Proposition de supprimer le salon de support -- Comment rendre le forum plus actif et central -- Comment s'organiser pour les privilèges sur le forum (si les groupes veulent voter sur le forum) - -### Autres -- Demande sur le forum avec notification des membres du Conseil et des représentants des groupes d’intérêts concernés. -- Vote sur deux semaines par un post sur le forum -- Créer quatre canaux pour le Dev, les Apps, la Communication et l'Infrastructure -- La release devrait être validée par l'ensemble des 4 (ou 5) groupes d’intérêts -- Communication en français et en anglais -- Annuaire ou contact des groupes pour les nouveaux arrivants. Voir peut-être annuaire tout court pour savoir qui fait quoi. https://yunohost.org/#/contribs_fr à compléter. Et à mettre en avant. -- Proposition de laisser les membres YunoHost s'auto déterminer -> Comment gérer les accès ? - -## Moyens de communication actuels - -- Rencontres à des évènements. -- Réunions hebdomadaires Mumble. -- [Forum](https://forum.yunohost.org). -- [Bugtracker Redmine](https://dev.yunohost.org). -- Forge Git pour la review de code : [YunoHost](https://github.com/YunoHost) [YunoHost-Apps](https://github.com/YunoHost-Apps). -- [Salons de discussions XMPP](https://yunohost.org/#/chat_rooms_fr) diff --git a/default_es.md b/orphaned/default.es.md similarity index 100% rename from default_es.md rename to orphaned/default.es.md diff --git a/default_fr.md b/orphaned/default.fr.md similarity index 100% rename from default_fr.md rename to orphaned/default.fr.md diff --git a/default_it.md b/orphaned/default.it.md similarity index 100% rename from default_it.md rename to orphaned/default.it.md diff --git a/default.md b/orphaned/default.md similarity index 100% rename from default.md rename to orphaned/default.md diff --git a/dns_es.md b/orphaned/dns.es.md similarity index 92% rename from dns_es.md rename to orphaned/dns.es.md index 988399df..b4a5f53b 100644 --- a/dns_es.md +++ b/orphaned/dns.es.md @@ -10,7 +10,7 @@ DNS significa « Domain Name Server » en inglés, y está frecuentemente empl **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). +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. diff --git a/dns_fr.md b/orphaned/dns.fr.md similarity index 95% rename from dns_fr.md rename to orphaned/dns.fr.md index 120d4f28..444ceadf 100644 --- a/dns_fr.md +++ b/orphaned/dns.fr.md @@ -14,7 +14,7 @@ DNS signifie « Domain Name Server » en anglais, et est souvent employé pour **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). +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. diff --git a/dns.md b/orphaned/dns.md similarity index 86% rename from dns.md rename to orphaned/dns.md index e6694149..9666ec73 100644 --- a/dns.md +++ b/orphaned/dns.md @@ -10,7 +10,7 @@ DNS stands for "Domain Name Server", and is often used for the configuration of **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). +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. @@ -26,7 +26,7 @@ You have several choices here. Note that you can mix and match solutions if you **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). +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. diff --git a/index_ar.md b/orphaned/index.ar.md similarity index 100% rename from index_ar.md rename to orphaned/index.ar.md diff --git a/index_de.md b/orphaned/index.de.md similarity index 99% rename from index_de.md rename to orphaned/index.de.md index a5ad393d..0fde591a 100644 --- a/index_de.md +++ b/orphaned/index.de.md @@ -88,7 +88,7 @@ Self-Hosting für alle ermöglicht.
- Uber YunoHost + Über YunoHost Dokumentation Mach mit! Forum diff --git a/index_es.md b/orphaned/index.es.md similarity index 100% rename from index_es.md rename to orphaned/index.es.md diff --git a/index_fr.md b/orphaned/index.fr.md similarity index 100% rename from index_fr.md rename to orphaned/index.fr.md diff --git a/index_it.md b/orphaned/index.it.md similarity index 100% rename from index_it.md rename to orphaned/index.it.md diff --git a/index.md b/orphaned/index.md similarity index 100% rename from index.md rename to orphaned/index.md diff --git a/index_oc.md b/orphaned/index.oc.md similarity index 100% rename from index_oc.md rename to orphaned/index.oc.md diff --git a/news.md b/orphaned/news.md similarity index 100% rename from news.md rename to orphaned/news.md diff --git a/registrar_fr.md b/orphaned/registrar.fr.md similarity index 63% rename from registrar_fr.md rename to orphaned/registrar.fr.md index 5a72830b..c8a5d5a0 100644 --- a/registrar_fr.md +++ b/orphaned/registrar.fr.md @@ -2,7 +2,7 @@ Voici une liste des bureaux d’enregistrement pour acheter un nom de domaine : * [OVH](http://ovh.com/) -* [GoDaddy](https://godaddy.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/registrar.md b/orphaned/registrar.md similarity index 59% rename from registrar.md rename to orphaned/registrar.md index dca14d4d..0fa657dc 100644 --- a/registrar.md +++ b/orphaned/registrar.md @@ -2,7 +2,7 @@ Here is a list of Registrars to book domain names: * [OVH](http://ovh.com/) -* [GoDaddy](https://godaddy.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/packaging_apps_helpers.md b/packaging_apps_helpers.md deleted file mode 100644 index a2c6fe4f..00000000 --- a/packaging_apps_helpers.md +++ /dev/null @@ -1,5461 +0,0 @@ - - -

App helpers

- -

Doc auto-generated by this script on 12/31/2020 (YunoHost version 4.1.2)

- - - -

apt

- - - -
-
-
-
ynh_package_is_installed
-
Check either a package is installed or not
-
-
-
-

- - Usage: ynh_package_is_installed --package=name - -

- -

- Arguments: -

    - - -
  • -p, --package= : the package name to check
  • - - -
-

- - - -

- Example: ynh_package_is_installed --package=yunohost && echo "ok" -

- - - -

- Details: -

- Requires YunoHost version 2.2.4 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_package_version
-
Get the version of an installed package
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_package_update
-
Update package index files
-
-
-
-

- - Usage: ynh_package_update - -

- - - - - -

- Details: -

- Requires YunoHost version 2.2.4 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_package_install
-
Install package(s)
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_package_remove
-
Remove package(s)
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_package_autoremove
-
Remove package(s) and their uneeded dependencies
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_package_autopurge
-
Purge package(s) and their uneeded dependencies
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_install_app_dependencies
-
Define and install dependencies with a equivs control file
-
-
-
-

- - Usage: ynh_install_app_dependencies dep [dep [...]] - -

- -

- Arguments: -

    - - -
  • dep : the package name to install in dependence. Writing "dep3|dep4|dep5" can be used to specify alternatives. For example : dep1 dep2 "dep3|dep4|dep5" will require to install dep1 and dep 2 and (dep3 or dep4 or dep5).
  • - - -
-

- - - - - -

- 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_add_app_dependencies
-
Add dependencies to install with ynh_install_app_dependencies
-
-
-
-

- - Usage: ynh_add_app_dependencies --package=phpversion [--replace] - -

- -

- Arguments: -

    - - -
  • -p, --package= : Packages to add as dependencies for the app.
  • - - - -
  • -r, --replace : Replace dependencies instead of adding to existing ones.
  • - - -
-

- - - - - -

- Details: -

- Requires YunoHost version 3.8.1 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_remove_app_dependencies
-
Remove fake package and its dependencies
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_install_extra_app_dependencies
-
Install packages from an extra repository properly.
-
-
-
-

- - 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 ! -

- -
-
- -
- - - - -

backup

- - - -
-
-
-
ynh_backup
-
Add a file or a directory to the list of paths to backup
-
-
-
-

- - 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.
  • - - - -
  • arg : Deprecated arg
  • - - -
-

- - - - - -

- Details: -

- This helper can be used both in a system backup hook, and in an app backup script

Details: ynh_backup writes SRC and the relative DEST into a CSV file. And it
creates the parent destination directory

If DEST is ended by a slash it complete this path with the basename of SRC.

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 ! -

- -
-
- -
- - - -
-
-
-
ynh_restore
-
Restore all files that were previously backuped in a core backup script or app backup script
-
-
-
-

- - Usage: ynh_restore - -

- - - - - -

- Details: -

- Requires YunoHost version 2.6.4 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_restore_file
-
Restore a file or a directory
-
-
-
-

- - 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 "/etc/nginx/conf.d/$domain.d/$app.conf" - -
    - - - You can also use relative paths: - -
    - - - ynh_restore_file "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
/home/yunohost.conf/backup/. Otherwise, the existing file is removed.

if apps/wordpress/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 ! -

- -
-
- -
- - - -
-
-
-
ynh_store_file_checksum
-
Calculate and store a file checksum into the app settings
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_backup_if_checksum_is_different
-
Verify the checksum and backup the file if it's different
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_delete_file_checksum
-
Delete a file checksum from the app settings
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_backup_before_upgrade
-
Make a backup in case of failed upgrade
-
-
-
-

- - Usage: ynh_backup_before_upgrade - ynh_clean_setup () { - ynh_restore_upgradebackup - } - ynh_abort_if_errors - -

- - - - - -

- Details: -

- Requires YunoHost version 2.7.2 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_restore_upgradebackup
-
Restore a previous backup if the upgrade process failed
-
-
-
-

- - Usage: ynh_backup_before_upgrade - ynh_clean_setup () { - ynh_restore_upgradebackup - } - ynh_abort_if_errors - -

- - - - - -

- Details: -

- Requires YunoHost version 2.7.2 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - - -

fail2ban

- - - -
-
-
-
ynh_add_fail2ban_config
-
Create a dedicated fail2ban config (jail and filter conf files)
-
-
-
-

- - Usage: 1: ynh_add_fail2ban_config --logpath=log_file --failregex=filter [--max_retry=max_retry] [--ports=ports] -2: ynh_add_fail2ban_config --use_template [--others_var="list of others variables to replace"] -| for example : 'var_1 var_2 ...' - -

- -

- 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
  • - - - -
  • -v, --others_var= : List of others variables to replace separeted by a space
  • - - -
-

- - - - - -

- Details: -

- -----------------------------------------------------------------------------

This will use a template in ../conf/f2b_jail.conf and ../conf/f2b_filter.conf
__APP__ by $app

You can dynamically replace others variables by example :
__VAR_1__ by $var_1
__VAR_2__ by $var_2

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 3.5.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_remove_fail2ban_config
-
Remove the dedicated fail2ban config (jail and filter conf files)
-
-
-
-

- - Usage: ynh_remove_fail2ban_config - -

- - - - - -

- Details: -

- Requires YunoHost version 3.5.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - - -

getopts

- - - - -

hardware

- - - -
-
-
-
ynh_get_ram
-
Get the total or free amount of RAM+swap on the system
-
-
-
-

- - 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 -

- - - - -

- Details: -

- Requires YunoHost version 3.8.1 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_require_ram
-
Return 0 or 1 depending if the system has a given amount of RAM+swap free or total
-
-
-
-

- - Usage: ynh_require_ram --required=RAM required in Mb [--free|--total] [--ignore_swap|--only_swap] -| exit: Return 1 if the ram is under the requirement, 0 otherwise. - -

- -

- 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
  • - - -
-

- - - - - -

- Details: -

- Requires YunoHost version 3.8.1 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - - -

logging

- - - -
-
-
-
ynh_die
-
Print a message to stderr and exit
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_print_info
-
Display a message in the 'INFO' logging category
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_print_warn
-
Print a warning on stderr
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_print_err
-
Print an error on stderr
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_exec_err
-
Execute a command and print the result as an error
-
-
-
-

- - Usage: ynh_exec_err your_command -ynh_exec_err "your_command | other_command" - -

- -

- Arguments: -

    - - -
  • command : command to execute
  • - - -
-

- - - - - -

- Details: -

- When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.

If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.

Requires YunoHost version 3.2.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_exec_warn
-
Execute a command and print the result as a warning
-
-
-
-

- - Usage: ynh_exec_warn your_command -ynh_exec_warn "your_command | other_command" - -

- -

- Arguments: -

    - - -
  • command : command to execute
  • - - -
-

- - - - - -

- Details: -

- When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.

If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.

Requires YunoHost version 3.2.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_exec_warn_less
-
Execute a command and force the result to be printed on stdout
-
-
-
-

- - Usage: ynh_exec_warn_less your_command -ynh_exec_warn_less "your_command | other_command" - -

- -

- Arguments: -

    - - -
  • command : command to execute
  • - - -
-

- - - - - -

- Details: -

- When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.

If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.

Requires YunoHost version 3.2.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_exec_quiet
-
Execute a command and redirect stdout in /dev/null
-
-
-
-

- - Usage: ynh_exec_quiet your_command -ynh_exec_quiet "your_command | other_command" - -

- -

- Arguments: -

    - - -
  • command : command to execute
  • - - -
-

- - - - - -

- Details: -

- When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.

If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.

Requires YunoHost version 3.2.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_exec_fully_quiet
-
Execute a command and redirect stdout and stderr in /dev/null
-
-
-
-

- - Usage: ynh_exec_fully_quiet your_command -ynh_exec_fully_quiet "your_command | other_command" - -

- -

- Arguments: -

    - - -
  • command : command to execute
  • - - -
-

- - - - - -

- Details: -

- When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.

If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.

Requires YunoHost version 3.2.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_print_OFF
-
Remove any logs for all the following commands.
-
-
-
-

- - Usage: ynh_print_OFF - -

- - - - - -

- Details: -

- WARNING: You should be careful with this helper, and never forget to use ynh_print_ON as soon as possible to restore the logging.

Requires YunoHost version 3.2.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_print_ON
-
Restore the logging after ynh_print_OFF
-
-
-
-

- - Usage: ynh_print_ON - -

- - - - - -

- Details: -

- Requires YunoHost version 3.2.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_script_progression
-
Print a progress bar showing the progression of an app script
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_return
-
Return data to the YunoHost core for later processing -(to be used by special hooks like app config panel and core diagnosis)
-
-
-
-

- - Usage: ynh_return somedata - -

- - - - - -

- Details: -

- Requires YunoHost version 3.6.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_debug
-
Debugger for app packagers
-
-
-
-

- - Usage: ynh_debug [--message=message] [--trace=1/0] - -

- -

- Arguments: -

    - - -
  • -m, --message= : The text to print
  • - - - -
  • -t, --trace= : Turn on or off the trace of the script. Usefull to trace nonly a small part of a script.
  • - - -
-

- - - - - -

- Details: -

- Requires YunoHost version 3.5.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_debug_exec
-
Execute a command and print the result as debug
-
-
-
-

- - Usage: ynh_debug_exec your_command -ynh_debug_exec "your_command | other_command" - -

- -

- Arguments: -

    - - -
  • command : command to execute
  • - - -
-

- - - - - -

- Details: -

- When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.

If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.

Requires YunoHost version 3.5.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - - -

logrotate

- - - -
-
-
-
ynh_use_logrotate
-
Use logrotate to manage the logfile
-
-
-
-

- - 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 be just a directory, or a full path to a logfile :
/parentdir/logdir
/parentdir/logdir/logfile.log

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 ! -

- -
-
- -
- - - -
-
-
-
ynh_remove_logrotate
-
Remove the app's logrotate config.
-
-
-
-

- - Usage: ynh_remove_logrotate - -

- - - - - -

- Details: -

- Requires YunoHost version 2.6.4 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - - -

mysql

- - - -
-
-
-
ynh_mysql_connect_as
-
Open a connection as a user
-
-
-
-

- - 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
  • - - -
-

- - - -

- Example: ynh_mysql_connect_as --user="user" --password="pass" <<< "UPDATE ...;" example: 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_mysql_execute_as_root
-
Execute a command as root user
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_mysql_execute_file_as_root
-
Execute a command from a file as root user
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_mysql_dump_db
-
Dump a database
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_mysql_user_exists
-
Check if a mysql user exists
-
-
-
-

- - Usage: ynh_mysql_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 2.2.4 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_mysql_setup_db
-
Create a database, an user and its password. Then store the password in the app's config
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_mysql_remove_db
-
Remove a database if it exists, and the associated user
-
-
-
-

- - 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 ! -

- -
-
- -
- - - - -

network

- - - -
-
-
-
ynh_find_port
-
Find a free port and return it
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_port_available
-
Test if a port is available
-
-
-
-

- - Usage: ynh_find_port --port=XYZ -| exit: Return 1 if the port is already used by another process. - -

- -

- Arguments: -

    - - -
  • -p, --port= : port to check
  • - - -
-

- - - -

- Example: ynh_port_available --port=1234 || ynh_die "Port 1234 is needs to be available for this app" -

- - - -

- Details: -

- Requires YunoHost version 3.8.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_validate_ip4
-
Validate an IPv4 address
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_validate_ip6
-
Validate an IPv6 address
-
-
-
-

- - 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 ! -

- -
-
- -
- - - - -

nginx

- - - -
-
-
-
ynh_add_nginx_config
-
Create a dedicated nginx config
-
-
-
-

- - Usage: ynh_add_nginx_config "list of others variables to replace" - -

- -

- Arguments: -

    - - -
  • list : (Optional) list of others variables to replace separated by spaces. For example : 'path_2 port_2 ...'
  • - - -
-

- - - - - -

- Details: -

- This will use a template in ../conf/nginx.conf
__PATH__ by $path_url
__DOMAIN__ by $domain
__PORT__ by $port
__NAME__ by $app
__FINALPATH__ by $final_path
__PHPVERSION__ by $YNH_PHP_VERSION ($YNH_PHP_VERSION is either the default php version or the version defined for the app)

And dynamic variables (from the last example) :
__PATH_2__ by $path_2
__PORT_2__ by $port_2

Requires YunoHost version 2.7.2 or higher.
Requires YunoHost version 2.7.13 or higher for dynamic variables

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_remove_nginx_config
-
Remove the dedicated nginx config
-
-
-
-

- - Usage: ynh_remove_nginx_config - -

- - - - - -

- Details: -

- Requires YunoHost version 2.7.2 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - - -

nodejs

- - - -
-
-
-
ynh_use_nodejs
-
Load the version of node for an app, and set variables.
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_install_nodejs
-
Install a specific version of nodejs
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_remove_nodejs
-
Remove the version of node used by the app.
-
-
-
-

- - 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 ! -

- -
-
- -
- - - - -

php

- - - -
-
-
-
ynh_add_fpm_config
-
Create a dedicated PHP-FPM config
-
-
-
-

- - Usage: 1: ynh_add_fpm_config [--phpversion=7.X] [--use_template] [--package=packages] [--dedicated_service] -2: ynh_add_fpm_config [--phpversion=7.X] --usage=usage --footprint=footprint [--package=packages] [--dedicated_service] -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. -Or specify exactly the footprint, the load of the service as MB by pool instead of having a standard value. -To have this value, use the following command and stress the service. -watch -n0.5 ps -o user,cmd,%cpu,rss -u APP - -

- -

- Arguments: -

    - - -
  • -v, --phpversion= : Version of PHP to use.
  • - - - -
  • -t, --use_template : Use this helper in template mode.
  • - - - -
  • -p, --package= : Additionnal PHP packages to install
  • - - - -
  • -d, --dedicated_service : Use a dedicated PHP-FPM service instead of the common one.
  • - - - -
  • -v, --phpversion= : Version of PHP to use.
  • - - - -
  • -f, --footprint= : Memory footprint of the service (low/medium/high).
  • - - - -
  • -u, --usage= : Expected usage of the service (low/medium/high).
  • - - - -
  • -p, --package= : Additionnal PHP packages to install for a specific version of PHP
  • - - - -
  • -d, --dedicated_service : Use a dedicated PHP-FPM service instead of the common one.
  • - - -
-

- - - - - -

- Details: -

- -----------------------------------------------------------------------------

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 2.7.2 or higher.
Requires YunoHost version 3.5.1 or higher for the argument --phpversion
Requires YunoHost version 3.8.1 or higher for the arguments --use_template, --usage, --footprint, --package and --dedicated_service

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_remove_fpm_config
-
Remove the dedicated PHP-FPM config
-
-
-
-

- - Usage: ynh_remove_fpm_config - -

- - - - - -

- Details: -

- Requires YunoHost version 2.7.2 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - - -

postgresql

- - - -
-
-
-
ynh_psql_connect_as
-
Open a connection as a user
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_psql_execute_as_root
-
Execute a command as root user
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_psql_execute_file_as_root
-
Execute a command from a file as root user
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_psql_dump_db
-
Dump a database
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_psql_user_exists
-
Check if a psql user exists
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_psql_database_exists
-
Check if a psql database exists
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_psql_setup_db
-
Create a database, an user and its password. Then store the password in the app's config
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_psql_remove_db
-
Remove a database if it exists, and the associated user
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_psql_test_if_first_run
-
Create a master password and set up global settings -It also make sure that postgresql is installed and running -Please always call this script in install and restore scripts
-
-
-
-

- - Usage: ynh_psql_test_if_first_run - -

- - - - - -

- Details: -

- Requires YunoHost version 2.7.13 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - - -

setting

- - - -
-
-
-
ynh_app_setting_get
-
Get an application setting
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_app_setting_set
-
Set an application setting
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_app_setting_delete
-
Delete an application setting
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_webpath_available
-
Check availability of a web path
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_webpath_register
-
Register/book a web path for an app
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_permission_create
-
Create a new permission for the app
-
-
-
-

- - 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] -| Not that if 'show_tile' is enabled, this URL will be the URL of the tile. -| Default is "APP_LABEL (permission name)". -| Default is false (for the permission different than 'main'). -| won't be able to add or remove the visitors group of this permission. -| By default it's 'false' - -

- -

- Arguments: -

    - - -
  • -p, : - the name for the permission (by default a permission named "main" already exist)
  • - - - -
  • -u, : - (optional) URL for which access will be allowed/forbidden.
  • - - - -
  • -A, : - (optional) List of additional URL for which access will be allowed/forbidden
  • - - - -
  • -h, : - (optional) Define for the URL of this permission, if SSOwat pass the authentication header to the application. Default is true
  • - - - -
  • -a, : - (optional) A list of group/user to allow for the permission
  • - - - -
  • -l, : - (optional) Define a name for the permission. This label will be shown on the SSO and in the admin.
  • - - - -
  • -t, : - (optional) Define if a tile will be shown in the SSO. If yes the name of the tile will be the 'label' parameter.
  • - - - -
  • -P, : - (optional) Define if this permission is protected. If it is protected the administrator
  • - - -
-

- - - - - -

- 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_permission_delete
-
Remove a permission for the app (note that when the app is removed all permission is automatically removed)
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_permission_exists
-
Check if a permission exists
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_permission_url
-
Redefine the url associated to a permission
-
-
-
-

- - 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] -| Note that if you want to remove url you can pass an empty sting as arguments (""). - -

- -

- Arguments: -

    - - -
  • -p, : - the name for the permission (by default a permission named "main" is removed automatically when the app is removed)
  • - - - -
  • -u, : - (optional) URL for which access will be allowed/forbidden.
  • - - - -
  • -a, : - (optional) List of additional url to add for which access will be allowed/forbidden.
  • - - - -
  • -r, : - (optional) List of additional url to remove for which access will be allowed/forbidden
  • - - - -
  • -h, : - (optional) Define for the URL of this permission, if SSOwat pass the authentication header to the application
  • - - - -
  • -c, : - (optional) Clean all urls (url and additional_urls)
  • - - -
-

- - - - - -

- Details: -

- Requires YunoHost version 3.7.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_permission_update
-
Update a permission for the app
-
-
-
-

- - Usage: ynh_permission_update --permission "permission" [--add="group" ["group" ...]] [--remove="group" ["group" ...]] - [--label="label"] [--show_tile=true|false] [--protected=true|false] -| won't be able to add or remove the visitors group of this permission. - -

- -

- Arguments: -

    - - -
  • -p, : - the name for the permission (by default a permission named "main" already exist)
  • - - - -
  • -a, : - the list of group or users to enable add to the permission
  • - - - -
  • -r, : - the list of group or users to remove from the permission
  • - - - -
  • -l, : - (optional) Define a name for the permission. This label will be shown on the SSO and in the admin.
  • - - - -
  • -t, : - (optional) Define if a tile will be shown in the SSO
  • - - - -
  • -P, : - (optional) Define if this permission is protected. If it is protected the administrator
  • - - -
-

- - - - - -

- Details: -

- Requires YunoHost version 3.7.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_permission_has_user
-
Check if a permission has an user
-
-
-
-

- - 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 ! -

- -
-
- -
- - - - -

string

- - - -
-
-
-
ynh_string_random
-
Generate a random string
-
-
-
-

- - Usage: ynh_string_random [--length=string_length] - -

- -

- Arguments: -

    - - -
  • -l, --length= : the string length to generate (default: 24)
  • - - -
-

- - -

- 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_replace_string
-
Substitute/replace a string (or expression) by another in a file
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_replace_special_string
-
Substitute/replace a special string by another in a file
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_sanitize_dbid
-
Sanitize a string intended to be the name of a database -(More specifically : replace - and . by _)
-
-
-
-

- - 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: -

- Requires YunoHost version 2.2.4 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - - -

systemd

- - - -
-
-
-
ynh_add_systemd_config
-
Create a dedicated systemd config
-
-
-
-

- - Usage: ynh_add_systemd_config [--service=service] [--template=template] -ynh_add_systemd_config [--service=service] [--template=template] [--others_var="list of others variables to replace"] - -

- -

- 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)
  • - - - -
  • -v, --others_var= : List of others variables to replace separated by a space. For example: 'var_1 var_2 ...'
  • - - -
-

- - - - - -

- Details: -

- This will use the template ../conf/.service
to generate a systemd config, by replacing the following keywords
with global variables that should be defined before calling
this helper :

__APP__ by $app
__FINALPATH__ by $final_path

And dynamic variables (from the last example) :
__VAR_1__ by $var_1
__VAR_2__ by $var_2

Requires YunoHost version 2.7.11 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_remove_systemd_config
-
Remove the dedicated systemd config
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_systemd_action
-
Start (or other actions) a service, print a log in case of failure and optionnaly wait until the service is completely started
-
-
-
-

- - 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. WARNING: When using --line_match, you should always add `ynh_clean_check_starting` into your `ynh_clean_setup` at the beginning of the script. Otherwise, tail will not stop in case of failure of the script. The script will then hang forever.
  • - - - -
  • -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 : Default : 20
  • - - -
-

- - - - - -

- Details: -

- Requires YunoHost version 3.5.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_clean_check_starting
-
Clean temporary process and file used by ynh_check_starting -(usually used in ynh_clean_setup scripts)
-
-
-
-

- - Usage: ynh_clean_check_starting - -

- - - - - -

- Details: -

- Requires YunoHost version 3.5.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - - -

user

- - - -
-
-
-
ynh_user_exists
-
Check if a YunoHost user exists
-
-
-
-

- - Usage: ynh_user_exists --username=username -| exit: Return 1 if the user doesn't exist, 0 otherwise - -

- -

- Arguments: -

    - - -
  • -u, --username= : the username to check
  • - - -
-

- - - -

- Example: ynh_user_exists 'toto' || exit 1 -

- - - -

- Details: -

- Requires YunoHost version 2.2.4 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_user_get_info
-
Retrieve a YunoHost user information
-
-
-
-

- - 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: string - the key's value -

- - -

- Example: mail=$(ynh_user_get_info 'toto' 'mail') -

- - - -

- Details: -

- Requires YunoHost version 2.2.4 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_user_list
-
Get the list of YunoHost users
-
-
-
-

- - Usage: ynh_user_list - -

- - -

- Returns: string - one username per line -

- - -

- Example: for u in $(ynh_user_list); do ... -

- - - -

- Details: -

- Requires YunoHost version 2.4.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_system_user_exists
-
Check if a user exists on the system
-
-
-
-

- - Usage: ynh_system_user_exists --username=username -| exit: Return 1 if the user doesn't exist, 0 otherwise - -

- -

- Arguments: -

    - - -
  • -u, --username= : the username to check
  • - - -
-

- - - - - -

- Details: -

- Requires YunoHost version 2.2.4 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_system_group_exists
-
Check if a group exists on the system
-
-
-
-

- - Usage: ynh_system_group_exists --group=group -| exit: Return 1 if the group doesn't exist, 0 otherwise - -

- -

- Arguments: -

    - - -
  • -g, --group= : the group to check
  • - - -
-

- - - - - -

- Details: -

- Requires YunoHost version 3.5.0.2 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_system_user_create
-
Create a system user
-
-
-
-

- - Usage: ynh_system_user_create --username=user_name [--home_dir=home_dir] [--use_shell] - -

- -

- 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
  • - - -
-

- - - - -

- Examples:

    - - - 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 - -
    - -
-

- - -

- Details: -

- Requires YunoHost version 2.6.4 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_system_user_delete
-
Delete a system user
-
-
-
-

- - 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 ! -

- -
-
- -
- - - - -

utils

- - - -
-
-
-
ynh_abort_if_errors
-
Exits if an error occurs during the execution of the script.
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_setup_source
-
Download, check integrity, uncompress and patch the source from app.src
-
-
-
-

- - Usage: ynh_setup_source --dest_dir=dest_dir [--source_id=source_id] - -

- -

- Arguments: -

    - - -
  • -d, --dest_dir= : Directory where to setup sources
  • - - - -
  • -s, --source_id= : Name of the app, if the package contains more than one app
  • - - -
-

- - - - - -

- Details: -

- The file conf/app.src need to contains:

SOURCE_URL=Address to download the app archive
SOURCE_SUM=Control sum
# (Optional) Program to check the integrity (sha256sum, md5sum...)
# default: sha256
SOURCE_SUM_PRG=sha256
# (Optional) Archive format
# default: tar.gz
SOURCE_FORMAT=tar.gz
# (Optional) Put false if sources are directly in the archive root
# default: true
# Instead of true, SOURCE_IN_SUBDIR could be the number of sub directories
# to remove.
SOURCE_IN_SUBDIR=false
# (Optionnal) Name of the local archive (offline setup support)
# default: ${src_id}.${src_format}
SOURCE_FILENAME=example.tar.gz
# (Optional) If it set as false don't extract the source.
# (Useful to get a debian package or a python wheel.)
# default: true
SOURCE_EXTRACT=(true|false)

Details:
This helper downloads sources from SOURCE_URL if there is no local source
archive in /opt/yunohost-apps-src/APP_ID/SOURCE_FILENAME

Next, it checks the integrity with "SOURCE_SUM_PRG -c --status" command.

If it's ok, the source archive will be uncompressed in $dest_dir. If the
SOURCE_IN_SUBDIR is true, the first level directory of the archive will be
removed.
If SOURCE_IN_SUBDIR is a numeric value, 2 for example, the 2 first level
directories will be removed

Finally, patches named sources/patches/${src_id}-*.patch and extra files in
sources/extra_files/$src_id will be applied to dest_dir

Requires YunoHost version 2.6.4 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_local_curl
-
Curl abstraction to help with POST requests to local pages (such as installation forms)
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_add_config
-
Create a dedicated config file from a template
-
-
-
-

- - 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="$final_path/.env" - -
    - - - ynh_add_config --template="../conf/.env" --destination="$final_path/.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
__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 ! -

- -
-
- -
- - - -
-
-
-
ynh_get_debian_release
-
Fetch the Debian release codename
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_secure_remove
-
Remove a file or a directory securely
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_read_manifest
-
Read the value of a key in a ynh manifest file
-
-
-
-

- - 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 ! -

- -
-
- -
- - - -
-
-
-
ynh_app_upstream_version
-
Read the upstream version from the manifest, or from the env variable $YNH_APP_MANIFEST_VERSION if not given
-
-
-
-

- - 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: -

- The version number in the manifest is defined by ~ynh
For example : 4.3-2~ynh3
This include the number before ~ynh
In the last example it return 4.3-2

Requires YunoHost version 3.5.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_app_package_version
-
Read package version from the manifest
-
-
-
-

- - 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 : 4.3-2~ynh3
This include the number after ~ynh
In the last example it return 3

Requires YunoHost version 3.5.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_check_app_version_changed
-
Checks the app version to upgrade with the existing app version and returns:
-
-
-
-

- - Usage: ynh_check_app_version_changed - -

- - - - - -

- Details: -

- - UPGRADE_APP if the upstream app version has changed
- UPGRADE_PACKAGE if only the YunoHost package has changed

It stops the current script without error if the package is up-to-date

This helper should be used to avoid an upgrade of an app, or the upstream part
of it, when it's not needed

To force an upgrade, even if the package is up to date,
you have to set the variable YNH_FORCE_UPGRADE before.
example: sudo YNH_FORCE_UPGRADE=1 yunohost app upgrade MyApp

Requires YunoHost version 3.5.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - -
-
-
-
ynh_compare_current_package_version
-
Compare the current package version against another version given as an argument. -This is really useful when we need to do some actions only for some old package versions.
-
-
-
-

- - Usage: ynh_compare_current_package_version --comparison lt|le|eq|ne|ge|gt -| eq (equal), ne (not equal), ge (greater or equal), gt (greater than) - -

- -

- Arguments: -

    - - -
  • --comparison : Comparison type. Could be : lt (lower than), le (lower or equal),
  • - - - -
  • --version : The version to compare. Need to be a version in the yunohost package version type (like 2.3.1~ynh4)
  • - - -
-

- - - -

- Example: ynh_compare_current_package_version --comparison lt --version 2.3.2~ynh1 This example will check if the installed version is lower than (lt) the version 2.3.2~ynh1 -

- - - -

- Details: -

- Generally you might probably use it as follow in the upgrade script

if ynh_compare_current_package_version --comparaison lt --version 2.3.2~ynh1
then
# Do something that is needed for the package version older than 2.3.2~ynh1
fi

Return 0 if the evaluation is true. 1 if false.

Requires YunoHost version 3.8.0 or higher.

-

-

- -

- Dude, show me the code ! -

- -
-
- -
- - - - - \ No newline at end of file diff --git a/packaging_apps_hooks.md b/packaging_apps_hooks.md deleted file mode 100644 index 247301d2..00000000 --- a/packaging_apps_hooks.md +++ /dev/null @@ -1,191 +0,0 @@ -# The use of YunoHost hooks - -Hooks allow you to trigger a script when an action is performed by the system. -The most obvious case is adding a user. If the app has a `post_user_create` hook, this hook will be triggered as soon as a user is added. -Therefore, this allows an application to execute actions based on events occurring on the system. - -### List of available hooks - -- `post_domain_add` -After adding a domain. -- `post_domain_remove` -After deleting a domain. -- `post_user_create` -After adding a user. -- `post_user_delete` -After deleting a user. -- `post_iptable_rules` -After reloading the firewall. -- `pre_backup_delete` -Before deleting a backup. -- `post_backup_delete` -After deleting a backup. -- `post_app_addaccess` -After adding an authorized user to an application. -- `post_app_removeaccess` -After the removal of a user's authorization on an application. -- `post_app_clearaccess` -After erasing all the access rules on an application. -- `post_app_install` -After installing an application. -- `post_app_upgrade` -After upgrading an application. -- `post_app_remove` -After removing an application. -- `post_app_change_url` -After modifying the path and/or the domain name of an application. -- `post_cert_update` -After updating a certificate -- `conf_regen` -Before and after the regeneration of a service configuration. -Services supported by `regen-conf`: - - avahi-daemon - - dnsmasq - - dovecot - - fail2ban - - glances - - metronome - - mysql - - nginx - - nslcd - - nsswitch - - postfix - - rspamd - - slapd - - ssh - - ssl - -### Hooks setup - -With the exception of the `conf_regen` hook, all hooks are used in the same way. -First of all, you have to understand that a hook is a simple bash script that will be executed by YunoHost when the indicated event occurs. -To add a hook to YunoHost, you must use a "hooks" folder at the root of the application package. Then, put your script in this folder under the name of the corresponding hook. - -> For example: -For the hook `post_user_create`, the script which will have to be executed for this hook should be placed in `hooks/post_user_create` in the app package. - -During the installation and the upgrade of the application, the scripts in the hooks folder will be duplicated in the folder `/etc/yunohost/hooks.d/` in the folder corresponding to the hook, then under the name `50-$app`. -All hooks belonging to an application will be removed when the apllication is deleted. - -### Building a hook script - -As a bash script, a hook script must start with the bash shebang. - -```bash -#!/bin/bash -``` - -Then you have to take the arguments given by YunoHost when calling the script. -Each hook offers different arguments. - -##### `post_domain_add` and `post_domain_remove` - -```bash -domain=$1 -``` - -##### `post_user_create` - -```bash -username=$1 -mail=$2 -password=$3 # Clear password -firstname=$4 -lastname=$5 -``` -##### `post_user_delete` - -```bash -username=$1 -purge=$2 # True/False Indicates whether the user folder has been deleted or not. -``` - -##### `post_iptable_rules` - -```bash -upnp=$1 # True/False Indicates if UPnP is activated or not. -ipv6=$2 # True/False Indicates whether IPV6 is enabled or not. -``` - -##### `pre_backup_delete` and `post_backup_delete` - -```bash -backup_name=$1 -``` - -##### `post_app_install`, `post_app_upgrade`, `post_app_remove` and `post_app_change_url` - -Usable variables in these scripts are the same as those available in [associated actions scripts](/packaging_apps_scripts). - -Example: for `post_app_install` the variables are the same as for the script `install` - -##### `post_app_addaccess` and `post_app_removeaccess` - -```bash -app_id=$1 -users=$2 # All authorized users on the app. Separated by commas. -``` - -##### `post_app_clearaccess` - -```bash -app_id=$1 -``` - -##### `post_cert_update` -```bash -domain=$1 -``` - -The rest of the script depends on what you want to do in it. - -### `conf_regen` special case -The `conf_regen` hook is a more delicate hook, either for its implementation or for its content. - -##### `conf_regen` hook setup - -A `conf_regen` hook should not be placed in the application's hooks folder. It must be set up manually. -The hook should be copied, indicating to which service it is linked. -```bash -cp hook_regen_conf /usr/share/yunohost/hooks/conf_regen/50-SERVICE_$app -``` - -> When removing the application, this hook must be removed manually. - -##### Building `conf_regen` hook script - -`conf_regen` hook is called two times, a first time after analysis of the configuration and before any modification of the files, then a second time after applying the modifications, if there has been modifications. - -`conf_regen` hook script should look like this: - -```bash -#!/bin/bash - -force=${2:-0} # 0/1 --force argument -dryrun=${3:-0} # 0/1 --dry-run argument -pending_conf=$4 # Path of the pending conf file - -do_pre_regen() { - # Put your code here for pre regen conf. -} - -do_post_regen() { - # Put your code here for post regen conf. - # Be careful, this part will be executed only if the configuration has been modified. -} - -case "$1" in - pre) - do_pre_regen - ;; - post) - do_post_regen - ;; - *) - echo "Hook called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac - -exit 0 -``` diff --git a/packaging_apps_hooks_fr.md b/packaging_apps_hooks_fr.md deleted file mode 100644 index 6339cc69..00000000 --- a/packaging_apps_hooks_fr.md +++ /dev/null @@ -1,192 +0,0 @@ -# Usage des hooks YunoHost - -Les hooks permettent de déclencher un script lorsqu'une action est effectuée par le système. -Le cas le plus évident, est l'ajout d'un utilisateur. Si l'app dispose d'un hook `post_user_create`, ce hook sera déclenché dés qu'un utilisateur sera ajouté. -Cela permet donc à une application d'exécuter des actions en fonction des évènements intervenant sur le système. - -### Liste des hooks disponibles - -- `post_domain_add` -Après l'ajout d'un domaine. -- `post_domain_remove` -Après la suppression d'un domaine. -- `post_user_create` -Après l'ajout d'un utilisateur. -- `post_user_delete` -Après la suppression d'un utilisateur. -- `post_iptable_rules` -Après le rechargement du parefeu. -- `pre_backup_delete` -Avant la suppression d'un backup. -- `post_backup_delete` -Après la suppression d'un backup. -- `post_app_addaccess` -Après l'ajout d'un utilisateur autorisé sur une application. -- `post_app_removeaccess` -Après la suppression de l'autorisation d'un utilisateur sur une application. -- `post_app_clearaccess` -Après l'effacement de toute les règles d'accès sur une application. -- `post_app_install` -Après l'installation d'une application. -- `post_app_upgrade` -Après l'upgrade d'une applications. -- `post_app_remove` -Après la supression d'une applications. -- `post_app_change_url` -Après avoir modifié le chemin et/ou le nom de domaine d'une application. -- `post_cert_update` -Après la mise à jour d'un certificat. -- `conf_regen` -Avant et après la régénération de la configuration d'un service. -Services pris en charge par `regen-conf` : - - avahi-daemon - - dnsmasq - - dovecot - - fail2ban - - glances - - metronome - - mysql - - nginx - - nslcd - - nsswitch - - postfix - - rspamd - - slapd - - ssh - - ssl - -### Mise en place des hooks - -À l'exception du hook `conf_regen`, tout les hooks s'utilisent de la même manière. -Tout d'abord, il faut comprendre qu'un hook est un simple script bash qui sera exécuté par YunoHost lorsque l'évènement indiqué se présentera. -Pour ajouter un hook à YunoHost, il faut utiliser un dossier "hooks" à la racine du package de l'application. Puis dans celui-ci mettre votre script sous le nom du hooks correspondant. - -> Par exemple : -Pour un hook `post_user_create`, le script qui devra être exécuté pour ce hook doit simplement être placé dans `hooks/post_user_create` dans le package. - -Lors de l'installation et de l'upgrade, les scripts dans le dossier hooks seront dupliqués dans le dossier `/etc/yunohost/hooks.d/` dans le dossier correspondant au hook, puis sous le nom `50-$app`. -Lors de la suppression de l'application, tout les hooks lui appartenant seront supprimés. - -### Construire un script de hook - -En tant que script bash, un script de hook doit commencer par le shebang bash - -```bash -#!/bin/bash -``` - -Ensuite il convient de prendre les arguments donnés par YunoHost lors de l'appel du script. -Chaque hook propose des arguments différents. - -##### `post_domain_add` et `post_domain_remove` - -```bash -domain=$1 -``` - -##### `post_user_create` - -```bash -username=$1 -mail=$2 -password=$3 # Clear password -firstname=$4 -lastname=$5 -``` -##### `post_user_delete` - -```bash -username=$1 -purge=$2 # True/False Indique si le dossier utilisateur a été supprimé ou pas. -``` - -##### `post_iptable_rules` - -```bash -upnp=$1 # True/False Indique si l'UPnP est activé ou non. -ipv6=$2 # True/False Indique si l'IPV6 est activé ou non. -``` - -##### `pre_backup_delete` et `post_backup_delete` - -```bash -backup_name=$1 -``` - -##### `post_app_install`, `post_app_upgrade`, `post_app_remove` et `post_app_change_url` - -Les variables utilisables dans ces scripts sont les mêmes que celles disponibles dans [les scripts d'actions associés](/packaging_apps_scripts). - - -Example : pour `post_app_install` les variables sont les mêmes que pour le script `install` - -##### `post_app_addaccess` et `post_app_removeaccess` - -```bash -app_id=$1 -users=$2 # Tous les utilisateurs autorisés sur l'app. Séparés par des virgules. -``` - -##### `post_app_clearaccess` - -```bash -app_id=$1 -``` - -##### `post_cert_update` -```bash -domain=$1 -``` - -La suite du script dépend de ce que vous voulez effectuer dans celui-ci. - -### Cas particulier de `conf_regen` -Le hook `conf_regen` est un hook plus délicat, que ce soit pour sa mise en place ou pour son contenu. - -##### Mise en place d'un hook `conf_regen` - -Un hook `conf_regen` ne doit pas être placé dans le dossier hooks de l'application. Il doit être mis en place manuellement. -Le hook doit être copié en indiquant à quel service il est lié. -```bash -cp hook_regen_conf /usr/share/yunohost/hooks/conf_regen/50-SERVICE_$app -``` - -> Lors de la suppression de l'application, ce hook devra être supprimé manuellement. - -##### Construire un script de hook conf_regen - -Un hook `conf_regen` est appelé 2 fois, une première fois après analyse de la configuration et avant une éventuelle modification des fichiers, puis une seconde fois après application des modifications, si il y a eu des modifications. - -Un script de hook `conf_regen` devrait donc ressembler à ça : - -```bash -#!/bin/bash - -force=${2:-0} # 0/1 --force argument -dryrun=${3:-0} # 0/1 --dry-run argument -pending_conf=$4 # Path of the pending conf file - -do_pre_regen() { - # Put your code here for pre regen conf. -} - -do_post_regen() { - # Put your code here for post regen conf. - # Be careful, this part will be executed only if the configuration has been modified. -} - -case "$1" in - pre) - do_pre_regen - ;; - post) - do_post_regen - ;; - *) - echo "Hook called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac - -exit 0 -``` diff --git a/packaging_apps_levels_fr.md b/packaging_apps_levels_fr.md deleted file mode 100644 index ff75b387..00000000 --- a/packaging_apps_levels_fr.md +++ /dev/null @@ -1,163 +0,0 @@ -# Niveaux de qualité des packages d’applications YunoHost - -Afin de faciliter le packaging d'applications par des étapes successives à atteindre, chaque package est affublé d'un niveau de qualité, de 0 à 10. -Un package doit satisfaire un certain nombre de critères pour atteindre chaque niveau. De plus pour atteindre un niveau, le package doit avoir préalablement atteint le niveau précédent. - -Ce classement des applications par niveaux présente 3 avantages : -- Le packaging d'application est d'autant plus ludique, avec des objectifs clairs à atteindre et des étapes successives. -- Une application correctement packagée est davantage mise en avant qu'une application ne respectant pas les règles de packaging. -- Les utilisateurs peuvent rapidement voir le niveau d'une application et ainsi savoir si le package est de bonne qualité. - -## Résumé des niveaux - -**Niveau 0** -L'application ne fonctionne pas. - -**Niveau 1** -L'application s'installe et se désinstalle correctement dans certains cas. - -**Niveau 2** -L'application s'installe et se désinstalle correctement dans toutes les configurations communes. - -**Niveau 3** -L'application peut être mise à jour. - -**Niveau 4** -L'application peut-être sauvegardée et restaurée. - -**Niveau 5** -Le code du package d'application respecte certaines règles de syntaxe. - -**Niveau 6** -Le package d'application est dans l'organisation YunoHost-Apps. - -**Niveau 7** -Le package d'application passe avec succès l'ensemble des tests d'intégrité. - -**Niveau 8** -Le package d'application respecte toute les recommendations de packaging d'apps. C'est une app de très bonne qualité. - -**Niveau 9** -Le package d'application respecte des recommandations de packaging supérieures. Non disponible pour le moment. - -**Niveau 10** -Le package d'application est jugé parfait ! - -## Les niveaux de qualité en détails : - -### Niveau 0 -**L'application ne s'installe pas ou ne fonctionne pas après installation.** -C'est le niveau le plus bas, une application de niveau 0 est considérée comme non fonctionnelle. - -YEP à respecter pour atteindre le niveau 0 : -- [YEP 1.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-11---nommer-son-app-et-son-d%C3%A9pot---valid%C3%A9--manuel--notworking-) : Nommer son app et son dépôt -- [YEP 1.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-12---inscrire-lapp-sur-un-r%C3%A9pertoire-connu---valid%C3%A9--manuel--notworking-) : Inscrire l'app sur un "répertoire" connu - -### Niveau 1 -**L'application s'installe et se désinstalle correctement.** -Mais des exceptions sont possibles, si au moins une méthode d'installation est fonctionnelle ainsi que sa suppression alors l'application est considérée comme fonctionnelle. - -YEP à respecter pour atteindre le niveau 1 : -- [YEP 2.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-22---utiliser-bash-pour-les-scripts-principaux---valid%C3%A9--auto--working-) : Utiliser bash pour les scripts principaux -- [YEP 2.5](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-25---copier-correctement-des-fichiers----brouillon--manuel--working-) : Copier correctement des fichiers -- [YEP 2.7](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-27---donner-des-permissions-suffisantes-aux-instructions-bash----valid%C3%A9--auto--working-) : Donner des permissions suffisantes aux instructions bash -- [YEP 2.15](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-215---v%C3%A9rifier-les-param%C3%A8tres-saisies-par-lutilisateur----valid%C3%A9--manuel--official-) : Suivre les instructions d'installation de l'application - -### Niveau 2 -**L'application s'installe et se désinstalle dans toutes les configurations communes.** - -- Installation en sous-dossier. -- Installation à la racine d'un domaine ou d'un sous-domaine. -- Installation privée (sécurisée par le SSO). -- Installation publique. -- Installation multi-instance. -- Désinstallation dans les mêmes circonstances. - -*Si une application ne permet pas certaines configurations d'installation, celles-ci doivent être indiquées clairement dans le readme du package. Toutefois, le niveau 2 ne peut pas être atteint si une configuration d'installation est volontairement écartée sans raison valable.* -*Cela n'empêche pas de restreindre volontairement les installations publiques, privées ou multi-instance si l'application le justifie.* - -YEP à respecter pour atteindre le niveau 2 : -- [YEP 1.5](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-15---mettre-%C3%A0-jour-r%C3%A9guli%C3%A8rement-le-statut-de-lapp---brouillon--manuel--working-) : Mettre à jour régulièrement le statut de l'app -- *[YEP 2.18.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2182---supporter-linstallation-sur-un-domaine----valid%C3%A9--auto--working-) : Supporter l'installation sur un domaine* -- *[YEP 2.18.3](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2183---supporter-linstallation-sur-un-sous-domaine----valid%C3%A9--auto--working-) : Supporter l'installation sur un sous-domaine* -- *[YEP 2.18.4](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2184---supporter-linstallation-sur-un-sous-dossier----valid%C3%A9--auto--official-) : Supporter l'installation sur un sous-dossier* -- *[YEP 4.6](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-46---g%C3%A8re-le-multi-instance----valid%C3%A9--manuel--optional-) : Gère le multi-instance* - -### Niveau 3 -**L'application supporte l'upgrade depuis une ancienne version du package.** -L'application doit pouvoir être mise à jour depuis une version précédente du package sans provoquer d'erreur. - -YEP à respecter pour atteindre le niveau 3 : -- [YEP 2.3](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-23---sauvegarder-les-r%C3%A9ponses-lors-de-linstallation---valid%C3%A9--manuel--working-) : Sauvegarder les réponses lors de l'installation - -### Niveau 4 -**L'application peut-être sauvegardée et restaurée sans erreur sur la même machine ou une autre.** - -YEP à respecter pour atteindre le niveau 4 : -- *[YEP 4.3](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-43---fournir-un-script-de-sauvegarde-yunohost-fonctionnel----valid%C3%A9--auto--official-) : Fournir un script de sauvegarde YunoHost fonctionnel* -- *[YEP 4.4](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-44---fournir-un-script-de-restauration-yunohost-fonctionnel----valid%C3%A9--auto--official-) : Fournir un script de restauration YunoHost fonctionnel* - -### Niveau 5 -**L'application ne présente aucune erreur dans [Package linter](https://github.com/YunoHost/package_linter).** -*Il peut y avoir des faux positifs dans Package linter. Ces situations seront gérées au cas par cas.* - -YEP à respecter pour atteindre le niveau 5 : -- *[YEP 1.3](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-13---indiquer-la-licence-associ%C3%A9e-au-paquet---valid%C3%A9--auto--working-) : Indiquer la licence associée au paquet* -- *[YEP 2.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-21---respecter-le-format-du-manifeste---valid%C3%A9--auto--inprogress-) : Respecter le format du manifeste* -- [YEP 2.12](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-212---utiliser-les-commandes-pratiques-helpers---valid%C3%A9--auto--official-) : Utiliser les commandes pratiques (helpers) -- [YEP 2.18.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2181---lancer-le-script-dinstallation-dune-webapp-correctement----valid%C3%A9--manuel--working-) : Lancer le script d'installation d'une webapp correctement - -### Niveau 6 -**Le package d'application est dans l'organisation YunoHost-Apps.** - -YEP à respecter pour atteindre le niveau 6 : -- [YEP 1.4](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-14---informer-sur-lintention-de-maintenir-un-paquet----brouillon--manuel--working-) : Informer sur l'intention de maintenir un paquet -- [YEP 1.6](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-16---se-tenir-inform%C3%A9-sur-l%C3%A9volution-du-packaging-dapps---valid%C3%A9--manuel--official-) : Se tenir informé sur l'évolution du packaging d'apps -- *[YEP 1.7](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-17---ajouter-lapp-%C3%A0-lorganisation-yunohost-apps---valid%C3%A9--manuel--official-) : Ajouter l'app à l'[organisation YunoHost-Apps](https://github.com/YunoHost-Apps)* -- [YEP 1.8](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-18---publier-des-demandes-de-test---valid%C3%A9--manuel--official-) : Publier des demandes de test -- [YEP 1.9](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-19---documenter-lapp---valid%C3%A9--auto--official-) : Documenter l'app -- [YEP 1.10](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-110---garder-un-historique-de-version-propre----brouillon--manuel--official-) : Garder un historique de version propre -- [YEP 2.9](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-29---enlever-toutes-traces-de-lapp-lors-de-la-suppression----brouillon--manuel--working-) : Enlever toutes traces de l'app lors de la suppression -- [YEP 3.3](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-33---faciliter-le-contr%C3%B4le-de-lint%C3%A9grit%C3%A9-des-sources----brouillon--manuel--official-) : Faciliter le contrôle de l'intégrité des sources -- [YEP 3.5](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-35---suivre-les-recommendations-de-la-documentation-de-lapp----valid%C3%A9--manuel--official-) : Suivre les recommandations de la documentation de l'app -- [YEP 3.6](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-36---mettre-%C3%A0-jour-les-versions-contenant-des-cve----draft--manuel--official-) : Mettre à jour les versions contenant des CVE - -### Niveau 7 -**L'application ne présente aucune erreur dans [Package check](https://github.com/YunoHost/package_check).** -En considérant le maximum de tests possibles pour l'application. - -YEP à respecter pour atteindre le niveau 7 : -- [YEP 2.4](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-24---d%C3%A9tecter-et-g%C3%A9rer-les-erreurs---brouillon--manuel--working-) : Détecter et gérer les erreurs -- [YEP 2.6](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-26---annuler-laction-si-les-valeurs-dentr%C3%A9es-sont-incorrectes----valid%C3%A9--manuel--working-) : Annuler l'action si les valeurs d'entrées sont incorrectes -- [YEP 2.8](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-28---modifier-correctement-une-configuration-syst%C3%A8me----brouillon--manuel--working-) : Modifier correctement une configuration système -- [YEP 2.10](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-210---configurer-les-logs-de-lapplication----brouillon--manuel--working-) : Configurer les logs de l'application -- [YEP 2.11](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-211---utiliser-une-variable-plut%C3%B4t-que-lapp-id-directement---valid%C3%A9--manuel--official-) : Utiliser une variable plutôt que l'app id directement -- [YEP 2.13](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-213---traduire-le-package-en-anglais----brouillon--manuel--official-) : Traduire le package en anglais -- [YEP 3.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-32---ouvrir-un-port-correctement----brouillon--manuel--working-) : Ouvrir un port correctement - -### Niveau 8 -**Le package d'application respecte toute les recommandations de packaging d'apps. C'est une app de très bonne qualité.** - -YEP à respecter pour atteindre le niveau 8 : -- [YEP 1.12](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-112) : Respect le modèle de l'application d'exemple -- Prise en charge du changement d'URL -- *[YEP 2.16](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-216---v%C3%A9rifier-la-disponibilit%C3%A9-des-d%C3%A9pendances-sur-arm-x86-et-x64----valid%C3%A9--manuel--official-) : Vérifier la disponibilité des dépendances sur ARM, x86 et x64* -- [YEP 2.18.5](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2185---ajouter-la-tuile-yunohost-pour-naviguer-facilement-entre-les-applications----valid%C3%A9--manuel--official-) : Ajouter la tuile YunoHost pour naviguer facilement entre les applications -- [YEP 4.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-41---lier-au-ldap----valid%C3%A9--manuel--official-) : Lier au LDAP -- [YEP 4.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-42---lier-lauthentification-au-sso----valid%C3%A9--manuel--official-) : Lier l'authentification au SSO -- [YEP 4.5](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-45---utiliser-les-hooks----valid%C3%A9--manuel--optional-) : Utiliser les hooks - -*Si une application n'est pas disponible sur une architecture, et qu'il est impossible de contourner cette limitation raisonnablement, cette limitation doit être indiquée dans le readme et prise en compte dans le script d'installation. L'installation de l'application sur une architecture non supportée doit être stoppée avant de modifier les fichiers.* - -### Niveau 9 -**L'application respecte toutes les YEP optionnelles.** - -YEP à respecter pour atteindre le niveau 9 : -- [YEP 2.14](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-214---remplir-correctement-un-fichier-de-conf----brouillon--manuel--official-) : Remplir correctement un fichier de conf -- [YEP 2.17](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-217---prendre-en-compte-la-version-dorigine-lors-des-mises-%C3%A0-jour----valid%C3%A9--manuel--official-) : Prendre en compte la version d'origine lors des mises à jour -- [YEP 3.4](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-34---isoler-lapp----brouillon--manuel--official-) : Isoler l'app -- [YEP 4.2.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-421---d%C3%A9connexion----valid%C3%A9--manuel--official-) : Déconnexion - -### Niveau 10 -**L'application est jugée parfaite !** -Ce niveau ultime pour une application ne peux être atteint que suite à étude approfondie du package et par la validation du groupe Apps. 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/selfhosting_de.md b/pages/01.overview/05.self_hosting/self_hosting.de.md similarity index 96% rename from selfhosting_de.md rename to pages/01.overview/05.self_hosting/self_hosting.de.md index 4272963c..593f9bdb 100644 --- a/selfhosting_de.md +++ b/pages/01.overview/05.self_hosting/self_hosting.de.md @@ -1,4 +1,11 @@ -# Self-Hosting +--- +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. @@ -19,7 +26,7 @@ Beim Self-Hosting geht es nicht darum, "Ihr Internet" sicherer zu machen, und es ## 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. +- **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. 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/selfhosting_fr.md b/pages/01.overview/05.self_hosting/self_hosting.fr.md similarity index 72% rename from selfhosting_fr.md rename to pages/01.overview/05.self_hosting/self_hosting.fr.md index 86b40080..c78ede8d 100644 --- a/selfhosting_fr.md +++ b/pages/01.overview/05.self_hosting/self_hosting.fr.md @@ -1,20 +1,27 @@ -# L’auto-hébergement +--- +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. +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 gouvernement 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 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 parties 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 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'exploitations (OS) et d'Internet. Il vous faudra possiblement toucher à la ligne de commande et à des morceaux de configuration réseau et DNS. +- **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 persistent ? Avec votre propre serveur, vous pouvez manuellement installer et faire tourner n'importe quel programme et personnaliser chaque morceau. +- **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 ? @@ -22,4 +29,4 @@ Pratiquer l'auto-hébergement ne rend pas "votre internet" plus sécurisé et ne - **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 marcheront 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. +- **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/selfhosting.md b/pages/01.overview/05.self_hosting/self_hosting.md similarity index 97% rename from selfhosting.md rename to pages/01.overview/05.self_hosting/self_hosting.md index 2ab4f82c..9dadb2b1 100644 --- a/selfhosting.md +++ b/pages/01.overview/05.self_hosting/self_hosting.md @@ -1,4 +1,11 @@ -# Self-hosting +--- +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. diff --git a/selfhosting_ru.md b/pages/01.overview/05.self_hosting/self_hosting.ru.md similarity index 89% rename from selfhosting_ru.md rename to pages/01.overview/05.self_hosting/self_hosting.ru.md index ec11365b..8453bd6c 100644 --- a/selfhosting_ru.md +++ b/pages/01.overview/05.self_hosting/self_hosting.ru.md @@ -1,10 +1,17 @@ -# Самостоятельное развертывание (свой хостинг) +--- +title: Самостоятельное развертывание (свой хостинг) +template: docs +taxonomy: + category: docs +routes: + default: '/selfhosting' +--- #### Значение **Свой хостинг** - это сервер, расположенный у вас дома и предназначенный для размещения информации для личных нужд. #### Обязанности администратора -Свой хостинг создает для вас определенные обязанности, если вы хотите разместить на нём сайт, [e-mail](/email), а также запустить [систему мгновенных сообщений](XMPP), ваш сервер должен работать и оставаться онлайн 24/7. +Свой хостинг создает для вас определенные обязанности, если вы хотите разместить на нём сайт, [e-mail](/email), а также запустить [систему мгновенных сообщений](/XMPP), ваш сервер должен работать и оставаться онлайн 24/7. Распространенные проблемы, по причине которых сервер может быть недоступен включают в себя: отсутствие электроэнергии, потеря доступа к Интернету, итд. @@ -20,7 +27,7 @@ * Вы - единственный хозяин ваших данных и сервисов; * Возможность децентрализации и использования распределенных сетей; - +![](image://networks.png?resize=500) #### Другие проекты, предназначенные для самостоятельного развертывания ##### В активной разработке diff --git a/whatsyunohost_ar.md b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.ar.md similarity index 71% rename from whatsyunohost_ar.md rename to pages/01.overview/10.what_is_yunohost/what_is_yunohost.ar.md index d1776397..dc13bdf2 100644 --- a/whatsyunohost_ar.md +++ b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.ar.md @@ -1,17 +1,21 @@ -#
ماذا نعني بـ واي يونوهوست YunoHost ؟
+--- +title: ماذا نعني بـ واي يونوهوست YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + +![YunoHost logo](image://YunoHost_logo_vertical.png?resize=400&id=ynhlogo) -
واي يونوهوست YunoHost هو **نظام لتشغيل الخوادم** صُمِّم لتسهيل الإستضافة الذاتية لخدمات الإنترنت. -هو مُرتكز و منسجم كافة الإنسجام مع توزيعة [غنو/لينكس ديبيان](https://debian.org). -
- - +هو مُرتكز و منسجم كافة الإنسجام مع توزيعة غنو/لينكس ديبيان. --- -###
خصائصه
+### خصائصه -
- متعدد المستعملين مع تكامُل LDAP - متعدد النطاقات - خدمة البريد الإلكتروني @@ -20,68 +24,59 @@ - نظام للتطبيقات - نظام للنسخ الإحتياطي - نظام لإعادة توليد الإعدادات و الخدمات -
- - --- -###
أصل فكرة المشروع
+### أصل فكرة المشروع + -
تعود نشأة فكرة مشروع واي يونوهوست YunoHost إلى شهر فيفري مِن عام 2012 بعد محادثة بدأت على هذا الشكل تقريبًا : -
-

« تبًا، لقد سئِمتُ مِن إعادة إعداد خادم البريد الإلكتروني ... Beudbeud، كيف قُمتَ بإعداد خادومك الجميل حول LDAP ؟ »

+ +
« تبًا، لقد سئِمتُ مِن إعادة إعداد خادم البريد الإلكتروني ... 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 » و بالمعنى التقريبي « لماذا لا تستضيف نفسك بنفسك ». [ميم الإنترنت](https://ar.m.wikipedia.org/wiki/%D9%85%D9%8A%D9%85_%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA) الذي يصف المعنى بالتقريب هو : -
-
+**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. -لا تتردّدوا في زيارة صفحة « [ساهموا](/contribute) ». -
+لا تتردّدوا في زيارة صفحة « ساهموا». --- -###
الأمان
+### الأمان + +لقد بُذِلت كل المجهودات مِن أجل تأمين واي يونوهوست YunoHost و **تعمية و تشفير البروتوكولات** . بإمكانكم الإطلاع على الشرح بتفاصيليه هنا. -لقد بُذِلت كل المجهودات مِن أجل تأمين واي يونوهوست YunoHost و **تعمية و تشفير البروتوكولات** . بإمكانكم الإطلاع على الشرح بتفاصيليه [هنا](/security). -
--- -###
واي يونوهوست 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/whatsyunohost_fr.md b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.fr.md similarity index 58% rename from whatsyunohost_fr.md rename to pages/01.overview/10.what_is_yunohost/what_is_yunohost.fr.md index 6ab914a1..c140cb52 100644 --- a/whatsyunohost_fr.md +++ b/pages/01.overview/10.what_is_yunohost/what_is_yunohost.fr.md @@ -1,22 +1,29 @@ -# Qu’est-ce que YunoHost ? +--- +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 -- basé sur Debian ; -- administration via une **interface web simple et claire** ; -- déployez des **applications en quelques clics** ; -- ajoutez des **utilisateurs** (gérés via un annuaire LDAP) ; -- gérez des **noms de domaine** ; -- créez et restaurez des **sauvegardes** ; -- connexion simultanée à toutes les apps via un **portail utilisateur** (nginx, SSOwat) ; -- fourni avec un **serveur mail complet** (Postfix, Dovecot, Rspamd, DKIM) ; -- ... ainsi qu'un **serveur de messagerie instantanée** (XMPP) ; -- gère les **certificats SSL** (basé sur Let's Encrypt) ; -- ... et des **systèmes de sécurité** (Fail2Ban, yunohost-firewall) ; +- ![](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 @@ -30,7 +37,7 @@ Il ne manquait en fait qu’une interface d’administration au serveur de Beudb 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 ? @@ -44,10 +51,7 @@ Vous pouvez héberger vos amis, votre famille ou votre entreprise sans problème Logo YunoHost noir et blanc réalisé par ToZz (400 × 400 px) : - - - - -Cliquer pour télécharger. +[![](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..ce471acf --- /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://en.wikipedia.org/wiki/Internet_meme) должен проиллюстрировать это: +![](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/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/howtohostyourself_de.md b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.de.md similarity index 92% rename from howtohostyourself_de.md rename to pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.de.md index d764b8e3..e1016ed9 100644 --- a/howtohostyourself_de.md +++ b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.de.md @@ -1,4 +1,11 @@ -# So hosten Sie selbst ? +--- +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: @@ -7,7 +14,7 @@ Sie können zu Hause (auf einem kleinen Computer) oder auf einem Remote-Server h 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). +- **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 @@ -18,14 +25,14 @@ Ein VPN ist ein verschlüsselter Tunnel zwischen zwei Computern. In der Praxis s ### 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 "Cloud"-Anbietern mieten. +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 - +
@@ -60,7 +67,7 @@ Sie können einen virtuellen privaten Server oder eine dedizierte Maschine von [ - + 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 + +
Mögliche ISP-EinschränkungenJa
(siehe [hier](/isp))
Ja
(siehe hier)
Per VPN umgangen Normalerweise nein
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
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/howtohostyourself_fr.md b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.fr.md similarity index 82% rename from howtohostyourself_fr.md rename to pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.fr.md index 497dee37..1547a296 100644 --- a/howtohostyourself_fr.md +++ b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.fr.md @@ -1,4 +1,11 @@ -# Choisir son mode d’autohébergement +--- +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 : @@ -7,25 +14,25 @@ Vous pouvez vous auto-héberger à la maison (sur un petit ordinateur), ou sur u 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). +- **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/). +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. +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é - +
@@ -59,8 +66,8 @@ Vous pouvez louer un serveur privé virtuel ou une machine dédiée à des hébe - - + + 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 + +
Non
Limitation possibles
par le FAI
Oui
(voir [ici](/isp))
Limitations possibles
par le FAI
Oui
(voir ici)
Contournées par le VPN Généralement non
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
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/howtohostyourself.md b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.md similarity index 91% rename from howtohostyourself.md rename to pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.md index b6ea7d0f..7f4e8af1 100644 --- a/howtohostyourself.md +++ b/pages/02.administer/05.how_to_host_yourself/how_to_host_yourself.md @@ -1,4 +1,11 @@ -# How to host yourself? +--- +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: @@ -7,7 +14,7 @@ You can host yourself at home (on a small computer), or on a remote server. Each 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). +- **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 @@ -18,14 +25,14 @@ A VPN is an encrypted tunnel between two machines. In practice, it makes it "as ### 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 "Cloud" providers. +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 - +
@@ -60,7 +67,7 @@ You can rent a virtual private server or a dedicated machine from [associative]( - + @@ -80,4 +87,4 @@ You can rent a virtual private server or a dedicated machine from [associative]( -
Possible ISP limitationsYes
(see [here](/isp))
Yes
(see here)
Bypassed by VPN Typically no
Typically pretty good
+ \ No newline at end of file diff --git a/pages/02.administer/10.install/05.images/images.ar.md b/pages/02.administer/10.install/05.images/images.ar.md new file mode 100644 index 00000000..ec4d1c36 --- /dev/null +++ b/pages/02.administer/10.install/05.images/images.ar.md @@ -0,0 +1,68 @@ +--- +title: الصور +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- + +
+
+
+
+ + + + + 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..4a568873 --- /dev/null +++ b/pages/02.administer/10.install/05.images/images.de.md @@ -0,0 +1,77 @@ +--- +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/images_es.md b/pages/02.administer/10.install/05.images/images.es.md similarity index 50% rename from images_es.md rename to pages/02.administer/10.install/05.images/images.es.md index e9c0ee0f..408610d9 100644 --- a/images_es.md +++ b/pages/02.administer/10.install/05.images/images.es.md @@ -1,4 +1,11 @@ -# Imagenes +--- +title: Imagenes +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- Esta página requiere que Javascript esté instalado par aparecer correctamente :s. @@ -8,82 +15,29 @@ Esta página requiere que Javascript esté instalado par aparecer correctamente 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..63cc47e4 --- /dev/null +++ b/pages/02.administer/10.install/05.images/images.fr.md @@ -0,0 +1,82 @@ +--- +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). + +! Certaines images sont encore 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`. +! Cette opération n'est pas nécessaire pour YunoHost 11.x (images Bullseye) + +
+
+
+
+ + + + + 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..4c4fb1d2 --- /dev/null +++ b/pages/02.administer/10.install/05.images/images.md @@ -0,0 +1,82 @@ +--- +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). + +! Some images are still in 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`. +! You don't need to do that for YunoHost 11.x (Bullseye images) + +
+
+
+
+ + + + + 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/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/isp_box_config_es.md b/pages/02.administer/10.install/15.isp_box_config/isp_box_config.es.md similarity index 68% rename from isp_box_config_es.md rename to pages/02.administer/10.install/15.isp_box_config/isp_box_config.es.md index 022cc596..e8fc229b 100644 --- a/isp_box_config_es.md +++ b/pages/02.administer/10.install/15.isp_box_config/isp_box_config.es.md @@ -1,6 +1,21 @@ -# Configurar la redirección de los puertos +--- +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). Si quieres una explicación sencilla de lo que es y por qué necesitas redirigir los puertos, puedes echar un vistazo a [esta página](/port_forwarding). [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. +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 @@ -33,9 +48,7 @@ Luego tienes que redirigir cada uno de los puertos listados a continuación haci * [XMPP](/XMPP): 5222 (clients), 5269 (servers) * [Email](/email): 25, 587 (SMTP), 993 (IMAP) -
- 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. -
+! [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 diff --git a/isp_box_config_fr.md b/pages/02.administer/10.install/15.isp_box_config/isp_box_config.fr.md similarity index 53% rename from isp_box_config_fr.md rename to pages/02.administer/10.install/15.isp_box_config/isp_box_config.fr.md index 640044dc..4ab88031 100644 --- a/isp_box_config_fr.md +++ b/pages/02.administer/10.install/15.isp_box_config/isp_box_config.fr.md @@ -1,44 +1,55 @@ -# Configurer la redirection des ports +--- +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"). Si vous souhaitez une explication courte de ce qu'est et pourquoi vous avez besoin de rediriger les ports, vous pouvez jeter un œil à [cette page-ci](/port_forwarding). [Cette page-là](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. +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. -### 0. Diagnostiquer les ports ouverts +[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. -### 1. Accéder à l'interface d'administration de votre box/routeur +### 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). +fournis par votre fournisseur d'accès à Internet (FAI). -### 2. Trouver l'IP locale de votre serveur +### 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 'Details' à côté de la ligne sur IPv4. +- 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`. -### 3. Rediriger les ports +### 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. Certains interfaces font références à un port 'externe' et un port 'interne' : dans notre cas il s'agit du même. +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 (servers) +* [XMPP](/XMPP): 5222 (clients), 5269 (serveurs) * [Email](/email): 25, 587 (SMTP), 993 (IMAP) -
- 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. -
+! [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 @@ -47,4 +58,3 @@ Une technologie nommée UPnP est disponible sur certains routeurs/box et permet ```bash sudo yunohost firewall reload ``` - diff --git a/isp_box_config.md b/pages/02.administer/10.install/15.isp_box_config/isp_box_config.md similarity index 69% rename from isp_box_config.md rename to pages/02.administer/10.install/15.isp_box_config/isp_box_config.md index 93247eb6..9b64dfd7 100644 --- a/isp_box_config.md +++ b/pages/02.administer/10.install/15.isp_box_config/isp_box_config.md @@ -1,6 +1,17 @@ -# Configure port-forwarding +--- +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"). If you want a short explanation on what is and why you need port forwarding, have a look to [this page](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 @@ -9,7 +20,7 @@ correctly exposed. ### 1. Access your box/router administration interface -Your box/router admin interface is usually reachable via http://192.168.0.1 or http://192.168.1.1. Then, you will probably need to authenticate yourself with your internet server provider's credentials. +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 @@ -37,9 +48,7 @@ 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. -
- 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. -
+! [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 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..3680a41f --- /dev/null +++ b/pages/02.administer/10.install/20.dns_config/dns_config.de.md @@ -0,0 +1,112 @@ +--- +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 +# +# 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 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` (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 ip4:111.222.33.44 -all"` | +| TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=uneGrannnndeClef"` | +| 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. + +### 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/dns_config_es.md b/pages/02.administer/10.install/20.dns_config/dns_config.es.md similarity index 94% rename from dns_config_es.md rename to pages/02.administer/10.install/20.dns_config/dns_config.es.md index 77562be7..c09c730e 100644 --- a/dns_config_es.md +++ b/pages/02.administer/10.install/20.dns_config/dns_config.es.md @@ -1,4 +1,13 @@ -# Configuración de la zona DNS +--- +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. @@ -41,7 +50,7 @@ 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" +@ 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" ``` @@ -62,7 +71,7 @@ Pero puede ser un poco más fácil entenderla viéndola de esta manera : | CNAME | vjud | `@` | | CNAME | xmpp-upload | `@` | | **MX** | **@** | `tu.dominio.tld.` (y prioridad: 10) | -| TXT | @ | `"v=spf1 a mx ip4:111.222.33.44 -all"` | +| TXT | @ | `"v=spf1 a mx -all"` | | TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=uneGrannnndeClef"` | | TXT | _dmarc | `"v=DMARC1; p=none"` | diff --git a/dns_config_fr.md b/pages/02.administer/10.install/20.dns_config/dns_config.fr.md similarity index 86% rename from dns_config_fr.md rename to pages/02.administer/10.install/20.dns_config/dns_config.fr.md index 2d8528b7..7e725afe 100644 --- a/dns_config_fr.md +++ b/pages/02.administer/10.install/20.dns_config/dns_config.fr.md @@ -1,8 +1,17 @@ -# Configuration de la zone DNS +--- +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éhensible par les êtres humains (les noms de -domaines) en adresses compréhensibles par la machine (les IPs). Pour que +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. @@ -50,12 +59,12 @@ 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" +@ 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 si affichée de la façon +Mais il est peut-être plus facile de la comprendre affichée de la façon suivante : | Type | Nom | Valeur | @@ -71,7 +80,7 @@ suivante : | CNAME | vjud | `@` | | CNAME | xmpp-upload | `@` | | **MX** | **@** | `votre.domaine.tld.` (et priorité: 10) | -| TXT | @ | `"v=spf1 a mx ip4:111.222.33.44 -all"` | +| TXT | @ | `"v=spf1 a mx -all"` | | TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=uneGrannnndeClef"` | | TXT | _dmarc | `"v=DMARC1; p=none"` | @@ -79,10 +88,10 @@ suivante : - 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 ;) ; -- `@` corresponds à `votre.domaine.tld`, et par ex. `muc` corresponds à `muc.votre.domaine.tld` ; +- `@` 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 certains que l'IPv6 fonctionne sur votre serveur ! Vous aurez des problèmes avec Let's Encrypt si ce n'est pas le cas. +- 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. ### Résolution DNS inverse @@ -92,7 +101,7 @@ inverse](https://fr.wikipedia.org/wiki/Domain_Name_System#R%C3%A9solution_invers 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.** +**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 diff --git a/dns_config.md b/pages/02.administer/10.install/20.dns_config/dns_config.md similarity index 95% rename from dns_config.md rename to pages/02.administer/10.install/20.dns_config/dns_config.md index 7ec00ca4..01c0c756 100644 --- a/dns_config.md +++ b/pages/02.administer/10.install/20.dns_config/dns_config.md @@ -1,4 +1,13 @@ -# DNS zone configuration +--- +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 @@ -49,7 +58,7 @@ 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 ip4:111.222.33.44 -all" +@ 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" ``` @@ -70,7 +79,7 @@ Though it might be easier to understand it if displayed like this: | CNAME | vjud | `@` | | CNAME | xmpp-upload | `@` | | **MX** | **@** | `your.domain.tld.` (and priority: 10) | -| TXT | @ | `"v=spf1 a mx ip4:111.222.33.44 -all"` | +| TXT | @ | `"v=spf1 a mx -all"` | | TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=someHuuuuuuugeKey"` | | TXT | _dmarc | `"v=DMARC1; p=none"` | 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..ead8916c --- /dev/null +++ b/pages/02.administer/10.install/install.fr.md @@ -0,0 +1,674 @@ +--- +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: + - '/docker' + - '/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, rpi2plus, rpi1, rpi0, arm_sup, arm_unsup, vps, vps_debian, vps_ynh, virtualbox, internetcube, docker = 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 = 'La Brique Internet' %} +{% elseif hardware == 'rpi2plus' %} + {% set arm, rpi2plus = true, true %} +{% elseif hardware == 'rpi1' %} + {% set arm, rpi1 = true, true %} +{% elseif hardware == 'rpi0' %} + {% set arm, rpi0 = true, true %} +{% elseif hardware == 'arm_sup' %} + {% set arm, arm_sup = true, true %} +{% elseif hardware == 'arm_unsup' %} + {% set arm, arm_unsup = true, 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 == 'docker' %} + {% set docker = 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 rpi2plus or rpi1 or rpi0 %} active{% endif %}"] +[[figure caption="Raspberry Pi"]![](image://raspberrypi.jpg?height=75)[/figure]](/install/hardware:rpi2plus) +[/div] + +[div class="flex-child hardware{%if arm_sup or arm_unsup or internetcube %} active{% endif %}"] +[[figure caption="Carte ARM"]![](image://olinuxino.jpg?height=75)[/figure]](/install/hardware:arm_sup) +[/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 rpi2plus or rpi1 or rpi0 %} +[div class="flex-child hardware{%if rpi2plus %} active{% endif %}"] +[[figure caption="Raspberry Pi 2, 3 ou 4"]![](image://raspberrypi.jpg?height=50)[/figure]](/install/hardware:rpi2plus) +[/div] + +[div class="flex-child hardware{%if rpi1 %} active{% endif %}"] +[[figure caption="Raspberry Pi 1"]![](image://rpi1.jpg?height=50)[/figure]](/install/hardware:rpi1) +[/div] + +[div class="flex-child hardware{%if rpi0 %} active{% endif %}"] +[[figure caption="Raspberry Pi zero"]![](image://rpi0.jpg?height=50)[/figure]](/install/hardware:rpi0) +[/div] +{% elseif arm_sup or arm_unsup or internetcube %} + +[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.jpg?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 != '' %} + +{% if docker %} +!! **YunoHost ne supporte plus officiellement Docker depuis les problèmes rencontrés avec la version 2.4+. En cause, YunoHost dépend désormais de systemd et Docker a décidé qu’il ne le supporterait pas nativement (et il y a d'autres problèmes liés au firewall et aux services).** +!! +!! **Nous vous décourageons fortement d'utiliser YunoHost sur docker avec ces images.** + +## Images communautaires + +Cependant, ces images communautaires existent et sont disponibles sur Docker Hub : + + * [AMD64 (classic) (YunoHost 4.x)](https://hub.docker.com/r/domainelibre/yunohost/) + * [I386 (old computers) (YunoHost 4.x)](https://hub.docker.com/r/domainelibre/yunohost-i386/) + * [ARM64V8 (Raspberry Pi 4) (YunoHost 4.x)](https://hub.docker.com/r/cms0/yunohost/) + * [ARMV7 (Raspberry Pi 2/3 ...) (YunoHost 4.x)](https://hub.docker.com/r/domainelibre/yunohost-arm/) + * [ARMV6 (Raspberry Pi 1) (ancienne version de YunoHost)](https://hub.docker.com/r/tuxalex/yunohost-armv6/) +{% else %} + + +## [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 rpi2plus %} +* Un Raspberry Pi 2, 3 ou 4 ; +{% elseif rpi1 %} +* Un Raspberry Pi 1 avec au moins 512Mo de RAM ; +{% elseif rpi0 %} +* Un Raspberry Pi Zero ; +{% 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 rpi0 %} +* Un câble OTG ou un adaptateur Wifi USB pour connecter votre Raspberry Pi Zero ; +{% elseif not virtualbox %} +* Un câble ethernet/RJ-45 pour brancher la carte à votre routeur/box internet ; +{% endif %} +* Un ordinateur pour lire ce guide, flasher l'image et accéder à votre serveur. +{% endif %} +{% if not at_home %} +* 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 utile pour tester la distribution. Pour réellement s'autohéberger sur le long terme, il vous faudra probablement une machine physique (vieil ordinateur, carte ARM...) ou un serveur en ligne. +{% 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="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}} + +! Les liens vers les images sont actuellement cassés. Pendant que nous travaillons sur le problème, trouvez-les directement à l'adresse https://build.yunohost.org/ + +{% 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 %} +[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 rpi1 or rpi0 %} +## [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` pour que ce domaine pointe vers l'IP de votre serveur, comme expliqué [ici](/dns_local_network). + +##### [fa=key /] Mot de passe d’administration +C’est le mot de passe qui vous permettra d’accéder à l’interface d’administration de votre serveur. Vous pourrez également l’utiliser pour vous connecter à distance [via SSH](/ssh), ou [en SFTP](/filezilla) pour transférer des fichiers. De manière générale, c’est la **clé d’entrée à votre système**, pensez donc à la choisir attentivement. + +## [fa=user /] Créer un premier utilisateur + +Une fois la configuration initiale faite, vous devriez être capable de vous connecter à la webadmin en utilisant le mot de passe d'administration. + +Bien que votre serveur dispose maintenant d'un utilisateur `admin`, cet utilisateur `admin` n'est pas un utilisateur « standard » et ne peut pas se connecter sur le [portail utilisateur](/users). + +Par conséquent, vous devriez ajouter un premier utilisateur « standard ». + +!!! Le premier utilisateur que vous créez est un peu spécial : il recevra les emails envoyés à `root@votredomaine.tld` et `admin@votredomaine.tld`. Ces emails peuvent être utilisés pour envoyer des informations ou des alertes techniques. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] + +Allez dans `Utilisateurs > Nouvel utilisateur`. + +[figure class="nomargin" caption="Aperçu de l'interface de création utilisateur"] +![Création d'un utilisateur](image://create-first-user.png?resize=100%&class=inline) +[/figure] + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +``` +yunohost user create johndoe +``` + +[figure class="nomargin" caption="Aperçu de l'interface de création utilisateur en ligne de commande"] +![Création d'un utilisateur en ligne de commande](image://create-first-user-cli.png?resize=100%&class=inline) +[/figure] + +[/ui-tab] +[/ui-tabs] +{% endif %} + +## [fa=stethoscope /] Lancer le diagnostic + +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] +{% endif %} + +## ![](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 %} diff --git a/pages/02.administer/10.install/install.it.md b/pages/02.administer/10.install/install.it.md new file mode 100644 index 00000000..cac6ab03 --- /dev/null +++ b/pages/02.administer/10.install/install.it.md @@ -0,0 +1,621 @@ +--- +title: Installa 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: + - '/docker' + - '/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, rpi2plus, rpi1, rpi0, arm_sup, arm_unsup, vps, vps_debian, vps_ynh, virtualbox, internetcube, docker = 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' %} +{% elseif hardware == 'rpi2plus' %} + {% set arm, rpi2plus = true, true %} +{% elseif hardware == 'rpi1' %} + {% set arm, rpi1 = true, true %} +{% elseif hardware == 'rpi0' %} + {% set arm, rpi0 = true, true %} +{% elseif hardware == 'arm_sup' %} + {% set arm, arm_sup = true, true %} +{% elseif hardware == 'arm_unsup' %} + {% set arm, arm_unsup = true, 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 == 'docker' %} + {% set docker = true %} +{% endif %} + +{% if arm or regular %} + {% set at_home = true %} +{% endif %} + +Seleziona l'hardware sul quale desideri installare 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 rpi2plus or rpi1 or rpi0 %} active{% endif %}"] +[[figure caption="Raspberry Pi"]![](image://raspberrypi.jpg?height=75)[/figure]](/install/hardware:rpi2plus) +[/div] + +[div class="flex-child hardware{%if arm_sup or arm_unsup or internetcube %} active{% endif %}"] +[[figure caption="ARM board"]![](image://olinuxino.jpg?height=75)[/figure]](/install/hardware:arm_sup) +[/div] + +[div class="flex-child hardware{%if regular %} active{% endif %}"] +[[figure caption="Personal computer"]![](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="Server remoto"]![](image://vps.png?height=75)[/figure]](/install/hardware:vps_debian) +[/div] + +[/div] +[div class="flex-container pt-2"] + +{% if rpi2plus or rpi1 or rpi0 %} +[div class="flex-child hardware{%if rpi2plus %} active{% endif %}"] +[[figure caption="Raspberry Pi 2, 3 oppure 4"]![](image://raspberrypi.jpg?height=50)[/figure]](/install/hardware:rpi2plus) +[/div] + +[div class="flex-child hardware{%if rpi1 %} active{% endif %}"] +[[figure caption="Raspberry Pi 1"]![](image://rpi1.jpg?height=50)[/figure]](/install/hardware:rpi1) +[/div] + +[div class="flex-child hardware{%if rpi0 %} active{% endif %}"] +[[figure caption="Raspberry Pi zero"]![](image://rpi0.jpg?height=50)[/figure]](/install/hardware:rpi0) +[/div] +{% elseif arm_sup or arm_unsup or internetcube %} + +[div class="flex-child hardware{%if internetcube %} active{% endif %}"] +[[figure caption="Internet cube attraverso una 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 oppure Orange Pi PC+"]![](image://olinuxino.jpg?height=50)[/figure]](/install/hardware:arm_sup) +[/div] + +[div class="flex-child hardware{%if arm_unsup %} active{% endif %}"] +[[figure caption="Altre architetture"]![](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 o server dedicato con 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 o server dedicato con YunoHost pre-installed"]![](image://logo.png?height=50)[/figure]](/install/hardware:vps_ynh) +[/div] + +{% endif %} + +[/div] + + +{% if hardware != '' %} + +{% if docker %} +!! **YunoHost doesn’t support Docker officially since issues with versions 2.4+. In question, YunoHost 2.4+ doesn’t work anymore on Docker because YunoHost requires systemd and Docker has chosen to not support it natively (and there are other problems link to the firewall and services).** +!! +!! **We strongly discourage you to run YunoHost on docker with those images** + +## Community images + +However, community images exist and are available on Docker Hub: + + * [AMD64 (classic) (YunoHost 4.x)](https://hub.docker.com/r/domainelibre/yunohost/) + * [I386 (old computers) (YunoHost 4.x)](https://hub.docker.com/r/domainelibre/yunohost-i386/) + * [ARM64V8 (Raspberry Pi 4) (YunoHost 4.x)](https://hub.docker.com/r/cms0/yunohost/) + * [ARMV7 (Raspberry Pi 2/3 ...) (YunoHost 4.x)](https://hub.docker.com/r/domainelibre/yunohost-arm/) + * [ARMV6 (Raspberry Pi 1) (old yunoHost version)](https://hub.docker.com/r/tuxalex/yunohost-armv6/) +{% else %} + + +## [fa=list-alt /] Pre-requisites + +{% if regular %} +* Un x86-compatibile con hardware dedicato a YunoHost: laptop, nettop, netbook, desktop con almeno 512MB di RAM e almeno 16GB di memoria di massa +{% elseif rpi2plus %} +* A Raspberry Pi 2, 3 or 4 +{% elseif rpi1 %} +* A Raspberry Pi 1 with at least 512MB RAM +{% elseif rpi0 %} +* A Raspberry Pi zero +{% 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 at_home %} +* A [reasonable ISP](/isp), preferably with a good and unlimited upstream bandwidth +{% if rpi0 %} +* An usb OTG or a wifi dongle to connect your Raspberry Pi Zero +{% elseif not virtualbox %} +* An ethernet cable (RJ-45) to connect your server to your router. +{% endif %} +* A computer to read this guide, flash the image and access your server. +{% endif %} +{% if not at_home %} +* 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. To run an actual server on the long-term, you usually need a dedicated physical machine (old computer, ARM board...) or a server online. +{% 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] +{% endif %} + + +{% if at_home %} +## [fa=download /] Download the {{image_type}} image + +! I link alle immagini sono attualmente interrotti. Mentre stiamo lavorando al problema, potete trovarli direttamente su https://build.yunohost.org/ + +{% if virtualbox or regular %} +!!! If your host OS is 32 bits, be sure to download the 32-bit image. +{% elseif arm_unsup %} +[fa=external-link] Download the image for your board on Armbian's website + +!!! N.B.: you should download the image Armbian Bullseye. +{% 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 + +!! N.B. : The installation will totally erase the data on the server's hard drive! + +You should see a screen like this: + +[figure class="nomargin" caption="Preview of the ISO menu"] +![](image://virtualbox_3.png?class=inline) +[/figure] + + 1. Select `Graphical install` + 2. Select your language, your location and your keyboard layout + 3. The installer will then download and install all required packages. + +{% endif %} + + +{% if rpi1 or rpi0 %} +## [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 +``` +(o `yunohost-2.local`, e così via se più server YunoHost sono sulla tua rete) + +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` (o `yunohost-2.local`, e così via se più server YunoHost sono sulla tua rete){% 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 adress 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. You will later be able to add a certificate automatically recognized by web browsers as described in the [certificate documentation](/certificate). For now, you should add a security exception to accept the current certificate. (Though PLEASE, don't take the habit to blindly accepting this kind of security alerts !) + +{% 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 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 `/etc/hosts` file such that this dummy domain points to the appropriate IP, as explained [here](/dns_local_network)). + +##### [fa=key /] Administration password + +This password will be used to access to your server's administration interface. You will also use it to connect [via **SSH**](/ssh) or [**SFTP**](/filezilla). In general terms, this is your **system's key**, choose it carefully! + +## [fa=user /] Create a first user + +Once the postinstall is done, you should be able to actually log in the web admin interface using the administration password. + +So far, your server now has an `admin` user - but `admin` is not a "regular" user and *can't* be used to log on [the user portal](/users). + +Let's therefore add a first "regular" user. + +!!! The first user you create is a bit special : it will receive emails sent to `root@yourdomain.tld` and `admin@yourdomain.tld`. These emails may be used to send technical informations or alerts. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] + +Go in Users > Add + +[figure class="nomargin" caption="Anteprima dell'interfaccia utente di creazione dell'utente"] +![creazione dell'utente](image://create-first-user.png?resize=100%&class=inline) +[/figure] + +[/ui-tab] +[ui-tab title="From the command line"] +``` +yunohost user create johndoe +``` + +[figure class="nomargin" caption="Anteprima dell'interfaccia utente di creazione dell'utente CLI"] +![creazione dell'utente CLI](image://create-first-user-cli.png?resize=100%&class=inline) +[/figure] + +[/ui-tab] +[/ui-tabs] +{% endif %} + +## [fa=stethoscope /] Run the initial diagnosis + +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. 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 a Let's Encrypt certificate. This will get rid of the spooky security warning from earlier for new visitors. + +For more detailled 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"] + +[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] +{% endif %} + +## ![](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 %} diff --git a/pages/02.administer/10.install/install.md b/pages/02.administer/10.install/install.md new file mode 100644 index 00000000..64a542c9 --- /dev/null +++ b/pages/02.administer/10.install/install.md @@ -0,0 +1,836 @@ +--- +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: + - '/docker' + - '/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, rpi2plus, rpi1, rpi0, arm_sup, arm_unsup, vps, vps_debian, vps_ynh, virtualbox, wsl, internetcube, docker = false, 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' %} +{% elseif hardware == 'rpi2plus' %} + {% set arm, rpi2plus = true, true %} +{% elseif hardware == 'rpi1' %} + {% set arm, rpi1 = true, true %} +{% elseif hardware == 'rpi0' %} + {% set arm, rpi0 = true, true %} +{% elseif hardware == 'arm_sup' %} + {% set arm, arm_sup = true, true %} +{% elseif hardware == 'arm_unsup' %} + {% set arm, arm_unsup = true, 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 == 'docker' %} + {% set docker = 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 rpi2plus or rpi1 or rpi0 %} active{% endif %}"] +[[figure caption="Raspberry Pi"]![](image://raspberrypi.jpg?height=75)[/figure]](/install/hardware:rpi2plus) +[/div] + +[div class="flex-child hardware{%if arm_sup or arm_unsup or internetcube %} active{% endif %}"] +[[figure caption="ARM board"]![](image://olinuxino.jpg?height=75)[/figure]](/install/hardware:arm_sup) +[/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 rpi2plus or rpi1 or rpi0 %} +[div class="flex-child hardware{%if rpi2plus %} active{% endif %}"] +[[figure caption="Raspberry Pi 2, 3 or 4"]![](image://raspberrypi.jpg?height=50)[/figure]](/install/hardware:rpi2plus) +[/div] + +[div class="flex-child hardware{%if rpi1 %} active{% endif %}"] +[[figure caption="Raspberry Pi 1"]![](image://rpi1.jpg?height=50)[/figure]](/install/hardware:rpi1) +[/div] + +[div class="flex-child hardware{%if rpi0 %} active{% endif %}"] +[[figure caption="Raspberry Pi zero"]![](image://rpi0.jpg?height=50)[/figure]](/install/hardware:rpi0) +[/div] +{% elseif arm_sup or arm_unsup or internetcube %} + +[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.jpg?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 %} + +{% if docker %} +!! **YunoHost doesn’t support Docker officially since issues with versions 2.4+. In question, YunoHost 2.4+ doesn’t work anymore on Docker because YunoHost requires systemd and Docker has chosen to not support it natively (and there are other problems link to the firewall and services).** +!! +!! **We strongly discourage you to run YunoHost on docker with those images** + +## Community images + +However, community images exist and are available on Docker Hub: + + * [AMD64 (classic) (YunoHost 4.x)](https://hub.docker.com/r/domainelibre/yunohost/) + * [I386 (old computers) (YunoHost 4.x)](https://hub.docker.com/r/domainelibre/yunohost-i386/) + * [ARM64V8 (Raspberry Pi 4) (YunoHost 4.x)](https://hub.docker.com/r/cms0/yunohost/) + * [ARMV7 (Raspberry Pi 2/3 ...) (YunoHost 4.x)](https://hub.docker.com/r/domainelibre/yunohost-arm/) + * [ARMV6 (Raspberry Pi 1) (old yunoHost version)](https://hub.docker.com/r/tuxalex/yunohost-armv6/) +{% else %} + + +## [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 rpi2plus %} +* A Raspberry Pi 2, 3 or 4 +{% elseif rpi1 %} +* A Raspberry Pi 1 with at least 512MB RAM +{% elseif rpi0 %} +* A Raspberry Pi zero +{% 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 rpi0 %} +* An usb OTG or a wifi dongle to connect your Raspberry Pi Zero +{% elseif not virtualbox %} +* An ethernet cable (RJ-45) to connect your server to your router. +{% endif %} +* A computer to read this guide, flash the image and access your server. +{% endif %} +{% if not at_home %} +* 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. To run an actual server on the long-term, you usually need a dedicated physical machine (old computer, ARM board...) or a server online. +{% 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] +{% endif %} + + +{% if at_home %} +## [fa=download /] Download the {{image_type}} image + +! The links to the images are currently broken. While we resolve the issue, you can find them directly on https://build.yunohost.org/ + +{% if virtualbox or regular %} +!!! If your host OS is 32 bits, be sure to download the 32-bit image. +{% elseif arm_unsup %} +[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 rpi1 or rpi0 %} +## [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). + +{% if not wsl %} + +[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 adress 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 %} + +{% 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 `/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 /] Administration password + +This password will be used to access to your server's administration interface. You will also use it to connect [via **SSH**](/ssh) or [**SFTP**](/filezilla). In general terms, this is your **system's key**, choose it carefully! + +## [fa=user /] Create a first user + +Once the postinstall is done, you should be able to actually log in the web admin interface using the administration password. + +So far, your server now has an `admin` user - but `admin` is not a "regular" user and *can't* be used to log on [the user portal](/users). + +Let's therefore add a first "regular" user. + +!!! The first user you create is a bit special : it will receive emails sent to `root@yourdomain.tld` and `admin@yourdomain.tld`. These emails may be used to send technical informations or alerts. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] + +Go in Users > Click on "+ New User" button + +[figure class="nomargin" caption="Preview of the user creation UI"] +![User creation](image://create-first-user.png?resize=100%&class=inline) +[/figure] + +[/ui-tab] +[ui-tab title="From the command line"] +``` +yunohost user create johndoe +``` + +[figure class="nomargin" caption="Preview of the user creation CLI"] +![User creation CLI](image://create-first-user-cli.png?resize=100%&class=inline) +[/figure] + +[/ui-tab] +[/ui-tabs] +{% endif %} + +## [fa=stethoscope /] Run the initial diagnosis + +{% 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 %} + +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] +{% endif %} + +## ![](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 %} 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..d3dbf2e5 --- /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 :). + +## Nicht brechen YunoHost + +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 den 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, endet der Administrator damit, 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 Sie nichts. Vergessen Sie den Traum von einem einwandfreien Server: In der Tätigkeit wird ein Server nach und nach immer instabil. Außerdem müssen Sie (allmählich) lernen, Probleme zu lösen, wenn Sie auf sie stoßen. [Bitten Sie um Hilfe](/help), geben Sie Details über die getroffenen Probleme an und was Sie dagegen versuchen. Beheben Sie dann die Probleme. Mit der Zeit werden Sie eine viel bessere Kontrolle über Ihren Server haben. Und das ist ein wichtiger Vorteil, als ständig neue Installation durchzuführen. + +## 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 gesetzt. + +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. 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 [im Chat oder im Forum um Hilfe zu bitten, oder das Problem melden](/help) :)! + +Allerdings, 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 schließlich, da YunoHost ein Open-Source-Projekt ist, sind Sie herzlich 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/guidelines_fr.md b/pages/02.administer/15.admin_guide/05.guidelines/guidelines.fr.md similarity index 54% rename from guidelines_fr.md rename to pages/02.administer/15.admin_guide/05.guidelines/guidelines.fr.md index c26fb6ef..099bb250 100644 --- a/guidelines_fr.md +++ b/pages/02.administer/15.admin_guide/05.guidelines/guidelines.fr.md @@ -1,16 +1,23 @@ -# Conseil généraux +--- +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. +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 'in progress', 'not working' ou qui on un niveau 0 ; +- 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 ! @@ -18,7 +25,7 @@ Si votre but est d'avoir un serveur de production : 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 tombez pas dans des caprices de nerd tels que vouloir remplacer NGINX par Apache (ou faire tourner les deux à la fois) ; +- 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 ; - ... @@ -26,21 +33,21 @@ 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 comment le réparer, ou parce que le serveur est devenu "sale", 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. +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 "propre" : un serveur de la vraie vie fini toujours par être "sale". 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 de ce qu'il se passe, et corrigez les problèmes. Avec le temps, vous aurez un bien meilleur contrôle sur votre serveur plutôt que réinstaller aveuglément à chaque fois. +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 l'interface d'administration web - bien qu'elles ne puissent actuellement pas être téléchargées à partir de celle-ci (mais elles peuvent être téléchargées par d'autres moyens). 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). +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 - bien qu'elles ne puissent actuellement pas être téléchargées à partir de celle-ci (mais elles peuvent être téléchargées par d'autres moyens). 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@your.domain.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. +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 n'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) :) ! +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 ! 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/guidelines.md b/pages/02.administer/15.admin_guide/05.guidelines/guidelines.md similarity index 92% rename from guidelines.md rename to pages/02.administer/15.admin_guide/05.guidelines/guidelines.md index 25873591..74a41916 100644 --- a/guidelines.md +++ b/pages/02.administer/15.admin_guide/05.guidelines/guidelines.md @@ -1,6 +1,13 @@ -# Advices and guidelines +--- +title: Advices and guidelines +template: docs +taxonomy: + category: docs +routes: + default: '/guidelines' +--- -This page lists a few advices and guidelines which every YunoHost administrator should be aware to take care of a YunoHost server :). +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 @@ -18,7 +25,7 @@ If your goal is to run a production server: 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 by Apache (or run both at the same time); +- 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; - ... 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/admin_es.md b/pages/02.administer/15.admin_guide/10.admin/admin.es.md similarity index 56% rename from admin_es.md rename to pages/02.administer/15.admin_guide/10.admin/admin.es.md index ba253324..c95fa880 100644 --- a/admin_es.md +++ b/pages/02.administer/15.admin_guide/10.admin/admin.es.md @@ -1,4 +1,11 @@ -# La interfaz de administración web +--- +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). @@ -6,6 +13,4 @@ YunoHost tiene una interfaz gráfica de administración. El otro método consist 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/admin.md b/pages/02.administer/15.admin_guide/10.admin/admin.md similarity index 56% rename from admin.md rename to pages/02.administer/15.admin_guide/10.admin/admin.md index fcfbff27..4b2f6004 100644 --- a/admin.md +++ b/pages/02.administer/15.admin_guide/10.admin/admin.md @@ -1,4 +1,11 @@ -# Administrator web interface +--- +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). @@ -6,6 +13,4 @@ YunoHost has an administrator web interface. The other way to administrate your 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/ssh_de.md b/pages/02.administer/15.admin_guide/15.command_line/command_line.de.md similarity index 62% rename from ssh_de.md rename to pages/02.administer/15.admin_guide/15.command_line/command_line.de.md index c112663e..e08fc09b 100644 --- a/ssh_de.md +++ b/pages/02.administer/15.admin_guide/15.command_line/command_line.de.md @@ -1,4 +1,15 @@ -# SSH +--- +title: SSH +template: docs +taxonomy: + category: docs +routes: + default: '/ssh' + aliases: + - '/commandline' +page-toc: + active: true +--- ## Was ist SSH? @@ -26,9 +37,7 @@ ssh root@111.222.333.444 A password will be asked. If this is a VPS, your VPS provided should have communicated you the password. If you used a pre-installed image (for x86 computer or ARM board), the password should be `yunohost`. -
-Since YunoHost 3.4, after running the postinstallation, you won't be able to login as `root` anymore. Instead, **you should login using the `admin` user !** In the event that the LDAP server is broken and the `admin` user is unusable, you may still however still be able to login using `root` from the local network. -
+! Since YunoHost 3.4, after running the postinstallation, you won't be able to login as `root` anymore. Instead, **you should login using the `admin` user !** In the event that the LDAP server is broken and the `admin` user is unusable, you may still however still be able to login using `root` from the local network. #### Change the password! @@ -36,7 +45,7 @@ After logging in for the first time, you should change the root password. The se #### Let's configure ! -We're now ready to begin the [post-installation](postinstall). +We're now ready to begin the [post-installation](/postinstall). ## After installing YunoHost @@ -48,7 +57,7 @@ If you only know the IP address of your server : ssh admin@111.222.333.444 ``` -Then, you need to enter your administrator password created at [post-installation step](postinstall). +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 : @@ -62,9 +71,7 @@ If you changed the SSH port, you need to add `-p ` to the command, e 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`. -
+!!! 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? @@ -73,13 +80,13 @@ 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 ssh allow +yunohost user permission add ssh.main ``` It is also possible to remove SSH access using the following: ```bash -yunohost user ssh disallow +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: @@ -95,3 +102,29 @@ yunohost user ssh list-keys 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/ssh_es.md b/pages/02.administer/15.admin_guide/15.command_line/command_line.es.md similarity index 59% rename from ssh_es.md rename to pages/02.administer/15.admin_guide/15.command_line/command_line.es.md index 6466fa6c..5ed7c26f 100644 --- a/ssh_es.md +++ b/pages/02.administer/15.admin_guide/15.command_line/command_line.es.md @@ -1,9 +1,22 @@ -# SSH +--- +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 @@ -26,9 +39,7 @@ 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. -
+! 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 ! @@ -59,9 +70,7 @@ Si cambiaste el puerto SSH, hay que añadir `-p ` al comando, p 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`. -
+!!! 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 ? @@ -69,12 +78,12 @@ Por defecto, sólo el usuario `admin` puede conectarse en SSH en una instancia Y 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 ssh allow +yunohost user permission add ssh.main ``` Del mismo modo, es posible cancelar el acceso SSH de un usuario con el comando : ```bash -yunohost user ssh disallow +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 : @@ -89,3 +98,28 @@ yunohost user ssh list-keys 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/ssh_it.md b/pages/02.administer/15.admin_guide/15.command_line/command_line.it.md similarity index 60% rename from ssh_it.md rename to pages/02.administer/15.admin_guide/15.command_line/command_line.it.md index 83689950..104f43ff 100644 --- a/ssh_it.md +++ b/pages/02.administer/15.admin_guide/15.command_line/command_line.it.md @@ -1,4 +1,15 @@ -# SSH +--- +title: SSH +template: docs +taxonomy: + category: docs +routes: + default: '/ssh' + aliases: + - '/commandline' +page-toc: + active: true +--- ## Cos'è SSH? @@ -13,7 +24,7 @@ Se stai installando su un VPS allora il provider dovrebbe averti indicato il tuo 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`. +- collega un monitor al tuo server YunoHost, fai login e digita `hostname --all-ip-address`. #### Collegamento @@ -25,9 +36,7 @@ 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. -
+! 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 @@ -43,7 +52,7 @@ Se conosci esclusivamente l'indirizzo IP del tuo server: ssh admin@111.222.333.444 ``` -Dopo di che dovrai inserire la password di amministratore creata nella [procedura di postinstallazione](postinstall). +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: @@ -57,9 +66,7 @@ Se hai modificato la porta in ascolto per SSH devi aggiungere l'opzione `-p -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`. -
+!!! 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 @@ -68,13 +75,13 @@ 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 ssh allow +yunohost user permission add ssh.main ``` È sempre possibile eliminare l'accesso SSH con il comando: ```bash -yunohost user ssh disallow +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: @@ -90,3 +97,28 @@ yunohost user ssh list-keys 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/groups_and_permissions_fr.md b/pages/02.administer/15.admin_guide/20.users/05.groups_and_permissions/groups_and_permissions.fr.md similarity index 56% rename from groups_and_permissions_fr.md rename to pages/02.administer/15.admin_guide/20.users/05.groups_and_permissions/groups_and_permissions.fr.md index 5e79f015..bb0ff98e 100644 --- a/groups_and_permissions_fr.md +++ b/pages/02.administer/15.admin_guide/20.users/05.groups_and_permissions/groups_and_permissions.fr.md @@ -1,9 +1,16 @@ -# Groupes et permissions +--- +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 la webadmin en allant dans la section "Utilisateurs" et en cliquant sur le bouton correspondant : -![](./images/button_to_go_to_permission_interface_fr.png) +![](image://button_to_go_to_permission_interface_fr.png) ## Gestion des groupes @@ -20,11 +27,15 @@ Par défaut, deux groupes spéciaux sont créés : 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*. -![](./images/groups_default-groups.png) +![](image://groups_default-groups.png) -Pour obtenir la liste des groupes existants en CLI : +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +Pour obtenir la liste des groupes existants en ligne de commande : ```shell @@ -37,34 +48,46 @@ groups: - charlie - delphine ``` +[/ui-tab] +[/ui-tabs] ### Créer un nouveau groupe -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 permissions. +[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. -![](./images/groups_button-new-group.png) +![](image://groups_button-new-group.png) -Dans la CLI, pour créer un nouveau groupe appelé `yolo_crew`, il faut utiliser +[/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 -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. +[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. -![](./images/groups_button-add-user.png) +![](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. -![](./images/groups_button-remove-user.png) +![](image://groups_button-remove-user.png) -En CLI, utilisez la commande suivante pour ajouter `charlie` et `delphine` au groupe `yolo_crew` : +[/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 update yolo_crew --add charlie delphine ``` -(De même, `--remove` peut être utilisé pour retirer des membres d'un groupe) +(De même, `--remove` peut être utilisé pour retirer des membres d'un groupe.) Dans la liste des groupes, nous devrions voir : @@ -82,18 +105,27 @@ groups: - 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. -![](./images/groups_button-delete-group.png) +![](image://groups_button-delete-group.png) -Pour supprimer le groupe `yolo_crew` dans CLI, vous pouvez exécuter +[/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 @@ -101,11 +133,15 @@ Le mécanisme de permissions permet de restreindre l'accès aux services (par ex ### 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`. -![](./images/groups_default-with-permissions.png) +![](image://groups_default-with-permissions.png) -Pour répertorier les permissions et les accès correspondants en CLI : +[/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: @@ -118,27 +154,35 @@ permissions: xmpp.main: allowed: all_users ``` -Ici, nous constatons que tous les utilisateurs enregistrés peuvent utiliser le courrier électronique, XMPP, et accéder au blog WordPress. Cependant, personne ne peut accéder à l'interface d'administration de WordPress. +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 urls associées à une permission (pertinent pour les applications web). +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. -![](./images/groups_add-permission-group.png) +![](image://groups_add-permission-group.png) -Pour permettre à un groupe d'accéder à l'interface d'administration de WordPress via la CLI : +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 ``` -Notez que vous pouvez également autoriser un seul utilisateur, en utilisant le panneau spécifique en bas de la page. - -![](./images/groups_add-permission-user.png) - -ou en CLI : +Vous pouvez également autoriser un seul utilisateur : ```shell $ yunohost user permission update wordpress.admin --add alice @@ -156,25 +200,37 @@ $ yunohost user permission list [...] ``` -Notez que, par exemple, si nous voulons restreindre la permission pour le courrier électronique -afin que seul Bob soit autorisé à envoyer des courriels, nous devons également supprimer `all_users` -de la permission, en la supprimant du panneau de groupe `all_users`, ou en CLI : +Pour permettre seulement à Bob d'accéder aux emails en ligne de commande : ```shell $ yunohost user permission update mail --remove all_users --add bob ``` -Notez que certaines permissions peuvent être "protégées", ce qui signifie que vous ne pourrez pas l'ajouter/enlever du groupe visiteur. Ce mécanisme est généralement là car ajouter/enlever la permission au groupe utilisateur n'a pas de sens (ou est un risque de sécurité). +[/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. -![](./images/groups_alerte-permission.png) +![](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. Depuis la webadmin, vous pouvez changer cela en allant dans la vue de l'application à manipuler, puis dans "Gérer les tuiles et les labels", et cocher/décocher l'option "Montrer cette tuile dans le portail utilisateur" pour la permissison correspondante. En ligne de commande, le même genre de chose peut être fait avec : +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 +# Activer la tuile pour l'interface d'admin de WordPress $ yunohost user permission update wordpress.admin --show_tile True ``` +[/ui-tab] +[/ui-tabs] diff --git a/groups_and_permissions.md b/pages/02.administer/15.admin_guide/20.users/05.groups_and_permissions/groups_and_permissions.md similarity index 69% rename from groups_and_permissions.md rename to pages/02.administer/15.admin_guide/20.users/05.groups_and_permissions/groups_and_permissions.md index b2cb7db7..5c3133de 100644 --- a/groups_and_permissions.md +++ b/pages/02.administer/15.admin_guide/20.users/05.groups_and_permissions/groups_and_permissions.md @@ -1,9 +1,16 @@ -# User groups and permissions +--- +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: -![](./images/button_to_go_to_permission_interface.png) +![](image://button_to_go_to_permission_interface.png) ## Managing groups @@ -21,9 +28,14 @@ The content of those groups cannot be changed, only the permissions given to the ### 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. -![](./images/groups_default-groups.png) +![](image://groups_default-groups.png) + +[/ui-tab] +[ui-tab title="From the command line"] To list the currently existing groups in CLI : @@ -37,30 +49,41 @@ groups: - 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. -![](./images/groups_button-new-group.png) +![](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. -![](./images/groups_button-add-user.png) +![](image://groups_button-add-user.png) To remove a user, click on the cross next to their username, in the group panel. -![](./images/groups_button-remove-user.png) +![](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 @@ -85,18 +108,26 @@ groups: - 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. -![](./images/groups_button-delete-group.png) +![](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 @@ -104,10 +135,14 @@ The permission mechanism allow to restrict access to services (for example mail, ### 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`. -![](./images/groups_default-with-permissions.png) +![](image://groups_default-with-permissions.png) +[/ui-tab] +[ui-tab title="From the command line"] To list permissions and corresponding accesses in CLI: ```shell @@ -126,13 +161,23 @@ permissions: 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. -![](./images/groups_add-permission-group.png) +![](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 @@ -141,10 +186,6 @@ $ 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. -![](./images/groups_add-permission-user.png) - -or in CLI: - ```shell $ yunohost user permission update wordpress.admin --add alice ``` @@ -166,19 +207,30 @@ Note that, for example, if we want to restrict permission for email so that only ```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 superseeded by a wider permission. +The webadmin will issue a warning if you set a permission that is superseded by a wider permission. -![](./images/groups_alerte-permission.png) +![](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. 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. In command line, this may be done with : +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 +# Enable the tile for the WordPress admin interface $ yunohost user permission update wordpress.admin --show_tile True ``` - +[/ui-tab] +[/ui-tabs] 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..8499b90c --- /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 adresses 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/certificate_es.md b/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.es.md similarity index 91% rename from certificate_es.md rename to pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.es.md index 1fb0798b..3d1b2d80 100644 --- a/certificate_es.md +++ b/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.es.md @@ -1,11 +1,18 @@ -# Certificado +--- +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). @@ -21,20 +28,20 @@ Antes de intentar la instalación de un certificado Let's Encrypt, primero debes 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'. -![](./images/domain-certificate-button-fr.png) +![](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. -![](./images/certificate-before-LE-fr.png) +![](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. -![](./images/certificate-after-LE-fr.png) +![](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. -![](./images/certificate-signed-by-LE.png) +![](image://certificate-signed-by-LE.png) #### Vía línea de comandos diff --git a/certificate_fr.md b/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.fr.md similarity index 82% rename from certificate_fr.md rename to pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.fr.md index 6aeef3d5..40a531e0 100644 --- a/certificate_fr.md +++ b/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.fr.md @@ -1,11 +1,18 @@ -# Certificat +--- +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). @@ -21,41 +28,41 @@ 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 l'interface d'administration web +#### Via la webadmin -Rendez-vous dans la partie 'Domaine' de l'interface d'administration, puis dans +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'. -![](./images/domain-certificate-button-fr.png) +![](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é. -![](./images/certificate-before-LE-fr.png) +![](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. -![](./images/certificate-after-LE-fr.png) +![](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. -![](./images/certificate-signed-by-LE.png) +![](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 +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 +Installez le certificat Let's Encrypt via : ```bash yunohost domain cert-install votre.domaine.tld @@ -65,7 +72,7 @@ Cette commande doit retourner : ```bash Success! The SSOwat configuration has been generated -Success! Successfully installed Let's Encrypt certificate for domain DOMAIN.TLD! +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 @@ -75,7 +82,7 @@ trois mois environ. ##### En cas de problème -Si suite à une mauvaise manipulation, un certificat se retrouve dans une +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é : @@ -89,6 +96,4 @@ avez bien vérifié votre configuration DNS et avez bien accès à votre serveur 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, désactiver les vérifications en ajoutant `--no-checks` à la commande `cert-install`. - - +- si l'installation ne fonctionne toujours pas, de désactiver les vérifications en ajoutant `--no-checks` à la commande `cert-install`. diff --git a/certificate.md b/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.md similarity index 87% rename from certificate.md rename to pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.md index c9d06c71..2c6144cd 100644 --- a/certificate.md +++ b/pages/02.administer/15.admin_guide/25.domains/01.certificate/certificate.md @@ -1,4 +1,11 @@ -# Certificate +--- +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. @@ -6,7 +13,7 @@ YunoHost provides a **self-signed** certificate, it means that your server guara 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. @@ -16,25 +23,27 @@ To avoid this confusion, it's possible to get a certificate signed a known autho 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). -#### From the web administration interface +[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: -![](./images/domain-certificate-button.png) +![](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. -![](./images/certificate-before-LE.png) +![](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. -![](./images/certificate-after-LE.png) +![](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. -![](./images/certificate-signed-by-LE.png) +![](image://certificate-signed-by-LE.png) -#### From the command line interface +[/ui-tab] +[ui-tab title="From the command line"] Connect to your server through SSH. @@ -59,6 +68,9 @@ 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: 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.md b/pages/02.administer/15.admin_guide/25.domains/domains.md new file mode 100644 index 00000000..d1914026 --- /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 adresses 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..9d63a3ba --- /dev/null +++ b/pages/02.administer/15.admin_guide/30.apps/apps.fr.md @@ -0,0 +1,73 @@ +--- +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`. + +## 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.md b/pages/02.administer/15.admin_guide/30.apps/apps.md new file mode 100644 index 00000000..5871ea6c --- /dev/null +++ b/pages/02.administer/15.admin_guide/30.apps/apps.md @@ -0,0 +1,172 @@ +--- +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] + + +## 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/email_de.md b/pages/02.administer/15.admin_guide/45.emails/email.de.md similarity index 97% rename from email_de.md rename to pages/02.administer/15.admin_guide/45.emails/email.de.md index a0565b4f..c6cd979f 100644 --- a/email_de.md +++ b/pages/02.administer/15.admin_guide/45.emails/email.de.md @@ -1,4 +1,11 @@ -# E-Mails +--- +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. diff --git a/email_es.md b/pages/02.administer/15.admin_guide/45.emails/email.es.md similarity index 97% rename from email_es.md rename to pages/02.administer/15.admin_guide/45.emails/email.es.md index d5d6107d..7bbcc224 100644 --- a/email_es.md +++ b/pages/02.administer/15.admin_guide/45.emails/email.es.md @@ -1,4 +1,11 @@ -# Emails +--- +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`. diff --git a/email_fr.md b/pages/02.administer/15.admin_guide/45.emails/email.fr.md similarity index 55% rename from email_fr.md rename to pages/02.administer/15.admin_guide/45.emails/email.fr.md index e00220b2..2b4c1d55 100644 --- a/email_fr.md +++ b/pages/02.administer/15.admin_guide/45.emails/email.fr.md @@ -1,6 +1,13 @@ -# Emails +--- +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 `quelquechose@votre.domaine.tld`. +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. @@ -9,24 +16,22 @@ Cet écosystème comprend un serveur SMTP (postfix), un serveur IMAP (Dovecot), 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 [Mail-tester.com](https://mail-tester.com) (attention : seuls 3 tests par domaine et par jour sont autorisés) ; - -Un score d'au moins 8~9/10 est un but raisonnable. +- 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 - ou configurer un client de bureau ou mobile comme décrit dans [cette page](email_configure_client). +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ériel de votre serveur. +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. +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 suffixe 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île 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. +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. ## Que se passe-t-il si mon serveur devient indisponible ? @@ -35,11 +40,17 @@ Si votre serveur devient indisponible, les courriels envoyés à votre serveur r ## 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 a autrefois été utilisé pour envoyé du spam ou que ces services de mails considèrent votre serveur comme émetteur de spams. +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 -- Il existe une page de documentation pour [migrer ses emails d'un fournisseur de messagerie vers une instance YunoHost](email_migration). -- Pour approfondir votre compréhension du courriel et de ses protocoles, voici une [conférence éclairante](https://www.octopuce.fr/conference-lemail-vaste-sujet-par-benjamin-sonntag/)(en français). +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/email.md b/pages/02.administer/15.admin_guide/45.emails/email.md similarity index 81% rename from email.md rename to pages/02.administer/15.admin_guide/45.emails/email.md index 9188b9a9..1db9e967 100644 --- a/email.md +++ b/pages/02.administer/15.admin_guide/45.emails/email.md @@ -1,4 +1,11 @@ -# Emails +--- +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`. @@ -9,16 +16,14 @@ The mail stack includes a SMTP server (postfix), an IMAP server (Dovecot), an an 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 setup using [Mail-tester.com](https://mail-tester.com) (be careful : only 3 tests per domain per day are allowed) ; - -A score of at least 8~9/10 is a reasonnable goal. +- 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). +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. @@ -39,8 +44,8 @@ To ensure that your servers’ IP address isn’t into this blacklists and to re ## Migrating email from an email provider to a YunoHost instance -See [this page](email_migration). +See [this page](/email_migration). ## Configuring SMTP relay -See [this page](email_configure_relay). \ No newline at end of file +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..5043b3e0 --- /dev/null +++ b/pages/02.administer/15.admin_guide/50.backups/backup.fr.md @@ -0,0 +1,175 @@ +--- +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.gz ./ +``` +[/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.gz 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/backup_it.md b/pages/02.administer/15.admin_guide/50.backups/backup.it.md similarity index 86% rename from backup_it.md rename to pages/02.administer/15.admin_guide/50.backups/backup.it.md index 1dfc3c28..fd982e25 100644 --- a/backup_it.md +++ b/pages/02.administer/15.admin_guide/50.backups/backup.it.md @@ -1,4 +1,11 @@ -# Eseguire il backup del vostro server e delle app +--- +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*. @@ -16,7 +23,7 @@ Il metodo di default attuale crea degli archivi `.tar.gz` contenenti tutti i fil 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](/images/backup.png) +![picture of YunoHost's backup pannel](image://backup.png) ### Dalla riga di comando @@ -70,7 +77,7 @@ Dopo aver creato gli archivi di backup è possibile elencarli e ispezionarli sia Attualmente il modo più semplice per scaricare gli archivi è usando il programma FileZilla (vedi [questa pagina](/filezilla)). -Una soluzione alternativa è quella di installare Netxcloud o un'applicazione simile e configurarle per accedere ai file contenuti in `/home/yunohost.backup/archives/` da un browser. +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: @@ -92,7 +99,7 @@ scp /path/to/your/.tar.gz admin@your.domain.tld:/home/yunohost.back 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](/images/restore.png) +![picture of YunoHost's restore pannel](image://restore.png) ### Dalla riga di comando @@ -157,13 +164,21 @@ Potete seguire questo tutorial sul forum per impostare Borg fra due server: -#### Backup completo con `dd` +#### For ARM boards: full backup with USBimager or `dd` -Se state usando una board ARM un altro metodo per eseguire un backup completo è quello di creare un'immagine della card SD. Per fare questo innanzitutto spegnete la vostra board ARM, prendete la card SD e createne un'immagine completa con un comando come il seguente: +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 of=./backup.img status=progress +dd if=/dev/mmcblk0 | gzip > ./my_snapshot.gz ``` -(modificate `/dev/mmcblk0` con il device reale della vostra card) \ No newline at end of file +(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..fefca3af --- /dev/null +++ b/pages/02.administer/15.admin_guide/50.backups/backup.md @@ -0,0 +1,175 @@ +--- +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 ./ +``` +[/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.gz 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/stretch_buster_migration_fr.md b/pages/02.administer/15.admin_guide/55.upgrade/10.stretch_buster_migration/stretch_buster_migration.fr.md similarity index 97% rename from stretch_buster_migration_fr.md rename to pages/02.administer/15.admin_guide/55.upgrade/10.stretch_buster_migration/stretch_buster_migration.fr.md index e3b3997b..317d3746 100644 --- a/stretch_buster_migration_fr.md +++ b/pages/02.administer/15.admin_guide/55.upgrade/10.stretch_buster_migration/stretch_buster_migration.fr.md @@ -1,4 +1,11 @@ -# Migrer vers Buster +--- +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) diff --git a/stretch_buster_migration.md b/pages/02.administer/15.admin_guide/55.upgrade/10.stretch_buster_migration/stretch_buster_migration.md similarity index 96% rename from stretch_buster_migration.md rename to pages/02.administer/15.admin_guide/55.upgrade/10.stretch_buster_migration/stretch_buster_migration.md index 84c47b1a..138bbdc0 100644 --- a/stretch_buster_migration.md +++ b/pages/02.administer/15.admin_guide/55.upgrade/10.stretch_buster_migration/stretch_buster_migration.md @@ -1,4 +1,11 @@ -# Migrating an existing instance to Buster +--- +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). 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..29d2197b --- /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 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). + +- **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 tell 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 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`. + +#### Run the migration to repair your python app +After upgrading, your python apps should be unavailable cause their virtual env need to be rebuild. + +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 ended by `.requirements_backup_for_bullseye_upgrade.txt` before to apply the migration. You can find this file near the venv of your app inside `/opt` or `/var/www`. + +#### 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). + +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 last version, you can rerun the upgrade thanks to the `-F` 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 of 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 a solution for this issues. + +### No ethernet connexion after a reboot after the migration on a rpi 4 + +! If you have not yet rebooted your server, don't do it we are searching a solution, to avoid the use of a keyboard and screen. + +We found this in Rpi 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 rpi 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 what you should be able to restore your apps. Don't forget to force upgrade theme if you have 502 errors. + diff --git a/jessie_stretch_migration_fr.md b/pages/02.administer/15.admin_guide/55.upgrade/5.jessie_stretch_migration/jessie_stretch_migration.fr.md similarity index 97% rename from jessie_stretch_migration_fr.md rename to pages/02.administer/15.admin_guide/55.upgrade/5.jessie_stretch_migration/jessie_stretch_migration.fr.md index 067f782d..537e0c92 100644 --- a/jessie_stretch_migration_fr.md +++ b/pages/02.administer/15.admin_guide/55.upgrade/5.jessie_stretch_migration/jessie_stretch_migration.fr.md @@ -1,4 +1,11 @@ -# Migrer vers Stretch +--- +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) diff --git a/jessie_stretch_migration.md b/pages/02.administer/15.admin_guide/55.upgrade/5.jessie_stretch_migration/jessie_stretch_migration.md similarity index 96% rename from jessie_stretch_migration.md rename to pages/02.administer/15.admin_guide/55.upgrade/5.jessie_stretch_migration/jessie_stretch_migration.md index b2c78bce..8896e845 100644 --- a/jessie_stretch_migration.md +++ b/pages/02.administer/15.admin_guide/55.upgrade/5.jessie_stretch_migration/jessie_stretch_migration.md @@ -1,4 +1,11 @@ -# Migrating an existing instance to Stretch +--- +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). 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/overview_fr.md b/pages/02.administer/15.admin_guide/admin_guide.fr.md similarity index 62% rename from overview_fr.md rename to pages/02.administer/15.admin_guide/admin_guide.fr.md index 7aed44ef..2a1937e6 100644 --- a/overview_fr.md +++ b/pages/02.administer/15.admin_guide/admin_guide.fr.md @@ -1,11 +1,19 @@ -# Vue d’ensemble de l’écosystème YunoHost - +--- +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. -![](images/ecosystem_fr.png) +![](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, parmis 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 soient en accès public, ou privé, c'est-à-dire que seuls les utilisateurs du serveur pourront y accéder. +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/overview.md b/pages/02.administer/15.admin_guide/admin_guide.md similarity index 67% rename from overview.md rename to pages/02.administer/15.admin_guide/admin_guide.md index d075c2ea..f8a86ba5 100644 --- a/overview.md +++ b/pages/02.administer/15.admin_guide/admin_guide.md @@ -1,13 +1,21 @@ -# Overview of the YunoHost ecosystem +--- +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. -![](images/ecosystem.png) +![](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 adress 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 ther 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. +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.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.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.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.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.md b/pages/02.administer/20.backups/35.migrate_or_merge_servers/migrate_or_merge_servers.md new file mode 100644 index 00000000..78fc00ee --- /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 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/dns_nohost_me_es.md b/pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.es.md similarity index 96% rename from dns_nohost_me_es.md rename to pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.es.md index e27a0589..a3aa8723 100644 --- a/dns_nohost_me_es.md +++ b/pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.es.md @@ -1,4 +1,11 @@ -# Nombres de dominios automáticos +--- +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. diff --git a/dns_nohost_me_fr.md b/pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.fr.md similarity index 93% rename from dns_nohost_me_fr.md rename to pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.fr.md index 95600928..0a0897a3 100644 --- a/dns_nohost_me_fr.md +++ b/pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.fr.md @@ -1,4 +1,11 @@ -# Noms de domaines automatiques +--- +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. @@ -21,7 +28,7 @@ Pour créer un sous domaine à un domaine `nohost.me`, `noho.st` et `ynh.fr` il ### Ajouter un domaine nohost.me, noho.st ou ynh.fr après la post-installation -Si vous avez déjà effectué la postinstallation et souhaitez ajouter un domaine +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..." diff --git a/dns_nohost_me.md b/pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.md similarity index 78% rename from dns_nohost_me.md rename to pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.md index 5a8b6a1f..0ad0fe9a 100644 --- a/dns_nohost_me.md +++ b/pages/02.administer/45.tutorials/05.domains/01.dns_nohost_me/dns_nohost_me.md @@ -1,21 +1,28 @@ -# Nohost.me domains +--- +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 proposed: +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. It will then be automatically configured by YunoHost! +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! -N.B.: As a fairness measure, each instance may only have **one such domain** setup at any given time. +!!! 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 does allow the creation of 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 for `nohost.me`, `noho.st` and `ynh.fr` domain you just have to add the subdomain to yunohost like any other domains. +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 @@ -49,8 +56,7 @@ If you reinstall your server and want to use a domain already used previously, y 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` CLI). -**/!\ Caution: this will remove any app installed on this domain, along with its data.** +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` diff --git a/dns_dynamicip_fr.md b/pages/02.administer/45.tutorials/05.domains/02.dns_dynamic_ip/dns_dynamicip.fr.md similarity index 57% rename from dns_dynamicip_fr.md rename to pages/02.administer/45.tutorials/05.domains/02.dns_dynamic_ip/dns_dynamicip.fr.md index 33589f54..6b499d3c 100644 --- a/dns_dynamicip_fr.md +++ b/pages/02.administer/45.tutorials/05.domains/02.dns_dynamic_ip/dns_dynamicip.fr.md @@ -1,12 +1,27 @@ -# DNS avec une IP dynamique +--- +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.
+! 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ée d’adresse IP publique, et qu’ensuite la zone DNS soit automatiquement changée. +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. @@ -22,20 +37,20 @@ Voici des sites qui proposent un service de DynDNS gratuitement : 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. +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. +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). +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`. +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/dns_dynamicip.md b/pages/02.administer/45.tutorials/05.domains/02.dns_dynamic_ip/dns_dynamicip.md similarity index 57% rename from dns_dynamicip.md rename to pages/02.administer/45.tutorials/05.domains/02.dns_dynamic_ip/dns_dynamicip.md index 9d4223a5..4e05e2d9 100644 --- a/dns_dynamicip.md +++ b/pages/02.administer/45.tutorials/05.domains/02.dns_dynamic_ip/dns_dynamicip.md @@ -1,11 +1,29 @@ -# DNS with a dynamic IP +--- +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.
+! 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. +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 annonces its global IP adress 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 @@ -20,14 +38,14 @@ Here are sites which offer a DynDNS service free of charge: 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. +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. +This step consists in declaring to your [registrar](#registrar) that the DNS service will now be managed by the DynDNS service provider. -For this, fisrt declare in the NS field(s) the IP address provided by the DynDNS service. +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). +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`. @@ -35,6 +53,6 @@ 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/dns_subdomains_fr.md b/pages/02.administer/45.tutorials/05.domains/03.dns_subdomains/dns_subdomains.fr.md similarity index 84% rename from dns_subdomains_fr.md rename to pages/02.administer/45.tutorials/05.domains/03.dns_subdomains/dns_subdomains.fr.md index aa47ac2d..37b2b14d 100644 --- a/dns_subdomains_fr.md +++ b/pages/02.administer/45.tutorials/05.domains/03.dns_subdomains/dns_subdomains.fr.md @@ -1,8 +1,15 @@ -## DNS et sous-domaines pour les applications +--- +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. +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 @@ -10,11 +17,11 @@ Dans la configuration de son DNS, on aura donc une entrée A avec l’adresse IP 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. +@ 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. diff --git a/dns_subdomains.md b/pages/02.administer/45.tutorials/05.domains/03.dns_subdomains/dns_subdomains.md similarity index 94% rename from dns_subdomains.md rename to pages/02.administer/45.tutorials/05.domains/03.dns_subdomains/dns_subdomains.md index b6112c6c..c70a0291 100644 --- a/dns_subdomains.md +++ b/pages/02.administer/45.tutorials/05.domains/03.dns_subdomains/dns_subdomains.md @@ -1,4 +1,11 @@ -## DNS and subdomains for the applications +--- +title: DNS and subdomains for the applications +template: docs +taxonomy: + category: docs +routes: + default: '/dns_subdomains' +--- ### Subdomains diff --git a/dns_local_network_es.md b/pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.es.md similarity index 51% rename from dns_local_network_es.md rename to pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.es.md index 5d9cf8dd..dcb362d7 100644 --- a/dns_local_network_es.md +++ b/pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.es.md @@ -1,21 +1,24 @@ -# Acceder a tu servidor desde la red local +--- +title: Local network access to your server +template: docs +taxonomy: + category: docs +routes: + default: '/dns_local_network' +--- -Después de haber instalado tu servidor, es probable que tu nombre de dominio no esté accesible desde la red local donde se encuentra el servidor. Esto es un problema que se llama el [hairpinning](https://en.wikipedia.org/wiki/Hairpinning). +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. -Para resolver este problema, es preciso configurar el DNS de tu router o, por defecto, el o los archivos hosts de tu ordenadores clientes. +To solve this issue you can: +- configure your router's DNS +- or alternatively - your /etc/hosts files on your clients workstation -### Obtener la dirección IP local del servidor -A fin de configurar el DNS o el archivo hosts, tienes que conocer la dirección IP privada de tu servidor. Esta dirección sólo puede ser utilizada en la red local donde está el servidor, y no está vinculada con tu dirección pública utilizada en Internet. +### Find the local IP address of your server -Puedes descubrir la dirección privada de tu servidor de varias maneras : -- En la pantalla de conexión de YunoHost en el mismo servidor : - - -- Desde la interfaz de administración de tu servidor YunoHost : - en Herramientas > Estado del servidor > Red - - -- O desde tu router o tu caja Internet, dependiendo de su modelo. +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 diff --git a/dns_local_network_fr.md b/pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.fr.md similarity index 61% rename from dns_local_network_fr.md rename to pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.fr.md index 1b0d8c5a..cfbf0e32 100644 --- a/dns_local_network_fr.md +++ b/pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.fr.md @@ -1,27 +1,31 @@ -# Accéder à son serveur depuis le réseau local +--- +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 probable 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). +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 ou, à défaut, le ou les fichiers hosts de vos ordinateurs clients. +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. -### Obtenir l’adresse IP locale du serveur -Afin de configurer le DNS ou le fichier hosts, il vous faut connaître l’adresse IP privée de votre serveur. Cette adresse est utilisable uniquement sur le réseau local où se trouve le serveur et n’est pas liée à votre adresse publique utilisée sur Internet. +### Trouver l’adresse IP locale du serveur -Vous pouvez retrouver l’adresse privée de votre serveur de différentes manières : -- Sur l’écran de connexion de YunoHost sur le serveur lui-même : - +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` -- Depuis l’interface d’administration de votre serveur YunoHost : - dans Outils > État du serveur > Réseau - - -- Ou depuis votre routeur ou votre box, selon son modèle. - -## Configurer le DNS de la box ou du routeur +## 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 @@ -31,6 +35,7 @@ Rendez-vous dans l’onglet Réseau puis DNS pour ajouter votre nom de domaine a ## 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 : diff --git a/dns_local_network.md b/pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.md similarity index 53% rename from dns_local_network.md rename to pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.md index c98cdefc..10b777ca 100644 --- a/dns_local_network.md +++ b/pages/02.administer/45.tutorials/05.domains/04.dns_local_network/dns_local_network.md @@ -1,36 +1,41 @@ -# Local network access to your server +--- +title: Local network access to your server +template: docs +taxonomy: + category: docs +routes: + default: '/dns_local_network' +--- -After completing your server installation, it is most likely that your domain will not be accessible through the local network. This is a know issue known as [hairpinning](http://en.wikipedia.org/wiki/Hairpinning). +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 resolve this issue, you need to configure your router dns or, failing, your hosts files on your clients workstation +To solve this issue you can: +- configure your router's DNS +- or alternatively - your /etc/hosts files on your clients workstation -### Get the server local IP adress -In order to configure DNS or hosts file, you must know the private IP adress of your server. This adress is only working in the server local network and is not linked to your public IP adress. +### Find the local IP address of your server -You may retrieve your server private IP adress through different means: -- Using the YunoHost connection screen on the 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` -- Using YunoHost administration panel: - Go to Tools > State of the server > Network - - -- Or using your router or internet box, depending on model. - -## Configure DNS of Internet box or router +## 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: diff --git a/filezilla_fr.md b/pages/02.administer/45.tutorials/15.filezilla/filezilla.fr.md similarity index 68% rename from filezilla_fr.md rename to pages/02.administer/45.tutorials/15.filezilla/filezilla.fr.md index a8b5c8de..407fa7e9 100644 --- a/filezilla_fr.md +++ b/pages/02.administer/45.tutorials/15.filezilla/filezilla.fr.md @@ -1,4 +1,11 @@ -# Échanger des fichiers avec son serveur à l’aide d’une interface graphique +--- +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. @@ -12,29 +19,25 @@ 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. +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](images/filezilla_1.png) + ![é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 votre). 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.) +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](images/filezilla_2.png) + ![écran du gestionnaire de site](image://filezilla_2.png) -3. Vous recevrez un avertissement. *Vous pouvez l'ignorer si il s'agit de la première connexion*. +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](images/filezilla_3.png) + ![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](images/filezilla_4.png) + ![é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. +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é](images/filezilla_5.png) - -
- Vous pouvez désormais utiliser cette configuration pour vous connecter. -
+ ![la vue du "gestionnaire de site" avec le nouveau serveur ajouté](image://filezilla_5.png) ## Utilisation @@ -42,17 +45,15 @@ Installez le programme et lancez *Filezilla*. 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](images/filezilla_6.png) + ![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](images/filezilla_7.png) + ![le chemin où les sauvegardes sont situées sur YunoHost](image://filezilla_7.png) -
- Assurez-vous de télécharger à la fois le fichier `.tar.gz` et le fichier `.json` -
+! [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](images/filezilla_8.png) +![Copier les sauvegardes de YunoHost sur l'ordinateur local](image://filezilla_8.png) ---- diff --git a/filezilla.md b/pages/02.administer/45.tutorials/15.filezilla/filezilla.md similarity index 76% rename from filezilla.md rename to pages/02.administer/45.tutorials/15.filezilla/filezilla.md index 505fac54..875f86c7 100644 --- a/filezilla.md +++ b/pages/02.administer/45.tutorials/15.filezilla/filezilla.md @@ -1,4 +1,11 @@ -# Exchange files with your server using a graphical interface +--- +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. @@ -14,27 +21,23 @@ Install the program and run *Filezilla*. 1. Click the *Site Manager* icon in the upper left to begin. - ![Main screen of Filezilla](images/filezilla_1.png) + ![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 adress 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](images/filezilla_2.png) + ![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](images/filezilla_3.png) + ![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](images/filezilla_4.png) + ![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](images/filezilla_5.png) - -
- You can now use your new bookmark to connect to the server -
+ ![View of the "site manager" with the newly server added](image://filezilla_5.png) ## Usage @@ -42,17 +45,15 @@ Install the program and run *Filezilla*. 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](images/filezilla_6.png) + ![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](images/filezilla_7.png) + ![path where backups are located on YunoHost](image://filezilla_7.png) -
- Be sure to download both the `.tar.gz` and `.json` files. -
+! [fa=cloud-download /] Be sure to download both the `.tar.gz` and `.json` files. -![Copy backups from YunoHost to local computer](images/filezilla_8.png) +![Copy backups from YunoHost to local computer](image://filezilla_8.png) ---- 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..a1160919 --- /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/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/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..2d8be8e3 --- /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 +| `/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/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/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..7d4a8cc7 --- /dev/null +++ b/pages/02.administer/45.tutorials/35.email_relay/email_configure_relay.fr.md @@ -0,0 +1,74 @@ +--- +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 choisi et configuré. + +## [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 un adresse d'expéditeur de votre domaine (pour lutter contre le spam et présever 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 + +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`). + +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 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` + +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..5783b3f9 --- /dev/null +++ b/pages/02.administer/45.tutorials/35.email_relay/email_configure_relay.md @@ -0,0 +1,83 @@ +--- +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 + +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`) + +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 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 +``` + +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/torhiddenservice_fr.md b/pages/02.administer/45.tutorials/40.tor/torhiddenservice.fr.md similarity index 74% rename from torhiddenservice_fr.md rename to pages/02.administer/45.tutorials/40.tor/torhiddenservice.fr.md index a546f680..a8409335 100644 --- a/torhiddenservice_fr.md +++ b/pages/02.administer/45.tutorials/40.tor/torhiddenservice.fr.md @@ -1,8 +1,13 @@ -## Utiliser YunoHost comme un service caché Tor -
-Ce tuto n'est pas complet ! Des données peuvent être récupérée 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) +--- +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 diff --git a/torhiddenservice_it.md b/pages/02.administer/45.tutorials/40.tor/torhiddenservice.it.md similarity index 69% rename from torhiddenservice_it.md rename to pages/02.administer/45.tutorials/40.tor/torhiddenservice.it.md index 155c4250..406e2fa3 100644 --- a/torhiddenservice_it.md +++ b/pages/02.administer/45.tutorials/40.tor/torhiddenservice.it.md @@ -1,9 +1,13 @@ -## Collegarsi a YunoHost attraverso un Hidden Service -
-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". -
+--- +title: Collegarsi a YunoHost attraverso un Hidden Service +template: docs +taxonomy: + category: docs +routes: + default: '/torhiddenservice' +--- -Vedi https://www.torproject.org/docs/tor-hidden-service.html +! 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 diff --git a/torhiddenservice.md b/pages/02.administer/45.tutorials/40.tor/torhiddenservice.md similarity index 73% rename from torhiddenservice.md rename to pages/02.administer/45.tutorials/40.tor/torhiddenservice.md index 5c1fc0ca..71dadd67 100644 --- a/torhiddenservice.md +++ b/pages/02.administer/45.tutorials/40.tor/torhiddenservice.md @@ -1,9 +1,13 @@ -## Using YunoHost as a Tor Hidden Service -
-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". -
+--- +title: Using YunoHost as a Tor Hidden Service +template: docs +taxonomy: + category: docs +routes: + default: '/torhiddenservice' +--- -See https://www.torproject.org/docs/tor-hidden-service.html.en +! 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 diff --git a/certificate_custom_fr.md b/pages/02.administer/45.tutorials/45.certificate_custom/certificate_custom.fr.md similarity index 96% rename from certificate_custom_fr.md rename to pages/02.administer/45.tutorials/45.certificate_custom/certificate_custom.fr.md index fd097dd5..2ff450ab 100644 --- a/certificate_custom_fr.md +++ b/pages/02.administer/45.tutorials/45.certificate_custom/certificate_custom.fr.md @@ -1,3 +1,12 @@ +--- +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 : @@ -129,4 +138,4 @@ Rechargez la configuration de NGINX pour prendre en compte le nouveau certificat sudo service nginx reload ``` -Votre certificat est prêt à servir. Vous pouvez toutefois vous assurez de sa mise en place en testant le certificat à l’aide du service de geocerts. +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/certificate_custom.md b/pages/02.administer/45.tutorials/45.certificate_custom/certificate_custom.md similarity index 90% rename from certificate_custom.md rename to pages/02.administer/45.tutorials/45.certificate_custom/certificate_custom.md index 34666ca6..ee6eeb54 100644 --- a/certificate_custom.md +++ b/pages/02.administer/45.tutorials/45.certificate_custom/certificate_custom.md @@ -1,4 +1,13 @@ -**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**). +--- +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: diff --git a/moving_app_folder_fr.md b/pages/02.administer/45.tutorials/55.moving_app_folder/moving_app_folder.fr.md similarity index 87% rename from moving_app_folder_fr.md rename to pages/02.administer/45.tutorials/55.moving_app_folder/moving_app_folder.fr.md index 88df7bb4..6f3f3c32 100644 --- a/moving_app_folder_fr.md +++ b/pages/02.administer/45.tutorials/55.moving_app_folder/moving_app_folder.fr.md @@ -1,4 +1,11 @@ -# Déplacer un dossier d’application vers un autre espace de stockage +--- +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` diff --git a/moving_app_folder.md b/pages/02.administer/45.tutorials/55.moving_app_folder/moving_app_folder.md similarity index 76% rename from moving_app_folder.md rename to pages/02.administer/45.tutorials/55.moving_app_folder/moving_app_folder.md index 941d3d03..e0802f0e 100644 --- a/moving_app_folder.md +++ b/pages/02.administer/45.tutorials/55.moving_app_folder/moving_app_folder.md @@ -1,10 +1,15 @@ -# Moving an app folder to a different storage +--- +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). +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). @@ -36,3 +41,5 @@ 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..1e572001 --- /dev/null +++ b/pages/02.administer/45.tutorials/60.security/security.fr.md @@ -0,0 +1,103 @@ +--- +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. + +```bash +sudo systemctl disable yunohost-api +sudo systemctl stop 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..de1d6110 --- /dev/null +++ b/pages/02.administer/45.tutorials/60.security/security.md @@ -0,0 +1,97 @@ +--- +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. + +```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](/commandline), is to deactivate the `yunohost-api` service. + +```bash +sudo systemctl disable yunohost-api +sudo systemctl stop 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.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/fail2ban_fr.md b/pages/02.administer/50.troubleshooting/05.fail2ban/fail2ban.fr.md similarity index 89% rename from fail2ban_fr.md rename to pages/02.administer/50.troubleshooting/05.fail2ban/fail2ban.fr.md index ef2f3de3..e0af1d18 100644 --- a/fail2ban_fr.md +++ b/pages/02.administer/50.troubleshooting/05.fail2ban/fail2ban.fr.md @@ -1,4 +1,11 @@ -# Fail2Ban +--- +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. @@ -6,7 +13,7 @@ En particulier, **Fail2Ban** surveille les tentatives de connexion `SSH`. Après ## Débannir une adresse IP -Pour débloquer une addresse 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). +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 : 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/fail2ban.md b/pages/02.administer/50.troubleshooting/05.fail2ban/fail2ban.md similarity index 96% rename from fail2ban.md rename to pages/02.administer/50.troubleshooting/05.fail2ban/fail2ban.md index 8f9ebc17..e6f11a58 100644 --- a/fail2ban.md +++ b/pages/02.administer/50.troubleshooting/05.fail2ban/fail2ban.md @@ -1,4 +1,11 @@ -# Fail2Ban +--- +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. diff --git a/change_admin_password_fr.md b/pages/02.administer/50.troubleshooting/10.admin_password/change_admin_password.fr.md similarity index 73% rename from change_admin_password_fr.md rename to pages/02.administer/50.troubleshooting/10.admin_password/change_admin_password.fr.md index 02ada64f..925aa9b1 100644 --- a/change_admin_password_fr.md +++ b/pages/02.administer/50.troubleshooting/10.admin_password/change_admin_password.fr.md @@ -1,4 +1,11 @@ -# Changer le mot de passe d’administration +--- +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é. @@ -6,9 +13,9 @@ Si vous avez oublié votre mot de passe ou si vous ne pouvez pas vous connecter 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 l'interface d'administration web +## Sur la webadmin -1. Connectez-vous à [l’administration web](/admin). +1. Connectez-vous à l'interface web d'administration. 2. Allez dans la section Outis > Changer le mot de passe d’administration. 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/change_admin_password.md b/pages/02.administer/50.troubleshooting/10.admin_password/change_admin_password.md similarity index 73% rename from change_admin_password.md rename to pages/02.administer/50.troubleshooting/10.admin_password/change_admin_password.md index 5aec634c..1abba53a 100644 --- a/change_admin_password.md +++ b/pages/02.administer/50.troubleshooting/10.admin_password/change_admin_password.md @@ -1,4 +1,11 @@ -# Changing the administration password +--- +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. @@ -8,7 +15,7 @@ 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](/admin). +First, connect to your web administration. Then go to Tools > Change administration password. diff --git a/noaccess_fr.md b/pages/02.administer/50.troubleshooting/15.noaccess/noaccess.fr.md similarity index 90% rename from noaccess_fr.md rename to pages/02.administer/50.troubleshooting/15.noaccess/noaccess.fr.md index 360a13a7..3102fc7b 100644 --- a/noaccess_fr.md +++ b/pages/02.administer/50.troubleshooting/15.noaccess/noaccess.fr.md @@ -1,4 +1,11 @@ -# Récupérer l’accès à son YunoHost +--- +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. @@ -11,7 +18,10 @@ Cette page va vous aider à diagnostiquer, obtenir un accès et si besoin répar 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 tester d'accéder à votre serveur en passant par un proxy comme proxfree.com + - 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 @@ -59,7 +69,7 @@ NB : le bannissement dure en général 10 à 12 minutes. Le bannissement n'est a #### 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 ssh`. 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). +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`. @@ -107,7 +117,7 @@ Pour connaître votre IP locale, certaines BOX proposent une cartographie du ré sudo arp-scan --local ``` -Vous pouvez aussi essayer avec le domaine `yunohost.local` s'il n'y a qu'un seul YunoHost sur votre réseau. +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. 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/ipv6_fr.md b/pages/02.administer/50.troubleshooting/20.ipv6/ipv6.fr.md similarity index 72% rename from ipv6_fr.md rename to pages/02.administer/50.troubleshooting/20.ipv6/ipv6.fr.md index a93b074d..eadb2cae 100644 --- a/ipv6_fr.md +++ b/pages/02.administer/50.troubleshooting/20.ipv6/ipv6.fr.md @@ -1,11 +1,18 @@ -# Configuration de l’IPv6 +--- +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/gb/en/vps/configuring-ipv6/ +La documentation d'OVH à ce sujet est ici : https://docs.ovh.com/fr/vps/configurer-ipv6/ ### Configurer le serveur DNS @@ -20,10 +27,12 @@ Sur le panneau de gestion d'OVH, vous aller récupérer 3 informations : 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`. -Ensuite, vous pouvez modifier le fichier de configuration `/etc/network/interfaces`. -
-Dans cet exemple, nous considérons que votre interface réseau est `eth0`. Si elle est différente (vérifiez avec `ip a`) vous devez adapter l'exemple pour correspondre à votre situation. -
+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 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/ipv6.md b/pages/02.administer/50.troubleshooting/20.ipv6/ipv6.md similarity index 79% rename from ipv6.md rename to pages/02.administer/50.troubleshooting/20.ipv6/ipv6.md index fc183f2d..8cc8efc8 100644 --- a/ipv6.md +++ b/pages/02.administer/50.troubleshooting/20.ipv6/ipv6.md @@ -1,10 +1,17 @@ -# Setting up IPv6 +--- +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 give one IPv4 address and one IPv6 address for VPS but by default, only IPv4 is OK. +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 @@ -13,17 +20,15 @@ Here : https://yunohost.org/#/dns_subdomains ### Configure the server -On the OVH panel, you will copy 3 element : +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. It is assumed that : +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. -
+! 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 diff --git a/blacklist_forms_fr.md b/pages/02.administer/50.troubleshooting/25.unblacklisting/blacklist_forms.fr.md similarity index 88% rename from blacklist_forms_fr.md rename to pages/02.administer/50.troubleshooting/25.unblacklisting/blacklist_forms.fr.md index f7c9f1b1..d45f637e 100644 --- a/blacklist_forms_fr.md +++ b/pages/02.administer/50.troubleshooting/25.unblacklisting/blacklist_forms.fr.md @@ -1,4 +1,11 @@ -# Formulaires de retrait de liste noire +--- +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. 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.md b/pages/02.administer/55.providers/05.registrar/gandi/autodns.md new file mode 100644 index 00000000..ff5af63a --- /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/ + +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.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/OVH_fr.md b/pages/02.administer/55.providers/05.registrar/ovh/manualdns/manualdns.fr.md similarity index 76% rename from OVH_fr.md rename to pages/02.administer/55.providers/05.registrar/ovh/manualdns/manualdns.fr.md index 317b6841..fd4f390e 100644 --- a/OVH_fr.md +++ b/pages/02.administer/55.providers/05.registrar/ovh/manualdns/manualdns.fr.md @@ -1,14 +1,23 @@ -# Configuration DNS avec OVH +--- +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 : +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 @@ -26,7 +35,7 @@ puis effacer tout ce qu'il y a en-dessous, et le remplacer par la configuration 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). +Pour savoir si votre fournisseur d’accès à Internet vous fournit une IP dynamique [voir ici](/isp). Commencez par créer un identifiant DynHost. diff --git a/OVH.md b/pages/02.administer/55.providers/05.registrar/ovh/manualdns/manualdns.md similarity index 81% rename from OVH.md rename to pages/02.administer/55.providers/05.registrar/ovh/manualdns/manualdns.md index 4dfff7e2..92f7ceab 100644 --- a/OVH.md +++ b/pages/02.administer/55.providers/05.registrar/ovh/manualdns/manualdns.md @@ -1,14 +1,23 @@ -# DNS Configuration with OVH +--- +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) @@ -24,7 +33,7 @@ then erase everything below, and replace it with the configuration generated by ### Dynamic IP -[General tutorial on dynamic IP](dns_dynamicip). +[General tutorial on dynamic IP](/dns_dynamicip). You should follow this part if you have a dynamic IP. 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/isp_free_fr.md b/pages/02.administer/55.providers/10.isp/free/isp_free.fr.md similarity index 81% rename from isp_free_fr.md rename to pages/02.administer/55.providers/10.isp/free/isp_free.fr.md index 58ebb590..6520117a 100644 --- a/isp_free_fr.md +++ b/pages/02.administer/55.providers/10.isp/free/isp_free.fr.md @@ -1,6 +1,15 @@ -# Free +--- +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)**.* +*Trouvez la liste d’autres fournisseurs d’accès à Internet **[ici](/isp)**.* #### Accès à l’administration de la box (v5/v6) @@ -33,9 +42,9 @@ La présence conjointe de ces deux règles permettent d'accéder à votre serveu Pour pouvoir envoyer des mails, le déblocage se fait dans la [partie client](https://subscribe.free.fr/login/). -Depuis le menu Ma freebox aller sur « Blocage SMTP sortant ». +Depuis le menu Ma freebox allez sur « Blocage SMTP sortant ». -Pour pouvoir envoyer des mails, passer le blocage en « inactif ». +Pour pouvoir envoyer des mails, passez le blocage en « inactif ». #### Fonction NAS de la Freebox @@ -56,18 +65,18 @@ $ sudo mount -t cifs //mafreebox.freebox.fr/Disque\ dur/ /home/monlogin/freebox ##### Automatiser le montage -Une ligne a ajouter à la fin du `/etc/fstab` : +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é, placer vos identifiants dans un fichier sous la forme +`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 remplacer `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é) +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/isp_orange_fr.md b/pages/02.administer/55.providers/10.isp/orange/isp_orange.fr.md similarity index 81% rename from isp_orange_fr.md rename to pages/02.administer/55.providers/10.isp/orange/isp_orange.fr.md index b6584b4a..e308d26f 100644 --- a/isp_orange_fr.md +++ b/pages/02.administer/55.providers/10.isp/orange/isp_orange.fr.md @@ -1,6 +1,15 @@ -# Orange +--- +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)**.* +*Trouvez la liste d’autres fournisseurs d’accès à Internet **[ici](/isp)**.* #### Le courrier électronique @@ -8,6 +17,9 @@ 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 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/vpn_advantage_fr.md b/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.fr.md similarity index 65% rename from vpn_advantage_fr.md rename to pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.fr.md index 26a22708..ae8665e3 100644 --- a/vpn_advantage_fr.md +++ b/pages/02.administer/55.providers/15.vpn/01.vpn/vpn_advantage.fr.md @@ -1,20 +1,25 @@ -# Avantage d’un VPN pour l’auto-hébergement +--- +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 remplis. -
+! 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 auxquel 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. +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éduit car la pratique de l'auto-hébergement n'est pas répandue). +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. @@ -24,7 +29,7 @@ Le mail est un des protocoles les plus complexes à auto-héberger, en général 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 noire (notamment l'IP ne doit pas être sur le DUL) +- 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. @@ -32,15 +37,15 @@ Malheureusement, aucun des FAI français les plus courants ne respecte la totali 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ésent 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. +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 fournis 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. +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 équipements, soit sur le routeur (si ce dernier le permet). +- 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.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..f2639937 --- /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) +!!! * [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/theming_fr.md b/pages/02.administer/60.extend/15.theming/theming.fr.md similarity index 74% rename from theming_fr.md rename to pages/02.administer/60.extend/15.theming/theming.fr.md index c79f1678..b5cf9ad4 100644 --- a/theming_fr.md +++ b/pages/02.administer/60.extend/15.theming/theming.fr.md @@ -1,4 +1,11 @@ -# Personnaliser l’apparence du portail utilisateur +--- +title: Personnaliser l'apparence du portail utilisateur +template: docs +taxonomy: + category: docs +routes: + default: '/theming' +--- ## Utiliser un thème @@ -19,17 +26,15 @@ Ensuite, vous pouvez utiliser `nano /etc/ssowat/conf.json.persistent` pour activ } ``` -
-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. -
+!!! 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 ! -
+! **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 @@ -47,6 +52,8 @@ Ensuite, éditez les fichiers CSS et JS dans `/usr/share/ssowat/portal/assets/th 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 ! diff --git a/theming.md b/pages/02.administer/60.extend/15.theming/theming.md similarity index 69% rename from theming.md rename to pages/02.administer/60.extend/15.theming/theming.md index 9cc9a19f..f4ae2baf 100644 --- a/theming.md +++ b/pages/02.administer/60.extend/15.theming/theming.md @@ -1,4 +1,19 @@ -# Customize the appearance of the user portal +--- +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 @@ -19,17 +34,15 @@ Then you can use `nano /etc/ssowat/conf.json.persistent` to enable the theme you } ``` -
-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. -
+!!! 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! -
+! **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 @@ -47,6 +60,8 @@ Then, edit the files the CSS and JS files in `/usr/share/ssowat/portal/assets/th 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! 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/admin_api_fr.md b/pages/02.administer/60.extend/30.api/admin_api.fr.md similarity index 88% rename from admin_api_fr.md rename to pages/02.administer/60.extend/30.api/admin_api.fr.md index b794606b..d25846d2 100644 --- a/admin_api_fr.md +++ b/pages/02.administer/60.extend/30.api/admin_api.fr.md @@ -1,7 +1,14 @@ -# Administration depuis l’API ou une application externe +--- +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/stretch-unstable/data/actionsmap/yunohost.yml) (en particulier les clefs `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/data/actionsmap/yunohost.yml) (en particulier les clefs `api`) ## Avec cURL @@ -14,7 +21,7 @@ curl -k -H "X-Requested-With: customscript" \ -dump-header headers \ https://your.server/yunohost/api/login -# Example de GET +# 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 \ 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/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/email_configure_client_es.md b/pages/03.user_guide/05.emailclients/email_configure_client.es.md similarity index 69% rename from email_configure_client_es.md rename to pages/03.user_guide/05.emailclients/email_configure_client.es.md index 2cbda3c6..871841d6 100644 --- a/email_configure_client_es.md +++ b/pages/03.user_guide/05.emailclients/email_configure_client.es.md @@ -1,4 +1,11 @@ -## Cómo configurar un cliente de correo electrónico +--- +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. @@ -12,20 +19,21 @@ A continuación puedes encontrar los elementos a configurar en el cliente de cor | IMAP | 993 | SSL/TLS | Normal password | `nombre_de_usuario` (sin `@domain.tld`) | | SMTP | 587 | STARTTLS | Normal password | `nombre_de_usuario` (sin `@domain.tld`) | -### Configurar Mozilla Thunderbird (en un ordenador) + +### ![](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) -### Configurar K-9 Mail (en Android) +### ![](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/email_configure_client.md b/pages/03.user_guide/05.emailclients/email_configure_client.md similarity index 65% rename from email_configure_client.md rename to pages/03.user_guide/05.emailclients/email_configure_client.md index a2511674..0f7dcf90 100644 --- a/email_configure_client.md +++ b/pages/03.user_guide/05.emailclients/email_configure_client.md @@ -1,4 +1,11 @@ -## Configuring email client +--- +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. @@ -13,31 +20,41 @@ Here are the element you should enter to manually configure your mail client (`d | IMAP | 993 | SSL/TLS | Normal password | `username` (without the `@domain.tld`) | | SMTP | 587 | STARTTLS | Normal password | `username` (without the `@domain.tld`) | -### Configure Mozilla Thunderbird (on a desktop computer) +### 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) -### Configure K-9 Mail (on Android) +[/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) -### Configure Dekko (on Ubuntu Touch) + +[/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 mailadress 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/email_migration_fr.md b/pages/03.user_guide/10.email_migration/email_migration.fr.md similarity index 87% rename from email_migration_fr.md rename to pages/03.user_guide/10.email_migration/email_migration.fr.md index 7e81a4d4..69859b6e 100644 --- a/email_migration_fr.md +++ b/pages/03.user_guide/10.email_migration/email_migration.fr.md @@ -1,4 +1,11 @@ -# Migrer ses emails d’un ancien serveur mail vers YunoHost +--- +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)*. @@ -22,7 +29,7 @@ imapsync --host1 --port1 993 --ssl1 --user1 --passwor --host2 --port2 993 --ssl2 --user2 --password2 ``` -Notez que les paramètres de transfert `--port 993` et `--ssl` sont spécifique à un serveur de mail YunoHost. +Notez que les paramètres de transfert `--port 993` et `--ssl` sont spécifiques à un serveur de mail YunoHost. ### Larch diff --git a/email_migration.md b/pages/03.user_guide/10.email_migration/email_migration.md similarity index 89% rename from email_migration.md rename to pages/03.user_guide/10.email_migration/email_migration.md index 149fc4cc..20d40c0e 100644 --- a/email_migration.md +++ b/pages/03.user_guide/10.email_migration/email_migration.md @@ -1,4 +1,11 @@ -# Migrating email from an email provider to a YunoHost instance +--- +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)*. diff --git a/XMPP_es.md b/pages/03.user_guide/15.xmpp/xmpp.es.md similarity index 92% rename from XMPP_es.md rename to pages/03.user_guide/15.xmpp/xmpp.es.md index 92739a28..69466c08 100644 --- a/XMPP_es.md +++ b/pages/03.user_guide/15.xmpp/xmpp.es.md @@ -1,4 +1,13 @@ -# Chat, VoIP y red local con +--- +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). @@ -28,6 +37,7 @@ También puedes utilizar un cliente Desktop como : - [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) diff --git a/XMPP_fr.md b/pages/03.user_guide/15.xmpp/xmpp.fr.md similarity index 64% rename from XMPP_fr.md rename to pages/03.user_guide/15.xmpp/xmpp.fr.md index b3841de3..8ac31781 100644 --- a/XMPP_fr.md +++ b/pages/03.user_guide/15.xmpp/xmpp.fr.md @@ -1,16 +1,25 @@ -# Chat, VoIP et réseau social avec +--- +title: Chat, VoIP et réseau social avec XMPP +template: docs +taxonomy: + category: docs +routes: + default: '/XMPP' +--- -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 Jabber). +![](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. +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 prends la forme `utilisateur@domaine.tld`, ainsi qu’un mot de passe. +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 courriel principale de l'utilisateur ainsi que son 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 @@ -26,7 +35,7 @@ Il existe différents types de clients pour se connecter à XMPP. - [Gajim](http://gajim.org/fr/) (Linux, Windows) - [Dino](https://dino.im) (Linux) -- [Thunderbird](https://www.thunderbird.net/) (multiplateforme) +- [Thunderbird](https://www.thunderbird.net/) (multi-plateformes) - [Beagle IM](https://beagle.im/) (macOS) - [Profanity](https://profanity-im.github.io/) (Linux) @@ -36,21 +45,22 @@ Il existe différents types de clients pour se connecter à XMPP. - [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 +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 chiffrants à l'aide de [OMEMO](https://xmpp.org/extensions/xep-0384.html), notamment en utilisant Gajim : -- Installer `gajim` et le plugin `gajim-omemo` -- Activez le plugin dans `Outils > Plugins` +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). +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. diff --git a/XMPP.md b/pages/03.user_guide/15.xmpp/xmpp.md similarity index 92% rename from XMPP.md rename to pages/03.user_guide/15.xmpp/xmpp.md index 443f30dd..03767c82 100644 --- a/XMPP.md +++ b/pages/03.user_guide/15.xmpp/xmpp.md @@ -1,4 +1,13 @@ -# Chat, VoIP and social network with +--- +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). @@ -37,6 +46,7 @@ You can connect to your YunoHost XMPP account in different ways. - [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) 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..a4121d40 --- /dev/null +++ b/pages/04.applications/10.docs/20euros/app_20euros.fr.md @@ -0,0 +1,22 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..461485ec --- /dev/null +++ b/pages/04.applications/10.docs/20euros/app_20euros.md @@ -0,0 +1,22 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..526060dd --- /dev/null +++ b/pages/04.applications/10.docs/243/app_243.fr.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..642d8e4b --- /dev/null +++ b/pages/04.applications/10.docs/243/app_243.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/adguardhome/app_adguardhome.md b/pages/04.applications/10.docs/adguardhome/app_adguardhome.md new file mode 100644 index 00000000..d75f9fdc --- /dev/null +++ b/pages/04.applications/10.docs/adguardhome/app_adguardhome.md @@ -0,0 +1,31 @@ +--- +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) + + +### Index + +- [Useful links](#useful-links) + +**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/app_adminer_fr.md b/pages/04.applications/10.docs/adminer/app_adminer.fr.md similarity index 87% rename from app_adminer_fr.md rename to pages/04.applications/10.docs/adminer/app_adminer.fr.md index f190e4fd..58cf4216 100644 --- a/app_adminer_fr.md +++ b/pages/04.applications/10.docs/adminer/app_adminer.fr.md @@ -1,4 +1,13 @@ -# logo d'Adminer Adminer +--- +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) diff --git a/app_adminer.md b/pages/04.applications/10.docs/adminer/app_adminer.md similarity index 86% rename from app_adminer.md rename to pages/04.applications/10.docs/adminer/app_adminer.md index beddffab..50581bce 100644 --- a/app_adminer.md +++ b/pages/04.applications/10.docs/adminer/app_adminer.md @@ -1,4 +1,13 @@ -# Adminer's logo Adminer +--- +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) 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..a16084cb --- /dev/null +++ b/pages/04.applications/10.docs/aeneria/app_aeneria.fr.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*Æ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..53621d0c --- /dev/null +++ b/pages/04.applications/10.docs/aeneria/app_aeneria.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*Æ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..b576ed24 --- /dev/null +++ b/pages/04.applications/10.docs/agendav/app_agendav.fr.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..0bf33f69 --- /dev/null +++ b/pages/04.applications/10.docs/agendav/app_agendav.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_airsonic_fr.md b/pages/04.applications/10.docs/airsonic/app_airsonic.fr.md similarity index 90% rename from app_airsonic_fr.md rename to pages/04.applications/10.docs/airsonic/app_airsonic.fr.md index b84967ec..3950e18b 100644 --- a/app_airsonic_fr.md +++ b/pages/04.applications/10.docs/airsonic/app_airsonic.fr.md @@ -1,4 +1,13 @@ -# logo de Airsonic Airsonic +--- +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) diff --git a/app_airsonic.md b/pages/04.applications/10.docs/airsonic/app_airsonic.md similarity index 89% rename from app_airsonic.md rename to pages/04.applications/10.docs/airsonic/app_airsonic.md index 0b0e501a..6300ab63 100644 --- a/app_airsonic.md +++ b/pages/04.applications/10.docs/airsonic/app_airsonic.md @@ -1,4 +1,13 @@ -# airsonic's logo Airsonic +--- +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) 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..2a221c45 --- /dev/null +++ b/pages/04.applications/10.docs/alltube/app_alltube.fr.md @@ -0,0 +1,24 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..122bdfe2 --- /dev/null +++ b/pages/04.applications/10.docs/alltube/app_alltube.md @@ -0,0 +1,24 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_ampache_fr.md b/pages/04.applications/10.docs/ampache/app_ampache.fr.md similarity index 87% rename from app_ampache_fr.md rename to pages/04.applications/10.docs/ampache/app_ampache.fr.md index 16c294b2..0cf53d47 100644 --- a/app_ampache_fr.md +++ b/pages/04.applications/10.docs/ampache/app_ampache.fr.md @@ -1,4 +1,13 @@ -# logo de Ampache Ampache +--- +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) diff --git a/app_ampache.md b/pages/04.applications/10.docs/ampache/app_ampache.md similarity index 86% rename from app_ampache.md rename to pages/04.applications/10.docs/ampache/app_ampache.md index f31fdb44..4f512a15 100644 --- a/app_ampache.md +++ b/pages/04.applications/10.docs/ampache/app_ampache.md @@ -1,4 +1,13 @@ -# Ampache's logo Ampache +--- +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) diff --git a/app_anarchism_fr.md b/pages/04.applications/10.docs/anarchism/app_anarchism.fr.md similarity index 83% rename from app_anarchism_fr.md rename to pages/04.applications/10.docs/anarchism/app_anarchism.fr.md index cf3b5140..98671fe6 100644 --- a/app_anarchism_fr.md +++ b/pages/04.applications/10.docs/anarchism/app_anarchism.fr.md @@ -1,4 +1,13 @@ -# logo de Anarchism Anarchism +--- +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) diff --git a/app_anarchism.md b/pages/04.applications/10.docs/anarchism/app_anarchism.md similarity index 82% rename from app_anarchism.md rename to pages/04.applications/10.docs/anarchism/app_anarchism.md index 436a8387..37b6f548 100644 --- a/app_anarchism.md +++ b/pages/04.applications/10.docs/anarchism/app_anarchism.md @@ -1,4 +1,13 @@ -# Anarchism's logo Anarchism +--- +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) diff --git a/app_anfora_fr.md b/pages/04.applications/10.docs/anfora/app_anfora.fr.md similarity index 81% rename from app_anfora_fr.md rename to pages/04.applications/10.docs/anfora/app_anfora.fr.md index 5773d14a..94c3b1bb 100644 --- a/app_anfora_fr.md +++ b/pages/04.applications/10.docs/anfora/app_anfora.fr.md @@ -1,4 +1,13 @@ -# logo de Anfora Anfora +--- +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) diff --git a/app_anfora.md b/pages/04.applications/10.docs/anfora/app_anfora.md similarity index 81% rename from app_anfora.md rename to pages/04.applications/10.docs/anfora/app_anfora.md index 89799ef9..3b9f30fc 100644 --- a/app_anfora.md +++ b/pages/04.applications/10.docs/anfora/app_anfora.md @@ -1,4 +1,13 @@ -# Anfora's logo Anfora +--- +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) diff --git a/app_archivist_fr.md b/pages/04.applications/10.docs/archivist/app_archivist.fr.md similarity index 88% rename from app_archivist_fr.md rename to pages/04.applications/10.docs/archivist/app_archivist.fr.md index e09752cf..c0b6dc28 100644 --- a/app_archivist_fr.md +++ b/pages/04.applications/10.docs/archivist/app_archivist.fr.md @@ -1,4 +1,13 @@ -# Package Archivist +--- +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) diff --git a/app_archivist.md b/pages/04.applications/10.docs/archivist/app_archivist.md similarity index 87% rename from app_archivist.md rename to pages/04.applications/10.docs/archivist/app_archivist.md index 785e89f6..91816e0e 100644 --- a/app_archivist.md +++ b/pages/04.applications/10.docs/archivist/app_archivist.md @@ -1,4 +1,13 @@ -# Package Archivist +--- +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) 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..b9bb2c63 --- /dev/null +++ b/pages/04.applications/10.docs/backdrop/app_backdrop.fr.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..8f6b18e2 --- /dev/null +++ b/pages/04.applications/10.docs/backdrop/app_backdrop.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_baikal_fr.md b/pages/04.applications/10.docs/baikal/app_baikal.fr.md similarity index 80% rename from app_baikal_fr.md rename to pages/04.applications/10.docs/baikal/app_baikal.fr.md index ee65eb56..440f3137 100644 --- a/app_baikal_fr.md +++ b/pages/04.applications/10.docs/baikal/app_baikal.fr.md @@ -1,18 +1,28 @@ -# Baïkal's logo Baïkal +--- +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) ### Index -- [Configuration](#Configuration) - - [Connexion à l'interface d'administration](#Connexion-à-l-interface-d-administration) - - [Création d'un nouvel utilisateur](#Création-d-un-nouvel-utilisateur) -- [Connexion CalDAV](#Connexion-CalDAV) - - [Connexion de Thunderbird avec Lightning](#Connexion-de-Thunderbird-avec-Lightning) - - [Connexion de AgenDAV](#Connexion-de-AgenDAV) -- [Connexion CardDAV](#Connexion-CardDAV) +- [Configuration](#configuration) + - [Connexion à l'interface d'administration](#connexion-à-l’interface-d’administration) + - [Authentification LDAP](#authentification-ldap) +- [Connexion CalDAV](#connexion-caldav) + - [Connexion de Thunderbird avec Lightning](#connexion-de-thunderbird-avec-lightning) + - [Connexion de AgenDAV](#connexion-de-agendav) +- [Connexion CardDAV](#connexion-carddav) - [Liens utiles](#liens-utiles) + 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). @@ -21,7 +31,7 @@ Baïkal est un serveur de calendriers et de contacts accessible par les protocol ### Connexion à l’interface d’administration -Pour configurer l'appliation il faut se rendre à l'adresse : `sous.domaine.tld/admin` ou `domaine.tld/baikal/admin` +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 @@ -68,5 +78,5 @@ Le carnet d’adresses est maintenant accessible. + Site web : [www.baikal-server.com (en)](http://www.baikal-server.com/) + Documentation officielle : [sabre.io - baikal (en)](https://sabre.io/baikal/) - + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/bikal](https://github.com/YunoHost-apps/baikal_ynh) + + 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/app_baikal.md b/pages/04.applications/10.docs/baikal/app_baikal.md similarity index 78% rename from app_baikal.md rename to pages/04.applications/10.docs/baikal/app_baikal.md index 95e4e7b6..92bfd9a3 100644 --- a/app_baikal.md +++ b/pages/04.applications/10.docs/baikal/app_baikal.md @@ -1,17 +1,27 @@ -# Baïkal's logo Baïkal +--- +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) ### Index -- [Configuration](#Configuration) - - [Login to admin interface](#Login-to-administration-interface) - - [Creating a new user](#Create-a-new-user) -- [CalDAV connection](#CalDAV-connection) - - [Connecting Thunderbird with Lightning](#Connecting-Thunderbird-with-Lightning) - - [Connecting to AgenDAV](#Connecting-to-AgenDAV) -- [CardDAV Connection](#CardDAV-Connection) -- [Useful links](#Useful-links) +- [Configuration](#configuration) + - [Connecting to the administration interface](#connecting-to-the-administration-interface) + - [LDAP authentication](#ldap-authentication) +- [CalDAV connection](#caldav-connection) + - [Connecting Thunderbird with Lightning](#connecting-thunderbird-with-lightning) + - [Connecting to AgenDAV](#connecting-to-agendav) +- [CardDAV Connection](#carddav-connection) +- [Useful links](#useful-links) + 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. @@ -70,5 +80,5 @@ Now, the adressbook is accessible. + Website: [www.baikal-server.com](http://www.baikal-server.com/) + Official documentation: [sabre.io - baikal](https://sabre.io/baikal/) - + Apps software repository: [github.com - YunoHost-Apps/bikal](https://github.com/YunoHost-apps/baikal_ynh) + + 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/app_bibliogram_fr.md b/pages/04.applications/10.docs/bibliogram/app_bibliogram.fr.md similarity index 81% rename from app_bibliogram_fr.md rename to pages/04.applications/10.docs/bibliogram/app_bibliogram.fr.md index 06ed95c6..1e88724c 100644 --- a/app_bibliogram_fr.md +++ b/pages/04.applications/10.docs/bibliogram/app_bibliogram.fr.md @@ -1,4 +1,13 @@ -# Logo Bibliogram Bibliogram +--- +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) @@ -12,4 +21,4 @@ Bibliogram est un site Web qui prend les données de profil public d'Instagram e + 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) \ No newline at end of file ++ 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/app_bibliogram.md b/pages/04.applications/10.docs/bibliogram/app_bibliogram.md similarity index 84% rename from app_bibliogram.md rename to pages/04.applications/10.docs/bibliogram/app_bibliogram.md index 59bb4254..d3c8deb5 100644 --- a/app_bibliogram.md +++ b/pages/04.applications/10.docs/bibliogram/app_bibliogram.md @@ -1,4 +1,13 @@ -# Bibliogram Logo Bibliogram +--- +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) 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..51f52c29 --- /dev/null +++ b/pages/04.applications/10.docs/bicbucstriim/app_bicbucstriim.fr.md @@ -0,0 +1,32 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..e5daf877 --- /dev/null +++ b/pages/04.applications/10.docs/bicbucstriim/app_bicbucstriim.md @@ -0,0 +1,32 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_blogotext_fr.md b/pages/04.applications/10.docs/blogotext/app_blogotext.fr.md similarity index 91% rename from app_blogotext_fr.md rename to pages/04.applications/10.docs/blogotext/app_blogotext.fr.md index 46b517c3..508a9de6 100644 --- a/app_blogotext_fr.md +++ b/pages/04.applications/10.docs/blogotext/app_blogotext.fr.md @@ -1,4 +1,13 @@ -# logo de BlogoText BlogoText +--- +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) diff --git a/app_blogotext.md b/pages/04.applications/10.docs/blogotext/app_blogotext.md similarity index 90% rename from app_blogotext.md rename to pages/04.applications/10.docs/blogotext/app_blogotext.md index d5d35d16..7c9fd290 100644 --- a/app_blogotext.md +++ b/pages/04.applications/10.docs/blogotext/app_blogotext.md @@ -1,4 +1,13 @@ -# BlogoText's logo BlogoText +--- +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) diff --git a/app_bludit_fr.md b/pages/04.applications/10.docs/bludit/app_bludit.fr.md similarity index 88% rename from app_bludit_fr.md rename to pages/04.applications/10.docs/bludit/app_bludit.fr.md index fc65bbb4..c3b0c5ed 100644 --- a/app_bludit_fr.md +++ b/pages/04.applications/10.docs/bludit/app_bludit.fr.md @@ -1,4 +1,13 @@ -# logo de Bludit> Bludit
+---
+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)
 
diff --git a/app_bludit.md b/pages/04.applications/10.docs/bludit/app_bludit.md
similarity index 87%
rename from app_bludit.md
rename to pages/04.applications/10.docs/bludit/app_bludit.md
index 71886ed2..3b03a91a 100644
--- a/app_bludit.md
+++ b/pages/04.applications/10.docs/bludit/app_bludit.md
@@ -1,4 +1,13 @@
-# <img src= Bludit +--- +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) 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..a9664371 --- /dev/null +++ b/pages/04.applications/10.docs/bookstack/app_bookstack.fr.md @@ -0,0 +1,26 @@ +--- +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) + +### Index + +- [Liens utiles](#useful-links) + +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..2dff540b --- /dev/null +++ b/pages/04.applications/10.docs/bookstack/app_bookstack.md @@ -0,0 +1,25 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +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/app_borg_fr.md b/pages/04.applications/10.docs/borg/app_borg.fr.md similarity index 90% rename from app_borg_fr.md rename to pages/04.applications/10.docs/borg/app_borg.fr.md index 25f9626c..a748408c 100644 --- a/app_borg_fr.md +++ b/pages/04.applications/10.docs/borg/app_borg.fr.md @@ -1,4 +1,13 @@ -# logo de Borg Borg +--- +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) diff --git a/app_borg.md b/pages/04.applications/10.docs/borg/app_borg.md similarity index 89% rename from app_borg.md rename to pages/04.applications/10.docs/borg/app_borg.md index f4e99ea2..9e02355f 100644 --- a/app_borg.md +++ b/pages/04.applications/10.docs/borg/app_borg.md @@ -1,4 +1,13 @@ -# borg's logo Borg +--- +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) diff --git a/app_bozon_fr.md b/pages/04.applications/10.docs/bozon/app_bozon.fr.md similarity index 83% rename from app_bozon_fr.md rename to pages/04.applications/10.docs/bozon/app_bozon.fr.md index 4ed06bb5..a77cb72e 100644 --- a/app_bozon_fr.md +++ b/pages/04.applications/10.docs/bozon/app_bozon.fr.md @@ -1,4 +1,13 @@ -# Package BoZoN +--- +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) diff --git a/app_bozon.md b/pages/04.applications/10.docs/bozon/app_bozon.md similarity index 83% rename from app_bozon.md rename to pages/04.applications/10.docs/bozon/app_bozon.md index c393f8d2..4aed37b7 100644 --- a/app_bozon.md +++ b/pages/04.applications/10.docs/bozon/app_bozon.md @@ -1,4 +1,13 @@ -# Package BoZoN +--- +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) diff --git a/app_calibreweb_fr.md b/pages/04.applications/10.docs/calibreweb/app_calibreweb.fr.md similarity index 84% rename from app_calibreweb_fr.md rename to pages/04.applications/10.docs/calibreweb/app_calibreweb.fr.md index c7fc7d71..98d3c439 100644 --- a/app_calibreweb_fr.md +++ b/pages/04.applications/10.docs/calibreweb/app_calibreweb.fr.md @@ -1,4 +1,13 @@ -# Package Calibre-Web +--- +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) diff --git a/app_calibreweb.md b/pages/04.applications/10.docs/calibreweb/app_calibreweb.md similarity index 83% rename from app_calibreweb.md rename to pages/04.applications/10.docs/calibreweb/app_calibreweb.md index f6ca3261..9b21fbf8 100644 --- a/app_calibreweb.md +++ b/pages/04.applications/10.docs/calibreweb/app_calibreweb.md @@ -1,4 +1,13 @@ -# Package Calibre-Web +--- +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) 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..b97b226d --- /dev/null +++ b/pages/04.applications/10.docs/castopod/app_castopod.fr.md @@ -0,0 +1,29 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..740c9cee --- /dev/null +++ b/pages/04.applications/10.docs/castopod/app_castopod.md @@ -0,0 +1,29 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_cheky_fr.md b/pages/04.applications/10.docs/cheky/app_cheky.fr.md similarity index 89% rename from app_cheky_fr.md rename to pages/04.applications/10.docs/cheky/app_cheky.fr.md index 59916b0c..130f3460 100644 --- a/app_cheky_fr.md +++ b/pages/04.applications/10.docs/cheky/app_cheky.fr.md @@ -1,4 +1,13 @@ -# Package Cheky +--- +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) diff --git a/app_cheky.md b/pages/04.applications/10.docs/cheky/app_cheky.md similarity index 88% rename from app_cheky.md rename to pages/04.applications/10.docs/cheky/app_cheky.md index 566d8d08..2d9354fc 100644 --- a/app_cheky.md +++ b/pages/04.applications/10.docs/cheky/app_cheky.md @@ -1,4 +1,13 @@ -# Package Cheky +--- +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) 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..4240563f --- /dev/null +++ b/pages/04.applications/10.docs/cinny/app_cinny.fr.md @@ -0,0 +1,30 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..e4942048 --- /dev/null +++ b/pages/04.applications/10.docs/cinny/app_cinny.md @@ -0,0 +1,28 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_civicrm_drupal7_fr.md b/pages/04.applications/10.docs/civicrm_drupal7/app_civicrm_drupal7.fr.md similarity index 87% rename from app_civicrm_drupal7_fr.md rename to pages/04.applications/10.docs/civicrm_drupal7/app_civicrm_drupal7.fr.md index 6c6c6549..a6c6c76c 100644 --- a/app_civicrm_drupal7_fr.md +++ b/pages/04.applications/10.docs/civicrm_drupal7/app_civicrm_drupal7.fr.md @@ -1,4 +1,13 @@ -# logo de CiviCRM CiviCRM +--- +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) diff --git a/app_civicrm_drupal7.md b/pages/04.applications/10.docs/civicrm_drupal7/app_civicrm_drupal7.md similarity index 87% rename from app_civicrm_drupal7.md rename to pages/04.applications/10.docs/civicrm_drupal7/app_civicrm_drupal7.md index 7f5cd983..8af05b45 100644 --- a/app_civicrm_drupal7.md +++ b/pages/04.applications/10.docs/civicrm_drupal7/app_civicrm_drupal7.md @@ -1,4 +1,13 @@ -# CiviCRM's logo CiviCRM +--- +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) diff --git a/app_codimd_fr.md b/pages/04.applications/10.docs/codimd/app_codimd.fr.md similarity index 76% rename from app_codimd_fr.md rename to pages/04.applications/10.docs/codimd/app_codimd.fr.md index 66eed39c..f08f8254 100644 --- a/app_codimd_fr.md +++ b/pages/04.applications/10.docs/codimd/app_codimd.fr.md @@ -1,4 +1,13 @@ -# logo de CodiMD CodiMD +--- +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) @@ -12,7 +21,7 @@ Différents niveaux de permission permettent de choisir qui peut lire ou éditer ## Liens utiles -+ Démo officielle : [https://demo.codimd.org/](https://demo.codimd.org/) -+ Documentation officielle : [github.com/codimd](https://github.com/codimd/server/tree/master/docs/) ++ 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/app_codimd.md b/pages/04.applications/10.docs/codimd/app_codimd.md similarity index 74% rename from app_codimd.md rename to pages/04.applications/10.docs/codimd/app_codimd.md index 562e0659..77a06b1f 100644 --- a/app_codimd.md +++ b/pages/04.applications/10.docs/codimd/app_codimd.md @@ -1,4 +1,13 @@ -# CodiMD’s logo CodiMD +--- +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) @@ -12,7 +21,7 @@ Different levels of permission allow you to choose who can read or edit the docu ## Useful links -+ Official demo: [https://demo.codimd.org/](https://demo.codimd.org/) -+ Official documentation: [github.com/codimd](https://github.com/codimd/server/tree/master/docs/) ++ 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..e8674c58 --- /dev/null +++ b/pages/04.applications/10.docs/collabora/app_collabora.fr.md @@ -0,0 +1,68 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +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/app_collabora.md b/pages/04.applications/10.docs/collabora/app_collabora.md similarity index 85% rename from app_collabora.md rename to pages/04.applications/10.docs/collabora/app_collabora.md index 68926114..4f8f4142 100644 --- a/app_collabora.md +++ b/pages/04.applications/10.docs/collabora/app_collabora.md @@ -1,4 +1,13 @@ -# collabora's logo Collabora +--- +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) diff --git a/app_collaboradocker_fr.md b/pages/04.applications/10.docs/collaboradocker/app_collaboradocker.fr.md similarity index 84% rename from app_collaboradocker_fr.md rename to pages/04.applications/10.docs/collaboradocker/app_collaboradocker.fr.md index b5c12a2f..ea0f7bae 100644 --- a/app_collaboradocker_fr.md +++ b/pages/04.applications/10.docs/collaboradocker/app_collaboradocker.fr.md @@ -1,6 +1,15 @@ +--- +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), [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)). +**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 diff --git a/app_collaboradocker.md b/pages/04.applications/10.docs/collaboradocker/app_collaboradocker.md similarity index 83% rename from app_collaboradocker.md rename to pages/04.applications/10.docs/collaboradocker/app_collaboradocker.md index c6a10813..54e6017f 100644 --- a/app_collaboradocker.md +++ b/pages/04.applications/10.docs/collaboradocker/app_collaboradocker.md @@ -1,6 +1,15 @@ +--- +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), [Sub-domain install of an app](/dns_subdomains), [DNS settings](/dns_config) and [noho.st / nohost.me / ynh.fr domains](/dns_nohost_me). +**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 diff --git a/app_concrete5_fr.md b/pages/04.applications/10.docs/concrete5/app_concrete5.fr.md similarity index 83% rename from app_concrete5_fr.md rename to pages/04.applications/10.docs/concrete5/app_concrete5.fr.md index 81303902..d6d09c65 100644 --- a/app_concrete5_fr.md +++ b/pages/04.applications/10.docs/concrete5/app_concrete5.fr.md @@ -1,4 +1,13 @@ -# Logo de Concrete5 Concret5 +--- +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) diff --git a/app_concrete5.md b/pages/04.applications/10.docs/concrete5/app_concrete5.md similarity index 82% rename from app_concrete5.md rename to pages/04.applications/10.docs/concrete5/app_concrete5.md index 948c62fc..75274cfd 100644 --- a/app_concrete5.md +++ b/pages/04.applications/10.docs/concrete5/app_concrete5.md @@ -1,4 +1,13 @@ -# Concrete5's logo Concret5 +--- +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) 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..269f7ed6 --- /dev/null +++ b/pages/04.applications/10.docs/converse/app_converse.fr.md @@ -0,0 +1,25 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..a5ab63f4 --- /dev/null +++ b/pages/04.applications/10.docs/converse/app_converse.md @@ -0,0 +1,25 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..a2c26abb --- /dev/null +++ b/pages/04.applications/10.docs/coturn/app_coturn.fr.md @@ -0,0 +1,38 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..0334ed36 --- /dev/null +++ b/pages/04.applications/10.docs/coturn/app_coturn.md @@ -0,0 +1,38 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_cowyo_fr.md b/pages/04.applications/10.docs/cowyo/app_cowyo.fr.md similarity index 89% rename from app_cowyo_fr.md rename to pages/04.applications/10.docs/cowyo/app_cowyo.fr.md index 5658891c..ba361bb1 100644 --- a/app_cowyo_fr.md +++ b/pages/04.applications/10.docs/cowyo/app_cowyo.fr.md @@ -1,4 +1,13 @@ -# Logo de Cowyo Cowyo +--- +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/) diff --git a/app_cowyo.md b/pages/04.applications/10.docs/cowyo/app_cowyo.md similarity index 88% rename from app_cowyo.md rename to pages/04.applications/10.docs/cowyo/app_cowyo.md index 15fafba2..75f64fab 100644 --- a/app_cowyo.md +++ b/pages/04.applications/10.docs/cowyo/app_cowyo.md @@ -1,4 +1,13 @@ -# Cowyo's logo Cowyo +--- +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/) 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..505fd7c9 --- /dev/null +++ b/pages/04.applications/10.docs/cryptpad/app_cryptpad.fr.md @@ -0,0 +1,40 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..b8c8c4ea --- /dev/null +++ b/pages/04.applications/10.docs/cryptpad/app_cryptpad.md @@ -0,0 +1,38 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..dff4eca6 --- /dev/null +++ b/pages/04.applications/10.docs/cubiks-2048/app_cubiks-2048.fr.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..c33d96fd --- /dev/null +++ b/pages/04.applications/10.docs/cubiks-2048/app_cubiks-2048.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_diagramsnet_fr.md b/pages/04.applications/10.docs/diagramsnet/app_diagramsnet.fr.md similarity index 88% rename from app_diagramsnet_fr.md rename to pages/04.applications/10.docs/diagramsnet/app_diagramsnet.fr.md index d29fa9b2..2fcaee5f 100644 --- a/app_diagramsnet_fr.md +++ b/pages/04.applications/10.docs/diagramsnet/app_diagramsnet.fr.md @@ -1,4 +1,13 @@ -# logo de Diagrams.net Diagrams.net +--- +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) diff --git a/app_diagramsnet.md b/pages/04.applications/10.docs/diagramsnet/app_diagramsnet.md similarity index 87% rename from app_diagramsnet.md rename to pages/04.applications/10.docs/diagramsnet/app_diagramsnet.md index 3aeabdd6..b16657eb 100644 --- a/app_diagramsnet.md +++ b/pages/04.applications/10.docs/diagramsnet/app_diagramsnet.md @@ -1,4 +1,13 @@ -# Diagrams.net's logo Diagrams.net +--- +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) diff --git a/app_discourse_fr.md b/pages/04.applications/10.docs/discourse/app_discourse.fr.md similarity index 91% rename from app_discourse_fr.md rename to pages/04.applications/10.docs/discourse/app_discourse.fr.md index 3a7bacf0..4a7c6592 100644 --- a/app_discourse_fr.md +++ b/pages/04.applications/10.docs/discourse/app_discourse.fr.md @@ -1,4 +1,13 @@ -# logo de Discourse Discourse +--- +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) diff --git a/app_discourse.md b/pages/04.applications/10.docs/discourse/app_discourse.md similarity index 90% rename from app_discourse.md rename to pages/04.applications/10.docs/discourse/app_discourse.md index 6e44c741..c7a48b3a 100644 --- a/app_discourse.md +++ b/pages/04.applications/10.docs/discourse/app_discourse.md @@ -1,4 +1,13 @@ -# Discourse's logo Discourse +--- +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) 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..d1b0c819 --- /dev/null +++ b/pages/04.applications/10.docs/dispatch/app_dispatch.fr.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..53c56da8 --- /dev/null +++ b/pages/04.applications/10.docs/dispatch/app_dispatch.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_distbin_fr.md b/pages/04.applications/10.docs/distbin/app_distbin.fr.md similarity index 88% rename from app_distbin_fr.md rename to pages/04.applications/10.docs/distbin/app_distbin.fr.md index d251f270..0106e2f1 100644 --- a/app_distbin_fr.md +++ b/pages/04.applications/10.docs/distbin/app_distbin.fr.md @@ -1,4 +1,13 @@ -# Package Distbin +--- +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) diff --git a/app_distbin.md b/pages/04.applications/10.docs/distbin/app_distbin.md similarity index 87% rename from app_distbin.md rename to pages/04.applications/10.docs/distbin/app_distbin.md index f63b23c2..aa3bc2d1 100644 --- a/app_distbin.md +++ b/pages/04.applications/10.docs/distbin/app_distbin.md @@ -1,4 +1,13 @@ -# Package Distbin +--- +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) 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/app_dokuwiki_fr.md b/pages/04.applications/10.docs/dokuwiki/app_dokuwiki.fr.md similarity index 90% rename from app_dokuwiki_fr.md rename to pages/04.applications/10.docs/dokuwiki/app_dokuwiki.fr.md index 48798e6e..755e6c99 100644 --- a/app_dokuwiki_fr.md +++ b/pages/04.applications/10.docs/dokuwiki/app_dokuwiki.fr.md @@ -1,4 +1,13 @@ -# logo de Dokuwiki DokuWiki +--- +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) diff --git a/app_dokuwiki.md b/pages/04.applications/10.docs/dokuwiki/app_dokuwiki.md similarity index 89% rename from app_dokuwiki.md rename to pages/04.applications/10.docs/dokuwiki/app_dokuwiki.md index affc03ea..2f737c9e 100644 --- a/app_dokuwiki.md +++ b/pages/04.applications/10.docs/dokuwiki/app_dokuwiki.md @@ -1,4 +1,13 @@ -# Dokuwiki's logo DokuWiki +--- +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) diff --git a/app_dolibarr_fr.md b/pages/04.applications/10.docs/dolibarr/app_dolibarr.fr.md similarity index 89% rename from app_dolibarr_fr.md rename to pages/04.applications/10.docs/dolibarr/app_dolibarr.fr.md index 13043607..7a1afd2f 100644 --- a/app_dolibarr_fr.md +++ b/pages/04.applications/10.docs/dolibarr/app_dolibarr.fr.md @@ -1,4 +1,13 @@ -# logo de Dolibarr Dolibarr +--- +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) diff --git a/app_dolibarr.md b/pages/04.applications/10.docs/dolibarr/app_dolibarr.md similarity index 89% rename from app_dolibarr.md rename to pages/04.applications/10.docs/dolibarr/app_dolibarr.md index 01dcd21f..ae1c5406 100644 --- a/app_dolibarr.md +++ b/pages/04.applications/10.docs/dolibarr/app_dolibarr.md @@ -1,4 +1,13 @@ -# Dolibarr's logo Dolibarr +--- +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) 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..14703aab --- /dev/null +++ b/pages/04.applications/10.docs/domoticz/app_domoticz.fr.md @@ -0,0 +1,129 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..43c23d2f --- /dev/null +++ b/pages/04.applications/10.docs/domoticz/app_domoticz.md @@ -0,0 +1,136 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_dotclear2_fr.md b/pages/04.applications/10.docs/dotclear2/app_dotclear2.fr.md similarity index 90% rename from app_dotclear2_fr.md rename to pages/04.applications/10.docs/dotclear2/app_dotclear2.fr.md index 3e0cc64d..87b356a3 100644 --- a/app_dotclear2_fr.md +++ b/pages/04.applications/10.docs/dotclear2/app_dotclear2.fr.md @@ -1,4 +1,13 @@ -# Logo de Dotclear Dotclear 2 +--- +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) diff --git a/app_dotclear2.md b/pages/04.applications/10.docs/dotclear2/app_dotclear2.md similarity index 89% rename from app_dotclear2.md rename to pages/04.applications/10.docs/dotclear2/app_dotclear2.md index 7532e805..10998e55 100644 --- a/app_dotclear2.md +++ b/pages/04.applications/10.docs/dotclear2/app_dotclear2.md @@ -1,4 +1,13 @@ -# Dotclear's logo Dotclear 2 +--- +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) 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..6bfe61b7 --- /dev/null +++ b/pages/04.applications/10.docs/droppy/app_droppy.fr.md @@ -0,0 +1,31 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..043857fc --- /dev/null +++ b/pages/04.applications/10.docs/droppy/app_droppy.md @@ -0,0 +1,31 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_drupal_fr.md b/pages/04.applications/10.docs/drupal/app_drupal.fr.md similarity index 86% rename from app_drupal_fr.md rename to pages/04.applications/10.docs/drupal/app_drupal.fr.md index 6950eb41..812f09b7 100644 --- a/app_drupal_fr.md +++ b/pages/04.applications/10.docs/drupal/app_drupal.fr.md @@ -1,4 +1,13 @@ -# Logo de Drupal Drupal +--- +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) diff --git a/app_drupal.md b/pages/04.applications/10.docs/drupal/app_drupal.md similarity index 88% rename from app_drupal.md rename to pages/04.applications/10.docs/drupal/app_drupal.md index f4adfb31..1a45177f 100644 --- a/app_drupal.md +++ b/pages/04.applications/10.docs/drupal/app_drupal.md @@ -1,4 +1,13 @@ -# Drupal's logo Drupal +--- +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) diff --git a/app_drupal7_fr.md b/pages/04.applications/10.docs/drupal7/app_drupal7.fr.md similarity index 87% rename from app_drupal7_fr.md rename to pages/04.applications/10.docs/drupal7/app_drupal7.fr.md index 882ddf1a..9d72a3fe 100644 --- a/app_drupal7_fr.md +++ b/pages/04.applications/10.docs/drupal7/app_drupal7.fr.md @@ -1,4 +1,13 @@ -# Logo de Drupal Drupal 7 +--- +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) diff --git a/app_drupal7.md b/pages/04.applications/10.docs/drupal7/app_drupal7.md similarity index 89% rename from app_drupal7.md rename to pages/04.applications/10.docs/drupal7/app_drupal7.md index 73388808..6539cd6d 100644 --- a/app_drupal7.md +++ b/pages/04.applications/10.docs/drupal7/app_drupal7.md @@ -1,4 +1,13 @@ -# Drupal's logo Drupal 7 +--- +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) 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..4fb532d4 --- /dev/null +++ b/pages/04.applications/10.docs/easyappointments/app_easyappointments.fr.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..ffa4bb7f --- /dev/null +++ b/pages/04.applications/10.docs/easyappointments/app_easyappointments.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..bea51c47 --- /dev/null +++ b/pages/04.applications/10.docs/ecko/app_ecko.md @@ -0,0 +1,46 @@ +--- +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) + +### Index + +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) +- [Compatible Apps](#compatible-apps) + +--- + +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..6d0891d2 --- /dev/null +++ b/pages/04.applications/10.docs/element/app_element.fr.md @@ -0,0 +1,35 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..9ec23c16 --- /dev/null +++ b/pages/04.applications/10.docs/element/app_element.md @@ -0,0 +1,35 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..fb616903 --- /dev/null +++ b/pages/04.applications/10.docs/emailpoubelle/app_emailpoubelle.fr.md @@ -0,0 +1,30 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..ea87b7e5 --- /dev/null +++ b/pages/04.applications/10.docs/emailpoubelle/app_emailpoubelle.md @@ -0,0 +1,30 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*EmailPoubelle* (Trash email) is a script to create temporay email adresses 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..9d16b9f8 --- /dev/null +++ b/pages/04.applications/10.docs/encryptic/app_encryptic.fr.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..05a22974 --- /dev/null +++ b/pages/04.applications/10.docs/encryptic/app_encryptic.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..aeb59b22 --- /dev/null +++ b/pages/04.applications/10.docs/epicyon/app_epicyon.fr.md @@ -0,0 +1,22 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..e02ec7ad --- /dev/null +++ b/pages/04.applications/10.docs/epicyon/app_epicyon.md @@ -0,0 +1,22 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..bf641f3d --- /dev/null +++ b/pages/04.applications/10.docs/ethercalc/app_ethercalc.fr.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +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..fb706f00 --- /dev/null +++ b/pages/04.applications/10.docs/ethercalc/app_ethercalc.md @@ -0,0 +1,26 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +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/app_etherpad_mypads_fr.md b/pages/04.applications/10.docs/etherpad_mypads/app_etherpad_mypads.fr.md similarity index 86% rename from app_etherpad_mypads_fr.md rename to pages/04.applications/10.docs/etherpad_mypads/app_etherpad_mypads.fr.md index 3ff67fff..3eb63028 100644 --- a/app_etherpad_mypads_fr.md +++ b/pages/04.applications/10.docs/etherpad_mypads/app_etherpad_mypads.fr.md @@ -1,4 +1,13 @@ -# logo de Etherpad Etherpad (avec plugin MyPads) +--- +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) @@ -18,7 +27,7 @@ Il est possible d'accéder à deux panneaux de configurations : ## Liens utiles + Site web : [etherpad.org (en)](https://etherpad.org/) -+ Documentation officielle : [etherpad.org - doc (en)](https://etherpad.org/doc/v1.8.4/) ++ 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) diff --git a/app_etherpad_mypads.md b/pages/04.applications/10.docs/etherpad_mypads/app_etherpad_mypads.md similarity index 85% rename from app_etherpad_mypads.md rename to pages/04.applications/10.docs/etherpad_mypads/app_etherpad_mypads.md index cbcd4caa..ee96c055 100644 --- a/app_etherpad_mypads.md +++ b/pages/04.applications/10.docs/etherpad_mypads/app_etherpad_mypads.md @@ -1,4 +1,13 @@ -# Etherpad's logo Etherpad (with MyPads's plugin) +--- +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) @@ -18,7 +27,7 @@ Two control panels can be accessed: ## Useful links + Website: [etherpad.org](https://etherpad.org/) -+ Official documentation: [etherpad.org - doc](https://etherpad.org/doc/v1.8.4/) ++ 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) 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..63a396dd --- /dev/null +++ b/pages/04.applications/10.docs/facette/app_facette.fr.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..becdeebd --- /dev/null +++ b/pages/04.applications/10.docs/facette/app_facette.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..c959316b --- /dev/null +++ b/pages/04.applications/10.docs/facilmap/app_facilmap.fr.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..cc1872a0 --- /dev/null +++ b/pages/04.applications/10.docs/facilmap/app_facilmap.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_fallback_fr.md b/pages/04.applications/10.docs/fallback/app_fallback.fr.md similarity index 89% rename from app_fallback_fr.md rename to pages/04.applications/10.docs/fallback/app_fallback.fr.md index 906755bb..300f83a1 100644 --- a/app_fallback_fr.md +++ b/pages/04.applications/10.docs/fallback/app_fallback.fr.md @@ -1,4 +1,13 @@ -# Package Fallback +--- +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) 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..0c9592eb --- /dev/null +++ b/pages/04.applications/10.docs/fallback/app_fallback.md @@ -0,0 +1,29 @@ +--- +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) + +### Index + +- [Configuration](#configuration) +- [Useful links](#useful-links) + +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/app_ffsync_fr.md b/pages/04.applications/10.docs/ffsync/app_ffsync.fr.md similarity index 64% rename from app_ffsync_fr.md rename to pages/04.applications/10.docs/ffsync/app_ffsync.fr.md index 2e6e6e20..4e71a9c4 100644 --- a/app_ffsync_fr.md +++ b/pages/04.applications/10.docs/ffsync/app_ffsync.fr.md @@ -1,4 +1,13 @@ -# logo de Firefox Sync Firefox Sync +--- +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) @@ -15,13 +24,14 @@ Firefox Sync permet la synchronisation des favoris, des marques-pages, de l’hi ## 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 explorateur internet [Firefox](https://www.mozilla.org/fr/firefox/new/). + +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é ouvrer cette adresse URL : `about:config` -2. Recherchez : `identity.sync.tokenserver.uri` -3. Remplacez l’URL par la vôtre : `https://mondomaine.tld/adresse/token/1.0/sync/1.5` +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 @@ -30,7 +40,7 @@ Avec les versions récentes de Firefox pour mobile la démarche est identique à ## Limitations avec YunoHost -Par défaut, un serveur configuré reportera l'authentification sur le serveur de comptes hébergé par Mozilla à l'adresse https://accounts.firefox.com. Vous devrez donc toujours vous authentifier sur Mozilla, mais le stockage de vos informations se fera sur votre hôte. +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 diff --git a/app_ffsync_it.md b/pages/04.applications/10.docs/ffsync/app_ffsync.it.md similarity index 83% rename from app_ffsync_it.md rename to pages/04.applications/10.docs/ffsync/app_ffsync.it.md index c83e4b64..80c7ff03 100644 --- a/app_ffsync_it.md +++ b/pages/04.applications/10.docs/ffsync/app_ffsync.it.md @@ -1,4 +1,12 @@ -# Firefox Sync +--- +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 diff --git a/app_ffsync.md b/pages/04.applications/10.docs/ffsync/app_ffsync.md similarity index 91% rename from app_ffsync.md rename to pages/04.applications/10.docs/ffsync/app_ffsync.md index e0eba9b3..7d75f891 100644 --- a/app_ffsync.md +++ b/pages/04.applications/10.docs/ffsync/app_ffsync.md @@ -1,4 +1,13 @@ -# Firefox Sync's logo Firefox Sync +--- +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) diff --git a/app_firefly-iii_fr.md b/pages/04.applications/10.docs/firefly-iii/app_firefly-iii.fr.md similarity index 87% rename from app_firefly-iii_fr.md rename to pages/04.applications/10.docs/firefly-iii/app_firefly-iii.fr.md index 145eab49..9315ea3a 100644 --- a/app_firefly-iii_fr.md +++ b/pages/04.applications/10.docs/firefly-iii/app_firefly-iii.fr.md @@ -1,4 +1,13 @@ -# logo de Firefly III Firefly III +--- +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) diff --git a/app_firefly-iii.md b/pages/04.applications/10.docs/firefly-iii/app_firefly-iii.md similarity index 86% rename from app_firefly-iii.md rename to pages/04.applications/10.docs/firefly-iii/app_firefly-iii.md index f1164fa3..53a18ec1 100644 --- a/app_firefly-iii.md +++ b/pages/04.applications/10.docs/firefly-iii/app_firefly-iii.md @@ -1,4 +1,13 @@ -# Firefly III's logo Firefly III +--- +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) diff --git a/app_flarum_fr.md b/pages/04.applications/10.docs/flarum/app_flarum.fr.md similarity index 83% rename from app_flarum_fr.md rename to pages/04.applications/10.docs/flarum/app_flarum.fr.md index ee2d3695..de15fd5b 100644 --- a/app_flarum_fr.md +++ b/pages/04.applications/10.docs/flarum/app_flarum.fr.md @@ -1,4 +1,13 @@ -# logo de Flarum Flarum +--- +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) diff --git a/app_flarum.md b/pages/04.applications/10.docs/flarum/app_flarum.md similarity index 83% rename from app_flarum.md rename to pages/04.applications/10.docs/flarum/app_flarum.md index 84f3ed01..621c773c 100644 --- a/app_flarum.md +++ b/pages/04.applications/10.docs/flarum/app_flarum.md @@ -1,4 +1,13 @@ -# Flarum's logo Flarum +--- +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) diff --git a/app_fluxbb_fr.md b/pages/04.applications/10.docs/fluxbb/app_fluxbb.fr.md similarity index 88% rename from app_fluxbb_fr.md rename to pages/04.applications/10.docs/fluxbb/app_fluxbb.fr.md index 3de6520d..08c6ee7a 100644 --- a/app_fluxbb_fr.md +++ b/pages/04.applications/10.docs/fluxbb/app_fluxbb.fr.md @@ -1,4 +1,13 @@ -# logo de FluxBB FluxBB +--- +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) diff --git a/app_fluxbb.md b/pages/04.applications/10.docs/fluxbb/app_fluxbb.md similarity index 87% rename from app_fluxbb.md rename to pages/04.applications/10.docs/fluxbb/app_fluxbb.md index 76a73533..bbbcc858 100644 --- a/app_fluxbb.md +++ b/pages/04.applications/10.docs/fluxbb/app_fluxbb.md @@ -1,4 +1,13 @@ -# FluxBB's logo FluxBB +--- +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) 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..992d4451 --- /dev/null +++ b/pages/04.applications/10.docs/focalboard/app_focalboard.fr.md @@ -0,0 +1,22 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..a827045a --- /dev/null +++ b/pages/04.applications/10.docs/focalboard/app_focalboard.md @@ -0,0 +1,22 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_framaforms_fr.md b/pages/04.applications/10.docs/framaforms/app_framaforms.fr.md similarity index 88% rename from app_framaforms_fr.md rename to pages/04.applications/10.docs/framaforms/app_framaforms.fr.md index 8afcdbe0..caba4108 100644 --- a/app_framaforms_fr.md +++ b/pages/04.applications/10.docs/framaforms/app_framaforms.fr.md @@ -1,4 +1,13 @@ -# logo de framaforms Framaforms +--- +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) diff --git a/app_framaforms.md b/pages/04.applications/10.docs/framaforms/app_framaforms.md similarity index 91% rename from app_framaforms.md rename to pages/04.applications/10.docs/framaforms/app_framaforms.md index da5d380d..6b3ff6ce 100644 --- a/app_framaforms.md +++ b/pages/04.applications/10.docs/framaforms/app_framaforms.md @@ -1,4 +1,11 @@ -# framaforms's logo Framaforms +--- +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) diff --git a/app_freshrss_fr.md b/pages/04.applications/10.docs/freshrss/app_freshrss.fr.md similarity index 91% rename from app_freshrss_fr.md rename to pages/04.applications/10.docs/freshrss/app_freshrss.fr.md index 8df18c09..f66db945 100644 --- a/app_freshrss_fr.md +++ b/pages/04.applications/10.docs/freshrss/app_freshrss.fr.md @@ -1,4 +1,13 @@ -# logo de FreshRSS FreshRSS +--- +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) diff --git a/app_freshrss.md b/pages/04.applications/10.docs/freshrss/app_freshrss.md similarity index 91% rename from app_freshrss.md rename to pages/04.applications/10.docs/freshrss/app_freshrss.md index 074ee80a..c530aad8 100644 --- a/app_freshrss.md +++ b/pages/04.applications/10.docs/freshrss/app_freshrss.md @@ -1,4 +1,13 @@ -# APPLICATION's FreshRSS FreshRSS +--- +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) diff --git a/app_friendica_fr.md b/pages/04.applications/10.docs/friendica/app_friendica.fr.md similarity index 92% rename from app_friendica_fr.md rename to pages/04.applications/10.docs/friendica/app_friendica.fr.md index 5ecb8b8b..e44804a8 100644 --- a/app_friendica_fr.md +++ b/pages/04.applications/10.docs/friendica/app_friendica.fr.md @@ -1,4 +1,13 @@ -# logo de friendica Friendica +--- +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) diff --git a/app_friendica.md b/pages/04.applications/10.docs/friendica/app_friendica.md similarity index 91% rename from app_friendica.md rename to pages/04.applications/10.docs/friendica/app_friendica.md index c14d50ed..de0f9262 100644 --- a/app_friendica.md +++ b/pages/04.applications/10.docs/friendica/app_friendica.md @@ -1,4 +1,13 @@ -# friendica's logo Friendica +--- +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) diff --git a/app_funkwhale_fr.md b/pages/04.applications/10.docs/funkwhale/app_funkwhale.fr.md similarity index 90% rename from app_funkwhale_fr.md rename to pages/04.applications/10.docs/funkwhale/app_funkwhale.fr.md index 91dfbe76..12b9ac10 100644 --- a/app_funkwhale_fr.md +++ b/pages/04.applications/10.docs/funkwhale/app_funkwhale.fr.md @@ -1,4 +1,13 @@ -# logo de Funkwhale Funkwhale +--- +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) diff --git a/app_funkwhale.md b/pages/04.applications/10.docs/funkwhale/app_funkwhale.md similarity index 78% rename from app_funkwhale.md rename to pages/04.applications/10.docs/funkwhale/app_funkwhale.md index 34700206..a3f80a26 100644 --- a/app_funkwhale.md +++ b/pages/04.applications/10.docs/funkwhale/app_funkwhale.md @@ -1,4 +1,13 @@ -# Funkwhale's logo Funkwhale +--- +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) @@ -8,7 +17,7 @@ - [Limitations with YunoHost](#limitations-with-yunohost) - [Useful links](#useful-links) -Funkwhale is a self-hosted, federated free music streaming server. Each utilisateur⋅trice has a library in which he/she can add the titles he/she wants, and which he/she can share with other users, whether they are on the same instance or not. [¹](#sources) +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 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..0e113586 --- /dev/null +++ b/pages/04.applications/10.docs/galene/app_galene.fr.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..c52bc7bd --- /dev/null +++ b/pages/04.applications/10.docs/galene/app_galene.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..bd2320e6 --- /dev/null +++ b/pages/04.applications/10.docs/galette/app_galette.fr.md @@ -0,0 +1,46 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..8001382d --- /dev/null +++ b/pages/04.applications/10.docs/galette/app_galette.md @@ -0,0 +1,46 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_garradin_fr.md b/pages/04.applications/10.docs/garradin/app_garradin.fr.md similarity index 91% rename from app_garradin_fr.md rename to pages/04.applications/10.docs/garradin/app_garradin.fr.md index ce6fd8b6..25f510c4 100644 --- a/app_garradin_fr.md +++ b/pages/04.applications/10.docs/garradin/app_garradin.fr.md @@ -1,4 +1,13 @@ -# logo de Garradin Garradin +--- +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) diff --git a/app_garradin.md b/pages/04.applications/10.docs/garradin/app_garradin.md similarity index 91% rename from app_garradin.md rename to pages/04.applications/10.docs/garradin/app_garradin.md index ff782081..8d63cf2c 100644 --- a/app_garradin.md +++ b/pages/04.applications/10.docs/garradin/app_garradin.md @@ -1,4 +1,13 @@ -# Garradin's logo Garradin +--- +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) 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..b330fa4a --- /dev/null +++ b/pages/04.applications/10.docs/gemserv/app_gemserv.fr.md @@ -0,0 +1,60 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..04bac6bb --- /dev/null +++ b/pages/04.applications/10.docs/gemserv/app_gemserv.md @@ -0,0 +1,60 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..134390f7 --- /dev/null +++ b/pages/04.applications/10.docs/ghost/app_ghost.fr.md @@ -0,0 +1,51 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..524c9538 --- /dev/null +++ b/pages/04.applications/10.docs/ghost/app_ghost.md @@ -0,0 +1,51 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_gitea_fr.md b/pages/04.applications/10.docs/gitea/app_gitea.fr.md similarity index 89% rename from app_gitea_fr.md rename to pages/04.applications/10.docs/gitea/app_gitea.fr.md index fe0bb9c0..c12e09f5 100644 --- a/app_gitea_fr.md +++ b/pages/04.applications/10.docs/gitea/app_gitea.fr.md @@ -1,11 +1,20 @@ -# logo de Gitea Gitea +--- +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) ### Index - [Limitations avec YunoHost](#limitations-avec-yunohost) -- [Applications clientes](#applications-clients) +- [Applications clientes](#applications-clientes) - [Liens utiles](#liens-utiles) 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) diff --git a/app_gitea.md b/pages/04.applications/10.docs/gitea/app_gitea.md similarity index 91% rename from app_gitea.md rename to pages/04.applications/10.docs/gitea/app_gitea.md index dfcda241..32070fe0 100644 --- a/app_gitea.md +++ b/pages/04.applications/10.docs/gitea/app_gitea.md @@ -1,4 +1,13 @@ -# Gitea's logo Gitea +--- +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) diff --git a/app_gitlab-runner_fr.md b/pages/04.applications/10.docs/gitlab-runner/app_gitlab-runner.fr.md similarity index 84% rename from app_gitlab-runner_fr.md rename to pages/04.applications/10.docs/gitlab-runner/app_gitlab-runner.fr.md index b4537f11..81c4f7f8 100644 --- a/app_gitlab-runner_fr.md +++ b/pages/04.applications/10.docs/gitlab-runner/app_gitlab-runner.fr.md @@ -1,4 +1,13 @@ -# logo de GitLab Runner GitLab Runner +--- +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) diff --git a/app_gitlab-runner.md b/pages/04.applications/10.docs/gitlab-runner/app_gitlab-runner.md similarity index 83% rename from app_gitlab-runner.md rename to pages/04.applications/10.docs/gitlab-runner/app_gitlab-runner.md index 03c40312..21dbf58c 100644 --- a/app_gitlab-runner.md +++ b/pages/04.applications/10.docs/gitlab-runner/app_gitlab-runner.md @@ -1,4 +1,13 @@ -# GitLab Runner's logo GitLab Runner +--- +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) diff --git a/app_gitlab_fr.md b/pages/04.applications/10.docs/gitlab/app_gitlab.fr.md similarity index 93% rename from app_gitlab_fr.md rename to pages/04.applications/10.docs/gitlab/app_gitlab.fr.md index b7260eb0..56d6471b 100644 --- a/app_gitlab_fr.md +++ b/pages/04.applications/10.docs/gitlab/app_gitlab.fr.md @@ -1,4 +1,13 @@ -# logo de GitLab GitLab +--- +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) diff --git a/app_gitlab.md b/pages/04.applications/10.docs/gitlab/app_gitlab.md similarity index 92% rename from app_gitlab.md rename to pages/04.applications/10.docs/gitlab/app_gitlab.md index 72b783f7..8b5921c8 100644 --- a/app_gitlab.md +++ b/pages/04.applications/10.docs/gitlab/app_gitlab.md @@ -1,4 +1,13 @@ -# GitLab's logo GitLab +--- +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) diff --git a/app_glowing_bear_fr.md b/pages/04.applications/10.docs/glowing_bear/app_glowing_bear.fr.md similarity index 89% rename from app_glowing_bear_fr.md rename to pages/04.applications/10.docs/glowing_bear/app_glowing_bear.fr.md index 47b75e10..1849dc64 100644 --- a/app_glowing_bear_fr.md +++ b/pages/04.applications/10.docs/glowing_bear/app_glowing_bear.fr.md @@ -1,4 +1,13 @@ -# logo de Glowing Bear Glowing Bear +--- +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) diff --git a/app_glowing_bear.md b/pages/04.applications/10.docs/glowing_bear/app_glowing_bear.md similarity index 89% rename from app_glowing_bear.md rename to pages/04.applications/10.docs/glowing_bear/app_glowing_bear.md index baa5000d..29e1088d 100644 --- a/app_glowing_bear.md +++ b/pages/04.applications/10.docs/glowing_bear/app_glowing_bear.md @@ -1,4 +1,13 @@ -# Glowing Bear's logo Glowing Bear +--- +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) diff --git a/app_gogs_fr.md b/pages/04.applications/10.docs/gogs/app_gogs.fr.md similarity index 88% rename from app_gogs_fr.md rename to pages/04.applications/10.docs/gogs/app_gogs.fr.md index c6982e1d..134922fa 100644 --- a/app_gogs_fr.md +++ b/pages/04.applications/10.docs/gogs/app_gogs.fr.md @@ -1,4 +1,13 @@ -# logo de Gogs Gogs +--- +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) diff --git a/app_gogs.md b/pages/04.applications/10.docs/gogs/app_gogs.md similarity index 86% rename from app_gogs.md rename to pages/04.applications/10.docs/gogs/app_gogs.md index d719ae81..5a953063 100644 --- a/app_gogs.md +++ b/pages/04.applications/10.docs/gogs/app_gogs.md @@ -1,4 +1,13 @@ -# Gogs's logo Gogs +--- +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) diff --git a/app_gotify_fr.md b/pages/04.applications/10.docs/gotify/app_gotify.fr.md similarity index 91% rename from app_gotify_fr.md rename to pages/04.applications/10.docs/gotify/app_gotify.fr.md index 6f9477d6..d6d2506f 100644 --- a/app_gotify_fr.md +++ b/pages/04.applications/10.docs/gotify/app_gotify.fr.md @@ -1,4 +1,13 @@ -# logo de Gotify Gotify +--- +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) diff --git a/app_gotify.md b/pages/04.applications/10.docs/gotify/app_gotify.md similarity index 90% rename from app_gotify.md rename to pages/04.applications/10.docs/gotify/app_gotify.md index fad28143..5fecc32f 100644 --- a/app_gotify.md +++ b/pages/04.applications/10.docs/gotify/app_gotify.md @@ -1,4 +1,13 @@ -# Gotify's logo Gotify +--- +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) 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..c9ef700b --- /dev/null +++ b/pages/04.applications/10.docs/grafana/app_grafana.fr.md @@ -0,0 +1,55 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..23d86644 --- /dev/null +++ b/pages/04.applications/10.docs/grafana/app_grafana.md @@ -0,0 +1,55 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_grav_fr.md b/pages/04.applications/10.docs/grav/app_grav.fr.md similarity index 89% rename from app_grav_fr.md rename to pages/04.applications/10.docs/grav/app_grav.fr.md index d745195f..d15f9148 100644 --- a/app_grav_fr.md +++ b/pages/04.applications/10.docs/grav/app_grav.fr.md @@ -1,4 +1,13 @@ -# logo de Grav Grav +--- +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) @@ -11,7 +20,7 @@ Grav est une plateforme Web rapide, simple et flexible, basée sur des fichiers. ## Liens utiles + Site web : [getgrav.org (en)](https://getgrav.org/) - + Documentation officielle : [learn.getgrav.org (en)](https://learn.getgrav.org/16) + + 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) diff --git a/app_grav.md b/pages/04.applications/10.docs/grav/app_grav.md similarity index 88% rename from app_grav.md rename to pages/04.applications/10.docs/grav/app_grav.md index 950b1331..d35ea9ec 100644 --- a/app_grav.md +++ b/pages/04.applications/10.docs/grav/app_grav.md @@ -1,4 +1,13 @@ -# Grav's logo Grav +--- +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) @@ -11,7 +20,7 @@ Grav is a Fast, Simple, and Flexible, file-based Web-platform. There is Zero ins ## Useful links + Website: [getgrav.org](https://getgrav.org/) -+ Official documentation: [learn.getgrav.org](https://learn.getgrav.org/16) ++ 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) 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..e008b835 --- /dev/null +++ b/pages/04.applications/10.docs/grocy/app_grocy.md @@ -0,0 +1,37 @@ +--- +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) + + +### Index + +- [Configuration](#configuration) +- [Useful links](#useful-links) + +*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..fd865f25 --- /dev/null +++ b/pages/04.applications/10.docs/guacamole/app_guacamole.fr.md @@ -0,0 +1,32 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..3bf5bfcc --- /dev/null +++ b/pages/04.applications/10.docs/guacamole/app_guacamole.md @@ -0,0 +1,32 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..56d561d7 --- /dev/null +++ b/pages/04.applications/10.docs/h5ai/app_h5ai.fr.md @@ -0,0 +1,30 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..9f20a2f8 --- /dev/null +++ b/pages/04.applications/10.docs/h5ai/app_h5ai.md @@ -0,0 +1,30 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_halcyon_fr.md b/pages/04.applications/10.docs/halcyon/app_halcyon.fr.md similarity index 88% rename from app_halcyon_fr.md rename to pages/04.applications/10.docs/halcyon/app_halcyon.fr.md index 66b885d2..ce0b74ef 100644 --- a/app_halcyon_fr.md +++ b/pages/04.applications/10.docs/halcyon/app_halcyon.fr.md @@ -1,4 +1,13 @@ -# logo de Halcyon Halcyon +--- +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) diff --git a/app_halcyon.md b/pages/04.applications/10.docs/halcyon/app_halcyon.md similarity index 88% rename from app_halcyon.md rename to pages/04.applications/10.docs/halcyon/app_halcyon.md index ca240189..3282e5c7 100644 --- a/app_halcyon.md +++ b/pages/04.applications/10.docs/halcyon/app_halcyon.md @@ -1,4 +1,13 @@ -# Halcyon's logo Halcyon +--- +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) diff --git a/app_haste_fr.md b/pages/04.applications/10.docs/haste/app_haste.fr.md similarity index 89% rename from app_haste_fr.md rename to pages/04.applications/10.docs/haste/app_haste.fr.md index 2471ebaa..354a7fc4 100644 --- a/app_haste_fr.md +++ b/pages/04.applications/10.docs/haste/app_haste.fr.md @@ -1,4 +1,13 @@ -# Package Haste +--- +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) diff --git a/app_haste.md b/pages/04.applications/10.docs/haste/app_haste.md similarity index 89% rename from app_haste.md rename to pages/04.applications/10.docs/haste/app_haste.md index 27be8d39..935cc0fc 100644 --- a/app_haste.md +++ b/pages/04.applications/10.docs/haste/app_haste.md @@ -1,4 +1,13 @@ -# Package Haste +--- +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) diff --git a/app_hedgedoc_fr.md b/pages/04.applications/10.docs/hedgedoc/app_hedgedoc.fr.md similarity index 75% rename from app_hedgedoc_fr.md rename to pages/04.applications/10.docs/hedgedoc/app_hedgedoc.fr.md index b41a3f62..3bd94321 100644 --- a/app_hedgedoc_fr.md +++ b/pages/04.applications/10.docs/hedgedoc/app_hedgedoc.fr.md @@ -1,4 +1,13 @@ -# Logo de HedgeDoc HedgeDoc +--- +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) @@ -6,7 +15,7 @@ - [Liens utiles](#liens-utiles) -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* 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. @@ -14,5 +23,5 @@ Différents niveaux de permission permettent de choisir qui peut lire ou éditer + 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/codimd_ynh) ++ 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/app_hedgedoc.md b/pages/04.applications/10.docs/hedgedoc/app_hedgedoc.md similarity index 72% rename from app_hedgedoc.md rename to pages/04.applications/10.docs/hedgedoc/app_hedgedoc.md index a01394ab..e1bc7c74 100644 --- a/app_hedgedoc.md +++ b/pages/04.applications/10.docs/hedgedoc/app_hedgedoc.md @@ -1,4 +1,13 @@ -# HedgeDoc’s logo HedgeDoc +--- +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) @@ -6,13 +15,13 @@ - [Useful links](#useful-links) -HedgeDoc is a collaborative, real-time word processing web service. It uses Markdown language, which is a simple way to format text. +*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: [github.com/hedgedoc](https://github.com/hedgedoc/hedgedoc/tree/master/docs) ++ 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/app_hextris_fr.md b/pages/04.applications/10.docs/hextris/app_hextris.fr.md similarity index 85% rename from app_hextris_fr.md rename to pages/04.applications/10.docs/hextris/app_hextris.fr.md index b584b7a9..6ebe08cf 100644 --- a/app_hextris_fr.md +++ b/pages/04.applications/10.docs/hextris/app_hextris.fr.md @@ -1,4 +1,13 @@ -# logo de Hextris Hextris +--- +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) diff --git a/app_hextris.md b/pages/04.applications/10.docs/hextris/app_hextris.md similarity index 85% rename from app_hextris.md rename to pages/04.applications/10.docs/hextris/app_hextris.md index 3d604c85..84f6d4a4 100644 --- a/app_hextris.md +++ b/pages/04.applications/10.docs/hextris/app_hextris.md @@ -1,4 +1,13 @@ -# Hextris's logo Hextris +--- +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) 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..74c4806e --- /dev/null +++ b/pages/04.applications/10.docs/homeassistant/app_homeassistant.fr.md @@ -0,0 +1,34 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..ec351383 --- /dev/null +++ b/pages/04.applications/10.docs/homeassistant/app_homeassistant.md @@ -0,0 +1,32 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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: [homeassistant.eu (en)](https://homeassistant.eu/site/) ++ 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/app_horde_fr.md b/pages/04.applications/10.docs/horde/app_horde.fr.md similarity index 88% rename from app_horde_fr.md rename to pages/04.applications/10.docs/horde/app_horde.fr.md index a56c7ee3..d9f596c4 100644 --- a/app_horde_fr.md +++ b/pages/04.applications/10.docs/horde/app_horde.fr.md @@ -1,4 +1,13 @@ -# logo de Horde Horde +--- +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) diff --git a/app_horde.md b/pages/04.applications/10.docs/horde/app_horde.md similarity index 87% rename from app_horde.md rename to pages/04.applications/10.docs/horde/app_horde.md index ca12df16..f2e9c3fe 100644 --- a/app_horde.md +++ b/pages/04.applications/10.docs/horde/app_horde.md @@ -1,4 +1,13 @@ -# Horde's logo Horde +--- +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) diff --git a/app_hubzilla_fr.md b/pages/04.applications/10.docs/hubzilla/app_hubzilla.fr.md similarity index 89% rename from app_hubzilla_fr.md rename to pages/04.applications/10.docs/hubzilla/app_hubzilla.fr.md index ae163ff0..63b7fa84 100644 --- a/app_hubzilla_fr.md +++ b/pages/04.applications/10.docs/hubzilla/app_hubzilla.fr.md @@ -1,4 +1,13 @@ -# logo de Hubzilla Hubzilla +--- +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) diff --git a/app_hubzilla.md b/pages/04.applications/10.docs/hubzilla/app_hubzilla.md similarity index 88% rename from app_hubzilla.md rename to pages/04.applications/10.docs/hubzilla/app_hubzilla.md index f4848580..bf7fdb38 100644 --- a/app_hubzilla.md +++ b/pages/04.applications/10.docs/hubzilla/app_hubzilla.md @@ -1,4 +1,13 @@ -# Hubzilla's logo Hubzilla +--- +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) 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..d39bb52a --- /dev/null +++ b/pages/04.applications/10.docs/ifm/app_ifm.fr.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..d1531316 --- /dev/null +++ b/pages/04.applications/10.docs/ifm/app_ifm.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..c412d410 --- /dev/null +++ b/pages/04.applications/10.docs/ihatemoney/app_ihatemoney.fr.md @@ -0,0 +1,43 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..d5a1c7f6 --- /dev/null +++ b/pages/04.applications/10.docs/ihatemoney/app_ihatemoney.md @@ -0,0 +1,43 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..255a00ba --- /dev/null +++ b/pages/04.applications/10.docs/invidious/app_invidious.md @@ -0,0 +1,41 @@ +--- +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) + + +### Index + +- [Features](#features) +- [Configuration](#configuration) +- [Useful links](#useful-links) + +**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/app_invoiceninja.md b/pages/04.applications/10.docs/invoiceninga/app_invoiceninja.md similarity index 85% rename from app_invoiceninja.md rename to pages/04.applications/10.docs/invoiceninga/app_invoiceninja.md index 3d6dee2a..1f52a6cf 100644 --- a/app_invoiceninja.md +++ b/pages/04.applications/10.docs/invoiceninga/app_invoiceninja.md @@ -1,4 +1,13 @@ -# Invoice Ninja logo Invoice Ninja +--- +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) 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/app_jirafeau_fr.md b/pages/04.applications/10.docs/jirafeau/app_jirafeau.fr.md similarity index 86% rename from app_jirafeau_fr.md rename to pages/04.applications/10.docs/jirafeau/app_jirafeau.fr.md index ef802ddc..aa275db3 100644 --- a/app_jirafeau_fr.md +++ b/pages/04.applications/10.docs/jirafeau/app_jirafeau.fr.md @@ -1,4 +1,13 @@ -# logo de Jirafeau Jirafeau +--- +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) @@ -9,7 +18,7 @@ - [Administration](#administration) - [Liens utiles](#liens-utiles) -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. +*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) diff --git a/app_jirafeau.md b/pages/04.applications/10.docs/jirafeau/app_jirafeau.md similarity index 82% rename from app_jirafeau.md rename to pages/04.applications/10.docs/jirafeau/app_jirafeau.md index 7e3dfa7e..7f5b1cac 100644 --- a/app_jirafeau.md +++ b/pages/04.applications/10.docs/jirafeau/app_jirafeau.md @@ -1,4 +1,13 @@ -# Jirafeau's logo Jirafeau +--- +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) @@ -9,7 +18,7 @@ - [Administration](#administration) - [Useful links](#useful-links) -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. +*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) @@ -24,7 +33,7 @@ If you update the installation, then only the `tos.original.txt` file may change ### Administration -To administrate the files within Jirafeau it is enough to go to the address `jirafeau.domaine.tld/admin.php`. +To administer the files within Jirafeau it is enough to go to the address `jirafeau.domaine.tld/admin.php`. ## Useful links diff --git a/app_jitsi_fr.md b/pages/04.applications/10.docs/jitsi/app_jitsi.fr.md similarity index 88% rename from app_jitsi_fr.md rename to pages/04.applications/10.docs/jitsi/app_jitsi.fr.md index 40188169..c1afb4f6 100644 --- a/app_jitsi_fr.md +++ b/pages/04.applications/10.docs/jitsi/app_jitsi.fr.md @@ -1,4 +1,13 @@ -# logo de jitsi Jitsi +--- +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) @@ -23,7 +32,7 @@ Jitsi-meet pour YunoHost est limité actuellement : | 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 Desktop | Windows - macOS - GNU/Linux | | | | | | [Téléchargement](https://desktop.jitsi.org/Main/Download) | +| Jitsi Meet Electron | Windows - macOS - GNU/Linux | | | | | | [Téléchargement](https://github.com/jitsi/jitsi-meet-electron) | ## Liens utiles diff --git a/app_jitsi.md b/pages/04.applications/10.docs/jitsi/app_jitsi.md similarity index 87% rename from app_jitsi.md rename to pages/04.applications/10.docs/jitsi/app_jitsi.md index df73c65d..6221551b 100644 --- a/app_jitsi.md +++ b/pages/04.applications/10.docs/jitsi/app_jitsi.md @@ -1,4 +1,13 @@ -# Jitsi's logo Jitsi +--- +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) @@ -23,7 +32,7 @@ Jitsi for YunoHost for now as some limitations: | 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 Desktop | Windows - macOS - GNU/Linux | | | | | | [Download](https://desktop.jitsi.org/Main/Download) | +| Jitsi Meet Electron | Windows - macOS - GNU/Linux | | | | | | [Download](https://github.com/jitsi/jitsi-meet-electron) | ## Useful links diff --git a/app_jupyterlab_fr.md b/pages/04.applications/10.docs/jupyterlab/app_jupyterlab.fr.md similarity index 86% rename from app_jupyterlab_fr.md rename to pages/04.applications/10.docs/jupyterlab/app_jupyterlab.fr.md index 6795ce0e..3ab1d675 100644 --- a/app_jupyterlab_fr.md +++ b/pages/04.applications/10.docs/jupyterlab/app_jupyterlab.fr.md @@ -1,4 +1,13 @@ -# Logo de JupyterHub JupyterLab +--- +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) diff --git a/app_jupyterlab.md b/pages/04.applications/10.docs/jupyterlab/app_jupyterlab.md similarity index 86% rename from app_jupyterlab.md rename to pages/04.applications/10.docs/jupyterlab/app_jupyterlab.md index cf7b7cd6..2df0a866 100644 --- a/app_jupyterlab.md +++ b/pages/04.applications/10.docs/jupyterlab/app_jupyterlab.md @@ -1,4 +1,13 @@ -# JupyterLab Logo JupyterLab +--- +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) diff --git a/app_kanboard_fr.md b/pages/04.applications/10.docs/kanboard/app_kanboard.fr.md similarity index 90% rename from app_kanboard_fr.md rename to pages/04.applications/10.docs/kanboard/app_kanboard.fr.md index c34a02ba..de56ca41 100644 --- a/app_kanboard_fr.md +++ b/pages/04.applications/10.docs/kanboard/app_kanboard.fr.md @@ -1,4 +1,13 @@ -# logo de kanboard Kanboard +--- +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) diff --git a/app_kanboard.md b/pages/04.applications/10.docs/kanboard/app_kanboard.md similarity index 89% rename from app_kanboard.md rename to pages/04.applications/10.docs/kanboard/app_kanboard.md index c0a2973f..00a2a1ea 100644 --- a/app_kanboard.md +++ b/pages/04.applications/10.docs/kanboard/app_kanboard.md @@ -1,4 +1,13 @@ -# kanboard's logo Kanboard +--- +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) diff --git a/app_keeweb_fr.md b/pages/04.applications/10.docs/keeweb/app_keeweb.fr.md similarity index 88% rename from app_keeweb_fr.md rename to pages/04.applications/10.docs/keeweb/app_keeweb.fr.md index ec78ead3..84da5c7f 100644 --- a/app_keeweb_fr.md +++ b/pages/04.applications/10.docs/keeweb/app_keeweb.fr.md @@ -1,4 +1,13 @@ -# logo de keeweb KeeWeb +--- +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) diff --git a/app_keeweb.md b/pages/04.applications/10.docs/keeweb/app_keeweb.md similarity index 87% rename from app_keeweb.md rename to pages/04.applications/10.docs/keeweb/app_keeweb.md index f22e39f9..770f9c76 100644 --- a/app_keeweb.md +++ b/pages/04.applications/10.docs/keeweb/app_keeweb.md @@ -1,4 +1,13 @@ -# keeweb's logo KeeWeb +--- +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) 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..7f6d4e68 --- /dev/null +++ b/pages/04.applications/10.docs/kimai2/app_kimai2.fr.md @@ -0,0 +1,40 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..a1d911fe --- /dev/null +++ b/pages/04.applications/10.docs/kimai2/app_kimai2.md @@ -0,0 +1,41 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..62b9c4fa --- /dev/null +++ b/pages/04.applications/10.docs/kiwiirc/app_kiwiirc.fr.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..5a510d9d --- /dev/null +++ b/pages/04.applications/10.docs/kiwiirc/app_kiwiirc.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..8dcede96 --- /dev/null +++ b/pages/04.applications/10.docs/komga/app_komga.fr.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..de70319a --- /dev/null +++ b/pages/04.applications/10.docs/komga/app_komga.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_kresus_fr.md b/pages/04.applications/10.docs/kresus/app_kresus.fr.md similarity index 91% rename from app_kresus_fr.md rename to pages/04.applications/10.docs/kresus/app_kresus.fr.md index acda511b..a96680e8 100644 --- a/app_kresus_fr.md +++ b/pages/04.applications/10.docs/kresus/app_kresus.fr.md @@ -1,4 +1,13 @@ -# logo de kresus Kresus +--- +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) diff --git a/app_kresus.md b/pages/04.applications/10.docs/kresus/app_kresus.md similarity index 90% rename from app_kresus.md rename to pages/04.applications/10.docs/kresus/app_kresus.md index 432572f9..3039fcfe 100644 --- a/app_kresus.md +++ b/pages/04.applications/10.docs/kresus/app_kresus.md @@ -1,4 +1,13 @@ -# kresus's logo Kresus +--- +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) diff --git a/app_leed_fr.md b/pages/04.applications/10.docs/leed/app_leed.fr.md similarity index 88% rename from app_leed_fr.md rename to pages/04.applications/10.docs/leed/app_leed.fr.md index a29f5ed8..5ac55db2 100644 --- a/app_leed_fr.md +++ b/pages/04.applications/10.docs/leed/app_leed.fr.md @@ -1,4 +1,13 @@ -# logo de leed Leed +--- +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) diff --git a/app_leed.md b/pages/04.applications/10.docs/leed/app_leed.md similarity index 87% rename from app_leed.md rename to pages/04.applications/10.docs/leed/app_leed.md index af344f9b..fa8214e9 100644 --- a/app_leed.md +++ b/pages/04.applications/10.docs/leed/app_leed.md @@ -1,4 +1,13 @@ -# leed's logo Leed +--- +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) diff --git a/app_limesurvey_fr.md b/pages/04.applications/10.docs/limesurvey/app_limesurvey.fr.md similarity index 86% rename from app_limesurvey_fr.md rename to pages/04.applications/10.docs/limesurvey/app_limesurvey.fr.md index c7ab8f49..b07f0cd9 100644 --- a/app_limesurvey_fr.md +++ b/pages/04.applications/10.docs/limesurvey/app_limesurvey.fr.md @@ -1,4 +1,13 @@ -# logo de LimeSurvey LimeSurvey +--- +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) diff --git a/app_limesurvey.md b/pages/04.applications/10.docs/limesurvey/app_limesurvey.md similarity index 86% rename from app_limesurvey.md rename to pages/04.applications/10.docs/limesurvey/app_limesurvey.md index 4c4d0659..d23b67cc 100644 --- a/app_limesurvey.md +++ b/pages/04.applications/10.docs/limesurvey/app_limesurvey.md @@ -1,4 +1,13 @@ -# LimeSurvey's logo LimeSurvey +--- +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) diff --git a/app_lstu_fr.md b/pages/04.applications/10.docs/lstu/app_lstu.fr.md similarity index 89% rename from app_lstu_fr.md rename to pages/04.applications/10.docs/lstu/app_lstu.fr.md index 249e785d..a717292f 100644 --- a/app_lstu_fr.md +++ b/pages/04.applications/10.docs/lstu/app_lstu.fr.md @@ -1,4 +1,13 @@ -# logo de lstu Lstu +--- +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) diff --git a/app_lstu.md b/pages/04.applications/10.docs/lstu/app_lstu.md similarity index 88% rename from app_lstu.md rename to pages/04.applications/10.docs/lstu/app_lstu.md index 9b3a98ce..c6e84bb4 100644 --- a/app_lstu.md +++ b/pages/04.applications/10.docs/lstu/app_lstu.md @@ -1,4 +1,13 @@ -# lstu's logo Lstu +--- +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) diff --git a/app_lufi_fr.md b/pages/04.applications/10.docs/lufi/app_lufi.fr.md similarity index 89% rename from app_lufi_fr.md rename to pages/04.applications/10.docs/lufi/app_lufi.fr.md index ce9e1700..2aa3bc8f 100644 --- a/app_lufi_fr.md +++ b/pages/04.applications/10.docs/lufi/app_lufi.fr.md @@ -1,4 +1,13 @@ -# logo de Lufi Lufi +--- +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) diff --git a/app_lufi.md b/pages/04.applications/10.docs/lufi/app_lufi.md similarity index 87% rename from app_lufi.md rename to pages/04.applications/10.docs/lufi/app_lufi.md index 13d376d4..4e1a4d15 100644 --- a/app_lufi.md +++ b/pages/04.applications/10.docs/lufi/app_lufi.md @@ -1,4 +1,13 @@ -# Lufi's logo Lufi +--- +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) diff --git a/app_lutim_fr.md b/pages/04.applications/10.docs/lutim/app_lutim.fr.md similarity index 87% rename from app_lutim_fr.md rename to pages/04.applications/10.docs/lutim/app_lutim.fr.md index 7baa0f2d..88c0f8bf 100644 --- a/app_lutim_fr.md +++ b/pages/04.applications/10.docs/lutim/app_lutim.fr.md @@ -1,4 +1,13 @@ -# logo de lutim Lutim +--- +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) diff --git a/app_lutim.md b/pages/04.applications/10.docs/lutim/app_lutim.md similarity index 87% rename from app_lutim.md rename to pages/04.applications/10.docs/lutim/app_lutim.md index a616e92b..0e762862 100644 --- a/app_lutim.md +++ b/pages/04.applications/10.docs/lutim/app_lutim.md @@ -1,4 +1,13 @@ -# Lutim's logo Lutim +--- +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) diff --git a/app_lychee_fr.md b/pages/04.applications/10.docs/lychee/app_lychee.fr.md similarity index 88% rename from app_lychee_fr.md rename to pages/04.applications/10.docs/lychee/app_lychee.fr.md index c98a7c4c..9072ac27 100644 --- a/app_lychee_fr.md +++ b/pages/04.applications/10.docs/lychee/app_lychee.fr.md @@ -1,4 +1,13 @@ -# Lyfee's logo Lychee +--- +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) diff --git a/app_lychee.md b/pages/04.applications/10.docs/lychee/app_lychee.md similarity index 87% rename from app_lychee.md rename to pages/04.applications/10.docs/lychee/app_lychee.md index c2559647..f71cdf39 100644 --- a/app_lychee.md +++ b/pages/04.applications/10.docs/lychee/app_lychee.md @@ -1,4 +1,13 @@ -# Lyfee's logo Lychee +--- +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) diff --git a/app_mailman_fr.md b/pages/04.applications/10.docs/mailman/app_mailman.fr.md similarity index 84% rename from app_mailman_fr.md rename to pages/04.applications/10.docs/mailman/app_mailman.fr.md index d799d526..f0d78a52 100644 --- a/app_mailman_fr.md +++ b/pages/04.applications/10.docs/mailman/app_mailman.fr.md @@ -1,4 +1,13 @@ -# logo de mailman Mailman +--- +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) diff --git a/app_mailman.md b/pages/04.applications/10.docs/mailman/app_mailman.md similarity index 83% rename from app_mailman.md rename to pages/04.applications/10.docs/mailman/app_mailman.md index 0f106418..05ad19a5 100644 --- a/app_mailman.md +++ b/pages/04.applications/10.docs/mailman/app_mailman.md @@ -1,4 +1,13 @@ -# mailman's logo Mailman +--- +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) 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..89f27e23 --- /dev/null +++ b/pages/04.applications/10.docs/mailman3/app_mailman3.fr.md @@ -0,0 +1,71 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..61b940f9 --- /dev/null +++ b/pages/04.applications/10.docs/mailman3/app_mailman3.md @@ -0,0 +1,72 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_mantis_fr.md b/pages/04.applications/10.docs/mantis/app_mantis.fr.md similarity index 87% rename from app_mantis_fr.md rename to pages/04.applications/10.docs/mantis/app_mantis.fr.md index e9e11931..d11d8927 100644 --- a/app_mantis_fr.md +++ b/pages/04.applications/10.docs/mantis/app_mantis.fr.md @@ -1,4 +1,13 @@ -# logo de Mantis Mantis +--- +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) diff --git a/app_mantis.md b/pages/04.applications/10.docs/mantis/app_mantis.md similarity index 86% rename from app_mantis.md rename to pages/04.applications/10.docs/mantis/app_mantis.md index 1eb2291e..29989711 100644 --- a/app_mantis.md +++ b/pages/04.applications/10.docs/mantis/app_mantis.md @@ -1,4 +1,13 @@ -# Mantis's logo Mantis +--- +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) diff --git a/app_matomo_fr.md b/pages/04.applications/10.docs/matomo/app_matomo.fr.md similarity index 87% rename from app_matomo_fr.md rename to pages/04.applications/10.docs/matomo/app_matomo.fr.md index a7bfb1ce..c8944fc8 100644 --- a/app_matomo_fr.md +++ b/pages/04.applications/10.docs/matomo/app_matomo.fr.md @@ -1,4 +1,13 @@ -# Matomo's logo Matomo +--- +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) diff --git a/app_matomo.md b/pages/04.applications/10.docs/matomo/app_matomo.md similarity index 87% rename from app_matomo.md rename to pages/04.applications/10.docs/matomo/app_matomo.md index 0347c64c..77ed88b6 100644 --- a/app_matomo.md +++ b/pages/04.applications/10.docs/matomo/app_matomo.md @@ -1,4 +1,13 @@ -# Matomo's logo Matomo +--- +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) 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..5ccc16d5 --- /dev/null +++ b/pages/04.applications/10.docs/matterbridge/app_matterbridge.fr.md @@ -0,0 +1,26 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..f0ce2249 --- /dev/null +++ b/pages/04.applications/10.docs/matterbridge/app_matterbridge.md @@ -0,0 +1,26 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_mattermost_fr.md b/pages/04.applications/10.docs/mattermost/app_mattermost.fr.md similarity index 88% rename from app_mattermost_fr.md rename to pages/04.applications/10.docs/mattermost/app_mattermost.fr.md index 305fde86..8d8ec5fd 100644 --- a/app_mattermost_fr.md +++ b/pages/04.applications/10.docs/mattermost/app_mattermost.fr.md @@ -1,4 +1,13 @@ -# logo de Mattermost Mattermost +--- +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) diff --git a/app_mattermost.md b/pages/04.applications/10.docs/mattermost/app_mattermost.md similarity index 87% rename from app_mattermost.md rename to pages/04.applications/10.docs/mattermost/app_mattermost.md index 6f08cef4..fc44e7bb 100644 --- a/app_mattermost.md +++ b/pages/04.applications/10.docs/mattermost/app_mattermost.md @@ -1,4 +1,13 @@ -# Mattermost's logo Mattermost +--- +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) 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..b58f4dc4 --- /dev/null +++ b/pages/04.applications/10.docs/mautrix_signal/app_mautrix_signal.fr.md @@ -0,0 +1,68 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..4c2a4bf2 --- /dev/null +++ b/pages/04.applications/10.docs/mautrix_signal/app_mautrix_signal.md @@ -0,0 +1,72 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_mediawiki_fr.md b/pages/04.applications/10.docs/mediawiki/app_mediawiki.fr.md similarity index 80% rename from app_mediawiki_fr.md rename to pages/04.applications/10.docs/mediawiki/app_mediawiki.fr.md index aebd7337..134d45fc 100644 --- a/app_mediawiki_fr.md +++ b/pages/04.applications/10.docs/mediawiki/app_mediawiki.fr.md @@ -1,4 +1,13 @@ -# logo de MediaWiki MediaWiki +--- +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) @@ -14,4 +23,4 @@ MediaWiki est un ensemble wiki à base de logiciels libres Open source, dévelop + 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) \ No newline at end of file ++ 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/app_mediawiki.md b/pages/04.applications/10.docs/mediawiki/app_mediawiki.md similarity index 76% rename from app_mediawiki.md rename to pages/04.applications/10.docs/mediawiki/app_mediawiki.md index 71cdb187..e6ad4e3d 100644 --- a/app_mediawiki.md +++ b/pages/04.applications/10.docs/mediawiki/app_mediawiki.md @@ -1,4 +1,13 @@ -# logo de MediaWiki MediaWiki +--- +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) @@ -13,5 +22,5 @@ MediaWiki is a free and open source software wiki package written in PHP, origin + 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/mattermost_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) \ No newline at end of file ++ 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..454627e7 --- /dev/null +++ b/pages/04.applications/10.docs/meilisearch/app_meilisearch.fr.md @@ -0,0 +1,38 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..0c82a928 --- /dev/null +++ b/pages/04.applications/10.docs/meilisearch/app_meilisearch.md @@ -0,0 +1,38 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..66ada0e9 --- /dev/null +++ b/pages/04.applications/10.docs/metabase/app_metabase.fr.md @@ -0,0 +1,26 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..53fda257 --- /dev/null +++ b/pages/04.applications/10.docs/metabase/app_metabase.md @@ -0,0 +1,26 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..d0be4824 --- /dev/null +++ b/pages/04.applications/10.docs/minchat/app_minchat.fr.md @@ -0,0 +1,45 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..48bf7d8c --- /dev/null +++ b/pages/04.applications/10.docs/minchat/app_minchat.md @@ -0,0 +1,45 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_mindmaps_fr.md b/pages/04.applications/10.docs/mindmaps/app_mindmaps.fr.md similarity index 90% rename from app_mindmaps_fr.md rename to pages/04.applications/10.docs/mindmaps/app_mindmaps.fr.md index 97ae63ab..0596a976 100644 --- a/app_mindmaps_fr.md +++ b/pages/04.applications/10.docs/mindmaps/app_mindmaps.fr.md @@ -1,4 +1,11 @@ -# Mindmaps +--- +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) @@ -16,4 +23,4 @@ Cependant, il n'y a aucune raison de changer quoi que ce soit et cela rend la ba + 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) \ No newline at end of file ++ 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/app_mindmaps.md b/pages/04.applications/10.docs/mindmaps/app_mindmaps.md similarity index 92% rename from app_mindmaps.md rename to pages/04.applications/10.docs/mindmaps/app_mindmaps.md index 6be77ca9..bda0b507 100644 --- a/app_mindmaps.md +++ b/pages/04.applications/10.docs/mindmaps/app_mindmaps.md @@ -1,4 +1,11 @@ -# Mindmaps +--- +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) diff --git a/app_minetest_fr.md b/pages/04.applications/10.docs/minetest/app_minetest.fr.md similarity index 88% rename from app_minetest_fr.md rename to pages/04.applications/10.docs/minetest/app_minetest.fr.md index 651b4572..27a1c2fc 100644 --- a/app_minetest_fr.md +++ b/pages/04.applications/10.docs/minetest/app_minetest.fr.md @@ -1,4 +1,13 @@ -# logo de minetest Minetest +--- +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) diff --git a/app_minetest.md b/pages/04.applications/10.docs/minetest/app_minetest.md similarity index 88% rename from app_minetest.md rename to pages/04.applications/10.docs/minetest/app_minetest.md index 5335f897..f2fd500a 100644 --- a/app_minetest.md +++ b/pages/04.applications/10.docs/minetest/app_minetest.md @@ -1,4 +1,13 @@ -# minetest's logo Minetest +--- +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) 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..9743a0fb --- /dev/null +++ b/pages/04.applications/10.docs/mineweb/app_mineweb.fr.md @@ -0,0 +1,29 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..23a1c9f0 --- /dev/null +++ b/pages/04.applications/10.docs/mineweb/app_mineweb.md @@ -0,0 +1,29 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_minidlna_fr.md b/pages/04.applications/10.docs/minidlna/app_minidlna.fr.md similarity index 93% rename from app_minidlna_fr.md rename to pages/04.applications/10.docs/minidlna/app_minidlna.fr.md index 55a40d97..a0465bde 100644 --- a/app_minidlna_fr.md +++ b/pages/04.applications/10.docs/minidlna/app_minidlna.fr.md @@ -1,4 +1,13 @@ -# Package MiniDLNA (Ready Media) +--- +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) diff --git a/app_minidlna.md b/pages/04.applications/10.docs/minidlna/app_minidlna.md similarity index 92% rename from app_minidlna.md rename to pages/04.applications/10.docs/minidlna/app_minidlna.md index 00e1f55b..c5850be7 100644 --- a/app_minidlna.md +++ b/pages/04.applications/10.docs/minidlna/app_minidlna.md @@ -1,4 +1,13 @@ -# Package MiniDLNA (Ready Meadia) +--- +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) 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..062e6f42 --- /dev/null +++ b/pages/04.applications/10.docs/miniflux/app_miniflux.fr.md @@ -0,0 +1,32 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..2dfd0e25 --- /dev/null +++ b/pages/04.applications/10.docs/miniflux/app_miniflux.md @@ -0,0 +1,34 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..9e822131 --- /dev/null +++ b/pages/04.applications/10.docs/misskey/app_misskey.md @@ -0,0 +1,53 @@ +--- +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) + +### Index + +- [Configuration](#configuration) +- [Useful links](#useful-links) + + +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/app_mobilizon_fr.md b/pages/04.applications/10.docs/mobilizon/app_mobilizon.fr.md similarity index 90% rename from app_mobilizon_fr.md rename to pages/04.applications/10.docs/mobilizon/app_mobilizon.fr.md index 747b0011..2c313219 100644 --- a/app_mobilizon_fr.md +++ b/pages/04.applications/10.docs/mobilizon/app_mobilizon.fr.md @@ -1,4 +1,13 @@ -# logo de mobilizon Mobilizon +--- +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) diff --git a/app_mobilizon.md b/pages/04.applications/10.docs/mobilizon/app_mobilizon.md similarity index 87% rename from app_mobilizon.md rename to pages/04.applications/10.docs/mobilizon/app_mobilizon.md index 02299cce..7391971a 100644 --- a/app_mobilizon.md +++ b/pages/04.applications/10.docs/mobilizon/app_mobilizon.md @@ -1,4 +1,13 @@ -# mobilizon's logo Mobilizon +--- +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) diff --git a/app_moodle_fr.md b/pages/04.applications/10.docs/moodle/app_moodle.fr.md similarity index 90% rename from app_moodle_fr.md rename to pages/04.applications/10.docs/moodle/app_moodle.fr.md index da768328..b0dd2025 100644 --- a/app_moodle_fr.md +++ b/pages/04.applications/10.docs/moodle/app_moodle.fr.md @@ -1,4 +1,13 @@ -# logo de moodle Moodle +--- +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) diff --git a/app_moodle.md b/pages/04.applications/10.docs/moodle/app_moodle.md similarity index 89% rename from app_moodle.md rename to pages/04.applications/10.docs/moodle/app_moodle.md index 3d730639..f2af924b 100644 --- a/app_moodle.md +++ b/pages/04.applications/10.docs/moodle/app_moodle.md @@ -1,4 +1,13 @@ -# moodle's logo Moodle +--- +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) 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..7e4ce95a --- /dev/null +++ b/pages/04.applications/10.docs/mopidy/app_mopidy.fr.md @@ -0,0 +1,43 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..4c910517 --- /dev/null +++ b/pages/04.applications/10.docs/mopidy/app_mopidy.md @@ -0,0 +1,43 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..5699bf86 --- /dev/null +++ b/pages/04.applications/10.docs/movim/app_movim.fr.md @@ -0,0 +1,33 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..9570869b --- /dev/null +++ b/pages/04.applications/10.docs/movim/app_movim.md @@ -0,0 +1,33 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..30d6ddb3 --- /dev/null +++ b/pages/04.applications/10.docs/mumble-web/app_mumble-web.fr.md @@ -0,0 +1,41 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..0bd09caf --- /dev/null +++ b/pages/04.applications/10.docs/mumble-web/app_mumble-web.md @@ -0,0 +1,40 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_mumbleserver_fr.md b/pages/04.applications/10.docs/mumbleserver/app_mumbleserver.fr.md similarity index 89% rename from app_mumbleserver_fr.md rename to pages/04.applications/10.docs/mumbleserver/app_mumbleserver.fr.md index 313b16e3..6e8b836a 100644 --- a/app_mumbleserver_fr.md +++ b/pages/04.applications/10.docs/mumbleserver/app_mumbleserver.fr.md @@ -1,4 +1,13 @@ -# logo de mumbleserver Mumble server +--- +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) diff --git a/app_mumbleserver.md b/pages/04.applications/10.docs/mumbleserver/app_mumbleserver.md similarity index 88% rename from app_mumbleserver.md rename to pages/04.applications/10.docs/mumbleserver/app_mumbleserver.md index 177bbd60..88b7b165 100644 --- a/app_mumbleserver.md +++ b/pages/04.applications/10.docs/mumbleserver/app_mumbleserver.md @@ -1,4 +1,13 @@ -# mumbleserver's logo Mumble server +--- +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) 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..682d608d --- /dev/null +++ b/pages/04.applications/10.docs/my_capsule/app_my_capsule.fr.md @@ -0,0 +1,39 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..1f13a563 --- /dev/null +++ b/pages/04.applications/10.docs/my_capsule/app_my_capsule.md @@ -0,0 +1,39 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..6bfbe79f --- /dev/null +++ b/pages/04.applications/10.docs/mytinytodo/app_mytinytodo.fr.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..184006bb --- /dev/null +++ b/pages/04.applications/10.docs/mytinytodo/app_mytinytodo.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_navidrome_fr.md b/pages/04.applications/10.docs/navidrome/app_navidrome.fr.md similarity index 84% rename from app_navidrome_fr.md rename to pages/04.applications/10.docs/navidrome/app_navidrome.fr.md index 94f44197..b5fc1a01 100644 --- a/app_navidrome_fr.md +++ b/pages/04.applications/10.docs/navidrome/app_navidrome.fr.md @@ -1,4 +1,13 @@ -# logo de Navidrome Navidrome +--- +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) diff --git a/app_navidrome.md b/pages/04.applications/10.docs/navidrome/app_navidrome.md similarity index 83% rename from app_navidrome.md rename to pages/04.applications/10.docs/navidrome/app_navidrome.md index 06a64c7e..888511b6 100644 --- a/app_navidrome.md +++ b/pages/04.applications/10.docs/navidrome/app_navidrome.md @@ -1,4 +1,13 @@ -# Navidrome's logo Navidrome +--- +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) 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/app_netdata.md b/pages/04.applications/10.docs/netdata/app_netdata.md similarity index 95% rename from app_netdata.md rename to pages/04.applications/10.docs/netdata/app_netdata.md index f9ab8e53..0ad92f6b 100644 --- a/app_netdata.md +++ b/pages/04.applications/10.docs/netdata/app_netdata.md @@ -1,262 +1,269 @@ -## 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 Piwigo with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=piwigo) - -**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/ \ No newline at end of file +--- +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..bb8a9767 --- /dev/null +++ b/pages/04.applications/10.docs/neutrinet/app_neutrinet.fr.md @@ -0,0 +1,43 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..0e2ee99d --- /dev/null +++ b/pages/04.applications/10.docs/neutrinet/app_neutrinet.md @@ -0,0 +1,43 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..92748c28 --- /dev/null +++ b/pages/04.applications/10.docs/nextcloud/app_nextcloud.fr.md @@ -0,0 +1,295 @@ +--- +title: Nextcloud +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nextcloud' +--- + +![logo de Nextcloud](image://nextcloud_logo.png) + + - [Découverte de l'environnement de Nextcloud](#environnement-nextcloud) + - [Logiciels clients pour mobile et ordinateur](#logiciels-clients) + - [Manipulations & problèmes rencontrés utiles](#manipulations-utiles) + - [Ajouter de l'espace à Nextcloud](#ajout-espace) + - [Partager un dossier entre Nextcloud et une application](#partager-un-dossier-entre-nextcloud-et-une-application) + - [Nextcloud et Cloudlare](#nextcloud-et-cloudflare) + - [Applications tierces](#applications-tierces) + - [À propos de keeweb](#à-propos-de-keeweb) + - [Liens utiles](#liensutiles) + +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 php7.3 occ 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 + +usermord nextcloud -a -G multimedia +usermord 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 [https://yunohost.org/fr/app_collabora] 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 php /var/www/nextcloud/occ 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/app_nextcloud.md b/pages/04.applications/10.docs/nextcloud/app_nextcloud.md similarity index 80% rename from app_nextcloud.md rename to pages/04.applications/10.docs/nextcloud/app_nextcloud.md index ab6729dc..0bf741b9 100644 --- a/app_nextcloud.md +++ b/pages/04.applications/10.docs/nextcloud/app_nextcloud.md @@ -1,4 +1,13 @@ -# logo de Nextcloud Nextcloud +--- +title: Nextcloud +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nextcloud' +--- + +![Nextcloud's logo](image://nextcloud_logo.png) - [Discovering the Nextcloud environment](#EnvironmentNextcloud) - [Mobile and computer client software](#ClientSoftware) @@ -12,7 +21,7 @@ Nextcloud is a file hosting service, many applications can be installed to offer ## 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 before 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. +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 @@ -107,7 +116,7 @@ CASE A:'datadirectory' =>'/media/storage', CASE B:'datadirectory' =>'/media/storage/nextcloud_data/nextcloud/data', ``` -Back up with `ctrl+x` then `y` or `o` (depending on your server locale). +Save it with `ctrl+x` then `y` or `o` (depending on your server locale). Restart the web server: @@ -156,12 +165,41 @@ The options to disable (Off) are: Save and clean your caches (Cloudflare, browser...) and that's it. -## Third Party Applications +## About Keeweb - - [Calendrier](app_nextcloud_calendar) - - [Contact](app_nextcloud_contact) - - [KeeWeb](app_nextcloud_keeweb) - - [Carnet](app_nextcloud_carnet) +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. ## Useful links diff --git a/app_nextcloud_keeweb_fr.md b/pages/04.applications/10.docs/nextcloud_keeweb/app_nextcloud_keeweb.fr.md similarity index 90% rename from app_nextcloud_keeweb_fr.md rename to pages/04.applications/10.docs/nextcloud_keeweb/app_nextcloud_keeweb.fr.md index 42e4867a..68aa53bf 100644 --- a/app_nextcloud_keeweb_fr.md +++ b/pages/04.applications/10.docs/nextcloud_keeweb/app_nextcloud_keeweb.fr.md @@ -1,4 +1,11 @@ -# L'application KeeWeb pour NextCloud +--- +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) diff --git a/app_nextcloud_keeweb.md b/pages/04.applications/10.docs/nextcloud_keeweb/app_nextcloud_keeweb.md similarity index 88% rename from app_nextcloud_keeweb.md rename to pages/04.applications/10.docs/nextcloud_keeweb/app_nextcloud_keeweb.md index a6039426..5d50ce28 100644 --- a/app_nextcloud_keeweb.md +++ b/pages/04.applications/10.docs/nextcloud_keeweb/app_nextcloud_keeweb.md @@ -1,4 +1,11 @@ -# The KeeWeb application for NextCloud +--- +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, 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..25f2e01c --- /dev/null +++ b/pages/04.applications/10.docs/nitter/app_nitter.fr.md @@ -0,0 +1,50 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..fa3f7254 --- /dev/null +++ b/pages/04.applications/10.docs/nitter/app_nitter.md @@ -0,0 +1,50 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_noalyss_fr.md b/pages/04.applications/10.docs/noalyss/app_noalyss.fr.md similarity index 82% rename from app_noalyss_fr.md rename to pages/04.applications/10.docs/noalyss/app_noalyss.fr.md index 67246fa3..28ded15c 100644 --- a/app_noalyss_fr.md +++ b/pages/04.applications/10.docs/noalyss/app_noalyss.fr.md @@ -1,4 +1,11 @@ -# Noalyss +--- +title: Noalyss +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_noalyss' +--- Logiciel de comptabilité open source développé en PHP. @@ -10,4 +17,4 @@ Le github du module YunoHost est [ici](https://github.com/YunoHost-Apps/noalyss_ Vous pouvez essayer le projet [ici](http://demo.noalyss.eu/index.php) avec les identifiants : demo /demo -Enfin pour ne pas galérer comme moi. Les identifiants et mot de passe administrateur lors de la première connexion sont : phpcompta / phpcompta \ No newline at end of file +Enfin pour ne pas galérer comme moi. Les identifiants et mot de passe administrateur lors de la première connexion sont : phpcompta / phpcompta diff --git a/app_noalyss.md b/pages/04.applications/10.docs/noalyss/app_noalyss.md similarity index 76% rename from app_noalyss.md rename to pages/04.applications/10.docs/noalyss/app_noalyss.md index 7fb61ad6..8ae0d519 100644 --- a/app_noalyss.md +++ b/pages/04.applications/10.docs/noalyss/app_noalyss.md @@ -1,4 +1,11 @@ -# Noalyss +--- +title: Noalyss +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_noalyss' +--- Open source accounting software developed in PHP. @@ -10,4 +17,4 @@ The github of the YunoHost module is [here](https://github.com/YunoHost-Apps/noa You can try the project [here](http://demo.noalyss.eu/index.php) with the identifiers: demo /demo -I mean, not to have to struggle like me. The administrator IDs and passwords for the first login are: phpcompta / phpcompta \ No newline at end of file +I mean, not to have to struggle like me. The administrator IDs and passwords for the first login are: phpcompta / phpcompta 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..e16e00e2 --- /dev/null +++ b/pages/04.applications/10.docs/nocodb/app_nocodb.fr.md @@ -0,0 +1,42 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..c082aa74 --- /dev/null +++ b/pages/04.applications/10.docs/nocodb/app_nocodb.md @@ -0,0 +1,42 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..6594df16 --- /dev/null +++ b/pages/04.applications/10.docs/nodebb/app_nodebb.fr.md @@ -0,0 +1,28 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..1641d953 --- /dev/null +++ b/pages/04.applications/10.docs/nodebb/app_nodebb.md @@ -0,0 +1,30 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..9be1b0a6 --- /dev/null +++ b/pages/04.applications/10.docs/nullboard/app_nullboard.fr.md @@ -0,0 +1,33 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..ef277a88 --- /dev/null +++ b/pages/04.applications/10.docs/nullboard/app_nullboard.md @@ -0,0 +1,34 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..a8222873 --- /dev/null +++ b/pages/04.applications/10.docs/omeka-s/app_omeka-s.fr.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..0fb7e746 --- /dev/null +++ b/pages/04.applications/10.docs/omeka-s/app_omeka-s.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_onlyoffice_fr.md b/pages/04.applications/10.docs/onlyoffice/app_onlyoffice.fr.md similarity index 91% rename from app_onlyoffice_fr.md rename to pages/04.applications/10.docs/onlyoffice/app_onlyoffice.fr.md index ddaee9d5..3699f453 100644 --- a/app_onlyoffice_fr.md +++ b/pages/04.applications/10.docs/onlyoffice/app_onlyoffice.fr.md @@ -1,4 +1,13 @@ -#  Logo OnlyOffice OnlyOffice Server +--- +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) diff --git a/app_onlyoffice.md b/pages/04.applications/10.docs/onlyoffice/app_onlyoffice.md similarity index 91% rename from app_onlyoffice.md rename to pages/04.applications/10.docs/onlyoffice/app_onlyoffice.md index bba13c1c..c0f907cc 100644 --- a/app_onlyoffice.md +++ b/pages/04.applications/10.docs/onlyoffice/app_onlyoffice.md @@ -1,4 +1,13 @@ -# OnlyOffice Logo OnlyOffice Server +--- +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) 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..d4b5aece --- /dev/null +++ b/pages/04.applications/10.docs/opennote/app_opennote.fr.md @@ -0,0 +1,31 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..63540003 --- /dev/null +++ b/pages/04.applications/10.docs/opennote/app_opennote.md @@ -0,0 +1,31 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_opensondage_fr.md b/pages/04.applications/10.docs/opensondage/app_opensondage.fr.md similarity index 87% rename from app_opensondage_fr.md rename to pages/04.applications/10.docs/opensondage/app_opensondage.fr.md index d90a428d..0869c92a 100644 --- a/app_opensondage_fr.md +++ b/pages/04.applications/10.docs/opensondage/app_opensondage.fr.md @@ -1,4 +1,13 @@ -# logo de opensondage Opensondage +--- +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) diff --git a/app_opensondage.md b/pages/04.applications/10.docs/opensondage/app_opensondage.md similarity index 87% rename from app_opensondage.md rename to pages/04.applications/10.docs/opensondage/app_opensondage.md index 7255f74d..e3557f80 100644 --- a/app_opensondage.md +++ b/pages/04.applications/10.docs/opensondage/app_opensondage.md @@ -1,4 +1,13 @@ -# opensondage's logo Opensondage +--- +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) 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..f18c1c0a --- /dev/null +++ b/pages/04.applications/10.docs/opentracker/app_opentracker.fr.md @@ -0,0 +1,33 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..41ba7b4f --- /dev/null +++ b/pages/04.applications/10.docs/opentracker/app_opentracker.md @@ -0,0 +1,33 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..168ba566 --- /dev/null +++ b/pages/04.applications/10.docs/osada/app_osada.fr.md @@ -0,0 +1,47 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..e3a14b29 --- /dev/null +++ b/pages/04.applications/10.docs/osada/app_osada.md @@ -0,0 +1,47 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_osticket_fr.md b/pages/04.applications/10.docs/osticket/app_osticket.fr.md similarity index 90% rename from app_osticket_fr.md rename to pages/04.applications/10.docs/osticket/app_osticket.fr.md index 4eed3ab4..95ea9a4f 100644 --- a/app_osticket_fr.md +++ b/pages/04.applications/10.docs/osticket/app_osticket.fr.md @@ -1,4 +1,13 @@ -# logo de osticket osTicket +--- +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) diff --git a/app_osticket.md b/pages/04.applications/10.docs/osticket/app_osticket.md similarity index 89% rename from app_osticket.md rename to pages/04.applications/10.docs/osticket/app_osticket.md index 4728addc..88863f67 100644 --- a/app_osticket.md +++ b/pages/04.applications/10.docs/osticket/app_osticket.md @@ -1,4 +1,13 @@ -# osticket's logo OsTicket +--- +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) 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..96907f29 --- /dev/null +++ b/pages/04.applications/10.docs/owncast/app_owncast.fr.md @@ -0,0 +1,44 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..485b333b --- /dev/null +++ b/pages/04.applications/10.docs/owncast/app_owncast.md @@ -0,0 +1,48 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..3bd802c4 --- /dev/null +++ b/pages/04.applications/10.docs/owntracks/app_owntracks.fr.md @@ -0,0 +1,48 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..3896fc9f --- /dev/null +++ b/pages/04.applications/10.docs/owntracks/app_owntracks.md @@ -0,0 +1,48 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..82f48dfb --- /dev/null +++ b/pages/04.applications/10.docs/peertube-search-index/app_peertube-search-index.fr.md @@ -0,0 +1,37 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..eff2ffab --- /dev/null +++ b/pages/04.applications/10.docs/peertube-search-index/app_peertube-search-index.md @@ -0,0 +1,37 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_peertube_fr.md b/pages/04.applications/10.docs/peertube/app_peertube.fr.md similarity index 88% rename from app_peertube_fr.md rename to pages/04.applications/10.docs/peertube/app_peertube.fr.md index 234c92d9..fcf7ca6b 100644 --- a/app_peertube_fr.md +++ b/pages/04.applications/10.docs/peertube/app_peertube.fr.md @@ -1,4 +1,13 @@ -# logo de peertube PeerTube +--- +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) diff --git a/app_peertube.md b/pages/04.applications/10.docs/peertube/app_peertube.md similarity index 87% rename from app_peertube.md rename to pages/04.applications/10.docs/peertube/app_peertube.md index ddbd96c3..7c32126e 100644 --- a/app_peertube.md +++ b/pages/04.applications/10.docs/peertube/app_peertube.md @@ -1,4 +1,13 @@ -# peertube's logo PeerTube +--- +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) 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..54b7fed4 --- /dev/null +++ b/pages/04.applications/10.docs/petrolette/app_petrolette.fr.md @@ -0,0 +1,33 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..c04d1898 --- /dev/null +++ b/pages/04.applications/10.docs/petrolette/app_petrolette.md @@ -0,0 +1,33 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..d895df4f --- /dev/null +++ b/pages/04.applications/10.docs/photoview/app_photoview.fr.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..d0b2bd07 --- /dev/null +++ b/pages/04.applications/10.docs/photoview/app_photoview.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..7dc8576a --- /dev/null +++ b/pages/04.applications/10.docs/phpbb/app_phpbb.fr.md @@ -0,0 +1,35 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..de5ffeca --- /dev/null +++ b/pages/04.applications/10.docs/phpbb/app_phpbb.md @@ -0,0 +1,35 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..afdb8385 --- /dev/null +++ b/pages/04.applications/10.docs/phpinfo/app_phpinfo.fr.md @@ -0,0 +1,22 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..a52e5689 --- /dev/null +++ b/pages/04.applications/10.docs/phpinfo/app_phpinfo.md @@ -0,0 +1,22 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..e396cc91 --- /dev/null +++ b/pages/04.applications/10.docs/phpldapadmin/app_phpldapadmin.fr.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..cc98e384 --- /dev/null +++ b/pages/04.applications/10.docs/phpldapadmin/app_phpldapadmin.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_phpmyadmin_fr.md b/pages/04.applications/10.docs/phpmyadmin/app_phpmyadmin.fr.md similarity index 53% rename from app_phpmyadmin_fr.md rename to pages/04.applications/10.docs/phpmyadmin/app_phpmyadmin.fr.md index e3705a31..4a8ef50b 100644 --- a/app_phpmyadmin_fr.md +++ b/pages/04.applications/10.docs/phpmyadmin/app_phpmyadmin.fr.md @@ -1,4 +1,13 @@ -# logo de phpmyadmin phpMyAdmin +--- +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) @@ -6,7 +15,7 @@ - [Liens utiles](#liens-utiles) -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. +*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 diff --git a/app_phpmyadmin.md b/pages/04.applications/10.docs/phpmyadmin/app_phpmyadmin.md similarity index 56% rename from app_phpmyadmin.md rename to pages/04.applications/10.docs/phpmyadmin/app_phpmyadmin.md index 8ef95e1c..7644608b 100644 --- a/app_phpmyadmin.md +++ b/pages/04.applications/10.docs/phpmyadmin/app_phpmyadmin.md @@ -1,4 +1,13 @@ -# phpmyadmin's logo phpMyAdmin +--- +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) @@ -6,7 +15,7 @@ - [Useful links](#useful-links) -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. +*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 diff --git a/app_phpsysinfo_fr.md b/pages/04.applications/10.docs/phpsysinfo/app_phpsysinfo.fr.md similarity index 72% rename from app_phpsysinfo_fr.md rename to pages/04.applications/10.docs/phpsysinfo/app_phpsysinfo.fr.md index 6a23110e..cdd2dfbc 100644 --- a/app_phpsysinfo_fr.md +++ b/pages/04.applications/10.docs/phpsysinfo/app_phpsysinfo.fr.md @@ -1,10 +1,19 @@ -# logo de phpsysinfo phpSysInfo +--- +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) ### Index -phpSysInfo est un script PHP personnalisable qui affiche bien les informations sur votre système (CPU, RAM, disques...). +*phpSysInfo* est un script PHP personnalisable qui affiche bien les informations sur votre système (CPU, RAM, disques...). ## Liens utiles diff --git a/app_phpsysinfo.md b/pages/04.applications/10.docs/phpsysinfo/app_phpsysinfo.md similarity index 73% rename from app_phpsysinfo.md rename to pages/04.applications/10.docs/phpsysinfo/app_phpsysinfo.md index d30af4e3..9ee2aee8 100644 --- a/app_phpsysinfo.md +++ b/pages/04.applications/10.docs/phpsysinfo/app_phpsysinfo.md @@ -1,4 +1,13 @@ -# phpsysinfo's logo phpSysInfo +--- +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) @@ -6,7 +15,7 @@ - [Useful links](#useful-links) -phpSysInfo is a customizable PHP script that displays information about your system (CPU, RAM, disks). +*phpSysInfo* is a customizable PHP script that displays information about your system (CPU, RAM, disks). ## Useful links diff --git a/app_pihole_fr.md b/pages/04.applications/10.docs/pihole/app_pihole.fr.md similarity index 82% rename from app_pihole_fr.md rename to pages/04.applications/10.docs/pihole/app_pihole.fr.md index ceae0a34..ec670446 100644 --- a/app_pihole_fr.md +++ b/pages/04.applications/10.docs/pihole/app_pihole.fr.md @@ -1,16 +1,25 @@ -# logo de Pi-hole Pi-hole +--- +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) -- [Utiliser Pi-Hole comme serveur DHCP](#utiliser-pi-hole-comme-serveur-dhcp) - - [Configurer Pi-Hole](#configurer-pi-hole) +- [Utiliser Pi-hole comme serveur DHCP](#utiliser-pi-hole-comme-serveur-dhcp) + - [Configurer Pi-hole](#configurer-pi-hole) - [Configurer mon routeur](#configurer-mon-routeur) - [Restaurer le réseau](#restaurer-le-réseau) - [Liens utiles](#liens-utiles) -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. +*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 +## 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. @@ -47,17 +56,20 @@ 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 ``` @@ -70,4 +82,4 @@ sudo ifconfig eth0 0.0.0.0 && sudo dhclient eth0 + 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) - \ No newline at end of file + diff --git a/app_pihole.md b/pages/04.applications/10.docs/pihole/app_pihole.md similarity index 82% rename from app_pihole.md rename to pages/04.applications/10.docs/pihole/app_pihole.md index 1b334491..c1e9ef0e 100644 --- a/app_pihole.md +++ b/pages/04.applications/10.docs/pihole/app_pihole.md @@ -1,18 +1,27 @@ -# Pi-hole's logo Pi-hole +--- +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) ### Index -- [Using Pi-Hole as a DHCP server](#using-pi-hole-as-a-dhcp-server) - - [Configure Pi-Hole](#configure-pi-hole) +- [Using Pi-hole as a DHCP server](#using-pi-hole-as-a-dhcp-server) + - [Configure Pi-hole](#configure-pi-hole) - [Configure my router](#configure-my-router) - [Restore Network](#restore-network) - [Useful links](#useful-links) -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. +*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 +## 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. @@ -20,7 +29,7 @@ Thus, you would lose any connection to the internet and even the connection to y > If you encounter this kind of problem, please read the section "How to restore my network". -### Configure Pi-Hole +### 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. @@ -49,17 +58,20 @@ 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 ``` diff --git a/app_piwigo_fr.md b/pages/04.applications/10.docs/piwigo/app_piwigo.fr.md similarity index 51% rename from app_piwigo_fr.md rename to pages/04.applications/10.docs/piwigo/app_piwigo.fr.md index 37e7104d..9927dcdb 100644 --- a/app_piwigo_fr.md +++ b/pages/04.applications/10.docs/piwigo/app_piwigo.fr.md @@ -1,15 +1,28 @@ -# logo de Piwigo Piwigo +--- +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) ### Index +- [Fonctionnalités](#fonctionnalités) +- [Applications clientes](#applications-clientes) - [Liens utiles](#liens-utiles) -[Piwigo](http://piwigo.org) est un logiciel de galerie photos pour le Web, bâti par une communauté active d'utilisateurs et de développeurs. +**[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 : @@ -19,11 +32,19 @@ En plus des [fonctionnalités principales](https://fr.piwigo.org/fonctionnalites * 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) -![](http://piwigo.org/screenshots/homepage/piwigo-batch-manager.png) +![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://piwigo.org) ++ 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..8e5ca324 --- /dev/null +++ b/pages/04.applications/10.docs/piwigo/app_piwigo.md @@ -0,0 +1,50 @@ +--- +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) + +### Index + +- [Features](#features) +- [Customer Applications](#customer-applications) +- [Useful links](#useful-links) + +[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..6acee773 --- /dev/null +++ b/pages/04.applications/10.docs/plainpad/app_plainpad.fr.md @@ -0,0 +1,38 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..5d59cb6e --- /dev/null +++ b/pages/04.applications/10.docs/plainpad/app_plainpad.md @@ -0,0 +1,38 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_pleroma_fr.md b/pages/04.applications/10.docs/pleroma/app_pleroma.fr.md similarity index 63% rename from app_pleroma_fr.md rename to pages/04.applications/10.docs/pleroma/app_pleroma.fr.md index 44a4cdb1..2b09e298 100644 --- a/app_pleroma_fr.md +++ b/pages/04.applications/10.docs/pleroma/app_pleroma.fr.md @@ -1,4 +1,13 @@ -# logo de Pleroma Pleroma +--- +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) @@ -12,18 +21,18 @@ Pour celles et ceux qui n'ont pas ou peu l'habitude des réseaux sociaux, voici ### Accueil de l'interface -Capture écran accueil de Pleroma +![Capture écran accueil de Pleroma](image://capture_globale.png) 1. Barre de menu - + Capture du bouton à gauche de la barre de menu 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 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 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 Permet d'accéder aux paramétres d'affichages de votre session. + + ![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 Permet de se déconnecter de l'instance. Si vous n'êtes pas sur votre ordinateur personnel pensez-y ! + + ![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 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. +![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é. 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/app_plume_fr.md b/pages/04.applications/10.docs/plume/app_plume.fr.md similarity index 88% rename from app_plume_fr.md rename to pages/04.applications/10.docs/plume/app_plume.fr.md index d343cc97..01671ae0 100644 --- a/app_plume_fr.md +++ b/pages/04.applications/10.docs/plume/app_plume.fr.md @@ -1,4 +1,13 @@ -# logo de plume Plume +--- +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) diff --git a/app_plume.md b/pages/04.applications/10.docs/plume/app_plume.md similarity index 87% rename from app_plume.md rename to pages/04.applications/10.docs/plume/app_plume.md index 9e6f5db0..7dd1aa11 100644 --- a/app_plume.md +++ b/pages/04.applications/10.docs/plume/app_plume.md @@ -1,4 +1,13 @@ -# plume's logo Plume +--- +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) 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..0958f737 --- /dev/null +++ b/pages/04.applications/10.docs/pluxml/app_pluxml.fr.md @@ -0,0 +1,50 @@ +--- +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) + +### Index + +- [Configuration](#configuration) + - [Connexion à l'interface d'administration](#connexion-à-l’interface-d’administration) +- [Capture d'écran](#capture-décran) +- [Plugins et thèmes](#plugins-et-thèmes) +- [Sauvegarde](#sauvegarde) +- [Liens utiles](#liens-utiles) + +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..556c9d0b --- /dev/null +++ b/pages/04.applications/10.docs/pluxml/app_pluxml.md @@ -0,0 +1,49 @@ +--- +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) + +### Index + +- [Configuration](#configuration) + - [Login to admin interface](#connecting-to-the-administration-interface) +- [Overview](#overview-1) +- [Plugins and themes](#plugins-and-themes) +- [Backup](#backup) +- [Useful links](#useful-links) + +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..75b936eb --- /dev/null +++ b/pages/04.applications/10.docs/prettynoemiecms/app_prettynoemiecms.fr.md @@ -0,0 +1,45 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..04874b03 --- /dev/null +++ b/pages/04.applications/10.docs/prettynoemiecms/app_prettynoemiecms.md @@ -0,0 +1,45 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_privatebin_fr.md b/pages/04.applications/10.docs/privatebin/app_privatebin.fr.md similarity index 89% rename from app_privatebin_fr.md rename to pages/04.applications/10.docs/privatebin/app_privatebin.fr.md index 6711103d..d385ae73 100644 --- a/app_privatebin_fr.md +++ b/pages/04.applications/10.docs/privatebin/app_privatebin.fr.md @@ -1,4 +1,13 @@ -# logo de privatebin PrivateBin +--- +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) diff --git a/app_privatebin.md b/pages/04.applications/10.docs/privatebin/app_privatebin.md similarity index 88% rename from app_privatebin.md rename to pages/04.applications/10.docs/privatebin/app_privatebin.md index b77764e4..5d585cf4 100644 --- a/app_privatebin.md +++ b/pages/04.applications/10.docs/privatebin/app_privatebin.md @@ -1,4 +1,13 @@ -# PrivateBin's logo Privatebin +--- +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) 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..9f4f5c1b --- /dev/null +++ b/pages/04.applications/10.docs/prometheus/app_prometheus.fr.md @@ -0,0 +1,28 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..a3bfc540 --- /dev/null +++ b/pages/04.applications/10.docs/prometheus/app_prometheus.md @@ -0,0 +1,28 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..eaf737d2 --- /dev/null +++ b/pages/04.applications/10.docs/prowlarr/app_prowlarr.fr.md @@ -0,0 +1,33 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..4c6bf84c --- /dev/null +++ b/pages/04.applications/10.docs/prowlarr/app_prowlarr.md @@ -0,0 +1,33 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..eaa59529 --- /dev/null +++ b/pages/04.applications/10.docs/proxitok/app_proxitok.fr.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..9ca52ca9 --- /dev/null +++ b/pages/04.applications/10.docs/proxitok/app_proxitok.md @@ -0,0 +1,23 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..a7ca8129 --- /dev/null +++ b/pages/04.applications/10.docs/qr/app_qr.fr.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..676f8b6e --- /dev/null +++ b/pages/04.applications/10.docs/qr/app_qr.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..e8dc79a1 --- /dev/null +++ b/pages/04.applications/10.docs/question2answer/app_question2answer.fr.md @@ -0,0 +1,33 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..47db3f14 --- /dev/null +++ b/pages/04.applications/10.docs/question2answer/app_question2answer.md @@ -0,0 +1,33 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..3472328b --- /dev/null +++ b/pages/04.applications/10.docs/quizzes/app_quizzes.fr.md @@ -0,0 +1,35 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..5275b7fd --- /dev/null +++ b/pages/04.applications/10.docs/quizzes/app_quizzes.md @@ -0,0 +1,35 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_radicale_fr.md b/pages/04.applications/10.docs/radicale/app_radicale.fr.md similarity index 94% rename from app_radicale_fr.md rename to pages/04.applications/10.docs/radicale/app_radicale.fr.md index c93f2917..6eae0c51 100644 --- a/app_radicale_fr.md +++ b/pages/04.applications/10.docs/radicale/app_radicale.fr.md @@ -1,30 +1,42 @@ -# Radicale +--- +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 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 : @@ -37,11 +49,13 @@ Les adresses précédentes fonctionnent également pour accéder à des ressourc --- ### 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: +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] @@ -49,42 +63,53 @@ 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*. @@ -93,6 +118,7 @@ Il est toutefois déconseillé de rester sur ce mode, car le log se remplie trè --- ### 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 diff --git a/app_radicale.md b/pages/04.applications/10.docs/radicale/app_radicale.md similarity index 89% rename from app_radicale.md rename to pages/04.applications/10.docs/radicale/app_radicale.md index 37221398..0adbf716 100644 --- a/app_radicale.md +++ b/pages/04.applications/10.docs/radicale/app_radicale.md @@ -1,30 +1,41 @@ -# Radicale +--- +title: Radicale +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_radicale' +--- -Radical is a calendar and contact server CalDAV/CardDAV. It does not have a graphical administration interface. +*Radicale* is a calendar and contact server CalDAV/CardDAV. It does not have a graphical administration interface. -Radical is installed by default with the web client InfCloud that will view and edit your calendars and address books. +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 radical, just go there! Radical create all new calendar or notebook to nonexistent addresses if you try to access it. +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: @@ -37,11 +48,13 @@ Previous addresses also work to access resources not owned by the authenticated --- ### 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] @@ -49,42 +62,53 @@ 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. @@ -93,6 +117,7 @@ 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 diff --git a/app_rainloop_fr.md b/pages/04.applications/10.docs/rainloop/app_rainloop.fr.md similarity index 94% rename from app_rainloop_fr.md rename to pages/04.applications/10.docs/rainloop/app_rainloop.fr.md index c052fe7c..c88d6c73 100644 --- a/app_rainloop_fr.md +++ b/pages/04.applications/10.docs/rainloop/app_rainloop.fr.md @@ -1,4 +1,13 @@ -# Package Rainloop +--- +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) @@ -18,19 +27,23 @@ Pour le configurer après l'installation, veuillez vous rendre sur http://DOMAIN - 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 diff --git a/app_rainloop.md b/pages/04.applications/10.docs/rainloop/app_rainloop.md similarity index 92% rename from app_rainloop.md rename to pages/04.applications/10.docs/rainloop/app_rainloop.md index 639318a3..65b002aa 100644 --- a/app_rainloop.md +++ b/pages/04.applications/10.docs/rainloop/app_rainloop.md @@ -1,10 +1,19 @@ -# Package Rainloop +--- +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) +- [Configuration](#configuration) - [Useful links](#useful-links) Rainloop is a lightweight webmail. 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..d42e3b34 --- /dev/null +++ b/pages/04.applications/10.docs/retroarch/app_retroarch.fr.md @@ -0,0 +1,44 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..f153b70f --- /dev/null +++ b/pages/04.applications/10.docs/retroarch/app_retroarch.md @@ -0,0 +1,42 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_roundcube_fr.md b/pages/04.applications/10.docs/roundcube/app_roundcube.fr.md similarity index 63% rename from app_roundcube_fr.md rename to pages/04.applications/10.docs/roundcube/app_roundcube.fr.md index be4663a7..56b7b6e3 100644 --- a/app_roundcube_fr.md +++ b/pages/04.applications/10.docs/roundcube/app_roundcube.fr.md @@ -1,4 +1,13 @@ -# logo de roundcube Roundcube +--- +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) @@ -6,11 +15,11 @@ - [Liens utiles](#liens-utiles) -Roundcube est un client web de courrier électronique libre ou aussi appelé un webmail. +*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. +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. @@ -18,10 +27,10 @@ Notez que si Baïkal ou Nextcloud sont déjà installés, les carnets d'adresses ---- -Si vous avez installé Nextcloud après, voici comment ajouter vos carnets d'adresses : +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 ! +* 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 diff --git a/app_roundcube.md b/pages/04.applications/10.docs/roundcube/app_roundcube.md similarity index 89% rename from app_roundcube.md rename to pages/04.applications/10.docs/roundcube/app_roundcube.md index f06ff08b..8240a163 100644 --- a/app_roundcube.md +++ b/pages/04.applications/10.docs/roundcube/app_roundcube.md @@ -1,4 +1,13 @@ -# roundcube's logo Roundcube +--- +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) @@ -6,7 +15,7 @@ - [Useful links](#useful-links) -Roundcube is a web client for email messaging also called webmail. +*Roundcube* is a web client for email messaging also called webmail. ### Synchronize your contacts 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..9a02f45e --- /dev/null +++ b/pages/04.applications/10.docs/rss-bridge/app_rss-bridge.fr.md @@ -0,0 +1,75 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..282a214c --- /dev/null +++ b/pages/04.applications/10.docs/rss-bridge/app_rss-bridge.md @@ -0,0 +1,75 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..fce5e483 --- /dev/null +++ b/pages/04.applications/10.docs/seafile/app_seafile.fr.md @@ -0,0 +1,104 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..c3e3ab68 --- /dev/null +++ b/pages/04.applications/10.docs/seafile/app_seafile.md @@ -0,0 +1,124 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_searx_fr.md b/pages/04.applications/10.docs/searx/app_searx.fr.md similarity index 69% rename from app_searx_fr.md rename to pages/04.applications/10.docs/searx/app_searx.fr.md index 39f06f44..b66dd4ba 100644 --- a/app_searx_fr.md +++ b/pages/04.applications/10.docs/searx/app_searx.fr.md @@ -1,4 +1,13 @@ -# logo de searx Searx +--- +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) @@ -6,9 +15,9 @@ - [Liens utiles](#liens-utiles) -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. +*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 diff --git a/app_searx.md b/pages/04.applications/10.docs/searx/app_searx.md similarity index 68% rename from app_searx.md rename to pages/04.applications/10.docs/searx/app_searx.md index 23c0e790..005d6ad9 100644 --- a/app_searx.md +++ b/pages/04.applications/10.docs/searx/app_searx.md @@ -1,4 +1,13 @@ -# searx's logo Searx +--- +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) @@ -6,7 +15,7 @@ - [Useful links](#useful-links) -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. +*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 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..4d7dc914 --- /dev/null +++ b/pages/04.applications/10.docs/send/app_send.fr.md @@ -0,0 +1,35 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..af57cd28 --- /dev/null +++ b/pages/04.applications/10.docs/send/app_send.md @@ -0,0 +1,35 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_shaarli_fr.md b/pages/04.applications/10.docs/shaarli/app_shaarli.fr.md similarity index 88% rename from app_shaarli_fr.md rename to pages/04.applications/10.docs/shaarli/app_shaarli.fr.md index 3982414c..b272dffa 100644 --- a/app_shaarli_fr.md +++ b/pages/04.applications/10.docs/shaarli/app_shaarli.fr.md @@ -1,4 +1,11 @@ -# Shaarli +--- +title: Shaarli +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_shaarli' +--- ## Présentation @@ -14,4 +21,4 @@ Shaarli est intéressant pour toutes celles et tous ceux qui souhaitent conserve - [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 \ No newline at end of file +- [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/app_shellinabox_fr.md b/pages/04.applications/10.docs/shellinabox/app_shellinabox.fr.md similarity index 86% rename from app_shellinabox_fr.md rename to pages/04.applications/10.docs/shellinabox/app_shellinabox.fr.md index 6274f80e..3b0a4311 100644 --- a/app_shellinabox_fr.md +++ b/pages/04.applications/10.docs/shellinabox/app_shellinabox.fr.md @@ -1,4 +1,13 @@ -# logo de shellinabox Shellinabox +--- +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) diff --git a/app_shellinabox.md b/pages/04.applications/10.docs/shellinabox/app_shellinabox.md similarity index 86% rename from app_shellinabox.md rename to pages/04.applications/10.docs/shellinabox/app_shellinabox.md index 38e8e75a..70a09274 100644 --- a/app_shellinabox.md +++ b/pages/04.applications/10.docs/shellinabox/app_shellinabox.md @@ -1,4 +1,13 @@ -# Package Shellinabox +--- +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) diff --git a/app_simple-torrent_fr.md b/pages/04.applications/10.docs/simple-torrent/app_simple-torrent.fr.md similarity index 84% rename from app_simple-torrent_fr.md rename to pages/04.applications/10.docs/simple-torrent/app_simple-torrent.fr.md index aa035d82..de351cec 100644 --- a/app_simple-torrent_fr.md +++ b/pages/04.applications/10.docs/simple-torrent/app_simple-torrent.fr.md @@ -1,4 +1,13 @@ -# logo de Simple Torrent Simple Torrent +--- +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) diff --git a/app_simple-torrent.md b/pages/04.applications/10.docs/simple-torrent/app_simple-torrent.md similarity index 83% rename from app_simple-torrent.md rename to pages/04.applications/10.docs/simple-torrent/app_simple-torrent.md index a320b6a7..f9abb112 100644 --- a/app_simple-torrent.md +++ b/pages/04.applications/10.docs/simple-torrent/app_simple-torrent.md @@ -1,4 +1,13 @@ -# simple-torrent's logo Simple Torrent +--- +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) 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..e2df6fca --- /dev/null +++ b/pages/04.applications/10.docs/sitemagiccms/app_sitemagiccms.fr.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..888b24ce --- /dev/null +++ b/pages/04.applications/10.docs/sitemagiccms/app_sitemagiccms.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_slingcode_fr.md b/pages/04.applications/10.docs/slingcode/app_slingcode.fr.md similarity index 85% rename from app_slingcode_fr.md rename to pages/04.applications/10.docs/slingcode/app_slingcode.fr.md index bab0933a..f6ddcd28 100644 --- a/app_slingcode_fr.md +++ b/pages/04.applications/10.docs/slingcode/app_slingcode.fr.md @@ -1,4 +1,13 @@ -# logo de Slingcode Slingcode +--- +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) diff --git a/app_slingcode.md b/pages/04.applications/10.docs/slingcode/app_slingcode.md similarity index 84% rename from app_slingcode.md rename to pages/04.applications/10.docs/slingcode/app_slingcode.md index c1ff60fe..f7167e86 100644 --- a/app_slingcode.md +++ b/pages/04.applications/10.docs/slingcode/app_slingcode.md @@ -1,4 +1,13 @@ -# Slingcode's logo Slingcode +--- +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) 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..bf5ef1b5 --- /dev/null +++ b/pages/04.applications/10.docs/snipeit/app_snipeit.fr.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..e5bfcdca --- /dev/null +++ b/pages/04.applications/10.docs/snipeit/app_snipeit.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..1cf9ac97 --- /dev/null +++ b/pages/04.applications/10.docs/snserver/app_snserver.fr.md @@ -0,0 +1,29 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..41f76255 --- /dev/null +++ b/pages/04.applications/10.docs/snserver/app_snserver.md @@ -0,0 +1,29 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..acb503bf --- /dev/null +++ b/pages/04.applications/10.docs/snweb/app_snweb.fr.md @@ -0,0 +1,40 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..683e72d5 --- /dev/null +++ b/pages/04.applications/10.docs/snweb/app_snweb.md @@ -0,0 +1,40 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_sogo_fr.md b/pages/04.applications/10.docs/sogo/app_sogo.fr.md similarity index 67% rename from app_sogo_fr.md rename to pages/04.applications/10.docs/sogo/app_sogo.fr.md index 2dde8e13..ee7de8c9 100644 --- a/app_sogo_fr.md +++ b/pages/04.applications/10.docs/sogo/app_sogo.fr.md @@ -1,4 +1,13 @@ -# SOGo Logo SOGo +--- +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) @@ -6,7 +15,7 @@ - [Liens utiles](#liens-utiles) -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. +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 diff --git a/app_sogo.md b/pages/04.applications/10.docs/sogo/app_sogo.md similarity index 81% rename from app_sogo.md rename to pages/04.applications/10.docs/sogo/app_sogo.md index 34515d44..441920f7 100644 --- a/app_sogo.md +++ b/pages/04.applications/10.docs/sogo/app_sogo.md @@ -1,4 +1,13 @@ -# SOGo Logo SOGo +--- +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) diff --git a/app_spip_fr.md b/pages/04.applications/10.docs/spip/app_spip.fr.md similarity index 78% rename from app_spip_fr.md rename to pages/04.applications/10.docs/spip/app_spip.fr.md index dd616db2..354b6f54 100644 --- a/app_spip_fr.md +++ b/pages/04.applications/10.docs/spip/app_spip.fr.md @@ -1,4 +1,11 @@ -# SPIP for YunoHost +--- +title: SPIP +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_spip' +--- ### SPIP c'est quoi ? @@ -12,18 +19,6 @@ Source : [spip.net](https://www.spip.net/fr_rubrique91.html) * Support multilingue * Support LDAP -#### Installation - -```bash -$ sudo yunohost app install https://github.com/YunoHost-Apps/spip_ynh.git -``` - -#### Mise à jour - -```bash -$ sudo yunohost app upgrade --verbose spip -u https://github.com/YunoHost-Apps/spip_ynh.git -``` - #### Utilisation Accéder à l'administration du site en écrivant l'adresse suivante dans votre navigateur. diff --git a/app_spip.md b/pages/04.applications/10.docs/spip/app_spip.md similarity index 75% rename from app_spip.md rename to pages/04.applications/10.docs/spip/app_spip.md index 093c4126..46fd6ca9 100644 --- a/app_spip.md +++ b/pages/04.applications/10.docs/spip/app_spip.md @@ -1,4 +1,11 @@ -# SPIP for YunoHost +--- +title: SPIP +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_spip' +--- #### SPIP is what? @@ -12,18 +19,6 @@ Source:[spip.net](https://www.spip.net/fr_rubrique91.html_rubrique91.html) * Multilingual support * LDAP support -##### Installation - -```bash -$ sudo yunohost app install https://github.com/YunoHost-Apps/spip_ynh.git_ynh.git -``` - -##### Update - -```bash -sudo yunohost app upgrade --verbose spip -u https://github.com/YunoHost-Apps/spip_ynh.git_ynh.git -``` - ##### Use Access the administration of the site by entering the following address in your browser. 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..e50a7208 --- /dev/null +++ b/pages/04.applications/10.docs/squid3/app_squid3.fr.md @@ -0,0 +1,45 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..035b8b0d --- /dev/null +++ b/pages/04.applications/10.docs/squid3/app_squid3.md @@ -0,0 +1,45 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..5fdc4329 --- /dev/null +++ b/pages/04.applications/10.docs/streama/app_streama.fr.md @@ -0,0 +1,43 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..864c1820 --- /dev/null +++ b/pages/04.applications/10.docs/streama/app_streama.md @@ -0,0 +1,44 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_strut_fr.md b/pages/04.applications/10.docs/strut/app_strut.fr.md similarity index 57% rename from app_strut_fr.md rename to pages/04.applications/10.docs/strut/app_strut.fr.md index 6bed8a57..bd94d7fd 100644 --- a/app_strut_fr.md +++ b/pages/04.applications/10.docs/strut/app_strut.fr.md @@ -1,4 +1,13 @@ -# logo de strut Strut +--- +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) @@ -6,7 +15,7 @@ - [Liens utiles](#liens-utiles) -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. +*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 diff --git a/app_strut.md b/pages/04.applications/10.docs/strut/app_strut.md similarity index 58% rename from app_strut.md rename to pages/04.applications/10.docs/strut/app_strut.md index 1555b425..77de54a5 100644 --- a/app_strut.md +++ b/pages/04.applications/10.docs/strut/app_strut.md @@ -1,4 +1,13 @@ -# strut's logo Strut +--- +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) @@ -6,8 +15,7 @@ - [Useful links](#useful-links) -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. +*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 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..f2038e4e --- /dev/null +++ b/pages/04.applications/10.docs/synapse/app_synapse.fr.md @@ -0,0 +1,144 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..0ed15f3d --- /dev/null +++ b/pages/04.applications/10.docs/synapse/app_synapse.md @@ -0,0 +1,145 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..4020b880 --- /dev/null +++ b/pages/04.applications/10.docs/syncthing/app_syncthing.fr.md @@ -0,0 +1,26 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..82f8682a --- /dev/null +++ b/pages/04.applications/10.docs/syncthing/app_syncthing.md @@ -0,0 +1,26 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..bafb6be5 --- /dev/null +++ b/pages/04.applications/10.docs/teampass/app_teampass.fr.md @@ -0,0 +1,33 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..a3540976 --- /dev/null +++ b/pages/04.applications/10.docs/teampass/app_teampass.md @@ -0,0 +1,34 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..5bd6d3e5 --- /dev/null +++ b/pages/04.applications/10.docs/thelounge/app_thelounge.fr.md @@ -0,0 +1,33 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..dc8e8054 --- /dev/null +++ b/pages/04.applications/10.docs/thelounge/app_thelounge.md @@ -0,0 +1,33 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..30a74af7 --- /dev/null +++ b/pages/04.applications/10.docs/tiddlywiki/app_tiddlywiki.fr.md @@ -0,0 +1,37 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..e3a1329e --- /dev/null +++ b/pages/04.applications/10.docs/tiddlywiki/app_tiddlywiki.md @@ -0,0 +1,37 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..f47d93b5 --- /dev/null +++ b/pages/04.applications/10.docs/timemachine/app_timemachine.md @@ -0,0 +1,27 @@ +--- +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) + + +### Index + +- [Useful links](#useful-links) + +**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/app_transmission_fr.md b/pages/04.applications/10.docs/transmission/app_transmission.fr.md similarity index 90% rename from app_transmission_fr.md rename to pages/04.applications/10.docs/transmission/app_transmission.fr.md index 64317142..936d0a35 100644 --- a/app_transmission_fr.md +++ b/pages/04.applications/10.docs/transmission/app_transmission.fr.md @@ -1,4 +1,13 @@ -# Transmission +--- +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. @@ -39,4 +48,4 @@ Pour plus de détails sur le transfert de fichier avec *scp* voir ici : http:// 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/* -``` \ No newline at end of file +``` diff --git a/app_transmission.md b/pages/04.applications/10.docs/transmission/app_transmission.md similarity index 88% rename from app_transmission.md rename to pages/04.applications/10.docs/transmission/app_transmission.md index 11dfe22e..6e1ed3a9 100644 --- a/app_transmission.md +++ b/pages/04.applications/10.docs/transmission/app_transmission.md @@ -1,4 +1,13 @@ -# Transmission +--- +title: Transmission +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_transmission' +--- + +![Transmission's logo](image://transmission.png) ### What is Transmission? 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..92168406 --- /dev/null +++ b/pages/04.applications/10.docs/trilium/app_trilium.fr.md @@ -0,0 +1,33 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..9893e1d4 --- /dev/null +++ b/pages/04.applications/10.docs/trilium/app_trilium.md @@ -0,0 +1,33 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_ttrss_fr.md b/pages/04.applications/10.docs/ttrss/app_ttrss.fr.md similarity index 91% rename from app_ttrss_fr.md rename to pages/04.applications/10.docs/ttrss/app_ttrss.fr.md index e7240517..0808cbb9 100644 --- a/app_ttrss_fr.md +++ b/pages/04.applications/10.docs/ttrss/app_ttrss.fr.md @@ -1,4 +1,13 @@ -# logo de Tiny Tiny RSS Tiny Tiny RSS +--- +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) diff --git a/app_ttrss.md b/pages/04.applications/10.docs/ttrss/app_ttrss.md similarity index 90% rename from app_ttrss.md rename to pages/04.applications/10.docs/ttrss/app_ttrss.md index faf07ad4..61c7c0c8 100644 --- a/app_ttrss.md +++ b/pages/04.applications/10.docs/ttrss/app_ttrss.md @@ -1,4 +1,13 @@ -# logo de Tiny Tiny RSS Tiny Tiny RSS +--- +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) 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..4aec9b29 --- /dev/null +++ b/pages/04.applications/10.docs/tyto/app_tyto.fr.md @@ -0,0 +1,26 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..38b3e60f --- /dev/null +++ b/pages/04.applications/10.docs/tyto/app_tyto.md @@ -0,0 +1,26 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..fd8f8b68 --- /dev/null +++ b/pages/04.applications/10.docs/ulogger/app_ulogger.md @@ -0,0 +1,52 @@ +--- +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) + + +### Index + +- [Features](#features) +- [Configuration](#configuration) +- [Useful links](#useful-links) + +**μ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/app_unattended_upgrades_fr.md b/pages/04.applications/10.docs/unattended_upgrades/app_unattended_upgrades.fr.md similarity index 86% rename from app_unattended_upgrades_fr.md rename to pages/04.applications/10.docs/unattended_upgrades/app_unattended_upgrades.fr.md index cda78510..063a4231 100644 --- a/app_unattended_upgrades_fr.md +++ b/pages/04.applications/10.docs/unattended_upgrades/app_unattended_upgrades.fr.md @@ -1,4 +1,13 @@ -# logo de unattended_upgrades Unattended_upgrades +--- +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) diff --git a/app_unattended_upgrades.md b/pages/04.applications/10.docs/unattended_upgrades/app_unattended_upgrades.md similarity index 85% rename from app_unattended_upgrades.md rename to pages/04.applications/10.docs/unattended_upgrades/app_unattended_upgrades.md index b4776c0d..cfb5bbc0 100644 --- a/app_unattended_upgrades.md +++ b/pages/04.applications/10.docs/unattended_upgrades/app_unattended_upgrades.md @@ -1,4 +1,13 @@ -# Package Unattended_upgrades +--- +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) diff --git a/app_bitwarden_fr.md b/pages/04.applications/10.docs/vaultwarden/app_vaultwarden.fr.md similarity index 59% rename from app_bitwarden_fr.md rename to pages/04.applications/10.docs/vaultwarden/app_vaultwarden.fr.md index ea853c98..4aac11a5 100644 --- a/app_bitwarden_fr.md +++ b/pages/04.applications/10.docs/vaultwarden/app_vaultwarden.fr.md @@ -1,6 +1,17 @@ -# logo de Bitwarden Bitwarden +--- +title: Vaultwarden +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_vaultwarden' + aliases: + - '/app_bitwarden' +--- -[![Install Bitwarden with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=bitwarden) [![Integration level](https://dash.yunohost.org/integration/bitwarden.svg)](https://dash.yunohost.org/appci/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) ### Index @@ -9,13 +20,13 @@ - [Applications clientes](#applications-clientes) - [Liens utiles](#liens-utiles) -Bitwarden 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. +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'appliation il faut se rendre à l'adresse : `sous.domaine.tld/admin` +Pour configurer l'application il faut se rendre à l'adresse : `sous.domaine.tld/admin` ## Limitations avec YunoHost @@ -35,8 +46,8 @@ Les authentification HTTP et LDAP ne sont pas pris en charges. + 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/bitwarden](https://github.com/YunoHost-Apps/bitwarden_ynh) - + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/bitwarden/issues](https://github.com/YunoHost-Apps/bitwarden_ynh/issues) + + 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) ------ diff --git a/app_bitwarden.md b/pages/04.applications/10.docs/vaultwarden/app_vaultwarden.md similarity index 60% rename from app_bitwarden.md rename to pages/04.applications/10.docs/vaultwarden/app_vaultwarden.md index 4d7b7ccb..3fbfb620 100644 --- a/app_bitwarden.md +++ b/pages/04.applications/10.docs/vaultwarden/app_vaultwarden.md @@ -1,6 +1,17 @@ -# Bitwarden's logo Bitwarden +--- +title: Vaultwarden +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_vaultwarden' + aliases: + - '/app_bitwarden' +--- -[![Install Bitwarden with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=bitwarden) [![Integration level](https://dash.yunohost.org/integration/bitwarden.svg)](https://dash.yunohost.org/appci/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) ### Index @@ -9,7 +20,7 @@ - [Customer Applications](#customer-applications) - [Useful links](#useful-links) -Bitwarden 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. +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) @@ -34,8 +45,8 @@ HTTP and LDAP authentication are not supported. + Website: [bitwarden.com](https://bitwarden.com/) + Official documentation: [help.bitwarden.com](https://help.bitwarden.com/) -+ Application software repository: [github.com - YunoHost-Apps/bitwarden](https://github.com/YunoHost-Apps/bitwarden_ynh) -+ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/bitwarden/issues](https://github.com/YunoHost-Apps/bitwarden_ynh/issues) ++ 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) ----- 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..9f0111c6 --- /dev/null +++ b/pages/04.applications/10.docs/vikunja/app_vikunja.fr.md @@ -0,0 +1,44 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..7ecc1a8a --- /dev/null +++ b/pages/04.applications/10.docs/vikunja/app_vikunja.md @@ -0,0 +1,44 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_wallabag2_fr.md b/pages/04.applications/10.docs/wallabag2/app_wallabag2.fr.md similarity index 92% rename from app_wallabag2_fr.md rename to pages/04.applications/10.docs/wallabag2/app_wallabag2.fr.md index a169ac02..8c4e7544 100644 --- a/app_wallabag2_fr.md +++ b/pages/04.applications/10.docs/wallabag2/app_wallabag2.fr.md @@ -1,4 +1,13 @@ -# logo de wallabag2 Wallabag2 +--- +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) diff --git a/app_wallabag2.md b/pages/04.applications/10.docs/wallabag2/app_wallabag2.md similarity index 90% rename from app_wallabag2.md rename to pages/04.applications/10.docs/wallabag2/app_wallabag2.md index 1b16655b..d919d84b 100644 --- a/app_wallabag2.md +++ b/pages/04.applications/10.docs/wallabag2/app_wallabag2.md @@ -1,4 +1,13 @@ -# wallabag2's logo Wallabag2 +--- +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) diff --git a/app_weblate_fr.md b/pages/04.applications/10.docs/weblate/app_weblate.fr.md similarity index 90% rename from app_weblate_fr.md rename to pages/04.applications/10.docs/weblate/app_weblate.fr.md index c346749e..b150ac0a 100644 --- a/app_weblate_fr.md +++ b/pages/04.applications/10.docs/weblate/app_weblate.fr.md @@ -1,4 +1,13 @@ -# logo de weblate Weblate +--- +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) diff --git a/app_weblate.md b/pages/04.applications/10.docs/weblate/app_weblate.md similarity index 90% rename from app_weblate.md rename to pages/04.applications/10.docs/weblate/app_weblate.md index ebdcc16d..0b1d993e 100644 --- a/app_weblate.md +++ b/pages/04.applications/10.docs/weblate/app_weblate.md @@ -1,4 +1,13 @@ -# weblate's logo Weblate +--- +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) 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..2e9b6257 --- /dev/null +++ b/pages/04.applications/10.docs/webmin/app_webmin.md @@ -0,0 +1,38 @@ +--- +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) + +### Index + +- [Important information](#Important-Information) +- [Useful links](#useful-links) + + +## 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/app_webtrees_fr.md b/pages/04.applications/10.docs/webtrees/app_webtrees.fr.md similarity index 75% rename from app_webtrees_fr.md rename to pages/04.applications/10.docs/webtrees/app_webtrees.fr.md index 0f206728..fca91947 100644 --- a/app_webtrees_fr.md +++ b/pages/04.applications/10.docs/webtrees/app_webtrees.fr.md @@ -1,7 +1,14 @@ -# Webtrees +--- +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. \ No newline at end of file +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/app_webtrees.md b/pages/04.applications/10.docs/webtrees/app_webtrees.md similarity index 83% rename from app_webtrees.md rename to pages/04.applications/10.docs/webtrees/app_webtrees.md index 6e95e85d..603a3d74 100644 --- a/app_webtrees.md +++ b/pages/04.applications/10.docs/webtrees/app_webtrees.md @@ -1,8 +1,15 @@ -# Webtrees +--- +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. \ No newline at end of file +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/app_wekan_fr.md b/pages/04.applications/10.docs/wekan/app_wekan.fr.md similarity index 87% rename from app_wekan_fr.md rename to pages/04.applications/10.docs/wekan/app_wekan.fr.md index 25b4b7c1..34348259 100644 --- a/app_wekan_fr.md +++ b/pages/04.applications/10.docs/wekan/app_wekan.fr.md @@ -1,4 +1,13 @@ -# logo de wekan Wekan +--- +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) diff --git a/app_wekan.md b/pages/04.applications/10.docs/wekan/app_wekan.md similarity index 87% rename from app_wekan.md rename to pages/04.applications/10.docs/wekan/app_wekan.md index f408f1c9..b0d7a4e8 100644 --- a/app_wekan.md +++ b/pages/04.applications/10.docs/wekan/app_wekan.md @@ -1,4 +1,13 @@ -# wekan's logo Wekan +--- +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) 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..9d4337b8 --- /dev/null +++ b/pages/04.applications/10.docs/wemawema/app_wemawema.fr.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..f9ede75a --- /dev/null +++ b/pages/04.applications/10.docs/wemawema/app_wemawema.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..5a37ef93 --- /dev/null +++ b/pages/04.applications/10.docs/wetty/app_wetty.fr.md @@ -0,0 +1,42 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..3a8259e0 --- /dev/null +++ b/pages/04.applications/10.docs/wetty/app_wetty.md @@ -0,0 +1,42 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_wikijs_fr.md b/pages/04.applications/10.docs/wikijs/app_wikijs.fr.md similarity index 85% rename from app_wikijs_fr.md rename to pages/04.applications/10.docs/wikijs/app_wikijs.fr.md index b2a3fa65..828eb0bf 100644 --- a/app_wikijs_fr.md +++ b/pages/04.applications/10.docs/wikijs/app_wikijs.fr.md @@ -1,4 +1,13 @@ -# logo de Wiki.js Wiki.js +--- +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) diff --git a/app_wikijs.md b/pages/04.applications/10.docs/wikijs/app_wikijs.md similarity index 84% rename from app_wikijs.md rename to pages/04.applications/10.docs/wikijs/app_wikijs.md index 7475c620..66d32837 100644 --- a/app_wikijs.md +++ b/pages/04.applications/10.docs/wikijs/app_wikijs.md @@ -1,4 +1,13 @@ -# Wiki.js's logo Wiki.js +--- +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) diff --git a/app_wordpress_fr.md b/pages/04.applications/10.docs/wordpress/app_wordpress.fr.md similarity index 92% rename from app_wordpress_fr.md rename to pages/04.applications/10.docs/wordpress/app_wordpress.fr.md index ec6c8d75..0d058dda 100644 --- a/app_wordpress_fr.md +++ b/pages/04.applications/10.docs/wordpress/app_wordpress.fr.md @@ -1,4 +1,13 @@ -# logo de WordPress WordPress +--- +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) diff --git a/app_wordpress.md b/pages/04.applications/10.docs/wordpress/app_wordpress.md similarity index 90% rename from app_wordpress.md rename to pages/04.applications/10.docs/wordpress/app_wordpress.md index 8e8054ec..c1aefbba 100644 --- a/app_wordpress.md +++ b/pages/04.applications/10.docs/wordpress/app_wordpress.md @@ -1,4 +1,13 @@ -# WordPress's logo WordPress +--- +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) 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..cf5c7086 --- /dev/null +++ b/pages/04.applications/10.docs/writefreely/app_writefreely.md @@ -0,0 +1,63 @@ +--- +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) + + +### Index + +- [Features](#features) +- [Important information](#important-information) +- [Useful links](#useful-links) + +**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/app_writing_guide_fr.md b/pages/04.applications/10.docs/writing_guide/app_writing_guide.fr.md similarity index 94% rename from app_writing_guide_fr.md rename to pages/04.applications/10.docs/writing_guide/app_writing_guide.fr.md index ac1abf48..08a456b4 100644 --- a/app_writing_guide_fr.md +++ b/pages/04.applications/10.docs/writing_guide/app_writing_guide.fr.md @@ -1,4 +1,13 @@ -# logo de APPLICATION APPLICATION +--- +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) diff --git a/app_writing_guide.md b/pages/04.applications/10.docs/writing_guide/app_writing_guide.md similarity index 94% rename from app_writing_guide.md rename to pages/04.applications/10.docs/writing_guide/app_writing_guide.md index 57e9d9f3..90b46e0f 100644 --- a/app_writing_guide.md +++ b/pages/04.applications/10.docs/writing_guide/app_writing_guide.md @@ -1,4 +1,13 @@ -# APPLICATION's logo APPLICATION +--- +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) 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..7c9bb9bd --- /dev/null +++ b/pages/04.applications/10.docs/yellow/app_yellow.fr.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..40f1dc05 --- /dev/null +++ b/pages/04.applications/10.docs/yellow/app_yellow.md @@ -0,0 +1,27 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..e933a219 --- /dev/null +++ b/pages/04.applications/10.docs/yeswiki/app_yeswiki.fr.md @@ -0,0 +1,42 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..1e97fd33 --- /dev/null +++ b/pages/04.applications/10.docs/yeswiki/app_yeswiki.md @@ -0,0 +1,42 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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..f5cdadc3 --- /dev/null +++ b/pages/04.applications/10.docs/yourls/app_yourls.md @@ -0,0 +1,40 @@ +--- +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. + +### Index + +- [Features](#features) +- [Useful links](#useful-links) + +## 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..4999a2bc --- /dev/null +++ b/pages/04.applications/10.docs/zap/app_zap.fr.md @@ -0,0 +1,56 @@ +--- +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) + +### Index + +- [Liens utiles](#liens-utiles) + +*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..0a69333d --- /dev/null +++ b/pages/04.applications/10.docs/zap/app_zap.md @@ -0,0 +1,56 @@ +--- +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) + +### Index + +- [Useful links](#useful-links) + +*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/app_zerobin_fr.md b/pages/04.applications/10.docs/zerobin/app_zerobin.fr.md similarity index 89% rename from app_zerobin_fr.md rename to pages/04.applications/10.docs/zerobin/app_zerobin.fr.md index fdb0c8c0..d1ecd41a 100644 --- a/app_zerobin_fr.md +++ b/pages/04.applications/10.docs/zerobin/app_zerobin.fr.md @@ -1,4 +1,13 @@ -# logo de zerobin Zerobin +--- +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) diff --git a/app_zerobin.md b/pages/04.applications/10.docs/zerobin/app_zerobin.md similarity index 89% rename from app_zerobin.md rename to pages/04.applications/10.docs/zerobin/app_zerobin.md index 927bb7c1..4a276fc8 100644 --- a/app_zerobin.md +++ b/pages/04.applications/10.docs/zerobin/app_zerobin.md @@ -1,4 +1,13 @@ -# zerobin's logo Zerobin +--- +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) diff --git a/pages/04.applications/15.framasoft/apps_framasoft.fr.md b/pages/04.applications/15.framasoft/apps_framasoft.fr.md new file mode 100644 index 00000000..bd8253f4 --- /dev/null +++ b/pages/04.applications/15.framasoft/apps_framasoft.fr.md @@ -0,0 +1,52 @@ +--- +title: Équivalence avec les applications Framasoft +template: docs +taxonomy: + category: docs +routes: + default: '/apps_framasoft' +--- + +| App Framasoft | Projet d'origine | 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) | + +### Voir aussi + +- [Liste complète des applications packagées](/apps) +- [La roadmap 'Dégooglisons'](https://github.com/YunoHost/issues/milestone/13) diff --git a/use_case_non-profit_organisations_ca.md b/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.ca.md similarity index 97% rename from use_case_non-profit_organisations_ca.md rename to pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.ca.md index 55d1a1ba..8d878678 100644 --- a/use_case_non-profit_organisations_ca.md +++ b/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.ca.md @@ -1,16 +1,15 @@ -# YunoHost per a organitzacions sense ànim de lucre +--- +title: Use cases for NGOs +template: docs +taxonomy: + category: docs +routes: + default: '/use_case_non-profit_organisations' +page-toc: + active: true +--- -## Taula de continguts -* [Introducció](#introduction) -* [Qui](#who) -* [Què](#what) -* [Quan](#when) -* [On](#where) -* [Per què](#why) -* [Com](#how) -* [Conclusió](#conclusion) - -## Introducció +! 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. diff --git a/use_case_non-profit_organisations_fr.md b/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.fr.md similarity index 97% rename from use_case_non-profit_organisations_fr.md rename to pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.fr.md index dcf43fda..787d3112 100644 --- a/use_case_non-profit_organisations_fr.md +++ b/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.fr.md @@ -1,16 +1,15 @@ -# YunoHost pour les organisations à but non lucratif +--- +title: Cas d'usages pour associations +template: docs +taxonomy: + category: docs +routes: + default: '/use_case_non-profit_organisations' +page-toc: + active: true +--- -## Table des matières -* [Introduction](#introduction) -* [Qui ](#qui) -* [Quoi](#quoi) -* [Quand](#quand) -* [Où](#o-) -* [Pourquoi](#pourquoi) -* [Comment](#comment) -* [Conclusion](#conclusion) - -## Introduction +! 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. diff --git a/use_case_non-profit_organisations.md b/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.md similarity index 95% rename from use_case_non-profit_organisations.md rename to pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.md index a63dafe7..e477d492 100644 --- a/use_case_non-profit_organisations.md +++ b/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.md @@ -1,18 +1,17 @@ -# YunoHost for non-profit organizations +--- +title: Use cases for NGOs +template: docs +taxonomy: + category: docs +routes: + default: '/use_case_non-profit_organisations' +page-toc: + active: true +--- -## Table of Contents -* [Introduction](#introduction) -* [Who](#who) -* [What](#what) -* [When](#when) -* [Where](#where) -* [Why](#why) -* [How](#how) -* [Conclusion](#conclusion) +! TODO: this page should be updated. -## Introduction - -The object of this document is to present a specific use of [YunoHost](https://yunohost.org/) for non-profit organizations. +The purpose of this document is to present a specific use of [YunoHost](https://yunohost.org/) for non-profit organizations. ## Who diff --git a/use_case_non-profit_organisations_oc.md b/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.oc.md similarity index 97% rename from use_case_non-profit_organisations_oc.md rename to pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.oc.md index 26297a99..842133bb 100644 --- a/use_case_non-profit_organisations_oc.md +++ b/pages/04.applications/20.app_bundle/05.ngo/use_case_non-profit_organisations.oc.md @@ -1,16 +1,15 @@ -# YunoHost per organizacion sens tòca lucrativa +--- +title: Use cases for NGOs +template: docs +taxonomy: + category: docs +routes: + default: '/use_case_non-profit_organisations' +page-toc: + active: true +--- -## Ensenhador -* [Introduccion](#introduccion) -* [Qual ](#qual) -* [Qué](#qué) -* [Quand](#quand) -* [Ont](#ont) -* [Perque](#perque) -* [Cossí](#cossí) -* [Conclusion](#conclusion) - -## Introduccion +! 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. 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/apps_wishlist.md b/pages/04.applications/99.wishlist/apps_wishlist.md similarity index 50% rename from apps_wishlist.md rename to pages/04.applications/99.wishlist/apps_wishlist.md index 25d7cc79..a04d9892 100644 --- a/apps_wishlist.md +++ b/pages/04.applications/99.wishlist/apps_wishlist.md @@ -1,46 +1,72 @@ -# Apps wishlist +--- +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
+! 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 | | [Upstream](https://github.com/dready92/10er10) | | -| [AbanteCart](https://abantecart.com) | Create an e-commerce website | | [Package Draft](https://github.com/YunoHost-Apps/abantecart_ynh) | -| AdGuard | | [Upstream](https://github.com/AdguardTeam/AdGuardHome) | [Package Draft](https://github.com/YunoHost-Apps/adguard_ynh) | +| 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) | -| [agora](https://www.agora-project.net/) | Create collaborative and creative digital space | | [Package Draft](https://github.com/YunoHost-Apps/agora_ynh) | -| [Ajenti](https://ajenti.org) | | [Upstream](https://github.com/ajenti/ajenti/) | | +| [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) | | | 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) | | | [askbot](https://askbot.com/) | Questions and answers | | [Package Draft](https://github.com/zamentur/askbot_ynh) | -| Beehive | | [Upstream](https://github.com/muesli/beehive) | | -| [BicBucStriim](https://projekte.textmulch.de/bicbucstriim/) | Manage an e-book collection | | [Package Draft](https://github.com/YunoHost-Apps/bicbucstriim_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) | | +| [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) | | -| [Bitmessage](https://bitmessage.org/) | | [Upstream](https://github.com/Bitmessage/PyBitmessage) | | +| [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) | -| [Bookstack](https://www.bookstackapp.com/) | | [Upstream](https://github.com/BookStackApp/BookStack) | | -| BTCPay Server | | [Upstream](https://github.com/btcpayserver/btcpayserver) | | +| BookWyrm | Social reading and reviewing, decentralized with ActivityPub | [Upstream](https://github.com/mouse-reeve/bookwyrm) | | +| [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) | | -| [Caliopen](https://www.caliopen.org) | A unified inteface for all your private communications | | [Package Draft](https://github.com/YunoHost-Apps/caliopen_ynh) | +| [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) | | +| [Chitchatter](https://chitchatter.im/) | chat p2p encrypted serverless ephemeral decentralized | [Upstream](https://github.com/jeremyckahn/chitchatter) | | | [CheckUp](https://sourcegraph.github.io/checkup) | | [Upstream](https://github.com/sourcegraph/checkup) | | -| chtickynotes | Note manager | | [Package Draft](https://github.com/YunoHost-Apps/chtickynotes_ynh) | | [Citadel-suite](https://www.citadel.org) | Groupware platform | | | -| [Cockpit](https://cockpit-project.org/) | | | [Package Draft](https://github.com/YunoHost-Apps/cockpit_ynh) | -| coin | Member dashboard for non profit ISP | [Upstream](https://code.ffdn.org/FFDN/coin/) | [Package Draft](https://github.com/YunoHost-Apps/coin_ynh) | +| [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 | | [Upstream](https://github.com/Athou/commafeed) | | -| [Converse.js](https://conversejs.org) | Web client for XMPP | [Upstream](https://github.com/jcbrand/converse.js) | | +| [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) | -| [CouchDB](https://couchdb.apache.org/) | Database management | | | | [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)| | +| [CyberChef](https://www.giters.com/gchq/CyberChef) - The Cyber Swiss Army Knife | a web app for encryption, encoding, compression and data analysis | [Upstream](https://github.com/gchq/CyberChef) | | | [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) | | @@ -49,225 +75,234 @@ You can [contribute to this list by adding something you'd like to be packaged]( | 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 | | | -| [Domoticz](https://domoticz.com) | Home automation system web application | | [Package Draft](https://github.com/anubister/domoticz_ynh) | -| Draw.io | Online diagram creation | [Upstream](https://github.com/jgraph/drawio) | | -| [Duniter](https://duniter.org) | Participate in the Duniter blockchain | | [Package Draft](https://github.com/YunoHost-Apps/duniter_ynh) | | Dynette | Dynette is a dyndns server | [Upstream](https://github.com/YunoHost/dynette) | [Package Draft](https://github.com/YunoHost-Apps/dynette_ynh) | -| [EasyAppointments](https://easyappointments.org/) | Online appointment booker | | | -| [eLabFTW](https://www.elabftw.net/) | Electronic lab notebook | [Upstream](https://github.com/elabftw/elabftw) | | -| Emoncms | | [Upstream](https://github.com/emoncms/emoncms) | | -| [Epicyon](https://epicyon.net/) | | [Upstream](https://gitlab.com/bashrc2/epicyon) | | +| 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) | | +| [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) | | +| 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) | | -| [Ethercalc](https://ethercalc.net/) | Collaborative spreadsheet editor | | [Package Draft](https://github.com/YunoHost-Apps/ethercalc_ynh) | -| Facette | | | [Package Draft](https://github.com/YunoHost-Apps/facette_ynh) | +| [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) | | +| [Fab Manager](https://www.fab-manager.com/) | Simplify the daily management of your Third place/Fablab and boost your community | [Upstream](https://github.com/sleede/fab-manager) | | +| [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/) | | | | +| [FIDI](https://docs.firefly-iii.org/data-importer) | Import data from banks to Firefly | | | | [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) | | | FitTrackee | | [Upstream](https://github.com/SamR1/FitTrackee) | | | 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) | | [Fossil](https://www.fossil-scm.org) | | | | +| 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) | -| galette | Membership management for non-profit organizations | | [Package Draft](https://github.com/YunoHost-Apps/galette_ynh) | -| [Galène](https://galene.org/) | videoconferencing server | [Upstream](https://github.com/jech/galene) | | | [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) | | -| GetSimple CMS | | [Upstream](https://github.com/GetSimpleCMS/GetSimpleCMS) | | | 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) | -| [glitch-soc](https://glitch-soc.github.io/docs/) | A libre and federated social network | | [Package Draft](https://github.com/Tagadda/glitch-soc_ynh) | -| glpi | Create a beautiful blog or website easily | | [Package Draft](https://github.com/abeudin/glpi_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 | | [Upstream](https://github.com/gollum/gollum) | | +| 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) | | -| Gpodder.net | | | | +| [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) | | -| [Grocy](https://grocy.info/) | Fridge ERP | [Upstream](https://github.com/grocy/grocy) | | -| [Guacamole](https://guacamole.apache.org/) | Clientless remote desktop gateway | | | +| [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) | | -| headphones | Automatic music downloader | | [Package Draft](https://github.com/YunoHost-Apps/headphones_ynh) | +| [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) | | -| Hometown | | [Upstream](https://github.com/hometown-fork/hometown) | | +| 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) | -| huginn | Build agents that monitor and act on your behalf | | [Package Draft](https://github.com/YunoHost-Apps/huginn_ynh) | -| [humhub](https://www.humhub.org) | Enterprise Social Network | | [Package Draft](https://github.com/yunohost-apps/humhub_ynh) | | [Icecast 2](https://www.icecast.org) | | [Upstream](https://gitlab.xiph.org/xiph/icecast-server/) | | | [ikiwiki](https://ikiwiki.info) | | | | -| internetarchive | Offline version of the Internet Archive | [Upstream](https://github.com/internetarchive/dweb-mirror) | [Package Draft](https://github.com/mitra42/internetarchive_ynh) | +| [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) | | +| [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) | -| [Jitsi](https://jitsi.org/) | Video conferencing web application | | [Package Draft](https://github.com/YunoHost-Apps/jitsi_ynh) | -| [joomla](https://www.joomla.org) | A content management system | | [Package Draft](https://github.com/YunoHost-Apps/joomla_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) | | -| kiwiirc | Web IRC client | | [Package Draft](https://github.com/YunoHost-Apps/kiwiirc_ynh) | -| [Kiwix](https://www.kiwix.org/) | Offline Wikipedia or other sites | [Upstream](https://github.com/kiwix/) | | +| 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) | | | [Known](https://withknown.com) | | [Upstream](https://github.com/idno/known) | | -| [kodi](https://kodi.tv) | Media center application | | [Package Draft](https://github.com/YunoHost-Apps/kodi_ynh) | | [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) | -| [Lemmy](https://dev.lemmy.ml) | A federated alternative to Reddit | [Upstream](https://github.com/dessalines/lemmy) | | +| [LessPass](https://www.lesspass.com/) | | [Upstream](https://github.com/lesspass/lesspass) | | | [Lessy](https://lessy.io) | | [Upstream](https://github.com/lessy-community/lessy) | | -| [LibreOffice Online](https://www.libreoffice.org/download/libreoffice-online/) | | | | -| linuxdash | Low-overhead monitoring web dashboard | [Upstream](https://github.com/afaqurk/linux-dash) | [Package Draft](https://github.com/YunoHost-Apps/linuxdash_ynh) | +| [Librarian](https://lbry.bcow.xyz/) | An alternative frontend for LBRY/Odysee | [Upstream](https://codeberg.org/librarian/librarian) | | +| [LibreTranslate](https://libretranslate.com/) | Translation API | [Upstream](https://github.com/uav4geo/LibreTranslate) | [Package Draft](https://github.com/YunoHost-Apps/libretranslate_ynh) | +| [Lila](https://lichess.org/) | Online chess game server | [Upstream](https://github.com/ornicar/lila) | | +| [Lingva Translate](https://lingva.ml/) | Alternative front-end for Google Translate | [Upstream](https://github.com/TheDavidDelta/lingva-translate) | | | [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) | | [Loki](https://docs.loki.network/ServiceNodes/DebianPackageGuide/)| Service node for the Loki Network | [Upstream](https://github.com/loki-project/) | | | [Loomio](https://www.loomio.org) | | [Upstream](https://github.com/loomio/loomio/) | | | [MaidSafe](https://maidsafe.net) | | [Upstream](https://github.com/maidsafe) | | -| [mailman3](https://docs.mailman3.org/) | Electronic mailing list manager | | [Package Draft](https://github.com/YunoHost-Apps/mailman3_ynh) | | [Mailpile](https://www.mailpile.is) | | [Upstream](https://github.com/mailpile/Mailpile) | | | [Mailtrain](https://mailtrain.org/) | | [Upstream](https://github.com/Mailtrain-org/mailtrain) | | -| [Mautic](https://github.com/mautic/mautic) | | | | -| mediadrop | Video Platform | | [Package Draft](https://github.com/YunoHost-Apps/mediadrop_ynh) | -| [Mediagoblin](https://mediagoblin.org/) | Video streaming platform | [Upstream](https://savannah.gnu.org/projects/mediagoblin) | | -| [medusa](https://pymedusa.com/) | Automatic TV shows downloader | | [Package Draft](https://github.com/guigot/medusa_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) | | -| miniflux | Minimal RSS reader | | [Package Draft](https://github.com/mat-mo/miniflux_ynh) | +| [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) | | -| Matterbridge | Bridge different chat protocols | [Upstream](https://github.com/42wim/matterbridge) | [Package Draft](https://github.com/YunoHost-Apps/matterbridge_ynh) | | 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) | | -| [mopidy](https://www.mopidy.com/) | An extensible music server | | [Package Draft](https://github.com/YunoHost-Apps/mopidy_ynh) | -| [mosquitto](https://mosquitto.org) | | | [Package Draft](https://github.com/YunoHost-Apps/mosquitto_ynh) | | 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) | -| Mumble-web | Mumble web interface | [Upstream](https://github.com/Johni0702/mumble-web) | [Package Draft](https://github.com/YunoHost-Apps/mumbleserver_ynh/pull/32) | | munin | Resource monitoring tool | | [Package Draft](https://github.com/YunoHost-Apps/munin_ynh) | | Museek+ | | [Upstream](https://github.com/eLvErDe/museek-plus) | | -| [MyBB](https://mybb.com/) | | [Upstream](https://github.com/mybb) | | | mycryptochat | Encrypted IM | | [Package Draft](https://github.com/mrtino/mycryptochat_ynh) | -| [N8n.io](https://n8n.io) | | | | +| 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) | | | Netrunner | | [Upstream](https://github.com/mtgred/netrunner) | | -| nexusoss | Sonatype Nexus Repository manager OSS | | [Package Draft](https://github.com/YunoHost-Apps/nexusoss_ynh) | -| Nitter | | [Upstream](https://github.com/zedeus/nitter) | | +| [Netbird](https://netbird.io/) | Create an overlay peer-to-peer network connecting machines regardless of their location | [Upstream](https://github.com/netbirdio/netbird) | | +| [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) | -| [Odoo](https://www.odoo.com/) | An open source ERP and CRM | [Upstream](https://github.com/odoo/odoo) | [Package Draft](https://github.com/YunoHost-Apps/libreerp_ynh) | -| ofbiz | Apache-OFBiz ERP | | [Package Draft](https://github.com/nomakaFr/ofbiz_ynh) | | OhMyForm | | [Upstream](https://github.com/ohmyform) | | | Ombi | | [Upstream](https://github.com/tidusjar/Ombi) | | -| [Omeka S](https://omeka.org/s/) | | [Upstream](https://github.com/omeka/omeka-s) | | +| [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) | -| [OpenNote](https://foxusa.github.io/OpenNote/OpenNote/) | An alternative to Microsoft OneNote and EverNote | | [Package Draft](https://github.com/YunoHost-Apps/OpenNote_ynh) | -| openproject | | [Upstream](https://github.com/opf/openproject) | [Package Draft](https://github.com/moutonjr/openproject_ynh) | | OpenSourceBilling | | [Upstream](https://github.com/vteams/open-source-billing) | | -| [opentracker](https://erdgeist.org/arts/software/opentracker/) | | | [Package Draft](https://github.com/YunoHost-Apps/opentracker_ynh) | -| [osada](https://zotlabs.com/osada/) | A decentralized publication platform and social network | | [Package Draft](https://github.com/YunoHost-Apps/osada_ynh) | -| [osjs](https://www.os-js.org/) | Desktop you have access to through your web-browser | | [Package Draft](https://github.com/YunoHost-Apps/osjs_ynh) | | [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) | | -| [pagure](https://pagure.io/pagure) | A Git forge | | [Package Draft](https://github.com/YunoHost-Apps/pagure_ynh) | -| Paperless | | [Upstream](https://github.com/danielquinn/paperless) | | +| Paperless-ng | | [Upstream](https://github.com/jonaswinkler/paperless-ng) | | | [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) | | -| Pelican | Pelican Static Site Generator | | [Package Draft](https://github.com/YunoHost-Apps/pelican_ynh) | +| [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) | | | [Photoprism](https://photoprism.org/) | | [Upstream](https://github.com/photoprism/photoprism) | | -| [phpbb](https://www.phpbb.com/) | Bulletin board software | [Upstream](https://github.com/phpbb) | [Package Draft](https://github.com/YunoHost-apps/phpbb_ynh) | -| [phpboost](https://www.phpboost.com/) | | | [Package Draft](https://github.com/YunoHost-Apps/phpboost_ynh) | -| [phpipam](https://phpipam.net/) | | | [Package Draft](https://github.com/YunoHost-Apps/phpipam_ynh) | -| phplicensewatcher | A license manager | | [Package Draft](https://github.com/YunoHost-Apps/phplicensewatcher_ynh) | | [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) | -| Pico | | [Upstream](https://github.com/picocms/Pico) | | +| [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 | | | -| [prestashop](https://www.prestashop.com/) | Create an e-commerce website | | [Package Draft](https://github.com/YunoHost-Apps/prestashop_ynh) | | [Privoxy](https://www.privoxy.org) | | | | | [ProcessMaker](https://www.processmaker.com) | | | | | proftpd | | | [Package Draft](https://github.com/abeudin/proftpd_ynh) | | ProtonMail’s WebClient | | [Upstream](https://github.com/ProtonMail/WebClient) | | -| [psitransfer](https://psi.cx/tags/PsiTransfer/) | Transfer files or images without problems | | [Package Draft](https://github.com/YunoHost-Apps/psitransfer_ynh) | | [pterodactyl](https://pterodactyl.io/) | | | [Package Draft](https://github.com/YunoHost-Apps/pterodactyl_ynh) | -| [pufferpanel](https://emby.media/) | | | [Package Draft](https://github.com/YunoHost-Apps/pufferpanel_ynh) | | Pump.io | File sharing and synchronization | [Upstream](https://github.com/pump-io/pump.io) | | -| pydio | File sharing platform | | [Package Draft](https://github.com/YunoHost-Apps/pydio_ynh) | -| [Pydio Cells](https://pydio.com/) | | [Upstream](https://github.com/pydio/cells) | | -| [pyload](https://pyload.net/) | | [Upstream](https://github.com/pyload/pyload) | [Package Draft](https://github.com/YunoHost-Apps/pyload_ynh) | -| qBittorrent | | [Upstream](https://github.com/qbittorrent/qBittorrent) | | -| [Questions2answer](https://www.question2answer.org/) | | | | +| [qBit MatUI](https://qbit-material-webui-demo.herokuapp.com/) | A WebUI for qBittorrent | [Upstream](https://github.com/bill-ahmed/qbit-matUI) | | +| [qBittorrent](https://www.qbittorrent.org/) | | [Upstream](https://github.com/qbittorrent/qBittorrent) | | +| [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) | | -| Radarr | | [Upstream](https://github.com/Radarr/Radarr) | | | Race for the galaxy | | [Upstream](https://github.com/bnordli/rftg) | | -| [redmine](https://www.redmine.org/) | A flexible project management web application | | [Package Draft](https://github.com/YunoHost-Apps/redmine_ynh) | +| [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) | | [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) | -| [rocketchat](https://rocket.chat) | A chat platform | | [Package Draft](https://github.com/YunoHost-Apps/rocketchat_ynh) | | rs-short | An URL shortener | [Upstream](https://git.42l.fr/42l/rs-short) | | -| [rspamdui](https://rspamd.com/webui) | A web UI for the Rspamd spam filtering system | | [Package Draft](https://github.com/YunoHost-Apps/rspamdui_ynh) | +| 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) | | | [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) | -| scrumblr | Software for notes | | [Package Draft](https://github.com/YunoHost-Apps/scrumblr_ynh) | +| [Scribe](https://scribe.rip/) | An alternative frontend to Medium | [Upstream](https://git.sr.ht/~edwardloveall/scribe) | | | [Scuttlebutt Pub](https://www.scuttlebutt.nz/contributing) | | | | +| [SearXNG](https://searxng.github.io/searxng/) | Fork of SearX, a privacy-respecting metasearch engine | [Upstream](https://github.com/searxng/searxng) | | | [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) | -| [ShareLatex](https://www.sharelatex.com) | | [Upstream](https://github.com/overleaf/overleaf) | | | shinken | A flexible and scalable monitoring framework | [Upstream](https://github.com/naparuba/shinken) | [Package Draft](https://github.com/YunoHost-apps/shinken_ynh) | -| shuri | URL Shortener | [Upstream](https://github.com/pips-/shuri) | [Package Draft](https://github.com/YunoHost-Apps/shuri_ynh) | | sickbeard | Automatic TV show downloader | | [Package Draft](https://github.com/YunoHost-Apps/sickbeard_ynh) | | [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) | | +| [Signature PDF](https://pdf.24eme.fr) | A free open source online PDF signing software | [Upstream](https://github.com/24eme/signaturepdf) | [Package Draft](https://github.com/YunoHost-Apps/signaturepdf_ynh) | | 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) | | -| [Sonarr](https://sonarr.tv) | | [Upstream](https://github.com/Sonarr/Sonarr) | | | [sonerezh](https://www.sonerezh.bzh) | Stream music from everywhere | | [Package Draft](https://github.com/YunoHost-Apps/sonerezh_ynh) | -| Spacedeck | A real-time collaborative whiteboard | [Upstream](https://github.com/spacedeck/spacedeck-open) | | +| [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) | -| squid3| A caching proxy | | [Package Draft](https://github.com/YunoHost-Apps/squid3_ynh) | | [Stackedit](https://stackedit.io) | | [Upstream](https://github.com/benweet/stackedit) | | -| [StandardNotes](https://standardfile.org/) | A clean, simple, E2E-encrypted notes app | [Upstream](https://github.com/standardnotes/web) | | +| [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) | | +| 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) | -| Synapse-Admin | Management GUI for matrix-synapse | [Upstream](https://github.com/Awesome-Technologies/synapse-admin) | | | [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) | | | [Taskwarrior](https://taskwarrior.org) | | [Upstream](https://github.com/GothenburgBitFactory/taskwarrior) | | -| [teampass](https://www.teampass.net) | Passwords Manager | | [Package Draft](https://github.com/YunoHost-Apps/teampass_ynh) | | [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) | | 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) | | @@ -276,13 +311,13 @@ You can [contribute to this list by adding something you'd like to be packaged]( | 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) | -| Trilium Notes | Build large personal knowledge base with notes | [Upstream](https://github.com/zadam/trilium) | | | [Tryton](https://www.tryton.org/) | A solid ERP system | | | -| [turtl](https://turtlapp.com/) | A secure collaboratite notebook | | [Package Draft](https://github.com/YunoHost-Apps/turtl_ynh) | +| [trivy](https://www.aquasec.com/products/trivy/) | OSS Vulnerability and Misconfiguration Scanning. |[Upstream](https://github.com/aquasecurity/trivy) | | | 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/home)| All of the organizational tools you need to make your projects succeed brought together on one platform.| | | +| [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/) | | [Upstream](https://framagit.org/medoc92/upmpdcli) | | @@ -293,19 +328,25 @@ You can [contribute to this list by adding something you'd like to be packaged]( | [WebODF](https://webodf.org) | | [Upstream](https://github.com/webodf/WebODF) | | | webogram | Webogram - a new era of messaging | [Upstream](https://github.com/zhukov/webogram) | [Package Draft](https://github.com/YunoHost-Apps/webogram_ynh) | | [WebThings Gateway](https://iot.mozilla.org/gateway/) | | [Upstream](https://github.com/mozilla-iot/) | | -| [webtrees](https://www.webtrees.net) | Web-based genealogy | | [Package Draft](https://github.com/YunoHost-Apps/webtrees_ynh) | +| [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) | -| [Wireguard](https://www.wireguard.com/) | | [Upstream](https://git.zx2c4.com/WireGuard/) | | | 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) | | -| yacy | Free and decentrelized search engine | | [Package Draft](https://github.com/YunoHost-Apps/yacy_ynh) | | [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) | | @@ -318,3 +359,4 @@ You can [contribute to this list by adding something you'd like to be packaged]( - [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/chat_rooms_es.md b/pages/05.community/10.chat_rooms/chat_rooms.es.md similarity index 69% rename from chat_rooms_es.md rename to pages/05.community/10.chat_rooms/chat_rooms.es.md index 70adbcd4..06331a9a 100644 --- a/chat_rooms_es.md +++ b/pages/05.community/10.chat_rooms/chat_rooms.es.md @@ -1,9 +1,16 @@ -## Salas de chat +--- +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://kiwiirc.com/client/irc.freenode.net/yunohost) +- 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) @@ -11,15 +18,15 @@ Puede unirse a una sala de chat utilizando : #### Sala de chat de ayuda y soporte Existen salas publicas de chat de [soporte](/help) y ayuda para YunoHost: -- IRC: **#yunohost** on irc.freenode.net ; -- Matrix: **#freenode_#yunohost:matrix.org** ; +- 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 irc.freenode.net ; -- Matrix: **#freenode_#yunohost-dev:matrix.org** ; +- 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 @@ -27,13 +34,13 @@ 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 irc.freenode.net -- Matrix: **#freenode_#yunohost-apps:matrix.org** +- 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 irc.freenode.net -- Matrix: **#freenode_#yunohost-doc:matrix.org** +- 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/chat_rooms_fr.md b/pages/05.community/10.chat_rooms/chat_rooms.fr.md similarity index 70% rename from chat_rooms_fr.md rename to pages/05.community/10.chat_rooms/chat_rooms.fr.md index bbbe0877..f91c5e50 100644 --- a/chat_rooms_fr.md +++ b/pages/05.community/10.chat_rooms/chat_rooms.fr.md @@ -1,23 +1,30 @@ -## Salons de discussions +--- +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://kiwiirc.com/client/irc.freenode.net/yunohost) +- 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 irc.freenode.net (voir KiwiIRC ci-dessus) -- Matrix : **#freenode_#yunohost:matrix.org** +- 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 irc.freenode.net -- Matrix : **#freenode_#yunohost-dev:matrix.org** +- 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. @@ -26,13 +33,13 @@ 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 irc.freenode.net -- Matrix : **#freenode_#yunohost-apps:matrix.org** +- 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 irc.freenode.net -- Matrix : **#freenode_#yunohost-doc:matrix.org** +- 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/chat_rooms.md b/pages/05.community/10.chat_rooms/chat_rooms.md similarity index 69% rename from chat_rooms.md rename to pages/05.community/10.chat_rooms/chat_rooms.md index c72c6961..8ba85ccd 100644 --- a/chat_rooms.md +++ b/pages/05.community/10.chat_rooms/chat_rooms.md @@ -1,9 +1,16 @@ -## Chat rooms +--- +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://kiwiirc.com/client/irc.freenode.net/yunohost) +- 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) @@ -12,15 +19,15 @@ You could join those chat rooms using: There is a [support](/help) chat room for YunoHost users mutual support and help. -- IRC: **#yunohost** on irc.freenode.net -- Matrix: **#freenode_#yunohost:matrix.org** +- 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 irc.freenode.net -- Matrix: **#freenode_#yunohost-dev:matrix.org** +- 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. @@ -29,14 +36,14 @@ 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 irc.freenode.net -- Matrix: **#freenode_#yunohost-apps:matrix.org** +- 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 irc.freenode.net -- Matrix: **#freenode_#yunohost-doc:matrix.org** +- 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/help_ar.md b/pages/05.community/15.help/help.ar.md similarity index 61% rename from help_ar.md rename to pages/05.community/15.help/help.ar.md index 26a2b558..44ed6b50 100644 --- a/help_ar.md +++ b/pages/05.community/15.help/help.ar.md @@ -1,33 +1,37 @@ -#
هل تبحث عن مساعدة ؟
+--- +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. +!!! - لا تطرح سؤالا لمُجرّد الطرح، بل إطرح سؤالك ! +!!! - تحلّى بالصبر، في بعض الأحيان يمكن أن تمر بضع دقائق قبل أن يرى أحد المستخدمين سؤالك. -

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

-
-ProTips™ -
    -
  • لا تطرح سؤالا لمُجرّد الطرح، بل إطرح سؤالك !
  • -
  • تحلّى بالصبر، في بعض الأحيان يمكن أن تمر بضع دقائق قبل أن يرى أحد المستخدمين سؤالك.
  • -
-
-
الإسم المستعار : -
- +الإسم المستعار : + +

-
ملاحظة : يمكن الإتصال كذلك بغرفة المحادثة باستخدام تطبيق XMPP الخاص بك على العنوان التالي
support@conference.yunohost.org
-kiwiirc باستخدام freenode على #yunohost IRC أو
+kiwiirc باستخدام libera.chat على #yunohost IRC أو
Riot باستخدام Matrix أو
-
-

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

+

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

-
@@ -50,7 +53,6 @@ support@conference.yunohost.org


-
ملاحظة : يمكن الإتصال كذلك بغرفة التطوير باستخدام تطبيق XMPP الخاص بك على العناوين التالية
dev@conference.yunohost.org and apps@conference.yunohost.org
@@ -63,6 +65,6 @@ document.getElementById("goBugtracker").onclick = function() { window.location.href = "https://github.com/yunohost/issues/issues"; } document.getElementById("goDevroom").onclick = function() { - window.location.href = "https://kiwiirc.com/client/irc.freenode.net/yunohost-dev"; + window.location.href = "https://web.libera.chat/#yunohost"; } 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..f29e3271 --- /dev/null +++ b/pages/05.community/15.help/help.fr.md @@ -0,0 +1,44 @@ +--- +title: Besoin d'aide ? +template: docs +taxonomy: + category: docs +routes: + default: '/help' +--- + +## Connectez-vous au salon de support + +!!! **Conseils de pros™** +!!! - Ne demandez pas si vous pouvez demander, demandez directement ! +!!! - *Soyez patient*, vos messages ne seront peut-être pas vus immédiatement. +!!! - Pensez à partager les logs avec YunoPaste ! + +[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 ! + +[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/help_it.md b/pages/05.community/15.help/help.it.md similarity index 59% rename from help_it.md rename to pages/05.community/15.help/help.it.md index ab7a10bd..54426b7c 100644 --- a/help_it.md +++ b/pages/05.community/15.help/help.it.md @@ -1,20 +1,25 @@ -# Cerchi aiuto? +--- +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. +
-
-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 freenode - usando kiwiirc), via XMPP (support@conference.yunohost.org), o Matrix (#freenode_#yunohost:matrix.org - usando Riot) +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 !

@@ -51,7 +56,7 @@ document.getElementById("goBugtracker").onclick = function() { window.location.href = "https://github.com/yunohost/issues/issues"; } document.getElementById("goDevroom").onclick = function() { - window.location.href = "https://kiwiirc.com/client/irc.freenode.net/yunohost-dev"; + window.location.href = "https://web.libera.chat/#yunohost-dev"; } diff --git a/pages/05.community/15.help/help.md b/pages/05.community/15.help/help.md new file mode 100644 index 00000000..478cd776 --- /dev/null +++ b/pages/05.community/15.help/help.md @@ -0,0 +1,44 @@ +--- +title: Looking for help? +template: docs +taxonomy: + category: docs +routes: + default: '/help' +--- + +## Connect to the support chatroom + +!!! **ProTips™** +!!! - Don't ask to ask, just ask ! +!!! - *Be patient*, it can take a few minutes before someone sees your messages. +!!! - Please share the logs with YunoPaste ! + +[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 ! + +[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/faq_de.md b/pages/05.community/20.faq/faq.de.md similarity index 96% rename from faq_de.md rename to pages/05.community/20.faq/faq.de.md index 3ad70759..5a066f24 100644 --- a/faq_de.md +++ b/pages/05.community/20.faq/faq.de.md @@ -1,4 +1,11 @@ -# Häufig gestellte Fragen +--- +title: Häufig gestellte Fragen +template: docs +taxonomy: + category: docs +routes: + default: '/faq' +--- #### Unter welcher Lizenz wird YunoHost angeboten ? @@ -24,7 +31,7 @@ YunoHost könnte eine Distribution oder ein Betriebssystem genannt werden, aber 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) ! +Mehr Informationen finden Sie [hier](/whatsyunohost) ! #### Kann ich meine eigene, persönliche Internetseite mit YunoHost betreiben ? @@ -63,7 +70,7 @@ Wenn Ihnen das möglich ist, können Sie auch gerne Sachspenden leisten (ein Tei #### Wie kann ich zum Projekt beitragen ? -Es gibt viele Wege [zum Projekt beizutragen](contribute) :). +Es gibt viele Wege [zum Projekt beizutragen](/contribute) :). Zögern Sie nicht, mit uns über Ihre Ideen zu sprechen! @@ -72,7 +79,7 @@ Es ist ein weit verbreitetes Missverständnis, dass Neulinge bei offenen Softwar #### Was sind YunoHost organisatorische Grundsätze ? -Das beschreiben wir in [diesem Dokument](project_organization) :). +Das beschreiben wir in [diesem Dokument](/project_organization) :). #### Werdet ihr YunoHosts für [Lieblingsdistribution hier einfügen] portieren ? diff --git a/faq_fr.md b/pages/05.community/20.faq/faq.fr.md similarity index 96% rename from faq_fr.md rename to pages/05.community/20.faq/faq.fr.md index 288733d6..6aa06f9c 100644 --- a/faq_fr.md +++ b/pages/05.community/20.faq/faq.fr.md @@ -1,4 +1,11 @@ -# Foire aux questions +--- +title: Foire aux questions +template: docs +taxonomy: + category: docs +routes: + default: '/faq' +--- #### Sous quelle licence est distribué YunoHost ? @@ -24,7 +31,7 @@ YunoHost peut être appelé une distribution ou un système d’exploitation, ma 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) ! +Plus d’informations sur [cette page](/whatsyunohost) ! #### Puis-je gérer mon propre site web avec YunoHost ? @@ -62,7 +69,7 @@ Si vous le pouvez, vous pouvez aussi faire des contributions en nature (une part #### Comment puis-je contribuer au projet ? -Il existe [plusieurs façons de contribuer](contribute) :). +Il existe [plusieurs façons de contribuer](/contribute) :). N’hésitez pas à venir nous parler de vos idées ! @@ -70,7 +77,7 @@ Une idée répandue parmi les nouveaux contributeurs aux logiciels libres est de #### Quel est le modèle politique de YunoHost ? -Il est décrit dans [ce document](project_organization) :). +Il est décrit dans [ce document](/project_organization) :). #### Pouvez-vous porter YunoHost sur [ma distro préférée] ? diff --git a/faq.md b/pages/05.community/20.faq/faq.md similarity index 94% rename from faq.md rename to pages/05.community/20.faq/faq.md index 9aa5d2a4..1cc353ff 100644 --- a/faq.md +++ b/pages/05.community/20.faq/faq.md @@ -1,4 +1,11 @@ -# Frequently Asked Questions +--- +title: Frequently Asked Questions +template: docs +taxonomy: + category: docs +routes: + default: '/faq' +--- #### Under which license is YunoHost distributed? @@ -15,7 +22,7 @@ We believe that decentralizing the Internet, and empowering people to take contr The YunoHost project aims to democratize self-hosting. -It provides a software that aims to make it easy for people to run and administrate their own server, with minimal knowledge and required time. +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*? @@ -24,7 +31,7 @@ YunoHost may be called a distribution or an operating system, but it's actually 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)! +More info on [this page](/whatsyunohost)! #### Can I host my own personal website with YunoHost? @@ -60,7 +67,7 @@ If you can, you can also make in-kind contributions, like servers (some of our i #### How can I contribute to the project? -There are [many ways to contribute](contribute) :). +There are [many ways to contribute](/contribute) :). Don't hesitate to come talk to us about your ideas! @@ -69,7 +76,7 @@ A common misconception for newcomers in free software projects is to think that #### What's YunoHost's political model? -It is described in [this document](project_organization) :). +It is described in [this document](/project_organization) :). #### Will you port YunoHost to [insert favorite distro]? 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/sponsors_partners_fr.md b/pages/05.community/30.project_sponsors/sponsors_partners.fr.md similarity index 86% rename from sponsors_partners_fr.md rename to pages/05.community/30.project_sponsors/sponsors_partners.fr.md index 72ea6165..e180c8a6 100644 --- a/sponsors_partners_fr.md +++ b/pages/05.community/30.project_sponsors/sponsors_partners.fr.md @@ -1,15 +1,22 @@ -# Mécènes et partenaires +--- +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. +- [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. +- [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/sponsors_partners.md b/pages/05.community/30.project_sponsors/sponsors_partners.md similarity index 93% rename from sponsors_partners.md rename to pages/05.community/30.project_sponsors/sponsors_partners.md index 640ff41b..7cb0e06e 100644 --- a/sponsors_partners.md +++ b/pages/05.community/30.project_sponsors/sponsors_partners.md @@ -1,4 +1,11 @@ -# Sponsors and partners +--- +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. diff --git a/project_budget_fr.md b/pages/05.community/35.project_budget/project_budget.fr.md similarity index 89% rename from project_budget_fr.md rename to pages/05.community/35.project_budget/project_budget.fr.md index 608578bf..b2b5a3c6 100644 --- a/project_budget_fr.md +++ b/pages/05.community/35.project_budget/project_budget.fr.md @@ -1,4 +1,11 @@ -# Budget du projet +--- +title: Budget du projet +template: docs +taxonomy: + category: docs +routes: + default: '/project_budget' +--- # Budget prévisionnel pour 2019/2020 diff --git a/project_budget.md b/pages/05.community/35.project_budget/project_budget.md similarity index 88% rename from project_budget.md rename to pages/05.community/35.project_budget/project_budget.md index 7d00f71b..19f4e059 100644 --- a/project_budget.md +++ b/pages/05.community/35.project_budget/project_budget.md @@ -1,4 +1,11 @@ -# Project budget +--- +title: Project budget +template: docs +taxonomy: + category: docs +routes: + default: '/project_budget' +--- # Estimated budget for 2020/2021 diff --git a/security_team_fr.md b/pages/05.community/35.security_team/security_team.fr.md similarity index 85% rename from security_team_fr.md rename to pages/05.community/35.security_team/security_team.fr.md index a3ae1720..3186cffb 100644 --- a/security_team_fr.md +++ b/pages/05.community/35.security_team/security_team.fr.md @@ -1,4 +1,11 @@ -# Équipe sécurité +--- +title: Équipe sécurité +template: docs +taxonomy: + category: docs +routes: + default: '/security_team' +--- Contactez l'équipe sécurité par email : `security@yunohost.org`. diff --git a/security_team.md b/pages/05.community/35.security_team/security_team.md similarity index 80% rename from security_team.md rename to pages/05.community/35.security_team/security_team.md index a0e1686f..fd97120b 100644 --- a/security_team.md +++ b/pages/05.community/35.security_team/security_team.md @@ -1,4 +1,11 @@ -# Security team +--- +title: Security team +template: docs +taxonomy: + category: docs +routes: + default: '/security_team' +--- Contact the security team by mail: `security@yunohost.org`. @@ -12,4 +19,4 @@ 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 \ No newline at end of file +See https://gist.github.com/opi/4496024dc3ff29ab2e068fd57092ab7c or https://twitter.com/yunohost/status/748975105393459200 for other trustable fingerprints diff --git a/communication.md b/pages/05.community/40.press_kit/press_kit.md similarity index 90% rename from communication.md rename to pages/05.community/40.press_kit/press_kit.md index 0ccaab57..c59c579c 100644 --- a/communication.md +++ b/pages/05.community/40.press_kit/press_kit.md @@ -1,4 +1,18 @@ -# Communication +--- +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 @@ -21,10 +35,9 @@ ## 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) 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/doc_writing_guide_fr.md b/pages/06.contribute/05.write_documentation/01.writing_documentation_guide/doc_writing_guide.fr.md similarity index 68% rename from doc_writing_guide_fr.md rename to pages/06.contribute/05.write_documentation/01.writing_documentation_guide/doc_writing_guide.fr.md index e8eb73eb..296d25f1 100644 --- a/doc_writing_guide_fr.md +++ b/pages/06.contribute/05.write_documentation/01.writing_documentation_guide/doc_writing_guide.fr.md @@ -1,8 +1,15 @@ -# Guide de rédaction de la documentation des applications +--- +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_fr) et un bouton sur le niveau d'intégration de l'application. +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.). @@ -20,11 +27,11 @@ Classement des applications disponibles par tags (genre, Git, gestion associatio 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 (si il en existe). Lien vers différentes applications tierces si 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 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 + - les liens vers le package de YunoHost et issues Trame pour la rédaction des pages de documentations : [ici](/app_writing_guide) @@ -32,5 +39,5 @@ Trame pour la rédaction des pages de documentations : [ici](/app_writing_guide) 1. Documenter les applications. 1. Documenter les applications au travail (marqué : work) niveau 8/7/6. - 1. Traduire la page de documentation à minima en français et en anglais. + 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/doc_writing_guide.md b/pages/06.contribute/05.write_documentation/01.writing_documentation_guide/doc_writing_guide.md similarity index 81% rename from doc_writing_guide.md rename to pages/06.contribute/05.write_documentation/01.writing_documentation_guide/doc_writing_guide.md index 605c840f..b853e359 100644 --- a/doc_writing_guide.md +++ b/pages/06.contribute/05.write_documentation/01.writing_documentation_guide/doc_writing_guide.md @@ -1,14 +1,20 @@ -# Guide to writing application documentation +--- +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_fr) and a button on the application integration level. +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) - + When a link points to a page that is not in the language of the original page, it is customary to add `(en)` (for a link that points to a page in English). + rename the images in the following order:`description_application.ext`. ### General frame application documentation diff --git a/doc_markdown_guide_fr.md b/pages/06.contribute/05.write_documentation/02.markdown_guide/doc_markdown_guide.fr.md similarity index 91% rename from doc_markdown_guide_fr.md rename to pages/06.contribute/05.write_documentation/02.markdown_guide/doc_markdown_guide.fr.md index 1483e0df..7ea595fb 100644 --- a/doc_markdown_guide_fr.md +++ b/pages/06.contribute/05.write_documentation/02.markdown_guide/doc_markdown_guide.fr.md @@ -1,4 +1,11 @@ -# Guide Markdown +--- +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. @@ -53,14 +60,16 @@ Pour créer un lien vers un site hors de la documentation de YunoHost : s'affichera comme tel : [Texte à afficher](https://lelien.tld) -C'est identique pour les pages de la documentation, excepté que le lien est interne. Il renvoie au fichier du wiki, sans extension de langue et de fichier (le `_fr.md`) : +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. +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 : @@ -87,16 +96,16 @@ Il ne reste plus qu'à désigner l'ancre au texte que l'on souhaite rendre inter 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](/images/logo.png) +![Logo YunoHost](image://logo.png) ``` -![Logo YunoHost](/images/logo.png) +![Logo YunoHost](image://logo.png) Il est possible de faire un lien avec une image, exemple : ```markdown -[![Logo YunoHost](/images/logo.png)](/write_documentation) +[![Logo YunoHost](image://logo.png)](/write_documentation) ``` -[![Logo YunoHost](/images/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é. @@ -210,14 +219,14 @@ Pour créer un tableau, il faut utiliser la barre verticale `|` (appelé 'pipe') | **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](/images/cd.jpg) | [Ou un lien](/contributordoc) | +| 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](/images/cd.jpg) | [Ou un lien](/contributordoc) | +| D'autres lignes | |![une image](image://cd.jpg) | [Ou un lien](/contributordoc) | ## Bloc de codes @@ -248,4 +257,4 @@ Minimum trois accents graves en ouverture et fermeture de bloc et deux accents g ## 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 [irc.freenode.net](https://irc.freenode.net). +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/doc_markdown_guide.md b/pages/06.contribute/05.write_documentation/02.markdown_guide/doc_markdown_guide.md similarity index 91% rename from doc_markdown_guide.md rename to pages/06.contribute/05.write_documentation/02.markdown_guide/doc_markdown_guide.md index bf1b6933..fdec1bf2 100644 --- a/doc_markdown_guide.md +++ b/pages/06.contribute/05.write_documentation/02.markdown_guide/doc_markdown_guide.md @@ -1,4 +1,11 @@ -# Guide Markdown +--- +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. @@ -53,14 +60,16 @@ To create a link to a site outside of the YunoHost documentation: 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. It refers to the wiki file, without language and file extension (the `_fr.md`): +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. +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 : @@ -87,16 +96,16 @@ All that remains is to designate the anchor to the text you want to make interac 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](/images/logo.png) +![YunoHost Logo](image://logo.png) ``` -![YunoHost Logo](/images/logo.png) +![YunoHost Logo](image://logo.png) It is possible to make a link with an image, for example: ```markdown -[![YunoHost Logo](/images/logo.png)](/write_documentation) +[![YunoHost Logo](image://logo.png)](/write_documentation) ``` -[![YunoHost Logo](/images/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. @@ -210,14 +219,14 @@ To create an array, use the vertical bar `|` and dashes `--`. It is mandatory to | **One table** | One column | One second | As many as you want | |:-------------:|:----------:|:----------:|:-------------------:| | | And formatted line | | And bold text | | Or *italic* | -| More lines | |![An image](/images/cd.jpg) | [Or a link](/contributordoc) | +| 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](/images/cd.jpg) | [Or a link](/contributordoc) | +| More lines | |![An image](image://cd.jpg) | [Or a link](/contributordoc) | ## Code block @@ -249,4 +258,4 @@ At least three low pitched accents at the opening and closing of the block and t ## 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 [irc.freenode.net](https://irc.freenode.net). +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/doc_use_git_fr.md b/pages/06.contribute/05.write_documentation/03.git/doc_use_git.fr.md similarity index 95% rename from doc_use_git_fr.md rename to pages/06.contribute/05.write_documentation/03.git/doc_use_git.fr.md index 30336f45..ddcf1516 100644 --- a/doc_use_git_fr.md +++ b/pages/06.contribute/05.write_documentation/03.git/doc_use_git.fr.md @@ -1,4 +1,11 @@ -# Propulser une contribution avec Git +--- +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. @@ -11,10 +18,10 @@ Vous n’êtes pas obligé·e de donner vos noms et prénoms, vous pouvez utilis 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](/images/dug_fork.png) +![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](/images/dug_fork_source.png) +![Capture d’écran titre et sous-titre du dépot](image://github_fork_title.png) > **Point de vigilance !** diff --git a/doc_use_git.md b/pages/06.contribute/05.write_documentation/03.git/doc_use_git.md similarity index 94% rename from doc_use_git.md rename to pages/06.contribute/05.write_documentation/03.git/doc_use_git.md index 8fb30563..7726cfa7 100644 --- a/doc_use_git.md +++ b/pages/06.contribute/05.write_documentation/03.git/doc_use_git.md @@ -1,4 +1,11 @@ -# Propel a contribution with GitHub +--- +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. @@ -10,9 +17,9 @@ You don't have to give your first and last names, you can use a nickname (when y 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](/images/dug_fork.png) +![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](/images/dug_fork_source.png) +![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. 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/packaging_apps_fr.md b/pages/06.contribute/10.packaging_apps/02.technical_intro/packaging_apps.fr.md similarity index 67% rename from packaging_apps_fr.md rename to pages/06.contribute/10.packaging_apps/02.technical_intro/packaging_apps.fr.md index fadc8b75..9f8a1d75 100644 --- a/packaging_apps_fr.md +++ b/pages/06.contribute/10.packaging_apps/02.technical_intro/packaging_apps.fr.md @@ -1,7 +1,18 @@ -# Packaging d’applications +--- +title: Packaging d'applications +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps' +--- + +![](image://yunohost_package.png?resize=100) Ce document a pour but de vous apprendre à packager une application pour YunoHost. +! This page is outdated and should be reworked + ### Prérequis Pour packager une application, voici les prérequis : * Un compte sur un serveur Git comme [GitHub](https://github.com/) pour pouvoir ensuite publier l’application ; @@ -20,60 +31,30 @@ Un paquet YunoHost est composé : * d’un fichier `LICENSE` contenant la licence du paquet * d’une page de présentation du paquet contenu dans un fichier `README.md` -Paquet de base n’hésitez pas à vous en servir comme base de travail. +[div class="btn btn-lg btn-default"] [Paquet de base](https://github.com/YunoHost/example_ynh) [/div] n’hésitez pas à vous en servir comme base de travail. ## Manifeste -Manifeste +[div class="btn btn-lg btn-default"] [Manifeste](/packaging_apps_manifest) [/div] ## Les scripts -Scripts +[div class="btn btn-lg btn-default"] [Scripts](/packaging_apps_scripts) [/div] ### Architecture et arguments Comme les instances de YunoHost possèdent une architecture unifiée, vous serez capable de deviner la plupart des réglages nécessaires. Mais si vous avez besoin de réglages spécifiques, comme le nom de domaine ou un chemin web pour configurer l’application, vous devrez les demander aux administrateurs lors de l’installation (voir la section `arguments` dans le § **Manifeste** ci-dessus). -Gestion des arguments +[div class="btn btn-lg btn-default"] [Gestion des arguments](/packaging_apps_arguments_management) [/div] ### Configuration NGINX -Configuration NGINX +[div class="btn btn-lg btn-default"] [Configuration NGINX](/packaging_apps_nginx_conf) [/div] ### Multi-instance -Multi-instance +[div class="btn btn-lg btn-default"] [Multi-instance](/packaging_apps_multiinstance) [/div] ### Hooks -Hooks +[div class="btn btn-lg btn-default"] [Hooks](/packaging_apps_hooks) [/div] ### Commandes pratiques -Commandes pratiques - -### Référencement des logs -Dans de nombreuses situations, vous pouvez vouloir indexer un fichier de log pour qu'il soit affiché dans la webadmin. Pour indexer un log, il faut créer un fichier d'indexation dans `/var/log/yunohost/categories/app/APPNAME.yml`. - -Il est possible de spécifier la date de début en commençant le nom de fichier par la date `YYYYMMDD-HHMMSS`. - -Exemple de fichier de log d'indexation : -```bash -log_path: /chemin/vers/le/fichier.log -``` - -Il est possible d'afficher des infos complémentaires, la variable env sera affichée dans la partie "Contexte" : -```bash -extra: - env: - args1: value1 - args2: value2 - args3: value3 -``` - -Il est possible de rattacher le log à une application précise et/ou un service, un nom de domaine, une personne : -```bash -related_to: - - ['app', 'APPNAME'] - - ['service', 'SERVICE1'] - - ['service', 'SERVICE2'] - - ['domain', 'DOMAIN.TLD'] -``` - -Ces informations seront utilisées pour permettre de filtrer les logs en relation avec une de ces entités application, service, domaine, personne. +[div class="btn btn-lg btn-default"] [Commandes pratiques](/packaging_apps_helpers) [/div] ### Améliorer la qualité du paquet d’installation @@ -89,7 +70,7 @@ Vous trouverez ci-dessous une liste des points à vérifier concernant la qualit Pour mesurer la qualité d'un paquet, celui-ci obtiendra un [niveau](/packaging_apps_levels), déterminé en fonction de divers critères d'installation et selon le respect des [règles de packaging](/packaging_apps_guidelines). ### Script de vérification du paquet -Vérificateur de paquets +[div class="btn btn-lg btn-default"] [Vérificateur de paquets](https://github.com/YunoHost/package_checker) [/div] Il s’agit d’un script Python qui vérifie : * que le paquet est à jour concernant les dernières spécifications @@ -100,11 +81,11 @@ Il s’agit d’un script Python qui vérifie : ### Intégration continue Un serveur d'intégration continue est a disposition des packagers désirant tester leurs applications. -Intégration continue +[div class="btn btn-lg btn-default"] [Intégration continue](packaging_apps_ci) [/div] ### Publiez et demandez des tests de votre application -* Demandez des tests et des retours sur votre application en publiant un [post sur le Forum](https://forum.yunohost.org/) dans la [catégorie `App integration`](https://forum.yunohost.org/c/app-integration). +* Demandez des tests et des retours sur votre application en publiant un [post sur le Forum](https://forum.yunohost.org/) dans la [catégorie `Discussion > Apps`](https://forum.yunohost.org/c/discuss/discuss-apps/). * Si votre paquet et l'application qu'il contient sont sous licence libre, faites une demande d’ajout de votre application dans le [dépôt des applications](https://github.com/YunoHost/apps) (voir aussi [la liste des apps](/apps)). Vous pouvez ajouter une application même si celle-ci n'est pour le moment pas fonctionelle : l'état d'avancement peut être `notworking`, `inprogress` ou `working`. diff --git a/packaging_apps.md b/pages/06.contribute/10.packaging_apps/02.technical_intro/packaging_apps.md similarity index 71% rename from packaging_apps.md rename to pages/06.contribute/10.packaging_apps/02.technical_intro/packaging_apps.md index c3ccec1c..33da1b70 100644 --- a/packaging_apps.md +++ b/pages/06.contribute/10.packaging_apps/02.technical_intro/packaging_apps.md @@ -1,7 +1,18 @@ -# App packaging +--- +title: App packaging +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps' +--- + +![](image://yunohost_package.png?resize=100) The purpose of this document is to teach you how to package an application for YunoHost. +! This page is outdated and should be reworked + ### Requirements To package an application, here are the requirements: * An account on a Git server (e.g. [GitHub](https://github.com/)) to publish the application; @@ -17,25 +28,25 @@ A YunoHost package is composed of: * A `LICENSE` file containing the license of the package * A presentation page of your package in a `README.md` file - A basic package +[div class="btn btn-lg btn-default"] [ A basic package](https://github.com/YunoHost/example_ynh) [/div] feel free to use it as a framework. ## Manifest -Manifest +[div class="btn btn-lg btn-default"] [Manifest](/packaging_apps_manifest) [/div] ## Scripts -Scripts +[div class="btn btn-lg btn-default"] [Scripts](/packaging_apps_scripts) [/div] ### Architecture and arguments Since YunoHost has a unified architecture, you will be able to guess most of the settings you need. But if you need variable ones, like the domain or web path, you will have to ask the administrator at installation (see `arguments` section in the manifest above). -Arguments management +[div class="btn btn-lg btn-default"] [Arguments management](/packaging_apps_arguments_management) [/div] ### NGINX configuration -NGINX configuration +[div class="btn btn-lg btn-default"] [NGINX configuration](/packaging_apps_nginx_conf) [/div] ### Multi-instance -Multi-instance +[div class="btn btn-lg btn-default"] [Multi-instance](/packaging_apps_multiinstance) [/div] ### Hooks YunoHost provides a hook system, which is accessible via the packager's script callbacks in command line. @@ -46,38 +57,7 @@ The scripts have to be placed in the `hooks` repository at the root of the YunoH Take a look at the [Nextcloud package](https://github.com/YunoHost-Apps/nextcloud_ynh/) for a working example. ### Helpers -Helpers - -### Registering a log file - -In a lot of case, you might want to register a log file created by your app, to make it available in the webadmin. To register a log, you can create a reference file `/var/log/yunohost/categories/app/APPNAME.yml`. - -You can specify a start date by starting the file name with the date formatted as `YYYYMMDD-HHMMSS`. - -Example of yml metadata log file: -```bash -log_path: /path/to/your/log/file.log -``` - -If you want display some context info, you can add: -```bash -extra: - env: - args1: value1 - args2: value2 - args3: value3 -``` - -You can attach the log to an app, domain, service or user like this : -```bash -related_to: - - ['app', 'APPNAME'] - - ['service', 'SERVICE1'] - - ['service', 'SERVICE2'] - - ['domain', 'DOMAIN.TLD'] -``` - -This will be used to filter logs and display all log related to an entity like a user, a domain, an app or a service. +[div class="btn btn-lg btn-default"] [Helpers](/packaging_apps_helpers) [/div] ### Test it! In order to test your package, you can execute your script standalone as `admin` (do not forget to append required arguments): @@ -104,10 +84,10 @@ Here is a list of best practices for application install scripts: * scripts should be tested on Debian Buster 32 bits, 64 bits and ARM architectures; * backup and restore scripts should be present and functional. -To be define the quality of a package, it'll obtained a [level](/packaging_apps_levels), determined according to somes criteria of installation and according to respect to [package guidelines](packaging_apps_guidelines). +To be define the quality of a package, it'll obtained a [level](/packaging_apps_levels), determined according to somes criteria of installation and according to respect to [package guidelines](/packaging_apps_guidelines). ### Package script checker -Package checker +[div class="btn btn-lg btn-default"] [Package checker](https://github.com/YunoHost/package_checker) [/div] This Python script checks: * that the package is up to date wich last specifications @@ -118,11 +98,11 @@ This Python script checks: ### Continuous integration A continuous integration server is available for packagers who want to test their apps. -Continuous integration +[div class="btn btn-lg btn-default"] [Continuous integration](packaging_apps_ci) [/div] ### Publish and ask for testing your application -* Publishing a [post on the Forum](https://forum.yunohost.org/) with the [`App integration` category](https://forum.yunohost.org/c/app-integration), to ask for testing and feedback on your application. +* Publishing a [post on the Forum](https://forum.yunohost.org/) in the [`Discuss > Apps` category](https://forum.yunohost.org/c/discuss/discuss-apps/), to ask for testing and feedback on your application. * If your application is released under a free software license, you may ask the YunoHost app team to integrate your application to the [app repository](https://github.com/YunoHost/apps) (c.f. also the [app list](/apps)). You can add your application even if it is not stable or working yet : the current state can be specified to `notworking`, `inprogress`, or `working`. diff --git a/packaging_apps_git_fr.md b/pages/06.contribute/10.packaging_apps/03.git/packaging_apps_git.fr.md similarity index 97% rename from packaging_apps_git_fr.md rename to pages/06.contribute/10.packaging_apps/03.git/packaging_apps_git.fr.md index 599c4078..c2ed3187 100644 --- a/packaging_apps_git_fr.md +++ b/pages/06.contribute/10.packaging_apps/03.git/packaging_apps_git.fr.md @@ -1,4 +1,11 @@ -# Comment utiliser Git pour packager les applications +--- +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. @@ -23,14 +30,14 @@ La branche master est la branche qui contient la version de l'application que le 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. @@ -39,7 +46,7 @@ Si vous avez la permission d'écrire, vous allez simplement modifier le fichier, 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. @@ -67,7 +74,7 @@ Il se peut que vous deviez tout de même forker sur votre propre compte pour pou 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. @@ -116,7 +123,7 @@ Dans le contexte d'un nouveau package, vous devrez également créer un dépôt 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. diff --git a/packaging_apps_git.md b/pages/06.contribute/10.packaging_apps/03.git/packaging_apps_git.md similarity index 97% rename from packaging_apps_git.md rename to pages/06.contribute/10.packaging_apps/03.git/packaging_apps_git.md index 6093cef1..58062371 100644 --- a/packaging_apps_git.md +++ b/pages/06.contribute/10.packaging_apps/03.git/packaging_apps_git.md @@ -1,4 +1,11 @@ -# How to use Git to package apps +--- +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. @@ -23,14 +30,14 @@ The master branch is the branch that contains the version of the app users will 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. @@ -39,7 +46,7 @@ If you have the permission to write, you will just edit the file, without forkin 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. @@ -67,7 +74,7 @@ You may still need to fork on your own account to be able to save your modificat 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. @@ -116,7 +123,7 @@ In the context of a new package, you will also need to create a repository on Gi 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. diff --git a/packaging_apps_virtualbox_fr.md b/pages/06.contribute/10.packaging_apps/04.virtualbox/packaging_apps_virtualbox.fr.md similarity index 93% rename from packaging_apps_virtualbox_fr.md rename to pages/06.contribute/10.packaging_apps/04.virtualbox/packaging_apps_virtualbox.fr.md index b2ef0158..7911e92d 100644 --- a/packaging_apps_virtualbox_fr.md +++ b/pages/06.contribute/10.packaging_apps/04.virtualbox/packaging_apps_virtualbox.fr.md @@ -1,4 +1,11 @@ -# Créer un environnement de développement avec VirtualBox +--- +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. @@ -40,14 +47,14 @@ Avant de commencer à jouer avec la machine virtuelle, il convient de faire un p 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. @@ -57,14 +64,14 @@ Nous disposerons ainsi d'un serveur YunoHost vierge de toute installation d'appl 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. @@ -87,6 +94,6 @@ ssh admin@11.22.33.44 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/packaging_apps_virtualbox.md b/pages/06.contribute/10.packaging_apps/04.virtualbox/packaging_apps_virtualbox.md similarity index 92% rename from packaging_apps_virtualbox.md rename to pages/06.contribute/10.packaging_apps/04.virtualbox/packaging_apps_virtualbox.md index 3516b4b8..0a3b6c9a 100644 --- a/packaging_apps_virtualbox.md +++ b/pages/06.contribute/10.packaging_apps/04.virtualbox/packaging_apps_virtualbox.md @@ -1,4 +1,11 @@ -# Create a development environment with VirtualBox +--- +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. @@ -40,14 +47,14 @@ Before starting to play with the virtual machine, now is a good time to take a f 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. @@ -57,14 +64,14 @@ For our next test, we will then be back to a freshly installed YunoHost serveur, 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. @@ -86,6 +93,6 @@ 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/packaging_apps_manifest_fr.md b/pages/06.contribute/10.packaging_apps/05.manifest/packaging_apps_manifest.fr.md similarity index 90% rename from packaging_apps_manifest_fr.md rename to pages/06.contribute/10.packaging_apps/05.manifest/packaging_apps_manifest.fr.md index 50a9c611..f76bfe74 100644 --- a/packaging_apps_manifest_fr.md +++ b/pages/06.contribute/10.packaging_apps/05.manifest/packaging_apps_manifest.fr.md @@ -1,4 +1,11 @@ -Packaging d’application +--- +title: Packaging d'application +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_manifest' +--- ## Manifeste Le fichier `manifest.json` définit les constantes de l’application, un ensemble de valeurs dont YunoHost a besoin pour identifier l’application et l’installer correctement. Voici un exemple : @@ -78,9 +85,9 @@ Le fichier `manifest.json` définit les constantes de l’application, un ensemb * **arguments** : * **install** : paramètres à demander à l’administrateur lors de l’installation. * **name** : identifiant du paramètre - * **type** : (optionnel) type de paramètre parmis `domain`, `path`, `user`, `app`, `boolean`, `string` et `password`. Le champ sera caché dans le cas d’un mot de passe. + * **type** : (optionnel) type de paramètre parmi `domain`, `path`, `user`, `app`, `boolean`, `string` et `password`. Le champ sera caché dans le cas d’un mot de passe. * **choices** : (optionnel) restreint les réponses possibles à plusieurs choix. - * **optional** : (optionnel) champs qui indique si ce paramètre est optionnel. Il peut avoir les valeurs `true` ou `false`. + * **optional** : (optionnel) champ qui indique si ce paramètre est optionnel. Il peut avoir les valeurs `true` ou `false`. * **ask** : question posée (au minimum en anglais – `en`) que vous pouvez traduire dans plusieurs langues. * **example** : (optionnel) valeur d’exemple pour aider l’administrateur à remplir le formulaire d’installation. * **default** : (optionnel) valeur par défaut. diff --git a/packaging_apps_manifest.md b/pages/06.contribute/10.packaging_apps/05.manifest/packaging_apps_manifest.md similarity index 92% rename from packaging_apps_manifest.md rename to pages/06.contribute/10.packaging_apps/05.manifest/packaging_apps_manifest.md index f4407aa1..88a18683 100644 --- a/packaging_apps_manifest.md +++ b/pages/06.contribute/10.packaging_apps/05.manifest/packaging_apps_manifest.md @@ -1,4 +1,11 @@ -Application packaging +--- +title: Application packaging +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_manifest' +--- ## Manifest The `manifest.json` file defines the app's constants, a bunch of values that YunoHost needs to identify the app and install it correctly. It looks like this: @@ -57,7 +64,7 @@ The `manifest.json` file defines the app's constants, a bunch of values that Yun * **id**: ID of the app. You have to ensure that this ID is unique before submit an app integration request. See [packaging_apps_guidelines.md#yep-11](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines.md#yep-11) for valid rules. -- **packaging_format**: package version. Actual version is **1**. This key has been set up to make independant packaging evolution versions from YunoHost versions evolution. +- **packaging_format**: package version. Current version is **1**. This key has been set up to make independant packaging evolution versions from YunoHost versions evolution. * **description**: complete app description. You can make it as detailed as you feel it should be. Only `en` is required right now, but you can translate the description by prepending the locale prefix. diff --git a/packaging_apps_scripts_fr.md b/pages/06.contribute/10.packaging_apps/06.scripts/packaging_apps_scripts.fr.md similarity index 88% rename from packaging_apps_scripts_fr.md rename to pages/06.contribute/10.packaging_apps/06.scripts/packaging_apps_scripts.fr.md index 8854f287..7a37129a 100644 --- a/packaging_apps_scripts_fr.md +++ b/pages/06.contribute/10.packaging_apps/06.scripts/packaging_apps_scripts.fr.md @@ -1,6 +1,11 @@ -Packaging d’application - -## Les scripts +--- +title: Scripts +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_scripts' +--- Un paquet YunoHost doit contenir cinq scripts Shell : `install`, `remove`, `upgrade`, `backup` et `restore`. Un 6ème script `change_url` peut aussi être ajouté de façon optionnelle. Ces scripts seront exécutés en tant que `root` sur les serveurs YunoHost. @@ -17,15 +22,15 @@ Il est possible d'utiliser des helpers et d'importer une librairie de fonction p Cette variable contient le chemin du répertoire de travail courant du contexte d'exécution du script. Elle peut être utile pour retrouver le chemin initial si on s'est déplacé pendant l'exécution du script. Elle est utilisée par certains helpers pour être sûr d'utiliser le bon. #### YNH_APP_ID -Contient l'identifiant de l'application sans le numéro d'instance +Contient l'identifiant de l'application sans le numéro d'instance. Exemple: strut #### YNH_APP_INSTANCE_NAME -Contient le nom d'instance qui sera utilisé dans de nombreuses situation pour pouvoir gérer l'installation multiple d'une même app. +Contient le nom d'instance qui sera utilisé dans de nombreuses situations pour pouvoir gérer l'installation multiple d'une même app. Exemple: strut__3 #### YNH_APP_INSTANCE_NUMBER -Contient le numéro de l'instance. Attention il ne s'agit pas forcément du nombre d'instance toujours installée, car une ancienne application peut avoir été désinstallée. +Contient le numéro de l'instance. Attention il ne s'agit pas forcément du nombre d'instances toujours installées, car une ancienne application peut avoir été désinstallée. Exemple: 3 @@ -47,7 +52,7 @@ Par exemple, si dans le manifest nous avons une question de cette forme } ``` -Le nom de la question `domain` donc dans le script on peut accéder à cette variable via $YNH_APP_ARG_DOMAIN. L'usage est de créer une variable plus courte comme ceci: +Le nom de la question `domain` donc dans le script on peut accéder à cette variable via $YNH_APP_ARG_DOMAIN. L'usage est de créer une variable plus courte comme ceci : ```bash domain=$YNH_APP_ARG_DOMAIN diff --git a/packaging_apps_scripts.md b/pages/06.contribute/10.packaging_apps/06.scripts/packaging_apps_scripts.md similarity index 95% rename from packaging_apps_scripts.md rename to pages/06.contribute/10.packaging_apps/06.scripts/packaging_apps_scripts.md index 6e4f6f88..28862b55 100644 --- a/packaging_apps_scripts.md +++ b/pages/06.contribute/10.packaging_apps/06.scripts/packaging_apps_scripts.md @@ -1,6 +1,11 @@ -Application packaging - -## Scripts +--- +title: Scripts +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_scripts' +--- For now, a YunoHost package must contain five Shell scripts: `install`, `remove`, `upgrade`, `backup` and `restore`. A 6th script `change_url` can also be added optionally. These scripts will be executed as `root` on the YunoHost instances. diff --git a/packaging_apps_arguments_format.md b/pages/06.contribute/10.packaging_apps/07.arguments/01.arguments_format/packaging_apps_arguments_format.md similarity index 97% rename from packaging_apps_arguments_format.md rename to pages/06.contribute/10.packaging_apps/07.arguments/01.arguments_format/packaging_apps_arguments_format.md index 7663d2a9..010748c8 100644 --- a/packaging_apps_arguments_format.md +++ b/pages/06.contribute/10.packaging_apps/07.arguments/01.arguments_format/packaging_apps_arguments_format.md @@ -1,4 +1,11 @@ -# YunoHost Arguments Format +--- +title: YunoHost Arguments Format +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_arguments_format' +--- In YunoHost application developpement there are several places where you end up writting questions for your user like in the `manifest.json/toml`, the diff --git a/packaging_apps_arguments_management_fr.md b/pages/06.contribute/10.packaging_apps/07.arguments/packaging_apps_arguments_management.fr.md similarity index 88% rename from packaging_apps_arguments_management_fr.md rename to pages/06.contribute/10.packaging_apps/07.arguments/packaging_apps_arguments_management.fr.md index 6694ac94..729ea1b8 100644 --- a/packaging_apps_arguments_management_fr.md +++ b/pages/06.contribute/10.packaging_apps/07.arguments/packaging_apps_arguments_management.fr.md @@ -1,6 +1,12 @@ -Packaging d’application +--- +title: Gestion des arguments +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_arguments_management' +--- -## Gestion des arguments #### Récupérer les arguments du manifeste dans le script d’installation Les arguments sont passés au script d’installation dans l’ordre du manifeste. Par exemple pour Roundcube, les arguments `domain` et `path` seront respectivement récupérés via les variables d’environnement ou les paramètres `$1` et `$2` dans le script d’installation. diff --git a/packaging_apps_arguments_management.md b/pages/06.contribute/10.packaging_apps/07.arguments/packaging_apps_arguments_management.md similarity index 86% rename from packaging_apps_arguments_management.md rename to pages/06.contribute/10.packaging_apps/07.arguments/packaging_apps_arguments_management.md index 130e3de4..03300782 100644 --- a/packaging_apps_arguments_management.md +++ b/pages/06.contribute/10.packaging_apps/07.arguments/packaging_apps_arguments_management.md @@ -1,6 +1,12 @@ -Application packaging +--- +title: Arguments management +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_arguments_management' +--- -## Arguments management #### Retrieve arguments in the install script from manifest Arguments are given to the install script from the manifest in it's order. For instance, for Roundcube, `domain` and `path` arguments will respectively be retreived from environment variables or from `$1` and `$2` parameters in the install script. diff --git a/packaging_apps_permissions.md b/pages/06.contribute/10.packaging_apps/08.groups_permissions/packaging_apps_permissions.md similarity index 95% rename from packaging_apps_permissions.md rename to pages/06.contribute/10.packaging_apps/08.groups_permissions/packaging_apps_permissions.md index 0a36b39e..16779476 100644 --- a/packaging_apps_permissions.md +++ b/pages/06.contribute/10.packaging_apps/08.groups_permissions/packaging_apps_permissions.md @@ -1,4 +1,11 @@ -# User groups and permissions +--- +title: User groups and permissions +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_permissions' +--- Installing an app creates the permission `app.main` with `all_users` allowed by default. @@ -48,8 +55,8 @@ fi #### Additional features from 4.1 - Label customization : this is the name displayed to end users in the user portal. You can provide a default label (for example app.admin maybe be labelled 'Admin interface'). The label may be changed later by the admin after installation. -- Enabling/disabling tile : this toggles wether or not an app is shown in the user portal (if the user has the corresponding permission). The corresponding option is called `show_tile` which may be `True` or `False`. A single app may have multiple tiles in the SSO. The url of each tile corresponds to the `url` parameter of the permission. -- Multiple url support: a permission may have additional urls associated to it. This give the possiblity to protect many url with the same permission - in particular for tricky use case (for example several pieces of admin interfaces spread over different subpaths). +- Enabling/disabling tile : this toggles wether or not an app is shown in the user portal (if the user has the corresponding permission). The corresponding option is called `show_tile` which may be `True` or `False`. A single app may have multiple tiles in the SSO. The URL of each tile corresponds to the `url` parameter of the permission. +- Multiple URL support: a permission may have additional urls associated to it. This give the possiblity to protect many url with the same permission - in particular for tricky use case (for example several pieces of admin interfaces spread over different subpaths). - Protecting permission: As a packager, you may choose to "protect" a permission if you believe that it's not relevant for the admin to add/remove this permission to/from the visitors group. For example, this is the case for the API permission of Nextcloud, which in the vast majority of cases should be kept publicly because mobile client won't go through the SSO. Note that when using the helper `ynh_permission_update`, it's still possible to add/remove the `visitor` group of this permission. - Disabling auth header: some app authentification mecanism do not appreciate that SSOwat injects the Authorization header (which is an essential mecanism for single sign-on). You can now choose to disable the auth header injection from SSOwat to fix this (instead of the previous hack of using `skipped_uris`) diff --git a/packaging_apps_nginx_conf_fr.md b/pages/06.contribute/10.packaging_apps/09.nginx/packaging_apps_nginx_conf.fr.md similarity index 69% rename from packaging_apps_nginx_conf_fr.md rename to pages/06.contribute/10.packaging_apps/09.nginx/packaging_apps_nginx_conf.fr.md index 0061701e..14dc2e5f 100644 --- a/packaging_apps_nginx_conf_fr.md +++ b/pages/06.contribute/10.packaging_apps/09.nginx/packaging_apps_nginx_conf.fr.md @@ -1,4 +1,11 @@ -# Configuration NGINX +--- +title: Configuration NGINX +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_nginx_conf' +--- Ce tutoriel a pour but d’aider à la mise en place d’une configuration NGINX pour le packaging d’application. @@ -7,24 +14,24 @@ La configuration doit être mise dans `conf/nginx.conf`. Il s’agira d’utilis * **FastCGI** est utilisé dans les applications PHP : ```nginx location YNH_EXAMPLE_PATH { - alias YNH_WWW_PATH ; - if ($scheme = http) { - rewrite ^ https://$server_name$request_uri? permanent; - } - index index.php; - try_files $uri $uri/ index.php; - location ~ [^/]\.php(/|$) { - fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php5-fpm.sock; - fastcgi_index index.php; - include fastcgi_params; - fastcgi_param REMOTE_USER $remote_user; - fastcgi_param PATH_INFO $fastcgi_path_info; - fastcgi_param SCRIPT_FILENAME $request_filename; - } + alias YNH_WWW_PATH ; + if ($scheme = http) { + rewrite ^ https://$server_name$request_uri? permanent; + } + index index.php; + try_files $uri $uri/ index.php; + location ~ [^/]\.php(/|$) { + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + fastcgi_pass unix:/var/run/php5-fpm.sock; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param REMOTE_USER $remote_user; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_param SCRIPT_FILENAME $request_filename; + } - # Include SSOWAT user panel. - include conf.d/yunohost_panel.conf.inc; + # Include SSOWAT user panel. + include conf.d/yunohost_panel.conf.inc; } ``` diff --git a/packaging_apps_nginx_conf.md b/pages/06.contribute/10.packaging_apps/09.nginx/packaging_apps_nginx_conf.md similarity index 66% rename from packaging_apps_nginx_conf.md rename to pages/06.contribute/10.packaging_apps/09.nginx/packaging_apps_nginx_conf.md index 2d50ee27..f6999fb6 100644 --- a/packaging_apps_nginx_conf.md +++ b/pages/06.contribute/10.packaging_apps/09.nginx/packaging_apps_nginx_conf.md @@ -1,4 +1,11 @@ -# NGINX configuration +--- +title: NGINX configuration +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_nginx_conf' +--- This tutorial aim to help setup NGINX configuration for application packaging. @@ -7,24 +14,24 @@ Configuration must be in `conf/nginx.conf`. We must use **FastCGI** or a **proxy * **FastCGI** is used with PHP applications: ```nginx location YNH_EXAMPLE_PATH { - alias YNH_WWW_PATH ; - if ($scheme = http) { - rewrite ^ https://$server_name$request_uri? permanent; - } - index index.php; - try_files $uri $uri/ index.php; - location ~ [^/]\.php(/|$) { - fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php5-fpm.sock; - fastcgi_index index.php; - include fastcgi_params; - fastcgi_param REMOTE_USER $remote_user; - fastcgi_param PATH_INFO $fastcgi_path_info; - fastcgi_param SCRIPT_FILENAME $request_filename; - } + alias YNH_WWW_PATH ; + if ($scheme = http) { + rewrite ^ https://$server_name$request_uri? permanent; + } + index index.php; + try_files $uri $uri/ index.php; + location ~ [^/]\.php(/|$) { + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + fastcgi_pass unix:/var/run/php5-fpm.sock; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param REMOTE_USER $remote_user; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_param SCRIPT_FILENAME $request_filename; + } - # Include SSOWAT user panel. - include conf.d/yunohost_panel.conf.inc; + # Include SSOWAT user panel. + include conf.d/yunohost_panel.conf.inc; } ``` diff --git a/packaging_apps_multiinstance_fr.md b/pages/06.contribute/10.packaging_apps/10.multi_instance/packaging_apps_multiinstance.fr.md similarity index 89% rename from packaging_apps_multiinstance_fr.md rename to pages/06.contribute/10.packaging_apps/10.multi_instance/packaging_apps_multiinstance.fr.md index b6c72f1d..df26be28 100644 --- a/packaging_apps_multiinstance_fr.md +++ b/pages/06.contribute/10.packaging_apps/10.multi_instance/packaging_apps_multiinstance.fr.md @@ -1,6 +1,12 @@ -Packaging d’application +--- +title: Multi-instances +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_multiinstance' +--- -### Multi-instances Le multi-instance est la capacité d’une application à être installée plusieurs fois. #### Scripts diff --git a/packaging_apps_multiinstance.md b/pages/06.contribute/10.packaging_apps/10.multi_instance/packaging_apps_multiinstance.md similarity index 88% rename from packaging_apps_multiinstance.md rename to pages/06.contribute/10.packaging_apps/10.multi_instance/packaging_apps_multiinstance.md index 55d2433a..a9318a6a 100644 --- a/packaging_apps_multiinstance.md +++ b/pages/06.contribute/10.packaging_apps/10.multi_instance/packaging_apps_multiinstance.md @@ -1,6 +1,12 @@ -Application packaging +--- +title: Multi-instances +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_multiinstance' +--- -### Multi-instance Multi-instance is application capacity to be installed several times. #### Scripts diff --git a/pages/06.contribute/10.packaging_apps/11.helpers/packaging_apps_helpers.md b/pages/06.contribute/10.packaging_apps/11.helpers/packaging_apps_helpers.md new file mode 100644 index 00000000..1b8996be --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/11.helpers/packaging_apps_helpers.md @@ -0,0 +1,2574 @@ +--- +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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/doc/generate_helper_doc.py) on 10/17/2022 (YunoHost version 11.0.10) + + +## 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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/apps#L65) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/apt#L336) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/apt#L355) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/apt#L383) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/backup#L350) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/backup#L381) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/backup#L416) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/backup#L464) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/nginx#L41) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/nodejs#L74) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/nodejs#L114) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/nodejs#L191) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/permission#L379) +[/details] +---------------- + + +## PHP + +#### ynh_add_fpm_config +[details summary="Create a dedicated PHP-FPM config" class="helper-card-subtitle text-muted"] + +**Usage**: `1: ynh_add_fpm_config [--phpversion=7.X] [--use_template] [--package=packages] [--dedicated_service] +2: ynh_add_fpm_config [--phpversion=7.X] --usage=usage --footprint=footprint [--package=packages] [--dedicated_service] +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. +Or specify exactly the footprint, the load of the service as MB by pool instead of having a standard value. +To have this value, use the following command and stress the service. +watch -n0.5 ps -o user,cmd,%cpu,rss -u APP` + +**Arguments**: +- `-v`, `--phpversion=`: Version of PHP to use. +- `-t`, `--use_template`: Use this helper in template mode. +- `-p`, `--package=`: Additionnal PHP packages to install +- `-d`, `--dedicated_service`: Use a dedicated PHP-FPM service instead of the common one. +- `-v`, `--phpversion=`: Version of PHP to use. +- `-f`, `--footprint=`: Memory footprint of the service (low/medium/high). +- `-u`, `--usage=`: Expected usage of the service (low/medium/high). +- `-p`, `--package=`: Additionnal PHP packages to install for a specific version of PHP +- `-d`, `--dedicated_service`: Use a dedicated PHP-FPM service instead of the common one. + +**Details**:
+----------------------------------------------------------------------------- + +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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/php#L59) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/php#L250) +[/details] +---------------- + +#### ynh_composer_exec +[details summary="Execute a command with Composer" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_composer_exec [--phpversion=phpversion] [--workdir=$final_path] --commands="commands"` + +**Arguments**: +- `-v`, `--phpversion`: PHP version to use with composer +- `-w`, `--workdir`: The directory from where the command will be executed. Default $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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/php#L483) +[/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=$final_path] [--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 $final_path. +- `-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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/php#L509) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/postgresql#L228) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/postgresql#L259) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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 : Default : 20 + +**Details**:
+Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/utils#L58) +[/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 `app` +- `-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**:
+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=Control sum +# (Optional) Program to check the integrity (sha256sum, md5sum...). Default: sha256 +SOURCE_SUM_PRG=sha256 +# (Optional) Archive format. Default: tar.gz +SOURCE_FORMAT=tar.gz +# (Optional) Put false if sources are directly in the archive root. Default: true +# Instead of true, SOURCE_IN_SUBDIR could be the number of sub directories to remove. +SOURCE_IN_SUBDIR=false +# (Optionnal) Name of the local archive (offline setup support). Default: ${src_id}.${src_format} +SOURCE_FILENAME=example.tar.gz +# (Optional) If it set as false don't extract the source. Default: true +# (Useful to get a debian package or a python wheel.) +SOURCE_EXTRACT=(true|false) +``` + +The helper will: +- Check if there is a local source archive in `/opt/yunohost-apps-src/$APP_ID/$SOURCE_FILENAME` +- Download `$SOURCE_URL` if there is no local archive +- Check the integrity with `$SOURCE_SUM_PRG -c --status` +- Uncompress the archive to `$dest_dir`. + - If `$SOURCE_IN_SUBDIR` is true, the first level directory of the archive will be removed. + - If `$SOURCE_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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/utils#L103) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/utils#L270) +[/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="$final_path/.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 + __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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/utils#L354) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/utils#L505) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/utils#L582) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/utils#L694) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/utils#L725) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/utils#L759) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/utils#L789) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/utils#L818) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/utils#L843) +[/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/2bf161e5226e7ff6be41d0790417cc1c4b6dfcf2/helpers/utils#L873) +[/details] +---------------- + diff --git a/pages/06.contribute/10.packaging_apps/12.hooks/packaging_apps_hooks.fr.md b/pages/06.contribute/10.packaging_apps/12.hooks/packaging_apps_hooks.fr.md new file mode 100644 index 00000000..87028c7f --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/12.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/12.hooks/packaging_apps_hooks.md b/pages/06.contribute/10.packaging_apps/12.hooks/packaging_apps_hooks.md new file mode 100644 index 00000000..98437061 --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/12.hooks/packaging_apps_hooks.md @@ -0,0 +1,625 @@ +--- +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 +!!! Bellow 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 +``` + +## 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 hooks 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 hooks 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 hooks 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 hooks 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 hooks 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 hooks 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 hooks 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 hooks 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 hooks is run at the end of the command `yunohost domain dns suggest` or equivalent action in webadmin. + +Thanks to this hooks 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 hooks 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 hooks 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 hooks 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 hooks 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 hooks 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 hooks 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 hooks 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 hooks 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 +```bash +#!/bin/bash +iptables -A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT +``` +[/details] + +### conf_regen +[details summary="Change configuration suggested as default config in regen-conf mechanism" class="helper-card-subtitle text-muted"] + +This hooks 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/packaging_apps_actions.md b/pages/06.contribute/10.packaging_apps/14.advanced/01.actions/packaging_apps_actions.md similarity index 96% rename from packaging_apps_actions.md rename to pages/06.contribute/10.packaging_apps/14.advanced/01.actions/packaging_apps_actions.md index e165e031..f3f338d4 100644 --- a/packaging_apps_actions.md +++ b/pages/06.contribute/10.packaging_apps/14.advanced/01.actions/packaging_apps_actions.md @@ -1,4 +1,11 @@ -# Applications Actions +--- +title: Actions +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_actions' +---
For now, all those features are EXPERIMENTAL and aren't ready for production and are probably going to change again, if you @@ -35,7 +42,7 @@ For example those could be: Actions looks like this in the admin interface: -![actions admin screenshot](images/actions_example.png) +![actions admin screenshot](image://actions_example.png) ## How to add actions to your application diff --git a/packaging_apps_config_panel.md b/pages/06.contribute/10.packaging_apps/14.advanced/02.config_panel/packaging_apps_config_panel.md similarity index 97% rename from packaging_apps_config_panel.md rename to pages/06.contribute/10.packaging_apps/14.advanced/02.config_panel/packaging_apps_config_panel.md index b2296e52..b39c03a8 100644 --- a/packaging_apps_config_panel.md +++ b/pages/06.contribute/10.packaging_apps/14.advanced/02.config_panel/packaging_apps_config_panel.md @@ -1,4 +1,11 @@ -# Applications Configuration Panel +--- +title: Configuration panel +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_config_panel' +---
For now, all those features are EXPERIMENTAL and aren't ready for production and are probably going to change again, if you @@ -23,7 +30,7 @@ doable and very worth it if you need it. Here how it looks like in the admin interface: -![actions admin screenshot](images/config_panel_example.png) +![actions admin screenshot](image://config_panel_example.png) ## Usage @@ -97,7 +104,7 @@ name = "stuff" And a real world example with the rendered admin: -![config_panel_toml_example](images/config_panel_toml_example.png) +![config_panel_toml_example](image://config_panel_toml_example.png) As a text format: diff --git a/packaging_apps_advanced.md b/pages/06.contribute/10.packaging_apps/14.advanced/packaging_apps_advanced.md similarity index 75% rename from packaging_apps_advanced.md rename to pages/06.contribute/10.packaging_apps/14.advanced/packaging_apps_advanced.md index a4e8eef8..2ae41820 100644 --- a/packaging_apps_advanced.md +++ b/pages/06.contribute/10.packaging_apps/14.advanced/packaging_apps_advanced.md @@ -1,4 +1,11 @@ -# Advanced features of apps packaging +--- +title: Advanced features of apps packaging +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_advanced' +---
For now, all those features are EXPERIMENTALS and aren't ready for production and are probably going to change again, if you @@ -16,11 +23,11 @@ application, for example that could be: * start a procedure * regenerate a local cache -[Full documentation](packaging_apps_actions) +[Full documentation](/packaging_apps_actions) Example in the admin: -![actions admin screenshot](images/actions_example.png) +![actions admin screenshot](image://actions_example.png) ## Configuration Panel @@ -33,8 +40,8 @@ possible inside the application itself. This is generally also the place where you want to add the option to make an application public or not. -[Full documentation](packaging_apps_config_panel) +[Full documentation](/packaging_apps_config_panel) Example in the admin: -![actions admin screenshot](images/config_panel_example.png) +![actions admin screenshot](image://config_panel_example.png) diff --git a/pages/06.contribute/10.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.fr.md b/pages/06.contribute/10.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.fr.md new file mode 100644 index 00000000..54cc0938 --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.fr.md @@ -0,0 +1,50 @@ +--- +title: Niveaux de qualité des packages d'applications YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_levels' +--- + +Afin de faciliter le packaging d'applications par des étapes successives à atteindre, chaque package est affublé d'un niveau de qualité, de 0 à 9. +Un package doit satisfaire un certain nombre de critères pour atteindre chaque niveau. De plus pour atteindre un niveau, le package doit avoir préalablement atteint le niveau précédent. + +Ce classement des applications par niveaux présente 3 avantages : +- Le packaging d'application est d'autant plus ludique, avec des objectifs clairs à atteindre et des étapes successives. +- Une application correctement packagée est davantage mise en avant qu'une application ne respectant pas les règles de packaging. +- Les utilisateurs peuvent rapidement voir le niveau d'une application et ainsi savoir si le package est de bonne qualité. + +## Résumé des niveaux + +**Niveau 0** +L'application ne fonctionne pas. + +**Niveau 1** +L'application s'installe et se désinstalle correctement dans certains cas. + +**Niveau 2** +L'application s'installe et se désinstalle correctement dans toutes les configurations communes. + +**Niveau 3** +L'application peut être mise à jour. + +**Niveau 4** +L'application peut-être sauvegardée et restaurée. + +**Niveau 5** +Le code du package d'application respecte certaines règles de syntaxe. + +**Niveau 6** +Le package d'application est dans l'organisation YunoHost-Apps. + +**Niveau 7** +Le package d'application passe avec succès l'ensemble des tests d'intégrité. + +**Niveau 8** +Le package d'application respecte toute les recommendations de packaging d'apps. C'est une app de très bonne qualité. + +**Niveau 9** +Le package d'application respecte des recommandations de packaging supérieures. Non disponible pour le moment. + +! L'utilisation du niveau 9 est peu à peu arrêtée. \ No newline at end of file diff --git a/packaging_apps_levels.md b/pages/06.contribute/10.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.md similarity index 91% rename from packaging_apps_levels.md rename to pages/06.contribute/10.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.md index b312c5d4..a0181389 100644 --- a/packaging_apps_levels.md +++ b/pages/06.contribute/10.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.md @@ -1,6 +1,13 @@ -# Quality levels of YunoHost application packages +--- +title: Quality levels of YunoHost application packages +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_levels' +--- -In order to facilitate the packaging of applications by providing successive steps to achieve, each package is assigned a quality level, from 0 to 10. +In order to facilitate the packaging of applications by providing successive steps to achieve, each package is assigned a quality level, from 0 to 9. A package must meet a number of criteria to reach each level. In addition, to reach a level, the package must have previously reached the previous level. This classification of applications by levels has 3 advantages: @@ -55,18 +62,16 @@ The application triggers no errors on the package linter The application repository is part of the YunoHost-Apps organization, which allows the community to contribute to its maintainance. -### Level 7 +#### Level 7 The application triggers no warnings on the package linter. -### Level 8 +#### Level 8 The application is long-term good quality, meaning it's been at least level 5 in the application catalog for a certain amount of time (when writing this: level 5+ 90% of the time during the last year) -### Level 9 +#### Level 9 The application is considered ["high-quality"](https://github.com/YunoHost/apps/blob/master/hq_validation_template.md): it is well-integrated with YunoHost (in particular SSO/LDAP) and follows the recommended development workflow. -### Level 10 - -(No definition yet) +! Using level 9 is being deprecated. \ No newline at end of file diff --git a/packaging_apps_guidelines_fr.md b/pages/06.contribute/10.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.fr.md similarity index 99% rename from packaging_apps_guidelines_fr.md rename to pages/06.contribute/10.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.fr.md index 64c1e63e..cfbcf9ea 100644 --- a/packaging_apps_guidelines_fr.md +++ b/pages/06.contribute/10.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.fr.md @@ -1,15 +1,17 @@ -# Packaging d’applications : les bonnes pratiques - -
- -Cette page est en cours d'élaboration. Tant que cet avertissement n'est pas enlevé. Considérez ces informations comme potentiellement fausse. -Le nom YEP n'est à priori pas définitif, ni les niveaux, ni les bonnes pratiques en elle-même. - -
+--- +title: Packaging d'applications : les bonnes pratiques +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_guidelines' +--- ### Introduction Ce document a pour but de lister les différentes bonnes pratiques concernant la création de paquet d'application YunoHost. +!!! This page is outdated and should be reworked + Chaque bonne pratique est numérotée avec un numéro suffixé par les lettres YEP (YunoHost Enhancement Proposals), ceci afin de pouvoir y faire référence facilement dans les outils d'analyse automatique de paquet ([package checker](https://github.com/YunoHost/package_check), [package linter](https://github.com/YunoHost/package_linter)), mais également lors des revues de code. Chaque YEP est associée à : diff --git a/packaging_apps_guidelines.md b/pages/06.contribute/10.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.md similarity index 98% rename from packaging_apps_guidelines.md rename to pages/06.contribute/10.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.md index 933c4c4c..a70075b1 100644 --- a/packaging_apps_guidelines.md +++ b/pages/06.contribute/10.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.md @@ -1,15 +1,17 @@ -# Packing Applications: Good Practise Guidelines - -
- -This page is under development. As long as this warning is not removed. Consider this information as potentially false. -The name YEP is not a priori definitive, neither the levels nor the good practices in itself. - -
+--- +title: Packing Applications: Good Practise Guidelines +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_guidelines' +--- ### Introduction The purpose of this document is to list the various best practices concerning the creation of YunoHost application packages. +!!! This page is outdated and should be reworked + Each good practice is numbered with a number suffixed by the letters YEP (YunoHost Enhancement Proposals), so that it can be easily referenced in the ([package checker](https://github.com/YunoHost/package_check) and [package linter](https://github.com/YunoHost/package_linter)) tools, but also during the reviews of code. Each YEP is associated with: diff --git a/packaging_apps_ci_fr.md b/pages/06.contribute/10.packaging_apps/15.quality_tests/03.ci_packagers/packaging_apps_ci.fr.md similarity index 92% rename from packaging_apps_ci_fr.md rename to pages/06.contribute/10.packaging_apps/15.quality_tests/03.ci_packagers/packaging_apps_ci.fr.md index 65105e3f..bfefe5be 100644 --- a/packaging_apps_ci_fr.md +++ b/pages/06.contribute/10.packaging_apps/15.quality_tests/03.ci_packagers/packaging_apps_ci.fr.md @@ -1,8 +1,17 @@ -# Intégration continue +--- +title: Intégration continue +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_ci' +--- + +! This page is outdated and should be reworked Un serveur d'intégration continue est disponible pour tout packager souhaitant tester une application avec [Package_check](https://github.com/YunoHost/package_check). -ci-apps-dev +[ci-apps-dev](https://ci-apps-dev.yunohost.org?classes=btn,btn-lg,btn-primary) Ce serveur est libre d'accès pour chacun d'entre vous, vous avez juste besoin d'un compte. Pour ce faire, demandez à un membre du groupe Apps sur notre [chatroom Applications](/chat_rooms) diff --git a/packaging_apps_ci.md b/pages/06.contribute/10.packaging_apps/15.quality_tests/03.ci_packagers/packaging_apps_ci.md similarity index 92% rename from packaging_apps_ci.md rename to pages/06.contribute/10.packaging_apps/15.quality_tests/03.ci_packagers/packaging_apps_ci.md index 543da54d..f5294e19 100644 --- a/packaging_apps_ci.md +++ b/pages/06.contribute/10.packaging_apps/15.quality_tests/03.ci_packagers/packaging_apps_ci.md @@ -1,8 +1,17 @@ -# Continuous integration +--- +title: Continuous integration +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_ci' +--- + +! This page is outdated and should be reworked A continuous integration server is available for any packager willing to test an app with [Package_check](https://github.com/YunoHost/package_check). -ci-apps-dev +[ci-apps-dev](https://ci-apps-dev.yunohost.org?classes=btn,btn-lg,btn-primary) This server is free to use for any of you, you just need an account. To do so, ask to a member of the Apps group on our [Applications chatroom](/chat_rooms) diff --git a/pages/06.contribute/10.packaging_apps/16.advanced_packagers/advanced_packagers.md b/pages/06.contribute/10.packaging_apps/16.advanced_packagers/advanced_packagers.md new file mode 100644 index 00000000..9ee86313 --- /dev/null +++ b/pages/06.contribute/10.packaging_apps/16.advanced_packagers/advanced_packagers.md @@ -0,0 +1,205 @@ +--- +title: Advanced packagers +template: docs +taxonomy: + category: docs +routes: + default: '/advanced_packagers' +--- + +Here comes the time: +- you know all the [YEPs](/packaging_apps_guidelines) +- 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/shell_variables_scope_fr.md b/pages/06.contribute/10.packaging_apps/20.bash_tips/07.shell_variables_scope/shell_variables_scope.fr.md similarity index 97% rename from shell_variables_scope_fr.md rename to pages/06.contribute/10.packaging_apps/20.bash_tips/07.shell_variables_scope/shell_variables_scope.fr.md index 179f3252..7226dd7b 100644 --- a/shell_variables_scope_fr.md +++ b/pages/06.contribute/10.packaging_apps/20.bash_tips/07.shell_variables_scope/shell_variables_scope.fr.md @@ -1,4 +1,11 @@ -### Portée générales des variables +--- +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. diff --git a/shell_variables_scope.md b/pages/06.contribute/10.packaging_apps/20.bash_tips/07.shell_variables_scope/shell_variables_scope.md similarity index 97% rename from shell_variables_scope.md rename to pages/06.contribute/10.packaging_apps/20.bash_tips/07.shell_variables_scope/shell_variables_scope.md index aba9d163..c32b5515 100644 --- a/shell_variables_scope.md +++ b/pages/06.contribute/10.packaging_apps/20.bash_tips/07.shell_variables_scope/shell_variables_scope.md @@ -1,4 +1,11 @@ -### General scope of variables +--- +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. diff --git a/packaging_apps_trap_fr.md b/pages/06.contribute/10.packaging_apps/20.bash_tips/13.trap/packaging_apps_trap.fr.md similarity index 97% rename from packaging_apps_trap_fr.md rename to pages/06.contribute/10.packaging_apps/20.bash_tips/13.trap/packaging_apps_trap.fr.md index 41836279..03d1b13b 100644 --- a/packaging_apps_trap_fr.md +++ b/pages/06.contribute/10.packaging_apps/20.bash_tips/13.trap/packaging_apps_trap.fr.md @@ -1,4 +1,11 @@ -# Usage de trap +--- +title: Trap +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_trap' +--- Trap est une commande interne du shell permettant de capturer les signaux de sorties des commandes exécutées dans le shell courant et ses sous-shell. diff --git a/packaging_apps_trap.md b/pages/06.contribute/10.packaging_apps/20.bash_tips/13.trap/packaging_apps_trap.md similarity index 97% rename from packaging_apps_trap.md rename to pages/06.contribute/10.packaging_apps/20.bash_tips/13.trap/packaging_apps_trap.md index a0071e01..29783395 100644 --- a/packaging_apps_trap.md +++ b/pages/06.contribute/10.packaging_apps/20.bash_tips/13.trap/packaging_apps_trap.md @@ -1,4 +1,11 @@ -# Trap usage +--- +title: Trap +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_trap' +--- Trap is an internal shell command used to capture the output signals of commands executed in the current shell and its subshells. diff --git a/packaging_apps_start_fr.md b/pages/06.contribute/10.packaging_apps/packaging_apps_start.fr.md similarity index 96% rename from packaging_apps_start_fr.md rename to pages/06.contribute/10.packaging_apps/packaging_apps_start.fr.md index 182be676..383bcda4 100644 --- a/packaging_apps_start_fr.md +++ b/pages/06.contribute/10.packaging_apps/packaging_apps_start.fr.md @@ -1,4 +1,11 @@ -# Introduction au packaging +--- +title: Introduction au packaging +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_start' +--- Petite introduction au packaging d'application, pour comprendre de quoi nous parlons et comment ça marche. Cette documentation s'adresse avant tout aux packageurs débutants qui ne sont pas à l'aise avec les concepts de shell, parsing et administration système de manière générale. @@ -41,7 +48,7 @@ Or puisque votre serveur, sur lequel est installé YunoHost, ne dispose pas d'un Les scripts d'un package ne sont donc qu'une succession de commandes bash, comme si vous les aviez tapées directement dans la console ssh pour installer l'application. -Pour savoir quoi écrire dans un script bash, je vous conseille de commencer par la lecture d'un [tuto simple](https://debian-facile.org/doc:programmation:shells:debuter-avec-les-scripts-shell-bash). Et si vous avez vraiment envie de lire, il y a aussi un [tuto plus complet](http://aral.iut-rodez.fr/fr/sanchis/enseignement/bash/index.html) +Pour savoir quoi écrire dans un script bash, je vous conseille de commencer par la lecture d'un [tuto simple](https://debian-facile.org/doc:programmation:shells:debuter-avec-les-scripts-shell-bash). ### Ok, je crois que j'ai compris ! Par où on commence ? diff --git a/packaging_apps_start.md b/pages/06.contribute/10.packaging_apps/packaging_apps_start.md similarity index 79% rename from packaging_apps_start.md rename to pages/06.contribute/10.packaging_apps/packaging_apps_start.md index d6c27ea9..8f3920ef 100644 --- a/packaging_apps_start.md +++ b/pages/06.contribute/10.packaging_apps/packaging_apps_start.md @@ -1,8 +1,15 @@ -# Introduction to packaging +--- +title: Introduction to packaging +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_start' +--- -This documentation is here is to provide all the basic concepts and vocabulary needed to understand app packaging. eg: shell, parsing, system administration... +This documentation is here to provide all the basic concepts and vocabulary needed to understand app packaging. eg: shell, parsing, system administration... -We will detail what is a YunoHost application package, how it works, how to make your own package and how to find help if you need it. +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. ## What is a YunoHost application package @@ -12,7 +19,7 @@ To be able to do that, we need to remember that YunoHost at its core is a server If you have ever installed a web application manually, you already know that the process is in reality far more complex, usually involving a lot of steps and discipline. -This is what application packaging is, a series of scripts that automate the installation of a web application and its configuration in order to provide the final user with a few clicks installation process. +This is what application packaging is: a series of scripts that automate the installation of a web application and its configuration in order to provide the final user with a few clicks installation process. ### How it works @@ -24,12 +31,14 @@ From the final user perspective, it is as simple as it can be: 4. Application is ready to use There is more to see backstage: + First, when the application is selected, YunoHost will retrieve the corresponding package from github. eg: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh). + Then, YunoHost will read the manifest.json file to know what questions to ask the user through the form. -These seamingly trivial questions are very important. Usually you would need to ask for the domain on which to install, the path to access, the user that will be designated administrator and the default language for the application. +These seemingly trivial questions are very important. Usually you would need to ask for the domain on which to install, the path to access, the user that will be designated administrator and the default language for the application. -These are critical to configure appropriately the web application during the installation process. To do so, YunoHost will retrieve the answers given by the user and send them to the installation script located in the package "*scripts*" folder. +These are critical to appropriately configure the web application during the installation process. To do so, YunoHost will retrieve the answers given by the user and send them to the installation script located in the package "*scripts*" folder. The install script will handle the user answers to complete the process as you would have done manually. @@ -47,9 +56,9 @@ You can ony interact with your server through the command line as it does not pr Package scripts are therefore a series of bash commands as if you had typed them directly in the ssh console. -To know what you can write in a bash script, you should start reading this [simple tutorial](https://debian-facile.org/doc:programmation:shells:debuter-avec-les-scripts-shell-bash) or this [more advanced one](http://aral.iut-rodez.fr/fr/sanchis/enseignement/bash/index.html). +To learn what you can write in a bash script, you should start reading this [simple tutorial](https://debian-facile.org/doc:programmation:shells:debuter-avec-les-scripts-shell-bash) or this [more advanced one](http://aral.iut-rodez.fr/fr/sanchis/enseignement/bash/index.html). -### Ok, I'm good! Where do I start? +### Okay, I'm good! Where do I start? Before starting the packaging process, you need to successfully install the application. The script will only perform what you instruct it to do. 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/dev_fr.md b/pages/06.contribute/15.dev/dev.fr.md similarity index 85% rename from dev_fr.md rename to pages/06.contribute/15.dev/dev.fr.md index 6fbe804a..9ab848a4 100644 --- a/dev_fr.md +++ b/pages/06.contribute/15.dev/dev.fr.md @@ -1,4 +1,11 @@ -## Contribuer au cœur de YunoHost +--- +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. @@ -13,14 +20,14 @@ Si vous cherchez quelque chose à implémenter ou un bug à réparer, le bug tra - **Implémentez et testez votre fonctionnalité**. Suivant ce sur quoi vous voulez travailler : - **Cœur Python/ligne de commande** : allez dans `/ynh-dev/yunohost/` - - **Interface d'administration web** : allez dans `/ynh-dev/yunohost-admin/` + - **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/stretch-unstable/data/actionsmap/yunohost.yml). +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). @@ -29,17 +36,17 @@ Moulinette dispose de sa propre documentation [ici](https://moulinette.readthedo ##### YunoHost C'est le cœur même de YunoHost. Il contient : -- [le code Python](https://github.com/YunoHost/yunohost/tree/stretch-unstable/src/yunohost) qui gère les utilisateurs, domaines, applications, services et autres -- des [helpers bash](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/helpers.d) principalement utilisés par les packageurs d'applications dans les scripts de ces applications -- des [hooks](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/hooks) et [templates](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/templates) 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/stretch-unstable/locales) -- des [tests](https://github.com/YunoHost/yunohost/tree/stretch-unstable/src/yunohost/tests) +- [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/stretch-unstable/portal) qui est l'interface finale visible par les utilisateurs de YunoHost. +- 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. @@ -48,9 +55,9 @@ SSOwat est configuré via `/etc/ssowat/conf.json` qui est généré par YunoHost 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/stretch-unstable/src/views) -- les [contrôleurs JavaScript](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/js/yunohost/controllers) correspondants, qui interagissent avec l'API YunoHost -- et ses [chaînes internationalisées](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/locales) +- [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 @@ -72,7 +79,7 @@ Il contient essentiellement : - Mettre un `_` devant les noms des fonctions "privées". -### Travailler sur l'interface d'administration web +### Travailler sur la webadmin - Allez dans `/ynh-dev/yunohost-admin/src/`. diff --git a/dev.md b/pages/06.contribute/15.dev/dev.md similarity index 85% rename from dev.md rename to pages/06.contribute/15.dev/dev.md index d82731f3..b3d26255 100644 --- a/dev.md +++ b/pages/06.contribute/15.dev/dev.md @@ -1,4 +1,11 @@ -## Contributing to the YunoHost core +--- +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 @@ -31,7 +38,7 @@ If you're looking for stuff to implement or fix, the bug-tracker is 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/stretch-unstable/data/actionsmap/yunohost.yml). +[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). @@ -41,17 +48,17 @@ Moulinette has its own documentation available [here](https://moulinette.readthe #### YunoHost This piece is the very core of YunoHost. It contains: -- [the Python code](https://github.com/YunoHost/yunohost/tree/stretch-unstable/src/yunohost) that manages users, domains, apps, services and other things -- [bash helpers](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/helpers.d) mainly used by application packagers to package applications -- [hooks](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/hooks) and [templates](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/templates) that are used to configure the various pieces of the ecosystem such as NGINX, Postfix... -- [internationalized strings](https://github.com/YunoHost/yunohost/tree/stretch-unstable/locales) -- [tests](https://github.com/YunoHost/yunohost/tree/stretch-unstable/src/yunohost/tests) +- [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/stretch-unstable/portal) which is the interface used by YunoHost's end users to log in and browse installed apps +- 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. @@ -60,9 +67,9 @@ SSOwat is configured through `/etc/ssowat/conf.json` which is generated by YunoH 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/stretch-unstable/src/views) -- corresponding [JavaScript controllers](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/js/yunohost/controllers) that interact with the YunoHost API -- and [internationalized strings](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/locales) +- [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 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/plug_and_boot.md b/plug_and_boot.md deleted file mode 100644 index 2a085383..00000000 --- a/plug_and_boot.md +++ /dev/null @@ -1,16 +0,0 @@ -# Plug and boot your server up - -* Plug your server in wired Ethernet, or configure the wifi connection as explained [here](https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md). You can also mount the second partition of the SD card and edit the wpa-supplicant.conf file prior to boot the card for the first time - on Windows you can use [Paragon ExtFS](https://www.paragon-software.com/home/extfs-windows/), don't forget to unmount everytime for changes to take effect. - -* Optional : You can **connect a screen** if you want to see how boot is going, and a keyboard if you want to have a **command-line access** to your server. - -* Power up the server, wait for the first reboot to happen, and then wait until you see a big squared `Y` : - -
- -
- -*Write down the `IP address` field visible on the screen: It is your server's **local IP address**.* - -
-Don't worry if you don't have a screen ! You can still find you IP address in the next step. diff --git a/plug_and_boot_es.md b/plug_and_boot_es.md deleted file mode 100644 index d73cdd0d..00000000 --- a/plug_and_boot_es.md +++ /dev/null @@ -1,17 +0,0 @@ -# Conectar e iniciar el servidor - -* Conecta tu servidor con un cable Ethernet (RJ-45) **directamente sobre tu router principal**. También puedes configurar la conexión wifi como explicado [aquí (fr)](http://raspbian-france.fr/connecter-wifi-raspberry-pi-3/). El wifi también puede configurarse sin haber iniciado la tarjeta, "montando" la segunda partición de la tarjeta y finalmente editando el archivo wpa-supplicant.conf. En Windows, puedes utilizar [Paragon ExtFS](https://www.paragon-software.com/home/extfs-windows/), no olvides de "unmount" para que los cambios estén integrados. - -* No te olvides de **conectar una pantalla** si quieres observar cómo ocurre el inicio, y un teclado si quieres un acceso con **línea de comandos** a tu servidor. - -* Inicia el servidor, el Raspberry Pi va a reiniciarse si-mismo una primera vez, pues espera hasta que veas un gran `Y` cuadrado : - -
- -
- -

-*Nota el valor `IP` visible en la pantalla : esto es **la dirección IP local** de tu servidor.* -

- -
diff --git a/plug_and_boot_fr.md b/plug_and_boot_fr.md deleted file mode 100644 index a237c19d..00000000 --- a/plug_and_boot_fr.md +++ /dev/null @@ -1,18 +0,0 @@ -# Brancher et démarrer votre serveur - -* Branchez votre serveur avec un câble Ethernet (RJ-45) **directement sur votre routeur principal**. Vous pouvez aussi configurer la connexion wifi comme expliqué [ici](http://raspbian-france.fr/connecter-wifi-raspberry-pi-3/). La configuration wifi peut aussi se faire sans avoir booté sur la carte, en "montant" la deuxième partition de la carte et enfin éditer le fichier wpa-supplicant.conf. Sur Windows vous pouvez utiliser [Paragon ExtFS](https://www.paragon-software.com/home/extfs-windows/), ne pas oublier de "unmount" pour que les changements soient pris en compte. - -* Facultatif : vous pouvez **brancher un écran** si vous voulez observer comment se déroule le démarrage, et un clavier si vous souhaitez un accès en **ligne de commande** à votre serveur. - -* Démarrez le serveur, le Raspberry Pi va redémarrer tout seul une première fois, puis attendez jusqu’à voir un gros `Y` carré : - -
- -
- - -*Notez la valeur `IP` affichée à l’écran : c’est **l’adresse IP locale** de votre serveur.* - - -
-
Si vous n'avez pas d'écran pour votre Raspberry, ce n'est pas grave ! Vous pourrez trouver son adresse IP autrement à l'étape suivante. diff --git a/port_forwarding.md b/port_forwarding.md deleted file mode 100644 index c24f5542..00000000 --- a/port_forwarding.md +++ /dev/null @@ -1,6 +0,0 @@ -# Port forwarding - -The sketch below tries to briefly summarize the role and necessity of port -forwarding when setting up a server at home. - - diff --git a/port_forwarding_es.md b/port_forwarding_es.md deleted file mode 100644 index 3ff93dc3..00000000 --- a/port_forwarding_es.md +++ /dev/null @@ -1,5 +0,0 @@ -# Redirección de puertos - -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. - - diff --git a/port_forwarding_fr.md b/port_forwarding_fr.md deleted file mode 100644 index 1793b27b..00000000 --- a/port_forwarding_fr.md +++ /dev/null @@ -1,6 +0,0 @@ -# Redirection de ports - -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. - - diff --git a/postinstall.md b/postinstall.md deleted file mode 100644 index 822372ec..00000000 --- a/postinstall.md +++ /dev/null @@ -1,69 +0,0 @@ -# Post-Installation - -The step called "**post-installation**" is actually the initial configuration of YunoHost. It has to be done just after the installation of the system itself. - -NB: if you are in the process of restoring a server from scratch **and** you have a yunohost-made backup, you must skip this process and follow through with the "restoring during the postinstall" step, in the [backup](/backup) page. - -### From the web interface - -You can perform the post-installation with the web interface by entering in your browser : -* **the local IP address of your server** if it is on your local network (e.g. at home !). The address typically looks like `192.168.x.y` (see 'Find your IP' on [the page about SSH](/ssh)) -* **the public IP address of your server** if your server is not on your local network. Typically, if you own a VPS, your VPS provider should have given you the IP of the server. - -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. You will later be able to add a certificate automatically recognized by web browsers as described in the [certificate documentation](/certificate). For now, you should add a security exception to accept the current certificate. - -You should then land on this page : - - - -

Preview of the Web post-installation

- -### From the command line - -You can also perform the postinstallation with the command `yunohost tools postinstall` directly on the server, or [via SSH](/ssh). - - - -

Preview of the command-line post-installation

- -
- -## Informations asked - -### Main domain - -This is the first domain name linked to your YunoHost server, but also the one which will be used by your server's users to access the **authentication portal**. It will thus be **visible by everyone**, choose it wisely. - -* If you do not have a domain name, or if you want to use the YunoHost's DynDNS service, choose a sub-domain of **.nohost.me**, **.noho.st** or **.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. - -* If you do know what **DNS** is, you probably want to configure your own domain name here. In this case, please refer to the [DNS page](/dns) page for more informations. - -* If you don't own a domain name and don't want a **.nohost.me**, **.noho.st** or **.ynh.fr**, you can use a local domain. The idea is to configure your router to redirect a local domain name to your server. For example you could create the yunohost.local domain redirecting to your server in your router, and now every device on the network will be redirected to your server when accessing yunohost.local. More information on how to setup a local domain can be found [here](dns_local_network). - -### Administration password - -This password will be used to access to your server's [administration interface](/admin). You would also use it to connect via **SSH** or **SFTP**. In general terms, this is your **system's key**, [choose it carefully](http://www.wikihow.com/Choose-a-Secure-Password). - -
- ---- - -## Congratz! - -If you got so far and saw 'YunoHost has been successfully installed' (web -postinstall) or 'YunoHost has been correctly configured', then congratulations! - -### What now ? - -- If you're self-hosting at home and without a VPN, you need to [make sure to - correctly forward ports on your router/Internet box](isp_box_config) ; -- If you're using your own domain name (i.e. not a .nohost.me / .noho.st), you - need to [configure it according to the recommended DNS - configuration](dns_config) ; -- If you cannot configure your domain name yet (because you didn't register it - yet, or because this is a test domain), see last paragraph - [here](dns_local_network) for a workaround ; -- Don't be too afraid of the [certificate warning](certificate), you'll probably - be able to install a Let's Encrypt certificate :). -- Have a look at [the available apps](apps) ! - diff --git a/postinstall_es.md b/postinstall_es.md deleted file mode 100644 index f7566951..00000000 --- a/postinstall_es.md +++ /dev/null @@ -1,65 +0,0 @@ -# Post-instalación - -La etapa que llamamos « **post-instalación** » de hecho es la etapa de configuración inicial de YunoHost. Se ejecuta después de la **instalación** del sistema mismo. - -NB : Si estàs en el proceso de instalar de nuevo a un servidor **y** que ya tienes un archivo creada por yunohost, no debes seguir a està etapa y encontro seguir a la seccion "Restoring during the postinstall" de la pagina [backup](/backup). - -### Vía la interfaz web - -Puedes acceder a la post-instalación gráfica entrando en un navegador web : -* la dirección **IP local de tu servidor** si éste está conectado a tu red local (en general `192.168.x.x`, ver ['Encontrar mi IP' en la página sobre SSH](/ssh)) -* la dirección **IP pública de tu servidor** si éste no está conectado a tu red local (por ejemplo, si es un VPS, tu proveedor debería haberte transmitido la dirección IP). - -Durante la primera visita, encontrarás muy probablemente una advertencia de seguridad relacionada al certificado utilizado. De momento, tu servidor utiliza un certificado autofirmado. Después, podrás utilizar un certificado automáticamente reconocido por los navegadores como descrito en la página sobre los [Certificados](/certificate). Mientras tanto, añade una excepción de seguridad para aceptar el certificado vigente. - -Luego, llegas en esta página : - - - -*

Vistazo de la post-instalación Web

* - -### Vía la interfaz de línea de comando - -También puedes acceder a la post-instalación entrando el comando `yunohost tools postinstall` directamente en el servidor o [en SSH](/ssh). - - - -*

Vistazo de la post-instalación con línea de comando

* - -## Informaciones solicitadas - -### Dominio principal - -Es el nombre de dominio que permitirá el acceso a tu servidor así como al portal de autenticación de los usuarios. Entonces estará **visible por todo el mundo** : elígelo en consecuencia. - -* YunoHost te propone un DNS dinámico, proveando nombres de dominio del tipo *midominio.nohost.me*, *midominio.noho.st* o *midominio.ynh.fr*. Si no posees un nombre de dominio y/o que quieres aprovechar de este servicio, elige un dominio terminando con `.nohost.me`, `.noho.st` o `.ynh.fr`. Si no está utlizado ya, el dominio automáticamente estará vinculado a tu servidor YunoHost, y no tendrás más etapas de configuración. - -* Si, en cambio, dominas la noción de **DNS**, puedes utilizar tu propio nombre de dominio. En este caso, refiérete a la página [yunohost.org/dns](/dns) por más información. - -* Si no tienes nombre de dominio y que no quieres uno que acabe con *.nohost.me*, *.noho.st* ou *.ynh.fr*, puedes utilizar un dominio local. Más información sobre cómo [acceder a tu servidor desde la red local](/dns_local_network). - - -### Contraseña de administración - -Es la contraseña que permitirá acceder a la [interfaz de administración](/admin) de tu servidor. También podrás utilizarla para conectarte remotamente vía **SSH**, o vía **SFTP** para transferir archivos. - -De manera general, ésta es la **llave de entrada en tu sistema**, pues piensa en **[elegirla atentamente](https://es.wikihow.com/escoger-una-contrase%C3%B1a-segura)**. - -
- ---- - -## Enhorabuena ! - -Si llegas aquí después de haber visto “YunoHost fue instalado con éxito" desde tu navegador ou tu interfaz de línea de comando, pues felicitaciones ! - - -### ¿ Y ahora ? - -- Si te auto-alojas en casa y sin VPN, tienes que asegurarte que [los puertos de tu caja internet estén redirigidos](/isp_box_config) ; -- Si utilizas tu propio nombre de dominio (i.e. que no sea un nohost.me / - noho.st), tienes que [configurar el nombre de dominio según la configuración recomendada](/dns_config) ; -- Si no puedes configurar el nombre de dominio de momento (porque todavía no lo has comprado, ou porque es un dominio test), puedes solucionar temporalmente el problema con las instrucciones del último párrafo [aquí](/dns_local_network) ; -- No te asustes demasiado por [la advertencia a propósito del certificado](/certificate), tendrás la posibilidad de obtener un certificado Let's Encrypt :). -- Echa un vistazo a las [aplicaciones disponibles](/apps) ! - diff --git a/postinstall_fr.md b/postinstall_fr.md deleted file mode 100644 index 65d36d8f..00000000 --- a/postinstall_fr.md +++ /dev/null @@ -1,71 +0,0 @@ -# Post-Installation - -L’étape appelée « **post-installation** » est en fait l’étape de configuration initiale de YunoHost. Il faut l’exécuter après l’**installation** du système en lui-même. - -NB : Si vous êtes en train de restaurer un système complet **et** que vous disposez d'un fichier de sauvegarde généré par YunoHost, vous devez sauter cette étape et vous référer à la section "Restaurer durant la postinstallation" sur la page [sauvegardes](/backup). - -### Via l'interface web - -Vous pouvez accéder à la post-installation graphique en entrant dans un navigateur web : -* l’adresse **IP locale de votre serveur** si celui-ci est connecté à votre réseau local (généralement `192.168.x.x`, voir ['Trouver son IP' sur la page sur SSH](/ssh)) -* l’adresse **IP publique de votre serveur** si celui-ci n’est pas connecté à votre réseau local (par exemple dans le cas d'un VPS, votre fournisseur devrait vous avoir transmis l'adresse IP). - -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 reconnus 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. - -Vous arrivez ensuite sur cette page : - - - -*

Aperçu de la post-installation Web

* - -### Via la ligne de commande - -Vous pouvez aussi y accéder en entrant la commande `yunohost tools postinstall` directement sur le serveur ou [en SSH](/ssh). - - - -*

Aperçu de la post-installation en ligne de commande

* - -## Informations demandées - -### Domaine principal - -C’est le nom de domaine qui permettra l’accès à votre serveur ainsi qu’au portail d’authentification des utilisateurs. Il sera donc **visible par tout le monde**, choisissez-le en conséquence. - -* YunoHost propose un service de DNS dynamique fournissant des noms de domaine de type *mondomaine.nohost.me*, *mondomaine.noho.st* ou *mondomaine.ynh.fr*. Si vous ne possédez pas de nom de domaine et/ou que vous souhaitez profiter de ce service, choisissez un domaine se terminant en `.nohost.me`, `.noho.st` ou `.ynh.fr`. 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. - -* Si en revanche vous maîtrisez la notion de **DNS**, vous pouvez utiliser votre propre nom de domaine. Dans ce cas, référez-vous à la page [yunohost.org/dns](/dns) pour plus d’informations. - -* Si vous n'avez pas de nom de domaine et que vous n'en voulez pas en *mondomaine.nohost.me*, *mondomaine.noho.st* ou *mondomaine.ynh.fr*, vous pouvez utilisez un domaine local. Plus d'infos sur comment [accéder à son serveur depuis le réseau local](/dns_local_network). - - -### Mot de passe d’administration - -C’est le mot de passe qui vous permettra d’accéder à l’[interface d’administration](/admin) de votre serveur. Vous pourrez également l’utiliser pour vous connecter à distance via **SSH**, ou en **SFTP** pour transférer des fichiers. - -De manière générale, c’est la **clé d’entrée à votre système**, pensez donc à la **[choisir attentivement](http://www.commentcamarche.net/faq/8275-choisir-un-bon-mot-de-passe)**. - -
- ---- - -## Félicitations ! - -Si vous arrivez ici après avoir vu "YunoHost a été installé avec succès" depuis -votre navigateur ou la ligne de commande, alors félicitations ! - -### Et maintenant ? - -- Si vous vous auto-hébergez à la maison et sans VPN, il faut vous assurer - de bien [rediriger les ports de votre box internet](/isp_box_config) ; -- Si vous utilisez votre propre nom de domaine (c.-à-d. pas un nohost.me / - noho.st), il vous faut [configurer le nom de domaine d'après la configuration - recommandée](/dns_config) ; -- Si vous ne pouvez pas configurer le nom de domaine pour le moment (parce qu'il - n'est pas encore acheté, ou parce que c'est un domaine de test), vous pouvez - contourner temporairement le problème avec les instructions du dernier - paragraphe [ici](/dns_local_network) ; -- Ne soyez pas trop effrayé par [l'avertissement à propos du - certificat](/certificate), vous aurez probablement la possibilité - d'installer un certificat Let's Encrypt :). -- Jetez un œil aux [applications disponibles](/apps) ! diff --git a/project_organization.md b/project_organization.md deleted file mode 120000 index c69cb700..00000000 --- a/project_organization.md +++ /dev/null @@ -1 +0,0 @@ -orga/yunohost_project_organization.md \ No newline at end of file diff --git a/project_organization_fr.md b/project_organization_fr.md deleted file mode 120000 index 87648596..00000000 --- a/project_organization_fr.md +++ /dev/null @@ -1 +0,0 @@ -orga/yunohost_project_organization_fr.md \ No newline at end of file diff --git a/security.md b/security.md deleted file mode 100644 index 7552e072..00000000 --- a/security.md +++ /dev/null @@ -1,180 +0,0 @@ -# Security - -YunoHost has been developed to provide the best security without too much complication. Every protocol used in YunoHost is **encrypted**, only 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 install only apps which will suit your needs. - -* The fact that YunoHost is a well-spread software increases the chances of an attack. If a flaw is discovered, it could potentially affect all the YunoHost instances at once. Keep your system **up-to-date** to remain safe. - -*If you need advice, do not hesitate to [ask us](/help).* - -*To talk about 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 those good practices. - -**Attention:** *Following those instructions requires advanced knowledge of system administration.* - -### 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 -``` - -Type your admnistration password and your key will be copied on your server. - -**On your server**, edit the SSH configuration file, in order to deactivate the password authentication. - -```bash -nano /etc/ssh/sshd_config - -# Modify or add the following line -PasswordAuthentication no -``` - -Save and restart the SSH daemon. -```bash -systemctl restart ssh -``` ---- - -### 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. - -**On your server**, edit the ssh configuration file, in order to modify the SSH port. - -```bash -nano /etc/ssh/sshd_config -``` -**Search the line "Port" and replace** port number (by default 22) by another unused number -```bash -# What ports, IPs and protocols we listen for -Port 22 # to replace by 9777 for example -``` - -**Open the port** in the firewall (you can use `-6` option to deny ipv4 connection) -```bash -yunohost firewall allow TCP 9777 -``` - -Save and restart the SSH daemon. Switch over to the new port by restarting SSH. -```bash -systemctl restart ssh -``` -Then restart the iptables firewall and close the old port in iptables. - -```bash -yunohost firewall reload -yunohost firewall disallow TCP # port by default 22 -``` - -You also need to give `fail2ban` the new SSH port. - -To do that you need to create the configuration file `my_ssh_port.conf` with the command - - -```bash -nano /etc/fail2ban/jail.d/my_ssh_port.conf -``` - -and you can then fill it in with - -```ini -[sshd] -port = - -[sshd-ddos] -port = -``` - -Finally you have to restart `fail2ban` in order to apply the new configuration - -```bash -systemctl restart fail2ban -``` - -**For the next SSH connections **, you need to add the `-p` option followed by the SSH port number. - -**Sample**: - -```bash -ssh -p admin@ -``` - ---- - -### Change the user authorized to connect via SSH - -To avoid multiple forced login attempts to the admin account by robots, change the authorized user who can connect. - -
-In the case of a key authentication, a brute force attack has no chance of succeeding. This step is not really useful in this case. -
- -**On your server**, add a user -```bash -sudo adduser user_name -``` -Choose a strong password, since this user will be responsible with obtaining root privileges. -Add the user to the sudo group to allow them to perform maintenance tasks that require root privileges. -```bash -sudo adduser user_name sudo -``` - -Now, change the SSH configuration to allow the new user to connect. -**On your server**, edit the SSH configuration file -```bash -sudo nano /etc/ssh/sshd_config - -# Look for the section "Authentication" and add at the end of it: -AllowUsers user_name -``` -Only users listed in the AllowUsers directive will then be allowed to connect via SSH, which excludes the admin user. - -Save and restart the SSH daemon. -```bash -systemctl restart ssh -``` ---- - -### 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 the compatibility, which may be an issue for your users and visitors using older devices. More details about the 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](/commandline), is to deactivate the `yunohost-api` service. - -```bash -sudo systemctl disable yunohost-api -sudo systemctl stop yunohost-api -``` - -### YunoHost penetration test - -Some [pentests](https://en.wikipedia.org/wiki/Penetration_test) have been done on a YunoHost 2.4 instance (french): - -- [1) Preparation](https://exadot.fr/blog/2016-07-03-pentest-dune-instance-yunohost-1-preparation) -- [2) The functionning](https://exadot.fr/blog/2016-07-12-pentest-dune-instance-yunohost-2-le-fonctionnement) -- [3) Black Box Audit](https://exadot.fr/blog/2016-08-26-pentest-dune-instance-yunohost-3-audit-en-black-box) -- [4) Grey Box Audit](https://exadot.fr/blog/2016-11-03-pentest-dune-instance-yunohost-4-audit-en-grey-box) diff --git a/security_fr.md b/security_fr.md deleted file mode 100644 index 539eed2f..00000000 --- a/security_fr.md +++ /dev/null @@ -1,191 +0,0 @@ -# Sécurité - -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).* - -*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.* - -### 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 ê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**, éditez le fichier de configuration SSH, pour désactiver l’authentification par mot de passe. -```bash -nano /etc/ssh/sshd_config - -# Modifiez ou ajoutez la ligne suivante -PasswordAuthentication no -``` - -Sauvegardez et relancez le démon SSH. -```bash -systemctl restart ssh -``` - ---- - -### 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. - -**Sur votre serveur**, éditez le fichier de configuration SSH, pour modifier le port SSH. - -```bash -nano /etc/ssh/sshd_config -``` - -**Recherchez la ligne « Port »** et remplacez le numéro du port (par défaut 22) par un autre numéro non utilisé - -```bash -Port 22 # à remplacer par exemple par 9777 -``` - -**Ouvrez le port** choisi dans le parefeu (vous pouvez utiliser l'option `-6` pour interdire la connexion via ipv4) - -```bash -yunohost firewall allow TCP -``` - -Sauvegardez et relancez le démon SSH. - -```bash -systemctl restart ssh -``` - -Ensuite redémarrez le firewall iptables et fermez l’ancien port dans iptables. - -```bash -yunohost firewall reload -yunohost firewall disallow TCP # port par défaut 22 -``` - -Il convient également de donner à `fail2ban` le nouveau port SSH à bloquer en cas de bannissement d'une adresse IP. - -Pour cela il suffit de créer le fichier de configuration `my_ssh_port.conf` avec - -```bash -nano /etc/fail2ban/jail.d/my_ssh_port.conf -``` - -et de le compléter ainsi : - -```ini -[sshd] -port = -``` - -Il reste enfin à relancer `fail2ban` pour prendre en compte la nouvelle configuration - -```bash -systemctl restart fail2ban -``` - -**Pour les prochaines connexions SSH**, il faudra ajouter l’option `-p` suivie du numéro de port SSH. - -**Exemple** : - -```bash -ssh -p admin@ -``` - ---- - -### Changer l’utilisateur autorisé à se connecter par SSH - -Afin d’éviter de multiples tentatives de forçage du login admin par des robots, on peut éventuellement changer l’utilisateur autorisé à se connecter. - -
-Dans le cas d’une authentification par clé, la force brute n’a aucune chance de réussir. Cette étape n’est donc pas vraiment utile dans ce cas -
- -**Sur votre serveur**, ajoutez un utilisateur. -```bash -sudo adduser nom_utilisateur -``` -Choisissez un mot de passe fort, puisque c’est l’utilisateur qui sera chargé d’obtenir des droits root. -Ajoutez l’utilisateur au groupe sudo, afin justement de l’autoriser à effectuer des tâches de maintenance nécessitant les droits root. -```bash -sudo adduser nom_utilisateur sudo -``` - -À présent, modifiez la configuration SSH pour autoriser ce nouvel utilisateur à se connecter. -**Sur votre serveur**, éditez le fichier de configuration SSH -```bash -sudo nano /etc/ssh/sshd_config - -# Recherchez le paragraphe « Authentication » et ajoutez à la fin de celui-ci : -AllowUsers nom_utilisateur -``` -Seuls les utilisateurs mentionnés dans la directive AllowUsers seront alors autorisés à se connecter via SSH, ce qui exclut donc l’utilisateur admin. - -Sauvegardez et relancez le démon SSH. -```bash -systemctl restart ssh -``` - ---- - -### 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 faille 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 aux lignes de commande est de désactiver le service `yunohost-api`, et **utiliser la [ligne de commande](/commandline)** en SSH. - -```bash -sudo systemctl disable yunohost-api -sudo systemctl stop yunohost-api -``` - -### Tests d’intrusion de YunoHost - -Des [pentests](https://fr.wikipedia.org/wiki/pentest) ont été effectués sur une instance de YunoHost 2.4 : - -- [1) Préparation](https://exadot.fr/blog/2016-07-03-pentest-dune-instance-yunohost-1-preparation) -- [2) Le fonctionnement](https://exadot.fr/blog/2016-07-12-pentest-dune-instance-yunohost-2-le-fonctionnement) -- [3) Audit en Black Box](https://exadot.fr/blog/2016-08-26-pentest-dune-instance-yunohost-3-audit-en-black-box) -- [4) Audit en Grey Box](https://exadot.fr/blog/2016-11-03-pentest-dune-instance-yunohost-4-audit-en-grey-box) diff --git a/ssh.md b/ssh.md deleted file mode 100644 index fb3552a6..00000000 --- a/ssh.md +++ /dev/null @@ -1,98 +0,0 @@ -# SSH - -## What's SSH? - -**SSH** stands for Secure Shell, and refers to a protocol that allows to remotly control 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). - -## During YunoHost installation - -#### Find your IP - -If you are installing on a VPS, then your VPS provider should have gave you your IP address. - -If you are installing at home (e.g. on a Raspberry Pi or OLinuXino), then you need to find out which IP has been attributed to your board after you plugged it to your internet box / router. Several ways exists to find your server's IP: - -- open a terminal and use `sudo arp-scan --local` to list the IP on your local network; -- 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) -- use your internet box / router interface to list the machines connected, or check the logs; -- plug a screen on your server, log in and type `hostname --all-ip-address`. - -#### Connect - -Assuming your IP address is `111.222.333.444`, open a terminal and enter: - -```bash -ssh root@111.222.333.444 -``` - -A password will be asked. If this is a VPS, your VPS provided should have communicated you the password. If you used a pre-installed image (for x86 computer or ARM board), the password should be `yunohost`. - -
-Since YunoHost 3.4, after running the postinstallation, you won't be able to login as `root` anymore. Instead, **you should login using the `admin` user !** In the event that the LDAP server is broken and the `admin` user is unusable, you may still however still be able to login using `root` from the local network. -
- -#### Change the password! - -After logging in for the first time, you should change the root password. The server might automatically ask you to do so. If not, use the command `passwd`. It is important to choose a reasonably strong password. Note that the root password will be overriden by the admin password when you perform the postinstallation. - -#### Let's configure! - -We're now ready to begin the [post-installation](postinstall). - -## 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 ssh allow -``` - -It is also possible to remove SSH access using the following: - -```bash -yunohost user ssh disallow -``` - -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 minutes 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). diff --git a/ssh_fr.md b/ssh_fr.md deleted file mode 100644 index 8a1d47d2..00000000 --- a/ssh_fr.md +++ /dev/null @@ -1,95 +0,0 @@ -# SSH - -## Qu’est-ce que SSH ? - -**SSH** est un acronyme pour Secure Shell, et désigne un protocole qui permet de contrôler à 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). - -## Pendant l’installation de YunoHost - -#### Trouver son IP - -Si vous installez YunoHost sur un VPS, votre fournisseur devrait vous avoir communiqué l'adresse IP de votre serveur. - -Si vous installez un serveur à la maison (par ex. sur Raspberry Pi ou OLinuXino), il vous faut trouver l'IP qui a été attribuée à votre carte après que vous l'ayez connectée à votre box internet / routeur. Il y a plusieurs façons de faire cela : - -- ouvrez un terminal et tapez `sudo arp-scan --local` pour lister les IP des machines sur le réseau local ; -- 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) -- utilisez l'interface de votre box internet pour lister les machines connectées, ou regarder les logs ; -- branchez un écran sur votre serveur, loggez-vous et tapez `hostname --all-ip-address`. - -#### Se connecter - -En supposant que votre adresse IP est `111.222.333.444`, ouvrez un terminal et tapez : - -```bash -ssh root@111.222.333.444 -``` - -Un mot de passe sera demandé. Si c'est un VPS, votre fournisseur devrait également vous avoir communiqué un mot de passe. Si vous avez utilisé une image pré-installée (pour x86 ou cartes ARM), le password devrait être `yunohost`. - -
-Depuis YunoHost 3.4, après avoir effectué la postinstallation, il ne sera plus possible de se logguer avec l'utilisateur `root`. À la place, il vous faut **vous logguer avec l'utilisateur `admin` !** Dans l'éventualité où le serveur LDAP serait cassé, rendant l'utilisateur `admin` inutilisable, vous devriez cependant pouvoir vous logguer avec l'utilisateur `root` depuis le réseau local. -
- -#### Changer le mot de passe root ! - -Après vous être connecté pour la première fois, il vous faut changer le mot de passe `root`. Le serveur vous demandera peut-être automatiquement de le faire. Si ce n'est pas le cas, il faut utiliser la commande `passwd`. Il est important de choisir un mot de passe raisonnablement compliqué. Notez que ce mot de passe sera écrasé ensuite par le mot de passe admin choisi lors de la postinstallation. - -#### En avant pour la configuration ! - -Tout est prêt pour passer à la [post-installation](postinstall). - -## Sur une instance déjà installée - -Si vous avez installé votre serveur à la maison et que vous cherchez à vous connecter depuis l'extérieur du réseau local, assurez-vous d'avoir bien redirigé le port 22 vers votre serveur. (Rappel : depuis la version 3.4, il vous faut vous logguer avec l'utilisateur `admin` !) - -Si vous connaissez seulement l'IP de votre serveur : - -```bash -ssh admin@111.222.333.444 -``` - -Ensuite, entrez le mot de passe administrateur défini pendant la [post-installation](postinstall). - -Si vous avez configuré vos DNS (ou modifié votre `/etc/hosts`), vous pouvez utiliser votre nom de domaine : - -```bash -ssh admin@votre.domaine.tld -``` - -Si vous avez changé le port SSH, il faut rajouter `-p ` à la commande, par exemple : - -```bash -ssh -p 2244 admin@votre.domaine.tld -``` - -
-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`. -
- -## Quels utilisateurs ? - -Par défaut, seulement 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ée LDAP. Par défaut, ils ne peuvent pas se connecter en SSH pour des raisons de sécurité. Si vous avez absolument besoin qu'un utilisateur dispose d'un accès SSH, vous pouvez utiliser la commande : -```bash -yunohost user ssh allow -``` - -De même, il est possible de supprimer l'accès SSH à un utilisateur avec la commande : -```bash -yunohost user ssh disallow -``` - -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 -``` - -## SSH et sécurité - -N.B. : `fail2ban` bannira votre IP pour 10 minutes si vous échouez plus de 5 fois à vous identifier. Pour débannir une IP, vous pouvez regarder la page sur [Fail2Ban](/fail2ban) - -Une discussion plus complète de la sécurité et de SSH peut être trouvée sur [la page dédiée](/security). diff --git a/tests/check_code_block_syntax.sh b/tests/check_code_block_syntax.sh deleted file mode 100644 index 62e83a0f..00000000 --- a/tests/check_code_block_syntax.sh +++ /dev/null @@ -1,17 +0,0 @@ -returncode=0 -for FILE in $(ls *.md) -do - NB_OPENING=$(grep -E "^ *\`\`\` *\w+ *$" $FILE | wc -l) - NB_CLOSE=$(grep -E "^ *\`\`\` *$" $FILE | wc -l) - if [[ "$NB_OPENING" != "$NB_CLOSE" ]] - then - echo "There are some mistakes in code block syntax in $FILE ..." - returncode=1 - fi -done - -if [[ $returncode == 1 ]] -then - echo "Make sure that all the code block in the problematic files do specific the language in the opening backticks (for example, \`\`\`bash). Otherwise, rendering in the actual website will be broken because of a bug in markdown parsing lib..." - exit 1 -fi diff --git a/tests/dead_links.sh b/tests/dead_links.sh old mode 100644 new mode 100755 index c9fd27ce..3624f13f --- a/tests/dead_links.sh +++ b/tests/dead_links.sh @@ -1,19 +1,19 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + returncode=0 -# Find all markdown links and generate a list of filename.md:N:linktarget (with N the line number) -for LINK in $(grep -nr -o -E "\]\(\/?(\w|-)+\)" ./*.md | tr -d ']()/') -do - PAGE=$(echo $LINK | awk -F: '{print $3}') - [ -e "$PAGE.md" ] || echo "This Markdown link looks dead (page doesn't exist in english?) $LINK" - [ -e "$PAGE.md" ] || returncode=1 -done +# Parse default routes +grep -roh "^ *default: .*" ./pages | awk '{print $2}' | tr -d "'" | sort | uniq > .known_pages -# Find all HTML/href links and generate a list of filename.md:N:linktarget (with N the line number) -for LINK in $(grep -nr -o -E 'href="\/?(\w|-)+\"' ./*.md | sed -E 's@href="/?@@g' | tr -d '"') -do - PAGE=$(echo $LINK | awk -F: '{print $3}') - [ -e "$PAGE.md" ] || echo "This HTML link looks dead (page doesn't exist in english?) $LINK" - [ -e "$PAGE.md" ] || returncode=1 -done +# 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/tests/uniformize_links.sh b/tests/uniformize_links.sh deleted file mode 100644 index e0e1613d..00000000 --- a/tests/uniformize_links.sh +++ /dev/null @@ -1,15 +0,0 @@ -for FILE in $(ls *.md); -do - grep -q "Unfortunately, this page only exists" $FILE && continue - - # Replace markdown links with full url ... we only need the relative url - sed -i -E 's@\(https://yunohost.org/#/(\w+)\)@(/\1)@g' $FILE - - # Replace (/foo_fr) to (foo) - sed -i -E 's@\(\/?((\w|-)+)_(en|fr|es|it|ar|de|oc|ca)\)@(/\1)@g' $FILE - - # Replace href="/foo_fr" to href="foo" - sed -i -E 's@href="/?((\w|-)+)_(en|fr|es|it|ar|de|oc|ca)"@href="/\1"@g' $FILE; -done - -git checkout project_organization.md project_organization_fr.md diff --git a/tests/unreferenced_pages.sh b/tests/unreferenced_pages.sh deleted file mode 100644 index dbe83931..00000000 --- a/tests/unreferenced_pages.sh +++ /dev/null @@ -1,25 +0,0 @@ - - -MARKDOWN_TARGETS=$(grep -nr -o -E "\]\(\/?(\w|-)+\)" ./*.md | tr -d ']()/' | awk -F: '{print $3}' | sort | uniq) -HTML_TARGETS=$(grep -nr -o -E 'href="\/?(\w|-)+\"' ./*.md | sed -E 's@href="/?@@g' | tr -d '"' | awk -F: '{print $3}' | sort | uniq) - -ALL_TARGETS=$(echo $MARKDOWN_TARGETS $HTML_TARGETS) - -PAGES=$(ls *.md | sed -E 's/(_(fr|it|de|ar|oc|es|ru|ca))?\.md//g' | sort | uniq) - -returncode=0 - -for PAGE in $PAGES -do - if [[ $PAGE == "index" ]] || [[ $PAGE == "README" ]] || [[ $PAGE == "default" ]] - then - continue - fi - if ! echo $ALL_TARGETS | grep -q -w $PAGE - then - returncode=1 - echo "The following page is not referenced by any other page :( -> $PAGE" - fi -done - -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 @@ + -**Note:** This demo server could be down from time to time. -
- -
- -
- -
-
- User interface -

Username: demo
Password: demo

-
-
- Administration interface -

Password: demo

-
-
- -
- -

-***Demo server gracefully provided by -Gitoyen*** -

diff --git a/try_ar.md b/try_ar.md deleted file mode 100644 index 4ab216e4..00000000 --- a/try_ar.md +++ /dev/null @@ -1,29 +0,0 @@ -#
تجريب YunoHost
- -
-**ملاحظة :** يمكن لهذا السيرفر التجريبي أن يتوقف من وقت إلى آخر. -
- -
- -
- -
-
- واجهة المستخدم -

إسم المستخدم : demo
كلمة السر : demo

-
-
- واجهة الإدارة -

كلمة السر : demo

-
-
- -
- -

-***تم توفير الخادم التجريبي بفضل -Gitoyen*** -

- - diff --git a/try_ca.md b/try_ca.md deleted file mode 100644 index 42ab0870..00000000 --- a/try_ca.md +++ /dev/null @@ -1,27 +0,0 @@ -# Prova YunoHost - -
-**Nota:** Aquest és un servidor de demostració, podria estar caigut de tant en tant. -
- -
- -
- -
-
- Interfície d'usuària -

Nom d'usuària: demo
Contrasenya: demo

-
-
- Interfície d'administració -

Contrasenya: demo

-
-
- -
- -

-***Servidor de demostració amablement ofert per -Gitoyen*** -

diff --git a/try_de.md b/try_de.md deleted file mode 100644 index 5fc341ff..00000000 --- a/try_de.md +++ /dev/null @@ -1,27 +0,0 @@ -# YunoHost ausprobieren - -
-**Hinweis:** Dieser Demo-Server könnte zeitweilig nicht erreichbar sein. -
- -
- -
- -
-
- Anwendungen -

Username: demo
Password: demo

-
-
- Verwaltung -

Password: demo

-
-
- -
- -

-***Demo-Server freundlicherweise zur Verfügung gestellt von -Gitoyen*** -

diff --git a/try_es.md b/try_es.md deleted file mode 100644 index dc63ee34..00000000 --- a/try_es.md +++ /dev/null @@ -1,29 +0,0 @@ -# Probar YunoHost - -
-**Nota :** Este demo puede dejar de functionar de vez en cuando. -
- -
- -
- -
-
- Interfaz de usuario -

Usuario : demo
Contraseña : demo

-
-
- Interfaz de administración -

Contraseña : demo

-
-
- -
- -

-***El servidor de demo es ofrecido generosamente por -Gitoyen*** -

- - diff --git a/try_fr.md b/try_fr.md deleted file mode 100644 index 94f943be..00000000 --- a/try_fr.md +++ /dev/null @@ -1,29 +0,0 @@ -# Essayer YunoHost - -
-**Note :** Cette démo peut cesser de fonctionner de temps en temps. -
- -
- -
- -
-
- Interface utilisateur -

Utilisateur : demo
Mot de passe : demo

-
-
- Interface d’administration -

Mot de passe : demo

-
-
- -
- -

-***Le serveur de démo est fourni généreusement par -Gitoyen*** -

- - diff --git a/try_it.md b/try_it.md deleted file mode 100644 index 548e3b68..00000000 --- a/try_it.md +++ /dev/null @@ -1,27 +0,0 @@ -# Prova YunoHost - -
-**Nota:** A volte questo server demo può essere irraggiungibile -
- -
- -
- -
-
- Interfaccia utente -

Nome utente: demo
Password: demo

-
-
- Interfaccia amministrazione -

Password: demo

-
-
- -
- -

-***Il server demo è gentilmente fornito da -Gitoyen*** -

diff --git a/update.md b/update.md deleted file mode 100644 index b67f6f18..00000000 --- a/update.md +++ /dev/null @@ -1,18 +0,0 @@ -# How to update the system - -## From the webadmin - -On the administraton panel, click on Upgrade the system. - -The application search for updates and propose it if so. - -If so, click on green update button and updates are applied. - -## From the command line - -From the command line, you can run: - -``` bash -yunohost tools update -yunohost tools upgrade --system -``` diff --git a/update_fr.md b/update_fr.md deleted file mode 100644 index c025cdef..00000000 --- a/update_fr.md +++ /dev/null @@ -1,19 +0,0 @@ -# Mettre à jour le système - -## Depuis la webadmin - -Dans la partie administration, choisir Mettre à jour le système. - -L’application recherche les mises à jour et les propose s’il y en a. - -Si c’est le cas, cliquer sur le bouton vert « Mettre à jour » et les mises à -jour se font. - -## Depuis la ligne de commande - -Depuis la ligne de commande, vous pouvez utiliser : - -``` bash -yunohost tools update -yunohost tools upgrade --system -``` diff --git a/users.md b/users.md deleted file mode 100644 index a5c7154d..00000000 --- a/users.md +++ /dev/null @@ -1,35 +0,0 @@ -# Users and the SSO - -## 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 adresses 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 - -
- -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). -
- -## User groups and permissions - -See [this dedicated page](groups_and_permissions). - -## SSH access - -Users can also be allowed to connect through SSH, and SSH keys can be added for this purpose. So far, this can only be configured via the command line. See `yunohost user ssh --help` for specific commands. - -
-Be careful who you give SSH access to. This increases even more the attack surface available to a malicious user. -
diff --git a/users_fr.md b/users_fr.md deleted file mode 100644 index fe236849..00000000 --- a/users_fr.md +++ /dev/null @@ -1,35 +0,0 @@ -# Les utilisateurs et le SSO - -## 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 - -
- -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 changer 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 à l'administrateur web ! 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 - -Les utilisateurs peuvent également être autorisés à se connecter via SSH, et des clés SSH peuvent être ajoutées à cette fin. Jusqu'à présent, ceci ne peut être configuré que via la ligne de commande. Voir `yunohost user ssh --help` pour des commandes spécifiques. - -
-Faites attention à qui vous donnez accès à SSH. Cela augmente encore plus la surface d'attaque disponible pour un utilisateur malveillant. -
diff --git a/vpn_advantage.md b/vpn_advantage.md deleted file mode 100644 index d2244385..00000000 --- a/vpn_advantage.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](vpn_advantage_fr) for now. diff --git a/whatsyunohost.md b/whatsyunohost.md deleted file mode 100644 index 70d34bb2..00000000 --- a/whatsyunohost.md +++ /dev/null @@ -1,53 +0,0 @@ -# What is YunoHost? - - - -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 - -- Based on Debian; -- Administrate your server through a **friendly web interface** ; -- Deploy **apps in just a few clicks**; -- Manage **users** (based on LDAP); -- Manage **domain names**; -- Create and restore **backups**; -- Connect to all apps simultaneously through the **user portal** (NGINX, SSOwat); -- Includes a **full e-mail stack** (Postfix, Dovecot, Rspamd, DKIM); -- ... as well as **an instant messaging server** (XMPP); -- Manages **SSL certificates** (based on Let's Encrypt) ; -- ... 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: -
- -## 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): - - - - - -Click to download. - -Licence: CC-BY-SA 4.0 diff --git a/whatsyunohost_de.md b/whatsyunohost_de.md deleted file mode 100644 index 959ffd34..00000000 --- a/whatsyunohost_de.md +++ /dev/null @@ -1,52 +0,0 @@ -# Was ist YunoHost? - - - -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 - -- Basierend auf Debian ; -- Verwalten Sie Ihren Server über eine **benutzerfreundliche Weboberfläche** ; -- Bereitstellen von **Apps mit nur wenigen Klicks** ; -- Verwalten Sie **Benutzer** (basierend auf LDAP) ; -- Verwalten Sie Ihre **Domainnamen** ; -- Erstellen und Wiederherstellen von **Backups** ; -- Stellen Sie über das **Benutzerportal** (NGINX, SSOwat) gleichzeitig eine Verbindung zu allen Apps her ; -- Enthält einen **vollständigen E-Mail-Stack** (Postfix, Dovecot, Rspamd, DKIM) ; -- … sowie **einen Instant Messaging Server** (XMPP) ; -- Verwaltet **SSL-Zertifikate** (basierend auf Let's Encrypt) ; -- … 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: -
- -## 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): - - - - - -Zum download Klicken. - -Licence: CC-BY-SA 4.0 diff --git a/whatsyunohost_es.md b/whatsyunohost_es.md deleted file mode 100644 index 143f4b52..00000000 --- a/whatsyunohost_es.md +++ /dev/null @@ -1,53 +0,0 @@ -# ¿Qué es YunoHost? - - - -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 copyleft mantenido exclusivamente por voluntarios. Se puede considerar técnicamente como una distribución basada en [Debian GNU/Linux](https://debian.org) y se puede instalar en [muchos tipos de hardware](install). - -## Características - -- Basado en Debian ; -- Administra tu servidor mediante un **interfaz web amigable** ; -- Despliega **apps en sólo unos pocos clics** ; -- Administra **usuarios** (con soporte en LDAP); -- Administra **nombres de dominio** ; -- Crea y restaura **copias de respaldo** ; -- Conecta simultáneamente a todas las apps mediante el **portal del usuario** (NGINX, SSOwat) ; -- Incluye una **instalación completa de correo electrónico** (Postfix, Dovecot, Rspamd, DKIM) ; -- … así como **un servidor de mensajería instanea** (XMPP) ; -- Administra **certificados SSL** (apoyándose en Let's Encrypt) ; -- … y **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
- -Todo lo que se necesitaba para hacer algo útil era un interfaz de admin para el servidor de Beudbeud, así que Kload decidió desarrollar uno. Finalmente, tras automatizar varias configuraciones y empaquetar algunas apps web, YunoHost v1 quedó terminado. - -Notando un entusiasmo creciente alrededor de YunoHost y el autoalojamiento en general, los desarrolladores originales junto con nuevos participantes decidieron comenzar a trabajar en la versión 2, más extensible, potente, fácil de usar, y ya de paso preparar una taza 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: -
- -## ¿Qué no es YunoHost? - -Incluso aunque YunoHost puede manejar multiples dominios y multiples usuarios, **no está diseñado para ser un sistema mancomunado**. - -Primero, el software es demasiado joven, no está probado a gran escala y por tanto probáblemente tampoco suficientemente optimizado para centenares de usuarios a la vez. Dicho esto, no queremos llevar al software en esa dirección. La virtualización se democratiza y se recomienda usarla ya que es un modo más impermeable de lograr mutualización que un sistema "monolítico" como YunoHost. - -Puedes alojar a tus amistades, tu familia y a tu compañía con facilidad y seguridad, pero tienes que **confiar en tus usarios**, y sobre todo ellos tienen que confiar en tí. Si aún así quieres proveer servicios YunoHost a desconocidos, creemos que es mejor un VPS por usuario. - -## Arte - -PNG con el logotipo de YunoHost en blanco y negro por ToZz (400 × 400 px): - - - - - -Clic para descargar. - -Licencia: CC-BY-SA 4.0 diff --git a/write_documentation.md b/write_documentation.md deleted file mode 100644 index 377c0628..00000000 --- a/write_documentation.md +++ /dev/null @@ -1,21 +0,0 @@ -# Write documentation - -## Online - -This site allows to edit content directly online. - -You can edit any page by pressing `ESC` 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 `ESC` again or by clicking the "preview" button. - -To create a new page, you can enter the URL and edit the page from there. - -Once edited, you are able to submit your change by filling an email address. - -## Via GitHub - -The YunoHost documentation is managed through a [Git repository](https://github.com/YunoHost/doc). You can send pull-requests, and do not forget to report your issues. - -Because the online editor doesn't support uploading files, using Git is the prefered way if you need to upload media (e.g. images). - -## Syntax - -This page uses the markdown syntax, please refer to the [documentation](doc_markdown_guide) for further information. diff --git a/write_documentation_fr.md b/write_documentation_fr.md deleted file mode 100644 index 9edde852..00000000 --- a/write_documentation_fr.md +++ /dev/null @@ -1,17 +0,0 @@ -# Rédaction de la documentation - -## Sur le site - -Ce site permet d’éditer le contenu directement en ligne. - -Pour éditer une page, appuyez sur la touche `Échap` ou cliquez sur le bouton « Éditer » en bas à droite de la page. Vous pourrez visualiser vos modifications en appuyant de nouveau sur `Échap`, ou en cliquant sur le bouton « Aperçu » en bas à droite de la page. - -Une fois l’édition effectuée, vous pouvez soumettre vos modifications en renseignant un mail. - -## Via GitHub - -La documentation de YunoHost est gérée par un [dépot Git](https://github.com/YunoHost/doc). Vous pouvez envoyer des pull-requests. - -## Syntaxe - -La documentation utilise la syntaxe Markdown. Veuillez vous référer à la [documentation](doc_markdown_guide) pour plus d’informations.