diff --git a/.gitignore b/.gitignore index 783a4aee..5101aeaf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ -*~ -*.sw[op] +/* +!/pages +!/images +!/themes +/themes/learn4 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/OVH_fr.md b/OVH_fr.md deleted file mode 100644 index 303626bd..00000000 --- a/OVH_fr.md +++ /dev/null @@ -1,33 +0,0 @@ -#Configuration DNS avec 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: - -<img src="/images/ovh_control_panel.png" width=800> - -Cliquez sur l'onglet **Zone DNS**, puis sur **Ajouter une entrée**: - -<img src="/images/ovh_dns_zone.png" width=800> - -Il suffit maintenant d'ajouter les redirections DNS comme indiqué dans la [configuration DNS standard](/dns_config). - - -###IP dynamique - -[Tutoriel plus général sur l’IP dynamique](/dns_dynamicip). - -Cette partie est à suivre, que si votre IP est dynamique. - -Pour savoir si votre fournisseur d’accès internet vous fournit une IP dynamique [voir ici](/isp). - -Commencez par créer un identifiant DynHost. - -Suivez [ce tutoriel](http://blog.developpez.com/brutus/p6316/ubuntu/configurer_dynhost_ovh_avec_ddclient) pour l’installation de ddclient. -ddclient annonce à OVH le changement d’IP. OVH va alors changer votre IP. - -Il faut ajouter dans le fichier de configuration : -* votre identifiant et votre mot de passe DynHost -* votre nom de domaine - -Il existe un [guide d'utilisation DynHost fait par OVH](https://docs.ovh.com/fr/fr/web/domains/utilisation-dynhost/). diff --git a/README.md b/README.md index ed5d3ad2..31d94298 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,26 @@ # 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 + +You can refer to the page on [writing documentation](https://yunohost.org/write_documentation). + +## 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/XMPP.md b/XMPP.md deleted file mode 100644 index 3cebe292..00000000 --- a/XMPP.md +++ /dev/null @@ -1,60 +0,0 @@ -# Chat, VoIP and social network with <img src="/images/XMPP_logo.png" width=100> - -YunoHost comes installed by default with an instant messaging server 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, to share messages and files, and to make voice and video calls using XMPP. - -## XMPP account - -To use an XMPP account you need a username, which takes 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 email address and password. - -## Connecting to your YunoHost XMPP account - -You can connect to your YunoHost XMPP account in different ways. - -### Web clients - -- [Movim](https://movim.eu) -- [ConverseJS](https://conversejs.org/) -- [Libervia/Salut à Toi](https://salut-a-toi.org/) - -### Desktop clients - -- [Gajim](http://gajim.org/) (Linux,Windows) -- [Dino](https://dino.im) (Linux) -- [Thunderbird](https://www.thunderbird.net/fr/) (multiplatform) -- [Beagle IM](https://beagle.im/) (Mac OS) -- [Profanity](https://profanity-im.github.io/) (Linux) - -### Mobile clients - -- [Conversations](https://conversations.im/) (Android) -- [Xabber](http://xabber.com) (Android) -- [Movim under Android](https://movim.eu) -- [Monal](https://monal.im/) (iOS) -- [Siskin IM](https://siskin.im/) (iOS) -- [Kaidan](https://www.kaidan.im/) (Ubuntu Touch / Plasma Mobile) - -Here is an exhaustive list of XMPP clients : https://xmpp.org/software/clients.html - -## Encrypt conversations with OMEMO - -XMPP chats can be made secure and private using [OMEMO encryption](https://xmpp.org/extensions/xep-0384.html), for instance using Gajim: -- Install `gajim` and the plugin `gajim-omemo` -- Enable the plugin in `Tools > Plugins` -- Enable it -- Enable the encryption in the chat with somebody who also has OMEMO - -## Chatrooms - -To create a chatroom (multi-user chat) on your YunoHost server, use the identifier `chatroomname@muc.yourdomain.tld`. - -For this to work you need to [add the corresponding `muc.` DNS record](/dns_config) in the DNS configuration. - -## VoIP and videoconferences - -A practical tool to call an XMPP client, either with voice or voice+video, is to use the client [Jitsi](http://jitsi.org/). diff --git a/admin.md b/admin.md deleted file mode 100644 index d7c9b574..00000000 --- a/admin.md +++ /dev/null @@ -1,12 +0,0 @@ -# Administrator web interface - -Yunohost has an administrator web interface. The other way to administrate your Yunohost install is through the [command line](/commandline). - -### Access - -You can access your administrator web interface at this address: https://example.org/yunohost/admin (replace 'example.org' with your own domain name) - -<div class="text-center" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> -<img src="/images/webadmin.png" style="max-width:100%;"> -</div> - diff --git a/admin_es.md b/admin_es.md deleted file mode 100644 index c92be31c..00000000 --- a/admin_es.md +++ /dev/null @@ -1,11 +0,0 @@ -# La interfaz de administración web - -Yunohost tiene una interfaz gráfica de administración. El otro método consiste en utilizar la [linea de comando](/commandline). - -### Acceso - -La interfaz admin está accesible desde tu instancia Yunohost en esta dirección : https://ejemplo.org/yunohost/admin (reemplaza ejemplo.org por tu nombre de dominio) - -<div class="text-center" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> -<img src="/images/webadmin.png" style="max-width:100%;"> -</div> diff --git a/admin_fr.md b/admin_fr.md deleted file mode 100644 index 1d7bc291..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) - -<div class="text-center" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> -<img src="/images/webadmin_fr.png" style="max-width:100%;"> -</div> - diff --git a/admindoc.md b/admindoc.md deleted file mode 100644 index 4ede7f44..00000000 --- a/admindoc.md +++ /dev/null @@ -1,63 +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) - * [Utilisation de certificats autres que Let's Encrypt](/certificate_custom) - * [A discussion about the advantages of using a VPN](/vpn_advantage) - * [(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 iptables/fail2ban](/fail2ban) - * [Configuring IPv6](/ipv6) diff --git a/admindoc_de.md b/admindoc_de.md deleted file mode 100644 index ee77f645..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) - * [Applicationen](/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 6fd014c3..00000000 --- a/admindoc_fr.md +++ /dev/null @@ -1,63 +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) - * [Equivalence 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) - * [(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_bitwarden.md b/app_bitwarden.md deleted file mode 100644 index 6da37131..00000000 --- a/app_bitwarden.md +++ /dev/null @@ -1,44 +0,0 @@ -# <img src="/images/bitwarden_logo.png" width="80px" alt="Bitwarden's logo"> Bitwarden - -[](https://install-app.yunohost.org/?app=bitwarden) [](https://dash.yunohost.org/appci/app/bitwarden) - -### Index - -- [Configuration](#configuration) -- [Limitations with YunoHost](#limitations-with-yunohost) -- [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. - -The software is available for most operating systems (Linux, Windows, macOS, iOS, Android and command-line), and as a web browser plug-in. It is also possible to view passwords from a website.[¹](#sources) - -## Configuration - -To configure the app, go to this address: `sub.domain.tld/admin` - -## Limitations with YunoHost - -HTTP and LDAP authentication are not supported. - -## Customer applications - -| Application name [²] | Platform | Multi-account | Source | Play Store | F-Droid | Apple Store | -|----------------------|----------|---------------|--------|------------|---------|-------------| -| Bitwarden | Linux / Mac / Windows | Oui | [bitwarden.com - download](https://bitwarden.com/#download) | -| Bitwarden | Android / iOS | ? | | [Playstore - Birwarden](https://play.google.com/store/apps/details?id=com.x8bit.bitwarden) | X | [App Store - Bitwarden](https://itunes.apple.com/app/bitwarden-free-password-manager/id1137397744?mt=8) | - -> [²]: (of) : Official / (un) : Unofficial - -## Useful links - -+ Website: [bitwarden.com](https://bitwarden.com/) -+ Official documentation: [help.bitwarden.com](https://help.bitwarden.com/) -+ Application software repository: [github.com - YunoHost-Apps/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) - ------ - -### Sources - -¹ [wikipedia.org - Bitwarden](https://en.wikipedia.org/wiki/Bitwarden) diff --git a/app_bitwarden_fr.md b/app_bitwarden_fr.md deleted file mode 100644 index 6d8ed022..00000000 --- a/app_bitwarden_fr.md +++ /dev/null @@ -1,45 +0,0 @@ -# <img src="/images/bitwarden_logo.png" width="80px" alt="logo de Bitwarden"> Bitwarden - -[](https://install-app.yunohost.org/?app=bitwarden) [](https://dash.yunohost.org/appci/app/bitwarden) - -### Index - -- [Configuration](#configuration) -- [Limitations avec YunoHost](#limitations-avec-yunohost) -- [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. - -Le logiciel est disponible sur la plupart des systèmes d'exploitation (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` - -## Limitations avec YunoHost - -Les authentification HTTP et LDAP ne sont pas pris en charges. - -## Applications clientes - -| Nom de l'application [²] | Plateforme | Multi-comptes | Source | Play Store | F-Droid | Apple Store | -|--------------------------|------------|---------------|--------|------------|---------|-------------| -| Bitwarden | Linux / Mac / Windows | Oui | [bitwarden.com - download](https://bitwarden.com/#download) | -| Bitwarden | Android / iOS | ? | | [Playstore - Birwarden](https://play.google.com/store/apps/details?id=com.x8bit.bitwarden) | X | [App Store - Bitwarden](https://itunes.apple.com/app/bitwarden-free-password-manager/id1137397744?mt=8) | - - -> [²]: (of) : Officielle / (no) : non officiel - -## Liens utiles - - + Site web : [bitwarden.com (en)](https://bitwarden.com/) - + Documentation officielle : [help.bitwarden.com (en)](https://help.bitwarden.com/) - + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/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) - - ------ - - ### Sources - -¹ [wikipedia.org - Bitwarden](https://fr.wikipedia.org/wiki/Bitwarden) diff --git a/app_collaboradocker.md b/app_collaboradocker.md deleted file mode 100644 index 504fe174..00000000 --- a/app_collaboradocker.md +++ /dev/null @@ -1,28 +0,0 @@ -# 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)). - -### 0. Install Nextcloud - -If Nextcloud is not already installed on your Yunohost instance, you may do so with this link : [Install Nextcloud](https://install-app.yunohost.org/?app=nextcloud) - -### 1. Install Collabora app within yunohost -**In the admin interface :** - -Applications > Install > at the bottom _Install a custom application_ > enter this url « https://github.com/aymhce/collaboradocker_ynh » > Enter the domain/subdomain name you wish for the Collabora application. - -### 2. Configuration within Nextcloud - - **Add the Collabora Online application in Nextcloud :** - -Click on the user icon (top right) > Applications > Desktop & Text > Under the « Collabora Online » tile, click on `Activate` . - -**Setup Collabora in Nextcloud :** - -Click on the user icon (top right) > Parametres > Under _Administration_, _Collabora Online_ . -Specify the « Online Collabora server » with the domain name chosen during the collabora install in Yunohost (full with « https:// »). - -### 3. Reboot -To allow all the pieces to work, system must be reboot. You can do so through the admin interface (Tools > Stop/reboot > `Reboot`) or via the command line interface : ``sudo reboot now``. - -## Debugging -Following some system, Yunohost or app updates, Collabora may display an error message such as "It's embarrassing...". To put things back in order, you just have to restart the docker machine, with the command ``systemctl restart docker``. diff --git a/app_fallback.md b/app_fallback.md deleted file mode 100644 index 23719557..00000000 --- a/app_fallback.md +++ /dev/null @@ -1,20 +0,0 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Fallback - -[](https://install-app.yunohost.org/?app=APPLICATION) [](https://dash.yunohost.org/appci/app/APPLICATION) - -### 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_gogs.md b/app_gogs.md deleted file mode 100644 index f3db6b47..00000000 --- a/app_gogs.md +++ /dev/null @@ -1,18 +0,0 @@ -# <img src="/images/gogs_logo.svg" height="80px" alt="Gogs's logo"> Gogs - -[](https://install-app.yunohost.org/?app=gogs) [](https://dash.yunohost.org/appci/app/gogs) - -### Index - -- [Useful links](#useful-links) - -Gogs is a minimalist software forge using git. Gogs has been designed to work best on low-powered hardware such as Raspberry Pi. -It is therefore suitable for self-hosting a git forge. -To fully use the power of gogs you need to understand what git is and how to use version control software. - -## Useful links - -+ Website: [gogs.io](https://gogs.io/) -+ Official documentation: [gogs.io - docs](https://gogs.io/docs) -+ Application software repository: [github.com - YunoHost-Apps/gogs](https://github.com/YunoHost-Apps/gogs_ynh) -+ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/gogs/issues](https://github.com/YunoHost-Apps/gogs_ynh/issues) diff --git a/app_gogs_fr.md b/app_gogs_fr.md deleted file mode 100644 index 602fb752..00000000 --- a/app_gogs_fr.md +++ /dev/null @@ -1,18 +0,0 @@ -# <img src="/images/gogs_logo.svg" height="80px" alt="logo de Gogs"> Gogs - -[](https://install-app.yunohost.org/?app=gogs) [](https://dash.yunohost.org/appci/app/gogs) - -### Index - -- [Liens utiles](#liens-utiles) - -Gogs est une forge logiciel minimaliste utilisant git. Gogs a été conçu pour pouvoir fonctionner de manières optimale sur du matériel peu puissant type Raspberry Pi. -Il est donc adapté à l'auto-hébergement d'une forge git. -Pour utiliser pleinement la puissance de gogs vous devez avoir appréhender ce qu'est git et l'utilisation d'un [logiciel de gestion de versions](https://fr.wikipedia.org/wiki/Logiciel_de_gestion_de_versions). - -## Liens utiles - - + Site web : [gogs.io](https://gogs.io) - + Documentation officielle : [gogs.io - docs](https://gogs.io/docs) - + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/gogs](https://github.com/YunoHost-Apps/gogs_ynh) - + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/gogs/issues](https://github.com/YunoHost-Apps/gogs_ynh/issues) diff --git a/app_jappix.md b/app_jappix.md deleted file mode 100644 index 900961e9..00000000 --- a/app_jappix.md +++ /dev/null @@ -1,3 +0,0 @@ -# <img src="/images/jappix_logo.png" height="80px" alt="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 @@ -# <img src="/images/jappix_logo.png" height="80px" alt="Jappix logo"> Jappix - -Jappix est un client web [XMPP](/XMPP). diff --git a/app_mediawiki.md b/app_mediawiki.md deleted file mode 100644 index ae080898..00000000 --- a/app_mediawiki.md +++ /dev/null @@ -1,15 +0,0 @@ -# Mediawiki - - - -MediaWiki is a free and open source software wiki package written in PHP, originally for use on Wikipedia. - -## Overview - - - -## Link - -Mediawiki : https://www.mediawiki.org/ -FAQ : https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ -Support Desk : https://www.mediawiki.org/wiki/Project:Support_desk \ No newline at end of file diff --git a/app_mediawiki_fr.md b/app_mediawiki_fr.md deleted file mode 100644 index 93e9c0e0..00000000 --- a/app_mediawiki_fr.md +++ /dev/null @@ -1,15 +0,0 @@ -# Mediawiki - - - -MediaWiki est un ensemble wiki à base de logiciels libres Open source, développé à l’origine pour Wikipédia. - -## Aperçu - - - -## Liens - -Mediawiki : https://www.mediawiki.org/ -FAQ : https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ -Support Desk : https://www.mediawiki.org/wiki/Project:Support_desk \ No newline at end of file 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_piwigo.md b/app_piwigo.md deleted file mode 100644 index 0ed09045..00000000 --- a/app_piwigo.md +++ /dev/null @@ -1,32 +0,0 @@ -## <img src="https://yunohost.org/images/piwigo.png"> - - - - -[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. - -[](https://install-app.yunohost.org/?app=piwigo) - - - -## 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_sogo.md b/app_sogo.md deleted file mode 100644 index 09a46e5f..00000000 --- a/app_sogo.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](app_sogo_fr) for now. diff --git a/app_sogo_fr.md b/app_sogo_fr.md deleted file mode 100644 index 2ae3e848..00000000 --- a/app_sogo_fr.md +++ /dev/null @@ -1,8 +0,0 @@ -#  SOGo - -SOGo est un service de webmail pour votre serveur email, c'est une alternative à [RoundCube](app_roundcube). Il permet aussi la gestion des agendas et contacts présents sur le serveur. - -## Quelques liens utiles - - + Site officiel de SOGo : [sogo.nu](https://sogo.nu/a) - + Dépot de l'application pour Yunohost : [github.com/YunoHost-Apps/sogo_ynh](https://github.com/YunoHost-Apps/sogo_ynh) diff --git a/app_update.md b/app_update.md deleted file mode 100644 index da5a5b58..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 ee35db0b..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 181abe8d..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 fd312736..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 dac06cb7..00000000 --- a/apps.md +++ /dev/null @@ -1,379 +0,0 @@ -# Application catalog - -<span class="javascriptDisclaimer"> -This page requires Javascript enabled to display properly :s. -<br/> -<br/> -</span> - -<!-- -Search bar ---> - -<div class="input-group"> - <span id="basic-addon1" class="input-group-addon" ><span class="glyphicon glyphicon-search"></span></span> - <input id="filter-app-cards" type="text" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/> - <div class="input-group-btn"> - <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - <span id="current-quality-filter" data-filter="decent">Only decent quality apps</span> <span class="caret"></span> - </button> - - <ul class="dropdown-menu"> - <li><a href="#" data-quality-filter="high">Only high quality apps</a></li> - <li><a href="#" data-quality-filter="decent">Only decent quality apps</a></li> - <li><a href="#" data-quality-filter="working">Only working apps</a></li> - <li><a href="#" data-quality-filter="none">All apps</a></li> - </ul> - </div> -</div> -<br /> - -<!-- -Disclaimers ---> - -<div class="alert alert-info">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.</div> - -<div id="bad-quality-apps-disclaimer" class="alert alert-warning"> - Applications flagged as <span class="label label-warning label-as-badge">low quality</span> 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. -</div> - -<div id="broken-apps-disclaimer" class="alert alert-danger"> - Applications flagged as <span class="label label-danger label-as-badge">not working</span> are known to be broken and/or are still in development. **Do not install them** in a production environment! -</div> - -<div id="app-cards-list" class="app-cards-list"></div> - -<div class="alert alert-warning">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 <a href="/apps_wishlist">apps wishlist</a>.</div> - -<!-- -Custom CSS for this page ---> - -<style> -#wrapper { - max-width: 1100px; -} - -/*================================================= - Search bar -=================================================*/ -#filter-app-cards, #app-cards-list { - width:100%; -} -/*===============================================*/ - -/*================================================= - Force return space after card list -=================================================*/ -#app-cards-list:after { - content:''; - display:block; - clear: both; -} -/*===============================================*/ - -/*================================================= - App card -=================================================*/ - -.app-card { - margin-bottom:20px; - width:31.2%; - float:left; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; - border-radius: 3px; - position: relative; - height: 230px; -} -.app-title { - margin-top: 0; - margin-bottom: 5px; - font-size: 1.2em; - font-weight: 700; - line-height: 1.1; - color: black; - padding: 15px; - padding-bottom: 0; -} -.app-title .label { - font-size: 0.5em; - display: inline-block; - vertical-align: middle; - padding: 0.5em 0.6em; - padding-bottom: 0.3em; -} - -.label-epic { - background-color: darkorchid; -} - -.app-descr { - height:100px; - overflow: hidden; - padding: 0 15px; -} - -.app-footer { - width:100%; - position: absolute; - bottom: 0; -} - -.app-maintainer { - font-size: 0.7em; - text-align: right; - margin-right: 5px; -} - -.app-card .unmaintained { - color: #e0aa33; -} - -/*=============================================== - App buttons -=================================================*/ -.app-buttons { - width:100%; -} -.app-buttons > .btn { - border-bottom:0; - font-size: 0.9em; - line-height: 1.58; -} -.app-buttons > .btn:first-child { - border-left:0; - border-top-left-radius:0; -} -.app-buttons > .btn:last-child { - border-right:0; - border-top-right-radius:0; - margin-left: 0px; - width: 33.6%; -} - -/*===============================================*/ -</style> - -<!-- -App card template ---> - -<script type="text/template" id="app-template2"> - <div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}"> - - <div class="app-title">{app_name}</div> - <div class="app-descr">{app_description}</div> - <div class="app-footer"> - <div class="app-maintainer"> - <span class="glyphicon glyphicon-refresh"></span> {app_update} - - <span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span> - </div> - <div class="app-buttons btn-group" role="group"> - <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a> - <a href="#/app_{app_id}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> - <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a> - </div> - </div> - </div> -</script> - -<!-- -Javascript helpers ---> - -<script> - -function timeConverter(UNIX_timestamp) { - var a = new Date(UNIX_timestamp*1000); - var months = ['January','February','March','April','May','June','July','August','September','October','November','December']; - var year = a.getFullYear(); - var month = months[a.getMonth()]; - var date = a.getDate(); - var hour = a.getHours(); - var min = a.getMinutes(); - if (hour < 10) { hour = '0' + hour; } - if (min < 10) { min = '0' + min; } - var time = date+' '+month+' '+year;//+' at '+hour+':'+min - return time; -} - - -$(document).ready(function () { - - var default_lang = "en"; - - // Hide warrant about states when we're using the default filter - $('#state-disclaimer').hide(); - var quality_filters = "decent"; - - function filter(){ - - var current_quality_filter = $('#current-quality-filter').data("filter"); - var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); - - $('.app-card').each(function() { - // This is where we actually define how apps are filtered: - // we look for the name of the app (h3) and try to find the user input - // + we check this app match the current quality filter - var text = $(this).find('.app-title').text().toLowerCase() + " " + $(this).find('.app-descr').text().toLowerCase(); - if (text.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0) - { - $(this).show(); - } - else - { - $(this).hide(); - } - }); - - // Display or hide the disclaimers depending on the current filter... - ((current_quality_filter == "working") || (current_quality_filter == "none")) ? $("#bad-quality-apps-disclaimer").show() : $("#bad-quality-apps-disclaimer").hide(); - ((current_quality_filter == "none")) ? $("#broken-apps-disclaimer").show() : $("#broken-apps-disclaimer").hide(); - } - - //================================================= - // Search & filter bar event - //================================================= - $('#filter-app-cards').keyup(filter); - - $('a[data-quality-filter]').on("click", function(){ - $('#current-quality-filter').text($(this).text()); - $('#current-quality-filter').data("filter", $(this).data("quality-filter")); - filter(); - }); - - filter(); - - //================================================= - // Upload apps lists - //================================================= - var catalog = undefined; - - // Fetch application catalog - - $.getJSON('https://app.yunohost.org/default/v2/apps.json', {}, function(data) { - - catalog = $.map(data["apps"], function(el) { return el; }); - - // Clarify high quality state, and level if undefined or inprogress or notworking... - - $.each(catalog, function(k, infos) { - if ((infos.level === undefined) || (infos.level === 0) || (infos.state === "inprogress") || (infos.state === "notworking")) { - infos.level = null; - } - if ((infos.high_quality === true) && (infos.level === 8)) { - infos.state = "high quality"; - } - else if ((infos.state === "working") && (infos.level !== null) && (infos.level <= 4)) { - infos.state = "low quality"; - } - }); - - // Sort apps according to their state and level... - - catalog.sort(function(a, b){ - a_state = (a.state === "high quality")?4:(a.level > 4)?3:(a.state > 0)?2:1; - b_state = (b.state === "high quality")?4:(b.level > 4)?3:(b.state > 0)?2:1; - if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;} - else if (a.manifest.id == b.manifest.id) {return 0;} - return -1; - }); - - // Add the card for each app - - $.each(catalog, function(k, infos) { - - app_id = infos.manifest.id; - - // Define what style to use for state, level and install button - // according to the app quality .... - - if (infos.state === "high quality") { - app_quality = "high,decent,working,none"; - app_badge = "high quality"; - app_badge_css_style = "epic"; - app_install_css_style = "success"; - } else if ((infos.state === "working") && (infos.level > 4)) { - app_quality = "decent,working,none"; - app_badge = null; - app_badge_css_style = "success"; - app_install_css_style = "success"; - } else if (infos.state === "low quality") { - app_quality = "working,none"; - app_badge = "low quality"; - app_badge_css_style = "warning"; - app_install_css_style = "warning"; - } else { - app_quality = "none"; - app_badge = "not working"; - app_badge_css_style = "danger"; - app_install_css_style = "danger"; - } - - // If level is null, we wanna display '?' - if (infos.level == null) { - infos.level = '?'; - } - - // Fill the template - html = $('#app-template2').html() - .replace(/{app_id}/g, app_id) - .replace(/{app_name}/g, infos.manifest.name) - .replace('{app_description}', infos.manifest.description[default_lang] || infos.manifest.description["en"]) - .replace(/{app_git}/g, infos.git.url) - .replace('{app_branch}', infos.git.branch) - .replace('{app_level}', infos.level) - .replace('{app_quality}', app_quality) - .replace('{app_update}', timeConverter(infos.lastUpdate)) - .replace('{app_install_css_style}', app_install_css_style); - - // Handle the maintainer info - if (infos.maintained == false) - { - html = html - .replace('{maintained_state}', 'unmaintained') - .replace('{maintained_icon}', 'warning-sign') - .replace('{app_maintainer}', "Unmaintained") - .replace('{maintained_help}', "This package is currently unmaintained. Feel free to propose yourself as the new maintainer !"); - } - else { - html = html - .replace('{maintained_state}', 'maintained') - .replace('{maintained_icon}', 'user') - .replace('{maintained_help}', "Current maintainer of this package"); - - if ((infos.manifest.developer) && (infos.manifest.developer.name)) { - html = html.replace('{app_maintainer}', infos.manifest.developer.name); - } - else if ((infos.manifest.maintainer) && (infos.manifest.maintainer.name)) { - html = html.replace('{app_maintainer}', infos.manifest.maintainer.name); - } - else { - html = html.replace('{app_maintainer}', "???"); - } - } - - // Fill the template - $('#app-cards-list').append(html); - $('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id); - if (app_badge !== null) { - $('.app-card_'+ app_id + ' .app-title').append(' <span class="label label-'+app_badge_css_style+'">'+app_badge+'</span>'); - } - if (typeof(infos.category) === "string") { - category = data["categories"].find(function(el) { return el.id == infos.category; }); - if (typeof(category) !== "undefined") - { - display = category["title"][default_lang] || category["title"]["en"]; - $('.app-card_'+ app_id + ' .app-title').append(' <span class="label label-default">'+display.toLowerCase()+'</span>'); - } - } - }); - - filter(); - }); - //================================================= -}); -</script> diff --git a/apps_fr.md b/apps_fr.md deleted file mode 100644 index 6543d30a..00000000 --- a/apps_fr.md +++ /dev/null @@ -1,378 +0,0 @@ -# Catalogue d'applications - -<span class="javascriptDisclaimer"> -Cette page requiert que Javascript soit activé pour s'afficher correctement :s. -<br/> -<br/> -</span> - -<!-- -Search bar ---> -<div class="input-group"> - <span id="basic-addon1" class="input-group-addon" ><span class="glyphicon glyphicon-search"></span></span> - <input id="filter-app-cards" type="text" class="form-control" placeholder="Rechercher des apps..." aria-describedby="basic-addon1"/> - <div class="input-group-btn"> - <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - <span id="current-quality-filter" data-filter="decent">Seulement les apps de qualité décente</span> <span class="caret"></span> - </button> - - <ul class="dropdown-menu"> - <li><a href="#" data-quality-filter="high">Seulement les apps haute-qualité</a></li> - <li><a href="#" data-quality-filter="decent">Seulement les apps de qualité décente</a></li> - <li><a href="#" data-quality-filter="working">Seulement les apps fonctionelles</a></li> - <li><a href="#" data-quality-filter="none">Toutes les apps</a></li> - </ul> - </div> -</div> -<br /> - -<!-- -Disclaimers ---> - -<div class="alert alert-info">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.</div> - -<div id="bad-quality-apps-disclaimer" class="alert alert-warning"> - Les applications étiquettées <span class="label label-warning label-as-badge">low quality</span> 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. -</div> - -<div id="broken-apps-disclaimer" class="alert alert-danger"> - Les applications étiquettées <span class="label label-danger label-as-badge">not working</span> sont connues pour être cassées et/ou encore en développement. **Ne les installez pas** sur un serveur de production! -</div> - -<div id="app-cards-list" class="app-cards-list"></div> - -<div class="alert alert-warning">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 <a href="/apps_wishlist">liste d'apps souhaitées</a>.</div> - -<!-- -Custom CSS for this page ---> - -<style> -#wrapper { - max-width: 1100px; -} - -/*================================================= - Search bar -=================================================*/ -#filter-app-cards, #app-cards-list { - width:100%; -} -/*===============================================*/ - -/*================================================= - Force return space after card list -=================================================*/ -#app-cards-list:after { - content:''; - display:block; - clear: both; -} -/*===============================================*/ - -/*================================================= - App card -=================================================*/ - -.app-card { - margin-bottom:20px; - width:31.2%; - float:left; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; - border-radius: 3px; - position: relative; - height: 230px; -} -.app-title { - margin-top: 0; - margin-bottom: 5px; - font-size: 1.2em; - font-weight: 700; - line-height: 1.1; - color: black; - padding: 15px; - padding-bottom: 0; -} -.app-title .label { - font-size: 0.5em; - display: inline-block; - vertical-align: middle; - padding: 0.5em 0.6em; - padding-bottom: 0.3em; -} - -.label-epic { - background-color: darkorchid; -} - -.app-descr { - height:100px; - overflow: hidden; - padding: 0 15px; -} - -.app-footer { - width:100%; - position: absolute; - bottom: 0; -} - -.app-maintainer { - font-size: 0.7em; - text-align: right; - margin-right: 5px; -} - -.app-card .unmaintained { - color: #e0aa33; -} - -/*=============================================== - App buttons -=================================================*/ -.app-buttons { - width:100%; -} -.app-buttons > .btn { - border-bottom:0; - font-size: 0.9em; - line-height: 1.58; -} -.app-buttons > .btn:first-child { - border-left:0; - border-top-left-radius:0; -} -.app-buttons > .btn:last-child { - border-right:0; - border-top-right-radius:0; - margin-left: 0px; - width: 33.6%; -} - -/*===============================================*/ -</style> - -<!-- -App card template ---> - -<script type="text/template" id="app-template2"> - <div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}"> - - <div class="app-title">{app_name}</div> - <div class="app-descr">{app_description}</div> - <div class="app-footer"> - <div class="app-maintainer"> - <span class="glyphicon glyphicon-refresh"></span> {app_update} - - <span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span> - </div> - <div class="app-buttons btn-group" role="group"> - <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a> - <a href="#/app_{app_id}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> - <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a> - </div> - </div> - </div> -</script> - -<!-- -Javascript helpers ---> - -<script> - -function timeConverter(UNIX_timestamp) { - var a = new Date(UNIX_timestamp*1000); - var months = ['January','February','March','April','May','June','July','August','September','October','November','December']; - var year = a.getFullYear(); - var month = months[a.getMonth()]; - var date = a.getDate(); - var hour = a.getHours(); - var min = a.getMinutes(); - if (hour < 10) { hour = '0' + hour; } - if (min < 10) { min = '0' + min; } - var time = date+' '+month+' '+year;//+' at '+hour+':'+min - return time; -} - - -$(document).ready(function () { - - var default_lang = "fr"; - - // Hide warrant about states when we're using the default filter - $('#state-disclaimer').hide(); - var quality_filters = "decent"; - - function filter(){ - - var current_quality_filter = $('#current-quality-filter').data("filter"); - var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); - - $('.app-card').each(function() { - // This is where we actually define how apps are filtered: - // we look for the name of the app (h3) and try to find the user input - // + we check this app match the current quality filter - var text = $(this).find('.app-title').text().toLowerCase() + " " + $(this).find('.app-descr').text().toLowerCase(); - if (text.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0) - { - $(this).show(); - } - else - { - $(this).hide(); - } - }); - - // Display or hide the disclaimers depending on the current filter... - ((current_quality_filter == "working") || (current_quality_filter == "none")) ? $("#bad-quality-apps-disclaimer").show() : $("#bad-quality-apps-disclaimer").hide(); - ((current_quality_filter == "none")) ? $("#broken-apps-disclaimer").show() : $("#broken-apps-disclaimer").hide(); - } - - //================================================= - // Search & filter bar event - //================================================= - $('#filter-app-cards').keyup(filter); - - $('a[data-quality-filter]').on("click", function(){ - $('#current-quality-filter').text($(this).text()); - $('#current-quality-filter').data("filter", $(this).data("quality-filter")); - filter(); - }); - - filter(); - - //================================================= - // Upload apps lists - //================================================= - var catalog = undefined; - - // Fetch application catalog - - $.getJSON('https://app.yunohost.org/default/v2/apps.json', {}, function(data) { - - catalog = $.map(data["apps"], function(el) { return el; }); - - // Clarify high quality state, and level if undefined or inprogress or notworking... - - $.each(catalog, function(k, infos) { - if ((infos.level === undefined) || (infos.level === 0) || (infos.state === "inprogress") || (infos.state === "notworking")) { - infos.level = null; - } - if ((infos.high_quality === true) && (infos.level === 8)) { - infos.state = "high quality"; - } - else if ((infos.state === "working") && (infos.level !== null) && (infos.level <= 4)) { - infos.state = "low quality"; - } - }); - - // Sort apps according to their state and level... - - catalog.sort(function(a, b){ - a_state = (a.state === "high quality")?4:(a.level > 4)?3:(a.state > 0)?2:1; - b_state = (b.state === "high quality")?4:(b.level > 4)?3:(b.state > 0)?2:1; - if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;} - else if (a.manifest.id == b.manifest.id) {return 0;} - return -1; - }); - - // Add the card for each app - - $.each(catalog, function(k, infos) { - - app_id = infos.manifest.id; - - // Define what style to use for state, level and install button - // according to the app quality .... - - if (infos.state === "high quality") { - app_quality = "high,decent,working,none"; - app_badge = "high quality"; - app_badge_css_style = "epic"; - app_install_css_style = "success"; - } else if ((infos.state === "working") && (infos.level > 4)) { - app_quality = "decent,working,none"; - app_badge = null; - app_badge_css_style = "success"; - app_install_css_style = "success"; - } else if (infos.state === "low quality") { - app_quality = "working,none"; - app_badge = "low quality"; - app_badge_css_style = "warning"; - app_install_css_style = "warning"; - } else { - app_quality = "none"; - app_badge = "not working"; - app_badge_css_style = "danger"; - app_install_css_style = "danger"; - } - - // If level is null, we wanna display '?' - if (infos.level == null) { - infos.level = '?'; - } - - // Fill the template - html = $('#app-template2').html() - .replace(/{app_id}/g, app_id) - .replace(/{app_name}/g, infos.manifest.name) - .replace('{app_description}', infos.manifest.description[default_lang] || infos.manifest.description["en"]) - .replace(/{app_git}/g, infos.git.url) - .replace('{app_branch}', infos.git.branch) - .replace('{app_level}', infos.level) - .replace('{app_quality}', app_quality) - .replace('{app_update}', timeConverter(infos.lastUpdate)) - .replace('{app_install_css_style}', app_install_css_style); - - // Handle the maintainer info - if (infos.maintained == false) - { - html = html - .replace('{maintained_state}', 'unmaintained') - .replace('{maintained_icon}', 'warning-sign') - .replace('{app_maintainer}', "Unmaintained") - .replace('{maintained_help}', "This package is currently unmaintained. Feel free to propose yourself as the new maintainer !"); - } - else { - html = html - .replace('{maintained_state}', 'maintained') - .replace('{maintained_icon}', 'user') - .replace('{maintained_help}', "Current maintainer of this package"); - - if ((infos.manifest.developer) && (infos.manifest.developer.name)) { - html = html.replace('{app_maintainer}', infos.manifest.developer.name); - } - else if ((infos.manifest.maintainer) && (infos.manifest.maintainer.name)) { - html = html.replace('{app_maintainer}', infos.manifest.maintainer.name); - } - else { - html = html.replace('{app_maintainer}', "???"); - } - } - - // Fill the template - $('#app-cards-list').append(html); - $('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id); - if (app_badge !== null) { - $('.app-card_'+ app_id + ' .app-title').append(' <span class="label label-'+app_badge_css_style+'">'+app_badge+'</span>'); - } - if (typeof(infos.category) === "string") { - category = data["categories"].find(function(el) { return el.id == infos.category; }); - if (typeof(category) !== "undefined") - { - display = category["title"][default_lang] || category["title"]["en"]; - $('.app-card_'+ app_id + ' .app-title').append(' <span class="label label-default">'+display.toLowerCase()+'</span>'); - } - } - }); - - filter(); - }); - //================================================= -}); -</script> 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 | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/wallabag2_ynh)   | -| Framabee | Searx | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/searx_ynh)   | -| Framabin | PrivateBin | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-apps/zerobin_ynh)   | -| Framaboard | Kanboard | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/kanboard_ynh)   | -| Framabookin | BicBucStriim | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/bicbucstriim_ynh)   | -| Framacalc | Ethercalc | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/ethercalc_ynh)   | -| Framacarte | uMap | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/umap_ynh)   | -| Framaclic | Matomo | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/matomo_ynh)   | -| Framadate | OpenSondage | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/opensondage_ynh)   | -| Framadrive | Nextcloud | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-apps/nextcloud_ynh)   | -| Framadrop | Lufi | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/lufi_ynh)   | -| Framaestro | Framaestro | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framaestro_ynh)   | -| Framaforms | Framaforms | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framaforms_ynh)   | -| Framagames | Framagames | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framagames_ynh)   | -| Framagenda | (Agenda Nextcloud) | c.f. Nextcloud | -| Framagit | GitLab | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/gitlab_ynh)   | -| | Gogs | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/gogs_ynh)   | -| Frama.link | Lstu | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/lstu_ynh)   | -| Framalistes | Mailman | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mailman_ynh)   | -| | Sympa | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/alexAubin/sympa_ynh)   | -| Framanews | TinyTinyRSS | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-apps/ttrss_ynh)   | -| Framanotes | Turtl | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/turtl_ynh)   | -| Framapad | Etherpad + mypads | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/etherpad_mypads_ynh)   | -| Framapiaf | Mastodon | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mastodon_ynh)   | -| Framapic | Lutim | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/lutim_ynh)   | -| Framasites | Grav | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/grav_ynh)   | -| Framaslides | Strut | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/strut_ynh)   | -| Framasphère | Diaspora | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/aymhce/diaspora_ynh)   | -| Framatalk | Jitsi Meet | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/jitsi_ynh)   | -| Framateam | Mattermost | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mattermost_ynh)   | -| Framatrad | ? | Non packagé | -| Framatube | Peertube | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/peertube_ynh)   | -| Framavectoriel | SVG-Edit | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/svgedit_ynh)   | -| Framavox | Loomio | Non packagé | -| Framemo | Scrumblr | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/scrumblr_ynh)   | -| Framindmap | Wisemapping | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/wisemapping_ynh)   | -| Framinetest | Minetest | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/minetest_ynh)   | -| MyFrama | Shaarli | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/shaarli_ynh)   | - -### 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 db6acaa3..00000000 --- a/apps_overview.md +++ /dev/null @@ -1,41 +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 ran 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 c6fd8bda..00000000 --- a/apps_overview_fr.md +++ /dev/null @@ -1,42 +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/apps_wishlist.md b/apps_wishlist.md deleted file mode 100644 index ab98a7cf..00000000 --- a/apps_wishlist.md +++ /dev/null @@ -1,168 +0,0 @@ -# Apps wishlist - -<div class="alert alert-info">Before to add an app in wishlist please check your app is not already in apps list: see the <a href="/apps">apps list</a></div> - -The following list is a compiled wishlist of applications that would be nice-to-have. - -[Edit this list](/write_documentation) to add your own favorite app, or learn to [package apps](/packaging_apps) yourself. - -- [List of awesome selfhosted apps](https://github.com/Kickball/awesome-selfhosted) -- [List of awesome sysadmin apps](https://github.com/kahun/awesome-sysadmin) -- [List of awesome Node.js projects](https://github.com/sqreen/awesome-nodejs-projects) -- [List of SIP softwares/applications](https://en.wikipedia.org/wiki/List_of_SIP_software#Free_and_open-source_license) -- [10er10](https://github.com/dready92/10er10) -- [Ajenti](http://ajenti.org) / [github](https://github.com/ajenti/ajenti/) -- [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. / [github](https://github.com/akaunting/akaunting) -- [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) -- [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) / [github](https://github.com/Bitmessage/PyBitmessage) -- [Beehive](https://github.com/muesli/beehive) -- [BigBlueButton](https://bigbluebutton.org) / [install instruction](http://docs.bigbluebutton.org/2.2/install.html) / [github](https://github.com/bigbluebutton/bigbluebutton) Complete open source web conferencing system. -- [Bludit](https://www.bludit.com) / [github](https://github.com/bludit/bludit) -- [Blynk](https://github.com/blynkkk/blynk-library) -- [Bookstack](https://www.bookstackapp.com/) / [github](https://github.com/BookStackApp/BookStack) -- [btcpayserver](https://github.com/btcpayserver/btcpayserver) -- [cgit](http://git.zx2c4.com/cgit/about) -- [CheckUp](https://sourcegraph.github.io/checkup) / [github](https://github.com/sourcegraph/checkup) -- [citadel-suite - Debian](https://packages.debian.org/stretch/citadel-suite) / [citadel easyinstall - citadel.org](http://www.citadel.org/doku.php?id=installation:easyinstall:easyinstall) Citadel is a complete and feature-rich open source groupware platform. Directly descending from a well known C/PM BBS system, it has a venerable [history](http://www.citadel.org/doku.php?id=documentation:citadel_past_present_and_future#citadel.past.present.and.future) -- [Cockpit](http://cockpit-project.org/) -- [Commafeed](https://github.com/Athou/commafeed) -- [Converse.js](https://conversejs.org) / [github](https://github.com/jcbrand/converse.js) -- [Couchdb](https://couchdb.apache.org/) databases creation and management -- [Cozy](https://github.com/cozy) -- [Croodle](https://github.com/jelhan/croodle) Schedule a date or to do a poll on a general topics, with client-side encryption. -- [Darkwire.io](https://github.com/seripap/darkwire.io) -- [DirectoryLister](https://github.com/DirectoryLister/DirectoryLister) -- [Draw.io](https://github.com/jgraph/drawio) : a diagram online creator -- [EasyAppointments](https://easyappointments.org/) Online appointment booker (similar to Doodle) -- [eLabFTW](https://www.elabftw.net/) electronic lab notebook / [github](https://github.com/elabftw/elabftw) -- [Emoncms](https://github.com/emoncms/emoncms) -- [ERPnext](https://erpnext.com/download) / [github](https://github.com/frappe/erpnext) -- [EteSync](https://www.etesync.com/) / [github](https://github.com/etesync) -- [Epicyon](https://epicyon.net/) / [gitlab](https://gitlab.com/bashrc2/epicyon) -- [erine.email](https://erine.email/) / [gitlab](https://gitlab.com/mdavranche/erine.email) -- [Ferdi server](https://github.com/getferdi/server) is the server to self host the data and configuration of the [ferdi](https://getferdi.com/) messaging aggregator client. -- [FEX](http://fex.rus.uni-stuttgart.de/) -- [FitTrackee](https://github.com/SamR1/FitTrackee) -- [Fossil](http://www.fossil-scm.org) -- [WebThings Gateway](https://iot.mozilla.org/gateway/) [github](https://github.com/mozilla-iot/) -- [Gancio](https://gancio.org/) / [framagit](https://framagit.org/les/gancio) -- [Geneweb](https://geneweb.tuxfamily.org) / [github](https://github.com/geneweb/geneweb) -- [GetSimple CMS](http://get-simple.info) / [github](https://github.com/GetSimpleCMS/GetSimpleCMS) -- [Goaccess](https://goaccess.io) Web log analyser (replaces piwik without js tracking scripts) / [github](https://github.com/allinurl/goaccess) -- [Gollum](https://github.com/gollum/gollum) -- [Goploader](https://github.com/Depado/goploader) -- [Gpodder.net](https://gpoddernet.readthedocs.io/en/latest/index.html) -- [Granary](https://github.com/snarfed/granary) -- [Graphhopper](https://www.graphhopper.com/) / [github](https://github.com/graphhopper/graphhopper#get-started) or other routing service that can be plugged to [Nextcloud Maps](https://apps.nextcloud.com/apps/maps), e.g. OSRM (see below) -- [Guacamole](http://guacamole.apache.org/) -- [Habitica](https://habitica.com/) / [github](https://github.com/HabitRPG/habitica) -- [Helpy](https://github.com/helpyio/helpy) -- [Hexo](https://hexo.io/) / [github](https://github.com/hexojs/hexo) -- [Icecast 2](http://www.icecast.org) / [gitlab](https://gitlab.xiph.org/xiph/icecast-server/) -- [ikiwiki](http://ikiwiki.info) -- [Invidious](https://github.com/omarroth/invidious) -- [Invoice Ninja](https://www.invoiceninja.com) / [github](https://github.com/invoiceninja/invoiceninja) -- [InvoicePlane](https://invoiceplane.com) / [github](https://github.com/InvoicePlane/InvoicePlane) -- [IPFS](https://ipfs.io) / [github](https://github.com/ipfs/ipfs) -- [Isso](https://posativ.org/isso) commenting server / [github](https://github.com/posativ/isso) -- [Jellyfin](https://github.com/jellyfin) -- [JS Bin](http://jsbin.com/help/2-second-setup) / [github](https://github.com/jsbin/) -- [Joplin](http://joplin.cozic.net/) / [github](https://github.com/laurent22/joplin) -- [Joplin-web](https://github.com/foxmask/joplin-web) / [github](https://github.com/foxmask/joplin-web) -- [Kiwix](http://www.kiwix.org/) Offline wikipedia / [github](https://github.com/kiwix/) -- [Known](https://withknown.com) / [github](https://github.com/idno/known) -- [Koel](http://koel.phanan.net) / [github](https://github.com/phanan/koel) -- [Kontalk](https://kontalk.org) / [github](https://github.com/kontalk) -- [Koozip](http://koozic.net) / [github](https://github.com/DocMarty84/koozic) -- [L'atelier](https://github.com/jbl2024/latelier) -- [Lemmy](https://dev.lemmy.ml) / [github](https://github.com/dessalines/lemmy) A federated alternative to reddit. -- [Lessy](https://lessy.io) / [github](https://github.com/lessy-community/lessy) -- [LibreOffice Online](https://wiki.documentfoundation.org/ReleaseNotes/5.3/fr#LibreOffice_Online) -- [LiquidSoap](http://savonet.sourceforge.net/) / [github](https://github.com/savonet/liquidsoap) -- [LocomotiveCMS](https://github.com/locomotivecms/engine) -- [Loomio](https://www.loomio.org) / [github](https://github.com/loomio/loomio/) -- [MaidSafe](http://maidsafe.net) / [github](https://github.com/maidsafe) -- [Mailpile](https://www.mailpile.is) / [github](https://github.com/mailpile/Mailpile) -- [Mailtrain](https://mailtrain.org/) / [github](https://github.com/Mailtrain-org/mailtrain) -- [Mautic](https://github.com/mautic/mautic) -- [microblog.pub](https://microblog.pub) / [github](https://github.com/tsileo/microblog.pub) -- [Mirakel](http://mirakel.azapps.de/taskwarrior.html) / [github](https://github.com/GothenburgBitFactory/taskwarrior) (/!\ SSL-Warning) -- [Modoboa](http://modoboa.org) / [github](https://github.com/modoboa/) -- [MotionEye](https://github.com/ccrisan/motioneye) -- [MPD](http://www.musicpd.org) -- [MyBB](https://mybb.com/) / [github](https://github.com/mybb) -- [Museek+](https://github.com/eLvErDe/museek-plus) -- [N8n.io](https://n8n.io) -- [Netrunner](https://github.com/mtgred/netrunner) -- [Nuage](https://nuage.kerjean.me/login) / [github](https://github.com/mickael-kerjean/filestash) -- [OhMyForm](https://github.com/ohmyform) (Only support Docker install way and some VPS aren't compatible, see TellForm which support non-Docker install but is discontinued) -- [Ombi](https://github.com/tidusjar/Ombi) -- [Omeka S](https://omeka.org/s/) / [github](https://github.com/omeka/omeka-s) -- [OpenBazaar](https://openbazaar.org) / [github](https://github.com/openbazaar) -- [OpenCart](https://www.opencart.com) / [github](https://github.com/opencart/opencart) -- [OpenEats](https://open-eats.github.io/) / [github](https://github.com/open-eats/OpenEats) -- [openHAB](https://www.openhab.org/) - Smart home platform. / [github](https://github.com/openhab) -- [OpenProject](https://github.com/opf/openproject) -- [OpenSourceBilling](https://github.com/vteams/open-source-billing) -- [OSRM](http://project-osrm.org/) / [github](https://github.com/Project-OSRM/osrm-backend/#quick-start) or other routing service that can be plugged to [Nextcloud Maps](https://apps.nextcloud.com/apps/maps), e.g. Graphhopper (see above) -- [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution / [github](https://github.com/open-xchange/) -- [Paperless](https://github.com/danielquinn/paperless) -- [Paperwork](http://paperwork.rocks) -- [Passbolt](https://www.passbolt.com) Passwords manager / [github](https://github.com/passbolt) -- [Pelias](https://github.com/pelias/pelias)) -- [PHPList](http://www.phplist.com) / [github](https://github.com/phpList) -- [Phraseanet](https://docs.phraseanet.com/3.8/fr/index.html#) / [github](https://github.com/alchemy-fr/Phraseanet-Docs) -- [Pico](http://picocms.org) / [github](https://github.com/picocms/Pico) -- [Playmaker](https://github.com/NoMore201/playmaker) -- [Presentator](https://presentator.io/) A design presentation and collaboration platform. -- [Privoxy](http://www.privoxy.org) -- [ProcessMaker](http://www.processmaker.com) -- [ProtonMail’s WebClient](https://github.com/ProtonMail/WebClient) -- [PyLoad](https://github.com/pyload/pyload) -- [Pydio Cells](https://pydio.com/) A file sync and sharing software written in go. / [github](https://github.com/pydio/cells) -- [Pump.io](http://pump.io) / [github](https://github.com/pump-io/pump.io) -- [qBittorrent](https://github.com/qbittorrent/qBittorrent) -- [Questions2answer](https://www.question2answer.org/) -- [racktables](http://racktables.org) / [github](https://github.com/RackTables/racktables) -- [Radarr](https://github.com/Radarr/Radarr) -- [Request Tracker](https://bestpractical.com) / [github](https://github.com/bestpractical/rt) -- [Restya](http://restya.com) / [github](https://github.com/RestyaPlatform/board/) -- [Retroshare](https://retroshare.cc/) / [github](https://github.com/RetroShare/RetroShare) -- [ScenariChain-server](https://download.scenari.software/SCENARIchain-server/) -- [Scuttlebutt Pub](https://www.scuttlebutt.nz/contributing) -- [ShareLatex](https://www.sharelatex.com) / [github](https://github.com/overleaf/overleaf) -- [Schleuder](https://schleuder.org/schleuder/docs/concept.html)(Schleuder is a gpg-enabled mailing list manager with resending capabilities.) -- [SocialHome](https://github.com/jaywink/socialhome) (Socialhome is best described as a federated personal profile with social networking functionality) (https://socialhome.network) -- [smokeping](https://packages.debian.org/buster/smokeping) / [github](https://github.com/oetiker/SmokePing) -- [Sonarr](https://sonarr.tv) / [github](https://github.com/Sonarr/Sonarr) -- [Spacedeck](https://github.com/spacedeck) (A web based, real time, collaborative whiteboard application with rich media support.) -- [Stackedit](https://stackedit.io) / [github](https://github.com/benweet/stackedit) -- [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion / [github](https://github.com/standardnotes/web) -- [Streisand](https://github.com/jlund/streisand) -- [Subspace](https://github.com/subspacecloud/subspace) (A simple WireGuard VPN server GUI) -- [Syspass](http://www.syspass.org/) / [github](https://github.com/nuxsmin/sysPass) -- [Taiga](https://taiga.io) / [github](https://github.com/taigaio/) -- [Taskwarrior](https://taskwarrior.org) / [github](https://github.com/GothenburgBitFactory/taskwarrior) -- [Technitium DNS](https://technitium.com/dns/) / [github](https://github.com/TechnitiumSoftware/DnsServer) -- [Teddy.io](https://teedy.io/#!/) Gestionnaire de documents / [Github](https://github.com/sismics/docs) -- [TellForm](https://github.com/tellform/tellform) (Discontinued (see OhMyForm) but it can be great to have it since OhMyForm does only support Docker install) -- [TMate](https://tmate.io/) / [github](https://github.com/tmate-io/tmate) -- [Tracim](https://github.com/tracim/tracim) -- [Thredded](https://thredded.org/) / [github](https://github.com/thredded/thredded) -- [Tryton](https://www.tryton.org/) A solid ERP system. GNU Health uses this as well. -- [Twister](http://twister.net.co) / [github](https://github.com/miguelfreitas/twister-core/) -- [TwitRSS.me](http://twitrss.me/) / [Github](https://github.com/ciderpunx/twitrssme) Scrapes Twitter to create RSS feeds. -- [Uwazi](https://www.uwazi.io/) / [Github](https://github.com/huridocs/uwazi) -- [Volumio](https://volumio.org) / [github](https://github.com/volumio) -- [WebODF](http://webodf.org) / [github](https://github.com/webodf/WebODF) -- [Webhook.site](https://docs.webhook.site/) / [github](https://github.com/fredsted/webhook.site) -- [Whoogle](https://github.com/benbusby/whoogle-search) - Self-hosted, ad-free, privacy-respecting Google metasearch engine. -- [Wireguard](https://www.wireguard.com/) / [git](https://git.zx2c4.com/WireGuard/) -- [Xibo](https://github.com/xibosignage) - A FLOSS digital signage solution (CMS?) -- [Xonotic](http://xonotic.org) / [gitlab](https://gitlab.com/xonotic) -- [Zammad](https://github.com/zammad/zammad) -- [Zola](https://www.getzola.org/) - A static site generator in one binary -- [Zoneminder](https://github.com/ZoneMinder/zoneminder) -- [Zulip](https://zulipchat.com/) / [github](https://github.com/zulip/zulip) -- [Yggdrasil](https://yggdrasil-network.github.io/) / [github](https://github.com/yggdrasil-network/yggdrasil-go) -- [WiseMapping](http://www.wisemapping.com/inyourserver.html) / [developpement](https://bitbucket.org/wisemapping/wisemapping-open-source) diff --git a/backup.md b/backup.md deleted file mode 100644 index bfe38f90..00000000 --- a/backup.md +++ /dev/null @@ -1,171 +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. - - - -### 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 <archivename>` 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 Linux, you should be able to run the following to download a specific backup: - -```bash -scp admin@your.domain.tld:/home/yunohost.backup/archives/<archivename>.tar.gz ./ -``` - -Similarly, you can upload a backup from a machine to your server with: - -```bash -scp /path/to/your/<archivename>.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'. - - - -### From the command line - -From the command line, you can run `yunohost backup restore <archivename>` (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 <archivename> -``` - -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/<archivename> /home/yunohost.backup/archives/ -yunohost backup restore <archivename> -``` - -## 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 : <https://forum.yunohost.org/t/how-to-backup-your-yunohost-server-on-another-server/3153> - -Alternatively, the app Archivist allows to setup a similar system : <https://forum.yunohost.org/t/new-app-archivist/3747> - -#### 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 163d1301..00000000 --- a/backup_fr.md +++ /dev/null @@ -1,171 +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). - - - -#### 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 <nom_d'archive>` 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 Linux, vous pouvez utiliser la commande suivante pour télécharger une archive : - -```bash -scp admin@your.domain.tld:/home/yunohost.backup/archives/<nom_d'archive>.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/<nom_d'archive>.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". - - - -#### Depuis la ligne de commande - -Depuis la ligne de commande, vous pouvez utiliser `yunohost backup restore <nom_d'archive>` (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 <nom_d'archive> -``` - -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/<nom_d'archive> /home/yunohost.backup/archives/ -yunohost backup restore <nom_d'archive> -``` - - -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/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. - -## <small>1.</small> 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. - - -## <small>2.</small> 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): -```<ESC>```, ```<F9>```, ```<F10>```, ```<F11>```, ```<F12>``` or ```<DEL>``` - -## <small>3.</small> Launch graphical installation - -You should see a screen like this: - -<img src="/images/virtualbox_3.png"> - - -* Select `Graphical install` - -* Select your language, your location and your keyboard layout - -* If a partitioning screen appears, confirm. - - <div class="alert alert-danger"><b>Caution:</b> This will totally erase the data on your hard drive</div> - - -* Let the installer do the rest, it will download required packages and install them. - - <div class="alert alert-info">If it fails, you probably have an Internet connection issue. -Check that your computer is physically connected and retry.</div> - -* It should reboot automatically. - -## <small>4.</small> 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** - -## <small>5.</small> Proceed to post-installation - -<a class="btn btn-lg btn-default" href="/postinstall">Post-install documentation</a> - - 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. - -## <small>1.</small> 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. - -## <small>2.</small> 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>```, ```<F9>```, ```<F10>```, ```<F11>```, ```<F12>``` or ```<Suppr>``` - -## <small>3.</small> Lancer l’installation graphique - -Vous devriez voir un écran comme ça : - -<img src="/images/virtualbox_3.png"> - - -* Sélectionnez `Graphical install` - -* Sélectionnez votre langue, votre localisation et votre agencement de clavier. - -* Si un écran de partitionnement apparaît, confirmez simplement. - - <div class="alert alert-danger"><b>Attention :</b> Cette opération effacera totalement les données sur votre disque dur</div> - -* Laissez l’installateur faire le reste, il téléchargera les paquets requis et les installera. - - <div class="alert alert-info">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.</div> - -* L’ordinateur devrait redémarrer automatiquement à la fin de l’installation. - -## <small>4.</small> 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** - -## <small>5.</small> Procéder à la post-installation - -<a class="btn btn-lg btn-default" href="/postinstall">Documentation de la post-installation</a> - diff --git a/burn_or_copy_iso.md b/burn_or_copy_iso.md deleted file mode 100644 index 1199ffcd..00000000 --- a/burn_or_copy_iso.md +++ /dev/null @@ -1,48 +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**. - -<img src="/images/sdcard.jpg" width=100> -<img src="/images/micro-sd-card.jpg" width=100> -<img src="/images/usb_key.png" width=150> -<img src="/images/cd.jpg" width=100> - -### (Recommended) With Etcher - -Download <a href="https://etcher.io/" target="_blank">Etcher</a> for your operating system and install it. - -<img src="/images/etcher.gif"> - -Plug your USB stick, select your YunoHost ISO and click "Flash" - -### With UNetbootin - -Download <a href="https://unetbootin.github.io/">UNetbootin</a> for your operating system and install it. - -<img src="/images/unetbootin.png"> - -Put your USB stick on, select your YunoHost ISO and click "OK" - - -### With `dd` - -If you are on Linux / Mac and know your way around command line, you may also -flash your USK stick or SD card with `dd`. You can identify which device corresponds to your -USB stick or SD card with `fdisk -l` or `lsblk`. An SD card name typically 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 Mac OS, 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 c3760c6d..00000000 --- a/burn_or_copy_iso_fr.md +++ /dev/null @@ -1,48 +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**. - -<img src="/images/sdcard.jpg" width=100> -<img src="/images/micro-sd-card.jpg" width=100> -<img src="/images/usb_key.png" width=150> -<img src="/images/cd.jpg" width=100> - ---- - -### (Recommandé) Avec Etcher - -Téléchargez <a href="https://etcher.io/" target="_blank">Etcher</a> pour votre système d'exploitation et installez-le. - -<img src="/images/etcher.gif"> - -Branchez votre clef USB, selectionnez l'ISO YunoHost puis cliquez sur 'Flash' - -### Avec UNetbootin - -Téléchargez <a href="https://unetbootin.github.io/">UNetbootin</a> pour votre système d'exploitation et installez-le. - -<img src="/images/unetbootin.png"> - -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 Mac OS, 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/certificate_custom.md b/certificate_custom.md deleted file mode 100644 index 29b129cb..00000000 --- a/certificate_custom.md +++ /dev/null @@ -1 +0,0 @@ -Unfortunately, this page only exists [in french here](certificate_custom_fr) for now. diff --git a/chat_rooms_es.md b/chat_rooms_es.md deleted file mode 100644 index 9e381400..00000000 --- a/chat_rooms_es.md +++ /dev/null @@ -1,39 +0,0 @@ -## Salas de chat - -El proyecto YunoHost utilisa salas de chat como medio de communicación. - -Puede juntarse a una sala de chat utilisando : -- un [cliente IRC](https://es.wikipedia.org/wiki/Anexo:Clientes_IRC) por ejemplo [kiwiirc](https://kiwiirc.com/client/irc.freenode.net/yunohost) -- un [cliente XMPP](https://es.wikipedia.org/wiki/Anexo:Comparaci%C3%B3n_de_clientes_de_mensajer%C3%ADa_instant%C3%A1nea) -- un [Matrix](https://matrix.org/docs/guides/faq.html#what-clients-are-available%3F) - - -#### Sala de chat de ayuda y soporte - -Existe salas publica de chat de [soporte](/help) y ayuda para YunoHost: -- IRC: **#yunohost** on irc.freenode.net ; -- Matrix: **#freenode_#yunohost:matrix.org** ; -- XMPP: **[support@conference.yunohost.org](xmpp:support@conference.yunohost.org?join)** - -#### sala de chat para developers - -Salas de chat para el desarollo de YunoHost: -- IRC: **#yunohost-dev** on irc.freenode.net ; -- Matrix: **#freenode_#yunohost-dev:matrix.org** ; -- XMPP: **[dev@conference.yunohost.org](xmpp:dev@conference.yunohost.org?join)** - -Actualmente, la sala principal de chat para contribuciones en Yunohost -Para mas ayuda, vea la sala de chat **#yunohost** encima. - -#### Sala de chat para las integración de aplicaciones -Estos permite la ayuda mutua para los integradores de aplicaciones y también para conversar de evoluciones et de herramientas de integración continua. -- IRC: **#yunohost-apps** en irc.freenode.net -- Matrix: **#freenode_#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 comó (backend, frontend, apps, project, community...) -Puede tambien compartir sus materiales sobre el tema de Yunohost (videos, presentaciones, etc.). -- IRC: **#yunohost-doc** on irc.freenode.net -- Matrix: **#freenode_#yunohost-doc:matrix.org** -- XMPP: **[doc@conference.yunohost.org](xmpp:doc@conference.yunohost.org?join)** 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). - -<div class="alert alert-info" markdown="1"> -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 ! -</div> - -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 83db3878..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). - -<div class="alert alert-info" markdown="1"> -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 ! -</div> - -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). - -<div class="alert alert-info" markdown="1"> -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 ! -</div> - -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 - -<p class="lead"> -YunoHost depends exclusively on the participation of people like you. -</p> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-heart"></span> Spread the word -</div> -<div class="col col-md-8" markdown="1"> -Talk about software freedom, [self-hosting](/selfhosting) and YunoHost to your relatives and at your work. We rely on Datalove evangelists like you <3 -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-exclamation-sign"></span> Testing -</div> -<div class="col col-md-8" markdown="1"> -We need people able to test YunoHost deeply. If you find a bug, try to identify it, and report it on our <a href="https://github.com/YunoHost/issues/issues" target="_blank">bug tracker</a>. -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-user"></span> Helping users -</div> -<div class="col col-md-8" markdown="1"> -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 <a href="https://forum.yunohost.org/" target="_blank">Forum</a>. -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-cog"></span> Coding -</div> -<div class="col col-md-8" markdown="1"> -You can involve in the YunoHost's development regardless of your skill. -Sysadmins, web developers, designers and pythonists <a href="https://github.com/YunoHost" target="_blank">are welcome</a>! -<br> -Learn [how to contribute](/dev), and join us on the [development chat room](xmpp:dev@conference.yunohost.org?join). -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-globe"></span> Localization -</div> -<div class="col col-md-8" markdown="1"> -Get involved by making YunoHost interfaces available in your language. -<a href="https://translate.yunohost.org/" target="_blank">Get started</a>! -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-edit"></span> Write -</div> -<div class="col col-md-8" markdown="1"> -Improve this documentation by [writing new pages](/write_documentation) or translating existing ones to your language. -</div> -</div> - -<hr> - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-gift"></span> Packaging -</div> -<div class="col col-md-8" markdown="1"> -Extend YunoHost capabilities by [packaging new services and web applications](/packaging_apps). -Have a look of [what has been done yet](/apps)! -</div> -</div> - ---- - -<br> -<p class="lead" markdown="1">In any case, please come chat with us on [the dev chatroom](/chat_rooms) :-)</p> - 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 @@ -# <div dir="rtl">المساهمة</div> - -<p dir="rtl" class="lead"> -إنّ مصير واي يونوهوست YunoHost يُقرّره أناس و أنتم مِن بين هؤلاء -</p> - ---- - -<div dir="rtl" class="row"> -<div dit="rtl" class="col col-md-3 lead"> -<span class="glyphicon glyphicon-heart"></span> تحدثوا عن المشروع مِن حولكم -</div> -<div class="col col-md-8" markdown="1"> -تحدثوا عن البرمجيات الحرّة، تحدثوا عن واي يونوهوست YunoHost مع أقربائكم و زملائكم في العمل. حدّثوهم عن [الإستضافة الذاتية](/selfhosting)، نحن بحاجة و واثقون مِن قدرات محبي البيانات مثلكم 3></div> -</div> - ---- - -<div dir="rtl" class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-exclamation-sign"></span> جَرّبُوا -</div> -<div class="col col-md-8" markdown="1"> -نحن بحاجة إلى تجريب حثيث لواي يونوهوست YunoHost. فإن صادفتم مشكلة، يرجى القيام بتحديد الخلل و ثم الإبلاغ عنه عبر -<a href="https://github.com/YunoHost/issues/issues" target="_blank">مُتعقب الأخطاء</a>. -</div> -</div> - ---- - -<div dir="rtl" class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-user"></span> ساعدوا المستخدمِين -</div> -<div class="col col-md-8" markdown="1"> -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 <a href="https://forum.yunohost.org/" target="_blank">Forum</a>. Vous pouvez aussi organiser des <a href="https://hackstub.netlib.re/wiki/index.php?title=Atelier_3_avenir%28s%29_d%27internet_-_Introduction_%C3%A0_Yunohost_et_la_brique_internet" target="_blank">ateliers de formation</a>. -</div> -</div> - ---- - -<div dir="rtl" class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-cog"></span> أكتبوا الشفرة -</div> -<div dir="rtl" class="col col-md-8" markdown="1"> -Vous pouvez vous impliquer dans le développement de YunoHost peu importe votre niveau. Administrateurs système, développeurs web, designers et pythonistes <a href="https://github.com/YunoHost" target="_blank">sont les bienvenus</a>.<br> -Découvrez [comment contribuer](/dev), et rejoignez-nous sur le [salon de discussion](xmpp:dev@conference.yunohost.org?join) ! -</div> -</div> - ---- - -<div dir="rtl" class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-globe"></span> ترجِموا -</div> -<div class="col col-md-8" markdown="1"> -ساهموا في توفير واجهات واي يونوهوست YunoHost بلغتكم. <a href="https://translate.yunohost.org/" target="_blank">إبدأوا الآن</a> ! -</div> -</div> - ---- - -<div dir="rtl" class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-edit"></span> أكتبوا -</div> -<div class="col col-md-8" markdown="1"> -ساهموا في تحسين هذا الدليل و ذلك [باقتراح صفحات جديدة](/write_documentation) أو بترجمة صفحاته إلى لغتكم. -</div> -</div> - ---- - -<div dir="rtl" class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-gift"></span> ساهموا في التحزيم -</div> -<div class="col col-md-8" markdown="1"> -É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) ! -<br> -Un [salon de développement](xmpp:dev@conference.yunohost.org?join) est également disponible. -</div> -</div> - ---- - -<br> -<br> -<p dir="rtl" class="lead" markdown="1">على أي حال تعالوا و انضموا إلى [غرفة المحادثة الخاصة بالمطوّرين](xmpp:dev@conference.yunohost.org?join) إن كنتم ترغبون في المساهمة :-)</p> - 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 - -<p class="lead"> -YunoHost dépend entièrement de la participation de gens comme vous. -</p> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-heart"></span> Passez le mot -</div> -<div class="col col-md-8" markdown="1"> -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 -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-exclamation-sign"></span> Testez -</div> -<div class="col col-md-8" markdown="1"> -Nous avons besoin de tester YunoHost profondément. Si vous trouvez un bug, essayez de l’identifier, puis reportez-le sur notre <a href="https://github.com/YunoHost/issues/issues/new" target="_blank">bug tracker</a>. -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-user"></span> Aidez les utilisateurs -</div> -<div class="col col-md-8" markdown="1"> -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 <a href="https://forum.yunohost.org/" target="_blank">Forum</a>. Vous pouvez aussi organiser des <a href="https://hackstub.netlib.re/wiki/index.php?title=Atelier_3_avenir%28s%29_d%27internet_-_Introduction_%C3%A0_Yunohost_et_la_brique_internet" target="_blank">ateliers de formation</a>. -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-cog"></span> Codez -</div> -<div class="col col-md-8" markdown="1"> -Vous pouvez vous impliquer dans le développement de YunoHost peu importe votre niveau. Administrateurs système, développeurs web, designers et pythonistes <a href="https://github.com/YunoHost" target="_blank">sont les bienvenus</a>.<br> -Découvrez [comment contribuer](/dev), et rejoignez-nous sur le [salon de discussion](xmpp:dev@conference.yunohost.org?join) ! -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-globe"></span> Traduisez -</div> -<div class="col col-md-8" markdown="1"> -Participez en rendant les interfaces de YunoHost disponibles dans votre langue. <a href="https://translate.yunohost.org/" target="_blank">Lancez-vous</a> ! -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-edit"></span> Écrivez -</div> -<div class="col col-md-8" markdown="1"> -Améliorez cette documentation en [proposant de nouvelles pages](/write_documentation) ou en traduisant les existantes dans votre langue. -</div> -</div> - ---- - -<div class="row"> -<div class="col col-md-3 lead"> -<span class="glyphicon glyphicon-gift"></span> Packagez -</div> -<div class="col col-md-8" markdown="1"> -É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) ! -</div> -</div> - ---- - -<br> -<br> -<p class="lead" markdown="1">Dans tous les cas, venez discuter avec nous sur [le salon de développement](/chat_rooms) :-)</p> - diff --git a/contributordoc.md b/contributordoc.md deleted file mode 100644 index ced4e173..00000000 --- a/contributordoc.md +++ /dev/null @@ -1,43 +0,0 @@ -# Contributor documentation - -* [General ways of contributing to YunoHost](/contribute) -* [Writing documentation](/write_documentation) - * [Documentation writing guide](/doc_writing_guide) - * [Markdown guide](/doc_markdown_guide) - * [Power your code using Git & GitHub](/doc_use_git) -* [Chat rooms](/chat_rooms) -* 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) - * [Multi-instance](packaging_apps_multiinstance) - * [Helpers](packaging_apps_helpers) - * [Trap usage](/packaging_apps_trap) - * [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 82b68782..00000000 --- a/contributordoc_fr.md +++ /dev/null @@ -1,44 +0,0 @@ -# Guide du contributeur - -* [Liste des façons de contribuer à YunoHost](/contribute) -* [É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) -* [Salons de discussion](/chat_rooms) -* 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) - * [Multi-instance](/packaging_apps_multiinstance) - * [Fonctions utiles](/packaging_apps_helpers) - * [Utilisation de 'trap'](/packaging_apps_trap) - * [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/dev_fr.md b/dev_fr.md deleted file mode 100644 index 7b85a6d3..00000000 --- a/dev_fr.md +++ /dev/null @@ -1,164 +0,0 @@ -## Contribuer au cœur de YunoHost - -Vous souhaitez ajouter une nouvelle fonctionnalité au cœur de YunoHost, mais ne -savez pas comment procéder ? Ce guide parcourt les étapes du développement et du -processus de contribution. - -Si vous cherchez quelque chose à implémenter ou un bug à réparer, le -bug tracker est [ici](https://github.com/yunohost/issues/issues) ! - -**Venez dire coucou sur le [salon de dev](/chat_rooms)** ! - -### Mettre en place un environnement de développement - -- **Utilisez [ynh-dev](https://github.com/YunoHost/ynh-dev)** (voir le README) - pour mettre en place un environnement de développement - en local sur une - machine virtuelle, ou bien sur un VPS. - Ceci installera une instance fonctionelle de YunoHost, en utilisant - directement les dépôts git à l'aide de liens symboliques. De cette façon, il - vous sera possible de modifier les fichiers, de tester les changements en - temps réel, et de commiter et push/pull directement depuis cet environnement. - -- **Implémentez et testez votre fonctionnalité**. Suivant ce sur quoi vous - voulez travailler : - - **Cœur Python/ligne de commande** : allez dans `/ynh-dev/yunohost/` - - **Interface d'administration web** : 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). - -Il prend en charge d'autres mécanismes tels que l'authentification, l'internationalisation et des petites fonctions utilitaires techniques (par ex. lecture/écriture de fichiers json). - -Moulinette dispose de sa propre documentation [ici](https://moulinette.readthedocs.io/en/latest/). - -##### YunoHost - -C'est le coeur 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) - -##### 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 - -SSOwat est configuré via `/etc/ssowat/conf.json` qui est généré par YunoHost. - -##### YunoHost-admin - -C'est une dépendance *optionnelle* de YunoHost et correspond à une interface pour l'API web créée par YunoHost et Moulinette (service `yunohost-api`). - -Il contient essentiellement : -- [des templates pour les vues](https://github.com/YunoHost/yunohost-admin/tree/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) - -### Travailler sur le cœur Python / ligne de commande - -- Allez dans `/ynh-dev/yunohost/`. - -- Exécutez `cd /ynh-dev && ./ynh-dev use-git yunohost`. - -- Le fichier actionsmap (`data/actionsmap/yunohost.yml`) définit les différentes - catégories, actions et arguments de la ligne de commande YunoHost. Choisissez - comment vous voulez que les utilisateurs utilisent votre fonctionnalité, et - ajoutez/éditez les catégories, actions et arguments correspondants. Par - exemple, dans `yunohost domain add some.domain.tld`, la catégorie est - `domain`, l'action est `add` et `some.domain.tld` est un argument. - -- Moulinette va automatiquement faire le lien entre les commandes de - l'actionsmap et les fonctions Python (ainsi que leurs arguments) dans - `src/yunohost/`. Par exemple, `yunohost domain add some.domain.tld` - déclenchera un appel de `domain_add(domainName)` dans `domain.py`, avec l'argument - `domainName` qui vaudra `"some.domain.tld"`. - -##### Helpers / style de code - -- Pour gérer les exceptions, il existe un type `YunohostError()` - -- Pour aider avec l'internationalisation des messages, utilisez `m18n.n('some-message-id')` - et mettez le message correspondant dans `locales/en.json`. Vous pouvez aussi - utiliser des arguments pour construire les messages, avec `{{some-argument:s}}`. - Ne modifiez pas de fichiers de locales autres que en.json, la traduction sera - faite avec [Weblate](https://translate.yunohost.org/) ! - -- YunoHost essaye de suivre le style de code [PEP8](http://pep8.org/). Des - outils existent pour vérifier automatiquement la conformité du code. - -- Mettre un `_` devant les noms des fonctions "privées". - -### Travailler sur l'interface d'administration web - -- Allez dans `/ynh-dev/yunohost-admin/src/`. - -- Exécutez `cd /ynh-dev && ./ynh-dev use-git yunohost-admin`. Ceci lance gulp, de sorte - qu'à chaque fois que vous modifiez les sources, il recompilera le code - (JS) et vous pourrez voir les changements dans le navigateur web (Ctrl+F5). - Pour stopper la commande, faites simplement Ctrl+C. - -- L'interface web utilise une API pour communiquer avec YunoHost. Les - commandes/requêtes de l'API sont également définies dans l'actionsmap. Par - exemple, accéder à la page ```https://domain.tld/yunohost/api/users``` - correspond à une requête `GET /users` vers l'API YunoHost. Cette requête - est mappée sur `user_list()`. Accéder à cette URL devrait afficher le json - retourné par cette fonction. Les requêtes 'GET' sont typiquement destinées à - demander de l'information au serveur, tandis que les requêtes 'POST' sont - destinées à demander au serveur de modifier/changer des informations ou de - réaliser des actions. - -- `js/yunohost/controllers` contient les parties JavaScript, et définit quelles - requêtes faire à l'API pendant le chargement d'une page donnée de l'interface, - et comment traiter les données récupérées pour générer la page, en utilisant - des templates. - -- `views` contient les templates des pages de l'interface. Dans le template, - les données venant du JavaScript peuvent être utilisées avec la syntaxe - `{{some-variable}}`, qui sera remplacée pendant la construction de la page. - Il est également possible d'avoir des conditions avec la syntaxe - d'[handlebars.js](http://handlebarsjs.com) : ```{{#if - some-variable}}<p>du HTML conditionnel ici !</p>{{/if}}``` - -- Pour l'internationalisation des messages, utilisez `y18n.t('some-string-code')` - dans le JavaScript, ou `{{t 'some-string-code'}}` dans le template HTML, et - mettez votre message dans `locales/en.json`. Ne modifiez pas de fichiers de - locales autres que en.json, la traduction sera faite avec - [Weblate](https://translate.yunohost.org/) ! - -##### N'oubliez pas - -- À chaque modification de l'actionsmap, il faut redémarrer l'API yunohost : - ```service yunohost-api restart``` - (Il faudra retaper le mot de passe administrateur dans l'interface web) - -- Il faudra peut-être régulièrement forcer le rafraîchissement du cache - navigateur pour propager correctement le JavaScript et/ou HTML (à chaque fois - que l'on change quelque chose dans `js` ou `views`, donc). - - -### Votre fonctionnalité est prête et vous souhaitez qu'elle soit intégrée dans YunoHost - -- Forkez le dépòt correspondant sur Github, et commitez vos changements dans - une nouvelle branche, Il est recommandé de nommer la branche avec la - convention suivante : - - Pour une nouvelle fonctionnalité ou amélioration : `enh-ISSUENUMBER-description-fonctionnalité` - - Pour une correction de bug : `fix-REDMINETICKET-description-correctif` - - `ISSUENUMBER` est optionnel et correspond au numéro du ticket sur le bug tracker - -- Une fois prêt, ouvrez une Pull Request (PR) sur Github. De préférence, inclure - `[fix]` ou `[enh]` au début du titre de la PR. - -- Après relecture, test et validation par les autres contributeurs, votre - branche sera mergée dans `unstable` ! - - diff --git a/diagnostic.md b/diagnostic.md deleted file mode 100644 index facecf0b..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 285e1267..00000000 --- a/diagnostic_fr.md +++ /dev/null @@ -1,12 +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) - -TODO: elaborer le fait que le diagnostique tourne périodiquement, qu'un email -est envoyé à root qui est normalement forwardé vers le premier utilisateur créé, -que 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/dns_local_network_es.md b/dns_local_network_es.md deleted file mode 100644 index 1226cde4..00000000 --- a/dns_local_network_es.md +++ /dev/null @@ -1,38 +0,0 @@ -#Acceder a tu servidor desde la red local - -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). - -Para resolver este problema, es preciso configurar el DNS de tu router o, por defecto, el o los archivos hosts de tu ordenadores clientes. - -### 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. - -Puedes descubrir la dirección privada de tu servidor de varias maneras : -- En la pantalla de conexión de Yunohost en el mismo servidor : -<img src="/images/ynh_login.png" width=600> - -- Desde la interfaz de administración de tu servidor Yunohost : - en Herramientas > Estado del servidor > Red -<img src="/images/ynh_admin_etat_ip.png" width=900> - -- O desde tu router o tu caja Internet, dependiendo de su modelo. - -## Configurar el DNS de la caja Internet o del router - -Vas a crear una redirección que estará activa en toda tu red local. El objetivo es crear una redirección DNS hacia el IP de tu servidor en tu caja Internet. Hay que acceder a la interfaz de configuración de tu caja y a los parámetros DNS, y luego crear una redirección local (por ejemplo, yunohost.local puede redigir hacia 192.168.21). - -## Configurar el archivo [hosts](https://es.wikipedia.org/wiki/Archivo_hosts) del ordenador cliente -Sólo deberías modificar el archivo hosts si no puedes modificar el DNS de tu caja Internet / router, porque el archivo hosts únicamente afectará el ordenador en el cual el archivo esté modificado. - -- En Windows, encontrarás el archivo hosts aquí : - `%SystemRoot%\system32\drivers\etc\` - > Es preciso visualizar los archivos y sistemas escondidos para ver el archivo hosts. -- En sistemas UNIX (GNU/Linux, Mac OS), lo encontrarás aquí : - `/etc/hosts` - > Necesitarás derechos root para modificar el archivo. - -Simplemente añade al final del archivo hosts una linea conteniendo la dirección IP privada del servidor y tu nombre de dominio - -```bash -192.168.1.62 domain.tld -``` diff --git a/dns_nohost_me.md b/dns_nohost_me.md deleted file mode 100644 index 46da22a7..00000000 --- a/dns_nohost_me.md +++ /dev/null @@ -1,73 +0,0 @@ -# Nohost.me domains - -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: -- `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 ! - -N.B.: 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. - -YunoHost allows the installation of applications on subdomains (for -example, having the Owncloud 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. - - -### Adding a nohost.me, noho.st or ynh.fr domain after the post-installation - -If you already did the postinstall and want to add an automatic domain, you -may do so from the "Domains" web interface, selecting the option "I don't have a domain name..." - -Alternatively, the following commands can be used. - -```bash -# Add the domain -yunohost domain add whateveryouwant.nohost.me - -# Subscribe/register to the dyndns service -yunohost dyndns subscribe -d whateveryouwant.nohost.me - -# [ wait ~ 30 seconds ] - -# Update the DNS conf -yunohost dyndns update - -# Set it as the main domain -yunohost tools maindomain --new-domain whateveryouwant.nohost.me -``` - -#### Retrieve a nohost.me, noho.st or ynh.fr domain - -If you reinstall your server and want to use a domain already used previously, -you must request a domain reset on the forum -[in the dedicated thread](https://forum.yunohost.org/t/nohost-domain-recovery/442). - - -#### Change a nohost.me, noho.st or ynh.fr domain - -If you wish to use a different automatic domain, you first have to remove -your present domain registration. This is done in 3 steps: - -1. Remove the domain from your instance (via webadmin or the `yunohost domain remove` CLI). -**/!\ Caution: this will remove any app installed on this domain, along with its data.** -2. Ask for registration removal [in the dedicated forum thread](https://forum.yunohost.org/t/nohost-domain-recovery/442). -3. Remove automatic domain configuration files on your server, via CLI only : `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` - -You may then add a new domain. diff --git a/docker.md b/docker.md deleted file mode 100644 index 4fb050c6..00000000 --- a/docker.md +++ /dev/null @@ -1,23 +0,0 @@ -# Docker and YunoHost - -<div class="alert alert-danger"> -<b> -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). -</b> -</div> - -## Community images - -However, community images exist and are available on Docker Hub: - - * AMD64 (classic) - * https://hub.docker.com/r/domainelibre/yunohost3/ (YunoHost v3) - * I386 (old computers) - * https://hub.docker.com/r/domainelibre/yunohost3-i386/ (YunoHost v3) - * ARMV7 (Raspberry Pi 2/3 ...) - * https://hub.docker.com/r/domainelibre/yunohost3-arm/ (YunoHost v3) - * 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 a015a900..00000000 --- a/docker_fr.md +++ /dev/null @@ -1,23 +0,0 @@ -# Docker et YunoHost - -<div class="alert alert-danger"> -<b> -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). -</b> -</div> - -## Images communautaires - -Cependant il existe des images communautaires disponibles sur Docker Hub : - - * AMD64 (classique) - * https://hub.docker.com/r/domainelibre/yunohost3/ (YunoHost v3) - * I386 (anciens pc) - * https://hub.docker.com/r/domainelibre/yunohost3-i386/ (YunoHost v3) - * ARMV7 (Raspberry Pi 2/3 ...) - * https://hub.docker.com/r/domainelibre/yunohost3-arm/ (YunoHost v3) - * 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 619e2698..00000000 --- a/docs.md +++ /dev/null @@ -1,33 +0,0 @@ -#Documentation - -<p class="lead"> -YunoHost's documentation has 2 different sections: -</p> - -<div class="row text-center"> - -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-primary btn-lg" href="/admindoc"><span class="glyphicon glyphicon-lock"></span> Administrator guide</a> -<p><small class="text-muted">Including installation, server management and application management</small></p> -</div> - -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-danger btn-lg" href="/contributordoc"><span class="glyphicon glyphicon-heart"></span> Contributor guide</a> -<p><small class="text-muted">Which contains everything you have to know about us and the way we work</small></p> -</div> - -</div> - -* 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) 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 @@ -#<div dir="auto">الدليل</div> - -<p dir="rtl" class="lead"> -دليل واي يونوهوست YunoHost يرتكز أساسًا على ثلاثة محاور : -</p> - -<div class="row text-center"> - -<div dir="rtl" class="col col-md-4 col-md-offset-1"> -<a class="btn btn-primary btn-lg" href="/admindoc"><span class="glyphicon glyphicon-lock"></span> دليل المدير</a> -<p><small class="text-muted">يتطرق إلى طريقة التنصيب و إدارة السيرفر و التطبيقات</small></p> -</div> - -<div dir="rtl" class="col col-md-4 col-md-offset-1"> -<a class="btn btn-danger btn-lg" href="/contributordoc"><span class="glyphicon glyphicon-heart"></span> دليل المساهم</a> -<p><small class="text-muted">يحتوي على كافة المعلومات التي تخصنا و أسلوب عملنا و مساهمتنا</small></p> -</div> - -</div> - -* 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 e8f57252..00000000 --- a/docs_de.md +++ /dev/null @@ -1,31 +0,0 @@ -#Documentation - -<p class="lead"> -Die YunoHost Dokumentation ist in 2 Bereiche aufgeteilt: -</p> - -<div class="row text-center"> - -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-primary btn-lg" href="/admindoc"><span class="glyphicon glyphicon-lock"></span> Handbuch für Administratoren</a> -<p><small class="text-muted">Befasst sich mit den Installationsschritten und der Verwaltung von Server und Apps.</small></p> -</div> - -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-danger btn-lg" href="/contributordoc"><span class="glyphicon glyphicon-heart"></span> Handbuch für Mitwirkende</a> -<p><small class="text-muted">Alles, was du über uns und unsere Art zu arbeiten wissen musst.</small></p> -</div> - -</div> - -* 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 91090732..00000000 --- a/docs_fr.md +++ /dev/null @@ -1,33 +0,0 @@ -#Documentation - -<p class="lead"> -La documentation de YunoHost s’articule autour de deux sections : -</p> - -<div class="row text-center"> - -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-primary btn-lg" href="/admindoc"><span class="glyphicon glyphicon-lock"></span> Guide de l’administrateur</a> -<p><small class="text-muted">Incluant l’installation, la gestion du serveur et des applications</small></p> -</div> - -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-danger btn-lg" href="/contributordoc"><span class="glyphicon glyphicon-heart"></span> Guide du contributeur</a> -<p><small class="text-muted">Qui contient tout ce que vous devez savoir à propos de nous et de notre manière de travailler</small></p> -</div> - -</div> - -* 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) diff --git a/docs_it.md b/docs_it.md deleted file mode 100644 index 89535377..00000000 --- a/docs_it.md +++ /dev/null @@ -1,31 +0,0 @@ -#Documentazione - -<p class="lead"> -La documentazione di YunoHost ha 2 differenti sezioni: -</p> - -<div class="row text-center"> - -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-primary btn-lg" href="/admindoc"><span class="glyphicon glyphicon-lock"></span> Guida di amministrazione</a> -<p><small class="text-muted">Include l'installazione, la gestione del server e delle applicazioni</small></p> -</div> - -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-danger btn-lg" href="/contributordoc"><span class="glyphicon glyphicon-heart"></span> Guida del contributore</a> -<p><small class="text-muted">Contiene tutto quello che devi sapere su di noi e su come lavoriamo</small></p> -</div> - -</div> - -* 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 f9527a1d..00000000 --- a/domains.md +++ /dev/null @@ -1,52 +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 f03b6e4b..00000000 --- a/domains_fr.md +++ /dev/null @@ -1,51 +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 8e6cd5b4..00000000 --- a/email_configure_client_fr.md +++ /dev/null @@ -1,43 +0,0 @@ -## Configurer un client mail - -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 mail 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 mail (`domain.tld` fait référence à ce qui est après le @ dans votre adresse mail, 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`) | - -### <img src="images/thunderbird.png" width=50> 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.) - -<img src="/images/thunderbird_config_1.png" width=900> -<img src="/images/thunderbird_config_2.png" width=900> - -* [Gérer les alias mails](https://support.mozilla.org/en-US/kb/configuring-email-aliases) - -### <img src="images/k9mail.png" width=50> Configurer K-9 Mail (sur Android) - -Suivez les instructions suivantes. (Comme pour Thunderbird, il vous faudra peut-être accepter des certificats à un moment) - -<a href="/images/k9mail_config_1.png"><img src="/images/k9mail_config_1.png" width=200/></a> -<a href="/images/k9mail_config_2.png"><img src="/images/k9mail_config_2.png" width=200/></a> -<a href="/images/k9mail_config_3.png"><img src="/images/k9mail_config_3.png" width=200/></a> -<a href="/images/k9mail_config_4.png"><img src="/images/k9mail_config_4.png" width=200/></a> - -### <img src="images/dekko-app.png" width=50> 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 e-mail 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 ! - -<a href="/images/dekko_config_1.png"><img src="/images/dekko_config_1.png" width=200/></a> -<a href="/images/dekko_config_2.png"><img src="/images/dekko_config_2.png" width=200/></a> -<a href="/images/dekko_config_3.png"><img src="/images/dekko_config_3.png" width=200/></a> -<a href="/images/dekko_config_4.png"><img src="/images/dekko_config_4.png" width=200/></a> diff --git a/email_fr.md b/email_fr.md deleted file mode 100644 index eb5d0c81..00000000 --- a/email_fr.md +++ /dev/null @@ -1,50 +0,0 @@ -Emails -====== - -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`. - -Cet écosystème comprend un serveur SMTP (postfix), un serveur IMAP (Dovecot), un antispam (rspamd) et une configuration DKIM. - -S'assurer que votre configuration est correcte -------------------------------- - -Les emails sont un écosystème compliqué et un grand nombre de détails peuvent les empêcher de fonctionner correctement. - -Pour valider que votre configuration est correcte : -- si vous vous hébergez chez vous et n'utilisez pas de VPN, assurez-vous que [votre FAI ne bloque pas le port 25](isp) ; -- routez les ports selon [cette documentation](isp_box_config) ; -- configurez soigneusement les enregistrements DNS du courrier électronique selon [cette documentation](dns_config) ; -- Testez votre configuration en utilisant [Mail-tester.com](https://mail-tester.com) <small>(attention : seuls 3 tests par domaine et par jour sont autorisés)</small> ; - -Un score d'au moins 8~9/10 est un but raisonnable. - -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). - -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. - -Configuration des alias de messagerie et des redirections automatiques -------------------------------------------- - -Des alias de messagerie et des redirections peuvent être configurés pour chaque utilisateur. Par exemple, le premier utilisateur créé sur le serveur dispose automatiquement d'un alias `root@votre.domaine.tld` - ce qui signifie qu'un email envoyé vers cette adresse se retrouvera dans la boîte de réception de cet utilisateur. Les redirections automatiques peuvent être configurées, par exemple si un utilisateur ne veut pas configurer un compte de messagerie supplémentaire et souhaite simplement recevoir des courriels du serveur sur, disons, son adresse gmail. - -Une autre fonctionnalité méconnue est l'utilisation de 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. - -Que se passe-t-il si mon serveur devient indisponible ? ------------------------------------------------ - -Si votre serveur devient indisponible, les courriels envoyés à votre serveur resteront dans une file d'attente du côté de l'expéditeur pendant environ 5 jours. L'hébergeur de l'expéditeur tentera régulièrement de renvoyer le courrier, jusqu'à ce qu'il le jette s'il n'a pas pu l'envoyer. - -## Formulaires pour enlever son adresse IP des listes noires -Il est possible que les emails envoyés depuis votre instance YunoHost soient considérés comme du spam par les grands services de mails. -Il est possible que l’adresse IP de votre serveur a autrefois été utilisé pour envoyé 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). - - -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). diff --git a/filezilla_fr.md b/filezilla_fr.md deleted file mode 100644 index 1eb993e6..00000000 --- a/filezilla_fr.md +++ /dev/null @@ -1,87 +0,0 @@ -# Échanger des fichiers avec son serveur à l'aide d'une interface graphique - -Cette page explique comment échanger des fichiers (sauvegardes, musiques, -photos, films, ...) avec son serveur à l'aide d'un outil graphique. C'est donc -une méthode alternative au fait d'utiliser la commande `scp` qui peut être jugée -technique et cryptique, ou de devoir installer Nextcloud. - -[FileZilla](https://filezilla-project.org/) permet d'accomplir cela. Il s'agit -d'un logiciel libre disponible pour Windows, Linux et MacOS. - -## Télécharger et installer FileZilla - -Vous pouvez télécharger FileZilla depuis [cette page](https://filezilla-project.org/download.php?type=client). -Le site devrait détecter automatiquement la version nécessaire pour votre ordinateur. -Sinon, suivez les instructions pour [installer le client](https://wiki.filezilla-project.org/Client_Installation) - -Installez le programme et lancez *Filezilla*. - -## Configuration - -1. Cliquez sur l'icône *Gestionnaire de Sites* en haut à gauche de sorte à crééer une configuration utilisable ultérieurement. - -  - -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.) - -  - -3. Vous recevrez un avertissement. *Vous pouvez l'ignorer si il s'agit de la première connexion*. - -  - -4. Filezilla vous demande maintenant le mot de passe `admin` pour vous connecter à votre serveur - -  - -5. Une fois cette configuration créée, elle sera réutilisable les fois suivanteS. - -  - -<div class="alert alert-success"> - <span class="glyphicon glyphicon-chevron-right"></span> Vous pouvez désormais utiliser cette configuration pour vous connecter. -</div> - -## Utilisation - -1. Connectez-vous au Site créé précédemment. *Il se peut que le mot de passe soit redemandé.* - - La partie gauche correspond à votre ordinateur. La partie droite correspond au serveur YunoHost distant. Vous pouvez naviguer dans les dossiers et faire des glisser-déposer entre les deux panneaux. - -  - -2. Dans le panneau de droite, vous pouvez aller dans `/home/yunohost.backup/archives/` pour trouver les archives de [sauvegardes](/backup). - -  - -<div class="alert alert-warning"> - <span class="glyphicon glyphicon-cloud-download"></span> Assurez-vous de télécharger à la fois le fichier `.tar.gz` et le fichier `.json` -</div> - - - ----- - -Sources - -* [Documentation officielle](https://wiki.filezilla-project.org/FileZilla_Client_Tutorial_(fr)) -* [Tutoriel général à Filezilla](https://www.rc.fas.harvard.edu/resources/documentation/sftp-file-transfer/) - -## Alternatives à Filezilla - -### Sous Linux - -Depuis n'importe quel Linux récent, vous devriez pouvoir utiliser le gestionnaire de fichiers pour accéder à votre serveur. - -Nautilus de Gnome3 intègre de base des fonctionnalités similaires à FileZilla : - -* <https://help.gnome.org/users/gnome-help/stable/nautilus-connect.html.en> -* <https://www.techrepublic.com/article/how-to-use-linux-file-manager-to-connect-to-an-sftp-server/> - -### Sous Windows - -* [WinSCP](https://winscp.net/) est aussi un bon candidat pour Windows - -### Sous MacOS - -* [Cyberduck](https://cyberduck.io/) logiciel libre pour MacOS diff --git a/groups_and_permissions.md b/groups_and_permissions.md deleted file mode 100644 index da15dc13..00000000 --- a/groups_and_permissions.md +++ /dev/null @@ -1,330 +0,0 @@ -User 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: - - - -Managing groups ---------------- - -The group mechanism can be used to define groups of users which then can be used to restrict permissions for applications and other services (such as mail or xmpp). Note that it is *not* mandatory to create a group to do so: you can also restrict access to an app or service on a user-per-user basis. - -Using groups is however useful for semantics, for example if you host multiple groups of friends, associations or businesses on your server, you might want to create groups like `association1` and `association2` and add members of each association to the relevant group. - -### Default groups - -By default, two special groups are created: -- `all_users`, that contain all users registered on YunoHost, -- `visitors`, that applies to people viewing the server while not logged in. - -The content of those groups cannot be changed, only the permissions given to them. - -### List existing groups - -The existing groups are listed at the top of the *groups and permissions* page. - - - -To list the currently existing groups in CLI : - -```shell -$ yunohost user group list -groups: - all_users: - members: - - alice - - bob - - charlie - - delphine -``` - - -### Creating a new group - -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. - - - -In CLI, to create a new group called `yolo_crew` - -```shell -$ yunohost user group create yolo_crew -``` - -### Updating a group - -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. - - - -To remove a user, click on the cross next to their username, in the group panel. - - - -In CLI, use the following command to add `charlie` and `delphine`to the `yolo_crew` group: - -```shell -$ yunohost user group update yolo_crew --add charlie delphine -``` - -(similarly, `--remove` can be used to remove members from a group) - -Now in the group list we should see : - -```shell -$ yunohost user group list -groups: - all_users: - members: - - alice - - bob - - charlie - - delphine - yolo_crew: - members: - - charlie - - delphine -``` - -### Deleting groups - -To delete a group, click on the red cross on the top right of the group panel. You will be asked for confirmation. - - - -To delete the group `yolo_crew` in CLI, you may run - -```shell -$ yunohost user group delete yolo_crew -``` - -Managing permissions --------------------- - -The permission mechanism allow to restrict access to services (for example mail, xmpp, ...) and apps, or even specific parts of the apps (for example the administration interface of wordpress). - -### List permissions - -The groups page lists the permissions given to each group, including the special groups `all_users` and `visitors`. - - - -To list permissions and corresponding accesses in CLI: - -```shell -$ yunohost user permission list -permissions: - mail.main: - allowed: all_users - wordpress.admin: - allowed: - wordpress.main: - allowed: all_users - xmpp.main: - allowed: all_users -``` - -Here, we find that all registered users can use email, xmpp, and access the wordpress blog. However, nobody can access the wordpress admin interface. - -More details can be displayed by adding the `--full` option which will display the list of users corresponding to groups allowed, as well as urls associated to a permission (relevant for web apps). - -### Add accesses to group or users - -To add a permission to a group, simply click the "+" button in the group panel, scroll to the desired permission, then click on it. - - - -To allow a group to access the wordpress admin interface in CLI: - -```shell -$ yunohost user permission update wordpress.admin --add yolo_crew -``` - -Note that you can also allow a single user, by using the specific panel at the bottom of the page. - - - -or in CLI: - -```shell -$ yunohost user permission update wordpress.admin --add alice -``` - -And now we may see that both the YoloCrew and Alice have access to the wordpress admin interface : - -```shell -$ yunohost user permission list - [...] - wordpress.admin: - allowed: - - yolo_crew - - alice - [...] -``` - -Note that, for example, if we want to restrict permission for email so that only Bob is allowed to email, we should also remove `all_users` from the permission, by deleting it from the `all_users` group panel, or in CLI : - -```shell -$ yunohost user permission update mail --remove all_users --add bob -``` - -The webadmin will issue a warning if you set a permission that is superseeded by a wider permission. - - - -Notes for apps packagers ------------------------- - -Installing an app creates the permission `app.main` with `all_users` allowed by default. - -If you wish to make the application publicly available, instead of the old `unprotected_urls` mechanism, you should give access to the special group `visitors`: - -```shell -ynh_permission_update --permission "main" --add visitors -``` - -If you wish to create a custom permission for your app (e.g. to restrict access to an admin interface) you may use the following helpers: - -```shell -ynh_permission_create --permission "admin" --url "/admin" --allowed "$admin_user" -``` - -You don't need to take care of removing permissions or backing up/restoring them as it is handled by the core of YunoHost. - -### Migrating away from the legacy permission management - -When migrating/fixing an app still using the legacy permission system, it should be understood that the accesses are now to be managed by features from the core, outside of the application scripts! - -Application scripts are only expected to: -- if relevant, during the install script, initialize the main permission of the app as public (`visitors`) or private (`all_users`) or only accessible to specific groups/users ; -- if relevant, create and initialize any other specific permission (e.g. to some admin interface) in the install script (and *maybe* in some migration happening in the upgrade script). - -Applications scripts should absolutely **NOT** mess up with any already-existing app accesses (including `unprotected`/`skipped_uris` settings) during any other case, as *it would reset any admin-defined access rule*! - -When migrating away from the legacy permission, you should: -- remove any management of `$is_public`-like or `$admin_user`-like setting, except for any manifest question meant to either *initialize* the app as public/private or specific permissions ; -- remove any management of `skipped_`, `unprotected_` and `protected_uris` (and `_regex`) settings that are now considered obsolete and deprecated. (N.B.: you should **explicitly delete them in the upgrade script**). Instead, you should now rely on the new `ynh_permission_*` helpers instead. If you do feel like you still need to use them, please contact the core team to provide your feedback and we'll figure out something ; -For example, in the upgrade script if you used the `protected_uris` key before, you may use this code in the `DOWNWARD COMPATIBILITY` section: - -```bash -protected_uris=$(ynh_app_setting_get --app=$app --key=protected_uris) - -# Unused with the permission system -if [ ! -z "$protected_uris" ]; then - ynh_app_setting_delete --app=$app --key=protected_uris -fi -``` - -- remove any call to `yunohost app addaccess` and similar actions that are now obsolete and deprecated. -- if your app use LDAP and support filter, use the filter `'(&(objectClass=posixAccount)(permission=cn=YOUR_APP.main,ou=permission,dc=yunohost,dc=org))'` to allow users who have this permission. (A complete documentation of LDAP [here](https://moulinette.readthedocs.io/en/latest/ldap.html) if you want to undestand how it works with YunoHost) - -Here an example of how to migrate the code from legacy to new permission system: [example](https://github.com/YunoHost/example_ynh/pull/111/files) - -#### Specific case: regex protection - -If you still need to use regex to protect or unprotect urls, you can't use the new permission system (for now). - -But you can create a fake permission and use hooks to handle if there is a change in this faked permission. - -In the install script, create the fake permission (with no url): - -`ynh_permission_create --permission="create poll" --allowed "visitors" "all_users"` - -Then use the legacy protection: - -```bash -# Make app public if necessary -if [ $is_public -eq 1 ] -then - if [ "$path_url" == "/" ]; then - # If the path is /, clear it to prevent any error with the regex. - path_url="" - fi - # Modify the domain to be used in a regex - domain_regex=$(echo "$domain" | sed 's@-@.@g') - ynh_app_setting_set --app=$app --key=unprotected_regex --value="$domain_regex$path_url/create_poll.php?.*$","$domain_regex$path_url/adminstuds.php?.*" -else - ynh_permission_update --permission="create poll" --remove="visitors" -fi -``` - -In this example, if the app is public the group `visitors` has access to the permission `create poll`, the group is removed from this permission otherwise. - -Then create two files in the directory `hooks` at the root of the git repository: `post_app_addaccess` and `post_app_removeaccess`. In these hooks, you'll remove or readd the regex protection if the `visitors` group is added or removed from this permission: - -`post_app_addaccess`: - -```bash -#!/bin/bash - -# Source app helpers -source /usr/share/yunohost/helpers - -app=$1 -added_users=$2 -permission=$3 -added_groups=$4 - -if [ "$app" == __APP__ ]; then - if [ "$permission" = "create poll" ]; then # The fake permission "create poll" is modifed. - if [ "$added_groups" = "visitors" ]; then # As is it a fake permission we can only grant/remove the "visitors" group. - domain=$(ynh_app_setting_get --app=$app --key=domain) - path_url=$(ynh_app_setting_get --app=$app --key=path) - - if [ "$path_url" == "/" ]; then - # If the path is /, clear it to prevent any error with the regex. - path_url="" - fi - # Modify the domain to be used in a regex - domain_regex=$(echo "$domain" | sed 's@-@.@g') - ynh_app_setting_set --app=$app --key=unprotected_regex --value="$domain_regex$path_url/create_poll.php?.*$","$domain_regex$path_url/adminstuds.php?.*" - - # Sync the is_public variable according to the permission - ynh_app_setting_set --app=$app --key=is_public --value=1 - - yunohost app ssowatconf - else - ynh_print_warn --message="This app doesn't support this authorisation, you can only add or remove visitors group." - fi - fi -fi -``` - -`post_app_removeaccess` - -```bash -#!/bin/bash - -# Source app helpers -source /usr/share/yunohost/helpers - -app=$1 -removed_users=$2 -permission=$3 -removed_groups=$4 - -if [ "$app" == __APP__ ]; then - if [ "$permission" = "create poll" ]; then # The fake permission "create poll" is modifed. - if [ "$removed_groups" = "visitors" ]; then # As is it a fake permission we can only grant/remove the "visitors" group. - - # We remove the regex, no more protection is needed. - ynh_app_setting_delete --app=$app --key=unprotected_regex - - # Sync the is_public variable according to the permission - ynh_app_setting_set --app=$app --key=is_public --value=0 - - yunohost app ssowatconf - else - ynh_print_warn --message="This app doesn't support this authorisation, you can only add or remove visitors group." - fi - fi -fi -``` - -Don't forget to replace `__APP__` during the install/upgrade script. - -Here are some apps that use this specific case: [Lutim](https://github.com/YunoHost-Apps/lutim_ynh/pull/44/files) and [Opensondage](https://github.com/YunoHost-Apps/opensondage_ynh/pull/59/files) - -If you have any question, please contact someone from the apps-group. diff --git a/groups_and_permissions_fr.md b/groups_and_permissions_fr.md deleted file mode 100644 index dee23089..00000000 --- a/groups_and_permissions_fr.md +++ /dev/null @@ -1,327 +0,0 @@ -Groupes et 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 : - - - -Gestion des groupes ---------------- -Le mécanisme de groupe peut être utilisé pour définir des groupes d'utilisateurs qui peuvent ensuite être utilisés pour restreindre les autorisations pour les applications et autres services (tels que l'email ou xmpp). Notez qu'il n'est *pas* obligatoire de créer un groupe pour ce faire : vous pouvez également restreindre l'accès à une application ou à un service de manière individuelle. - -L'utilisation de groupes est cependant utile pour la sémantique, par exemple si vous hébergez plusieurs groupes d'amis, des associations ou des entreprises sur votre serveur, vous pouvez créer des groupes comme "association1" et "association2" et ajouter les membres de chaque association au groupe concerné. - - -### Groupes par défaut -Par défaut, deux groupes spéciaux sont créés : -- `all_users`, qui contient tous les utilisateurs enregistrés sur YunoHost, -- `visitors`, c'est-à-dire les personnes qui consultent le serveur sans être connectées. - -Vous ne pouvez pas changer le contenu de ces groupes, seulement les permissions qui leur sont accordées. - -### Lister les groupes existants -Les groupes existants sont listés en haut de la page *groupes et autorisations*. - - - -Pour obtenir la liste des groupes existants en CLI : - - -```shell -$ yunohost user group list -groups: - all_users: - members: - - alice - - bob - - charlie - - delphine -``` - -### 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. - - - -Dans la CLI, pour créer un nouveau groupe appelé `yolo_crew`, il faut utiliser - -```shell -$ yunohost user group create yolo_crew -``` - -### 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. - - - -Pour supprimer un utilisateur, cliquez sur la croix à côté de son nom d'utilisateur, dans le panneau du groupe. - - - -En CLI, 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) - -Dans la liste des groupes, nous devrions voir : - -```shell -$ yunohost user group list -groups: - all_users: - members: - - alice - - bob - - charlie - - delphine - yolo_crew: - members: - - charlie - - delphine -``` - -### Supprimer un groupe - -Pour supprimer un groupe, cliquez sur la croix rouge en haut à droite du panneau du groupes. Une confirmation vous sera demandée. - - - -Pour supprimer le groupe `yolo_crew` dans CLI, vous pouvez exécuter - -```shell -$ yunohost user group delete yolo_crew -``` - -Gestion des permissions --------------------- - -Le mécanisme de permissions permet de restreindre l'accès aux services (par exemple mail, xmpp, ...) et aux applications, ou même à des parties spécifiques des applications (par exemple l'interface d'administration de wordpress). - -### Liste des permissions - -La page des groupes liste les permissions données à chaque groupe, y compris les groupes spéciaux `all_users` et `visitors`. - - - -Pour répertorier les permissions et les accès correspondants en CLI : -```shell -$ yunohost user permission list -permissions: - mail.main: - allowed: all_users - wordpress.admin: - allowed: - wordpress.main: - allowed: all_users - xmpp.main: - allowed: all_users -``` -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. - -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). - -### Ajouter des permissions à un groupe ou un utilisateur - -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. - - - -Pour permettre à un groupe d'accéder à l'interface d'administration de wordpress via la CLI : - -```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. - - - -ou en CLI : - -```shell -$ yunohost user permission update wordpress.admin --add alice -``` - -Et maintenant, nous pouvons voir que YoloCrew et Alice ont tous deux accès à l'interface d'administration de Wordpress : - -```shell -$ yunohost user permission list - [...] - wordpress.admin: - allowed: - - yolo_crew - - alice - [...] -``` - -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 : - -```shell -$ yunohost user permission update mail --remove all_users --add bob -``` - -La webadmin émettra un avertissement si vous définissez une permission qui est remplacée par une permission plus large. - - - - -Notes aux packageurs d'applications ------------------------- - -L'installation d'une application crée l'autorisation `app.main` avec `all_users` autorisée par défaut. - -Si vous souhaitez rendre l'application accessible au public, au lieu de l'ancien mécanisme `unprotected_urls`, vous devez donner accès au groupe spécial `visitors` : - -```shell -ynh_permission_update --permission "main" --add visitors -``` - -Si vous souhaitez créer une autorisation personnalisée pour votre application (par exemple pour restreindre l'accès à une interface d'administration), vous pouvez utiliser les helpers suivants : - -```shell -ynh_permission_create --permission "admin" --url "/admin" --allowed "$admin_user" -``` - -Vous n'avez pas besoin de supprimer les autorisations ou de les sauvegarder / restaurer car elles sont gérées par le core de YunoHost. - -### Migration hors de la gestion des autorisations héritées - -Lors de la migration / correction d'une application utilisant toujours le système d'autorisations hérité, il faut comprendre que les accès doivent maintenant être gérés par des fonctionnalités du core, en dehors des scripts d'application ! - -Les scripts d'application devraient seulement : -- le cas échéant, pendant le script d'installation, initialiser l'autorisation principale de l'application en tant que public (`visitors`) ou privé (`all_users`) ou uniquement accessible à des groupes / utilisateurs spécifiques ; -- le cas échéant, créer et initialiser toute autre autorisation spécifique (par exemple, sur une interface d'administration) dans le script d'installation (et *sans doute* dans certaines migrations se produisant dans le script de mise à niveau). - -Les scripts d'applications ne devraient absolument **PAS** altérer les accès aux applications déjà existantes (y compris les paramètres `unprotected` / `skipped_uris`), car cela réinitialiserait toutes les règles d'accès définies par l'administrateur ! - -Lors de la migration hors de l'autorisation héritée, vous devez : -- supprimer toute gestion du paramètre de type `$is_public` ou `$admin_user`, sauf pour toute question manifeste destinée à *initialiser* l'application avec des autorisations publiques / privées ou spécifiques ; -- supprimer toute gestion des paramètres `skipped_`, `unprotected_` et `protected_uris` (et `_regex`) qui sont désormais considérés comme obsolètes et dépréciés. (NB : vous devez **les supprimer explicitement dans le script upgrade**). Au lieu de cela, vous devriez désormais vous fier aux nouveaux helpers `ynh_permission_ *`. Si vous sentez que vous avez encore besoin de les utiliser, veuillez contacter l'équipe core pour pouvoir être assisté ; -Par exemple, dans le script *upgrade*, si vous avez utilisé la clé `protected_uris` auparavant, vous pouvez utiliser ce code dans la section `DOWNWARD COMPATIBILITY` : - -```bash -protected_uris=$(ynh_app_setting_get --app=$app --key=protected_uris) - -# Unused with the permission system -if [ ! -z "$protected_uris" ]; then - ynh_app_setting_delete --app=$app --key=protected_uris -fi -``` - -- Supprimez tout appel à `yunohost app addaccess` et aux actions similaires qui sont désormais obsolètes et dépréciés. -- Si votre application utilise LDAP et prend en charge le filtre, utilisez le filtre `(&(objectClass=posixAccount)(permission=cn=YOUR_APP.main,ou=permission,dc=yunohost,dc=org))'` pour autoriser les utilisateurs ayant cette permission. (On trouvera une documentation sur LDAP [ici](https://moulinette.readthedocs.io/en/latest/ldap.html)) - -Voici un exemple de migration de code vers le nouveau système d'autorisation : [exemple](https://github.com/YunoHost/example_ynh/pull/111/files) - -#### Cas spécifique : protection regex - -Si vous devez toujours utiliser regex pour protéger ou déprotéger les URL, vous ne pouvez pas utiliser le nouveau système d'autorisation (pour l'instant). - -Mais vous pouvez créer une fausse autorisation et utiliser des crochets pour gérer s'il y a un changement dans cette fausse autorisation. - -Dans le script d'installation, créez la fausse autorisation (sans URL) : - -`ynh_permission_create --permission="create poll" --allowed "visitors" "all_users"` - -Utilisez ensuite la protection héritée : - -```bash -# Make app public if necessary -if [ $is_public -eq 1 ] -then - if [ "$path_url" == "/" ]; then - # If the path is /, clear it to prevent any error with the regex. - path_url="" - fi - # Modify the domain to be used in a regex - domain_regex=$(echo "$domain" | sed 's@-@.@g') - ynh_app_setting_set --app=$app --key=unprotected_regex --value="$domain_regex$path_url/create_poll.php?.*$","$domain_regex$path_url/adminstuds.php?.*" -else - ynh_permission_update --permission="create poll" --remove="visitors" -fi -``` - -Dans cet exemple, si l'application est publique, le groupe `visitors` a accès à l'autorisation `create poll`, sinon le groupe est supprimé de cette autorisation. - -Créez ensuite deux fichiers dans le répertoire `hooks` à la racine du dépôt git de l'application : `post_app_addaccess` et `post_app_removeaccess`. Dans ces hooks, vous supprimerez ou rajouterez la protection contre les regex si le groupe `visitors` est ajouté ou supprimé de cette autorisation : - -`post_app_addaccess` - -```bash -#!/bin/bash - -# Source app helpers -source /usr/share/yunohost/helpers - -app=$1 -added_users=$2 -permission=$3 -added_groups=$4 - -if [ "$app" == __APP__ ]; then - if [ "$permission" = "create poll" ]; then # The fake permission "create poll" is modifed. - if [ "$added_groups" = "visitors" ]; then # As is it a fake permission we can only grant/remove the "visitors" group. - domain=$(ynh_app_setting_get --app=$app --key=domain) - path_url=$(ynh_app_setting_get --app=$app --key=path) - - if [ "$path_url" == "/" ]; then - # If the path is /, clear it to prevent any error with the regex. - path_url="" - fi - # Modify the domain to be used in a regex - domain_regex=$(echo "$domain" | sed 's@-@.@g') - ynh_app_setting_set --app=$app --key=unprotected_regex --value="$domain_regex$path_url/create_poll.php?.*$","$domain_regex$path_url/adminstuds.php?.*" - - # Sync the is_public variable according to the permission - ynh_app_setting_set --app=$app --key=is_public --value=1 - - yunohost app ssowatconf - else - ynh_print_warn --message="This app doesn't support this authorisation, you can only add or remove visitors group." - fi - fi -fi -``` - -`post_app_removeaccess` - -```bash -#!/bin/bash - -# Source app helpers -source /usr/share/yunohost/helpers - -app=$1 -removed_users=$2 -permission=$3 -removed_groups=$4 - -if [ "$app" == __APP__ ]; then - if [ "$permission" = "create poll" ]; then # The fake permission "create poll" is modifed. - if [ "$removed_groups" = "visitors" ]; then # As is it a fake permission we can only grant/remove the "visitors" group. - - # We remove the regex, no more protection is needed. - ynh_app_setting_delete --app=$app --key=unprotected_regex - - # Sync the is_public variable according to the permission - ynh_app_setting_set --app=$app --key=is_public --value=0 - - yunohost app ssowatconf - else - ynh_print_warn --message="This app doesn't support this authorisation, you can only add or remove visitors group." - fi - fi -fi -``` - -N'oubliez pas de remplacer `__APP__` pendant le script *install* / *upgrade*. - -Voici quelques applications qui utilisent ce cas spécifique : [Lutim](https://github.com/YunoHost-Apps/lutim_ynh/pull/44/files) et [OpenSondage](https://github.com/YunoHost-Apps/opensondage_ynh/pull/59/files) - -Si vous avez des questions, veuillez contacter un des membres du groupe apps. diff --git a/hardware.md b/hardware.md deleted file mode 100644 index 3b4132d8..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 effdc0e1..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 7fb2556d..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 500MHz -* 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 b5e721b9..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 500MHz -* 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 e15474a0..00000000 --- a/help.md +++ /dev/null @@ -1,59 +0,0 @@ -# Looking for help? - -<h3>Connect to the support chatroom</h3> -<center> -<div class="alert alert-info" markdown="1" style="max-width:700px;"> -<strong>ProTips™</strong> -<ul style="text-align:left;"> -<li>Don't ask to ask, just ask !</li> -<li><em>Be patient</em>, it can take a few minutes before someone sees your messages.</li> -</ul> -</div> - -<iframe src="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=ynhuser|?&theme=mini#yunohost" style="border:0; width:100%; height:450px;"></iframe> - -</br> -</br> -<em>Note : this room is available via IRC (#yunohost on freenode - <a href="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=ynhuser|?&theme=mini#yunohost">using kiwiirc</a>), via XMPP <small>(support@conference.yunohost.org)</small>, or Matrix <small>(#freenode_#yunohost:matrix.org - <a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">using Riot</a>)</small></em> -</center> - -<h3>... or ask on the forum !</h3> - -<center> -<button id="goForum" type="button" class="btn btn-success" style="font-weight:bold;"> - <span class="glyphicon glyphicon-comment"></span> Go to the forum - </button> -</center> - -<h3>You've found a bug ?</h3> - -<center> -<br> -<em>Please report it on our bugtracker or contact the developers</em><br><br> -<button id="goBugtracker" type="button" class="btn btn-warning" style="font-weight:bold;"> - <span class="glyphicon glyphicon-exclamation-sign"></span> Report a bug - </button> -<button id="goDevroom" type="button" class="btn btn-warning" style="font-weight:bold; margin-left:40px"> - <span class="glyphicon glyphicon-comment"></span> Contact the developers - </button> -</br> -</br> -<em>Note : you can also connect to the devrooms, using your favorite XMPP client, to </br> -dev@conference.yunohost.org and apps@conference.yunohost.org</br> -or with a Matrix client to</br> -#freenode_#yunohost-dev:matrix.org</em> -</center> - -<script> - -document.getElementById("goForum").onclick = function() { - window.location.href = "https://forum.yunohost.org/latest"; -} -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"; -} -</script> - diff --git a/help_fr.md b/help_fr.md deleted file mode 100644 index 0810f740..00000000 --- a/help_fr.md +++ /dev/null @@ -1,61 +0,0 @@ -# Besoin d'aide ? - -<h3>Connectez-vous au salon de support</h3> -<center> -<div class="alert alert-info" markdown="1" style="max-width:750px;"> -<strong>ProTips™</strong> -<ul style="text-align:left;"> -<li>Pas besoin de demander si vous pouvez poser une question - posez-la directement !</li> -<li><em>Soyez patient</em>, cela peut prendre plusieurs minutes avant que quelqu'un remarque vos messages.</li> -</ul> -</div> - -<iframe src="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=ynhuser|?&theme=mini#yunohost" style="border:0; width:100%; height:450px;"></iframe> - -</br> -</br> -<em>Note : ce salon est accessible via IRC (#yunohost sur freenode en utilisant <a href="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=ynhuser|?&theme=mini#yunohost">Kiwiirc</a>), via XMPP <small>(support@conference.yunohost.org)</small>, ou Matrix <small>(#freenode_#yunohost:matrix.org - <a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">en utilisant Riot</a>)</small>.</em> -</center> - -<h3>... ou demandez sur le forum !</h3> - -<center> -<button id="goForum" type="button" class="btn btn-success" style="font-weight:bold;"> - <span class="glyphicon glyphicon-comment"></span> Aller sur le forum - </button> -</center> - -<h3>Vous avez trouvé un bug ?</h3> - -<center> -<br> -<em>Vous pouvez rapporter le bug sur le bugtracker ou contacter les développeurs</em><br><br> -<button id="goBugtracker" type="button" class="btn btn-warning" style="font-weight:bold;"> - <span class="glyphicon glyphicon-exclamation-sign"></span> Rapporter un bug - </button> -<button id="goDevroom" type="button" class="btn btn-warning" style="font-weight:bold; margin-left:40px"> - <span class="glyphicon glyphicon-comment"></span> Contacter les développeurs - </button> -</br> -</br> -<em>Note : vous pouvez aussi vous connecter aux salons de dev, via votre client XMPP favori, à</br> -dev@conference.yunohost.org et apps@conference.yunohost.org</br> -ou bien via votre client matrix préféré, à</br> -#freenode_#yunohost-dev:matrix.org</em> -</center> - -<script> -document.getElementById("goForum").onclick = function() { - window.location.href = "https://forum.yunohost.org/latest"; -} -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"; -} -document.getElementById("goForum").onclick = function() { - window.location.href = "https://forum.yunohost.org"; -} -</script> - diff --git a/images/HedgeDoc-Logo.png b/images/HedgeDoc-Logo.png new file mode 100644 index 00000000..77aa3507 Binary files /dev/null and b/images/HedgeDoc-Logo.png differ diff --git a/images/OnlyOffice_logo.png b/images/OnlyOffice_logo.png new file mode 100644 index 00000000..3b053510 Binary files /dev/null and b/images/OnlyOffice_logo.png differ diff --git a/images/adminer_logo.png b/images/adminer_logo.png new file mode 100644 index 00000000..06444fe5 Binary files /dev/null and b/images/adminer_logo.png differ diff --git a/images/administrate/specific_use_cases/virtualbox-snapshot.jpg b/images/administrate/specific_use_cases/virtualbox-snapshot.jpg new file mode 100644 index 00000000..0559f23c Binary files /dev/null and b/images/administrate/specific_use_cases/virtualbox-snapshot.jpg differ diff --git a/images/administrate/specific_use_cases/virtualbox-snapshot2.webp b/images/administrate/specific_use_cases/virtualbox-snapshot2.webp new file mode 100644 index 00000000..fcd1207a Binary files /dev/null and b/images/administrate/specific_use_cases/virtualbox-snapshot2.webp differ diff --git a/images/administrate/specific_use_cases/virtualbox-snapshot3.webp b/images/administrate/specific_use_cases/virtualbox-snapshot3.webp new file mode 100644 index 00000000..a15f144c Binary files /dev/null and b/images/administrate/specific_use_cases/virtualbox-snapshot3.webp differ diff --git a/images/administrate/specific_use_cases/virtualbox-snapshot4.webp b/images/administrate/specific_use_cases/virtualbox-snapshot4.webp new file mode 100644 index 00000000..504553cf Binary files /dev/null and b/images/administrate/specific_use_cases/virtualbox-snapshot4.webp differ diff --git a/images/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/bludit_logo.png b/images/bludit_logo.png new file mode 100644 index 00000000..b1a69662 Binary files /dev/null and b/images/bludit_logo.png differ diff --git a/images/boot_screen.png b/images/boot_screen.png 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.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/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/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/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/invoiceninja_logo.png b/images/invoiceninja_logo.png new file mode 100644 index 00000000..0c663528 Binary files /dev/null and b/images/invoiceninja_logo.png differ diff --git a/images/logo-bibliogram.png b/images/logo-bibliogram.png new file mode 100644 index 00000000..51c97c89 Binary files /dev/null and b/images/logo-bibliogram.png differ diff --git a/images/logo-bookstack.png b/images/logo-bookstack.png new file mode 100644 index 00000000..d10b3ca4 Binary files /dev/null and b/images/logo-bookstack.png differ diff --git a/images/logo-jupyterhub.png b/images/logo-jupyterhub.png new file mode 100644 index 00000000..48d8b817 Binary files /dev/null and b/images/logo-jupyterhub.png differ diff --git a/images/logo_codelutin.png b/images/logo_codelutin.png new file mode 100644 index 00000000..ff19c172 Binary files /dev/null and b/images/logo_codelutin.png differ diff --git a/images/logo_gitoyen.png b/images/logo_gitoyen.png new file mode 100644 index 00000000..4e84b2b8 Binary files /dev/null and b/images/logo_gitoyen.png differ diff --git a/images/logo_globenet.png b/images/logo_globenet.png new file mode 100644 index 00000000..d2a8dca8 Binary files /dev/null and b/images/logo_globenet.png differ diff --git a/images/logo_ldn.png b/images/logo_ldn.png new file mode 100644 index 00000000..3334572d Binary files /dev/null and b/images/logo_ldn.png differ diff --git a/images/logo_nbs.png b/images/logo_nbs.png new file mode 100644 index 00000000..c591923e Binary files /dev/null and b/images/logo_nbs.png differ diff --git a/images/logo_ngi.png b/images/logo_ngi.png new file mode 100644 index 00000000..e0449805 Binary files /dev/null and b/images/logo_ngi.png differ diff --git a/images/logo_nlnet.png b/images/logo_nlnet.png new file mode 100644 index 00000000..caf88a73 Binary files /dev/null and b/images/logo_nlnet.png differ diff --git a/images/logo_tetaneutral.png b/images/logo_tetaneutral.png new file mode 100644 index 00000000..4744bcb5 Binary files /dev/null and b/images/logo_tetaneutral.png differ diff --git a/images/lychee_logo.png b/images/lychee_logo.png new file mode 100644 index 00000000..aa6c318b Binary files /dev/null and b/images/lychee_logo.png differ diff --git a/images/mantis_logo.png b/images/mantis_logo.png new file mode 100644 index 00000000..d2529c81 Binary files /dev/null and b/images/mantis_logo.png differ diff --git a/images/matomo_logo.png b/images/matomo_logo.png new file mode 100644 index 00000000..d62dd696 Binary files /dev/null and b/images/matomo_logo.png differ diff --git a/images/navidrome_logo.png b/images/navidrome_logo.png new file mode 100644 index 00000000..993c8e09 Binary files /dev/null and b/images/navidrome_logo.png differ diff --git a/images/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 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 767.6 191"> + <defs> + <style> + .cls-1 { + fill: #3c3c3c; + } + + .cls-2 { + fill: #f70; + } + + .cls-3 { + fill: #fff; + } + </style> + </defs> + <g id="Symbole_23_1" data-name="Symbole 23 – 1" transform="translate(-577 -446.516)"> + <path id="Tracé_3456" data-name="Tracé 3456" class="cls-1" d="M48.953-42.57c1.466-.943,4.51-.83,4.51-.83H64.8a75.758,75.758,0,0,0,28.1-5.1A46.707,46.707,0,0,0,113.6-64q7.8-10.4,7.8-25.6,0-15.4-7.3-25.8a43.832,43.832,0,0,0-19.7-15.5A72.474,72.474,0,0,0,66.6-136H26.286s-4.763-.041-7.4,1.925-2.483,5.564-2.483,5.564V-3.588a3.986,3.986,0,0,0,.77,2.735,4.788,4.788,0,0,0,2.9.853H43.957a4.221,4.221,0,0,0,2.869-.853c.911-.972.774-3.035.774-3.035V-39.627A3.519,3.519,0,0,1,48.953-42.57ZM65.6-110.8q11,0,17.1,5.6t6.1,16.4q-.2,9.4-6.5,14.9T66-68.4H50.653a3.693,3.693,0,0,1-2.331-.742,3.813,3.813,0,0,1-.722-2.364v-37.132a2.062,2.062,0,0,1,.722-1.716,5.2,5.2,0,0,1,2.5-.446Z" transform="translate(735 592.516)"/> + <path id="Tracé_3455" data-name="Tracé 3455" class="cls-1" d="M152-110.4a16.763,16.763,0,0,0,12.3-5.1,16.533,16.533,0,0,0,5.1-12.1,16.763,16.763,0,0,0-5.1-12.3A16.763,16.763,0,0,0,152-145a16.533,16.533,0,0,0-12.1,5.1,16.763,16.763,0,0,0-5.1,12.3,16.533,16.533,0,0,0,5.1,12.1A16.533,16.533,0,0,0,152-110.4ZM166.744-1.253A5.163,5.163,0,0,0,167.8-4.6v-84.4s.2-3.8-1.622-5.8S160.525-97,160.525-97H146.1s-4.891.167-7.317,2.8-2.387,7.732-2.387,7.732V-6.591s-.182,3.621,1.4,5.269S142.746,0,142.746,0h20.475A6.231,6.231,0,0,0,166.744-1.253Zm130.162-.5c2.2-1.778,3.011-5.364,3.011-5.364L327.88-92.949s.738-1.925,0-2.938S324.926-97,324.926-97H302.113a8.712,8.712,0,0,0-3.818,1.113,5.151,5.151,0,0,0-1.792,2.841L285.676-45.3a1.478,1.478,0,0,1-1.531,1.429,1.478,1.478,0,0,1-1.531-1.429L270.8-92.243a6.42,6.42,0,0,0-1.879-3.643,7.68,7.68,0,0,0-4.2-1.113H242.978a8.845,8.845,0,0,0-4.06,1.113,5.149,5.149,0,0,0-1.784,3.05l-9.2,44.235s-.213,1.2-2.768,2.041-3.5-2.041-3.5-2.041l-9.779-43.51s-.312-4.106-2.534-5.735-6.353-.78-6.353-.78L188.87-94.519s-4.51,1.1-6.014,3.812,0,7.019,0,7.019L207.17-7.6s.641,3.954,3.141,5.855S217.169,0,217.169,0h13.64s3.62-.012,5.709-1.749,2.647-5.2,2.647-5.2L250.631-47.5a2.736,2.736,0,0,1,2.768-2.381,2.847,2.847,0,0,1,2.844,2.381L267.781-7.66s.468,4,3.092,5.911S278.279,0,278.279,0H291.1S294.7.029,296.906-1.749ZM357.2-110.4a16.762,16.762,0,0,0,12.3-5.1,16.533,16.533,0,0,0,5.1-12.1,16.763,16.763,0,0,0-5.1-12.3,16.763,16.763,0,0,0-12.3-5.1,16.533,16.533,0,0,0-12.1,5.1,16.763,16.763,0,0,0-5.1,12.3,16.533,16.533,0,0,0,5.1,12.1A16.533,16.533,0,0,0,357.2-110.4ZM371.326-1.749C373.259-3.477,373-6.91,373-6.91V-90.436s-.11-3.058-1.541-4.7A7.042,7.042,0,0,0,367.277-97H348.615s-3.556.212-5.31,1.978-1.7,5.084-1.7,5.084V-8.3s-.307,4.473,1.314,6.546S348.085,0,348.085,0h17.184S369.393-.021,371.326-1.749ZM485.84-95.233c.863,1.373.863,6.905.863,6.905L486.4,3.8a38.992,38.992,0,0,1-6.5,22.4,41.1,41.1,0,0,1-18.4,14.7Q449.6,46,434,46q-8,0-21.2-3a74.246,74.246,0,0,1-16.5-5.607,5.014,5.014,0,0,1-2.827-3.655,7.006,7.006,0,0,1,.628-4.314l4.138-9.684a6.978,6.978,0,0,1,3.656-3.64c2.566-.928,4.017-1.092,6.61-.073A64.9,64.9,0,0,0,432.2,20.8q10.2,0,16.5-4.7A14.831,14.831,0,0,0,455,3.6s.809-5.015-3.641-5.365S444.809,2.115,437.2,2.2q-22.6,0-36-13.2T387.8-48.4q0-24.2,13.6-37.9t37-13.7a38.162,38.162,0,0,1,13.8,2.7c4.667,1.8,8.45,7.575,13,7.7s-.373-7.168,5.2-7.2c3.383-.019,7.234-.007,11.084,0C483.469-96.8,484.977-96.606,485.84-95.233ZM440.6-22.8c4.4,0,8-.854,11.6-5.134S455-39.917,455-39.917v-16.46s1-8.867-2.8-13.473-7.067-4.95-12.4-4.95a16.918,16.918,0,0,0-14.2,7.2q-5.4,7.2-5.4,19,0,12,5.4,18.9T440.6-22.8Zm169-25.6q0,15.6-6.9,27A45.743,45.743,0,0,1,583.6-3.9q-12.2,6.1-27.8,6.1Q540,2.2,528-3.7a43.275,43.275,0,0,1-18.7-17.4q-6.7-11.5-6.7-27.7,0-15.6,6.9-27.2a46.151,46.151,0,0,1,19-17.8q12.1-6.2,27.7-6.2,15.8,0,27.9,6.1a44.223,44.223,0,0,1,18.8,17.7Q609.6-64.6,609.6-48.4ZM556-23.6q9.6,0,15.4-6.8t5.8-18q0-11.2-5.7-18.4A18.3,18.3,0,0,0,556.4-74q-9.8,0-15.6,6.9T535-48.8q0,11.4,5.7,18.3T556-23.6Z" transform="translate(735 591.516)"/> + <path id="Tracé_3467" data-name="Tracé 3467" class="cls-2" d="M36.12,0h64.088a36.12,36.12,0,0,1,36.12,36.12v84.911L131.486,131.4l-10.5,4.93H36.12A36.12,36.12,0,0,1,0,100.208V36.12A36.12,36.12,0,0,1,36.12,0Z" transform="translate(577 592.285) rotate(-90)"/> + <path id="Tracé_3469" data-name="Tracé 3469" class="cls-2" d="M24.641,0C38.167,0,49.59,10.892,49.59,24.418S38.167,48.983,24.641,48.983-36.4,9.469-35.316,9.463s-27.4-.076,9.176,0S8.9.355,24.641,0Z" transform="translate(663.719 446.516)"/> + <circle id="Ellipse_69" data-name="Ellipse 69" class="cls-3" cx="8.557" cy="8.557" r="8.557" transform="translate(680.344 461.978)"/> + <circle id="Ellipse_67" data-name="Ellipse 67" class="cls-3" cx="40.426" cy="40.426" r="40.426" transform="translate(604.738 483.695)"/> + <circle id="Ellipse_68" data-name="Ellipse 68" class="cls-1" cx="28.623" cy="28.623" r="28.623" transform="translate(616.541 495.499)"/> + </g> +</svg> 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/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/simple-torrent_logo.png b/images/simple-torrent_logo.png new file mode 100644 index 00000000..b18f220d Binary files /dev/null and b/images/simple-torrent_logo.png differ diff --git a/images/slingcode_logo.svg b/images/slingcode_logo.svg new file mode 100644 index 00000000..8758bf4e --- /dev/null +++ b/images/slingcode_logo.svg @@ -0,0 +1,141 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="64" + height="64" + id="svg2" + version="1.1" + inkscape:version="0.48.4 r9939" + sodipodi:docname="logo.svg" + inkscape:export-filename="../../public/logo.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4"> + <pattern + patternUnits="userSpaceOnUse" + width="40" + height="30" + patternTransform="translate(-88,995.375)" + id="pattern3043"> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3018-3" + d="m 35,4.9872 0,20" + style="fill:none;stroke:#31d58f;stroke-width:10;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.94117647;stroke-dasharray:none" /> + <path + style="fill:none;stroke:#e5b41f;stroke-width:10;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.94117647;stroke-dasharray:none" + d="m 25,4.9872 0,20" + id="path3794-6" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3796-7" + d="m 15,4.9872 0,20" + style="fill:none;stroke:#50a1ef;stroke-width:10;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.94117647;stroke-dasharray:none" /> + <path + style="fill:none;stroke:#c64438;stroke-width:10;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.94117647;stroke-dasharray:none" + d="m 5,4.9872 0,20" + id="path3798-5" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + </pattern> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="4" + inkscape:cx="12.6842" + inkscape:cy="37.3102" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + borderlayer="true" + inkscape:showpageshadow="false" + inkscape:window-width="1920" + inkscape:window-height="1080" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="0"> + <inkscape:grid + type="xygrid" + id="grid3801" + empspacing="4" + visible="true" + enabled="true" + snapvisiblegridlinesonly="true" + dotted="false" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-988.36218)"> + <g + id="g4657"> + <path + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" + d="m 11,992.36218 c -1.644703,0 -3,1.3553 -3,3 l 0,50.00002 c 0,1.6447 1.355297,3 3,3 l 41.999997,0 c 1.64471,0 3,-1.3553 3,-3 l 0,-50.00002 c 0,-1.6447 -1.35529,-3 -3,-3 z m 3,4 35.999997,0 c 1.0907,0 2,0.9093 2,2 l 0,28.00002 c 0,1.0907 -0.9093,2 -2,2 l -35.999997,0 c -1.090701,0 -2,-0.9093 -2,-2 l 0,-28.00002 c 0,-1.0907 0.909299,-2 2,-2 z m 18.812497,36.00002 c 0.0623,-0.01 0.12519,-0.01 0.1875,0 l 1,0 16,0 1,0 c 0.52359,0 0.99995,0.4764 1,1 l 0,2 c -5e-5,0.5236 -0.47641,0.9999 -1,1 l -1,0 -16,0 -1,0 c -0.52358,-10e-5 -0.99994,-0.4764 -1,-1 l 0,-2 c -0.008,-0.4666 0.3541,-0.9126 0.8125,-1 z" + id="path3825" + inkscape:connector-curvature="0" + sodipodi:nodetypes="sssssssssssssssssscccccccccccccc" + inkscape:export-filename="../../public/logo.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90" /> + <g + id="g4619"> + <path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="path3827" + d="m 43,1000.375 -4,24 6,0 4,-24 z" + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#31d58f;fill-opacity:1;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" /> + <path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="path3829" + d="m 35,1000.375 -4,24 6,0 4,-24 z" + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#e5b41f;fill-opacity:1;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" /> + <path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="path3831" + d="m 27,1000.375 -4,24 6,0 4,-24 z" + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#50a1ef;fill-opacity:1;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" /> + <path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="path3833" + d="m 19,1000.375 -4,24 6,0 4,-24 z" + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#c64438;fill-opacity:1;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" /> + </g> + </g> + </g> +</svg> 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/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/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/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/install.md b/install.md deleted file mode 100644 index 255f78f0..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. - ---- - -<h1 style="font-weight: 100">Give it a try</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/try"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>Demo server</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_virtualbox"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>Try in VirtualBox</p></b></a> -</div> - -</div> - - - - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Install at home</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_raspberry"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>On a Raspberry Pi</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_arm_board"><img src="/images/olinuxino.jpg" height=150 style="vertical-align:bottom; padding:20px"><b><p>On an ARM board</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_iso"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>On a regular computer</p></b></a> -</div> - -</div> - -<br> - - ---- - -<h1 style="font-weight: 100">Install on a remote server</h1> - -<div class="alert alert-info" markdown="1"> -<span class="glyphicon glyphicon-heart"></span> 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. -</div> - -<div class="row"> - -<div class="block-center text-center"> -<a href="/install_on_vps"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p>On a dedicated or virtual private server</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Advanced / others</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_debian"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> -<b><p>On Debian 9/Stretch</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Dev environment in LXD/LXC</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/docker"><img src="/images/docker.png" height=150 style="vertical-align:bottom"><b><p>(Non-official!) Docker images</p></b></a> -</div> - -</div> diff --git a/install_ar.md b/install_ar.md deleted file mode 100644 index 67afb69a..00000000 --- a/install_ar.md +++ /dev/null @@ -1,83 +0,0 @@ -# <div dir="rtl">دليل التنصيب</div> - -<div dir="rtl"> -يمكن تنصيب واي يونوهوست بِعدّة طُرُق و أساليب. فطريقة التنصيب تختلف قليلا فقط إذا ما كنتم تودون نثبيته محليا في المنزل أو عن بُعد و كذا نوع الجهاز : **[إطّلعوا على الأجهزة المتوافقة](/hardware)** -</div> -<div dir="rtl"> -تقوم هذه الصفحة بإحصاء الطرق المختلفة للتنصيب مُرتبةً حسب المواضيع. -</div> - ---- - -<h1 div dir="rtl" style="font-weight: 100">التجريب</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/try"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>الخادوم التجريبي</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_virtualbox"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>التجريب على خادوم إفتراضي</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 dir="rtl" style="font-weight: 100">عملية النتصيب في المنزل</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_raspberry"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>على راسبيري باي</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_arm_board"><img src="/images/cubieboard2.png" height=150 style="vertical-align:bottom"><b><p dir="rtl">على بطاقة أي أر آم ARM</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_iso"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>على حاسوب عادي</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 dir="rtl" style="font-weight: 100">التنصيب عن بُعد</h1> - -<div dir="rtl" class="alert alert-info" markdown="1"> -<span class="glyphicon glyphicon-heart"></span> بإمكانك جمعيات مُزوّدي الإنترنت القريبة منكم أن تُوفّر لكم *خادوما إفتراضيا خاصا* (VPS) ، خادوم يُديره بشرٌ و يحترم قيمة المُستخدِمين و [حيادية الإنترنت](https://fr.wikipedia.org/wiki/Neutralit%C3%A9_du_r%C3%A9seau) ! إطّلعوا على [هذه الصفحة](https://db.ffdn.org/) للمزيد مِن المعلومات. -</div> - -<div class="row"> - -<div class="block-center text-center"> -<a href="/install_on_vps"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p dir="rtl">على خادوم مُستضاف أو خادوم إفتراضي خاص (VPS)</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 dir="rtl" style="font-weight: 100">طُرُق متقدمة / أخرى</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_debian"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> -<b><p>على ديبيان 9 / ستريتش</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Dev environment in LXD/LXC</p></b></a> -</div> - -</div> diff --git a/install_es.md b/install_es.md deleted file mode 100644 index cb16720a..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. - ---- - -<h1 style="font-weight: 100">Probar</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/try"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>Servidor de demo</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_virtualbox"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>Probar en una máquina virtual</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Instalar en casa</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_raspberry"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>En un Raspberry Pi</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_arm_board"><img src="/images/olinuxino.jpg" height=150 style="vertical-align:bottom; padding:20px"><b><p>En un ARM board</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_iso"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>En un ordenador estándar</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Instalación remota</h1> - -<div class="alert alert-info" markdown="1"> -<span class="glyphicon glyphicon-heart"></span> 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. -</div> - -<div class="row"> - -<div class="block-center text-center"> -<a href="/install_on_vps"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p>En un servidor dedicado o virtual (VPS)</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Avanzado / otros</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_debian"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> -<b><p>Sur Debian 9/Stretch</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Dev environment in LXD/LXC</p></b></a> -</div> - - -</div> diff --git a/install_fr.md b/install_fr.md deleted file mode 100644 index a64868bd..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. - ---- - -<h1 style="font-weight: 100">Essayer</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/try"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>Serveur de démo</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_virtualbox"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>Essayer dans une machine virtuelle</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Installer à la maison</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_raspberry"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>Sur un Raspberry Pi</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_arm_board"><img src="/images/olinuxino.jpg" height=150 style="vertical-align:bottom; padding:20px"><b><p>Sur une carte ARM</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_iso"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>Sur un ordinateur standard</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Installer à distance</h1> - -<div class="alert alert-info" markdown="1"> -<span class="glyphicon glyphicon-heart"></span> 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. -</div> - -<div class="row"> - -<div class="block-center text-center"> -<a href="/install_on_vps"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p>Sur un serveur dédié ou virtuel (VPS)</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Avancé / autres</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_debian"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> -<b><p>Sur Debian 9/Stretch</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Environnement de dev avec LXD/LXC</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/docker"><img src="/images/docker.png" height=150 style="vertical-align:bottom"><b><p>(Non-officiel!) Images docker</p></b></a> -</div> - -</div> 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 - -<img src="/images/laptop.png" width=200> -<img src="/images/desktop.jpg"> -<img src="/images/nettop.jpg"> - -* 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 - - -<a class="btn btn-lg btn-default" href="/images">0. Download the YunoHost ISO image</a> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Burn the ISO image on a USB stick</a> - -<a class="btn btn-lg btn-default" href="/boot_and_graphical_install">2. Boot the machine and run the installation</a> - -<a class="btn btn-lg btn-default" href="/postinstall">3. Proceed with the initial configuration (post-installation)</a> - ---- - -To connect directly to your computer or with [SSH](/ssh) (only on local network: -* User: **root** -* Password: **yunohost** - diff --git a/install_iso_es.md b/install_iso_es.md deleted file mode 100644 index 51b5889d..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 - -<img src="/images/laptop.png" width=200> -<img src="/images/desktop.jpg"> -<img src="/images/nettop.jpg"> - -* 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 - -<a class="btn btn-lg btn-default" href="/images">0. Descargar la imagen ISO</a> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Copiar la imagen ISO</a> - -<a class="btn btn-lg btn-default" href="/boot_and_graphical_install">2. Encender e instalar</a> - -<a class="btn btn-lg btn-default" href="/postinstall">3. Post-instalación</a> - ---- - -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 85bddef8..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 - -<img src="/images/laptop.png" width=200> -<img src="/images/desktop.jpg"> -<img src="/images/nettop.jpg"> - -* 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’1Go **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 - -<a class="btn btn-lg btn-default" href="/images">0. Télécharger l'image ISO de YunoHost</a> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Flasher l’image ISO sur une clef USB</a> - -<a class="btn btn-lg btn-default" href="/boot_and_graphical_install">2. Démarrer la machine et installer YunoHost</a> - -<a class="btn btn-lg btn-default" href="/postinstall">3. Effectuer la configuration initiale (post-installation)</a> - ---- - -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 b16d068e..00000000 --- a/install_iso_it.md +++ /dev/null @@ -1,37 +0,0 @@ -# Installazione in un computer - -*Altri modi per installare YunoHost **[Clicca qui](/install)**.* - -### Requisiti - -<img src="/images/laptop.png" width=200> -<img src="/images/desktop.jpg"> -<img src="/images/nettop.jpg"> - -* Un computer con architettura x86: laptop, nettop, netbook, desktop. -Puoi usare qualsiasi computer con minimo 256mb 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 1gb **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 - - -<a class="btn btn-lg btn-default" href="/images">0. Scarica l'ISO di YunoHost</a> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Scrivi l'immagine disco su una chiavetta usb</a> - -<a class="btn btn-lg btn-default" href="/boot_and_graphical_install">2. Accendi il computer facendo il boot da usb</a> - -<a class="btn btn-lg btn-default" href="/postinstall">3. Procedi con la prima configurazione (post-installation)</a> - ---- - -To connect directly to your computer or with [SSH](/ssh) (only on local network: -* User: **root** -* Password: **yunohost** - - diff --git a/install_it.md b/install_it.md deleted file mode 100644 index 8fa8f550..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. - ---- - -<h1 style="font-weight: 100">Provalo</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/try"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>Server demo</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_virtualbox"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>Provalo in VirtualBox</p></b></a> -</div> - -</div> - - - - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Installalo a casa</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_raspberry"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>Su un Raspberry Pi</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_on_arm_board"><img src="/images/olinuxino.jpg" height=150 style="vertical-align:bottom; padding:20px"><b><p>Su una scheda ARM</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/install_iso"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>Su un computer normale</p></b></a> -</div> - -</div> - -<br> - - ---- - -<h1 style="font-weight: 100">Installalo su un server remoto</h1> - -<div class="alert alert-info" markdown="1"> -<span class="glyphicon glyphicon-heart"></span> 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. -</div> - -<div class="row"> - -<div class="block-center text-center"> -<a href="/install_on_vps"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p>Su un server dedicato o un server privato virtuale (VPS)</p></b></a> -</div> - -</div> - -<br> - ---- - -<h1 style="font-weight: 100">Avanzate / altri</h1> - -<div class="row"> - -<div class="col col-md-3 text-center"> -<a href="/install_on_debian"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> -<b><p>Su Debian 9/Stretch</p></b></a> -</div> - -<div class="col col-md-3 text-center"> -<a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Dev environment in LXD/LXC</p></b></a> -</div> - -</div> - -<br> diff --git a/install_manually.md b/install_manually.md deleted file mode 100644 index 41faa392..00000000 --- a/install_manually.md +++ /dev/null @@ -1,18 +0,0 @@ -# Installing YunoHost manually - -Once you have **Debian 9** <small>(with **kernel >= 3.12**)</small> and 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 -``` - -<small>*(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`)*</small> - -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_es.md b/install_manually_es.md deleted file mode 100644 index 8f273361..00000000 --- a/install_manually_es.md +++ /dev/null @@ -1,18 +0,0 @@ -# Instalar YunoHost manualmente - -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 -``` - -<small>*(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`)*</small> - -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 811372e5..00000000 --- a/install_manually_fr.md +++ /dev/null @@ -1,18 +0,0 @@ -# Installer YunoHost manuellement - -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 -``` - -<small>*(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`)*</small> - -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 26c550c2..00000000 --- a/install_on_arm_board.md +++ /dev/null @@ -1,52 +0,0 @@ -# Install YunoHost on ARM board - -*Find other ways to install YunoHost **[here](/install)**.* - -<center> -<img src="/images/olinuxino.jpg" width=250 style="padding-bottom:20px"> -<img src="/images/micro-sd-card.jpg"> -</center> - -<div class="alert alert-info" markdown="1"> -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. -</div> - -<div class="alert alert-warning" markdown="1"> -YunoHost doesn't yet support ARM64 boards. For more information, see [this issue](https://github.com/YunoHost/issues/issues/438). -</div> - -## Pre-requisites - -- An ARM board with 500MHz CPU and 512MB 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) - -<a class="btn btn-lg btn-default" href="/images">0. Download the pre-installed image for your board</a><br><small>If no pre-installed image exists for your board, you can follow the instructions to "Install on top of ARMbian"</small> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Flash the SD card with the image</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Power up the board and let it boot</a> - -<a class="btn btn-lg btn-default" href="/ssh">3. Connect to your server with SSH</a> - -<a class="btn btn-lg btn-default" href="/postinstall">4. Proceed with the initial configuration (post-installation)</a> - ---- - -## Install on top of ARMbian - -<a class="btn btn-lg btn-default" href="https://www.armbian.com/download/">0. Download the ARMbian image for your board</a> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Flash the SD card with the image</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Plug & boot</a> - -<a class="btn btn-lg btn-default" href="/ssh">3. Connect to your server with SSH</a> - -<a class="btn btn-lg btn-default" href="/install_manually">4. Follow the generic install procedure</a> diff --git a/install_on_arm_board_es.md b/install_on_arm_board_es.md deleted file mode 100644 index 6f6d636f..00000000 --- a/install_on_arm_board_es.md +++ /dev/null @@ -1,51 +0,0 @@ -# Instalar Yunohost en una tarjeta ARM - -*Encontrar otros medios de instalar Yunohost **[aquí](/install)**.* - -<center> -<img src="/images/olinuxino.jpg" width=250 style="padding-bottom:20px"> -<img src="/images/micro-sd-card.jpg"> -</center> - -<div class="alert alert-info" markdown="1"> -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. -</div> - -<div class="alert alert-warning" markdown="1"> -YunoHost todavía no es compatible con las tarjetas ARM64. Para obtener más informaciones, ver [este ticket](https://github.com/YunoHost/issues/issues/438). -</div> - -- 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) - -<a class="btn btn-lg btn-default" href="/images">0. Descargar la imagen pre-instalada para tu tarjeta ARM</a><br><small>Si no existe una imagen dedicada a tu tarjeta, puedes seguir la sección "Instalación encima de ARMbian".</small> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Poner la imagen en tu tarjeta SD</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Conectar y encender</a> - -<a class="btn btn-lg btn-default" href="/ssh">3. Conectarse en SSH</a> - -<a class="btn btn-lg btn-default" href="/postinstall">4. Proceder a la post-instalación</a> - ---- - -## Instalación encima de ARMbian - -<a class="btn btn-lg btn-default" href="https://www.armbian.com/download/">0. Descargar la imagen ARMbian para tu tarjeta ARM</a> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Poner la imagen en tu tarjeta SD</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Conectar y encender</a> - -<a class="btn btn-lg btn-default" href="/ssh">3. Conectarse en SSH</a> - -<a class="btn btn-lg btn-default" href="/install_manually">4. Proceder a la post-instalación genérica</a> - diff --git a/install_on_arm_board_fr.md b/install_on_arm_board_fr.md deleted file mode 100644 index d373ee28..00000000 --- a/install_on_arm_board_fr.md +++ /dev/null @@ -1,51 +0,0 @@ -# Installer YunoHost sur carte ARM - -*Toutes les autres façons d’installer YunoHost sont listées **[ici](/install)**.* - -<center> -<img src="/images/olinuxino.jpg" width=250 style="padding-bottom:20px"> -<img src="/images/micro-sd-card.jpg"> -</center> - -<div class="alert alert-info" markdown="1"> -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. -</div> - -<div class="alert alert-warning" markdown="1"> -YunoHost ne supporte pour le moment pas les cartes ARM64. Pour plus d'informations, voir [ce ticket](https://github.com/YunoHost/issues/issues/438). -</div> - -- 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) - -<a class="btn btn-lg btn-default" href="/images">0. Télécharger l'image pré-installée pour votre carte ARM</a><br><small>Si il n'existe pas d'image pré-installée pour votre carte, vous pouvez suivre la section "Installation par dessus ARMbian".</small> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Flasher la carte SD avec l'image</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Brancher la carte et la laisser démarrer</a> - -<a class="btn btn-lg btn-default" href="/ssh">3. Se connecter en SSH sur le serveur</a> - -<a class="btn btn-lg btn-default" href="/postinstall">4. Effectuer la configuration initiale (post-installation)</a> - ---- - -## Installation par dessus ARMbian - -<a class="btn btn-lg btn-default" href="https://www.armbian.com/download/">0. Télécharger l'image ARMbian pour votre carte ARM</a> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Flasher la carte SD avec l'image</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Brancher & démarrer</a> - -<a class="btn btn-lg btn-default" href="/ssh">3. Se connecter en SSH</a> - -<a class="btn btn-lg btn-default" href="/install_manually">4. Suivre la procédure d'installation générique</a> - diff --git a/install_on_debian.md b/install_on_debian.md deleted file mode 100644 index 45e1016c..00000000 --- a/install_on_debian.md +++ /dev/null @@ -1,24 +0,0 @@ -# Installation on Debian - -*Find other ways to install YunoHost **[here](/install)**.* - -### Requirements - -<img width=100 src="/images/debian-logo.png"> - -An ARM box, a VPS, a dedicated server, a standard x86 computer, an old Macintosh, ... - -* with **Debian 9** (Stretch) installed <small>(with kernel >= 3.12)</small> - * the Debian 9 ISO can be downloaded from [here](https://www.debian.org/releases/stretch/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 - -<a class="btn btn-lg btn-default" href="/install_manually">1. Install manually</a> - -<a class="btn btn-lg btn-default" href="/postinstall">2. Post-install</a> - 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 @@ -<div dir="RTL" align="right" style="direction:rtl;text-align:right;"> -# التنصيب على ديبيان - -*يمكنكم الإطلاع على طُرق أخرى لتنصيب واي يونوهوست YunoHost **[هنا](/install)**.* - -## المتطلبات - -<img width=100 src="/images/debian-logo.png"> - -على منصة ARM أو على خادوم إفتراضي خاص أو على خادوم إستضافة أو على حاسوب x86 عادي أو على حاسوب ماكينطوش قديم … إلخ - -* على **ديبيان 8** (جيسي) قد تم تنصيبه مِن قبل -* مُتصل بالإنترنت عبر كابل إيثرنت -* مباشرة عبر **النفاذ بالمستخدم الجذري root** أو عبر الـ SSH - ---- - -## خطوات التنصيب - -<a class="btn btn-lg btn-default" href="/install_manually">1. التنصيب يدويًا</a> - -<a class="btn btn-lg btn-default" href="/postinstall">2. ما بعد التنصيب</a> - diff --git a/install_on_debian_fr.md b/install_on_debian_fr.md deleted file mode 100644 index eaa21951..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 - -<img width=100 src="/images/debian-logo.png"> - -Sur une plateforme ARM, un VPS, un serveur dédié, un ordinateur x86 standard, un vieux Macintosh,... - -* avec **Debian 9** (Stretch) installé <small>(avec un kernel >= 3.12)</small> - * l'ISO Debian 9 ISO peut être téléchargée depuis [cette page](https://www.debian.org/releases/stretch/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 - -<a class="btn btn-lg btn-default" href="/install_manually">1. Installer manuellement</a> - -<a class="btn btn-lg btn-default" href="/postinstall">2. Post-installation</a> - diff --git a/install_on_debian_it.md b/install_on_debian_it.md deleted file mode 100644 index e306592d..00000000 --- a/install_on_debian_it.md +++ /dev/null @@ -1,23 +0,0 @@ -# Installazione su Debian - -*Altri sistemi per installare Debian **[qui](/install)**.* - -### Requisiti - -<img width=100 src="/images/debian-logo.png"> - -Su un computer ARM, un VPS, un server dedicato, un computer x86 standard, un vecchio Macintosh, ... - -* con **Debian 9** (Stretch) installato <small>(con un kernel >= 3.12)</small> - * l'immagine ISO di Debian 9 può essere scaricata da [qui](https://www.debian.org/releases/stretch/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 - -<a class="btn btn-lg btn-default" href="/install_manually">1. Installazione manuale</a> - -<a class="btn btn-lg btn-default" href="/postinstall">2. Post-installazione</a> \ No newline at end of file diff --git a/install_on_raspberry.md b/install_on_raspberry.md deleted file mode 100644 index ceef5c12..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)**.* - -<center> -<img src="/images/raspberrypi.jpg" width=300 style="padding-bottom:20px"> -<img src="/images/micro-sd-card.jpg"> -</center> - -<div class="alert alert-info" markdown="1"> -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. -</div> - -## Pre-requisites - -- A Raspberry Pi 0, 1, 2 or 3 (does not currently work on RPI 4); -- 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) - -<a class="btn btn-lg btn-default" href="/images">0. Download the pre-installed image for Raspberry Pi</a> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Flash the SD card with the image</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Power up the board and let it boot</a> - -<a class="btn btn-lg btn-default" href="/ssh">3. Connect to your server with your web browser</a> - -<a class="btn btn-lg btn-default" href="/postinstall">4. Proceed with the initial configuration (post-installation)</a> - ---- - -## Manual installation (advanced users) - -<div class="alert alert-warning" markdown="1"> -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. -</div> - -<div class="alert alert-warning" markdown="1"> -The latest Rasbpian 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). -</div> - -0. Install Raspbian Stretch Lite on the SD card ([instructions](https://www.raspberrypi.org/downloads/raspbian/)). The Raspbian Stretch Lite can be found here: https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2019-04-09/ - -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 <a href="/install_manually">generic manual install procedure</a>. - diff --git a/install_on_raspberry_de.md b/install_on_raspberry_de.md deleted file mode 100644 index c57f34de..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)**.* - -<center> -<img src="/images/raspberrypi.jpg" width=300 style="padding-bottom:20px"> -<img src="/images/micro-sd-card.jpg"> -</center> - -<div class="alert alert-info" markdown="1"> -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. -</div> - -## Voraussetzungen - -- Einen Raspberry Pi 0, 1, 2 oder 3 ; -- Eine microSD Karte: **8GB** 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) - -<a class="btn btn-lg btn-default" href="/images">0. Download the pre-installed image for Raspberry Pi</a> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Flash the SD card with the image</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Plug & boot</a> - -<a class="btn btn-lg btn-default" href="/ssh">3. Connect to your server with SSH</a> - -<a class="btn btn-lg btn-default" href="/postinstall">4. Proceed to post-installation</a> - ---- - -## Manual installation (advanced users) - -<div class="alert alert-warning" markdown="1"> -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. -</div> - -<div class="alert alert-warning" markdown="1"> -The latest Rasbpian 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). -</div> - -0. Install Raspbian Stretch Lite on the SD card ([instructions](https://www.raspberrypi.org/downloads/raspbian/)). - -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 <a href="/install_manually">generic manual install procedure</a>. - diff --git a/install_on_raspberry_es.md b/install_on_raspberry_es.md deleted file mode 100644 index 9ab592f8..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)**.* - -<center> -<img src="/images/raspberrypi.jpg" width=300 style="padding-bottom:20px"> -<img src="/images/micro-sd-card.jpg"> -</center> - -<div class="alert alert-info" markdown="1"> -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. -</div> - -## Prerrequisitos - -- Un Raspberry Pi 0, 1, 2, 3 o 4 ; -- 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) - -<a class="btn btn-lg btn-default" href="/images">1. Descargar la imagen para Raspberry Pi</a> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">2. Poner la imagen en tu tarjeta SD</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">3. Conectar y encender</a> - -<a class="btn btn-lg btn-default" href="/ssh">4. Conectarse en SSH</a> - -<a class="btn btn-lg btn-default" href="/postinstall">5. Proceder a la post-instalación</a> - ---- - -## Instalación manual (desaconsejada) - -<div class="alert alert-warning" markdown="1"> -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. -</div> - -<div class="alert alert-warning" markdown="1"> -Las últimas versiones de Raspbian 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. -</div> - -0. Instalar Raspbian Stretch Lite ([instrucciones](https://www.raspberrypi.org/downloads/raspbian/)) 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 <a href="/install_manually">procedimiento de instalación manual genérico</a>. - diff --git a/install_on_raspberry_fr.md b/install_on_raspberry_fr.md deleted file mode 100644 index 8ddbd031..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)**.* - -<center> -<img src="/images/raspberrypi.jpg" width=300 style="padding-bottom:20px"> -<img src="/images/micro-sd-card.jpg"> -</center> - -<div class="alert alert-info" markdown="1"> -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. -</div> - -## Prérequis - -- Un Raspberry Pi 0, 1, 2 ou 3 ; -- 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) - -<a class="btn btn-lg btn-default" href="/images">1. Télécharger l'image pour Raspberry Pi</a> - -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">2. Flasher la carte SD avec l'image</a> - -<a class="btn btn-lg btn-default" href="/plug_and_boot">3. Brancher la carte et la laisser démarrer</a> - -<a class="btn btn-lg btn-default" href="/ssh">4. Se connecter en SSH sur le serveur</a> - -<a class="btn btn-lg btn-default" href="/postinstall">5. Effectuer la configuration initiale (post-installation)</a> - ---- - -## Installation manuelle (déconseillée) - -<div class="alert alert-warning" markdown="1"> -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. -</div> - -<div class="alert alert-warning" markdown="1"> -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. -</div> - -0. Installez Raspbian Stretch Lite ([instructions](https://www.raspberrypi.org/downloads/raspbian/)) sur la carte SD. -Le lien vers la Raspbian Stretch Lite est ici: https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2019-04-09/ - -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 <a href="/install_manually">procédure d'installation manuelle générique</a>. - diff --git a/install_on_virtualbox.md b/install_on_virtualbox.md deleted file mode 100644 index 3d693ba7..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 - -<img src="/images/virtualbox.png" width=200> - -* 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). - -<div class="alert alert-warning" markdown="1"> -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. -</div> - ---- - -## <small>1.</small> Create a new virtual machine - -<img src="/images/virtualbox_1.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* 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. - ---- - -## <small>2.</small> Change network settings - -**NB:** You must carry out this step. If not, the install will fail. - -Go to **Settings** > **Network**: - -<img src="/images/virtualbox_2.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* Select `Bridged adapter` - -* Select your interface's name: - - **wlan0** if you are connected wirelessly, else **eth0**. - ---- - -## <small>3.</small> Boot up the virtual machine - -Start the virtual machine - -<img src="/images/virtualbox_2.1.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -You will have to select your ISO image here, then you should see the YunoHost's boot screen. - -<br> - -If you encounter the error "VT-x is not available", you need probably need to enable Virtualization in the BIOS of your computer. - -<br> - -<img src="/images/virtualbox_3.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* Select `Graphical install` - -* Select your language, your location, your keyboard layout and let the installer do the rest :-) - ---- - -## <small>4.</small> Proceed to post-installation - -After the reboot, the system should ask you to proceed with the -post-installation - -<a class="btn btn-lg btn-default" href="/postinstall">Post-install documentation</a> - - - diff --git a/install_on_virtualbox_es.md b/install_on_virtualbox_es.md deleted file mode 100644 index 9a6260d6..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 - -<img src="/images/virtualbox.png" width=200> - -* 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). - -<div class="alert alert-warning" markdown="1"> -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. -</div> - ---- - -## <small>1.</small> Crear una nueva máquina virtual - -<img src="/images/virtualbox_1.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* 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. - ---- - -## <small>2.</small> Modificar la configuración de la red - -Ir a **Settings** > **Network** : - -<img src="/images/virtualbox_2.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* Selectiona `Bridged adapter` - -* Elige tu interfaz según su nombre : - - **wlan0** si estás conectado sin hilo, **eth0** de otro modo. - ---- - -## <small>3.</small> Inicia tu máquina virtual - -Inicia tu máquina virtual - -<img src="/images/virtualbox_2.1.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -Aquí tienes que seleccionar la imagen ISO, luego deberías ver esta pantalla de bienvenida. - -<br> - -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. - -<br> - -<img src="/images/virtualbox_3.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* Elige `Instalación gráfica` - -* Selecciona tu idioma, tu ubicación, la distribución de tu teclado y deja el ordenador terminar el proceso :-) - ---- - -## <small>4.</small> Efectuar la post-instalación - -Después del reinicio, la máquina debería proponerte de efectuar la post-instalación : - -<a class="btn btn-lg btn-default" href="/postinstall">Documentación de post-instalación</a> diff --git a/install_on_virtualbox_fr.md b/install_on_virtualbox_fr.md deleted file mode 100644 index d99807af..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 - -<img src="/images/virtualbox.png" width=200> - -* 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). - -<div class="alert alert-warning" markdown="1"> -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. -</div> - ---- - -## <small>1.</small> Créer une nouvelle machine virtuelle - -<img src="/images/virtualbox_1.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* 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. - ---- - -## <small>2.</small> Modifier la configuration réseau - -Allez dans **Réglages** > **Réseau** : - -<img src="/images/virtualbox_2.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* Sélectionnez `Accès par pont` - -* Choisissez votre interface selon son nom : - - **wlan0** si vous êtes connecté sans-fil, **eth0** sinon. - ---- - -## <small>3.</small> Lancer votre machine virtuelle - -Démarrez votre machine virtuelle - -<img src="/images/virtualbox_2.1.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -Vous devez sélectionner ici l’image ISO, puis vous devriez voir cet écran d’accueil YunoHost. - -<br> - -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. - -<br> - -<img src="/images/virtualbox_3.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* Choisissez `Installation graphique` - -* Sélectionnez votre langue, votre emplacement, la disposition de votre clavier et laissez l’installeur faire le reste :-) - ---- - -## <small>4.</small> Effectuer la post-installation - -Après le redémarrage, la machine devrait vous proposer d'effectuer la -post-installation : - -<a class="btn btn-lg btn-default" href="/postinstall">Post-install -documentation</a> diff --git a/install_on_vps.md b/install_on_vps.md deleted file mode 100644 index bf44dae6..00000000 --- a/install_on_vps.md +++ /dev/null @@ -1,21 +0,0 @@ -# Install on a dedicated server - -*Find other ways to install YunoHost **[here](/install)**.* - -### Pre-requisite - -<img src="/images/vps.png" width=250> - -* A dedicated or virtual private server -* with at least **512MB** RAM -* and **Debian 9.x (Stretch) 64bits** as operating system - ---- - -## Installation steps - -<a class="btn btn-lg btn-default" href="/install_manually">1. Install manually</a> - -<a class="btn btn-lg btn-default" href="/postinstall">2. Proceed with the initial configuration (post-installation)</a> - - diff --git a/install_on_vps_es.md b/install_on_vps_es.md deleted file mode 100644 index f6eb2eb7..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 - -<img src="/images/vps.png" width=250> - -* Un servidor dedicado o virtual -* con al menos **512MB** RAM -* y **Debian 9.x (Stretch) 64bits** como sistema operativo - ---- - -## Etapas de instalación - -<a class="btn btn-lg btn-default" href="/install_manually">1. Instalar manualmente</a> - -<a class="btn btn-lg btn-default" href="/postinstall">2. Post-instalación</a> - diff --git a/install_on_vps_fr.md b/install_on_vps_fr.md deleted file mode 100644 index a0924cb8..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 - -<img src="/images/vps.png" width=250> - -* Un serveur dédié ou virtuel -* avec au moins **512MB** RAM -* et **Debian 9.x (Stretch) 64bits** comme système d'exploitation - ---- - -## Étapes d’installation - -<a class="btn btn-lg btn-default" href="/install_manually">1. Installer manuellement</a> - -<a class="btn btn-lg btn-default" href="/postinstall">2. Effectuer la configuration initiale (post-installation)</a> diff --git a/install_on_vps_it.md b/install_on_vps_it.md deleted file mode 100644 index b10d9344..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 - -<img src="/images/vps.png" width=250> - -* Un server dedicato o un server privato virtuale (VPS) -* con almeno **512MB** di RAM -* e **Debian 9.x (Stretch) 64bits** come sistema operativo - ---- - -## Procedura di installazione - -<a class="btn btn-lg btn-default" href="/install_manually">1. Installa manualmente</a> - -<a class="btn btn-lg btn-default" href="/postinstall">2. Post-installazione</a> - diff --git a/isp.md b/isp.md deleted file mode 100644 index dac32340..00000000 --- a/isp.md +++ /dev/null @@ -1,61 +0,0 @@ -# Internet service providers - -<a class="btn btn-lg btn-default" href="/isp_box_config"> Main configuration box</a> - -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). - -### 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| - | - | 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 - -<a class="btn btn-lg btn-default" href="/isp_box_config"> Configuración general del router</a> - -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<br>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)**<br> (cerrado por defecto) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ | -| **[Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ | -| **[Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup)<br>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 52d623ec..00000000 --- a/isp_fr.md +++ /dev/null @@ -1,45 +0,0 @@ -# Fournisseurs d’accès à Internet - -<a class="btn btn-lg btn-default" href="/isp_box_config"> Configuration générale box</a> - -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<br>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)**<br> (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)<br>personnalisable ** | ✔ | ✔ (sauf IPv6, pas de support, et buggué sur certaines plages d'adresses ipv4) | … | ✘ | ✘ | ✘ | -| **[IP fixe](/dns_dynamicip)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ | -| **[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 87a29d12..00000000 --- a/isp_orange.md +++ /dev/null @@ -1,85 +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 43c311fb..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. - -<img src="/images/sfr-authentification.png" width=900> - -#### Courrier électronique -Pour pouvoir envoyer des mails, il faut désactiver le filtrage. - -<img src="/images/sfr-filtrage.png" width=600> - -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/default_es.md b/orphaned/default.es.md similarity index 97% rename from default_es.md rename to orphaned/default.es.md index 6b8c21f5..41876311 100644 --- a/default_es.md +++ b/orphaned/default.es.md @@ -1,4 +1,4 @@ -#Nueva página +# Nueva página Esta página todavía no existe, puedes editarla tecleando ```<Escap>``` en tu teclado, o clicando en el botón "Editar" abajo a la derecha de tu pantalla. Puedes echar un vistazo a los cambios que has efectuado empujando de nuevo la tecla ```<Escap>``` o clicando en el botón "Vistazo". diff --git a/default_fr.md b/orphaned/default.fr.md similarity index 97% rename from default_fr.md rename to orphaned/default.fr.md index 75c46aa3..270beabe 100644 --- a/default_fr.md +++ b/orphaned/default.fr.md @@ -1,4 +1,4 @@ -#Nouvelle page +# Nouvelle page Cette page n’existe pas encore, vous pouvez l’éditer en appuyant sur la touche ```<Échap>``` de votre clavier, ou en cliquant sur le bouton "Éditer" en bas à droite de votre écran. Vous pourrez avoir un aperçu de vos changements en appuyant à nouveau sur la touche ```<Échap>``` ou en cliquant sur le bouton "Aperçu". diff --git a/default_it.md b/orphaned/default.it.md similarity index 94% rename from default_it.md rename to orphaned/default.it.md index f0edf6d7..89f495de 100644 --- a/default_it.md +++ b/orphaned/default.it.md @@ -1,10 +1,10 @@ -#Nuova Pagina +# Nuova Pagina Questa pagina non è ancora stata creata, puoi modificarla premendo ```<ESC>``` sulla tua tastiera o cliccando il pulsante "Modifica" in basso a destra del tuo schermo. Potrai vedere l'anteprima delle tue modifiche premendo ancora ```<ESC>``` o cliccando il pulsante "Anteprima". ** Nota: ** Devi fornire un indirizzo email per confermare le tue modifiche. -###Sintassi +### Sintassi Questa pagina usa la sintassi markdown, per favore fai riferimento alla documentazione per ulteriori informazioni: diff --git a/default.md b/orphaned/default.md similarity index 95% rename from default.md rename to orphaned/default.md index 8dc832a9..08ee4d98 100644 --- a/default.md +++ b/orphaned/default.md @@ -1,10 +1,10 @@ -#New page +# New page This page is not created yet, you can edit it 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. ** Note: ** You will need to provide an email address to validate your submission. -###Syntax +### Syntax This page use the markdown syntax, please refer to the documentation for further informations: diff --git a/dns_es.md b/orphaned/dns.es.md similarity index 89% rename from dns_es.md rename to orphaned/dns.es.md index 6507c7c6..b4a5f53b 100644 --- a/dns_es.md +++ b/orphaned/dns.es.md @@ -2,7 +2,7 @@ La configuración de los DNS es una etapa crucial para que tu servidor esté accesible. En efecto, si tus DNS están mal configurados, con mucha certeza tendrás problemas de conexión a tu servidor vía tu nombre de dominio. -*Aunque esta etapa de documentación parezca larga y compleja, sigue siendo muy importante si quieres entender correctamente las implicaciones de la denominación en Internet vía los nombres de dominio, que son necesarios para el funcionamiento de tu servidor Yunohost.* +*Aunque esta etapa de documentación parezca larga y compleja, sigue siendo muy importante si quieres entender correctamente las implicaciones de la denominación en Internet vía los nombres de dominio, que son necesarios para el funcionamiento de tu servidor YunoHost.* ### ¿ Qué es ? @@ -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 5 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. @@ -33,5 +33,5 @@ También puedes consultar las documentaciones específicas a estas varias [ofici **Atención** : Si eliges este modo de funcionamiento, tendrás más flexibilidad, pero nada será automático. Por ejemplo si quieres utilizar `webmail.mi-servidor.org`, tendrás que añadirlo manualmente en la interfaz de tu registrar. -3. (Advanced, not 100% supported, do this only if you know what you're doing) Tu instancia tiene un servicio DNS, lo que quiere decir que configura automáticamente sus registros DNS y que es posible delegarle la administración de estos registros. Por eso, tienes que indicar al **registrar** que es tu instancia Yunohost que es el servidor DNS de tu nombre de dominio creando un registro glue (a menudo denominado **glue record**) apuntando hacia la IP de tu instancia Yunohost. +3. (Advanced, not 100% supported, do this only if you know what you're doing) Tu instancia tiene un servicio DNS, lo que quiere decir que configura automáticamente sus registros DNS y que es posible delegarle la administración de estos registros. Por eso, tienes que indicar al **registrar** que es tu instancia YunoHost que es el servidor DNS de tu nombre de dominio creando un registro glue (a menudo denominado **glue record**) apuntando hacia la IP de tu instancia YunoHost. <br><br>**Atención** : Si eliges este modo de funcionamiento, todas las configuraciones serán automatizadas, tendrás mucha flexibilidad pero la pérdida de tu servidor potencialmente traerá muchos problemas. **Elige este método si estás muy seguro de los que estás haciendo.** diff --git a/dns_fr.md b/orphaned/dns.fr.md similarity index 91% rename from dns_fr.md rename to orphaned/dns.fr.md index c09bb923..444ceadf 100644 --- a/dns_fr.md +++ b/orphaned/dns.fr.md @@ -6,14 +6,15 @@ La configuration des DNS est une étape cruciale pour que votre serveur soit acc ### Qu’est-ce que c’est ? -**N’hésitez pas à regarder la très bonne conférence de Stéphane Bortzmeyer : -http://www.iletaitunefoisinternet.fr/dns-bortzmeyer/** +**N’hésitez pas à regarder la très bonne conférence de Stéphane Bortzmeyer :** + +https://www.iletaitunefoisinternet.fr/post/1-dns-bortzmeyer/ DNS signifie « Domain Name Server » en anglais, et est souvent employé pour désigner la configuration de vos noms de domaine. Vos noms de domaines doivent en effet pointer vers quelque chose (en général une adresse IP). **Par exemple** : `yunohost.org` renvoie vers `88.191.153.110`. -Ce système a été créé pour pouvoir retenir plus facilement les adresses de serveur. Il existe donc des registres DNS dans lesquels il faut s’inscrire. Ceci peut être fait auprès de **registrars** qui vous feront louer ces noms de domaine contre une certaine somme (entre 5 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. @@ -37,4 +38,3 @@ Vous pouvez également consulter les documentations spécifiques à ces différe 3. (Avancé, pas 100% supporté...) Votre instance YunoHost possède un service DNS, ce qui veut dire qu’il configure automatiquement ses enregistrements DNS, et qu’il est possible de lui en déléguer la gestion. Pour ce faire, vous devez indiquer au **registrar** que c’est votre instance YunoHost qui est le serveur DNS de votre nom de domaine en créant un enregistrement glue (souvent appelé **glue record**) pointant vers l’IP de votre instance YunoHost. <br><br>**Attention** : Si vous choisissez ce mode de fonctionnement, toutes les configurations seront automatiques, vous disposerez d’une grande flexibilité, mais la perte de votre serveur entraînera potentiellement beaucoup d’ennuis. **Choisissez cette méthode seulement si vous êtes à l'aise et comprenez les conséquences** - diff --git a/dns.md b/orphaned/dns.md similarity index 83% rename from dns.md rename to orphaned/dns.md index 18b7f5d3..9666ec73 100644 --- a/dns.md +++ b/orphaned/dns.md @@ -2,7 +2,7 @@ DNS configuration is a crucial stage for rendering your server accessible to the wider Internet. If your DNS is poorly configured, you are liable to have a lot of problems in connecting to your server via your domain name. -*Even though this page appears long and complex, it is very important to understand the implications of Internet domain names, which are necessary for the proper function of your Yunohost server.* +*Even though this page appears long and complex, it is very important to understand the implications of Internet domain names, which are necessary for the proper function of your YunoHost server.* ### What is it? @@ -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. @@ -20,13 +20,13 @@ There are also different **types** of DNS records, which means that a domain can ### How to (properly) set up a DNS name? -You have several choices here. Note that you can mix and match solutions if you have multiple domains: for example, you can have `my-server.nohost.me` using solution **1.**, and `my-server.org` using solution **2.**, both leading to the same Yunohost server. +You have several choices here. Note that you can mix and match solutions if you have multiple domains: for example, you can have `my-server.nohost.me` using solution **1.**, and `my-server.org` using solution **2.**, both leading to the same YunoHost server. 1. You can use [YunoHost's DNS service](/dns_nohost_me), which will automatically configure your DNS for you. You must choose a domain that ends with `.nohost.me`, `.noho.st` or `.ynh.fr` for this, which may be inconvenient for you (you would then only be able to use an email address like `john@my-server.noho.st`). **This is the recommended option if you are just starting out with self-hosting.** -2. You can use the DNS service offered by your **registrar** (Gandi, NameCheap, BookMyName or others) to configure your domain name. Here is the [standard DNS configuration](/dns_config). The DNS service of your router can also be used, more info on [how to setup a local domain](dns_local_network). +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 81% rename from index_ar.md rename to orphaned/index.ar.md index ba1d79d0..af485420 100644 --- a/index_ar.md +++ b/orphaned/index.ar.md @@ -37,7 +37,7 @@ <div dir="auto" class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">تجريب</a> <a class="btn btn-success btn-lg" href="/install">تنصيب</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> + <h2 style="margin-top: 0"><small><a href="https://forum.yunohost.org/c/announcement">Latest news</a></small></h2> </div> <hr /> @@ -114,6 +114,29 @@ </div> + <hr /> + + <div class="row cf"> + <div class="text-center"> + <h1>They support us <3<br /> + <small>We are thankful for our sponsors <br/>providing us with infrastructure and grants!</small> + </h1> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://nlnet.nl"><img src="/images/logo_nlnet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.ngi.eu"><img src="/images/logo_ngi.png" width="130px"/></a> + <a style="padding: 5px;" href="https://www.codelutin.com"><img src="/images/logo_codelutin.png" width="100px"/></a> + </p> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://www.globenet.org"><img src="/images/logo_globenet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.gitoyen.net"><img src="/images/logo_gitoyen.png" width="150px"/></a> + <a style="padding: 5px;" href="https://tetaneutral.net"><img src="/images/logo_tetaneutral.png" width="90px"/></a> + <a style="padding: 5px;" href="https://ldn-fai.net"><img src="/images/logo_ldn.png" width="120px"/></a> + <a style="padding: 5px;" href="https://www.nbs-system.com"><img src="/images/logo_nbs.png" width="130px"/></a> + </p> + </div> + </div> + + </div><!-- boring-part --> <script type="text/javascript"> diff --git a/index_de.md b/orphaned/index.de.md similarity index 79% rename from index_de.md rename to orphaned/index.de.md index be0557bd..0fde591a 100644 --- a/index_de.md +++ b/orphaned/index.de.md @@ -22,7 +22,7 @@ </div> <div class="main-links hidden-xs"> - <a href="/whatsyunohost">Über Yunohost</a> <span class="colored-bar">•</span> + <a href="/whatsyunohost">Über YunoHost</a> <span class="colored-bar">•</span> <a href="https://forum.yunohost.org/c/announcement" target="_blank">Letzte Nachrichten</a> <span class="colored-bar">•</span> <a href="/docs">Dokumentation</a> <span class="colored-bar">•</span> <a href="https://donate.yunohost.org/">Spenden</a> @@ -41,7 +41,7 @@ Self-Hosting für alle ermöglicht.</small></h1> <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">Ausprobieren</a> <a class="btn btn-success btn-lg" href="/install">Loslegen</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> + <h2 style="margin-top: 0"><small><a href="https://forum.yunohost.org/c/announcement">Latest news</a></small></h2> </div> <div class="row cf"> @@ -88,7 +88,7 @@ Self-Hosting für alle ermöglicht.</small></h1> <div class="row cf"> <div class="col-md-4 button-list"> - <a class="btn btn-lg btn-block btn-primary" href="/whatsyunohost">Uber YunoHost</a> + <a class="btn btn-lg btn-block btn-primary" href="/whatsyunohost">Über YunoHost</a> <a class="btn btn-lg btn-block btn-info" href="/docs">Dokumentation</a> <a class="btn btn-lg btn-block btn-success" href="/contribute">Mach mit!</a> <a class="btn btn-lg btn-block btn-warning" href="https://forum.yunohost.org/" target="_blank">Forum</a> @@ -113,6 +113,29 @@ Self-Hosting für alle ermöglicht.</small></h1> </div> + <hr /> + + <div class="row cf"> + <div class="text-center"> + <h1>They support us <3<br /> + <small>We are thankful for our sponsors <br/>providing us with infrastructure and grants!</small> + </h1> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://nlnet.nl"><img src="/images/logo_nlnet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.ngi.eu"><img src="/images/logo_ngi.png" width="130px"/></a> + <a style="padding: 5px;" href="https://www.codelutin.com"><img src="/images/logo_codelutin.png" width="100px"/></a> + </p> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://www.globenet.org"><img src="/images/logo_globenet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.gitoyen.net"><img src="/images/logo_gitoyen.png" width="150px"/></a> + <a style="padding: 5px;" href="https://tetaneutral.net"><img src="/images/logo_tetaneutral.png" width="90px"/></a> + <a style="padding: 5px;" href="https://ldn-fai.net"><img src="/images/logo_ldn.png" width="120px"/></a> + <a style="padding: 5px;" href="https://www.nbs-system.com"><img src="/images/logo_nbs.png" width="130px"/></a> + </p> + </div> + </div> + + </div><!-- boring-part --> <script type="text/javascript"> diff --git a/index_es.md b/orphaned/index.es.md similarity index 80% rename from index_es.md rename to orphaned/index.es.md index a63a7942..3a29ed7b 100644 --- a/index_es.md +++ b/orphaned/index.es.md @@ -40,7 +40,7 @@ <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">Probar</a> <a class="btn btn-success btn-lg" href="/install">Instalar</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> + <h2 style="margin-top: 0"><small><a href="https://forum.yunohost.org/c/announcement">Latest news</a></small></h2> </div> <div class="row cf"> @@ -112,6 +112,29 @@ </div> + <hr /> + + <div class="row cf"> + <div class="text-center"> + <h1>They support us <3<br /> + <small>We are thankful for our sponsors <br/>providing us with infrastructure and grants!</small> + </h1> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://nlnet.nl"><img src="/images/logo_nlnet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.ngi.eu"><img src="/images/logo_ngi.png" width="130px"/></a> + <a style="padding: 5px;" href="https://www.codelutin.com"><img src="/images/logo_codelutin.png" width="100px"/></a> + </p> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://www.globenet.org"><img src="/images/logo_globenet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.gitoyen.net"><img src="/images/logo_gitoyen.png" width="150px"/></a> + <a style="padding: 5px;" href="https://tetaneutral.net"><img src="/images/logo_tetaneutral.png" width="90px"/></a> + <a style="padding: 5px;" href="https://ldn-fai.net"><img src="/images/logo_ldn.png" width="120px"/></a> + <a style="padding: 5px;" href="https://www.nbs-system.com"><img src="/images/logo_nbs.png" width="130px"/></a> + </p> + </div> + </div> + + </div><!-- boring-part --> <script type="text/javascript"> diff --git a/index_fr.md b/orphaned/index.fr.md similarity index 79% rename from index_fr.md rename to orphaned/index.fr.md index 67e8a1ff..54333a4d 100644 --- a/index_fr.md +++ b/orphaned/index.fr.md @@ -87,7 +87,7 @@ <div class="text-center"> <h1>Hey ! Nous sommes humains !<br /> <small>Si vous avez une question, un problème, ou que vous êtes tout simplement intéressé, passez dire « Bonjour » sur notre forum ou le chat!</small></h1> - + </div> <div class="col-md-4 col-md-offset-4 button-list"> <a class="btn btn-lg btn-block btn-info" href="/docs"><span class="glyphicon glyphicon-book"></span> Documentation</a> <a class="btn btn-lg btn-block btn-danger btn-support" href="/help"><span class="glyphicon glyphicon-comment"></span> Forum et chat</a> @@ -96,6 +96,29 @@ </div> </div> + <hr /> + + <div class="row cf"> + <div class="text-center"> + <h1>Nos soutiens <3<br /> + <small>Nous sommes reconnaissant envers nos mécènes <br/>qui nous soutiennent financièrement ou via des dons d'infrastructure</small> + </h1> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://nlnet.nl"><img src="/images/logo_nlnet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.ngi.eu"><img src="/images/logo_ngi.png" width="130px"/></a> + <a style="padding: 5px;" href="https://www.codelutin.com"><img src="/images/logo_codelutin.png" width="100px"/></a> + </p> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://www.globenet.org"><img src="/images/logo_globenet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.gitoyen.net"><img src="/images/logo_gitoyen.png" width="150px"/></a> + <a style="padding: 5px;" href="https://tetaneutral.net"><img src="/images/logo_tetaneutral.png" width="90px"/></a> + <a style="padding: 5px;" href="https://ldn-fai.net"><img src="/images/logo_ldn.png" width="120px"/></a> + <a style="padding: 5px;" href="https://www.nbs-system.com"><img src="/images/logo_nbs.png" width="130px"/></a> + </p> + </div> + </div> + + </div><!-- boring-part --> <script type="text/javascript"> diff --git a/index_it.md b/orphaned/index.it.md similarity index 80% rename from index_it.md rename to orphaned/index.it.md index 45d2019c..e0884761 100644 --- a/index_it.md +++ b/orphaned/index.it.md @@ -41,7 +41,7 @@ <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">Provalo</a> <a class="btn btn-success btn-lg" href="/install">Per cominciare</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> + <h2 style="margin-top: 0"><small><a href="https://forum.yunohost.org/c/announcement">Latest news</a></small></h2> </div> <div class="row cf"> @@ -113,6 +113,29 @@ </div> + <hr /> + + <div class="row cf"> + <div class="text-center"> + <h1>They support us <3<br /> + <small>We are thankful for our sponsors <br/>providing us with infrastructure and grants!</small> + </h1> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://nlnet.nl"><img src="/images/logo_nlnet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.ngi.eu"><img src="/images/logo_ngi.png" width="130px"/></a> + <a style="padding: 5px;" href="https://www.codelutin.com"><img src="/images/logo_codelutin.png" width="100px"/></a> + </p> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://www.globenet.org"><img src="/images/logo_globenet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.gitoyen.net"><img src="/images/logo_gitoyen.png" width="150px"/></a> + <a style="padding: 5px;" href="https://tetaneutral.net"><img src="/images/logo_tetaneutral.png" width="90px"/></a> + <a style="padding: 5px;" href="https://ldn-fai.net"><img src="/images/logo_ldn.png" width="120px"/></a> + <a style="padding: 5px;" href="https://www.nbs-system.com"><img src="/images/logo_nbs.png" width="130px"/></a> + </p> + </div> + </div> + + </div><!-- boring-part --> <script type="text/javascript"> diff --git a/index.md b/orphaned/index.md similarity index 78% rename from index.md rename to orphaned/index.md index 4e960d64..c18bd033 100644 --- a/index.md +++ b/orphaned/index.md @@ -16,6 +16,7 @@ <span class="yolo 8" style="color: #FF6600;">john@doe.org</span> <span class="yolo 9" style="color: #FF5050;">dude, Y U NO Host?!</span> <span class="yolo 10" style="color: #66FF33;">Keep calm and host yourself</span> + <span class="yolo 11" style="color: #3366FF;">Be the cloud you want to see in the world</span> </p> <button class="btn btn-primary btn-lg btn-block yolobtn">What?</button> </div> @@ -97,9 +98,32 @@ <a class="btn btn-lg btn-block btn-success" href="/contribute"><span class="glyphicon glyphicon-heart"></span> Get involved</a> <a class="btn btn-lg btn-block btn-primary" href="https://donate.yunohost.org/" style="background-color: #ffd236; border-color: #ffd236;"><span class="glyphicon glyphicon-usd"></span> Donate</a> </div> + </div> </div> -</div><!-- boring-part --> + <hr /> + + <div class="row cf"> + <div class="text-center"> + <h1>They support us <3<br /> + <small>We are thankful for our sponsors <br/>providing us with infrastructure and grants!</small> + </h1> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://nlnet.nl"><img src="/images/logo_nlnet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.ngi.eu"><img src="/images/logo_ngi.png" width="130px"/></a> + <a style="padding: 5px;" href="https://www.codelutin.com"><img src="/images/logo_codelutin.png" width="100px"/></a> + </p> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://www.globenet.org"><img src="/images/logo_globenet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.gitoyen.net"><img src="/images/logo_gitoyen.png" width="150px"/></a> + <a style="padding: 5px;" href="https://tetaneutral.net"><img src="/images/logo_tetaneutral.png" width="90px"/></a> + <a style="padding: 5px;" href="https://ldn-fai.net"><img src="/images/logo_ldn.png" width="120px"/></a> + <a style="padding: 5px;" href="https://www.nbs-system.com"><img src="/images/logo_nbs.png" width="130px"/></a> + </p> + </div> + </div> + +</div> <script type="text/javascript"> jQuery('.teasing-part').css({ diff --git a/index_oc.md b/orphaned/index.oc.md similarity index 79% rename from index_oc.md rename to orphaned/index.oc.md index 600c81c9..80c1c013 100644 --- a/index_oc.md +++ b/orphaned/index.oc.md @@ -35,7 +35,7 @@ <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">Ensajar</a> <a class="btn btn-success btn-lg" href="/install">Installar</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> + <h2 style="margin-top: 0"><small><a href="https://forum.yunohost.org/c/announcement">Latest news</a></small></h2> </div> <hr /> @@ -111,6 +111,29 @@ </div> + <hr /> + + <div class="row cf"> + <div class="text-center"> + <h1>They support us <3<br /> + <small>We are thankful for our sponsors <br/>providing us with infrastructure and grants!</small> + </h1> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://nlnet.nl"><img src="/images/logo_nlnet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.ngi.eu"><img src="/images/logo_ngi.png" width="130px"/></a> + <a style="padding: 5px;" href="https://www.codelutin.com"><img src="/images/logo_codelutin.png" width="100px"/></a> + </p> + <p style="margin-left:auto;margin-right:auto;"> + <a style="padding: 5px;" href="https://www.globenet.org"><img src="/images/logo_globenet.png" width="150px"/></a> + <a style="padding: 5px;" href="https://www.gitoyen.net"><img src="/images/logo_gitoyen.png" width="150px"/></a> + <a style="padding: 5px;" href="https://tetaneutral.net"><img src="/images/logo_tetaneutral.png" width="90px"/></a> + <a style="padding: 5px;" href="https://ldn-fai.net"><img src="/images/logo_ldn.png" width="120px"/></a> + <a style="padding: 5px;" href="https://www.nbs-system.com"><img src="/images/logo_nbs.png" width="130px"/></a> + </p> + </div> + </div> + + </div><!-- boring-part --> <script type="text/javascript"> 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 55% rename from registrar.md rename to orphaned/registrar.md index d17134b2..0fa657dc 100644 --- a/registrar.md +++ b/orphaned/registrar.md @@ -1,8 +1,8 @@ -#Registar +# Registar 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 78326fd0..00000000 --- a/packaging_apps_helpers.md +++ /dev/null @@ -1,5281 +0,0 @@ -<!-- NO_MARKDOWN_PARSING --> - -<h1>App helpers</h1> - -<p>Doc auto-generated by <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/doc/generate_helper_doc.py">this script</a> on 05/21/2020 (Yunohost version 3.8.4.3)</p> - - - -<h3 style="text-transform: uppercase; font-weight: bold">apt</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_is_installed" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_is_installed</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check either a package is installed or not</h6> - </div> - <div id="collapse-ynh_package_is_installed" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_package_is_installed --package=name</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-p</code>, <code>--package=</code> : the package name to check</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_package_is_installed --package=yunohost && echo "ok"</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/apt#L56">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_version" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_version</tt></h5> - <h6 class="helper-card-subtitle text-muted">Get the version of an installed package</h6> - </div> - <div id="collapse-ynh_package_version" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_package_version --package=name</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-p</code>, <code>--package=</code> : the package name to get version</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: the version or an empty string - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">version=$(ynh_package_version --package=yunohost)</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/apt#L78">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_update" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_update</tt></h5> - <h6 class="helper-card-subtitle text-muted">Update package index files</h6> - </div> - <div id="collapse-ynh_package_update" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_package_update</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/apt#L111">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_install" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_install</tt></h5> - <h6 class="helper-card-subtitle text-muted">Install package(s)</h6> - </div> - <div id="collapse-ynh_package_install" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_package_install name [name [...]]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>name</code> : the package name to install</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/apt#L121">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_remove" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_remove</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove package(s)</h6> - </div> - <div id="collapse-ynh_package_remove" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_package_remove name [name [...]]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>name</code> : the package name to remove</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/apt#L132">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_autoremove" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_autoremove</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove package(s) and their uneeded dependencies</h6> - </div> - <div id="collapse-ynh_package_autoremove" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_package_autoremove name [name [...]]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>name</code> : the package name to remove</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/apt#L142">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_autopurge" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_autopurge</tt></h5> - <h6 class="helper-card-subtitle text-muted">Purge package(s) and their uneeded dependencies</h6> - </div> - <div id="collapse-ynh_package_autopurge" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_package_autopurge name [name [...]]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>name</code> : the package name to autoremove and purge</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/apt#L152">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_install_app_dependencies" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_install_app_dependencies</tt></h5> - <h6 class="helper-card-subtitle text-muted">Define and install dependencies with a equivs control file</h6> - </div> - <div id="collapse-ynh_install_app_dependencies" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_install_app_dependencies dep [dep [...]]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>dep</code> : 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).</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - This helper can/should only be called once per app</br></br>example : ynh_install_app_dependencies dep1 dep2 "dep3|dep4|dep5"</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/apt#L242">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_add_app_dependencies" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_add_app_dependencies</tt></h5> - <h6 class="helper-card-subtitle text-muted">Add dependencies to install with ynh_install_app_dependencies</h6> - </div> - <div id="collapse-ynh_add_app_dependencies" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_add_app_dependencies --package=phpversion [--replace]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-p</code>, <code>--package=</code> : Packages to add as dependencies for the app.</li> - - - - <li><code>-r</code>, <code>--replace</code> : Replace dependencies instead of adding to existing ones.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.8.1 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/apt#L319">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_app_dependencies" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_app_dependencies</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove fake package and its dependencies</h6> - </div> - <div id="collapse-ynh_remove_app_dependencies" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_remove_app_dependencies</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Dependencies will removed only if no other package need them.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/apt#L351">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_install_extra_app_dependencies" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_install_extra_app_dependencies</tt></h5> - <h6 class="helper-card-subtitle text-muted">Install packages from an extra repository properly.</h6> - </div> - <div id="collapse-ynh_install_extra_app_dependencies" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_install_extra_app_dependencies --repo="repo" --package="dep1 dep2" [--key=key_url] [--name=name]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-r</code>, <code>--repo=</code> : Complete url of the extra repository.</li> - - - - <li><code>-p</code>, <code>--package=</code> : The packages to install from this extra repository</li> - - - - <li><code>-k</code>, <code>--key=</code> : url to get the public key.</li> - - - - <li><code>-n</code>, <code>--name=</code> : Name for the files for this repo, $app as default value.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.8.1 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/apt#L365">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">backup</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_backup" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_backup</tt></h5> - <h6 class="helper-card-subtitle text-muted">Add a file or a directory to the list of paths to backup</h6> - </div> - <div id="collapse-ynh_backup" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_backup --src_path=src_path [--dest_path=dest_path] [--is_big] [--not_mandatory]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-s</code>, <code>--src_path=</code> : file or directory to bind or symlink or copy. it shouldn't be in the backup dir.</li> - - - - <li><code>-d</code>, <code>--dest_path=</code> : destination file or directory inside the backup dir</li> - - - - <li><code>-b</code>, <code>--is_big</code> : Indicate data are big (mail, video, image ...)</li> - - - - <li><code>-m</code>, <code>--not_mandatory</code> : Indicate that if the file is missing, the backup can ignore it.</li> - - - - <li><code>arg</code> : Deprecated arg</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - This helper can be used both in a system backup hook, and in an app backup script</br></br>Details: ynh_backup writes SRC and the relative DEST into a CSV file. And it</br>creates the parent destination directory</br></br>If DEST is ended by a slash it complete this path with the basename of SRC.</br></br>Example in the context of a wordpress app</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"</br># => This line will be added into CSV file</br># "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/etc/nginx/conf.d/$domain.d/$app.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf/nginx.conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/nginx.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf/"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/$app.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf"</br></br>#Deprecated usages (maintained for retro-compatibility)</br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "${backup_dir}/conf/nginx.conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/nginx.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "/conf/"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/$app.conf"</br></br>Requires YunoHost version 2.4.0 or higher.</br>Requires YunoHost version 3.5.0 or higher for the argument --not_mandatory</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/backup#L45">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_restore" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_restore</tt></h5> - <h6 class="helper-card-subtitle text-muted">Restore all files that were previously backuped in a core backup script or app backup script</h6> - </div> - <div id="collapse-ynh_restore" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_restore</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/backup#L168">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_restore_file" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_restore_file</tt></h5> - <h6 class="helper-card-subtitle text-muted">Restore a file or a directory</h6> - </div> - <div id="collapse-ynh_restore_file" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_restore_file --origin_path=origin_path [--dest_path=dest_path] [--not_mandatory]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-o</code>, <code>--origin_path=</code> : 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</li> - - - - <li><code>-d</code>, <code>--dest_path=</code> : 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</li> - - - - <li><code>-m</code>, <code>--not_mandatory</code> : Indicate that if the file is missing, the restore process can ignore it.</li> - - - </ul> - </p> - - - - - <p> - <strong>Examples</strong>:<ul> - - - <code class="helper-code"> ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf"</code> - - <br> - - - You can also use relative paths: - - <br> - - - <code class="helper-code"> ynh_restore_file "conf/nginx.conf"</code> - - <br> - - </ul> - </p> - - - <p> - <strong>Details</strong>: - <p> - Use the registered path in backup_list by ynh_backup to restore the file at</br>the right place.</br></br>If DEST_PATH already exists and is lighter than 500 Mo, a backup will be made in</br>/home/yunohost.conf/backup/. Otherwise, the existing file is removed.</br></br>if apps/wordpress/etc/nginx/conf.d/$domain.d/$app.conf exists, restore it into</br>/etc/nginx/conf.d/$domain.d/$app.conf</br>if no, search for a match in the csv (eg: conf/nginx.conf) and restore it into</br>/etc/nginx/conf.d/$domain.d/$app.conf</br></br>Requires YunoHost version 2.6.4 or higher.</br>Requires YunoHost version 3.5.0 or higher for the argument --not_mandatory</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/backup#L229">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_store_file_checksum" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_store_file_checksum</tt></h5> - <h6 class="helper-card-subtitle text-muted">Calculate and store a file checksum into the app settings</h6> - </div> - <div id="collapse-ynh_store_file_checksum" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_store_file_checksum --file=file</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-f</code>, <code>--file=</code> : The file on which the checksum will performed, then stored.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - $app should be defined when calling this helper</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/backup#L307">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_backup_if_checksum_is_different" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_backup_if_checksum_is_different</tt></h5> - <h6 class="helper-card-subtitle text-muted">Verify the checksum and backup the file if it's different</h6> - </div> - <div id="collapse-ynh_backup_if_checksum_is_different" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_backup_if_checksum_is_different --file=file</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-f</code>, <code>--file=</code> : The file on which the checksum test will be perfomed.</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: the name of a backup file, or nothing - </p> - - - - - <p> - <strong>Details</strong>: - <p> - This helper is primarily meant to allow to easily backup personalised/manually</br>modified config files.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/backup#L339">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_delete_file_checksum" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_delete_file_checksum</tt></h5> - <h6 class="helper-card-subtitle text-muted">Delete a file checksum from the app settings</h6> - </div> - <div id="collapse-ynh_delete_file_checksum" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_delete_file_checksum --file=file</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-f</code>, <code>--file=</code> : The file for which the checksum will be deleted</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - $app should be defined when calling this helper</br></br>Requires YunoHost version 3.3.1 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/backup#L372">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_backup_before_upgrade" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_backup_before_upgrade</tt></h5> - <h6 class="helper-card-subtitle text-muted">Make a backup in case of failed upgrade</h6> - </div> - <div id="collapse-ynh_backup_before_upgrade" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_backup_before_upgrade - ynh_clean_setup () { - ynh_restore_upgradebackup - } - ynh_abort_if_errors</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/backup#L394">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_restore_upgradebackup" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_restore_upgradebackup</tt></h5> - <h6 class="helper-card-subtitle text-muted">Restore a previous backup if the upgrade process failed</h6> - </div> - <div id="collapse-ynh_restore_upgradebackup" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_backup_before_upgrade - ynh_clean_setup () { - ynh_restore_upgradebackup - } - ynh_abort_if_errors</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/backup#L443">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">fail2ban</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_add_fail2ban_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_add_fail2ban_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a dedicated fail2ban config (jail and filter conf files)</h6> - </div> - <div id="collapse-ynh_add_fail2ban_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-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 ...'</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-l</code>, <code>--logpath=</code> : Log file to be checked by fail2ban</li> - - - - <li><code>-r</code>, <code>--failregex=</code> : Failregex to be looked for by fail2ban</li> - - - - <li><code>-m</code>, <code>--max_retry=</code> : Maximum number of retries allowed before banning IP address - default: 3</li> - - - - <li><code>-p</code>, <code>--ports=</code> : Ports blocked for a banned IP address - default: http,https</li> - - - - <li><code>-t</code>, <code>--use_template</code> : Use this helper in template mode</li> - - - - <li><code>-v</code>, <code>--others_var=</code> : List of others variables to replace separeted by a space</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - -----------------------------------------------------------------------------</br></br>This will use a template in ../conf/f2b_jail.conf and ../conf/f2b_filter.conf</br> __APP__ by $app</br></br>You can dynamically replace others variables by example :</br> __VAR_1__ by $var_1</br> __VAR_2__ by $var_2</br></br>Generally your template will look like that by example (for synapse):</br></br>f2b_jail.conf:</br> [__APP__]</br> enabled = true</br> port = http,https</br> filter = __APP__</br> logpath = /var/log/__APP__/logfile.log</br> maxretry = 3</br></br>f2b_filter.conf:</br> [INCLUDES]</br> before = common.conf</br> [Definition]</br></br># Part of regex definition (just used to make more easy to make the global regex)</br> __synapse_start_line = .? \- synapse\..+ \-</br></br># Regex definition.</br> failregex = ^%(__synapse_start_line)s INFO \- POST\-(\d+)\- <HOST> \- \d+ \- Received request\: POST /_matrix/client/r0/login\??<SKIPLINES>%(__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'<SKIPLINES>%(__synapse_start_line)s WARNING \- \- (Attempted to login as @\5\:.+ but they do not exist|Failed password login for user @\5\:.+)$</br></br>ignoreregex =</br></br>-----------------------------------------------------------------------------</br></br>Note about the "failregex" option:</br> regex to match the password failure messages in the logfile. The</br> host must be matched by a group named "host". The tag "<HOST>" can</br> be used for standard IP/hostname matching and is only an alias for</br> (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)</br></br>You can find some more explainations about how to make a regex here :</br> https://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Filters</br></br>Note that the logfile need to exist before to call this helper !!</br></br>To validate your regex you can test with this command:</br>fail2ban-regex /var/log/YOUR_LOG_FILE_PATH /etc/fail2ban/filter.d/YOUR_APP.conf</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/fail2ban#L65">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_fail2ban_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_fail2ban_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the dedicated fail2ban config (jail and filter conf files)</h6> - </div> - <div id="collapse-ynh_remove_fail2ban_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_remove_fail2ban_config</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/fail2ban#L150">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">getopts</h3> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">hardware</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_get_ram" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_get_ram</tt></h5> - <h6 class="helper-card-subtitle text-muted">Get the total or free amount of RAM+swap on the system</h6> - </div> - <div id="collapse-ynh_get_ram" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_get_ram [--free|--total] [--ignore_swap|--only_swap]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-f</code>, <code>--free</code> : Count free RAM+swap</li> - - - - <li><code>-t</code>, <code>--total</code> : Count total RAM+swap</li> - - - - <li><code>-s</code>, <code>--ignore_swap</code> : Ignore swap, consider only real RAM</li> - - - - <li><code>-o</code>, <code>--only_swap</code> : Ignore real RAM, consider only swap</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: the amount of free ram - </p> - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.8.1 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/hardware#L13">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_require_ram" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_require_ram</tt></h5> - <h6 class="helper-card-subtitle text-muted">Return 0 or 1 depending if the system has a given amount of RAM+swap free or total</h6> - </div> - <div id="collapse-ynh_require_ram" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-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.</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-r</code>, <code>--required=</code> : The amount to require, in Mb</li> - - - - <li><code>-f</code>, <code>--free</code> : Count free RAM+swap</li> - - - - <li><code>-t</code>, <code>--total</code> : Count total RAM+swap</li> - - - - <li><code>-s</code>, <code>--ignore_swap</code> : Ignore swap, consider only real RAM</li> - - - - <li><code>-o</code>, <code>--only_swap</code> : Ignore real RAM, consider only swap</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.8.1 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/hardware#L82">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">logging</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_die" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_die</tt></h5> - <h6 class="helper-card-subtitle text-muted">Print a message to stderr and exit</h6> - </div> - <div id="collapse-ynh_die" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_die --message=MSG [--ret_code=RETCODE]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--message=</code> : Message to display</li> - - - - <li><code>-c</code>, <code>--ret_code=</code> : Exit code to exit with</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.4.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logging#L10">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_print_info" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_print_info</tt></h5> - <h6 class="helper-card-subtitle text-muted">Display a message in the 'INFO' logging category</h6> - </div> - <div id="collapse-ynh_print_info" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_print_info --message="Some message"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--message=</code> : Message to display</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logging#L30">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_print_warn" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_print_warn</tt></h5> - <h6 class="helper-card-subtitle text-muted">Print a warning on stderr</h6> - </div> - <div id="collapse-ynh_print_warn" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_print_warn --message="Text to print"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--message=</code> : The text to print</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logging#L75">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_print_err" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_print_err</tt></h5> - <h6 class="helper-card-subtitle text-muted">Print an error on stderr</h6> - </div> - <div id="collapse-ynh_print_err" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_print_err --message="Text to print"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--message=</code> : The text to print</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logging#L92">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_exec_err" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_exec_err</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command and print the result as an error</h6> - </div> - <div id="collapse-ynh_exec_err" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_err your_command -ynh_exec_err "your_command | other_command"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>command</code> : command to execute</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - 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.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logging#L114">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_exec_warn" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_exec_warn</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command and print the result as a warning</h6> - </div> - <div id="collapse-ynh_exec_warn" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_warn your_command -ynh_exec_warn "your_command | other_command"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>command</code> : command to execute</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - 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.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logging#L129">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_exec_warn_less" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_exec_warn_less</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command and force the result to be printed on stdout</h6> - </div> - <div id="collapse-ynh_exec_warn_less" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_warn_less your_command -ynh_exec_warn_less "your_command | other_command"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>command</code> : command to execute</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - 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.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logging#L144">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_exec_quiet" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_exec_quiet</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command and redirect stdout in /dev/null</h6> - </div> - <div id="collapse-ynh_exec_quiet" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_quiet your_command -ynh_exec_quiet "your_command | other_command"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>command</code> : command to execute</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - 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.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logging#L159">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_exec_fully_quiet" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_exec_fully_quiet</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command and redirect stdout and stderr in /dev/null</h6> - </div> - <div id="collapse-ynh_exec_fully_quiet" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_fully_quiet your_command -ynh_exec_fully_quiet "your_command | other_command"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>command</code> : command to execute</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - 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.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logging#L174">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_print_OFF" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_print_OFF</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove any logs for all the following commands.</h6> - </div> - <div id="collapse-ynh_print_OFF" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_print_OFF</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - WARNING: You should be careful with this helper, and never forget to use ynh_print_ON as soon as possible to restore the logging.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logging#L185">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_print_ON" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_print_ON</tt></h5> - <h6 class="helper-card-subtitle text-muted">Restore the logging after ynh_print_OFF</h6> - </div> - <div id="collapse-ynh_print_ON" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_print_ON</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.2.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logging#L194">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_script_progression" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_script_progression</tt></h5> - <h6 class="helper-card-subtitle text-muted">Print a progress bar showing the progression of an app script</h6> - </div> - <div id="collapse-ynh_script_progression" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_script_progression --message=message [--weight=weight] [--time]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--message=</code> : The text to print</li> - - - - <li><code>-w</code>, <code>--weight=</code> : The weight for this progression. This value is 1 by default. Use a bigger value for a longer part of the script.</li> - - - - <li><code>-t</code>, <code>--time</code> : 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.</li> - - - - <li><code>-l</code>, <code>--last</code> : Use for the last call of the helper, to fill the progression bar.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logging#L222">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_return" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_return</tt></h5> - <h6 class="helper-card-subtitle text-muted">Return data to the Yunohost core for later processing -(to be used by special hooks like app config panel and core diagnosis)</h6> - </div> - <div id="collapse-ynh_return" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_return somedata</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.6.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logging#L307">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_debug" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_debug</tt></h5> - <h6 class="helper-card-subtitle text-muted">Debugger for app packagers</h6> - </div> - <div id="collapse-ynh_debug" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_debug [--message=message] [--trace=1/0]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--message=</code> : The text to print</li> - - - - <li><code>-t</code>, <code>--trace=</code> : Turn on or off the trace of the script. Usefull to trace nonly a small part of a script.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logging#L318">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_debug_exec" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_debug_exec</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command and print the result as debug</h6> - </div> - <div id="collapse-ynh_debug_exec" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_debug_exec your_command -ynh_debug_exec "your_command | other_command"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>command</code> : command to execute</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - 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.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logging#L375">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">logrotate</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_use_logrotate" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_use_logrotate</tt></h5> - <h6 class="helper-card-subtitle text-muted">Use logrotate to manage the logfile</h6> - </div> - <div id="collapse-ynh_use_logrotate" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_use_logrotate [--logfile=/log/file] [--nonappend] [--specific_user=user/group]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-l</code>, <code>--logfile=</code> : absolute path of logfile</li> - - - - <li><code>-n</code>, <code>--nonappend</code> : (optional) Replace the config file instead of appending this new config.</li> - - - - <li><code>-u</code>, <code>--specific_user=</code> : run logrotate as the specified user and group. If not specified logrotate is runned as root.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - If no --logfile is provided, /var/log/${app} will be used as default.</br>logfile can be just a directory, or a full path to a logfile :</br>/parentdir/logdir</br>/parentdir/logdir/logfile.log</br></br>It's possible to use this helper multiple times, each config will be added to</br>the same logrotate config file. Unless you use the option --non-append</br></br>Requires YunoHost version 2.6.4 or higher.</br>Requires YunoHost version 3.2.0 or higher for the argument --specific_user</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logrotate#L20">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_logrotate" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_logrotate</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the app's logrotate config.</h6> - </div> - <div id="collapse-ynh_remove_logrotate" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_remove_logrotate</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/logrotate#L108">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">mysql</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_connect_as" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_connect_as</tt></h5> - <h6 class="helper-card-subtitle text-muted">Open a connection as a user</h6> - </div> - <div id="collapse-ynh_mysql_connect_as" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_connect_as --user=user --password=password [--database=database]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--user=</code> : the user name to connect as</li> - - - - <li><code>-p</code>, <code>--password=</code> : the user password</li> - - - - <li><code>-d</code>, <code>--database=</code> : the database to connect to</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_mysql_connect_as --user="user" --password="pass" <<< "UPDATE ...;" example: ynh_mysql_connect_as --user="user" --password="pass" < /path/to/file.sql</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/mysql#L16">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_execute_as_root" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_execute_as_root</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command as root user</h6> - </div> - <div id="collapse-ynh_mysql_execute_as_root" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_execute_as_root --sql=sql [--database=database]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-s</code>, <code>--sql=</code> : the SQL command to execute</li> - - - - <li><code>-d</code>, <code>--database=</code> : the database to connect to</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/mysql#L37">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_execute_file_as_root" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_execute_file_as_root</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command from a file as root user</h6> - </div> - <div id="collapse-ynh_mysql_execute_file_as_root" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_execute_file_as_root --file=file [--database=database]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-f</code>, <code>--file=</code> : the file containing SQL commands</li> - - - - <li><code>-d</code>, <code>--database=</code> : the database to connect to</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/mysql#L58">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_dump_db" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_dump_db</tt></h5> - <h6 class="helper-card-subtitle text-muted">Dump a database</h6> - </div> - <div id="collapse-ynh_mysql_dump_db" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_dump_db --database=database</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-d</code>, <code>--database=</code> : the database name to dump</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: the mysqldump output - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_mysql_dump_db --database=roundcube > ./dump.sql</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/mysql#L124">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_user_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_user_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a mysql user exists</h6> - </div> - <div id="collapse-ynh_mysql_user_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_mysql_user_exists --user=user -| exit: Return 1 if the user doesn't exist, 0 otherwise.</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--user=</code> : the user for which to check existence</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/mysql#L156">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_setup_db" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_setup_db</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a database, an user and its password. Then store the password in the app's config</h6> - </div> - <div id="collapse-ynh_mysql_setup_db" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_setup_db --db_user=user --db_name=name [--db_pwd=pwd]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--db_user=</code> : Owner of the database</li> - - - - <li><code>-n</code>, <code>--db_name=</code> : Name of the database</li> - - - - <li><code>-p</code>, <code>--db_pwd=</code> : Password of the database. If not provided, a password will be generated</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - After executing this helper, the password of the created database will be available in $db_pwd</br>It will also be stored as "mysqlpwd" into the app settings.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/mysql#L196">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_remove_db" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_remove_db</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove a database if it exists, and the associated user</h6> - </div> - <div id="collapse-ynh_mysql_remove_db" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_remove_db --db_user=user --db_name=name</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--db_user=</code> : Owner of the database</li> - - - - <li><code>-n</code>, <code>--db_name=</code> : Name of the database</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/mysql#L221">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">network</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_find_port" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_find_port</tt></h5> - <h6 class="helper-card-subtitle text-muted">Find a free port and return it</h6> - </div> - <div id="collapse-ynh_find_port" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_find_port --port=begin_port</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-p</code>, <code>--port=</code> : port to start to search</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: the port number - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">port=$(ynh_find_port --port=8080)</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/network#L12">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_port_available" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_port_available</tt></h5> - <h6 class="helper-card-subtitle text-muted">Test if a port is available</h6> - </div> - <div id="collapse-ynh_port_available" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_find_port --port=XYZ -| exit: Return 1 if the port is already used by another process.</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-p</code>, <code>--port=</code> : port to check</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_port_available --port=1234 || ynh_die "Port 1234 is needs to be available for this app"</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.8.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/network#L37">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_validate_ip4" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_validate_ip4</tt></h5> - <h6 class="helper-card-subtitle text-muted">Validate an IPv4 address</h6> - </div> - <div id="collapse-ynh_validate_ip4" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_validate_ip4 --ip_address=ip_address</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-i</code>, <code>--ip_address=</code> : the ipv4 address to check</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: 0 for valid ipv4 addresses, 1 otherwise - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_validate_ip4 111.222.333.444</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/network#L99">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_validate_ip6" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_validate_ip6</tt></h5> - <h6 class="helper-card-subtitle text-muted">Validate an IPv6 address</h6> - </div> - <div id="collapse-ynh_validate_ip6" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_validate_ip6 --ip_address=ip_address</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-i</code>, <code>--ip_address=</code> : the ipv6 address to check</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: 0 for valid ipv6 addresses, 1 otherwise - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_validate_ip6 2000:dead:beef::1</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/network#L121">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">nginx</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_add_nginx_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_add_nginx_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a dedicated nginx config</h6> - </div> - <div id="collapse-ynh_add_nginx_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_add_nginx_config "list of others variables to replace"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>list</code> : (Optional) list of others variables to replace separated by spaces. For example : 'path_2 port_2 ...'</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - This will use a template in ../conf/nginx.conf</br> __PATH__ by $path_url</br> __DOMAIN__ by $domain</br> __PORT__ by $port</br> __NAME__ by $app</br> __FINALPATH__ by $final_path</br> __PHPVERSION__ by $YNH_PHP_VERSION ($YNH_PHP_VERSION is either the default php version or the version defined for the app)</br></br>And dynamic variables (from the last example) :</br> __PATH_2__ by $path_2</br> __PORT_2__ by $port_2</br></br>Requires YunoHost version 2.7.2 or higher.</br>Requires YunoHost version 2.7.13 or higher for dynamic variables</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/nginx#L23">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_nginx_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_nginx_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the dedicated nginx config</h6> - </div> - <div id="collapse-ynh_remove_nginx_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_remove_nginx_config</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/nginx#L77">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">nodejs</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_use_nodejs" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_use_nodejs</tt></h5> - <h6 class="helper-card-subtitle text-muted">Load the version of node for an app, and set variables.</h6> - </div> - <div id="collapse-ynh_use_nodejs" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_use_nodejs</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - ynh_use_nodejs has to be used in any app scripts before using node for the first time.</br>This helper will provide alias and variables to use in your scripts.</br></br>To use npm or node, use the alias `ynh_npm` and `ynh_node`</br>Those alias will use the correct version installed for the app</br>For example: use `ynh_npm install` instead of `npm install`</br></br>With `sudo` or `ynh_exec_as`, use instead the fallback variables `$ynh_npm` and `$ynh_node`</br>And propagate $PATH to sudo with $ynh_node_load_PATH</br>Exemple: `ynh_exec_as $app $ynh_node_load_PATH $ynh_npm install`</br></br>$PATH contains the path of the requested version of node.</br>However, $PATH is duplicated into $node_PATH to outlast any manipulation of $PATH</br>You can use the variable `$ynh_node_load_PATH` to quickly load your node version</br> in $PATH for an usage into a separate script.</br>Exemple: $ynh_node_load_PATH $final_path/script_that_use_npm.sh`</br></br>Finally, to start a nodejs service with the correct version, 2 solutions</br> Either the app is dependent of node or npm, but does not called it directly.</br> In such situation, you need to load PATH</br> `Environment="__NODE_ENV_PATH__"`</br> `ExecStart=__FINALPATH__/my_app`</br> You will replace __NODE_ENV_PATH__ with $ynh_node_load_PATH</br></br>Or node start the app directly, then you don't need to load the PATH variable</br> `ExecStart=__YNH_NODE__ my_app run`</br> You will replace __YNH_NODE__ with $ynh_node</br></br>2 other variables are also available</br> - $nodejs_path: The absolute path to node binaries for the chosen version.</br> - $nodejs_version: Just the version number of node for this app. Stored as 'nodejs_version' in settings.yml.</br></br>Requires YunoHost version 2.7.12 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/nodejs#L67">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_install_nodejs" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_install_nodejs</tt></h5> - <h6 class="helper-card-subtitle text-muted">Install a specific version of nodejs</h6> - </div> - <div id="collapse-ynh_install_nodejs" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_install_nodejs --nodejs_version=nodejs_version</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-n</code>, <code>--nodejs_version=</code> : 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.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - ynh_install_nodejs will install the version of node provided as argument by using n.</br></br>n (Node version management) uses the PATH variable to store the path of the version of node it is going to use.</br>That's how it changes the version</br></br>Refer to ynh_use_nodejs for more information about available commands and variables</br></br>Requires YunoHost version 2.7.12 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/nodejs#L105">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_nodejs" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_nodejs</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the version of node used by the app.</h6> - </div> - <div id="collapse-ynh_remove_nodejs" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_remove_nodejs</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - This helper will check if another app uses the same version of node,</br>if not, this version of node will be removed.</br>If no other app uses node, n will be also removed.</br></br>Requires YunoHost version 2.7.12 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/nodejs#L183">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">php</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_add_fpm_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_add_fpm_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a dedicated php-fpm config</h6> - </div> - <div id="collapse-ynh_add_fpm_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-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 20Mb of ram by pool. -medium - Between 20Mb and 40Mb of ram by pool. -high - More than 40Mb 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</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-v</code>, <code>--phpversion=</code> : Version of php to use.</li> - - - - <li><code>-t</code>, <code>--use_template</code> : Use this helper in template mode.</li> - - - - <li><code>-p</code>, <code>--package=</code> : Additionnal php packages to install</li> - - - - <li><code>-d</code>, <code>--dedicated_service</code> : Use a dedicated php-fpm service instead of the common one.</li> - - - - <li><code>-v</code>, <code>--phpversion=</code> : Version of php to use.</li> - - - - <li><code>-f</code>, <code>--footprint=</code> : Memory footprint of the service (low/medium/high).</li> - - - - <li><code>-u</code>, <code>--usage=</code> : Expected usage of the service (low/medium/high).</li> - - - - <li><code>-p</code>, <code>--package=</code> : Additionnal php packages to install for a specific version of php</li> - - - - <li><code>-d</code>, <code>--dedicated_service</code> : Use a dedicated php-fpm service instead of the common one.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - -----------------------------------------------------------------------------</br></br>The footprint of the service will be used to defined the maximum footprint we can allow, which is half the maximum RAM.</br>So it will be used to defined 'pm.max_children'</br>A lower value for the footprint will allow more children for 'pm.max_children'. And so for</br> 'pm.start_servers', 'pm.min_spare_servers' and 'pm.max_spare_servers' which are defined from the</br> value of 'pm.max_children'</br>NOTE: 'pm.max_children' can't exceed 4 times the number of processor's cores.</br></br>The usage value will defined the way php will handle the children for the pool.</br>A value set as 'low' will set the process manager to 'ondemand'. Children will start only if the</br> service is used, otherwise no child will stay alive. This config gives the lower footprint when the</br> service is idle. But will use more proc since it has to start a child as soon it's used.</br>Set as 'medium', the process manager will be at dynamic. If the service is idle, a number of children</br> equal to pm.min_spare_servers will stay alive. So the service can be quick to answer to any request.</br> The number of children can grow if needed. The footprint can stay low if the service is idle, but</br> not null. The impact on the proc is a little bit less than 'ondemand' as there's always a few</br> children already available.</br>Set as 'high', the process manager will be set at 'static'. There will be always as many children as</br> 'pm.max_children', the footprint is important (but will be set as maximum a quarter of the maximum</br> RAM) but the impact on the proc is lower. The service will be quick to answer as there's always many</br> children ready to answer.</br></br>Requires YunoHost version 2.7.2 or higher.</br>Requires YunoHost version 3.5.1 or higher for the argument --phpversion</br>Requires YunoHost version 3.8.1 or higher for the arguments --use_template, --usage, --footprint, --package and --dedicated_service</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/php#L61">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_fpm_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_fpm_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the dedicated php-fpm config</h6> - </div> - <div id="collapse-ynh_remove_fpm_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_remove_fpm_config</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/php#L269">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">postgresql</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_connect_as" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_connect_as</tt></h5> - <h6 class="helper-card-subtitle text-muted">Open a connection as a user</h6> - </div> - <div id="collapse-ynh_psql_connect_as" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_psql_connect_as --user=user --password=password [--database=database]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--user=</code> : the user name to connect as</li> - - - - <li><code>-p</code>, <code>--password=</code> : the user password</li> - - - - <li><code>-d</code>, <code>--database=</code> : the database to connect to</li> - - - </ul> - </p> - - - - - <p> - <strong>Examples</strong>:<ul> - - - <code class="helper-code"> ynh_psql_connect_as 'user' 'pass' <<< "UPDATE ...;"</code> - - <br> - - - <code class="helper-code"> ynh_psql_connect_as 'user' 'pass' < /path/to/file.sql</code> - - <br> - - </ul> - </p> - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/postgresql#L18">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_execute_as_root" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_execute_as_root</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command as root user</h6> - </div> - <div id="collapse-ynh_psql_execute_as_root" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_psql_execute_as_root --sql=sql [--database=database]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-s</code>, <code>--sql=</code> : the SQL command to execute</li> - - - - <li><code>-d</code>, <code>--database=</code> : the database to connect to</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/postgresql#L39">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_execute_file_as_root" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_execute_file_as_root</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command from a file as root user</h6> - </div> - <div id="collapse-ynh_psql_execute_file_as_root" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_psql_execute_file_as_root --file=file [--database=database]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-f</code>, <code>--file=</code> : the file containing SQL commands</li> - - - - <li><code>-d</code>, <code>--database=</code> : the database to connect to</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/postgresql#L60">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_dump_db" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_dump_db</tt></h5> - <h6 class="helper-card-subtitle text-muted">Dump a database</h6> - </div> - <div id="collapse-ynh_psql_dump_db" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_psql_dump_db --database=database</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-d</code>, <code>--database=</code> : the database name to dump</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: the psqldump output - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_psql_dump_db 'roundcube' > ./dump.sql</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/postgresql#L127">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_user_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_user_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a psql user exists</h6> - </div> - <div id="collapse-ynh_psql_user_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_psql_user_exists --user=user -| exit: Return 1 if the user doesn't exist, 0 otherwise</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--user=</code> : the user for which to check existence</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/postgresql#L160">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_database_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_database_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a psql database exists</h6> - </div> - <div id="collapse-ynh_psql_database_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_psql_database_exists --database=database -| exit: Return 1 if the database doesn't exist, 0 otherwise</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-d</code>, <code>--database=</code> : the database for which to check existence</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/postgresql#L183">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_setup_db" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_setup_db</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a database, an user and its password. Then store the password in the app's config</h6> - </div> - <div id="collapse-ynh_psql_setup_db" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_psql_setup_db --db_user=user --db_name=name [--db_pwd=pwd]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--db_user=</code> : Owner of the database</li> - - - - <li><code>-n</code>, <code>--db_name=</code> : Name of the database</li> - - - - <li><code>-p</code>, <code>--db_pwd=</code> : Password of the database. If not given, a password will be generated</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - After executing this helper, the password of the created database will be available in $db_pwd</br>It will also be stored as "psqlpwd" into the app settings.</br></br>Requires YunoHost version 2.7.13 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/postgresql#L222">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_remove_db" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_remove_db</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove a database if it exists, and the associated user</h6> - </div> - <div id="collapse-ynh_psql_remove_db" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_psql_remove_db --db_user=user --db_name=name</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--db_user=</code> : Owner of the database</li> - - - - <li><code>-n</code>, <code>--db_name=</code> : Name of the database</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.13 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/postgresql#L251">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_psql_test_if_first_run" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_psql_test_if_first_run</tt></h5> - <h6 class="helper-card-subtitle text-muted">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</h6> - </div> - <div id="collapse-ynh_psql_test_if_first_run" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_psql_test_if_first_run</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.13 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/postgresql#L283">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">setting</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_app_setting_get" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_app_setting_get</tt></h5> - <h6 class="helper-card-subtitle text-muted">Get an application setting</h6> - </div> - <div id="collapse-ynh_app_setting_get" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_app_setting_get --app=app --key=key</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-a</code>, <code>--app=</code> : the application id</li> - - - - <li><code>-k</code>, <code>--key=</code> : the setting to get</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/setting#L10">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_app_setting_set" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_app_setting_set</tt></h5> - <h6 class="helper-card-subtitle text-muted">Set an application setting</h6> - </div> - <div id="collapse-ynh_app_setting_set" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_app_setting_set --app=app --key=key --value=value</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-a</code>, <code>--app=</code> : the application id</li> - - - - <li><code>-k</code>, <code>--key=</code> : the setting name to set</li> - - - - <li><code>-v</code>, <code>--value=</code> : the setting value to set</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/setting#L30">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_app_setting_delete" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_app_setting_delete</tt></h5> - <h6 class="helper-card-subtitle text-muted">Delete an application setting</h6> - </div> - <div id="collapse-ynh_app_setting_delete" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_app_setting_delete --app=app --key=key</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-a</code>, <code>--app=</code> : the application id</li> - - - - <li><code>-k</code>, <code>--key=</code> : the setting to delete</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/setting#L50">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_webpath_available" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_webpath_available</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check availability of a web path</h6> - </div> - <div id="collapse-ynh_webpath_available" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_webpath_available --domain=domain --path_url=path</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-d</code>, <code>--domain=</code> : the domain/host of the url</li> - - - - <li><code>-p</code>, <code>--path_url=</code> : the web path to check the availability of</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_webpath_available --domain=some.domain.tld --path_url=/coffee</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/setting#L124">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_webpath_register" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_webpath_register</tt></h5> - <h6 class="helper-card-subtitle text-muted">Register/book a web path for an app</h6> - </div> - <div id="collapse-ynh_webpath_register" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_webpath_register --app=app --domain=domain --path_url=path</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-a</code>, <code>--app=</code> : the app for which the domain should be registered</li> - - - - <li><code>-d</code>, <code>--domain=</code> : the domain/host of the web path</li> - - - - <li><code>-p</code>, <code>--path_url=</code> : the web path to be registered</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_webpath_register --app=wordpress --domain=some.domain.tld --path_url=/coffee</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/setting#L146">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_permission_create" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_permission_create</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a new permission for the app</h6> - </div> - <div id="collapse-ynh_permission_create" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_permission_create --permission "permission" [--url=url] [--allowed="group1 group2"]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-p</code>, <code>--permission=</code> : the name for the permission (by default a permission named "main" already exist)</li> - - - - <li><code>-u</code>, <code>--url=</code> : (optional) URL for which access will be allowed/forbidden</li> - - - - <li><code>-a</code>, <code>--allowed=</code> : (optional) A list of group/user to allow for the permission</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_permission_create --permission=admin --url=/admin --allowed="alice bob"</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - If provided, 'url' is assumed to be relative to the app domain/path if they</br>start with '/'. For example:</br> / -> domain.tld/app</br> /admin -> domain.tld/app/admin</br> domain.tld/app/api -> domain.tld/app/api</br></br>'url' can be later treated as a regex if it starts with "re:".</br>For example:</br> re:/api/[A-Z]*$ -> domain.tld/app/api/[A-Z]*$</br> re:domain.tld/app/api/[A-Z]*$ -> domain.tld/app/api/[A-Z]*$</br></br>Requires YunoHost version 3.7.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/setting#L180">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_permission_delete" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_permission_delete</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove a permission for the app (note that when the app is removed all permission is automatically removed)</h6> - </div> - <div id="collapse-ynh_permission_delete" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_permission_delete --permission="permission"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-p</code>, <code>--permission=</code> : the name for the permission (by default a permission named "main" is removed automatically when the app is removed)</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_permission_delete --permission=editors</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.7.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/setting#L213">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_permission_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_permission_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a permission exists</h6> - </div> - <div id="collapse-ynh_permission_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_permission_exists --permission=permission -| exit: Return 1 if the permission doesn't exist, 0 otherwise</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-p</code>, <code>--permission=</code> : the permission to check</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.7.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/setting#L230">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_permission_url" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_permission_url</tt></h5> - <h6 class="helper-card-subtitle text-muted">Redefine the url associated to a permission</h6> - </div> - <div id="collapse-ynh_permission_url" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_permission_url --permission="permission" [--url="url"]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-p</code>, <code>--permission=</code> : the name for the permission (by default a permission named "main" is removed automatically when the app is removed)</li> - - - - <li><code>-u</code>, <code>--url=</code> : (optional) URL for which access will be allowed/forbidden</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.7.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/setting#L247">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_permission_update" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_permission_update</tt></h5> - <h6 class="helper-card-subtitle text-muted">Update a permission for the app</h6> - </div> - <div id="collapse-ynh_permission_update" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_permission_update --permission="permission" [--add="group1 group2"] [--remove="group1 group2"]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-p</code>, <code>--permission=</code> : the name for the permission (by default a permission named "main" already exist)</li> - - - - <li><code>-a</code>, <code>--add=</code> : the list of group or users to enable add to the permission</li> - - - - <li><code>-r</code>, <code>--remove=</code> : the list of group or users to remove from the permission</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_permission_update --permission admin --add=samdoe --remove=all_users</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.7.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/setting#L277">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_permission_has_user" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_permission_has_user</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a permission has an user</h6> - </div> - <div id="collapse-ynh_permission_has_user" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-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</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-p</code>, <code>--permission=</code> : the permission to check</li> - - - - <li><code>-u</code>, <code>--user=</code> : the user seek in the permission</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_permission_has_user --permission=main --user=visitors</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.7.1 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/setting#L308">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">string</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_string_random" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_string_random</tt></h5> - <h6 class="helper-card-subtitle text-muted">Generate a random string</h6> - </div> - <div id="collapse-ynh_string_random" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_string_random [--length=string_length]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-l</code>, <code>--length=</code> : the string length to generate (default: 24)</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: the generated string - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">pwd=$(ynh_string_random --length=8)</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/string#L12">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_replace_string" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_replace_string</tt></h5> - <h6 class="helper-card-subtitle text-muted">Substitute/replace a string (or expression) by another in a file</h6> - </div> - <div id="collapse-ynh_replace_string" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_replace_string --match_string=match_string --replace_string=replace_string --target_file=target_file</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--match_string=</code> : String to be searched and replaced in the file</li> - - - - <li><code>-r</code>, <code>--replace_string=</code> : String that will replace matches</li> - - - - <li><code>-f</code>, <code>--target_file=</code> : File in which the string will be replaced.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - As this helper is based on sed command, regular expressions and</br>references to sub-expressions can be used</br>(see sed manual page for more information)</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/string#L38">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_replace_special_string" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_replace_special_string</tt></h5> - <h6 class="helper-card-subtitle text-muted">Substitute/replace a special string by another in a file</h6> - </div> - <div id="collapse-ynh_replace_special_string" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_replace_special_string --match_string=match_string --replace_string=replace_string --target_file=target_file</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--match_string=</code> : String to be searched and replaced in the file</li> - - - - <li><code>-r</code>, <code>--replace_string=</code> : String that will replace matches</li> - - - - <li><code>-t</code>, <code>--target_file=</code> : File in which the string will be replaced.</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - This helper will use ynh_replace_string, but as you can use special</br>characters, you can't use some regular expressions and sub-expressions.</br></br>Requires YunoHost version 2.7.7 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/string#L67">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_sanitize_dbid" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_sanitize_dbid</tt></h5> - <h6 class="helper-card-subtitle text-muted">Sanitize a string intended to be the name of a database -(More specifically : replace - and . by _)</h6> - </div> - <div id="collapse-ynh_sanitize_dbid" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_sanitize_dbid --db_name=name</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-n</code>, <code>--db_name=</code> : name to correct/sanitize</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: the corrected name - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">dbname=$(ynh_sanitize_dbid $app)</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/string#L98">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">systemd</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_add_systemd_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_add_systemd_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a dedicated systemd config</h6> - </div> - <div id="collapse-ynh_add_systemd_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-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"]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-s</code>, <code>--service=</code> : Service name (optionnal, $app by default)</li> - - - - <li><code>-t</code>, <code>--template=</code> : Name of template file (optionnal, this is 'systemd' by default, meaning ./conf/systemd.service will be used as template)</li> - - - - <li><code>-v</code>, <code>--others_var=</code> : List of others variables to replace separated by a space. For example: 'var_1 var_2 ...'</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - This will use the template ../conf/<templatename>.service</br>to generate a systemd config, by replacing the following keywords</br>with global variables that should be defined before calling</br>this helper :</br></br>__APP__ by $app</br> __FINALPATH__ by $final_path</br></br>And dynamic variables (from the last example) :</br> __VAR_1__ by $var_1</br> __VAR_2__ by $var_2</br></br>Requires YunoHost version 2.7.11 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/systemd#L24">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_systemd_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_systemd_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the dedicated systemd config</h6> - </div> - <div id="collapse-ynh_remove_systemd_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_remove_systemd_config [--service=service]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-s</code>, <code>--service=</code> : Service name (optionnal, $app by default)</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/systemd#L71">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_systemd_action" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_systemd_action</tt></h5> - <h6 class="helper-card-subtitle text-muted">Start (or other actions) a service, print a log in case of failure and optionnaly wait until the service is completely started</h6> - </div> - <div id="collapse-ynh_systemd_action" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_systemd_action [--service_name=service_name] [--action=action] [ [--line_match="line to match"] [--log_path=log_path] [--timeout=300] [--length=20] ]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-n</code>, <code>--service_name=</code> : Name of the service to start. Default : $app</li> - - - - <li><code>-a</code>, <code>--action=</code> : Action to perform with systemctl. Default: start</li> - - - - <li><code>-l</code>, <code>--line_match=</code> : 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.</li> - - - - <li><code>-p</code>, <code>--log_path=</code> : Log file - Path to the log file. Default : /var/log/$app/$app.log</li> - - - - <li><code>-t</code>, <code>--timeout=</code> : Timeout - The maximum time to wait before ending the watching. Default : 300 seconds.</li> - - - - <li><code>-e</code>, <code>--length=</code> : Length of the error log : Default : 20</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/systemd#L101">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_clean_check_starting" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_clean_check_starting</tt></h5> - <h6 class="helper-card-subtitle text-muted">Clean temporary process and file used by ynh_check_starting -(usually used in ynh_clean_setup scripts)</h6> - </div> - <div id="collapse-ynh_clean_check_starting" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_clean_check_starting</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/systemd#L203">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">user</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_user_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_user_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a YunoHost user exists</h6> - </div> - <div id="collapse-ynh_user_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_user_exists --username=username -| exit: Return 1 if the user doesn't exist, 0 otherwise</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--username=</code> : the username to check</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_user_exists 'toto' || exit 1</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/user#L12">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_user_get_info" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_user_get_info</tt></h5> - <h6 class="helper-card-subtitle text-muted">Retrieve a YunoHost user information</h6> - </div> - <div id="collapse-ynh_user_get_info" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_user_get_info --username=username --key=key</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--username=</code> : the username to retrieve info from</li> - - - - <li><code>-k</code>, <code>--key=</code> : the key to retrieve</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: string - the key's value - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">mail=$(ynh_user_get_info 'toto' 'mail')</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/user#L33">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_user_list" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_user_list</tt></h5> - <h6 class="helper-card-subtitle text-muted">Get the list of YunoHost users</h6> - </div> - <div id="collapse-ynh_user_list" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_user_list</code> - - </p> - - - <p> - <strong>Returns</strong>: string - one username per line - </p> - - - <p> - <strong>Example</strong>: <code class="helper-code">for u in $(ynh_user_list); do ...</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.4.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/user#L53">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_system_user_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_system_user_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a user exists on the system</h6> - </div> - <div id="collapse-ynh_system_user_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_system_user_exists --username=username -| exit: Return 1 if the user doesn't exist, 0 otherwise</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--username=</code> : the username to check</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/user#L65">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_system_group_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_system_group_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a group exists on the system</h6> - </div> - <div id="collapse-ynh_system_group_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_system_group_exists --group=group -| exit: Return 1 if the group doesn't exist, 0 otherwise</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-g</code>, <code>--group=</code> : the group to check</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0.2 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/user#L83">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_system_user_create" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_system_user_create</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a system user</h6> - </div> - <div id="collapse-ynh_system_user_create" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_system_user_create --username=user_name [--home_dir=home_dir] [--use_shell]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--username=</code> : Name of the system user that will be create</li> - - - - <li><code>-h</code>, <code>--home_dir=</code> : 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</li> - - - - <li><code>-s</code>, <code>--use_shell</code> : 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</li> - - - </ul> - </p> - - - - - <p> - <strong>Examples</strong>:<ul> - - - Create a nextcloud user with no home directory and /usr/sbin/nologin login shell (hence no login capability) - - <br> - - - <code class="helper-code"> ynh_system_user_create --username=nextcloud</code> - - <br> - - - Create a discourse user using /var/www/discourse as home directory and the default login shell - - <br> - - - <code class="helper-code"> ynh_system_user_create --username=discourse --home_dir=/var/www/discourse --use_shell</code> - - <br> - - </ul> - </p> - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/user#L108">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_system_user_delete" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_system_user_delete</tt></h5> - <h6 class="helper-card-subtitle text-muted">Delete a system user</h6> - </div> - <div id="collapse-ynh_system_user_delete" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_system_user_delete --username=user_name</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-u</code>, <code>--username=</code> : Name of the system user that will be create</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/user#L144">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<h3 style="text-transform: uppercase; font-weight: bold">utils</h3> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_abort_if_errors" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_abort_if_errors</tt></h5> - <h6 class="helper-card-subtitle text-muted">Exits if an error occurs during the execution of the script.</h6> - </div> - <div id="collapse-ynh_abort_if_errors" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_abort_if_errors</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - This configure the rest of the script execution such that, if an error occurs</br>or if an empty variable is used, the execution of the script stops</br>immediately and a call to `ynh_clean_setup` is triggered if it has been</br>defined by your script.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/utils#L54">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_setup_source" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_setup_source</tt></h5> - <h6 class="helper-card-subtitle text-muted">Download, check integrity, uncompress and patch the source from app.src</h6> - </div> - <div id="collapse-ynh_setup_source" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_setup_source --dest_dir=dest_dir [--source_id=source_id]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-d</code>, <code>--dest_dir=</code> : Directory where to setup sources</li> - - - - <li><code>-s</code>, <code>--source_id=</code> : Name of the app, if the package contains more than one app</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - The file conf/app.src need to contains:</br></br>SOURCE_URL=Address to download the app archive</br>SOURCE_SUM=Control sum</br># (Optional) Program to check the integrity (sha256sum, md5sum...)</br># default: sha256</br>SOURCE_SUM_PRG=sha256</br># (Optional) Archive format</br># default: tar.gz</br>SOURCE_FORMAT=tar.gz</br># (Optional) Put false if sources are directly in the archive root</br># default: true</br># Instead of true, SOURCE_IN_SUBDIR could be the number of sub directories</br># to remove.</br>SOURCE_IN_SUBDIR=false</br># (Optionnal) Name of the local archive (offline setup support)</br># default: ${src_id}.${src_format}</br>SOURCE_FILENAME=example.tar.gz</br># (Optional) If it set as false don't extract the source.</br># (Useful to get a debian package or a python wheel.)</br># default: true</br>SOURCE_EXTRACT=(true|false)</br></br>Details:</br>This helper downloads sources from SOURCE_URL if there is no local source</br>archive in /opt/yunohost-apps-src/APP_ID/SOURCE_FILENAME</br></br>Next, it checks the integrity with "SOURCE_SUM_PRG -c --status" command.</br></br>If it's ok, the source archive will be uncompressed in $dest_dir. If the</br>SOURCE_IN_SUBDIR is true, the first level directory of the archive will be</br>removed.</br>If SOURCE_IN_SUBDIR is a numeric value, 2 for example, the 2 first level</br>directories will be removed</br></br>Finally, patches named sources/patches/${src_id}-*.patch and extra files in</br>sources/extra_files/$src_id will be applied to dest_dir</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/utils#L105">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_local_curl" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_local_curl</tt></h5> - <h6 class="helper-card-subtitle text-muted">Curl abstraction to help with POST requests to local pages (such as installation forms)</h6> - </div> - <div id="collapse-ynh_local_curl" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_local_curl "page_uri" "key1=value1" "key2=value2" ...</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>page_uri</code> : Path (relative to $path_url) of the page where POST data will be sent</li> - - - - <li><code>key1=value1</code> : (Optionnal) POST key and corresponding value</li> - - - - <li><code>key2=value2</code> : (Optionnal) Another POST key and corresponding value</li> - - - - <li><code>...</code> : (Optionnal) More POST keys and values</li> - - - </ul> - </p> - - - - <p> - <strong>Example</strong>: <code class="helper-code">ynh_local_curl "/install.php?installButton" "foo=$var1" "bar=$var2"</code> - </p> - - - - <p> - <strong>Details</strong>: - <p> - For multiple calls, cookies are persisted between each call for the same app</br></br>$domain and $path_url should be defined externally (and correspond to the domain.tld and the /path (of the app?))</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/utils#L225">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_get_debian_release" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_get_debian_release</tt></h5> - <h6 class="helper-card-subtitle text-muted">Fetch the Debian release codename</h6> - </div> - <div id="collapse-ynh_get_debian_release" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_get_debian_release</code> - - </p> - - - <p> - <strong>Returns</strong>: The Debian release codename (i.e. jessie, stretch, ...) - </p> - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.12 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/utils#L287">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_secure_remove" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_secure_remove</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove a file or a directory securely</h6> - </div> - <div id="collapse-ynh_secure_remove" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_secure_remove --file=path_to_remove</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-f</code>, <code>--file=</code> : File or directory to remove</li> - - - </ul> - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/utils#L317">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_read_manifest" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_read_manifest</tt></h5> - <h6 class="helper-card-subtitle text-muted">Read the value of a key in a ynh manifest file</h6> - </div> - <div id="collapse-ynh_read_manifest" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_read_manifest --manifest="manifest.json" --key="key"</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--manifest=</code> : Path of the manifest to read</li> - - - - <li><code>-k</code>, <code>--key=</code> : Name of the key to find</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: the value associate to that key - </p> - - - - - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/utils#L398">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_app_upstream_version" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_app_upstream_version</tt></h5> - <h6 class="helper-card-subtitle text-muted">Read the upstream version from the manifest</h6> - </div> - <div id="collapse-ynh_app_upstream_version" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_app_upstream_version [--manifest="manifest.json"]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--manifest=</code> : Path of the manifest to read</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: the version number of the upstream app - </p> - - - - - <p> - <strong>Details</strong>: - <p> - The version number in the manifest is defined by <upstreamversion>~ynh<packageversion></br>For example : 4.3-2~ynh3</br>This include the number before ~ynh</br>In the last example it return 4.3-2</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/utils#L427">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_app_package_version" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_app_package_version</tt></h5> - <h6 class="helper-card-subtitle text-muted">Read package version from the manifest</h6> - </div> - <div id="collapse-ynh_app_package_version" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_app_package_version [--manifest="manifest.json"]</code> - - </p> - - <p> - <strong>Arguments</strong>: - <ul> - - - <li><code>-m</code>, <code>--manifest=</code> : Path of the manifest to read</li> - - - </ul> - </p> - - - <p> - <strong>Returns</strong>: the version number of the package - </p> - - - - - <p> - <strong>Details</strong>: - <p> - The version number in the manifest is defined by <upstreamversion>~ynh<packageversion></br>For example : 4.3-2~ynh3</br>This include the number after ~ynh</br>In the last example it return 3</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/utils#L452">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_check_app_version_changed" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_check_app_version_changed</tt></h5> - <h6 class="helper-card-subtitle text-muted">Checks the app version to upgrade with the existing app version and returns:</h6> - </div> - <div id="collapse-ynh_check_app_version_changed" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code">ynh_check_app_version_changed</code> - - </p> - - - - - - <p> - <strong>Details</strong>: - <p> - - UPGRADE_APP if the upstream app version has changed</br>- UPGRADE_PACKAGE if only the YunoHost package has changed</br></br>It stops the current script without error if the package is up-to-date</br></br>This helper should be used to avoid an upgrade of an app, or the upstream part</br>of it, when it's not needed</br></br>To force an upgrade, even if the package is up to date,</br>you have to set the variable YNH_FORCE_UPGRADE before.</br>example: sudo YNH_FORCE_UPGRADE=1 yunohost app upgrade MyApp</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> - </p> - </p> - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-stable/data/helpers.d/utils#L482">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - - -<style> -/*================================================= - Helper card -=================================================*/ -.helper-card { - width:100%; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; - border: 1px solid rgba(0,0,0,.125); - border-radius: 0.5rem; - word-wrap: break-word; - margin-top: 0.5rem; - margin-bottom: 0.5rem; -} -.helper-card-body { - padding: 1.25rem; - padding-top: 0.8rem; - padding-bottom: 0; -} -.helper-code { - word-wrap: break-word; - white-space: normal; -} -/*===============================================*/ - -</style> diff --git a/packaging_apps_levels.md b/packaging_apps_levels.md deleted file mode 100644 index ffde8e73..00000000 --- a/packaging_apps_levels.md +++ /dev/null @@ -1,181 +0,0 @@ -# Quality levels of YunoHost application packages - -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. -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: -- The application packaging is more fun, with clear objectives to achieve and successive steps. -- A properly packaged application is put forward more than an application that does not comply with packaging rules. -- Users can quickly see the level of an application and thus know if the package is of good quality. - -## Level summary - -**Level 0** -The application does not work. - -**Level 1** -The application installs and uninstalls correctly in some cases. - -**Level 2** -The application installs and uninstalls correctly in all common configurations. - -**Level 3** -The application can be updated. - -**Level 4** -The application can be saved and restored. - -**Level 5** -The application package code follows some syntax rules. - -**Level 6** -The application package is in the YunoHost-Apps organization. - -**Level 7** -The application package passes all integrity tests successfully. - -**Level 8** -The application package respects all packaging recommendations. This is a high quality app. - -**Level 9** -The application complies with higher packaging recommendations. Not available yet. - -**Level 10** -The application package is considered perfect! - -## Quality levels in detail: - -### Level 0 - -**The application does not install or run after installation.** - -This is the lowest level, a level 0 application is considered non-functional. - -YEP to be respected to reach level 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-) Name your app and repository -- [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-) Add the app to a known app list - -### Level 1 - -**The application can be installed and uninstalled correctly.** - -But exceptions are possible, if at least one installation method is functional and its removal then the application is considered functional. - -YEP to be respected to reach level 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-) Use bash for main scripts -- [YEP 2.5](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-25---copier-correctement-des-fichiers----brouillon--manuel--working-) Correctly copy files -- [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-) Bash instructions: Give sufficient permissions to bash instructions -- [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-) : Follow the application installation instructions - -### Level 2 - -**The application can be installed and uninstalled in all common configurations.** - -- Installation in subfolder. -- Installation at the root of a domain or subdomain. -- Private installation (secured by the SSO). -- Public installation. -- Multi-instance installation. -- Uninstallation under the same circumstances. - -*If an application does not allow certain installation configurations, these must be clearly indicated in the README. However, level 2 cannot be reached if an installation configuration is intentionally discarded without valid reason.* -*This does not preclude the voluntary restriction of public, private or multi-instance if it is relevant for this application.* - -YEP to be respected to reach level 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-) : Update app status regularly -- *[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-) : Support installation on a domain* -- *[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-) : Support installation on a subdomain* -- *[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-) : Support installation on a subfolder* -- *[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-) : Manage multi-instance* - -### Level 3 - -**The application supports upgrade from an older version of the package.** - -The application must be able to be updated from a previous version of the package without causing an error. - -YEP to be respected to reach level 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-) Save answers during installation - -### Level 4 - -**The application can be backed up and restored without error on the same machine or another.** - -YEP to be respected to reach level 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-) : Provide a functional YunoHost backup script* -- *[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-) : Provide a functional YunoHost restore script* - -### Level 5 - -**The application has no errors in [Package linter](https://github.com/YunoHost/package_linter).** - -*There may be false positives in Package linter. These situations will be handled on a case-by-case basis.* - -YEP to be respected to reach level 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-) : Specify the license associated with the package* -- *[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-) : Respect manifest format* -- [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-) : Use practical commands (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-) : Run the webapp installation script correctly - -### Level 6 - -**The application can be backed up and restored without error on the same machine or another.** - -YEP to be respected to reach level 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-) : Inform about the intention to maintain a package -- [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-) : As a maintainer, keep checking and being aware of the evolution of apps packaging -- *[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-) : Add app to the [YunoHost-Apps organization](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-) : Publish test requests -- [YEP 1.9](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-19---documenter-lapp---valid%C3%A9--auto--official-) : Document 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-) : Keep a clean version history -- [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-) : Remove all traces of the app during deletion -- [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-) : Facilitating source integrity control -- [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-) : Follow the recommendations of the app documentation -- [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-) : Update versions containing CVEs - -### Level 7 - -**The application has no errors in [Package check](https://github.com/YunoHost/package_check).** - -Considering the maximum number of tests possible for the 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-) : Error detection and management -- [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-) : Cancel action if input values are incorrect -- [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-) : Change a system configuration correctly -- [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-) : Configure application logs -- [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-) : Use a variable rather than the app id directly -- [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-) : Translate the package into English -- [YEP 3.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-32---ouvrir-un-port-correctement----brouillon--manuel--working-) : Open port: Open port correctly - -### Level 8 - -**The application package respects all packaging recommendations. This is a high quality app.** - -YEP to be respected to reach level 8: -- [YEP 1.12](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-112) : Follow the template from example_ynh -- Supports change of 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-) : Check dependency availability on ARM, x86 and 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-) : Add the YunoHost tile to easily navigate between 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-) : Link to 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-) : Bind authentication to 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-) : Use hooks - -If an application is not available on an architecture, and it is impossible to circumvent this limitation reasonably, this limitation must be indicated in the REDME and taken into account in the installation script. The installation of the application on an unsupported architecture must be stopped before modifying the filesystem. - -### Level 9 - -**The application complies with all optional YEPs.** - -YEP to be respected to reach level 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-) : Fill a conf file correctly -- [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-) : Take into account the original version during updates -- [YEP 3.4](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-34---isoler-lapp----brouillon--manuel--official-) : Isolate 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-) : Logout - -### Level 10 - -**The application is considered perfect.** - -This ultimate level for an application can only be reached after an in-depth study of the package and by the validation of the Apps group. 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] + +<a href="/admindoc" class="btn btn-lg btn-primary inline"><i class="fa fa-cogs"></i> Administratorhandbuch</a> +<a href="/apps" class="btn btn-lg btn-success inline"><i class="fa fa-cubes"></i> Anwendungen</a> +<a href="/community" class="btn btn-lg btn-primary" style="background: blueviolet;border-color: blueviolet;"><i class="fa fa-users"></i> Community</a> +<a href="/contribute" style="background: orange; border-color: orange;" class="btn btn-lg btn-error"><i class="fa fa-heart"></i> Beteilige dich</a> + +[/center] + + +[center] +<a href="/" class="btn btn-lg inline"><i class="fa fa-fw fa-arrow-left"></i> Zurück zur Homepage</a> +[/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] + +<a href="/admindoc" class="btn btn-lg btn-primary inline"><i class="fa fa-cogs"></i> Guía de administración</a> +<a href="/apps" class="btn btn-lg btn-success inline"><i class="fa fa-cubes"></i> Catálogo de aplicaciones</a> +<a href="/community" class="btn btn-lg btn-primary" style="background: blueviolet;border-color: blueviolet;"><i class="fa fa-users"></i> Communidad</a> +<a href="/contribute" style="background: orange; border-color: orange;" class="btn btn-lg btn-error"><i class="fa fa-heart"></i> ¡Colabora!</a> + +[/center] + + +[center] +<a href="/" class="btn btn-lg inline"><i class="fa fa-fw fa-arrow-left"></i> Volver a la página principal</a> +[/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] + +<a href="/admindoc" class="btn btn-lg btn-primary inline"><i class="fa fa-cogs"></i> Guide d'administration</a> +<a href="/apps" class="btn btn-lg btn-success inline"><i class="fa fa-cubes"></i> Applications</a> +<a href="/community" class="btn btn-lg btn-primary" style="background: blueviolet;border-color: blueviolet;"><i class="fa fa-users"></i> Communauté</a> +<a href="/contribute" style="background: orange; border-color: orange;" class="btn btn-lg btn-error"><i class="fa fa-heart"></i> Contribuer</a> + +[/center] + +[center] +<a href="/" class="btn btn-lg inline"><i class="fa fa-fw fa-arrow-left"></i> Retourner à la page d'accueil du site</a> +[/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] + +<a href="/admindoc" class="btn btn-lg btn-primary inline"><i class="fa fa-cogs"></i> Guida d'amministrazione</a> +<a href="/apps" class="btn btn-lg btn-success inline"><i class="fa fa-cubes"></i> Applicazioni</a> +<a href="/community" class="btn btn-lg btn-primary" style="background: blueviolet;border-color: blueviolet;"><i class="fa fa-users"></i> Comunità</a> +<a href="/contribute" style="background: orange; border-color: orange;" class="btn btn-lg btn-error"><i class="fa fa-heart"></i> Contribuire</a> + +[center] +<a href="/" class="btn btn-lg inline"><i class="fa fa-fw fa-arrow-left"></i> Torna alla home del sito</a> +[/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] + +<a href="/admindoc" class="btn btn-lg btn-primary inline"><i class="fa fa-cogs"></i> Administrator's guide</a> +<a href="/apps" class="btn btn-lg btn-success inline"><i class="fa fa-cubes"></i> Applications</a> +<a href="/community" class="btn btn-lg btn-primary" style="background: blueviolet;border-color: blueviolet;"><i class="fa fa-users"></i> Community</a> +<a href="/contribute" style="background: orange; border-color: orange;" class="btn btn-lg btn-error"><i class="fa fa-heart"></i> Get involved</a> + +[/center] + + +[center] +<a href="/" class="btn btn-lg inline"><i class="fa fa-fw fa-arrow-left"></i> Go back to the homepage</a> +[/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.administrate/01.selfhosting/selfhosting.de.md similarity index 93% rename from selfhosting_de.md rename to pages/01.administrate/01.selfhosting/selfhosting.de.md index 1574ed3a..593f9bdb 100644 --- a/selfhosting_de.md +++ b/pages/01.administrate/01.selfhosting/selfhosting.de.md @@ -1,5 +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. @@ -8,10 +14,9 @@ Self-Hosting bedeutet, einen Server zu besitzen. Ein Server ist ein Computer, au Beim Self-Hosting geht es nicht darum, "Ihr Internet" sicherer zu machen, und es bietet auch keine Anonymität an sich. Stattdessen geht es darum, autonom zu sein und Ihre Dienste und Daten zu kontrollieren - was auch bedeutet, dafür verantwortlich zu sein. -Warum sollten Sie selbst hosten? ------------------------------- +## Warum sollten Sie selbst hosten? -- **Sie glauben an ein freies, offenes und dezentrales Internet.** In einem zentralisierten Internet können private Unternehmen und Behörden Personen ausspähen, analysieren und beeinflussen, indem sie diktieren, wie Sie sich miteinander verbinden, und indem sie Inhalte filtern. Yunohost wird von einer Community entwickelt, die an ein offenes und dezentrales Internet glaubt, und wir hoffen, dass Sie dies auch tun! +- **Sie glauben an ein freies, offenes und dezentrales Internet.** In einem zentralisierten Internet können private Unternehmen und Behörden Personen ausspähen, analysieren und beeinflussen, indem sie diktieren, wie Sie sich miteinander verbinden, und indem sie Inhalte filtern. YunoHost wird von einer Community entwickelt, die an ein offenes und dezentrales Internet glaubt, und wir hoffen, dass Sie dies auch tun! - **Sie möchten die Kontrolle über Ihre Daten und Dienste haben.** Ihre Bilder, Chatnachrichten, der Browserverlauf und der Text, den Sie für die Schule schreiben, haben auf dem Server eines anderen Benutzers (a.k.a. The Cloud) nichts zu suchen. Sie sind Teil Ihres Privatlebens, aber auch Teil des Lebens Ihrer Familie, Ihres Partners und so weiter. Diese Daten sollten von * Ihnen * verwaltet werden, nicht von einem zufälligen Unternehmen in den USA, dass Ihre Daten analysieren und die Ergebnisse verkaufen möchte. @@ -19,12 +24,10 @@ Warum sollten Sie selbst hosten? - **Sie möchten neue Möglichkeiten erkunden und Dinge anpassen.** Haben Sie jemals davon geträumt, einen Minecraft-Server für Ihre Freunde oder einen dauerhaften IRC- oder XMPP-Client zu betreiben? Mit Ihrem eigenen Server können Sie praktisch jedes gewünschte Programm manuell installieren, ausführen und jedes Bit anpassen. -Warum Sie vllt. *nicht* selbst hosten sollten? ------------------------------------- +## 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. - **Qualität und Leistung sind wahrscheinlich nicht so gut wie Premium-Services.** YunoHost (und die meisten dafür bereitgestellten Anwendungen) sind kostenlose und Open-Source-Software, die in den jeweiligen Communitys von Menschen in ihrer Freizeit und auf der Grundlage bester Bemühungen entwickelt werden. Es gibt keine absolute Garantie dafür, dass Software unter allen möglichen Umständen funktioniert. Die Leistung Ihres selbst gehosteten Servers hängt auch von dessen CPU und RAM sowie der verfügbaren Internetverbindung ab. - diff --git a/pages/01.administrate/01.selfhosting/selfhosting.es.md b/pages/01.administrate/01.selfhosting/selfhosting.es.md new file mode 100644 index 00000000..1bc42149 --- /dev/null +++ b/pages/01.administrate/01.selfhosting/selfhosting.es.md @@ -0,0 +1,64 @@ +--- +title: Auto-alojamiento +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. +--> + +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. + +<!-- +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. +--> + +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. +<!-- +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. +--> + +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? + +<!-- +- **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 ! +--> +- **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! + +<!-- +- **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. +--> +- **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. + +<!-- +- **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. + --> +- **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. + +<!-- +- **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. +--> + +- **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? + +<!-- +- **L'auto-hébergement requiert du travail et de la patience.** S'auto-héberger est un peu comme avoir son propre jardin ou potager : cela demande du travail et de la patience. Bien que YunoHost cherche à faire tout le travail compliqué pour vous, il vous faudra tout de même prendre le temps d'apprendre et configurer quelques détails pour que votre installation marche correctement. Il vous faudra aussi gérer quelques tâches de maintenance (telles que les mises à jour) de temps en temps, et demander de l'aide si des choses ne fonctionnent pas comme prévu. +--> +- **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. + +<!-- +- **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. +--> +- **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 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. +--> +- **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.administrate/01.selfhosting/selfhosting.fr.md similarity index 71% rename from selfhosting_fr.md rename to pages/01.administrate/01.selfhosting/selfhosting.fr.md index 0fc5c17e..c78ede8d 100644 --- a/selfhosting_fr.md +++ b/pages/01.administrate/01.selfhosting/selfhosting.fr.md @@ -1,28 +1,32 @@ -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 ? --------------------------- +## 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 ? ------------------------------------ +## Pourquoi ne *pas* s'auto-héberger ? - **L'auto-hébergement requiert du travail et de la patience.** S'auto-héberger est un peu comme avoir son propre jardin ou potager : cela demande du travail et de la patience. Bien que YunoHost cherche à faire tout le travail compliqué pour vous, il vous faudra tout de même prendre le temps d'apprendre et configurer quelques détails pour que votre installation marche correctement. Il vous faudra aussi gérer quelques tâches de maintenance (telles que les mises à jour) de temps en temps, et demander de l'aide si des choses ne fonctionnent pas comme prévu. - **Avec de grands serveurs viennent les grandes responsabilités.** Opérer un serveur implique d'être responsable des données que vous hébergez : personne ne pourra récupérer des données à votre place si vous les perdez. YunoHost fournit des fonctionnalités de sauvegarde qu'il est recommandé d'utiliser pour sauvegarder les configurations et données importantes. Il vous faut aussi garder un œil sur les recommandations et les nouvelles à propos de la sécurité pour que votre serveur ou vos données ne soient pas compromises. -- **La qualité et les performances ne seront probablement pas aussi bonnes que des services premium.** YunoHost (et la plupart des applications qui sont packagées) sont des logiciels libres et open-source, développés par des communautés bénévoles. Il n'y a pas de garantie absolue que ces logiciels 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.administrate/01.selfhosting/selfhosting.it.md b/pages/01.administrate/01.selfhosting/selfhosting.it.md new file mode 100644 index 00000000..6e0b9db0 --- /dev/null +++ b/pages/01.administrate/01.selfhosting/selfhosting.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 le tue discussione 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.administrate/01.selfhosting/selfhosting.md similarity index 93% rename from selfhosting.md rename to pages/01.administrate/01.selfhosting/selfhosting.md index 1229e776..9dadb2b1 100644 --- a/selfhosting.md +++ b/pages/01.administrate/01.selfhosting/selfhosting.md @@ -1,5 +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. @@ -7,10 +13,9 @@ Self-hosting implies owning a server. A server is a computer which is typically Self-hosting is not about making "your Internet" more secure and does not provide anonymity by itself. Instead, it is about being autonomous, and in control of your services and data - which also means being responsible for them. -Why should you host yourself ? ------------------------------- +## Why should you host yourself ? -- **You believe in a free, open and decentralized internet.** In a centralized internet, private companies and government can spy, analyze and influence people by dictating how they connect with each other, and by filtering content. Yunohost is developed by a community who believe in an open and decentralized internet, and we hope that you do, too! +- **You believe in a free, open and decentralized internet.** In a centralized internet, private companies and government can spy, analyze and influence people by dictating how they connect with each other, and by filtering content. YunoHost is developed by a community who believe in an open and decentralized internet, and we hope that you do, too! - **You want to have control of your data and services.** Your pictures, chat messages, browsing history, and that text you are writing for school, have nothing to do on somebody else's server (a.k.a. The Cloud). They are part of your private life, but also part of your family's life, your friend's life, and so on. These data should be managed by *you*, not a random company in the US who wants your data to analyze them and sell the results. @@ -18,12 +23,10 @@ Why should you host yourself ? - **You want to explore new possibilities and customize things.** Ever dreamed of running a Minecraft server for you friends, or a persistent IRC or XMPP client? With your very own server, you can manually install and run virtually any program you want, and customize every bit. -Why should you *not* host yourself ? ------------------------------------- +## Why should you *not* host yourself ? - **Self-hosting requires some work and patience.** Hosting yourself is a bit like growing your own garden or vegetables: it requires work and patience. While YunoHost aims to do all the hard work for you, self-hosting still requires that you take time to learn and configure a few things to setup your server properly. You will also need to perform maintenance tasks (such as upgrades) from time to time, or to ask for support if some things break. - **With great servers comes great responsibilities.** Operating a server means that you are responsible for the data you are hosting. Nobody will be able to recover them for you if they get lost. YunoHost provides backup features, which you should use regularly to backup the configurations and data you care about. You should also keep an eye on security news and recommendations so that your server or critical data don't get compromised. - **Quality and performance probably won't be as good as premium services.** YunoHost (and most of the applications packaged for it) are free and open-source software, developed by communities of people in their free time and on the basis of best effort. There is no absolute guarantee that software will work in every possible circumstance. The performance of your self-hosted server is also related to its CPU and RAM, and to the available internet connectivity. - diff --git a/selfhosting_ru.md b/pages/01.administrate/01.selfhosting/selfhosting.ru.md similarity index 89% rename from selfhosting_ru.md rename to pages/01.administrate/01.selfhosting/selfhosting.ru.md index 40f82c63..8453bd6c 100644 --- a/selfhosting_ru.md +++ b/pages/01.administrate/01.selfhosting/selfhosting.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 @@ * Вы - единственный хозяин ваших данных и сервисов; * Возможность децентрализации и использования распределенных сетей; -<img src="/images/networks.png" width=500> + #### Другие проекты, предназначенные для самостоятельного развертывания ##### В активной разработке diff --git a/whatsyunohost_ar.md b/pages/01.administrate/02.whatisyunohost/whatsyunohost.ar.md similarity index 71% rename from whatsyunohost_ar.md rename to pages/01.administrate/02.whatisyunohost/whatsyunohost.ar.md index d1776397..dc13bdf2 100644 --- a/whatsyunohost_ar.md +++ b/pages/01.administrate/02.whatisyunohost/whatsyunohost.ar.md @@ -1,17 +1,21 @@ -#<div dir="rtl">ماذا نعني بـ واي يونوهوست YunoHost ؟</div> +--- +title: ماذا نعني بـ واي يونوهوست YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + + -<div dir="rtl"> واي يونوهوست YunoHost هو **نظام لتشغيل الخوادم** صُمِّم لتسهيل الإستضافة الذاتية لخدمات الإنترنت. -هو مُرتكز و منسجم كافة الإنسجام مع توزيعة [غنو/لينكس ديبيان](https://debian.org). -</div> - -<img src="/images/debian-logo.png" width=100> +هو مُرتكز و منسجم كافة الإنسجام مع توزيعة <a href="https://debian.org">غنو/لينكس ديبيان</a>. --- -###<div dir="rtl"> خصائصه</div> +### خصائصه -<div dir="rtl"> - متعدد المستعملين مع تكامُل LDAP - متعدد النطاقات - خدمة البريد الإلكتروني @@ -20,68 +24,59 @@ - نظام للتطبيقات - نظام للنسخ الإحتياطي - نظام لإعادة توليد الإعدادات و الخدمات -</div> - -<img src="/images/YunoHost_logo_vertical.png" width=400> --- -###<div dir="rtl"> أصل فكرة المشروع</div> +### أصل فكرة المشروع + -<div dir="rtl"> تعود نشأة فكرة مشروع واي يونوهوست YunoHost إلى شهر فيفري مِن عام 2012 بعد محادثة بدأت على هذا الشكل تقريبًا : -</div> - <blockquote><p dir="rtl">« تبًا، لقد سئِمتُ مِن إعادة إعداد خادم البريد الإلكتروني ... Beudbeud، كيف قُمتَ بإعداد خادومك الجميل حول LDAP ؟ »</p> + + <blockquote>« تبًا، لقد سئِمتُ مِن إعادة إعداد خادم البريد الإلكتروني ... Beudbeud، كيف قُمتَ بإعداد خادومك الجميل حول LDAP ؟ » <small>Kload، فيفري 2012</small></blockquote> -<div dir="rtl"> 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. -</div> --- -###<div dir="rtl"> الهدف</div> -<div dir="rtl"> +### الهدف + يهدف واي يونوهوست YunoHost إلى تسهيل عملية تنصيب و تثبيت و إدارة أي خادمٍ لأكبر عدد ممكن مِن الناس و ذلك دون المساس بجودة و موثوقية البرمجيات. لم يُدَّخر أي جهد لتسهيل عملية التنصيب و الإنبساط وذلك على أكبر عدد ممكن مِن الأجهزة مهما اختلفت مميزات كل جهاز (في المنزل أو على خادوم إستضافة أو على خادوم شخصي إفتراضي) -</div> --- -###<div dir="rtl"> التسمية</div> +### التسمية -<div dir="rtl"> -**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) الذي يصف المعنى بالتقريب هو : -<div class="text-center"><img style="border-radius: 5px; box-shadow: 0 5px 15px rgba(0,0,0,0.15);" src="/images/dude_yunohost.jpg"></div> -</div> +**YunoHost** مُستمَدٌّ مِن لُغة الإنترنت العاميّة « Y U NO Host » و بالمعنى التقريبي « لماذا لا تستضيف نفسك بنفسك ». <a href="https://ar.m.wikipedia.org/wiki/%D9%85%D9%8A%D9%85_%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA">ميم الإنترنت</a> الذي يصف المعنى بالتقريب هو : + --- -###<div dir="rtl"> التطوير </div> +### التطوير 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) ». -</div> +لا تتردّدوا في زيارة صفحة « <a href="/contribute">ساهموا</a>». --- -###<div dir="rtl"> الأمان</div> +### الأمان + +لقد بُذِلت كل المجهودات مِن أجل تأمين واي يونوهوست YunoHost و **تعمية و تشفير البروتوكولات** . بإمكانكم الإطلاع على الشرح بتفاصيليه <a href="/security">هنا</a>. -لقد بُذِلت كل المجهودات مِن أجل تأمين واي يونوهوست YunoHost و **تعمية و تشفير البروتوكولات** . بإمكانكم الإطلاع على الشرح بتفاصيليه [هنا](/security). -</div> --- -###<div dir="rtl"> واي يونوهوست 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. -</div> + diff --git a/pages/01.administrate/02.whatisyunohost/whatsyunohost.de.md b/pages/01.administrate/02.whatisyunohost/whatsyunohost.de.md new file mode 100644 index 00000000..6ab27348 --- /dev/null +++ b/pages/01.administrate/02.whatisyunohost/whatsyunohost.de.md @@ -0,0 +1,56 @@ +--- +title: Was ist YunoHost? +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + + + +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** <small>(basierend auf LDAP)</small> ; +-  Verwalten Sie Ihre **Domainnamen** ; +-  Erstellen und Wiederherstellen von **Backups** ; +-  Stellen Sie über das **Benutzerportal** <small>(NGINX, SSOwat)</small> gleichzeitig eine Verbindung zu allen Apps her ; +-  Enthält einen **vollständigen E-Mail-Stack** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; +-  … sowie **einen Instant Messaging Server** <small>(XMPP)</small> ; +-  Verwaltet **SSL-Zertifikate** <small>(basierend auf Let's Encrypt)</small> ; +-  … und **Sicherheitssysteme** <small>(fail2ban, yunohost-firewall)</small> ; + +## Ursprung + +YunoHost wurde im Februar 2012 aus folgender Situation heraus erstellt: + + <blockquote><p>"Scheiße, ich bin zu faul, um meinen Mailserver neu zu konfigurieren ... Beudbeud, wie hast Du deinen kleinen Server mit LDAP zum Laufen gebracht?"</p><small> Kload, Februar 2012</small></blockquote> + +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): + + + + +Licence: CC-BY-SA 4.0 diff --git a/pages/01.administrate/02.whatisyunohost/whatsyunohost.es.md b/pages/01.administrate/02.whatisyunohost/whatsyunohost.es.md new file mode 100644 index 00000000..0a85df23 --- /dev/null +++ b/pages/01.administrate/02.whatisyunohost/whatsyunohost.es.md @@ -0,0 +1,57 @@ +--- +title: Qué es YunoHost? +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + + + +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 + +-  Basado en Debian ; +-  Administración mediante un **interfaz web simple y conciso** ; +-  Despliega las **aplicaciones en unos pocos clics** ; +-  añade **cuentas de usuario** <small>(gestionados por una agenda LDAP)</small>; +-  Administra los **nombres de dominio** ; +-  Crea y restaura las **copias de seguridad** ; +-  Conecta simultáneamente a todas las aplicaciones mediante un **portal de usuario** <small>(NGINX, SSOwat)</small> ; +-  Incluye un **servidor de correo electrónico completo** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; +-  … así como un **servidor de mensajería instanea** <small>(XMPP)</small> ; +-  Administra **certificados SSL** <small>(generados por Let's Encrypt)</small> ; +-  … y los **sistemas de seguridad** <small>(fail2ban, yunohost-firewall)</small> ; + +## Origen + +YunoHost se creó en Febrero de 2012 tras algo así: + + <blockquote><p>"¡Mierda, soy muy vago para reconfigurar mi servidor de correo!… Beudbeud, ¿Cómo hiciste para conectar tu pequeño servidor a LDAP?"</p> +<small>Kload, Febrero de 2012</small></blockquote> + +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: + + +## ¿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): + + + + +Licencia: CC-BY-SA 4.0 diff --git a/whatsyunohost_fr.md b/pages/01.administrate/02.whatisyunohost/whatsyunohost.fr.md similarity index 54% rename from whatsyunohost_fr.md rename to pages/01.administrate/02.whatisyunohost/whatsyunohost.fr.md index ede0061a..c140cb52 100644 --- a/whatsyunohost_fr.md +++ b/pages/01.administrate/02.whatisyunohost/whatsyunohost.fr.md @@ -1,27 +1,31 @@ -Qu'est-ce que YunoHost ? -======================== +--- +title: Qu'est-ce que YunoHost ? +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- -<img src="/images/YunoHost_logo_vertical.png" width=400> + 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 ---------------- +## Fonctionnalités -- <img src="/images/icon-debian.png" width=32 style="margin-right:5px"> basé sur Debian ; -- <img src="/images/icon-tools.png" width=32 style="margin-right:5px"> administration via une **interface web simple et claire** ; -- <img src="/images/icon-package.png" width=32 style="margin-right:5px"> déployez des **applications en quelques clics** ; -- <img src="/images/icon-users.png" width=32 style="margin-right:5px"> ajoutez des **utilisateurs** <small>(gérés via un annuaire LDAP)</small> ; -- <img src="/images/icon-globe.png" width=32 style="margin-right:5px"> gérez des **noms de domaine** ; -- <img src="/images/icon-medic.png" width=32 style="margin-right:5px"> créez et restaurez des **sauvegardes** ; -- <img src="/images/icon-door.png" width=32 style="margin-right:5px"> connexion simultanée à toutes les apps via un **portail utilisateur** <small>(nginx, SSOwat)</small> ; -- <img src="/images/icon-mail.png" width=32 style="margin-right:5px"> fourni avec un **serveur mail complet** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; -- <img src="/images/icon-messaging.png" width=32 style="margin-right:5px"> ... ainsi qu'un **serveur de messagerie instantanée** <small>(XMPP)</small> ; -- <img src="/images/icon-lock.png" width=32 style="margin-right:5px"> gère les **certificats SSL** <small>(basé sur Let's Encrypt)</small> ; -- <img src="/images/icon-shield.png" width=32 style="margin-right:5px"> … et des **systèmes de sécurité** <small>(fail2ban, yunohost-firewall)</small> ; +-  basé sur Debian ; +-  administration via une **interface web simple et claire** ; +-  déployez des **applications en quelques clics** ; +-  ajoutez des **utilisateurs** <small>(gérés via un annuaire LDAP)</small> ; +-  gérez des **noms de domaine** ; +-  créez et restaurez des **sauvegardes** ; +-  connexion simultanée à toutes les apps via un **portail utilisateur** <small>(nginx, SSOwat)</small> ; +-  fourni avec un **serveur mail complet** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; +-  ... ainsi qu'un **serveur de messagerie instantanée** <small>(XMPP)</small> ; +-  gère les **certificats SSL** <small>(basé sur Let's Encrypt)</small> ; +-  ... et des **systèmes de sécurité** <small>(Fail2Ban, yunohost-firewall)</small> ; -Origine -------- +## Origine YunoHost est un projet né en février 2012 à la suite d’à peu près ça : @@ -33,10 +37,9 @@ 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 : -<div class="text-center"><img style="border-radius: 5px; box-shadow: 0 5px 15px rgba(0,0,0,0.15);" src="/images/dude_yunohost.jpg"></div> + -Qu’est-ce que YunoHost n’est pas ? ----------------------------------- +## Qu’est-ce que YunoHost n’est pas ? Même si YunoHost est multi-domaine et multi-utilisateur, il reste **inapproprié pour un usage mutualisé**. @@ -44,15 +47,11 @@ Premièrement parce que le logiciel est trop jeune, donc non-testé et non-optim Vous pouvez héberger vos amis, votre famille ou votre entreprise sans problème, mais vous devez **avoir confiance** en vos utilisateurs, et ils doivent de la même façon avoir confiance en vous. Si vous souhaitez tout de même fournir des services YunoHost à des inconnus, **un VPS entier par utilisateur** sera la meilleure solution. -Logo ----- +## Logo -Logo Yunohost noir et blanc réalisé par ToZz (400 × 400 px) : +Logo YunoHost noir et blanc réalisé par ToZz (400 × 400 px) : -<a href="/images/ynh_logo_black_300dpi.png"><img src="/images/ynh_logo_black_300dpi.png" width=220></a> - -<a href="/images/ynh_logo_white_300dpi.png"><img src="/images/ynh_logo_white_300dpi.png" width=220></a> - -Cliquer pour télécharger. +[](image://ynh_logo_black_300dpi.png) +[](image://ynh_logo_white_300dpi.png) Licence: CC-BY-SA 4.0 diff --git a/pages/01.administrate/02.whatisyunohost/whatsyunohost.it.md b/pages/01.administrate/02.whatisyunohost/whatsyunohost.it.md new file mode 100644 index 00000000..f75f3c49 --- /dev/null +++ b/pages/01.administrate/02.whatisyunohost/whatsyunohost.it.md @@ -0,0 +1,57 @@ +--- +title: Cosa è YunoHost? +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + + + +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 + +-  Based on Debian; +-  Administer your server through a **friendly web interface** ; +-  Deploy **apps in just a few clicks**; +-  Manage **users** <small>(based on LDAP)</small>; +-  Manage **domain names**; +-  Create and restore **backups**; +-  Connect to all apps simultaneously through the **user portal** <small>(NGINX, SSOwat)</small>; +-  Includes a **full e-mail stack** <small>(Postfix, Dovecot, Rspamd, DKIM)</small>; +- ... as well as **an instant messaging server** <small>(XMPP)</small>; +-  Manages **SSL certificates** <small>(based on Let's Encrypt)</small> ; +- ... and **security systems** <small>(Fail2ban, yunohost-firewall)</small>; + +## Origin + +YunoHost was created in February 2012 after something like this: + +<blockquote><p>"Shit, I'm too lazy to reconfigure my mail server... Beudbeud, how were you able to get your little server running with LDAP?"</p> +<small>Kload, February 2012</small></blockquote> + +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): + + + + +Licence: CC-BY-SA 4.0 diff --git a/pages/01.administrate/02.whatisyunohost/whatsyunohost.md b/pages/01.administrate/02.whatisyunohost/whatsyunohost.md new file mode 100644 index 00000000..7c4657a2 --- /dev/null +++ b/pages/01.administrate/02.whatisyunohost/whatsyunohost.md @@ -0,0 +1,57 @@ +--- +title: What is YunoHost? +template: docs +taxonomy: + category: docs +routes: + default: '/whatsyunohost' +--- + + + +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; +-  Administer your server through a **friendly web interface** ; +-  Deploy **apps in just a few clicks**; +-  Manage **users** <small>(based on LDAP)</small>; +-  Manage **domain names**; +-  Create and restore **backups**; +-  Connect to all apps simultaneously through the **user portal** <small>(NGINX, SSOwat)</small>; +-  Includes a **full e-mail stack** <small>(Postfix, Dovecot, Rspamd, DKIM)</small>; +- ... as well as **an instant messaging server** <small>(XMPP)</small>; +-  Manages **SSL certificates** <small>(based on Let's Encrypt)</small> ; +- ... and **security systems** <small>(Fail2ban, yunohost-firewall)</small>; + +## Origin + +YunoHost was created in February 2012 after something like this: + +<blockquote><p>"Shit, I'm too lazy to reconfigure my mail server... Beudbeud, how were you able to get your little server running with LDAP?"</p> +<small>Kload, February 2012</small></blockquote> + +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): + + + + +Licence: CC-BY-SA 4.0 diff --git a/pages/01.administrate/03.tryyunohost/try.ar.md b/pages/01.administrate/03.tryyunohost/try.ar.md new file mode 100644 index 00000000..3ee773d8 --- /dev/null +++ b/pages/01.administrate/03.tryyunohost/try.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.administrate/03.tryyunohost/try.ca.md b/pages/01.administrate/03.tryyunohost/try.ca.md new file mode 100644 index 00000000..2f285899 --- /dev/null +++ b/pages/01.administrate/03.tryyunohost/try.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.administrate/03.tryyunohost/try.de.md b/pages/01.administrate/03.tryyunohost/try.de.md new file mode 100644 index 00000000..fbcfb2a1 --- /dev/null +++ b/pages/01.administrate/03.tryyunohost/try.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.administrate/03.tryyunohost/try.es.md b/pages/01.administrate/03.tryyunohost/try.es.md new file mode 100644 index 00000000..0709a18e --- /dev/null +++ b/pages/01.administrate/03.tryyunohost/try.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.administrate/03.tryyunohost/try.fr.md b/pages/01.administrate/03.tryyunohost/try.fr.md new file mode 100644 index 00000000..7d81bedf --- /dev/null +++ b/pages/01.administrate/03.tryyunohost/try.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.administrate/03.tryyunohost/try.it.md b/pages/01.administrate/03.tryyunohost/try.it.md new file mode 100644 index 00000000..916e4770 --- /dev/null +++ b/pages/01.administrate/03.tryyunohost/try.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.administrate/03.tryyunohost/try.md b/pages/01.administrate/03.tryyunohost/try.md new file mode 100644 index 00000000..0496de0b --- /dev/null +++ b/pages/01.administrate/03.tryyunohost/try.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/howtohostyourself_de.md b/pages/01.administrate/04.howtohostyourself/howtohostyourself.de.md similarity index 93% rename from howtohostyourself_de.md rename to pages/01.administrate/04.howtohostyourself/howtohostyourself.de.md index d764b8e3..edc71de3 100644 --- a/howtohostyourself_de.md +++ b/pages/01.administrate/04.howtohostyourself/howtohostyourself.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 @@ -25,7 +32,7 @@ Sie können einen virtuellen privaten Server oder eine dedizierte Maschine von [ ### Summary -<table class="table"> +<table> <thead> <tr> <th></th> @@ -60,7 +67,7 @@ Sie können einen virtuellen privaten Server oder eine dedizierte Maschine von [ </tr> <tr> <td style="text-align:center;">Mögliche ISP-Einschränkungen</td> - <td style="text-align:center;" class="danger">Ja <br><small>(siehe [hier](/isp))</small></td> + <td style="text-align:center;" class="danger">Ja <br><small>(siehe <a href="/isp">hier</a>)</small></td> <td style="text-align:center;" class="success">Per VPN umgangen</td> <td style="text-align:center;" class="success">Normalerweise nein</td> </tr> diff --git a/pages/01.administrate/04.howtohostyourself/howtohostyourself.es.md b/pages/01.administrate/04.howtohostyourself/howtohostyourself.es.md new file mode 100644 index 00000000..1a7e2a13 --- /dev/null +++ b/pages/01.administrate/04.howtohostyourself/howtohostyourself.es.md @@ -0,0 +1,90 @@ +--- +title: Alegir son manera 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 sevidor 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. + +- **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 + +<table> + <thead> + <tr> + <th></th> + <th style="text-align:center;">En casa<br><small>(ej. ARM, viejo PC)</small></th> + <th style="text-align:center;">En casa<br>pasando por la VPN</th> + <th style="text-align:center;">En remoto<br>(VPS o dedicado)</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align:center;">Coste material</td> + <td style="text-align:center;" class="warning" colspan="2">En torno a ~50€<br><small>(ej. una Raspberry Pi)</small></td> + <td style="text-align:center;" class="success">Ninguno</td> + </tr> + <tr> + <td style="text-align:center;">Coste mensual</td> + <td style="text-align:center;" class="success">Despreciable<br><small>(electricidad)</small></td> + <td style="text-align:center;" class="warning">En torno a ~5€ <br><small>(VPN)</small></td> + <td style="text-align:center;" class="warning">Desde ~3€ <br><small>(VPS)</small></td> + </tr> + <tr> + <td style="text-align:center;">Control físico<br>de la máquina</td> + <td style="text-align:center;" class="success">Si</td> + <td style="text-align:center;" class="success">Si</td> + <td style="text-align:center;" class="danger">No</td> + </tr> + <tr> + <td style="text-align:center;">Enrutamiento manual<br>de puertos</td> + <td style="text-align:center;" class="warning">Si</td> + <td style="text-align:center;" class="success">No</td> + <td style="text-align:center;" class="success">No</td> + </tr> + <tr> + <td style="text-align:center;">Posibilidad de limitación <br>por el proveedor de internet</td> + <td style="text-align:center;" class="danger">Si <br><small>(ver <a href="/isp">Proveedores</a>)</small></td> + <td style="text-align:center;" class="success">Esquivados mediante VPN</td> + <td style="text-align:center;" class="success">Generalemente no</td> + </tr> + <tr> + <td style="text-align:center;">CPU</td> + <td style="text-align:center;" class="warning" colspan="2">Generalemente ~1 GHz</td> + <td style="text-align:center;" class="success">~2 GHz <br><small>(droplet Digital Ocean)</small></td> + </tr> + <tr> + <td style="text-align:center;">RAM</td> + <td style="text-align:center;" class="warning" colspan="2">Desde 500M hasta 8G</td> + <td style="text-align:center;" class="warning">Depende del precio</td> + </tr> + <tr> + <td style="text-align:center;">Conectividad a internet</td> + <td style="text-align:center;" class="warning" colspan="2">Depende de tu conexión</td> + <td style="text-align:center;" class="success">Generalemente buena</td> + </tr> + </tbody> +</table> \ No newline at end of file diff --git a/howtohostyourself_fr.md b/pages/01.administrate/04.howtohostyourself/howtohostyourself.fr.md similarity index 84% rename from howtohostyourself_fr.md rename to pages/01.administrate/04.howtohostyourself/howtohostyourself.fr.md index 97360a88..ccebf174 100644 --- a/howtohostyourself_fr.md +++ b/pages/01.administrate/04.howtohostyourself/howtohostyourself.fr.md @@ -1,4 +1,11 @@ -# Choisir son mode d'autohébergement +--- +title: Choisir son mode 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,11 +14,11 @@ 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. @@ -25,7 +32,7 @@ Vous pouvez louer un serveur privé virtuel ou une machine dédiée à des hébe ### Résumé -<table class="table"> +<table> <thead> <tr> <th></th> @@ -59,8 +66,8 @@ Vous pouvez louer un serveur privé virtuel ou une machine dédiée à des hébe <td style="text-align:center;" class="success">Non</td> </tr> <tr> - <td style="text-align:center;">Limitation possibles <br >par le FAI</td> - <td style="text-align:center;" class="danger">Oui <br><small>(voir [ici](/isp))</small></td> + <td style="text-align:center;">Limitations possibles <br >par le FAI</td> + <td style="text-align:center;" class="danger">Oui <br><small>(voir <a href="/isp">ici</a>)</small></td> <td style="text-align:center;" class="success">Contournées par le VPN</td> <td style="text-align:center;" class="success">Généralement non</td> </tr> diff --git a/pages/01.administrate/04.howtohostyourself/howtohostyourself.it.md b/pages/01.administrate/04.howtohostyourself/howtohostyourself.it.md new file mode 100644 index 00000000..559a06b9 --- /dev/null +++ b/pages/01.administrate/04.howtohostyourself/howtohostyourself.it.md @@ -0,0 +1,90 @@ +--- +title: Scegliere il proprio 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 + +- **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 + +<table> + <thead> + <tr> + <th></th> + <th style="text-align:center;">In casa<br><small>(e.g. scheda ARM, vecchio computer)</small></th> + <th style="text-align:center;">In casa<br>dietro una VPN</th> + <th style="text-align:center;">Su un server distante<br>(VPS o dedicato)</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align:center;">Costo del materiale</td> + <td style="text-align:center;" class="warning" colspan="2">Circa 50€ <br><small>(e.g. un Raspberry Pi)</small></td> + <td style="text-align:center;" class="success">Nessuno</td> + </tr> + <tr> + <td style="text-align:center;">Costo mensile</td> + <td style="text-align:center;" class="success">Trascurabile<br><small>(elettricità)</small></td> + <td style="text-align:center;" class="warning">Circa 5€ <br><small>(VPN)</small></td> + <td style="text-align:center;" class="warning">A partire da ~3€ <br><small>(VPS)</small></td> + </tr> + <tr> + <td style="text-align:center;">Controllo fisico<br>sulla macchina</td> + <td style="text-align:center;" class="success">Si</td> + <td style="text-align:center;" class="success">Si</td> + <td style="text-align:center;" class="danger">No</td> + </tr> + <tr> + <td style="text-align:center;">Routing manuale <br>delle porte</td> + <td style="text-align:center;" class="warning">Si</td> + <td style="text-align:center;" class="success">No</td> + <td style="text-align:center;" class="success">No</td> + </tr> + <tr> + <td style="text-align:center;">Possibili limitazioni <br >dall'ISP</td> + <td style="text-align:center;" class="danger">Si <br><small>(vedere <a href="/isp">qui</a>)</small></td> + <td style="text-align:center;" class="success">Aggirati dalla VPN</td> + <td style="text-align:center;" class="success">Generalmente no</td> + </tr> + <tr> + <td style="text-align:center;">CPU</td> + <td style="text-align:center;" class="warning" colspan="2">Generalmente ~1 GHz</td> + <td style="text-align:center;" class="success">~2 GHz <br><small>(Digital Ocean droplet)</small></td> + </tr> + <tr> + <td style="text-align:center;">RAM</td> + <td style="text-align:center;" class="warning" colspan="2">Generalmente 500 Mb o 1 Gb</td> + <td style="text-align:center;" class="warning">In relazione al costo del server</td> + </tr> + <tr> + <td style="text-align:center;">Connettività internet</td> + <td style="text-align:center;" class="warning" colspan="2">Dipende dalla connessione di casa</td> + <td style="text-align:center;" class="success">Generalmente buona</td> + </tr> + </tbody> +</table> diff --git a/howtohostyourself.md b/pages/01.administrate/04.howtohostyourself/howtohostyourself.md similarity index 94% rename from howtohostyourself.md rename to pages/01.administrate/04.howtohostyourself/howtohostyourself.md index 98dd3363..1be0dd10 100644 --- a/howtohostyourself.md +++ b/pages/01.administrate/04.howtohostyourself/howtohostyourself.md @@ -1,4 +1,11 @@ -# How to host yourself ? +--- +title: How to host yourself? +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 @@ -25,7 +32,7 @@ You can rent a virtual private server or a dedicated machine from [associative]( ### Summary -<table class="table"> +<table> <thead> <tr> <th></th> @@ -60,7 +67,7 @@ You can rent a virtual private server or a dedicated machine from [associative]( </tr> <tr> <td style="text-align:center;">Possible ISP limitations</td> - <td style="text-align:center;" class="danger">Yes <br><small>(see [here](/isp))</small></td> + <td style="text-align:center;" class="danger">Yes <br><small>(see <a href="/isp">here</a>)</small></td> <td style="text-align:center;" class="success">Bypassed by VPN</td> <td style="text-align:center;" class="success">Typically no</td> </tr> @@ -80,4 +87,4 @@ You can rent a virtual private server or a dedicated machine from [associative]( <td style="text-align:center;" class="success">Typically pretty good</td> </tr> </tbody> -</table> +</table> \ No newline at end of file diff --git a/pages/01.administrate/05.install/02.findinglocalip/finding_the_local_ip.de.md b/pages/01.administrate/05.install/02.findinglocalip/finding_the_local_ip.de.md new file mode 100644 index 00000000..0c4d9b26 --- /dev/null +++ b/pages/01.administrate/05.install/02.findinglocalip/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. + + + +[/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/01.administrate/05.install/02.findinglocalip/finding_the_local_ip.fr.md b/pages/01.administrate/05.install/02.findinglocalip/finding_the_local_ip.fr.md new file mode 100644 index 00000000..d6f28e4e --- /dev/null +++ b/pages/01.administrate/05.install/02.findinglocalip/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. + + + +[/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/01.administrate/05.install/02.findinglocalip/finding_the_local_ip.md b/pages/01.administrate/05.install/02.findinglocalip/finding_the_local_ip.md new file mode 100644 index 00000000..c7b608fe --- /dev/null +++ b/pages/01.administrate/05.install/02.findinglocalip/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. + + + +[/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/01.administrate/05.install/03.isp_box_config/isp_box_config.de.md b/pages/01.administrate/05.install/03.isp_box_config/isp_box_config.de.md new file mode 100644 index 00000000..abe7f8b1 --- /dev/null +++ b/pages/01.administrate/05.install/03.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"][/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 <small>(HTTP)</small>, 443 <small>(HTTPS)</small> +* [SSH](/ssh): 22 +* [XMPP](/XMPP): 5222 <small>(clients)</small>, 5269 <small>(servers)</small> +* [Email](/email): 25, 587 <small>(SMTP)</small>, 993 <small>(IMAP)</small> + +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/01.administrate/05.install/03.isp_box_config/isp_box_config.es.md similarity index 66% rename from isp_box_config_es.md rename to pages/01.administrate/05.install/03.isp_box_config/isp_box_config.es.md index 3d5b93f3..e8fc229b 100644 --- a/isp_box_config_es.md +++ b/pages/01.administrate/05.install/03.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"][/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 @@ -26,16 +41,14 @@ En general una dirección IP local se parece a `192.168.xx.yy`, o `10.0.xx.yy`. En la interfaz de administración de tu router/caja/box, tienes que encontrar una categoría que debe llamarse 'Configuración del router', o 'Redirección de puertos'. El nombre difiere según el tipo o la marca del router / de la caja Internet... -Luego tienes que redirigir cada uno de los puertos listados a continuación hacia la IP local de tu router para que los varios servicios de Yunohost funcionen. Para cada uno de ellos, una redirección 'TCP' es necesaria. En algunas interfaces, tal vez encontrarás referencias a un puerto 'externo' y un puerto 'interno' : en nuestro caso, se trata del mismo número de puerto, que sea interno o externo. +Luego tienes que redirigir cada uno de los puertos listados a continuación hacia la IP local de tu router para que los varios servicios de YunoHost funcionen. Para cada uno de ellos, una redirección 'TCP' es necesaria. En algunas interfaces, tal vez encontrarás referencias a un puerto 'externo' y un puerto 'interno' : en nuestro caso, se trata del mismo número de puerto, que sea interno o externo. * Web: 80 <small>(HTTP)</small>, 443 <small>(HTTPS)</small> * [SSH](/ssh): 22 * [XMPP](/XMPP): 5222 <small>(clients)</small>, 5269 <small>(servers)</small> * [Email](/email): 25, 587 <small>(SMTP)</small>, 993 <small>(IMAP)</small> -<div class="alert alert-warning" markdown="1"> -<span class="glyphicon glyphicon-warning-sign"></span> 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. -</div> +! [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/01.administrate/05.install/03.isp_box_config/isp_box_config.fr.md similarity index 51% rename from isp_box_config_fr.md rename to pages/01.administrate/05.install/03.isp_box_config/isp_box_config.fr.md index 13d07347..4ab88031 100644 --- a/isp_box_config_fr.md +++ b/pages/01.administrate/05.install/03.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"][/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 <small>(HTTP)</small>, 443 <small>(HTTPS)</small> * [SSH](/ssh): 22 -* [XMPP](/XMPP): 5222 <small>(clients)</small>, 5269 <small>(servers)</small> +* [XMPP](/XMPP): 5222 <small>(clients)</small>, 5269 <small>(serveurs)</small> * [Email](/email): 25, 587 <small>(SMTP)</small>, 993 <small>(IMAP)</small> -<div class="alert alert-warning" markdown="1"> -<span class="glyphicon glyphicon-warning-sign"></span> 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. -</div> +! [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/01.administrate/05.install/03.isp_box_config/isp_box_config.md similarity index 69% rename from isp_box_config.md rename to pages/01.administrate/05.install/03.isp_box_config/isp_box_config.md index 93247eb6..9b64dfd7 100644 --- a/isp_box_config.md +++ b/pages/01.administrate/05.install/03.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"][/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. -<div class="alert alert-warning" markdown="1"> -<span class="glyphicon glyphicon-warning-sign"></span> 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. -</div> +! [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/01.administrate/05.install/04.dns/dns_config.de.md b/pages/01.administrate/05.install/04.dns/dns_config.de.md new file mode 100644 index 00000000..3680a41f --- /dev/null +++ b/pages/01.administrate/05.install/04.dns/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/01.administrate/05.install/04.dns/dns_config.es.md similarity index 92% rename from dns_config_es.md rename to pages/01.administrate/05.install/04.dns/dns_config.es.md index 808be678..c09c730e 100644 --- a/dns_config_es.md +++ b/pages/01.administrate/05.install/04.dns/dns_config.es.md @@ -1,8 +1,17 @@ -# 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. -Si utilizas un [dominio automático](/dns_nohost_me) provecho por el Proyecto Yunohost, la configuración debería ser automática. Si quieres utilizar tu propio nombre de dominio (comprado a un registrar), hay que configurar manualmente tu proprio nombre de dominio vía la interfaz de tu registrar. +Si utilizas un [dominio automático](/dns_nohost_me) provecho por el Proyecto YunoHost, la configuración debería ser automática. Si quieres utilizar tu propio nombre de dominio (comprado a un registrar), hay que configurar manualmente tu proprio nombre de dominio vía la interfaz de tu registrar. ## Configuración DNS recomendada @@ -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/01.administrate/05.install/04.dns/dns_config.fr.md similarity index 84% rename from dns_config_fr.md rename to pages/01.administrate/05.install/04.dns/dns_config.fr.md index c3019156..7e725afe 100644 --- a/dns_config_fr.md +++ b/pages/01.administrate/05.install/04.dns/dns_config.fr.md @@ -1,13 +1,22 @@ -# 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. -Si vous utilisez un [domaine automatique](/dns_nohost_me) fourni par le Projet Yunohost, +Si vous utilisez un [domaine automatique](/dns_nohost_me) fourni par le Projet YunoHost, la configuration devrait être faite automatiquement. Si vous utilisez votre propre nom de domaine (e.g. acheté chez un registrar), il vous faut configurer manuellement votre domaine via l'interface de votre registrar. @@ -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 @@ -103,7 +112,7 @@ $ nslookup 111.222.333.444 444.333.222.111.in-addr.arpa name = domain.tld. ``` -Le système de diagnostique présent dans l'interface d'administration fait cette vérification automatiquement (dans la section Email) +Le système de diagnostic présent dans l'interface d'administration fait cette vérification automatiquement (dans la section Email) ### IP Dynamique diff --git a/dns_config.md b/pages/01.administrate/05.install/04.dns/dns_config.md similarity index 95% rename from dns_config.md rename to pages/01.administrate/05.install/04.dns/dns_config.md index 7ec00ca4..01c0c756 100644 --- a/dns_config.md +++ b/pages/01.administrate/05.install/04.dns/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/01.administrate/05.install/06.certificate/certificate.de.md b/pages/01.administrate/05.install/06.certificate/certificate.de.md new file mode 100644 index 00000000..acca9712 --- /dev/null +++ b/pages/01.administrate/05.install/06.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: + + + +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'. + + + +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. + + + +Wenn die Domain korrekt konfiguriert ist, dann ist es möglich +mit dem grünen Knopf ein Let's Encrypt-Zertifikat einzusetzen. + + + +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. + + + +#### 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/01.administrate/05.install/06.certificate/certificate.es.md similarity index 87% rename from certificate_es.md rename to pages/01.administrate/05.install/06.certificate/certificate.es.md index f68b07e6..3d1b2d80 100644 --- a/certificate_es.md +++ b/pages/01.administrate/05.install/06.certificate/certificate.es.md @@ -1,17 +1,24 @@ -# 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. +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 : -<img src="/images/postinstall_error.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> + Esta pantalla equivale a que te pidan ** ¿ Confías en el servidor que aloja este sitio ? ***. Esto puede asustar tu usuarios (con toda la razón). Para evitar esta confusión, es posible obtener un certificado, reconocido directamente por los navegadores, firmado por una autoridad « conocida » : **Let's Encrypt**, **Gandi**, **RapidSSL**, **StartSSL**, **Cacert**. -**Let's Encrypt** propone certificados gratuitos. Desde la versión 2.5, Yunohost permite instalar directamente tales certificados desde la interfaz de administración o la línea de comandos. El resto del documento detalla la instalación y la firma de este tipo de certificado. También puedes [instalar un certificado de otra autoridad que Let's Encrypt](/certificate_custom). +**Let's Encrypt** propone certificados gratuitos. Desde la versión 2.5, YunoHost permite instalar directamente tales certificados desde la interfaz de administración o la línea de comandos. El resto del documento detalla la instalación y la firma de este tipo de certificado. También puedes [instalar un certificado de otra autoridad que Let's Encrypt](/certificate_custom). ### Instalar un certificado Let's Encrypt @@ -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'. - + 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. - + Si tu dominio está configurado correctamente, es posible instalar un certificado Let's Encrypt vía el botón verde. - + 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. - + #### Vía línea de comandos @@ -69,9 +76,7 @@ Si, después de una manipulación incorrecta, un certificado se encuentra en una yunohost domain cert-install tu.dominio.tld --self-signed --force ``` -Si Yunohost te dice que tu dominio está mal configurado mientras que has verificado tu configuración DNS y que tienes acceso a tu servidor en HTTP desde afuera, puedes intentar : +Si YunoHost te dice que tu dominio está mal configurado mientras que has verificado tu configuración DNS y que tienes acceso a tu servidor en HTTP desde afuera, puedes intentar : - de añadir una línea `127.0.0.1 tu.dominio.tld` al archivo `/etc/hosts` en tu servidor ; - si la instalación todavía no funciona, desactiva las verificaciones añadiendo `--no-checks` al comando `cert-install`. - - diff --git a/certificate_fr.md b/pages/01.administrate/05.install/06.certificate/certificate.fr.md similarity index 82% rename from certificate_fr.md rename to pages/01.administrate/05.install/06.certificate/certificate.fr.md index 6aeef3d5..40a531e0 100644 --- a/certificate_fr.md +++ b/pages/01.administrate/05.install/06.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 : -<img src="/images/postinstall_error.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> + 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'. - + 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é. - + Si votre domaine est correctement configuré, il vous est alors possible de passer à un certificat Let's Encrypt via le bouton vert. - + 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. - + #### 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/01.administrate/05.install/06.certificate/certificate.md similarity index 52% rename from certificate.md rename to pages/01.administrate/05.install/06.certificate/certificate.md index 49b514fd..2c6144cd 100644 --- a/certificate.md +++ b/pages/01.administrate/05.install/06.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,51 +13,41 @@ YunoHost provides a **self-signed** certificate, it means that your server guara In practice, visitors will see a screen list this: -<img src="/images/postinstall_error.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> + Which basically asks the visitor : **"Do you trust the server hosting this website?"**. This can rightfully frighten a lot of people. -To avoid this confusion, it's possible to get a certificate signed a known -authority named **Let's Encrypt** which provide free certificates directly -recognized by browsers. YunoHost allows to directly install this certificate -from the web administration interface or from the command line. +To avoid this confusion, it's possible to get a certificate signed a known authority named **Let's Encrypt** which provide free certificates directly recognized by browsers. YunoHost allows to directly install this certificate from the web administration interface or from the command line. ### Install a Let's Encrypt certificate -Before attempting to install a Let's Encrypt certificate, you should make sure -that your DNS is correctly configured (your.domain.tld should point to -your server's IP) and that your domain is accessible through HTTP from outside -your local network (i.e. at least port 80 should be forwarded to your server). +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 : +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: - + -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. +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. - + -If your domain is correctly configured, it is then possible to install the -Let's Encrypt certificate via the green button. +If your domain is correctly configured, it is then possible to install the Let's Encrypt certificate via the green button. - + -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. +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. - + -#### From the command line interface +[/ui-tab] +[ui-tab title="From the command line"] Connect to your server through SSH. -You can check the status of your current certificate with : +You can check the status of your current certificate with: ```bash yunohost domain cert-status your.domain.tld @@ -69,24 +66,21 @@ Success! The SSOwat configuration has been generated Success! Successfully installed Let's Encrypt certificate for domain DOMAIN.TLD! ``` -Once this is done, you can check that the certificate is live via your -browser by going to your domain in HTTPS. The certificate will automatically -be renewed every three months. +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 : +If due to some bad tweaking, your certificate ends up in a bad state (e.g. lost the certificate or unable to read the files), you should be able to clean the situation by regenerating a self-signed certificate: ```bash yunohost domain cert-install your.domain.tld --self-signed --force ``` -If YunoHost thinks that your domain is badly configured despite the fact that -you checked the DNS configuration and you have access in HTTP to your server -from outside your local network, then you can : +If YunoHost thinks that your domain is badly configured despite the fact that you checked the DNS configuration and you have access in HTTP to your server from outside your local network, then you can: -- add a line `127.0.0.1 your.domain.tld` to the file `/etc/hosts` on your server ; +- add a line `127.0.0.1 your.domain.tld` to the file `/etc/hosts` on your server; - if the certificate installation still doesn't work, you can disable the checks with `--no-checks` after the `cert-install` command. diff --git a/images_ar.md b/pages/01.administrate/05.install/10.images/images.ar.md similarity index 58% rename from images_ar.md rename to pages/01.administrate/05.install/10.images/images.ar.md index f9213a43..9ef16d52 100644 --- a/images_ar.md +++ b/pages/01.administrate/05.install/10.images/images.ar.md @@ -1,7 +1,16 @@ -# الصور +--- +title: الصور +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- +<div class="hardware-image"> <div id="cards-list"> </div> +</div> <script type="text/template" id="image-template"> <div id="{id}" class="card panel panel-default"> @@ -9,12 +18,12 @@ <h3>{name}</h3> <div class="card-comment">{comment}</div> <div class="card-desc text-center"> -<img src="/images/{image}" height=100 style="vertical-align:middle"> +<img src="/user/images/{image}" height=100 style="vertical-align:middle"> </div> </div> - <div class="annotations"> - <div class="col-sm-6 annotation"><a href="{file}.sha256sum"><span class="glyphicon glyphicon-barcode" aria-hidden="true"></span> Checksum</a></div> - <div class="col-sm-6 annotation"><a href="{file}.sig"><span class="glyphicon glyphicon-tag" aria-hidden="true"></span> Signature</a></div> + <div class="annotations flex-container"> + <div class="flex-child annotation"><a href="{file}.sha256sum">[fa=barcode] Checksum</a></div> + <div class="flex-child annotation"><a href="{file}.sig">[fa=tag] Signature</a></div> </div> <div class="btn-group" role="group"> <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12"><span class="glyphicon glyphicon-download-alt" aria-hidden="true"></span> تنزيل <small>{version}</small></a> @@ -22,60 +31,6 @@ </div> </script> -<style> -/* -############################################################################### - Style sheet for the cards -############################################################################### -*/ -#cards-list:after { - content:''; - display:block; - clear: both; -} - -.card { - margin-bottom:20px; - width:270px; - float:left; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; -} - -.card .panel-body > h3 { - margin-top:0; - margin-bottom:5px; - font-size:1.2em; -} - -.card-desc { - height:100px; - overflow: hidden; -} - -.card .btn-group { - width:100%; - margin-left: 0px; -} -.card > .btn-group > .btn{ - border-bottom:0; -} -.card > .btn-group { - border-left:0; - border-top-left-radius:0; - border-top-right-radius:0; - margin-left: 0px; -} -.card-comment { - font-size: 0.8em; - margin-top:-5px; -} -.card > .annotations { - text-align:center; - font-size:small; -} -</style> <script> /* diff --git a/pages/01.administrate/05.install/10.images/images.de.md b/pages/01.administrate/05.install/10.images/images.de.md new file mode 100644 index 00000000..7da3a80a --- /dev/null +++ b/pages/01.administrate/05.install/10.images/images.de.md @@ -0,0 +1,79 @@ +--- +title: Vorinstallierte Images +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- + +<span class="javascriptDisclaimer"> +Für diese Seite muss JavaScript aktiviert sein, damit sie korrekt angezeigt werden kann :s. +<br/> +<br/> +</span> + +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. + +<div class="hardware-image"> +<div id="cards-list"> +</div> +</div> + +<script type="text/template" id="image-template"> +<div id="{id}" class="card panel panel-default"> + <div class="panel-body text-center"> + <h3>{name}</h3> + <div class="card-comment">{comment}</div> + <div class="card-desc text-center"> +<img src="/user/images/{image}" height=100 style="vertical-align:middle"> + </div> + </div> + <div class="annotations flex-container"> + <div class="flex-child annotation"><a href="{file}.sha256sum">[fa=barcode] Checksum</a></div> + <div class="flex-child annotation"><a href="{file}.sig">[fa=tag] Signature</a></div> + </div> + <div class="btn-group" role="group"> + <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12">[fa=download] Download <small>{version}</small></a> + </div> +</div> +</script> + +<script> +/* +############################################################################### + Script that loads the infos from JavaScript and creates the corresponding + cards +############################################################################### +*/ +$(document).ready(function () { + + $(".javascriptDisclaimer").hide(); + + console.log("in load"); + $.getJSON('https://build.yunohost.org/images.json', function (images) { + $.each(images, function(k, infos) { + // Fill the template + html = $('#image-template').html() + .replace('{id}', infos.id) + .replace('{name}', infos.name) + .replace('{comment}', infos.comment || " ") + .replace('{image}', infos.image) + .replace('{version}', infos.version); + + if (infos.file.startsWith("http")) + html = html.replace(/{file}/g, infos.file); + else + html = html.replace(/{file}/g, "https://build.yunohost.org/"+infos.file); + + if ((typeof(infos.has_sig_and_sums) !== 'undefined') && infos.has_sig_and_sums == false) + { + var $html = $(html); + $html.find(".annotations").html(" "); + html = $html[0]; + } + $('#cards-list').append(html); + }); + }); +}); +</script> diff --git a/images_es.md b/pages/01.administrate/05.install/10.images/images.es.md similarity index 60% rename from images_es.md rename to pages/01.administrate/05.install/10.images/images.es.md index 2023334b..e2a89e32 100644 --- a/images_es.md +++ b/pages/01.administrate/05.install/10.images/images.es.md @@ -1,4 +1,11 @@ -# Imagenes +--- +title: Imagenes +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- <span class="javascriptDisclaimer"> Esta página requiere que Javascript esté instalado par aparecer correctamente :s. @@ -6,10 +13,12 @@ Esta página requiere que Javascript esté instalado par aparecer correctamente <br/> </span> -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 ! +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 ! +<div class="hardware-image"> <div id="cards-list"> </div> +</div> <script type="text/template" id="image-template"> <div id="{id}" class="card panel panel-default"> @@ -17,12 +26,12 @@ N.B. : Incluso si la imagen no corresponde con la última versión de Yunohost, <h3>{name}</h3> <div class="card-comment">{comment}</div> <div class="card-desc text-center"> -<img src="/images/{image}" height=100 style="vertical-align:middle"> +<img src="/user/images/{image}" height=100 style="vertical-align:middle"> </div> </div> - <div class="annotations"> - <div class="col-sm-6 annotation"><a href="{file}.sha256sum"><span class="glyphicon glyphicon-barcode" aria-hidden="true"></span> Checksum</a></div> - <div class="col-sm-6 annotation"><a href="{file}.sig"><span class="glyphicon glyphicon-tag" aria-hidden="true"></span> Signature</a></div> + <div class="annotations flex-container"> + <div class="flex-child annotation"><a href="{file}.sha256sum">[fa=barcode] Checksum</a></div> + <div class="flex-child annotation"><a href="{file}.sig">[fa=tag] Signature</a></div> </div> <div class="btn-group" role="group"> <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12"><span class="glyphicon glyphicon-download-alt" aria-hidden="true"></span> Télécharger <small>{version}</small></a> @@ -30,60 +39,6 @@ N.B. : Incluso si la imagen no corresponde con la última versión de Yunohost, </div> </script> -<style> -/* -############################################################################### - Style sheet for the cards -############################################################################### -*/ -#cards-list:after { - content:''; - display:block; - clear: both; -} - -.card { - margin-bottom:20px; - width:270px; - float:left; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; -} - -.card .panel-body > h3 { - margin-top:0; - margin-bottom:5px; - font-size:1.2em; -} - -.card-desc { - height:100px; - overflow: hidden; -} - -.card .btn-group { - width:100%; - margin-left: 0px; -} -.card > .btn-group > .btn{ - border-bottom:0; -} -.card > .btn-group { - border-left:0; - border-top-left-radius:0; - border-top-right-radius:0; - margin-left: 0px; -} -.card-comment { - font-size: 0.8em; - margin-top:-5px; -} -.card > .annotations { - text-align:center; - font-size:small; -} -</style> <script> /* diff --git a/images_fr.md b/pages/01.administrate/05.install/10.images/images.fr.md similarity index 57% rename from images_fr.md rename to pages/01.administrate/05.install/10.images/images.fr.md index 97b8cf2e..e8dd13ac 100644 --- a/images_fr.md +++ b/pages/01.administrate/05.install/10.images/images.fr.md @@ -1,4 +1,11 @@ -# Images +--- +title: Images +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- <span class="javascriptDisclaimer"> Cette page requiert que Javascript soit activé pour s'afficher correctement :s. @@ -6,10 +13,17 @@ Cette page requiert que Javascript soit activé pour s'afficher correctement :s. <br/> </span> -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 ! +!!!! 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). + +! Les images actuelles 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`. + +<div class="hardware-image"> <div id="cards-list"> </div> +</div> <script type="text/template" id="image-template"> <div id="{id}" class="card panel panel-default"> @@ -17,12 +31,12 @@ N.B. : Même si l'image ne correspond pas à la dernière version de YunoHost, v <h3>{name}</h3> <div class="card-comment">{comment}</div> <div class="card-desc text-center"> -<img src="/images/{image}" height=100 style="vertical-align:middle"> +<img src="/user/images/{image}" height=100 style="vertical-align:middle"> </div> </div> - <div class="annotations"> - <div class="col-sm-6 annotation"><a href="{file}.sha256sum"><span class="glyphicon glyphicon-barcode" aria-hidden="true"></span> Checksum</a></div> - <div class="col-sm-6 annotation"><a href="{file}.sig"><span class="glyphicon glyphicon-tag" aria-hidden="true"></span> Signature</a></div> + <div class="annotations flex-container"> + <div class="flex-child annotation"><a href="{file}.sha256sum">[fa=barcode] Checksum</a></div> + <div class="flex-child annotation"><a href="{file}.sig">[fa=tag] Signature</a></div> </div> <div class="btn-group" role="group"> <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12"><span class="glyphicon glyphicon-download-alt" aria-hidden="true"></span> Télécharger <small>{version}</small></a> @@ -30,60 +44,6 @@ N.B. : Même si l'image ne correspond pas à la dernière version de YunoHost, v </div> </script> -<style> -/* -############################################################################### - Style sheet for the cards -############################################################################### -*/ -#cards-list:after { - content:''; - display:block; - clear: both; -} - -.card { - margin-bottom:20px; - width:270px; - float:left; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; -} - -.card .panel-body > h3 { - margin-top:0; - margin-bottom:5px; - font-size:1.2em; -} - -.card-desc { - height:100px; - overflow: hidden; -} - -.card .btn-group { - width:100%; - margin-left: 0px; -} -.card > .btn-group > .btn{ - border-bottom:0; -} -.card > .btn-group { - border-left:0; - border-top-left-radius:0; - border-top-right-radius:0; - margin-left: 0px; -} -.card-comment { - font-size: 0.8em; - margin-top:-5px; -} -.card > .annotations { - text-align:center; - font-size:small; -} -</style> <script> /* diff --git a/images.md b/pages/01.administrate/05.install/10.images/images.md similarity index 52% rename from images.md rename to pages/01.administrate/05.install/10.images/images.md index be1840bb..77bb4b1b 100644 --- a/images.md +++ b/pages/01.administrate/05.install/10.images/images.md @@ -1,4 +1,11 @@ -# Pre-installed images +--- +title: Pre-installed images +template: docs +taxonomy: + category: docs +routes: + default: '/images' +--- <span class="javascriptDisclaimer"> This page requires Javascript enabled to display properly :s. @@ -6,10 +13,17 @@ This page requires Javascript enabled to display properly :s. <br/> </span> -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! +!!! 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). + +! 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`. + +<div class="hardware-image"> <div id="cards-list"> </div> +</div> <script type="text/template" id="image-template"> <div id="{id}" class="card panel panel-default"> @@ -17,82 +31,30 @@ N.B. : Even if the image does not corresponds to the latest version of YunoHost, <h3>{name}</h3> <div class="card-comment">{comment}</div> <div class="card-desc text-center"> -<img src="/images/{image}" height=100 style="vertical-align:middle"> +<img src="/user/images/{image}" height=100 style="vertical-align:middle"> </div> </div> - <div class="annotations"> - <div class="col-sm-6 annotation"><a href="{file}.sha256sum"><span class="glyphicon glyphicon-barcode" aria-hidden="true"></span> Checksum</a></div> - <div class="col-sm-6 annotation"><a href="{file}.sig"><span class="glyphicon glyphicon-tag" aria-hidden="true"></span> Signature</a></div> + <div class="annotations flex-container"> + <div class="flex-child annotation"><a href="{file}.sha256sum">[fa=barcode] Checksum</a></div> + <div class="flex-child annotation"><a href="{file}.sig">[fa=tag] Signature</a></div> </div> <div class="btn-group" role="group"> - <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12"><span class="glyphicon glyphicon-download-alt" aria-hidden="true"></span> Download <small>{version}</small></a> + <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12">[fa=download] Download <small>{version}</small></a> </div> </div> </script> -<style> -/* -############################################################################### - Style sheet for the cards -############################################################################### -*/ -#cards-list:after { - content:''; - display:block; - clear: both; -} - -.card { - margin-bottom:20px; - width:270px; - float:left; - min-height: 1px; - margin-right: 10px; - margin-left: 10px; -} - -.card .panel-body > h3 { - margin-top:0; - margin-bottom:5px; - font-size:1.2em; -} - -.card-desc { - height:100px; - overflow: hidden; -} - -.card .btn-group { - width:100%; - margin-left: 0px; -} -.card > .btn-group > .btn{ - border-bottom:0; -} -.card > .btn-group { - border-left:0; - border-top-left-radius:0; - border-top-right-radius:0; - margin-left: 0px; -} -.card-comment { - font-size: 0.8em; - margin-top:-5px; -} -.card > .annotations { - text-align:center; - font-size:small; -} -</style> - <script> /* ############################################################################### - Script that loads the infos from javascript and creates the corresponding + Script that loads the infos from JavaScript and creates the corresponding cards ############################################################################### */ $(document).ready(function () { + + $(".javascriptDisclaimer").hide(); + console.log("in load"); $.getJSON('https://build.yunohost.org/images.json', function (images) { $.each(images, function(k, infos) { diff --git a/pages/01.administrate/05.install/install.fr.md b/pages/01.administrate/05.install/install.fr.md new file mode 100644 index 00000000..6817e767 --- /dev/null +++ b/pages/01.administrate/05.install/install.fr.md @@ -0,0 +1,616 @@ +--- +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"][/figure]](/install/hardware:virtualbox) +[/div] + +[div class="flex-child hardware{%if rpi2plus or rpi1 or rpi0 %} active{% endif %}"] +[[figure caption="Raspberry Pi"][/figure]](/install/hardware:rpi2plus) +[/div] + +[div class="flex-child hardware{%if arm_sup or arm_unsup or internetcube %} active{% endif %}"] +[[figure caption="Carte ARM"][/figure]](/install/hardware:arm_sup) +[/div] + +[div class="flex-child hardware{%if regular %} active{% endif %}"] +[[figure caption="Ordinateur standard"][/figure]](/install/hardware:regular) +[/div] + +[div class="flex-child hardware{%if vps_debian or vps_ynh %} active{% endif %}"] +[[figure caption="Serveur distant"][/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"][/figure]](/install/hardware:rpi2plus) +[/div] + +[div class="flex-child hardware{%if rpi1 %} active{% endif %}"] +[[figure caption="Raspberry Pi 1"][/figure]](/install/hardware:rpi1) +[/div] + +[div class="flex-child hardware{%if rpi0 %} active{% endif %}"] +[[figure caption="Raspberry Pi zero"][/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"][/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+"][/figure]](/install/hardware:arm_sup) +[/div] + +[div class="flex-child hardware{%if arm_unsup %} active{% endif %}"] +[[figure caption="Autres cartes ARM"][/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 10"][/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é"][/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 10 (Buster) pré-installé <small>(avec un **kernel >= 3.12**)</small>, 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"][/figure]](https://vps.arn-fai.net) +[/div] + +[/div] +{% endif %} + + +{% if at_home %} +## [fa=download /] Télécharger l'image {{image_type}} + +{% 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 %} +<a href="https://www.armbian.com/download/" target="_BLANK" type="button" class="btn btn-info col-sm-12">[fa=external-link] Télécharger l'image pour votre carte sur le site d'Armbian</a> + +!!! N.B.: il vous faut télécharger l'image Armbian Buster. +{% 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). + +<div class="hardware-image"> +<div id="cards-list"> +</div> +</div> +<script type="text/template" id="image-template"> +<div id="{id}" class="card panel panel-default"> + <div class="panel-body text-center pt-2"> + <h3>{name}</h3> + <div class="card-comment">{comment}</div> + <div class="card-desc text-center"> +<img src="/user/images/{image}" height=100 style="vertical-align:middle"> + </div> + </div> + <div class="annotations flex-container"> + <div class="flex-child annotation"><a href="{file}.sha256sum">[fa=barcode] Somme de contrôle</a></div> + <div class="flex-child annotation"><a href="{file}.sig">[fa=tag] Signature</a></div> + </div> + <div class="btn-group" role="group"> + <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12">[fa=download] Télécharger <small>{version}</small></a> + </div> +</div> +</script> +<script> +var hardware = "{{ hardware|escape('js') }}"; +/* +############################################################################### + Script that loads the infos from JavaScript and creates the corresponding + cards +############################################################################### +*/ +$(document).ready(function () { + console.log("in load"); + $.getJSON('https://build.yunohost.org/images.json', function (images) { + $.each(images, function(k, infos) { + if (infos.tuto.indexOf(hardware) == -1) return; + // Fill the template + html = $('#image-template').html() + .replace('{id}', infos.id) + .replace('{name}', infos.name) + .replace('{comment}', infos.comment || " ") + .replace('{image}', infos.image) + .replace('{version}', infos.version); + + if (infos.file.startsWith("http")) + html = html.replace(/{file}/g, infos.file); + else + html = html.replace(/{file}/g, "https://build.yunohost.org/"+infos.file); + + if ((typeof(infos.has_sig_and_sums) !== 'undefined') && infos.has_sig_and_sums == false) + { + var $html = $(html); + $html.find(".annotations").html(" "); + html = $html[0]; + } + $('#cards-list').append(html); + }); + }); +}); +</script> + + + + + + +{% if not virtualbox %} + +{% if arm %} +##  Flasher l'image {{image_type}} +{% else %} +##  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 <a href="https://www.balena.io/etcher/" target="_blank">Etcher</a> 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 ». + + + +[/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 ». + + + +[/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 + + + +! 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. + + + +{% 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. + + + +! 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) : +`<ESC>`, `<F9>`, `<F10>`, `<F11>`, `<F12>` or `<DEL>`. + * 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 + +!! N.B. : L'installation effacera totalement les données sur votre disque dur ! + +Votre écran devrait ressembler à la capture ci-dessous : + +[figure class="nomargin" caption="Capture d'écran du menu de l'ISO"] + +[/figure] + + 1. Sélectionnez `Graphical install` + 2. Sélectionnez votre langue, votre localisation et votre agencement de clavier. + 3. L'installateur va ensuite télécharger les paquets requis et les installer. + +{% 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"] + +[/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"] + +[/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"] + +[/figure] + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +``` +yunohost user create johndoe +``` +TODO : copypasta an actual shell session will all info asked etc.. + +[/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"] + +[/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"] + +[/figure] + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +``` +yunohost domain cert-install +``` +[/ui-tab] +[/ui-tabs] +{% endif %} + +##  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/01.administrate/05.install/install.it.md b/pages/01.administrate/05.install/install.it.md new file mode 100644 index 00000000..52552a45 --- /dev/null +++ b/pages/01.administrate/05.install/install.it.md @@ -0,0 +1,616 @@ +--- +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"][/figure]](/install/hardware:virtualbox) +[/div] + +[div class="flex-child hardware{%if rpi2plus or rpi1 or rpi0 %} active{% endif %}"] +[[figure caption="Raspberry Pi"][/figure]](/install/hardware:rpi2plus) +[/div] + +[div class="flex-child hardware{%if arm_sup or arm_unsup or internetcube %} active{% endif %}"] +[[figure caption="ARM board"][/figure]](/install/hardware:arm_sup) +[/div] + +[div class="flex-child hardware{%if regular %} active{% endif %}"] +[[figure caption="Personal computer"][/figure]](/install/hardware:regular) +[/div] + +[div class="flex-child hardware{%if vps_debian or vps_ynh %} active{% endif %}"] +[[figure caption="Server remoto"][/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"][/figure]](/install/hardware:rpi2plus) +[/div] + +[div class="flex-child hardware{%if rpi1 %} active{% endif %}"] +[[figure caption="Raspberry Pi 1"][/figure]](/install/hardware:rpi1) +[/div] + +[div class="flex-child hardware{%if rpi0 %} active{% endif %}"] +[[figure caption="Raspberry Pi zero"][/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"][/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+"][/figure]](/install/hardware:arm_sup) +[/div] + +[div class="flex-child hardware{%if arm_unsup %} active{% endif %}"] +[[figure caption="Altre architetture"][/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 10"][/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"][/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 10 (Buster) <small>(with **kernel >= 3.12**)</small> 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"][/figure]](https://vps.arn-fai.net) +[/div] + +[/div] +{% endif %} + + +{% if at_home %} +## [fa=download /] Download the {{image_type}} image + +{% if virtualbox or regular %} +!!! If your host OS is 32 bits, be sure to download the 32-bit image. +{% elseif arm_unsup %} +<a href="https://www.armbian.com/download/" target="_BLANK" type="button" class="btn btn-info col-sm-12">[fa=external-link] Download the image for your board on Armbian's website</a> + +!!! N.B.: you should download the image Armbian Buster. +{% endif %} + + +<div class="hardware-image"> +<div id="cards-list"> +</div> +</div> +<script type="text/template" id="image-template"> +<div id="{id}" class="card panel panel-default"> + <div class="panel-body text-center pt-2"> + <h3>{name}</h3> + <div class="card-comment">{comment}</div> + <div class="card-desc text-center"> +<img src="/user/images/{image}" height=100 style="vertical-align:middle"> + </div> + </div> + <div class="annotations flex-container"> + <div class="flex-child annotation"><a href="{file}.sha256sum">[fa=barcode] Checksum</a></div> + <div class="flex-child annotation"><a href="{file}.sig">[fa=tag] Signature</a></div> + </div> + <div class="btn-group" role="group"> + <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12">[fa=download] Download <small>{version}</small></a> + </div> +</div> +</script> +<script> +var hardware = "{{ hardware|escape('js') }}"; +/* +############################################################################### + Script that loads the infos from JavaScript and creates the corresponding + cards +############################################################################### +*/ +$(document).ready(function () { + console.log("in load"); + $.getJSON('https://build.yunohost.org/images.json', function (images) { + $.each(images, function(k, infos) { + if (infos.tuto.indexOf(hardware) == -1) return; + // Fill the template + html = $('#image-template').html() + .replace('{id}', infos.id) + .replace('{name}', infos.name) + .replace('{comment}', infos.comment || " ") + .replace('{image}', infos.image) + .replace('{version}', infos.version); + + if (infos.file.startsWith("http")) + html = html.replace(/{file}/g, infos.file); + else + html = html.replace(/{file}/g, "https://build.yunohost.org/"+infos.file); + + if ((typeof(infos.has_sig_and_sums) !== 'undefined') && infos.has_sig_and_sums == false) + { + var $html = $(html); + $html.find(".annotations").html(" "); + html = $html[0]; + } + $('#cards-list').append(html); + }); + }); +}); +</script> + + + + + + +{% if not virtualbox %} + +{% if arm %} +##  Flash the {{image_type}} image +{% else %} +##  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 <a href="https://www.balena.io/etcher/" target="_blank">Etcher</a> for your operating system and install it. + +Plug your {% if arm %}SD card{% else %}USB stick{% endif %}, select your image and click "Flash" + + + +[/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" + + + +[/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 + + + +! 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. + + + +{% 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. + + + +! 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): +`<ESC>`, `<F9>`, `<F10>`, `<F11>`, `<F12>` or `<DEL>`. + * 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"] + +[/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"] + +[/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"] + +[/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"] + +[/figure] + +[/ui-tab] +[ui-tab title="From the command line"] +``` +yunohost user create johndoe +``` +TODO : copypasta an actual shell session will all info asked etc.. + +[/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"] + +[/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"] + +[/figure] + +[/ui-tab] +[ui-tab title="From the command line"] +``` +yunohost domain cert-install +``` +[/ui-tab] +[/ui-tabs] +{% endif %} + +##  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/01.administrate/05.install/install.md b/pages/01.administrate/05.install/install.md new file mode 100644 index 00000000..a0bb9848 --- /dev/null +++ b/pages/01.administrate/05.install/install.md @@ -0,0 +1,617 @@ +--- +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, 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 %} + +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"][/figure]](/install/hardware:virtualbox) +[/div] + +[div class="flex-child hardware{%if rpi2plus or rpi1 or rpi0 %} active{% endif %}"] +[[figure caption="Raspberry Pi"][/figure]](/install/hardware:rpi2plus) +[/div] + +[div class="flex-child hardware{%if arm_sup or arm_unsup or internetcube %} active{% endif %}"] +[[figure caption="ARM board"][/figure]](/install/hardware:arm_sup) +[/div] + +[div class="flex-child hardware{%if regular %} active{% endif %}"] +[[figure caption="Regular computer"][/figure]](/install/hardware:regular) +[/div] + +[div class="flex-child hardware{%if vps_debian or vps_ynh %} active{% endif %}"] +[[figure caption="Remote server"][/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"][/figure]](/install/hardware:rpi2plus) +[/div] + +[div class="flex-child hardware{%if rpi1 %} active{% endif %}"] +[[figure caption="Raspberry Pi 1"][/figure]](/install/hardware:rpi1) +[/div] + +[div class="flex-child hardware{%if rpi0 %} active{% endif %}"] +[[figure caption="Raspberry Pi zero"][/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"][/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+"][/figure]](/install/hardware:arm_sup) +[/div] + +[div class="flex-child hardware{%if arm_unsup %} active{% endif %}"] +[[figure caption="Others boards"][/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 10"][/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"][/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 %} +* 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 10 (Buster) <small>(with **kernel >= 3.12**)</small> 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"][/figure]](https://vps.arn-fai.net) +[/div] + +[/div] +{% endif %} + + +{% if at_home %} +## [fa=download /] Download the {{image_type}} image + +{% if virtualbox or regular %} +!!! If your host OS is 32 bits, be sure to download the 32-bit image. +{% elseif arm_unsup %} +<a href="https://www.armbian.com/download/" target="_BLANK" type="button" class="btn btn-info col-sm-12">[fa=external-link] Download the image for your board on Armbian's website</a> + +!!! N.B.: you should download the image Armbian Buster. +{% endif %} + +!!! If you wish to check the validity of our signed images, you can [download our public key](https://forge.yunohost.org/yunohost.asc). + +<div class="hardware-image"> +<div id="cards-list"> +</div> +</div> +<script type="text/template" id="image-template"> +<div id="{id}" class="card panel panel-default"> + <div class="panel-body text-center pt-2"> + <h3>{name}</h3> + <div class="card-comment">{comment}</div> + <div class="card-desc text-center"> +<img src="/user/images/{image}" height=100 style="vertical-align:middle"> + </div> + </div> + <div class="annotations flex-container"> + <div class="flex-child annotation"><a href="{file}.sha256sum">[fa=barcode] Checksum</a></div> + <div class="flex-child annotation"><a href="{file}.sig">[fa=tag] Signature</a></div> + </div> + <div class="btn-group" role="group"> + <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12">[fa=download] Download <small>{version}</small></a> + </div> +</div> +</script> +<script> +var hardware = "{{ hardware|escape('js') }}"; +/* +############################################################################### + Script that loads the infos from JavaScript and creates the corresponding + cards +############################################################################### +*/ +$(document).ready(function () { + console.log("in load"); + $.getJSON('https://build.yunohost.org/images.json', function (images) { + $.each(images, function(k, infos) { + if (infos.tuto.indexOf(hardware) == -1) return; + // Fill the template + html = $('#image-template').html() + .replace('{id}', infos.id) + .replace('{name}', infos.name) + .replace('{comment}', infos.comment || " ") + .replace('{image}', infos.image) + .replace('{version}', infos.version); + + if (infos.file.startsWith("http")) + html = html.replace(/{file}/g, infos.file); + else + html = html.replace(/{file}/g, "https://build.yunohost.org/"+infos.file); + + if ((typeof(infos.has_sig_and_sums) !== 'undefined') && infos.has_sig_and_sums == false) + { + var $html = $(html); + $html.find(".annotations").html(" "); + html = $html[0]; + } + $('#cards-list').append(html); + }); + }); +}); +</script> + + + + + + +{% if not virtualbox %} + +{% if arm %} +##  Flash the {{image_type}} image +{% else %} +##  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 <a href="https://www.balena.io/etcher/" target="_blank">Etcher</a> for your operating system and install it. + +Plug your {% if arm %}SD card{% else %}USB stick{% endif %}, select your image and click "Flash" + + + +[/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" + + + +[/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 + + + +! 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. + + + +{% 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. + + + +! 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): +`<ESC>`, `<F9>`, `<F10>`, `<F11>`, `<F12>` or `<DEL>`. + * 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"] + +[/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 +``` +(or `yunohost-2.local`, and so on if multiple YunoHost servers are on your network) + +Then run the following commands to work around the metronome issue: +``` +mv /usr/bin/metronome{,.bkp} +mv /usr/bin/metronomectl{,.bkp} +ln -s /usr/bin/true /usr/bin/metronome +ln -s /usr/bin/true /usr/bin/metronomectl +``` + +And this one to work around the upnpc issue: +``` +sed -i 's/import miniupnpc/#import miniupnpc/g' /usr/lib/moulinette/yunohost/firewall.py +``` + +! This last command need to be run after each yunohost upgrade :/ + +{% elseif arm_unsup %} +## [fa=terminal /] Connect to the board + +Next you need to [find the local IP address of your server](/finding_the_local_ip) to connect as root user [via SSH](/ssh) with the temporary password `1234`. + +``` +ssh root@192.168.x.xxx +``` + +{% endif %} + +{% endif %} + + +{% if vps_debian or arm_unsup %} +## [fa=rocket /] Run the install script + +- Open a command line prompt on your server (either directly or [through SSH](/ssh)) +- Make sure you are root (or type `sudo -i` to become root) +- Run the following command: + +```bash +curl https://install.yunohost.org | bash +``` + +!!! If `curl` is not installed on your system, you might need to install it with `apt install curl`. +!!! Otherwise, if the command does not do anything, you might want to `apt install ca-certificates` + +!!! **Note for advanced users concerned with the `curl|bash` approach:** consider reading ["Is curl|bash insecure?"](https://sandstorm.io/news/2015-09-24-is-curl-bash-insecure-pgp-verified-install) on Sandstom's blog, and possibly [this discussion on Hacker News](https://news.ycombinator.com/item?id=12766350&noprocess). + +{% endif %} + + +## [fa=cog /] Proceed with the initial configuration + +!!! If you are in the process of restoring a server using a YunoHost backup, you should skip this step and instead [restore the backup instead of the postinstall step](/backup#restoring-during-the-postinstall). + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +{%if at_home %} +In an internet browser, type **{% if internetcube %}`https://internetcube.local`{% else %}`https://yunohost.local` (or `yunohost-2.local`, and so on if multiple YunoHost servers are on your network){% endif %}**. + +!!! If this doesn't work, you can [look for the the local IP address of your server](/finding_the_local_ip). The address typically looks like `192.168.x.y`, and you should therefore type `https://192.168.x.y` in your browser's address bar. +{% else %} +You can perform the initial configuration with the web interface by typing in the 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, 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"] + +[/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"] + +[/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="Preview of the user creation UI"] + +[/figure] + +[/ui-tab] +[ui-tab title="From the command line"] +``` +yunohost user create johndoe +``` +TODO : copypasta an actual shell session will all info asked etc.. + +[/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"] + +[/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 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"] + +[/figure] + +[/ui-tab] +[ui-tab title="From the command line"] +``` +yunohost domain cert-install +``` +[/ui-tab] +[/ui-tabs] +{% endif %} + +##  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/01.administrate/06.overview/02.guidelines/guidelines.de.md b/pages/01.administrate/06.overview/02.guidelines/guidelines.de.md new file mode 100644 index 00000000..d3dbf2e5 --- /dev/null +++ b/pages/01.administrate/06.overview/02.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. <small>(z. B., den Admin-Benutzer nicht selbst versuchen neu anzulegen, falls er komischerweise verschwunden ist.)</small> + +## 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/01.administrate/06.overview/02.guidelines/guidelines.fr.md similarity index 53% rename from guidelines_fr.md rename to pages/01.administrate/06.overview/02.guidelines/guidelines.fr.md index 70987966..099bb250 100644 --- a/guidelines_fr.md +++ b/pages/01.administrate/06.overview/02.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, alors s'il vous plaît.. : +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. <small>(Par exemple, n'essayez pas de recréer vous-même l'utilisateur admin juste parce qu'il a mystérieusement disparu...)</small> ## Keep it simple ! @@ -18,7 +25,7 @@ Si votre but est d'avoir un serveur de production, alors s'il vous plaît.. : 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,23 +33,22 @@ 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 ! Pour finir, puisque YunoHost est un projet de logiciel libre, vous êtes légitime et bienvenu pour [venir contribuer](/contribute) au projet, que ce soit sur les aspects techniques (c.-à-d. code) et moins techniques (comme par exemple contribuer à cette documentation ;)) ! - diff --git a/pages/01.administrate/06.overview/02.guidelines/guidelines.it.md b/pages/01.administrate/06.overview/02.guidelines/guidelines.it.md new file mode 100644 index 00000000..bbce4194 --- /dev/null +++ b/pages/01.administrate/06.overview/02.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. <small>(Per esempio, non tentate di ricreare da soli l'utente admin solo perché sembra che sia misteriosamente scomparso...)</small> + +## 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/01.administrate/06.overview/02.guidelines/guidelines.md similarity index 70% rename from guidelines.md rename to pages/01.administrate/06.overview/02.guidelines/guidelines.md index 18cad323..74a41916 100644 --- a/guidelines.md +++ b/pages/01.administrate/06.overview/02.guidelines/guidelines.md @@ -1,28 +1,35 @@ -# 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 -To put it another way : your server is either a production server (meant to work) or a test server on which you allow yourself to experiment. +To put it another way: your server is either a production server (meant to work) or a test server on which you allow yourself to experiment. -If your goal is to run a production server, then please : -- be aware that servers are fragile system. Stay cautious, methodical and patient ; -- limit experimentations and customizations (for instance of config file) ; -- do not install dozens of apps just to see how they look ; -- use non-official apps with caution, and do not use apps that are still 'in progress', 'not working' or level 0 ; +If your goal is to run a production server: +- be aware that servers are fragile system. Stay cautious, methodical and patient; +- limit experimentations and customizations (for instance of config file); +- do not install dozens of apps just to see how they look; +- use non-official apps with caution, and do not use apps that are still 'in progress', 'not working' or level 0; - if something gets broken, think twice about fixing it by yourself if you don't know what you are doing. <small>(For instance, do not attempt to recreate yourself the admin user just because it mysteriously disappeared...)</small> -## Keep it simple ! +## Keep it simple! YunoHost is designed to work with general and simple use cases in mind. Deviating from those conditions will make things harder and you will need technical knowledge to make it work. For instance, -- do not try to run YunoHost in a context where you cannot have control over ports 80 and 443 (or no internet at all) ; -- do not try to host five servers behind the same internet connection if you are not already an advanced user ; -- do not fall into nerd whims such as willing to replace nginx by Apache (or run both at the same time) ; -- do not try to use custom SSL certificates if you don't really need them ; +- do not try to run YunoHost in a context where you cannot have control over ports 80 and 443 (or no internet at all); +- do not try to host five servers behind the same internet connection if you are not already an advanced user; +- do not fall into nerd whims such as willing to replace NGINX with Apache (or run both at the same time); +- do not try to use custom SSL certificates if you don't really need them; - ... -Keep things as simple as you can ! +Keep things as simple as you can! ## Do not reinstall every day @@ -34,16 +41,14 @@ Please don't do this. Reinstalling is a heavy operation and is not a good long-t If you host services and data that are important for your users, it is important that you setup a backup policy. Backups can be easily created from the webadmin - though they currently cannot be downloaded from it (but it can be downloaded through other means). You should perform backup regularly and keep them in a safe and different physical location from your server. More info on [the backup documentation](/backup). -## Check root's email +## Check root’s email As an administrator, you should configure an email client to check emails sent to `root@your.domain.tld` (which should be an alias to the first user your added) or otherwise forward them to another address that you actively check. Those mails may contain information on what is happening on your server such as automated periodic tasks. ## YunoHost is free software, maintained by volunteers -Finally, keep in mind that YunoHost is a free software maintained by volunteers - and that the goal of YunoHost (to democratize self-hosting) is not an easy one ! It is provided without any warranty. The team of volunteers does its best to maintain and provide the best possible experience - yet features, applications and YunoHost as a whole are far from being perfect and you will experience small and big shortcomings at some points. When this happens, kindly [reach for help on the chat or forum, or report the issue](/help) :) ! - -If you like YunoHost and want to see the project being kept alive and make progress, feel free to leave a thank you note and to [donate](https://liberapay.com/YunoHost) to the project and talk about it around you ! - -Last but not least, since YunoHost is a free software project, you are legitimate and welcomed to come and [contribute](/contribute) to the project, be it on the technical aspects (i.e. code) and less-technical aspects (such as contributing to this documentation ;)) ! +Finally, keep in mind that YunoHost is a free software maintained by volunteers - and that the goal of YunoHost (to democratize self-hosting) is not an easy one! It is provided without any warranty. The team of volunteers does its best to maintain and provide the best possible experience - yet features, applications and YunoHost as a whole are far from being perfect and you will experience small and big shortcomings at some points. When this happens, kindly [reach for help on the chat or forum, or report the issue](/help)! :) +If you like YunoHost and want to see the project being kept alive and make progress, feel free to leave a thank you note and to [donate](https://liberapay.com/YunoHost) to the project and talk about it around you! +Last but not least, since YunoHost is a free software project, you are legitimate and welcomed to come and [contribute](/contribute) to the project, be it on the technical aspects (i.e. code) and less-technical aspects (such as contributing to this documentation! ;)) diff --git a/pages/01.administrate/06.overview/03.admin/admin.de.md b/pages/01.administrate/06.overview/03.admin/admin.de.md new file mode 100644 index 00000000..84c36284 --- /dev/null +++ b/pages/01.administrate/06.overview/03.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) + + diff --git a/pages/01.administrate/06.overview/03.admin/admin.es.md b/pages/01.administrate/06.overview/03.admin/admin.es.md new file mode 100644 index 00000000..c95fa880 --- /dev/null +++ b/pages/01.administrate/06.overview/03.admin/admin.es.md @@ -0,0 +1,16 @@ +--- +title: La interfaz de administración web +template: docs +taxonomy: + category: docs +routes: + default: '/admin_interface' +--- + +YunoHost tiene una interfaz gráfica de administración. El otro método consiste en utilizar la [linea de comando](/commandline). + +### Acceso + +La interfaz admin está accesible desde tu instancia YunoHost en esta dirección : https://ejemplo.org/yunohost/admin (reemplaza ejemplo.org por tu nombre de dominio) + + diff --git a/pages/01.administrate/06.overview/03.admin/admin.fr.md b/pages/01.administrate/06.overview/03.admin/admin.fr.md new file mode 100644 index 00000000..c8d0b285 --- /dev/null +++ b/pages/01.administrate/06.overview/03.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) + + + diff --git a/pages/01.administrate/06.overview/03.admin/admin.it.md b/pages/01.administrate/06.overview/03.admin/admin.it.md new file mode 100644 index 00000000..03582144 --- /dev/null +++ b/pages/01.administrate/06.overview/03.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) + + + diff --git a/pages/01.administrate/06.overview/03.admin/admin.md b/pages/01.administrate/06.overview/03.admin/admin.md new file mode 100644 index 00000000..4b2f6004 --- /dev/null +++ b/pages/01.administrate/06.overview/03.admin/admin.md @@ -0,0 +1,16 @@ +--- +title: Administrator web interface +template: docs +taxonomy: + category: docs +routes: + default: '/admin_interface' +--- + +YunoHost has an administrator web interface. The other way to administrate your YunoHost install is through the [command line](/commandline). + +### Access + +You can access your administrator web interface at this address: https://example.org/yunohost/admin (replace 'example.org' with your own domain name) + + diff --git a/pages/01.administrate/06.overview/04.commandline/ssh.de.md b/pages/01.administrate/06.overview/04.commandline/ssh.de.md new file mode 100644 index 00000000..e08fc09b --- /dev/null +++ b/pages/01.administrate/06.overview/04.commandline/ssh.de.md @@ -0,0 +1,130 @@ +--- +title: SSH +template: docs +taxonomy: + category: docs +routes: + default: '/ssh' + aliases: + - '/commandline' +page-toc: + active: true +--- + +## Was ist SSH? + +**SSH** steht für **S**ecure **Sh**ell, und bezeichnet ein Protokoll, dass es einem erlaubt über ein entferntes System auf die Kommandozeile (Command Line Interface, **CLI**) zuzugreifen. SSH ist standardmäßig auf jedem Terminal auf GNU/Linux oder macOS verfügbar. Für Windows ist Drittsoftware nötig, z.B. [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (Klicke nach dem Start auf Session und dann SSH). + +## Während der YunoHost Installation + +#### Finde deine IP + +Solltest du auf einem VPS installieren, dann hat der VPS Provider die IP-Adresse, die du bei ihm erfragen solltest. + +Wenn du Zuhause installierst (z.B. auf einem Raspberry Pi oder OLinuXino), dann musst du herausfinden, welche IP-Adresse dein Router dem System zugewiesen hat. Hierfür existieren mehrere Wege: +- Öffne ein Terminal und tippe `sudo arp-scan --local` ein, um eine Liste der aktiven IP-Adressen deines lokalen Netzwerks anzuzeigen; +- wenn dir der arp-scan eine zu unübersichtliche Zahl an Adressen anzeigt, versuche mit `nmap -p 22 192.168.**x**.0/24` nur die anzuzeigen, deren SSH-Port 22 offen ist. (passe das **x** deinem Netzwerk an); +- Prüfe die angezeigten Geräte in der Benutzeroberfläche deines Routers, ob du das Gerät findest; +- Schließe einen Bildschirm und Tastatur an deinen Server, logge dich ein und tippe `hostname --all-ip-address`. + +#### 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 <portnumber>` to the command, e.g. : + +```bash +ssh -p 2244 admin@your.domain.tld +``` + +!!! If you are connected as `admin` and would like to become `root` for more comfort (e.g. to avoid typing `sudo` in front of every command), you can become `root` using the command `sudo su`. + +## Which users? + +By default, only the `admin` user can log in to YunoHost SSH server. + +YunoHost's users created via the administration interface are managed by the LDAP directory. By default, they can't connect via SSH for security reasons. If you want some users to have SSH access enabled, use the command: + +```bash +yunohost user permission add ssh.main <username> +``` + +It is also possible to remove SSH access using the following: + +```bash +yunohost user permission remove ssh.main <username> +``` + +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 <username> <key> +yunohost user ssh remove-key <username> <key> +yunohost user ssh list-keys <username> +``` + +## Security and SSH + +N.B. : `fail2ban` will ban your IP for 10 mimutes if you perform 5 failed login attempts. If you need to unban the IP, have a look at the page about [Fail2Ban](/fail2ban) + +A more extensive discussion about security & SSH can be found on the [dedicated page](/security). + + +## YunoHost command line + +!!! Providing a full tutorial about the command line is quite beyond the scope of the YunoHost documentation : for this, consider reading a dedicated tutorial such as [this one](https://ryanstutorials.net/linuxtutorial/) or [this one](http://linuxcommand.org/). But be reassured that you don't need to be a CLI expert to start using it ! + +The `yunohost` command can be used to administer your server and perform the various actions similarly to what you do on the webadmin. The command must be launched either from the `root` user or from the `admin` user by preceeding them with `sudo`. (ProTip™ : you can become `root` with the command `sudo su` as `admin`). + +YunoHost commands usually have this kind of structure : + +```bash +yunohost app install wordpress --label Webmail + ^ ^ ^ ^ + | | | | + category action argument options +``` + +Don't hesitate to browse and ask for more information about a given category or action using the the `--help` option. For instance, those commands : + +```bash +yunohost --help +yunohost user --help +yunohost user create --help +``` + +will successively list all the categories available, then the actions available in the `user` category, then the usage of the action `user create`. You might notice that the YunoHost command tree is built with a structure similar to the YunoHost admin pages. diff --git a/ssh_es.md b/pages/01.administrate/06.overview/04.commandline/ssh.es.md similarity index 52% rename from ssh_es.md rename to pages/01.administrate/06.overview/04.commandline/ssh.es.md index 2cb0cba8..5ed7c26f 100644 --- a/ssh_es.md +++ b/pages/01.administrate/06.overview/04.commandline/ssh.es.md @@ -1,14 +1,27 @@ -# 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 Linux y MacOS / OSX. 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). +**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). -## Durante la instalación de Yunohost +La interfaz de línea de comandos (CLI) es, en informática, la manera original (y más técnica) de interactuar con un ordenador. Está generalmente considera como más completa, más potente y eficaz que las interfaces gráficas, aunque sea más difícil de aprenderla. + +## Durante la instalación de YunoHost #### Encontrar su IP -Si instalas Yunohost en un VPS, tu proveedor debería haberte comunicado la dirección IP de tu servidor. +Si instalas YunoHost en un VPS, tu proveedor debería haberte comunicado la dirección IP de tu servidor. Si instalas un servidor en tu casa (por ejemplo en Raspberry Pi u OLinuXino), tienes que encontrar el IP que fue atribuido a tu tarjeta cuando la conectaste a tu router / caja Internet. Hay varias maneras de hacerlo : @@ -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`. -<div class="alert alert-warning"> -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. -</div> +! 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,22 +70,20 @@ Si cambiaste el puerto SSH, hay que añadir `-p <numerodelpuerto>` al comando, p ssh -p 2244 admin@tu.dominio.tld ``` -<div class="alert alert-info"> -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`. -</div> +!!! Si estás conectado como `admin` y quieres ser `root` para tener más confort (por ejemplo, para no teclear `sudo` con cada comando), puedes convertirte en `root` tecleando `sudo su`. ## ¿ Qué usuarios ? -Por defecto, sólo el usuario `admin` puede conectarse en SSH en una instancia Yunohost. +Por defecto, sólo el usuario `admin` puede conectarse en SSH en una instancia YunoHost. -Los usuarios Yunohost creados vea la interfaz de administración están administrados por la base de datos LDAP. Por defecto, no pueden conectarse en SSH por razones de seguridad. Si necesitas absolutamente que uno de estos usuarios disponga de un acceso SSH, puedes utilizar el comando : +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 <username> +yunohost user permission add ssh.main <username> ``` Del mismo modo, es posible cancelar el acceso SSH de un usuario con el comando : ```bash -yunohost user ssh disallow <username> +yunohost user permission remove ssh.main <username> ``` Finalmente, es posible añadir, suprimir y listar llaves SSH, para mejorar la seguridad del acceso SSH, con estos comandos : @@ -86,6 +95,31 @@ yunohost user ssh list-keys <username> ## SSH y seguridad -N.B. : `fail2ban` proscribirá tu IP durante 10 minutos si fracasas más de 5 veces consecutivas en identificarte. Si esto ocurre y que quieres re-validar tu IP, puedes echar un vistazo a la página [fail2ban](/fail2ban) +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/01.administrate/06.overview/04.commandline/ssh.fr.md b/pages/01.administrate/06.overview/04.commandline/ssh.fr.md new file mode 100644 index 00000000..6243f433 --- /dev/null +++ b/pages/01.administrate/06.overview/04.commandline/ssh.fr.md @@ -0,0 +1,175 @@ +--- +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 <username> +# SSH +yunohost user permission add ssh <username> +``` + +Pour enlever la permission : +```bash +# SFTP +yunohost user permission remove sftp <username> +# SSH +yunohost user permission remove ssh <username> +``` + +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 <username> <key> +yunohost user ssh remove-key <username> <key> +yunohost user ssh list-keys <username> +``` +[/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 +``` + +### La commande `ynh-vpnclient-loadcubefile.sh` +Cette commande n'est disponible que si vous avez l'application `VPN Client` installée. Vous pouvez vous en servir pour charger un nouveau .cube dans le cas où vous ne parvenez pas à aller sur l'interface de `VPN Client` pour le faire. + +```bash +ynh-vpnclient-loadcubefile.sh -u <username> -p <password> -c <path>.cube +``` + +### 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/01.administrate/06.overview/04.commandline/ssh.it.md similarity index 51% rename from ssh_it.md rename to pages/01.administrate/06.overview/04.commandline/ssh.it.md index b172629c..104f43ff 100644 --- a/ssh_it.md +++ b/pages/01.administrate/06.overview/04.commandline/ssh.it.md @@ -1,10 +1,21 @@ -# SSH +--- +title: SSH +template: docs +taxonomy: + category: docs +routes: + default: '/ssh' + aliases: + - '/commandline' +page-toc: + active: true +--- -## What's SSH? +## Cos'è SSH? -**SSH** sta per Secure Shell, un protocollo che permette di controllare da remoto un computer usando l'interfaccia a linea di comando (command line interface, CLI in inglese). È disponibile di default in ogni emulazione di terminale su Linux e MacOS / OSX. Su Windows è possibile usare [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (dopo averlo avviato si deve cliccare su Session e poi SSH). +**SSH** sta per Secure Shell, un protocollo che permette di controllare da remoto un computer usando l'interfaccia a linea di comando (command line interface, CLI in inglese). È disponibile di default in ogni emulazione di terminale su GNU/Linux e macOS. Su Windows è possibile usare [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (dopo averlo avviato si deve cliccare su Session e poi SSH). -## Durante l'installazione di Yunohost +## Durante l'installazione di YunoHost #### Individuare il proprio IP @@ -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`. -<div class="alert alert-warning"> -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. -</div> +! 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,27 +66,25 @@ Se hai modificato la porta in ascolto per SSH devi aggiungere l'opzione `-p <por ssh -p 2244 admin@your.domain.tld ``` -<div class="alert alert-info"> -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`. -</div> +!!! Se sei loggato come `admin` ma vuoi usare l'utente `root` per maggiore comodità (ad esempio per evitare di scrivere `sudo` prima di ogni comando) puoi usare il comando `sudo su`. ## Utenti abilitati -Di default solo l'utente `admin` può loggarsi al server ssh di YunoHost. +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 <username> +yunohost user permission add ssh.main <username> ``` -È sempre possibile eliminare l'accesso ssh con il comando: +È sempre possibile eliminare l'accesso SSH con il comando: ```bash -yunohost user ssh disallow <username> +yunohost user permission remove ssh.main <username> ``` -Infine è possibile aggiungere, eliminare ed elencare le chiavi ssh, usate per migliorare la sicurezza degli accessi ssh con i comandi: +Infine è possibile aggiungere, eliminare ed elencare le chiavi SSH, usate per migliorare la sicurezza degli accessi SSH con i comandi: ```bash yunohost user ssh add-key <username> <key> @@ -87,6 +94,31 @@ yunohost user ssh list-keys <username> ## Sicurezza e SSH -N.B.: `fail2ban` bannerà il tuo IP per 10 minuti nel caso di almeno 5 tentativi di accesso falliti. Se devi togliere il ban al tuo IP leggi la pagina relativa [fail2ban](/fail2ban) +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/01.administrate/06.overview/04.commandline/ssh.md b/pages/01.administrate/06.overview/04.commandline/ssh.md new file mode 100644 index 00000000..86828944 --- /dev/null +++ b/pages/01.administrate/06.overview/04.commandline/ssh.md @@ -0,0 +1,179 @@ +--- +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 <username> +# SSH +yunohost user permission add ssh <username> +``` + +To remove permission: +```bash +# SFTP +yunohost user permission remove sftp <username> +# SSH +yunohost user permission remove ssh <username> +``` + +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 <username> <key> +yunohost user ssh remove-key <username> <key> +yunohost user ssh list-keys <username> +``` +[/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 <username> -p <password> -c <path>.cube +``` + +### Some useful commands + +If your administration web interface indicates that the API is unreachable, try starting `yunohost-api`: +```bash +systemctl start yunohost-api +``` + +If you can no longer connect with the user `admin` via SSH and via the web interface, the `slapd` service may be down, try restarting it: +```bash +systemctl restart slapd +``` + +If you have manually modified configurations and want to know the changes: +```bash +yunohost tools regen-conf --with-diff --dry-run +``` diff --git a/pages/01.administrate/06.overview/05.users/users.de.md b/pages/01.administrate/06.overview/05.users/users.de.md new file mode 100644 index 00000000..1eafd7a4 --- /dev/null +++ b/pages/01.administrate/06.overview/05.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] + +[/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/01.administrate/06.overview/05.users/users.fr.md b/pages/01.administrate/06.overview/05.users/users.fr.md new file mode 100644 index 00000000..64696fe8 --- /dev/null +++ b/pages/01.administrate/06.overview/05.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] + +[/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/01.administrate/06.overview/05.users/users.it.md b/pages/01.administrate/06.overview/05.users/users.it.md new file mode 100644 index 00000000..adc5fb12 --- /dev/null +++ b/pages/01.administrate/06.overview/05.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] + +[/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/01.administrate/06.overview/05.users/users.md b/pages/01.administrate/06.overview/05.users/users.md new file mode 100644 index 00000000..32f5d94e --- /dev/null +++ b/pages/01.administrate/06.overview/05.users/users.md @@ -0,0 +1,36 @@ +--- +title: Users and the SSO +template: docs +taxonomy: + category: docs +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] + +[/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). + +## User groups and permissions + +See [this dedicated page](/groups_and_permissions). + +## SSH access + +See [this dedicated page](/ssh). diff --git a/pages/01.administrate/06.overview/06.apps/apps_overview.fr.md b/pages/01.administrate/06.overview/06.apps/apps_overview.fr.md new file mode 100644 index 00000000..f4f90b9f --- /dev/null +++ b/pages/01.administrate/06.overview/06.apps/apps_overview.fr.md @@ -0,0 +1,48 @@ +--- +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 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. 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 <app> "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). diff --git a/pages/01.administrate/06.overview/06.apps/apps_overview.md b/pages/01.administrate/06.overview/06.apps/apps_overview.md new file mode 100644 index 00000000..2b6cfea1 --- /dev/null +++ b/pages/01.administrate/06.overview/06.apps/apps_overview.md @@ -0,0 +1,48 @@ +--- +title: Applications +template: docs +taxonomy: + category: docs +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 'Applications' or through commands of the `yunohost app` category. + +The application catalog can be browsed in the webadmin (in Applications > Install) or [here](/apps). + +! Be careful to 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). + +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. + +## 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. + +## 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, updates are put on hold and installation is no longer possible, until the problem is resolved. + +## 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. This information is usually available on the README of the application package. + +## 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. + +## Tile management + +Web applications can provide tiles available from the user portal, it is possible to choose whether or not to display them and redefine the text via the web administration interface `Applications > APP name > Operations > Manage labels and tiles` or via the command line: `yunohost app change-label <app> "New text"`. + +## 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`. + +## Applications packaging + +If you want to learn or contribute to app packaging, please check the [contributor documentation](/contributordoc). diff --git a/pages/01.administrate/06.overview/07.domains/domains.de.md b/pages/01.administrate/06.overview/07.domains/domains.de.md new file mode 100644 index 00000000..b5c5be6e --- /dev/null +++ b/pages/01.administrate/06.overview/07.domains/domains.de.md @@ -0,0 +1,59 @@ +--- +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. + +## 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 + +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/01.administrate/06.overview/07.domains/domains.fr.md b/pages/01.administrate/06.overview/07.domains/domains.fr.md new file mode 100644 index 00000000..f31752da --- /dev/null +++ b/pages/01.administrate/06.overview/07.domains/domains.fr.md @@ -0,0 +1,71 @@ +--- +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. + +## 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. + +## 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/01.administrate/06.overview/07.domains/domains.md b/pages/01.administrate/06.overview/07.domains/domains.md new file mode 100644 index 00000000..797d2549 --- /dev/null +++ b/pages/01.administrate/06.overview/07.domains/domains.md @@ -0,0 +1,77 @@ +--- +title: Domains, DNS conf, and certificate +template: docs +taxonomy: + category: docs +routes: + default: '/domains' +--- + +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_config). 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, 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. + +The domain chosen during the initial configuration (post-install) 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. + +## Local domains + +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 want one of your apps to be available on the Internet. + +!!!! 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. + +## 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. 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 functionality 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. diff --git a/pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.de.md b/pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.de.md new file mode 100644 index 00000000..27d221a7 --- /dev/null +++ b/pages/01.administrate/06.overview/08.emails/02.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"] +#####  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. + + + + +* [Alias-Mails verwalten](https://support.mozilla.org/de/kb/configuring-email-aliases) + +[/ui-tab] +[ui-tab title="K-9 Mail"] +#####  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) + + + + + + + +[/ui-tab] +[ui-tab title="Dekko"] +#####  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! + + + + + +[/ui-tab] +[/ui-tabs] diff --git a/email_configure_client_es.md b/pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.es.md similarity index 69% rename from email_configure_client_es.md rename to pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.es.md index 2cbda3c6..871841d6 100644 --- a/email_configure_client_es.md +++ b/pages/01.administrate/06.overview/08.emails/02.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`) | -### <img src="images/thunderbird.png" width=50> Configurar Mozilla Thunderbird (en un ordenador) + +###  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. -<img src="/images/thunderbird_config_1.png" width=900> -<img src="/images/thunderbird_config_2.png" width=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) -### <img src="images/k9mail.png" width=50> Configurar K-9 Mail (en Android) +###  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.) -<a href="/images/k9mail_config_1.png"><img src="/images/k9mail_config_1.png" width=200/></a> -<a href="/images/k9mail_config_2.png"><img src="/images/k9mail_config_2.png" width=200/></a> -<a href="/images/k9mail_config_3.png"><img src="/images/k9mail_config_3.png" width=200/></a> -<a href="/images/k9mail_config_4.png"><img src="/images/k9mail_config_4.png" width=200/></a> + + + + diff --git a/pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.fr.md b/pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.fr.md new file mode 100644 index 00000000..11782a46 --- /dev/null +++ b/pages/01.administrate/06.overview/08.emails/02.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 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 (`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 by client +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Mozilla Thunderbird"] +#####  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). + + + + +* [Gérer les alias mails](https://support.mozilla.org/en-US/kb/configuring-email-aliases) + +[/ui-tab] +[ui-tab title="K-9 Mail"] +#####  Configurer K-9 Mail (sur Android) + +Suivez les instructions suivantes (comme pour Thunderbird, il vous faudra peut-être accepter des certificats à un moment). + + + + + + +[/ui-tab] +[ui-tab title="Dekko"] +#####  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 ! + + + + + +[/ui-tab] +[/ui-tabs] diff --git a/email_configure_client.md b/pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.md similarity index 65% rename from email_configure_client.md rename to pages/01.administrate/06.overview/08.emails/02.emailclients/email_configure_client.md index a2511674..0f7dcf90 100644 --- a/email_configure_client.md +++ b/pages/01.administrate/06.overview/08.emails/02.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`) | -### <img src="images/thunderbird.png" width=50> Configure Mozilla Thunderbird (on a desktop computer) +### Client by client +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="Mozilla Thunderbird"] +#####  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. -<img src="/images/thunderbird_config_1.png" width=900> -<img src="/images/thunderbird_config_2.png" width=900> + + * [Manage alias mails](https://support.mozilla.org/en-US/kb/configuring-email-aliases) -### <img src="images/k9mail.png" width=50> Configure K-9 Mail (on Android) +[/ui-tab] +[ui-tab title="K-9 Mail"] +#####  Configure K-9 Mail (on Android) Follow the following steps. (As for Thunderbird, you might need to accept certificates at some points) -<a href="/images/k9mail_config_1.png"><img src="/images/k9mail_config_1.png" width=200/></a> -<a href="/images/k9mail_config_2.png"><img src="/images/k9mail_config_2.png" width=200/></a> -<a href="/images/k9mail_config_3.png"><img src="/images/k9mail_config_3.png" width=200/></a> -<a href="/images/k9mail_config_4.png"><img src="/images/k9mail_config_4.png" width=200/></a> + + + + -### <img src="images/dekko-app.png" width=50> Configure Dekko (on Ubuntu Touch) + +[/ui-tab] +[ui-tab title="Dekko"] +#####  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! -<a href="/images/dekko_config_1.png"><img src="/images/dekko_config_1.png" width=200/></a> -<a href="/images/dekko_config_2.png"><img src="/images/dekko_config_2.png" width=200/></a> -<a href="/images/dekko_config_3.png"><img src="/images/dekko_config_3.png" width=200/></a> -<a href="/images/dekko_config_4.png"><img src="/images/dekko_config_4.png" width=200/></a> + + + + +[/ui-tab] +[/ui-tabs] diff --git a/pages/01.administrate/06.overview/08.emails/email.de.md b/pages/01.administrate/06.overview/08.emails/email.de.md new file mode 100644 index 00000000..c6cd979f --- /dev/null +++ b/pages/01.administrate/06.overview/08.emails/email.de.md @@ -0,0 +1,50 @@ +--- +title: E-Mails +template: docs +taxonomy: + category: docs +routes: + default: '/email' +--- + +YunoHost wird mit einem kompletten Mail-Stack geliefert, der es Ihnen ermöglicht, Ihren eigenen E-Mail-Server zu hosten und somit Ihre eigenen E-Mail-Adressen in ```irgendjemand@deine.domain.tld``` zu haben. + +Der Mail-Stack enthält einen SMTP-Server (Postfix), einen IMAP-Server (Dovecot), einen Antispam-Server (rspamd) und eine DKIM-Konfiguration. + +## Sicherstellen dass Ihre Einrichtungen richtig sind + +E-Mail ist ein kompliziertes Ökosystem und eine ganze Reihe von Details können sein ordnungsgemäßes Funktionieren verhindern. + +Um Ihre Einstellungen zu validieren: + +- Wenn Sie zu Hause selbst hosten und kein VPN verwenden, stellen Sie sicher das [Ihr ISP den Port 25 nicht blockiert](https://yunohost.org/#/isp); +- leiten Sie Ports weiter, wie in [dieser Dokumentation](https://yunohost.org/#/isp_box_config) beschrieben; +- Mail-DNS-Einträge nach [dieser Dokumentation](https://yunohost.org/#/dns_config) sorgfältig konfigurieren; +- testen Sie Ihre Konfiguration mit [Mail-tester.com](https://mail-tester.com/) (Vorsicht : nur 3 Tests pro Domain und Tag sind erlaubt) ; + +Eine Punktzahl von mindestens 8~9/10 ist ein angemessenes Ziel. + +## E-Mail-Programme + +Um mit dem E-Mail-Server zu interagieren (E-Mails lesen und senden), können Sie entweder einen Webclient wie Roundcube oder Rainloop auf Ihrem Server installieren - oder einen Desktop-/Mobil-Client, wie auf [dieser Seite](https://yunohost.org/#/email_configure_client) beschrieben, konfigurieren. + +Desktop- und Mobil-Clients haben den Vorteil, dass sie Ihre E-Mails auf das Gerät kopieren, was eine Offline-Anzeige und einen relativen Schutz gegen mögliche Hardware-Ausfälle Ihres Servers ermöglicht. + +## Konfigurieren von E-Mail-Aliasen und automatische Weiterleitungen + +Mail-Aliase und Weiterleitungen können für jeden Benutzer konfiguriert werden. Beispielsweise wird für den ersten, auf dem Server angelegten Benutzer automatisch ein Alias ```root@the.domain.tld``` konfiguriert. Das bedeutet das eine an diese Adresse gesendete E-Mail im Posteingang des ersten Benutzers endet. Automatische Weiterleitungen können konfiguriert werden, z.B. wenn ein Benutzer kein zusätzliches E-Mail-Konto einrichten möchte und nur E-Mails vom Server, z.B. auf seine E-Mail-Adresse, empfangen möchte. + +Eine weitere Funktion, die nur wenigen Leuten bekannt ist, ist die Verwendung von Suffixen, die mit "+" beginnen. Zum Beispiel landen E-Mails, die an ```johndoe+buchung@die.domain.tld``` gesendet werden, automatisch im Ordner ```buchung``` (Kleinbuchstaben) der Mailbox von John Doe oder im Posteingang von John Doe, wenn der Ordner ```buchung``` nicht existiert. Es ist eine praktische Technik, z.B. eine E-Mail-Adresse auf einer Website anzugeben und dann die von dieser Website kommende E-Mail einfach (über automatische Filter) zu sortieren. + +## Was passiert wenn mein Server nicht erreichbar ist? + +Wenn Ihr Server nicht mehr verfügbar ist, bleiben die an Ihren Server gesendeten E-Mails bis zu ~5 Tage lang in einer Warteschlange auf der Seite des Absenders. Der Hoster des Absenders wird regelmäßig versuchen, die E-Mail erneut zu senden, bis er sie verwirft, falls er sie nicht versenden konnte. + +## Formulare zum Entfernen seiner IP-Adresse von der schwarzen Liste + +Es ist möglich, dass die von Ihrer YunoHost-Instanz gesendeten E-Mails von den großen E-Mail-Diensten als Spam betrachtet werden. Ist es möglich, dass die IP-Adresse von Ihrem Server bereits früher zum Versenden von Spam verwendet wurde oder dass diese E-Mail-Dienste Ihren Server als Spam-Versender betrachten? Um sicherzustellen, dass die IP-Adresse Ihrer Server nicht in diese schwarzen Listen aufgenommen wird und um sie aus diesen zu entfernen, folgen Sie [diesem Link](https://yunohost.org/#/blacklist_forms). + +## Eine Migration von E-Mails von einem E-Mail-Provider zu einer YunoHost-Instanz + +Siehe [diese Seite](https://yunohost.org/#/email_migration). + diff --git a/email_es.md b/pages/01.administrate/06.overview/08.emails/email.es.md similarity index 86% rename from email_es.md rename to pages/01.administrate/06.overview/08.emails/email.es.md index 6bb8628f..7bbcc224 100644 --- a/email_es.md +++ b/pages/01.administrate/06.overview/08.emails/email.es.md @@ -1,12 +1,17 @@ -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`. Este ecosistema comprende un servidor SMTP (postfix), un servidor IMAP (Dovecot), un antispam (rspamd) y una configuración DKIM. -Asegurarse de que la configuración esté correcta -------------------------------- +## Asegurarse de que la configuración esté correcta Los emails son un ecosistema complicado y una multitud de detalles puedes impedir que funcionen correctamente. @@ -18,27 +23,23 @@ Para validar que tu configuración es correcta : Una nota de al menos 8~9/10 es un objetivo razonable. -Clientes de mensajería -------------- +## Clientes de mensajería Para interactuar con el servidor de mail, o sea leer y mandar emails, puedes instalar un cliente web como Roundcube o Rainloop en tu servidor - o configurar un cliente de Desktop o móvil como descrito en [esta página][cette page](/email_configure_client). Los clientes Desktop o móvil tienen la ventaja de copiar tu emails en el equipo, así permitiendo la consulta desconectada de tus mensajes, y cierta protección frente a la posibilidad de un servidor averiado. -Configuration de los aliases de mensajeras y de las redirecciones automáticas -------------------------------------------- +## Configuration de los aliases de mensajeras y de las redirecciones automáticas Aliases de mensajeras y redirecciones pueden ser configurados por cada usuario. Por ejemplo, el primer usuario creado en el servidor automáticamente dispone de un alias `root@tu.dominio.tld` - lo que significa que un email mandado hacia esta dirección se encontrará en el buzón de entrada de este usuario. Las redirecciones automáticas pueden ser configuradas, por ejemplo si un usuario no quiere configurar una cuenta de correo adicional y simplemente desea recibir correos del servidor en - por ejemplo - su dirección gmail. Otra función desconocida es el uso del sufijo "+". Por ejemplo, email mandados a `johndoe+sncf@tu.dominio.tld` llegarán en el directorio 'sncf' del buzón de correo de John Dos (o directamente en el buzón si este directorio no existe). Es una técnica práctica que permite proveer una dirección de mail a un sitio y automatizar la clasificación de los correos que te mandará este sitio. -¿ Qué ocurre si mi servidor se pone indisponible ? ------------------------------------------------ +## ¿ Qué ocurre si mi servidor se pone indisponible ? Si tu servidor se pone indisponible, los correos electrónicos mandados a tu servir se quedarán en una fila de espera por el lado del expedidor durante aproximadamente 5 días. El proveedor de hosting del expedidor intentará mandarte regularmente el correo, hasta que lo tire si no lo puede enviar. -Más información --------------------- +## Más información -- Existe una página de documentación para [migrar sus emails desde un proveedor de mensajería hacia una instancia Yunohost](/email_migration). +- Existe una página de documentación para [migrar sus emails desde un proveedor de mensajería hacia una instancia YunoHost](/email_migration). - Para profundizar tu comprensión del correo electrónico y de sus protocolos, aquí tienes una [conferencia muy interesante](http://www.iletaitunefoisinternet.fr/lemail-par-benjamin-sonntag/index.html)(en francés). diff --git a/pages/01.administrate/06.overview/08.emails/email.fr.md b/pages/01.administrate/06.overview/08.emails/email.fr.md new file mode 100644 index 00000000..2b4c1d55 --- /dev/null +++ b/pages/01.administrate/06.overview/08.emails/email.fr.md @@ -0,0 +1,56 @@ +--- +title: Emails +template: docs +taxonomy: + category: docs +routes: + default: '/email' +--- + +YunoHost est livré avec un écosystème complet de serveur mail, vous permettant d'héberger votre propre serveur de messagerie, et donc d'avoir vos propres adresses email dans le style `quelquechose@votre.domaine.tld`. + +Cet écosystème comprend un serveur SMTP (postfix), un serveur IMAP (Dovecot), un antispam (rspamd) et une configuration DKIM. + +## S'assurer que votre configuration est correcte + +Les emails sont un écosystème compliqué et un grand nombre de détails peuvent les empêcher de fonctionner correctement. + +Pour valider que votre configuration est correcte : +- si vous vous hébergez chez vous et n'utilisez pas de VPN, assurez-vous que [votre FAI ne bloque pas le port 25](/isp) ; +- routez les ports selon [cette documentation](/isp_box_config) ; +- configurez soigneusement les enregistrements DNS du courrier électronique selon [cette documentation](/dns_config) ; +- Testez votre configuration en utilisant les fonctionnalités de diagnostic (`Webadmin > Diagnostic > Email`). Vous pouvez également utiliser le service [mail-tester.com](https://mail-tester.com), un score d'au moins 8~9/10 est un but raisonnable <small>(attention : seuls 3 tests par domaine et par jour sont autorisés)</small> ; + +## Clients de messagerie + +Pour interagir avec le serveur de mail, c'est-à-dire lire et envoyer des emails, vous pouvez soit installer un client web comme Roundcube ou Rainloop sur votre serveur, soit configurer un client de bureau ou mobile comme décrit dans [cette page](/email_configure_client). + +Les clients de bureau ou mobile ont l'avantage de copier vos emails sur l'équipement permettant ainsi la consultation hors ligne et une protection relative face à d'éventuelles pannes matérielles de votre serveur. + +## Configuration des alias de messagerie et des redirections automatiques + +Des alias de messagerie et des redirections peuvent être configurés pour chaque utilisateur. Par exemple, le premier utilisateur créé sur le serveur dispose automatiquement d'un alias `root@votre.domaine.tld` - ce qui signifie qu'un email envoyé vers cette adresse se retrouvera dans la boîte de réception de cet utilisateur. Les redirections automatiques peuvent être configurées, par exemple si un utilisateur ne veut pas configurer un compte de messagerie supplémentaire et souhaite simplement recevoir des courriels du serveur sur, disons, son adresse Gmail. + +Une autre fonctionnalité méconnue est l'utilisation de suffixes commencant par "+". Par exemple, les emails envoyés à `johndoe+sncf@votre.domaine.tld` atteriront dans le dossier 'sncf' de la boîte mail de John Doe (ou bien directement dans la boîte mail si ce dossier n'existe pas). C'est une technique pratique pour, par exemple, fournir une adresse mail à un site puis facilement trier (via des filtres automatiques) les courriers venant de ce site. + +## Que se passe-t-il si mon serveur devient indisponible ? + +Si votre serveur devient indisponible, les courriels envoyés à votre serveur resteront dans une file d'attente du côté de l'expéditeur pendant environ 5 jours. L'hébergeur de l'expéditeur tentera régulièrement de renvoyer le courrier, jusqu'à ce qu'il le jette s'il n'a pas pu l'envoyer. + +## Formulaires pour enlever son adresse IP des listes noires + +Il est possible que les emails envoyés depuis votre instance YunoHost soient considérés comme du spam par les grands services de mails. +Il est possible que l’adresse IP de votre serveur ait, autrefois, été utilisée pour envoyer du spam ou que ces services de mails considèrent votre serveur comme émetteur de spams. +Pour s’assurer que l’adresse IP de votre serveur n’est pas dans ces listes et pour l’enlever dans le cas échéant suivez ce [lien](/blacklist_forms). + +## Migration des emails d'un fournisseur d'emails vers une instance de YunoHost + +Voir [cette page](/email_migration). + +## Configuration du relais SMTP + +Voir [cette page](/email_configure_relay). + +## Pour aller plus loin + +Pour approfondir votre compréhension de l'email et de ses protocoles, voici une [conférence éclairante](https://www.octopuce.fr/conference-lemail-vaste-sujet-par-benjamin-sonntag/) (en français). diff --git a/email.md b/pages/01.administrate/06.overview/08.emails/email.md similarity index 65% rename from email.md rename to pages/01.administrate/06.overview/08.emails/email.md index 63525b4c..1db9e967 100644 --- a/email.md +++ b/pages/01.administrate/06.overview/08.emails/email.md @@ -1,39 +1,39 @@ -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`. The mail stack includes a SMTP server (postfix), an IMAP server (Dovecot), an antispam (rspamd) and DKIM configuration. -Making sure your setup is right -------------------------------- +## Making sure your setup is right Email is a complicated ecosystem and quite a few details can prevent it from working properly. To validate your setup: -- if you are self-hosting at home and not using a VPN, ensure [your ISP won't block port 25](isp) ; -- route ports according to [this documentation](isp_box_config) ; -- carefully configure mail DNS records according to [this documentation](dns_config) ; -- test your setup using [Mail-tester.com](https://mail-tester.com) <small>(be careful : only 3 tests per domain per day are allowed)</small> ; +- 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 <small>(be careful : only 3 tests per domain per day are allowed)</small> -A score of at least 8~9/10 is a reasonnable goal. +## Email clients -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. -Configuring email aliases and auto-forwards -------------------------------------------- +## Configuring email aliases and auto-forwards Mail aliases and forwards can be configured for each users. For instance, the first user created on the server automatically has an alias `root@the.domain.tld` configured - meaning that an email sent to this adress will end in the inbox of the first user. Automatic forwards may be configured, for instance if an user doesn't want to configure an additional email account and just wants to receive emails from the server on, say, his/her gmail address. -Another feature which few people know about is the use of suffixes beginning with "+". For example, emails sent to `johndoe+booking@votre.domaine.tld` will automatically land in the `booking` dir (lowercase) of John Doe's mailbox or in John Doe's inbox if `booking` directory doesn't exist . It is a practical technique for example to provide an e-mail address to a website, then easily sort (via automatic filters) the mail coming from this website. +Another feature which few people know about is the use of suffixes beginning with "+". For example, emails sent to `johndoe+booking@the.domain.tld` will automatically land in the `booking` dir (lowercase) of John Doe's mailbox or in John Doe's inbox if `booking` directory doesn't exist . It is a practical technique for example to provide an e-mail address to a website, then easily sort (via automatic filters) the mail coming from this website. -What happens if my server becomes unavailable ? ------------------------------------------------ +## What happens if my server becomes unavailable? If your server becomes unavailable, emails sent to your server will stay in a pending queue on the sender's side for as long as ~5 days. The sender's hoster will regularly try to resend the email, until it drops it if it was unable to send it. @@ -42,7 +42,10 @@ It is possible that the sent emails from your YunoHost instance are considered a Is it possible that the IP address from your server have been previously been used to sent spam or that these email services consider your server as a spam sender. To ensure that your servers’ IP address isn’t into this blacklists and to remove it from them, follow this [link](/blacklist_forms). -Migrating email from an email provider to a YunoHost instance -------------------------------------------------------------- +## 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). diff --git a/XMPP_es.md b/pages/01.administrate/06.overview/09.xmpp/XMPP.es.md similarity index 79% rename from XMPP_es.md rename to pages/01.administrate/06.overview/09.xmpp/XMPP.es.md index af443fe1..69466c08 100644 --- a/XMPP_es.md +++ b/pages/01.administrate/06.overview/09.xmpp/XMPP.es.md @@ -1,6 +1,15 @@ -# Chat, VoIP y red local con <img src="/images/XMPP_logo.png" width=100> +--- +title: Chat, VoIP y red local con XMPP +template: docs +taxonomy: + category: docs +routes: + default: '/XMPP' +--- -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). + + +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. @@ -8,7 +17,7 @@ Todas las aplicaciones basadas en XMPP son compatibles entre ellas : cuando util ## 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. +Una cuenta XMPP/Jabber está basada en un ID bajo la forma `usuario@dominio.tld`, así como una contraseña. La contraseña es la de la cuenta del usuario de YunoHost. ## Conectarse a XMPP @@ -21,12 +30,14 @@ También puedes utilizar un cliente Desktop como : - [Gajim](https://gajim.org/es/) (Linux, Windows) - [Dino](https://dino.im) (Linux) - [Thunderbird](https://www.thunderbird.net/es-ES/) (multiplataformas) +- [Beagle IM](https://beagle.im/) (macOS) - [Profanity](https://profanity-im.github.io/) (Linux) ... o un cliente smartphone : - [Conversations](https://conversations.im/) (Android) - [Xabber](http://xabber.com) (Android) -- [Movim sous Android](https://movim.eu) +- [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) @@ -42,7 +53,7 @@ Es posible cifrar tu conversaciones XMPP con la ayuda de [OMEMO](https://xmpp.or ### Salón de discusión -Para crear un salón de discusión (Multi-user chat) en tu servidor Yunohost, utiliza el ID nombredelsalon@muc.dominio.tld (donde dominio.tld es el dominio principal de tu servidor). +Para crear un salón de discusión (Multi-user chat) en tu servidor YunoHost, utiliza el ID nombredelsalon@muc.dominio.tld (donde dominio.tld es el dominio principal de tu servidor). Si utilizas un nombre de dominio personal, es necesario [añadir una redirección de tipo CNAME para el subdominio `muc.`](/dns_config) en tu servidor DNS. diff --git a/XMPP_fr.md b/pages/01.administrate/06.overview/09.xmpp/XMPP.fr.md similarity index 56% rename from XMPP_fr.md rename to pages/01.administrate/06.overview/09.xmpp/XMPP.fr.md index a5d4b0f7..8ac31781 100644 --- a/XMPP_fr.md +++ b/pages/01.administrate/06.overview/09.xmpp/XMPP.fr.md @@ -1,16 +1,25 @@ -#Chat, VoIP et réseau social avec <img src="/images/XMPP_logo.png" width=100> +--- +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). + + +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 @@ -24,34 +33,34 @@ Il existe différents types de clients pour se connecter à XMPP. ### Clients de bureau -- [Gajim](http://gajim.org/fr/) (Linux,Windows) +- [Gajim](http://gajim.org/fr/) (Linux, Windows) - [Dino](https://dino.im) (Linux) -- [Thunderbird](https://www.thunderbird.net/) (multiplateforme) -- [Beagle IM](https://beagle.im/) (Mac OS) +- [Thunderbird](https://www.thunderbird.net/) (multi-plateformes) +- [Beagle IM](https://beagle.im/) (macOS) - [Profanity](https://profanity-im.github.io/) (Linux) ### Clients sur mobile - [Conversations](https://conversations.im/) (Android) - [Xabber](http://xabber.com) (Android) -- [Movim sous Android](https://movim.eu) +- [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 plugins dans `Outils > Plugins` -- L'activer +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/pages/01.administrate/06.overview/09.xmpp/XMPP.md b/pages/01.administrate/06.overview/09.xmpp/XMPP.md new file mode 100644 index 00000000..03767c82 --- /dev/null +++ b/pages/01.administrate/06.overview/09.xmpp/XMPP.md @@ -0,0 +1,71 @@ +--- +title: Chat, VoIP and social network with XMPP +template: docs +taxonomy: + category: docs +routes: + default: '/XMPP' +--- + + + +By default, YunoHost comes installed with an instant messaging server called Metronome which implements the [XMPP protocol](https://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol) (previously known as Jabber). + +This protocol is already used by millions of people around the world—it is an open protocol. +All applications based on XMPP are compatible with each other: When using an XMPP client, you can interact with anybody who has an XMPP account. + +XMPP is an extensible protocol—this means users can configure "extensions" to chatrooms, share messages and files, and make voice and video calls using XMPP. + +## XMPP account + +To use an XMPP account you need a username, in the format: `user@domain.tld`, and a password. + +With YunoHost, an XMPP account is created for all YunoHost users automatically. +The XMPP account credentials corresponds to the user's main e-mail address and password. + +## Connecting to your YunoHost XMPP account + +You can connect to your YunoHost XMPP account in different ways. + +### Web clients + +- [Movim](https://movim.eu) +- [ConverseJS](https://conversejs.org/) +- [Libervia/Salut à Toi](https://salut-a-toi.org/) + +### Desktop clients + +- [Gajim](https://gajim.org/) (Linux, Windows) +- [Dino](https://dino.im) (Linux) +- [Thunderbird](https://www.thunderbird.net/fr/) (multiplatform) +- [Beagle IM](https://beagle.im/) (macOS) +- [Profanity](https://profanity-im.github.io/) (Linux) + +### Mobile clients + +- [Conversations](https://conversations.im/) (Android) +- [Xabber](https://xabber.com) (Android) +- [Movim](https://movim.eu) (Android) +- [ChatSecure](https://chatsecure.org/) (iOS) +- [Monal](https://monal.im/) (iOS) +- [Siskin IM](https://siskin.im/) (iOS) +- [Kaidan](https://www.kaidan.im/) (Ubuntu Touch / Plasma Mobile) + +Here is an exhaustive list of XMPP clients: https://xmpp.org/software/clients.html + +## Encrypt conversations with OMEMO + +XMPP chats can be made secure and private using [OMEMO encryption](https://xmpp.org/extensions/xep-0384.html), for instance using Gajim: +- Install `gajim` and the plugin `gajim-omemo`. +- Turn on the plugin in `Tools > Plugins`. +- Turn on the encryption in the chat with somebody who also has OMEMO. + +## Chatrooms + +To create a chatroom (multi-user chat) on your YunoHost server, use the identifier `chatroomname@muc.yourdomain.tld`. + +For this to work you need to [add the corresponding `muc.` DNS record](/dns_config) in the DNS configuration. + +## VoIP and videoconferences + +A practical tool to call an XMPP client, either with voice or voice+video, is to use the [Jitsi](https://jitsi.org/) client. diff --git a/pages/01.administrate/06.overview/10.backups/backup.fr.md b/pages/01.administrate/06.overview/10.backups/backup.fr.md new file mode 100644 index 00000000..5043b3e0 --- /dev/null +++ b/pages/01.administrate/06.overview/10.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). + + + + +[/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 > <Nom de l'archive> > 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 <nom_d'archive>` 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/<nom_darchive>.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". + + + + +[/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 <archivename>` (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 <archivename> --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/<nom_d'archive>.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/01.administrate/06.overview/10.backups/backup.it.md similarity index 84% rename from backup_it.md rename to pages/01.administrate/06.overview/10.backups/backup.it.md index 6a157779..fd982e25 100644 --- a/backup_it.md +++ b/pages/01.administrate/06.overview/10.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. - + ### Dalla riga di comando @@ -70,10 +77,10 @@ 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 Linux potete copiare uno specifico backup con questo comando: +Un'altra soluzione è quella di usare `scp` (un programma che si basa su [`ssh`](/ssh)) per copiare i file fra due computer usando la riga di comando. In questo modo usando un computer con GNU/Linux potete copiare uno specifico backup con questo comando: ```bash scp admin@your.domain.tld:/home/yunohost.backup/archives/<archivename>.tar.gz ./ @@ -92,7 +99,7 @@ scp /path/to/your/<archivename>.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'. - + ### Dalla riga di comando @@ -157,13 +164,21 @@ Potete seguire questo tutorial sul forum per impostare Borg fra due server: <htt Alternativamente, la app Archivist permette di impostare un sistema simile: <https://forum.yunohost.org/t/new-app-archivist/3747> -#### 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/01.administrate/06.overview/10.backups/backup.md b/pages/01.administrate/06.overview/10.backups/backup.md new file mode 100644 index 00000000..fefca3af --- /dev/null +++ b/pages/01.administrate/06.overview/10.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. + + + +[/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 > <Archive name> > 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 <archive_name>` 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/<archive_name>.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'. + + + +[/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 <archivename>` (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 <archivename> --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/<archive_name>.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/pages/01.administrate/06.overview/11.update/upgrade.fr.md b/pages/01.administrate/06.overview/11.update/upgrade.fr.md new file mode 100644 index 00000000..e748cd92 --- /dev/null +++ b/pages/01.administrate/06.overview/11.update/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/01.administrate/06.overview/11.update/upgrade.md b/pages/01.administrate/06.overview/11.update/upgrade.md new file mode 100644 index 00000000..8acb8a8a --- /dev/null +++ b/pages/01.administrate/06.overview/11.update/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/01.administrate/06.overview/12.security/security.fr.md b/pages/01.administrate/06.overview/12.security/security.fr.md new file mode 100644 index 00000000..1e572001 --- /dev/null +++ b/pages/01.administrate/06.overview/12.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 <nom_utilisateur@votre.domaine.tld> +``` + +!!! 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 <votre_numero_de_port_ssh> +``` + +**Lors de la prochaine connexion SSH**, vous devrez ajouter le paramètre `-p` suivi du port SSH. + +**Exemple**: + +```bash +ssh -p <votre_numero_de_port_ssh> admin@<votre_serveur_yunohost> +``` + +--- + +### 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/01.administrate/06.overview/12.security/security.md b/pages/01.administrate/06.overview/12.security/security.md new file mode 100644 index 00000000..1bb61317 --- /dev/null +++ b/pages/01.administrate/06.overview/12.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 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. 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 those good practices. + +! **WARNING:** Following those 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 <username@your_yunohost_server> +``` + +!!! If you meet permissions issues, set `username` as owner of the dir `~/.ssh` with `chown`. Be careful, for security reason 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 on your server. + +**On your server**, the edition of the SSH configuration file in order to deactivate the 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 <new_ssh_port_number> +``` + +**For the next SSH connections**, you need to add the `-p` option followed by the SSH port number. + +**Sample**: + +```bash +ssh -p <new_ssh_port_number> admin@<your_yunohost_server> +``` + +--- + +### 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 +``` diff --git a/pages/01.administrate/06.overview/13.permissions/groups_and_permissions.fr.md b/pages/01.administrate/06.overview/13.permissions/groups_and_permissions.fr.md new file mode 100644 index 00000000..bb0ff98e --- /dev/null +++ b/pages/01.administrate/06.overview/13.permissions/groups_and_permissions.fr.md @@ -0,0 +1,236 @@ +--- +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 : + + + +## Gestion des groupes + +Le mécanisme de groupe peut être utilisé pour définir des groupes d'utilisateurs qui peuvent ensuite être utilisés pour restreindre les autorisations pour les applications et autres services (tels que l'email ou XMPP). Notez qu'il n'est *pas* obligatoire de créer un groupe pour ce faire : vous pouvez également restreindre l'accès à une application ou à un service de manière individuelle. + +L'utilisation de groupes est cependant utile pour la sémantique, par exemple si vous hébergez plusieurs groupes d'amis, des associations ou des entreprises sur votre serveur, vous pouvez créer des groupes comme "association1" et "association2" et ajouter les membres de chaque association au groupe concerné. + + +### Groupes par défaut +Par défaut, deux groupes spéciaux sont créés : +- `all_users`, qui contient tous les utilisateurs enregistrés sur YunoHost, +- `visitors`, c'est-à-dire les personnes qui consultent le serveur sans être connectées. + +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*. + + + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +Pour obtenir la liste des groupes existants en ligne de commande : + + +```shell +$ yunohost user group list +groups: + all_users: + members: + - alice + - bob + - charlie + - delphine +``` +[/ui-tab] +[/ui-tabs] + +### Créer un nouveau groupe +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] +Pour créer un nouveau groupe, il suffit de cliquer sur le bouton "Nouveau groupe" en haut de la page. Vous ne pouvez choisir qu'un nom formé de lettres (majuscules et minuscules) et d'espaces. Le groupe est créé vide et sans aucune permission. + + + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +Dans la ligne de commande, pour créer un nouveau groupe appelé `yolo_crew`, il faut utiliser + +```shell +$ yunohost user group create yolo_crew +``` +[/ui-tab] +[/ui-tabs] + +### Mettre à jour un groupe +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] +Ajoutons un premier utilisateur à ce groupe : dans le panneau du groupe, cliquez sur le bouton "Ajouter un utilisateur" et faites défiler jusqu'à l'utilisateur souhaité, puis cliquez dessus. + + + +Pour supprimer un utilisateur, cliquez sur la croix à côté de son nom d'utilisateur, dans le panneau du groupe. + + + +[/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.) + +Dans la liste des groupes, nous devrions voir : + +```shell +$ yunohost user group list +groups: + all_users: + members: + - alice + - bob + - charlie + - delphine + yolo_crew: + members: + - charlie + - delphine +``` +[/ui-tab] +[/ui-tabs] + +### Supprimer un groupe + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] +Pour supprimer un groupe, cliquez sur la croix rouge en haut à droite du panneau du groupes. Une confirmation vous sera demandée. + + + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] + +Pour supprimer le groupe `yolo_crew` en ligne de commande, vous pouvez exécuter : + +```shell +$ yunohost user group delete yolo_crew +``` +[/ui-tab] +[/ui-tabs] + +## Gestion des permissions + +Le mécanisme de permissions permet de restreindre l'accès aux services (par exemple mail, XMPP...) et aux applications, ou même à des parties spécifiques des applications (par exemple l'interface d'administration de WordPress). + +### Liste des permissions + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] +La page des groupes liste les permissions données à chaque groupe, y compris les groupes spéciaux `all_users` et `visitors`. + + + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +Pour répertorier les permissions et les accès correspondants en ligne de commande : +```shell +$ yunohost user permission list +permissions: + mail.main: + allowed: all_users + wordpress.admin: + allowed: + wordpress.main: + allowed: all_users + xmpp.main: + allowed: all_users +``` +Ici, nous constatons que tous les utilisateurs enregistrés peuvent utiliser le mail, XMPP, et accéder au blog WordPress. Cependant, personne ne peut accéder à l'interface d'administration de WordPress. + +Plus de détails peuvent être affichés en ajoutant l'option `--full` qui affichera la liste des utilisateurs correspondant aux groupes autorisés, ainsi que les adresses web associées à une permission (pertinent pour les applications web). +[/ui-tab] +[/ui-tabs] + +### Ajouter des permissions à un groupe ou un utilisateur + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] +Pour ajouter une permission à un groupe, il suffit de cliquer sur le bouton "+" dans le panneau du groupe, de faire défiler jusqu'à la permission souhaitée, puis de cliquer dessus. + + + +Notez que vous pouvez également autoriser un seul utilisateur, en utilisant le panneau spécifique en bas de la page. + + + +Notez que, par exemple, si nous voulons restreindre la permission pour le mail afin que seul Bob soit autorisé à envoyer des courriels, nous devons également supprimer la permission du panneau de groupe 'Tous les utilisateurs'. + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] +Pour permettre à un groupe d'accéder à l'interface d'administration de WordPress via la ligne de commande : + +```shell +$ yunohost user permission update wordpress.admin --add yolo_crew +``` + +Vous pouvez également autoriser un seul utilisateur : + +```shell +$ yunohost user permission update wordpress.admin --add alice +``` + +Et maintenant, nous pouvons voir que YoloCrew et Alice ont tous deux accès à l'interface d'administration de WordPress : + +```shell +$ yunohost user permission list + [...] + wordpress.admin: + allowed: + - yolo_crew + - alice + [...] +``` + +Pour permettre seulement à Bob d'accéder aux emails en ligne de commande : + +```shell +$ yunohost user permission update mail --remove all_users --add bob +``` + +[/ui-tab] +[/ui-tabs] +Notez que certaines permissions peuvent être « protégées », ce qui signifie que vous ne pourrez pas les ajouter/enlever du groupe Visiteurs. Ce mécanisme est généralement là car ajouter/enlever la permission n'a pas de sens (ou est un risque de sécurité). + +La webadmin émettra un avertissement si vous définissez une permission qui est remplacée par une permission plus large. + + + +### Montrer/cacher les tuiles dans le portail utilisateur + +Depuis YunoHost 4.1, il est possible de montrer/cacher certaines tuiles dans le portail. + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="À partir de l'interface web"] + +Depuis la webadmin, vous pouvez changer cela en allant dans la vue de l'application à manipuler, puis dans `Gérer les étiquettes et les tuiles`, et cocher/décocher l'option `Montrer la tuile dans le portail utilisateur` pour la permission correspondante. + +[/ui-tab] +[ui-tab title="À partir de la ligne de commande"] + +En ligne de commande, le même genre de chose peut être fait avec : + +```shell +# Activer la tuile pour l'interface d'admin de WordPress +$ yunohost user permission update wordpress.admin --show_tile True +``` +[/ui-tab] +[/ui-tabs] diff --git a/pages/01.administrate/06.overview/13.permissions/groups_and_permissions.md b/pages/01.administrate/06.overview/13.permissions/groups_and_permissions.md new file mode 100644 index 00000000..5c3133de --- /dev/null +++ b/pages/01.administrate/06.overview/13.permissions/groups_and_permissions.md @@ -0,0 +1,236 @@ +--- +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: + + + +## Managing groups + +The group mechanism can be used to define groups of users which then can be used to restrict permissions for applications and other services (such as mail or XMPP). Note that it is *not* mandatory to create a group to do so: you can also restrict access to an app or service on a user-per-user basis. + +Using groups is however useful for semantics, for example if you host multiple groups of friends, associations or businesses on your server, you might want to create groups like `association1` and `association2` and add members of each association to the relevant group. + +### Default groups + +By default, two special groups are created: +- `all_users`, that contain all users registered on YunoHost, +- `visitors`, that applies to people viewing the server while not logged in. + +The content of those groups cannot be changed, only the permissions given to them. + +### List existing groups + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +The existing groups are listed at the top of the *groups and permissions* page. + + + +[/ui-tab] +[ui-tab title="From the command line"] + +To list the currently existing groups in CLI : + +```shell +$ yunohost user group list +groups: + all_users: + members: + - alice + - bob + - charlie + - delphine +``` +[/ui-tab] +[/ui-tabs] + +### Creating a new group + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +To create a new group, simply click on the "New Group" button at the top of the page. You may only choose a name formed with letters (uper- and lowercase) and spaces. The group is created empty and without any permission. + + + +[/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. + + + +To remove a user, click on the cross next to their username, in the group panel. + + + +[/ui-tab] +[ui-tab title="From the command line"] +In CLI, use the following command to add `charlie` and `delphine`to the `yolo_crew` group: + +```shell +$ yunohost user group update yolo_crew --add charlie delphine +``` + +(similarly, `--remove` can be used to remove members from a group) + +Now in the group list we should see: + +```shell +$ yunohost user group list +groups: + all_users: + members: + - alice + - bob + - charlie + - delphine + yolo_crew: + members: + - charlie + - delphine +``` +[/ui-tab] +[/ui-tabs] + +### Deleting groups + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +To delete a group, click on the red cross on the top right of the group panel. You will be asked for confirmation. + + + +[/ui-tab] +[ui-tab title="From the command line"] +To delete the group `yolo_crew` in CLI, you may run + +```shell +$ yunohost user group delete yolo_crew +``` +[/ui-tab] +[/ui-tabs] + +## Managing permissions + +The permission mechanism allow to restrict access to services (for example mail, XMPP...) and apps, or even specific parts of the apps (for example the administration interface of WordPress). + +### List permissions + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +The groups page lists the permissions given to each group, including the special groups `all_users` and `visitors`. + + + +[/ui-tab] +[ui-tab title="From the command line"] +To list permissions and corresponding accesses in CLI: + +```shell +$ yunohost user permission list +permissions: + mail.main: + allowed: all_users + wordpress.admin: + allowed: + wordpress.main: + allowed: all_users + xmpp.main: + allowed: all_users +``` + +Here, we find that all registered users can use email, XMPP, and access the WordPress blog. However, nobody can access the WordPress admin interface. + +More details can be displayed by adding the `--full` option which will display the list of users corresponding to groups allowed, as well as urls associated to a permission (relevant for web apps). +[/ui-tab] +[/ui-tabs] + +### Add accesses to group or users + +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +To add a permission to a group, simply click the "+" button in the group panel, scroll to the desired permission, then click on it. + + + +Note that you can also allow a single user, by using the specific panel at the bottom of the page. + + + +[/ui-tab] +[ui-tab title="From the command line"] +To allow a group to access the WordPress admin interface in CLI: + +```shell +$ yunohost user permission update wordpress.admin --add yolo_crew +``` + +Note that you can also allow a single user, by using the specific panel at the bottom of the page. + +```shell +$ yunohost user permission update wordpress.admin --add alice +``` + +And now we may see that both the YoloCrew and Alice have access to the WordPress admin interface: + +```shell +$ yunohost user permission list + [...] + wordpress.admin: + allowed: + - yolo_crew + - alice + [...] +``` + +Note that, for example, if we want to restrict permission for email so that only Bob is allowed to email, we should also remove `all_users` from the permission, by deleting it from the `all_users` group panel, or in CLI: + +```shell +$ yunohost user permission update mail --remove all_users --add bob +``` +[/ui-tab] +[/ui-tabs] + +Note that some permissions may be "protected", meaning that you won't be able to add/remove the visitor group to this permission. Generally, this is because it would make no sense (or is a security risk) to do so. + +The webadmin will issue a warning if you set a permission that is superseded by a wider permission. + + + +### Hide/display specific tiles in the user portal + +Since YunoHost 4.1, you can choose to hide/display specific tiles in the SSO. +[ui-tabs position="top-left" active="0" theme="lite"] +[ui-tab title="From the web interface"] +In the webadmin, you can do so by going in the corresponding app view, go in `Manage label and tiles` and check/uncheck the option `Display the tile in the user portal` for the corresponding permission. + +[/ui-tab] +[ui-tab title="From the command line"] + +In command line, this may be done with: + +```shell +# Enable the tile for the WordPress admin interface +$ yunohost user permission update wordpress.admin --show_tile True +``` +[/ui-tab] +[/ui-tabs] diff --git a/pages/01.administrate/06.overview/overview.de.md b/pages/01.administrate/06.overview/overview.de.md new file mode 100644 index 00000000..06e7ab16 --- /dev/null +++ b/pages/01.administrate/06.overview/overview.de.md @@ -0,0 +1,20 @@ +--- +title: Übersicht des YunoHost Ökosystems +menu: Geführte Tour +template: docs +taxonomy: + category: docs +routes: + default: '/overview' +--- + +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. + + + + +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/01.administrate/06.overview/overview.fr.md similarity index 54% rename from overview_fr.md rename to pages/01.administrate/06.overview/overview.fr.md index b84f5bf2..7d31b91a 100644 --- a/overview_fr.md +++ b/pages/01.administrate/06.overview/overview.fr.md @@ -1,12 +1,19 @@ -Vue d'ensemble de l'écosystème YunoHost -======================================= - +--- +title: Vue d'ensemble de l'écosystème YunoHost +menu: Visite guidée +template: docs +taxonomy: + category: docs +routes: + default: '/overview' +--- + 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. - + -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 Linux, il est similaire à root. YunoHost possède cet utilisateur supplémentaire 'admin' pour plusieurs raisons techniques.)* +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/01.administrate/06.overview/overview.it.md b/pages/01.administrate/06.overview/overview.it.md new file mode 100644 index 00000000..c6baa083 --- /dev/null +++ b/pages/01.administrate/06.overview/overview.it.md @@ -0,0 +1,19 @@ +--- +title: Vista d'insieme dell'ecosistema YunoHost +menu: Tour guidato +template: docs +taxonomy: + category: docs +routes: + default: '/overview' +--- + +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. + + + +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/01.administrate/06.overview/overview.md similarity index 59% rename from overview.md rename to pages/01.administrate/06.overview/overview.md index 81ad2a3d..517f0306 100644 --- a/overview.md +++ b/pages/01.administrate/06.overview/overview.md @@ -1,14 +1,21 @@ -Overview of the YunoHost ecosystem -================================== +--- +title: Overview of the YunoHost ecosystem +menu: Guided tour +template: docs +taxonomy: + category: docs +routes: + default: '/overview' +--- 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. - + -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 Linux, it is quite similar to root. YunoHost has this additional 'admin' user for several technical reasons.)* +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/dns_nohost_me_es.md b/pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.es.md similarity index 82% rename from dns_nohost_me_es.md rename to pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.es.md index 9a285056..a3aa8723 100644 --- a/dns_nohost_me_es.md +++ b/pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.es.md @@ -1,31 +1,37 @@ -# 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. +Para hacer que el auto-alojamiento esté lo más accesible posible, el Proyecto YunoHost provee un servicio de nombres de dominio *ofertos* y *automáticamente configurados*. Cuando utilizas este servicio, no tienes que configurar tú mismo la [configuración de los registros DNS](/dns_config) que es bastante técnica. Los subdominios siguientes están propuestos : - `loquequieras.nohost.me` ; - `loquequieras.noho.st` ; - `loquequieras.ynh.fr`. -Para aprovechar de este servicio, basta con elegir uno de estos tipos de dominios durante la post-instalación. ¡ Estará automáticamente configurado por Yunohost ! +Para aprovechar de este servicio, basta con elegir uno de estos tipos de dominios durante la post-instalación. ¡ Estará automáticamente configurado por YunoHost ! -N.B. : Por razones de equidad, sólo puedes tener un *único nombre de dominio* nohost.me por instalación de Yunohost. +N.B. : Por razones de equidad, sólo puedes tener un *único nombre de dominio* nohost.me por instalación de YunoHost. ### Subdominios El servicio de dominios `nohost.me`, `noho.st` y `ynh.fr` no permite la creación de subdominios. -Aunque Yunohost permita la instalación de aplicaciones en subdominios (por ejemplo teniendo la aplicación Nextcloud accesible desde la dirección `cloud.midominio.org`), esta función no está permitida con los dominios `nohost.me` y `noho.st` y no es posible tener un subdominio tal como `miaplicacion.midominio.nohost.me`. +Aunque YunoHost permita la instalación de aplicaciones en subdominios (por ejemplo teniendo la aplicación Nextcloud accesible desde la dirección `cloud.midominio.org`), esta función no está permitida con los dominios `nohost.me` y `noho.st` y no es posible tener un subdominio tal como `miaplicacion.midominio.nohost.me`. Para poder aprovechar de las aplicaciones instalables únicamente a la raíz de un nombre de de dominio, hay que tener su propio nombre de dominio. ### Añadir un dominio nohost.me, noho.st o ynh.fr después de la post-instalación -Si ya has hecho la post-instalación y quieres añadir un dominio de tipo nohost.me, puedes utilizar la categoría "Dominios" de la interfaz web, eligiendo la opción "no tengo nombre de dominio..." +Si ya has hecho la post-instalación y quieres añadir un dominio de tipo nohost.me, puedes utilizar la categoría "Dominios" de la interfaz web, eligiendo la opción "No tengo nombre de dominio..." También puedes utilizar los comandos siguientes desde línea de comandos. - ```bash # Añadir el dominio yunohost domain add loquequieras.nohost.me @@ -37,17 +43,20 @@ yunohost dyndns subscribe -d loquequieras.nohost.me # Actualizar la configuración DNS yunohost dyndns update + +# Configurarlo como dominio principal +yunohost domain main-domain -n loquequieras.nohost.me ``` ### Recuperar un dominio nohost.me, noho.st o ynh.fr -Si reinstalas tu servidor y quieres utilizar un dominio automático que ya utilizaste, tienes que pedir una reinstalación del dominio al Proyecto Yunohost [en el hilo de discusión dedicado del foro](https://forum.yunohost.org/t/nohost-domain-recovery/442). +Si reinstalas tu servidor y quieres utilizar un dominio automático que ya utilizaste, tienes que pedir una reinstalación del dominio al Proyecto YunoHost [en el hilo de discusión dedicado del foro](https://forum.yunohost.org/t/nohost-domain-recovery/442). ### Cambiar un dominio nohost.me, noho.st o ynh.fr + Si quieres utilizar otro dominio automático en tu servidor, primero tienes que cancelar el que ya está configurado, siguiendo estas instrucciones : 1. Suprimir el dominio de tu instancia (vía webadmin o `yunohost domain remove`). **Cuidado : esto suprimirá todas las aplicaciones instaladas en este dominio así como sus datos**. 2. Pedir la supresión de tu suscripción [en el hilo de discusión dedicado del foro](https://forum.yunohost.org/t/nohost-domain-recovery/442). 3. Suprimir los archivos de configuración automática de tu instancia (únicamente desde la linea de comando por ahora) : `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` - Luego podrás registrar un nuevo dominio automático. diff --git a/dns_nohost_me_fr.md b/pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.fr.md similarity index 79% rename from dns_nohost_me_fr.md rename to pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.fr.md index 1fa90166..0a0897a3 100644 --- a/dns_nohost_me_fr.md +++ b/pages/01.administrate/07.specific_use_cases/01.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. @@ -9,22 +16,21 @@ Les (sous-)domaines suivants sont proposés : Pour profiter de ce service, il vous suffit de choisir un tel domaine lors de la post-installation. Il sera ensuite automatiquement configuré par YunoHost ! -N.B. : Pour des raisons d'équité, vous ne pouvez avoir qu'*un seul domaine* nohost.me par installation de -YunoHost. +N.B. : Pour des raisons d'équité, vous ne pouvez avoir qu'*un seul domaine* nohost.me par installation de YunoHost. ### Sous-domaines Le service de domaines `nohost.me`, `noho.st` et `ynh.fr` autorise la création de sous-domaines. -YunoHost permet l'installation d'applications sur des sous-domaines (par exemple avoir l'application Owncloud accessible depuis l'adresse `cloud.mondomaine.org`), cette fonctionnalité est aussi permise avec les domaines `nohost.me`, `noho.st` et `ynh.fr` et il est donc possible d’avoir un sous-sous-domaine tel `monapplication.mondomaine.nohost.me`. +YunoHost permet l'installation d'applications sur des sous-domaines (par exemple avoir l'application ownCloud accessible depuis l'adresse `cloud.mondomaine.org`), cette fonctionnalité est aussi permise avec les domaines `nohost.me`, `noho.st` et `ynh.fr` et il est donc possible d’avoir un sous-sous-domaine tel `monapplication.mondomaine.nohost.me`. -Pour créer un sous domaine à un domaine `nohost.me`, `noho.st` et `ynh.fr` il suffit d'ajouter celui-ci à Yunohost de la même manière que n'importe quel autre nom de domaine. +Pour créer un sous domaine à un domaine `nohost.me`, `noho.st` et `ynh.fr` il suffit d'ajouter celui-ci à YunoHost de la même manière que n'importe quel autre nom de domaine. ### Ajouter un domaine nohost.me, noho.st ou ynh.fr après la post-installation -Si vous avez déjà effectué la postinstallation 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..." +Si vous avez déjà effectué la post-installation et souhaitez ajouter un domaine +de type `nohost.me`, vous pouvez utiliser la catégorie "Domaines" de l'interface web, +en choisissant l'option "Je n'ai pas de nom de domaine..." Vous pouvez également utiliser les commandes suivantes depuis la ligne de commande. @@ -41,7 +47,7 @@ yunohost dyndns subscribe -d cequevousvoulez.nohost.me yunohost dyndns update # Le définir comme nouveau domain principal -yunohost tools maindomain --new-domain whateveryouwant.nohost.me +yunohost domain main-domain -n cequevousvoulez.nohost.me ``` ### Récupérer un domaine nohost.me, noho.st ou ynh.fr @@ -49,11 +55,10 @@ yunohost tools maindomain --new-domain whateveryouwant.nohost.me Si vous réinstallez votre serveur et voulez utiliser un domaine automatique déjà utilisé précédemment, il vous faut demander une réinitialisation du domaine au Projet YunoHost, [dans le fil de discussion dédié du forum](https://forum.yunohost.org/t/nohost-domain-recovery/442). ### Changer un domaine nohost.me, noho.st ou ynh.fr + Si vous voulez utiliser un autre domaine automatique sur votre serveur, vous devez d'abord supprimer celui qui est déjà configuré, selon les instructions suivantes : -1. Supprimer le domaine de votre instance (par webadmin ou `yunohost domain remove`). **Attention : cela supprimera -toute application installée sur ce domaine, ainsi que ses données**. +1. Supprimer le domaine de votre instance (par webadmin ou `yunohost domain remove`). **Attention : cela supprimera toute application installée sur ce domaine, ainsi que ses données**. 2. Demander la suppression de votre souscription [dans le fil de discussion dédié du forum](https://forum.yunohost.org/t/nohost-domain-recovery/442). 3. Enlever les fichiers de configuration automatique sur votre instance (uniquement depuis la ligne de commande pour le moment) : `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` - Vous pourrez ensuite enregistrer un nouveau domaine automatique. diff --git a/pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.md b/pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.md new file mode 100644 index 00000000..0ad0fe9a --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/01.domains/01.dns_nohost_me/dns_nohost_me.md @@ -0,0 +1,63 @@ +--- +title: Nohost.me domains +template: docs +taxonomy: + category: docs +routes: + default: '/dns_nohost_me' +--- + +In order to make self-hosting as accessible as possible, the YunoHost Project provides a *free* and *automatically configured* domain name service. By using this service, you won't have to [configure DNS records](/dns_config) yourself, which can be tedious and technical. + +The following (sub)domains are offered: +- `whateveryouwant.nohost.me`; +- `whateveryouwant.noho.st`; +- `whateveryouwant.ynh.fr`. + +To use this service, you simply have to choose such a domain during the post-installation set up. It will then be automatically configured by YunoHost! + +!!! As a fairness measure, each instance may only have **one such domain** setup at any given time. + +### Subdomains + +The `nohost.me`, `noho.st` and `ynh.fr` domain service allows the creation of subdomains. + +YunoHost allows the installation of applications on subdomains (for example, having the Nextcloud application accessible from the `cloud.mydomain.org` address), this feature is also allowed with the `nohost.me`, `noho.st` and `ynh.fr` domains and so it is possible to have a subdomain such as `my.application.mydomain.nohost.me`. To create a subdomain on `nohost.me`, `noho.st` and `ynh.fr`, you just have to add the subdomain to yunohost like any other domains. + + +### Adding a nohost.me, noho.st or ynh.fr domain after the post-installation + +If you already did the postinstall and want to add an automatic domain, you may do so from the "Domains" web interface, selecting the option "I don't have a domain name..." + +Alternatively, the following commands can be used. + +```bash +# Add the domain +yunohost domain add whateveryouwant.nohost.me + +# Subscribe/register to the dyndns service +yunohost dyndns subscribe -d whateveryouwant.nohost.me + +# [ wait ~ 30 seconds ] + +# Update the DNS conf +yunohost dyndns update + +# Set it as the main domain +yunohost domain main-domain -n whateveryouwant.nohost.me +``` + +### Retrieve a nohost.me, noho.st or ynh.fr domain + +If you reinstall your server and want to use a domain already used previously, you must request a domain reset on the forum [in the dedicated thread](https://forum.yunohost.org/t/nohost-domain-recovery/442). + + +### Change a nohost.me, noho.st or ynh.fr domain + +If you wish to use a different automatic domain, you first have to remove your present domain registration. This is done in 3 steps: + +1. Remove the domain from your instance (via webadmin or the `yunohost domain remove` in the CLI). +2. Ask for registration removal [in the dedicated forum thread](https://forum.yunohost.org/t/nohost-domain-recovery/442). +3. Remove automatic domain configuration files on your server, via CLI only: `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` + +You may then add a new domain. diff --git a/dns_dynamicip_fr.md b/pages/01.administrate/07.specific_use_cases/01.domains/02.dns_dynamic_ip/dns_dynamicip.fr.md similarity index 57% rename from dns_dynamicip_fr.md rename to pages/01.administrate/07.specific_use_cases/01.domains/02.dns_dynamic_ip/dns_dynamicip.fr.md index 33589f54..6b499d3c 100644 --- a/dns_dynamicip_fr.md +++ b/pages/01.administrate/07.specific_use_cases/01.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' +--- -<div class="alert alert-warning">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.</div> +! 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. -<img src="/images/dns_dynamic-ip_box_conf.png" width=600> + diff --git a/dns_dynamicip.md b/pages/01.administrate/07.specific_use_cases/01.domains/02.dns_dynamic_ip/dns_dynamicip.md similarity index 57% rename from dns_dynamicip.md rename to pages/01.administrate/07.specific_use_cases/01.domains/02.dns_dynamic_ip/dns_dynamicip.md index 9d4223a5..4e05e2d9 100644 --- a/dns_dynamicip.md +++ b/pages/01.administrate/07.specific_use_cases/01.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' +--- -<div class="alert alert-warning">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.</div> +! 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). -<img src="/images/dns_dynamic-ip_box_conf.png" width=600> + You're good to go ! diff --git a/dns_subdomains_fr.md b/pages/01.administrate/07.specific_use_cases/01.domains/03.dns_subdomains/dns_subdomains.fr.md similarity index 82% rename from dns_subdomains_fr.md rename to pages/01.administrate/07.specific_use_cases/01.domains/03.dns_subdomains/dns_subdomains.fr.md index 132ffe18..37b2b14d 100644 --- a/dns_subdomains_fr.md +++ b/pages/01.administrate/07.specific_use_cases/01.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,17 +17,17 @@ 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… +permet d’avoir un `agenda.mondomaine.fr`, un `blog.mondomaine.fr` etc. ### Installer une application sur un sous-domaine -Pour installer une application sur un sous-domaine, par exemple `blog.mondomaine.fr`, dans YunoHost, tout se fait via la partie administration. On ajoute tout d’abord le sous-domaine à la liste des domaines disponibles. La création d’un sous-domaine dans YunoHost créera les fichiers de configuration correspondants pour Nginx (le serveur web de YunoHost). +Pour installer une application sur un sous-domaine, par exemple `blog.mondomaine.fr`, dans YunoHost, tout se fait via la partie administration. On ajoute tout d’abord le sous-domaine à la liste des domaines disponibles. La création d’un sous-domaine dans YunoHost créera les fichiers de configuration correspondants pour NGINX (le serveur web de YunoHost). Puis dans la partie installation d’une application, on installe l’application de façon traditionnelle en choisissant ce sous-domaine comme domaine (par exemple `blog.mondomaine.fr`) et en indiquant comme chemin `/` (et non `/wordpress` qui est le chemin par défaut). On a alors un message d’avertissement indiquant qu’on ne pourra plus installer d’applications sur ce sous-domaine. On valide. Ça s’installe. diff --git a/dns_subdomains.md b/pages/01.administrate/07.specific_use_cases/01.domains/03.dns_subdomains/dns_subdomains.md similarity index 88% rename from dns_subdomains.md rename to pages/01.administrate/07.specific_use_cases/01.domains/03.dns_subdomains/dns_subdomains.md index 8f0b5a35..c70a0291 100644 --- a/dns_subdomains.md +++ b/pages/01.administrate/07.specific_use_cases/01.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 @@ -21,7 +28,7 @@ then you can access `agenda.mydomain.com`, `blog.mydomain.com` and `rss.mydomain ### Install an application on a subdomain -To install an application on a subdomain in YunoHost, for example `blog.mydomain.com`, the configuration is done in the administration panel. One first add the subdomain to the available domains list. The creation of a subdomain in Yunohost will create the corresponding configuration files for Nginx (the web server used in YunoHost). +To install an application on a subdomain in YunoHost, for example `blog.mydomain.com`, the configuration is done in the administration panel. One first add the subdomain to the available domains list. The creation of a subdomain in YunoHost will create the corresponding configuration files for NGINX (the web server used in YunoHost). Then, in the applications>install panel, one follows the classic installation process by choosing the desired subdomain as domain (for example `blog.mydomain.com`). One needs to choose the path `/` (in place of `/wordpress` for example). A warning message will appear telling that it won't be possible to install other application to this subdomain. After validation, the installation starts. diff --git a/pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.es.md b/pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.es.md new file mode 100644 index 00000000..dcb362d7 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.es.md @@ -0,0 +1,41 @@ +--- +title: Local network access to your server +template: docs +taxonomy: + category: docs +routes: + default: '/dns_local_network' +--- + +After completing your server installation, it is possible that your domain will not be accessible through the local network. This is an issue known as [hairpinning](http://en.wikipedia.org/wiki/Hairpinning) - a feature that is not well supported by some internet routers. + +To solve this issue you can: +- configure your router's DNS +- or alternatively - your /etc/hosts files on your clients workstation + +### Find the local IP address of your server + +First you need to find out the local IP of your server +- either using the tricks lister [here](/finding_the_local_ip) +- or if in the webadmin, in the Diagnosis section, under Internet Connectivity, IPv4, click on 'Details' and you should find an entry for 'Local IP' +- or using the command line on the server : `hostname -I` + +## Configurar el DNS de la caja Internet o del router + +Vas a crear una redirección que estará activa en toda tu red local. El objetivo es crear una redirección DNS hacia el IP de tu servidor en tu caja Internet. Hay que acceder a la interfaz de configuración de tu caja y a los parámetros DNS, y luego crear una redirección local (por ejemplo, `yunohost.local` puede redigir hacia `192.168.1.21`). + +## Configurar el archivo [hosts](https://es.wikipedia.org/wiki/Archivo_hosts) del ordenador cliente +Sólo deberías modificar el archivo hosts si no puedes modificar el DNS de tu caja Internet / router, porque el archivo hosts únicamente afectará el ordenador en el cual el archivo esté modificado. + +- En Windows, encontrarás el archivo hosts aquí : + `%SystemRoot%\system32\drivers\etc\` + > Es preciso visualizar los archivos y sistemas escondidos para ver el archivo hosts. +- En sistemas UNIX (GNU/Linux, macOS), lo encontrarás aquí : + `/etc/hosts` + > Necesitarás derechos root para modificar el archivo. + +Simplemente añade al final del archivo hosts una linea conteniendo la dirección IP privada del servidor y tu nombre de dominio + +```bash +192.168.1.62 domain.tld +``` diff --git a/dns_local_network_fr.md b/pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.fr.md similarity index 55% rename from dns_local_network_fr.md rename to pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.fr.md index bcea9e28..cfbf0e32 100644 --- a/dns_local_network_fr.md +++ b/pages/01.administrate/07.specific_use_cases/01.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 : -<img src="/images/ynh_login.png" width=600> +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 -<img src="/images/ynh_admin_etat_ip.png" width=900> +## Configurer le DNS de la box -- Ou depuis votre routeur ou votre box, selon son modèle. - -## Configurer le DNS de la box ou du routeur - -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.21). +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 <img src="/images/ip_serveur.png" width=800> @@ -31,12 +35,13 @@ Rendez-vous dans l’onglet Réseau puis DNS pour ajouter votre nom de domaine a <img src="/images/dns_9box.png" width=800> ## Configurer le fichier [hosts](http://fr.wikipedia.org/wiki/Hosts) de l’ordinateur client + La modification du fichier hosts devrait être effectuée seulement si vous ne pouvez pas modifier le DNS de votre box ou de votre routeur, car le fichier hosts impactera uniquement l’ordinateur sur lequel le fichier est modifié. - Sous Windows, vous trouverez le fichier hosts ici : `%SystemRoot%\system32\drivers\etc\` > Il est nécessaire d’afficher les fichiers cachés et systèmes pour voir le fichier hosts. -- Sous les systèmes UNIX (GNU/Linux, Mac OS), vous le trouverez ici : +- Sous les systèmes UNIX (GNU/Linux, macOS), vous le trouverez ici : `/etc/hosts` > Les droits root sont nécessaires pour modifier le fichier. diff --git a/dns_local_network.md b/pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.md similarity index 52% rename from dns_local_network.md rename to pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.md index b5653f4e..54385178 100644 --- a/dns_local_network.md +++ b/pages/01.administrate/07.specific_use_cases/01.domains/04.dns_local_network/dns_local_network.md @@ -1,25 +1,28 @@ -#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: -<img src="/images/ynh_login.png" width=600> +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 -<img src="/images/ynh_admin_etat_ip.png" width=900> +## Configure DNS on your Internet router -- Or using your router or internet box, depending on model. - -## Configure DNS of Internet box or 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). +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: @@ -27,16 +30,18 @@ If you haven't found your server private IP, you may find it using the SFR box a <img src="/images/ip_serveur.png" width=800> #### Configure SFR box's DNS + Go to Network tab > DNS and add your domain name to the box's DNS. <img src="/images/dns_9box.png" width=800> ## Configure [hosts](https://en.wikipedia.org/wiki/Host_%28Unix%29) file on client workstation + Modifying hosts file should be done only if you cannot alter your box's DNS or router, because hosts file will only impact the workstation where the file was modified. - Windows hosts file is located at: `%SystemRoot%\system32\drivers\etc\` > You MUST activate hidden and system file display to see the hosts file. -- UNIX systems (GNU/Linux, Mac OS) hosts file is located at: +- UNIX systems (GNU/Linux, macOS) hosts file is located at: `/etc/hosts` > You MUST have root privileges to modify the file. diff --git a/pages/01.administrate/07.specific_use_cases/03.filezilla/filezilla.fr.md b/pages/01.administrate/07.specific_use_cases/03.filezilla/filezilla.fr.md new file mode 100644 index 00000000..407fa7e9 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/03.filezilla/filezilla.fr.md @@ -0,0 +1,82 @@ +--- +title: Échanger des fichiers avec son serveur à l'aide d'une interface graphique +template: docs +taxonomy: + category: docs +routes: + default: '/filezilla' +--- + +Cette page explique comment échanger des fichiers (sauvegardes, musiques, photos, films...) avec son serveur à l'aide d'un outil graphique. C'est donc une méthode alternative au fait d'utiliser la commande `scp` qui peut être jugée technique et cryptique, ou de devoir installer Nextcloud. + +[FileZilla](https://filezilla-project.org/) permet d'accomplir cela. Il s'agit d'un logiciel libre disponible pour Windows, GNU/Linux et macOS. + +## Télécharger et installer FileZilla + +Vous pouvez télécharger FileZilla depuis [cette page](https://filezilla-project.org/download.php?type=client). Le site devrait détecter automatiquement la version nécessaire pour votre ordinateur. Sinon, suivez les instructions pour [installer le client](https://wiki.filezilla-project.org/Client_Installation) + +Installez le programme et lancez *Filezilla*. + +## Configuration + +1. Cliquez sur l'icône *Gestionnaire de Sites* en haut à gauche de sorte à créer une configuration utilisable ultérieurement. + +  + +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.) + +  + +3. Vous recevrez un avertissement. *Vous pouvez l'ignorer s'il s'agit de la première connexion*. + +  + +4. Filezilla vous demande maintenant le mot de passe `admin` pour vous connecter à votre serveur + +  + +5. Une fois cette configuration créée, elle sera réutilisable les fois suivantes. + +  + +## Utilisation + +1. Connectez-vous au Site créé précédemment. *Il se peut que le mot de passe soit redemandé.* + + La partie gauche correspond à votre ordinateur. La partie droite correspond au serveur YunoHost distant. Vous pouvez naviguer dans les dossiers et faire des glisser-déposer entre les deux panneaux. + +  + +2. Dans le panneau de droite, vous pouvez aller dans `/home/yunohost.backup/archives/` pour trouver les archives de [sauvegardes](/backup). + +  + +! [fa=cloud-download /] Assurez-vous de télécharger à la fois le fichier `.tar.gz` et le fichier `.json` + + + +---- + +Sources + +* [Documentation officielle](https://wiki.filezilla-project.org/FileZilla_Client_Tutorial_(fr)) +* [Tutoriel général à Filezilla](https://www.rc.fas.harvard.edu/resources/documentation/sftp-file-transfer/) + +## Alternatives à Filezilla + +### Sous GNU/Linux + +Depuis n'importe quel GNU/Linux récent, vous devriez pouvoir utiliser le gestionnaire de fichiers pour accéder à votre serveur. + +Nautilus de Gnome3 intègre de base des fonctionnalités similaires à FileZilla : + +* <https://help.gnome.org/users/gnome-help/stable/nautilus-connect.html.en> +* <https://www.techrepublic.com/article/how-to-use-linux-file-manager-to-connect-to-an-sftp-server/> + +### Sous Windows + +* [WinSCP](https://winscp.net/) est aussi un bon candidat pour Windows + +### Sous macOS + +* [Cyberduck](https://cyberduck.io/) logiciel libre pour macOS diff --git a/filezilla.md b/pages/01.administrate/07.specific_use_cases/03.filezilla/filezilla.md similarity index 63% rename from filezilla.md rename to pages/01.administrate/07.specific_use_cases/03.filezilla/filezilla.md index 4280a1b7..875f86c7 100644 --- a/filezilla.md +++ b/pages/01.administrate/07.specific_use_cases/03.filezilla/filezilla.md @@ -1,12 +1,15 @@ -# 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. +This page explains how to exchange files (backup archives, music, pictures, movies...) with your server using a graphical interface for the (S)FTP protocol. This is an alternative to using `scp` which can be deemed technical and cryptic, or using an app like Nextcloud. -[FileZilla](https://filezilla-project.org/) can be used for this. It is a free -software and is available for Windows, Linux and macOS. +[FileZilla](https://filezilla-project.org/) can be used for this. It is a free software and is available for Windows, GNU/Linux and macOS. ## Download and install FileZilla @@ -18,45 +21,39 @@ Install the program and run *Filezilla*. 1. Click the *Site Manager* icon in the upper left to begin. -  +  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.) -  +  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.* -  +  4. Filezilla is now asking the `admin` password to connect to your server. -  +  5. Once bookmarked, your server will be backup up and you will get this screen. -  - -<div class="alert alert-success"> - <span class="glyphicon glyphicon-chevron-right"></span> You can now use your new bookmark to connect to the server -</div> +  ## Usage 1. Connect to the Site created previously. *Your passwork might be asked again* - The left panel corresponds to your computer. The right panel corresponds to your remote Yunohost server. You can browse folders and drag-and-drop files between the two panels. + 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. -  +  2. In the right panel, you can browse to `/home/yunohost.backup/archives/` to find [backup archives](/backup). -  +  -<div class="alert alert-warning"> - <span class="glyphicon glyphicon-cloud-download"></span> Be sure to download both the `.tar.gz` and `.json` files. -</div> +! [fa=cloud-download /] Be sure to download both the `.tar.gz` and `.json` files. - + ---- @@ -67,9 +64,9 @@ Sources ## Alternatives to Filezilla -### Linux +### GNU/Linux -From any recent Linux, you should be able to use the `file manager` to reach your server. +From any recent GNU/Linux, you should be able to use the `file manager` to reach your server. Nautilus from Gnome3 has features similar to FileZilla, out of the box. @@ -80,6 +77,6 @@ Nautilus from Gnome3 has features similar to FileZilla, out of the box. * [WinSCP](https://winscp.net/) is also a nice candidate for Windows -### MacOS +### macOS -* [Cyberduck](https://cyberduck.io/) is a free software available on MacOS +* [Cyberduck](https://cyberduck.io/) is a free software available on macOS diff --git a/theming_fr.md b/pages/01.administrate/07.specific_use_cases/04.theming/theming.fr.md similarity index 74% rename from theming_fr.md rename to pages/01.administrate/07.specific_use_cases/04.theming/theming.fr.md index 393e306d..b5cf9ad4 100644 --- a/theming_fr.md +++ b/pages/01.administrate/07.specific_use_cases/04.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 } ``` -<div class="alert alert-info" markdown="1"> -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. -</div> +!!! 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/`. -<div class="alert alert-warning" markdown="1"> -**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 ! -</div> +! **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/01.administrate/07.specific_use_cases/04.theming/theming.md similarity index 57% rename from theming.md rename to pages/01.administrate/07.specific_use_cases/04.theming/theming.md index 4f44f7cb..7968e6ec 100644 --- a/theming.md +++ b/pages/01.administrate/07.specific_use_cases/04.theming/theming.md @@ -1,16 +1,23 @@ -# Customize the appearance of the user portal +--- +title: Customize the appearance of the user portal +template: docs +taxonomy: + category: docs +routes: + default: '/theming' +--- ## Using a theme Since YunoHost 3.5, you can change the theme of the user portal - though for now it requires tweaking via the command line. -You can list the available themes with : +You can list the available themes with: ```bash $ ls /usr/share/ssowat/portal/assets/themes/ ``` -Then you can use `nano /etc/ssowat/conf.json.persistent` to enable the theme you choose like this : +Then you can use `nano /etc/ssowat/conf.json.persistent` to enable the theme you choose like this: ```json { @@ -19,39 +26,39 @@ Then you can use `nano /etc/ssowat/conf.json.persistent` to enable the theme you } ``` -<div class="alert alert-info" markdown="1"> -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. -</div> +!!! 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/`. -<div class="alert alert-warning" markdown="1"> -**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 ! -</div> +! **Beware** that adding third-party themes from random strangers on the internet **is a security risk**. It is equivalent to running someone's else code on your machine, which can be used for malicious purpose such as stealing credentials! + +There are a handful of themes listed [on Github](https://github.com/yunohost-themes). ## Creating your own theme -You can create your own theme by copying the existing theme of your choice. For instance starting from the light theme : +You can create your own theme by copying the existing theme of your choice. For instance starting from the light theme: ```bash cp -r /usr/share/ssowat/portal/assets/themes/{light,your_own_theme} ``` -Then, edit the files the css and js files in `/usr/share/ssowat/portal/assets/themes/your_own_theme` according to what you want to do : +Then, edit the files the CSS and JS files in `/usr/share/ssowat/portal/assets/themes/your_own_theme` according to what you want to do: -- `custom_portal.css` can be used to add custom CSS rules to the user portal ; -- `custom_overlay.css` can be used to customize the small YunoHost button overlay, displayed on apps page which includes it ; +- `custom_portal.css` can be used to add custom CSS rules to the user portal; +- `custom_overlay.css` can be used to customize the small YunoHost button overlay, displayed on apps page which includes it; - `custom_portal.js` can be used to add custom JS code to be ran both on the user portal or when injecting the small YunoHost button / overlay. You can also add your own images and assets which can then be used by the CSS and JS files. +!!! Share your custom theme with the community! https://github.com/yunohost-themes + ### Example : customizing the logo -You may create your own theme simply to change the "branding" of the Yunohost user portal and replace the YunoHost logo with you own ! +You may create your own theme simply to change the "branding" of the YunoHost user portal and replace the YunoHost logo with you own! -To do so, upload your logo to `/usr/share/ssowat/portal/assets/themes/your_own_theme/`, and use the following CSS rules : +To do so, upload your logo to `/usr/share/ssowat/portal/assets/themes/your_own_theme/`, and use the following CSS rules: ```css /* Inside custom_portal.css */ diff --git a/pages/01.administrate/07.specific_use_cases/05.backups/01.evaluate/evaluate.fr.md b/pages/01.administrate/07.specific_use_cases/05.backups/01.evaluate/evaluate.fr.md new file mode 100644 index 00000000..29a67704 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/01.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/01.administrate/07.specific_use_cases/05.backups/01.evaluate/evaluate.md b/pages/01.administrate/07.specific_use_cases/05.backups/01.evaluate/evaluate.md new file mode 100644 index 00000000..00e6023f --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/01.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/01.administrate/07.specific_use_cases/05.backups/02.backup_methods/01.borgbackup/borgbackup.fr.md b/pages/01.administrate/07.specific_use_cases/05.backups/02.backup_methods/01.borgbackup/borgbackup.fr.md new file mode 100644 index 00000000..5c553194 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/02.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/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/01.administrate/07.specific_use_cases/05.backups/02.backup_methods/01.borgbackup/borgbackup.md b/pages/01.administrate/07.specific_use_cases/05.backups/02.backup_methods/01.borgbackup/borgbackup.md new file mode 100644 index 00000000..0d19b25b --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/02.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/01.administrate/07.specific_use_cases/05.backups/02.backup_methods/02.restic/restic.fr.md b/pages/01.administrate/07.specific_use_cases/05.backups/02.backup_methods/02.restic/restic.fr.md new file mode 100644 index 00000000..6f4aa03a --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/02.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/01.administrate/07.specific_use_cases/05.backups/02.backup_methods/02.restic/restic.md b/pages/01.administrate/07.specific_use_cases/05.backups/02.backup_methods/02.restic/restic.md new file mode 100644 index 00000000..30ba422c --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/02.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/01.administrate/07.specific_use_cases/05.backups/02.backup_methods/03.archivist/archivist.fr.md b/pages/01.administrate/07.specific_use_cases/05.backups/02.backup_methods/03.archivist/archivist.fr.md new file mode 100644 index 00000000..0e8c9fcb --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/02.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/01.administrate/07.specific_use_cases/05.backups/02.backup_methods/03.archivist/archivist.md b/pages/01.administrate/07.specific_use_cases/05.backups/02.backup_methods/03.archivist/archivist.md new file mode 100644 index 00000000..808d5528 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/02.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/01.administrate/07.specific_use_cases/05.backups/03.clone_filesystem/clone_filesystem.fr.md b/pages/01.administrate/07.specific_use_cases/05.backups/03.clone_filesystem/clone_filesystem.fr.md new file mode 100644 index 00000000..60cd1a31 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/03.clone_filesystem/clone_filesystem.fr.md @@ -0,0 +1,158 @@ +--- +title: Créer une image du système +template: docs +taxonomy: + category: docs +routes: + default: '/backup/clone_filesystem' +page-toc: + active: true + depth: 3 +--- +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`. + + +Pour restaurer, sélectionner la machine virtuelle, cliquer sur `Snapshots` puis `Restore Snapshot option`. + + +Ensuite cliquer sur `Restore Snapshot`. + +[/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/01.administrate/07.specific_use_cases/05.backups/03.clone_filesystem/clone_filesystem.md b/pages/01.administrate/07.specific_use_cases/05.backups/03.clone_filesystem/clone_filesystem.md new file mode 100644 index 00000000..5e41cdff --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/03.clone_filesystem/clone_filesystem.md @@ -0,0 +1,159 @@ +--- +title: Create a filesystem image +template: docs +taxonomy: + category: docs +routes: + default: '/backup/clone_filesystem' +page-toc: + active: true + depth: 3 +--- + + +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`. + + +To restore, select the virtual machine, click on `Snapshots` then `Restore Snapshot option`. + + +Then click on `Restore Snapshot`. + +[/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/01.administrate/07.specific_use_cases/05.backups/04.avoid_hardware_failure/avoid_hardware_failure.fr.md b/pages/01.administrate/07.specific_use_cases/05.backups/04.avoid_hardware_failure/avoid_hardware_failure.fr.md new file mode 100644 index 00000000..4d32160c --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/04.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/01.administrate/07.specific_use_cases/05.backups/04.avoid_hardware_failure/avoid_hardware_failure.md b/pages/01.administrate/07.specific_use_cases/05.backups/04.avoid_hardware_failure/avoid_hardware_failure.md new file mode 100644 index 00000000..1d8e8865 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/04.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/01.administrate/07.specific_use_cases/05.backups/05.include_exclude_files/include_exclude_files.fr.md b/pages/01.administrate/07.specific_use_cases/05.backups/05.include_exclude_files/include_exclude_files.fr.md new file mode 100644 index 00000000..838855cf --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/05.include_exclude_files/include_exclude_files.fr.md @@ -0,0 +1,129 @@ +--- +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. + +### 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/01.administrate/07.specific_use_cases/05.backups/05.include_exclude_files/include_exclude_files.md b/pages/01.administrate/07.specific_use_cases/05.backups/05.include_exclude_files/include_exclude_files.md new file mode 100644 index 00000000..aa9db714 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/05.include_exclude_files/include_exclude_files.md @@ -0,0 +1,133 @@ +--- +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. + +### 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/01.administrate/07.specific_use_cases/05.backups/06.custom_backup_methods/custom_backup_methods.fr.md b/pages/01.administrate/07.specific_use_cases/05.backups/06.custom_backup_methods/custom_backup_methods.fr.md new file mode 100644 index 00000000..31570cc1 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/06.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/01.administrate/07.specific_use_cases/05.backups/06.custom_backup_methods/custom_backup_methods.md b/pages/01.administrate/07.specific_use_cases/05.backups/06.custom_backup_methods/custom_backup_methods.md new file mode 100644 index 00000000..5f27a37b --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/06.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/01.administrate/07.specific_use_cases/05.backups/07.migrate_or_merge_servers/migrate_or_merge_servers.fr.md b/pages/01.administrate/07.specific_use_cases/05.backups/07.migrate_or_merge_servers/migrate_or_merge_servers.fr.md new file mode 100644 index 00000000..c6f1aa8f --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/07.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/01.administrate/07.specific_use_cases/05.backups/07.migrate_or_merge_servers/migrate_or_merge_servers.md b/pages/01.administrate/07.specific_use_cases/05.backups/07.migrate_or_merge_servers/migrate_or_merge_servers.md new file mode 100644 index 00000000..78fc00ee --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/05.backups/07.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/external_storage_fr.md b/pages/01.administrate/07.specific_use_cases/05.external_storage/external_storage.fr.md similarity index 78% rename from external_storage_fr.md rename to pages/01.administrate/07.specific_use_cases/05.external_storage/external_storage.fr.md index 2283324f..88e4f697 100644 --- a/external_storage_fr.md +++ b/pages/01.administrate/07.specific_use_cases/05.external_storage/external_storage.fr.md @@ -1,4 +1,11 @@ -# Ajouter un stockage externe à son serveur +--- +title: Ajouter un stockage externe à son serveur +template: docs +taxonomy: + category: docs +routes: + default: '/external_storage' +--- ## Introduction @@ -35,11 +42,9 @@ mmcblk0 179:0 0 14.9G 0 disk └─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"). +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"). -<div class="alert alert-warning" markdown="1"> -<span class="glyphicon glyphicon-warning-sign"></span> 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. -</div> +! [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. ## 2. (Optionnel) Formater le disque @@ -71,9 +76,9 @@ mkfs.ext4 /dev/VOTRE_DISQUE1 ## 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` ...). +"Monter" un disque signifie 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éremment (par exemple `/media/mon_disque` ...). -Commençons par cŕeer le répertoire : +Commençons par créer le répertoire : ```bash mkdir /media/stockage ``` @@ -84,7 +89,7 @@ Puis nous pouvons monter le disque manuellement avec : mount /dev/VOTRE_DISQUE1 /media/stockage ``` -(Ici, `/dev/VOTRE_DISQUE1` corresponds à la première partition sur le disque) +(Ici, `/dev/VOTRE_DISQUE1` correspond à 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. diff --git a/external_storage.md b/pages/01.administrate/07.specific_use_cases/05.external_storage/external_storage.md similarity index 89% rename from external_storage.md rename to pages/01.administrate/07.specific_use_cases/05.external_storage/external_storage.md index d9c436c7..9e5d5825 100644 --- a/external_storage.md +++ b/pages/01.administrate/07.specific_use_cases/05.external_storage/external_storage.md @@ -1,4 +1,11 @@ -# Adding an external storage to your server +--- +title: Adding an external storage to your server +template: docs +taxonomy: + category: docs +routes: + default: '/external_storage' +--- ## Introduction @@ -37,9 +44,7 @@ mmcblk0 179:0 0 14.9G 0 disk 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"). -<div class="alert alert-warning" markdown="1"> -<span class="glyphicon glyphicon-warning-sign"></span> On a different setup, your system partition might be `sda` and so your external drive might be `sdb` for instance. -</div> +! [fa=exclamation-triangle /] 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 @@ -57,7 +62,7 @@ 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. +! 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 : diff --git a/email_migration_fr.md b/pages/01.administrate/07.specific_use_cases/06.email_migration/email_migration.fr.md similarity index 87% rename from email_migration_fr.md rename to pages/01.administrate/07.specific_use_cases/06.email_migration/email_migration.fr.md index 7e0151c6..69859b6e 100644 --- a/email_migration_fr.md +++ b/pages/01.administrate/07.specific_use_cases/06.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 <domaine/IP> --port1 993 --ssl1 --user1 <utilisateur> --passwor --host2 <domaine/IP> --port2 993 --ssl2 --user2 <utilisateur> --password2 <mot de passe> ``` -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/01.administrate/07.specific_use_cases/06.email_migration/email_migration.md similarity index 68% rename from email_migration.md rename to pages/01.administrate/07.specific_use_cases/06.email_migration/email_migration.md index 74b9388e..20d40c0e 100644 --- a/email_migration.md +++ b/pages/01.administrate/07.specific_use_cases/06.email_migration/email_migration.md @@ -1,8 +1,15 @@ -# 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)*. -Migration of his emails from a server to an other can be done with two recommended tools: ImapSync or Larch. +Migration of emails from one server to another can be done with two recommended tools: ImapSync or Larch. This tool must be installed on your desktop computer. The transfer method looks at this schema: @@ -16,7 +23,7 @@ Install ImapSync on your client computer by following this [guide](http://imapsy ```bash sudo dnf install imapsync # Under Fedora ``` -Transfer emails from a server to an other: +Transfer emails from one server to another: ```bash imapsync --host1 <domain/IP> --port1 993 --ssl1 --user1 <user> --password1 <password> \ --host2 <domain/IP> --port2 993 --ssl2 --user2 <user> --password2 <password> @@ -32,8 +39,8 @@ After beforehand installed `gem`, install `larch` on your client computer: ```bash sudo gem install larch ``` -Transfer emails from a server to an other: +Transfer emails from one server to another: ```bash larch -a -f imaps://serveur_d'origine.org -t imaps://serveur_de_destination.org ``` -For other type of tranfer refer you to Larch documentation. +For other types of transfer refer to [Larch documentation](https://github.com/rgrove/larch#label-Usage). diff --git a/pages/01.administrate/07.specific_use_cases/07.email_relay/email_configure_relay.fr.md b/pages/01.administrate/07.specific_use_cases/07.email_relay/email_configure_relay.fr.md new file mode 100644 index 00000000..7d4a8cc7 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/07.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/01.administrate/07.specific_use_cases/07.email_relay/email_configure_relay.md b/pages/01.administrate/07.specific_use_cases/07.email_relay/email_configure_relay.md new file mode 100644 index 00000000..5783b3f9 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/07.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/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.fr.md similarity index 74% rename from torhiddenservice_fr.md rename to pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.fr.md index f5d7e4e0..a8409335 100644 --- a/torhiddenservice_fr.md +++ b/pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.fr.md @@ -1,8 +1,13 @@ -## Utiliser YunoHost comme un service caché Tor -<div class="alert alert-warning"> -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é". -</div> -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 @@ -42,7 +47,7 @@ Si vous voulez éviter d’être redirigé vers le portail à la connexion pour #access_by_lua_file /usr/share/ssowat/access.lua; ``` -### Vérifier que l'on a pas fait d'erreurs dans la configuration de Nginx +### Vérifier que l'on a pas fait d'erreurs dans la configuration de NGINX ```bash nginx -t ``` diff --git a/torhiddenservice_it.md b/pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.it.md similarity index 65% rename from torhiddenservice_it.md rename to pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.it.md index 0dcf74fa..406e2fa3 100644 --- a/torhiddenservice_it.md +++ b/pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.it.md @@ -1,9 +1,13 @@ -## Collegarsi a Yunohost attraverso un Hidden Service -<div class="alert alert-warning"> -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". -</div> +--- +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 @@ -31,7 +35,7 @@ cat /var/lib/tor/hidden_service/hostname Il dominio dell'hidden service sarà una cosa tipo *random123456789.onion* -### Aggiungi il dominio .onion a Yunohost +### Aggiungi il dominio .onion a YunoHost ```bash yunohost domain add random123456789.onion ``` @@ -43,7 +47,7 @@ Se non vuoi essere rediretto al portale SSO al login puoi disattivare SSOwat spe #access_by_lua_file /usr/share/ssowat/access.lua; ``` -### Riavvia nginx +### Riavvia NGINX ```bash service nginx restart ``` diff --git a/torhiddenservice.md b/pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.md similarity index 72% rename from torhiddenservice.md rename to pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.md index 44a93a1b..71dadd67 100644 --- a/torhiddenservice.md +++ b/pages/01.administrate/07.specific_use_cases/08.tor/torhiddenservice.md @@ -1,9 +1,13 @@ -## Using YunoHost as a Tor Hidden Service -<div class="alert alert-warning"> -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". -</div> +--- +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 @@ -43,7 +47,7 @@ If you want to avoid being redirected to the SSO portal at login, you can deacti #access_by_lua_file /usr/share/ssowat/access.lua; ``` -### Restart nginx +### Restart NGINX ```bash service nginx restart ``` diff --git a/certificate_custom_fr.md b/pages/01.administrate/07.specific_use_cases/09.certificate_custom/certificate_custom.fr.md similarity index 62% rename from certificate_custom_fr.md rename to pages/01.administrate/07.specific_use_cases/09.certificate_custom/certificate_custom.fr.md index 8cc56002..2ff450ab 100644 --- a/certificate_custom_fr.md +++ b/pages/01.administrate/07.specific_use_cases/09.certificate_custom/certificate_custom.fr.md @@ -1,22 +1,32 @@ -**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**). +--- +title: Certificats personnalisés +template: docs +taxonomy: + category: docs +routes: + default: '/certificate_custom' +--- -Quelques changements ont eu lieu qui impactent les procédures indiquées ci dessous : +**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**). -* le groupe metronome n'est plus utilisé directement mais ssl-cert -* un repertoire /etc/yunohost/certs/DOMAIN.LTD-history/stamp est utilisé pour conserver chaque configuration créée et un lien symbolique est créé dessus. +Quelques changements ont eu lieu qui impactent les procédures indiquées ci-dessous : + +* Le groupe metronome n'est plus utilisé directement mais ssl-cert. +* Un repertoire `/etc/yunohost/certs/DOMAIN.LTD-history/stamp` est utilisé pour conserver chaque configuration créée et un lien symbolique est créé dessus. ### Ajout d’un certificat signé par une autorité (autre que Let's Encrypt) -Après création du certificat auprès de votre autorité d’enregistrement, vous devez être en possession d’une clé privée, le fichier key et d’un certificat public, le fichier crt. -> Attention, le fichier key est très sensible, il est strictement personnel et doit être très bien sécurisé. +Après création du certificat auprès de votre autorité d’enregistrement, vous devez être en possession d’une clé privée, le fichier *key* et d’un certificat public, le fichier *crt*. +> Attention, le fichier *key* est très sensible, il est strictement personnel et doit être très bien sécurisé. Ces deux fichiers doivent être copiés sur le serveur, s’ils ne s’y trouvent pas déjà. + ```bash scp CERTIFICAT.crt admin@DOMAIN.TLD:ssl.crt scp CLE.key admin@DOMAIN.TLD:ssl.key ``` -Depuis Windows, scp est exploitable avec putty, en téléchargeant l’outil [pscp](http://the.earth.li/~sgtatham/putty/latest/x86/pscp.exe) +Depuis Windows, scp est exploitable avec Putty, en téléchargeant l’outil [pscp](http://the.earth.li/~sgtatham/putty/latest/x86/pscp.exe) ```bash pscp -P 22 CERTIFICAT.crt admin@DOMAIN.TLD:ssl.crt @@ -38,7 +48,7 @@ Puis allez dans le dossier parent pour poursuivre. cd /etc/yunohost/certs/DOMAIN.TLD/ ``` -Faites une sauvegarde des certificats d’origine de yunohost, par précaution. +Faites une sauvegarde des certificats d’origine de YunoHost, par précaution. ```bash sudo mkdir yunohost_self_signed @@ -75,7 +85,7 @@ Les certificats intermédiaires et root doivent être réunis avec le certificat cat ae_certs/ssl.crt ae_certs/intermediate_ca.pem ae_certs/ca.pem | sudo tee crt.pem ``` -La clé privée doit être, elle, convertie au format pem. +La clé privée doit être, elle, convertie au format `.pem`. ```bash sudo openssl rsa -in ae_certs/ssl.key -out key.pem -outform PEM @@ -89,21 +99,23 @@ cat crt.pem key.pem Les certificats et la clé privée doivent ressembler à cela : -`-----BEGIN CERTIFICATE-----`<br/> -`MIICVDCCAb0CAQEwDQYJKoZIhvcNAQEEBQAwdDELMAkGA1UEBhMCRlIxFTATBgNV`<br/> -`BAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UEChMDTExC`<br/> -`MREwDwYDVQQLEwhCVFMgSU5GTzEbMBkGA1UEAxMSc2VydmV1ci5idHNpbmZvLmZy`<br/> -`MB4XDTA0MDIwODE2MjQyNloXDTA0MDMwOTE2MjQyNlowcTELMAkGA1UEBhMCRlIx`<br/> -`FTATBgNVBAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UE`<br/> -`ChMDTExCMREwDwYDVQQLEwhCVFMgSU5GTzEYMBYGA1UEAxMPcHJvZi5idHNpbmZv`<br/> -`LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSUagxPSv3LtgDV5sygt12`<br/> -`kSbN/NWP0QUiPlksOkF2NkPfwW/mf55dD1hSndlOM/5kLbSBo5ieE3TgikF0Iktj`<br/> -`BWm5xSqewM5QDYzXFt031DrPX63Fvo+tCKTQoVItdEuJPMahVsXnDyYHeUURRWLW`<br/> -`wc0BzEgFZGGw7wiMF6wt5QIDAQABMA0GCSqGSIb3DQEBBAUAA4GBALD640iwKPMf`<br/> -`pqdYtfvmLnA7CiEuao60i/pzVJE2LIXXXbwYjNAM+7Lov+dFT+b5FcOUGqLymSG3`<br/> -`kSK6OOauBHItgiGI7C87u4EJaHDvGIUxHxQQGsUM0SCIIVGK7Lwm+8e9I2X0G2GP`<br/> -`9t/rrbdGzXXOCl3up99naL5XAzCIp6r5`<br/> -`-----END CERTIFICATE-----` +```plaintext +-----BEGIN CERTIFICATE----- +MIICVDCCAb0CAQEwDQYJKoZIhvcNAQEEBQAwdDELMAkGA1UEBhMCRlIxFTATBgNV +BAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UEChMDTExC +MREwDwYDVQQLEwhCVFMgSU5GTzEbMBkGA1UEAxMSc2VydmV1ci5idHNpbmZvLmZy +MB4XDTA0MDIwODE2MjQyNloXDTA0MDMwOTE2MjQyNlowcTELMAkGA1UEBhMCRlIx +FTATBgNVBAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UE +ChMDTExCMREwDwYDVQQLEwhCVFMgSU5GTzEYMBYGA1UEAxMPcHJvZi5idHNpbmZv +LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSUagxPSv3LtgDV5sygt12 +kSbN/NWP0QUiPlksOkF2NkPfwW/mf55dD1hSndlOM/5kLbSBo5ieE3TgikF0Iktj +BWm5xSqewM5QDYzXFt031DrPX63Fvo+tCKTQoVItdEuJPMahVsXnDyYHeUURRWLW +wc0BzEgFZGGw7wiMF6wt5QIDAQABMA0GCSqGSIb3DQEBBAUAA4GBALD640iwKPMf +pqdYtfvmLnA7CiEuao60i/pzVJE2LIXXXbwYjNAM+7Lov+dFT+b5FcOUGqLymSG3 +kSK6OOauBHItgiGI7C87u4EJaHDvGIUxHxQQGsUM0SCIIVGK7Lwm+8e9I2X0G2GP +9t/rrbdGzXXOCl3up99naL5XAzCIp6r5 +-----END CERTIFICATE----- +``` Enfin, sécurisez les fichiers de votre certificat. @@ -114,15 +126,16 @@ sudo chown root:root -R ae_certs sudo chmod 600 -R ae_certs ``` -Maintenant les certificats (les deux fichiers avec l'extension .pem) doivent être recopiés dans /etc/yunohost/certs/DOMAIN.TLD. +Maintenant les certificats (les deux fichiers avec l'extension `.pem`) doivent être recopiés dans `/etc/yunohost/certs/DOMAIN.TLD`. ```bash cp ae_certs/*.pem ./ ``` -Rechargez la configuration de nginx pour prendre en compte le nouveau certificat. +Rechargez la configuration de NGINX pour prendre en compte le nouveau certificat. + ```bash sudo service nginx reload ``` -Votre certificat est prêt à servir. Vous pouvez toutefois vous assurez de sa mise en place en testant le certificat à l’aide du service de <a href="https://www.geocerts.com/ssl_checker" target="_blank">geocerts</a>. +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 <a href="https://www.geocerts.com/ssl_checker" target="_blank">geocerts</a>. diff --git a/pages/01.administrate/07.specific_use_cases/09.certificate_custom/certificate_custom.md b/pages/01.administrate/07.specific_use_cases/09.certificate_custom/certificate_custom.md new file mode 100644 index 00000000..ee6eeb54 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/09.certificate_custom/certificate_custom.md @@ -0,0 +1,141 @@ +--- +title: Custom certificates +template: docs +taxonomy: + category: docs +routes: + default: '/certificate_custom' +--- + +! **Note:** since version 2.5, YunoHost integrates Let's Encrypt certificates automated management. You can easily and freely [install a Let's Encrypt certificate](/certificate). The following document describes the steps for installing a paid certificate from a certification authority (**Gandi**, **RapidSSL**, **StartSSL**, **Cacert**). + +Some changes have taken place which impact the procedures indicated below: + +* Metronome group is no longer used directly but ssl-cert. +* A `/etc/yunohost/certs/DOMAIN.LTD-history/stamp` directory is used to keep each configuration created and a symlink is created. + +### Adding a signed certificate by an authority (other than Let's Encrypt) + +After the certificate creation with your registration authority, you must have a private key, the key file, and a public certificate, the crt file. +> Note that the key file is very sensitive, it is strictly personal and must be very well secured. + +These two files should be copied to the server, if they are not already there. + +```bash +scp CERTIFICATE.crt admin@DOMAIN.TLD:ssl.crt +scp KEY.key admin@DOMAIN.TLD:ssl.key +``` + +From Windows, scp can be used with Putty, by downloading the tool [pscp](http://the.earth.li/~sgtatham/putty/latest/x86/pscp.exe) + +```bash +pscp -P 22 CERTIFICATE.crt admin@DOMAIN.TLD:ssl.crt +pscp -P 22 KEY.key admin@DOMAIN.TLD:ssl.key +``` + +As soon as the files are on the server, the rest of the work will be done on it. In [ssh](/ssh) or locally. +First, create a folder to store the obtained certificates. + +```bash +sudo mkdir /etc/yunohost/certs/DOMAIN.TLD/ae_certs +sudo mv ssl.key ssl.crt /etc/yunohost/certs/DOMAIN.TLD/ae_certs/ +``` + +Then, go to the parent folder to continue. + +```bash +cd /etc/yunohost/certs/DOMAIN.TLD/ +``` + +As a caution, back up the certificates of origin from YunoHost. + +```bash +sudo mkdir yunohost_self_signed +sudo mv *.pem *.cnf yunohost_self_signed/ +``` + +Depending on the registration authority, intermediate and root certificates must be obtained. + +> **StartSSL** +> ```bash +> sudo wget http://www.startssl.com/certs/ca.pem -O ae_certs/ca.pem +> sudo wget http://www.startssl.com/certs/sub.class1.server.ca.pem -O ae_certs/intermediate_ca.pem +>``` + +> **Gandi** +> ```bash +> sudo wget https://www.gandi.net/static/CAs/GandiStandardSSLCA2.pem -O ae_certs/intermediate_ca.pem +>``` + +> **RapidSSL** +> ```bash +> sudo wget https://knowledge.rapidssl.com/library/VERISIGN/INTERNATIONAL_AFFILIATES/RapidSSL/AR1548/RapidSSLCABundle.txt -O ae_certs/intermediate_ca.pem +>``` + +> **Cacert** +> ```bash +> sudo wget http://www.cacert.org/certs/root.crt -O ae_certs/ca.pem +> sudo wget http://www.cacert.org/certs/class3.crt -O ae_certs/intermediate_ca.pem +>``` + +Intermediate and root certificates must be combined with the obtained certificate to create a unified certificate chain. + +```bash +cat ae_certs/ssl.crt ae_certs/intermediate_ca.pem ae_certs/ca.pem | sudo tee crt.pem +``` + +The private key must be converted to `.pem` format. + +```bash +sudo openssl rsa -in ae_certs/ssl.key -out key.pem -outform PEM +``` + +To ensure the certificates syntax, check the files contents. + +```bash +cat crt.pem key.pem +``` + +The certificates and private key should look like this: + +```plaintext +-----BEGIN CERTIFICATE----- +MIICVDCCAb0CAQEwDQYJKoZIhvcNAQEEBQAwdDELMAkGA1UEBhMCRlIxFTATBgNV +BAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UEChMDTExC +MREwDwYDVQQLEwhCVFMgSU5GTzEbMBkGA1UEAxMSc2VydmV1ci5idHNpbmZvLmZy +MB4XDTA0MDIwODE2MjQyNloXDTA0MDMwOTE2MjQyNlowcTELMAkGA1UEBhMCRlIx +FTATBgNVBAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UE +ChMDTExCMREwDwYDVQQLEwhCVFMgSU5GTzEYMBYGA1UEAxMPcHJvZi5idHNpbmZv +LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSUagxPSv3LtgDV5sygt12 +kSbN/NWP0QUiPlksOkF2NkPfwW/mf55dD1hSndlOM/5kLbSBo5ieE3TgikF0Iktj +BWm5xSqewM5QDYzXFt031DrPX63Fvo+tCKTQoVItdEuJPMahVsXnDyYHeUURRWLW +wc0BzEgFZGGw7wiMF6wt5QIDAQABMA0GCSqGSIb3DQEBBAUAA4GBALD640iwKPMf +pqdYtfvmLnA7CiEuao60i/pzVJE2LIXXXbwYjNAM+7Lov+dFT+b5FcOUGqLymSG3 +kSK6OOauBHItgiGI7C87u4EJaHDvGIUxHxQQGsUM0SCIIVGK7Lwm+8e9I2X0G2GP +9t/rrbdGzXXOCl3up99naL5XAzCIp6r5 +-----END CERTIFICATE----- +``` + +Finally, secure your certificate files. + +```bash +sudo chown root:metronome crt.pem key.pem +sudo chmod 640 crt.pem key.pem +sudo chown root:root -R ae_certs +sudo chmod 600 -R ae_certs +``` + +Now the certificates (two files with the extension `.pem`) must be copied in `/etc/yunohost/certs/DOMAIN.TLD`. + +```bash +cp ae_certs/*.pem ./ +``` + +Reload NGINX configuration to take into account the new certificate. + +```bash +sudo service nginx reload +``` + +Your certificate is ready. However, you can ensure that it is in place by testing the certificate using the <a href="https://www.geocerts.com/ssl_checker" target="_blank">geocerts</a>. + diff --git a/pages/01.administrate/07.specific_use_cases/10.vpn/vpn_advantage.de.md b/pages/01.administrate/07.specific_use_cases/10.vpn/vpn_advantage.de.md new file mode 100644 index 00000000..4fe05ccd --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/10.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. + +! <b>Vorsicht</b>: 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/01.administrate/07.specific_use_cases/10.vpn/vpn_advantage.es.md b/pages/01.administrate/07.specific_use_cases/10.vpn/vpn_advantage.es.md new file mode 100644 index 00000000..d6cdd1c1 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/10.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. + +! <b>Advertencia</b>: 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/01.administrate/07.specific_use_cases/10.vpn/vpn_advantage.fr.md similarity index 65% rename from vpn_advantage_fr.md rename to pages/01.administrate/07.specific_use_cases/10.vpn/vpn_advantage.fr.md index 26a22708..ae8665e3 100644 --- a/vpn_advantage_fr.md +++ b/pages/01.administrate/07.specific_use_cases/10.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. -<div class="alert alert-warning"> -<b>Attention</b> : tous les fournisseurs VPN existants ne remplissent pas ces conditions, assurez-vous bien que celui que vous choisissez les remplis. -</div> +! <b>Attention</b> : 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/01.administrate/07.specific_use_cases/10.vpn/vpn_advantage.md b/pages/01.administrate/07.specific_use_cases/10.vpn/vpn_advantage.md new file mode 100644 index 00000000..0f8b3f52 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/10.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. + +! <b>Beware</b>: 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/moving_app_folder_fr.md b/pages/01.administrate/07.specific_use_cases/11.moving_app_folder/moving_app_folder.fr.md similarity index 87% rename from moving_app_folder_fr.md rename to pages/01.administrate/07.specific_use_cases/11.moving_app_folder/moving_app_folder.fr.md index 78fc1d0d..6f3f3c32 100644 --- a/moving_app_folder_fr.md +++ b/pages/01.administrate/07.specific_use_cases/11.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/01.administrate/07.specific_use_cases/11.moving_app_folder/moving_app_folder.md similarity index 76% rename from moving_app_folder.md rename to pages/01.administrate/07.specific_use_cases/11.moving_app_folder/moving_app_folder.md index 941d3d03..e0802f0e 100644 --- a/moving_app_folder.md +++ b/pages/01.administrate/07.specific_use_cases/11.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/admin_api_fr.md b/pages/01.administrate/07.specific_use_cases/12.api/admin_api.fr.md similarity index 78% rename from admin_api_fr.md rename to pages/01.administrate/07.specific_use_cases/12.api/admin_api.fr.md index bbd5e0cf..d25846d2 100644 --- a/admin_api_fr.md +++ b/pages/01.administrate/07.specific_use_cases/12.api/admin_api.fr.md @@ -1,12 +1,18 @@ -# 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` +## Avec cURL -Il faut d’abord récupérer un cookie de connexion pour ensuite réaliser les actions. Voici un exemple via curl : +Il faut d’abord récupérer un cookie de connexion pour ensuite réaliser les actions. Voici un exemple avec cURL : ```bash # Login (avec mot de passe admin) @@ -15,18 +21,18 @@ 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 \ | grep } | python -mjson.tool ``` -# Avec une classe PHP +## Avec une classe PHP Pour simplifier l’administration à distance d’une instance YunoHost dans le cadre d’un projet CHATONS/Librehosters, des classes API ont été développées par des utilisateurs. -Par exemple, cette [classe PHP](https://github.com/scith/yunohost-api-php) vous permettra d’administrer votre instance YunoHost depuis une application PHP (site web, outil de gestion de capacité…). +Par exemple, cette [classe PHP](https://github.com/scith/yunohost-api-php) vous permettra d’administrer votre instance YunoHost depuis une application PHP (site Web, outil de gestion de capacité...). Voici un exemple de code PHP permettant d’ajouter un utilisateur dans votre instance YunoHost : @@ -55,4 +61,3 @@ if ($ynh->login()) { exit; } ``` - diff --git a/admin_api.md b/pages/01.administrate/07.specific_use_cases/12.api/admin_api.md similarity index 80% rename from admin_api.md rename to pages/01.administrate/07.specific_use_cases/12.api/admin_api.md index acf7c322..ae402051 100644 --- a/admin_api.md +++ b/pages/01.administrate/07.specific_use_cases/12.api/admin_api.md @@ -1,10 +1,17 @@ -# Administration from the API or an external application +--- +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. 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). +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/dev/data/actionsmap/yunohost.yml) (in particular the `api` stuff). -## Using `curl` +## Using cURL -You must first retrieve a login cookie to perform the actions. Here is an example via curl: +You must first retrieve a login cookie to perform the actions. Here is an example with cURL: ```bash # Login (with admin password) diff --git a/pages/01.administrate/07.specific_use_cases/13.sftp_on_apps/sftp_on_apps.md b/pages/01.administrate/07.specific_use_cases/13.sftp_on_apps/sftp_on_apps.md new file mode 100644 index 00000000..d90aced5 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/13.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/01.administrate/07.specific_use_cases/specific_use_cases.fr.md b/pages/01.administrate/07.specific_use_cases/specific_use_cases.fr.md new file mode 100644 index 00000000..e4b84c34 --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/specific_use_cases.fr.md @@ -0,0 +1,10 @@ +--- +title: Cas d'usage spécifiques +template: docs +taxonomy: + category: docs +routes: + default: '/specific_use_cases' +--- + +Dans les pages suivantes, vous trouverez des explications spécifiques à certains cas d'utilisation diff --git a/pages/01.administrate/07.specific_use_cases/specific_use_cases.md b/pages/01.administrate/07.specific_use_cases/specific_use_cases.md new file mode 100644 index 00000000..d610070d --- /dev/null +++ b/pages/01.administrate/07.specific_use_cases/specific_use_cases.md @@ -0,0 +1,10 @@ +--- +title: Specific use cases +template: docs +taxonomy: + category: docs +routes: + default: '/specific_use_cases' +--- + +In the following pages you will find tutorials for specific use cases. diff --git a/fail2ban_fr.md b/pages/01.administrate/08.troubleshooting/01.fail2ban/fail2ban.fr.md similarity index 86% rename from fail2ban_fr.md rename to pages/01.administrate/08.troubleshooting/01.fail2ban/fail2ban.fr.md index 8e9bcf57..959d48c7 100644 --- a/fail2ban_fr.md +++ b/pages/01.administrate/08.troubleshooting/01.fail2ban/fail2ban.fr.md @@ -1,4 +1,11 @@ -# Fail2Ban +--- +title: Fail2Ban +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 : @@ -53,7 +60,7 @@ Lors d’une mise à jour du logiciel **Fail2Ban**, le fichier d’origine `/etc ```bash [DEFAULT] - ignoreip = 127.0.0.1/8 XXX.XXX.XXX.XXX #<= l'adresse IP (on peut en mettre plusieurs, séparées par un espace) que vous voulez passer en liste blanche / whitelist + ignoreip = 127.0.0.1/8 XXX.XXX.XXX.XXX #<= l'adresse IP (on peut en mettre plusieurs, séparées par un espace) que vous voulez passer en liste blanche / whitelist ``` 4. Sauvegardez le fichier et rechargez la configuration de Fail2Ban : @@ -62,4 +69,4 @@ Lors d’une mise à jour du logiciel **Fail2Ban**, le fichier d’origine `/etc sudo fail2ban-client reload ``` -Félicitations, plus de risques de se bannir de son propre serveur YunoHost! +Félicitations, plus de risques de se bannir de son propre serveur YunoHost ! diff --git a/pages/01.administrate/08.troubleshooting/01.fail2ban/fail2ban.it.md b/pages/01.administrate/08.troubleshooting/01.fail2ban/fail2ban.it.md new file mode 100644 index 00000000..fa877fc9 --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/01.fail2ban/fail2ban.it.md @@ -0,0 +1,72 @@ +--- +title: Fail2Ban +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/01.administrate/08.troubleshooting/01.fail2ban/fail2ban.md similarity index 89% rename from fail2ban.md rename to pages/01.administrate/08.troubleshooting/01.fail2ban/fail2ban.md index 6fbafbdd..74d22c6d 100644 --- a/fail2ban.md +++ b/pages/01.administrate/08.troubleshooting/01.fail2ban/fail2ban.md @@ -1,4 +1,11 @@ -# Fail2Ban +--- +title: Fail2Ban +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. @@ -6,7 +13,7 @@ In particular, **Fail2Ban** monitors `SSH` connection attempts. After 5 failed S ## Unban an IP address -To unblock an IP address, you must first access your server by some means (for example from another IP address or from another internet connection than the banned one). +To unblock an IP address, you must first access your server by some means (for example from another IP address or from another internet connection than the banned one). Then, look at the **Fail2Ban’s log** to identify in which `jail` the IP address has been banned: @@ -34,7 +41,7 @@ sudo fail2ban-client set recidive unbanip 11.22.33.44 If you don’t want a "legitimate" IP address to be blocked by **YunoHost** anymore, then you have to fill it in the whitelist of the `jail` configuration file. -When updating the **Fail2ban** software, the original `/etc/fail2ban/jail.conf` file is overwritten. So it is on a new dedicated file that we will store the changes. They will thus be preserved over time. +When updating the **Fail2Ban** software, the original `/etc/fail2ban/jail.conf` file is overwritten. So it is on a new dedicated file that we will store the changes. They will thus be preserved over time. 1. Start by creating the new jail configuration file which will be called `yunohost-whitelist.conf`: @@ -48,7 +55,7 @@ When updating the **Fail2ban** software, the original `/etc/fail2ban/jail.conf` sudo nano /etc/fail2ban/jail.d/yunohost-whitelist.conf ``` -3. Paste the following content into the file and adapt the IP address `XXX.XXX.XXX.XXX` : +3. Paste the following content into the file and adapt the IP address `XXX.XXX.XXX.XXX`: ```bash [DEFAULT] diff --git a/change_admin_password_fr.md b/pages/01.administrate/08.troubleshooting/02.admin_password/change_admin_password.fr.md similarity index 73% rename from change_admin_password_fr.md rename to pages/01.administrate/08.troubleshooting/02.admin_password/change_admin_password.fr.md index 02ada64f..925aa9b1 100644 --- a/change_admin_password_fr.md +++ b/pages/01.administrate/08.troubleshooting/02.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/01.administrate/08.troubleshooting/02.admin_password/change_admin_password.it.md b/pages/01.administrate/08.troubleshooting/02.admin_password/change_admin_password.it.md new file mode 100644 index 00000000..24eddd9b --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/02.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/01.administrate/08.troubleshooting/02.admin_password/change_admin_password.md similarity index 73% rename from change_admin_password.md rename to pages/01.administrate/08.troubleshooting/02.admin_password/change_admin_password.md index 5aec634c..1abba53a 100644 --- a/change_admin_password.md +++ b/pages/01.administrate/08.troubleshooting/02.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/01.administrate/08.troubleshooting/03.noaccess/noaccess.fr.md similarity index 83% rename from noaccess_fr.md rename to pages/01.administrate/08.troubleshooting/03.noaccess/noaccess.fr.md index ec69c1cd..3102fc7b 100644 --- a/noaccess_fr.md +++ b/pages/01.administrate/08.troubleshooting/03.noaccess/noaccess.fr.md @@ -1,20 +1,27 @@ -# 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. Cette page va vous aider à diagnostiquer, obtenir un accès et si besoin réparer votre système. Les pannes les plus courantes sont priorisées de haut en bas. Il vous suffit de tester chaque hypothèse. - - ## Vous avez accès au serveur via l'adresse IP, mais pas avec le nom de domaine ? #### Si vous êtes auto-hébergé à la maison : il faut configurer les redirection de ports Vérifier que vous arrivez à accéder au serveur en utilisant son IP globale (que vous pouvez trouver sur https://ip.yunohost.org). Si cela ne fonctionne pas: - Assurez-vous d'avoir [configuré les redirections de ports](/isp_box_config) - - Certaines box de FAI ne supportent pas le hairpinning et vous ne pouvez pas accéder à votre serveur depuis l'intérieur du réseau local (sauf à passer par l'IP locale). Pour contourner le problème, vous pouvez 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 @@ -32,20 +39,15 @@ Vous pouvez valider que les enregistrements DNS sont corrects en comparant le r - Vous avez une IP dynamique. Dans ce cas, il faut mettre en place un script qui se charge de mettre à jour régulièrement votre IP (ou d'utiliser un nom de domaine en nohost.me, noho.st ou ynh.fr qui inclue un tel mécanisme) - - -## Vous êtes face à une erreur de certificat qui vous empêche d'accéder à la webadmin +## Vous êtes face à une erreur de certificat qui vous empêche d’accéder à la webadmin Si vous venez d'installer votre serveur ou d'ajouter un nouveau domaine, il utilise pour le moment un certificat auto-signé. Dans ce cas, il devrait être possible et légitime d'ajouter *exceptionnellement* une exception de sécurité le temps d'[installer un certificat Let's Encrypt](/certificate) à condition d'être sur une connexion internet sûre (pas avec Tor Browser par exemple). Une erreur de certificat peut également être affichée dans certain cas où vous avez fait une faute de frappe dans la barre d'adresse de votre navigateur. - - ## Vous avez accès en SSH mais pas à la Web admin ou inversement - #### Vous essayez de vous connecter en SSH avec `root` plutôt qu'avec `admin` Par défaut, la connexion en SSH doit s'effectuer avec l'utilisateur `admin`. Il est possible de se connecter à la machine avec l'utilisateur `root` *seulement depuis le réseau local* sur lequel se situe le serveur (ou bien via la console web / VNC pour des VPS). @@ -54,25 +56,25 @@ Lorsque vous exécutez des commandes `yunohost` en tant qu'admin, il faut les pr #### Vous avez été banni temporairement -Votre serveur YunoHost inclut un mécanisme (fail2ban) qui banni automatiquement les IPs qui échouent plusieurs fois à s'authentifier. Dans certains cas, il peut s'agir d'un programme (par exemple un client Nextcloud) qui est configuré avec un ancien mot de passe ou d'un utilisateur qui utilise la même IP que vous. +Votre serveur YunoHost inclut un mécanisme (Fail2Ban) qui banni automatiquement les IPs qui échouent plusieurs fois à s'authentifier. Dans certains cas, il peut s'agir d'un programme (par exemple un client Nextcloud) qui est configuré avec un ancien mot de passe ou d'un utilisateur qui utilise la même IP que vous. Si vous avez été banni en tentant d'accéder à une page web, seul les pages web sont inaccessibles, vous devriez donc pouvoir accéder au serveur en SSH. De même, si vous avez été banni en SSH vous devriez pouvoir accéder à la webadmin. Si vous avez été banni à la fois en SSH et à la webadmin, vous pouvez essayer d'accéder à votre serveur avec une autre IP, par exemple en utilisant la 4G d'un smartphone ou en utilisant Tor Browser. -Voir aussi: [débannir une IP sur Fail2ban](/fail2ban) +Voir aussi : [débannir une IP sur Fail2Ban](/fail2ban) -NB: le bannissement dure en général 10 à 12 minutes. Le bannissement n'est actif qu'en IPv4. +NB : le bannissement dure en général 10 à 12 minutes. Le bannissement n'est actif qu'en IPv4. -#### Le serveur web nginx est cassé +#### 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. +Il se peut également que le serveur web (NGINX) ou le serveur ssh aient été tués suite à un manque d'espace disque ou de RAM / swap. - Tentez de relancer le service avec `systemctl restart nginx`. -- Vous pouvez contrôler l'espace disque utilisé avec `df -h`. Si une de vos partitions est remplie à 100%, il faut identifier ce qui prend de la place sur votre système et faire de la place. Il est possible d'installer l'utilitaire `ncdu` avec `apt install ncdu` puis de faire `ncdu /` pour analyser la taille des dossiers de toute l'arborescence. -- Vous pouvez contrôler l'utilisation de la RAM / swap avec `free -h`. En fonction des résultats, il peut être nécessaire d'optimiser votre serveur pour qu'il utilise moins de RAM (suppression d'app lourdes et inutiles, ...), d'ajouter de la RAM ou d'ajouter un fichier de swap. +- Vous pouvez contrôler l'espace disque utilisé avec `df -h`. Si une de vos partitions est remplie à 100%, il faut identifier ce qui prend de la place sur votre système et faire de la place. Il est possible d'installer l'utilitaire `ncdu` avec `apt install ncdu` puis de faire `ncdu /` pour analyser la taille des dossiers de toute l'arborescence. +- Vous pouvez contrôler l'utilisation de la RAM / swap avec `free -h`. En fonction des résultats, il peut être nécessaire d'optimiser votre serveur pour qu'il utilise moins de RAM (suppression d'app lourdes et inutiles...), d'ajouter de la RAM ou d'ajouter un fichier de swap. #### Votre serveur est accessible en IPv6 mais pas en IPv4 ou inversement @@ -85,18 +87,11 @@ Dans ce cas il faut résoudre votre problème de connectivité. Dans certains, cas une mise à jour de votre box a activé l'IPv6, entraînant des problèmes de configuration au niveau de votre nom de domaine. - - - - - ## La webadmin fonctionne, mais certaines applications web me renvoient une erreur 502. Il est fort probablement que le service correspondant à ces applications soit en panne (typiquement pour les applications PHP, il s'agit de php7.0-fpm ou php7.3-fpm). Vous pouvez alors tenter de relancer le service, et si cela ne fonctionne pas, regarder les logs du service correspondant et/ou [demander de l'aide](/help). - - ## Vous avez perdu votre mot de passe administrateur ? (ou bien le mot de passe est refusé) Si vous arrivez à afficher la page web d'administration (forcez le rafraîchissement avec CTRL + F5 pour être sur) et que vous n'arrivez pas à vous connectez, vous avez probablement un mot de passe erroné. @@ -122,11 +117,11 @@ 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. -TODO: à compléter +TODO : à compléter ## Votre serveur est coincé au démarrage @@ -134,17 +129,14 @@ Dans certains cas, votre serveur peut rester coincé au démarrage. Il peut s'ag Si vous êtes en mode `rescue` avec `grub`, dans ce cas il peut s'agir d'un problème de configuration de `grub` ou d'un disque corrompu. -Dans ce cas il faut accéder au disque avec un autre système (mode `rescue` du fournisseur, live usb, lire la carte SD ou le disque dur avec un autre ordinateur) et essayer de vérifier l'intégrité des partitions avec `smartctl`, `fsck` et `mount`. +Dans ce cas il faut accéder au disque avec un autre système (mode `rescue` du fournisseur, live USB, lire la carte SD ou le disque dur avec un autre ordinateur) et essayer de vérifier l'intégrité des partitions avec `smartctl`, `fsck` et `mount`. Si les disques sont corrompus et difficiles à monter, il faut sauvegarder les données et potentiellement refaire un formatage/réinstaller et/ou changer le disque. Si on arrive à monter le disque, il est possible d'utiliser `systemd-nspawn` pour entrer dans la base de données. Sinon, relancer `grub-update` et `grub-install` en `chroot` ou avec `systemd-nspawn`. - - - -## L'accès en VNC ou via écran ne fonctionne pas +## L’accès en VNC ou via écran ne fonctionne pas Dans ce cas il peut s'agir d'un problème matériel sur votre serveur physique ou d'un problème d'hyperviseur si c'est un VPS. diff --git a/pages/01.administrate/08.troubleshooting/03.noaccess/noaccess.it.md b/pages/01.administrate/08.troubleshooting/03.noaccess/noaccess.it.md new file mode 100644 index 00000000..bef33fc9 --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/03.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/01.administrate/08.troubleshooting/03.noaccess/noaccess.md b/pages/01.administrate/08.troubleshooting/03.noaccess/noaccess.md new file mode 100644 index 00000000..1e283e0d --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/03.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/01.administrate/08.troubleshooting/04.ipv6/ipv6.fr.md similarity index 85% rename from ipv6_fr.md rename to pages/01.administrate/08.troubleshooting/04.ipv6/ipv6.fr.md index b6a66be2..40d5c39e 100644 --- a/ipv6_fr.md +++ b/pages/01.administrate/08.troubleshooting/04.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,9 @@ 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`). -<div class="alert alert-warning" markdown="1"> -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. -</div> +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. ```plaintext iface eth0 inet6 static diff --git a/pages/01.administrate/08.troubleshooting/04.ipv6/ipv6.it.md b/pages/01.administrate/08.troubleshooting/04.ipv6/ipv6.it.md new file mode 100644 index 00000000..a83d0c3d --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/04.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 <your IPv6 address> +netmask <your IPv6 prefix> +post-up /sbin/ip -6 route add <the IPv6 gateway> dev eth0 +post-up /sbin/ip -6 route add default via <the IPv6 gateway> dev eth0 +pre-down /sbin/ip -6 route del default via <the IPv6 gateway> dev eth0 +pre-down /sbin/ip -6 route del <the IPv6 gateway> 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/01.administrate/08.troubleshooting/04.ipv6/ipv6.md similarity index 79% rename from ipv6.md rename to pages/01.administrate/08.troubleshooting/04.ipv6/ipv6.md index fc183f2d..8cc8efc8 100644 --- a/ipv6.md +++ b/pages/01.administrate/08.troubleshooting/04.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. -<div class="alert alert-warning" markdown="1"> -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. -</div> +! 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/01.administrate/08.troubleshooting/05.unblacklisting/blacklist_forms.fr.md similarity index 83% rename from blacklist_forms_fr.md rename to pages/01.administrate/08.troubleshooting/05.unblacklisting/blacklist_forms.fr.md index 2f71a42f..d45f637e 100644 --- a/blacklist_forms_fr.md +++ b/pages/01.administrate/08.troubleshooting/05.unblacklisting/blacklist_forms.fr.md @@ -1,8 +1,17 @@ -# 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. + #### Testez votre serveur Pour tester si votre serveur est sur une liste noire, vous pouvez utiliser les outils suivants : -* [https://www.mail-tester.com](Test en envoyant un mail) +* [Test en envoyant un email](https://www.mail-tester.com) * [Test à partir de l’adresse IP](http://whatismyipaddress.com/blacklist-check) Le cas échéant, voici certains des formulaires vous permettant de retirer votre adresse IP de ces listes : diff --git a/pages/01.administrate/08.troubleshooting/05.unblacklisting/blacklist_forms.it.md b/pages/01.administrate/08.troubleshooting/05.unblacklisting/blacklist_forms.it.md new file mode 100644 index 00000000..a47867aa --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/05.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/blacklist_forms.md b/pages/01.administrate/08.troubleshooting/05.unblacklisting/blacklist_forms.md similarity index 85% rename from blacklist_forms.md rename to pages/01.administrate/08.troubleshooting/05.unblacklisting/blacklist_forms.md index 2fa654c9..168ec91e 100644 --- a/blacklist_forms.md +++ b/pages/01.administrate/08.troubleshooting/05.unblacklisting/blacklist_forms.md @@ -1,4 +1,11 @@ -#Blacklist forms +--- +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. diff --git a/jessie_stretch_migration_fr.md b/pages/01.administrate/08.troubleshooting/06.jessie_stretch/jessie_stretch_migration.fr.md similarity index 93% rename from jessie_stretch_migration_fr.md rename to pages/01.administrate/08.troubleshooting/06.jessie_stretch/jessie_stretch_migration.fr.md index 548b6235..9b77a26d 100644 --- a/jessie_stretch_migration_fr.md +++ b/pages/01.administrate/08.troubleshooting/06.jessie_stretch/jessie_stretch_migration.fr.md @@ -1,4 +1,11 @@ -# Migrer vers Stretch +--- +title: Migrer vers Stretch +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) @@ -34,7 +41,7 @@ puis lisez attentivement l'avertissement et les instructions. En fonction de votre matériel et des paquets installés, la migration peut prendre jusqu'à quelques heures. -Notez qu'il est attendu de voir certaines erreurs (en particulier à propos de fail2ban) pendant la migration - ne vous en inquiétez pas trop. +Notez qu'il est attendu de voir certaines erreurs (en particulier à propos de Fail2Ban) pendant la migration - ne vous en inquiétez pas trop. #### Si la migration a crashé / échoué à un moment. @@ -46,9 +53,9 @@ Si la migration a échoué a un moment donné, la première chose à faire est d Pour cela, allez dans Outils > Diagnostique. (Vous pouvez aussi regarder ce qui est affiché dans le pied de page). En ligne de commande, vous pouvez aussi utiliser `lsb_release -a` et `yunohost --version`. -#### Vérifiez que fail2ban et le pare-feu sont actifs. +#### Vérifiez que Fail2Ban et le pare-feu sont actifs. -Vous devriez voir que fail2ban et le firewall sont actifs. Depuis la webadmin, dans Services (chercher 'fail2ban' et 'yunohost-firewall'). Depuis la ligne de commande, faites `yunohost service status fail2ban yunohost-firewall` : les deux devraient être en `active: active`. +Vous devriez voir que Fail2Ban et le firewall sont actifs. Depuis la webadmin, dans Services (chercher 'fail2ban' et 'yunohost-firewall'). Depuis la ligne de commande, faites `yunohost service status fail2ban yunohost-firewall` : les deux devraient être en `active: active`. #### Vérifiez que les applications fonctionnent diff --git a/jessie_stretch_migration.md b/pages/01.administrate/08.troubleshooting/06.jessie_stretch/jessie_stretch_migration.md similarity index 70% rename from jessie_stretch_migration.md rename to pages/01.administrate/08.troubleshooting/06.jessie_stretch/jessie_stretch_migration.md index c7b2c10d..17ff656b 100644 --- a/jessie_stretch_migration.md +++ b/pages/01.administrate/08.troubleshooting/06.jessie_stretch/jessie_stretch_migration.md @@ -1,4 +1,11 @@ -# Migrating an existing instance to Stretch +--- +title: Migrating an existing instance to Stretch +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). @@ -10,9 +17,9 @@ This page is dedicated to help you migrating an instance from YunoHost 2.7.x (ru - Yet, please don't rush into thinking that you should rush into reinstalling your system. A common "mistake" is to be willing to reinstall a server at the slightest complication. But turns out that reinstalling a system can also be complicated. Instead, if you happen to run into issues, we encourage you to try to investigate and understand what's going on and reach for help instead of just throwing away everything because it looks simpler. -- About external email clients : if you or your users are using external email clients (typically Thunderbird, K9Mail, ...) be aware that the SMTP port changed from 465 (with SSL/TLS) to 587 (STARTTLS). See [this page of doc dedicated to email clients](/email_configure_client). Webmail configurations such as Rainloop should also be updated using the corresponding administration interface. +- About external email clients: if you or your users are using external email clients (typically Thunderbird, K9Mail...) be aware that the SMTP port changed from 465 (with SSL/TLS) to 587 (STARTTLS). See [this page of doc dedicated to email clients](/email_configure_client). Webmail configurations such as Rainloop should also be updated using the corresponding administration interface. -- For advanced users : if you have some custom scripts for backups, be aware that we made some backward-incompatible changes in the backup command line. The deprecated `--hooks`/`--ignore-hooks` options were removed, as well as the options `--ignore-apps`, `--ignore-system`. To make things more intuitive, `yunohost backup create --apps wordpress` (for example) will only backup wordpress, i.e. you don't have to add `--ignore-system` to not backup the system. +- For advanced users: if you have some custom scripts for backups, be aware that we made some backward-incompatible changes in the backup command line. The deprecated `--hooks`/`--ignore-hooks` options were removed, as well as the options `--ignore-apps`, `--ignore-system`. To make things more intuitive, `yunohost backup create --apps wordpress` (for example) will only backup wordpress, i.e. you don't have to add `--ignore-system` to not backup the system. ## Migration procedure @@ -22,7 +29,7 @@ After upgrading to 2.7.14, go to Tools > Migrations to access the migrations int #### From the command line -After upgrading to 2.7.14, run : +After upgrading to 2.7.14, run: ```bash sudo yunohost tools migrations migrate @@ -34,7 +41,7 @@ then read carefully and accept the disclaimer. Depending on your hardware and packages installed, the migration might take up to a few hours. -Note that it is expected to see some errors (in particular about fail2ban) during the migration, so don't worry too much about them. +Note that it is expected to see some errors (in particular about Fail2Ban) during the migration, so don't worry too much about them. #### If the migration crashed / failed at some point. @@ -46,9 +53,9 @@ If the migration failed at some point, it should be possible to relaunch it. If You should be able to see this from the webadmin Tools > Diagnosis, and also in the footer of the page. On the command line, you can use `lsb_release -a` and `yunohost --version`. -#### Check that fail2ban and the firewall are active +#### Check that Fail2Ban and the firewall are active -You should be able to see that fail2ban and the firewall are active. From the webadmin in Services (look for 'fail2ban' and 'yunohost-firewall'). From the command line, run `yunohost service status fail2ban yunohost-firewall`. They should both have `active: active`. +You should be able to see that Fail2Ban and the firewall are active. From the webadmin in Services (look for 'fail2ban' and 'yunohost-firewall'). From the command line, run `yunohost service status fail2ban yunohost-firewall`. They should both have `active: active`. #### Check that your applications are working diff --git a/pages/01.administrate/08.troubleshooting/07.stretch_buster/stretch_buster_migration.fr.md b/pages/01.administrate/08.troubleshooting/07.stretch_buster/stretch_buster_migration.fr.md new file mode 100644 index 00000000..02ec15b9 --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/07.stretch_buster/stretch_buster_migration.fr.md @@ -0,0 +1,72 @@ +--- +title: Migrer vers Buster +template: docs +taxonomy: + category: docs +routes: + default: '/stretch_buster_migration' +--- + +L'objectif cette page est de décrire le processus de migration d'une instance en YunoHost 3.8.x (tournant sous Debian Stretch/9.x) vers YunoHost 4.x (tournant sous Debian Buster/10.x) + +## Notes importantes + +- L'équipe de YunoHost a fait de son mieux pour que cette migration se passe autant en douceur que possible. Elle a été testée durant plusieurs mois et sur plusieurs types d'installations. + +- Néanmoins, vous devez être conscient qu'il s'agit d'une opération délicate. L'administration système est un sujet compliqué et couvrir tous les cas particuliers n'est pas chose aisée. En conséquence, si vous hébergez des données et des systèmes critiques, [faites des sauvegardes](/backup). Et dans tous les cas, soyez patients et attentifs durant la migration. + +- Ne vous précipitez pas à vouloir faire une réinstallation de votre système en pensant que cela serait "plus simple" (sigh). (Une attitude qui revient régulièrement est de vouloir réinstaller son système à la moindre complication...). À la place, si vous rencontrez des problèmes, nous vous encourageons à investiguer, chercher à comprendre et [trouver de l'aide sur le chat ou le forum](/help). + +## Procédure de migration + +#### Depuis la webadmin + +Après avoir mis à jour vers la version en 3.8.5.x, allez dans Outils > Migrations pour accéder à l'interface de migration. Il vous faudra ensuite lire l'avertissement attentivement et l'accepter pour lancer la migration. + +#### Depuis la ligne de commande + +Après avoir mis à jour vers la version 3.8.5.x, lancez : + +```bash +sudo yunohost tools migrations migrate +``` + +puis lisez attentivement l'avertissement et les instructions. + +## Pendant la migration + +En fonction de votre matériel et des paquets installés, la migration peut prendre jusqu'à une ou deux heures. + +Les logs seront affichés dans la barre de message en haut (vous pouvez approcher la souris dessus pour voir l'historique en entier). Ils seront également consultable après coup (comme les autres opérations) dans Outils > Journaux. + +Notez que même si vous fermez la page d'admin, la migration continuera (par contre l'interface d'admin sera partiellement indisponible). + +#### Si la migration a crashé / échoué à un moment. + +Si la migration a échoué a un moment donné, la première chose à faire est de tenter de la relancer. Si cela ne fonctionne toujours pas, il vous faut [trouver de l'aide](/help) (prière de fournir le/les messages correspondants ou tout élément qui vous fait penser que ça n'a pas marché). + +## Choses à vérifier après la migration + +#### Vérifiez que vous êtes véritablement sous Debian Buster / YunoHost 4.x + +Pour cela, vous pouvez aller dans la partie Diagnostic (section Système de base). (Vous pouvez aussi regarder ce qui est affiché à droite dans le pied de page de la webadmin). En ligne de commande, vous pouvez aussi utiliser `lsb_release -a` et `yunohost --version`. + +#### Vérifiez que le diagnostic ne rapporte pas de problème particulier + +Également dans la section Diagnostic de la webadmin, vérifiez qu'il n'y a pas de problème apparu suite à la migration (par exemple un service qui ne tournerais plus...) + +#### Vérifiez que les applications fonctionnent + +Vérifiez que vos applications installées fonctionnent... Si elles ne fonctionnent pas, il est recommandé de tenter de les mettre à jour. (ou bien de manière générale, il est recommandé de les mettre à jour même si elles fonctionnent !). + +## Soucis (mineurs) connus après la migration + +- Quelques fichiers de configurations (`/etc/nsswitch.conf` et `/etc/nslcd.conf`) apparaîtrons comme manuellement modifiés. Vous pouvez appliquer la regen-conf en toute sécurité pour régler le problème avec la commande: + +```bash +yunohost tools regen-conf nsswitch nslcd --force +``` + +(nous allons essayer de corriger ceci automatiquement) + +- Il se peut que la migration postgresql (censée s'effectuer automatiquement après la migration à Buster) ne fonctionne pas correctement... Certains utilisateurs ont rapporté que relancer la migration suffisait à résoudre le problème. (Nous allons voir pour comprendre et corriger ce soucis) diff --git a/pages/01.administrate/08.troubleshooting/07.stretch_buster/stretch_buster_migration.md b/pages/01.administrate/08.troubleshooting/07.stretch_buster/stretch_buster_migration.md new file mode 100644 index 00000000..b4a28ea3 --- /dev/null +++ b/pages/01.administrate/08.troubleshooting/07.stretch_buster/stretch_buster_migration.md @@ -0,0 +1,72 @@ +--- +title: Migrating an existing instance to Buster +template: docs +taxonomy: + category: docs +routes: + default: '/stretch_buster_migration' +--- + +This page is dedicated to help you migrating an instance from YunoHost 3.8.x (running on Debian Stretch/9.x) to YunoHost 4.x (running on Debian Buster/10.x). + +## Important notes + +- The YunoHost team did its best to make sure that the migration is as smooth as possible and was tested over the course of several months in several cases. + +- With that said, please be aware that this is a delicate operation. System administration is a complicated topic and covering every particular cases is quite hard. Therefore, if you host critical data and services, please [make backups](/backup). And in any case, be patient and attentive during the migration. + +- Please don't rush into thinking that you should need to reinstall your system from scratch thinking it would be "simpler" (sigh). (A common attitude is to be willing to reinstall a server at the slightest complication...) Instead, if you happen to run into issues, we encourage you to try to investigate and understand what's going on and [reach for help on the chat and the forum](/help). + +## Migration procedure + +#### From the webadmin + +After upgrading to 3.8.5.x, go to Tools > Migrations to access the migrations interface. You will have to read carefully and accept the disclaimer then launch the migration. + +#### From the command line + +After upgrading to 3.8.5.x, run : + +```bash +sudo yunohost tools migrations migrate +``` + +then read carefully and accept the disclaimer. + +## During the migration + +Depending on your hardware and packages installed, the migration might take up to a few hours. + +The logs will be shown in the message bar (you can hover it to see the whole history). They will also be available after the migration (like any other operations) in Tools > Logs. + +Note that even if you close the webadmin page for some reason, the migration will continue in the background (but the webadmin will be partially unavailable). + +#### If the migration crashed / failed at some point. + +If the migration failed at some point, it should be possible to relaunch it. If it still doesn't work, you can try to [get help](/help) (please provide the corresponding messages or whatever makes you tell that it's not working). + +## What to do after the upgrade + +#### Check that you actually are on Debian Buster and YunoHost 4.x + +For this, go in Diagnosis (category Base system) or look at the footer of the webadmin. In the command line, you can use `lsb_release -a` and `yunohost --version`. + +#### Check that no issue appeared in the diagnosis + +Also in the Diagnosis in the webadmin, make sure that no specific issue appeared after running the migration (for example a service that crashed for some reason). + +#### Check that your applications are working + +Test that your applications are working. If they aren't, you should try to upgrade them (it is also a good idea to upgrade them even if they are working anyway). + +## Current known (minor) issues after the migration + +- Some file (`/etc/nsswitch.conf` and `/etc/nslcd.conf`) will appear as manually modified after the migration. You can safely apply the regen-conf with: + +```bash +yunohost tools regen-conf nsswitch nslcd --force +``` + +(we will try to do this automatically somehow) + +- Sometimes the postgresql migration (that is supposed to happen automatically after the buster migration is ran) fails to run properly... Some users reported that re-launching manually the postgresql migration fixed the issue (we will try to understand and fix this somehow) diff --git a/pages/01.administrate/08.troubleshooting/troubleshooting.fr.md b/pages/01.administrate/08.troubleshooting/troubleshooting.fr.md new file mode 100644 index 00000000..f933f200 --- /dev/null +++ b/pages/01.administrate/08.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 <small>(ou de votre déité, animal, nourriture préférée)</small>, 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/01.administrate/08.troubleshooting/troubleshooting.it.md b/pages/01.administrate/08.troubleshooting/troubleshooting.it.md new file mode 100644 index 00000000..3d8f1186 --- /dev/null +++ b/pages/01.administrate/08.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 <small>(o le vostre divinità preferite / animali / cibo)</small>, 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/01.administrate/08.troubleshooting/troubleshooting.md b/pages/01.administrate/08.troubleshooting/troubleshooting.md new file mode 100644 index 00000000..72370d48 --- /dev/null +++ b/pages/01.administrate/08.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 <small>(or your favourite deity / animal / food)</small>, 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/01.administrate/09.providers/01.registrar/gandi/autodns.md b/pages/01.administrate/09.providers/01.registrar/gandi/autodns.md new file mode 100644 index 00000000..ff5af63a --- /dev/null +++ b/pages/01.administrate/09.providers/01.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' + + + +3. In the next page, click on '(re)Generate the API key'. + + diff --git a/pages/01.administrate/09.providers/01.registrar/ovh/autodns/autodns.fr.md b/pages/01.administrate/09.providers/01.registrar/ovh/autodns/autodns.fr.md new file mode 100644 index 00000000..040c4cca --- /dev/null +++ b/pages/01.administrate/09.providers/01.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/*` + + + +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/01.administrate/09.providers/01.registrar/ovh/autodns/autodns.md b/pages/01.administrate/09.providers/01.registrar/ovh/autodns/autodns.md new file mode 100644 index 00000000..588310a2 --- /dev/null +++ b/pages/01.administrate/09.providers/01.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/*` + + + +3. You will obtain three tokens (an application key, a secret application key, and a consumer key) which should be used in YunoHost's configuration diff --git a/pages/01.administrate/09.providers/01.registrar/ovh/manualdns/manualdns.fr.md b/pages/01.administrate/09.providers/01.registrar/ovh/manualdns/manualdns.fr.md new file mode 100644 index 00000000..fd4f390e --- /dev/null +++ b/pages/01.administrate/09.providers/01.registrar/ovh/manualdns/manualdns.fr.md @@ -0,0 +1,49 @@ +--- +title: Configuration DNS avec OVH +template: docs +taxonomy: + category: docs +routes: + default: '/providers/registrar/ovh/manualdns' + aliases: + - '/OVH' +--- + +Nous allons voir comment configurer le DNS avec [OVH](http://www.ovh.com). + +Après achat de votre nom de domaine, rendez-vous dans l'espace client pour retrouver le panneau de configuration d'OVH, et cliquez sur votre domaine à gauche : + + + +Cliquez sur l'onglet **Zone DNS**, puis sur **Ajouter une entrée** : + + + +Cliquer sur "Modifier en mode textuel", garder les 4 premières lignes : +```bash +$TTL 3600 +@ IN SOA dns104.ovh.net. tech.ovh.net. (2020083101 86400 3600 3600000 60) + IN NS dns104.ovh.net. + IN NS ns104.ovh.net. +``` +puis effacer tout ce qu'il y a en-dessous, et le remplacer par la configuration donnée par votre serveur, comme indiqué dans la [configuration DNS standard](/dns_config). + + +### IP dynamique + +[Tutoriel plus général sur l’IP dynamique](/dns_dynamicip). + +Cette partie est à suivre, que si votre IP est dynamique. + +Pour savoir si votre fournisseur d’accès à Internet vous fournit une IP dynamique [voir ici](/isp). + +Commencez par créer un identifiant DynHost. + +Suivez [ce tutoriel](http://blog.developpez.com/brutus/p6316/ubuntu/configurer_dynhost_ovh_avec_ddclient) pour l’installation de ddclient. +ddclient annonce à OVH le changement d’IP. OVH va alors changer votre IP. + +Il faut ajouter dans le fichier de configuration : +* votre identifiant et votre mot de passe DynHost +* votre nom de domaine + +Il existe un [guide d'utilisation DynHost fait par OVH](https://docs.ovh.com/fr/fr/web/domains/utilisation-dynhost/). diff --git a/OVH.md b/pages/01.administrate/09.providers/01.registrar/ovh/manualdns/manualdns.md similarity index 54% rename from OVH.md rename to pages/01.administrate/09.providers/01.registrar/ovh/manualdns/manualdns.md index 1edcfa70..92f7ceab 100644 --- a/OVH.md +++ b/pages/01.administrate/09.providers/01.registrar/ovh/manualdns/manualdns.md @@ -1,21 +1,39 @@ -#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: -<img src="/images/ovh_control_panel.png" width=800> + Click on the **DNS Zone** tab, then on **Add an entry**: -<img src="/images/ovh_dns_zone.png" width=800> + Now you need to add the DNS redirections as specified by the [standard DNS zone configuration](/dns_config) +Click on "Change in text format", keep the first four lines: +```bash +$TTL 3600 +@ IN SOA dns104.ovh.net. tech.ovh.net. (2020083101 86400 3600 3600000 60) + IN NS dns104.ovh.net. + IN NS ns104.ovh.net. +``` +then erase everything below, and replace it with the configuration generated by YunoHost as explained in [this page](/dns_config). -###Dynamic IP -[General tutorial on dynamic IP](dns_dynamicip). +### Dynamic IP + +[General tutorial on dynamic IP](/dns_dynamicip). You should follow this part if you have a dynamic IP. @@ -26,7 +44,7 @@ Let's create a DynHost id. Follow [this tutorial](http://blog.developpez.com/brutus/p6316/ubuntu/configurer_dynhost_ovh_avec_ddclient) to install ddclient. ddclient will take care of telling OVH that the IP has changed. Then OVH will update the IP. -You need to add in the configuration file : +You need to add in the configuration file: * your login and password DynHost * your domain name diff --git a/pages/01.administrate/09.providers/01.registrar/registrar.md b/pages/01.administrate/09.providers/01.registrar/registrar.md new file mode 100644 index 00000000..a5ed6e3e --- /dev/null +++ b/pages/01.administrate/09.providers/01.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) <br> [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/01.administrate/09.providers/02.isp/free/isp_free.fr.md similarity index 81% rename from isp_free_fr.md rename to pages/01.administrate/09.providers/02.isp/free/isp_free.fr.md index 58ebb590..6520117a 100644 --- a/isp_free_fr.md +++ b/pages/01.administrate/09.providers/02.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/01.administrate/09.providers/02.isp/isp.md b/pages/01.administrate/09.providers/02.isp/isp.md new file mode 100644 index 00000000..23a692b7 --- /dev/null +++ b/pages/01.administrate/09.providers/02.isp/isp.md @@ -0,0 +1,226 @@ +--- +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](/isp/country:bel) + * [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 == 'bel' %} + +### 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 == '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<br>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)**<br> (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)<br>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 | No | No. Business only. | No | No | No. Business only | + + + +{% 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/01.administrate/09.providers/02.isp/orange/isp_orange.fr.md similarity index 81% rename from isp_orange_fr.md rename to pages/01.administrate/09.providers/02.isp/orange/isp_orange.fr.md index ffde62c6..e308d26f 100644 --- a/isp_orange_fr.md +++ b/pages/01.administrate/09.providers/02.isp/orange/isp_orange.fr.md @@ -1,5 +1,15 @@ -# Orange -*Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp)**.* +--- +title: Orange +template: docs +taxonomy: + category: docs +routes: + default: '/providers/isp/orange' + aliases: + - '/isp_orange' +--- + +*Trouvez la liste d’autres fournisseurs d’accès à Internet **[ici](/isp)**.* #### Le courrier électronique @@ -7,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/01.administrate/09.providers/02.isp/sfr/isp_sfr.fr.md b/pages/01.administrate/09.providers/02.isp/sfr/isp_sfr.fr.md new file mode 100644 index 00000000..80374876 --- /dev/null +++ b/pages/01.administrate/09.providers/02.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. + + + +#### 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](https://assistance.sfr.fr/sfrmail-appli/sfrmail/envoyer-e-mail-serveur-smtp.html) diff --git a/pages/01.administrate/09.providers/03.vpn/vpn.md b/pages/01.administrate/09.providers/03.vpn/vpn.md new file mode 100644 index 00000000..99a21e8e --- /dev/null +++ b/pages/01.administrate/09.providers/03.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 | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | +¹ [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 | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | +| [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 | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | +| [Baionet](https://www.baionet.fr/nos-services/vpn/) | ✘ (wireguard) | ? | ? | ? | 2,5 € ou 5 € / mois | 5€ ou 40€ / an | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | +| [FAImaison](https://www.faimaison.net/services/vpn.html) | ✔ (.cube) | ✘ | ✔ | ✘ | Prix libre | 8 ou 16€ / an | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | +| [French Data Network](https://www.fdn.fr/services/vpn/) | ✔ (.cube) | ✔ | ✔ | ✔ | 6,5€ à 23€ / mois | 15 ou 30€ / an | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | +| [Franciliens](https://www.franciliens.net/acces-internet/vpn/) | ✔ (.cube + [internetcube](https://internetcu.be)) | ✔ | ✔ | ✔ | 6,5€ à 23€ / mois | 15 ou 30€ / an | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | +| [Grifon](https://grifon.fr/services/vpn/) | ✔ (manuelle) + L2TP/IPSec | ✔ | ✔ | ✔ | 5€ / mois | 15€ / an | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | +| [Igwan.net](https://neutrinet.be/en/vpn) | ✘ (L2TP/IPSec) | ? | ? | ? | 4 ou 8€ / mois | ? / an | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | +| [Illyse](https://neutrinet.be/en/vpn) | ✔ (manuelle) | ✔ | ✔ | ✔ | 6 ou 8€ / mois | 20€ / an | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | +| [ILOTH](https://iloth.net/vpn/) | ✔ (.cube) | ✘ | ✔ | ✘ | 80€ / an | 5 à 100€ / an | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | +| [Milkywan](https://milkywan.fr/prices#popupTunnel) | ✔ (manuelle) | ✔ | ✔ | ✔ | 5 € / mois | incluse | | +| [Mycélium](https://mycelium-fai.org/wiki/documentation/services/vpn) | ✔ (manuelle) | ✘ | ✘ | ✘ | Prix libre | incluse<br>Réservé aux nordistes(FR 59) | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | +| [Neutrinet](https://neutrinet.be/en/vpn) | ✔ (.cube + [internetcube](https://internetcu.be)) | ✔ | ✔ | ? | ~8 €¹ / mois | incluse | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | +| [Rézine](https://www.rezine.org/acces_internet/tunnels_chiffr%C3%A9s/) | ✔ (manuelle) | ✔ | ✔ | ✔ | 5 à 10€ / mois | Prix libre | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | +| [Swiss Neutral Network](https://www.swissneutral.net/?page_id=31) | ✔ (.cube) | ✔ | ✔ | ✔ | 30.- CHF/mois | 50.- CHF / an<br>Réservé aux suisses | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | +| [Tetaneutral](https://tetaneutral.net/adherer/) | ✘ (wireguard) | ? | ? | ? | 5€¹ / mois | 5 à 100€¹ / an | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | +| [Touraine Data Network](https://tdn-fai.net/) | ✔ (.cube + [internetcube](https://internetcu.be)) | ✔ | ? | ? | 5€ / mois | 10 à 20€ / an | <span class="ffdn">FFDN</span> <span class="label label-success label-as-badge">Non Profit</span> | + +¹ 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 | <span class="label label-success label-as-badge">Non Profit</span> | + +[/ui-tab] +[/ui-tabs] + +<style> +.ffdn { + background-color: #3a87ad; + border-radius: 3px; + display: inline-block; + padding: 4px 4px; + font-weight: bold; + line-height: 14px; + color: #f8f8f8; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + white-space: nowrap; + vertical-align: baseline; +} +</style> diff --git a/pages/01.administrate/09.providers/04.server/server.md b/pages/01.administrate/09.providers/04.server/server.md new file mode 100644 index 00000000..1d3dd79f --- /dev/null +++ b/pages/01.administrate/09.providers/04.server/server.md @@ -0,0 +1,50 @@ +--- +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) <span class="ffdn">FFDN</span> <span class="chatons">CHATONS</span> + + * [Scaleway Dedibox](https://www.scaleway.com/en/dedibox/operating-systems/) (dedicated server) + +## YunoHost IT outsourcing + + * [ReflexLibre](https://reflexlibre.net) (France only) <span class="chatons">CHATONS</span> + +<style> +.ffdn { + background-color: #3a87ad; + border-radius: 3px; + display: inline-block; + padding: 4px 4px; + font-weight: bold; + line-height: 14px; + color: #f8f8f8; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + white-space: nowrap; + vertical-align: baseline; +} +.chatons { + background-color: #f0980c; + border-radius: 3px; + display: inline-block; + padding: 4px 4px; + font-weight: bold; + line-height: 14px; + color: #f8f8f8; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + white-space: nowrap; + vertical-align: baseline; +} +</style> diff --git a/pages/01.administrate/admindoc.de.md b/pages/01.administrate/admindoc.de.md new file mode 100644 index 00000000..aa2fcb86 --- /dev/null +++ b/pages/01.administrate/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/01.administrate/admindoc.es.md b/pages/01.administrate/admindoc.es.md new file mode 100644 index 00000000..227b2b6d --- /dev/null +++ b/pages/01.administrate/admindoc.es.md @@ -0,0 +1,16 @@ +--- +title: Admin guide +template: chapter +taxonomy: + category: docs +routes: + default: /admindoc +--- +<!-- +### Administrate + +# Discover self-hosting, how to install and use YunoHost +--> +### Administrar + +# Descubre el auto-hospedaje, cómo instalar y usar tu YunoHost \ No newline at end of file diff --git a/pages/01.administrate/admindoc.fr.md b/pages/01.administrate/admindoc.fr.md new file mode 100644 index 00000000..bedfb7c6 --- /dev/null +++ b/pages/01.administrate/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/01.administrate/admindoc.it.md b/pages/01.administrate/admindoc.it.md new file mode 100644 index 00000000..0b5090d9 --- /dev/null +++ b/pages/01.administrate/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/01.administrate/admindoc.md b/pages/01.administrate/admindoc.md new file mode 100644 index 00000000..8cd06ba6 --- /dev/null +++ b/pages/01.administrate/admindoc.md @@ -0,0 +1,12 @@ +--- +title: Administration guide +template: chapter +taxonomy: + category: docs +routes: + default: '/admindoc' +--- + +### Administer + +# Learn about self-hosting, how to install and use YunoHost diff --git a/pages/02.applications/01.catalog/apps.de.md b/pages/02.applications/01.catalog/apps.de.md new file mode 100644 index 00000000..d21a53d6 --- /dev/null +++ b/pages/02.applications/01.catalog/apps.de.md @@ -0,0 +1,134 @@ +--- +title: Anwendungskatalog +template: docs +taxonomy: + category: docs +routes: + default: '/apps' +twig_first: true +process: + twig: true +--- + +<div class="javascriptDisclaimer"> +Für diese Seite muss JavaScript aktiviert sein, damit sie korrekt angezeigt werden kann :s. +</div> + +<div class="input-group"> + <span id="filter-app-icon" class="input-group-addon"><i class="fa fa-search"></i></span> + <input id="filter-app-cards" type="text" class="form-control" placeholder="Anwendungen suchen..." aria-describedby="basic-addon1"/> +</div> + +!!! 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 <span class = "label label-warning label-as-badge"> schlechte Qualität </span> 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) %} + +<div id="app-cards-list" class="app-cards-list"> +{% 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 %} + +<div class="app-card panel panel-default" data-appid="{{ app_id }}" data-level="{{ infos.level }}"> +<div class="app-title"> +{% if infos.good_quality %} +<i class="fa fa-star" style="color: gold"></i> +{% endif %} +{{ infos.name }} +<span class="label label-default">{{infos.category}}</span> +{% if infos.broken %} +<span class="label label-error">gebrochen</span> +{% else %} +{% if infos.bad_quality %} +<span class="label label-warning">schlechte Qualität</span> +{% endif %} +{% endif %} +</div> +<div class="app-descr">{{ infos.description[descr_lang] }}</div> +<div class="app-footer"> +<div class="app-buttons btn-group" role="group"> + +<a href="{{infos.url}}" target="_BLANK" type="button" class="btn btn-default col-sm-4"> <i class="fa fa-code"></i> Code </a> +<a href="app_{{app_id}}" target="_BLANK" type="button" class="btn btn-default col-sm-4"> <i class="fa fa-book"></i> Doc </a> +<a href="https://install-app.yunohost.org/?app={{app_id}}" target="_BLANK" type="button" class="btn btn-{% if infos.bad_quality %}error{% else %}success{% endif %} col-sm-4 active"> <i class="fa fa-plus"></i> Install </a> + +</div> +</div> +</div> +{% endfor %} +</div> + +! Wenn Sie keine bestimmte Anwendung finden, nach der Sie suchen, können Sie es der [gewünschten Apps-Liste](/apps_wishlist) hinzufügen. + +<!-- +Javascript helpers +--> + +<script> + +$(document).ready(function () { + + $(".javascriptDisclaimer").hide(); + + function filter() { + + var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); + + $('.app-card').each(function() { + // This is where we actually define how apps are filtered: + // we look for the name of the app (h3) and try to find the user input + // + we check this app match the current quality filter + var text = $(this).find('.app-title').text().toLowerCase() + " " + $(this).find('.app-descr').text().toLowerCase(); + if (text.indexOf(user_input_in_search_field) >= 0) + { + $(this).show(); + } + else + { + $(this).hide(); + } + }); + } + + function sort() { + var sorted = $('.app-card').sort(function (a, b) { + var level_a = Math.min(parseInt($(a).data('level')), 8); + var level_b = Math.min(parseInt($(b).data('level')), 8); + if (level_a > level_b) + { + return -1; + } + else if (level_a < level_b) + { + return 1; + } + else { + var id_a = $(a).data('appid'); + var id_b = $(b).data('appid'); + return id_a > id_b ? 1 : -1; + } + }); + $("#app-cards-list").html(sorted); + } + + //================================================= + // Search & filter bar event + //================================================= + $('#filter-app-cards').keyup(filter); + + $('a[data-quality-filter]').on("click", function(){ + $('#current-quality-filter').text($(this).text()); + $('#current-quality-filter').data("filter", $(this).data("quality-filter")); + filter(); + }); + + sort(); + filter(); + +}); +</script> diff --git a/pages/02.applications/01.catalog/apps.fr.md b/pages/02.applications/01.catalog/apps.fr.md new file mode 100644 index 00000000..1e3c36c7 --- /dev/null +++ b/pages/02.applications/01.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 +--- + +<div class="javascriptDisclaimer"> +Cette page requiert que JavaScript soit activé pour s'afficher correctement :s. +</div> + +<div class="input-group"> + <span id="filter-app-icon" class="input-group-addon"><i class="fa fa-search"></i></span> + <input id="filter-app-cards" type="text" class="form-control" placeholder="Rechercher des apps..." aria-describedby="basic-addon1"/> +</div> + +!!! 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 <span class="label label-warning label-as-badge">mauvaise qualité</span> 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) %} + +<div id="app-cards-list" class="app-cards-list"> +{% 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 %} + +<div class="app-card panel panel-default" data-appid="{{ app_id }}" data-level="{{ infos.level }}"> +<div class="app-title"> +{% if infos.good_quality %} +<i class="fa fa-star" style="color: gold"></i> +{% endif %} +{{ infos.name }} +<span class="label label-default">{{infos.category}}</span> +{% if infos.broken %} +<span class="label label-error">cassée</span> +{% else %} +{% if infos.bad_quality %} +<span class="label label-warning">mauvaise qualité</span> +{% endif %} +{% endif %} +</div> +<div class="app-descr">{{ infos.description[descr_lang] }}</div> +<div class="app-footer"> +<div class="app-buttons btn-group" role="group"> + +<a href="{{infos.url}}" target="_BLANK" type="button" class="btn btn-default col-sm-4"> <i class="fa fa-code"></i> Code </a> +<a href="app_{{app_id}}" target="_BLANK" type="button" class="btn btn-default col-sm-4"> <i class="fa fa-book"></i> Doc </a> +<a href="https://install-app.yunohost.org/?app={{app_id}}" target="_BLANK" type="button" class="btn btn-{% if infos.bad_quality %}error{% else %}success{% endif %} col-sm-4 active"> <i class="fa fa-plus"></i> Install </a> + +</div> +</div> +</div> +{% endfor %} +</div> + +! Si vous ne trouvez pas une application précise que vous recherchez, vous pouvez l'ajouter à la [liste d'apps souhaitées](/apps_wishlist). + +<!-- +Javascript helpers +--> + +<script> + +$(document).ready(function () { + + $(".javascriptDisclaimer").hide(); + + function filter() { + + var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); + + $('.app-card').each(function() { + // This is where we actually define how apps are filtered: + // we look for the name of the app (h3) and try to find the user input + // + we check this app match the current quality filter + var text = $(this).find('.app-title').text().toLowerCase() + " " + $(this).find('.app-descr').text().toLowerCase(); + if (text.indexOf(user_input_in_search_field) >= 0) + { + $(this).show(); + } + else + { + $(this).hide(); + } + }); + } + + function sort() { + var sorted = $('.app-card').sort(function (a, b) { + var level_a = Math.min(parseInt($(a).data('level')), 8); + var level_b = Math.min(parseInt($(b).data('level')), 8); + if (level_a > level_b) + { + return -1; + } + else if (level_a < level_b) + { + return 1; + } + else { + var id_a = $(a).data('appid'); + var id_b = $(b).data('appid'); + return id_a > id_b ? 1 : -1; + } + }); + $("#app-cards-list").html(sorted); + } + + //================================================= + // Search & filter bar event + //================================================= + $('#filter-app-cards').keyup(filter); + + $('a[data-quality-filter]').on("click", function(){ + $('#current-quality-filter').text($(this).text()); + $('#current-quality-filter').data("filter", $(this).data("quality-filter")); + filter(); + }); + + sort(); + filter(); + +}); +</script> diff --git a/pages/02.applications/01.catalog/apps.md b/pages/02.applications/01.catalog/apps.md new file mode 100644 index 00000000..421795f8 --- /dev/null +++ b/pages/02.applications/01.catalog/apps.md @@ -0,0 +1,136 @@ +--- +title: Application catalog +template: docs +taxonomy: + category: docs +routes: + default: '/apps' +twig_first: true +process: + twig: true +--- + +<div class="javascriptDisclaimer"> +This page requires JavaScript enabled to display properly :s. +</div> + +<div class="input-group"> + <span id="filter-app-icon" class="input-group-addon"><i class="fa fa-search"></i></span> + <input id="filter-app-cards" type="text" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/> +</div> + +!!! 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 <span class="label label-warning label-as-badge">low quality</span> 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) %} + +<div id="app-cards-list" class="app-cards-list"> +{% 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 %} + +<div class="app-card panel panel-default" data-appid="{{ app_id }}" data-level="{{ infos.level }}"> +<div class="app-title"> +{% if infos.good_quality %} +<i class="fa fa-star" style="color: gold"></i> +{% endif %} +{{ infos.name }} +<span class="label label-default">{{infos.category}}</span> +{% if infos.broken %} +<span class="label label-error">broken</span> +{% else %} +{% if infos.bad_quality %} +<span class="label label-warning">low quality</span> +{% endif %} +{% endif %} +</div> +<div class="app-descr">{{ infos.description[descr_lang] }}</div> +<div class="app-footer"> +<div class="app-buttons btn-group" role="group"> + +<a href="{{infos.url}}" target="_BLANK" type="button" class="btn btn-default col-sm-4"> <i class="fa fa-code"></i> Code </a> +<a href="app_{{app_id}}" target="_BLANK" type="button" class="btn btn-default col-sm-4"> <i class="fa fa-book"></i> Doc </a> +<a href="https://install-app.yunohost.org/?app={{app_id}}" target="_BLANK" type="button" class="btn btn-{% if infos.bad_quality %}error{% else %}success{% endif %} col-sm-4 active"> <i class="fa fa-plus"></i> Install </a> + +</div> +</div> +</div> +{% endfor %} +</div> + +! If you don't find the app you are looking for, you can add it to the [apps wishlist](/apps_wishlist). + + + +<!-- +Javascript helpers +--> + +<script> + +$(document).ready(function () { + + $(".javascriptDisclaimer").hide(); + + function filter() { + + var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); + + $('.app-card').each(function() { + // This is where we actually define how apps are filtered: + // we look for the name of the app (h3) and try to find the user input + // + we check this app match the current quality filter + var text = $(this).find('.app-title').text().toLowerCase() + " " + $(this).find('.app-descr').text().toLowerCase(); + if (text.indexOf(user_input_in_search_field) >= 0) + { + $(this).show(); + } + else + { + $(this).hide(); + } + }); + } + + function sort() { + var sorted = $('.app-card').sort(function (a, b) { + var level_a = Math.min(parseInt($(a).data('level')), 8); + var level_b = Math.min(parseInt($(b).data('level')), 8); + if (level_a > level_b) + { + return -1; + } + else if (level_a < level_b) + { + return 1; + } + else { + var id_a = $(a).data('appid'); + var id_b = $(b).data('appid'); + return id_a > id_b ? 1 : -1; + } + }); + $("#app-cards-list").html(sorted); + } + + //================================================= + // Search & filter bar event + //================================================= + $('#filter-app-cards').keyup(filter); + + $('a[data-quality-filter]').on("click", function(){ + $('#current-quality-filter').text($(this).text()); + $('#current-quality-filter').data("filter", $(this).data("quality-filter")); + filter(); + }); + + sort(); + filter(); + +}); +</script> diff --git a/pages/02.applications/02.docs/adminer/app_adminer.fr.md b/pages/02.applications/02.docs/adminer/app_adminer.fr.md new file mode 100644 index 00000000..58cf4216 --- /dev/null +++ b/pages/02.applications/02.docs/adminer/app_adminer.fr.md @@ -0,0 +1,24 @@ +--- +title: Adminer +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_adminer' +--- + + + +[](https://install-app.yunohost.org/?app=adminer) [](https://dash.yunohost.org/appci/app/adminer) + +### Index + +- [Liens utiles](#liens-utiles) + +Adminer (anciennement phpMinAdmin, meilleure alternative à phpMyAdmin) est un outil de gestion de base de données (MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, SimpleDB, Elasticsearch, MongoDB). Remplacez phpMyAdmin par Adminer et vous obtiendrez une interface utilisateur plus ordonnée, une meilleure prise en charge des fonctionnalités MySQL, des performances plus élevées et plus de sécurité. [Voir comparaison détaillée](https://www.adminer.org/en/phpmyadmin). + +## Liens utiles + ++ Site web : [adminer.org (en)](https://www.adminer.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/adminer](https://github.com/YunoHost-Apps/adminer_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/adminer/issues](https://github.com/YunoHost-Apps/adminer_ynh/issues) diff --git a/pages/02.applications/02.docs/adminer/app_adminer.md b/pages/02.applications/02.docs/adminer/app_adminer.md new file mode 100644 index 00000000..50581bce --- /dev/null +++ b/pages/02.applications/02.docs/adminer/app_adminer.md @@ -0,0 +1,24 @@ +--- +title: Adminer +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_adminer' +--- + + + +[](https://install-app.yunohost.org/?app=adminer) [](https://dash.yunohost.org/appci/app/adminer) + +### Index + +- [Useful links](#useful-links) + +Adminer (formerly phpMinAdmin better alternate to phpMyAdmin) is a full-featured database management tool (MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, SimpleDB, Elasticsearch, MongoDB). Replace phpMyAdmin with Adminer and you will get a tidier user interface, better support for MySQL features, higher performance and more security. [See detailed comparison](https://www.adminer.org/en/phpmyadmin). + +## Useful links + ++ Website: [adminer.org](https://www.adminer.org/) ++ Application software repository: [github.com - YunoHost-Apps/adminer](https://github.com/YunoHost-Apps/adminer_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/adminer/issues](https://github.com/YunoHost-Apps/adminer_ynh/issues) diff --git a/app_airsonic_fr.md b/pages/02.applications/02.docs/airsonic/app_airsonic.fr.md similarity index 90% rename from app_airsonic_fr.md rename to pages/02.applications/02.docs/airsonic/app_airsonic.fr.md index b84967ec..3950e18b 100644 --- a/app_airsonic_fr.md +++ b/pages/02.applications/02.docs/airsonic/app_airsonic.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/airsonic_logo.png" height="80px" alt="logo de Airsonic"> Airsonic +--- +title: Airsonic +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_airsonic' +--- + + [](https://install-app.yunohost.org/?app=airsonic) [](https://dash.yunohost.org/appci/app/airsonic) diff --git a/app_airsonic.md b/pages/02.applications/02.docs/airsonic/app_airsonic.md similarity index 89% rename from app_airsonic.md rename to pages/02.applications/02.docs/airsonic/app_airsonic.md index 0b0e501a..6300ab63 100644 --- a/app_airsonic.md +++ b/pages/02.applications/02.docs/airsonic/app_airsonic.md @@ -1,4 +1,13 @@ -# <img src="/images/airsonic_logo.png" height="80px" alt="airsonic's logo"> Airsonic +--- +title: Airsonic +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_airsonic' +--- + + [](https://install-app.yunohost.org/?app=airsonic) [](https://dash.yunohost.org/appci/app/airsonic) diff --git a/app_ampache_fr.md b/pages/02.applications/02.docs/ampache/app_ampache.fr.md similarity index 87% rename from app_ampache_fr.md rename to pages/02.applications/02.docs/ampache/app_ampache.fr.md index 16c294b2..0cf53d47 100644 --- a/app_ampache_fr.md +++ b/pages/02.applications/02.docs/ampache/app_ampache.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/ampache_logo.png" height="80px" alt="logo de Ampache"> Ampache +--- +title: Ampache +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ampache' +--- + + [](https://install-app.yunohost.org/?app=ampache) [](https://dash.yunohost.org/appci/app/ampache) diff --git a/app_ampache.md b/pages/02.applications/02.docs/ampache/app_ampache.md similarity index 86% rename from app_ampache.md rename to pages/02.applications/02.docs/ampache/app_ampache.md index f31fdb44..4f512a15 100644 --- a/app_ampache.md +++ b/pages/02.applications/02.docs/ampache/app_ampache.md @@ -1,4 +1,13 @@ -# <img src="/images/ampache_logo.png" height="80px" alt="Ampache's logo"> Ampache +--- +title: Ampache +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ampache' +--- + + [](https://install-app.yunohost.org/?app=ampache) [](https://dash.yunohost.org/appci/app/ampache) diff --git a/app_anarchism_fr.md b/pages/02.applications/02.docs/anarchism/app_anarchism.fr.md similarity index 83% rename from app_anarchism_fr.md rename to pages/02.applications/02.docs/anarchism/app_anarchism.fr.md index cf3b5140..98671fe6 100644 --- a/app_anarchism_fr.md +++ b/pages/02.applications/02.docs/anarchism/app_anarchism.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/anarchism_logo.svg" height="80px" alt="logo de Anarchism"> Anarchism +--- +title: Anarchism +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_anarchism' +--- + + [](https://install-app.yunohost.org/?app=anarchism) [](https://dash.yunohost.org/appci/app/anarchism) diff --git a/app_anarchism.md b/pages/02.applications/02.docs/anarchism/app_anarchism.md similarity index 82% rename from app_anarchism.md rename to pages/02.applications/02.docs/anarchism/app_anarchism.md index 436a8387..37b6f548 100644 --- a/app_anarchism.md +++ b/pages/02.applications/02.docs/anarchism/app_anarchism.md @@ -1,4 +1,13 @@ -# <img src="/images/anarchism_logo.svg" height="80px" alt="Anarchism's logo"> Anarchism +--- +title: Anarchism +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_anarchism' +--- + + [](https://install-app.yunohost.org/?app=anarchism) [](https://dash.yunohost.org/appci/app/anarchism) diff --git a/app_anfora_fr.md b/pages/02.applications/02.docs/anfora/app_anfora.fr.md similarity index 81% rename from app_anfora_fr.md rename to pages/02.applications/02.docs/anfora/app_anfora.fr.md index 5773d14a..94c3b1bb 100644 --- a/app_anfora_fr.md +++ b/pages/02.applications/02.docs/anfora/app_anfora.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/anfora_logo.svg" height="80px" alt="logo de Anfora"> Anfora +--- +title: Anfora +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_anfora' +--- + + [](https://install-app.yunohost.org/?app=anfora) [](https://dash.yunohost.org/appci/app/anfora) diff --git a/app_anfora.md b/pages/02.applications/02.docs/anfora/app_anfora.md similarity index 81% rename from app_anfora.md rename to pages/02.applications/02.docs/anfora/app_anfora.md index 89799ef9..3b9f30fc 100644 --- a/app_anfora.md +++ b/pages/02.applications/02.docs/anfora/app_anfora.md @@ -1,4 +1,13 @@ -# <img src="/images/anfora_logo.svg" height="80px" alt="Anfora's logo"> Anfora +--- +title: Anfora +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_anfora' +--- + + [](https://install-app.yunohost.org/?app=anfora) [](https://dash.yunohost.org/appci/app/anfora) diff --git a/appsdoc.md b/pages/02.applications/02.docs/appsdoc.md_ similarity index 61% rename from appsdoc.md rename to pages/02.applications/02.docs/appsdoc.md_ index 161c0361..32e978bc 100644 --- a/appsdoc.md +++ b/pages/02.applications/02.docs/appsdoc.md_ @@ -1,17 +1,32 @@ +--- +title: Apps list +template: docs +taxonomy: + category: docs +routes: + default: '/appsdoc' +--- + +- [Adminer](app_adminer) - [Airsonic](app_airsonic) - [Ampache](app_ampache) - [Anarchism](app_anarchism) - [Anfora](app_anfora) - [Archivist](app_archivist) -- [Baikal](app_baikal) +- [Baïkal](app_baikal) - [Bitwarden](app_bitwarden) +- [Bibliogram](app_bibliogram) +- [Bludit](app_bludit) - [Blogotext](app_blogotext) +- [BookStack](app_bookstack) - [Borg](app_borg) - [BoZoN](app_bozon) - [Calibre-Web](app_calibreweb) - [Cheky](app_cheky) - [CiviCRM](app_civicrm_drupal7) -- [Collabora (Docker)](app_collaboradocker) +- [CodiMD](app_codimd) +- [Collabora](app_collabora) +- [Collabora (in Docker)](app_collaboradocker) - [Concret5](app_concrete5) - [Cowyo](app_cowyo) - [Custom Webapp](app_my_webapp) @@ -29,54 +44,85 @@ - [Fireflyiii](app_firefly-iii) - [Flarum](app_flarum) - [FluxBB](app_fluxbb) +- [Framaforms](app_framaforms) - [FreshRSS](app_freshrss) - [Friendica](app_friendica) - [Funkwhale](app_funkwhale) +- [Galene](app_galene) - [Garradin](app_garradin) - [Gitea](app_gitea) -- [Gitlab](app_gitlab) -- [Gitlab Runner](app_gitlab-runner) +- [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) -- [Wiki JS](app_wikijs) +- [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...)) +- (Note that you can add a new page here if you want to start document in another `app`...) diff --git a/app_archivist_fr.md b/pages/02.applications/02.docs/archivist/app_archivist.fr.md similarity index 88% rename from app_archivist_fr.md rename to pages/02.applications/02.docs/archivist/app_archivist.fr.md index e09752cf..c0b6dc28 100644 --- a/app_archivist_fr.md +++ b/pages/02.applications/02.docs/archivist/app_archivist.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Archivist +--- +title: Archivist +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_archivist' +--- + + [](https://install-app.yunohost.org/?app=archivist) [](https://dash.yunohost.org/appci/app/archivist) diff --git a/app_archivist.md b/pages/02.applications/02.docs/archivist/app_archivist.md similarity index 87% rename from app_archivist.md rename to pages/02.applications/02.docs/archivist/app_archivist.md index 785e89f6..91816e0e 100644 --- a/app_archivist.md +++ b/pages/02.applications/02.docs/archivist/app_archivist.md @@ -1,4 +1,13 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Archivist +--- +title: Archivist +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_archivist' +--- + + [](https://install-app.yunohost.org/?app=archivist) [](https://dash.yunohost.org/appci/app/archivist) diff --git a/app_baikal_fr.md b/pages/02.applications/02.docs/baikal/app_baikal.fr.md similarity index 89% rename from app_baikal_fr.md rename to pages/02.applications/02.docs/baikal/app_baikal.fr.md index a68daf8c..ee630f75 100644 --- a/app_baikal_fr.md +++ b/pages/02.applications/02.docs/baikal/app_baikal.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/baikal_logo.png" height="80px" alt="Baïkal's logo"> Baïkal +--- +title: Baikal +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_baikal' +--- + + [](https://install-app.yunohost.org/?app=baikal) [](https://dash.yunohost.org/appci/app/baikal) @@ -24,11 +33,9 @@ Baïkal est un serveur de calendriers et de contacts accessible par les protocol Pour configurer l'appliation 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 +### Authentification LDAP -Par défaut, Baikal est configuré pour importer les utilisateurs depuis -l'annuaire LDAP de YunoHost. Les utilisateurs YunoHost apparaîtront dans le -menu `Users and ressources` après une première authentification. +Par défaut, Baïkal est configuré pour importer les utilisateurs depuis l'annuaire LDAP de YunoHost. Les utilisateurs YunoHost apparaîtront dans le menu `Users and ressources` après une première authentification. ## Connexion CalDAV diff --git a/app_baikal.md b/pages/02.applications/02.docs/baikal/app_baikal.md similarity index 75% rename from app_baikal.md rename to pages/02.applications/02.docs/baikal/app_baikal.md index 323c08de..2efd023a 100644 --- a/app_baikal.md +++ b/pages/02.applications/02.docs/baikal/app_baikal.md @@ -1,4 +1,13 @@ -# <img src="/images/baikal_logo.png" height="80px" alt="Baïkal's logo"> Baïkal +--- +title: Baikal +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_baikal' +--- + + [](https://install-app.yunohost.org/?app=baikal) [](https://dash.yunohost.org/appci/app/baikal) @@ -15,7 +24,7 @@ Baïkal is a server for calendars and address books, which uses the CalDav and CardDav protocol. Baïkal can be synced with a lot of clients, like Thunderbird + Lightning. -**WARNING**: Baikal will not work if you have installed a **Nextcloud** ( their cardav/caldav functions conflict). +**WARNING**: Baïkal will not work if you have installed a **Nextcloud** (the Nextcloud CardDav/CalDav functions conflict). ## Configuration @@ -26,7 +35,7 @@ The username to specify is `admin`, followed by the specific password you chose ### LDAP authentication -By default, Baikal is configured to look for users in YunoHost's LDAP +By default, Baïkal is configured to look for users in YunoHost's LDAP directory. YunoHost's users will appear under `User and ressources` menu after their first authentication. @@ -36,15 +45,15 @@ first authentication. Add a new agenda with type "Network" and "CalDAV" -The new URL to add is : +The new URL to add is: https://domain.org/baikal/cal.php/calendars/username/default -Be careful to replace "domain.org" by your own domain and the "username" by your user name. +Be careful to replace "domain.org" with your own domain and the "username" with your username. ### Connecting to AgenDAV -AgenDAV is a web client for using your calendars. It's packaged for Yunohost and you can used it after installing Baïkal. +AgenDAV is a web client for using your calendars. It's packaged for YunoHost and you can used it after installing Baïkal. AgenDAV is already connected to Baïkal, any other configuration is necessary. If you create a new entry in Thunderbird + Lightning calendar, refresh your AgenDAV page is enough to see your modifications. @@ -70,5 +79,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/) - + Application software repository: [github.com - YunoHost-Apps/bikal](https://github.com/YunoHost-apps/baikal_ynh) - + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/baikal/issues](https://github.com/YunoHost-apps/baikal_ynh/issues) + + Apps software repository: [github.com - YunoHost-Apps/bikal](https://github.com/YunoHost-apps/baikal_ynh) + + Fix a bug or suggest an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/baikal/issues](https://github.com/YunoHost-apps/baikal_ynh/issues) diff --git a/pages/02.applications/02.docs/bibliogram/app_bibliogram.fr.md b/pages/02.applications/02.docs/bibliogram/app_bibliogram.fr.md new file mode 100644 index 00000000..1e88724c --- /dev/null +++ b/pages/02.applications/02.docs/bibliogram/app_bibliogram.fr.md @@ -0,0 +1,24 @@ +--- +title: Bibliogram +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bibliogram' +--- + + + +[](https://install-app.yunohost.org/?app=bibliogram) [](https://dash.yunohost.org/appci/app/bibliogram) + +### Index + +- [Liens utiles](#useful-links) + +Bibliogram est un site Web qui prend les données de profil public d'Instagram et les met dans une page plus conviviale qui se charge plus rapidement, donne des images téléchargeables, élimine les publicités, génère des flux RSS et ne vous invite pas à vous inscrire. + +## Liens utiles + ++ Site web : [git.sr.ht - bibliogram](https://git.sr.ht/~cadence/bibliogram) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/bibliogram](https://github.com/YunoHost-Apps/bibliogram_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/bibliogram/issues](https://github.com/YunoHost-Apps/bibliogram_ynh/issues) diff --git a/pages/02.applications/02.docs/bibliogram/app_bibliogram.md b/pages/02.applications/02.docs/bibliogram/app_bibliogram.md new file mode 100644 index 00000000..d3c8deb5 --- /dev/null +++ b/pages/02.applications/02.docs/bibliogram/app_bibliogram.md @@ -0,0 +1,24 @@ +--- +title: Bibliogram +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bibliogram' +--- + + + +[](https://install-app.yunohost.org/?app=bibliogram) [](https://dash.yunohost.org/appci/app/bibliogram) + +### Index + +- [Useful links](#useful-links) + +Bibliogram is a website that takes data from Instagram's public profile views and puts it into a friendlier page that loads faster, gives downloadable images, eliminates ads, generates RSS feeds, and doesn't urge you to sign up. + +## Useful links + ++ Website: [git.sr.ht - bibliogram](https://git.sr.ht/~cadence/bibliogram) ++ Application software repository: [github.com - YunoHost-Apps/bibliogram](https://github.com/YunoHost-Apps/bibliogram_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/bibliogram/issues](https://github.com/YunoHost-Apps/bibliogram_ynh/issues) diff --git a/app_blogotext_fr.md b/pages/02.applications/02.docs/blogotext/app_blogotext.fr.md similarity index 91% rename from app_blogotext_fr.md rename to pages/02.applications/02.docs/blogotext/app_blogotext.fr.md index 46b517c3..508a9de6 100644 --- a/app_blogotext_fr.md +++ b/pages/02.applications/02.docs/blogotext/app_blogotext.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/blogotext_logo.png" width="80px" alt="logo de BlogoText"> BlogoText +--- +title: BlogoText +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_blogotext' +--- + + [](https://install-app.yunohost.org/?app=blogotext) [](https://dash.yunohost.org/appci/app/blogotext) diff --git a/app_blogotext.md b/pages/02.applications/02.docs/blogotext/app_blogotext.md similarity index 90% rename from app_blogotext.md rename to pages/02.applications/02.docs/blogotext/app_blogotext.md index d5d35d16..7c9fd290 100644 --- a/app_blogotext.md +++ b/pages/02.applications/02.docs/blogotext/app_blogotext.md @@ -1,4 +1,13 @@ -# <img src="/images/blogotext_logo.png" width="80px" alt="BlogoText's logo"> BlogoText +--- +title: BlogoText +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_blogotext' +--- + + [](https://install-app.yunohost.org/?app=blogotext) [](https://dash.yunohost.org/appci/app/blogotext) diff --git a/pages/02.applications/02.docs/bludit/app_bludit.fr.md b/pages/02.applications/02.docs/bludit/app_bludit.fr.md new file mode 100644 index 00000000..c3b0c5ed --- /dev/null +++ b/pages/02.applications/02.docs/bludit/app_bludit.fr.md @@ -0,0 +1,25 @@ +--- +title: Bludit +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bludit' +--- + + + +[](https://install-app.yunohost.org/?app=bludit) [](https://dash.yunohost.org/appci/app/bludit) + +### Index + +- [Liens utiles](#liens-utiles) + +Bludit est une application Web pour créer votre propre site Web ou blog en quelques secondes; c'est totalement gratuit et open source. Bludit est un CMS Flat-File, ce qui (dans ce cas) signifie que Bludit utilise des fichiers au format JSON pour stocker le contenu. Vous n'avez pas besoin d'installer ou de configurer une base de données; vous n'avez besoin que d'un serveur Web prenant en charge PHP. + +## Liens utiles + + + Site web : [www.bludit.com (en)](https://www.bludit.com/) + + Documentation officielle : [docs.bludit.com - (en)](https://docs.bludit.com/en/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/bludit](https://github.com/YunoHost-Apps/bludit_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/bludit/issues](https://github.com/YunoHost-Apps/bludit_ynh/issues) diff --git a/pages/02.applications/02.docs/bludit/app_bludit.md b/pages/02.applications/02.docs/bludit/app_bludit.md new file mode 100644 index 00000000..3b03a91a --- /dev/null +++ b/pages/02.applications/02.docs/bludit/app_bludit.md @@ -0,0 +1,25 @@ +--- +title: Bludit +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bludit' +--- + + + +[](https://install-app.yunohost.org/?app=bludit) [](https://dash.yunohost.org/appci/app/bludit) + +### Index + +- [Useful links](#useful-links) + +Bludit is a web application to build your own website or blog in seconds; it's completely free and open source. Bludit is a Flat-File CMS, which (in this case) means that Bludit uses files in the JSON format to store the content. You don't need to install or configure a database; you only need a web server with PHP support. + +## Useful links + ++ Website: [www.bludit.com (en)](https://www.bludit.com/) ++ Official documentation: [docs.bludit.com - (en)](https://docs.bludit.com/en/) ++ Application software repository: [github.com - YunoHost-Apps/bludit](https://github.com/YunoHost-Apps/bludit_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/bludit/issues](https://github.com/YunoHost-Apps/bludit_ynh/issues) diff --git a/pages/02.applications/02.docs/bookstack/app_bookstack.fr.md b/pages/02.applications/02.docs/bookstack/app_bookstack.fr.md new file mode 100644 index 00000000..592b8e9e --- /dev/null +++ b/pages/02.applications/02.docs/bookstack/app_bookstack.fr.md @@ -0,0 +1,26 @@ +--- +title: Bookstack +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bookstack' +--- + + + +[](https://install-app.yunohost.org/?app=bookstack) [](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/bibliogram_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) \ No newline at end of file diff --git a/pages/02.applications/02.docs/bookstack/app_bookstack.md b/pages/02.applications/02.docs/bookstack/app_bookstack.md new file mode 100644 index 00000000..2dff540b --- /dev/null +++ b/pages/02.applications/02.docs/bookstack/app_bookstack.md @@ -0,0 +1,25 @@ +--- +title: Bookstack +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bookstack' +--- + + + +[](https://install-app.yunohost.org/?app=bookstack) [](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/02.applications/02.docs/borg/app_borg.fr.md similarity index 90% rename from app_borg_fr.md rename to pages/02.applications/02.docs/borg/app_borg.fr.md index 25f9626c..a748408c 100644 --- a/app_borg_fr.md +++ b/pages/02.applications/02.docs/borg/app_borg.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/borg_logo.svg" height="80px" alt="logo de Borg"> Borg +--- +title: Borg +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_borg' +--- + + [](https://install-app.yunohost.org/?app=borg) [](https://dash.yunohost.org/appci/app/borg) diff --git a/app_borg.md b/pages/02.applications/02.docs/borg/app_borg.md similarity index 89% rename from app_borg.md rename to pages/02.applications/02.docs/borg/app_borg.md index f4e99ea2..9e02355f 100644 --- a/app_borg.md +++ b/pages/02.applications/02.docs/borg/app_borg.md @@ -1,4 +1,13 @@ -# <img src="/images/borg_logo.svg" height="80px" alt="borg's logo"> Borg +--- +title: Borg +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_borg' +--- + + [](https://install-app.yunohost.org/?app=borg) [](https://dash.yunohost.org/appci/app/borg) diff --git a/app_bozon_fr.md b/pages/02.applications/02.docs/bozon/app_bozon.fr.md similarity index 83% rename from app_bozon_fr.md rename to pages/02.applications/02.docs/bozon/app_bozon.fr.md index 4ed06bb5..a77cb72e 100644 --- a/app_bozon_fr.md +++ b/pages/02.applications/02.docs/bozon/app_bozon.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> BoZoN +--- +title: BoZon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bozon' +--- + + [](https://install-app.yunohost.org/?app=bozon) [](https://ci-apps.yunohost.org/jenkins/job/bozon%20%28Community%29/lastBuild/consoleFull) diff --git a/app_bozon.md b/pages/02.applications/02.docs/bozon/app_bozon.md similarity index 83% rename from app_bozon.md rename to pages/02.applications/02.docs/bozon/app_bozon.md index c393f8d2..4aed37b7 100644 --- a/app_bozon.md +++ b/pages/02.applications/02.docs/bozon/app_bozon.md @@ -1,4 +1,13 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> BoZoN +--- +title: BoZon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_bozon' +--- + + [](https://install-app.yunohost.org/?app=bozon) [](https://ci-apps.yunohost.org/jenkins/job/bozon%20%28Community%29/lastBuild/consoleFull) diff --git a/app_calibreweb_fr.md b/pages/02.applications/02.docs/calibreweb/app_calibreweb.fr.md similarity index 84% rename from app_calibreweb_fr.md rename to pages/02.applications/02.docs/calibreweb/app_calibreweb.fr.md index c7fc7d71..98d3c439 100644 --- a/app_calibreweb_fr.md +++ b/pages/02.applications/02.docs/calibreweb/app_calibreweb.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Calibre-Web +--- +title: Calibre-web +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_calibreweb' +--- + + [](https://install-app.yunohost.org/?app=calibreweb) [](https://ci-apps.yunohost.org/jenkins/job/calibreweb%20%28Community%29/lastBuild/consoleFull) diff --git a/app_calibreweb.md b/pages/02.applications/02.docs/calibreweb/app_calibreweb.md similarity index 83% rename from app_calibreweb.md rename to pages/02.applications/02.docs/calibreweb/app_calibreweb.md index f6ca3261..9b21fbf8 100644 --- a/app_calibreweb.md +++ b/pages/02.applications/02.docs/calibreweb/app_calibreweb.md @@ -1,4 +1,13 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Calibre-Web +--- +title: Calibre-web +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_calibreweb' +--- + + [](https://install-app.yunohost.org/?app=calibreweb) [](https://ci-apps.yunohost.org/jenkins/job/calibreweb%20%28Community%29/lastBuild/consoleFull) diff --git a/app_cheky_fr.md b/pages/02.applications/02.docs/cheky/app_cheky.fr.md similarity index 89% rename from app_cheky_fr.md rename to pages/02.applications/02.docs/cheky/app_cheky.fr.md index 59916b0c..130f3460 100644 --- a/app_cheky_fr.md +++ b/pages/02.applications/02.docs/cheky/app_cheky.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Cheky +--- +title: Cheky +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cheky' +--- + + [](https://install-app.yunohost.org/?app=cheky) [](https://dash.yunohost.org/appci/app/cheky) diff --git a/app_cheky.md b/pages/02.applications/02.docs/cheky/app_cheky.md similarity index 88% rename from app_cheky.md rename to pages/02.applications/02.docs/cheky/app_cheky.md index 566d8d08..2d9354fc 100644 --- a/app_cheky.md +++ b/pages/02.applications/02.docs/cheky/app_cheky.md @@ -1,4 +1,13 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Cheky +--- +title: Checky +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cheky' +--- + + [](https://install-app.yunohost.org/?app=cheky) [](https://dash.yunohost.org/appci/app/cheky) diff --git a/app_civicrm_drupal7_fr.md b/pages/02.applications/02.docs/civicrm_drupal7/app_civicrm_drupal7.fr.md similarity index 87% rename from app_civicrm_drupal7_fr.md rename to pages/02.applications/02.docs/civicrm_drupal7/app_civicrm_drupal7.fr.md index 6c6c6549..a6c6c76c 100644 --- a/app_civicrm_drupal7_fr.md +++ b/pages/02.applications/02.docs/civicrm_drupal7/app_civicrm_drupal7.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/civicrm_logo.png" height="80px" alt="logo de CiviCRM"> CiviCRM +--- +title: CiviCRM +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_civicrm_drupal7' +--- + + [](https://install-app.yunohost.org/?app=civicrm_drupal7) [](https://dash.yunohost.org/appci/app/civicrm_drupal7) diff --git a/app_civicrm_drupal7.md b/pages/02.applications/02.docs/civicrm_drupal7/app_civicrm_drupal7.md similarity index 87% rename from app_civicrm_drupal7.md rename to pages/02.applications/02.docs/civicrm_drupal7/app_civicrm_drupal7.md index 7f5cd983..8af05b45 100644 --- a/app_civicrm_drupal7.md +++ b/pages/02.applications/02.docs/civicrm_drupal7/app_civicrm_drupal7.md @@ -1,4 +1,13 @@ -# <img src="/images/civicrm_logo.png" height="80px" alt="CiviCRM's logo"> CiviCRM +--- +title: CiviCRM +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_civicrm_drupal7' +--- + + [](https://install-app.yunohost.org/?app=civicrm_drupal7) [](https://dash.yunohost.org/appci/app/civicrm_drupal7) diff --git a/app_codimd_fr.md b/pages/02.applications/02.docs/codimd/app_codimd.fr.md similarity index 76% rename from app_codimd_fr.md rename to pages/02.applications/02.docs/codimd/app_codimd.fr.md index 66eed39c..f08f8254 100644 --- a/app_codimd_fr.md +++ b/pages/02.applications/02.docs/codimd/app_codimd.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/codimd_logo.png" height="80px" alt="logo de CodiMD"> CodiMD +--- +title: CodiMD +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_codimd' +--- + + [](https://install-app.yunohost.org/?app=codimd) [](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/02.applications/02.docs/codimd/app_codimd.md similarity index 74% rename from app_codimd.md rename to pages/02.applications/02.docs/codimd/app_codimd.md index 562e0659..77a06b1f 100644 --- a/app_codimd.md +++ b/pages/02.applications/02.docs/codimd/app_codimd.md @@ -1,4 +1,13 @@ -# <img src="/images/codimd_logo.png" height="80px" alt="CodiMD’s logo"> CodiMD +--- +title: CodiMD +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_codimd' +--- + + [](https://install-app.yunohost.org/?app=codimd) [](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/app_collabora_fr.md b/pages/02.applications/02.docs/collabora/app_collabora.fr.md similarity index 80% rename from app_collabora_fr.md rename to pages/02.applications/02.docs/collabora/app_collabora.fr.md index b982a6e3..84153e98 100644 --- a/app_collabora_fr.md +++ b/pages/02.applications/02.docs/collabora/app_collabora.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/collabora_logo.png" height="80px" alt="logo de collabora"> Collabora +--- +title: Collabora +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_collabora' +--- + + [](https://install-app.yunohost.org/?app=collabora) [](https://dash.yunohost.org/appci/app/collabora) @@ -6,7 +15,7 @@ - [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é. +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 diff --git a/app_collabora.md b/pages/02.applications/02.docs/collabora/app_collabora.md similarity index 79% rename from app_collabora.md rename to pages/02.applications/02.docs/collabora/app_collabora.md index b56935fd..4f8f4142 100644 --- a/app_collabora.md +++ b/pages/02.applications/02.docs/collabora/app_collabora.md @@ -1,4 +1,13 @@ -# <img src="/images/collabora_logo.png" height="80px" alt="collabora's logo"> Collabora +--- +title: Collabora +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_collabora' +--- + + [](https://install-app.yunohost.org/?app=collabora) [](https://dash.yunohost.org/appci/app/collabora) @@ -6,7 +15,7 @@ - [Useful links](#useful-links) -Collabora is an online office suite based on LibreOffice and usable with Nextcloud or Owncloud. It allows you to edit text documents, tables, slideshows. The online edition can be done simultaneously and allows you to export and print documents using the generated PDF format. +Collabora is an online office suite based on LibreOffice and usable with Nextcloud or ownCloud. It allows you to edit text documents, tables, slideshows. The online edition can be done simultaneously and allows you to export and print documents using the generated PDF format. ## Useful links diff --git a/app_collaboradocker_fr.md b/pages/02.applications/02.docs/collaboradocker/app_collaboradocker.fr.md similarity index 56% rename from app_collaboradocker_fr.md rename to pages/02.applications/02.docs/collaboradocker/app_collaboradocker.fr.md index a9af6a57..ea0f7bae 100644 --- a/app_collaboradocker_fr.md +++ b/pages/02.applications/02.docs/collaboradocker/app_collaboradocker.fr.md @@ -1,16 +1,25 @@ -# Installer Collabora avec Nextcloud via Docker +--- +title: Collabora via Docker +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_collaboradocker' +--- -**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)). +# Installer Collabora avec Nextcloud avec Docker + +**Note :** la marche à suivre detaillée est réalisée ici à partir d’une instance YunoHost sur Debian 8 (celle-ci n'a pas été testée suite à la migration vers la version 3 de YunoHost). Ces instructions ont pour pré-requis que les domaines/sous-domaines sont correctement configurés au niveau des DNS et de votre instance YunoHost (voir [DNS](/dns_config), [DNS et installation d’une application sur un sous-domaine](/dns_subdomains), [Configurer les enregistrements DNS](/dns_config) et [Nom de domaine en noho.st / nohost.me / ynh.fr](/dns_nohost_me)). ### 0. Installer Nextcloud -Si l'application Nexcloud n'est pas déja installée sur votre instance Yunohost, vous pouvez l’installer depuis le lien suivant : [Installer Nextcloud](https://install-app.yunohost.org/?app=nextcloud) +Si l'application Nexcloud n'est pas déja installée sur votre instance YunoHost, vous pouvez l’installer depuis le lien suivant : [Installer Nextcloud](https://install-app.yunohost.org/?app=nextcloud) -### 1. Installer l'application Collabora dans yunohost +### 1. Installer l'application Collabora dans YunHost **dans l'interface d'administration :** -Applications > Installer > En bas de la page _Installer une application personnalisée_ > Renseigner l’url « https://github.com/aymhce/collaboradocker_ynh » > Définir le nom de domaine secondaire/sous-domaine dédié à l'application Collabora. +Applications > Installer > En bas de la page _Installer une application personnalisée_ > Renseigner l’URL « https://github.com/aymhce/collaboradocker_ynh » > Définir le nom de domaine secondaire/sous-domaine dédié à l'application Collabora. ### 2. Configuration dans Nextcloud @@ -22,10 +31,12 @@ Cliquer sur l'icône de l'utilisateur en haut à droite > Applications > Bure **Configurer Collabora sur Nextcloud :** Cliquer sur l'icone de l'utilisateur en haut à droite > Paramètres > Sous _Administration_, _Collabora en ligne_ . - Renseigner le « Serveur Collabora en ligne » par le nom de domaine choisi lors de l’installation de collabora dans yunohost (précédé de « https:// »). + Renseigner le « Serveur Collabora en ligne » par le nom de domaine choisi lors de l’installation de Collabora dans YunoHost (précédé de « https:// »). ### 3. Reboot + Pour permettre la mise en marche du lien collabora-Nextcloud, le système doit être rebooté. Faisable depuis l'interface d'administration : Outils > Arrêter/redémarrer > `Redémarrer`. Ou depuis la ligne de commande : ``sudo reboot now``. ## Débug -Suite à certaines mises à jour du système, de yunohost ou des applications, Collabora peut afficher un message d'erreur du type "c'est embarrassant...". Pour remettre les choses en marche, il suffit de redémarrer la machine docker, avec la commande ``systemctl restart docker``. + +Suite à certaines mises à jour du système, de YunoHost ou des applications, Collabora peut afficher un message d'erreur du type "c'est embarrassant...". Pour remettre les choses en marche, il suffit de redémarrer la machine docker, avec la commande `systemctl restart docker`. diff --git a/pages/02.applications/02.docs/collaboradocker/app_collaboradocker.md b/pages/02.applications/02.docs/collaboradocker/app_collaboradocker.md new file mode 100644 index 00000000..54e6017f --- /dev/null +++ b/pages/02.applications/02.docs/collaboradocker/app_collaboradocker.md @@ -0,0 +1,41 @@ +--- +title: Collabora via Docker +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_collaboradocker' +--- + +# Install Collabora with Nextcloud, using Docker + +**Note:** This walkthrough is based on a Debian 8 instance, and has not been tested since version 3 upgrade of YunoHost. As a prerequisite, you must have configured your domains and sub-domains in the DNS, in compliance with: [DNS](/dns_config), [Sub-domain install of an app](/dns_subdomains), [DNS settings](/dns_config) and [noho.st / nohost.me / ynh.fr domains](/dns_nohost_me). + +### 0. Install Nextcloud + +If Nextcloud is not already installed on your YunoHost instance, you may do so with this link: [Install Nextcloud](https://install-app.yunohost.org/?app=nextcloud) + +### 1. Install Collabora app within YunoHost + +**In the admin interface:** + +Applications > Install > at the bottom _Install a custom application_ > enter this URL « https://github.com/aymhce/collaboradocker_ynh » > Enter the domain/subdomain name you wish for the Collabora application. + +### 2. Configuration within Nextcloud + + **Add the Collabora Online application in Nextcloud:** + +Click on the user icon (top right) > Applications > Desktop & Text > Under the « Collabora Online » tile, click on `Activate` . + +**Setup Collabora in Nextcloud:** + +Click on the user icon (top right) > Parametres > Under _Administration_, _Collabora Online_ . +Specify the « Online Collabora server » with the domain name chosen during the Collabora install in YunoHost (full with « https:// »). + +### 3. Reboot + +To allow all the pieces to work, system must be reboot. You can do so through the admin interface (Tools > Stop/reboot > `Reboot`) or via the command line interface: `sudo reboot now`. + +## Debugging + +Following some system, YunoHost or app updates, Collabora may display an error message such as "It's embarrassing...". To put things back in order, you just have to restart the docker machine, with the command `systemctl restart docker`. diff --git a/app_concrete5_fr.md b/pages/02.applications/02.docs/concrete5/app_concrete5.fr.md similarity index 80% rename from app_concrete5_fr.md rename to pages/02.applications/02.docs/concrete5/app_concrete5.fr.md index 55e87b0b..d6d09c65 100644 --- a/app_concrete5_fr.md +++ b/pages/02.applications/02.docs/concrete5/app_concrete5.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/concrete5_logo.png" height="80px" alt="Logo de Concrete5"> Concret5 +--- +title: Concret5 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_concrete5' +--- + + [](https://install-app.yunohost.org/?app=concrete5) [](https://dash.yunohost.org/appci/app/concrete5) @@ -7,7 +16,7 @@ - [Limitations avec YunoHost](#limitations-avec-yunohost) - [Liens utiles](#liens-utiles) -## Limitations avec Yunohost +## Limitations avec YunoHost L'authentification LDAP et HTTP n'est pas prise en charge. diff --git a/app_concrete5.md b/pages/02.applications/02.docs/concrete5/app_concrete5.md similarity index 82% rename from app_concrete5.md rename to pages/02.applications/02.docs/concrete5/app_concrete5.md index 948c62fc..75274cfd 100644 --- a/app_concrete5.md +++ b/pages/02.applications/02.docs/concrete5/app_concrete5.md @@ -1,4 +1,13 @@ -# <img src="/images/concrete5_logo.png" height="80px" alt="Concrete5's logo"> Concret5 +--- +title: Concret5 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_concrete5' +--- + + [](https://install-app.yunohost.org/?app=concrete5) [](https://dash.yunohost.org/appci/app/concrete5) diff --git a/app_cowyo_fr.md b/pages/02.applications/02.docs/cowyo/app_cowyo.fr.md similarity index 89% rename from app_cowyo_fr.md rename to pages/02.applications/02.docs/cowyo/app_cowyo.fr.md index 5658891c..ba361bb1 100644 --- a/app_cowyo_fr.md +++ b/pages/02.applications/02.docs/cowyo/app_cowyo.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/cowyo_logo.png" height="80px" alt="Logo de Cowyo"> Cowyo +--- +title: Cowyo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cowyo' +--- + + [](https://install-app.yunohost.org/?app=cowyo) [](https://ci-apps.yunohost.org/ci/apps/cowyo/) diff --git a/app_cowyo.md b/pages/02.applications/02.docs/cowyo/app_cowyo.md similarity index 88% rename from app_cowyo.md rename to pages/02.applications/02.docs/cowyo/app_cowyo.md index 15fafba2..75f64fab 100644 --- a/app_cowyo.md +++ b/pages/02.applications/02.docs/cowyo/app_cowyo.md @@ -1,4 +1,13 @@ -# <img src="/images/cowyo_logo.png" height="80px" alt="Cowyo's logo"> Cowyo +--- +title: Cowyo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_cowyo' +--- + + [](https://install-app.yunohost.org/?app=cowyo) [](https://ci-apps.yunohost.org/ci/apps/cowyo/) diff --git a/app_diagramsnet_fr.md b/pages/02.applications/02.docs/diagramsnet/app_diagramsnet.fr.md similarity index 88% rename from app_diagramsnet_fr.md rename to pages/02.applications/02.docs/diagramsnet/app_diagramsnet.fr.md index d29fa9b2..2fcaee5f 100644 --- a/app_diagramsnet_fr.md +++ b/pages/02.applications/02.docs/diagramsnet/app_diagramsnet.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/diagramsnet_logo.jpg" width="80px" alt="logo de Diagrams.net"> Diagrams.net +--- +title: Diagram.net +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_diagramsnet' +--- + + [](https://install-app.yunohost.org/?app=diagramsnet) [](https://dash.yunohost.org/appci/app/diagramsnet) diff --git a/app_diagramsnet.md b/pages/02.applications/02.docs/diagramsnet/app_diagramsnet.md similarity index 87% rename from app_diagramsnet.md rename to pages/02.applications/02.docs/diagramsnet/app_diagramsnet.md index 3aeabdd6..b16657eb 100644 --- a/app_diagramsnet.md +++ b/pages/02.applications/02.docs/diagramsnet/app_diagramsnet.md @@ -1,4 +1,13 @@ -# <img src="/images/diagramsnet_logo.jpg" width="80px" alt="Diagrams.net's logo"> Diagrams.net +--- +title: Diagrams.net +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_diagramsnet' +--- + + [](https://install-app.yunohost.org/?app=diagramsnet) [](https://dash.yunohost.org/appci/app/diagramsnet) diff --git a/app_discourse_fr.md b/pages/02.applications/02.docs/discourse/app_discourse.fr.md similarity index 73% rename from app_discourse_fr.md rename to pages/02.applications/02.docs/discourse/app_discourse.fr.md index 34004856..4a7c6592 100644 --- a/app_discourse_fr.md +++ b/pages/02.applications/02.docs/discourse/app_discourse.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/discourse_logo.svg" height="80px" alt="logo de Discourse"> Discourse +--- +title: Discourse +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_discourse' +--- + + [](https://install-app.yunohost.org/?app=discourse) [](https://ci-apps.yunohost.org/jenkins/job/discourse%20%28Community%29/lastBuild/consoleFull) @@ -7,11 +16,11 @@ - [Limitations avec YunoHost](#limitations-avec-yunohost) - [Liens utiles](#liens-utiles) -Discourse dispose des fonctionnalités usuelles d’un forum de discussion : utilisateurs, discussions, recherche, messages privés, etc.Le mode « liste de diffusion » permet d’utiliser la plupart des fonctionnalités du forum via des courriers électroniques. Écrit en ruby et en JavaScript, il nécessite une base de données PostgreSQL et un serveur d’envoi de courrier électronique.[¹](#sources) +Discourse dispose des fonctionnalités usuelles d’un forum de discussion : utilisateurs, discussions, recherche, messages privés, etc. Le mode « liste de diffusion » permet d’utiliser la plupart des fonctionnalités du forum via des courriers électroniques. Écrit en ruby et en JavaScript, il nécessite une base de données PostgreSQL et un serveur d’envoi de courrier électronique.[¹](#sources) ## Limitations avec YunoHost -Dans le tableau de bord de l'administration, la version installée est indiquée comme inconnue (du fait que nous n'utilisons pas git pour l'installation) ; vous pouvez ignorer cela sans risque car le paquet YunoHost sera maintenu. Sur les appareils ARM, les avatars générés par défaut ne portent pas les initiales du profil (il ne s'agit que d'un simple disque). +Dans le tableau de bord de l'administration, la version installée est indiquée comme inconnue (du fait que nous n'utilisons pas Git pour l'installation) ; vous pouvez ignorer cela sans risque car le paquet YunoHost sera maintenu. Sur les appareils ARM, les avatars générés par défaut ne portent pas les initiales du profil (il ne s'agit que d'un simple disque). ## Liens utiles diff --git a/app_discourse.md b/pages/02.applications/02.docs/discourse/app_discourse.md similarity index 86% rename from app_discourse.md rename to pages/02.applications/02.docs/discourse/app_discourse.md index e7838718..c7a48b3a 100644 --- a/app_discourse.md +++ b/pages/02.applications/02.docs/discourse/app_discourse.md @@ -1,4 +1,13 @@ -# <img src="/images/discourse_logo.svg" height="80px" alt="Discourse's logo"> Discourse +--- +title: Discourse +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_discourse' +--- + + [](https://install-app.yunohost.org/?app=discourse) [](https://ci-apps.yunohost.org/jenkins/job/discourse%20%28Community%29/lastBuild/consoleFull) @@ -11,7 +20,7 @@ Discourse has all the usual features of a discussion forum: users, discussions, ## Limitations with YunoHost -In the administration dashboard, The installed version is shown as unknown (due the fact that we don't use git for installation); you can safely ignore that as the YunoHost package will be maintained. On ARM devices, default generated avatars are missing the profile initials (they are only a plain discus). +In the administration dashboard, The installed version is shown as unknown (due the fact that we don't use Git for installation); you can safely ignore that as the YunoHost package will be maintained. On ARM devices, default generated avatars are missing the profile initials (they are only a plain discus). ## Useful links diff --git a/app_distbin_fr.md b/pages/02.applications/02.docs/distbin/app_distbin.fr.md similarity index 67% rename from app_distbin_fr.md rename to pages/02.applications/02.docs/distbin/app_distbin.fr.md index 8afbbe52..0106e2f1 100644 --- a/app_distbin_fr.md +++ b/pages/02.applications/02.docs/distbin/app_distbin.fr.md @@ -1,14 +1,23 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Distbin +--- +title: Distbin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_distbin' +--- -[](https://install-app.yunohost.org/?app=distbin) [](https://dash.yunohost.org/appci/app/distbin) + + +[](https://install-app.yunohost.org/?app=distbin) [](https://dash.yunohost.org/appci/app/distbin) ### Index - [Liens utiles](#liens-utiles) -Un pastebin distribué, c'est-à-dire un service où n'importe qui peut poster des choses sur le web, et d'autres peuvent réagir en postant n'importe où ailleurs sur le web (y compris ici) . +Un pastebin distribué, c'est-à-dire un service où n'importe qui peut poster des choses sur le Web, et d'autres peuvent réagir en postant n'importe où ailleurs sur le Web (y compris ici). -Un endroit en réseau pour stocker les documents web postés. Ceci est destiné à permettre la distribution de commentaires et de réactions sociales autour de ces documents en utilisant les meilleures pratiques recommandées ou notées par le groupe de travail du W3C sur le web social. +Un endroit en réseau pour stocker les documents Web postés. Ceci est destiné à permettre la distribution de commentaires et de réactions sociales autour de ces documents en utilisant les meilleures pratiques recommandées ou notées par le groupe de travail du W3C sur le Web social. ## Liens utiles diff --git a/app_distbin.md b/pages/02.applications/02.docs/distbin/app_distbin.md similarity index 84% rename from app_distbin.md rename to pages/02.applications/02.docs/distbin/app_distbin.md index 64d82d8e..aa3bc2d1 100644 --- a/app_distbin.md +++ b/pages/02.applications/02.docs/distbin/app_distbin.md @@ -1,4 +1,13 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Distbin +--- +title: Distbin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_distbin' +--- + + [](https://install-app.yunohost.org/?app=distbin) [](https://dash.yunohost.org/appci/app/distbin) @@ -6,7 +15,7 @@ - [Useful links](#useful-links) -A distributed pastebin. i.e. it is a service where anyone can post things on the web, and others can react by posting anywhere else on the web (including here). . +A distributed pastebin. i.e. it is a service where anyone can post things on the web, and others can react by posting anywhere else on the web (including here). A networked place to store posted web documents. This is meant to allow for distributed social commentary and reaction around these documents using best practices recommended or noted by the W3C Social Web Working Group. diff --git a/pages/02.applications/02.docs/docs.md b/pages/02.applications/02.docs/docs.md new file mode 100644 index 00000000..86418a54 --- /dev/null +++ b/pages/02.applications/02.docs/docs.md @@ -0,0 +1,21 @@ +--- +title: Documentations +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 +--- + +<ul> +{% for p in page.collection %} + <li><a href="{{ p.url }}">{{ p.title|e }}</a></li> +{% endfor %} +</ul> diff --git a/app_dokuwiki_fr.md b/pages/02.applications/02.docs/dokuwiki/app_dokuwiki.fr.md similarity index 90% rename from app_dokuwiki_fr.md rename to pages/02.applications/02.docs/dokuwiki/app_dokuwiki.fr.md index 48798e6e..755e6c99 100644 --- a/app_dokuwiki_fr.md +++ b/pages/02.applications/02.docs/dokuwiki/app_dokuwiki.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/dokuwiki_logo.svg" height="80px" alt="logo de Dokuwiki"> DokuWiki +--- +title: DokuWiki +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dokuwiki' +--- + + [](https://install-app.yunohost.org/?app=dokuwiki) [](https://dash.yunohost.org/appci/app/dokuwiki) diff --git a/app_dokuwiki.md b/pages/02.applications/02.docs/dokuwiki/app_dokuwiki.md similarity index 89% rename from app_dokuwiki.md rename to pages/02.applications/02.docs/dokuwiki/app_dokuwiki.md index affc03ea..2f737c9e 100644 --- a/app_dokuwiki.md +++ b/pages/02.applications/02.docs/dokuwiki/app_dokuwiki.md @@ -1,4 +1,13 @@ -# <img src="/images/dokuwiki_logo.svg" height="80px" alt="Dokuwiki's logo"> DokuWiki +--- +title: DokuWiki +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dokuwiki' +--- + + [](https://install-app.yunohost.org/?app=dokuwiki) [](https://dash.yunohost.org/appci/app/dokuwiki) diff --git a/app_dolibarr_fr.md b/pages/02.applications/02.docs/dolibarr/app_dolibarr.fr.md similarity index 74% rename from app_dolibarr_fr.md rename to pages/02.applications/02.docs/dolibarr/app_dolibarr.fr.md index 8dedc1db..7a1afd2f 100644 --- a/app_dolibarr_fr.md +++ b/pages/02.applications/02.docs/dolibarr/app_dolibarr.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/dolibarr_logo.png" width="80px" alt="logo de Dolibarr"> Dolibarr +--- +title: Dolibarr +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dolibarr' +--- + + [](https://install-app.yunohost.org/?app=dolibarr) [](https://dash.yunohost.org/appci/app/dolibarr) @@ -7,18 +16,18 @@ - [Limitations avec YunoHost](#limitations-avec-yunohost) - [Liens utiles](#liens-utiles) -Dolibarr ERP/CRM est un progiciel de gestion intégré (PGI, ERP en anglais) et gestion de la relation client (GRC, CRM en anglais) open source pour les petites et moyennes entreprises, les indépendants, auto-entrepreneurs ou les associations .[¹](#sources) +Dolibarr ERP/CRM est un progiciel de gestion intégré (PGI, ERP en anglais) et gestion de la relation client (GRC, CRM en anglais) open source pour les petites et moyennes entreprises, les indépendants, auto-entrepreneurs ou les associations.[¹](#sources) ## Limitations avec YunoHost -Dolibarr doit être une application non publique pour pouvoir relier les comptes des yunohost. La suppression d'un compte n'est pas prise en compte dans Dolibarr. +Dolibarr doit être une application non publique pour pouvoir relier les comptes des YunoHost. La suppression d'un compte n'est pas prise en compte dans Dolibarr. ## Liens utiles + Site web : [www.dolibarr.fr](https://www.dolibarr.fr/) + Documentation officielle : [www.dolibarr.fr - documentation](https://www.dolibarr.fr/documentation) - + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/dolibarr](https://github.com/Yunohost-Apps/dolibarr_ynh) - + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/dolibarr/issues](https://github.com/Yunohost-Apps/dolibarr_ynh/issues) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/dolibarr/issues](https://github.com/YunoHost-Apps/dolibarr_ynh/issues) ------ diff --git a/app_dolibarr.md b/pages/02.applications/02.docs/dolibarr/app_dolibarr.md similarity index 75% rename from app_dolibarr.md rename to pages/02.applications/02.docs/dolibarr/app_dolibarr.md index c635307e..ae1c5406 100644 --- a/app_dolibarr.md +++ b/pages/02.applications/02.docs/dolibarr/app_dolibarr.md @@ -1,4 +1,13 @@ -# <img src="/images/dolibarr_logo.png" width="80px" alt="Dolibarr's logo"> Dolibarr +--- +title: Dolibarr +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dolibarr' +--- + + [](https://install-app.yunohost.org/?app=dolibarr) [](https://dash.yunohost.org/appci/app/dolibarr) @@ -11,14 +20,14 @@ Dolibarr ERP CRM is an open source, free software package for small and medium c ## Limitations with YunoHost -Dolibarr must be a non-public application to be able to link yunohost accounts. The deletion of an account is not taken into account in Dolibarr. +Dolibarr must be a non-public application to be able to link YunoHost accounts. The deletion of an account is not taken into account in Dolibarr. ## Useful links + Website: [www.dolibarr.org](https://www.dolibarr.org/) + Official documentation: [www.dolibarr.org - documentation-home](https://www.dolibarr.org/documentation-home) -+ Application software repository: [github.com - YunoHost-Apps/dolibarr](https://github.com/Yunohost-Apps/dolibarr_ynh) -+ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/dolibarr/issues](https://github.com/Yunohost-Apps/dolibarr_ynh/issues) ++ Application software repository: [github.com - YunoHost-Apps/dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/dolibarr/issues](https://github.com/YunoHost-Apps/dolibarr_ynh/issues) ----- diff --git a/app_dotclear2_fr.md b/pages/02.applications/02.docs/dotclear2/app_dotclear2.fr.md similarity index 80% rename from app_dotclear2_fr.md rename to pages/02.applications/02.docs/dotclear2/app_dotclear2.fr.md index 5eca9c9b..87b356a3 100644 --- a/app_dotclear2_fr.md +++ b/pages/02.applications/02.docs/dotclear2/app_dotclear2.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/dotclear_logo.png" width="80px" alt="Logo de Dotclear"> Dotclear 2 +--- +title: Dotclear 2 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dotclear2' +--- + + [](https://install-app.yunohost.org/?app=dotclear2) [](https://dash.yunohost.org/appci/app/dotclear2) @@ -14,8 +23,8 @@ L'objectif proposé par Dotclear est de développer un logiciel qui respecte ple + Site web : [dotclear.org](https://fr.dotclear.org/) + Documentation officielle : [dotclear.org - documentation](https://fr.dotclear.org/documentation/) - + Dépôt logiciel de l'application : [github.com - YunoHost- Apps/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/dotclear2](https://github.com/YunoHost-Apps/dotclear2_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/dotclear2/issues](https://github.com/YunoHost-Apps/dotclear2_ynh/issues) ------ diff --git a/app_dotclear2.md b/pages/02.applications/02.docs/dotclear2/app_dotclear2.md similarity index 89% rename from app_dotclear2.md rename to pages/02.applications/02.docs/dotclear2/app_dotclear2.md index 7532e805..10998e55 100644 --- a/app_dotclear2.md +++ b/pages/02.applications/02.docs/dotclear2/app_dotclear2.md @@ -1,4 +1,13 @@ -# <img src="/images/dotclear_logo.png" width="80px" alt="Dotclear's logo"> Dotclear 2 +--- +title: Dotclear 2 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_dotclear2' +--- + + [](https://install-app.yunohost.org/?app=dotclear2) [](https://dash.yunohost.org/appci/app/dotclear2) diff --git a/app_drupal_fr.md b/pages/02.applications/02.docs/drupal/app_drupal.fr.md similarity index 86% rename from app_drupal_fr.md rename to pages/02.applications/02.docs/drupal/app_drupal.fr.md index 6950eb41..812f09b7 100644 --- a/app_drupal_fr.md +++ b/pages/02.applications/02.docs/drupal/app_drupal.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/drupal_logo.svg" height="80px" alt="Logo de Drupal"> Drupal +--- +title: Drupal +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_drupal' +--- + + [](https://install-app.yunohost.org/?app=drupal) [](https://dash.yunohost.org/appci/app/drupal) diff --git a/app_drupal.md b/pages/02.applications/02.docs/drupal/app_drupal.md similarity index 88% rename from app_drupal.md rename to pages/02.applications/02.docs/drupal/app_drupal.md index f4adfb31..1a45177f 100644 --- a/app_drupal.md +++ b/pages/02.applications/02.docs/drupal/app_drupal.md @@ -1,4 +1,13 @@ -# <img src="/images/drupal_logo.svg" height="80px" alt="Drupal's logo"> Drupal +--- +title: Drupal +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_drupal' +--- + + [](https://install-app.yunohost.org/?app=drupal) [](https://dash.yunohost.org/appci/app/drupal) diff --git a/app_drupal7_fr.md b/pages/02.applications/02.docs/drupal7/app_drupal7.fr.md similarity index 87% rename from app_drupal7_fr.md rename to pages/02.applications/02.docs/drupal7/app_drupal7.fr.md index 882ddf1a..9d72a3fe 100644 --- a/app_drupal7_fr.md +++ b/pages/02.applications/02.docs/drupal7/app_drupal7.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/drupal_logo.svg" height="80px" alt="Logo de Drupal"> Drupal 7 +--- +title: Drupal 7 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_drupal7' +--- + + [](https://install-app.yunohost.org/?app=drupal) [](https://dash.yunohost.org/appci/app/drupal) diff --git a/app_drupal7.md b/pages/02.applications/02.docs/drupal7/app_drupal7.md similarity index 89% rename from app_drupal7.md rename to pages/02.applications/02.docs/drupal7/app_drupal7.md index 73388808..6539cd6d 100644 --- a/app_drupal7.md +++ b/pages/02.applications/02.docs/drupal7/app_drupal7.md @@ -1,4 +1,13 @@ -# <img src="/images/drupal_logo.svg" height="80px" alt="Drupal's logo"> Drupal 7 +--- +title: Drupal 7 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_drupal7' +--- + + [](https://install-app.yunohost.org/?app=drupal) [](https://dash.yunohost.org/appci/app/drupal) diff --git a/pages/02.applications/02.docs/ecko/app_ecko.md b/pages/02.applications/02.docs/ecko/app_ecko.md new file mode 100644 index 00000000..bea51c47 --- /dev/null +++ b/pages/02.applications/02.docs/ecko/app_ecko.md @@ -0,0 +1,46 @@ +--- +title: Ecko +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ecko' +--- + + + +[](https://install-app.yunohost.org/?app=ecko) [](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/02.applications/02.docs/ethercalc/app_ethercalc.fr.md b/pages/02.applications/02.docs/ethercalc/app_ethercalc.fr.md new file mode 100644 index 00000000..bf641f3d --- /dev/null +++ b/pages/02.applications/02.docs/ethercalc/app_ethercalc.fr.md @@ -0,0 +1,27 @@ +--- +title: EtherCalc +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ethercalc' +--- + + + +[](https://install-app.yunohost.org/?app=ethercalc) [](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/02.applications/02.docs/ethercalc/app_ethercalc.md b/pages/02.applications/02.docs/ethercalc/app_ethercalc.md new file mode 100644 index 00000000..fb706f00 --- /dev/null +++ b/pages/02.applications/02.docs/ethercalc/app_ethercalc.md @@ -0,0 +1,26 @@ +--- +title: EtherCalc +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ethercalc' +--- + + + +[](https://install-app.yunohost.org/?app=ethercalc) [](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/02.applications/02.docs/etherpad_mypads/app_etherpad_mypads.fr.md similarity index 83% rename from app_etherpad_mypads_fr.md rename to pages/02.applications/02.docs/etherpad_mypads/app_etherpad_mypads.fr.md index dc6957c4..3eb63028 100644 --- a/app_etherpad_mypads_fr.md +++ b/pages/02.applications/02.docs/etherpad_mypads/app_etherpad_mypads.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/etherpad_mypads_logo.svg" height="80px" alt="logo de Etherpad"> Etherpad (avec plugin mypads) +--- +title: Etherpad avec plugin MyPads +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_etherpad_mypads' +--- + + [](https://install-app.yunohost.org/?app=etherpad_mypads) [](https://dash.yunohost.org/appci/app/etherpad_mypads) @@ -13,12 +22,12 @@ Etherpad est un éditeur de texte libre en ligne fonctionnant en mode collaborat Il est possible d'accéder à deux panneaux de configurations : + pour Etherpad : `domaine.tld/admin` - + pour My Pads : `domaine.tld/mypads/?/admin` + + pour MyPads : `domaine.tld/mypads/?/admin` ## Liens utiles + Site web : [etherpad.org (en)](https://etherpad.org/) -+ Documentation officielle : [etherpad.org - doc (en)](https://etherpad.org/doc/v1.7.0/) ++ 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/02.applications/02.docs/etherpad_mypads/app_etherpad_mypads.md similarity index 83% rename from app_etherpad_mypads.md rename to pages/02.applications/02.docs/etherpad_mypads/app_etherpad_mypads.md index 99c3155e..ee96c055 100644 --- a/app_etherpad_mypads.md +++ b/pages/02.applications/02.docs/etherpad_mypads/app_etherpad_mypads.md @@ -1,4 +1,13 @@ -# <img src="/images/etherpad_mypads_logo.svg" height="80px" alt="Etherpad's logo"> Etherpad (with mypads's plugin) +--- +title: Etherpad with MyPads plugin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_etherpad_mypads' +--- + + [](https://install-app.yunohost.org/?app=etherpad_mypads) [](https://dash.yunohost.org/appci/app/etherpad_mypads) @@ -13,12 +22,12 @@ Etherpad is an online free text editor working in collaborative mode and in real Two control panels can be accessed: + for Etherpad: `domain.tld/admin`. - + for My Pads: `domain.tld/mypads/?/admin`. + + for MyPads: `domain.tld/mypads/?/admin`. ## Useful links + Website: [etherpad.org](https://etherpad.org/) -+ Official documentation: [etherpad.org - doc](https://etherpad.org/doc/v1.7.0/) ++ 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/app_fallback_fr.md b/pages/02.applications/02.docs/fallback/app_fallback.fr.md similarity index 89% rename from app_fallback_fr.md rename to pages/02.applications/02.docs/fallback/app_fallback.fr.md index 906755bb..300f83a1 100644 --- a/app_fallback_fr.md +++ b/pages/02.applications/02.docs/fallback/app_fallback.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Fallback +--- +title: Fallback +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_fallback' +--- + + [](https://install-app.yunohost.org/?app=fallback) [](https://dash.yunohost.org/appci/app/fallback) diff --git a/pages/02.applications/02.docs/fallback/app_fallback.md b/pages/02.applications/02.docs/fallback/app_fallback.md new file mode 100644 index 00000000..0c9592eb --- /dev/null +++ b/pages/02.applications/02.docs/fallback/app_fallback.md @@ -0,0 +1,29 @@ +--- +title: Fallback +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_fallback' +--- + + + +[](https://install-app.yunohost.org/?app=fallback) [](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/02.applications/02.docs/ffsync/app_ffsync.fr.md similarity index 64% rename from app_ffsync_fr.md rename to pages/02.applications/02.docs/ffsync/app_ffsync.fr.md index 2e6e6e20..4e71a9c4 100644 --- a/app_ffsync_fr.md +++ b/pages/02.applications/02.docs/ffsync/app_ffsync.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/ffsync_logo.png" width="80px" alt="logo de Firefox Sync"> Firefox Sync +--- +title: Firefox Sync +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ffsync' +--- + + [](https://install-app.yunohost.org/?app=ffsync) [](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/02.applications/02.docs/ffsync/app_ffsync.it.md similarity index 83% rename from app_ffsync_it.md rename to pages/02.applications/02.docs/ffsync/app_ffsync.it.md index c83e4b64..80c7ff03 100644 --- a/app_ffsync_it.md +++ b/pages/02.applications/02.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/02.applications/02.docs/ffsync/app_ffsync.md similarity index 91% rename from app_ffsync.md rename to pages/02.applications/02.docs/ffsync/app_ffsync.md index e0eba9b3..7d75f891 100644 --- a/app_ffsync.md +++ b/pages/02.applications/02.docs/ffsync/app_ffsync.md @@ -1,4 +1,13 @@ -# <img src="/images/ffsync_logo.png" width="80px" alt="Firefox Sync's logo"> Firefox Sync +--- +title: Firefox Sync +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ffsync' +--- + + [](https://install-app.yunohost.org/?app=ffsync) [](https://dash.yunohost.org/appci/app/ffsync) diff --git a/app_firefly-iii_fr.md b/pages/02.applications/02.docs/firefly-iii/app_firefly-iii.fr.md similarity index 87% rename from app_firefly-iii_fr.md rename to pages/02.applications/02.docs/firefly-iii/app_firefly-iii.fr.md index 145eab49..8d342327 100644 --- a/app_firefly-iii_fr.md +++ b/pages/02.applications/02.docs/firefly-iii/app_firefly-iii.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/firefly_iii_logo.png" width="80px" alt="logo de Firefly III"> Firefly III +--- +title: Firefly III +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_firefly-iii' +--- + + [](https://install-app.yunohost.org/?app=firefly-iii) [](https://dash.yunohost.org/appci/app/firefly-iii) diff --git a/app_firefly-iii.md b/pages/02.applications/02.docs/firefly-iii/app_firefly-iii.md similarity index 86% rename from app_firefly-iii.md rename to pages/02.applications/02.docs/firefly-iii/app_firefly-iii.md index f1164fa3..a23d3172 100644 --- a/app_firefly-iii.md +++ b/pages/02.applications/02.docs/firefly-iii/app_firefly-iii.md @@ -1,4 +1,13 @@ -# <img src="/images/firefly_iii_logo.png" width="80px" alt="Firefly III's logo"> Firefly III +--- +title: Firefly III +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_firefly-iii' +--- + + [](https://install-app.yunohost.org/?app=firefly-iii) [](https://dash.yunohost.org/appci/app/firefly-iii) diff --git a/app_flarum_fr.md b/pages/02.applications/02.docs/flarum/app_flarum.fr.md similarity index 83% rename from app_flarum_fr.md rename to pages/02.applications/02.docs/flarum/app_flarum.fr.md index ee2d3695..de15fd5b 100644 --- a/app_flarum_fr.md +++ b/pages/02.applications/02.docs/flarum/app_flarum.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/flarum_logo.png" width="80px" alt="logo de Flarum"> Flarum +--- +title: Flarum +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_flarum' +--- + + [](https://install-app.yunohost.org/?app=flarum) [](https://dash.yunohost.org/appci/app/flarum) diff --git a/app_flarum.md b/pages/02.applications/02.docs/flarum/app_flarum.md similarity index 83% rename from app_flarum.md rename to pages/02.applications/02.docs/flarum/app_flarum.md index 84f3ed01..621c773c 100644 --- a/app_flarum.md +++ b/pages/02.applications/02.docs/flarum/app_flarum.md @@ -1,4 +1,13 @@ -# <img src="/images/flarum_logo.png" width="80px" alt="Flarum's logo"> Flarum +--- +title: Flarum +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_flarum' +--- + + [](https://install-app.yunohost.org/?app=flarum) [](https://dash.yunohost.org/appci/app/flarum) diff --git a/app_fluxbb_fr.md b/pages/02.applications/02.docs/fluxbb/app_fluxbb.fr.md similarity index 88% rename from app_fluxbb_fr.md rename to pages/02.applications/02.docs/fluxbb/app_fluxbb.fr.md index 3de6520d..08c6ee7a 100644 --- a/app_fluxbb_fr.md +++ b/pages/02.applications/02.docs/fluxbb/app_fluxbb.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/fluxbb_logo.png" height="80px" alt="logo de FluxBB"> FluxBB +--- +title: FluxBB +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_fluxbb' +--- + + [](https://install-app.yunohost.org/?app=fluxbb) [](https://dash.yunohost.org/appci/app/fluxbb) diff --git a/app_fluxbb.md b/pages/02.applications/02.docs/fluxbb/app_fluxbb.md similarity index 87% rename from app_fluxbb.md rename to pages/02.applications/02.docs/fluxbb/app_fluxbb.md index 76a73533..bbbcc858 100644 --- a/app_fluxbb.md +++ b/pages/02.applications/02.docs/fluxbb/app_fluxbb.md @@ -1,4 +1,13 @@ -# <img src="/images/fluxbb_logo.png" height="80px" alt="FluxBB's logo"> FluxBB +--- +title: FluxBB +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_fluxbb' +--- + + [](https://install-app.yunohost.org/?app=fluxbb) [](https://dash.yunohost.org/appci/app/fluxbb) diff --git a/app_framaforms_fr.md b/pages/02.applications/02.docs/framaforms/app_framaforms.fr.md similarity index 88% rename from app_framaforms_fr.md rename to pages/02.applications/02.docs/framaforms/app_framaforms.fr.md index 8afcdbe0..caba4108 100644 --- a/app_framaforms_fr.md +++ b/pages/02.applications/02.docs/framaforms/app_framaforms.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/framaforms_logo.png" height="80px" alt="logo de framaforms"> Framaforms +--- +title: Framaforms +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_framaforms' +--- + + [](https://install-app.yunohost.org/?app=framaforms) [](https://dash.yunohost.org/appci/app/framaforms) diff --git a/app_framaforms.md b/pages/02.applications/02.docs/framaforms/app_framaforms.md similarity index 91% rename from app_framaforms.md rename to pages/02.applications/02.docs/framaforms/app_framaforms.md index da5d380d..6b3ff6ce 100644 --- a/app_framaforms.md +++ b/pages/02.applications/02.docs/framaforms/app_framaforms.md @@ -1,4 +1,11 @@ -# <img src="/images/framaforms_logo.png" height="80px" alt="framaforms's logo"> Framaforms +--- +title: Framaforms +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_framaforms' +--- [](https://install-app.yunohost.org/?app=framaforms) [](https://dash.yunohost.org/appci/app/framaforms) diff --git a/app_freshrss_fr.md b/pages/02.applications/02.docs/freshrss/app_freshrss.fr.md similarity index 86% rename from app_freshrss_fr.md rename to pages/02.applications/02.docs/freshrss/app_freshrss.fr.md index 1109fd90..f66db945 100644 --- a/app_freshrss_fr.md +++ b/pages/02.applications/02.docs/freshrss/app_freshrss.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/freshrss_logo.svg" height="80px" alt="logo de FreshRSS"> FreshRSS +--- +title: FreshRSS +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_freshrss' +--- + + [](https://install-app.yunohost.org/?app=freshrss) [](https://dash.yunohost.org/appci/app/freshrss) @@ -21,7 +30,7 @@ API (mini) Comment faire : 4. Configurez votre client avec : + username : ynh user + password : le mot de passe que vous venez de configurer - + url https://exemple.tld/rss/api/greader.php + + URL : https://exemple.tld/rss/api/greader.php ## Applications clientes @@ -33,5 +42,5 @@ API (mini) Comment faire : + Site web : [www.freshrss.org (en)](https://www.freshrss.org/) + Documentation officielle : [freshrss.github.io - FreshRSS](https://freshrss.github.io/FreshRSS/fr/) - + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/freshrss](https://github.com/YunoHost-Apps/freshrss) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/freshrss](https://github.com/YunoHost-Apps/freshrss_ynh) + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/freshrss/issues](https://github.com/YunoHost-Apps/freshrss_ynh/issues) diff --git a/app_freshrss.md b/pages/02.applications/02.docs/freshrss/app_freshrss.md similarity index 76% rename from app_freshrss.md rename to pages/02.applications/02.docs/freshrss/app_freshrss.md index 969051a2..d698fcd9 100644 --- a/app_freshrss.md +++ b/pages/02.applications/02.docs/freshrss/app_freshrss.md @@ -1,4 +1,13 @@ -# <img src="/images/freshrss_logo.svg" height="80px" alt="APPLICATION's FreshRSS"> FreshRSS +--- +title: FreshRSS +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_freshrss' +--- + + [](https://install-app.yunohost.org/?app=freshrss) [](https://dash.yunohost.org/appci/app/freshrss) @@ -15,13 +24,13 @@ FreshRSS has a lot of features including. ## Configuration API (mini) How To -1. Into your user profile : `Settings > profil` +1. Into your user profile: `Settings > profil` 2. Setup an API password -3. Check the API is working : https://exemple.tld/rss/api/greader.php -4. Setup your client with : - + username : ynh user - + password : the password you just setup - + url https://exemple.tld/rss/api/greader.php +3. Check the API is working: https://exemple.tld/rss/api/greader.php +4. Setup your client with: + + username: ynh user + + password: the password you just setup + + URL: https://exemple.tld/rss/api/greader.php ## Customer applications diff --git a/app_friendica_fr.md b/pages/02.applications/02.docs/friendica/app_friendica.fr.md similarity index 92% rename from app_friendica_fr.md rename to pages/02.applications/02.docs/friendica/app_friendica.fr.md index d3f7587c..e44804a8 100644 --- a/app_friendica_fr.md +++ b/pages/02.applications/02.docs/friendica/app_friendica.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/friendica_logo.svg" height="80px" alt="logo de friendica"> Friendica +--- +title: Friendica +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_friendica' +--- + + [](https://install-app.yunohost.org/?app=friendica) [](https://dash.yunohost.org/appci/app/friendica) @@ -7,12 +16,10 @@ - [Configuration](#configuration) - [Liens utiles](#liens-utiles) - Friendica est une plateforme de communication décentralisée qui intègre la communication sociale. La plate-forme est liée à des projets sociaux indépendants et à des services aux entreprises. Son objectif est de libérer les amis, la famille et les collègues des entreprises qui récoltent des données ; Friendica vise à ce que la communication sociale soit libre et ouverte, tout en circulant entre tous les fournisseurs aussi facilement que le courrier électronique.[¹](#sources) - ## Configuration Avant l'installation, lisez les instructions d'installation de Friendica pour obtenir des informations à propos de l'installation @@ -22,7 +29,6 @@ Domaine dédié (doit être installé sous la racine web comme https://hub.examp Note : Vous pouvez utiliser les comptes du LDAP de YunoHost. Il n'y a pas encore de SSO actif. - ## Liens utiles + Site web : [friendi.ca](http://friendi.ca/) @@ -31,7 +37,6 @@ Note : Vous pouvez utiliser les comptes du LDAP de YunoHost. Il n'y a pas encore + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/friendica](https://github.com/YunoHost-Apps/friendica_ynh) + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/friendica/issues](https://github.com/YunoHost-Apps/friendica_ynh/issues) - ------ ### Sources diff --git a/app_friendica.md b/pages/02.applications/02.docs/friendica/app_friendica.md similarity index 87% rename from app_friendica.md rename to pages/02.applications/02.docs/friendica/app_friendica.md index 990365ad..de0f9262 100644 --- a/app_friendica.md +++ b/pages/02.applications/02.docs/friendica/app_friendica.md @@ -1,4 +1,13 @@ -# <img src="/images/friendica_logo.svg" height="80px" alt="friendica's logo"> Friendica +--- +title: Friendica +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_friendica' +--- + + [](https://install-app.yunohost.org/?app=friendica) [](https://dash.yunohost.org/appci/app/friendica) @@ -7,7 +16,6 @@ - [Configuration](#configuration) - [Useful links](#useful-links) - Friendica is a decentralized communication platform that integrates social communication. The platform is linked to independent social projects and business services. Its aim is to free up friends, family and colleagues from companies that collect data; Friendica aims to make social communication free and open, while circulating between all providers as easily as email.[¹](#sources) @@ -19,8 +27,7 @@ Before installing, read the Friendica installation instructions for important in SSL certificate validation requirement (now with support for Let's Encrypt!). See Installation section below. Dedicated domain (must install under web root like https://hub.example.com/ not https://example.com/hub/ ) -Note:You can use accounts from YunoHost's LDAP. There are not yet active SSO. - +Note: You can use accounts from YunoHost's LDAP. There are not yet active SSO. ## Useful links diff --git a/app_funkwhale_fr.md b/pages/02.applications/02.docs/funkwhale/app_funkwhale.fr.md similarity index 90% rename from app_funkwhale_fr.md rename to pages/02.applications/02.docs/funkwhale/app_funkwhale.fr.md index 91dfbe76..12b9ac10 100644 --- a/app_funkwhale_fr.md +++ b/pages/02.applications/02.docs/funkwhale/app_funkwhale.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/funkwhale_logo.png" width="80px" alt="logo de Funkwhale"> Funkwhale +--- +title: Funkwhale +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_funkwhale' +--- + + [](https://install-app.yunohost.org/?app=funkwhale) [](https://dash.yunohost.org/appci/app/funkwhale) diff --git a/app_funkwhale.md b/pages/02.applications/02.docs/funkwhale/app_funkwhale.md similarity index 83% rename from app_funkwhale.md rename to pages/02.applications/02.docs/funkwhale/app_funkwhale.md index 774dc534..c557b1fe 100644 --- a/app_funkwhale.md +++ b/pages/02.applications/02.docs/funkwhale/app_funkwhale.md @@ -1,4 +1,13 @@ -# <img src="/images/funkwhale_logo.png" width="80px" alt="Funkwhale's logo"> Funkwhale +--- +title: Funkwhale +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_funkwhale' +--- + + [](https://install-app.yunohost.org/?app=funkwhale) [](https://dash.yunohost.org/appci/app/funkwhale) @@ -23,7 +32,7 @@ To install Funkwhale on your YunoHost server it is necessary to have a domain na + Website: [funkwhale.audio](https://funkwhale.audio/) + Official documentation: [docs.funkwhale.audio](https://docs.funkwhale.audio/) + Application software repository: [github.com - YunoHost-Apps/funkwhale](https://github.com/YunoHost-Apps/funkwhale_ynh) -+ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/APPLICATION/issues](https://github.com/YunoHost-Apps/APPLICATION_ynh/issues) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/funkwhale/issues](https://github.com/YunoHost-Apps/funkwhale_ynh/issues) ----- diff --git a/pages/02.applications/02.docs/galene/app_galene.fr.md b/pages/02.applications/02.docs/galene/app_galene.fr.md new file mode 100644 index 00000000..0e113586 --- /dev/null +++ b/pages/02.applications/02.docs/galene/app_galene.fr.md @@ -0,0 +1,23 @@ +--- +title: Galène +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_galene' +--- + +[](https://install-app.yunohost.org/?app=galene) [](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/02.applications/02.docs/galene/app_galene.md b/pages/02.applications/02.docs/galene/app_galene.md new file mode 100644 index 00000000..c52bc7bd --- /dev/null +++ b/pages/02.applications/02.docs/galene/app_galene.md @@ -0,0 +1,23 @@ +--- +title: Galène +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_galene' +--- + +[](https://install-app.yunohost.org/?app=galene) [](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/app_garradin_fr.md b/pages/02.applications/02.docs/garradin/app_garradin.fr.md similarity index 84% rename from app_garradin_fr.md rename to pages/02.applications/02.docs/garradin/app_garradin.fr.md index c4be2afe..25f510c4 100644 --- a/app_garradin_fr.md +++ b/pages/02.applications/02.docs/garradin/app_garradin.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/garradin_logo.svg" height="80px" alt="logo de Garradin"> Garradin +--- +title: Garradin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_garradin' +--- + + [](https://install-app.yunohost.org/?app=garradin) [](https://dash.yunohost.org/appci/app/garradin) @@ -7,7 +16,7 @@ - [Limitations avec YunoHost](#limitations-avec-yunohost) - [Liens utiles](#liens-utiles) -Garradin (mot signifiant argent dans un dialecte aborigène du nord de l'Australie, prononcé « gar-a-dine ») est un logiciel de gestion associative. Il est l'outil de prédilection pour gérer une association, un club sportif, une ONG, etc. Il est conçu pour répondre aux besoins d'une structure de petite à moyenne taille : gestion des adhérents, comptabilité, site web, prise de notes en réunion, archivage et partage des documents de fonctionnement de l'association, discussion entre adhérents, etc etc.[¹](#sources) +Garradin (mot signifiant argent dans un dialecte aborigène du nord de l'Australie, prononcé « gar-a-dine ») est un logiciel de gestion associative. Il est l'outil de prédilection pour gérer une association, un club sportif, une ONG, etc. Il est conçu pour répondre aux besoins d'une structure de petite à moyenne taille : gestion des adhérents, comptabilité, site Web, prise de notes en réunion, archivage et partage des documents de fonctionnement de l'association, discussion entre adhérents, etc.[¹](#sources) ## Limitations avec YunoHost diff --git a/app_garradin.md b/pages/02.applications/02.docs/garradin/app_garradin.md similarity index 76% rename from app_garradin.md rename to pages/02.applications/02.docs/garradin/app_garradin.md index e1d6766b..8d63cf2c 100644 --- a/app_garradin.md +++ b/pages/02.applications/02.docs/garradin/app_garradin.md @@ -1,4 +1,13 @@ -# <img src="/images/garradin_logo.svg" height="80px" alt="Garradin's logo"> Garradin +--- +title: Garradin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_garradin' +--- + + [](https://install-app.yunohost.org/?app=garradin) [](https://dash.yunohost.org/appci/app/garradin) @@ -7,7 +16,7 @@ - [Limitations with YunoHost](#limitations-with-yunohost) - [Useful links](#useful-links) -Garradin (a word meaning silver in an Aboriginal dialect of northern Australia, pronounced "gar-a-dine "em) is a software program for associative management. It is the tool of choice to manage an association, a sports club, an NGO, etc.. It is designed to meet the needs of a small to medium-sized structure: membership management, accounting, website, note-taking at meetings, archiving and sharing of the association's operating documents, discussion between members, etc. etc.[¹](#sources) +Garradin (a word meaning silver in an Aboriginal dialect of northern Australia, pronounced "gar-a-dine "em) is a software program for associative management. It is the tool of choice to manage an association, a sports club, an NGO, etc. It is designed to meet the needs of a small to medium-sized structure: membership management, accounting, website, note-taking at meetings, archiving and sharing of the association's operating documents, discussion between members, etc.¹](#sources) ## Limitations with YunoHost diff --git a/app_gitea_fr.md b/pages/02.applications/02.docs/gitea/app_gitea.fr.md similarity index 79% rename from app_gitea_fr.md rename to pages/02.applications/02.docs/gitea/app_gitea.fr.md index 810a6363..c12e09f5 100644 --- a/app_gitea_fr.md +++ b/pages/02.applications/02.docs/gitea/app_gitea.fr.md @@ -1,18 +1,27 @@ -# <img src="/images/gitea_logo.png" width="80px" alt="logo de Gitea"> Gitea +--- +title: Gitea +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitea' +--- + + [](https://install-app.yunohost.org/?app=gitea) [](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) +Gitea est un service Git auto-hébergé très simple à installer et à utiliser. Il est similaire à GitHub, Bitbucket ou GitLab. Le développement initial provient sur Gogs, mais il a été forké puis renommé Gitea.[¹](#sources) ## Limitations avec YunoHost -Si vous voulez utiliser la commande git (comme git clone, git pull, git push), vous devez rendre cette application publique. +Si vous voulez utiliser les commandes Git (comme `git clone`, `git pull`, `git push`), vous devez rendre cette application publique. ## Applications clientes diff --git a/app_gitea.md b/pages/02.applications/02.docs/gitea/app_gitea.md similarity index 85% rename from app_gitea.md rename to pages/02.applications/02.docs/gitea/app_gitea.md index b1055763..32070fe0 100644 --- a/app_gitea.md +++ b/pages/02.applications/02.docs/gitea/app_gitea.md @@ -1,4 +1,13 @@ -# <img src="/images/gitea_logo.png" width="80px" alt="Gitea's logo"> Gitea +--- +title: Gitea +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitea' +--- + + [](https://install-app.yunohost.org/?app=gitea) [](https://dash.yunohost.org/appci/app/gitea) @@ -12,7 +21,7 @@ Gitea is a painless self-hosted Git service. It is similar to GitHub, Bitbucket, ## Limitations with YunoHost -If you want to use the git command (like git clone, git pull, git push), you need to set this app as public. +If you want to use Git commands (like `git clone`, `git pull`, `git push`), you need to set this app as public. ## Customer applications diff --git a/app_gitlab-runner_fr.md b/pages/02.applications/02.docs/gitlab-runner/app_gitlab-runner.fr.md similarity index 84% rename from app_gitlab-runner_fr.md rename to pages/02.applications/02.docs/gitlab-runner/app_gitlab-runner.fr.md index b4537f11..81c4f7f8 100644 --- a/app_gitlab-runner_fr.md +++ b/pages/02.applications/02.docs/gitlab-runner/app_gitlab-runner.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/gitlab-runner_logo.png" height="80px" alt="logo de GitLab Runner"> GitLab Runner +--- +title: Gitlab Runner +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitlab-runner' +--- + + [](https://install-app.yunohost.org/?app=gitlab-runner) [](https://dash.yunohost.org/appci/app/gitlab-runner) diff --git a/app_gitlab-runner.md b/pages/02.applications/02.docs/gitlab-runner/app_gitlab-runner.md similarity index 83% rename from app_gitlab-runner.md rename to pages/02.applications/02.docs/gitlab-runner/app_gitlab-runner.md index 03c40312..21dbf58c 100644 --- a/app_gitlab-runner.md +++ b/pages/02.applications/02.docs/gitlab-runner/app_gitlab-runner.md @@ -1,4 +1,13 @@ -# <img src="/images/gitlab-runner_logo.png" height="80px" alt="GitLab Runner's logo"> GitLab Runner +--- +title: Gitlab Runner +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitlab-runner' +--- + + [](https://install-app.yunohost.org/?app=gitlab-runner) [](https://dash.yunohost.org/appci/app/gitlab-runner) diff --git a/app_gitlab_fr.md b/pages/02.applications/02.docs/gitlab/app_gitlab.fr.md similarity index 93% rename from app_gitlab_fr.md rename to pages/02.applications/02.docs/gitlab/app_gitlab.fr.md index b7260eb0..56d6471b 100644 --- a/app_gitlab_fr.md +++ b/pages/02.applications/02.docs/gitlab/app_gitlab.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/gitlab_logo.svg" height="80px" alt="logo de GitLab"> GitLab +--- +title: Gitlab +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitlab' +--- + + [](https://install-app.yunohost.org/?app=gitlab) [](https://dash.yunohost.org/appci/app/gitlab) diff --git a/app_gitlab.md b/pages/02.applications/02.docs/gitlab/app_gitlab.md similarity index 92% rename from app_gitlab.md rename to pages/02.applications/02.docs/gitlab/app_gitlab.md index 72b783f7..8b5921c8 100644 --- a/app_gitlab.md +++ b/pages/02.applications/02.docs/gitlab/app_gitlab.md @@ -1,4 +1,13 @@ -# <img src="/images/gitlab_logo.svg" height="80px" alt="GitLab's logo"> GitLab +--- +title: Gitlab +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gitlab' +--- + + [](https://install-app.yunohost.org/?app=gitlab) [](https://dash.yunohost.org/appci/app/gitlab) diff --git a/app_glowing_bear_fr.md b/pages/02.applications/02.docs/glowing_bear/app_glowing_bear.fr.md similarity index 89% rename from app_glowing_bear_fr.md rename to pages/02.applications/02.docs/glowing_bear/app_glowing_bear.fr.md index 47b75e10..1849dc64 100644 --- a/app_glowing_bear_fr.md +++ b/pages/02.applications/02.docs/glowing_bear/app_glowing_bear.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/glowing_bear_logo.svg" height="80px" alt="logo de Glowing Bear"> Glowing Bear +--- +title: Glowing Bear +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_glowing_bear' +--- + + [](https://install-app.yunohost.org/?app=glowingbear) [](https://dash.yunohost.org/appci/app/glowingbear) diff --git a/app_glowing_bear.md b/pages/02.applications/02.docs/glowing_bear/app_glowing_bear.md similarity index 74% rename from app_glowing_bear.md rename to pages/02.applications/02.docs/glowing_bear/app_glowing_bear.md index f21168a0..29e1088d 100644 --- a/app_glowing_bear.md +++ b/pages/02.applications/02.docs/glowing_bear/app_glowing_bear.md @@ -1,4 +1,13 @@ -# <img src="/images/glowing_bear_logo.svg" height="80px" alt="Glowing Bear's logo"> Glowing Bear +--- +title: Glowing Bear +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_glowing_bear' +--- + + [](https://install-app.yunohost.org/?app=glowingbear) [](https://dash.yunohost.org/appci/app/glowingbear) @@ -6,7 +15,7 @@ - [Useful links](#useful-links) -Glowing Bear is a web frontend for the WeeChat IRC client and strives to be a modern interface. It relies on WeeChat to do all the heavy lifting and then provides some nice features on top of that, like embedding images, videos, and other content. The best part, however, is that you can use it from any modern internet device -- whether it's a computer, tablet, or smart phone -- and all your stuff is there, wherever you are. You don't have to deal with the messy technical details, and all you need to have installed is a browser or our app.[¹](#sources) +Glowing Bear is a web frontend for the WeeChat IRC client and strives to be a modern interface. It relies on WeeChat to do all the heavy lifting and then provides some nice features on top of that, like embedding images, videos, and other content. The best part, however, is that you can use it from any modern internet device - whether it's a computer, tablet, or smart phone - and all your stuff is there, wherever you are. You don't have to deal with the messy technical details, and all you need to have installed is a browser or our app.[¹](#sources) ## Useful links diff --git a/pages/02.applications/02.docs/gogs/app_gogs.fr.md b/pages/02.applications/02.docs/gogs/app_gogs.fr.md new file mode 100644 index 00000000..134922fa --- /dev/null +++ b/pages/02.applications/02.docs/gogs/app_gogs.fr.md @@ -0,0 +1,26 @@ +--- +title: Gogs +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gogs' +--- + + + +[](https://install-app.yunohost.org/?app=gogs) [](https://dash.yunohost.org/appci/app/gogs) + +### Index + +- [Liens utiles](#liens-utiles) + +Gogs est une forge logiciel minimaliste utilisant Git. Gogs a été conçu pour pouvoir fonctionner de manières optimale sur du matériel peu puissant type Raspberry Pi. Il est donc adapté à l'auto-hébergement d'une forge Git. +Pour utiliser pleinement la puissance de Gogs vous devez avoir appréhender ce qu'est Git et l'utilisation d'un [logiciel de gestion de versions](https://fr.wikipedia.org/wiki/Logiciel_de_gestion_de_versions). + +## Liens utiles + + + Site web : [gogs.io](https://gogs.io) + + Documentation officielle : [gogs.io - docs](https://gogs.io/docs) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/gogs](https://github.com/YunoHost-Apps/gogs_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/gogs/issues](https://github.com/YunoHost-Apps/gogs_ynh/issues) diff --git a/pages/02.applications/02.docs/gogs/app_gogs.md b/pages/02.applications/02.docs/gogs/app_gogs.md new file mode 100644 index 00000000..5a953063 --- /dev/null +++ b/pages/02.applications/02.docs/gogs/app_gogs.md @@ -0,0 +1,27 @@ +--- +title: Gogs +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gogs' +--- + + + +[](https://install-app.yunohost.org/?app=gogs) [](https://dash.yunohost.org/appci/app/gogs) + +### Index + +- [Useful links](#useful-links) + +Gogs is a minimalist software forge using Git. Gogs has been designed to work best on low-powered hardware such as Raspberry Pi. +It is therefore suitable for self-hosting a Git forge. +To fully use the power of Gogs you need to understand what Git is and how to use version control software. + +## Useful links + ++ Website: [gogs.io](https://gogs.io/) ++ Official documentation: [gogs.io - docs](https://gogs.io/docs) ++ Application software repository: [github.com - YunoHost-Apps/gogs](https://github.com/YunoHost-Apps/gogs_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/gogs/issues](https://github.com/YunoHost-Apps/gogs_ynh/issues) diff --git a/app_gotify_fr.md b/pages/02.applications/02.docs/gotify/app_gotify.fr.md similarity index 91% rename from app_gotify_fr.md rename to pages/02.applications/02.docs/gotify/app_gotify.fr.md index 6f9477d6..d6d2506f 100644 --- a/app_gotify_fr.md +++ b/pages/02.applications/02.docs/gotify/app_gotify.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/gotify_logo.png" width="80px" alt="logo de Gotify"> Gotify +--- +title: Gotify +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gotify' +--- + + [](https://install-app.yunohost.org/?app=gotify) [](https://dash.yunohost.org/appci/app/gotify) diff --git a/app_gotify.md b/pages/02.applications/02.docs/gotify/app_gotify.md similarity index 90% rename from app_gotify.md rename to pages/02.applications/02.docs/gotify/app_gotify.md index fad28143..5fecc32f 100644 --- a/app_gotify.md +++ b/pages/02.applications/02.docs/gotify/app_gotify.md @@ -1,4 +1,13 @@ -# <img src="/images/gotify_logo.png" width="80px" alt="Gotify's logo"> Gotify +--- +title: Gotify +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_gotify' +--- + + [](https://install-app.yunohost.org/?app=gotify) [](https://dash.yunohost.org/appci/app/gotify) diff --git a/app_grav_fr.md b/pages/02.applications/02.docs/grav/app_grav.fr.md similarity index 89% rename from app_grav_fr.md rename to pages/02.applications/02.docs/grav/app_grav.fr.md index d745195f..d15f9148 100644 --- a/app_grav_fr.md +++ b/pages/02.applications/02.docs/grav/app_grav.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/grav_logo.png" width="80px" alt="logo de Grav"> Grav +--- +title: Grav +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_grav' +--- + + [](https://install-app.yunohost.org/?app=grav) [](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/02.applications/02.docs/grav/app_grav.md similarity index 88% rename from app_grav.md rename to pages/02.applications/02.docs/grav/app_grav.md index 950b1331..d35ea9ec 100644 --- a/app_grav.md +++ b/pages/02.applications/02.docs/grav/app_grav.md @@ -1,4 +1,13 @@ -# <img src="/images/grav_logo.png" width="80px" alt="Grav's logo"> Grav +--- +title: Grav +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_grav' +--- + + [](https://install-app.yunohost.org/?app=grav) [](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/app_halcyon_fr.md b/pages/02.applications/02.docs/halcyon/app_halcyon.fr.md similarity index 82% rename from app_halcyon_fr.md rename to pages/02.applications/02.docs/halcyon/app_halcyon.fr.md index eb5040c8..ce0b74ef 100644 --- a/app_halcyon_fr.md +++ b/pages/02.applications/02.docs/halcyon/app_halcyon.fr.md @@ -1,15 +1,24 @@ -# <img src="/images/halcyon_logo.png" width="80px" alt="logo de Halcyon"> Halcyon +--- +title: Halcyon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_halcyon' +--- + + [](https://install-app.yunohost.org/?app=halcyon) [](https://dash.yunohost.org/appci/app/halcyon) ### Index -- [Limitations avec Yunohost](#limitations-avec-yunohost) +- [Limitations avec YunoHost](#limitations-avec-yunohost) - [Liens utiles](#liens-utiles) Halcyon est un client web pour Mastodon et Pleroma qui vise à recréer l'interface utilisateur simple et belle de Twitter tout en conservant tous les avantages des réseaux décentralisés.[¹](#sources) -## Limitations avec Yunohost +## Limitations avec YunoHost L'application nécessite un domaine dédié comme `halcyon.domaine.tld` diff --git a/app_halcyon.md b/pages/02.applications/02.docs/halcyon/app_halcyon.md similarity index 83% rename from app_halcyon.md rename to pages/02.applications/02.docs/halcyon/app_halcyon.md index 3a66f8c9..3282e5c7 100644 --- a/app_halcyon.md +++ b/pages/02.applications/02.docs/halcyon/app_halcyon.md @@ -1,4 +1,13 @@ -# <img src="/images/halcyon_logo.png" width="80px" alt="Halcyon's logo"> Halcyon +--- +title: Halcyon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_halcyon' +--- + + [](https://install-app.yunohost.org/?app=halcyon) [](https://dash.yunohost.org/appci/app/halcyon) @@ -11,7 +20,7 @@ Halcyon is a webclient for Mastodon and Pleroma which aims to recreate the simpl ## Limitations with YunoHost -The app require a dedicaed domain like `halcyon.domain.tld` +The app require a dedicated domain like `halcyon.domain.tld` ## Useful links diff --git a/pages/02.applications/02.docs/haste/app_haste.fr.md b/pages/02.applications/02.docs/haste/app_haste.fr.md new file mode 100644 index 00000000..354a7fc4 --- /dev/null +++ b/pages/02.applications/02.docs/haste/app_haste.fr.md @@ -0,0 +1,36 @@ +--- +title: Haste +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_haste' +--- + + + +[](https://install-app.yunohost.org/?app=haste) [](https://dash.yunohost.org/appci/app/haste) + +### Index + +- [Configuration](#Configuration) +- [Liens utiles](#useful-links) + +Haste est un logiciel pastebin open-source écrit en Node.js, facilement installable sur n'importe quel réseau. Le projet YunoHost utilise Haste comme pastebin pour le partage de log : [paste.yunohost.org](https://paste.yunohost.org/) + +## Configuration + +Ce paquet de Haste pour YunoHost comprend une commande [`haste`](https://github.com/diethnis/standalones/blob/master/hastebin.sh), vous permettant de partager du contenu avec le terminal : + +```bash +cat something | haste +https://haste.example.com/zuyejeduzu +``` + +Le [client Haste](https://github.com/seejohnrun/haste-client) est un client simple pour télécharger des données sur votre serveur Haste. + +## Liens utiles + ++ Documentation officielle : [hastebin.com - about](https://hastebin.com/about.md) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/haste](https://github.com/YunoHost-Apps/haste_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/haste/issues](https://github.com/YunoHost-Apps/haste_ynh/issues) diff --git a/pages/02.applications/02.docs/haste/app_haste.md b/pages/02.applications/02.docs/haste/app_haste.md new file mode 100644 index 00000000..935cc0fc --- /dev/null +++ b/pages/02.applications/02.docs/haste/app_haste.md @@ -0,0 +1,37 @@ +--- +title: Haste +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_haste' +--- + + + +[](https://install-app.yunohost.org/?app=haste) [](https://dash.yunohost.org/appci/app/haste) + +### Index + +- [Configuration](#Configuration) +- [Useful links](#useful-links) + +Haste is an open-source pastebin software written in Node.js, which is easily installable in any network. YunoHost Project uses Haste as pastebin for log sharing: [paste.yunohost.org](https://paste.yunohost.org/) + +## Configuration + +This Haste package for YunoHost includes the [`haste` command](https://github.com/diethnis/standalones/blob/master/hastebin.sh), allowing you to share content from terminal: + +```bash +cat something | haste +https://haste.example.com/zuyejeduzu +``` +The [Haste-client](https://github.com/seejohnrun/haste-client) is a simple client for uploading data to you Haste server. + +Haste requires a dedicated domain like `haste.domain.tld`. + +## Useful links + ++ Official documentation: [hastebin.com - about](https://hastebin.com/about.md) ++ Application software repository: [github.com - YunoHost-Apps/haste](https://github.com/YunoHost-Apps/haste_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/haste/issues](https://github.com/YunoHost-Apps/haste_ynh/issues) diff --git a/pages/02.applications/02.docs/hedgedoc/app_hedgedoc.fr.md b/pages/02.applications/02.docs/hedgedoc/app_hedgedoc.fr.md new file mode 100644 index 00000000..f8d47f23 --- /dev/null +++ b/pages/02.applications/02.docs/hedgedoc/app_hedgedoc.fr.md @@ -0,0 +1,27 @@ +--- +title: HedgeDoc +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hedgedoc' +--- + + + +[](https://install-app.yunohost.org/?app=hedgedoc) [](https://dash.yunohost.org/appci/app/hedgedoc) + +### Index + +- [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 propose un vaste choix de fonctionnalités pour toutes les utilisations courantes du traitement de texte parmi lesquelles gestion des titres, table de matières, insertion d’images, tableaux, notes de bas de page, incrustation de vidéos, visualisateurs PDF, expressions mathématiques LaTeX avec MathJax, diagrammes, etc. +Différents niveaux de permission permettent de choisir qui peut lire ou éditer le document. + +## Liens utiles + ++ Démo officielle : [https://demo.hedgedoc.org/](https://demo.hedgedoc.org/) ++ Documentation officielle : [github.com/hedgedoc](https://github.com/hedgedoc/hedgedoc/tree/master/docs) ++ Dépôt logiciel de l’application : [github.com - YunoHost-Apps/hedgedoc](https://github.com/YunoHost-Apps/codimd_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/hedgedoc/issues](https://github.com/YunoHost-Apps/hedgedoc_ynh/issues) diff --git a/pages/02.applications/02.docs/hedgedoc/app_hedgedoc.md b/pages/02.applications/02.docs/hedgedoc/app_hedgedoc.md new file mode 100644 index 00000000..ec5718cf --- /dev/null +++ b/pages/02.applications/02.docs/hedgedoc/app_hedgedoc.md @@ -0,0 +1,27 @@ +--- +title: HedgeDoc +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hedgedoc' +--- + + + +[](https://install-app.yunohost.org/?app=hedgedoc) [](https://dash.yunohost.org/appci/app/hedgedoc) + +### Index + +- [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 offers a wide range of features for all common uses of word processing, including title management, table of contents, insertion of images, tables, footnotes, video overlay, PDF viewers, LaTeX mathematical expressions with MathJax, diagrams, etc. +Different levels of permission allow you to choose who can read or edit the document. + +## Useful links + ++ Official demo: [https://demo.hedgedoc.org/](https://demo.hedgedoc.org/) ++ Official documentation: [https://docs.hedgedoc.org/](https://docs.hedgedoc.org/) ++ Application software repository: [github.com - YunoHost-Apps/hedgedoc](https://github.com/YunoHost-Apps/hedgedoc_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/hedgedoc/issues](https://github.com/YunoHost-Apps/hedgedoc_ynh/issues) diff --git a/app_hextris_fr.md b/pages/02.applications/02.docs/hextris/app_hextris.fr.md similarity index 85% rename from app_hextris_fr.md rename to pages/02.applications/02.docs/hextris/app_hextris.fr.md index b584b7a9..6ebe08cf 100644 --- a/app_hextris_fr.md +++ b/pages/02.applications/02.docs/hextris/app_hextris.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/hextris_logo.png" width="80px" alt="logo de Hextris"> Hextris +--- +title: Hextrix +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hextris' +--- + + [](https://install-app.yunohost.org/?app=hextris) [](https://dash.yunohost.org/appci/app/hextris) diff --git a/app_hextris.md b/pages/02.applications/02.docs/hextris/app_hextris.md similarity index 81% rename from app_hextris.md rename to pages/02.applications/02.docs/hextris/app_hextris.md index 2586fb32..84f6d4a4 100644 --- a/app_hextris.md +++ b/pages/02.applications/02.docs/hextris/app_hextris.md @@ -1,4 +1,13 @@ -# <img src="/images/hextris_logo.png" width="80px" alt="Hextris's logo"> Hextris +--- +title: Hextris +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hextris' +--- + + [](https://install-app.yunohost.org/?app=hextris) [](https://dash.yunohost.org/appci/app/hextris) @@ -6,8 +15,7 @@ - [Useful links](#useful-links) -Because sometimes you have to know how to relax. Host your own fork of the famous Tetris and become the master of this infernal hexagon ? -Who will tame this infernal. +Because sometimes you have to know how to relax. Host your own fork of the famous Tetris and become the master of this infernal hexagon? Who will tame this infernal. ## Useful links diff --git a/app_horde_fr.md b/pages/02.applications/02.docs/horde/app_horde.fr.md similarity index 88% rename from app_horde_fr.md rename to pages/02.applications/02.docs/horde/app_horde.fr.md index a56c7ee3..d9f596c4 100644 --- a/app_horde_fr.md +++ b/pages/02.applications/02.docs/horde/app_horde.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/horde_logo.png" height="80px" alt="logo de Horde"> Horde +--- +title: Horde +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_horde' +--- + + [](https://install-app.yunohost.org/?app=horde) [](https://dash.yunohost.org/appci/app/horde) diff --git a/app_horde.md b/pages/02.applications/02.docs/horde/app_horde.md similarity index 87% rename from app_horde.md rename to pages/02.applications/02.docs/horde/app_horde.md index ca12df16..f2e9c3fe 100644 --- a/app_horde.md +++ b/pages/02.applications/02.docs/horde/app_horde.md @@ -1,4 +1,13 @@ -# <img src="/images/horde_logo.png" height="80px" alt="Horde's logo"> Horde +--- +title: Horde +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_horde' +--- + + [](https://install-app.yunohost.org/?app=horde) [](https://dash.yunohost.org/appci/app/horde) diff --git a/app_hubzilla_fr.md b/pages/02.applications/02.docs/hubzilla/app_hubzilla.fr.md similarity index 89% rename from app_hubzilla_fr.md rename to pages/02.applications/02.docs/hubzilla/app_hubzilla.fr.md index ae163ff0..63b7fa84 100644 --- a/app_hubzilla_fr.md +++ b/pages/02.applications/02.docs/hubzilla/app_hubzilla.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/hubzilla_logo.png" width="80px" alt="logo de Hubzilla"> Hubzilla +--- +title: Hubzilla +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hubzilla' +--- + + [](https://install-app.yunohost.org/?app=hubzilla) [](https://dash.yunohost.org/appci/app/hubzilla) diff --git a/app_hubzilla.md b/pages/02.applications/02.docs/hubzilla/app_hubzilla.md similarity index 88% rename from app_hubzilla.md rename to pages/02.applications/02.docs/hubzilla/app_hubzilla.md index f4848580..bf7fdb38 100644 --- a/app_hubzilla.md +++ b/pages/02.applications/02.docs/hubzilla/app_hubzilla.md @@ -1,4 +1,13 @@ -# <img src="/images/hubzilla_logo.png" width="80px" alt="Hubzilla's logo"> Hubzilla +--- +title: Hubzilla +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_hubzilla' +--- + + [](https://install-app.yunohost.org/?app=hubzilla) [](https://dash.yunohost.org/appci/app/hubzilla) diff --git a/pages/02.applications/02.docs/invoiceninga/app_invoiceninja.md b/pages/02.applications/02.docs/invoiceninga/app_invoiceninja.md new file mode 100644 index 00000000..1f52a6cf --- /dev/null +++ b/pages/02.applications/02.docs/invoiceninga/app_invoiceninja.md @@ -0,0 +1,33 @@ +--- +title: Invoice Ninja +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_invoiceninja' +--- + + + +[](https://install-app.yunohost.org/?app=invoiceninja) +[](https://dash.yunohost.org/appci/app/invoiceninja) + + +### Index + +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Useful links](#useful-links) + +Invoice Ninja is an open-source platform to create and email invoices, track payments, expenses, time billable tasks and projects for clients. + + +## Limitations with YunoHost + +There is no official LDAP support. The first user gets created after installing Invoice Ninja. Other users can be created from inside the application + +## Useful links + ++ Website: https://www.invoiceninja.org/ ++ Application software repository: https://github.com/YunoHost-Apps/invoiceninja_ynh ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/invoiceninja/issues](https://github.com/YunoHost-Apps/invoiceninja_ynh/issues) ++ Official documentation: [Invoice Ninja User Guide](https://docs.invoiceninja.com/) diff --git a/pages/02.applications/02.docs/jappix/app_jappix.fr.md b/pages/02.applications/02.docs/jappix/app_jappix.fr.md new file mode 100644 index 00000000..06077e7b --- /dev/null +++ b/pages/02.applications/02.docs/jappix/app_jappix.fr.md @@ -0,0 +1,12 @@ +--- +title: Jappix +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jappix' +--- + + + +Jappix est un client web [XMPP](/XMPP). diff --git a/pages/02.applications/02.docs/jappix/app_jappix.md b/pages/02.applications/02.docs/jappix/app_jappix.md new file mode 100644 index 00000000..58dc2201 --- /dev/null +++ b/pages/02.applications/02.docs/jappix/app_jappix.md @@ -0,0 +1,12 @@ +--- +title: Jappix +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jappix' +--- + + + +Jappix is a web client for [XMPP](/XMPP). diff --git a/app_jirafeau_fr.md b/pages/02.applications/02.docs/jirafeau/app_jirafeau.fr.md similarity index 93% rename from app_jirafeau_fr.md rename to pages/02.applications/02.docs/jirafeau/app_jirafeau.fr.md index 2d916315..4454aee7 100644 --- a/app_jirafeau_fr.md +++ b/pages/02.applications/02.docs/jirafeau/app_jirafeau.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/jirafeau_logo.jpg" width="80px" alt="logo de Jirafeau"> Jirafeau +--- +title: Jirafeau +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jirafeau' +--- + + [](https://install-app.yunohost.org/?app=jirafeau) [](https://dash.yunohost.org/appci/app/jirafeau) diff --git a/app_jirafeau.md b/pages/02.applications/02.docs/jirafeau/app_jirafeau.md similarity index 84% rename from app_jirafeau.md rename to pages/02.applications/02.docs/jirafeau/app_jirafeau.md index 856cb0b3..c92029f1 100644 --- a/app_jirafeau.md +++ b/pages/02.applications/02.docs/jirafeau/app_jirafeau.md @@ -1,4 +1,13 @@ -# <img src="/images/jirafeau_logo.jpg" width="80px" alt="Jirafeau's logo"> Jirafeau +--- +title: Jirafeau +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jirafeau' +--- + + [](https://install-app.yunohost.org/?app=jirafeau) [](https://dash.yunohost.org/appci/app/jirafeau) @@ -18,13 +27,13 @@ Jirafeau allows you to configure maximum retention times and maximum size per fi ### Changing the conditions of use of the service -The license text on the "Terms of Service" page, which is shipped with the default installation, is « based on the Open Source Initiative Terms of Service ». +The license text on the "Terms of Service" page, which is shipped with the default installation, is "based on the Open Source Initiative Terms of Service". To change this text simply copy the file `/lib/tos.original.txt`, rename it to `/lib/tos.local.txt` and adapt it to your own needs. If you update the installation, then only the `tos.original.txt` file may change eventually, not your `tos.local.txt` file. ### Administration -To 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/02.applications/02.docs/jitsi/app_jitsi.fr.md similarity index 86% rename from app_jitsi_fr.md rename to pages/02.applications/02.docs/jitsi/app_jitsi.fr.md index 4f943f13..fc54e095 100644 --- a/app_jitsi_fr.md +++ b/pages/02.applications/02.docs/jitsi/app_jitsi.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/jitsi_logo.svg" width="80px" alt="logo de jitsi"> Jitsi +--- +title: Jitsi +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jitsi' +--- + + [](https://install-app.yunohost.org/?app=jitsi) [](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 - Linux | | | | | | [Téléchargement](https://desktop.jitsi.org/Main/Download) | +| Jitsi Meet Desktop | Windows - macOS - GNU/Linux | | | | | | [Téléchargement](https://desktop.jitsi.org/Main/Download) | ## Liens utiles diff --git a/app_jitsi.md b/pages/02.applications/02.docs/jitsi/app_jitsi.md similarity index 82% rename from app_jitsi.md rename to pages/02.applications/02.docs/jitsi/app_jitsi.md index ad2917df..7138c908 100644 --- a/app_jitsi.md +++ b/pages/02.applications/02.docs/jitsi/app_jitsi.md @@ -1,4 +1,13 @@ -# <img src="/images/jitsi_logo.svg" width="80px" alt="Jitsi's logo"> Jitsi +--- +title: Jitsi +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jitsi' +--- + + [](https://install-app.yunohost.org/?app=jitsi) [](https://dash.yunohost.org/appci/app/jitsi) @@ -8,8 +17,7 @@ - [Customer Applications](#customer-applications) - [Useful links](#useful-links) -Jitsi Meet is an open source software (Apache) that offers high quality, secure and scalable video conferencing. Options for screen sharing, live chat, speech requests, as well as settings for -video quality are offered to facilitate group meetings. +Jitsi Meet is an open source software (Apache) that offers high quality, secure and scalable video conferencing. Options for screen sharing, live chat, speech requests, as well as settings for video quality are offered to facilitate group meetings. ## Limitations with YunoHost @@ -24,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 - Linux | | | | | | [Download](https://desktop.jitsi.org/Main/Download) | +| Jitsi Meet Desktop | Windows - macOS - GNU/Linux | | | | | | [Download](https://desktop.jitsi.org/Main/Download) | ## Useful links diff --git a/pages/02.applications/02.docs/jupyterlab/app_jupyterlab.fr.md b/pages/02.applications/02.docs/jupyterlab/app_jupyterlab.fr.md new file mode 100644 index 00000000..3ab1d675 --- /dev/null +++ b/pages/02.applications/02.docs/jupyterlab/app_jupyterlab.fr.md @@ -0,0 +1,25 @@ +--- +title: JupyterLab +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jupyterlab' +--- + + + +[](https://install-app.yunohost.org/?app=jupyterlab) [](https://dash.yunohost.org/appci/app/jupyterlab) + +### Index + +- [Liens utiles](#liens-utiles) + +JupyterLab est une interface utilisateur de nouvelle génération pour le projet Jupyter offrant tous les modules de Jupyter Notebook (interpréteur Python, terminal, éditeur de texte, navigateur de fichiers, etc.) dans une interface utilisateur flexible et puissante. JupyterLab remplacera à terme Jupyter Notebook. + +## Liens utiles + ++ Site web : [github.com - JupyterHub](https://github.com/jupyterhub/jupyterhub) ++ Documentation officielle : [jupyterlab.readthedocs.io](https://jupyterlab.readthedocs.io/en/stable/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/jupyterlab](https://github.com/YunoHost-Apps/jupyterlab_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/jupyterlab/issues](https://github.com/YunoHost-Apps/jupyterlab_ynh/issues) diff --git a/pages/02.applications/02.docs/jupyterlab/app_jupyterlab.md b/pages/02.applications/02.docs/jupyterlab/app_jupyterlab.md new file mode 100644 index 00000000..2df0a866 --- /dev/null +++ b/pages/02.applications/02.docs/jupyterlab/app_jupyterlab.md @@ -0,0 +1,25 @@ +--- +title: JupyterLab +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_jupyterlab' +--- + + + +[](https://install-app.yunohost.org/?app=jupyterlab) [](https://dash.yunohost.org/appci/app/jupyterlab) + +### Index + +- [Useful links](#useful-links) + +JupyterLab is the next-generation user interface for Project Jupyter offering all the familiar building blocks of the classic Jupyter Notebook (notebook, terminal, text editor, file browser, rich outputs, etc.) in a flexible and powerful user interface. JupyterLab will eventually replace the classic Jupyter Notebook. + +## Useful links + ++ Website: [github.com - JupyterHub](https://github.com/jupyterhub/jupyterhub) ++ Official documentation: [jupyterlab.readthedocs.io](https://jupyterlab.readthedocs.io/en/stable/) ++ Application software repository: [github.com - YunoHost-Apps/jupyterlab](https://github.com/YunoHost-Apps/jupyterlab_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/jupyterlab/issues](https://github.com/YunoHost-Apps/jupyterlab_ynh/issues) diff --git a/app_kanboard_fr.md b/pages/02.applications/02.docs/kanboard/app_kanboard.fr.md similarity index 90% rename from app_kanboard_fr.md rename to pages/02.applications/02.docs/kanboard/app_kanboard.fr.md index c34a02ba..de56ca41 100644 --- a/app_kanboard_fr.md +++ b/pages/02.applications/02.docs/kanboard/app_kanboard.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/kanboard_logo.png" height="80px" alt="logo de kanboard"> Kanboard +--- +title: Kanboard +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_kanboard' +--- + + [](https://install-app.yunohost.org/?app=kanboard) [](https://dash.yunohost.org/appci/app/kanboard) diff --git a/app_kanboard.md b/pages/02.applications/02.docs/kanboard/app_kanboard.md similarity index 76% rename from app_kanboard.md rename to pages/02.applications/02.docs/kanboard/app_kanboard.md index 29fb4432..00a2a1ea 100644 --- a/app_kanboard.md +++ b/pages/02.applications/02.docs/kanboard/app_kanboard.md @@ -1,4 +1,13 @@ -# <img src="/images/kanboard_logo.png" height="80px" alt="kanboard's logo"> Kanboard +--- +title: Kanboard +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_kanboard' +--- + + [](https://install-app.yunohost.org/?app=kanboard) [](https://dash.yunohost.org/appci/app/kanboard) @@ -6,8 +15,7 @@ - [Useful links](#useful-links) -Kanboard is a visual task manager that makes it easy to manage small projects in a collaborative way. The tool is particularly suitable for people who use the Kanban method. Kanboard can be seen as a -(Simplified) alternative to the proprietary Trello software. Kanboard is a minimalist software, it focuses only on the features that are really necessary. The user interface is simple and clear. +Kanboard is a visual task manager that makes it easy to manage small projects in a collaborative way. The tool is particularly suitable for people who use the Kanban method. Kanboard can be seen as a (Simplified) alternative to the proprietary Trello software. Kanboard is a minimalist software, it focuses only on the features that are really necessary. The user interface is simple and clear. The tool is designed to run on a small machine such as a Raspberry Pi or a Virtual Private Server (VPS). There are no external dependencies, drag and drop of tasks uses the new HTML5 APIs. diff --git a/app_keeweb_fr.md b/pages/02.applications/02.docs/keeweb/app_keeweb.fr.md similarity index 68% rename from app_keeweb_fr.md rename to pages/02.applications/02.docs/keeweb/app_keeweb.fr.md index e4721889..84da5c7f 100644 --- a/app_keeweb_fr.md +++ b/pages/02.applications/02.docs/keeweb/app_keeweb.fr.md @@ -1,14 +1,23 @@ -# <img src="/images/keeweb_logo.png" height="80px" alt="logo de keeweb"> Keeweb +--- +title: KeeWeb +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_keeweb' +--- -[](https://install-app.yunohost.org/?app=keeweb) [](https://dash.yunohost.org/appci/app/keeweb) + + +[](https://install-app.yunohost.org/?app=keeweb) [](https://dash.yunohost.org/appci/app/keeweb) ### Index - [Liens utiles](#liens-utiles) -Un gestionnaire web élégant et efficace pour gérer vos mots de passe à distance. -Le fichier contenant les mots de passe (.kdbx) peut vous suivre en local sur votre PC, sur une clef USB ou être stocké sur votre serveur en webdav. -Keeweb gère aussi des fichiers compatibles avec les autres gestionnaires de mots de passe comme [KeePass](http://keepass.info), [KeePassX](https://www.keepassx.org/) ou [KeepassXC](https://keepassxc.org/). +Un gestionnaire Web élégant et efficace pour gérer vos mots de passe à distance. +Le fichier contenant les mots de passe (.kdbx) peut vous suivre en local sur votre PC, sur une clef USB ou être stocké sur votre serveur en WebDAV. +KeeWeb gère aussi des fichiers compatibles avec les autres gestionnaires de mots de passe comme [KeePass](http://keepass.info), [KeePassX](https://www.keepassx.org/) ou [KeePassXC](https://keepassxc.org/). ## Liens utiles diff --git a/app_keeweb.md b/pages/02.applications/02.docs/keeweb/app_keeweb.md similarity index 68% rename from app_keeweb.md rename to pages/02.applications/02.docs/keeweb/app_keeweb.md index 3a4c0201..770f9c76 100644 --- a/app_keeweb.md +++ b/pages/02.applications/02.docs/keeweb/app_keeweb.md @@ -1,15 +1,23 @@ -# <img src="/images/keeweb_logo.png" height="80px" alt="keeweb's logo"> Keeweb +--- +title: KeeWeb +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_keeweb' +--- -[](https://install-app.yunohost.org/?app=keeweb) [](https://dash.yunohost.org/appci/app/keeweb) + + +[](https://install-app.yunohost.org/?app=keeweb) [](https://dash.yunohost.org/appci/app/keeweb) ### Index - [Useful links](#useful-links) An elegant and efficient web manager to manage your passwords remotely. -The file containing the passwords (.kdbx) can follow you locally on your PC, on a USB key or be stored on your server in webdav. -Keeweb also manages files compatible with other password managers such as [KeePass](http://keepass.info), [KeePassX](https://www.keepassx.org/) or [KeepassXC](https://keepassxc.org/). - +The file containing the passwords (.kdbx) can follow you locally on your PC, on a USB key or be stored on your server in WebDAV. +KeeWeb also manages files compatible with other password managers such as [KeePass](http://keepass.info), [KeePassX](https://www.keepassx.org/) or [KePassXC](https://keepassxc.org/). ## Useful links diff --git a/app_kresus_fr.md b/pages/02.applications/02.docs/kresus/app_kresus.fr.md similarity index 91% rename from app_kresus_fr.md rename to pages/02.applications/02.docs/kresus/app_kresus.fr.md index aceb6d77..a96680e8 100644 --- a/app_kresus_fr.md +++ b/pages/02.applications/02.docs/kresus/app_kresus.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/kresus_logo.png" height="80px" alt="logo de kresus"> Kresus +--- +title: Kresus +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_kresus' +--- + + [](https://install-app.yunohost.org/?app=kresus) [](https://dash.yunohost.org/appci/app/kresus) @@ -13,7 +22,6 @@ Kresus est un gestionnaire de finances personnelles gratuit et libre qui tourne * Définissez vos propres libellés, finis les « Chèque n°168468 » ! Triez vos opérations par catégories. Effectuez des recherches complexes sur vos transactions, par période, catégorie, montant ou date ! * Suivez l'évolution de vos mouvements d'argent en un clin d'œil avec les graphiques par catégorie, par période et par type de mouvement (dépenses ou rentrées d'argent). - ## Liens utiles + Site web : [kresus.org](https://kresus.org/) diff --git a/app_kresus.md b/pages/02.applications/02.docs/kresus/app_kresus.md similarity index 87% rename from app_kresus.md rename to pages/02.applications/02.docs/kresus/app_kresus.md index 6decb09b..3039fcfe 100644 --- a/app_kresus.md +++ b/pages/02.applications/02.docs/kresus/app_kresus.md @@ -1,4 +1,13 @@ -# <img src="/images/kresus_logo.png" height="80px" alt="kresus's logo"> Kresus +--- +title: Kresus +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_kresus' +--- + + [](https://install-app.yunohost.org/?app=kresus) [](https://dash.yunohost.org/appci/app/kresus) @@ -9,9 +18,9 @@ Kresus is a free and open source personal finance manager running on your server. It automatically and daily retrieves all your new banking transactions and allows you to categorize them, study them via graphs, and budgeting. -* Find all your accounts in one interface and view their balance at a glance ! +* Find all your accounts in one interface and view their balance at a glance! * Set up simple email alerts on transaction amounts and balances to notify you of important events in your accounts. -* Define your own wording, no more "n°168468"! Sort your transactions by category. Perform complex searches on your transactions, by period, category, amount or date ! +* Define your own wording, no more "n°168468"! Sort your transactions by category. Perform complex searches on your transactions, by period, category, amount or date! * Follow the evolution of your money movements at a glance with the graphs by category, by period and by type of movement (expenses or receipts of money). ## Useful links diff --git a/app_leed_fr.md b/pages/02.applications/02.docs/leed/app_leed.fr.md similarity index 83% rename from app_leed_fr.md rename to pages/02.applications/02.docs/leed/app_leed.fr.md index a26a65e6..5ac55db2 100644 --- a/app_leed_fr.md +++ b/pages/02.applications/02.docs/leed/app_leed.fr.md @@ -1,6 +1,15 @@ -# <img src="/images/leed_logo.png" height="80px" alt="logo de leed"> Leed +--- +title: Leed +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_leed' +--- -[](https://install-app.yunohost.org/?app=leed) [](https://dash.yunohost.org/appci/app/leed) + + +[](https://install-app.yunohost.org/?app=leed) [](https://dash.yunohost.org/appci/app/leed) ### Index diff --git a/app_leed.md b/pages/02.applications/02.docs/leed/app_leed.md similarity index 84% rename from app_leed.md rename to pages/02.applications/02.docs/leed/app_leed.md index 47941258..fa8214e9 100644 --- a/app_leed.md +++ b/pages/02.applications/02.docs/leed/app_leed.md @@ -1,4 +1,13 @@ -# <img src="/images/leed_logo.png" height="80px" alt="leed's logo"> Leed +--- +title: Leed +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_leed' +--- + + [](https://install-app.yunohost.org/?app=leed) [](https://dash.yunohost.org/appci/app/leed) @@ -7,8 +16,7 @@ - [Useful links](#useful-links) Leed (short for Light Feed) is a minimalist RSS/ATOM aggregator which offers fast RSS consultation and non-intrusive features. -This aggregator works with a system of automatic tasks in order to process the information transparently and display it as quickly as possible when you log in. - +This aggregator works with a system of automatic tasks in order to process the information transparently and display it as quickly as possible when you login. ## Useful links diff --git a/app_limesurvey_fr.md b/pages/02.applications/02.docs/limesurvey/app_limesurvey.fr.md similarity index 86% rename from app_limesurvey_fr.md rename to pages/02.applications/02.docs/limesurvey/app_limesurvey.fr.md index c7ab8f49..b07f0cd9 100644 --- a/app_limesurvey_fr.md +++ b/pages/02.applications/02.docs/limesurvey/app_limesurvey.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/limesurvey_logo.svg" height="80px" alt="logo de LimeSurvey"> LimeSurvey +--- +title: LimeSurvey +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_limesurvey' +--- + + [](https://install-app.yunohost.org/?app=limesurvey) [](https://dash.yunohost.org/appci/app/limesurvey) diff --git a/app_limesurvey.md b/pages/02.applications/02.docs/limesurvey/app_limesurvey.md similarity index 86% rename from app_limesurvey.md rename to pages/02.applications/02.docs/limesurvey/app_limesurvey.md index 4c4d0659..d23b67cc 100644 --- a/app_limesurvey.md +++ b/pages/02.applications/02.docs/limesurvey/app_limesurvey.md @@ -1,4 +1,13 @@ -# <img src="/images/limesurvey_logo.svg" height="80px" alt="LimeSurvey's logo"> LimeSurvey +--- +title: LimeSurvey +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_limesurvey' +--- + + [](https://install-app.yunohost.org/?app=limesurvey) [](https://dash.yunohost.org/appci/app/limesurvey) diff --git a/app_lstu_fr.md b/pages/02.applications/02.docs/lstu/app_lstu.fr.md similarity index 89% rename from app_lstu_fr.md rename to pages/02.applications/02.docs/lstu/app_lstu.fr.md index 249e785d..a717292f 100644 --- a/app_lstu_fr.md +++ b/pages/02.applications/02.docs/lstu/app_lstu.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/lstu_logo.svg" height="80px" alt="logo de lstu"> Lstu +--- +title: Lstu +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lstu' +--- + + [](https://install-app.yunohost.org/?app=lstu) [](https://dash.yunohost.org/appci/app/lstu) diff --git a/app_lstu.md b/pages/02.applications/02.docs/lstu/app_lstu.md similarity index 88% rename from app_lstu.md rename to pages/02.applications/02.docs/lstu/app_lstu.md index 9b3a98ce..c6e84bb4 100644 --- a/app_lstu.md +++ b/pages/02.applications/02.docs/lstu/app_lstu.md @@ -1,4 +1,13 @@ -# <img src="/images/lstu_logo.svg" height="80px" alt="lstu's logo"> Lstu +--- +title: Lstu +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lstu' +--- + + [](https://install-app.yunohost.org/?app=lstu) [](https://dash.yunohost.org/appci/app/lstu) diff --git a/app_lufi_fr.md b/pages/02.applications/02.docs/lufi/app_lufi.fr.md similarity index 89% rename from app_lufi_fr.md rename to pages/02.applications/02.docs/lufi/app_lufi.fr.md index b34a797a..2aa3bc8f 100644 --- a/app_lufi_fr.md +++ b/pages/02.applications/02.docs/lufi/app_lufi.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/lufi_logo.svg" width="80px" alt="logo de Lufi"> Lufi +--- +title: Lufi +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lufi' +--- + + [](https://install-app.yunohost.org/?app=lufi) [](https://dash.yunohost.org/appci/app/lufi) @@ -6,11 +15,9 @@ - [Liens utiles](#liens-utiles) - Lufi est un logiciel libre d’hébergement de fichiers. Les fichiers envoyés sur une instance de Lufi sont chiffrés avant l’envoi au serveur : l’administrateur du serveur ne peut pas voir le contenu de vos fichiers. L’administrateur ne peut voir que le nom du fichier, sa taille et son type mime (son type de fichier : vidéo, texte, etc.).[¹](#sources) - ## Liens utiles + Site web : [Framagit.org/luc/lufi](https://framagit.org/luc/lufi) diff --git a/app_lufi.md b/pages/02.applications/02.docs/lufi/app_lufi.md similarity index 88% rename from app_lufi.md rename to pages/02.applications/02.docs/lufi/app_lufi.md index 5df334b7..4e1a4d15 100644 --- a/app_lufi.md +++ b/pages/02.applications/02.docs/lufi/app_lufi.md @@ -1,4 +1,13 @@ -# <img src="/images/lufi_logo.svg" width="80px" alt="Lufi's logo"> Lufi +--- +title: Lufi +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lufi' +--- + + [](https://install-app.yunohost.org/?app=lufi) [](https://dash.yunohost.org/appci/app/lufi) @@ -9,7 +18,6 @@ Lufi is a free file hosting software. Files sent on an instance of Lufi are encrypted before being sent to the server: the server administrator cannot see the content of your files. The administrator can only see the file name, size and mime type (file type: video, text, etc.). - ## Useful links + Website: [Framagit.org/luc/lufi](https://framagit.org/luc/lufi) diff --git a/app_lutim_fr.md b/pages/02.applications/02.docs/lutim/app_lutim.fr.md similarity index 82% rename from app_lutim_fr.md rename to pages/02.applications/02.docs/lutim/app_lutim.fr.md index dbf0fff2..88c0f8bf 100644 --- a/app_lutim_fr.md +++ b/pages/02.applications/02.docs/lutim/app_lutim.fr.md @@ -1,6 +1,15 @@ -# <img src="/images/lutim_logo.png" height="80px" alt="logo de lutim"> Lutim +--- +title: Lutim +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lutim' +--- -[](https://install-app.yunohost.org/?app=lutim) [](https://dash.yunohost.org/appci/app/lutim) + + +[](https://install-app.yunohost.org/?app=lutim) [](https://dash.yunohost.org/appci/app/lutim) ### Index @@ -9,7 +18,6 @@ Lutim est un service gratuit et anonyme d’hébergement d’images. Il s’agit aussi du nom du logiciel (libre) qui fournit ce service. Les images déposées sur Lutim peuvent être stockées indéfiniment, ou s’effacer dès le premier affichage ou au bout du délai choisi parmi ceux proposés. - ## Liens utiles + Site web : [Framagit - lutim](https://framagit.org/fiat-tux/hat-softwares/lutim) diff --git a/app_lutim.md b/pages/02.applications/02.docs/lutim/app_lutim.md similarity index 81% rename from app_lutim.md rename to pages/02.applications/02.docs/lutim/app_lutim.md index ad10234b..0e762862 100644 --- a/app_lutim.md +++ b/pages/02.applications/02.docs/lutim/app_lutim.md @@ -1,6 +1,15 @@ -# <img src="/images/lutim_logo.png" height="80px" alt="Lutim's logo"> Lutim +--- +title: Lutim +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lutim' +--- -[](https://install-app.yunohost.org/?app=lutim) [](https://dash.yunohost.org/appci/app/lutim) + + +[](https://install-app.yunohost.org/?app=lutim) [](https://dash.yunohost.org/appci/app/lutim) ### Index @@ -9,7 +18,6 @@ Lutim is a free and anonymous image hosting service. It is also the name of the (free) software that provides this service. Images uploaded to Lutim can be stored indefinitely, or can be deleted on first viewing or after a period of time chosen from those offered. - ## Useful links + Website : [Framagit - lutim](https://framagit.org/fiat-tux/hat-softwares/lutim) diff --git a/pages/02.applications/02.docs/lychee/app_lychee.fr.md b/pages/02.applications/02.docs/lychee/app_lychee.fr.md new file mode 100644 index 00000000..9072ac27 --- /dev/null +++ b/pages/02.applications/02.docs/lychee/app_lychee.fr.md @@ -0,0 +1,26 @@ +--- +title: Lychee +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lychee' +--- + + + +[](https://install-app.yunohost.org/?app=lychee) [](https://dash.yunohost.org/appci/app/lychee) + +### Index + +- [Liens utiles](#liens-utiles) + +Lychee est un outil de gestion de photos gratuit, qui fonctionne sur votre serveur ou votre espace Web. L'installation est une question de secondes. Téléchargez, gérez et partagez des photos comme à partir d'une application native. Lychee est livré avec tout ce dont vous avez besoin et toutes vos photos sont stockées en toute sécurité. + +## Liens utiles + + + Site web : [lycheeorg.github.io](https://lycheeorg.github.io/) + + Site de démonstration : [lycheeorg.github.io/demo](https://lycheeorg.github.io/demo/) + + Documentation officielle : [lycheeorg.github.io/docs](https://lycheeorg.github.io/docs/) + + Dépôt logiciel de Lychee : [github.com - YunoHost-Apps/lychee](https://github.com/YunoHost-Apps/lychee_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/lychee/issues](https://github.com/YunoHost-Apps/lychee_ynh/issues) diff --git a/pages/02.applications/02.docs/lychee/app_lychee.md b/pages/02.applications/02.docs/lychee/app_lychee.md new file mode 100644 index 00000000..f71cdf39 --- /dev/null +++ b/pages/02.applications/02.docs/lychee/app_lychee.md @@ -0,0 +1,26 @@ +--- +title: Lychee +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_lychee' +--- + + + +[](https://install-app.yunohost.org/?app=lychee) [](https://dash.yunohost.org/appci/app/lychee) + +### Index + +- [Useful Links](#useful-links) + +Lychee is a free photo-management tool, which runs on your server or web-space. Installing is a matter of seconds. Upload, manage and share photos like from a native application. Lychee comes with everything you need and all your photos are stored securely. + +## Useful links + + + Website: [lycheeorg.github.io](https://lycheeorg.github.io/) + + Demonstration: [lycheeorg.github.io/demo](https://lycheeorg.github.io/demo/) + + Official documentation: [lycheeorg.github.io/docs](https://lycheeorg.github.io/docs/) + + Application software repository: [github.com - YunoHost-Apps/lychee](https://github.com/YunoHost-Apps/lychee_ynh) + + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/lychee/issues](https://github.com/YunoHost-Apps/lychee_ynh/issues) diff --git a/app_mailman_fr.md b/pages/02.applications/02.docs/mailman/app_mailman.fr.md similarity index 78% rename from app_mailman_fr.md rename to pages/02.applications/02.docs/mailman/app_mailman.fr.md index 4bddcba4..f0d78a52 100644 --- a/app_mailman_fr.md +++ b/pages/02.applications/02.docs/mailman/app_mailman.fr.md @@ -1,6 +1,15 @@ -# <img src="/images/mailman_logo.svg" height="80px" alt="logo de mailman"> Mailman +--- +title: Mailman +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mailman' +--- -[](https://install-app.yunohost.org/?app=mailman) [](https://dash.yunohost.org/appci/app/mailman) + + +[](https://install-app.yunohost.org/?app=mailman) [](https://dash.yunohost.org/appci/app/mailman) ### Index diff --git a/app_mailman.md b/pages/02.applications/02.docs/mailman/app_mailman.md similarity index 77% rename from app_mailman.md rename to pages/02.applications/02.docs/mailman/app_mailman.md index 7f98099c..05ad19a5 100644 --- a/app_mailman.md +++ b/pages/02.applications/02.docs/mailman/app_mailman.md @@ -1,6 +1,15 @@ -# <img src="/images/mailman_logo.svg" height="80px" alt="mailman's logo"> Mailman +--- +title: Mailman +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mailman' +--- -[](https://install-app.yunohost.org/?app=mailman) [](https://dash.yunohost.org/appci/app/mailman) + + +[](https://install-app.yunohost.org/?app=mailman) [](https://dash.yunohost.org/appci/app/mailman) ### Index @@ -8,7 +17,6 @@ Mailman is a (lightweight) free software for managing electronic mail discussion and e-newsletter lists. - ## Useful links + Website : [www.list.org](http://www.list.org/) diff --git a/pages/02.applications/02.docs/mantis/app_mantis.fr.md b/pages/02.applications/02.docs/mantis/app_mantis.fr.md new file mode 100644 index 00000000..d11d8927 --- /dev/null +++ b/pages/02.applications/02.docs/mantis/app_mantis.fr.md @@ -0,0 +1,25 @@ +--- +title: Mantis +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mantis' +--- + + + +[](https://install-app.yunohost.org/?app=mantis) [](https://dash.yunohost.org/appci/app/mantis) + +### Index + +- [Liens utiles](#liens-utiles) + +Mantis Bug Tracker est un système de suivi des bogues gratuit et open source. L'utilisation la plus courante de MantisBT est de suivre les bogues logiciels. Cependant, MantisBT est souvent configuré par les utilisateurs pour servir de système de suivi des problèmes plus générique et d'outil de gestion de projet. + +## Liens utiles + ++ Site web : [mantisbt.org](https://mantisbt.org) ++ Documentation officielle : [mantisbt.org/documentation.php](https://mantisbt.org/documentation.php) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mantis](https://github.com/YunoHost-Apps/mantis_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/mantis/issues](https://github.com/YunoHost-Apps/mantis_ynh/issues) diff --git a/pages/02.applications/02.docs/mantis/app_mantis.md b/pages/02.applications/02.docs/mantis/app_mantis.md new file mode 100644 index 00000000..29989711 --- /dev/null +++ b/pages/02.applications/02.docs/mantis/app_mantis.md @@ -0,0 +1,25 @@ +--- +title: Mantis +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mantis' +--- + + + +[](https://install-app.yunohost.org/?app=mantis) [](https://dash.yunohost.org/appci/app/mantis) + +### Index + +- [Useful links](#useful-links) + +Mantis Bug Tracker is a free and open source, web-based bug tracking system. The most common use of MantisBT is to track software defects. However, MantisBT is often configured by users to serve as a more generic issue tracking system and project management tool. + +## Useful links + ++ Website: [mantisbt.org](https://mantisbt.org) ++ Official documentation: [mantisbt.org/documentation.php](https://mantisbt.org/documentation.php) ++ Application software repository: [github.com - YunoHost-Apps/mantis](https://github.com/YunoHost-Apps/mantis_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mantis/issues](https://github.com/YunoHost-Apps/mantis_ynh/issues) diff --git a/pages/02.applications/02.docs/matomo/app_matomo.fr.md b/pages/02.applications/02.docs/matomo/app_matomo.fr.md new file mode 100644 index 00000000..c8944fc8 --- /dev/null +++ b/pages/02.applications/02.docs/matomo/app_matomo.fr.md @@ -0,0 +1,25 @@ +--- +title: Matomo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_matomo' +--- + + + +[](https://install-app.yunohost.org/?app=matomo) [](https://dash.yunohost.org/appci/app/matomo) + +### Index + +- [Liens utiles](#liens-utiles) + +Matomo est une plateforme d'analyse open source de mesure de statistiques Web. Il s'agit d'un logiciel PHP MySQL complet que vous téléchargez et installez sur votre propre serveur Web. À la fin du processus d'installation de cinq minutes, vous recevrez un code JavaScript. Copiez et collez simplement cette balise sur les sites Web que vous souhaitez suivre et accédez à vos rapports d'analyse en temps réel. + +## Liens utiles + ++ Site web : [matomo.org](https://matomo.org) ++ Documentation officielle : [https://matomo.org/docs](https://matomo.org/docs) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/matomo](https://github.com/YunoHost-Apps/matomo_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/matomo/issues](https://github.com/YunoHost-Apps/matomo_ynh/issues) diff --git a/pages/02.applications/02.docs/matomo/app_matomo.md b/pages/02.applications/02.docs/matomo/app_matomo.md new file mode 100644 index 00000000..77ed88b6 --- /dev/null +++ b/pages/02.applications/02.docs/matomo/app_matomo.md @@ -0,0 +1,25 @@ +--- +title: Matomo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_matomo' +--- + + + +[](https://install-app.yunohost.org/?app=matomo) [](https://dash.yunohost.org/appci/app/matomo) + +### Index + +- [Useful links](#useful-links) + +Matomo is the leading Free/Libre open analytics platform. It is a full-featured PHP MySQL software program that you download and install on your own webserver. At the end of the five-minute installation process, you will be given a JavaScript code. Simply copy and paste this tag on websites you wish to track and access your analytics reports in real-time. + +## Useful links + ++ Website: [matomo.org](https://matomo.org) ++ Official documentation: [https://matomo.org/docs](https://matomo.org/docs) ++ Application software repository: [github.com - YunoHost-Apps/matomo](https://github.com/YunoHost-Apps/matomo_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/matomo/issues](https://github.com/YunoHost-Apps/matomo_ynh/issues) diff --git a/app_mattermost_fr.md b/pages/02.applications/02.docs/mattermost/app_mattermost.fr.md similarity index 84% rename from app_mattermost_fr.md rename to pages/02.applications/02.docs/mattermost/app_mattermost.fr.md index d76ed55e..8d8ec5fd 100644 --- a/app_mattermost_fr.md +++ b/pages/02.applications/02.docs/mattermost/app_mattermost.fr.md @@ -1,14 +1,23 @@ -# <img src="/images/mattermost_logo.svg" height="80px" alt="logo de mattermost"> Mattermost +--- +title: Mattermost +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mattermost' +--- -[](https://install-app.yunohost.org/?app=mattermost) [](https://dash.yunohost.org/appci/app/mattermost) + + +[](https://install-app.yunohost.org/?app=mattermost) [](https://dash.yunohost.org/appci/app/mattermost) ### Index - [Liens utiles](#liens-utiles) Mattermost est un logiciel décentralisé de communication en équipe. Pour les adeptes de Slack, l'importation de vos données est possible, permettant de faire la transition vers cet outil libre en douceur. -La plate-forme permet : +La plate-forme permet : * Le partage de messages et de fichiers sur différents appareils : PC, ordiphones et tablettes grâce aux applications dédiées. * La mise en forme des messages se fait avec le langage Markdown. * L'archivage continu et la recherche instantanée, et la prise en charge les notifications et les intégrations avec vos outils existants. diff --git a/app_mattermost.md b/pages/02.applications/02.docs/mattermost/app_mattermost.md similarity index 82% rename from app_mattermost.md rename to pages/02.applications/02.docs/mattermost/app_mattermost.md index 9f54e4b6..fc44e7bb 100644 --- a/app_mattermost.md +++ b/pages/02.applications/02.docs/mattermost/app_mattermost.md @@ -1,14 +1,23 @@ -# <img src="/images/mattermost_logo.svg" height="80px" alt="mattermost's logo"> Mattermost +--- +title: Mattermost +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mattermost' +--- -[](https://install-app.yunohost.org/?app=mattermost) [](https://dash.yunohost.org/appci/app/mattermost) + + +[](https://install-app.yunohost.org/?app=mattermost) [](https://dash.yunohost.org/appci/app/mattermost) ### Index - [Useful links](#useful-links) Mattermost is a decentralized team communication software. For Slack enthusiasts, importing your data is possible, allowing a smooth transition to this free tool. -The platform allows : +The platform allows: * The sharing of messages and files on different devices: PCs, computers and tablets thanks to dedicated applications. * The formatting of messages is done with the Markdown language. * Continuous archiving and instant search, and support for notifications and integrations with your existing tools. diff --git a/pages/02.applications/02.docs/mediawiki/app_mediawiki.fr.md b/pages/02.applications/02.docs/mediawiki/app_mediawiki.fr.md new file mode 100644 index 00000000..134d45fc --- /dev/null +++ b/pages/02.applications/02.docs/mediawiki/app_mediawiki.fr.md @@ -0,0 +1,26 @@ +--- +title: MediaWiki +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mediawiki' +--- + + + +[](https://install-app.yunohost.org/?app=mediawiki) [](https://dash.yunohost.org/appci/app/mediawiki) + +### Index + +- [Liens utiles](#liens-utiles) + +MediaWiki est un ensemble wiki à base de logiciels libres Open source, développé à l’origine pour Wikipédia. + +## Liens utiles + ++ Site Web : [mediawiki.org] https://www.mediawiki.org/ ++ Documentation officielle : https://www.mediawiki.org/wiki ++ Support Desk : https://www.mediawiki.org/wiki/Project:Support_desk ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mediawiki](https://github.com/YunoHost-Apps/mediawiki_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/mediawiki/issues](https://github.com/YunoHost-Apps/mediawiki_ynh/issues) diff --git a/pages/02.applications/02.docs/mediawiki/app_mediawiki.md b/pages/02.applications/02.docs/mediawiki/app_mediawiki.md new file mode 100644 index 00000000..d5a8136b --- /dev/null +++ b/pages/02.applications/02.docs/mediawiki/app_mediawiki.md @@ -0,0 +1,26 @@ +--- +title: MediaWiki +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mediawiki' +--- + + + +[](https://install-app.yunohost.org/?app=mediawiki) [](https://dash.yunohost.org/appci/app/mediawiki) + +### Index + +- [Useful links](#useful-links) + +MediaWiki is a free and open source software wiki package written in PHP, originally for use on Wikipedia. + +## Useful links + ++ Website: [mediawiki.org] https://www.mediawiki.org/ ++ Official documentation: [mediawiki.org/wiki/] https://www.mediawiki.org/wiki/ ++ Support Desk: https://www.mediawiki.org/wiki/Project:Support_desk ++ Application software repository: [github.com - YunoHost-Apps/mediawiki](https://github.com/YunoHost-Apps/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) diff --git a/pages/02.applications/02.docs/mindmaps/app_mindmaps.fr.md b/pages/02.applications/02.docs/mindmaps/app_mindmaps.fr.md new file mode 100644 index 00000000..0596a976 --- /dev/null +++ b/pages/02.applications/02.docs/mindmaps/app_mindmaps.fr.md @@ -0,0 +1,26 @@ +--- +title: Mindmaps +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mindmaps' +--- + +[](https://install-app.yunohost.org/?app=mindmaps) [](https://dash.yunohost.org/appci/app/mindmaps) + +### Index + +- [Liens utiles](#useful-links) + +Mindmaps est une application de carte mentale basée sur HTML5. Il vous permet de créer des cartes mentales soignées dans le navigateur. + +Ce projet a commencé en 2011 comme une exploration de ce qu'il est possible de faire dans les navigateurs utilisant des API modernes. De nos jours, la plupart de ces choses sont assez courantes et la base de code est un peu dépassée. C'était bien avant React, ES6, webpack. Heck, il n'utilise même pas Backbone. + +Cependant, il n'y a aucune raison de changer quoi que ce soit et cela rend la base de code assez facile à utiliser. Il n'y a pas d'étape de compilation, pas de plugins babel, pas de frameworks. Juste une application JavaScript et un modèle très simple de modèle-vue-présentateur. + +## Liens utiles + ++ Site web : [www.mindmaps.app](https://www.mindmaps.app/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/mindmaps](https://github.com/YunoHost-Apps/mindmaps_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/mindmaps/issues](https://github.com/YunoHost-Apps/mindmaps_ynh/issues) diff --git a/pages/02.applications/02.docs/mindmaps/app_mindmaps.md b/pages/02.applications/02.docs/mindmaps/app_mindmaps.md new file mode 100644 index 00000000..bda0b507 --- /dev/null +++ b/pages/02.applications/02.docs/mindmaps/app_mindmaps.md @@ -0,0 +1,26 @@ +--- +title: Mindmaps +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mindmaps' +--- + +[](https://install-app.yunohost.org/?app=mindmaps) [](https://dash.yunohost.org/appci/app/mindmaps) + +### Index + +- [Useful links](#useful-links) + +Mindmaps is a HTML5 based mind mapping application. It lets you create neat looking mind maps in the browser. + +This project started in 2011 as an exploration into what's possible to do in browsers using modern APIs. Nowadays, most of this stuff is pretty common and the code base is a bit outdated. This was way before React, ES6, webpack. Heck, it doesn't even use Backbone. + +However, there is no reason to change any of that and it makes the code base quite easy to grok. There is no compilation step, no babel plugins, no frameworks. Just a JavaScript application and a very simple Model-View-Presenter pattern. + +## Useful links + ++ Website: [www.mindmaps.app](https://www.mindmaps.app/) ++ Application software repository: [github.com - YunoHost-Apps/mindmaps](https://github.com/YunoHost-Apps/mindmaps_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/mindmaps/issues](https://github.com/YunoHost-Apps/mindmaps_ynh/issues) diff --git a/app_minetest_fr.md b/pages/02.applications/02.docs/minetest/app_minetest.fr.md similarity index 88% rename from app_minetest_fr.md rename to pages/02.applications/02.docs/minetest/app_minetest.fr.md index 651b4572..27a1c2fc 100644 --- a/app_minetest_fr.md +++ b/pages/02.applications/02.docs/minetest/app_minetest.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/minetest_logo.svg" height="80px" alt="logo de minetest"> Minetest +--- +title: Minetest +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_minetest' +--- + + [](https://install-app.yunohost.org/?app=minetest) [](https://dash.yunohost.org/appci/app/minetest) diff --git a/app_minetest.md b/pages/02.applications/02.docs/minetest/app_minetest.md similarity index 88% rename from app_minetest.md rename to pages/02.applications/02.docs/minetest/app_minetest.md index 5335f897..f2fd500a 100644 --- a/app_minetest.md +++ b/pages/02.applications/02.docs/minetest/app_minetest.md @@ -1,4 +1,13 @@ -# <img src="/images/minetest_logo.svg" height="80px" alt="minetest's logo"> Minetest +--- +title: Minetest +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_minetest' +--- + + [](https://install-app.yunohost.org/?app=minetest) [](https://dash.yunohost.org/appci/app/minetest) diff --git a/app_minidlna_fr.md b/pages/02.applications/02.docs/minidlna/app_minidlna.fr.md similarity index 76% rename from app_minidlna_fr.md rename to pages/02.applications/02.docs/minidlna/app_minidlna.fr.md index af60ec47..a0465bde 100644 --- a/app_minidlna_fr.md +++ b/pages/02.applications/02.docs/minidlna/app_minidlna.fr.md @@ -1,32 +1,41 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Minidlna (Ready Media) +--- +title: MiniDLNA (Ready Media) +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_minidlna' +--- -[](https://install-app.yunohost.org/?app=minidlna) [](https://dash.yunohost.org/appci/app/minidlna) + + +[](https://install-app.yunohost.org/?app=minidlna) [](https://dash.yunohost.org/appci/app/minidlna) ### Index - [Configuration](#configuration) - [Liens utiles](#liens-utiles) -Minidlna (renommé Ready Media) est un serveur [dlna](https://fr.wikipedia.org/wiki/Digital_Living_Network_Alliance) ultra léger. +MiniDLNA (renommé Ready Media) est un serveur [DLNA](https://fr.wikipedia.org/wiki/Digital_Living_Network_Alliance) ultra léger. Il permet de partager très simplement les fichiers multimédias avec tous les appareils compatibles présents sur le réseau local. -Minidlna ne dispose pas d’une interface graphique, mais ne nécessite pas de configuration particulière. +MiniDLNA ne dispose pas d’une interface graphique, mais ne nécessite pas de configuration particulière. ## Configuration ### Quels fichiers multimédias sont partagés ? -Minidlna partage le dossier `/home/yunohost.multimedia/share`, qui est commun à chaque utilisateur dans le dossier `/home/$USER/Multimedia/Share`. -[Plus d’informations sur les dossiers multimédias](https://github.com/maniackcrudelis/yunohost.multimedia). +MiniDLNA partage le dossier `/home/yunohost.multimedia/share`, qui est commun à chaque utilisateur dans le dossier `/home/$USER/Multimedia/Share`. +[Plus d’informations sur les dossiers multimédias](https://github.com/YunoHost-Apps/yunohost.multimedia). -~~Si [transmission](https://github.com/Kloadut/transmission_ynh) est installé, les médias téléchargés seront disponibles en dlna.~~ +~~Si [Transmission](https://github.com/Kloadut/transmission_ynh) est installé, les médias téléchargés seront disponibles en DLNA.~~ -### Comment consulter et lire les fichiers multimédias partagés par minidlna ? +### Comment consulter et lire les fichiers multimédias partagés par MiniDLNA ? Pour voir et lire les fichiers multimédias, il suffit de disposer d’un client compatible DLNA/UPNP. La majorité des décodeurs TV fournis par les FAI sont compatibles DLNA, il suffit de chercher les sources de médias externes. C’est le cas également pour les consoles de jeux dernière génération connectée à internet. -Certaines TV et lecteur blu-ray sont également compatibles DLNA. +Certaines TV et lecteur Blu-ray sont également compatibles DLNA. Dans tous les cas, il suffit en général d’aller chercher les sources externes, USB etc., pour trouver le serveur DLNA, affiché sous le nom **YunoHost DLNA**. diff --git a/app_minidlna.md b/pages/02.applications/02.docs/minidlna/app_minidlna.md similarity index 62% rename from app_minidlna.md rename to pages/02.applications/02.docs/minidlna/app_minidlna.md index 6fb6c37d..c5850be7 100644 --- a/app_minidlna.md +++ b/pages/02.applications/02.docs/minidlna/app_minidlna.md @@ -1,34 +1,43 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Minidlna (Ready Meadia) +--- +title: MiniDLNA (Ready Media) +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_minidlna' +--- -[](https://install-app.yunohost.org/?app=minidlna) [](https://dash.yunohost.org/appci/app/minidlna) + + +[](https://install-app.yunohost.org/?app=minidlna) [](https://dash.yunohost.org/appci/app/minidlna) ### Index - [Configuration](#configuration) - [Useful links](#useful-links) -Minidlna (Ready Media) is a lightweight [dlna](https://fr.wikipedia.org/wiki/Digital_Living_Network_Alliance) server. +MiniDLNA (Ready Media) is a lightweight [DLNA](https://fr.wikipedia.org/wiki/Digital_Living_Network_Alliance) server. It allows to easily share multimedia files with any compatible devices present on the LAN. -Minidlna does not have a graphical interface, but it does not require any special configuration. +MiniDLNA does not have a graphical interface, but it does not require any special configuration. ## Configuration ### What multimedia files are shared? -Minidlna sharing the folder `/home/yunohost.multimedia/share`, which is common to each user in `/home/$USER/Multimedia/Share`. -[More information about multimedia files here.](Https://github.com/maniackcrudelis/yunohost.multimedia) +MiniDLNA (renamed Ready Media) sharing the folder `/home/yunohost.multimedia/share`, which is common to each user in `/home/$USER/Multimedia/Share`. +[More information about multimedia files here.](https://github.com/YunoHost-Apps/yunohost.multimedia) -~~If [transmission](https://github.com/Kloadut/transmission_ynh) is installed, the downloaded media will be available in dlna.~~ +~~If [Transmission](https://github.com/Kloadut/transmission_ynh) is installed, the downloaded media will be available in DLNA.~~ -### How to view and play media files shared by Minidlna ? +### How to view and play media files shared by MiniDLNA? To view and play media files, all you need is a compatible client DLNA/UPNP. The majority of set-top boxes provided by ISPs are DLNA compatible, simply look for sources of external media. This is also true for the latest generation game consoles connected to internet. -Some TV and blu-ray player is also DLNA compatible. +Some TV and Blu-ray player is also DLNA compatible. -In any case, it is generally sufficient to seek external sources, USB etc, to find the DLNA server, displayed under the name **YunoHost DLNA**. +In any case, it is generally sufficient to seek external sources, USB etc., to find the DLNA server, displayed under the name **YunoHost DLNA**. There are a multitude of DLNA client for all platforms, including the following [not exhaustive list](https://en.wikipedia.org/wiki/List_of_UPnP_AV_media_servers_and_clients#UPnP_AV_clients). In general, a DLNA client does not require any special configuration to access the media sharing. @@ -39,4 +48,3 @@ In general, a DLNA client does not require any special configuration to access t + Official : [help.ubuntu.com/community/MiniDLNA](https://help.ubuntu.com/community/MiniDLNA) + Application software repository: [github.com - YunoHost-Apps/minidlna](https://github.com/YunoHost-Apps/minidlna_ynh) + Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/minidlna/issues](https://github.com/YunoHost-Apps/minidlna_ynh/issues) - diff --git a/app_mobilizon_fr.md b/pages/02.applications/02.docs/mobilizon/app_mobilizon.fr.md similarity index 90% rename from app_mobilizon_fr.md rename to pages/02.applications/02.docs/mobilizon/app_mobilizon.fr.md index 747b0011..2c313219 100644 --- a/app_mobilizon_fr.md +++ b/pages/02.applications/02.docs/mobilizon/app_mobilizon.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/mobilizon_logo.svg" height="80px" alt="logo de mobilizon"> Mobilizon +--- +title: Mobilizon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mobilizon' +--- + + [](https://install-app.yunohost.org/?app=mobilizon) [](https://dash.yunohost.org/appci/app/mobilizon) diff --git a/app_mobilizon.md b/pages/02.applications/02.docs/mobilizon/app_mobilizon.md similarity index 87% rename from app_mobilizon.md rename to pages/02.applications/02.docs/mobilizon/app_mobilizon.md index 02299cce..7391971a 100644 --- a/app_mobilizon.md +++ b/pages/02.applications/02.docs/mobilizon/app_mobilizon.md @@ -1,4 +1,13 @@ -# <img src="/images/mobilizon_logo.svg" height="80px" alt="mobilizon's logo"> Mobilizon +--- +title: Mobilizon +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mobilizon' +--- + + [](https://install-app.yunohost.org/?app=mobilizon) [](https://dash.yunohost.org/appci/app/mobilizon) diff --git a/app_moodle_fr.md b/pages/02.applications/02.docs/moodle/app_moodle.fr.md similarity index 86% rename from app_moodle_fr.md rename to pages/02.applications/02.docs/moodle/app_moodle.fr.md index 29011b16..b0dd2025 100644 --- a/app_moodle_fr.md +++ b/pages/02.applications/02.docs/moodle/app_moodle.fr.md @@ -1,6 +1,15 @@ -# <img src="/images/moodle_logo.svg" height="80px" alt="logo de moodle"> Moodle +--- +title: Moodle +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_moodle' +--- -[](https://install-app.yunohost.org/?app=moodle) [](https://dash.yunohost.org/appci/app/moodle) + + +[](https://install-app.yunohost.org/?app=moodle) [](https://dash.yunohost.org/appci/app/moodle) ### Index diff --git a/app_moodle.md b/pages/02.applications/02.docs/moodle/app_moodle.md similarity index 84% rename from app_moodle.md rename to pages/02.applications/02.docs/moodle/app_moodle.md index 9b6f8eab..f2af924b 100644 --- a/app_moodle.md +++ b/pages/02.applications/02.docs/moodle/app_moodle.md @@ -1,14 +1,22 @@ -# <img src="/images/moodle_logo.svg" height="80px" alt="moodle's logo"> Moodle +--- +title: Moodle +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_moodle' +--- -[](https://install-app.yunohost.org/?app=moodle) [](https://dash.yunohost.org/appci/app/moodle) + + +[](https://install-app.yunohost.org/?app=moodle) [](https://dash.yunohost.org/appci/app/moodle) ### Index - [Useful links](#useful-links) Moodle is a Learning Management System (LMS) for creating, sharing and animating learning and training resources. -At least it can be used to share course materials (in different formats), but above all, it allows the creation of rich learning activities focusing on interactions between users (learners like -trainers). +At least it can be used to share course materials (in different formats), but above all, it allows the creation of rich learning activities focusing on interactions between users (learners like trainers). It integrates about ten activities (quiz, lesson, forum, wiki, homework, survey, self-assessment workshop between peers...) and resource formats (pdf, text, audio-visual, image, scorm...) by default that can be enriched by modules complementary (in particular to propose specific activities in certain areas). diff --git a/app_mumbleserver_fr.md b/pages/02.applications/02.docs/mumbleserver/app_mumbleserver.fr.md similarity index 71% rename from app_mumbleserver_fr.md rename to pages/02.applications/02.docs/mumbleserver/app_mumbleserver.fr.md index e0b9ba6f..6e8b836a 100644 --- a/app_mumbleserver_fr.md +++ b/pages/02.applications/02.docs/mumbleserver/app_mumbleserver.fr.md @@ -1,13 +1,22 @@ -# <img src="/images/mumbleserver_logo.svg" height="80px" alt="logo de mumbleserver"> Mumbleserver +--- +title: Mumble server +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mumbleserver' +--- -[](https://install-app.yunohost.org/?app=mumbleserver) [](https://dash.yunohost.org/appci/app/mumbleserver) + + +[](https://install-app.yunohost.org/?app=mumbleserver) [](https://dash.yunohost.org/appci/app/mumbleserver) ### Index - [Liens utiles](#liens-utiles) Mumble est un logiciel de voix sur IP efficace et stable qui vous permet de créer des salons audio pour plusieurs interlocuteurs. C'est un logiciel de VoIP qui fait bénéficier à ses utilisateurs d'une latence très faible tout en fournissant une qualité de son excellente. Mumble intègre également une surcouche visuelle qui se positionne discrètement au dessus des autres fenêtres afin d'avoir une vision sur l'activation des micros des gens avec qui vous parlez. -Ici, c'est la partir serveur 'Murmur' que vous installerez sur votre instance de Yunohost. +Ici, c'est la partir serveur 'Murmur' que vous installerez sur votre instance de YunoHost. Il est nécessaire d'utiliser un [client Mumble](https://wiki.mumble.info/wiki/3rd_Party_Applications) pour l'utiliser pour chaque interlocuteur·rice. diff --git a/app_mumbleserver.md b/pages/02.applications/02.docs/mumbleserver/app_mumbleserver.md similarity index 55% rename from app_mumbleserver.md rename to pages/02.applications/02.docs/mumbleserver/app_mumbleserver.md index b751cc28..88b7b165 100644 --- a/app_mumbleserver.md +++ b/pages/02.applications/02.docs/mumbleserver/app_mumbleserver.md @@ -1,14 +1,22 @@ -# <img src="/images/mumbleserver_logo.svg" height="80px" alt="mumbleserver's logo"> Mumbleserver +--- +title: Mumble server +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_mumbleserver' +--- -[](https://install-app.yunohost.org/?app=mumbleserver) [](https://dash.yunohost.org/appci/app/mumbleserver) + + +[](https://install-app.yunohost.org/?app=mumbleserver) [](https://dash.yunohost.org/appci/app/mumbleserver) ### Index - [Useful links](#useful-links) -Mumble is an efficient and stable Voice over IP software that allows you to create audio rooms for multiple people. It is a VoIP software that allows its users to benefit from very low latency and very high quality. -providing excellent sound quality. Mumble also incorporates a visual overlay that discreetly positions itself above the other windows to provide a view of the microphone activation of the people you are talking to. -Here is the 'Murmur' server that you will install on your instance of Yunohost. +Mumble is an efficient and stable Voice over IP software that allows you to create audio rooms for multiple people. It is a VoIP software that allows its users to benefit from very low latency and very high quality while providing excellent sound quality. Mumble also incorporates a visual overlay that discreetly positions itself above the other windows to provide a view of the microphone activation of the people you are talking to. +Here is the 'Murmur' server that you will install on your instance of YunoHost. It is necessary to use a [Mumble client](https://wiki.mumble.info/wiki/3rd_Party_Applications) to use it for each interlocutor. diff --git a/app_my_webapp_fr.md b/pages/02.applications/02.docs/my_webapp/app_my_webapp.fr.md similarity index 84% rename from app_my_webapp_fr.md rename to pages/02.applications/02.docs/my_webapp/app_my_webapp.fr.md index b454209e..105fc99e 100644 --- a/app_my_webapp_fr.md +++ b/pages/02.applications/02.docs/my_webapp/app_my_webapp.fr.md @@ -1,6 +1,13 @@ -# Documentation My_webapp +--- +title: My_webapp +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_my_webapp' +--- -En complément du Readme.md de l'application, voici des astuces utiles. +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. diff --git a/app_my_webapp.md b/pages/02.applications/02.docs/my_webapp/app_my_webapp.md similarity index 77% rename from app_my_webapp.md rename to pages/02.applications/02.docs/my_webapp/app_my_webapp.md index 9a626334..bc875cef 100644 --- a/app_my_webapp.md +++ b/pages/02.applications/02.docs/my_webapp/app_my_webapp.md @@ -1,6 +1,13 @@ -# Documentation My_webapp +--- +title: My_webapp +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_my_webapp' +--- -In addition to the application's Readme.md, here are some useful tips. +In addition to the application's [Readme.md](https://github.com/YunoHost-Apps/my_webapp_ynh/blob/testing/README.md), here are some useful tips. ## Automatic update of the site content @@ -9,7 +16,7 @@ The application creates a new user with limited rights: it can connect (with a p 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 +- Enable public key connection, in `/etc/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 diff --git a/pages/02.applications/02.docs/navidrome/app_navidrome.fr.md b/pages/02.applications/02.docs/navidrome/app_navidrome.fr.md new file mode 100644 index 00000000..b5fc1a01 --- /dev/null +++ b/pages/02.applications/02.docs/navidrome/app_navidrome.fr.md @@ -0,0 +1,24 @@ +--- +title: Navidrome +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_navidrome' +--- + + + +[](https://install-app.yunohost.org/?app=navidrome) [](https://dash.yunohost.org/appci/app/navidrome) + +### Index + +- [Liens utiles](#liens-utiles) + +Navidrome est un serveur et un streamer de collection de musique en ligne open source. Il vous donne la liberté d'écouter votre collection de musique à partir de n'importe quel navigateur ou appareil mobile. + +## Liens utiles + ++ Site web : [navidrome.org (en)](https://www.navidrome.org/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/navidrome](https://github.com/YunoHost-Apps/navidrome_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/navidrome/issues](https://github.com/YunoHost-Apps/navidrome_ynh/issues) diff --git a/pages/02.applications/02.docs/navidrome/app_navidrome.md b/pages/02.applications/02.docs/navidrome/app_navidrome.md new file mode 100644 index 00000000..888511b6 --- /dev/null +++ b/pages/02.applications/02.docs/navidrome/app_navidrome.md @@ -0,0 +1,24 @@ +--- +title: Navidrome +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_navidrome' +--- + + + +[](https://install-app.yunohost.org/?app=navidrome) [](https://dash.yunohost.org/appci/app/navidrome) + +### Index + +- [Useful links](#useful-links) + +Navidrome is an open source web-based music collection server and streamer. It gives you freedom to listen to your music collection from any browser or mobile device. + +## Useful links + ++ Website: [navidrome.org](https://www.navidrome.org/) ++ Application software repository: [github.com - YunoHost-Apps/navidrome](https://github.com/YunoHost-Apps/navidrome_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/navidrome/issues](https://github.com/YunoHost-Apps/navidrome_ynh/issues) diff --git a/pages/02.applications/02.docs/netdata/app_netdata.fr.md b/pages/02.applications/02.docs/netdata/app_netdata.fr.md new file mode 100644 index 00000000..22138162 --- /dev/null +++ b/pages/02.applications/02.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. + +[](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 + +<p align="center"> +<img src="https://cloud.githubusercontent.com/assets/2662304/19168687/f6a567be-8c19-11e6-8561-ce8d589e8346.gif"/> +</p> + + - Des **tableaux de bord interactifs époustouflants**<br/> + souris et tactile, en 2 thèmes : sombre et clair. + + - **Rapide comme l'éclair**<br/> + 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é**<br/> + 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**<br/> + Des centaines d'alarmes, **prête à l'emploi**!<br/> + 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**<br/> + 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**<br/> + 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**<br/> + Des tableaux de bord personnalisés peuvent être construits en utilisant du HTML simple (pas de JavaScript nécessaire). + + - **Zéro configuration**<br/> + Détecte tout automatiquement, il peut collecter jusqu'à 5000 mesures par serveur dès son lancement. + + - **Zéro dépendance**<br/> + Il est même son propre serveur web, pour ses fichiers web statiques et son API web. + + - **Zéro maintenance**<br/> + Vous le lancez, il fait le reste. + + - **S'échelonne à l'infini**<br/> + En exigeant un minimum de ressources centrales. + + - **Plusieurs modes de fonctionnement**<br/> + 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**<br/> + 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). + + + +--- + +## 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)**<br/> + Utilisation, interruptions, softirqs, fréquence, total et par cœur, états du CPU. + +- **Mémoire**<br/> + RAM, utilisation de la mémoire du noyau et de la swap, KSM (Kernel Samepage Merging), NUMA. + +- **Disques**<br/> + Par disque : E/S, opérations, fille d'attente, utilisation, espace, RAID logiciel (md). + +  + +- **Interfaces réseau**<br/> + Par interface : bande passante, paquets, erreurs, rejets. + +  + +- **Réseautage IPv4**<br/> + 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**<br/> + 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**<br/> + Tels que les sémaphores et les réseaux de sémaphores. + +- **netfilter / iptables Linux firewall**<br/> + Connexions, événements de suivi des connexions, erreurs. + +- **Protection DDoS de Linux**<br/> + Mesures de la SYNPROXIE. + +- **latences fping**</br> + Pour toute quantité d'hôtes, en indiquant la latence, les paquets et la perte de paquets. + +  + + +- **Processus**<br/> + En fonctionnement, bloqué, bifurqué, actif. + +- **Entropie**<br/> + Le pool de nombres aléatoires, utilisé en cryptographie. + +- **Serveurs et clients de fichiers NFS**<br/> + NFS v2, v3, v4 : E/S, cache, lecture anticipée, appels RPC. + +- **Réseau QoS**<br/> + le seul outil qui permet de visualiser les classes du réseau `tc` en temps réel. + +  + +- **Groupes de contrôle de Linux**<br/> + Conteneurs : systemd, lxc, docker. + +- **Applications**<br/> + 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. + +  + +- **Utilisation des ressources par les utilisateurs et les groupes d'utilisateurs**<br/> + 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**<br/> + `mod-status` (v2.2, v2.4) et statistiques des journaux de cache, pour plusieurs serveurs. + +- **Serveurs web NGINX**<br/> + `stub-status`, pour plusieurs serveurs. + +- **Tomcat**<br/> + Accès, files, mémoire libre, volume. + +- **Fichiers journaux du serveur web**<br/> + Extrayant en temps réel les mesures de performance du serveur web et appliquant plusieurs contrôles de santé. + +- **Bases de données MySQL**<br/> + 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**<br/> + 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**<br/> + Plusieurs serveurs, chacun affichant : opérations, taux de réussite, mémoire, clés, clients, esclaves. + +- **mongodb**<br/> + Opérations, clients, transactions, curseurs, connexions, assertions, serrures, etc. + +- **bases de données memcached**<br/> + Plusieurs serveurs, chacun indiquant : bande passante, connexions, objets. + +- **elasticsearch**<br/> + 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**<br/> + 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**<br/> + Les requêtes, les zones, les protocoles, les types de requêtes, les transferts, etc. + +- **Serveurs de courrier électronique Postfix**<br/> + La file d'attente des messages (entrées, taille) + +- **Serveurs de courrier électronique Exim**<br/> + La file d'attente des messages (e-mails en file d'attente) + +- **Dovecot**<br/> + Serveurs POP3/IMAP + +- **ISC dhcpd**<br/> + L'utilisation des pools, les baux, etc. + +- **IPFS**<br/> + La bande passante, les pairs. + +- **Squid proxy servers**<br/> + Plusieurs serveurs, chacun indiquant : la bande passante et les requêtes des clients, la bande passante des serveurs et les requêtes. + +- **HAproxy**<br/> + La bande passante, les sessions, les backends, etc. + +- **varnish**<br/> + Les fils, les sessions, les succès, les objets, les backends, etc. + +- **OpenVPN**<br/> + Le statut par tunnel. + +- **Senseurs matériels**<br/> + Capteurs `lm_sensors` et `IPMI` : température, tension, ventilateurs, puissance, humidité. + +- **NUT et APC UPSes**<br/> + La charge, la tension de la batterie, la température, les mesures d'utilité, et les mesures de sortie. + +- **PHP-FPM**<br/> + Plusieurs instances, chacune rapportant les connexions, les demandes, et les performances. + +- **hddtemp**<br/> + La température des disques. + +- **smartd**<br/> + Les valeurs S.M.A.R.T. des disques. + +- **Dispositifs SNMP**<br/> + Peuvent également être surveillés (bien que vous devez les configurer). + +- **statsd**<br/> + [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/02.applications/02.docs/netdata/app_netdata.md similarity index 86% rename from app_netdata.md rename to pages/02.applications/02.docs/netdata/app_netdata.md index f3831882..0ad92f6b 100644 --- a/app_netdata.md +++ b/pages/02.applications/02.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._ - -[](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) -* phpfpm: follow [these recommandations](https://github.com/firehol/netdata/tree/master/python.d#phpfpm) - -## Features - -<p align="center"> -<img src="https://cloud.githubusercontent.com/assets/2662304/19168687/f6a567be-8c19-11e6-8561-ce8d589e8346.gif"/> -</p> - - - **Stunning interactive bootstrap dashboards**<br/> - mouse and touch friendly, in 2 themes: dark, light - - - **Amazingly fast**<br/> - responds to all queries in less than 0.5 ms per metric, - even on low-end hardware - - - **Highly efficient**<br/> - 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**<br/> - hundreds of alarms, **out of the box**!<br/> - 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**<br/> - 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**<br/> - it can run anywhere a Linux kernel runs (even IoT) - and its charts can be embedded on your web pages too - - - **Customizable**<br/> - custom dashboards can be built using simple HTML (no javascript necessary) - - - **Zero configuration**<br/> - auto-detects everything, it can collect up to 5000 metrics - per server out of the box - - - **Zero dependencies**<br/> - it is even its own web server, for its static web files and its web API - - - **Zero maintenance**<br/> - you just run it, it does the rest - - - **scales to infinity**<br/> - requiring minimal central resources - - - **several operating modes**<br/> - 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**<br/> - 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) - - - ---- - -## 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**<br/> - usage, interrupts, softirqs, frequency, total and per core, CPU states - -- **Memory**<br/> - RAM, swap and kernel memory usage, KSM (Kernel Samepage Merging), NUMA - -- **Disks**<br/> - per disk: I/O, operations, backlog, utilization, space, software RAID (md) - -  - -- **Network interfaces**<br/> - per interface: bandwidth, packets, errors, drops - -  - -- **IPv4 networking**<br/> - bandwidth, packets, errors, fragments, - tcp: connections, packets, errors, handshake, - udp: packets, errors, - broadcast: bandwidth, packets, - multicast: bandwidth, packets - -- **IPv6 networking**<br/> - bandwidth, packets, errors, fragments, ECT, - udp: packets, errors, - udplite: packets, errors, - broadcast: bandwidth, - multicast: bandwidth, packets, - icmp: messages, errors, echos, router, neighbor, MLDv2, group membership, - break down by type - -- **Interprocess Communication - IPC**<br/> - such as semaphores and semaphores arrays - -- **netfilter / iptables Linux firewall**<br/> - connections, connection tracker events, errors - -- **Linux DDoS protection**<br/> - SYNPROXY metrics - -- **fping** latencies</br> - for any number of hosts, showing latency, packets and packet loss - -  - - -- **Processes**<br/> - running, blocked, forks, active - -- **Entropy**<br/> - random numbers pool, using in cryptography - -- **NFS file servers and clients**<br/> - NFS v2, v3, v4: I/O, cache, read ahead, RPC calls - -- **Network QoS**<br/> - the only tool that visualizes network `tc` classes in realtime - -  - -- **Linux Control Groups**<br/> - containers: systemd, lxc, docker - -- **Applications**<br/> - by grouping the process tree and reporting CPU, memory, disk reads, - disk writes, swap, threads, pipes, sockets - per group - -  - -- **Users and User Groups resource usage**<br/> - 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**<br/> - `mod-status` (v2.2, v2.4) and cache log statistics, for multiple servers - -- **Nginx web servers**<br/> - `stub-status`, for multiple servers - -- **Tomcat**<br/> - accesses, threads, free memory, volume - -- **web server log files**<br/> - extracting in real-time, web server performance metrics and applying several health checks - -- **mySQL databases**<br/> - multiple servers, each showing: bandwidth, queries/s, handlers, locks, issues, - tmp operations, connections, binlog metrics, threads, innodb metrics, and more - -- **Postgres databases**<br/> - 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**<br/> - multiple servers, each showing: operations, hit rate, memory, keys, clients, slaves - -- **mongodb**<br/> - operations, clients, transactions, cursors, connections, asserts, locks, etc - -- **memcached databases**<br/> - multiple servers, each showing: bandwidth, connections, items - -- **elasticsearch**<br/> - search and index performance, latency, timings, cluster statistics, threads statistics, etc - -- **ISC Bind name servers**<br/> - multiple servers, each showing: clients, requests, queries, updates, failures and several per view metrics - -- **NSD name servers**<br/> - queries, zones, protocols, query types, transfers, etc. - -- **Postfix email servers**<br/> - message queue (entries, size) - -- **exim email servers**<br/> - message queue (emails queued) - -- **Dovecot** POP3/IMAP servers<br/> - -- **ISC dhcpd**<br/> - pools utilization, leases, etc. - -- **IPFS**<br/> - bandwidth, peers - -- **Squid proxy servers**<br/> - multiple servers, each showing: clients bandwidth and requests, servers bandwidth and requests - -- **HAproxy**<br/> - bandwidth, sessions, backends, etc - -- **varnish**<br/> - threads, sessions, hits, objects, backends, etc - -- **OpenVPN**<br/> - status per tunnel - -- **Hardware sensors**<br/> - `lm_sensors` and `IPMI`: temperature, voltage, fans, power, humidity - -- **NUT and APC UPSes**<br/> - load, charge, battery voltage, temperature, utility metrics, output metrics - -- **PHP-FPM**<br/> - multiple instances, each reporting connections, requests, performance - -- **hddtemp**<br/> - disk temperatures - -- **smartd**<br/> - disk S.M.A.R.T. values - -- **SNMP devices**<br/> - can be monitored too (although you will need to configure these) - -- **statsd**<br/> - [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._ + +[](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 + +<p align="center"> +<img src="https://cloud.githubusercontent.com/assets/2662304/19168687/f6a567be-8c19-11e6-8561-ce8d589e8346.gif"/> +</p> + + - **Stunning interactive bootstrap dashboards**<br/> + mouse and touch friendly, in 2 themes: dark, light + + - **Amazingly fast**<br/> + responds to all queries in less than 0.5 ms per metric, + even on low-end hardware + + - **Highly efficient**<br/> + 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**<br/> + hundreds of alarms, **out of the box**!<br/> + 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**<br/> + 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**<br/> + it can run anywhere a Linux kernel runs (even IoT) + and its charts can be embedded on your web pages too + + - **Customizable**<br/> + custom dashboards can be built using simple HTML (no JavaScript necessary) + + - **Zero configuration**<br/> + auto-detects everything, it can collect up to 5000 metrics + per server out of the box + + - **Zero dependencies**<br/> + it is even its own web server, for its static web files and its web API + + - **Zero maintenance**<br/> + you just run it, it does the rest + + - **scales to infinity**<br/> + requiring minimal central resources + + - **several operating modes**<br/> + 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**<br/> + 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) + + + +--- + +## 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**<br/> + usage, interrupts, softirqs, frequency, total and per core, CPU states + +- **Memory**<br/> + RAM, swap and kernel memory usage, KSM (Kernel Samepage Merging), NUMA + +- **Disks**<br/> + per disk: I/O, operations, backlog, utilization, space, software RAID (md) + +  + +- **Network interfaces**<br/> + per interface: bandwidth, packets, errors, drops + +  + +- **IPv4 networking**<br/> + bandwidth, packets, errors, fragments, + TCP: connections, packets, errors, handshake, + UDP: packets, errors, + broadcast: bandwidth, packets, + multicast: bandwidth, packets + +- **IPv6 networking**<br/> + 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**<br/> + such as semaphores and semaphores arrays + +- **netfilter / iptables Linux firewall**<br/> + connections, connection tracker events, errors + +- **Linux DDoS protection**<br/> + SYNPROXY metrics + +- **fping** latencies</br> + for any number of hosts, showing latency, packets and packet loss + +  + + +- **Processes**<br/> + running, blocked, forks, active + +- **Entropy**<br/> + random numbers pool, using in cryptography + +- **NFS file servers and clients**<br/> + NFS v2, v3, v4: I/O, cache, read ahead, RPC calls + +- **Network QoS**<br/> + the only tool that visualizes network `tc` classes in realtime + +  + +- **Linux Control Groups**<br/> + containers: systemd, lxc, docker + +- **Applications**<br/> + by grouping the process tree and reporting CPU, memory, disk reads, + disk writes, swap, threads, pipes, sockets - per group + +  + +- **Users and User Groups resource usage**<br/> + 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**<br/> + `mod-status` (v2.2, v2.4) and cache log statistics, for multiple servers + +- **NGINX web servers**<br/> + `stub-status`, for multiple servers + +- **Tomcat**<br/> + accesses, threads, free memory, volume + +- **web server log files**<br/> + extracting in real-time, web server performance metrics and applying several health checks + +- **mySQL databases**<br/> + multiple servers, each showing: bandwidth, queries/s, handlers, locks, issues, + tmp operations, connections, binlog metrics, threads, innodb metrics, and more + +- **Postgres databases**<br/> + 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**<br/> + multiple servers, each showing: operations, hit rate, memory, keys, clients, slaves + +- **mongodb**<br/> + operations, clients, transactions, cursors, connections, asserts, locks, etc. + +- **memcached databases**<br/> + multiple servers, each showing: bandwidth, connections, items + +- **elasticsearch**<br/> + search and index performance, latency, timings, cluster statistics, threads statistics, etc. + +- **ISC Bind name servers**<br/> + multiple servers, each showing: clients, requests, queries, updates, failures and several per view metrics + +- **NSD name servers**<br/> + queries, zones, protocols, query types, transfers, etc. + +- **Postfix email servers**<br/> + message queue (entries, size) + +- **exim email servers**<br/> + message queue (emails queued) + +- **Dovecot** POP3/IMAP servers<br/> + +- **ISC dhcpd**<br/> + pools utilization, leases, etc. + +- **IPFS**<br/> + bandwidth, peers + +- **Squid proxy servers**<br/> + multiple servers, each showing: clients bandwidth and requests, servers bandwidth and requests + +- **HAproxy**<br/> + bandwidth, sessions, backends, etc. + +- **varnish**<br/> + threads, sessions, hits, objects, backends, etc. + +- **OpenVPN**<br/> + status per tunnel + +- **Hardware sensors**<br/> + `lm_sensors` and `IPMI`: temperature, voltage, fans, power, humidity + +- **NUT and APC UPSes**<br/> + load, charge, battery voltage, temperature, utility metrics, output metrics + +- **PHP-FPM**<br/> + multiple instances, each reporting connections, requests, performance + +- **hddtemp**<br/> + disk temperatures + +- **smartd**<br/> + disk S.M.A.R.T. values + +- **SNMP devices**<br/> + can be monitored too (although you will need to configure these) + +- **statsd**<br/> + [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/app_nextcloud_fr.md b/pages/02.applications/02.docs/nextcloud/app_nextcloud.fr.md similarity index 76% rename from app_nextcloud_fr.md rename to pages/02.applications/02.docs/nextcloud/app_nextcloud.fr.md index e5dc9000..9dfe5f6a 100644 --- a/app_nextcloud_fr.md +++ b/pages/02.applications/02.docs/nextcloud/app_nextcloud.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/nextcloud_logo.png" alt="logo de Nextcloud"> Nextcloud +--- +title: Nextcloud +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nextcloud' +--- + + - [Découverte de l'environnement de Nextcloud](#EnvironnementNextcloud) - [Logiciels Clients pour mobile et ordinateur](#LogicielsClients) @@ -11,19 +20,19 @@ Nextcloud est un service d'hébergement de fichiers, de nombreuses applications ## Découverte de l'environnement de Nextcloud<a name="EnvironnementNextcloud" href=""></a> -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). +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<a name="LogicielsClients" href=""></a> -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) +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<a name="ManipulationsUtiles" href=""></a> ### Ajouter de l'espace à Nextcloud<a name="AjoutEspace" href=""></a> 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. +La solution II. permet de déplacer l'espace de stockage principal de Nextcloud. #### I. Ajouter un espace de stockage externe @@ -41,7 +50,7 @@ Enfin cliquer sur la coche pour valider le dossier. **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: +Commencez par éteindre le serveur web avec la commande : ```bash systemctl stop nginx ``` @@ -50,7 +59,7 @@ systemctl stop nginx **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. +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 @@ -77,7 +86,7 @@ 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): +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 @@ -88,13 +97,13 @@ 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: +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: +Cherchez la ligne : ```bash 'datadirectory' => '/home/yunohost.app/nextcloud/data', @@ -154,16 +163,48 @@ Les options à désactiver (Off) sont : - Rocket Loader - Email Obfuscation -Sauvegarder et nettoyer vos caches (Cloudflare, navigateur, ...) et le tour est joué. +Sauvegarder et nettoyer vos caches (Cloudflare, navigateur...) et le tour est joué. -## Applications Tiers<a name="AppsTiers" href=""></a> +## À propos de Keeweb - + [Calendrier](/app_nextcloud_calendar) - + [contact](/app_nextcloud_contact) - + [KeeWeb](/app_nextcloud_keeweb) - + [Carnet](/app_nextcloud_carnet) +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<a name="liensutiles" href=""></a> + Site officiel : [nextcloud.com (en)](https://nextcloud.com/) -+ Catalogue d'application pour nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com/) ++ Catalogue d'application pour Nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com/) diff --git a/app_nextcloud.md b/pages/02.applications/02.docs/nextcloud/app_nextcloud.md similarity index 70% rename from app_nextcloud.md rename to pages/02.applications/02.docs/nextcloud/app_nextcloud.md index 4bd63778..0bf741b9 100644 --- a/app_nextcloud.md +++ b/pages/02.applications/02.docs/nextcloud/app_nextcloud.md @@ -1,4 +1,13 @@ -# <img src="/images/nextcloud_logo.png" alt="logo de Nextcloud"> Nextcloud +--- +title: Nextcloud +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_nextcloud' +--- + + - [Discovering the Nextcloud environment](#EnvironmentNextcloud) - [Mobile and computer client software](#ClientSoftware) @@ -7,12 +16,12 @@ - [Third Party Applications](#AppsTiers) - [Useful links](#UsefulLinks) -Nextcloud is a file hosting service, many applications can be installed to offer it new features such as a calendar, a directory, notes and many others (you can find some applications in the [third-party applications](#AppsTiers) part but there are many others depending on your needs). +Nextcloud is a file hosting service, many applications can be installed to offer it new features such as a calendar, a directory, notes and many others (you can find some applications in the [third-party applications](#AppsTiers) part but there are many others depending on your needs). ## Discovering the Nextcloud environment <a name="EnvironmentNextcloud" href=""></a> 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 <a name="ClientSoftware" href=""></a> @@ -23,7 +32,7 @@ There are client software for all platforms. You can find them on the official n ### Add storage space <a name="AddSpace" href=""></a> Solution I. allows you to add a link to a local or remote folder. -Solution II. allows to move the main storage space of nextcloud. +Solution II. allows to move the main storage space of Nextcloud. #### I. Add an external storage space @@ -50,7 +59,7 @@ systemctl stop nginx **Case A: Blank storage, exclusive to Nextcloud** -For the moment only root can write to it in `/media/storage`, which means that nginx and nextcloud will not be able to use it. +For the moment only root can write to it in `/media/storage`, which means that NGINX and Nextcloud will not be able to use it. ```bash chown -R nextcloud:nextcloud /media/storage @@ -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: @@ -135,35 +144,64 @@ It's over now. Now test if everything is fine, try connecting to your Nextcloud ### Nextcloud and Cloudflare -If you use Cloudflare for your DNS, *which may be useful if you have a dynamic IP*, you will most likely have authentication problems with the Nextcloud application. On the Internet many people propose to create a rule that disables all options related to security and Cloudflare speed for the url pointing to your Nextcloud instance. Although it works, it is not the optimal solution. I propose, certainly to create a rule for the url pointing to your Nextcloud instance but to disable only 2 options. So here's how: +If you use Cloudflare for your DNS, *which may be useful if you have a dynamic IP*, you will most likely have authentication problems with the Nextcloud application. On the Internet many people propose to create a rule that disables all options related to security and Cloudflare speed for the URL pointing to your Nextcloud instance. Although it works, it is not the optimal solution. I propose, certainly to create a rule for the URL pointing to your Nextcloud instance but to disable only 2 options. So here's how: #### Cloudflare Page Rules In the Cloudflare control panel select your domain and find Page Rules -the url in your address bar will look like this: https://dash.cloudflare.com/*/domain.tld/page-rules +the URL in your address bar will look like this: https://dash.cloudflare.com/*/domain.tld/page-rules ##### Add a rule -The rule to be added must apply to the url of your Nextcloud instance either: +The rule to be added must apply to the URL of your Nextcloud instance either: - `https://nextcloud.domain.tld/**` if you use a subdomain -- `https://domain.tld/nextcloud/*`` if you have deployed Nextcloud in a directory +- `https://domain.tld/nextcloud/*` if you have deployed Nextcloud in a directory The options to disable (Off) are: - Rocket Loader - Email Obfuscation -Save and clean your caches (Cloudflare, browser,...) and that's it. +Save and clean your caches (Cloudflare, browser...) and that's it. -## Third Party Applications <a name="AppsTiers" href=""></a> +## 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 <a name="UsefulLinks" href=""></a> - - Official website : [nextcloud.com](https://nextcloud.com/) - - Application catalogue for nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com/) + - Official website: [nextcloud.com](https://nextcloud.com/) + - Application catalogue for Nextcloud: [apps.nextcloud.com](https://apps.nextcloud.com/) diff --git a/app_nextcloud_keeweb_fr.md b/pages/02.applications/02.docs/nextcloud_keeweb/app_nextcloud_keeweb.fr.md similarity index 84% rename from app_nextcloud_keeweb_fr.md rename to pages/02.applications/02.docs/nextcloud_keeweb/app_nextcloud_keeweb.fr.md index 9a99f973..68aa53bf 100644 --- a/app_nextcloud_keeweb_fr.md +++ b/pages/02.applications/02.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) @@ -29,10 +36,10 @@ Puis ajouter dans ce fichier le texte suivent : Enregistrer le fichier (**CTRL** + **o**) et quitter nano (**CTRL** + **c**). -Ensuite lancer un scan en tant que root: +Ensuite lancer un scan en tant que root : ```bash sudo -u nextcloud php /var/www/nextcloud/occ files:scan --all ``` -A présent, le problème est corrigé. +À présent, le problème est corrigé. diff --git a/app_nextcloud_keeweb.md b/pages/02.applications/02.docs/nextcloud_keeweb/app_nextcloud_keeweb.md similarity index 88% rename from app_nextcloud_keeweb.md rename to pages/02.applications/02.docs/nextcloud_keeweb/app_nextcloud_keeweb.md index a6039426..5d50ce28 100644 --- a/app_nextcloud_keeweb.md +++ b/pages/02.applications/02.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/app_noalyss_fr.md b/pages/02.applications/02.docs/noalyss/app_noalyss.fr.md similarity index 73% rename from app_noalyss_fr.md rename to pages/02.applications/02.docs/noalyss/app_noalyss.fr.md index eac70633..28ded15c 100644 --- a/app_noalyss_fr.md +++ b/pages/02.applications/02.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. @@ -6,8 +13,8 @@ Toute les infos sur ce logiciel sont disponible sur le [site du projet](http://w Pour apprendre à l'utiliser je vous invite à lire le [wiki du projet](http://www.noalyss.eu/?page_id=46&lang=fr_FR) -Le github du module Yunohost est [ici](https://github.com/YunoHost-Apps/noalyss_ynh) +Le github du module YunoHost est [ici](https://github.com/YunoHost-Apps/noalyss_ynh) Vous pouvez essayer le projet [ici](http://demo.noalyss.eu/index.php) avec les identifiants : demo /demo -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/02.applications/02.docs/noalyss/app_noalyss.md similarity index 67% rename from app_noalyss.md rename to pages/02.applications/02.docs/noalyss/app_noalyss.md index 8762bf51..8ae0d519 100644 --- a/app_noalyss.md +++ b/pages/02.applications/02.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. @@ -6,8 +13,8 @@ All the information on this software is available on the [project website](http: To learn how to use it I invite you to read the [project wiki](http://www.noalyss.eu/?page_id=46&lang=fr_FR_id=46&lang=en_EN) -The github of the Yunohost module is [here](https://github.com/YunoHost-Apps/noalyss_ynh_ynh) +The github of the YunoHost module is [here](https://github.com/YunoHost-Apps/noalyss_ynh_ynh) You can try the project [here](http://demo.noalyss.eu/index.php) with the identifiers: demo /demo -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/02.applications/02.docs/onlyoffice/app_onlyoffice.fr.md b/pages/02.applications/02.docs/onlyoffice/app_onlyoffice.fr.md new file mode 100644 index 00000000..3699f453 --- /dev/null +++ b/pages/02.applications/02.docs/onlyoffice/app_onlyoffice.fr.md @@ -0,0 +1,36 @@ +--- +title: OnlyOffice Server +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_onlyoffice' +--- + + + +[](https://install-app.yunohost.org/?app=onlyoffice) [](https://dash.yunohost.org/appci/app/onlyoffice) + +### Index + +- [Liens utiles](#liens-utiles) +- [Configurer OnlyOffice Server avec Nextcloud](#Configurer-OnlyOffice-Server-avec-Nextcloud) + +OnlyOffice Server est une suite bureautique collaborative en ligne gratuite comprenant des visualiseurs et des éditeurs de texte, de feuilles de calcul et de présentations, entièrement compatible avec les formats Office Open XML : .docx, .xlsx, .pptx et permettant l'édition collaborative en temps réel. + +## Configurer OnlyOffice Server avec Nextcloud + +1. Installer [OnlyOffice Server](https://github.com/YunoHost-Apps/onlyoffice_ynh) dans un domaine différent de celui utilisé par Nextcloud : `https://onlyoffice.domain.org` et `https://domain.org/nextcloud` (par exemple) + +2. Installer [ONLYOFFICE connector](https://apps.nextcloud.com/apps/onlyoffice) dans Nextcloud +- Connectez-vous à Nextcloud en tant qu'administrateur et installer ONLYOFFICE Connector : -> Applications -> installez ONLYOFFICE. (Le numéro de version d'ONLYOFFICE Connector n'a pas besoin d'être le même que celui d'OnlyOffice Server). +- Dans Paramètres (`https://domain.org/nextcloud/settings/admin/onlyoffice`), entrez l'adresse de votre serveur OnlyOffice Server (par exemple : `https://onlyoffice.domain.org`) + +OnlyOffice Server est maintenant connecté à Nextcloud. + +## Liens utiles + ++ Site web : [www.onlyoffice.com](https://www.onlyoffice.com/) ++ ONLYOFFICE connector : [Nextcloud ONLYOFFICE Connector](https://apps.nextcloud.com/apps/onlyoffice) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/onlyoffice_ynh](https://github.com/YunoHost-Apps/onlyoffice_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/onlyoffice/issues](https://github.com/YunoHost-Apps/onlyoffice_ynh/issues) diff --git a/pages/02.applications/02.docs/onlyoffice/app_onlyoffice.md b/pages/02.applications/02.docs/onlyoffice/app_onlyoffice.md new file mode 100644 index 00000000..c0f907cc --- /dev/null +++ b/pages/02.applications/02.docs/onlyoffice/app_onlyoffice.md @@ -0,0 +1,36 @@ +--- +title: OnlyOffice Server +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_onlyoffice' +--- + + + +[](https://install-app.yunohost.org/?app=onlyoffice) [](https://dash.yunohost.org/appci/app/onlyoffice) + +### Index + +- [Useful links](#useful-links) +- [Connect OnlyOffice Server with Nextcloud](#Connect-OnlyOffice-Server-with-Nextcloud) + +ONLYOFFICE Server is a free collaborative online office suite comprising viewers and editors for texts, spreadsheets and presentations, fully compatible with Office Open XML formats: .docx, .xlsx, .pptx and enabling collaborative editing in real time. + +## Connect OnlyOffice Server with Nextcloud + +1. Install [OnlyOffice Server](https://github.com/YunoHost-Apps/onlyoffice_ynh) in a different domain than the one used by Nextcloud: `https://onlyoffice.domain.org` and `https://domain.org/nextcloud` (for example) + +2. Install [ONLYOFFICE connector](https://apps.nextcloud.com/apps/onlyoffice) in Nextcloud +- Connect to Nextcloud as admin and install ONLYOFFICE Connector: -> Applications -> install ONLYOFFICE. (ONLYOFFICE Connector doesn't need to match your OnlyOffice Server version number). +- In Settings (`https://domain.org/nextcloud/settings/admin/onlyoffice`), enter your OnlyOffice Server address (for example: `https://onlyoffice.domain.org`) + +OnlyOffice Server is now connected to Nextcloud. + +## Useful links + ++ Website: [www.onlyoffice.com](https://www.onlyoffice.com/) ++ ONLYOFFICE connector: [Nextcloud ONLYOFFICE Connector](https://apps.nextcloud.com/apps/onlyoffice) ++ Application software repository: [github.com - YunoHost-Apps/onlyoffice_ynh](https://github.com/YunoHost-Apps/onlyoffice_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/onlyoffice/issues](https://github.com/YunoHost-Apps/onlyoffice_ynh/issues) diff --git a/app_opensondage_fr.md b/pages/02.applications/02.docs/opensondage/app_opensondage.fr.md similarity index 82% rename from app_opensondage_fr.md rename to pages/02.applications/02.docs/opensondage/app_opensondage.fr.md index 88eabf7c..0869c92a 100644 --- a/app_opensondage_fr.md +++ b/pages/02.applications/02.docs/opensondage/app_opensondage.fr.md @@ -1,6 +1,15 @@ -# <img src="/images/opensondage_logo.png" height="80px" alt="logo de opensondage"> Opensondage +--- +title: Opensondage +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_opensondage' +--- -[](https://install-app.yunohost.org/?app=opensondage) [](https://dash.yunohost.org/appci/app/opensondage) + + +[](https://install-app.yunohost.org/?app=opensondage) [](https://dash.yunohost.org/appci/app/opensondage) ### Index diff --git a/app_opensondage.md b/pages/02.applications/02.docs/opensondage/app_opensondage.md similarity index 82% rename from app_opensondage.md rename to pages/02.applications/02.docs/opensondage/app_opensondage.md index b27f63de..e3557f80 100644 --- a/app_opensondage.md +++ b/pages/02.applications/02.docs/opensondage/app_opensondage.md @@ -1,6 +1,15 @@ -# <img src="/images/opensondage_logo.png" height="80px" alt="opensondage's logo"> Opensondage +--- +title: Opensondage +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_opensondage' +--- -[](https://install-app.yunohost.org/?app=opensondage) [](https://dash.yunohost.org/appci/app/opensondage) + + +[](https://install-app.yunohost.org/?app=opensondage) [](https://dash.yunohost.org/appci/app/opensondage) ### Index diff --git a/app_osticket_fr.md b/pages/02.applications/02.docs/osticket/app_osticket.fr.md similarity index 86% rename from app_osticket_fr.md rename to pages/02.applications/02.docs/osticket/app_osticket.fr.md index 604ccefe..95ea9a4f 100644 --- a/app_osticket_fr.md +++ b/pages/02.applications/02.docs/osticket/app_osticket.fr.md @@ -1,6 +1,15 @@ -# <img src="/images/osticket_logo.svg" height="80px" alt="logo de osticket"> Osticket +--- +title: osTicket +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_osticket' +--- -[](https://install-app.yunohost.org/?app=osticket) [](https://dash.yunohost.org/appci/app/osticket) + + +[](https://install-app.yunohost.org/?app=osticket) [](https://dash.yunohost.org/appci/app/osticket) ### Index @@ -10,7 +19,6 @@ osTicket est un système de tickets d'assistance open source largement utilisé. osTicket est une alternative attrayante aux systèmes de support client plus coûteux et complexes ; simple, léger, fiable, open source, et facile à installer et à utiliser. Le meilleur, c'est qu'il est entièrement gratuit. - ## Liens utiles + Site web : [osticket.com](https://osticket.com/) diff --git a/app_osticket.md b/pages/02.applications/02.docs/osticket/app_osticket.md similarity index 84% rename from app_osticket.md rename to pages/02.applications/02.docs/osticket/app_osticket.md index 4633c23e..88863f67 100644 --- a/app_osticket.md +++ b/pages/02.applications/02.docs/osticket/app_osticket.md @@ -1,6 +1,15 @@ -# <img src="/images/osticket_logo.svg" height="80px" alt="osticket's logo"> Osticket +--- +title: osTicket +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_osticket' +--- -[](https://install-app.yunohost.org/?app=osticket) [](https://dash.yunohost.org/appci/app/osticket) + + +[](https://install-app.yunohost.org/?app=osticket) [](https://dash.yunohost.org/appci/app/osticket) ### Index diff --git a/app_peertube_fr.md b/pages/02.applications/02.docs/peertube/app_peertube.fr.md similarity index 84% rename from app_peertube_fr.md rename to pages/02.applications/02.docs/peertube/app_peertube.fr.md index 91102b19..fcf7ca6b 100644 --- a/app_peertube_fr.md +++ b/pages/02.applications/02.docs/peertube/app_peertube.fr.md @@ -1,6 +1,15 @@ -# <img src="/images/peertube_logo.svg" height="80px" alt="logo de peertube"> Peertube +--- +title: PeerTube +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_peertube' +--- -[](https://install-app.yunohost.org/?app=peertube) [](https://dash.yunohost.org/appci/app/peertube) + + +[](https://install-app.yunohost.org/?app=peertube) [](https://dash.yunohost.org/appci/app/peertube) ### Index x diff --git a/app_peertube.md b/pages/02.applications/02.docs/peertube/app_peertube.md similarity index 82% rename from app_peertube.md rename to pages/02.applications/02.docs/peertube/app_peertube.md index 8b0956c4..7c32126e 100644 --- a/app_peertube.md +++ b/pages/02.applications/02.docs/peertube/app_peertube.md @@ -1,6 +1,15 @@ -# <img src="/images/peertube_logo.svg" height="80px" alt="peertube's logo"> Peertube +--- +title: PeerTube +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_peertube' +--- -[](https://install-app.yunohost.org/?app=peertube) [](https://dash.yunohost.org/appci/app/peertube) + + +[](https://install-app.yunohost.org/?app=peertube) [](https://dash.yunohost.org/appci/app/peertube) ### Index diff --git a/app_phpmyadmin_fr.md b/pages/02.applications/02.docs/phpmyadmin/app_phpmyadmin.fr.md similarity index 83% rename from app_phpmyadmin_fr.md rename to pages/02.applications/02.docs/phpmyadmin/app_phpmyadmin.fr.md index 26f089c6..52301afb 100644 --- a/app_phpmyadmin_fr.md +++ b/pages/02.applications/02.docs/phpmyadmin/app_phpmyadmin.fr.md @@ -1,6 +1,15 @@ -# <img src="/images/phpmyadmin_logo.svg" height="80px" alt="logo de phpmyadmin"> phpMyAdmin +--- +title: phpMyAdmin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpmyadmin' +--- -[](https://install-app.yunohost.org/?app=phpmyadmin) [](https://dash.yunohost.org/appci/app/phpmyadmin) + + +[](https://install-app.yunohost.org/?app=phpmyadmin) [](https://dash.yunohost.org/appci/app/phpmyadmin) ### Index diff --git a/app_phpmyadmin.md b/pages/02.applications/02.docs/phpmyadmin/app_phpmyadmin.md similarity index 71% rename from app_phpmyadmin.md rename to pages/02.applications/02.docs/phpmyadmin/app_phpmyadmin.md index 2cf22b9e..fff12f83 100644 --- a/app_phpmyadmin.md +++ b/pages/02.applications/02.docs/phpmyadmin/app_phpmyadmin.md @@ -1,12 +1,21 @@ -# <img src="/images/phpmyadmin_logo.svg" height="80px" alt="phpmyadmin's logo"> phpMyAdmin +--- +title: phpMyAdmin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpmyadmin' +--- -[](https://install-app.yunohost.org/?app=phpmyadmin) [](https://dash.yunohost.org/appci/app/phpmyadmin) + + +[](https://install-app.yunohost.org/?app=phpmyadmin) [](https://dash.yunohost.org/appci/app/phpmyadmin) ### Index - [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/02.applications/02.docs/phpsysinfo/app_phpsysinfo.fr.md similarity index 66% rename from app_phpsysinfo_fr.md rename to pages/02.applications/02.docs/phpsysinfo/app_phpsysinfo.fr.md index 152b363e..92aa48c3 100644 --- a/app_phpsysinfo_fr.md +++ b/pages/02.applications/02.docs/phpsysinfo/app_phpsysinfo.fr.md @@ -1,10 +1,19 @@ -# <img src="/images/phpsysinfo_logo.png" height="80px" alt="logo de phpsysinfo"> Phpsysinfo +--- +title: phpSysInfo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpsysinfo' +--- -[](https://install-app.yunohost.org/?app=phpsysinfo) [](https://dash.yunohost.org/appci/app/phpsysinfo) + + +[](https://install-app.yunohost.org/?app=phpsysinfo) [](https://dash.yunohost.org/appci/app/phpsysinfo) ### Index -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/02.applications/02.docs/phpsysinfo/app_phpsysinfo.md similarity index 67% rename from app_phpsysinfo.md rename to pages/02.applications/02.docs/phpsysinfo/app_phpsysinfo.md index 1254f208..bce139c9 100644 --- a/app_phpsysinfo.md +++ b/pages/02.applications/02.docs/phpsysinfo/app_phpsysinfo.md @@ -1,12 +1,21 @@ -# <img src="/images/phpsysinfo_logo.png" height="80px" alt="phpsysinfo's logo"> Phpsysinfo +--- +title: phpSysInfo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_phpsysinfo' +--- -[](https://install-app.yunohost.org/?app=phpsysinfo) [](https://dash.yunohost.org/appci/app/phpsysinfo) + + +[](https://install-app.yunohost.org/?app=phpsysinfo) [](https://dash.yunohost.org/appci/app/phpsysinfo) ### Index - [Useful links](#useful-links) -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/02.applications/02.docs/pihole/app_pihole.fr.md similarity index 93% rename from app_pihole_fr.md rename to pages/02.applications/02.docs/pihole/app_pihole.fr.md index 263cd1e1..d7150f78 100644 --- a/app_pihole_fr.md +++ b/pages/02.applications/02.docs/pihole/app_pihole.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/pihole_logo.png" alt="logo de Pi-hole"> Pi-hole +--- +title: Pi-hole +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pihole' +--- + + [](https://install-app.yunohost.org/?app=pihole)[](https://dash.yunohost.org/appci/app/pihole) @@ -8,7 +17,7 @@ - [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 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 @@ -69,4 +78,5 @@ sudo ifconfig eth0 0.0.0.0 && sudo dhclient eth0 + Site web : [pi-hole.net (en)](https://pi-hole.net) + Documentation officielle : [docs.pi-hole.net (en)](https://docs.pi-hole.net/) + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/pihole](https://github.com/YunoHost-Apps/pihole_ynh) - + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/pihole/issues](https://github.com/YunoHost-Apps/pihole_ynh/issues) \ No newline at end of file + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/pihole/issues](https://github.com/YunoHost-Apps/pihole_ynh/issues) + diff --git a/app_pihole.md b/pages/02.applications/02.docs/pihole/app_pihole.md similarity index 94% rename from app_pihole.md rename to pages/02.applications/02.docs/pihole/app_pihole.md index 3366a39b..6138b73a 100644 --- a/app_pihole.md +++ b/pages/02.applications/02.docs/pihole/app_pihole.md @@ -1,4 +1,13 @@ -# <img src="/images/pihole_logo.png" width="80px" alt="Pi-hole's logo"> Pi-hole +--- +title: Pi-hole +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pihole' +--- + + [](https://install-app.yunohost.org/?app=pihole) [](https://dash.yunohost.org/appci/app/pihole) @@ -10,7 +19,7 @@ - [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 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 diff --git a/app_piwigo_fr.md b/pages/02.applications/02.docs/piwigo/app_piwigo.fr.md similarity index 50% rename from app_piwigo_fr.md rename to pages/02.applications/02.docs/piwigo/app_piwigo.fr.md index c3077375..9927dcdb 100644 --- a/app_piwigo_fr.md +++ b/pages/02.applications/02.docs/piwigo/app_piwigo.fr.md @@ -1,37 +1,50 @@ -# <img src="/images/piwigo_logo.png" width="80px" alt="logo de Piwigo"> Piwigo +--- +title: Piwigo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_piwigo' +--- + + [](https://install-app.yunohost.org/?app=piwigo) [](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 : +* une intégration avec le système de gestion des utilisateurs et le SSO de YunoHost : * installation privée : limitée aux utilisateurs de YunoHost * installation publique : * SSO pour les utilisateurs YunoHost * permet de gérer l'accès à d'autres utilisateurs, et mode invité possible * de permettre à un utilisateur d'être administrateur (réglage lors de l'installation) - + +## 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 : [ (Dépôt logiciel de l'application :) + 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/02.applications/02.docs/piwigo/app_piwigo.md b/pages/02.applications/02.docs/piwigo/app_piwigo.md new file mode 100644 index 00000000..8e5ca324 --- /dev/null +++ b/pages/02.applications/02.docs/piwigo/app_piwigo.md @@ -0,0 +1,50 @@ +--- +title: Piwigo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_piwigo' +--- + + + +[](https://install-app.yunohost.org/?app=piwigo) [](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. + + + +## 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/app_pleroma_fr.md b/pages/02.applications/02.docs/pleroma/app_pleroma.fr.md similarity index 63% rename from app_pleroma_fr.md rename to pages/02.applications/02.docs/pleroma/app_pleroma.fr.md index 44a4cdb1..2b09e298 100644 --- a/app_pleroma_fr.md +++ b/pages/02.applications/02.docs/pleroma/app_pleroma.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/pleroma_logo.png" alt="logo de Pleroma"> Pleroma +--- +title: Pleroma +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pleroma' +--- + + - [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 -<img src="/images/capture_globale.png" alt="Capture écran accueil de Pleroma"> + 1. Barre de menu - + <img src="/images/capture_menu_gauche.png" alt="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*. - + <img src="/images/capture_menu_droite.png" alt="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 : - + <img src="/images/capture_menu_droite_chercher_utilisateur.png" alt="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*) - + <img src="/images/capture_menu_droite_preferences.png" alt="Capture bouton préférences"> Permet d'accéder aux paramétres d'affichages de votre session. + +  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*. + +  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 : + +  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*) + +  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). - + <img src="/images/capture_menu_droite_deconnexion.png" alt="Capture Déconnexion"> Permet de se déconnecter de l'instance. Si vous n'êtes pas sur votre ordinateur personnel pensez-y ! + +  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 -<img src="/images/capture_espace_connexion.png" alt="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. + 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/02.applications/02.docs/pleroma/app_pleroma.md b/pages/02.applications/02.docs/pleroma/app_pleroma.md new file mode 100644 index 00000000..5885a7b2 --- /dev/null +++ b/pages/02.applications/02.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/02.applications/02.docs/plume/app_plume.fr.md similarity index 83% rename from app_plume_fr.md rename to pages/02.applications/02.docs/plume/app_plume.fr.md index 529349bc..01671ae0 100644 --- a/app_plume_fr.md +++ b/pages/02.applications/02.docs/plume/app_plume.fr.md @@ -1,6 +1,15 @@ -# <img src="/images/plume_logo.svg" height="80px" alt="logo de plume"> Plume +--- +title: Plume +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_plume' +--- -[](https://install-app.yunohost.org/?app=plume) [](https://dash.yunohost.org/appci/app/plume) + + +[](https://install-app.yunohost.org/?app=plume) [](https://dash.yunohost.org/appci/app/plume) ### Index diff --git a/app_plume.md b/pages/02.applications/02.docs/plume/app_plume.md similarity index 82% rename from app_plume.md rename to pages/02.applications/02.docs/plume/app_plume.md index 9ee70baf..7dd1aa11 100644 --- a/app_plume.md +++ b/pages/02.applications/02.docs/plume/app_plume.md @@ -1,6 +1,15 @@ -# <img src="/images/plume_logo.svg" height="80px" alt="plume's logo"> Plume +--- +title: Plume +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_plume' +--- -[](https://install-app.yunohost.org/?app=plume) [](https://dash.yunohost.org/appci/app/plume) + + +[](https://install-app.yunohost.org/?app=plume) [](https://dash.yunohost.org/appci/app/plume) ### Index diff --git a/app_pluxml_fr.md b/pages/02.applications/02.docs/pluxml/app_pluxml.fr.md similarity index 72% rename from app_pluxml_fr.md rename to pages/02.applications/02.docs/pluxml/app_pluxml.fr.md index 4cd94e10..569d0e48 100644 --- a/app_pluxml_fr.md +++ b/pages/02.applications/02.docs/pluxml/app_pluxml.fr.md @@ -1,12 +1,19 @@ -# PluXml +--- +title: PluXml +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pluxml' +--- - + PluXml est un moteur de blog/CMS stockant ces données en XML et ne nécessitant pas de base de données SQL. ## Aperçu - + ## Plugins et thèmes @@ -20,4 +27,4 @@ Pour sauvegarder votre blog, il est nécessaire de réaliser une copie du dossie PluXml : https://www.pluxml.org/ Documentation : https://wiki.pluxml.org/ -Forum : https://forum.pluxml.org/ \ No newline at end of file +Forum : https://forum.pluxml.org/ diff --git a/app_pluxml.md b/pages/02.applications/02.docs/pluxml/app_pluxml.md similarity index 57% rename from app_pluxml.md rename to pages/02.applications/02.docs/pluxml/app_pluxml.md index 66bc1056..4fe7d8fb 100644 --- a/app_pluxml.md +++ b/pages/02.applications/02.docs/pluxml/app_pluxml.md @@ -1,16 +1,23 @@ -# PluXml +--- +title: PluXml +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_pluxml' +--- - + PluXml is a blog/CMS storing data in XML and not in a SQL database. ## Overview - + ## Plugins and themes -Plugins and themes should respectively be installed in the following folders : `/var/www/pluxml/plugins`, `/var/www/pluxml/themes`. +Plugins and themes should respectively be installed in the following folders: `/var/www/pluxml/plugins`, `/var/www/pluxml/themes`. ## Backup @@ -20,4 +27,4 @@ To restore your blog, you should keep a copy of the folder `/var/www/pluxml/data PluXml : https://www.pluxml.org/ Documentation : https://wiki.pluxml.org/ -Forum : https://forum.pluxml.org/ \ No newline at end of file +Forum : https://forum.pluxml.org/ diff --git a/pages/02.applications/02.docs/privatebin/app_privatebin.fr.md b/pages/02.applications/02.docs/privatebin/app_privatebin.fr.md new file mode 100644 index 00000000..d385ae73 --- /dev/null +++ b/pages/02.applications/02.docs/privatebin/app_privatebin.fr.md @@ -0,0 +1,26 @@ +--- +title: PrivateBin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_privatebin' +--- + + + +[](https://install-app.yunohost.org/?app=privatebin) [](https://dash.yunohost.org/appci/app/privatebin) + +### Index + +- [Liens utiles](#liens-utiles) + +PrivateBin est un service web permettant de stocker temporairement et de partager du texte simple de manière chiffrée, sans stockage lisible sur le serveur. La clef de chiffrement/déchiffrement n'est pas stockée sur le serveur mais dans l'URL transmise. Ainsi vous pouvez partager des informations sensibles (mots de passe, codes d'accès, et même une discussion) de manière confidentielle en communiquant à vos interlocuteurs l'adresse spécifique de votre contenu. De plus ce contenu a une valeur limitée dans le temps et est détruit passé un délai personnalisable. + +## Liens utiles + ++ Site web : [privatebin.info](https://privatebin.info/) ++ Documentation officielle : [github.com/PrivateBin/PrivateBin/wiki](https://github.com/PrivateBin/PrivateBin/wiki) ++ Démonstration : [Démo](https://privatebin.net/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/privatebin](https://github.com/YunoHost-Apps/privatebin_ynh) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com -YunoHost-Apps/privatebin/issues](https://github.com/YunoHost-Apps/privatebin_ynh/issues) diff --git a/pages/02.applications/02.docs/privatebin/app_privatebin.md b/pages/02.applications/02.docs/privatebin/app_privatebin.md new file mode 100644 index 00000000..5d585cf4 --- /dev/null +++ b/pages/02.applications/02.docs/privatebin/app_privatebin.md @@ -0,0 +1,26 @@ +--- +title: PrivateBin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_privatebin' +--- + + + +[](https://install-app.yunohost.org/?app=privatebin) [](https://dash.yunohost.org/appci/app/privatebin) + +### Index + +- [Useful links](#useful-links) + +PrivateBin is a web service for temporarily storing and sharing plain text in encrypted form without readable storage on the server. The encryption/decryption key is not stored on the server but in the transmitted URL. Thus you can share sensitive information (passwords, access codes, and even a discussion) in a confidential way by communicating to your interlocutors the specific address of your content. Moreover this content has a limited value in time and is destroyed after a customizable delay. + +## Useful links + ++ Website : [privatebin.info](https://privatebin.info/) ++ Official documentation : [github.com/PrivateBin/PrivateBin/wiki](https://github.com/PrivateBin/PrivateBin/wiki) ++ Demonstration : [Demo](https://privatebin.net/) ++ Application software repository : [github.com - YunoHost-Apps/privatebin](https://github.com/YunoHost-Apps/privatebin_ynh) ++ Fix a bug or an improvement by creating a ticket (issue) : [github.com - YunoHost-Apps/privatebin/issues](https://github.com/YunoHost-Apps/privatebin_ynh/issues) diff --git a/app_radicale_fr.md b/pages/02.applications/02.docs/radicale/app_radicale.fr.md similarity index 92% rename from app_radicale_fr.md rename to pages/02.applications/02.docs/radicale/app_radicale.fr.md index 27650239..6dfd034a 100644 --- a/app_radicale_fr.md +++ b/pages/02.applications/02.docs/radicale/app_radicale.fr.md @@ -1,4 +1,11 @@ -# 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. @@ -19,7 +26,7 @@ Pour connecter un autre client au serveur radicale, il faut renseigner ces adres - 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. +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. @@ -50,7 +57,7 @@ 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. +Pour valider les modifications apportées au fichier */etc/radicale/rights*, radicale doit être rechargé via le service uWSGI. ```bash sudo service uwsgi restart ``` @@ -72,7 +79,7 @@ Dans les deux cas, le partage ne fonctionnera qu’en utilisant l’adresse comp 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… +> 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. @@ -86,7 +93,7 @@ En revanche, sans avoir recours à des règles pour chaque ressource de la colle ### 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. +Pour passer Radicale en mode DEBUG, il faut éditer le fichier */etc/radicale/logging* et passer INFO à DEBUG dans les sections *[logger_root]* et *[handler_file]* puis recharger le service uWSGI. Dès lors, le log affiche toutes les requêtes qui sont faites à Radicale ainsi que l’analyse du fichier *rights*. Il est toutefois déconseillé de rester sur ce mode, car le log se remplie très rapidement. diff --git a/app_radicale.md b/pages/02.applications/02.docs/radicale/app_radicale.md similarity index 87% rename from app_radicale.md rename to pages/02.applications/02.docs/radicale/app_radicale.md index 4a41b02d..59a35ee0 100644 --- a/app_radicale.md +++ b/pages/02.applications/02.docs/radicale/app_radicale.md @@ -1,8 +1,15 @@ -# 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: @@ -19,8 +26,7 @@ To connect another client to radical, we must inform these addresses: - 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. @@ -50,7 +56,7 @@ 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. +To validate changes to the */etc/radicale/rights* file, radical must be recharged via uWSGI service. ```bash sudo service uwsgi restart ``` @@ -72,7 +78,7 @@ In both cases, the sharing works only using the full address of the calendar or 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 ... +> 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. @@ -86,7 +92,7 @@ However, without recourse to the rules for each resource in the collection of us ### 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. +To pass Radicale in DEBUG mode, edit the */etc/radicale/logging* and change INFO to DEBUG in sections *[logger_root]* and *[handler_file]*. Then reload the uWSGI service. Now, the log displays all requests that are made to Radicale and analysis of *rights* file. However, do not stay on this mode because the log is filled very quickly. diff --git a/app_rainloop_fr.md b/pages/02.applications/02.docs/rainloop/app_rainloop.fr.md similarity index 72% rename from app_rainloop_fr.md rename to pages/02.applications/02.docs/rainloop/app_rainloop.fr.md index c6421461..a722efad 100644 --- a/app_rainloop_fr.md +++ b/pages/02.applications/02.docs/rainloop/app_rainloop.fr.md @@ -1,6 +1,15 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Rainloop +--- +title: Rainloop +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_rainloop' +--- -[](https://install-app.yunohost.org/?app=rainloop) [](https://dash.yunohost.org/appci/app/rainloop) + + +[](https://install-app.yunohost.org/?app=rainloop) [](https://dash.yunohost.org/appci/app/rainloop) ### Index @@ -15,24 +24,23 @@ Pour le configurer après l'installation, veuillez vous rendre sur http://DOMAIN - Le nom d'utilisateur admin par défaut est : admin - Le mot de passe admin par défaut est : Mot de passe choisi lors de l'installation -- Si vous avez oublié votre mot de passe, vous pouvez le retrouver avec ``sudo yunohost app settings rainloop password`` +- 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 Baikal, 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 +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". +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`` - +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/02.applications/02.docs/rainloop/app_rainloop.md similarity index 67% rename from app_rainloop.md rename to pages/02.applications/02.docs/rainloop/app_rainloop.md index ca9dfcfb..d605bda3 100644 --- a/app_rainloop.md +++ b/pages/02.applications/02.docs/rainloop/app_rainloop.md @@ -1,6 +1,15 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Rainloop +--- +title: Rainloop +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_rainloop' +--- -[](https://install-app.yunohost.org/?app=rainloop) [](https://dash.yunohost.org/appci/app/rainloop) + + +[](https://install-app.yunohost.org/?app=rainloop) [](https://dash.yunohost.org/appci/app/rainloop) ### Index @@ -13,26 +22,26 @@ Rainloop is a lightweight webmail. To configure it, go to http://DOMAIN.TLD/rainloop/app/?admin -- The default login is : admin -- The default password is : Password chosen during install -- If you lost the admin password, you can retrieve it using ``sudo yunohost app settings rainloop password`` +- The default login is: admin +- The default password is: Password chosen during install +- If you lost the admin password, you can retrieve it using `sudo yunohost app setting rainloop password` -### Cardav -Each user can add a remote carddav server from their own parameters interface. +### CardDAV +Each user can add a remote cardDAV server from their own parameters interface. -- If you use baikal, the CardDav address is: https://DOMAIN.TLD/baikal/card.php/addressbooks/USER/default/ -- If you use NextCloud, the CardDav address is: https://DOMAIN.TLD/nextcloud/remote.php/carddav/addressbooks/USER/contacts +- If you use Baïkal, the CardDAV address is: https://DOMAIN.TLD/baikal/card.php/addressbooks/USER/default/ +- If you use Nextcloud, the CardDAV address is: https://DOMAIN.TLD/nextcloud/remote.php/carddav/addressbooks/USER/contacts ### Domains -Users can use Rainloop to access mailboxes other than the one provided by yunohost (e.g. gmail.com or live.com). The option is available through the "account -> add an account" button. +Users can use Rainloop to access mailboxes other than the one provided by YunoHost (e.g. gmail.com or live.com). The option is available through the "account -> add an account" button. The administrator must authorize the connection to third party domains, via a white list in the administration interface. ### PGP Keys Rainloop saves your PGP private keys in the browser storage. This means that you will loose your private keys if you clear your browser storage (e.g., private browsing, different computer...). This packages integrates [PGPback by chtixof](https://github.com/chtixof/pgpback_ynh) so you can store your PGP private keys on the server securely. Go to **http://DOMAIN.TLD/rainloop/pgpback** to backup your PGP keys on the server or restore them. ### Upgrade -To upgrade the app once a new rainloop version is available, simply run in a local shell via ssh or otherwise : -``sudo yunohost app upgrade -u https://github.com/YunoHost-Apps/rainloop_ynh rainloop`` +To upgrade the app once a new rainloop version is available, simply run in a local shell via ssh or otherwise: +`sudo yunohost app upgrade -u https://github.com/YunoHost-Apps/rainloop_ynh rainloop` ## Useful links diff --git a/app_roundcube_fr.md b/pages/02.applications/02.docs/roundcube/app_roundcube.fr.md similarity index 60% rename from app_roundcube_fr.md rename to pages/02.applications/02.docs/roundcube/app_roundcube.fr.md index 30e6a537..45aa9ba4 100644 --- a/app_roundcube_fr.md +++ b/pages/02.applications/02.docs/roundcube/app_roundcube.fr.md @@ -1,6 +1,15 @@ -# <img src="/images/roundcube_logo.svg" height="80px" alt="logo de roundcube"> Roundcube +--- +title: Roundcube +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_roundcube' +--- -[](https://install-app.yunohost.org/?app=roundcube) [](https://dash.yunohost.org/appci/app/roundcube) + + +[](https://install-app.yunohost.org/?app=roundcube) [](https://dash.yunohost.org/appci/app/roundcube) ### Index @@ -10,18 +19,18 @@ Roundcube est un client web de courrier électronique libre ou aussi appelé un ### 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 » d’ownCloud, 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. -Notez que si Baïkal ou ownCloud sont déjà installés, les carnets d'adresses qui y sont définis seront automatiquement ajoutés pour chaque utilisateur dans Roundcube. +Notez que si Baïkal ou Nextcloud sont déjà installés, les carnets d'adresses qui y sont définis seront automatiquement ajoutés pour chaque utilisateur dans Roundcube. ---- -Si vous avez installé ownCloud 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 ownCloud 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 « ownCloud » 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/02.applications/02.docs/roundcube/app_roundcube.md similarity index 56% rename from app_roundcube.md rename to pages/02.applications/02.docs/roundcube/app_roundcube.md index 2d3de783..261c1a61 100644 --- a/app_roundcube.md +++ b/pages/02.applications/02.docs/roundcube/app_roundcube.md @@ -1,6 +1,15 @@ -# <img src="/images/roundcube_logo.svg" height="80px" alt="roundcube's logo"> Roundcube +--- +title: Roundcube +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_roundcube' +--- -[](https://install-app.yunohost.org/?app=roundcube) [](https://dash.yunohost.org/appci/app/roundcube) + + +[](https://install-app.yunohost.org/?app=roundcube) [](https://dash.yunohost.org/appci/app/roundcube) ### Index @@ -10,19 +19,18 @@ Roundcube is a web client for email messaging also called webmail. ### Synchronize your contacts -Roundcube offers you at the installation to synchronize your contacts with a CardDAV server, through a third party plugin. Using a CardDAV server like Baïkal or ownCloud's "Contacts" application, both available in YunoHost, allows you to centralize and manage your contacts. +Roundcube offers you at the installation to synchronize your contacts with a CardDAV server, through a third party plugin. Using a CardDAV server like Baïkal or Nextcloud's "Contacts" application, both available in YunoHost, allows you to centralize and manage your contacts. Similarly to IMAP that allows you to synchronize your emails with your mail server, CardDAV allows you to access your contacts through multiple clients, such as Roundcube. Thanks to CardDAV, you will not have to import your contacts in each of your devices. -Note that addressbooks defined in Baïkal or ownCloud will be automatically added in Roundcube for each user if they are already installed. +Note that addressbooks defined in Baïkal or Nextcloud will be automatically added in Roundcube for each user if they are already installed. ---- -In case you've installed ownCloud after, here is how to add your addressbooks: - -* Go to "Contacts" section of your owncloud application and click on the gear wheel icon located at the bottom left. Then, click on "CardDAV link" and copy the URL that appeared. -* Go to Roundcube's CardDAV section and type in "ownCloud" in "Label" field, paste the previously copied URL and type your username and password. Your contacts are now synchronized! +In case you've installed Nextcloud after, here is how to add your addressbooks: +* Go to "Contacts" section of your Nextcloud application and click on the gear wheel icon located at the bottom left. Then, click on "CardDAV link" and copy the URL that appeared. +* Go to Roundcube's CardDAV section and type in "nextcloud" in "Label" field, paste the previously copied URL and type your username and password. Your contacts are now synchronized! ## Useful links diff --git a/app_searx_fr.md b/pages/02.applications/02.docs/searx/app_searx.fr.md similarity index 81% rename from app_searx_fr.md rename to pages/02.applications/02.docs/searx/app_searx.fr.md index 13e159be..82251b98 100644 --- a/app_searx_fr.md +++ b/pages/02.applications/02.docs/searx/app_searx.fr.md @@ -1,12 +1,21 @@ -# <img src="/images/searx_logo.svg" height="80px" alt="logo de searx"> Searx +--- +title: Searx +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_searx' +--- -[](https://install-app.yunohost.org/?app=searx) [](https://dash.yunohost.org/appci/app/searx) + + +[](https://install-app.yunohost.org/?app=searx) [](https://dash.yunohost.org/appci/app/searx) ### Index - [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. +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. diff --git a/app_searx.md b/pages/02.applications/02.docs/searx/app_searx.md similarity index 68% rename from app_searx.md rename to pages/02.applications/02.docs/searx/app_searx.md index 2f7909e4..108a9ebc 100644 --- a/app_searx.md +++ b/pages/02.applications/02.docs/searx/app_searx.md @@ -1,13 +1,21 @@ -# <img src="/images/searx_logo.svg" height="80px" alt="searx's logo"> Searx +--- +title: Searx +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_searx' +--- -[](https://install-app.yunohost.org/?app=searx) [](https://dash.yunohost.org/appci/app/searx) + + +[](https://install-app.yunohost.org/?app=searx) [](https://dash.yunohost.org/appci/app/searx) ### Index - [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-rice-s. -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/app_shaarli_fr.md b/pages/02.applications/02.docs/shaarli/app_shaarli.fr.md similarity index 88% rename from app_shaarli_fr.md rename to pages/02.applications/02.docs/shaarli/app_shaarli.fr.md index 3982414c..b272dffa 100644 --- a/app_shaarli_fr.md +++ b/pages/02.applications/02.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/02.applications/02.docs/shaarli/app_shaarli.md b/pages/02.applications/02.docs/shaarli/app_shaarli.md new file mode 100644 index 00000000..cdf6c315 --- /dev/null +++ b/pages/02.applications/02.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/02.applications/02.docs/shellinabox/app_shellinabox.fr.md similarity index 61% rename from app_shellinabox_fr.md rename to pages/02.applications/02.docs/shellinabox/app_shellinabox.fr.md index 2fc8d667..3b0a4311 100644 --- a/app_shellinabox_fr.md +++ b/pages/02.applications/02.docs/shellinabox/app_shellinabox.fr.md @@ -1,12 +1,21 @@ -# <img src="/images/shellinabox_logo.svg" height="80px" alt="logo de shellinabox"> Shellinabox +--- +title: Shellinabox +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_shellinabox' +--- -[](https://install-app.yunohost.org/?app=shellinabox) [](https://dash.yunohost.org/appci/app/shellinabox) + + +[](https://install-app.yunohost.org/?app=shellinabox) [](https://dash.yunohost.org/appci/app/shellinabox) ### Index - [Liens utiles](#liens-utiles) -Shell In A Box met en œuvre un serveur web qui peut saisir des lignes de commande arbitraires vers un émulateur de terminal. Cet émulateur est accessible à tout navigateur web compatible JavaScript et CSS et ne nécessite pas de plugins supplémentaires à votre navigateur Internet. +Shellinabox met en œuvre un serveur web qui peut saisir des lignes de commande arbitraires vers un émulateur de terminal. Cet émulateur est accessible à tout navigateur Web compatible JavaScript et CSS et ne nécessite pas de plugins supplémentaires à votre navigateur Internet. ## Liens utiles diff --git a/app_shellinabox.md b/pages/02.applications/02.docs/shellinabox/app_shellinabox.md similarity index 62% rename from app_shellinabox.md rename to pages/02.applications/02.docs/shellinabox/app_shellinabox.md index 27f71f83..70a09274 100644 --- a/app_shellinabox.md +++ b/pages/02.applications/02.docs/shellinabox/app_shellinabox.md @@ -1,12 +1,21 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Shellinabox +--- +title: Shellinabox +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_shellinabox' +--- -[](https://install-app.yunohost.org/?app=shellinabox) [](https://dash.yunohost.org/appci/app/shellinabox) + + +[](https://install-app.yunohost.org/?app=shellinabox) [](https://dash.yunohost.org/appci/app/shellinabox) ### Index - [Useful links](#useful-links) -Shell In A Box implements a web server that can export arbitrary command line tools to a web based terminal emulator. This emulator is accessible to any JavaScript and CSS enabled web browser and does not require any additional browser plugins. +Shellinabox implements a web server that can export arbitrary command line tools to a web based terminal emulator. This emulator is accessible to any JavaScript and CSS enabled web browser and does not require any additional browser plugins. ## Useful links diff --git a/pages/02.applications/02.docs/simple-torrent/app_simple-torrent.fr.md b/pages/02.applications/02.docs/simple-torrent/app_simple-torrent.fr.md new file mode 100644 index 00000000..de351cec --- /dev/null +++ b/pages/02.applications/02.docs/simple-torrent/app_simple-torrent.fr.md @@ -0,0 +1,24 @@ +--- +title: Simple Torrent +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_simple-torrent' +--- + + + +[](https://install-app.yunohost.org/?app=simple-torrent) [](https://dash.yunohost.org/appci/app/simple-torrent) + +### Index + +- [Liens utiles](#liens-utiles) + +Simple Torrent est un client torrent distant auto-hébergé, écrit en Go (golang). Démarrez des torrents à distance, téléchargez des ensembles de fichiers sur le disque local du serveur, qui sont ensuite récupérables ou diffusables via HTTP. + +## Liens utiles + + + Documentation officielle : [wiki](https://github.com/boypt/simple-torrent/wiki) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/simple-torrent](https://github.com/YunoHost-Apps/simple-torrent_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/simple-torrent/issues](https://github.com/YunoHost-Apps/simple-torrent_ynh/issues) diff --git a/pages/02.applications/02.docs/simple-torrent/app_simple-torrent.md b/pages/02.applications/02.docs/simple-torrent/app_simple-torrent.md new file mode 100644 index 00000000..f9abb112 --- /dev/null +++ b/pages/02.applications/02.docs/simple-torrent/app_simple-torrent.md @@ -0,0 +1,24 @@ +--- +title: Simple Torrent +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_simple-torrent' +--- + + + +[](https://install-app.yunohost.org/?app=simple-torrent) [](https://dash.yunohost.org/appci/app/simple-torrent) + +### Index + +- [Useful links](#useful-links) + +Simple Torrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. + +## Useful links + ++ Official documentation: [wiki](https://github.com/boypt/simple-torrent/wiki) ++ Application software repository: [github.com - YunoHost-Apps/simple-torrent](https://github.com/YunoHost-Apps/simple-torrent_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/simple-torrent/issues](https://github.com/YunoHost-Apps/simple-torrent_ynh/issues) diff --git a/pages/02.applications/02.docs/slingcode/app_slingcode.fr.md b/pages/02.applications/02.docs/slingcode/app_slingcode.fr.md new file mode 100644 index 00000000..f6ddcd28 --- /dev/null +++ b/pages/02.applications/02.docs/slingcode/app_slingcode.fr.md @@ -0,0 +1,24 @@ +--- +title: Slingcode +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_slingcode' +--- + + + +[](https://install-app.yunohost.org/?app=slingcode) [](https://dash.yunohost.org/appci/app/slingcode) + +### Index + +- [Liens utiles](#liens-utiles) + +Slingcode est un éditeur de code contenu dans un unique fichier HTML. Il n'a pas de composant serveur, ce qui signifie que toutes vos données sont stockées dans le cache de votre navigateur. Cependant, il est toujours possible de créer des applications Web, de les exécuter, de les exporter et même de les partager en peer-to-peer. + +## Liens utiles + ++ Site web : [slingcode.net (en)](https://slingcode.net/) ++ Dépôt logiciel de l'application : [github.com - YunoHost-Apps/slingcode](https://github.com/chr15m/slingcode) ++ Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/slingcode/issues](https://github.com/YunoHost-Apps/slingcode_ynh/issues) diff --git a/pages/02.applications/02.docs/slingcode/app_slingcode.md b/pages/02.applications/02.docs/slingcode/app_slingcode.md new file mode 100644 index 00000000..f7167e86 --- /dev/null +++ b/pages/02.applications/02.docs/slingcode/app_slingcode.md @@ -0,0 +1,24 @@ +--- +title: Slingcode +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_slingcode' +--- + + + +[](https://install-app.yunohost.org/?app=slingcode) [](https://dash.yunohost.org/appci/app/slingcode) + +### Index + +- [Useful links](#useful-links) + +Slingcode is a code editor contained in a single HTML file. Therefore, it has no server component, so all of your data is stored in your browser's cache. However, it is still possible to make web apps, run them, export them, and even share them using peer-to-peer. + +## Useful links + ++ Website: [slingcode.net](https://slingcode.net/) ++ Application software repository: [github.com - YunoHost-Apps/slingcode](https://github.com/chr15m/slingcode) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/slingcode/issues](https://github.com/YunoHost-Apps/slingcode_ynh/issues) diff --git a/pages/02.applications/02.docs/sogo/app_sogo.fr.md b/pages/02.applications/02.docs/sogo/app_sogo.fr.md new file mode 100644 index 00000000..ee7de8c9 --- /dev/null +++ b/pages/02.applications/02.docs/sogo/app_sogo.fr.md @@ -0,0 +1,23 @@ +--- +title: SOGo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_sogo' +--- + + + +[](https://install-app.yunohost.org/?app=sogo) [](https://dash.yunohost.org/appci/app/sogo) + +### Index + +- [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. + +## Quelques liens utiles + + + Site officiel de SOGo : [sogo.nu](https://sogo.nu) + + Dépot de l'application pour YunoHost : [github.com/YunoHost-Apps/sogo_ynh](https://github.com/YunoHost-Apps/sogo_ynh) diff --git a/pages/02.applications/02.docs/sogo/app_sogo.md b/pages/02.applications/02.docs/sogo/app_sogo.md new file mode 100644 index 00000000..441920f7 --- /dev/null +++ b/pages/02.applications/02.docs/sogo/app_sogo.md @@ -0,0 +1,23 @@ +--- +title: SOGo +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_sogo' +--- + + + +[](https://install-app.yunohost.org/?app=sogo) [](https://dash.yunohost.org/appci/app/sogo) + +### Index + +- [Useful links](#useful-links) + +SOGo is an opensource groupware solution which has Webmail, a global address book, calender and contacts which can be synced via CalDAV or CardDAV. + +## Useful links + ++ Application software repository: [sogo.nu](https://sogo.nu) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com/YunoHost-Apps/sogo_ynh](https://github.com/YunoHost-Apps/sogo_ynh) diff --git a/app_spip_fr.md b/pages/02.applications/02.docs/spip/app_spip.fr.md similarity index 87% rename from app_spip_fr.md rename to pages/02.applications/02.docs/spip/app_spip.fr.md index 78310855..b9470359 100644 --- a/app_spip_fr.md +++ b/pages/02.applications/02.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 ? @@ -6,7 +13,7 @@ SPIP est un système de publication pour l’Internet qui s’attache particuli Source : [spip.net](https://www.spip.net/fr_rubrique91.html) -### Fonctionnalité de l'application pour Yunohost +### Fonctionnalité de l'application pour YunoHost * Installation de la base sans passer par le système d'installation * Support multilingue diff --git a/app_spip.md b/pages/02.applications/02.docs/spip/app_spip.md similarity index 87% rename from app_spip.md rename to pages/02.applications/02.docs/spip/app_spip.md index 880b41e6..9fd0ecec 100644 --- a/app_spip.md +++ b/pages/02.applications/02.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? @@ -6,7 +13,7 @@ SPIP is an Internet publishing system that focuses on collective functioning, mu Source:[spip.net](https://www.spip.net/fr_rubrique91.html_rubrique91.html) -#### Application functionality for Yunohost +#### Application functionality for YunoHost * Installation of the base without going through the installation system * Multilingual support diff --git a/app_strut_fr.md b/pages/02.applications/02.docs/strut/app_strut.fr.md similarity index 76% rename from app_strut_fr.md rename to pages/02.applications/02.docs/strut/app_strut.fr.md index f5afe9c2..6d048d14 100644 --- a/app_strut_fr.md +++ b/pages/02.applications/02.docs/strut/app_strut.fr.md @@ -1,12 +1,21 @@ -# <img src="/images/strut_logo.png" height="80px" alt="logo de strut"> Strut +--- +title: Strut +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_strut' +--- -[](https://install-app.yunohost.org/?app=strut) [](https://dash.yunohost.org/appci/app/strut) + + +[](https://install-app.yunohost.org/?app=strut) [](https://dash.yunohost.org/appci/app/strut) ### Index - [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/02.applications/02.docs/strut/app_strut.md similarity index 75% rename from app_strut.md rename to pages/02.applications/02.docs/strut/app_strut.md index cc70876e..bd8a08c3 100644 --- a/app_strut.md +++ b/pages/02.applications/02.docs/strut/app_strut.md @@ -1,13 +1,22 @@ -# <img src="/images/strut_logo.png" height="80px" alt="strut's logo"> Strut +--- +title: Strut +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_strut' +--- -[](https://install-app.yunohost.org/?app=strut) [](https://dash.yunohost.org/appci/app/strut) + + +[](https://install-app.yunohost.org/?app=strut) [](https://dash.yunohost.org/appci/app/strut) ### Index - [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. +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/app_transmission_fr.md b/pages/02.applications/02.docs/transmission/app_transmission.fr.md similarity index 90% rename from app_transmission_fr.md rename to pages/02.applications/02.docs/transmission/app_transmission.fr.md index df00ad3d..936d0a35 100644 --- a/app_transmission_fr.md +++ b/pages/02.applications/02.docs/transmission/app_transmission.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/transmission.png">Transmission +--- +title: Transmission +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_transmission' +--- + + 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/02.applications/02.docs/transmission/app_transmission.md similarity index 75% rename from app_transmission.md rename to pages/02.applications/02.docs/transmission/app_transmission.md index 854a2bda..6e1ed3a9 100644 --- a/app_transmission.md +++ b/pages/02.applications/02.docs/transmission/app_transmission.md @@ -1,6 +1,15 @@ -# <img src="/images/transmission.png">Transmission +--- +title: Transmission +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_transmission' +--- -### What is Transmission? + + +### What is Transmission? Transmission is a share software based on BitTorrent protocol. * [Transmission web site](http://transmissionbt.com/) @@ -30,10 +39,10 @@ scp (-r) /your/file/ root@your-domain.org:/home/yunohost.transmission/completed ``` ##### How to download a complete folder? -Once connected to your server, using [SSH](ssh), move to the download folder and zip it : +Once connected to your server, using [SSH](/ssh), move to the download folder and ZIP it: ```bash cd /home/yunohost.transmission/completed zip -r your_archive.zip [dossier] ``` -More informations about file transfer using *scp*: http://doc.ubuntu-fr.org/ssh#transfert_-_copie_de_fichiers (french, need english documentation) +More informations about file transfer using *scp*: http://doc.ubuntu-fr.org/ssh#transfert_-_copie_de_fichiers (French, need English documentation) diff --git a/app_ttrss_fr.md b/pages/02.applications/02.docs/ttrss/app_ttrss.fr.md similarity index 91% rename from app_ttrss_fr.md rename to pages/02.applications/02.docs/ttrss/app_ttrss.fr.md index e7240517..0808cbb9 100644 --- a/app_ttrss_fr.md +++ b/pages/02.applications/02.docs/ttrss/app_ttrss.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/ttrss.png" width="80px" alt="logo de Tiny Tiny RSS"> Tiny Tiny RSS +--- +title: Tiny Tiny RSS +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ttrss' +--- + + [](https://install-app.yunohost.org/?app=ttrss) [](https://dash.yunohost.org/appci/app/ttrss) diff --git a/app_ttrss.md b/pages/02.applications/02.docs/ttrss/app_ttrss.md similarity index 90% rename from app_ttrss.md rename to pages/02.applications/02.docs/ttrss/app_ttrss.md index faf07ad4..61c7c0c8 100644 --- a/app_ttrss.md +++ b/pages/02.applications/02.docs/ttrss/app_ttrss.md @@ -1,4 +1,13 @@ -# <img src="/images/ttrss.png" width="80px" alt="logo de Tiny Tiny RSS"> Tiny Tiny RSS +--- +title: Tiny Tiny RSS +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_ttrss' +--- + + [](https://install-app.yunohost.org/?app=ttrss) [](https://dash.yunohost.org/appci/app/ttrss) diff --git a/app_unattended_upgrades_fr.md b/pages/02.applications/02.docs/unattended_upgrades/app_unattended_upgrades.fr.md similarity index 86% rename from app_unattended_upgrades_fr.md rename to pages/02.applications/02.docs/unattended_upgrades/app_unattended_upgrades.fr.md index cda78510..063a4231 100644 --- a/app_unattended_upgrades_fr.md +++ b/pages/02.applications/02.docs/unattended_upgrades/app_unattended_upgrades.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/unattended_upgrades_logo.svg" height="80px" alt="logo de unattended_upgrades"> Unattended_upgrades +--- +title: Unattented upgrades +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_unattended_upgrades' +--- + + [](https://install-app.yunohost.org/?app=unattended_upgrades) [](https://dash.yunohost.org/appci/app/unattended_upgrades) diff --git a/app_unattended_upgrades.md b/pages/02.applications/02.docs/unattended_upgrades/app_unattended_upgrades.md similarity index 85% rename from app_unattended_upgrades.md rename to pages/02.applications/02.docs/unattended_upgrades/app_unattended_upgrades.md index b4776c0d..cfb5bbc0 100644 --- a/app_unattended_upgrades.md +++ b/pages/02.applications/02.docs/unattended_upgrades/app_unattended_upgrades.md @@ -1,4 +1,13 @@ -# <img src="/images/yunohost_package.png" height="80px" alt="Package"> Unattended_upgrades +--- +title: Unattended upgrades +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_unattended_upgrades' +--- + + [](https://install-app.yunohost.org/?app=unattended_upgrades) [](https://dash.yunohost.org/appci/app/unattended_upgrades) diff --git a/pages/02.applications/02.docs/vaultwarden/app_vaultwarden.fr.md b/pages/02.applications/02.docs/vaultwarden/app_vaultwarden.fr.md new file mode 100644 index 00000000..4aac11a5 --- /dev/null +++ b/pages/02.applications/02.docs/vaultwarden/app_vaultwarden.fr.md @@ -0,0 +1,56 @@ +--- +title: Vaultwarden +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_vaultwarden' + aliases: + - '/app_bitwarden' +--- + + + +[](https://install-app.yunohost.org/?app=vaultwarden) [](https://dash.yunohost.org/appci/app/vaultwarden) + +### Index + +- [Configuration](#configuration) +- [Limitations avec YunoHost](#limitations-avec-yunohost) +- [Applications clientes](#applications-clientes) +- [Liens utiles](#liens-utiles) + +Vaultwarden est un gestionnaire de mots de passe freemium et open source sous licence AGPL, qui permet de générer et de conserver des mots de passe de manière sécurisée. Ces éléments sont protégés par un seul et unique mot de passe appelé « mot de passe maître ». Il est créé en 2016 par Kyle Spearrin, un architecte logiciel. + +Le logiciel est disponible sur la plupart des systèmes d'exploitation (GNU/Linux, Windows, macOS, iOS, Android ainsi qu'en ligne de commande), et comme module d'extension pour navigateur web. Il est également possible de consulter ses mot de passe depuis un site web.[¹](#sources) + +## Configuration + +Pour configurer l'application il faut se rendre à l'adresse : `sous.domaine.tld/admin` + +## Limitations avec YunoHost + +Les authentification HTTP et LDAP ne sont pas pris en charges. + +## Applications clientes + +| Nom de l'application [²] | Plateforme | Multi-comptes | Source | Play Store | F-Droid | Apple Store | +|--------------------------|------------|---------------|--------|------------|---------|-------------| +| Bitwarden | GNU/Linux / macOS / Windows | Oui | [bitwarden.com - download](https://bitwarden.com/#download) | +| Bitwarden | Android / iOS | ? | | [Playstore - Birwarden](https://play.google.com/store/apps/details?id=com.x8bit.bitwarden) | X | [App Store - Bitwarden](https://itunes.apple.com/app/bitwarden-free-password-manager/id1137397744?mt=8) | + + +> [²]: (of) : Officielle / (no) : non officiel + +## Liens utiles + + + Site web : [bitwarden.com (en)](https://bitwarden.com/) + + Documentation officielle : [help.bitwarden.com (en)](https://help.bitwarden.com/) + + Dépôt logiciel de l'application : [github.com - YunoHost-Apps/vaultwarden](https://github.com/YunoHost-Apps/vaultwarden_ynh) + + Remonter un bug ou une amélioration en créant un ticket (issue) : [github.com - YunoHost-Apps/vaultwarden/issues](https://github.com/YunoHost-Apps/vaultwarden_ynh/issues) + + ------ + + ### Sources + +¹ [wikipedia.org - Bitwarden](https://fr.wikipedia.org/wiki/Bitwarden) diff --git a/pages/02.applications/02.docs/vaultwarden/app_vaultwarden.md b/pages/02.applications/02.docs/vaultwarden/app_vaultwarden.md new file mode 100644 index 00000000..3fbfb620 --- /dev/null +++ b/pages/02.applications/02.docs/vaultwarden/app_vaultwarden.md @@ -0,0 +1,55 @@ +--- +title: Vaultwarden +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_vaultwarden' + aliases: + - '/app_bitwarden' +--- + + + +[](https://install-app.yunohost.org/?app=vaultwarden) [](https://dash.yunohost.org/appci/app/vaultwarden) + +### Index + +- [Configuration](#configuration) +- [Limitations with YunoHost](#limitations-with-yunohost) +- [Customer Applications](#customer-applications) +- [Useful links](#useful-links) + +Vaultwarden is a freemium libre password manager under AGPL license, allowing generation and storage of passwords in a secure way. These are protected by a single password called the "master password". It was created in 2016 by Kyle Spearrin, a software architect. + +The software is available for most operating systems (GNU/Linux, Windows, macOS, iOS, Android and command-line), and as a web browser plug-in. It is also possible to view passwords from a website.[¹](#sources) + +## Configuration + +To configure the app, go to this address: `sub.domain.tld/admin` + +## Limitations with YunoHost + +HTTP and LDAP authentication are not supported. + +## Customer applications + +| Application name [²] | Platform | Multi-account | Source | Play Store | F-Droid | Apple Store | +|----------------------|----------|---------------|--------|------------|---------|-------------| +| Bitwarden | GNU/Linux / macOS / Windows | Oui | [bitwarden.com - download](https://bitwarden.com/#download) | +| Bitwarden | Android / iOS | ? | | [Playstore - Birwarden](https://play.google.com/store/apps/details?id=com.x8bit.bitwarden) | X | [App Store - Bitwarden](https://itunes.apple.com/app/bitwarden-free-password-manager/id1137397744?mt=8) | + +> [²]: (of) : Official / (un) : Unofficial + +## Useful links + ++ Website: [bitwarden.com](https://bitwarden.com/) ++ Official documentation: [help.bitwarden.com](https://help.bitwarden.com/) ++ Application software repository: [github.com - YunoHost-Apps/vaultwarden](https://github.com/YunoHost-Apps/vaultwarden_ynh) ++ Fix a bug or an improvement by creating a ticket (issue): [github.com - YunoHost-Apps/vaultwarden/issues](https://github.com/YunoHost-Apps/vaultwarden_ynh/issues) + +----- + +### Sources + +¹ [wikipedia.org - Bitwarden](https://en.wikipedia.org/wiki/Bitwarden) diff --git a/app_wallabag2_fr.md b/pages/02.applications/02.docs/wallabag2/app_wallabag2.fr.md similarity index 65% rename from app_wallabag2_fr.md rename to pages/02.applications/02.docs/wallabag2/app_wallabag2.fr.md index 3c39da92..8c4e7544 100644 --- a/app_wallabag2_fr.md +++ b/pages/02.applications/02.docs/wallabag2/app_wallabag2.fr.md @@ -1,18 +1,27 @@ -# <img src="/images/wallabag2_logo.svg" height="80px" alt="logo de wallabag2"> Wallabag +--- +title: Wallabag2 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wallabag2' +--- -[](https://install-app.yunohost.org/?app=wallabag2) [](https://dash.yunohost.org/appci/app/wallabag2) + + +[](https://install-app.yunohost.org/?app=wallabag2) [](https://dash.yunohost.org/appci/app/wallabag2) ### Index - [Liens utiles](#liens-utiles) -Wallabag est une application de lecture différée : elle permet simplement d’archiver une page web en ne conservant que le contenu. Les éléments superflus (menus, publicités, etc.) sont supprimés. Sont disponibles : une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). +Wallabag est une application de lecture différée : elle permet simplement d’archiver une page web en ne conservant que le contenu. Les éléments superflus (menus, publicités, etc.) sont supprimés. Sont disponibles : une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). ### Fonctionnalités En plus des fonctionnalités principales de Wallabag, ce paquet propose également : -* Une intégration avec le système de gestion des utilisateurs et le SSO de Yunohost - e.g. un bouton de déconnexion +* Une intégration avec le système de gestion des utilisateurs et le SSO de YunoHost - e.g. un bouton de déconnexion * De permettre à un utilisateur d'être administrateur (réglage lors de l'installation) * Un import asynchrone utilisant Redis (à activer dans les *Paramètres Internes*). L'import via RabbitMQ n'est pas (encore ?) supporté. @@ -28,6 +37,5 @@ En plus des fonctionnalités principales de Wallabag, ce paquet propose égaleme ### Mettre à niveau depuis la v1.x -La mise à niveau depuis le paquet Yunohost de Wallabag v1 demande une opération manuelle, c'est pourquoi un nouveau paquet est fourni. Pour le processus de migration, merci de vous référer à [la documentation officielle +La mise à niveau depuis le paquet YunoHost de Wallabag v1 demande une opération manuelle, c'est pourquoi un nouveau paquet est fourni. Pour le processus de migration, merci de vous référer à [la documentation officielle de Wallabag](https://doc.wallabag.org/fr/user/import/wallabagv1.html). - diff --git a/app_wallabag2.md b/pages/02.applications/02.docs/wallabag2/app_wallabag2.md similarity index 86% rename from app_wallabag2.md rename to pages/02.applications/02.docs/wallabag2/app_wallabag2.md index cc9b69e2..d919d84b 100644 --- a/app_wallabag2.md +++ b/pages/02.applications/02.docs/wallabag2/app_wallabag2.md @@ -1,6 +1,15 @@ -# <img src="/images/wallabag2_logo.svg" height="80px" alt="wallabag2's logo"> Wallabag2 +--- +title: Wallabag2 +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wallabag2' +--- -[](https://install-app.yunohost.org/?app=wallabag2) [](https://dash.yunohost.org/appci/app/wallabag2) + + +[](https://install-app.yunohost.org/?app=wallabag2) [](https://dash.yunohost.org/appci/app/wallabag2) ### Index @@ -31,4 +40,3 @@ In addition to Wallabag core features, the following are made available with thi No automatic upgrade process is available. You need a manual (but simple) migration from Wallabag v1. Please take a look at the [official documentation](https://doc.wallabag.org/en/user/import/wallabagv1.html). - diff --git a/app_weblate_fr.md b/pages/02.applications/02.docs/weblate/app_weblate.fr.md similarity index 76% rename from app_weblate_fr.md rename to pages/02.applications/02.docs/weblate/app_weblate.fr.md index 9cf4c16e..b150ac0a 100644 --- a/app_weblate_fr.md +++ b/pages/02.applications/02.docs/weblate/app_weblate.fr.md @@ -1,16 +1,24 @@ -# <img src="/images/weblate_logo.svg" height="80px" alt="logo de weblate"> Weblate +--- +title: Weblate +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_weblate' +--- -[](https://install-app.yunohost.org/?app=weblate) [](https://dash.yunohost.org/appci/app/weblate) + + +[](https://install-app.yunohost.org/?app=weblate) [](https://dash.yunohost.org/appci/app/weblate) ### Index - [Liens utiles](#liens-utiles) Weblate est un outil de traduction en mode web fortement lié aux systèmes de contrôle de versions. A travers une interface utilisateur claire et simple, Weblate permet la propagation de traductions entre sous-projets, peut vérifier la qualité des traductions et est automatiquement lié aux fichiers sources. -Weblate fonctionne très bien avec un serveur GitLab, Github, Bitbucket. Il est possible d'importer les traductions déjà existantes d'un projet, de permettre à tout le monde de contribuer à la traduction d'un projet via son interface web, et ensuite pousser les traductions sur le repository. +Weblate fonctionne très bien avec un serveur GitLab, GitHub, Bitbucket. Il est possible d'importer les traductions déjà existantes d'un projet, de permettre à tout le monde de contribuer à la traduction d'un projet via son interface Web, et ensuite pousser les traductions sur le repository. Il y a un système de revue, de suggestions, de commentaires sur une traduction. -On peut installer une authentification tiers, par exemple on peut se connecter avec son compte Github. Notre compte permet ensuite de garder un historique. - +On peut installer une authentification tiers, par exemple on peut se connecter avec son compte GitHub. Notre compte permet ensuite de garder un historique. ## Liens utiles diff --git a/app_weblate.md b/pages/02.applications/02.docs/weblate/app_weblate.md similarity index 79% rename from app_weblate.md rename to pages/02.applications/02.docs/weblate/app_weblate.md index a50bc5f9..0b1d993e 100644 --- a/app_weblate.md +++ b/pages/02.applications/02.docs/weblate/app_weblate.md @@ -1,6 +1,15 @@ -# <img src="/images/weblate_logo.svg" height="80px" alt="weblate's logo"> Weblate +--- +title: Weblate +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_weblate' +--- -[](https://install-app.yunohost.org/?app=weblate) [](https://dash.yunohost.org/appci/app/weblate) + + +[](https://install-app.yunohost.org/?app=weblate) [](https://dash.yunohost.org/appci/app/weblate) ### Index @@ -8,11 +17,10 @@ Weblate is a web-based translation tool strongly linked to version control systems. Through a clear and simple user interface, Weblate allows the propagation of translations between sub-projects, can check the quality of the translations and is automatically linked to the source files. -Weblate works very well with a GitLab, Github, Bitbucket server. It is possible to import already existing translations of a project, allowing everyone to contribute to the translation of a project via its web interface, +Weblate works very well with a GitLab, GitHub, Bitbucket server. It is possible to import already existing translations of a project, allowing everyone to contribute to the translation of a project via its web interface, and then push the translations to the repository. There is a system for reviewing, suggesting, commenting on a translation. -You can install a third party authentication, for example you can log in with your Github account. Our account then allows us to keep a history. - +You can install a third party authentication, for example you can log in with your GitHub account. Our account then allows us to keep a history. ## Useful links diff --git a/app_webtrees_fr.md b/pages/02.applications/02.docs/webtrees/app_webtrees.fr.md similarity index 75% rename from app_webtrees_fr.md rename to pages/02.applications/02.docs/webtrees/app_webtrees.fr.md index ca030140..fca91947 100644 --- a/app_webtrees_fr.md +++ b/pages/02.applications/02.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/02.applications/02.docs/webtrees/app_webtrees.md similarity index 83% rename from app_webtrees.md rename to pages/02.applications/02.docs/webtrees/app_webtrees.md index d3c9e776..603a3d74 100644 --- a/app_webtrees.md +++ b/pages/02.applications/02.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/02.applications/02.docs/wekan/app_wekan.fr.md similarity index 82% rename from app_wekan_fr.md rename to pages/02.applications/02.docs/wekan/app_wekan.fr.md index fb1f0f63..34348259 100644 --- a/app_wekan_fr.md +++ b/pages/02.applications/02.docs/wekan/app_wekan.fr.md @@ -1,6 +1,15 @@ -# <img src="/images/wekan_logo.svg" height="80px" alt="logo de wekan"> Wekan +--- +title: Wekan +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wekan' +--- -[](https://install-app.yunohost.org/?app=wekan) [](https://dash.yunohost.org/appci/app/wekan) + + +[](https://install-app.yunohost.org/?app=wekan) [](https://dash.yunohost.org/appci/app/wekan) ### Index @@ -9,7 +18,6 @@ Wekan est un gestionnaire de tâches collaboratif en ligne. Il facilite la gestion de projets par l'élaboration de todo listes. Wekan propose une grande diversité de fonctionnalités, ce qui en fait un service très complet et adapté à des projets complexes. Si vous cherchez un outil kanban plus simple, vous pouvez utiliser [Kanboard](/app_kanboard). - ## Liens utiles + Site web : [wekan.github.io](https://wekan.github.io/) diff --git a/app_wekan.md b/pages/02.applications/02.docs/wekan/app_wekan.md similarity index 81% rename from app_wekan.md rename to pages/02.applications/02.docs/wekan/app_wekan.md index 9134c4fb..b0d7a4e8 100644 --- a/app_wekan.md +++ b/pages/02.applications/02.docs/wekan/app_wekan.md @@ -1,6 +1,15 @@ -# <img src="/images/wekan_logo.svg" height="80px" alt="wekan's logo"> Wekan +--- +title: Wekan +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wekan' +--- -[](https://install-app.yunohost.org/?app=wekan) [](https://dash.yunohost.org/appci/app/wekan) + + +[](https://install-app.yunohost.org/?app=wekan) [](https://dash.yunohost.org/appci/app/wekan) ### Index diff --git a/app_wikijs_fr.md b/pages/02.applications/02.docs/wikijs/app_wikijs.fr.md similarity index 85% rename from app_wikijs_fr.md rename to pages/02.applications/02.docs/wikijs/app_wikijs.fr.md index b2a3fa65..828eb0bf 100644 --- a/app_wikijs_fr.md +++ b/pages/02.applications/02.docs/wikijs/app_wikijs.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/wikijs_logo.svg" height="80px" alt="logo de Wiki.js"> Wiki.js +--- +title: Wiki.js +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wikijs' +--- + + [](https://install-app.yunohost.org/?app=wikijs) [](https://dash.yunohost.org/appci/app/wikijs) diff --git a/app_wikijs.md b/pages/02.applications/02.docs/wikijs/app_wikijs.md similarity index 84% rename from app_wikijs.md rename to pages/02.applications/02.docs/wikijs/app_wikijs.md index 7475c620..66d32837 100644 --- a/app_wikijs.md +++ b/pages/02.applications/02.docs/wikijs/app_wikijs.md @@ -1,4 +1,13 @@ -# <img src="/images/wikijs_logo.svg" height="80px" alt="Wiki.js's logo"> Wiki.js +--- +title: Wiki.js +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wikijs' +--- + + [](https://install-app.yunohost.org/?app=wikijs) [](https://dash.yunohost.org/appci/app/wikijs) diff --git a/app_wordpress_fr.md b/pages/02.applications/02.docs/wordpress/app_wordpress.fr.md similarity index 92% rename from app_wordpress_fr.md rename to pages/02.applications/02.docs/wordpress/app_wordpress.fr.md index ec6c8d75..0d058dda 100644 --- a/app_wordpress_fr.md +++ b/pages/02.applications/02.docs/wordpress/app_wordpress.fr.md @@ -1,4 +1,13 @@ -# <img src="https://yunohost.org/images/wordpress_logo.svg" height="80px" alt="logo de WordPress"> WordPress +--- +title: WordPress +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wordpress' +--- + + [](https://install-app.yunohost.org/?app=wordpress) [](https://dash.yunohost.org/appci/app/wordpress) diff --git a/app_wordpress.md b/pages/02.applications/02.docs/wordpress/app_wordpress.md similarity index 90% rename from app_wordpress.md rename to pages/02.applications/02.docs/wordpress/app_wordpress.md index 8e8054ec..c1aefbba 100644 --- a/app_wordpress.md +++ b/pages/02.applications/02.docs/wordpress/app_wordpress.md @@ -1,4 +1,13 @@ -# <img src="/images/wordpress_logo.svg" height="80px" alt="WordPress's logo"> WordPress +--- +title: WordPress +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_wordpress' +--- + + [](https://install-app.yunohost.org/?app=wordpress) [](https://dash.yunohost.org/appci/app/wordpress) diff --git a/app_writing_guide_fr.md b/pages/02.applications/02.docs/writing_guide/app_writing_guide.fr.md similarity index 94% rename from app_writing_guide_fr.md rename to pages/02.applications/02.docs/writing_guide/app_writing_guide.fr.md index ac1abf48..08a456b4 100644 --- a/app_writing_guide_fr.md +++ b/pages/02.applications/02.docs/writing_guide/app_writing_guide.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/APPLICATION_logo.svg" height="80px" alt="logo de APPLICATION"> APPLICATION +--- +title: Canevas pour la documentation des apps +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_writing_guide' +--- + + [](https://install-app.yunohost.org/?app=APPLICATION) [](https://dash.yunohost.org/appci/app/APPLICATION) diff --git a/app_writing_guide.md b/pages/02.applications/02.docs/writing_guide/app_writing_guide.md similarity index 94% rename from app_writing_guide.md rename to pages/02.applications/02.docs/writing_guide/app_writing_guide.md index 57e9d9f3..90b46e0f 100644 --- a/app_writing_guide.md +++ b/pages/02.applications/02.docs/writing_guide/app_writing_guide.md @@ -1,4 +1,13 @@ -# <img src="/images/APPLICATION_logo.svg" height="80px" alt="APPLICATION's logo"> APPLICATION +--- +title: Template for app documentation +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_writing_guide' +--- + + [](https://install-app.yunohost.org/?app=APPLICATION) [](https://dash.yunohost.org/appci/app/APPLICATION) diff --git a/pages/02.applications/02.docs/yunofav/app_yunofav.fr.md b/pages/02.applications/02.docs/yunofav/app_yunofav.fr.md new file mode 100644 index 00000000..101f42c0 --- /dev/null +++ b/pages/02.applications/02.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/02.applications/02.docs/yunofav/app_yunofav.md b/pages/02.applications/02.docs/yunofav/app_yunofav.md new file mode 100644 index 00000000..9a7b7fe5 --- /dev/null +++ b/pages/02.applications/02.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/app_zerobin_fr.md b/pages/02.applications/02.docs/zerobin/app_zerobin.fr.md similarity index 89% rename from app_zerobin_fr.md rename to pages/02.applications/02.docs/zerobin/app_zerobin.fr.md index fdb0c8c0..d1ecd41a 100644 --- a/app_zerobin_fr.md +++ b/pages/02.applications/02.docs/zerobin/app_zerobin.fr.md @@ -1,4 +1,13 @@ -# <img src="/images/zerobin_logo.svg" height="80px" alt="logo de zerobin"> Zerobin +--- +title: Zerobin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_zerobin' +--- + + [](https://install-app.yunohost.org/?app=zerobin) [](https://dash.yunohost.org/appci/app/zerobin) diff --git a/app_zerobin.md b/pages/02.applications/02.docs/zerobin/app_zerobin.md similarity index 89% rename from app_zerobin.md rename to pages/02.applications/02.docs/zerobin/app_zerobin.md index 927bb7c1..4a276fc8 100644 --- a/app_zerobin.md +++ b/pages/02.applications/02.docs/zerobin/app_zerobin.md @@ -1,4 +1,13 @@ -# <img src="/images/zerobin_logo.svg" height="80px" alt="zerobin's logo"> Zerobin +--- +title: Zerobin +template: docs +taxonomy: + category: docs, apps +routes: + default: '/app_zerobin' +--- + + [](https://install-app.yunohost.org/?app=zerobin) [](https://dash.yunohost.org/appci/app/zerobin) diff --git a/pages/02.applications/03.framasoft/apps_framasoft.fr.md b/pages/02.applications/03.framasoft/apps_framasoft.fr.md new file mode 100644 index 00000000..bd8253f4 --- /dev/null +++ b/pages/02.applications/03.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)   | +| Framabee | [Searx ](https://searx.ir) | [[fa=git /]](https://github.com/YunoHost-Apps/searx_ynh)   | +| Framabin | [PrivateBin ](https://privatebin.info) | [[fa=git /]](https://github.com/YunoHost-apps/zerobin_ynh)   | +| Framaboard | [Kanboard ](https://kanboard.org) | [[fa=git /]](https://github.com/YunoHost-Apps/kanboard_ynh)   | +| Framabookin | [BicBucStriim ](https://github.com/rvolz/BicBucStriim) | [[fa=git /]](https://github.com/YunoHost-Apps/bicbucstriim_ynh)   | +| Framacalc | [Ethercalc ](https://ethercalc.net) | [[fa=git /]](https://github.com/YunoHost-Apps/ethercalc_ynh)   | +| Framacarte | [uMap ](http://umap.openstreetmap.fr) | [[fa=git /]](https://github.com/YunoHost-Apps/umap_ynh)   | +| Framaclic | [Dolomon ](https://dolomon.org) | Non Packagé | +| Framadate | [OpenSondage ](https://framadate.org) | [[fa=git /]](https://github.com/YunoHost-Apps/opensondage_ynh)   | +| Framadrive | [Nextcloud ](https://nextcloud.com) | [[fa=git /]](https://github.com/YunoHost-apps/nextcloud_ynh)   | +| Framadrop | [Lufi ](https://framagit.org/fiat-tux/hat-softwares/lufi) | [[fa=git /]](https://github.com/YunoHost-Apps/lufi_ynh)   | +| Framaestro | [Framaestro ](https://framaestro.org) | [[fa=git /]](https://github.com/YunoHost-Apps/framaestro_ynh)   | +| Framaforms | [Framaforms ](https://framaforms.org) | [[fa=git /]](https://github.com/YunoHost-Apps/framaforms_ynh)   | +| Framagames | [Framagames ](https://framagames.org) | [[fa=git /]](https://github.com/YunoHost-Apps/framagames_ynh)   | +| 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)   | +| Frama.link | [Lstu ](https://lstu.fr) | [[fa=git /]](https://github.com/YunoHost-Apps/lstu_ynh)   | +| Framalistes | [Sympa ](http://www.sympa.org) | [[fa=git /]](https://github.com/alexAubin/sympa_ynh)   | +| Framanews | [TinyTinyRSS ](https://tt-rss.org) | [[fa=git /]](https://github.com/YunoHost-apps/ttrss_ynh)   | +| Framanotes | [Turtl ](https://turtlapp.com) | [[fa=git /]](https://github.com/YunoHost-Apps/turtl_ynh)   | +| Framapad | [Etherpad](https://etherpad.org) + [MyPads](https://framagit.org/framasoft/Etherpad/ep_mypads) | [[fa=git /]](https://github.com/YunoHost-Apps/etherpad_mypads_ynh)   | +| Framapiaf | [Mastodon ](https://joinmastodon.org) | [[fa=git /]](https://github.com/YunoHost-Apps/mastodon_ynh)   | +| Framapic | [Lutim ](https://lut.im/) | [[fa=git /]](https://github.com/YunoHost-Apps/lutim_ynh)   | +| Framasites | [Grav ](https://getgrav.org) | [[fa=git /]](https://github.com/YunoHost-Apps/grav_ynh)   | +| Framaslides | [Strut ](https://strut.io) | [[fa=git /]](https://github.com/YunoHost-Apps/strut_ynh)   | +| Framasphère | [Diaspora ](https://diasporafoundation.org) | [[fa=git /]](https://github.com/aymhce/diaspora_ynh)   | +| Framatalk | [Jitsi Meet ](https://meet.jit.si) | [[fa=git /]](https://github.com/YunoHost-Apps/jitsi_ynh)   | +| Framateam | [Mattermost ](https://mattermost.com) | [[fa=git /]](https://github.com/YunoHost-Apps/mattermost_ynh)   | +| Framatrad | [Weblate ](https://weblate.org) | [[fa=git /]](https://github.com/YunoHost-Apps/weblate_ynh)   | +| Framatube | [Peertube ](https://joinpeertube.org) | [[fa=git /]](https://github.com/YunoHost-Apps/peertube_ynh)   | +| Framavectoriel | [SVG-Edit ](https://github.com/SVG-Edit/svgedit) | [[fa=git /]](https://github.com/YunoHost-Apps/svgedit_ynh)   | +| Framavox | [Loomio ](https://www.loomio.org) | Non packagé | +| Framemo | [Scrumblr ](http://scrumblr.ca) | [[fa=git /]](https://github.com/YunoHost-Apps/scrumblr_ynh)   | +| Framindmap | [Wisemapping ](https://www.wisemapping.com) | [[fa=git /]](https://github.com/YunoHost-Apps/wisemapping_ynh)   | +| Framinetest | [Minetest ](https://www.minetest.net) | [[fa=git /]](https://github.com/YunoHost-Apps/minetest_ynh)   | +| MyFrama | [Shaarli ](https://github.com/shaarli/Shaarli) | [[fa=git /]](https://github.com/YunoHost-Apps/shaarli_ynh)   | + +### Voir aussi + +- [Liste complète des applications packagées](/apps) +- [La roadmap 'Dégooglisons'](https://github.com/YunoHost/issues/milestone/13) diff --git a/pages/02.applications/04.wishlist/apps_wishlist.md b/pages/02.applications/04.wishlist/apps_wishlist.md new file mode 100644 index 00000000..2639dfa3 --- /dev/null +++ b/pages/02.applications/04.wishlist/apps_wishlist.md @@ -0,0 +1,358 @@ +--- +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. + +<div class="alert alert-info">Before adding an app in this wish-list, please check your app is not <a href="/apps">already available in YunoHost's app catalogue</a></div> + +| Name | Description | Upstream | Package draft | +| ------ | ----------- | -------- | ------------- | +| 2FAuth | Manage and Generate 2FA Codes | [Upstream](https://github.com/Bubka/2FAuth) | | +| 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) | +| [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/) | | +| 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) | +| [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) | | +| [Astral](https://astralapp.com/) | Organize Your GitHub Stars With Ease |[Upstream](https://github.com/astralapp/astral)| | +| [Azuracast](https://https://azuracast.com/) | A Simple, Self-Hosted Web Radio Management Suite |[Upstream](https://github.com/AzuraCast/AzuraCast)| | +| [Baserow](https://baserow.io/) | Open source no-code database tool and Airtable alternative. | [Upstream](https://gitlab.com/bramw/baserow) | | +| [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) | | +| Blynk | | [Upstream](https://github.com/blynkkk/blynk-library) | | +| [Bolt](https://bolt.cm/) | Content Management Tool | | [Package Draft](https://github.com/realitygaps/bolt_ynh) | +| BookWyrm | Social reading and reviewing, decentralized with ActivityPub | [Upstream](https://github.com/mouse-reeve/bookwyrm) | | +| BTCPay Server | | [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) | | +| [Calendso](https://calendso.com/) | Volunteer shift management and meeting scheduling | [Upstream](https://github.com/calendso) | | +| [Caliopen](https://www.caliopen.org) | A unified inteface for all your private communications | | [Package Draft](https://github.com/YunoHost-Apps/caliopen_ynh) | +| [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) | | +| [CheckUp](https://sourcegraph.github.io/checkup) | | [Upstream](https://github.com/sourcegraph/checkup) | | +| [Citadel-suite](https://www.citadel.org) | Groupware platform | | | +| [CKAN](https://ckan.org/) | A tool for making open data websites | [Upstream](https://github.com/ckan/ckan) | | +| [CloudTube](https://tube.cadence.moe/) | CloudTube front-end for YouTube | [Upstream](https://git.sr.ht/~cadence/cloudtube) | | +| [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) | +| Commafeed | | [Upstream](https://github.com/Athou/commafeed) | | +| [Conduit](https://conduit.rs/) | Conduit is a lightweight open-source server implementation of the Matrix Specification with a focus on easy setup and low system requirements. | [Upstream](https://gitlab.com/famedly/conduit) | | +| cops | Calibre OPDS | | [Package Draft](https://github.com/YunoHost-Apps/cops_ynh) | +| [Coquelicot](https://coquelicot.potager.org/) | A “one-click” file sharing web application | | [Package Draft](https://github.com/YunoHost-Apps/coquelicot_ynh) | +| [Cozy](https://cozy.io/en/) | | | | +| Croodle | Vote for a schedule / polling | [Upstream](https://github.com/jelhan/croodle) | | +| [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) | | +| Django_app | Skeleton for django apps | | [Package Draft](https://github.com/Jojo144/django_app_ynh) | +| Docker_container | Deploy applications with Docker | | [Package Draft](https://github.com/scith/docker_container_ynh) | +| Docker_rstudio | A web development environment for statistics with R | | [Package Draft](https://github.com/scith/docker_rstudio_ynh) | +| Docker-registry | | [Upstream](https://github.com/docker/distribution/) | [Package Draft](https://github.com/plopoyop/docker-registry_ynh) | +| DockerUI | Deploy applications with Docker | | [Package Draft](https://github.com/YunoHost-Apps/dockerui_ynh) | +| Docspell | Simple document organizer | [Upstream](https://github.com/eikek/docspell) | | +| [DomainMOD](https://domainmod.org) | Domain portfolio management application | | | +| Dynette | Dynette is a dyndns server | [Upstream](https://github.com/YunoHost/dynette) | [Package Draft](https://github.com/YunoHost-Apps/dynette_ynh) | +| DrakonHub | Online editor for Drakon diagrams | [Upstream](https://github.com/stepan-mitkin/drakonhub) | | +| [eLabFTW](https://www.elabftw.net/) | Electronic lab notebook | [Upstream](https://github.com/elabftw/elabftw) | | +| [erine.email](https://erine.email/) | | [Upstream](https://gitlab.com/mdavranche/erine.email) | | +| [ERPnext](https://erpnext.com/) | | [Upstream](https://github.com/frappe/erpnext) | | +| [EteSync](https://www.etesync.com/) | | [Upstream](https://github.com/etesync) | | +| [Excalibur](https://excalibur-py.readthedocs.io/en/master/) | A web interface to extract tabular data from PDFs (based on Camelot) | [Upstream](https://github.com/camelot-dev/excalibur) | | +| Facette | | | [Package Draft](https://github.com/YunoHost-Apps/facette_ynh) | +| [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) | | +| [FilePizza](https://file.pizza/) | | [Upstream](https://github.com/kern/filepizza) | | +| [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) | +| [Gancio](https://gancio.org/) | | [Upstream](https://framagit.org/les/gancio) | | +| 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) | | +| gogs_webhost | Turn a Gogs repository to static web hosting | | [Package Draft](https://github.com/YunoHost-Apps/gogs_webhost_ynh) | +| Gollum | A simple Git-powered wiki | [Upstream](https://github.com/gollum/gollum) | [Package Draft](https://github.com/YunoHost-Apps/gollum_ynh) | +| Goploader | | [Upstream](https://github.com/Depado/goploader) | | +| Granary | | [Upstream](https://github.com/snarfed/granary) | | +| [Graphhopper](https://www.graphhopper.com/) | | [Upstream](https://github.com/graphhopper/graphhopper) | | +| [Greenlight](https://blabla.aquilenet.fr/b) | A really simple end-user interface for your BigBlueButton server | [Upstream](https://github.com/bigbluebutton/greenlight) | | +| [Habitica](https://habitica.com/) | | [Upstream](https://github.com/HabitRPG/habitica) | | +| headphones | Automatic music downloader | | [Package Draft](https://github.com/YunoHost-Apps/headphones_ynh) | +| 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) | | +| [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) | +| [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) | | +| [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) | | +| [Kill the newsletter](https://kill-the-newsletter.com/) | Convert email newsletters to RSS feeds | [Upstream](https://github.com/leafac/kill-the-newsletter.com) | | +| [Kiwix](https://www.kiwix.org/) | Offline Wikipedia or other sites | [Upstream](https://github.com/kiwix/) | | +| [Known](https://withknown.com) | | [Upstream](https://github.com/idno/known) | | +| [Koel](https://koel.phanan.net) | | [Upstream](https://github.com/phanan/koel) | | +| Kontalk | | [Upstream](https://github.com/kontalk) | | +| [Koozip](https://koozic.net) | | [Upstream](https://github.com/DocMarty84/koozic) | | +| L'atelier | | [Upstream](https://github.com/jbl2024/latelier) | | +| [LBCAlerte](https://alerte.ilatumi.org/) | | | [Package Draft](https://github.com/YunoHost-Apps/LBCAlerte_ynh) | +| lektor | A static website generator | | [Package Draft](https://github.com/YunoHost-Apps/lektor_ynh) | +| [LessPass](https://www.lesspass.com/) | | [Upstream](https://github.com/lesspass/lesspass) | | +| [Lessy](https://lessy.io) | | [Upstream](https://github.com/lessy-community/lessy) | | +| [LibreTranslate](https://libretranslate.com/) | Translation API | [Upstream](https://github.com/uav4geo/LibreTranslate) | | +[Libreddit](https://libredd.it/) | An alternative private front-end to Reddit | [Upstream](https://github.com/spikecodes/libreddit) | | +| [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) | | +| linuxdash | Low-overhead monitoring web dashboard | [Upstream](https://github.com/afaqurk/linux-dash) | [Package Draft](https://github.com/YunoHost-Apps/linuxdash_ynh) | +| [LiquidSoap](https://www.liquidsoap.info/) | Audio and video streaming language | [Upstream](https://github.com/savonet/liquidsoap) | | +| [listmonk](https://listmonk.app) | Self-hosted newsletter & mailing list manager | [Upstream](https://github.com/knadh/listmonk) | | +| 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) | | +| [Mailpile](https://www.mailpile.is) | | [Upstream](https://github.com/mailpile/Mailpile) | | +| [Mailtrain](https://mailtrain.org/) | | [Upstream](https://github.com/Mailtrain-org/mailtrain) | | +| mediadrop | Video Platform | | [Package Draft](https://github.com/YunoHost-Apps/mediadrop_ynh) | +| [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) | | +| [medusa](https://pymedusa.com/) | Automatic TV shows downloader | | [Package Draft](https://github.com/guigot/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) | | +| [Mirakel](https://mirakel.azapps.de/taskwarrior.html) | | [Upstream](https://github.com/GothenburgBitFactory/taskwarrior) | | +| modernpaste | A modern, feature-rich Pastebin alternative | [Upstream](https://github.com/LINKIWI/modern-paste) | [Package Draft](https://github.com/YunoHost-Apps/modernpaste_ynh) | +| [Modoboa](https://modoboa.org) | | [Upstream](https://github.com/modoboa/) | | +| [MongoPassion](https://mongopassion.24eme.fr/demo/) | Web-based project for management of MongoDB databases | [Upstream](https://github.com/24eme/MongoPassion) | | +| [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) | +| munin | Resource monitoring tool | | [Package Draft](https://github.com/YunoHost-Apps/munin_ynh) | +| Museek+ | | [Upstream](https://github.com/eLvErDe/museek-plus) | | +| mycryptochat | Encrypted IM | | [Package Draft](https://github.com/mrtino/mycryptochat_ynh) | +| mx-puppet-discord | A bridge between Matrix and Discord | [Upstream](https://github.com/matrix-discord/mx-puppet-discord) | | +| [Nautilus](https://myactivity.stream/) | Turn your website into an ActivityPub profile | [Upstream](https://github.com/aaronpk/Nautilus) | | +| Netrunner | | [Upstream](https://github.com/mtgred/netrunner) | | +| nexusoss | Sonatype Nexus Repository manager OSS | | [Package Draft](https://github.com/YunoHost-Apps/nexusoss_ynh) | +| NocoDB | Airtable alternative / turn any SQL db into a smart spreadsheet | [Upstream](https://github.com/nocodb/nocodb) | | +| [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) | | +| [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) | +| openproject | | [Upstream](https://github.com/opf/openproject) | [Package Draft](https://github.com/moutonjr/openproject_ynh) | +| OpenSourceBilling | | [Upstream](https://github.com/vteams/open-source-billing) | | +| [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/) | | +| [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-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) | | +| 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) | +| [PicApport](https://www.picapport.de/) | Self-hosted private photo server | | | +| Pico | | [Upstream](https://github.com/picocms/Pico) | | +| [Pinry](https://docs.getpinry.com/) | Open source tiling image board | [Upstream](https://github.com/pinry/pinry/) | | +| 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) | +| [Prosody](https://prosody.im/) | Prosody is a server for Jabber/XMPP written in Lua. It aims to be easy to use and light on resources |[Upstream](https://hg.prosody.im/)| | +| 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) | +| [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) | | +| [racktables](https://racktables.org) | | [Upstream](https://github.com/RackTables/racktables) | | +| Race for the galaxy | | [Upstream](https://github.com/bnordli/rftg) | | +| Redash | Connect to any data source, easily visualize, dashboard and share your data. | [Upstream](https://github.com/getredash/redash) | | +| [redmine](https://www.redmine.org/) | A flexible project management web application | | [Package Draft](https://github.com/YunoHost-Apps/redmine_ynh) | +| 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) | | +| [roadiz](https://www.roadiz.io) | Create a modern website | | [Package Draft](https://github.com/YunoHost-Apps/roadiz_ynh) | +| rs-short | An URL shortener | [Upstream](https://git.42l.fr/42l/rs-short) | | +| RSS-proxy | RSS-proxy allows you to do create an RSS or ATOM feed of almost any website, just by analyzing just the static HTML structure. | [Upstream](https://github.com/damoeb/rss-proxy) | | +| RSSHub | open source, easy to use, and extensible RSS feed generator. It's capable of generating RSS feeds from pretty much everything | [Upstream](https://github.com/DIYgod/RSSHub) | | +| [rspamdui](https://rspamd.com/webui) | A web UI for the Rspamd spam filtering system | | [Package Draft](https://github.com/YunoHost-Apps/rspamdui_ynh) | +| [RustDesk](https://rustdesk.com/server 'RustDesk Server') | [TeamViewer](https://teamviewer.com) alternative | [Upstream](https://github.com/rustdesk/rustdesk-server 'RustDesk Server on GitHub') | | +| 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) | +| [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) | +| [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 within 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) | | +| 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) | | +| [smokeping](https://oss.oetiker.ch/smokeping/) | | [Upstream](https://github.com/oetiker/SmokePing) | | +| [SocialHome](https://socialhome.network) | A federated personal profile | [Upstream](https://github.com/jaywink/socialhome) | | +| [sonerezh](https://www.sonerezh.bzh) | Stream music from everywhere | | [Package Draft](https://github.com/YunoHost-Apps/sonerezh_ynh) | +| 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) | | +| [Storj](https://www.storj.io/node) | | [Upstream](https://github.com/storj/storj) | | +| Streisand | | [Upstream](https://github.com/jlund/streisand) | | +| 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) | | +| [Technitium DNS](https://technitium.com/dns/) | | [Upstream](https://github.com/TechnitiumSoftware/DnsServer) | | +| [teddit](https://teddit.net/) | Alternative Reddit front-end focused on privacy | [Upstream](https://codeberg.org/teddit/teddit) | | +| [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) | | +| torrelay | | | [Package Draft](https://github.com/matlink/torrelay_ynh) | +| Tracim | | [Upstream](https://github.com/tracim/tracim) | | +| Traccar | Modern GPS Tracking Platform | [Upstream](https://github.com/traccar/traccar) | | +| transpay | Interface to receive and manage donations with Stripe | | [Package Draft](https://github.com/YunoHost-Apps/transpay_ynh) | +| transwhat | A gateway to WhatsApp from Jabber | | [Package Draft](https://github.com/Josue-T/transwhat_ynh) | +| [Tryton](https://www.tryton.org/) | A solid ERP system | | | +| [turtl](https://turtlapp.com/) | A secure collaboratite notebook | | [Package Draft](https://github.com/YunoHost-Apps/turtl_ynh) | +| tutao | End-to-end encrypted e-mail client | [Upstream](https://github.com/tutao/tutanota/) | [Package Draft](https://github.com/YunoHost-Apps/tutao_ynh) | +| [Twake](https://twake.app/fr)| All of the organizational tools you need to make your projects succeed brought together on one platform.| | | +| Twister | | [Upstream](https://github.com/miguelfreitas/twister-core/) | | +| [TwitRSS.me](https://twitrss.me/) | Create RSS feeds from Twitter | [Upstream](https://github.com/ciderpunx/twitrssme) | | +| [ultrasonics](https://github.com/XDGFX/ultrasonics) | Sync music playlists between all your music services: Spotify, Deezer, Apple Music, Plex, etc. | [Upstream](https://github.com/XDGFX/ultrasonics) | | +| [umap](https://umap.openstreetmap.fr/) | Cartography software | | [Package Draft](https://github.com/YunoHost-Apps/umap_ynh) | +| [unbound](https://nlnetlabs.nl/projects/unbound/about/) | | | [Package Draft](https://github.com/YunoHost-Apps/unbound_ynh) | +| [upmpdcli](https://www.lesbonscomptes.com/upmpdcli/) | | [Upstream](https://framagit.org/medoc92/upmpdcli) | | +| [Uwazi](https://www.uwazi.io/) | | [Upstream](https://github.com/huridocs/uwazi) | | +| [Volumio](https://volumio.org) | | [Upstream](https://github.com/volumio) | | +| [vpnserver](https://openvpn.net) | Create/provide VPNs from your server | | [Package Draft](https://github.com/YunoHost-Apps/vpnserver_ynh) | +| [Webhook.site](https://docs.webhook.site/) | | [Upstream](https://github.com/fredsted/webhook.site) | | +| [WebODF](https://webodf.org) | | [Upstream](https://github.com/webodf/WebODF) | | +| 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/) | | +| Whoogle | A metasearch engine | [Upstream](https://github.com/benbusby/whoogle-search) | | +| [wildfly](https://wildfly.org) | | | [Package Draft](https://github.com/YunoHost-Apps/wildfly_ynh) | +| Wisemapping | An online mind mapping editor | [Upstream](https://bitbucket.org/wisemapping/wisemapping-open-source) | [Package Draft](https://github.com/YunoHost-Apps/wisemapping_ynh) | +| WildDuck | Opinionated email server | [Upstream](https://github.com/nodemailer/wildduck) | | +| WorkAdventure | A web-based collaborative workspace for small to medium teams | [Upstream](https://github.com/thecodingmachine/workadventure) | | +| [xBrowserSync](https://www.xbrowsersync.org/) | A self-hosted bookmark sync tool, with browser plugins and mobile clients available | [Upstream](https://github.com/xbrowsersync/api) | | +| Xibo | A FLOSS digital signage solution | [Upstream](https://github.com/xibosignage) | | +| [Xonotic](https://xonotic.org) | | [Upstream](https://gitlab.com/xonotic) | | +| 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) | | +| [Zulip](https://zulipchat.com/) | | [Upstream](https://github.com/zulip/zulip) | | +| Zusam | A truly private space for you and your friends | [Upstream](https://github.com/zusam/zusam) | [Package Draft](https://github.com/zusam/zusam_ynh) | + +### Other references listing self-hosted applications + +- [List of awesome selfhosted apps](https://github.com/Kickball/awesome-selfhosted) +- [List of awesome sysadmin apps](https://github.com/kahun/awesome-sysadmin) +- [List of awesome Node.js projects](https://github.com/sqreen/awesome-nodejs-projects) +- [List of SIP softwares/applications](https://en.wikipedia.org/wiki/List_of_SIP_software#Free_and_open-source_license) +- [Awesomeopensource.com](https://awesomeopensource.com) : topic-based list of open source projects sorted by github-stars diff --git a/pages/03.community/01.forum/forum.fr.md b/pages/03.community/01.forum/forum.fr.md new file mode 100644 index 00000000..8bd374e9 --- /dev/null +++ b/pages/03.community/01.forum/forum.fr.md @@ -0,0 +1,5 @@ +--- +title: Forum +template: docs +redirect: 'https://forum.yunohost.org/tag/fr' +--- diff --git a/pages/03.community/01.forum/forum.md b/pages/03.community/01.forum/forum.md new file mode 100644 index 00000000..6a686595 --- /dev/null +++ b/pages/03.community/01.forum/forum.md @@ -0,0 +1,5 @@ +--- +title: Forum +template: docs +redirect: 'https://forum.yunohost.org/tag/en' +--- diff --git a/pages/03.community/02.chat_rooms/chat_rooms.es.md b/pages/03.community/02.chat_rooms/chat_rooms.es.md new file mode 100644 index 00000000..d1ff3135 --- /dev/null +++ b/pages/03.community/02.chat_rooms/chat_rooms.es.md @@ -0,0 +1,46 @@ +--- +title: Salas de chat +template: docs +taxonomy: + category: docs +routes: + default: '/chat_rooms' +--- + +El proyecto YunoHost utiliza salas de chat como medio de communicación. + +Puede unirse a una sala de chat utilizando : +- un [cliente IRC](https://es.wikipedia.org/wiki/Anexo:Clientes_IRC) por ejemplo [KiwiIRC](https://web.libera.chat/#yunohost) +- un [cliente XMPP](https://es.wikipedia.org/wiki/Anexo:Comparaci%C3%B3n_de_clientes_de_mensajer%C3%ADa_instant%C3%A1nea) +- un [cliente Matrix](https://matrix.org/docs/guides/faq.html#what-clients-are-available%3F) + + +#### Sala de chat de ayuda y soporte + +Existen salas publicas de chat de [soporte](/help) y ayuda para YunoHost: +- IRC: **#yunohost** on libera.chat ; +- Matrix: **[#yunohost:libera.chat](https://matrix.to/#/#yunohost:libera.chat)** ; +- XMPP: **[support@conference.yunohost.org](xmpp:support@conference.yunohost.org?join)** + +#### sala de chat para desarrolladores + +Salas de chat para el desarollo de YunoHost: +- IRC: **#yunohost-dev** on libera.chat ; +- Matrix: **#[yunohost-dev:matrix.org](https://matrix.to/#/#yunohost-dev:libera.chat)** ; +- XMPP: **[dev@conference.yunohost.org](xmpp:dev@conference.yunohost.org?join)** + +Actualmente, la sala principal de chat para contribuciones en YunoHost +Para mas ayuda, vea la sala de chat **#yunohost** encima. + +#### Sala de chat para las integración de aplicaciones +Estos permite la ayuda mutua para los integradores de aplicaciones y también para conversar de evoluciones et de herramientas de integración continua. +- IRC: **#yunohost-apps** en libera.chat +- Matrix: **[#yunohost-apps:matrix.org](https://matrix.to/#/#yunohost-apps:matrix.org)** +- XMPP: **[apps@conference.yunohost.org](xmpp:apps@conference.yunohost.org?join)** + +#### Sala de chat de Documentación +Lugar donde la comunidad conversa sincroniza y mantiene actualisado la documentación en los aspectos varios como (backend, frontend, apps, proyecto, comunidad...) +Puede tambien compartir sus materiales sobre YunoHost (videos, presentaciones, etc.). +- IRC: **#yunohost-doc** on libera.chat +- Matrix: **[#yunohost-doc:matrix.org](https://matrix.to/#/#yunohost-doc:matrix.org)** +- XMPP: **[doc@conference.yunohost.org](xmpp:doc@conference.yunohost.org?join)** diff --git a/chat_rooms_fr.md b/pages/03.community/02.chat_rooms/chat_rooms.fr.md similarity index 58% rename from chat_rooms_fr.md rename to pages/03.community/02.chat_rooms/chat_rooms.fr.md index e382d234..0c741173 100644 --- a/chat_rooms_fr.md +++ b/pages/03.community/02.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) +Vous pouvez rejoindre ces salons avec : +- un [Client IRC](https://fr.wikipedia.org/wiki/Liste_de_clients_IRC) par exemple [KiwiIRC](https://web.libera.chat/#yunohost) - un [Client XMPP](https://fr.wikipedia.org/wiki/Clients_XMPP) - un [Client Matrix](https://linuxfr.org/news/matrix-pour-decentraliser-skype-whatsapp-signal-slack-et-discord) #### Salon d'entraide et de support Le salon d’[entraide](/help) est là pour permettre aux utilisateurs de YunoHost de s'aider mutuellement. -- IRC : **#yunohost** sur irc.freenode.net (voir kiwiirc ci-dessus) -- Matrix : **#freenode_#yunohost:matrix.org** +- IRC : **#yunohost** sur libera.chat (voir KiwiIRC ci-dessus) +- Matrix : **[#yunohost:libera.chat](https://matrix.to/#/#yunohost:libera.chat)** - 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** +Salon de développement du cœur de YunoHost : +- IRC : **#yunohost-dev** sur libera.chat +- Matrix : **[#yunohost-dev:matrix.org](https://matrix.to/#/#yunohost-dev:matrix.org)** - XMPP : **[dev@conference.yunohost.org](xmpp:dev@conference.yunohost.org?join)** C'est le salon principal pour les contributions autour du projet. @@ -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** -- XMPP: **[doc@conference.yunohost.org](xmpp:doc@conference.yunohost.org?join)** +Le salon de documentation du projet YunoHost. Il permet aux contributeurs d'échanger, pour synchroniser et maintenir une documentation à jour sur les différents aspects du projet : backend, frontend, apps, projet, communauté... +Vous pouvez aussi y partager vos communications au public à propos de YunoHost (présentations, vidéos...) pour permettre leur référencement dans la documentation. +- IRC : **#yunohost-doc** sur libera.chat +- Matrix : **[#yunohost-doc:matrix.org](https://matrix.to/#/#yunohost-doc:matrix.org)** +- XMPP : **[doc@conference.yunohost.org](xmpp:doc@conference.yunohost.org?join)** diff --git a/chat_rooms.md b/pages/03.community/02.chat_rooms/chat_rooms.md similarity index 51% rename from chat_rooms.md rename to pages/03.community/02.chat_rooms/chat_rooms.md index 2ac36abf..4a9b56ad 100644 --- a/chat_rooms.md +++ b/pages/03.community/02.chat_rooms/chat_rooms.md @@ -1,42 +1,49 @@ -## 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) +You could join those chat rooms using: +- an [IRC Client](https://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients) for example [KiwiIRC](https://web.libera.chat/#yunohost) - an [XMPP client](https://en.wikipedia.org/wiki/Comparison_of_instant_messaging_clients) - a [Matrix client](https://matrix.org/docs/guides/faq.html#what-clients-are-available%3F) -#### Help and support chatroom +#### Help and support chat room -There is a [support](/help) chatroom for YunoHost users mutual support and help. +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:libera.chat](https://matrix.to/#/#yunohost:libera.chat)** - XMPP: **[support@conference.yunohost.org](xmpp:support@conference.yunohost.org?join)** -#### Development chatroom +#### Development chat room -YunoHost core development chat room : -- IRC: **#yunohost-dev** on irc.freenode.net ; -- Matrix: **#freenode_#yunohost-dev:matrix.org** ; +YunoHost core development chat room: +- IRC: **#yunohost-dev** on libera.chat +- Matrix: **[#yunohost-dev:matrix.org](https://matrix.to/#/#yunohost-dev:matrix.org)** - XMPP: **[dev@conference.yunohost.org](xmpp:dev@conference.yunohost.org?join)** Currently, the main chat room for contributions on YunoHost project. For help, please see **#yunohost** chat room above. -#### Applications chatroom +#### 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** +It also allow to discuss packaging evolution, continuous integration tools: +- IRC: **#yunohost-apps** on libera.chat +- Matrix: **[#yunohost-apps:matrix.org](https://matrix.to/#/#yunohost-apps:matrix.org)** - XMPP: **[apps@conference.yunohost.org](xmpp:apps@conference.yunohost.org?join)** -#### Documentation chatroom -Yunohost project documentation chat room. It allow people to discuss, synchronize and maintain +#### 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** +You may also share here your public communications about YunoHost (videos, presentations, etc.), to allow proper referencing. +- IRC: **#yunohost-doc** on libera.chat +- Matrix: **[#yunohost-doc:matrix.org](https://matrix.to/#/#yunohost-doc:matrix.org)** - XMPP: **[doc@conference.yunohost.org](xmpp:doc@conference.yunohost.org?join)** diff --git a/help_ar.md b/pages/03.community/03.help/help.ar.md similarity index 57% rename from help_ar.md rename to pages/03.community/03.help/help.ar.md index a3d8951e..c32e4c5c 100644 --- a/help_ar.md +++ b/pages/03.community/03.help/help.ar.md @@ -1,33 +1,37 @@ -# <div dir=rtl>هل تبحث عن مساعدة ؟</div> +--- +title: هل تبحث عن مساعدة +template: docs +taxonomy: + category: docs +routes: + default: '/help' +--- + +<h3>إتصل بغرفة المساعدة</h3> + +!!! **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. +!!! - لا تطرح سؤالا لمُجرّد الطرح، بل إطرح سؤالك ! +!!! - تحلّى بالصبر، في بعض الأحيان يمكن أن تمر بضع دقائق قبل أن يرى أحد المستخدمين سؤالك. -<h3 dir="rtl">إتصل بغرفة المساعدة</h3> <center> -<div class="alert alert-info" markdown="1" style="max-width:700px;"> -<strong>ProTips™</strong> -<ul dir="rtl" style="text-align:right;"> -<li>لا تطرح سؤالا لمُجرّد الطرح، بل إطرح سؤالك !</li> -<li><em>تحلّى بالصبر</em>، في بعض الأحيان يمكن أن تمر بضع دقائق قبل أن يرى أحد المستخدمين سؤالك.</li> -</ul> -</div> -<div dir="rtl"><strong>الإسم المستعار</strong> : <input id="nickname" value="ynhuser__" type="text"> -</div> -<iframe src="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=ynhuser|?&theme=mini#yunohost" style="border:0; width:100%; height:450px;"></iframe> +<strong>الإسم المستعار</strong> : <input id="nickname" value="ynhuser__" type="text"> + +<iframe src="https://web.libera.chat/#yunohost" style="border:0; width:100%; height:450px;"></iframe> </br> </br> -<div dir="rtl"> <em>ملاحظة : يمكن الإتصال كذلك بغرفة المحادثة باستخدام تطبيق XMPP الخاص بك على العنوان التالي </br> support@conference.yunohost.org </br> -<a target="_blank" href="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=ynhuser|?&theme=mini#yunohost">kiwiirc</a> باستخدام freenode على #yunohost IRC أو </br> -<a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">Riot</a> باستخدام Matrix أو </br> +<a target="_blank" href="https://web.libera.chat/#yunohost">kiwiirc</a> باستخدام libera.chat على #yunohost IRC أو </br> +<a target="_blank" href="https://riot.im/app/#/room/#yunohost:libera.chat">Riot</a> باستخدام Matrix أو </br> </em> -</div> </center> -<h3 dir="rtl">... أو إطرح سؤالك في المنتدى !</h3> +<h3>... أو إطرح سؤالك في المنتدى !</h3> -<div dir="rtl"> <center> <button id="goForum" type="button" class="btn btn-success" style="font-weight:bold;"> <span class="glyphicon glyphicon-comment"></span> إنتقل إلى المنتدى @@ -39,7 +43,6 @@ support@conference.yunohost.org </br> <center> <br> <em>يرجى الإبلاغ عن المشاكل على أداة متعقّب الأخطاء الخاصة بالمشروع أو إتصل بالمطوّرين</em><br><br> -</div> <button id="goBugtracker" type="button" class="btn btn-warning" style="font-weight:bold;"> <span class="glyphicon glyphicon-exclamation-sign"></span> أبلِغ عن عِلّة أو خلل </button> @@ -50,7 +53,6 @@ support@conference.yunohost.org </br> </br> </br> <center> -<div dir="rtl"> <em>ملاحظة : يمكن الإتصال كذلك بغرفة التطوير باستخدام تطبيق XMPP الخاص بك على العناوين التالية </br> dev@conference.yunohost.org and apps@conference.yunohost.org</em> </center> @@ -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"; } </script> diff --git a/pages/03.community/03.help/help.fr.md b/pages/03.community/03.help/help.fr.md new file mode 100644 index 00000000..2851b8fa --- /dev/null +++ b/pages/03.community/03.help/help.fr.md @@ -0,0 +1,43 @@ +--- +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. + +[center] +<iframe src="https://kiwiirc.com/nextclient/?settings=d7be8b3b102382f81da862419a65c9b1" style="width:100%;height:450px;border:0;display:block"></iframe> +[/center] + +!!! **Note:** ce salon est accessible via +!!! - Matrix (`#yunohost:libera.chat` [en utilisant Element](https://app.element.io/#/room/#yunohost:libera.chat)) +!!! - 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/03.community/03.help/help.it.md similarity index 59% rename from help_it.md rename to pages/03.community/03.help/help.it.md index 44f28eda..4c3bc1e8 100644 --- a/help_it.md +++ b/pages/03.community/03.help/help.it.md @@ -1,20 +1,25 @@ -# Cerchi aiuto? +--- +title: Cerchi aiuto? +template: docs +taxonomy: + category: docs +routes: + default: '/help' +--- <h3>Connettiti alla chat di supporto</h3> + +!!! **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. + <center> -<div class="alert alert-info" markdown="1" style="max-width:700px;"> -<strong>ProTips�</strong> -<ul style="text-align:left;"> -<li>Non chiedere tanto per chiedere, chiedi e basta !</li> -<li><em>Sii paziente</em>, potrebbero servire alcuni minuti prima che qualcuno veda i tuoi messaggi.</li> -</ul> -</div> -<iframe src="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=ynhuser|?&theme=mini#yunohost" style="border:0; width:100%; height:450px;"></iframe> +<iframe src="https://web.libera.chat/#yunohost" style="width:100%;height:450px;border:0;display:block"></iframe> </br> </br> -<em>Nota : questa stanza e disponibile via IRC (#yunohost su freenode - <a href="https://kiwiirc.com/client/irc.freenode.org:+6697/?nick=ynhuser|?&theme=mini#yunohost">usando kiwiirc</a>), via XMPP <small>(support@conference.yunohost.org)</small>, o Matrix <small>(#freenode_#yunohost:matrix.org - <a target="_blank" href="https://riot.im/app/#/room/#yunohost:matrix.org">usando Riot</a>)</small></em> +<em>Nota : questa stanza e disponibile via IRC (#yunohost su libera.chat - <a href="https://web.libera.chat/#yunohost">usando kiwiirc</a>), via XMPP <small>(support@conference.yunohost.org)</small>, o Matrix <small>(#yunohost:libera.chat - <a target="_blank" href="https://riot.im/app/#/room/#yunohost:libera.chat">usando Riot</a>)</small></em> </center> <h3>... o chiedi nel forum !</h3> @@ -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"; } </script> diff --git a/pages/03.community/03.help/help.md b/pages/03.community/03.help/help.md new file mode 100644 index 00000000..c06f6d3e --- /dev/null +++ b/pages/03.community/03.help/help.md @@ -0,0 +1,43 @@ +--- +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. + +[center] +<iframe src="https://kiwiirc.com/nextclient/?settings=d7be8b3b102382f81da862419a65c9b1" style="width:100%;height:450px;border:0;display:block"></iframe> +[/center] + +!!! **Note:** this room is available via +!!! - Matrix (`#yunohost:libera.chat` [using Element](https://riot.im/app/#/room/#yunohost:libera.chat?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/03.community/04.faq/faq.de.md similarity index 86% rename from faq_de.md rename to pages/03.community/04.faq/faq.de.md index a2640231..5a066f24 100644 --- a/faq_de.md +++ b/pages/03.community/04.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 ? @@ -20,11 +27,11 @@ Wir bieten eine Software an, die es für jeden möglichst einfach machen soll, e #### Aber was *macht* YunoHost überhaupt ? -YunoHost könnte einen Distribution oder ein Betriebssystem genannt werden, aber es ist eigentlich "nur" eine Ebene, die über Debian betrieben wird und welche die meiste, schwierige Arbeit für Sie übernimmt. +YunoHost könnte eine Distribution oder ein Betriebssystem genannt werden, aber es ist eigentlich "nur" eine Ebene, die über Debian betrieben wird und welche die meiste, schwierige Arbeit für Sie übernimmt. -Zum Beispiel, wenn Sie Wordpress installieren möchten, müssten Sie einige Befehle eintippen, um Benutzer zu generieren, einen Webserver einrichten, einen SQL Server einrichten, das Wordpress Archiv herunterladen, entpacken, den Webserver kofigurieren, 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. +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 ? @@ -102,7 +109,7 @@ Mittellange Antwort: Früher wurden die Apps in .deb gepackt. Was für ein Albtr <p>Es hat sich herausgestellt, dass das Packen für YunoHost einen leicht anderen Zweck erfüllt als das Erstellen klassischer Pakete wie .deb. Debian Pakete haben nur den Anspruch Dateien, Befehle, Programme und Dienste auf dem System zu installieren. Es bleibt oft an Ihnen diese richtig zu konfigurieren, weil es einfach keinen standardisierte Server-Konfiguration gibt. Typischerweise erfordern Web-Apps einen sehr hohen Konfigurationsaufwand, weil sie auf dem Webserver und einer Datenbank (und dem single sign-on) aufbauen.</p> -<p>YunoHost richtet Konzepte auf höchster Ebene ein (Apps, Domain-Namen, Benutzer, ...) und definiert eine standardmäßige Einrichtung (Nginx, Postfix, Metronome, SSOwat, ...) und kann deshalb die Konfiguration für den Anwender übernehmen.</p> +<p>YunoHost richtet Konzepte auf höchster Ebene ein (Apps, Domain-Namen, Benutzer...) und definiert eine standardmäßige Einrichtung (NGINX, Postfix, Metronome, SSOwat...) und kann deshalb die Konfiguration für den Anwender übernehmen.</p> <p>Wer trotzdem glaubt, man könne deb Pakete dazu bringen, all dies zu leisten, möge sich die vorherige Antwort anschauen.</p> </div> diff --git a/faq_fr.md b/pages/03.community/04.faq/faq.fr.md similarity index 77% rename from faq_fr.md rename to pages/03.community/04.faq/faq.fr.md index 5b9d49ca..6aa06f9c 100644 --- a/faq_fr.md +++ b/pages/03.community/04.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 ? @@ -11,36 +18,26 @@ Les applications et leurs paquets ont leurs licences respectives. #### Quel est l’objectif de YunoHost ? -Nous pensons que la décentralisation d’Internet, et la reprise du contrôle et -de la responsabilité des données et services par les citoyens est un enjeu -crucial pour garantir une société libre et démocratique. +Nous pensons que la décentralisation d’Internet, et la reprise du contrôle et de la responsabilité des données et services par les citoyens est un enjeu crucial pour garantir une société libre et démocratique. Le projet YunoHost cherche à démocratiser l’auto-hébergement. -Nous fournissons un logiciel qui cherche à rendre simple le fait de gérer et -d’administrer un serveur soi-même, en minimisant les compétences et le temps -requis. +Nous fournissons un logiciel qui cherche à rendre simple le fait de gérer et d’administrer un serveur soi-même, en minimisant les compétences et le temps requis. #### Mais qu’est-ce que ça fait *vraiment* ? -YunoHost peut être appelé une distribution ou un système d’exploitation, mais -dans les faits, c’est une « simple » sur-couche à Debian, qui gère les -manipulations pénibles à votre place. +YunoHost peut être appelé une distribution ou un système d’exploitation, mais dans les faits, c’est une « simple » sur-couche à Debian, qui gère les manipulations pénibles à votre place. -Par exemple, pour installer un WordPress à la main, il vous faudrait taper -toute une série de commandes pour créer des utilisateurs, mettre en place un -serveur web, mettre en place un serveur SQL, télécharger l’archive de WordPress, -la décompresser, configurer le serveur web, configurer la base de données SQL, et finalement configurer WordPress. YunoHost gère toute cette partie technique et « tape les commandes à votre place », pour que vous puissiez vous concentrer sur ce qui compte vraiment. +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 ? Oui ! Il faut regarder du côté de [cette app](https://github.com/YunoHost-Apps/my_webapp_ynh). -Elle fournit une « coquille vide » : après l’installation, il suffit d’envoyer vos fichiers (via SSH/SCP ou SFTP) au bon endroit. Il est aussi possible -d’avoir du PHP et une base de donnée SQL si besoin. +Elle fournit une « coquille vide » : après l’installation, il suffit d’envoyer vos fichiers (via SSH/SCP ou SFTP) au bon endroit. Il est aussi possible d’avoir du PHP et une base de donnée SQL si besoin. #### Peut-on héberger plusieurs sites indépendants avec des noms de domaines différents ? @@ -72,21 +69,15 @@ 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 ! -Une idée répandue parmi les nouveaux contributeurs aux logiciels libres est -de ne pas être « assez compétent ». En pratique, croyez-le, personne n’est -compétent :). Ce qui compte vraiment est : [d’aimer ce que vous faites](https://www.youtube.com/watch?v=zIbR5TAz2xQ&t=113s), -être sympathique avec les autres êtres humains du projet, être patient et têtu -avec les machines, et avoir du temps libre. À part ça, juste faire ce que vous -pouvez, c’est déjà trop cool ! - +Une idée répandue parmi les nouveaux contributeurs aux logiciels libres est de ne pas être « assez compétent ». En pratique, croyez-le, personne n’est compétent :). Ce qui compte vraiment est : [d’aimer ce que vous faites](https://www.youtube.com/watch?v=zIbR5TAz2xQ&t=113s), être sympathique avec les autres êtres humains du projet, être patient et têtu avec les machines, et avoir du temps libre. À part ça, juste faire ce que vous pouvez, c’est déjà trop cool ! #### 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] ? @@ -115,7 +106,7 @@ Réponse moyenne : Par le passé, les apps étaient gérées via des .deb. C’ <p>Il se trouve que l’objectif des paquets d’application YunoHost est subtilement différent de celui des paquets traditionnels (comme les .deb de Debian) qui remplissent le rôle d’installer des éléments bas-niveau tels que des fichiers, commandes, programmes ou services sur le système. Il est à la charge de l’administrateur de les configurer ensuite proprement, simplement parce qu’il n’existe pas d’environnement standard. Typiquement, les applications web requièrent beaucoup de configuration car elles ont besoin de s’interfacer avec un serveur web et une base de données (et le système de connexion unique / SSO).</p> -<p>YunoHost manipule des abstractions haut-niveau (apps, domaines, utilisateurs…) et définit un environnement standard (Nginx, Postfix, Metronome, SSOwat…) et, grâce à cela, peut gérer la configuration à la place de l’administrateur.</p> +<p>YunoHost manipule des abstractions haut-niveau (apps, domaines, utilisateurs…) et définit un environnement standard (NGINX, Postfix, Metronome, SSOwat...) et, grâce à cela, peut gérer la configuration à la place de l’administrateur.</p> <p>Si vous restez persuadé que l’on peut néanmoins bricoler les paquets .deb pour gérer tout cela, voir les réponses précédentes.</p> </div> diff --git a/faq.md b/pages/03.community/04.faq/faq.md similarity index 66% rename from faq.md rename to pages/03.community/04.faq/faq.md index 48517168..1cc353ff 100644 --- a/faq.md +++ b/pages/03.community/04.faq/faq.md @@ -1,5 +1,11 @@ -# Frequently Asked Questions - +--- +title: Frequently Asked Questions +template: docs +taxonomy: + category: docs +routes: + default: '/faq' +--- #### Under which license is YunoHost distributed? @@ -12,38 +18,24 @@ Applications and applications packages have their own licenses. #### What's YunoHost goal? -We believe that decentralizing the Internet, and empowering people to take control and -responsibility back over their own data and services, is a crucial issue to guarantee -a free and democratic society. +We believe that decentralizing the Internet, and empowering people to take control and responsibility back over their own data and services, is a crucial issue to guarantee a free and democratic society. The YunoHost project aims to democratize self-hosting. -It provides a software that aims to make it easy for people to run and -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*? -YunoHost may be called a distribution or an operating system, but it's actually -"just" a simple layer added over the top of Debian, which does most of the hard -work for you. +YunoHost may be called a distribution or an operating system, but it's actually "just" a simple layer added over the top of Debian, which does most of the hard work for you. -For instance, if you wanted to install Wordpress, you would need to type a bunch -of commands to create some users, setup a web server, setup a SQL server, -download the Wordpress archive, uncompress it, configure the web server, -configure the SQL database, and finally configure Wordpress. YunoHost handles -the technical details and "types all these commands for you", so that you can focus -on what really matters. +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? -Yes! Have a look at the [Custom Web app](https://github.com/YunoHost-Apps/my_webapp_ynh). -It provides an "empty shell" : after installing it, just upload your files -(via SSH/SCP or SFTP) to the right location. You can have PHP and a SQL database -if you need. - +Yes! Have a look at the [Custom Web app](https://github.com/YunoHost-Apps/my_webapp_ynh). It provides an "empty shell" : after installing it, just upload your files (via SSH/SCP or SFTP) to the right location. You can have PHP and a SQL database if you need. #### Can I host many independent websites with different domain names? @@ -57,45 +49,34 @@ The [SSO](https://github.com/Kloadut/SSOwat/) (single sign-on) cannot properly a #### What's YunoHost's business model? -At the moment, YunoHost is maintained only by volunteers working in their free -time. Basically no money is involved in the project (apart from server fees -or stickers :P). +At the moment, YunoHost is maintained only by volunteers working in their free time. Basically no money is involved in the project (apart from server fees or stickers :P). -Considering that a few contributors are investing a large amount of time in the -project, we are thinking about ways to make the project sustainable. +Considering that a few contributors are investing a large amount of time in the project, we are thinking about ways to make the project sustainable. -This could be achieved via donations, grants, and a few contributors -have professional activities related to YunoHost. +This could be achieved via donations, grants, and a few contributors have professional activities related to YunoHost. #### Can I donate to the project? -Yes, you can! YunoHost needs money to pay servers and domain names. We would -also like contributors to be able to continue contributing rather than look for -jobs elsewhere. +Yes, you can! YunoHost needs money to pay servers and domain names. We would also like contributors to be able to continue contributing rather than look for jobs elsewhere. You can donate using [our donation interface](https://donate.yunohost.org) -If you can, you can also make in-kind contributions, like servers (some of our -infrastructure relies on servers from a few associations). +If you can, you can also make in-kind contributions, like servers (some of our infrastructure relies on servers from a few associations). #### How can I contribute to the project? -There are [many ways to contribute](contribute) :). +There are [many ways to contribute](/contribute) :). Don't hesitate to come talk to us about your ideas! -A common misconception for newcomers in free software projects is to think that -they are "not skilled enough". In practice, nobody is "skilled" :). What really -matter is : [liking what you do](https://www.youtube.com/watch?v=zIbR5TAz2xQ&t=113s), -being friendly with other human beings, being patient and stubborn with machines, -and having some free time. Other than that, just doing what you can is already awesome! +A common misconception for newcomers in free software projects is to think that they are "not skilled enough". In practice, nobody is "skilled" :). What really matter is: [liking what you do](https://www.youtube.com/watch?v=zIbR5TAz2xQ&t=113s), being friendly with other human beings, being patient and stubborn with machines, and having some free time. Other than that, just doing what you can is already awesome! #### 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]? @@ -112,7 +93,7 @@ Short answer: No. We don't have the energy for it and this is irrelevant. </div> -#### I checked how apps packaging work. Why are you reinventing [insert favorite package format] ? +#### I checked how apps packaging work. Why are you reinventing [insert favorite package format]? Short answer: We are not. @@ -125,7 +106,7 @@ Medium answer: Apps were packaged in .deb in the past. It was a nightmare. We're <p>Turns out, YunoHost apps packaging holds a subtly different purpose than traditional packaging like .deb. Debian packages fulfill the low-level purpose of installing files, commands, programs and services on the system. It is often your duty to configure them properly, simply because there is no standard server setup. Typically, web apps requires a lot of configuration because they rely on a web server and a database (and the single sign-on).</p> -<p>YunoHost manipulates high-level abstractions (apps, domains, users, ...) and defines a standard setup (Nginx, Postfix, Metronome, SSOwat, ...) and, because of this, can handle the configuration for the user.</p> +<p>YunoHost manipulates high-level abstractions (apps, domains, users...) and defines a standard setup (NGINX, Postfix, Metronome, SSOwat...) and, because of this, can handle the configuration for the user.</p> <p>If you still think it's possible to handle everything by fiddling with .deb packages, see previous answers.</p> </div> diff --git a/orga/yunohost_project_organization_fr.md b/pages/03.community/05.project_organization/yunohost_project_organization.fr.md similarity index 92% rename from orga/yunohost_project_organization_fr.md rename to pages/03.community/05.project_organization/yunohost_project_organization.fr.md index f140019d..c867617c 100644 --- a/orga/yunohost_project_organization_fr.md +++ b/pages/03.community/05.project_organization/yunohost_project_organization.fr.md @@ -1,6 +1,18 @@ -# Organisation du projet YunoHost +--- +title: Organisation du projet +template: docs +taxonomy: + category: docs +routes: + default: '/yunohost_project_organization' + aliases: + - '/project_organization' +--- + +! This page is outdated and should be reworked ## 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. @@ -15,7 +27,7 @@ Le but de YunoHost est de rendre accessibles au plus grand nombre l’installati #### 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, baikal, etc...). +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 @@ -51,7 +63,7 @@ La constitution de groupes part du constat que YunoHost compte beaucoup de sous- - ##### Groupe Infra/Adminsys - Infrastructure - - Site web (wiki, forum, salon de discussion, redmine, mumble) + - Site web (wiki, forum, salon de discussion, Redmine, Mumble) - Démo - Services - [ip.yunohost.org](https://ip.yunohost.org/) et ip6.yunohost.org @@ -90,7 +102,7 @@ Le Conseil est indépendant des groupes et réunit les contributeurs souhaitant 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...). +Ê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 @@ -100,9 +112,9 @@ Si un consensus ne peut être trouvé au sein d'un groupe en suivant le processu #### 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, ...). +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 +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...) @@ -112,17 +124,17 @@ inclure, comme par exemple : 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 ; +- 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, ...) +- 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, ...) +- **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 @@ -131,7 +143,7 @@ Il appartient aussi à l'auteur de la PR de juger de son importance. (Ce jugemen 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, ...). +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** | |-----------------------------------|-------------|--------------|-------------| @@ -148,7 +160,7 @@ Si l'auteur ne fait pas parti du groupe concerné par la PR, tous ces quotas son 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. +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. @@ -170,7 +182,7 @@ Une PR peut être développée par plusieurs personnes. Chacun est invité à y 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. +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 @@ -255,14 +267,14 @@ Cette partie liste les kits de droits d’administration pour les différents gr ## 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 é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?) +- 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 +- 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 @@ -271,7 +283,7 @@ Cette partie liste les kits de droits d’administration pour les différents gr - 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 + - Pour les apps communautaires, les issues sont bien sur GitHub, les discussions sur le forum ### Groupe Communication - Rapport de bug à partir du forum @@ -295,5 +307,5 @@ Cette partie liste les kits de droits d’administration pour les différents gr - 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). +- 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/orga/yunohost_project_organization.md b/pages/03.community/05.project_organization/yunohost_project_organization.md similarity index 98% rename from orga/yunohost_project_organization.md rename to pages/03.community/05.project_organization/yunohost_project_organization.md index 91ae3303..89b046e7 100644 --- a/orga/yunohost_project_organization.md +++ b/pages/03.community/05.project_organization/yunohost_project_organization.md @@ -1,4 +1,15 @@ -# YunoHost project organisation +--- +title: Project organisation +template: docs +taxonomy: + category: docs +routes: + default: '/yunohost_project_organization' + aliases: + - '/project_organization' +--- + +! This page is outdated and should be reworked ## Document objective @@ -17,7 +28,7 @@ The goal of YunoHost is to make accessible to the largest number of people, the #### 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, baikal, etc.) +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 @@ -52,7 +63,7 @@ Groups are structured as a result of the fact that YunoHost counts many sub-proj - ##### Infra/Sysadmin Group - Infrastructure - - Website (wiki, forum, chat room, redmine, mumble) + - Website (wiki, forum, chat room, redmine, Mumble) - Demo - Services - [ip.yunohost.org](https://ip.yunohost.org/) and ip6.yunohost.org diff --git a/pages/03.community/06.project_sponsors/sponsors_partners.fr.md b/pages/03.community/06.project_sponsors/sponsors_partners.fr.md new file mode 100644 index 00000000..e180c8a6 --- /dev/null +++ b/pages/03.community/06.project_sponsors/sponsors_partners.fr.md @@ -0,0 +1,22 @@ +--- +title: Mécènes et partenaires +template: docs +taxonomy: + category: docs +routes: + default: '/sponsors_partners' +--- + +Afin d'avancer et de faire fonctionner le projet, en plus du travail des bénévoles et des dons, YunoHost bénéficie du soutien de mécènes et de partenaires. + +Une liste des mécènes de YunoHost, fournissant l'infrastructure et des services aux projets : +- [GITOYEN](https://gitoyen.net) : association regroupant plusieurs entreprises et associations intervenant comme fournisseur d’infrastructure d’hébergement et d’accès à Internet. +- [GLOBENET](http://www.globenet.org) : association militante, au service de la liberté d’expression, proposant des services Internet. +- [LDN-NET](https://ldn-fai.net/) : association pour la défense d’un Internet libre, neutre et décentralisé dont le moyen d’action principale est d’être un fournisseur d’accès à Internet (FAI) assocatif et local. +- [NBS System](https://www.nbs-system.com/): société spécialisée dans l’hébergement, la sécurisation des Clouds, l’infogérance (Systèmes d’information, Applications SaaS, Plateformes web) et les services managés. +- [NLNET](https://nlnet.nl/) : La Fondation NLnet soutient les organisations et les personnes qui contribuent à une société de l'information ouverte. +- [TETANEUTRAL-NET](https://tetaneutral.net/) : fournisseur d'accès à Internet associatif opérant actuellement un réseau radio sur Toulouse et ses environs et un hébergeur. + +Une liste des partenaires de YunoHost : +- [FFDN](https://www.ffdn.org/) : La fédération FDN regroupe des fournisseurs d'accès à Internet associatifs se reconnaissant dans des valeurs communes : bénévolat, solidarité, fonctionnement démocratique et à but non lucratif ; défense et promotion de la neutralité du Net. +- [Framasoft](https://framasoft.org/) : association d’éducation populaire, un groupe d’ami·es convaincu·es qu’un monde numérique émancipateur est possible, persuadé·es qu’il adviendra grâce à des actions concrètes sur le terrain et en ligne avec vous et pour vous ! diff --git a/sponsors_partners.md b/pages/03.community/06.project_sponsors/sponsors_partners.md similarity index 83% rename from sponsors_partners.md rename to pages/03.community/06.project_sponsors/sponsors_partners.md index 81adac32..7cb0e06e 100644 --- a/sponsors_partners.md +++ b/pages/03.community/06.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. @@ -6,6 +13,7 @@ Here is a list of YunoHost sponsors, providing infrastructure and services to th - [GITOYEN](https://gitoyen.net): association bringing together several companies and associations acting as a provider of hosting infrastructure and Internet access. - [GLOBENET](http://www.globenet.org): activist association, at the service of freedom of expression, offering internet services. - [LDN-NET](https://ldn-fai.net/) : association for the defense of a free, neutral and decentralized Internet whose main means of action is to be an Internet access provider associative and local. +- [NBS System](https://www.nbs-system.com/): company specialized in hosting, securing Clouds, outsourcing (Information Systems, SaaS Applications, Web Platforms) and managed services. - [NLNET](https://nlnet.nl/): The NLnet Foundation supports organizations and people that contribute to an open information society. - [TETANEUTRAL-NET](https://tetaneutral.net/): associative Internet access provider currently operating a radio network in Toulouse and its surroundings and a hoster. diff --git a/pages/03.community/07.project_budget/project_budget.fr.md b/pages/03.community/07.project_budget/project_budget.fr.md new file mode 100644 index 00000000..b2b5a3c6 --- /dev/null +++ b/pages/03.community/07.project_budget/project_budget.fr.md @@ -0,0 +1,42 @@ +--- +title: Budget du projet +template: docs +taxonomy: + category: docs +routes: + default: '/project_budget' +--- + +# Budget prévisionnel pour 2019/2020 + +## Revenus attendus + +* Dons via Liberapay : 3000€ +* Subvention de NLNet : 20K€ + +## Dépenses prévues + +* Developpement : 20K€ +* Location Serveur : ~500 € + * VPS Scaleway: 20.33*12: 243.96€/year + * VPS Digital O. (forum): 172.80€/year +* Noms de domaine : ~150 € + * nohost.me : 11.99 €HT/ans + * ynh.fr : 6.99 €HT/ans (doit être confirmé avec frju ?) + * noho.st : ~35 €TTC/ans + * yunohost.org : 13.99 €HT/ans + * yunohost.com : 9.99 €HT/ans + * labriqueinter.net : 12.49 €Ht/ans + * internetcu.be : 17.99 €HT/ans +* Communication : ~400 € + * Stickers : 100€ + * Tracts : 100€ + * T-shirt : 200€ +* Déplacements (ex. : aller aux conférences) : ~700 € + * AG FFDN 2020 : 225€ (en tout) + * Event colibris : 150€ + * FOSDEM ou autre conf : 300€ +* Compte bancaire fees : 7×12 € soit ~100 € +* Brique Camp : 500€ + +**Balance 2020-2021** : +650 € diff --git a/pages/03.community/07.project_budget/project_budget.md b/pages/03.community/07.project_budget/project_budget.md new file mode 100644 index 00000000..19f4e059 --- /dev/null +++ b/pages/03.community/07.project_budget/project_budget.md @@ -0,0 +1,39 @@ +--- +title: Project budget +template: docs +taxonomy: + category: docs +routes: + default: '/project_budget' +--- + +# Estimated budget for 2020/2021 + +## Expected revenues + +* Donations: 3000€/year +* Grant from NLNet: 20K€ + +## Expected expenses + +* Development: 20K€ +* Server renting: 500€ + * VPS Scaleway: 20.33*12: 243.96€/year + * VPS Digital O. (forum): 172.80€/year +* Domain names: ~150€ + * nohost.me: 11.99€HT/year + * ynh.fr: 6.99€HT/year (to be confirmed with frju?) + * noho.st: ~35€ TTC/year + * YunoHost.org: 13.99€HT/year + * YunoHost.com: 9.99€HT/year + * labriqueinter.net: 12.49€HT/year + * internetcu.be: 17.99€HT/year +* Communication: ~400€ +* Travel (e.g. to go to conferences): ~700€ + * AG FFDN 2020: 225€ (en tout) + * Event colibris: 150€ + * FOSDEM ou autre conf: 300€ +* Bank account fees: 7x12€ => ~100€ +* Brique Camp: 500€ + +**Balance 2020-2021**: +650€ diff --git a/communication.md b/pages/03.community/08.project_press/communication.md similarity index 88% rename from communication.md rename to pages/03.community/08.project_press/communication.md index 168ac856..93e0ce5e 100644 --- a/communication.md +++ b/pages/03.community/08.project_press/communication.md @@ -1,4 +1,11 @@ -# Communication +--- +title: Communication +template: docs +taxonomy: + category: docs +routes: + default: '/communication' +--- ## Talks / conf @@ -6,7 +13,7 @@ * (EN) [FOSDEM 2019 - The operating system to build the decentralized Internet](https://cinema.yunohost.support/videos/watch/1eb49594-0283-4a01-8691-3817a3cb31e6) ([slides](https://github.com/YunoHost/yunohost-fosdem-2019)) * (FR) [Capitole du libre 2018 - YunoHost: un des chemins vers la décentralisation - Bram](https://www.youtube.com/watch?v=OEXEStoOYpw) ([slides](https://psycojoker.github.io/yunohost-cdl-2018/)) * (FR) [Journées du logiciel libre 2018 - YunoHost : vers l’auto-hébergement et au-delà - Bram](https://www.videos-libr.es/videos/watch/45b48b1e-1b10-4e09-b29a-a404bd42c5d0) ([slides](https://psycojoker.github.io/yunohost-jdll-2018/)) -* (FR) Ubuntu Party Novembre 2017 - De Framasoft à Yunohost, réapproprions nous le cloud ([slides](https://blog.genma.fr/?De-Framasoft-a-Yunohost-reapproprions-nous-le-cloud)) +* (FR) Ubuntu Party Novembre 2017 - De Framasoft à YunoHost, réapproprions nous le cloud ([slides](https://blog.genma.fr/?De-Framasoft-a-Yunohost-reapproprions-nous-le-cloud)) * (FR) [Capitole du libre 2017 - YunoHost : vers l'auto-hébergement et au-delà - JimboJoe](https://2017.capitoledulibre.org/programme/#yunohost-vers-lauto-hebergement-et-au-dela) ([slides](https://github.com/YunoHost/yunohost-cdl-2017/raw/master/YunoHost-CDL2017.pdf)) * (FR) [PSES 2017 – Construire l’Internet du Futur avec YunoHost – Aleks, ljf](https://data.passageenseine.org/2017/aleks-ljf_internet-futur-yunohost.webm) ([slides](https://data.passageenseine.org/2017/aleks-ljf_internet-futur-yunohost.pdf)) * (FR) [Université de technologie de compiègne 2017 – Agir pour un internet éthique – LJF](http://webtv.utc.fr/watch_video.php?v=O34AA7RBR1AH) @@ -21,10 +28,9 @@ ## Articles / Press review -<a href="https://linuxfr.org/news/yunohost-2-0-l-auto-hebergement-a-portee-de-clic"><img src="/images/Linuxfr.png" width=180></a> -<a href="https://linuxfr.org/news/yunohost-2-0-l-auto-hebergement-a-portee-de-clic"><img src="/images/Linuxfr.png" width=180></a> -<a href="https://www.linux-pratique.com/2016/07/et-si-vous-passiez-a-lauto-hebergement/"><img src="/images/linux-pratique-96.jpg" width=150 /></a> -<a href="http://www.linux-magazine.com/Issues/2018/208/YunoHost"><img src="/images/linux-magazine-208.jpg" width=150 /></a> +[](https://linuxfr.org/news/yunohost-2-0-l-auto-hebergement-a-portee-de-clic) +[](https://www.linux-pratique.com/2016/07/et-si-vous-passiez-a-lauto-hebergement/) +[](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) @@ -34,9 +40,9 @@ - (FR) [Duhaz.fr: Devenir votre propre hébergeur](https://www.duhaz.fr/blog/devenir-votre-propre-h%C3%A9bergeur/) - (FR) [Faimaison.net: au revoir Google, bonjour liberté!](https://www.faimaison.net/actualites/chatons-leprette-mai2019.html) - (FR) [Tineternet.net: Reprendre la main sur ses données avec l'auto-hébergement](https://www.tinternet.net/article/2019/05/dossier-reprendre-la-main-sur-ses-donnees-avec-lauto-hebergement) -- (DE) [Yunohost Serverinstallation auf Laptop](https://www.giammi.com/2019/04/19/yunohost-serverinstallation-auf-laptop/) -- (FR) [Cenabumix: Retour d’expérience Yunohost sur Raspberry](https://wiki.cenabumix.org/wordpress/2018/03/17/retour-dexperience-yunohost-sur-raspberry/) -- (FR) [Geber.ga: Yunohost, ou l'auto-hébergement à portée de main...](https://www.geber.ga/yunohost-ou-l-auto-hebergement-a-portee-de-main/) +- (DE) [YunoHost Serverinstallation auf Laptop](https://www.giammi.com/2019/04/19/yunohost-serverinstallation-auf-laptop/) +- (FR) [Cenabumix: Retour d’expérience YunoHost sur Raspberry](https://wiki.cenabumix.org/wordpress/2018/03/17/retour-dexperience-yunohost-sur-raspberry/) +- (FR) [Geber.ga: YunoHost, ou l'auto-hébergement à portée de main...](https://www.geber.ga/yunohost-ou-l-auto-hebergement-a-portee-de-main/) - (EN) [Nequalsonelifestyle.com: Self Hosting Without Self Owning](https://www.nequalsonelifestyle.com/2019/05/04/self-hosting-without-self-owning/) - (EN) [Skysilk.com: How to Install YunoHost On a Debian VPS](https://www.skysilk.com/blog/2019/how-to-install-yunohost-on-a-debian-vps/) - (FR) [Alternativelibertaire.org: Auto-hébergement](https://www.alternativelibertaire.org/?Auto-hebergement-1-Un-serveur-a-mon-seul-service) diff --git a/security_team_fr.md b/pages/03.community/09.security_team/security_team.fr.md similarity index 85% rename from security_team_fr.md rename to pages/03.community/09.security_team/security_team.fr.md index a3ae1720..3186cffb 100644 --- a/security_team_fr.md +++ b/pages/03.community/09.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/03.community/09.security_team/security_team.md similarity index 80% rename from security_team.md rename to pages/03.community/09.security_team/security_team.md index a0e1686f..fd97120b 100644 --- a/security_team.md +++ b/pages/03.community/09.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 <security@yunohost.org> 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/use_case_non-profit_organisations_ca.md b/pages/03.community/10.ngo/use_case_non-profit_organisations.ca.md similarity index 95% rename from use_case_non-profit_organisations_ca.md rename to pages/03.community/10.ngo/use_case_non-profit_organisations.ca.md index a700c6fe..23deee39 100644 --- a/use_case_non-profit_organisations_ca.md +++ b/pages/03.community/10.ngo/use_case_non-profit_organisations.ca.md @@ -1,16 +1,13 @@ -# YunoHost per a organitzacions sense ànim de lucre - -## Taula de continguts -* [Introducció](#introduction) -* [Qui](#who) -* [Què](#what) -* [Quan](#when) -* [On](#where) -* [Per què](#why) -* [Com](#how) -* [Conclusió](#conclusion) - -## Introducció +--- +title: Use cases for NGOs +template: docs +taxonomy: + category: docs +routes: + default: '/use_case_non-profit_organisations' +page-toc: + active: true +--- 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. @@ -68,7 +65,7 @@ YunoHost de base ofereix: * Un sistema d'aplicacions * Una interfície web * Una interfície per línia de comandes (CLI): Moulinette -* Un servidor web: Nginx +* Un servidor web: NGINX * Un servidor DNS: Dnsmasq * Una base de dades: MariaDB * Un sistema de còpies de seguretat @@ -104,7 +101,7 @@ Per oferir calendaris personals o compartits haureu d'instal·lar: Per oferir un sistema de contactes personal haureu d'instal·lar: * [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) -* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) ### Fitxers compartits @@ -134,7 +131,7 @@ Arribats a un cert punt una organització sense ànim de lucre podria necessitar ### Pàgina web pública Hi ha múltiples maneres d'implementar una pàgina web pública: -* Un pàgina simple amb html, css, etc... utilitzant: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) +* Un pàgina simple amb HTML, CSS, etc. utilitzant: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) * Utilitzant un CMS (sistema de gestió de contingut) com [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh) , [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) Però us proposem una alternativa una mica més potent: [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh): diff --git a/use_case_non-profit_organisations_fr.md b/pages/03.community/10.ngo/use_case_non-profit_organisations.fr.md similarity index 82% rename from use_case_non-profit_organisations_fr.md rename to pages/03.community/10.ngo/use_case_non-profit_organisations.fr.md index 292fff67..7d217971 100644 --- a/use_case_non-profit_organisations_fr.md +++ b/pages/03.community/10.ngo/use_case_non-profit_organisations.fr.md @@ -1,16 +1,13 @@ -# YunoHost for non-profit - -## Table of Contents -* [Introduction](#introduction) -* [Qui ](#qui) -* [Quoi](#quoi) -* [Quand](#quand) -* [Où](#o-) -* [Pourquoi](#pourquoi) -* [Comment](#comment) -* [Conclusion](#conclusion) - -## Introduction +--- +title: Cas d'usages pour associations +template: docs +taxonomy: + category: docs +routes: + default: '/use_case_non-profit_organisations' +page-toc: + active: true +--- L'objet de ce document est de présenter une utilisation spécifique de [YunoHost](https://yunohost.org/) pour des organisations à but non lucratif. @@ -20,9 +17,9 @@ Organisations à but non lucratif, ONG ou tout type d'association. ## Quoi -Les organisations à but non lucratif doivent généralement fournir différents services à différents publics: +Les organisations à but non lucratif doivent généralement fournir différents services à différents publics : -* Conseil d'administration / Comité directeur / Bénévoles avec: +* Conseil d'administration / Comité directeur / Bénévoles avec : * [Mails](#mails) * [Calendrier](#calendrier) * [Contact](#contact) @@ -30,13 +27,13 @@ Les organisations à but non lucratif doivent généralement fournir différents * [Communication instantanée](#communication-instantan-e) * [Intranet / Base de connaissances](#intranet) * [ERP / Comptabilité](#erp-comptabilit-) -* Membres avec: +* Membres avec : * [Site Web public avec accès privé et individuel](#site-web-public) * [Adhésion](#adh-sion) * [Inscriptions aux événements](#inscriptions-aux-v-nements) * [Mailings](#newsletter-mailing) * [Forum](#forum) -* Public avec: +* Public avec : * [Site Web public](#site-web-public) * [Newsletter](#newsletter-mailing) @@ -65,16 +62,16 @@ YunoHost est une distribution basée sur Debian GNU/Linux qui automatise l’ins YunoHost fournit immédiatement: * Un système d'application -* Une interface web -* Une interface de ligne de commande (CLI): Moulinette -* Un serveur Web : Nginx +* Une interface Web +* Une interface de ligne de commande (CLI) : Moulinette +* Un serveur Web : NGINX * Un serveur DNS : Dnsmasq -* Une base de données: MariaDB +* Une base de données : MariaDB * Un système de sauvegarde -* Un SSO: SSOwat +* Un SSO : SSOwat * OpenLDAP * Email : - * SMTP: Postfix + * SMTP : Postfix * IMAP & POP3 : Dovecot * Un antispam : rspamd, rmilter * Serveur XMPP de messagerie instantanée : Metronome IM @@ -85,7 +82,7 @@ La première chose dont vous aurez besoin pour implémenter un serveur YunoHost ### Mails -De base, YunoHost fournit un système de messagerie disponible en utilisant POP / IMAP / SMTP. +YunoHost fournit par défaut un système de messagerie disponible en utilisant POP / IMAP / SMTP. Les comptes de messagerie seront gérés à l'aide de l'interface Web ou de la ligne de commande. Les comptes créés sont stockés dans OpenLDAP. Des packages supplémentaires peuvent être installés pour fournir davantage de fonctionnalités au système de messagerie YunoHost : @@ -97,13 +94,13 @@ Des packages supplémentaires peuvent être installés pour fournir davantage de Pour fournir des calendriers personnels ou partagés, vous devrez installer : * [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) -* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) ### Contact Pour fournir un système de contact personnel, vous devrez installer : * [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) -* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) ### Fichiers partagés @@ -112,17 +109,17 @@ Les fichiers seront disponibles à partir d'une interface Web ou à l'aide d'un ### Communication instantanée -De base, YunoHost fournit immédiatement un serveur XMPP pour lequel vous pouvez installer un client Web: [Jappix](https://github.com/YunoHost-Apps/jappix_ynh) +Par défaut, YunoHost fournit immédiatement un serveur XMPP pour lequel vous pouvez installer un client Web : [Jappix](https://github.com/YunoHost-Apps/jappix_ynh) Vous pouvez également installer un serveur Matrix : -* Le serveur: [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) -* Un client web: [Riot](https://github.com/YunoHost-Apps/riot_ynh) +* Le serveur : [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) +* Un client Web : [Element](https://github.com/YunoHost-Apps/element_ynh) ### Intranet Pour une organisation à but non lucratif, un bon moyen de mettre en œuvre un intranet est de fournir un wiki permettant aux utilisateurs internes de lire, éditer et ajouter du contenu. Voici quelques paquets pour implémenter un wiki : -* [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) using wiki syntax -* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) using markdown syntax +* [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) utilisant une syntaxe wiki +* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) utilisant une syntaxe Markdown ### ERP / Comptabilité @@ -133,12 +130,12 @@ Pour une organisation à but non lucratif, un bon moyen de mettre en œuvre un i ### Site Web Public Il existe plusieurs façons d'implémenter un site Web public : -* Un simple site HTML, CSS, etc... en utilisant : [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) -* Utiliser un CMS (système de gestion de contenu) comme [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh) , [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) +* Un simple site HTML, CSS, etc. en utilisant : [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) +* Utiliser un CMS (système de gestion de contenu) comme [WordPress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh), [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) -Mais nous proposerons quelque chose de plus puissant : [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh): +Mais nous proposerons quelque chose de plus puissant : [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh) : * Drupal qui est un puissant framework de gestion de contenu -* avec CiviCRM qui est un CRM OpenSource à destination des organisations à but non lucratif +* avec CiviCRM qui est un CRM open source à destination des organisations à but non lucratif #### Adhésion @@ -159,7 +156,7 @@ Vous avez plusieurs choix, avoir un forum intégré dans Drupal ou utiliser un s ### Sauvegarde YunoHost fournit son propre système de sauvegarde. Avant toute mise à niveau de paquet, YunoHost sauvegarde la version actuelle du paquet et la restaure automatiquement si la mise à niveau échoue. -Les sauvegardes Yunohost sont stockées localement dans `/home/yunohost.backup/archives`. +Les sauvegardes YunoHost sont stockées localement dans `/home/yunohost.backup/archives`. Mais pour la production, la sauvegarde stockée localement ne suffit pas, vous devez donc mettre en œuvre des stratégies de sauvegarde supplémentaires : * Sauvegarde de la machine virtuelle si fournie par le système d'hébergement. diff --git a/use_case_non-profit_organisations.md b/pages/03.community/10.ngo/use_case_non-profit_organisations.md similarity index 86% rename from use_case_non-profit_organisations.md rename to pages/03.community/10.ngo/use_case_non-profit_organisations.md index bc488f75..0b585731 100644 --- a/use_case_non-profit_organisations.md +++ b/pages/03.community/10.ngo/use_case_non-profit_organisations.md @@ -1,18 +1,15 @@ -# YunoHost for non-profit +--- +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) - -## 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 @@ -68,11 +65,11 @@ Out of the box YunoHost provide: * A system of application * A web interface * A command-line interface (CLI): Moulinette -* A web server: Nginx +* A web server: NGINX * A DNS server: Dnsmasq * A database: MariaDB * A backup system -* An SSO : SSOwat +* An SSO: SSOwat * OpenLDAP * Email: * SMTP: Postfix @@ -98,13 +95,13 @@ Additional package can be installed to provide more functionality to the YunoHos To provide personal or shared calendars you will need to install: * [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) -* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) ### Contact To provide personal contact system you will need to install: * [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) -* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) ### Shared files @@ -117,13 +114,13 @@ Out of the box, YunoHost provide an XMPP server, for which you can install a web You can also install a matrix server: * The server: [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) -* A web client: [Riot](https://github.com/YunoHost-Apps/riot_ynh) +* A web client: [Element](https://github.com/YunoHost-Apps/element_ynh) ### Intranet For an non-profit organization a good way to implement an intranet is to provide a wiki to let internal users read, edit and add content. Here are some packages to implement a wiki: * [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) using wiki syntax -* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) using markdown syntax +* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) using Markdown syntax ### ERP / Accounting @@ -134,8 +131,8 @@ At some time a non-profit organization could need an accounting/erp system, here ### Public Web Site There are several way to implement a Public Web Site: -* Simple html, css, etc... Website using: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) -* Using a CMS (Content Management System) like [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh) , [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) +* Simple HTML, CSS, etc. Website using: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) +* Using a CMS (Content Management System) like [WordPress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh), [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) But we will propose something more powerful: [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh): * Drupal that is a powerful open source content management framework @@ -160,13 +157,13 @@ You have several choices, or having an integrated forum in Drupal or using a ded ### Backup YunoHost provide is own backup system. Before any package upgrade, YunoHost backup the current version of the package and automaticaly restore it if the upgrade fails. -Yunohost backup are stored localy in `/home/yunohost.backup/archives`. +YunoHost backup are stored localy in `/home/yunohost.backup/archives`. But for production, localy stored backup are not enough, so you will need to implement aditional backup strategies: * Backup of the the Virtual Machine if provided by the hosting system. * [Archivist](https://github.com/YunoHost-Apps/archivist_ynh) is an automatic backup system for your server. Your backups can be send to many other places, local or distant. * [Borg](https://github.com/YunoHost-Apps/borg_ynh) and [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) allow to externalize backups. -* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), if you have two yunohost servers, provide a way to have a secondary server which you can used if your main server goes down. This secondary server will allow you to deploy a copy of your server to bring back your YunoHost during your break down. +* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), if you have two YunoHost servers, provide a way to have a secondary server which you can used if your main server goes down. This secondary server will allow you to deploy a copy of your server to bring back your YunoHost during your break down. ### Go further diff --git a/use_case_non-profit_organisations_oc.md b/pages/03.community/10.ngo/use_case_non-profit_organisations.oc.md similarity index 91% rename from use_case_non-profit_organisations_oc.md rename to pages/03.community/10.ngo/use_case_non-profit_organisations.oc.md index 8f4d6862..563c0fd7 100644 --- a/use_case_non-profit_organisations_oc.md +++ b/pages/03.community/10.ngo/use_case_non-profit_organisations.oc.md @@ -1,16 +1,13 @@ -# YunoHost per organizacion sens tòca lucrativa - -## Ensenhador -* [Introduccion](#introduccion) -* [Qual ](#qual) -* [Qué](#qué) -* [Quand](#quand) -* [Ont](#ont) -* [Perque](#perque) -* [Cossí](#cossí) -* [Conclusion](#conclusion) - -## Introduccion +--- +title: Use cases for NGOs +template: docs +taxonomy: + category: docs +routes: + default: '/use_case_non-profit_organisations' +page-toc: + active: true +--- L'objectiu d’aqueste document es de presentar una utilizacion especifica de [YunoHost](https://yunohost.org/) per d’organizacions sens tòca lucrativa. @@ -53,7 +50,7 @@ Lo servidor YunoHost pòt èsser albergat a diferents endreches : ## Perque -YunoHost pòt correspondre als besonhs d'una organizacion sens tòca lucrativa e li permetre de servar lo mestritge de sas donadas. +YunoHost pòt correspondre als besonhs d'una organizacion sens tòca lucrativa e li permetre de servar lo mestritge de sas donadas. ## Cossí @@ -67,7 +64,7 @@ YunoHost provesís sul pic: * Un sistèma d'aplicacion * Una interfàcia web * Una interfàcia en linha de comanda (CLI) : Moulinette -* Un servidor Web : Nginx +* Un servidor Web : NGINX * Un servidor DNS : Dnsmasq * Una basa de donadas : MariaDB * Un sistèma de salvagarda @@ -97,7 +94,7 @@ De paquets suplementaris pòdon èsser installats per provesir mai de foncionali Per fornir de calendièrs personals o partejats, vos calrà installar : * [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) -* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) +* [Baïkal](https://github.com/YunoHost-Apps/baikal_ynh) ### Contacte @@ -133,10 +130,10 @@ Arriba un moment ont a l’organizacion sens tòca lucrativa li pòsca far beson ### Site Web Public Existís mantuns biaisses de construire un site Web public : -* Un simple site HTML, CSS, etc... en utilizant : [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) -* Utilizar un CMS (sistèma de gestion de contengut) coma [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh) , [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) +* Un simple site HTML, CSS, etc. en utilizant : [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) +* Utilizar un CMS (sistèma de gestion de contengut) coma [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh), [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) -Mas prepausam quicòm de mai potent : [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh): +Mas prepausam quicòm de mai potent : [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh) : * Drupal qu’es un framework potent de gestion de contengut * amb CiviCRM qu’es un CRM OpenSource a destinacion de las organizacions sens tòca lucrativa @@ -159,7 +156,7 @@ Avètz mantun possibilitats, aver un forum integrat a Drupal o utilizar un sist ### Salvagarda YunoHost fornís son pròpri sistèma de salvagarda. Abans tota mesa a nivèl de paquet, YunoHost salvagarda la version actuala del paquet e la restaura automaticament se la mesa a nivèl se debana pas corrèctament. -Las salvagardas Yunohost son gardadas localament dins `/home/yunohost.backup/archives`. +Las salvagardas YunoHost son gardadas localament dins `/home/yunohost.backup/archives`. Mas per la produccion, la salvagarda gardada localament basta pas, vos cal emplegar d’estrategias de salvagarda suplementàrias : * Salvagarda de la maquina virtuala se fornida pel sistèma d’albergament. diff --git a/pages/03.community/11.chatons/chatons.fr.md b/pages/03.community/11.chatons/chatons.fr.md new file mode 100644 index 00000000..183fbf1b --- /dev/null +++ b/pages/03.community/11.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/03.community/11.chatons/chatons.md b/pages/03.community/11.chatons/chatons.md new file mode 100644 index 00000000..6406cce7 --- /dev/null +++ b/pages/03.community/11.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/03.community/chapter.md b/pages/03.community/chapter.md new file mode 100644 index 00000000..54a832c6 --- /dev/null +++ b/pages/03.community/chapter.md @@ -0,0 +1,10 @@ +--- +title: Community +template: chapter +taxonomy: + category: docs +routes: + default: /community +--- + +# Community diff --git a/pages/03.community/community.fr.md b/pages/03.community/community.fr.md new file mode 100644 index 00000000..5a297ef5 --- /dev/null +++ b/pages/03.community/community.fr.md @@ -0,0 +1,10 @@ +--- +title: Communauté +template: chapter +taxonomy: + category: docs +routes: + default: '/community' +--- + +# Communauté diff --git a/doc_writing_guide_fr.md b/pages/04.contribute/02.write_documentation/01.writing_documentation_guide/doc_writing_guide.fr.md similarity index 66% rename from doc_writing_guide_fr.md rename to pages/04.contribute/02.write_documentation/01.writing_documentation_guide/doc_writing_guide.fr.md index 26c94991..296d25f1 100644 --- a/doc_writing_guide_fr.md +++ b/pages/04.contribute/02.write_documentation/01.writing_documentation_guide/doc_writing_guide.fr.md @@ -1,10 +1,17 @@ -# 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). +Classement des applications disponibles par tags (genre, Git, gestion associations, courriels, etc.). ## Quelques usages types et d'ordre général (trame de rédaction) @@ -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/04.contribute/02.write_documentation/01.writing_documentation_guide/doc_writing_guide.md similarity index 79% rename from doc_writing_guide.md rename to pages/04.contribute/02.write_documentation/01.writing_documentation_guide/doc_writing_guide.md index fd161843..b853e359 100644 --- a/doc_writing_guide.md +++ b/pages/04.contribute/02.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). +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/04.contribute/02.write_documentation/02.markdown_guide/doc_markdown_guide.fr.md similarity index 91% rename from doc_markdown_guide_fr.md rename to pages/04.contribute/02.write_documentation/02.markdown_guide/doc_markdown_guide.fr.md index 7fd7adc9..7ea595fb 100644 --- a/doc_markdown_guide_fr.md +++ b/pages/04.contribute/02.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 - + ``` - + Il est possible de faire un lien avec une image, exemple : ```markdown -[](/write_documentation) +[](/write_documentation) ``` -[](/write_documentation) +[](/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 | | | [Ou un lien](/contributordoc) | +| D'autres lignes | | | [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 | | | [Ou un lien](/contributordoc) | +| D'autres lignes | | | [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/04.contribute/02.write_documentation/02.markdown_guide/doc_markdown_guide.md similarity index 90% rename from doc_markdown_guide.md rename to pages/04.contribute/02.write_documentation/02.markdown_guide/doc_markdown_guide.md index cb004e8a..fdec1bf2 100644 --- a/doc_markdown_guide.md +++ b/pages/04.contribute/02.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. @@ -28,7 +35,7 @@ They appear like this: To type a line break without creating a new paragraph, it is necessary to type **two consecutive spaces**. Otherwise, the text will continue in a row respecting the general constraints of the page style. -By writing this : +By writing this: ```markdown For text in *italic you have to frame it with an asterisk* `*` @@ -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 - + ``` - + -It is possible to make a link with an image, for example : +It is possible to make a link with an image, for example: ```markdown -[](/write_documentation) +[](/write_documentation) ``` -[](/write_documentation) +[](/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. @@ -111,7 +120,7 @@ Quotes are used to highlight a statement made by another person, the wiki itself >> And a second quote >> with double rafters ``` -Will be displayed : +Will be displayed: >First level quotation text >which can be formatted in different lines @@ -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 | | | [Or a link](/contributordoc) | +| More lines | | | [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 | | | [Or a link](/contributordoc) | +| More lines | | | [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/04.contribute/02.write_documentation/03.git/doc_use_git.fr.md similarity index 69% rename from doc_use_git_fr.md rename to pages/04.contribute/02.write_documentation/03.git/doc_use_git.fr.md index 690f137f..ddcf1516 100644 --- a/doc_use_git_fr.md +++ b/pages/04.contribute/02.write_documentation/03.git/doc_use_git.fr.md @@ -1,24 +1,31 @@ -# 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. +Il est bien sûr possible de contribuer directement sur la documentation de YunoHost, mais ce n’est pas la manière la plus pratique de le faire tant pour le·la contributeur·rice que pour la personne qui va injecter votre contribution dans la documentation. Voici un tutoriel pour comprendre et créer une contribution à la documentation de YunoHost en utilisant l’outil [Git (en)](https://git-scm.com/) et [github.com](http://github.com/) qui est le service de forge Git qui héberge et stocke le code source de YunoHost ainsi que sa documentation. ## Création d’un compte sur github.com Pour pouvoir envoyer vos contributions via GitHub, il est nécessaire d’avoir un compte sur GitHub. Pour créer le compte vous aurez besoin d’une adresse e-mail valide à laquelle vous avez accès. GitHub est un outil puissant qui propose de nombreuses fonctionnalités, l’interface peut être un peu effrayante au début. Vous n’êtes pas obligé·e de donner vos noms et prénoms, vous pouvez utiliser un pseudonyme (lors de l’inscription `Username`). -## Forker la documentation de ’YunoHost dans votre dépôt personnel +## Forker la documentation de YunoHost dans votre dépôt personnel Forker le code source permet de créer une nouvelle branche de développement d’un code source de logiciel ou dans le cas présent, le code source de la documentation. En créant une nouvelle branche, cela vous permet de modifier le code et d’ajouter vos contributions sans altérer le code de la branche `master` qui est le rendu public de la documentation. Ce qui vous permet de ne pas devoir tout marquer mais le faire en plusieurs étapes. (Notamment pour les contributions demandant plus de temps de travail). Forker un projet sur GitHub est extrêmement simple, il suffit de cliquer sur le bouton Fork, cela créera un nouveau dépôt sur votre espace de GitHub. - + -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` - +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` + > **Point de vigilance !** -> Si vous forkez le dépôt d’un·e autre contributeur·rice que ’YunoHost, vous aurez les mêmes fichiers. Sauf que quand vous enverrez vos modifications, elles seront envoyées au contributeur et non au dépôt ’YunoHost. L’avantage est que ça vous permet de développer une autre branche créée par le·la contributeur·rice et ainsi travailler avec une autre personne à une amélioration avant proposition au dépôt principal. +> Si vous forkez le dépôt d’un·e autre contributeur·rice que YunoHost, vous aurez les mêmes fichiers. Sauf que quand vous enverrez vos modifications, elles seront envoyées au contributeur et non au dépôt YunoHost. L’avantage est que ça vous permet de développer une autre branche créée par le·la contributeur·rice et ainsi travailler avec une autre personne à une amélioration avant proposition au dépôt principal. > Il n’est pas possible d’avoir un fork du dépot d’un·e contributeur·rice et le fork dépôt d’origine au même moment dans votre propre dépôt. ## Modifier et ajouter votre contribution @@ -26,14 +33,14 @@ Une fois le dépôt forké (copié), il faudra créer une nouvelle branche de d Plus d’informations sur ce qu’est une branche sur git-scm.com : [Les branches avec Git - Ce qu’est une branche](https://git-scm.com/book/fr/v1/Les-branches-avec-Git-Ce-qu-est-une-branche). ## Envoyer votre contribution par une Pull Request -Faire une Pull Request correspond au moment où vous souhaitez partager votre travail avec le reste des contributeurs⋅rices et l’intégrer au dépot master (dépôt principal de ’YunoHost). Lors de la publication d’une Pull Request, couramment nommée PR, les contributeurs⋅rices pourront amender, commenter, ajouter, corriger votre contribution avant intégration complète au dépôt. +Faire une Pull Request correspond au moment où vous souhaitez partager votre travail avec le reste des contributeurs⋅rices et l’intégrer au dépot master (dépôt principal de YunoHost). Lors de la publication d’une Pull Request, couramment nommée PR, les contributeurs⋅rices pourront amender, commenter, ajouter, corriger votre contribution avant intégration complète au dépôt. ## Suivre votre contribution et prendre en compte les retours des contributeurs·trices Lorsque vous avez déjà fait une PR (Pull Request), les modifications de votre branche de développement sur le dépôt Git se rajouteront automatiquement à la PR. Cela ne nécessite aucune action supplémentaire. Vous pouvez aussi intégrer les propositions de modifications de contributeurs, qui lorsqu’ils·elles auditeront le code, peuvent trouver des erreurs ou de nouvelles formulations plus adaptées. ## Faire remonter des erreurs et des souhaits par des issues -’YunoHost dispose d’un dépôt Git spécifique pour le recueil des issues : [github.com/’YunoHost/issues](https://github.com/’YunoHost/issues) -Une issue aussi appelé ticket, est un problème identifié ou alors un souhait de développement ; dans le cas présent pour la documentation, mais c’est valable pour tout dépôt logiciel. Dans le cadre de la documentation de ’YunoHost il sera surtout proposé des issues pour le développement de la documentation, les problèmes identifiés étant facilement corrigeables. +YunoHost dispose d’un dépôt Git spécifique pour le recueil des issues : [github.com/YunoHost/issues](https://github.com/YunoHost/issues) +Une issue aussi appelé ticket, est un problème identifié ou alors un souhait de développement ; dans le cas présent pour la documentation, mais c’est valable pour tout dépôt logiciel. Dans le cadre de la documentation de YunoHost il sera surtout proposé des issues pour le développement de la documentation, les problèmes identifiés étant facilement corrigeables. ## Aller plus loin avec Git et travailler sur son poste de travail Utiliser la puissance de Git et ainsi travailler sur son ordinateur personnel, permet entre autres de ne pas avoir à créer de `commit` à chaque enregistrement intermédiaire des pages de documentations modifiées. Cela permet aussi d’utiliser des outils et logiciels qui permettent une distinction plus facile des codes utilisés dans une page de documentation. diff --git a/doc_use_git.md b/pages/04.contribute/02.write_documentation/03.git/doc_use_git.md similarity index 93% rename from doc_use_git.md rename to pages/04.contribute/02.write_documentation/03.git/doc_use_git.md index 14323aaf..7726cfa7 100644 --- a/doc_use_git.md +++ b/pages/04.contribute/02.write_documentation/03.git/doc_use_git.md @@ -1,6 +1,13 @@ -# 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. +It is of course possible to contribute directly to the YunoHost documentation, but this is not the most convenient way to do so for both the contributor and the person who will inject your contribution into the documentation. Here is a tutorial to understand and create a contribution to the YunoHost documentation using [Git](https://git-scm.com/) and [github.com](http://github.com/) which is the Git forge service that hosts and stores the YunoHost source code and documentation. ## Create an account on github.com To be able to send your contributions via GitHub, you need to have an account on GitHub, to create the account you will need a valid email address that you have access to. GitHub is a powerful tool with many features, the interface can be a little scary at first. @@ -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. - + In the title of the new repository, you will see where the repository comes from, in this case `YunoHost/doc`. - + > **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/04.contribute/02.write_documentation/write_documentation.de.md b/pages/04.contribute/02.write_documentation/write_documentation.de.md new file mode 100644 index 00000000..0777c10c --- /dev/null +++ b/pages/04.contribute/02.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.administrate + + -- 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/04.contribute/02.write_documentation/write_documentation.fr.md b/pages/04.contribute/02.write_documentation/write_documentation.fr.md new file mode 100644 index 00000000..7249951e --- /dev/null +++ b/pages/04.contribute/02.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/04.contribute/02.write_documentation/write_documentation.md b/pages/04.contribute/02.write_documentation/write_documentation.md new file mode 100644 index 00000000..504dd161 --- /dev/null +++ b/pages/04.contribute/02.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.administrate + +-- 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/04.contribute/04.packaging_apps/02.technical_intro/packaging_apps.fr.md similarity index 61% rename from packaging_apps_fr.md rename to pages/04.contribute/04.packaging_apps/02.technical_intro/packaging_apps.fr.md index a0c1f114..9f8a1d75 100644 --- a/packaging_apps_fr.md +++ b/pages/04.contribute/04.packaging_apps/02.technical_intro/packaging_apps.fr.md @@ -1,11 +1,22 @@ -# Packaging d’applications <img src="/images/yunohost_package.png" width=100/> +--- +title: Packaging d'applications +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps' +--- + + 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 ; -* Maîtriser un minimum [git](/packaging_apps_git), le Shell et d’autres notions de programmation ; +* Un compte sur un serveur Git comme [GitHub](https://github.com/) pour pouvoir ensuite publier l’application ; +* Maîtriser un minimum [Git](/packaging_apps_git), le Shell et d’autres notions de programmation ; * Une [machine virtuelle ou sur un serveur distant](/install) ou un environnement de développement, [ynh-dev](https://github.com/yunohost/ynh-dev) ou [VirtualBox](/packaging_apps_virtualbox), pour packager et tester son paquet. @@ -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` -<a class="btn btn-lg btn-default" href="https://github.com/YunoHost/example_ynh">Paquet de base</a> 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 -<a class="btn btn-lg btn-default" href="/packaging_apps_manifest">Manifeste</a> +[div class="btn btn-lg btn-default"] [Manifeste](/packaging_apps_manifest) [/div] ## Les scripts -<a class="btn btn-lg btn-default" href="/packaging_apps_scripts">Scripts</a> +[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). -<a class="btn btn-lg btn-default" href="/packaging_apps_arguments_management">Gestion des arguments</a> +[div class="btn btn-lg btn-default"] [Gestion des arguments](/packaging_apps_arguments_management) [/div] -### Configuration Nginx -<a class="btn btn-lg btn-default" href="/packaging_apps_nginx_conf">Configuration Nginx</a> +### Configuration NGINX +[div class="btn btn-lg btn-default"] [Configuration NGINX](/packaging_apps_nginx_conf) [/div] ### Multi-instance -<a class="btn btn-lg btn-default" href="/packaging_apps_multiinstance">Multi-instance</a> +[div class="btn btn-lg btn-default"] [Multi-instance](/packaging_apps_multiinstance) [/div] ### Hooks -<a class="btn btn-lg btn-default" href="/packaging_apps_hooks">Hooks</a> +[div class="btn btn-lg btn-default"] [Hooks](/packaging_apps_hooks) [/div] ### Commandes pratiques -<a class="btn btn-lg btn-default" href="/packaging_apps_helpers">Commandes pratiques</a> - -### 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 @@ -83,13 +64,13 @@ Vous trouverez ci-dessous une liste des points à vérifier concernant la qualit * Votre script d’installation utilise une méthode d’installation en ligne de commande plutôt qu’un appel curl via un formulaire web d’installation ; * Votre script d’installation enregistre les réponses de l’utilisateur ; * Vous avez vérifié les sources de l’application avec une somme de contrôle (sha256, sha1 ou md5) ou une signature PGP ; -* Vos scripts ont été testés sur Debian Stretch 32 bits, 64 bits et ARM ; +* Vos scripts ont été testés sur Debian Buster 32 bits, 64 bits et ARM ; * Les scripts backup et restore sont présents et fonctionnels. 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 -<a class="btn btn-lg btn-default" href="https://github.com/YunoHost/package_checker">Vérificateur de paquets</a> +[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. -<a class="btn btn-lg btn-default" href="packaging_apps_ci">Intégration continue</a> +[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`. @@ -114,4 +95,4 @@ Un serveur d'intégration continue est a disposition des packagers désirant tes **!! Section obsolète au 08/03/19** - Le fonctionnement du projet est en cours d'évolution sur ce point. -Pour qu’une application devienne officielle, elle doit être suffisamment testée, stable et fonctionner sous Debian Stretch 64 bits, 32 bits et ARM. Si ces conditions vous paraissent réunies, demandez l’[intégration officielle](https://github.com/YunoHost/apps) de votre application. +Pour qu’une application devienne officielle, elle doit être suffisamment testée, stable et fonctionner sous Debian Buster 64 bits, 32 bits et ARM. Si ces conditions vous paraissent réunies, demandez l’[intégration officielle](https://github.com/YunoHost/apps) de votre application. diff --git a/packaging_apps.md b/pages/04.contribute/04.packaging_apps/02.technical_intro/packaging_apps.md similarity index 60% rename from packaging_apps.md rename to pages/04.contribute/04.packaging_apps/02.technical_intro/packaging_apps.md index bf2c2601..33da1b70 100644 --- a/packaging_apps.md +++ b/pages/04.contribute/04.packaging_apps/02.technical_intro/packaging_apps.md @@ -1,12 +1,23 @@ -# App packaging <img src="/images/yunohost_package.png" width=100/> +--- +title: App packaging +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps' +--- + + 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; -* Basic knowledge of [git](/packaging_apps_git), bash shell and other programming stuff; -* A testing [virtual machine or a distant server](/install), or a development environement, [ynh-dev](https://github.com/yunohost/ynh-dev) or [VirtualBox](/packaging_apps_virtualbox), to package and test the package. +* An account on a Git server (e.g. [GitHub](https://github.com/)) to publish the application; +* Basic knowledge of [Git](/packaging_apps_git), bash shell and other programming stuff; +* A testing [virtual machine or a distant server](/install) or [VirtualBox](/packaging_apps_virtualbox), to package and test the package. Alternatively you can also use [ynh-dev](https://github.com/yunohost/ynh-dev), it is meant for the core but can totally be used for developping apps, but be aware that for now the documentation on this part is lacking. ### Content A YunoHost package is composed of: @@ -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 class="btn btn-lg btn-default" href="https://github.com/YunoHost/example_ynh"> A basic package</a> +[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 -<a class="btn btn-lg btn-default" href="/packaging_apps_manifest">Manifest</a> +[div class="btn btn-lg btn-default"] [Manifest](/packaging_apps_manifest) [/div] ## Scripts -<a class="btn btn-lg btn-default" href="/packaging_apps_scripts">Scripts</a> +[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). -<a class="btn btn-lg btn-default" href="/packaging_apps_arguments_management">Arguments management</a> +[div class="btn btn-lg btn-default"] [Arguments management](/packaging_apps_arguments_management) [/div] -### Nginx configuration -<a class="btn btn-lg btn-default" href="/packaging_apps_nginx_conf">Nginx configuration</a> +### NGINX configuration +[div class="btn btn-lg btn-default"] [NGINX configuration](/packaging_apps_nginx_conf) [/div] ### Multi-instance -<a class="btn btn-lg btn-default" href="/packaging_apps_multiinstance">Multi-instance</a> +[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 -<a class="btn btn-lg btn-default" href="/packaging_apps_helpers">Helpers</a> - -### 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): @@ -101,13 +81,13 @@ Here is a list of best practices for application install scripts: * install script should use the command-line method instead of calls to curl through web install form; * install script should save install answers; * application sources should be checked with a control sum (sha256, sha1 or md5) or a PGP signature; -* scripts should be tested on Debian Stretch 32 bits, 64 bits and ARM architectures; +* 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 -<a class="btn btn-lg btn-default" href="https://github.com/YunoHost/package_checker">Package checker</a> +[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. -<a class="btn btn-lg btn-default" href="packaging_apps_ci">Continuous integration</a> +[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`. @@ -132,4 +112,4 @@ A continuous integration server is available for packagers who want to test thei **!! This section is obsolete as of 08/03/19** - The project's organization regarging this point is to be changed. -To become an official application, it must be tested well enough, be stable and should work on Debian Stretch 64 bits, 32 bits and ARM architectures. If you think those conditions are met, ask for [official integration](https://github.com/YunoHost/apps) of your application. +To become an official application, it must be tested well enough, be stable and should work on Debian Buster 64 bits, 32 bits and ARM architectures. If you think those conditions are met, ask for [official integration](https://github.com/YunoHost/apps) of your application. diff --git a/packaging_apps_git_fr.md b/pages/04.contribute/04.packaging_apps/03.git/packaging_apps_git.fr.md similarity index 97% rename from packaging_apps_git_fr.md rename to pages/04.contribute/04.packaging_apps/03.git/packaging_apps_git.fr.md index 95172258..c2ed3187 100644 --- a/packaging_apps_git_fr.md +++ b/pages/04.contribute/04.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 : -<img src="/images/github_branch.png" width=100%> + #### 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 : -<img src="/images/github_edit.png" width=100%> + 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... -<img src="/images/github_commit.png" width=100%> + 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 : -<img src="/images/github_pull_request.png" width=100%> + 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. @@ -75,7 +82,7 @@ Lors de la création d'une pull request à partir d'un fork, pour faciliter le t Conformément à la [YEP 1.7](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines.md#yep-17), votre application doit être intégrée à l'organisation YunoHost-Apps, mais si vous n'avez jamais contribué à une application auparavant ou si vous n'avez jamais eu d'application dans cette organisation, vous n'en aurez peut-être pas l'autorisation. -Tout d'abord, vous devez avoir la permission d'écrire dans l'organisation, pour ce faire, demandez au groupe Apps sur le salon xmpp Apps. +Tout d'abord, vous devez avoir la permission d'écrire dans l'organisation, pour ce faire, demandez au groupe Apps sur le salon XMPP Apps. Pour transférer votre application sur l'organisation YunoHost-Apps, allez dans votre dépôt et dans l'onglet *Settings*. En bas de la page, vous trouverez *Transfer ownership*. @@ -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. -<img src="/images/github_create_new_repo.png" width=100%> + 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/04.contribute/04.packaging_apps/03.git/packaging_apps_git.md similarity index 96% rename from packaging_apps_git.md rename to pages/04.contribute/04.packaging_apps/03.git/packaging_apps_git.md index 1ddb6ff2..58062371 100644 --- a/packaging_apps_git.md +++ b/pages/04.contribute/04.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: -<img src="/images/github_branch.png" width=100%> + #### 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: -<img src="/images/github_edit.png" width=100%> + 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... -<img src="/images/github_commit.png" width=100%> + 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: -<img src="/images/github_pull_request.png" width=100%> + 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. @@ -75,7 +82,7 @@ When creating a pull request from a fork, to ease the work of the reviewers, **d Following the [YEP 1.7](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines.md#yep-17), your app has to be into the YunoHost-Apps organization, but if you have never contributed to an app before or never had any app into this organization you may not have the permission. -First, you need the permission to write into the organization, to do so, ask to the Apps group on the Apps xmpp room. +First, you need the permission to write into the organization, to do so, ask to the Apps group on the Apps XMPP room. To transfer your app to the YunoHost-Apps organization, go to your repository and to *Settings* tab. At the bottom of the page, you will find *Transfer ownership*. @@ -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. -<img src="/images/github_create_new_repo.png" width=100%> + 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/04.contribute/04.packaging_apps/04.virtualbox/packaging_apps_virtualbox.fr.md similarity index 91% rename from packaging_apps_virtualbox_fr.md rename to pages/04.contribute/04.packaging_apps/04.virtualbox/packaging_apps_virtualbox.fr.md index baaa0f5c..7911e92d 100644 --- a/packaging_apps_virtualbox_fr.md +++ b/pages/04.contribute/04.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. @@ -13,7 +20,7 @@ Nous parlerons ici de VirtualBox, pour son approche graphique facile à utiliser ## Installer VirtualBox -Depuis un système GNU Linux, installer simplement le paquet `virtualbox-qt`. +Depuis un système GNU/Linux, installer simplement le paquet `virtualbox-qt`. Depuis un système Windows ou macOS, il faudra se référer à la page de [téléchargement de VirtualBox](https://www.virtualbox.org/wiki/Downloads) pour récupérer le fichier d'installation adéquat. Le paquet virtualbox est déprécié depuis debian 9, un fichier d'installation .deb est disponible sur la même page. Quel que soit votre système, il ne devrait pas être nécessaire d'installer l'extension pack ou les additions invités. @@ -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" -<img src="/images/virtualbox_packaging1-fr.jpg" width=80%> + Et on crée un premier instantané -<img src="/images/virtualbox_packaging2-fr.jpg" width=30%> + À présent on peut commencer à travailler sur la machine virtuelle et créer autant d'instantanés que souhaité pour jalonner le travail. -<img src="/images/virtualbox_packaging3-fr.jpg" width=80%> + 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. -<img src="/images/virtualbox_packaging4-fr.jpg" width=80%> + 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". -<img src="/images/virtualbox_packaging5-fr.jpg" width=80%> + > 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. -<img src="/images/virtualbox_packaging6.jpg" width=80%> + > Sur Windows ou macOS, l'explorateur de fichier ne supporte pas nativement le protocole sftp… diff --git a/packaging_apps_virtualbox.md b/pages/04.contribute/04.packaging_apps/04.virtualbox/packaging_apps_virtualbox.md similarity index 87% rename from packaging_apps_virtualbox.md rename to pages/04.contribute/04.packaging_apps/04.virtualbox/packaging_apps_virtualbox.md index 49e87483..0a3b6c9a 100644 --- a/packaging_apps_virtualbox.md +++ b/pages/04.contribute/04.packaging_apps/04.virtualbox/packaging_apps_virtualbox.md @@ -1,19 +1,26 @@ -# 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. +This documentation page aims at explaining how to setup a YunoHost virtual server, using VirtualBox, to work on application packaging. -## Why use VirtualBox rather than an actual YunoHost production server to package an application ? +## Why use VirtualBox rather than an actual YunoHost production server to package an application? -There are mostly two reasons why one should prefer a virtual server rather than their own server : +There are mostly two reasons why one should prefer a virtual server rather than their own server: -- You can freely torture a virtual server without any risk of breaking it, since you can always restore it to a former working state. It would really be a pity to break your own real server ! +- You can freely torture a virtual server without any risk of breaking it, since you can always restore it to a former working state. It would really be a pity to break your own real server! - In a typical workflow, a virtual server state would be restored from a known snapshot before starting any work on it, so as to always keep a clean system, without any residues of a former installation. This allows to always be as close a possible to a user first installation. We will discuss VirtualBox in this guide, as it comes with an easy to use GUI. If you prefer a pure commandline approach to handling your virtual machine, you should use [ynh-dev](/dev) instead. ## Installing VirtualBox -From a GNU Linux system, simply install the `virtualbox-qt` package. +From a GNU/Linux system, simply install the `virtualbox-qt` package. From a Windows or macOS machine, you'd have to refer to the [VirtualBox download page](https://www.virtualbox.org/wiki/Downloads) to fetch the appropriate installation package. The virtualbox package is deprecated since Debian 9, a `.deb` installation package is available on the abovementioned referenced page. Whatever your system, there should be no need to install the extension pack or the guest addons. @@ -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 -<img src="/images/virtualbox_packaging1-en.png" width=80%> + Here, we're creating a first snapshot -<img src="/images/virtualbox_packaging2-en.png" width=30%> + We can now start to work on the virtual machine and create as many snapshots as desired for each milestone of our modifications. -<img src="/images/virtualbox_packaging3-en.png" width=80%> + 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. -<img src="/images/virtualbox_packaging4-en.png" width=80%> + 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. -<img src="/images/virtualbox_packaging5-en.png" width=80%> + > 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. -<img src="/images/virtualbox_packaging6.jpg" width=80%> + -> Note: on Windows or macOS, the file explorer does not natively support the `sftp` protocol… +> 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/04.contribute/04.packaging_apps/05.manifest/packaging_apps_manifest.fr.md similarity index 90% rename from packaging_apps_manifest_fr.md rename to pages/04.contribute/04.packaging_apps/05.manifest/packaging_apps_manifest.fr.md index 50a9c611..f76bfe74 100644 --- a/packaging_apps_manifest_fr.md +++ b/pages/04.contribute/04.packaging_apps/05.manifest/packaging_apps_manifest.fr.md @@ -1,4 +1,11 @@ -<a class="btn btn-lg btn-default" href="/packaging_apps">Packaging d’application</a> +--- +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/04.contribute/04.packaging_apps/05.manifest/packaging_apps_manifest.md similarity index 92% rename from packaging_apps_manifest.md rename to pages/04.contribute/04.packaging_apps/05.manifest/packaging_apps_manifest.md index f4407aa1..88a18683 100644 --- a/packaging_apps_manifest.md +++ b/pages/04.contribute/04.packaging_apps/05.manifest/packaging_apps_manifest.md @@ -1,4 +1,11 @@ -<a class="btn btn-lg btn-default" href="/packaging_apps">Application packaging</a> +--- +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/04.contribute/04.packaging_apps/06.scripts/packaging_apps_scripts.fr.md similarity index 88% rename from packaging_apps_scripts_fr.md rename to pages/04.contribute/04.packaging_apps/06.scripts/packaging_apps_scripts.fr.md index 8854f287..7a37129a 100644 --- a/packaging_apps_scripts_fr.md +++ b/pages/04.contribute/04.packaging_apps/06.scripts/packaging_apps_scripts.fr.md @@ -1,6 +1,11 @@ -<a class="btn btn-lg btn-default" href="/packaging_apps">Packaging d’application</a> - -## 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/04.contribute/04.packaging_apps/06.scripts/packaging_apps_scripts.md similarity index 95% rename from packaging_apps_scripts.md rename to pages/04.contribute/04.packaging_apps/06.scripts/packaging_apps_scripts.md index 6e4f6f88..28862b55 100644 --- a/packaging_apps_scripts.md +++ b/pages/04.contribute/04.packaging_apps/06.scripts/packaging_apps_scripts.md @@ -1,6 +1,11 @@ -<a class="btn btn-lg btn-default" href="/packaging_apps">Application packaging</a> - -## 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/04.contribute/04.packaging_apps/07.arguments/01.arguments_format/packaging_apps_arguments_format.md similarity index 90% rename from packaging_apps_arguments_format.md rename to pages/04.contribute/04.packaging_apps/07.arguments/01.arguments_format/packaging_apps_arguments_format.md index 4da68967..010748c8 100644 --- a/packaging_apps_arguments_format.md +++ b/pages/04.contribute/04.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 @@ -87,7 +94,7 @@ Example in toml: [maybe.some.stuff.before.the_name] type = "string" ask.en = "the question in english" -ask.fr = "the question in french" +ask.fr = "la question en français" example = "an example value" # optional choices = ["fr", "en"] default = "en" # optional @@ -137,7 +144,7 @@ And in json: ### Path -This type will ask the user to chose an url path (generally to happen it to a +This type will ask the user to chose an URL path (generally to happen it to a domain) like "/path/to/my/app" Example in toml: @@ -250,6 +257,34 @@ And in json: }, ``` +### Number + +Like string except the user needs to enter a number + +Example in toml: + +```toml +[maybe.some.stuff.before.the_name] +type = "number" +ask.en = "the question in english" +ask.fr = "the question in french" +default = 0 +``` + +And in json: + +```javascript +{ + "name": "the_name", + "type": "number", + "ask": { + "en": "the question in english", + "fr": "the question in french" + }, + "default": 0 +}, +``` + ### App This type will ask the user to select an application in the list of installed diff --git a/packaging_apps_arguments_management_fr.md b/pages/04.contribute/04.packaging_apps/07.arguments/packaging_apps_arguments_management.fr.md similarity index 78% rename from packaging_apps_arguments_management_fr.md rename to pages/04.contribute/04.packaging_apps/07.arguments/packaging_apps_arguments_management.fr.md index 5d66e707..729ea1b8 100644 --- a/packaging_apps_arguments_management_fr.md +++ b/pages/04.contribute/04.packaging_apps/07.arguments/packaging_apps_arguments_management.fr.md @@ -1,6 +1,12 @@ -<a class="btn btn-lg btn-default" href="/packaging_apps">Packaging d’application</a> +--- +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. @@ -16,13 +22,13 @@ Les scripts remove, upgrade, backup et restore peuvent avoir besoin de ces argum Pour cela, YunoHost peut sauvegarder les arguments avec cette commande : ```bash # Store config on YunoHost instance -ynh_app_setting_set "$app" domain "$domain" +ynh_app_setting_set --app="$app" --key="domain" --value="$domain" ``` Elle est généralement utilisée dans le script d’installation. Ensuite, le script peut récupérer les arguments sauvegardés avec cette commande : ```bash -domain=$(ynh_app_setting_get $app domain) +domain=$(ynh_app_setting_get --app "$app" --key=domain) ``` Ces données sont sauvegardées dans `/etc/yunohost/apps/<app_name>/settings.yml`. diff --git a/packaging_apps_arguments_management.md b/pages/04.contribute/04.packaging_apps/07.arguments/packaging_apps_arguments_management.md similarity index 86% rename from packaging_apps_arguments_management.md rename to pages/04.contribute/04.packaging_apps/07.arguments/packaging_apps_arguments_management.md index 130e3de4..03300782 100644 --- a/packaging_apps_arguments_management.md +++ b/pages/04.contribute/04.packaging_apps/07.arguments/packaging_apps_arguments_management.md @@ -1,6 +1,12 @@ -<a class="btn btn-lg btn-default" href="/packaging_apps">Application packaging</a> +--- +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/pages/04.contribute/04.packaging_apps/08.groups_permissions/packaging_apps_permissions.md b/pages/04.contribute/04.packaging_apps/08.groups_permissions/packaging_apps_permissions.md new file mode 100644 index 00000000..16779476 --- /dev/null +++ b/pages/04.contribute/04.packaging_apps/08.groups_permissions/packaging_apps_permissions.md @@ -0,0 +1,82 @@ +--- +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. + +If you wish to make the application publicly available, instead of the old `unprotected_urls` mechanism, you should give access to the special group `visitors`: + +```shell +ynh_permission_update --permission "main" --add visitors +``` + +If you wish to create a custom permission for your app (e.g. to restrict access to an admin interface) you may use the following helpers: + +```shell +ynh_permission_create --permission "admin" --url "/admin" --allowed "$admin_user" --label "Label for your permission" +``` + +You don't need to take care of removing permissions or backing up/restoring them as it is handled by the core of YunoHost. + +### Migrating away from the legacy permission management + +When migrating/fixing an app still using the legacy permission system, it should be understood that the accesses are now to be managed by features from the core, outside of the application scripts! + +Application scripts are only expected to: +- if relevant, during the install script, initialize the main permission of the app as public (`visitors`) or private (`all_users`) or only accessible to specific groups/users ; +- if relevant, create and initialize any other specific permission (e.g. to some admin interface) in the install script (and *maybe* in some migration happening in the upgrade script). + +Applications scripts should absolutely **NOT** mess up with any already-existing app accesses (including `unprotected`/`skipped_uris` settings) during any other case, as *it would reset any admin-defined access rule*! + +When migrating away from the legacy permission, you should: +- remove any management of `$is_public`-like or `$admin_user`-like setting, except for any manifest question meant to either *initialize* the app as public/private or specific permissions ; +- remove the old legacy permissions. Check out the recommended way to proceed in the example_ynh app (in particular [this code snippet](https://github.com/YunoHost/example_ynh/pull/111/files#diff-57aeb84da86cb7420dfedd8e49bc644fb799d5413d01927a0417bde753e8922f)) + +It should boil down to : +```bash +if ynh_legacy_permissions_exists; then + ynh_legacy_permissions_delete_all + + ynh_app_setting_delete --app=$app --key=is_public + + # Create the permission using the new framework (if your app has relevant additional permissions) + ynh_permission_create --permission="admin" --url="/admin" --allowed=$admin +fi +``` + +- remove any call to `yunohost app addaccess` and similar actions that are now obsolete and deprecated. +- if your app use LDAP and support filter, use the filter `'(&(objectClass=posixAccount)(permission=cn=YOUR_APP.main,ou=permission,dc=yunohost,dc=org))'` to allow users who have this permission. (A complete documentation of LDAP [here](https://moulinette.readthedocs.io/en/latest/ldap.html) if you want to undestand how it works with YunoHost) + +#### 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). +- 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`) + +##### Correspondance between the old and new permission mecanism + +| | with auth header | no auth header | +| :---------- | :--------------- | :------------- | +| **public** | unprotected_uris | skipped_uris | +| **private** | protected_uris | N/A | + + +| | with auth header | no auth header | +| :---------- | :------------------------------------------ | :------------------------------------------- | +| **public** | auth_header=True, visitor group allowed | auth_header=False, visitor group allowed | +| **private** | auth_header=True, visitor group not allowed | auth_header=False, visitor group not allowed | + + +All of theses feature are managable by theses following helper: +- `ynh_permission_create` +- `ynh_permission_url` +- `ynh_permission_update` + +If you have any question, please contact the app team diff --git a/packaging_apps_nginx_conf_fr.md b/pages/04.contribute/04.packaging_apps/09.nginx/packaging_apps_nginx_conf.fr.md similarity index 56% rename from packaging_apps_nginx_conf_fr.md rename to pages/04.contribute/04.packaging_apps/09.nginx/packaging_apps_nginx_conf.fr.md index 1f512cc3..14dc2e5f 100644 --- a/packaging_apps_nginx_conf_fr.md +++ b/pages/04.contribute/04.packaging_apps/09.nginx/packaging_apps_nginx_conf.fr.md @@ -1,29 +1,37 @@ -# Configuration Nginx -Ce tutoriel a pour but d’aider à la mise en place d’une configuration Nginx pour le packaging d’application. +--- +title: Configuration NGINX +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_nginx_conf' +--- -#### Configuration Nginx +Ce tutoriel a pour but d’aider à la mise en place d’une configuration NGINX pour le packaging d’application. + +#### Configuration NGINX La configuration doit être mise dans `conf/nginx.conf`. Il s’agira d’utiliser **FastCGI** ou un **proxy_pass** suivant l’application : * **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; } ``` @@ -44,15 +52,15 @@ sed -i "s@YNH_EXAMPLE_PATH@$path@g" ../conf/nginx.conf sed -i "s@YNH_EXAMPLE_PORT@$port@g" ../conf/nginx.conf sed -i "s@YNH_EXEMPLE_DOMAIN@$domain@g" ../conf/nginx.conf ``` -Il faut ensuite déplacer ce fichier de configuration dans la configuration de Nginx, puis recharger la configuration de Nginx : +Il faut ensuite déplacer ce fichier de configuration dans la configuration de NGINX, puis recharger la configuration de NGINX : ```bash cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf sudo service nginx reload ``` -Si Nginx ne redémarre pas, il se peut que le fichier de configuration ne soit pas correct. +Si NGINX ne redémarre pas, il se peut que le fichier de configuration ne soit pas correct. #### Script de suppression -Il s’agit de supprimer la configuration Nginx pour cette application, puis de recharger la configuration de Nginx : +Il s’agit de supprimer la configuration NGINX pour cette application, puis de recharger la configuration de NGINX : ```bash rm -f /etc/nginx/conf.d/$domain.d/$app.conf sudo service nginx reload diff --git a/packaging_apps_nginx_conf.md b/pages/04.contribute/04.packaging_apps/09.nginx/packaging_apps_nginx_conf.md similarity index 51% rename from packaging_apps_nginx_conf.md rename to pages/04.contribute/04.packaging_apps/09.nginx/packaging_apps_nginx_conf.md index 7756793f..f6999fb6 100644 --- a/packaging_apps_nginx_conf.md +++ b/pages/04.contribute/04.packaging_apps/09.nginx/packaging_apps_nginx_conf.md @@ -1,29 +1,37 @@ -# Nginx configuration -This tutorial aim to help setup Nginx configuration for application packaging. +--- +title: NGINX configuration +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_nginx_conf' +--- -#### Nginx configuration +This tutorial aim to help setup NGINX configuration for application packaging. + +#### NGINX configuration Configuration must be in `conf/nginx.conf`. We must use **FastCGI** or a **proxy_pass** following the application: * **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; } ``` @@ -44,15 +52,15 @@ sed -i "s@YNH_EXAMPLE_PATH@$path@g" ../conf/nginx.conf sed -i "s@YNH_EXAMPLE_PORT@$port@g" ../conf/nginx.conf sed -i "s@YNH_EXEMPLE_DOMAIN@$domain@g" ../conf/nginx.conf ``` -We must move that configuration file in Nginx configuration, then reload Nginx configuration: +We must move that configuration file in NGINX configuration, then reload NGINX configuration: ```bash cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf sudo service nginx reload ``` -If Nginx won't restart, it's possible that this configuration file isn't right. +If NGINX won't restart, it's possible that this configuration file isn't right. #### Remove script -We must remove Nginx configuration of this application, then reload Nginx configuration: +We must remove NGINX configuration of this application, then reload NGINX configuration: ```bash rm -f /etc/nginx/conf.d/$domain.d/$app.conf sudo service nginx reload diff --git a/packaging_apps_multiinstance_fr.md b/pages/04.contribute/04.packaging_apps/10.multi_instance/packaging_apps_multiinstance.fr.md similarity index 68% rename from packaging_apps_multiinstance_fr.md rename to pages/04.contribute/04.packaging_apps/10.multi_instance/packaging_apps_multiinstance.fr.md index 58a6809b..df26be28 100644 --- a/packaging_apps_multiinstance_fr.md +++ b/pages/04.contribute/04.packaging_apps/10.multi_instance/packaging_apps_multiinstance.fr.md @@ -1,12 +1,18 @@ -<a class="btn btn-lg btn-default" href="/packaging_apps">Packaging d’application</a> +--- +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 Lorsque YunoHost installe l’application, il passe au script dans la variable `$YNH_APP_INSTANCE_NAME` la valeur `id__n` avec l’identifiant de l’application `id` provenant du manifeste et `n` un nombre incrémentée à chaque nouvelle instance de l’application. -**Par exemple** : dans le script roundcube, il faut nommer la base de données `roundcube`, le dossier d’installation `roundcube` et la [configuration Nginx](/packaging_apps_nginx_conf) `roundcube`. De cette manière, la seconde installation de roundcube ne rentrera pas en conflit avec la première, et sera installée dans la base de données `roundcube__2`, dans le répertoire `roundcube__2`, et avec la configuration Nginx `roundcube__2`. +**Par exemple** : dans le script Roundcube, il faut nommer la base de données `roundcube`, le dossier d’installation `roundcube` et la [configuration NGINX](/packaging_apps_nginx_conf) `roundcube`. De cette manière, la seconde installation de Roundcube ne rentrera pas en conflit avec la première, et sera installée dans la base de données `roundcube__2`, dans le répertoire `roundcube__2`, et avec la configuration NGINX `roundcube__2`. Récupération de l'identifiant de l'app (incluant l'id multi-instance) : diff --git a/packaging_apps_multiinstance.md b/pages/04.contribute/04.packaging_apps/10.multi_instance/packaging_apps_multiinstance.md similarity index 53% rename from packaging_apps_multiinstance.md rename to pages/04.contribute/04.packaging_apps/10.multi_instance/packaging_apps_multiinstance.md index 03bc6680..a9318a6a 100644 --- a/packaging_apps_multiinstance.md +++ b/pages/04.contribute/04.packaging_apps/10.multi_instance/packaging_apps_multiinstance.md @@ -1,12 +1,18 @@ -<a class="btn btn-lg btn-default" href="/packaging_apps">Application packaging</a> +--- +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 -When YunoHost installs the application, it passes `$YNH_APP_INSTANCE_NAME` var to the script, set to value `id__n` with the application `id` coming from the manifest and `n` being an integer incremented each time a new instance of the application is installed. +When YunoHost installs the application, it passes `$YNH_APP_INSTANCE_NAME` var to the script, set to value `id__n` with the application `id` coming from the manifest and `n` being an integer incremented each time a new instance of the application is installed. -**E.g.** in the roundcube script, database is called `roundcube`, the install directory `roundcube` and the [Nginx configuration](/packaging_apps_nginx_conf) `roundcube`. This way, the second instance of roundcube will not conflict with the first one, and will be installed in the `roundcube__2` database, in the `roundcube__2`directory, and with the `roundcube__2` Nginx configuration. +**E.g.** in the Roundcube script, database is called `roundcube`, the install directory `roundcube` and the [NGINX configuration](/packaging_apps_nginx_conf) `roundcube`. This way, the second instance of Roundcube will not conflict with the first one, and will be installed in the `roundcube__2` database, in the `roundcube__2`directory, and with the `roundcube__2` NGINX configuration. Retrieve app identifier (including the multi-instance id): ```bash diff --git a/pages/04.contribute/04.packaging_apps/11.helpers/packaging_apps_helpers.md b/pages/04.contribute/04.packaging_apps/11.helpers/packaging_apps_helpers.md new file mode 100644 index 00000000..356d782d --- /dev/null +++ b/pages/04.contribute/04.packaging_apps/11.helpers/packaging_apps_helpers.md @@ -0,0 +1,2559 @@ +--- +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/981fca64e234848510a2daeafec1eda07516e0ac/doc/generate_helper_doc.py) on 01/19/2022 (YunoHost version 4.3.6.2) + + +## APT + +#### ynh_package_is_installed +[details summary="<i>Check either a package is installed or not</i>" 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**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/apt#L53) +[/details] +---------------- + +#### ynh_package_version +[details summary="<i>Get the version of an installed package</i>" 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**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/apt#L75) +[/details] +---------------- + +#### ynh_package_update +[details summary="<i>Update package index files</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_package_update` + +**Details**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/apt#L107) +[/details] +---------------- + +#### ynh_package_install +[details summary="<i>Install package(s)</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_package_install name [name [...]]` + +**Arguments**: +- `name`: the package name to install + +**Details**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/apt#L117) +[/details] +---------------- + +#### ynh_package_remove +[details summary="<i>Remove package(s)</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_package_remove name [name [...]]` + +**Arguments**: +- `name`: the package name to remove + +**Details**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/apt#L128) +[/details] +---------------- + +#### ynh_package_autoremove +[details summary="<i>Remove package(s) and their uneeded dependencies</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_package_autoremove name [name [...]]` + +**Arguments**: +- `name`: the package name to remove + +**Details**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/apt#L138) +[/details] +---------------- + +#### ynh_package_autopurge +[details summary="<i>Purge package(s) and their uneeded dependencies</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_package_autopurge name [name [...]]` + +**Arguments**: +- `name`: the package name to autoremove and purge + +**Details**:<br/> +Requires YunoHost version 2.7.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/apt#L148) +[/details] +---------------- + +#### ynh_install_app_dependencies +[details summary="<i>Define and install dependencies with a equivs control file</i>" 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**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/apt#L224) +[/details] +---------------- + +#### ynh_add_app_dependencies +[details summary="<i>Add dependencies to install with ynh_install_app_dependencies</i>" 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**:<br/> +Requires YunoHost version 3.8.1 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/apt#L369) +[/details] +---------------- + +#### ynh_remove_app_dependencies +[details summary="<i>Remove fake package and its dependencies</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_remove_app_dependencies` + +**Details**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/apt#L388) +[/details] +---------------- + +#### ynh_install_extra_app_dependencies +[details summary="<i>Install packages from an extra repository properly.</i>" 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**:<br/> +Requires YunoHost version 3.8.1 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/apt#L419) +[/details] +---------------- + + +## BACKUP + +#### ynh_backup +[details summary="<i>Add a file or a directory to the list of paths to backup</i>" 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. +- `arg`: Deprecated arg + +**Details**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/backup#L65) +[/details] +---------------- + +#### ynh_restore +[details summary="<i>Restore all files that were previously backuped in a core backup script or app backup script</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_restore` + +**Details**:<br/> +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/backup#L180) +[/details] +---------------- + +#### ynh_restore_file +[details summary="<i>Restore a file or a directory</i>" 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**:<br/> +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/$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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/backup#L239) +[/details] +---------------- + +#### ynh_store_file_checksum +[details summary="<i>Calculate and store a file checksum into the app settings</i>" 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**:<br/> +$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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/backup#L311) +[/details] +---------------- + +#### ynh_backup_if_checksum_is_different +[details summary="<i>Verify the checksum and backup the file if it's different</i>" 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**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/backup#L355) +[/details] +---------------- + +#### ynh_delete_file_checksum +[details summary="<i>Delete a file checksum from the app settings</i>" 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**:<br/> +$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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/backup#L386) +[/details] +---------------- + +#### ynh_backup_before_upgrade +[details summary="<i>Make a backup in case of failed upgrade</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_backup_before_upgrade` + +**Details**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/backup#L421) +[/details] +---------------- + +#### ynh_restore_upgradebackup +[details summary="<i>Restore a previous backup if the upgrade process failed</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_restore_upgradebackup` + +**Details**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/backup#L469) +[/details] +---------------- + + +## CONFIG + + +## FAIL2BAN + +#### ynh_add_fail2ban_config +[details summary="<i>Create a dedicated fail2ban config (jail and filter conf files)</i>" 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 [--others_var="list of others variables to replace"]` + +**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 for example : 'var_1 var_2 ...' + +**Details**:<br/> +----------------------------------------------------------------------------- + +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+)\- <HOST> \- \d+ \- Received request\: POST /_matrix/client/r0/login\??<SKIPLINES>%(__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'<SKIPLINES>%(__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 "`<HOST>`" can be used for standard +IP/hostname matching and is only an alias for `(?:::f{4,6}:)?(?P<host>[\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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/fail2ban#L65) +[/details] +---------------- + +#### ynh_remove_fail2ban_config +[details summary="<i>Remove the dedicated fail2ban config (jail and filter conf files)</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_remove_fail2ban_config` + +**Details**:<br/> +Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/fail2ban#L124) +[/details] +---------------- + + +## GETOPTS + + +## HARDWARE + +#### ynh_get_ram +[details summary="<i>Get the total or free amount of RAM+swap on the system</i>" 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**:<br/> +Requires YunoHost version 3.8.1 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/hardware#L13) +[/details] +---------------- + +#### ynh_require_ram +[details summary="<i>Return 0 or 1 depending if the system has a given amount of RAM+swap free or total</i>" 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**:<br/> +Requires YunoHost version 3.8.1 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/hardware#L75) +[/details] +---------------- + + +## LOGGING + +#### ynh_die +[details summary="<i>Print a message to stderr and exit</i>" 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**:<br/> +Requires YunoHost version 2.4.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/logging#L10) +[/details] +---------------- + +#### ynh_print_info +[details summary="<i>Display a message in the 'INFO' logging category</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_print_info --message="Some message"` + +**Arguments**: +- `-m`, `--message=`: Message to display + +**Details**:<br/> +Requires YunoHost version 3.2.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/logging#L30) +[/details] +---------------- + +#### ynh_print_warn +[details summary="<i>Print a warning on stderr</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_print_warn --message="Text to print"` + +**Arguments**: +- `-m`, `--message=`: The text to print + +**Details**:<br/> +Requires YunoHost version 3.2.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/logging#L56) +[/details] +---------------- + +#### ynh_print_err +[details summary="<i>Print an error on stderr</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_print_err --message="Text to print"` + +**Arguments**: +- `-m`, `--message=`: The text to print + +**Details**:<br/> +Requires YunoHost version 3.2.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/logging#L73) +[/details] +---------------- + +#### ynh_exec_err +[details summary="<i>Execute a command and print the result as an error</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_exec_err your command and args` + +**Arguments**: +- `command`: command to execute + +**Details**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/logging#L92) +[/details] +---------------- + +#### ynh_exec_warn +[details summary="<i>Execute a command and print the result as a warning</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_exec_warn your command and args` + +**Arguments**: +- `command`: command to execute + +**Details**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/logging#L113) +[/details] +---------------- + +#### ynh_exec_warn_less +[details summary="<i>Execute a command and force the result to be printed on stdout</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_exec_warn_less your command and args` + +**Arguments**: +- `command`: command to execute + +**Details**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/logging#L134) +[/details] +---------------- + +#### ynh_exec_quiet +[details summary="<i>Execute a command and redirect stdout in /dev/null</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_exec_quiet your command and args` + +**Arguments**: +- `command`: command to execute + +**Details**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/logging#L155) +[/details] +---------------- + +#### ynh_exec_fully_quiet +[details summary="<i>Execute a command and redirect stdout and stderr in /dev/null</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_exec_quiet your command and args` + +**Arguments**: +- `command`: command to execute + +**Details**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/logging#L176) +[/details] +---------------- + +#### ynh_script_progression +[details summary="<i>Print a progress bar showing the progression of an app script</i>" 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**:<br/> +Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/logging#L237) +[/details] +---------------- + +#### ynh_return +[details summary="<i>Return data to the YunoHost core for later processing +(to be used by special hooks like app config panel and core diagnosis)</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_return somedata` + +**Details**:<br/> +Requires YunoHost version 3.6.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/logging#L318) +[/details] +---------------- + + +## LOGROTATE + +#### ynh_use_logrotate +[details summary="<i>Use logrotate to manage the logfile</i>" 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**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/logrotate#L18) +[/details] +---------------- + +#### ynh_remove_logrotate +[details summary="<i>Remove the app's logrotate config.</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_remove_logrotate` + +**Details**:<br/> +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/logrotate#L100) +[/details] +---------------- + + +## MULTIMEDIA + +#### ynh_multimedia_build_main_dir +[details summary="<i>Initialize the multimedia directory system</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_multimedia_build_main_dir` + +**Details**:<br/> +Requires YunoHost version 4.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/multimedia#L11) +[/details] +---------------- + +#### ynh_multimedia_addfolder +[details summary="<i>Add a directory in yunohost.multimedia</i>" 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**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/multimedia#L64) +[/details] +---------------- + +#### ynh_multimedia_addaccess +[details summary="<i>Allow an user to have an write authorisation in multimedia directories</i>" 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**:<br/> +Requires YunoHost version 4.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/multimedia#L93) +[/details] +---------------- + + +## MYSQL + +#### ynh_mysql_connect_as +[details summary="<i>Open a connection as a user</i>" 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**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/mysql#L15) +[/details] +---------------- + +#### ynh_mysql_execute_as_root +[details summary="<i>Execute a command as root user</i>" 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**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/mysql#L36) +[/details] +---------------- + +#### ynh_mysql_execute_file_as_root +[details summary="<i>Execute a command from a file as root user</i>" 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**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/mysql#L60) +[/details] +---------------- + +#### ynh_mysql_dump_db +[details summary="<i>Dump a database</i>" 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**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/mysql#L128) +[/details] +---------------- + +#### ynh_mysql_user_exists +[details summary="<i>Check if a mysql user exists</i>" 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**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/mysql#L160) +[/details] +---------------- + +#### ynh_mysql_setup_db +[details summary="<i>Create a database, an user and its password. Then store the password in the app's config</i>" 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**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/mysql#L198) +[/details] +---------------- + +#### ynh_mysql_remove_db +[details summary="<i>Remove a database if it exists, and the associated user</i>" 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**:<br/> +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/mysql#L224) +[/details] +---------------- + + +## NETWORK + +#### ynh_find_port +[details summary="<i>Find a free port and return it</i>" 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**:<br/> +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/network#L12) +[/details] +---------------- + +#### ynh_port_available +[details summary="<i>Test if a port is available</i>" 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**:<br/> +Requires YunoHost version 3.8.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/network#L36) +[/details] +---------------- + +#### ynh_validate_ip4 +[details summary="<i>Validate an IPv4 address</i>" 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**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/network#L99) +[/details] +---------------- + +#### ynh_validate_ip6 +[details summary="<i>Validate an IPv6 address</i>" 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**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/network#L119) +[/details] +---------------- + + +## NGINX + +#### ynh_add_nginx_config +[details summary="<i>Create a dedicated nginx config</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_add_nginx_config` + +**Details**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/nginx#L19) +[/details] +---------------- + +#### ynh_remove_nginx_config +[details summary="<i>Remove the dedicated nginx config</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_remove_nginx_config` + +**Details**:<br/> +Requires YunoHost version 2.7.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/nginx#L39) +[/details] +---------------- + + +## NODEJS + +#### ynh_use_nodejs +[details summary="<i>Load the version of node for an app, and set variables.</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_use_nodejs` + +**Details**:<br/> +`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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/nodejs#L73) +[/details] +---------------- + +#### ynh_install_nodejs +[details summary="<i>Install a specific version of nodejs</i>" 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**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/nodejs#L113) +[/details] +---------------- + +#### ynh_remove_nodejs +[details summary="<i>Remove the version of node used by the app.</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_remove_nodejs` + +**Details**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/nodejs#L190) +[/details] +---------------- + + +## PERMISSION + +#### ynh_permission_create +[details summary="<i>Create a new permission for the app</i>" 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**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/permission#L66) +[/details] +---------------- + +#### ynh_permission_delete +[details summary="<i>Remove a permission for the app (note that when the app is removed all permission is automatically removed)</i>" 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**:<br/> +Requires YunoHost version 3.7.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/permission#L152) +[/details] +---------------- + +#### ynh_permission_exists +[details summary="<i>Check if a permission exists</i>" 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**:<br/> +Requires YunoHost version 3.7.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/permission#L169) +[/details] +---------------- + +#### ynh_permission_url +[details summary="<i>Redefine the url associated to a permission</i>" 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**:<br/> +Requires YunoHost version 3.7.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/permission#L192) +[/details] +---------------- + +#### ynh_permission_update +[details summary="<i>Update a permission for the app</i>" 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**:<br/> +Requires YunoHost version 3.7.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/permission#L260) +[/details] +---------------- + +#### ynh_permission_has_user +[details summary="<i>Check if a permission has an user</i>" 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**:<br/> +Requires YunoHost version 3.7.1 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/permission#L329) +[/details] +---------------- + +#### ynh_legacy_permissions_exists +[details summary="<i>Check if a legacy permissions exist</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_legacy_permissions_exists +| exit: Return 1 if the permission doesn't exist, 0 otherwise` + +**Details**:<br/> +Requires YunoHost version 4.1.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/permission#L359) +[/details] +---------------- + +#### ynh_legacy_permissions_delete_all +[details summary="<i>Remove all legacy permissions</i>" 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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/permission#L379) +[/details] +---------------- + + +## PHP + +#### ynh_add_fpm_config +[details summary="<i>Create a dedicated PHP-FPM config</i>" 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**:<br/> +----------------------------------------------------------------------------- + +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/php#L59) +[/details] +---------------- + +#### ynh_remove_fpm_config +[details summary="<i>Remove the dedicated PHP-FPM config</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_remove_fpm_config` + +**Details**:<br/> +Requires YunoHost version 2.7.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/php#L250) +[/details] +---------------- + +#### ynh_composer_exec +[details summary="<i>Execute a command with Composer</i>" 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**:<br/> +Requires YunoHost version 4.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/php#L481) +[/details] +---------------- + +#### ynh_install_composer +[details summary="<i>Install and initialize Composer in the given directory</i>" 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**:<br/> +Requires YunoHost version 4.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/php#L507) +[/details] +---------------- + + +## POSTGRESQL + +#### ynh_psql_connect_as +[details summary="<i>Open a connection as a user</i>" 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**:<br/> +Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/postgresql#L18) +[/details] +---------------- + +#### ynh_psql_execute_as_root +[details summary="<i>Execute a command as root user</i>" 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**:<br/> +Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/postgresql#L39) +[/details] +---------------- + +#### ynh_psql_execute_file_as_root +[details summary="<i>Execute a command from a file as root user</i>" 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**:<br/> +Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/postgresql#L64) +[/details] +---------------- + +#### ynh_psql_dump_db +[details summary="<i>Dump a database</i>" 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**:<br/> +Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/postgresql#L135) +[/details] +---------------- + +#### ynh_psql_user_exists +[details summary="<i>Check if a psql user exists</i>" 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**:<br/> +Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/postgresql#L168) +[/details] +---------------- + +#### ynh_psql_database_exists +[details summary="<i>Check if a psql database exists</i>" 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**:<br/> +Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/postgresql#L190) +[/details] +---------------- + +#### ynh_psql_setup_db +[details summary="<i>Create a database, an user and its password. Then store the password in the app's config</i>" 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**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/postgresql#L228) +[/details] +---------------- + +#### ynh_psql_remove_db +[details summary="<i>Remove a database if it exists, and the associated user</i>" 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**:<br/> +Requires YunoHost version 2.7.13 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/postgresql#L259) +[/details] +---------------- + +#### ynh_psql_test_if_first_run +[details summary="<i>Create a master password and set up global settings</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_psql_test_if_first_run` + +**Details**:<br/> +It also make sure that postgresql is installed and running +Please always call this script in install and restore scripts + +Requires YunoHost version 2.7.13 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/postgresql#L290) +[/details] +---------------- + + +## SETTING + +#### ynh_app_setting_get +[details summary="<i>Get an application setting</i>" 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**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/setting#L10) +[/details] +---------------- + +#### ynh_app_setting_set +[details summary="<i>Set an application setting</i>" 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**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/setting#L36) +[/details] +---------------- + +#### ynh_app_setting_delete +[details summary="<i>Delete an application setting</i>" 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**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/setting#L62) +[/details] +---------------- + +#### ynh_webpath_available +[details summary="<i>Check availability of a web path</i>" 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**:<br/> +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/setting#L123) +[/details] +---------------- + +#### ynh_webpath_register +[details summary="<i>Register/book a web path for an app</i>" 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**:<br/> +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/setting#L145) +[/details] +---------------- + + +## STRING + +#### ynh_string_random +[details summary="<i>Generate a random string</i>" class="helper-card-subtitle text-muted"] + +**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**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/string#L12) +[/details] +---------------- + +#### ynh_replace_string +[details summary="<i>Substitute/replace a string (or expression) by another in a file</i>" 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**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/string#L37) +[/details] +---------------- + +#### ynh_replace_special_string +[details summary="<i>Substitute/replace a special string by another in a file</i>" 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**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/string#L68) +[/details] +---------------- + +#### ynh_sanitize_dbid +[details summary="<i>Sanitize a string intended to be the name of a database</i>" 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**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/string#L100) +[/details] +---------------- + + +## SYSTEMD + +#### ynh_add_systemd_config +[details summary="<i>Create a dedicated systemd config</i>" 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**:<br/> +This will use the template `../conf/<templatename>.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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/systemd#L15) +[/details] +---------------- + +#### ynh_remove_systemd_config +[details summary="<i>Remove the dedicated systemd config</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_remove_systemd_config [--service=service]` + +**Arguments**: +- `-s`, `--service=`: Service name (optionnal, $app by default) + +**Details**:<br/> +Requires YunoHost version 2.7.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/systemd#L42) +[/details] +---------------- + +#### ynh_systemd_action +[details summary="<i>Start (or other actions) a service, print a log in case of failure and optionnaly wait until the service is completely started</i>" 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**:<br/> +Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/systemd#L71) +[/details] +---------------- + + +## USER + +#### ynh_user_exists +[details summary="<i>Check if a YunoHost user exists</i>" 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**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/user#L12) +[/details] +---------------- + +#### ynh_user_get_info +[details summary="<i>Retrieve a YunoHost user information</i>" 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 'toto' 'mail')` + +**Details**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/user#L33) +[/details] +---------------- + +#### ynh_user_list +[details summary="<i>Get the list of YunoHost users</i>" 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**:<br/> +Requires YunoHost version 2.4.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/user#L53) +[/details] +---------------- + +#### ynh_system_user_exists +[details summary="<i>Check if a user exists on the system</i>" 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**:<br/> +Requires YunoHost version 2.2.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/user#L64) +[/details] +---------------- + +#### ynh_system_group_exists +[details summary="<i>Check if a group exists on the system</i>" 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**:<br/> +Requires YunoHost version 3.5.0.2 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/user#L82) +[/details] +---------------- + +#### ynh_system_user_create +[details summary="<i>Create a system user</i>" 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**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/user#L111) +[/details] +---------------- + +#### ynh_system_user_delete +[details summary="<i>Delete a system user</i>" 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**:<br/> +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/user#L153) +[/details] +---------------- + +#### ynh_exec_as +[details summary="<i>Execute a command as another user</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_exec_as $USER COMMAND [ARG ...]` + +**Details**:<br/> +Requires YunoHost version 4.1.7 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/user#L179) +[/details] +---------------- + + +## UTILS + +#### ynh_abort_if_errors +[details summary="<i>Exits if an error occurs during the execution of the script.</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_abort_if_errors` + +**Details**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/utils#L58) +[/details] +---------------- + +#### ynh_setup_source +[details summary="<i>Download, check integrity, uncompress and patch the source from app.src</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_setup_source --dest_dir=dest_dir [--source_id=source_id] [--keep="file1 file2"]` + +**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/' + +**Details**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/utils#L102) +[/details] +---------------- + +#### ynh_local_curl +[details summary="<i>Curl abstraction to help with POST requests to local pages (such as installation forms)</i>" 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**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/utils#L263) +[/details] +---------------- + +#### ynh_add_config +[details summary="<i>Create a dedicated config file from a template</i>" 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"` + + + +- ` 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**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/utils#L348) +[/details] +---------------- + +#### ynh_read_var_in_file +[details summary="<i>Get a value from heterogeneous file (yaml, json, php, python...)</i>" 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**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/utils#L499) +[/details] +---------------- + +#### ynh_write_var_in_file +[details summary="<i>Set a value into heterogeneous file (yaml, json, php, python...)</i>" 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**:<br/> +Requires YunoHost version 4.3 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/utils#L576) +[/details] +---------------- + +#### ynh_get_debian_release +[details summary="<i>Fetch the Debian release codename</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_get_debian_release` + +**Returns**: The Debian release codename (i.e. jessie, stretch, ...) + +**Details**:<br/> +Requires YunoHost version 2.7.12 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/utils#L688) +[/details] +---------------- + +#### ynh_secure_remove +[details summary="<i>Remove a file or a directory securely</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_secure_remove --file=path_to_remove` + +**Arguments**: +- `-f`, `--file=`: File or directory to remove + +**Details**:<br/> +Requires YunoHost version 2.6.4 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/utils#L740) +[/details] +---------------- + +#### ynh_read_manifest +[details summary="<i>Read the value of a key in a ynh manifest file</i>" 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**:<br/> +Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/utils#L802) +[/details] +---------------- + +#### ynh_app_upstream_version +[details summary="<i>Read the upstream version from the manifest or `$YNH_APP_MANIFEST_VERSION`</i>" 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**:<br/> +If the `manifest` is not specified, the envvar `$YNH_APP_MANIFEST_VERSION` will be used. + +The version number in the manifest is defined by `<upstreamversion>~ynh<packageversion>`. + +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/utils#L832) +[/details] +---------------- + +#### ynh_app_package_version +[details summary="<i>Read package version from the manifest</i>" 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**:<br/> +The version number in the manifest is defined by `<upstreamversion>~ynh<packageversion>`. + +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/utils#L861) +[/details] +---------------- + +#### ynh_check_app_version_changed +[details summary="<i>Checks the app version to upgrade with the existing app version and returns:</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_check_app_version_changed` + +**Returns**: `UPGRADE_APP` if the upstream version changed, `UPGRADE_PACKAGE` otherwise. + +**Details**:<br/> +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 <appname> --force +``` +Requires YunoHost version 3.5.0 or higher. + + + +[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/utils#L886) +[/details] +---------------- + +#### ynh_compare_current_package_version +[details summary="<i>Compare the current package version against another version given as an argument.</i>" class="helper-card-subtitle text-muted"] + +**Usage**: `ynh_compare_current_package_version --comparison (lt|le|eq|ne|ge|gt) --version <X~ynhY>` + +**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**:<br/> +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/981fca64e234848510a2daeafec1eda07516e0ac/data/helpers.d/utils#L916) +[/details] +---------------- + diff --git a/packaging_apps_hooks_fr.md b/pages/04.contribute/04.packaging_apps/12.hooks/packaging_apps_hooks.fr.md similarity index 92% rename from packaging_apps_hooks_fr.md rename to pages/04.contribute/04.packaging_apps/12.hooks/packaging_apps_hooks.fr.md index 6339cc69..892091b6 100644 --- a/packaging_apps_hooks_fr.md +++ b/pages/04.contribute/04.packaging_apps/12.hooks/packaging_apps_hooks.fr.md @@ -1,4 +1,11 @@ -# Usage des hooks YunoHost +--- +title: Hooks +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_hooks' +--- 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é. @@ -29,9 +36,9 @@ 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. +Après l'upgrade d'une application. - `post_app_remove` -Après la supression d'une applications. +Après la supression d'une application. - `post_app_change_url` Après avoir modifié le chemin et/ou le nom de domaine d'une application. - `post_cert_update` @@ -59,13 +66,13 @@ Services pris en charge par `regen-conf` : À 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. +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 hook 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. +Lors de la suppression de l'application, tous les hooks lui appartenant seront supprimés. ### Construire un script de hook @@ -118,7 +125,7 @@ backup_name=$1 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` +Exemple : pour `post_app_install` les variables sont les mêmes que pour le script `install` ##### `post_app_addaccess` et `post_app_removeaccess` @@ -155,7 +162,7 @@ cp hook_regen_conf /usr/share/yunohost/hooks/conf_regen/50-SERVICE_$app ##### 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 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, s' il y a eu des modifications. Un script de hook `conf_regen` devrait donc ressembler à ça : diff --git a/packaging_apps_hooks.md b/pages/04.contribute/04.packaging_apps/12.hooks/packaging_apps_hooks.md similarity index 97% rename from packaging_apps_hooks.md rename to pages/04.contribute/04.packaging_apps/12.hooks/packaging_apps_hooks.md index 247301d2..16056b85 100644 --- a/packaging_apps_hooks.md +++ b/pages/04.contribute/04.packaging_apps/12.hooks/packaging_apps_hooks.md @@ -1,4 +1,11 @@ -# The use of YunoHost hooks +--- +title: Hooks +template: docs +taxonomy: + category: docs +routes: + default: '/packaging_apps_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. diff --git a/packaging_apps_actions.md b/pages/04.contribute/04.packaging_apps/14.advanced/01.actions/packaging_apps_actions.md similarity index 94% rename from packaging_apps_actions.md rename to pages/04.contribute/04.packaging_apps/14.advanced/01.actions/packaging_apps_actions.md index b1bc92b6..f3f338d4 100644 --- a/packaging_apps_actions.md +++ b/pages/04.contribute/04.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' +--- <div class="alert alert-warning">For now, all those features are <b>EXPERIMENTAL</b> 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: - + ## How to add actions to your application @@ -47,7 +54,7 @@ like the `manifest.toml`/`manifest.json`. <div class="alert alert-info"> The arguments are written in **[YunoHost Arguments -Format](#/packaging_apps_arguments_format)** like in `manifest.toml/json` +Format](/packaging_apps_arguments_format)** like in `manifest.toml/json` </div> The general pattern looks like this: @@ -94,7 +101,7 @@ command = "systemctl restart some_service" You can have as much actions as you want and from zero to as many arguments you want. -If you prefer, you can also write your actions in json like manifest.json: +If you prefer, you can also write your actions in JSON like manifest.json: ```json [{ diff --git a/packaging_apps_config_panel.md b/pages/04.contribute/04.packaging_apps/14.advanced/02.config_panel/packaging_apps_config_panel.md similarity index 87% rename from packaging_apps_config_panel.md rename to pages/04.contribute/04.packaging_apps/14.advanced/02.config_panel/packaging_apps_config_panel.md index a3afaf04..b39c03a8 100644 --- a/packaging_apps_config_panel.md +++ b/pages/04.contribute/04.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' +--- <div class="alert alert-warning">For now, all those features are <b>EXPERIMENTAL</b> and aren't ready for production and are probably going to change again, if you @@ -23,13 +30,13 @@ doable and very worth it if you need it. Here how it looks like in the admin interface: - + ## Usage ### Admin interface -The configuration panel for an application can be accessed with this url: +The configuration panel for an application can be accessed with this URL: https://my_domain.tld/yunohost/admin/#/apps/$app_id/config-panel @@ -43,7 +50,7 @@ For now the CLI API for the config panel is not very good at all, you can still use it but it's really impracticable. * `yunohost app config show-panel $app_id` will show the panel. **But for now -it's very broken and will asked question for unfilled value of the panel**. +it's very broken and will ask question for unfilled value of the panel**. * `yunohost app config apply` will call the script with apply and... no values since you aren't passing them, except if you are ready to play with the `-a` @@ -55,14 +62,14 @@ In conclusion: don't use the CLI for now, we need to design something better. ### config_panel.toml -Firs, you need to write a `config_panel.toml` (or `config_panel.json` if you -REALLY wants it but we really don't recommend it has it is very error prone and +First, you need to write a `config_panel.toml` (or `config_panel.json` if you +REALLY want to but we really don't recommend it as it is very error prone and frustrating to write by hand) that will be located at the root of you application, next to the manifest.json/toml. It looks like this: <div class="alert alert-info"> The options are written in **[YunoHost Arguments -Format](#/packaging_apps_arguments_format)** like in `manifest.toml/json` +Format](/packaging_apps_arguments_format)** like in `manifest.toml/json` </div> ```toml @@ -97,7 +104,7 @@ name = "stuff" And a real world example with the rendered admin: - + As a text format: @@ -140,13 +147,13 @@ name = "Leed configuration" ### the scripts/config script To make your configuration panel functional you need write a "config" script -that will be location in the "script" folder like the "install" script. This -script will be called at 2 different occasions: +that will be located in the "script" folder (like the "install" script). This +script will be called in two different occasions: * when the configuration panel is displayed and yunohost needs to fill the values * when the configuration is modified by the user -Every option of the configuration panel will be send to the script +Every option of the configuration panel will be sent to the script following this naming convention: ```bash @@ -252,12 +259,12 @@ The "apply" part is called when the user click on "submit" on the configuration page on the admin interface. This part is simpler to write: - the scripts/config will be called with "apply" -- all the value in the config panel (modified or not) are available as global - variable in the script following the format `YNH_{section_id}_{sub_section_id}_{option_id}` +- all the values in the config panel (modified or not) are available as global + variables in the script following the format `YNH_{section_id}_{sub_section_id}_{option_id}` (exactly the same than for show) - the script is responsible for doing whatever it wants with those information -- once the script as succeeded, the admin interface display the config panel - again so the script is called again in "show" mode +- once the script has succeeded, the admin interface displays the config panel + again and triggers the same script in "show" mode Expanding the previous script that could look like that: @@ -278,7 +285,7 @@ esac ``` Or if you want a full useless simple script that store the value in a file, -this can looks like this: +this can look like this: ```bash dummy_config_file="dummy_config_file.ini" diff --git a/packaging_apps_advanced.md b/pages/04.contribute/04.packaging_apps/14.advanced/packaging_apps_advanced.md similarity index 75% rename from packaging_apps_advanced.md rename to pages/04.contribute/04.packaging_apps/14.advanced/packaging_apps_advanced.md index c2bb905e..2ae41820 100644 --- a/packaging_apps_advanced.md +++ b/pages/04.contribute/04.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' +--- <div class="alert alert-warning">For now, all those features are <b>EXPERIMENTALS</b> 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: - + ## 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: - + diff --git a/packaging_apps_levels_fr.md b/pages/04.contribute/04.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.fr.md similarity index 94% rename from packaging_apps_levels_fr.md rename to pages/04.contribute/04.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.fr.md index b2bfe53e..8c12625e 100644 --- a/packaging_apps_levels_fr.md +++ b/pages/04.contribute/04.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.fr.md @@ -1,9 +1,16 @@ -# Niveaux de qualité des packages d'applications YunoHost +--- +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 à 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: +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é. @@ -43,13 +50,13 @@ Le package d'application respecte des recommandations de packaging supérieures. **Niveau 10** Le package d'application est jugé parfait ! -## Les niveaux de qualité en détails: +## 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 à 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 @@ -57,7 +64,7 @@ YEP à respecter pour atteindre le niveau 0: **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 à 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 @@ -76,7 +83,7 @@ YEP à respecter pour atteindre le niveau 1: *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 à 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* @@ -87,13 +94,13 @@ YEP à respecter pour atteindre le niveau 2: **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 à 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 à 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* @@ -101,7 +108,7 @@ YEP à respecter pour atteindre le niveau 4: **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 à 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) @@ -110,7 +117,7 @@ YEP à respecter pour atteindre le niveau 5: ### Niveau 6 **Le package d'application est dans l'organisation YunoHost-Apps.** -YEP à respecter pour atteindre le niveau 6: +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)* @@ -126,7 +133,7 @@ YEP à respecter pour atteindre le niveau 6: **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 à 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 @@ -138,13 +145,13 @@ YEP à respecter pour atteindre le niveau 7: ### 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 à 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.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.* @@ -152,7 +159,7 @@ YEP à respecter pour atteindre le niveau 8: ### Niveau 9 **L'application respecte toutes les YEP optionnelles.** -YEP à respecter pour atteindre le niveau 9: +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 diff --git a/pages/04.contribute/04.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.md b/pages/04.contribute/04.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.md new file mode 100644 index 00000000..05a31018 --- /dev/null +++ b/pages/04.contribute/04.packaging_apps/15.quality_tests/01.apps_levels/packaging_apps_levels.md @@ -0,0 +1,79 @@ +--- +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. +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: +- The application packaging is more fun, with clear objectives to achieve and successive steps. +- A properly packaged application is put forward more than an application that does not comply with packaging rules. +- Users can quickly see the level of an application and thus know if the package is of good quality. + +The level is automatically computed by the automatic test suite ("the CI") which runs tests [here](https://ci-apps.yunohost.org/ci/) and results are summarized [here](https://dash.yunohost.org/appci/branch/stable). + +<div class="alert alert-info"> +<b> +In the application catalog of the webadmin, an application is only shown to the user if its level is at least 5. Otherwiser, users may have to enable the display of "low-quality" applications to be able to install it. +</b> +</div> + +## Summary of the level definitions + +The following summarizes the current definition of the levels. + +The exact definitions are likely to shift over time and are heavily dependent on: +- the [package linter](https://github.com/YunoHost/package_linter) which performs a static analysis of the app scripts and files to detect issues or deprecated practices +- the [package check system](https://github.com/YunoHost/package_check) which actually tests the various operations (installs, upgrades, backup...) + +#### Level 0 + +The application does not work at all. + +#### Level 1 + +The application can be installed/removed in at least one configuration. + +#### Level 2 + +The application can be installed/removed in all common configurations. + +(Typically this corresponds to full domain vs. sub path installs, private/public +installs, multi-instance installs) + +#### Level 3 + +The application supports upgrading. + +#### Level 4 + +The application supports backup/restore. + +#### Level 5 + +The application triggers no errors on the package linter + +#### Level 6 + +The application repository is part of the YunoHost-Apps organization, which allows the community to contribute to its maintainance. + +#### Level 7 + +The application triggers no warnings on the package linter. + +#### 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 + +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) diff --git a/packaging_apps_guidelines_fr.md b/pages/04.contribute/04.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.fr.md similarity index 94% rename from packaging_apps_guidelines_fr.md rename to pages/04.contribute/04.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.fr.md index d8ae99a2..cfbcf9ea 100644 --- a/packaging_apps_guidelines_fr.md +++ b/pages/04.contribute/04.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.fr.md @@ -1,15 +1,17 @@ -# Packaging d’applications : les bonnes pratiques - -<div class="alert alert-danger"> -<b> -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. -</b> -</div> +--- +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 à : @@ -70,8 +72,8 @@ Chaque YEP est associée à : | YEP 3.7 | Modifier correctement les dépots sources | draft | manuel | NOTWORKING (0) | | | | | | | | **YEP 4** | **Intégrer une app** | **Statut** | **Test** | **Niveau** | -| 4.1 | Lier au ldap | validé | manuel | OFFICIAL (4) | -| YEP 4.2 | Lier l'authentification au sso | validé | manuel | OFFICIAL (4) | +| 4.1 | Lier au LDAP | validé | manuel | OFFICIAL (4) | +| YEP 4.2 | Lier l'authentification au SSO | validé | manuel | OFFICIAL (4) | | YEP 4.2.1 | Déconnexion | validé | manuel | OFFICIAL (9) | | YEP 4.3 | Fournir un script de sauvegarde YunoHost fonctionnel | validé | auto | OFFICIAL (6) | | YEP 4.4 | Fournir un script de restauration YunoHost fonctionnel | validé | auto | OFFICIAL (6) | @@ -100,7 +102,7 @@ De plus l'identifiant doit respecter l'expression régulière suivante `^[a-z0-9 Pour les noms d'applications contenant des espaces la quasi-totalité des paquets actuels les retirent simplement sans les remplacer par des tirets ou underscores. -Par convention, les dépôts d'applications YunoHost sont toujours nommés de leur ID suivis de la chaîne de caractère "\_ynh". Ainsi on peut distinguer le dépôt upstream de l'application, du dépôt du paquet yunohost. Cette notation permet également de trouver des applications non répertoriées à travers les moteurs de recherche des plateformes proposant des gestionnaires de version (GitHub par exemple). +Par convention, les dépôts d'applications YunoHost sont toujours nommés de leur ID suivis de la chaîne de caractère "\_ynh". Ainsi on peut distinguer le dépôt upstream de l'application, du dépôt du paquet YunoHost. Cette notation permet également de trouver des applications non répertoriées à travers les moteurs de recherche des plateformes proposant des gestionnaires de version (GitHub par exemple). Exemple : ID : exemple Nom de dépôt : exemple_ynh @@ -114,31 +116,31 @@ Ces dépôts ont plusieurs fonctions : * indiquer l'état de fonctionnement du paquet ; * indiquer des informations sur le support d'un paquet. -Pour la liste `apps.json` maintenue par l'équipe du projet Yunohost, l'inscription se fait sur [le dépôt git "apps"](https://github.com/YunoHost/apps). D'autres listes non-officielles (notamment celles incluant des applications non-libres) peuvent exister, se réferer au [Forum](https://forum.yunohost.org) de la communauté. +Pour la liste `apps.json` maintenue par l'équipe du projet YunoHost, l'inscription se fait sur [le dépôt Git "apps"](https://github.com/YunoHost/apps). D'autres listes non-officielles (notamment celles incluant des applications non-libres) peuvent exister, se réferer au [Forum](https://forum.yunohost.org) de la communauté. #### YEP 1.3 ##### Indiquer la licence associée au paquet | brouillon | AUTO | WORKING | La licence du paquet est à indiquer dans un fichier `LICENSE` à la racine du paquet. Attention à ne pas confondre avec la licence de l'application qui va être installée dont l'acronyme est à renseigner dans le champ `license` du manifeste. -La liste d'application apps.json n'accepte que les paquets dont la licence est libre, de même pour la licence de l'application contenue. Certaines applications libres nécessitent des dépendances non-libres (exemple: mp3, drivers, etc.). Dans ce cas, il faut ajouter `&dep-non-free` à l'acronyme et si possible donner des précisions dans le README.md du paquet, l'intégration sera dans ce cas acceptée au cas par cas. +La liste d'application apps.json n'accepte que les paquets dont la licence est libre, de même pour la licence de l'application contenue. Certaines applications libres nécessitent des dépendances non-libres (exemple: MP3, drivers, etc.). Dans ce cas, il faut ajouter `&dep-non-free` à l'acronyme et si possible donner des précisions dans le README.md du paquet, l'intégration sera dans ce cas acceptée au cas par cas. **NB :** Les applications non-présentes dans la liste maintenue par le projet peuvent tout de même être installées : soit manuellement via le lien de l'application, soit de manière plus intégrée via des listes non-officielles (qui peuvent être créées et maintenues par la communauté). Dans le futur, YunoHost affichera sans doute des détails sur la licence de l'application. Pour y parvenir, l'acronyme doit être celui issu de cette [liste de licences répertoriées du SPDX](https://spdx.org/licenses/) (si il y a 2 acronymes, il faut prendre celui contenant le numéro de version). Pour plus de cohérence, la casse doit être respectée. -Si la licence n'est pas présente dans la liste, dans ce cas il faut indiquer `free` ou `non-free` selon qu'elle est libre ou non et donner l'occasion à l'utilisateur de se renseigner dans le README.md (lien, explications, ...). +Si la licence n'est pas présente dans la liste, dans ce cas il faut indiquer `free` ou `non-free` selon qu'elle est libre ou non et donner l'occasion à l'utilisateur de se renseigner dans le README.md (lien, explications...). -Exemple: pour une licence `GNU Lesser General Public License (LGPL), version 3` l'acronyme est `LGPL-3.0` si toutefois des dépendances non libres sont utilisées dans ce cas il faudra mettre `LGPL-3.0&dep-non-free` dans le manifeste. +Exemple : pour une licence `GNU Lesser General Public License (LGPL), version 3` l'acronyme est `LGPL-3.0` si toutefois des dépendances non libres sont utilisées dans ce cas il faudra mettre `LGPL-3.0&dep-non-free` dans le manifeste. -Si une application a des modules liés avec une autre licence (Exemple: Odoo 9 LGPL-3.0 + un module sous licence AGPL-3.0 ), dans ce cas on indiquera les deux licences séparées par un `&`. +Si une application a des modules liés avec une autre licence (Exemple : Odoo 9 LGPL-3.0 + un module sous licence AGPL-3.0 ), dans ce cas on indiquera les deux licences séparées par un `&`. Si deux applications distinctes sont dans le même paquet d'installation et ont des licences distinctes, dans ce cas on peut utiliser le `,` pour séparer les licences. Dans les deux cas, le mainteneur est encouragé à réfléchir à la possibilité de créer deux paquets distincts. Le manifeste de chaque application permet de poser des questions de type `app` de façon à faire référence à une autre application déjà installée. -Rappel: une question de type `app` prend pour réponse l'identifiant d'une des apps déjà installée. +Rappel : une question de type `app` prend pour réponse l'identifiant d'une des apps déjà installée. -Quelques liens intéressants pour aider au choix de licence: +Quelques liens intéressants pour aider au choix de licence : * [Des fiches explicatives sur les licences libres](https://www.inria.fr/content/download/5896/48452/version/2/file/INRIA_recueil_fiches_licences_libres_vf.pdf) * [La documentation sur les licences du projet GNU](https://www.gnu.org/licenses/licenses.fr.html) * [Un guide du projet GNU pour aider au choix d'une licence](https://www.gnu.org/licenses/license-recommendations.fr.html) @@ -204,7 +206,7 @@ Il y a également le README.md, ce dernier doit et peut contenir : * des instructions pour l'utiliser (par exemple pour relier son smartphone ou son ordinateur) * l'endroit pour signaler un dysfonctionnement / une demande * la roadmap/TODO -* éventuellement les pré-requis en termes de mémoires ram, processeur etc. (certains équipements ont moins de 512Mo de ram) +* éventuellement les pré-requis en termes de mémoires RAM, processeur etc. (certains équipements ont moins de 512 Mo de RAM) #### YEP 1.10 ##### Garder un historique de version propre | brouillon | manuel | OFFICIAL | @@ -226,11 +228,11 @@ Le manifeste permet de décrire une app afin que YunoHost puisse lui appliquer l #### YEP 2.2 ##### Utiliser bash pour les scripts principaux | validé | auto | WORKING | -Les scripts d'action (install, upgrade, remove, backup et restore) doivent être en bash afin que la cli/api yunohost puisse correctement les appeler. +Les scripts d'action (install, upgrade, remove, backup et restore) doivent être en bash afin que la CLI/API YunoHost puisse correctement les appeler. Ceci étant, rien n'empêche à l'intérieur de ces scripts de faire appel à d'autres scripts ou bibliothèques de fonction. Ceux-ci ne sont pas obligés d'être en bash. -Cependant, il faudra porter une attention particulière à l'affichage correct des logs d'information, de warning, ou d'erreurs. Afin qu'un utilisateur de la cli/api yunohost puisse comprendre le fonctionnement du script venant d'être exécuté et au besoin réparer son instance YunoHost. +Cependant, il faudra porter une attention particulière à l'affichage correct des logs d'information, de warning, ou d'erreurs. Afin qu'un utilisateur de la CLI/API YunoHost puisse comprendre le fonctionnement du script venant d'être exécuté et au besoin réparer son instance YunoHost. #### YEP 2.3 ##### Sauvegarder les réponses lors de l'installation | validé | manuel | WORKING | @@ -239,12 +241,12 @@ Lors de l'installation, il est nécessaire de sauvegarder chaque réponse aux qu #### YEP 2.4 ##### Détecter et gérer les erreurs | brouillon | manuel | WORKING | Les scripts install, upgrade, backup et restore doivent détecter les erreurs pour éviter la poursuite des scripts en cas d'erreur bloquante ou d'usage de variable vide. -L'usage de trap et de set -eu est recommandé pour détecter et traiter les erreurs ([Discussion en cours à ce sujet](https://forum.yunohost.org/t/gestion-des-erreurs-set-e-et-ou-trap/2249/5)) +L'usage de trap et de `set -eu` est recommandé pour détecter et traiter les erreurs ([Discussion en cours à ce sujet](https://forum.yunohost.org/t/gestion-des-erreurs-set-e-et-ou-trap/2249/5)) Il est nécessaire également de vérifier le contenu des variables avant les suppressions du script remove. Par exemple un `rm -Rf /var/www/$app` avec `$app` vide aurait un résultat désastreux. Au début des scripts, avant toutes modifications, il faut vérifier l'existence des utilisateurs mentionné à l'installation, ainsi que la disponibilité du path demandé, la disponibilité du dossier final de l'application et la taille des mots de passe le cas échéant. - N'oubliez pas qu'en cas d'erreur d'installation le script de suppression sera lancé automatiquement par la cli yunohost. + N'oubliez pas qu'en cas d'erreur d'installation le script de suppression sera lancé automatiquement par la CLI YunoHost. #### YEP 2.5 ##### Copier correctement des fichiers | brouillon | manuel | WORKING | @@ -262,7 +264,7 @@ Dans le cas où l'une des valeurs est incorrecte, il est alors nécessaire d'ann #### YEP 2.7 ##### Donner des permissions suffisantes aux instructions bash | validé | auto | WORKING | -Certaines instructions nécessitent les droits sudo. Il faut dans ce cas ne pas oublier de préfixer ces instructions par `sudo `. +Certaines instructions nécessitent les droits sudo. Il faut dans ce cas ne pas oublier de préfixer ces instructions par `sudo`. Dans d'autres cas il est nécessaire de donner des droits à l'aide de chmod et de chown. @@ -343,7 +345,7 @@ Une web app devraient pouvoir s'installer sur un chemin `/path`. #### YEP 2.18.5 ##### Gérer la tuile YunoHost pour naviguer facilement entre les applications | validé | manuel | OFFICIAL | -Sauf dans de rare cas il est conseillé d'intégrer la tuile YunoHost qui permet de retourner sur le menu du SSO. Cette intégration se fait dans la configuration nginx. +Sauf dans de rare cas il est conseillé d'intégrer la tuile YunoHost qui permet de retourner sur le menu du SSO. Cette intégration se fait dans la configuration NGINX. Certains utilisateurs ont remplacé ce carré par un script ajoutant un menu en haut de chaque webapp. @@ -358,13 +360,13 @@ Il convient également de vérifier si le port doit être ouvert sur le routeur, #### YEP 3.3 ##### Faciliter le contrôle de l'intégrité des sources | brouillon | manuel | OFFICIAL | -L'application upstream ne doit pas être intégrée en tarball dans le dossier source du package, car cela alourdit le package et le dépôt git et ne permet pas la vérification de l'intégrité de la source. +L'application upstream ne doit pas être intégrée en tarball dans le dossier source du package, car cela alourdit le package et le dépôt Git et ne permet pas la vérification de l'intégrité de la source. La source doit donc être téléchargée depuis le site officiel, puis son intégritée doit être vérifiée avant de l'installer. #### YEP 3.4 ##### Isoler l'app | brouillon | manuel | OFFICIAL | Afin d'éviter des effets de bords en cas de compromission éventuelle de l'application, celle-ci doit être isolée pour ne pas risquer d'impacter les autres applications. -Pour cela, il convient d'isoler l'application dans son dossier d'exécution en restreignant son environnement par un chroot, soit par un mécanisme interne à l'application lorsque c'est possible (par exemple pour un serveur ftp), soit par l'usage de phpfpm. +Pour cela, il convient d'isoler l'application dans son dossier d'exécution en restreignant son environnement par un chroot, soit par un mécanisme interne à l'application lorsque c'est possible (par exemple pour un serveur FTP), soit par l'usage de PHP-FPM. De même, pour restreindre la portée de l'utilisateur exécutant l'application, il est préférable d'utiliser un utilisateur dédiée à l'application. Dont les droits sont restreint à l'usage de l'application uniquement. Toutefois, cela ne doit pas exempter d'une restriction maximale des droits sur les fichiers de l'application. Autant que possible, les fichiers doivent appartenir à root, et l'utilisateur dédié ne doit avoir de droits d'écriture que sur les fichiers le réclamant expressément. @@ -400,7 +402,7 @@ Dans tous les cas, une app ne devrait pas modifier les dépôts sources pour les Cette meta YEP traite de l'intégration d'une app avec l'environnement YunoHost. Une bonne intégration est en général un gage de qualité et de confort pour les utilisateurs. #### YEP 4.2 -##### Lier l'authentification au sso | validé | manuel | OFFICIAL | +##### Lier l'authentification au SSO | validé | manuel | OFFICIAL | Le Single Sign On permet d'éviter d'avoir à créer les mêmes utilisateurs pour chaque app. Ainsi, un utilisateur YunoHost pourra se connecter via le Single Sign On à l'ensemble des apps. Pour se faire, il convient de lier son app au LDAP et/ou d'utiliser des hooks pour dupliquer les identifiants du compte dans la base de données de l'app. diff --git a/packaging_apps_guidelines.md b/pages/04.contribute/04.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.md similarity index 94% rename from packaging_apps_guidelines.md rename to pages/04.contribute/04.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.md index 24aa60c9..a70075b1 100644 --- a/packaging_apps_guidelines.md +++ b/pages/04.contribute/04.packaging_apps/15.quality_tests/02.yep/packaging_apps_guidelines.md @@ -1,15 +1,17 @@ -# Packing Applications : Good Practise Guidelines - -<div class="alert alert-danger"> -<b> -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. -</b> -</div> +--- +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: @@ -69,8 +71,8 @@ Each YEP is associated with: | YEP 3.6 | Update versions containing CVE | draft | manual | OFFICIAL (6) | | | | | | | | ** YEP 4 ** | ** Integrate an app ** | ** Status ** | ** Test ** | ** Level ** | -| 4.1 | Link to ldap | validated | manual | OFFICIAL (4) | -| YEP 4.2 | Link authentication to sso | validated | manual | OFFICIAL (4) | +| 4.1 | Link to LDAP | validated | manual | OFFICIAL (4) | +| YEP 4.2 | Link authentication to SSO | validated | manual | OFFICIAL (4) | | YEP 4.2.1 | Sign Out | validated | manual | OFFICIAL (9) | | YEP 4.3 | Provide YunoHost Backup Script Functional | validated | Home | OFFICIAL (6) | | YEP 4.4 | Provide a YunoHost Restore Functional script | validated | Home | OFFICIAL (6) | @@ -99,7 +101,7 @@ In other words, it must respect the following rules: For application names containing spaces, virtually all current packages simply remove them without replacing them with dashes or underscores. -By convention, the YunoHost application repositories are always named their ID followed by the string "\ _ynh". Thus one can distinguish the upstream repository of the application, the deposit of the yunohost package. This notation also makes it possible to find applications not listed by the search engines of platforms offering version managers (GitHub for example). +By convention, the YunoHost application repositories are always named their ID followed by the string "\_ynh". Thus one can distinguish the upstream repository of the application, the deposit of the YunoHost package. This notation also makes it possible to find applications not listed by the search engines of platforms offering version managers (GitHub for example). Example: ID: Example Filing Name: example_ynh @@ -119,13 +121,13 @@ For the `apps.json` list maintained by the project team, registration is on [the ##### Indicate the license associated with the package | draft | AUTO | WORKING | The license of the packet must be specified in a `LICENSE` file at the root of the packet. Be careful not to confuse with the license of the application that will be installed whose acronym is to be entered in the `license` field of the manifest. -The application list apps.json only accept packages with a free license, as well as the license for the contained application. Some free applications require non-free dependencies (example: mp3, drivers, etc.). In this case, you should add `&dep-non-free` to the acronym and if possible give details in the README.md of the package, in this case the integration will be accepted on a case-by-case basis. +The application list apps.json only accept packages with a free license, as well as the license for the contained application. Some free applications require non-free dependencies (example: MP3, drivers, etc.). In this case, you should add `&dep-non-free` to the acronym and if possible give details in the README.md of the package, in this case the integration will be accepted on a case-by-case basis. **NB:** Apps not included in apps.json lists may still be installed: either manually with the URL to the app, or in a more practical way using non-official lists (which can be created and maintained by the community). In the future, YunoHost will probably display details about the license of the application. To achieve this, the acronym must be the one from this [list of licenses listed in the SPDX](https://spdx.org/licenses/) (if there are 2 acronyms, the one containing the version number). For consistency, the case must be respected. -If the license is not present in the list, in this case it is necessary to indicate `free` or `non-free` depending on whether it is free or not and give the user the opportunity to inquire in the README .md (link, explanations, ...). +If the license is not present in the list, in this case it is necessary to indicate `free` or `non-free` depending on whether it is free or not and give the user the opportunity to inquire in the README.md (link, explanations...). Example: for a GNU Lesser General Public License (LGPL), version 3 the acronym is `LGPL-3.0` if non-free dependencies are used in this case it will be necessary to put LGPL-3.0 & dep-non-free `in the manifesto. @@ -160,7 +162,7 @@ To follow the evolution of YunoHost more generally: #### YEP 1.7 ##### Add the app to the [YunoHost-Apps Organization](https://github.com/YunoHost-Apps) | validated | manual | OFFICIAL | -Adding an app to the [YunoHost-Apps organization](https://github.com/YunoHost-Apps) lets you share apps with other contributors who might be tempted to package the targeted application . +Adding an app to the [YunoHost-Apps organization](https://github.com/YunoHost-Apps) lets you share apps with other contributors who might be tempted to package the targeted application. It is also a way to quickly deploy a security patch if necessary in the event that the maintainer is unavailable. @@ -203,7 +205,7 @@ There is also README.md, which must and can contain: * instructions to use it (for example to connect your smartphone or computer) * the location to report a malfunction / request * the roadmap / TODO -* possibly prerequisites in terms of ram memories, processor etc. (some equipment has less than 512MB of ram) +* possibly prerequisites in terms of RAM memories, processor etc. (some equipment has less than 512 MB of RAM) #### YEP 1.10 ##### Keep a clean version history | draft | manual | OFFICIAL | @@ -225,11 +227,11 @@ The manifest allows to describe an app so that YunoHost can apply the good treat #### YEP 2.2 ##### Using bash for main scripts | validated | Home | WORKING | -Action scripts (install, upgrade, remove, backup and restore) must be in the bash so that the cli / api yunohost can call them correctly. +Action scripts (install, upgrade, remove, backup and restore) must be in the bash so that the CLI/API YunoHost can call them correctly. That being said, there is nothing to prevent other scripts or function libraries from using these scripts. These are not obliged to be in bash. -However, careful attention must be paid to the correct display of logs of information, warning, or errors. So that a user of the cli / api yunohost can understand the operation of the script just executed and if necessary repair its YunoHost instance. +However, careful attention must be paid to the correct display of logs of information, warning, or errors. So that a user of the CLI/API YunoHost can understand the operation of the script just executed and if necessary repair its YunoHost instance. #### YEP 2.3 ##### Save the answers during the installation | validated | manual | WORKING | @@ -238,12 +240,12 @@ During installation, it is necessary to save each answer to the questions in the #### YEP 2.4 ##### Detecting and Managing Errors | draft | manual | WORKING | The install, upgrade, backup, and restore scripts must detect errors to avoid further scripting in case of blocking error or empty variable usage. -The use of trap and set -eu is recommended to detect and treat errors ([Discussion in progress](https://forum.yunohost.org/t/gestion-des-erreurs-set-e-and-or-trap/2249/5)) +The use of trap and `set -eu` is recommended to detect and treat errors ([Discussion in progress](https://forum.yunohost.org/t/gestion-des-erreurs-set-e-and-or-trap/2249/5)) It is also necessary to check the contents of the variables before removing the remove script. For example, an `rm -Rf /var/www/$app` with `$app` empty would have a disastrous result. -At the beginning of the scripts, before any modifications, it is necessary to check the existence of the users mentioned at the installation, as well as the availability of the requested path, the availability of the final file of the application and the size of the passwords if necessary . +At the beginning of the scripts, before any modifications, it is necessary to check the existence of the users mentioned at the installation, as well as the availability of the requested path, the availability of the final file of the application and the size of the passwords if necessary. - Do not forget that in case of installation error the removal script will be launched automatically by the yunohost cli. + Do not forget that in case of installation error the removal script will be launched automatically by the YunoHost CLI. #### YEP 2.5 ##### Copy files correctly | draft | manual | WORKING | @@ -251,7 +253,7 @@ At the beginning of the scripts, before any modifications, it is necessary to ch ##### Cancel action if input values are incorrect | validated | manual | WORKING | Each script should verify that the input values are correct. -Here are some examples : +Here are some examples: * Check that the domain name exists * Check that the user exists * Check that the chosen path is available @@ -304,7 +306,7 @@ The goal is to find a more reliable method than sed to modify the configuration ##### Check availability of dependencies on ARM, x86, and x64 | validated | manual | OFFICIAL | YunoHost installs on ARM, x86 and x64. A package should therefore be tested on these three processor architectures. -Some packages are not available on ARM, in this case it is advisable to study other solutions or to indicate in the README.md that the application does not work on ARM and to block the installation by detection of type d 'architecture. +Some packages are not available on ARM, in this case it is advisable to study other solutions or to indicate in the README.md that the application does not work on ARM and to block the installation by detection of type d'architecture. #### YEP 2.17 ##### Take the original version into account when updating | validated | manual | OFFICIAL | @@ -341,7 +343,7 @@ A web app should be able to install on a path `/path`. #### YEP 2.18.5 ##### Manage the YunoHost tile to easily navigate between applications | validated | manual | OFFICIAL | -Except in rare cases it is advisable to integrate the tile YunoHost which allows to return to the menu of the SSO. This integration is done in the nginx configuration. +Except in rare cases it is advisable to integrate the tile YunoHost which allows to return to the menu of the SSO. This integration is done in the NGINX configuration. Some users have replaced this square with a script adding a menu at the top of each webapp. @@ -356,7 +358,7 @@ It should also be checked whether the port should be open on the router, beyond #### YEP 3.3 ##### Facilitating Source Integrity Control | draft | manual | OFFICIAL | -The upstream application should not be integrated into tarball in the source folder of the package, as this adds to the package and the git repository and does not allow verification of the integrity of the source. +The upstream application should not be integrated into tarball in the source folder of the package, as this adds to the package and the Git repository and does not allow verification of the integrity of the source. The source must be downloaded from the official website, then its integrity must be checked before installing it. #### YEP 3.4 diff --git a/packaging_apps_ci_fr.md b/pages/04.contribute/04.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/04.contribute/04.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/04.contribute/04.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). -<a class="btn btn-lg btn-default" href="https://ci-apps-dev.yunohost.org">ci-apps-dev</a> +[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/04.contribute/04.packaging_apps/15.quality_tests/03.ci_packagers/packaging_apps_ci.md similarity index 92% rename from packaging_apps_ci.md rename to pages/04.contribute/04.packaging_apps/15.quality_tests/03.ci_packagers/packaging_apps_ci.md index 543da54d..f5294e19 100644 --- a/packaging_apps_ci.md +++ b/pages/04.contribute/04.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). -<a class="btn btn-lg btn-default" href="https://ci-apps-dev.yunohost.org">ci-apps-dev</a> +[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/04.contribute/04.packaging_apps/16.advanced_packagers/advanced_packagers.md b/pages/04.contribute/04.packaging_apps/16.advanced_packagers/advanced_packagers.md new file mode 100644 index 00000000..9ee86313 --- /dev/null +++ b/pages/04.contribute/04.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/04.contribute/04.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/04.contribute/04.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/04.contribute/04.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/04.contribute/04.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/04.contribute/04.packaging_apps/20.bash_tips/07.shell_variables_scope/shell_variables_scope.md index aba9d163..c32b5515 100644 --- a/shell_variables_scope.md +++ b/pages/04.contribute/04.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/04.contribute/04.packaging_apps/20.bash_tips/13.trap/packaging_apps_trap.fr.md similarity index 96% rename from packaging_apps_trap_fr.md rename to pages/04.contribute/04.packaging_apps/20.bash_tips/13.trap/packaging_apps_trap.fr.md index 0ad71544..03d1b13b 100644 --- a/packaging_apps_trap_fr.md +++ b/pages/04.contribute/04.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. @@ -61,7 +68,7 @@ EXIT_PROPERLY () { } ``` -La fonction EXIT_PROPERLY doit indiquer à l'utilisateur l'échec de l'installation et nettoyer les résidus qui ne seront pas pris en charge par le script remove. Ce dernier sera automatiquement appelé à la suite de l'exit 1 avec Yunohost 2.4 +La fonction EXIT_PROPERLY doit indiquer à l'utilisateur l'échec de l'installation et nettoyer les résidus qui ne seront pas pris en charge par le script remove. Ce dernier sera automatiquement appelé à la suite de l'exit 1 avec YunoHost 2.4 Après cette fonction, on peut mettre en place la capture des signaux par trap. diff --git a/packaging_apps_trap.md b/pages/04.contribute/04.packaging_apps/20.bash_tips/13.trap/packaging_apps_trap.md similarity index 96% rename from packaging_apps_trap.md rename to pages/04.contribute/04.packaging_apps/20.bash_tips/13.trap/packaging_apps_trap.md index 0aeeebc1..29783395 100644 --- a/packaging_apps_trap.md +++ b/pages/04.contribute/04.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. @@ -61,7 +68,7 @@ EXIT_PROPERLY () { } ``` -The `EXIT_PROPERLY` function must indicate to the user that the installation has failed and clean up any residue that will not be taken care of by the remove script. The latter will be automatically called after exit `1` with Yunohost 2.4 +The `EXIT_PROPERLY` function must indicate to the user that the installation has failed and clean up any residue that will not be taken care of by the remove script. The latter will be automatically called after exit `1` with YunoHost 2.4 After this function, we can set up signal capture by trap. diff --git a/packaging_apps_start_fr.md b/pages/04.contribute/04.packaging_apps/packaging_apps_start.fr.md similarity index 93% rename from packaging_apps_start_fr.md rename to pages/04.contribute/04.packaging_apps/packaging_apps_start.fr.md index 0d8c3ce8..e492ff23 100644 --- a/packaging_apps_start_fr.md +++ b/pages/04.contribute/04.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. @@ -19,7 +26,7 @@ C'est là que le package d'application entre en jeu, c'est un ensemble de script Du point de vue de l'utilisateur, c'est très simple, on choisit une application, on répond à quelques questions, ça mouline et c'est prêt. Mais il se passe bien plus de choses derrière. -Tout d'abord, lorsque l'application est sélectionnée, YunoHost va aller chercher son package sur Github, par exemple l'application [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh). +Tout d'abord, lorsque l'application est sélectionnée, YunoHost va aller chercher son package sur GitHub, par exemple l'application [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh). Ensuite, YunoHost lit le fichier manifest.json pour connaître les questions à poser à l'utilisateur. Mais ces questions anodines sont très importantes, on retrouvera souvent le domaine sur lequel installer l'application, l'adresse à laquelle elle sera accessible, l'utilisateur qui en sera l'administrateur et la langue par défaut de l'application. @@ -43,11 +50,11 @@ Les scripts d'un package ne sont donc qu'une succession de commandes bash, comme 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) -### Ok, je crois que j'ai compris ! Par où on commence? +### Ok, je crois que j'ai compris ! Par où on commence ? Avant d'envisager de faire un package d'application, il faut réussir à installer correctement la dites application. Car le script ne fera que ce que vous lui direz de faire. -Ensuite, il faut aller lire (et oui encore) la documentation sur le packaging, mais la vrai cette fois, [celle qui emploie des mots bizarres](/packaging_apps). +Ensuite, il faut aller lire (et oui encore) la documentation sur le packaging, mais la vraie cette fois, [celle qui emploie des mots bizarres](/packaging_apps). Mais maintenant vous devriez les comprendre tout ces mots étranges. Mais heureusement, vous n'êtes pas seul pour affronter cette épreuve titanesque, il y a d'autres packageurs que vous pouvez venir rencontrer sur le [forum](https://forum.yunohost.org/c/apps-packaging) et sur le [salon de discussion](xmpp:apps@conference.yunohost.org?join). diff --git a/packaging_apps_start.md b/pages/04.contribute/04.packaging_apps/packaging_apps_start.md similarity index 69% rename from packaging_apps_start.md rename to pages/04.contribute/04.packaging_apps/packaging_apps_start.md index 7f4e99de..8f3920ef 100644 --- a/packaging_apps_start.md +++ b/pages/04.contribute/04.packaging_apps/packaging_apps_start.md @@ -1,18 +1,25 @@ -# 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 +## What is a YunoHost application package Before we continue, we need to define what is exactly an application package. -To be able to do that, we need to remember that Yunohost at its core is a server operating system whose mission is to simplify selfhosting of internet services. To accomplish that, Yunohost provides, among other things, an administration panel allowing application installation in a few clicks. +To be able to do that, we need to remember that YunoHost at its core is a server operating system whose mission is to simplify selfhosting of internet services. To accomplish that, YunoHost provides, among other things, an administration panel allowing application installation in a few clicks. 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,16 +31,18 @@ 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. +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). -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. +Then, YunoHost will read the manifest.json file to know what questions to ask the user through the form. + +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 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. -If the user wants to delete the application, Yunohost will use the remove script from the "*scripts*" folder. It will handle the cleaning process for the user and delete all folders and configuration files that was previsouly installed by the application. +If the user wants to delete the application, YunoHost will use the remove script from the "*scripts*" folder. It will handle the cleaning process for the user and delete all folders and configuration files that was previsouly installed by the application. ### What is a script? @@ -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/04.contribute/05.dev/02.maindomain/maindomain.md b/pages/04.contribute/05.dev/02.maindomain/maindomain.md new file mode 100644 index 00000000..9f06c209 --- /dev/null +++ b/pages/04.contribute/05.dev/02.maindomain/maindomain.md @@ -0,0 +1,22 @@ +--- +title: How is used the main domain +template: docs +taxonomy: + category: docs +routes: + default: '/dev/maindomain' +--- + +Here is a list of situations in which we use the main domain concept: +- to expose the web portal: currently the web portal is only reachable through the main domain address (could be changed for multi tenant support in future) +- to define the hostname of the machine: we believe we do this to avoid some sudo errors (may be it's not relvant anymore or could be made in /etc/hosts) +- to TLS encrypt SMTP and dovecot: so user should define the main domain in their email client to avoid TLS warning +- To be able to do mail forwarding using the main domain as Sender Rewriting Scheme Domain see: https://en.wikipedia.org/wiki/Sender_Rewriting_Scheme +- to define default email as (root@ abuse@) but we probably should do it on all parent domain instead +- to define `myhostname` in postfix config, used as EHLO and reverseDNS (refering to https://mxtoolbox.com/emailhealth test it should be a FQDN, so a subdomain) +- to generate the self-signed Local Authority: having just one allow to upload it in a browser and get an x509 authenticated https connexion. +- to define default xmpp DNS field: dns field are only set on the main domain by default + +Finally we can imagine some apps use the main domain too, see +https://github.com/search?q=org%3AYunoHost-Apps+main_domain&type=code +https://github.com/search?q=org%3AYunoHost-Apps+current_host&type=code diff --git a/pages/04.contribute/05.dev/dev.fr.md b/pages/04.contribute/05.dev/dev.fr.md new file mode 100644 index 00000000..2349470f --- /dev/null +++ b/pages/04.contribute/05.dev/dev.fr.md @@ -0,0 +1,113 @@ +--- +title: Contribuer au cœur de YunoHost +template: docs +taxonomy: + category: docs +routes: + default: '/dev' +--- + +Vous souhaitez ajouter une nouvelle fonctionnalité au cœur de YunoHost, mais ne savez pas comment procéder ? Ce guide parcourt les étapes du développement et du processus de contribution. + +Si vous cherchez quelque chose à implémenter ou un bug à réparer, le bug tracker est [ici](https://github.com/yunohost/issues/issues) ! + +**Venez dire coucou sur le [salon de dev](/chat_rooms)** ! + +### Mettre en place un environnement de développement + +- **Utilisez [ynh-dev](https://github.com/YunoHost/ynh-dev)** (voir le README) pour mettre en place un environnement de développement - en local sur une machine virtuelle, ou bien sur un VPS. Ceci installera une instance fonctionelle de YunoHost, en utilisant directement les dépôts Git à l'aide de liens symboliques. De cette façon, il vous sera possible de modifier les fichiers, de tester les changements en temps réel, et de commiter et push/pull directement depuis cet environnement. + +- **Implémentez et testez votre fonctionnalité**. Suivant ce sur quoi vous + voulez travailler : + - **Cœur Python/ligne de commande** : allez dans `/ynh-dev/yunohost/` + - **Webadmin** : allez dans `/ynh-dev/yunohost-admin/` + - Vous pouvez aussi travailler sur les autres projets liés sur lesquels s'appuie YunoHost (SSOwat, Moulinette) de façon similaire. + +### Vue d'ensemble des 4 morceaux principaux de YunoHost + +##### Moulinette + +C'est un petit framework "fait maison". [Son rôle principal](https://moulinette.readthedocs.io/en/latest/actionsmap.html) est de permettre de construire une API Web et une API en ligne de commande à partir d'un même code Python et d'un schéma YAML que nous appelons [l'actionmap](https://github.com/YunoHost/yunohost/blob/dev/data/actionsmap/yunohost.yml). + +Il prend en charge d'autres mécanismes tels que l'authentification, l'internationalisation et des petites fonctions utilitaires techniques (par ex. lecture/écriture de fichiers JSON). + +Moulinette dispose de sa propre documentation [ici](https://moulinette.readthedocs.io/en/latest/). + +##### YunoHost + +C'est le cœur même de YunoHost. Il contient : +- [le code Python](https://github.com/YunoHost/yunohost/tree/dev/src/yunohost) qui gère les utilisateurs, domaines, applications, services et autres +- des [helpers bash](https://github.com/YunoHost/yunohost/tree/dev/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/dev/data/hooks) et [templates](https://github.com/YunoHost/yunohost/tree/dev/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/dev/locales) +- des [tests](https://github.com/YunoHost/yunohost/tree/dev/src/yunohost/tests) + +##### SSOwat + +C'est le système de connexion unique (single sign-on) de YunoHost. Il contient principalement : +- [du code LUA](https://github.com/YunoHost/ssowat) interfacé directement avec NGINX et qui gère tous les aspects "techniques" de l'authentification et de la gestion des accès aux ressources. +- le [portail web utilisateur](https://github.com/YunoHost/SSOwat/tree/dev/portal) qui est l'interface finale visible par les utilisateurs de YunoHost. + +SSOwat est configuré via `/etc/ssowat/conf.json` qui est généré par YunoHost. + +##### YunoHost-admin + +C'est une dépendance *optionnelle* de YunoHost et correspond à une interface pour l'API web créée par YunoHost et Moulinette (service `yunohost-api`). + +Il contient essentiellement : +- [des templates pour les vues](https://github.com/YunoHost/yunohost-admin/tree/dev/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/src/locales) + +### Travailler sur le cœur Python / ligne de commande + +- Allez dans `/ynh-dev/yunohost/`. + +- Exécutez `cd /ynh-dev && ./ynh-dev use-git yunohost`. + +- Le fichier actionsmap (`data/actionsmap/yunohost.yml`) définit les différentes catégories, actions et arguments de la ligne de commande YunoHost. Choisissez comment vous voulez que les utilisateurs utilisent votre fonctionnalité, et ajoutez/éditez les catégories, actions et arguments correspondants. Par exemple, dans `yunohost domain add some.domain.tld`, la catégorie est `domain`, l'action est `add` et `some.domain.tld` est un argument. + +- Moulinette va automatiquement faire le lien entre les commandes de l'actionsmap et les fonctions Python (ainsi que leurs arguments) dans `src/yunohost/`. Par exemple, `yunohost domain add some.domain.tld` déclenchera un appel de `domain_add(domainName)` dans `domain.py`, avec l'argument `domainName` qui vaudra `"some.domain.tld"`. + +##### Helpers / style de code + +- Pour gérer les exceptions, il existe un type `YunohostError()` + +- Pour aider avec l'internationalisation des messages, utilisez `m18n.n('some-message-id')` et mettez le message correspondant dans `locales/en.json`. Vous pouvez aussi utiliser des arguments pour construire les messages, avec `{{some-argument:s}}`. Ne modifiez pas de fichiers de locales autres que `en.json`, la traduction sera faite avec [Weblate](https://translate.yunohost.org/) ! + +- YunoHost essaye de suivre le style de code [PEP8](http://pep8.org/). Des outils existent pour vérifier automatiquement la conformité du code. + +- Mettre un `_` devant les noms des fonctions "privées". + +### Travailler sur la webadmin + +- Allez dans `/ynh-dev/yunohost-admin/src/`. + +- Exécutez `cd /ynh-dev && ./ynh-dev use-git yunohost-admin`. Ceci lance gulp, de sorte qu'à chaque fois que vous modifiez les sources, il recompilera le code (JS) et vous pourrez voir les changements dans le navigateur web (Ctrl+F5). Pour stopper la commande, faites simplement Ctrl+C. + +- L'interface web utilise une API pour communiquer avec YunoHost. Les commandes/requêtes de l'API sont également définies dans l'actionsmap. Par exemple, accéder à la page `https://domain.tld/yunohost/api/users` correspond à une requête `GET /users` vers l'API YunoHost. Cette requête est mappée sur `user_list()`. Accéder à cette URL devrait afficher le JSON retourné par cette fonction. Les requêtes 'GET' sont typiquement destinées à demander de l'information au serveur, tandis que les requêtes 'POST' sont destinées à demander au serveur de modifier/changer des informations ou de réaliser des actions. + +- `js/yunohost/controllers` contient les parties JavaScript, et définit quelles requêtes faire à l'API pendant le chargement d'une page donnée de l'interface, et comment traiter les données récupérées pour générer la page, en utilisant des templates. + +- `views` contient les templates des pages de l'interface. Dans le template, les données venant du JavaScript peuvent être utilisées avec la syntaxe `{{some-variable}}`, qui sera remplacée pendant la construction de la page. Il est également possible d'avoir des conditions avec la syntaxe d'[handlebars.js](http://handlebarsjs.com) : `{{#if + some-variable}}<p>du HTML conditionnel ici !</p>{{/if}}` + +- Pour l'internationalisation des messages, utilisez `y18n.t('some-string-code')` dans le JavaScript, ou `{{t 'some-string-code'}}` dans le template HTML, et mettez votre message dans `locales/en.json`. Ne modifiez pas de fichiers de locales autres que `en.json`, la traduction sera faite avec [Weblate](https://translate.yunohost.org/) ! + +##### N'oubliez pas + +- À chaque modification de l'actionsmap, il faut redémarrer l'API YunoHost : `service yunohost-api restart` (Il faudra retaper le mot de passe administrateur dans l'interface web) + +- Il faudra peut-être régulièrement forcer le rafraîchissement du cache navigateur pour propager correctement le JavaScript et/ou HTML (à chaque fois que l'on change quelque chose dans `js` ou `views`, donc). + + +### Votre fonctionnalité est prête et vous souhaitez qu'elle soit intégrée dans YunoHost + +- Forkez le dépôt correspondant sur GitHub, et commitez vos changements dans une nouvelle branche. Il est recommandé de nommer la branche avec la convention suivante : + - Pour une nouvelle fonctionnalité ou amélioration : `enh-ISSUENUMBER-description-fonctionnalité` + - Pour une correction de bug : `fix-REDMINETICKET-description-correctif` + - `ISSUENUMBER` est optionnel et correspond au numéro du ticket sur le bug tracker + +- Une fois prêt, ouvrez une Pull Request (PR) sur Github. De préférence, inclure `[fix]` ou `[enh]` au début du titre de la PR. + +- Après relecture, test et validation par les autres contributeurs, votre branche sera mergée dans `unstable` ! diff --git a/dev.md b/pages/04.contribute/05.dev/dev.md similarity index 65% rename from dev.md rename to pages/04.contribute/05.dev/dev.md index 45015d78..df1eabd9 100644 --- a/dev.md +++ b/pages/04.contribute/05.dev/dev.md @@ -1,28 +1,35 @@ -## 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 contribution process. If you're looking for stuff to implement or fix, the bug-tracker is -[here](https://github.com/YunoHost/issues/issues) ! +[here](https://github.com/YunoHost/issues/issues)! -**Come say hi to us in the [dev chatroom](/chat_rooms)** ! +**Come say hi to us in the [dev chat room](/chat_rooms)**! ### Setting up a development environment - **Use [ynh-dev](https://github.com/YunoHost/ynh-dev)** (see the README) to setup a development environment - locally in a virtual machine, or on a VPS. - This will setup a working YunoHost instance, using directly the git repositories + This will setup a working YunoHost instance, using directly the Git repositories (with symlinks). That way, you will be able to edit files, test your changes in real time, commit stuff and push/pull directly from your development environment. - **Implement and test your feature**. Depending on what you want to develop, you - will want to : - - **Python/CLI core** : work in `/ynh-dev/yunohost/` - - **Web administration interface** : work in `/ynh-dev/yunohost-admin/` + will want to: + - **Python/CLI core**: work in `/ynh-dev/yunohost/` + - **Web administration interface**: work in `/ynh-dev/yunohost-admin/` - You can also work on the other projects on which YunoHost is built - (SSOwat, moulinette) in similar ways + (SSOwat, Moulinette) in similar ways ### Overview of the 4 main pieces of YunoHost @@ -30,39 +37,39 @@ 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). +Python code thanks to a YAML schema which we call +[the actionmap](https://github.com/YunoHost/yunohost/blob/dev/data/actionsmap/yunohost.yml). It handles other mechanisms like authentication, internationalization and -small technical utilitary functions (e.g. reading/writing json). +small technical utilitary functions (e.g. reading/writing JSON). Moulinette has its own documentation available [here](https://moulinette.readthedocs.io/en/latest/). -#### Yunohost +#### 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/yunohost) that manages users, domains, apps, services and other things +- [bash helpers](https://github.com/YunoHost/yunohost/tree/dev/data/helpers.d) mainly used by application packagers to package applications +- [hooks](https://github.com/YunoHost/yunohost/tree/dev/data/hooks) and [templates](https://github.com/YunoHost/yunohost/tree/dev/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/dev/locales) +- [tests](https://github.com/YunoHost/yunohost/tree/dev/src/yunohost/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 +- [Lua scripts](https://github.com/YunoHost/ssowat) that are directly interfaced with NGINX and handle all the "technical" aspects of authentication and route accesses +- the web [user portal](https://github.com/YunoHost/SSOwat/tree/dev/portal) which is the interface used by YunoHost's end users to log in and browse installed apps SSOwat is configured through `/etc/ssowat/conf.json` which is generated by YunoHost. -#### Yunohost-admin +#### YunoHost-admin It is an *optional* dependency of YunoHost and corresponds to an interface for the web API created by YunoHost and Moulinette (c.f. the `yunohost-api` service). It essentially contains: -- [view templates](https://github.com/YunoHost/yunohost-admin/tree/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/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/src/locales) ### Working on the YunoHost Python/CLI core @@ -77,7 +84,7 @@ It essentially contains: category is `domain`, the action is `add`, and `some.domain.tld` is an argument. -- Moulinette will automatically map commands in the actionsmap to python +- Moulinette will automatically map commands in the actionsmap to Python functions (and their arguments) located in `src/yunohost/`. For example, typing `yunohost domain add some.domain.tld` will call the function `domain_add(domainName)` in `domain.py`, with the argument `domainName` equal @@ -107,50 +114,50 @@ It essentially contains: - The web interface uses the API to interact with YunoHost. The API commands/requests are also defined via the actionsmap. For instance, accessing - the page ```https://domain.tld/yunohost/api/users``` corresponds to a `GET + the page `https://domain.tld/yunohost/api/users` corresponds to a `GET /users` requests on the YunoHost API. It is mapped to the function - `user_list()`. Accessing the URL should display the json returned by this + `user_list()`. Accessing the URL should display the JSON returned by this function. 'GET' requests are typically meant to ask information to the server. 'POST' requests are meant to ask the server to edit/change some information, or to execute some actions. -- `js/yunohost/controllers` contains the javascript parts, +- `js/yunohost/controllers` contains the JavaScript parts, and define which requests to make to the API when loading a specific page of the interface, and how to process the data to generate the page, using templates. - `views` contains the various templates for the pages of the interface. In the - template, data coming from the javascript part can be used with the syntax + template, data coming from the JavaScript part can be used with the syntax `{{some-variable}}`, which will be replaced when building/accessing the page. It is also possible to have conditions using the - [handlebars.js](http://handlebarsjs.com) syntax : ```{{#if - some-variable}}<p>Some conditional HTML code here !</p>{{/if}}``` + [handlebars.js](http://handlebarsjs.com) syntax: `{{#if + some-variable}}<p>Some conditional HTML code here !</p>{{/if}}` - For internationalized strings, use `y18n.t('some-string-code')` in the - javascript, or `{{t 'some-string-code'}}` in the HTML template, and put your + JavaScript, or `{{t 'some-string-code'}}` in the HTML template, and put your string in `locales/en.json`. Don't edit other locales files, - this will be done using [weblate](https://translate.yunohost.org/) ! + this will be done using [Weblate](https://translate.yunohost.org/)! ##### Don't forget -- Each time you edit the actionsmap or the python code, you should restart the yunohost-api : - ```systemctl restart yunohost-api``` - (You'll need to retype your admin password in the web interface) +- Each time you edit the actionsmap or the Python code, you should restart the YunoHost api: + `systemctl restart yunohost-api` + (You'll need to retype your admin and password in the web interface) - You might need to force-clear the cache of your browser sometimes to refresh - the javascript and/or html (so each time you edit something in `js` or `views`). + the JavaScript and/or HTML (so each time you edit something in `js` or `views`). ### Your feature is ready and you want it to be integrated in YunoHost -- Fork the relevant repo on Github, and commit stuff to a new branch. We recommend - to name the branch with the following convention : - - For an enhancement or new feature : `enh-ISSUENUMBER-name-of-feature` +- Fork the relevant repo on GitHub, and commit stuff to a new branch. We recommend + to name the branch with the following convention: + - For an enhancement or new feature: `enh-ISSUENUMBER-name-of-feature` - For a bugfix `fix-ISSUENUMBER-description-of-fix` - `ISSUENUMBER` is optional and is the id of a corresponding ticket on the bug tracker. -- Once you're ready, open a Pull Request (PR) on Github. Please include `[fix]` or +- Once you're ready, open a Pull Request (PR) on GitHub. Please include `[fix]` or `[enh]` at the beginning of the title of your PR. - After reviewing, testing and validation by other contributors, your branch -should be merged in `unstable` ! +should be merged in `unstable`! diff --git a/pages/04.contribute/contributordoc.de.md b/pages/04.contribute/contributordoc.de.md new file mode 100644 index 00000000..d26d9ee1 --- /dev/null +++ b/pages/04.contribute/contributordoc.de.md @@ -0,0 +1,126 @@ +--- +title: Beteilige dich! +template: docs +taxonomy: + category: docs +routes: + default: '/contributordoc' + aliases: + - '/contribute' +--- + +<p class="lead"> +YunoHost hängt ausschließlich von der Beteiligung von Leuten wie dir ab. +</p> + +<hr style="margin-bottom: 30px;"> + +[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] + +<hr style="margin-bottom: 30px;"> + +[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 <a href="https://forum.yunohost.org/" target="_blank">Forum, bei der du helfen kannst.</a>. +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[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] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=globe /] Lokalisation +[/size] +[/center] + +[center] +Mach mit, indem du YunoHost-Schnittstellen in deiner Sprache verfügbar machst. +<a href="https://translate.yunohost.org/" target="_blank">Leg los!</a>! +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[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 <a href="https://github.com/YunoHost/issues/issues" target="_blank">bug tracker</a>. +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[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] + +<hr style="margin-bottom: 30px;"> + +[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 <a href="https://github.com/YunoHost" target="_blank">sind herzlich willkommen</a>! +<br> +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/04.contribute/contributordoc.fr.md b/pages/04.contribute/contributordoc.fr.md new file mode 100644 index 00000000..c34cb505 --- /dev/null +++ b/pages/04.contribute/contributordoc.fr.md @@ -0,0 +1,120 @@ +--- +title: Contribuer +template: docs +taxonomy: + category: docs +routes: + default: '/contributordoc' + aliases: + - '/contribute' +--- + + +<p class="lead"> +YunoHost dépend entièrement de la participation de gens comme vous. +</p> + + +<hr style="margin-bottom: 30px;"> + +[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] + +<hr style="margin-bottom: 30px;"> + +[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 <a href="https://forum.yunohost.org/" target="_blank">Forum</a>. +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[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] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=globe /] Traduisez +[/size] +[/center] + +[center] +Participez en rendant les interfaces de YunoHost disponibles dans votre langue. <a href="https://translate.yunohost.org/" target="_blank">Lancez-vous</a> ! +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[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 <a href="https://github.com/YunoHost/issues/issues/new" target="_blank">bug tracker</a>. +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[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] + +<hr style="margin-bottom: 30px;"> + +[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 <a href="https://github.com/YunoHost" target="_blank">sont les bienvenus</a>. 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/04.contribute/contributordoc.md b/pages/04.contribute/contributordoc.md new file mode 100644 index 00000000..00a70704 --- /dev/null +++ b/pages/04.contribute/contributordoc.md @@ -0,0 +1,123 @@ +--- +title: Get involved +template: docs +taxonomy: + category: docs +routes: + default: '/contributordoc' + aliases: + - '/contribute' +--- + +<p class="lead"> +YunoHost depends exclusively on the participation of people like you. +</p> + +<hr style="margin-bottom: 30px;"> + +[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] + +<hr style="margin-bottom: 30px;"> + +[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 <a href="https://forum.yunohost.org/" target="_blank">Forum</a>. +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[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] + +<hr style="margin-bottom: 30px;"> + +[columns] +[center] +[size=30] +[fa=globe /] Localization +[/size] +[/center] + +[center] +Get involved by making YunoHost interfaces available in your language +<a href="https://translate.yunohost.org/" target="_blank">Get started</a>! +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[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 <a href="https://github.com/YunoHost/issues/issues" target="_blank">bug tracker</a>. +[/center] +[/columns] + +<hr style="margin-bottom: 30px;"> + +[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] + +<hr style="margin-bottom: 30px;"> + +[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 <a href="https://github.com/YunoHost" target="_blank">are welcome</a>! +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 ! + +<i class="fa fa-heart"></i> Vous pouvez contribuer à la documentation en l' +<a class="github-link tooltip tooltip-bottom" href="https://github.com/YunoHost/doc" data-tooltip="Modifier/Créer la page sur GitHub"><i class="fa fa-pencil-square"></i>éditant</a> ! 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! + +<i class="fa fa-heart"></i> You can contribute to the documentation by +<a class="github-link tooltip tooltip-bottom" href="https://github.com/YunoHost/doc" data-tooltip="Edit this page on GitHub"><i class="fa fa-pencil-square"></i>Editing</a> 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` : - -<br> - -<div class="text-center"><img src="/images/boot_screen.png"> - -*Write down the `IP address` field visible on the screen: It is your server's **local IP address**.* - -</div> -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 : - -<br> - -<div class="text-center"><img src="/images/boot_screen.png"> - -<p markdown="1"> -*Nota el valor `IP` visible en la pantalla : esto es **la dirección IP local** de tu servidor.* -</p> - -</div> 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é : - -<br> - -<div class="text-center"><img src="/images/boot_screen.png"> - - -*Notez la valeur `IP` affichée à l’écran : c’est **l’adresse IP locale** de votre serveur.* - - -</div> -<br>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. - -<img src="./images/portForwarding_en.png" width="100%"> 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. - -<img src="./images/portForwarding_fr.png" width="100%"> 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. - -<img src="./images/portForwarding_fr.png" width="100%"> 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 : - -<img style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);" src="/images/postinstall_web.png"> - -<em><p class="text-muted">Preview of the Web post-installation</p></em> - -### From the command line - -You can also perform the postinstallation with the command `yunohost tools postinstall` directly on the server, or [via SSH](/ssh). - -<img style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);" src="/images/postinstall_cli.png"> - -<em><p class="text-muted">Preview of the command-line post-installation</p></em> - -<br> - -## 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). - -<br> - ---- - -## 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 c4cda5f1..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 : - -<img style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);" src="/images/postinstall_web.png"> - -*<p class="text-muted">Vistazo de la post-instalación Web</p>* - -### 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). - -<img style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);" src="/images/postinstall_cli.png"> - -*<p class="text-muted">Vistazo de la post-instalación con línea de comando</p>* - -## 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)**. - -<br> - ---- - -## 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 e5e60911..00000000 --- a/postinstall_fr.md +++ /dev/null @@ -1,73 +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 : - -<img style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);" src="/images/postinstall_web.png"> - -*<p class="text-muted">Aperçu de la post-installation Web</p>* - -### 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). - -<img style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);" src="/images/postinstall_cli.png"> - -*<p class="text-muted">Aperçu de la post-installation en ligne de commande</p>* - -## 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)**. - -<br> - ---- - -## 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 oeil aux [applications disponibles](/apps) ! - diff --git a/project_budget.md b/project_budget.md deleted file mode 100644 index ae733961..00000000 --- a/project_budget.md +++ /dev/null @@ -1,28 +0,0 @@ -# Project budget - -# Estimated budget for 2019/2020 - -## Expected revenues - -* Donations via Liberapay: current is about 45€/week, so about 2340€/year -* Grant from NLNet: 20K€, to be used for R&D (TODO: publish the project plan once validated with NLnet) - -## Expected expenses - -* Server renting: ~1000€ - * Forum: 14.4€/month: 172.80€/year - * CI: 20€/month (to be confirmed): 240€/year - * Bearnaise server migration to a new machine: 587.2€ -* Domain names: ~150€ - * nohost.me: 11.99€HT/year - * ynh.fr: 6.99€HT/year (to be confirmed with frju?) - * noho.st: ~35€ TTC/year - * YunoHost.org: 13.99€HT/year - * YunoHost.com: 9.99€HT/year - * labriqueinter.net: 12.49€HT/year - * internetcu.be: 17.99€HT/year -* Communication: ~200€ -* Travel (e.g. to go to conferences): ~500€ -* Bank account fees: 7x12€ => ~100€ - -**Total**: about 2000€ diff --git a/project_budget_fr.md b/project_budget_fr.md deleted file mode 100644 index d73a948b..00000000 --- a/project_budget_fr.md +++ /dev/null @@ -1,28 +0,0 @@ -# Budget du projet - -# Budget prévisionnel pour 2019/2020 - -## Revenus attendus - -* Dons via Liberapay: environ 45 € / semaine, soit environ 2340 € / an -* Subvention de NLNet: 20K €, à utiliser pour la R&D (TODO: publier le plan de projet une fois validé avec NLnet) - -## Dépenses prévues - -* Location Server: ~1000€ - * Forum: 14.4€/mois: 172.80€/ans - * CI: 20€/mois (à confirmer): 240€/mois - * Migration du serveur "Bearnaise" sur une nouvelle machine: 587.2€ -* Noms de domaine: ~150€ - * nohost.me: 11.99€HT/ans - * ynh.fr: 6.99€HT/ans (doit être confirmer avec frju?) - * noho.st: ~35€ TTC/ans - * YunoHost.org: 13.99€HT/ans - * YunoHost.com: 9.99€HT/ans - * labriqueinter.net: 12.49€Ht/ans - * internetcu.be: 17.99€HT/ans -* Communication: ~200€ -* Déplacements (ex: aller aux conférences): ~500€ -* Compte banquaire fees: 7x12€ => ~100€ - -**Total**: environ 2000€ 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 8982c940..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 his 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 <your_yunohost_server> -``` - -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 <your_old_ssh_port_number> # 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 = <your_ssh_port> - -[sshd-ddos] -port = <your_ssh_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 <new_ssh_port_number> admin@<your_yunohost_server> -``` - ---- - -### 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. - -<div class="alert alert-info" markdown="1"> -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. -</div> - -**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 him/her 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 c127c105..00000000 --- a/security_fr.md +++ /dev/null @@ -1,195 +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 <votre_serveur_yunohost> -``` -<div class="alert alert-info" markdown="1"> -Si vous êtes sur Ubuntu 16.04 vous devez faire `ssh-add` pour initialiser l'agent ssh -</div> - -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 <votre_numero_de_port_ssh> -``` - -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 <votre numéro de port> # 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 = <votre_numero_de_port_ssh> - -[sshd-ddos] -port = <votre_numero_de_port_ssh> -``` - -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 <votre_numero_de_port_ssh> admin@<votre_serveur_yunohost> -``` - ---- - -### 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. - -<div class="alert alert-info" markdown="1"> -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 -</div> - -**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/sponsors_partners_fr.md b/sponsors_partners_fr.md deleted file mode 100644 index 7bdf135c..00000000 --- a/sponsors_partners_fr.md +++ /dev/null @@ -1,14 +0,0 @@ -# Mécénes et partenaires - -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 au 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. -- [NLNET](https://nlnet.nl/): La Fondation NLnet soutient les organisations et les personnes qui contribuent à une société de l'information ouverte. -- [TETANEUTRAL-NET](https://tetaneutral.net/): fournisseur d'accès à Internet associatif opérant actuellement un réseau radio sur Toulouse et ses environs et un hébergeur. - -Une liste des partenaires de YunoHost: -- [FFDN](https://www.ffdn.org/): La fédération FDN regroupe des Fournisseurs d'Accès à Internet associatifs se reconnaissant dans des valeurs communes : bénévolat, solidarité, fonctionnement démocratique et à but non lucratif ; défense et promotion de la neutralité du Net. -- [Framasoft](https://framasoft.org/) : association d’éducation populaire, un groupe d’ami·es convaincu·es qu’un monde numérique émancipateur est possible, persuadé·es qu’il adviendra grâce à des actions concrètes sur le terrain et en ligne avec vous et pour vous ! diff --git a/ssh.md b/ssh.md deleted file mode 100644 index 68084a69..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 Linux and Mac OS / OSX. 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`. - -<div class="alert alert-warning"> -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. -</div> - -#### 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 <portnumber>` to the command, e.g. : - -```bash -ssh -p 2244 admin@your.domain.tld -``` - -<div class="alert alert-info"> -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`. -</div> - -## 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 <username> -``` - -It is also possible to remove ssh access using the following: - -```bash -yunohost user ssh disallow <username> -``` - -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 <username> <key> -yunohost user ssh remove-key <username> <key> -yunohost user ssh list-keys <username> -``` - -## Security and SSH - -N.B. : `fail2ban` will ban your IP for 10 mimutes if you perform 5 failed login attempts. If you need to unban the IP, have a look at the page about [fail2ban](/fail2ban) - -A more extensive discussion about security & SSH can be found on the [dedicated page](/security). diff --git a/ssh_fr.md b/ssh_fr.md deleted file mode 100644 index dbc8243f..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 Linux et Mac OS / OSX. 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`. - -<div class="alert alert-warning"> -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. -</div> - -#### 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 <numerodeport>` à la commande, par ex. : - -```bash -ssh -p 2244 admin@votre.domaine.tld -``` - -<div class="alert alert-info"> -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`. -</div> - -## 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 <username> -``` - -De même, il est possible de supprimer l'accès ssh à un utilisateur avec la commande : -```bash -yunohost user ssh disallow <username> -``` - -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 <username> <key> -yunohost user ssh remove-key <username> <key> -yunohost user ssh list-keys <username> -``` - -## 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 9a5ab061..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)\)@(/\1)@g' $FILE - - # Replace href="/foo_fr" to href="foo" - sed -i -E 's@href="/?((\w|-)+)_(en|fr|es|it|ar|de|oc)"@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 92fa14e1..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))?.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/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/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 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata> +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 +</metadata> +<defs> +<font id="SourceSansProBold" horiz-adv-x="0" > +<font-face units-per-em="2048" ascent="1536" descent="-512" /> +<missing-glyph horiz-adv-x="425" /> +<glyph unicode="ff" horiz-adv-x="1343" d="M49 780v224l135 10v47q0 170 94.5 274.5t290.5 104.5q117 0 211 -37l-55 -223q-51 23 -119 22q-55 0 -88 -34.5t-33 -104.5v-47h346v53q0 176 90.5 283.5t282.5 107.5q103 0 203 -37l-53 -221q-57 20 -105 21q-117 0 -116 -146v-61h182v-236h-182v-780h-302v780h-346 v-780h-301v780h-135z" /> +<glyph unicode="ft" horiz-adv-x="1409" d="M49 780v224l135 10v55q0 176 90.5 283.5t284.5 107.5q100 0 203 -37l-55 -221q-57 20 -105 21q-117 0 -117 -146v-61h330l35 270h250v-270h243v-236h-243v-407q0 -162 131 -162q43 0 96 20l47 -219q-121 -37 -225 -37q-350 0 -350 394v411h-314v-780h-301v780h-135z" /> +<glyph unicode=" " horiz-adv-x="425" /> +<glyph unicode="	" horiz-adv-x="425" /> +<glyph unicode=" " horiz-adv-x="425" /> +<glyph unicode="!" horiz-adv-x="696" d="M166 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5zM197 1372h303l-11 -272l-43 -627h-196l-43 627z" /> +<glyph unicode=""" horiz-adv-x="1099" d="M156 1405h303l-10 -272l-60 -408h-164l-59 408zM641 1405h303l-10 -272l-60 -408h-163l-62 408z" /> +<glyph unicode="#" horiz-adv-x="1081" d="M70 383v192h174l28 226h-161v192h186l43 338h172l-41 -338h213l43 338h172l-41 -338h162v-192h-186l-27 -226h172v-192h-195l-47 -383h-174l45 383h-211l-47 -383h-174l45 383h-151zM420 575h211l28 226h-213z" /> +<glyph unicode="$" horiz-adv-x="1081" d="M80 135l131 203q160 -119 293 -119q166 0 166 141q0 49 -40 91.5t-100.5 71t-130 67.5t-130 80t-100.5 110.5t-40 155.5q0 150 83 250t228 129v211h199v-207q168 -25 305 -168l-151 -172q-113 102 -224 102q-152 0 -151 -131q0 -45 40 -83t100 -64.5t130 -64.5t130.5 -79 t100 -113.5t39.5 -164.5q0 -152 -81.5 -256.5t-237.5 -136.5v-213h-199v205q-219 27 -360 155z" /> +<glyph unicode="%" horiz-adv-x="1755" d="M53 938q0 197 92.5 309.5t239.5 112.5t240.5 -112.5t93.5 -309.5t-93.5 -311.5t-240.5 -114.5t-239.5 114.5t-92.5 311.5zM262 938q0 -258 123 -258t123 258q0 254 -123 254t-123 -254zM432 -25l721 1385h172l-719 -1385h-174zM1036 401.5q0 196.5 93.5 309t241 112.5 t240.5 -112.5t93 -309t-93 -311.5t-240.5 -115t-241 115t-93.5 311.5zM1247 401q0 -258 123 -258t123 258q0 254 -123 254t-123 -254z" /> +<glyph unicode="&" horiz-adv-x="1366" d="M51 356q0 129 64.5 216t179.5 161q-82 154 -82 277q0 147 99.5 248.5t262.5 101.5q150 0 239 -82t89 -221q0 -117 -73.5 -204t-204.5 -175q111 -129 268 -244q106 137 154 320h274q-76 -250 -223 -451q135 -70 231 -84l-72 -244q-164 33 -342 136q-182 -135 -419 -136 q-209 0 -327 110t-118 271zM336 375q0 -76 55 -123t144 -47q82 0 170 53q-164 131 -279 277q-90 -80 -90 -160zM461 1012q0 -70 43 -160q84 49 127 96t43 109q0 104 -92 104q-51 0 -86 -40.5t-35 -108.5z" /> +<glyph unicode="'" horiz-adv-x="614" d="M156 1405h303l-10 -272l-60 -408h-164l-59 408z" /> +<glyph unicode="(" horiz-adv-x="704" d="M147.5 569q-0.5 496 270.5 936l188 -78q-215 -383 -215 -858t215 -858l-188 -78q-270 440 -270.5 936z" /> +<glyph unicode=")" horiz-adv-x="704" d="M98 -289q217 381 217 858.5t-217 857.5l189 78q270 -440 270 -935.5t-270 -936.5z" /> +<glyph unicode="*" horiz-adv-x="935" d="M78 1118l47 148l237 -49l27 241h158l26 -244l236 52l49 -148l-221 -100l121 -213l-125 -90l-164 182l-166 -182l-125 90l121 213z" /> +<glyph unicode="+" horiz-adv-x="1081" d="M70 569v213h360v377h221v-377h361v-213h-361v-376h-221v376h-360z" /> +<glyph unicode="," horiz-adv-x="614" d="M94 -238q111 39 171.5 104.5t60.5 145.5h-17q-76 0 -129 46t-53 124q0 76 54.5 124t133.5 48q100 0 154.5 -74.5t54.5 -209.5q0 -170 -95 -292t-273 -175z" /> +<glyph unicode="-" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> +<glyph unicode="." horiz-adv-x="614" d="M125 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5z" /> +<glyph unicode="/" horiz-adv-x="694" d="M27 -328l411 1782h197l-412 -1782h-196z" /> +<glyph unicode="0" horiz-adv-x="1081" d="M76 655q0 324 125 497t340 173t340 -173t125 -497q0 -326 -126 -503t-339 -177t-339 177.5t-126 502.5zM360 655q1 -446 181 -446q86 0 133 99.5t47 347t-47 342t-133 94.5t-133.5 -94.5t-47.5 -342.5z" /> +<glyph unicode="1" horiz-adv-x="1081" d="M143 0v244h283v751h-244v187q182 35 324 118h221v-1056h244v-244h-828z" /> +<glyph unicode="2" horiz-adv-x="1081" d="M61 1118q100 106 200.5 156.5t236.5 50.5q193 0 311.5 -113.5t118.5 -300.5q0 -147 -108.5 -307t-307.5 -366q131 16 217 16h262v-254h-915v172q156 147 233.5 224t167.5 179.5t127 176t37 141.5q0 94 -49 145.5t-135 51.5q-106 0 -232 -134z" /> +<glyph unicode="3" horiz-adv-x="1081" d="M45 160l139 190q135 -131 285 -131q96 0 153.5 41t57.5 113q0 94 -75 140t-275 46v213q307 0 307 174q0 68 -42 106t-118 38q-113 0 -244 -115l-151 184q193 166 410 166q205 0 326.5 -94t121.5 -262q0 -197 -217 -289v-8q117 -35 187.5 -116t70.5 -202 q0 -174 -139.5 -276.5t-343.5 -102.5q-295 1 -453 185z" /> +<glyph unicode="4" horiz-adv-x="1081" d="M39 311v207l475 782h369v-759h149v-230h-149v-311h-281v311h-563zM328 541h274v211q0 45 12 290h-8q-33 -72 -106 -219z" /> +<glyph unicode="5" horiz-adv-x="1081" d="M47 158l135 190q139 -129 281 -129q102 0 160.5 52.5t58.5 150.5q0 96 -56.5 148.5t-148.5 52.5q-55 0 -93 -13.5t-99 -52.5l-135 86l36 657h738v-253h-478l-22 -244q68 31 145 31q178 0 296 -103.5t118 -300.5q0 -209 -139 -332t-338 -123q-277 1 -459 183z" /> +<glyph unicode="6" horiz-adv-x="1081" d="M84 621q0 344 151.5 524t374.5 180q227 0 379 -156l-158 -180q-35 39 -91 65.5t-111 26.5q-254 0 -269 -405q49 61 123 99t138 38q176 0 281.5 -101.5t105.5 -299.5q0 -197 -125 -317t-308 -120q-207 0 -349 162t-142 484zM367 471q34 -270 202 -270q72 0 118 53t46 158 q0 188 -170 188q-115 0 -196 -129z" /> +<glyph unicode="7" horiz-adv-x="1081" d="M90 1047v253h905v-184q-113 -135 -181.5 -253t-106 -255t-53 -267t-25.5 -341h-303q18 334 93 566.5t255 480.5h-584z" /> +<glyph unicode="8" horiz-adv-x="1081" d="M86 332q0 201 221 319v8q-174 131 -174 308q0 164 116 261t300 97q178 0 286.5 -97.5t108.5 -258.5q0 -172 -170 -285v-8q225 -123 225 -340q0 -156 -128 -258.5t-332 -102.5q-197 0 -325 99.5t-128 257.5zM344 367q0 -84 58.5 -133.5t142.5 -49.5q78 0 126 42t48 120 q0 41 -16.5 72t-63.5 60.5t-79 44t-116 50.5q-100 -91 -100 -206zM397 967q0 -74 55.5 -120t168.5 -89q80 92 79 190q0 76 -42 122t-115 46q-63 0 -104.5 -39t-41.5 -110z" /> +<glyph unicode="9" horiz-adv-x="1081" d="M70 889q0 197 124.5 316.5t307.5 119.5q207 0 350 -162t143 -483q0 -344 -152.5 -524.5t-373.5 -180.5q-225 0 -381 156l160 180q33 -39 89 -65.5t112 -26.5q254 0 268 406q-49 -61 -123 -99.5t-137 -38.5q-174 0 -280.5 101.5t-106.5 300.5zM344 889q0 -189 172 -189 q117 0 195 129q-35 270 -203 271q-72 0 -118 -53.5t-46 -157.5z" /> +<glyph unicode=":" horiz-adv-x="614" d="M125 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5zM125 827q0 82 52 136.5t130 54.5t130 -54.5t52 -136.5q0 -80 -52 -134t-130 -54t-130 54t-52 134z" /> +<glyph unicode=";" horiz-adv-x="614" d="M94 -238q111 39 171.5 104.5t60.5 145.5h-17q-76 0 -129 46t-53 124q0 76 54.5 124t133.5 48q100 0 154.5 -74.5t54.5 -209.5q0 -170 -95 -292t-273 -175zM125 827q0 82 52 136.5t130 54.5t130 -54.5t52 -136.5q0 -80 -52 -134t-130 -54t-130 54.5t-52 133.5z" /> +<glyph unicode="<" horiz-adv-x="1081" d="M70 575v209l942 363v-248l-361 -119l-276 -96v-8l276 -96l361 -119v-248z" /> +<glyph unicode="=" horiz-adv-x="1081" d="M70 332v211h942v-211h-942zM70 809v211h942v-211h-942z" /> +<glyph unicode=">" horiz-adv-x="1081" d="M70 213v248l360 119l277 96v8l-277 96l-360 119v248l942 -363v-209z" /> +<glyph unicode="?" horiz-adv-x="948" d="M84 1210q156 186 373 187q182 0 293.5 -88t111.5 -262q0 -70 -31.5 -132.5t-75.5 -110.5t-86 -95t-69 -107.5t-20 -128.5h-265q-14 96 24 183t90 140.5t98 116t46 111.5q0 61 -36.5 95t-100.5 34q-92 0 -186 -94zM266 164q0 82 51.5 136t129 54t130 -54t52.5 -136 q0 -80 -52.5 -134.5t-130 -54.5t-129 54.5t-51.5 134.5z" /> +<glyph unicode="@" horiz-adv-x="1849" d="M100 420q0 420 268.5 685t655.5 265q330 0 527.5 -202.5t197.5 -526.5q0 -262 -143.5 -412.5t-323.5 -150.5q-90 0 -154.5 42t-80.5 113h-5q-43 -59 -112.5 -97t-132.5 -38q-123 0 -197 83t-74 225q0 195 121 348t293 153q106 0 156 -102h4l28 86h187l-94 -451 q-43 -176 94 -176q96 0 170 103.5t74 265.5q0 240 -138.5 397.5t-421.5 157.5q-276 0 -486 -214t-210 -546q0 -289 171 -443.5t427 -154.5q160 0 311 80l66 -164q-182 -98 -401 -98q-156 0 -294.5 48t-247 141t-172 243t-63.5 340zM754 424q0 -137 106 -137q66 0 135 92 l49 276q-31 59 -94 60q-86 0 -141 -94.5t-55 -196.5z" /> +<glyph unicode="A" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="B" horiz-adv-x="1236" d="M156 0v1335h456q494 0 494 -331q0 -96 -57.5 -178.5t-167.5 -110.5v-8q290 -53 290 -312q0 -99 -36 -172.5t-108 -123.5q-144 -99 -376 -99h-495zM459 233h168q250 0 250 183q0 168 -250 168h-168v-351zM459 797h139q213 0 213 164q0 141 -209 141h-143v-305z" /> +<glyph unicode="C" horiz-adv-x="1187" d="M92 659q0 322 184.5 511.5t452.5 189.5q225 0 395 -174l-166 -187q-111 100 -225 101q-143 0 -237.5 -117t-94.5 -313q0 -203 88.5 -318.5t235.5 -115.5q145 0 254 118l166 -182q-168 -197 -424 -197q-272 0 -450.5 180t-178.5 504z" /> +<glyph unicode="D" horiz-adv-x="1282" d="M139 0v1335h379q317 0 493.5 -163.5t176.5 -497.5t-175 -504t-478 -170h-396zM442 244h58q379 0 379 430q0 227 -98.5 322.5t-280.5 95.5h-58v-848z" /> +<glyph unicode="E" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858z" /> +<glyph unicode="F" horiz-adv-x="1071" d="M156 0v1335h843v-254h-540v-309h461v-254h-461v-518h-303z" /> +<glyph unicode="G" horiz-adv-x="1302" d="M92 659q0 322 188.5 511.5t469.5 189.5q242 0 415 -174l-166 -187q-111 100 -245 101q-156 0 -254.5 -116t-98.5 -314q0 -209 95.5 -321.5t281.5 -112.5q90 0 142 40v230h-222v246h490v-615q-80 -70 -199 -116t-250 -46q-283 0 -465 179t-182 505z" /> +<glyph unicode="H" horiz-adv-x="1376" d="M156 0v1335h303v-514h461v514h301v-1335h-301v557h-461v-557h-303z" /> +<glyph unicode="I" horiz-adv-x="614" d="M156 0v1335h303v-1335h-303z" /> +<glyph unicode="J" horiz-adv-x="1038" d="M31 217l205 152q76 -133 186 -133q86 0 126 52t40 181v866h303v-891q0 -207 -108.5 -338t-319.5 -131q-295 0 -432 242z" /> +<glyph unicode="K" horiz-adv-x="1255" d="M156 0v1335h303v-547h6l399 547h330l-403 -532l479 -803h-332l-324 563l-155 -205v-358h-303z" /> +<glyph unicode="L" horiz-adv-x="1056" d="M156 0v1335h303v-1081h526v-254h-829z" /> +<glyph unicode="M" horiz-adv-x="1558" d="M156 0v1335h319l223 -600l80 -233h8l80 233l217 600h320v-1335h-283v489q0 104 39 455h-8l-109 -309l-206 -518h-121l-205 518l-107 309h-8q39 -350 39 -455v-489h-278z" /> +<glyph unicode="N" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-39 383 -39 487v471h287v-1335h-309l-348 666l-131 290h-8q39 -399 38 -483v-473h-288z" /> +<glyph unicode="O" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="P" horiz-adv-x="1239" d="M156 0v1335h487q522 0 522 -430q0 -223 -147.5 -337.5t-374.5 -114.5h-184v-453h-303zM459 692h166q245 0 245 211q0 104 -61 148.5t-184 44.5h-166v-404z" /> +<glyph unicode="Q" horiz-adv-x="1398" d="M86 674q0 322 166 504t440.5 182t440 -182.5t165.5 -503.5q0 -264 -113.5 -441.5t-310.5 -232.5q84 -125 293 -125q80 0 148 25l53 -222q-86 -43 -235 -43q-205 0 -354.5 96.5t-223.5 258.5q-217 45 -343 225t-126 459zM395 674q0 -201 80 -319.5t217 -118.5t217 118.5 t80 319.5q0 199 -80 312.5t-217 113.5t-217 -113.5t-80 -312.5z" /> +<glyph unicode="R" horiz-adv-x="1259" d="M156 0v1335h481q516 0 516 -415q0 -279 -238 -385l302 -535h-338l-256 481h-164v-481h-303zM459 721h153q244 0 244 199q0 94 -60.5 135t-183.5 41h-153v-375z" /> +<glyph unicode="S" horiz-adv-x="1134" d="M70 168l174 207q160 -139 327 -139q186 0 187 129q0 68 -86 112q-23 12 -107 47l-172 74q-117 47 -193.5 138t-76.5 227q0 168 135 282.5t340 114.5q254 0 430 -176l-151 -191q-139 106 -279 107q-78 0 -124 -33t-46 -88q0 -37 27.5 -64.5t55.5 -41t97 -42.5l8 -3 q2 -1 7.5 -3t9.5 -4l170 -69q264 -106 264 -363q0 -174 -136 -294t-366 -120q-286 0 -495 193z" /> +<glyph unicode="T" horiz-adv-x="1136" d="M49 1081v254h1036v-254h-366v-1081h-301v1081h-369z" /> +<glyph unicode="U" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5z" /> +<glyph unicode="V" horiz-adv-x="1136" d="M-16 1335h319l162 -622q18 -66 51 -208.5t55 -219.5h9q23 78 55.5 220t50.5 208l158 622h309l-403 -1335h-363z" /> +<glyph unicode="W" horiz-adv-x="1662" d="M27 1335h309l92 -624q18 -139 55 -422h9q29 164 77 422l144 624h256l145 -624q27 -135 80 -422h8q20 170 53 422l93 624h288l-237 -1335h-379l-131 606q-31 150 -53 309h-9q-43 -258 -53 -309l-127 -606h-373z" /> +<glyph unicode="X" horiz-adv-x="1159" d="M23 0l368 686l-348 649h338l115 -252q18 -35 52 -110.5t46 -104.5h8q49 137 84 215l107 252h321l-346 -663l369 -672h-336l-131 272q-49 96 -101 220h-8q-43 -111 -92 -220l-125 -272h-321z" /> +<glyph unicode="Y" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475z" /> +<glyph unicode="Z" horiz-adv-x="1105" d="M72 0v182l590 899h-535v254h907v-182l-590 -899h594v-254h-966z" /> +<glyph unicode="[" horiz-adv-x="704" d="M178 -311v1761h432v-160h-207v-1442h207v-159h-432z" /> +<glyph unicode="\" horiz-adv-x="694" d="M57 1454h197l414 -1782h-199z" /> +<glyph unicode="]" horiz-adv-x="704" d="M94 -152h209v1442h-209v160h432v-1761h-432v159z" /> +<glyph unicode="^" horiz-adv-x="1081" d="M102 561l318 811h242l317 -811h-248l-94 262l-92 277h-8l-93 -277l-94 -262h-248z" /> +<glyph unicode="_" horiz-adv-x="1024" d="M25 -117h974v-170h-974v170z" /> +<glyph unicode="`" horiz-adv-x="1136" d="M262 1483h291l182 -307h-219z" /> +<glyph unicode="a" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="b" horiz-adv-x="1173" d="M133 0v1436h301v-353l-8 -155q124 112 265 112h3q184 0 292 -140t108 -374q0 -252 -127 -401.5t-301 -149.5q-143 0 -265 131h-8l-24 -106h-236zM434 287q72 -66 162 -66q84 0 136 75t52 224q0 274 -176 275q-90 0 -174 -93v-415z" /> +<glyph unicode="c" horiz-adv-x="956" d="M74 508q0 244 153.5 388t374.5 144q184 0 297 -116l-137 -187q-72 59 -141 60q-109 0 -173.5 -78t-64.5 -211q0 -131 63.5 -210t163.5 -79q90 0 183 74l120 -191q-145 -127 -338 -127q-219 0 -360 142.5t-141 390.5z" /> +<glyph unicode="d" horiz-adv-x="1173" d="M80 508q0 240 126 386t296 146q137 0 250 -106l-13 156v346h301v-1436h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph unicode="e" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5z" /> +<glyph unicode="f" horiz-adv-x="698" d="M49 780v224l135 10v55q0 176 90.5 283.5t284.5 107.5q101 0 203 -37l-55 -221q-57 20 -105 21q-117 0 -117 -146v-61h183v-236h-183v-780h-301v780h-135z" /> +<glyph unicode="g" horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-94 61 -94 172q0 113 115 190v9q-59 41 -98.5 110.5t-39.5 153.5q0 174 122 270t298 96q90 0 158 -24h371v-219h-162q33 -55 33 -133q0 -168 -112 -255t-288 -87q-59 0 -123 20q-37 -31 -37 -76q0 -76 154 -76h164q387 0 387 -258 q0 -160 -154.5 -262t-412.5 -102q-190 0 -308 64.5t-118 193.5zM317 -127q0 -55 60.5 -86t165.5 -31q100 0 166.5 36t66.5 89q0 45 -38 62.5t-117 17.5h-105q-94 0 -143 12q-56 -49 -56 -100zM379 674q0 -82 39 -126t100.5 -44t100 44t38.5 126q0 78 -38.5 121t-100 43 t-100.5 -42t-39 -122z" /> +<glyph unicode="h" horiz-adv-x="1169" d="M133 0v1436h301v-353l-14 -182q156 139 313 139q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301z" /> +<glyph unicode="i" horiz-adv-x="565" d="M109 1323q0 70 49 113t125 43q78 0 126 -43t48 -113t-49.5 -114t-125 -44t-124.5 44t-49 114zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="j" horiz-adv-x="569" d="M-104 -373l53 221q47 -14 80 -14q59 0 82.5 39t23.5 125v1018h301v-1010q0 -407 -360 -407h-2q-106 0 -178 28zM113 1323q0 70 49 113t124.5 43t125 -43t49.5 -113t-49.5 -114t-125 -44t-124.5 44t-49 114z" /> +<glyph unicode="k" horiz-adv-x="1122" d="M133 0v1436h293v-824h8l322 404h327l-356 -418l383 -598h-326l-229 395l-129 -145v-250h-293z" /> +<glyph unicode="l" horiz-adv-x="585" d="M133 315v1121h301v-1133q0 -84 53 -84q20 0 37 4l37 -223q-55 -25 -151 -25q-277 0 -277 340z" /> +<glyph unicode="m" horiz-adv-x="1755" d="M133 0v1016h246l20 -131h9q155 155 305 155h2q201 0 280 -170q80 82 154 126t166 44q317 0 317 -409v-631h-301v592q0 109 -29.5 150.5t-95.5 41.5q-76 0 -174 -98v-686h-301v592q0 109 -29.5 150.5t-95.5 41.5q-76 0 -172 -98v-686h-301z" /> +<glyph unicode="n" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q161 153 323 153h2q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301z" /> +<glyph unicode="o" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="p" horiz-adv-x="1173" d="M133 -377v1393h246l20 -101h9q139 125 288 125q184 0 291 -140t107 -376q0 -250 -127 -399.5t-301 -149.5q-129 1 -242 107l10 -162v-297h-301zM434 287q72 -66 162 -66q84 0 136 75t52 224q0 274 -176 275q-88 0 -174 -93v-415z" /> +<glyph unicode="q" horiz-adv-x="1171" d="M80 508q0 240 126 386t296 146q154 0 270 -125h8l25 101h235v-1393h-301v309l13 156q-117 -113 -256 -113q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph unicode="r" horiz-adv-x="815" d="M133 0v1016h246l20 -178h9q53 100 129.5 151t158.5 51q74 0 121 -20l-49 -260q-59 16 -111 16q-63 0 -124.5 -45t-98.5 -141v-590h-301z" /> +<glyph unicode="s" horiz-adv-x="907" d="M43 117l135 188q141 -106 262 -106q129 0 129 86q0 10 -3 20t-11 19.5t-15.5 16.5t-22.5 15.5t-25.5 14.5t-30 14t-30.5 12t-33.5 13.5t-35.5 13.5q-268 102 -268 299q0 141 106.5 229t282.5 88q184 0 359 -129l-135 -180q-119 86 -215 86q-115 0 -115 -80q0 -14 5 -25.5 t17.5 -22.5t22.5 -18t32.5 -16.5t35 -14.5t43 -16.5t42.5 -15.5q125 -45 200 -112.5t75 -192.5q0 -143 -109.5 -235.5t-308.5 -92.5q-98 0 -204.5 39.5t-184.5 102.5z" /> +<glyph unicode="t" horiz-adv-x="784" d="M35 780v224l155 12l35 270h250v-270h244v-236h-244v-407q0 -162 131 -162q43 0 96 20l48 -219q-119 -37 -226 -37q-350 1 -350 394v411h-139z" /> +<glyph unicode="u" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410z" /> +<glyph unicode="v" horiz-adv-x="1071" d="M25 1016h303l131 -479q27 -100 80 -314h8q35 154 78 314l133 479h289l-332 -1016h-348z" /> +<glyph unicode="w" horiz-adv-x="1589" d="M49 1016h299l98 -471q8 -51 22.5 -151.5t23.5 -149.5h8q41 231 59 301l113 471h260l115 -471q18 -74 63 -301h8q8 51 22.5 150.5t24.5 150.5l97 471h278l-244 -1016h-352l-92 406q-23 102 -55 296h-9q-45 -266 -51 -296l-90 -406h-344z" /> +<glyph unicode="x" horiz-adv-x="1052" d="M29 0l311 528l-293 488h324l90 -164q12 -29 86 -174h8q12 33 37.5 95.5t32.5 78.5l69 164h312l-295 -522l313 -494h-324l-98 168q-16 29 -48 88t-48 88h-8q-10 -25 -37 -84t-41 -92l-80 -168h-311z" /> +<glyph unicode="y" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54z" /> +<glyph unicode="z" horiz-adv-x="942" d="M78 0v162l426 618h-379v236h754v-160l-426 -620h440v-236h-815z" /> +<glyph unicode="{" horiz-adv-x="704" d="M63 481v176q92 2 134.5 46.5t42.5 105.5t-10.5 168.5t-10.5 181.5q0 160 61.5 225.5t200.5 65.5h129v-160h-39q-63 0 -85.5 -29.5t-22.5 -113.5q0 -53 4 -163t4 -171q0 -113 -36 -167t-116 -73v-8q80 -18 116 -72.5t36 -166.5q0 -63 -4 -172t-4 -162q0 -84 22.5 -114 t85.5 -30h39v-159h-129q-139 0 -200.5 64.5t-61.5 226.5q0 74 10.5 180t10.5 170q0 61 -42 105t-135 46z" /> +<glyph unicode="|" horiz-adv-x="548" d="M176 -512v2048h197v-2048h-197z" /> +<glyph unicode="}" horiz-adv-x="704" d="M94 -152h39q63 0 86 30t23 114q0 53 -4.5 161.5t-4.5 172.5q0 113 36 167t116 72v8q-80 18 -116 72.5t-36 167.5q0 61 4.5 171t4.5 163q0 84 -22.5 113.5t-86.5 29.5h-39v160h129q139 0 200.5 -65.5t61.5 -225.5q0 -74 -10 -181.5t-10 -168.5t42 -105.5t134 -46.5v-176 q-92 -2 -134 -46t-42 -105q0 -63 10 -170t10 -180q0 -162 -61.5 -226.5t-200.5 -64.5h-129v159z" /> +<glyph unicode="~" horiz-adv-x="1081" d="M59 649q137 211 308 211q72 0 136 -39t117.5 -77.5t98.5 -38.5q80 0 147 118l156 -121q-137 -211 -307 -210q-72 0 -136.5 38.5t-117.5 77.5t-99 39q-79 0 -147 -119z" /> +<glyph unicode="¡" horiz-adv-x="696" d="M166 852q0 80 52 134t130 54t130 -54t52 -134q0 -82 -52 -136t-130 -54t-130 54t-52 136zM197 -356l10 272l43 627h196l43 -627l11 -272h-303z" /> +<glyph unicode="¢" horiz-adv-x="1081" d="M123 629q0 211 122 346t318 168v198h166v-190q158 -14 254 -115l-137 -184q-61 49 -117 55v-557q74 13 148 72l120 -191q-117 -100 -268 -120v-195h-166v195q-203 27 -321.5 163t-118.5 355zM416 629q0 -193 147 -256v512q-147 -66 -147 -256z" /> +<glyph unicode="£" horiz-adv-x="1081" d="M98 0v186q96 43 156.5 126t60.5 188q0 18 -4 55h-205v176l140 10h12q-33 98 -33 164q0 190 123 305t316 115q211 0 354 -166l-164 -164q-72 86 -162 86q-84 0 -131 -48t-47 -144q0 -57 23 -148h303v-186h-265q4 -37 5 -57q-1 -132 -93 -236v-8h531v-254h-920z" /> +<glyph unicode="¤" horiz-adv-x="1081" d="M41 322l125 127q-70 94 -70 227q0 129 68 223l-123 127l149 152l142 -144q98 51 209 51q106 0 209 -51l141 144l149 -152l-125 -127q70 -92 70 -223q0 -127 -70 -227l125 -127l-149 -152l-143 145q-96 -49 -207 -49t-207 49l-144 -145zM365 676q0 -90 50 -145.5 t125.5 -55.5t126 55.5t50.5 145.5t-50.5 145.5t-126 55.5t-125.5 -55.5t-50 -145.5z" /> +<glyph unicode="¥" horiz-adv-x="1081" d="M25 1300h309l104 -272q66 -180 103 -268h8q14 35 48 127t54 141l103 272h303l-301 -600h250v-143h-316v-113h316v-143h-316v-301h-301v301h-313v143h313v113h-313v143h250z" /> +<glyph unicode="¦" horiz-adv-x="548" d="M176 418h197v-930h-197v930zM176 639v897h197v-897h-197z" /> +<glyph unicode="§" horiz-adv-x="1081" d="M76 668q0 76 44 145.5t120 116.5q-59 70 -60 170q0 141 97.5 227t267.5 86q198 0 368 -133l-137 -188q-113 98 -215 98q-111 0 -110 -80q0 -39 57 -74t139 -69.5t163 -79.5t138.5 -124t57.5 -181q0 -170 -168 -273q47 -72 47 -157q0 -143 -103.5 -233.5t-289.5 -90.5 q-117 0 -223.5 44t-174.5 128l174 154q100 -104 223 -104.5t123 87.5q0 37 -39.5 69t-99 54.5t-130.5 58t-130 75.5t-99 112t-40 162zM330 690q0 -45 35.5 -83t77.5 -59.5t120 -56t119 -55.5q70 43 70 121q0 37 -19.5 66.5t-59.5 54t-78 43t-97.5 44.5t-96.5 44 q-71 -47 -71 -119z" /> +<glyph unicode="¨" horiz-adv-x="1136" d="M223 1312.5q0 61.5 40 101.5t102 40q63 0 103 -40t40 -101.5t-40 -102.5t-103 -41q-61 0 -101.5 41t-40.5 102.5zM629 1313q0 59 40 100t103.5 41t103 -41t39.5 -100q0 -61 -39.5 -102.5t-103 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="©" horiz-adv-x="1536" d="M92 665.5q0 307.5 196.5 491.5t479.5 184t478.5 -184t195.5 -491q0 -309 -195.5 -496.5t-478.5 -187.5t-479.5 188t-196.5 495.5zM231 665.5q0 -247.5 154 -403.5t383 -156t383 156t154 403.5t-154 400.5t-383 153t-383 -153t-154 -400.5zM397 664q0 174 117 283.5 t279 109.5q150 0 270 -121l-113 -125q-66 70 -139 70q-94 0 -146.5 -61.5t-52.5 -155.5q0 -104 51.5 -166t137.5 -62q76 0 164 70l98 -139q-135 -106 -270 -107q-174 0 -285 110t-111 294z" /> +<glyph unicode="ª" horiz-adv-x="735" d="M59 721q0 109 91.5 167t291.5 79q-10 88 -100 88q-76 0 -184 -62l-76 142q156 88 297 88q133 0 204.5 -76t71.5 -227v-388h-170l-20 68h-8q-85 -84 -191 -84q-92 0 -149.5 59.5t-57.5 145.5zM262 737q0 -59 76 -59q49 0 104 51v115q-180 -23 -180 -107z" /> +<glyph unicode="«" horiz-adv-x="983" d="M100 410v213l275 295l112 -91l-227 -311l227 -311l-112 -90zM485 410v213l277 295l110 -91l-227 -311l227 -311l-110 -90z" /> +<glyph unicode="¬" horiz-adv-x="1081" d="M70 569v213h942v-589h-221v376h-721z" /> +<glyph unicode="­" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> +<glyph unicode="®" horiz-adv-x="946" d="M66 1050.5q0 178.5 117.5 296t289.5 117.5q170 0 288 -117.5t118 -296t-118 -296t-288 -117.5q-172 0 -289.5 117.5t-117.5 296zM178 1050.5q0 -141.5 82 -227.5t213 -86t212 86t81 227.5t-81 227.5t-212 86t-213 -86t-82 -227.5zM307 852v403h182q74 0 120 -34.5 t46 -100.5q0 -76 -71 -110l84 -158h-123l-62 123h-59v-123h-117zM424 1057h43q29 0 45 16.5t16 40.5q0 53 -61 53h-43v-110z" /> +<glyph unicode="¯" horiz-adv-x="1136" d="M287 1212v191h565v-191h-565z" /> +<glyph unicode="°" horiz-adv-x="747" d="M80 1110q0 127 85 211t210 84t211 -84t86 -211t-86 -211t-211 -84t-210 84t-85 211zM238 1110q0 -68 39 -110t98 -42q61 0 99 42t38 110q0 66 -38 108t-99 42q-59 0 -98 -42t-39 -108z" /> +<glyph unicode="±" horiz-adv-x="1081" d="M70 0v213h942v-213h-942zM70 602v213h360v344h221v-344h361v-213h-361v-278h-221v278h-360z" /> +<glyph unicode="²" horiz-adv-x="770" d="M55 1561q123 164 305 163q135 0 215 -71.5t80 -198.5q0 -61 -33.5 -129t-70.5 -114t-109 -126h242v-184h-592v119q180 147 265 237.5t85 159.5q0 59 -30.5 92t-85.5 33q-72 0 -146 -96z" /> +<glyph unicode="³" horiz-adv-x="770" d="M55 1038l133 105q72 -98 170 -99q49 0 82 26t33 71q0 104 -190 104v127q162 0 161 98q0 39 -26.5 62.5t-73.5 23.5q-66 0 -131 -79l-125 110q68 72 135.5 104.5t159.5 32.5q115 0 197 -61t82 -162q0 -117 -117 -184q145 -57 145 -193q0 -109 -91 -178t-218 -69 q-217 -1 -326 161z" /> +<glyph unicode="´" horiz-adv-x="1136" d="M401 1176l183 307h290l-253 -307h-220z" /> +<glyph unicode="µ" horiz-adv-x="1173" d="M133 -410v1426h301v-592q0 -106 30 -149.5t95 -43.5q55 0 96 26t86 87v672h301v-1016h-245l-23 141h-8q-78 -150 -223 -149q-84 0 -127 45l18 -184v-263h-301z" /> +<glyph unicode="¶" horiz-adv-x="1302" d="M80 879q0 242 142.5 349t377.5 107h90v-932h-82q-229 0 -378.5 125t-149.5 351zM805 -164v1499h301v-1499h-301z" /> +<glyph unicode="·" horiz-adv-x="614" d="M125 655q0 82 52 136.5t130 54.5t130 -54.5t52 -136.5q0 -80 -52 -134t-130 -54t-130 54t-52 134z" /> +<glyph unicode="¸" horiz-adv-x="1136" d="M360 -332q170 18 170 90q1 57 -118 86l82 164h174l-41 -96q121 -39 121 -152q0 -100 -102.5 -152t-262.5 -61z" /> +<glyph unicode="¹" horiz-adv-x="770" d="M156 1477v135q131 18 229 88h176v-799h-223v576h-182z" /> +<glyph unicode="º" horiz-adv-x="763" d="M49 868q0 162 97.5 258.5t234.5 96.5t234.5 -96.5t97.5 -258.5q0 -160 -97.5 -256t-234.5 -96t-234.5 96.5t-97.5 255.5zM266 868q0 -184 115 -184q117 0 117 184q0 186 -117 187q-115 0 -115 -187z" /> +<glyph unicode="»" horiz-adv-x="983" d="M111 205l227 311l-227 311l112 91l275 -295v-213l-275 -295zM496 205l227 311l-227 311l112 91l277 -295v-213l-277 -295z" /> +<glyph unicode="¼" horiz-adv-x="1656" d="M94 1110v137q131 18 230 88h176v-798h-224v573h-182zM381 -25l721 1385h172l-719 -1385h-174zM956 178v111l289 510h275v-477h118v-144h-118v-178h-195v178h-369zM1161 322h164v84l10 239h-8l-82 -158z" /> +<glyph unicode="½" horiz-adv-x="1732" d="M94 1110v137q131 18 230 88h176v-798h-224v573h-182zM348 -25l721 1385h174l-721 -1385h-174zM1016 659q123 164 305 164q135 0 215 -71.5t80 -198.5q0 -61 -34 -129t-69.5 -113t-107.5 -127h240v-184h-592v119q180 147 265 237t85 160q0 59 -31 92t-86 33 q-72 0 -145 -96z" /> +<glyph unicode="¾" horiz-adv-x="1675" d="M49 674l133 104q72 -98 168 -98q51 0 84 25.5t33 70.5q0 104 -191 105v127q162 0 162 98q0 39 -27.5 62.5t-72.5 23.5q-65 0 -131 -80l-125 111q68 72 135.5 104.5t159.5 32.5q115 0 195.5 -61.5t80.5 -161.5q0 -115 -114 -185q63 -27 104 -77t41 -117q0 -109 -91 -177.5 t-218 -68.5q-217 0 -326 162zM426 -25l721 1385h172l-719 -1385h-174zM975 178v111l289 510h274v-477h119v-144h-119v-178h-197v178h-366zM1178 322h163v84l13 239h-8l-82 -158z" /> +<glyph unicode="¿" horiz-adv-x="948" d="M86 -29q0 70 32 132.5t76 109.5t87 95t69.5 107.5t20.5 127.5h262q14 -96 -24 -183.5t-90 -140.5t-98 -115.5t-46 -111.5q0 -61 38 -95t99 -34q92 0 186 94l166 -152q-156 -186 -372 -186q-182 0 -294 88t-112 264zM319 852q0 80 52.5 134t130.5 54t130 -54t52 -134 q0 -82 -52 -136t-130 -54t-130.5 54t-52.5 136z" /> +<glyph unicode="À" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM246 1683h319l166 -245h-239zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="Á" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM426 1438l164 245h319l-243 -245h-240zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="Â" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM236 1438l196 245h293l197 -245h-230l-110 125h-9l-108 -125h-229zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="Ã" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM229 1440q14 135 75 206.5t145 71.5q61 0 141 -46t104 -46q57 0 80 92h154q-16 -135 -76.5 -206.5t-144.5 -71.5q-59 0 -139.5 46t-104.5 46q-59 0 -80 -92h-154zM436 553h287l-33 123q-20 72 -56 220 t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="Ä" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM231 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430zM639 1577q0 61 40 102t101 41 q63 0 103.5 -41t40.5 -102t-40.5 -102t-103.5 -41q-61 0 -101 41t-40 102z" /> +<glyph unicode="Å" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM348 1628q0 90 63.5 145.5t166 55.5t167 -55.5t64.5 -145.5q0 -92 -63.5 -146.5t-168 -54.5t-167 54.5t-62.5 146.5zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430zM496 1628 q0 -41 23.5 -64.5t58.5 -23.5q37 0 60.5 23.5t23.5 64.5q0 39 -23.5 63.5t-60.5 24.5q-35 0 -58.5 -24.5t-23.5 -63.5z" /> +<glyph unicode="Æ" horiz-adv-x="1728" d="M-29 0l633 1335h998v-254h-510v-268h430v-252h-430v-307h530v-254h-834v305h-362l-139 -305h-316zM532 539h256v569h-8q-135 -322 -162 -379z" /> +<glyph unicode="Ç" horiz-adv-x="1187" d="M92 659q0 322 184.5 511.5t452.5 189.5q225 0 395 -174l-166 -187q-111 100 -225 101q-143 0 -237.5 -117t-94.5 -313q0 -203 88.5 -318.5t235.5 -115.5q145 -1 254 118l166 -182q-141 -166 -346 -190l-29 -70q119 -39 119 -152q0 -100 -102.5 -152t-260.5 -61l-22 121 q168 18 168 90q0 57 -119 86l70 138q-236 33 -383.5 209t-147.5 468z" /> +<glyph unicode="È" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM258 1683h320l165 -245h-241z" /> +<glyph unicode="É" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM436 1438l166 245h320l-246 -245h-240z" /> +<glyph unicode="Ê" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM246 1438l196 245h293l197 -245h-230l-108 125h-8l-111 -125h-229z" /> +<glyph unicode="Ë" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM244 1577q0 61 40 102t103.5 41t103 -41t39.5 -102t-39.5 -102t-103 -41t-103.5 41t-40 102zM649 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102z" /> +<glyph unicode="Ì" horiz-adv-x="614" d="M-25 1683h320l166 -245h-242zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="Í" horiz-adv-x="614" d="M154 1438l165 245h320l-246 -245h-239zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="Î" horiz-adv-x="614" d="M-37 1438l197 245h295l196 -245h-231l-109 125h-8l-108 -125h-232zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="Ï" horiz-adv-x="614" d="M-39 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102zM156 0v1335h303v-1335h-303zM367 1577q0 61 39.5 102t103 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103 41t-39.5 102z" /> +<glyph unicode="Ð" horiz-adv-x="1343" d="M49 616v136l154 10v573h377q317 0 493 -163.5t176 -497.5t-175 -504t-478 -170h-393v616h-154zM504 244h57q379 0 379 430q0 227 -98.5 322.5t-280.5 95.5h-57v-330h258v-146h-258v-372z" /> +<glyph unicode="Ñ" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-39 383 -39 487v471h287v-1335h-309l-348 666l-131 290h-8q39 -399 38 -483v-473h-288zM334 1440q14 135 74.5 206.5t144.5 71.5q59 0 139 -46t105 -46q59 0 80 92h153q-14 -135 -74.5 -206.5t-144.5 -71.5q-61 0 -141 46t-105 46 q-57 0 -80 -92h-151z" /> +<glyph unicode="Ò" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM367 1683h319l166 -245h-240zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5 q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="Ó" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM547 1438 l164 245h319l-244 -245h-239z" /> +<glyph unicode="Ô" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM356 1438l197 245h293l196 -245h-229l-111 125h-8l-108 -125h-230zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5 q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="Õ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM350 1440q16 135 75.5 206.5t143.5 71.5q61 0 141.5 -46t104.5 -46q59 0 80 92h154q-16 -135 -77 -206.5t-145 -71.5q-59 0 -139 46t-104 46 q-59 0 -80 -92h-154zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="Ö" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM352 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102zM401 674q0 -201 81 -319.5t216 -118.5 q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM760 1577q0 61 40 102t101 41q63 0 103 -41t40 -102t-40 -102t-103 -41q-61 0 -101 41t-40 102z" /> +<glyph unicode="×" horiz-adv-x="1081" d="M98 381l291 293l-291 295l150 151l293 -295l293 295l149 -151l-291 -295l291 -293l-149 -152l-293 295l-293 -295z" /> +<glyph unicode="Ø" horiz-adv-x="1398" d="M80 35l141 176q-129 184 -129 463q0 322 166 504t440 182q211 0 361 -109l135 168l156 -121l-156 -194q111 -170 111 -430q0 -324 -166 -511.5t-441 -187.5q-193 0 -336 97l-124 -156zM401 674q0 -109 27 -205l451 559q-72 72 -181 72q-135 0 -216 -114t-81 -312z M539 291q72 -55 159 -55q137 0 217 118.5t80 319.5q0 86 -16 164z" /> +<glyph unicode="Ù" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM348 1683h320l163 -245h-239z" /> +<glyph unicode="Ú" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM526 1438l166 245h320l-246 -245h-240z" /> +<glyph unicode="Û" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM336 1438l196 245h293l197 -245h-229l-109 125h-8l-111 -125h-229z" /> +<glyph unicode="Ü" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM334 1577q0 61 40 102t103 41q61 0 101 -41t40 -102t-40 -102t-101 -41q-63 0 -103 41t-40 102zM739 1577q0 61 40 102 t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102z" /> +<glyph unicode="Ý" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475zM383 1438l166 245h319l-245 -245h-240z" /> +<glyph unicode="Þ" horiz-adv-x="1269" d="M164 0v1335h301v-202h184q524 0 525 -428q0 -225 -147.5 -339t-377.5 -114h-184v-252h-301zM465 492h168q244 0 244 213q0 100 -60.5 144t-183.5 44h-168v-401z" /> +<glyph unicode="ß" horiz-adv-x="1294" d="M133 0v997q0 207 124 333t361 126q199 0 309.5 -100.5t110.5 -241.5q0 -84 -40 -151.5t-79.5 -117.5t-39.5 -91q0 -31 26.5 -57.5t66.5 -47t87 -50.5t87 -63.5t66.5 -92t26.5 -132.5q0 -145 -99.5 -240.5t-277.5 -95.5q-152 0 -309 93l104 204q100 -74 195 -73 q51 0 82 27.5t31 70.5t-37 77t-90.5 61.5t-106.5 60t-90 89t-37 132.5q0 80 73 184.5t73 177.5q0 61 -35 100.5t-97 39.5q-92 0 -140 -68t-48 -188v-963h-297z" /> +<glyph unicode="à" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM268 1483h293l180 -307h-219zM383 305q0 -96 117 -96q82 0 168 86v178 q-285 -39 -285 -168z" /> +<glyph unicode="á" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM408 1176l182 307 h291l-254 -307h-219z" /> +<glyph unicode="â" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM258 1176l197 307h239l197 -307h-203l-108 161h-9l-110 -161h-203zM383 305 q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="ã" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM236 1178q14 135 71.5 205.5t138.5 70.5q59 0 139.5 -45t104.5 -45q49 0 70 90 h153q-14 -135 -70.5 -205.5t-140.5 -70.5q-59 0 -139 46t-102 46q-51 0 -72 -92h-153zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="ä" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM229 1312.5q0 61.5 40 101.5t104 40q61 0 101 -40t40 -101.5t-40 -102.5 t-101 -41q-63 0 -103.5 41t-40.5 102.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM635 1313q0 59 41 100t102.5 41t102.5 -41t41 -100q0 -61 -40 -102.5t-103.5 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="å" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM344 1331q0 94 63.5 151.5t167.5 57.5q102 0 166 -57.5t64 -151.5t-64 -151.5 t-166 -57.5q-104 0 -167.5 57.5t-63.5 151.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM492 1331q0 -43 23 -69.5t60 -26.5q35 0 58.5 26.5t23.5 69.5t-23.5 69.5t-58.5 26.5q-37 0 -60 -26.5t-23 -69.5z" /> +<glyph unicode="æ" horiz-adv-x="1605" d="M96 281q0 164 134.5 254t431.5 120q-10 145 -158 146q-108 0 -266 -92l-107 198q221 133 416 133q188 0 282 -153q135 154 301 153q195 0 299.5 -138t104.5 -355q0 -78 -12 -127h-586q16 -102 81.5 -155.5t162.5 -53.5q88 0 215 74l102 -195q-168 -115 -358 -115 q-207 0 -351 158q-197 -158 -391 -158q-135 0 -218 87.5t-83 218.5zM383 305q0 -96 117 -96q100 0 190 86q-23 63 -28 135l-3 43q-276 -39 -276 -168zM936 604h342q0 207 -158 207q-74 0 -123 -52.5t-61 -154.5z" /> +<glyph unicode="ç" horiz-adv-x="956" d="M74 508q0 244 153.5 388t374.5 144q184 0 297 -116l-137 -187q-72 59 -141 60q-109 0 -173.5 -78t-64.5 -211q0 -131 63.5 -210t163.5 -79q90 0 183 74l120 -191q-102 -91 -247 -118l-31 -72q119 -39 119 -152q0 -100 -102.5 -152t-260.5 -61l-22 121q168 18 168 90 q0 57 -119 86l69 138q-184 29 -298.5 168t-114.5 358z" /> +<glyph unicode="è" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM248 1483h291l182 -307h-221zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5 t-68.5 -148.5z" /> +<glyph unicode="é" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM385 1176l182 307h291 l-254 -307h-219z" /> +<glyph unicode="ê" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM238 1176l194 307h240l196 -307h-202l-109 161h-8l-109 -161h-202zM362 612h367 q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5z" /> +<glyph unicode="ë" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM207 1313q0 59 40 100t103.5 41t103.5 -41t40 -100q0 -61 -40 -102.5t-103.5 -41.5 t-103.5 41t-40 103zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM612 1313q0 59 40 100t103.5 41t103.5 -41t40 -100q0 -61 -40 -102.5t-103.5 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="ì" horiz-adv-x="565" d="M-23 1483h291l183 -307h-220zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="í" horiz-adv-x="565" d="M117 1176l180 307h291l-252 -307h-219zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="î" horiz-adv-x="565" d="M-33 1176l197 307h239l195 -307h-203l-108 161h-8l-109 -161h-203zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="ï" horiz-adv-x="565" d="M-63 1313q0 59 39.5 100t103 41t103.5 -41t40 -100q0 -61 -40 -102.5t-103.5 -41.5t-103 41t-39.5 103zM133 0v1016h301v-1016h-301zM342 1313q0 59 40 100t103.5 41t103.5 -41t40 -100q0 -61 -40 -102.5t-103.5 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="ð" horiz-adv-x="1146" d="M86 467q0 211 124 338t292 127q137 0 217 -86q-53 158 -174 272l-291 -145l-78 133l238 119q-72 51 -185 108l131 183q158 -80 283 -175l293 148l78 -133l-246 -125q276 -281 276 -686q0 -252 -131 -411t-354 -159q-197 0 -335 136.5t-138 355.5zM360 467 q0 -117 60.5 -182.5t148.5 -65.5q90 0 142.5 78t52.5 231q0 61 -2 93q-80 88 -199 88q-92 0 -147.5 -61.5t-55.5 -180.5z" /> +<glyph unicode="ñ" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q162 154 325 153q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM291 1178q14 135 71.5 205.5t141.5 70.5q61 0 139 -45t102 -45q49 0 72 90h154q-16 -135 -72.5 -205.5t-140.5 -70.5 q-61 0 -139 46t-103 46q-51 0 -72 -92h-153z" /> +<glyph unicode="ò" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM262 1483h291l182 -307h-219zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="ó" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212zM401 1176l183 307h290l-253 -307 h-220z" /> +<glyph unicode="ô" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM252 1176l197 307h239l197 -307h-203l-109 161h-8l-110 -161h-203zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212 t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="õ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM229 1178q14 135 71.5 205.5t139.5 70.5q59 0 139 -45t105 -45q49 0 70 90h153q-14 -135 -70.5 -205.5t-140.5 -70.5q-61 0 -139 46t-102 46 q-51 0 -72 -92h-154zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="ö" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM223 1312.5q0 61.5 40 101.5t102 40q63 0 103 -40t40 -101.5t-40 -102.5t-103 -41q-61 0 -101.5 41t-40.5 102.5zM383 508q0 -135 47 -212 t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212zM629 1313q0 59 40 100t103.5 41t103 -41t39.5 -100q0 -61 -39.5 -102.5t-103 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="÷" horiz-adv-x="1081" d="M70 569v213h942v-213h-942zM375 307.5q0 69.5 47 113.5t118.5 44t119 -44t47.5 -113.5t-47.5 -113.5t-119 -44t-118.5 44t-47 113.5zM375 1044.5q0 69.5 47 113.5t118.5 44t119 -44t47.5 -113.5t-47.5 -113.5t-119 -44t-118.5 44t-47 113.5z" /> +<glyph unicode="ø" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q145 0 271 -79l90 110l112 -88l-96 -119q117 -147 117 -356q0 -244 -145.5 -388.5t-348.5 -144.5q-152 0 -274 82l-88 -108l-113 86l96 119q-117 143 -116 354zM365 524q0 -82 14 -137l305 381q-45 39 -115 39q-94 0 -149 -78t-55 -205 zM451 250q47 -41 118 -41q92 0 147.5 78t55.5 205q0 84 -14 139z" /> +<glyph unicode="ù" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM274 1483h291l183 -307h-220z" /> +<glyph unicode="ú" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM414 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="û" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM264 1176l197 307h239l197 -307h-203l-108 161h-8l-111 -161h-203z" /> +<glyph unicode="ü" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM236 1312.5q0 61.5 39.5 101.5t101.5 40q63 0 103 -40t40 -101.5t-40 -102.5t-103 -41q-61 0 -101 41t-40 102.5zM641 1313 q0 59 40 100t103.5 41t103.5 -41t40 -100q0 -61 -40 -102.5t-103.5 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="ý" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54zM379 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="þ" horiz-adv-x="1173" d="M133 -377v1813h301v-353l-8 -143q117 100 254 100q190 0 302 -140t112 -376q0 -250 -127 -399.5t-301 -149.5q-131 0 -240 97l8 -152v-297h-301zM434 287q72 -66 162 -66q84 0 136 75t52 224q0 274 -176 275q-88 0 -174 -93v-415z" /> +<glyph unicode="ÿ" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54zM201 1313q0 59 41 100t102.5 41t102 -41t40.5 -100q0 -61 -39.5 -102.5t-103 -41.5t-103.5 41 t-40 103zM606 1313q0 59 41 100t102.5 41t102.5 -41t41 -100q0 -61 -40 -102.5t-103.5 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="Ā" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM289 1475v190h579v-190h-579zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ā" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM293 1212v191h565v-191h-565zM383 305q0 -96 117 -96q82 0 168 86v178 q-285 -39 -285 -168z" /> +<glyph unicode="Ă" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM299 1683h164q23 -94 115 -94q93 0 116 94h164q-29 -246 -280 -245q-129 0 -199 65.5t-80 179.5zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ă" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM291 1460h168q14 -119 116 -119q98 0 117 119h168q-4 -121 -76.5 -202.5 t-208 -81.5t-208 81.5t-76.5 202.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ą" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335q-82 -8 -134.5 -63.5t-52.5 -120.5q0 -37 22.5 -57.5t57.5 -20.5q39 0 80 29l70 -152q-94 -72 -213 -72q-102 0 -169 51.5t-67 141.5q0 86 52.5 156.5t113.5 107.5h-80l-82 317h-409l-82 -317h-307zM436 553h287l-33 123q-20 72 -56 220 t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ą" horiz-adv-x="1093" d="M96 281q0 162 136.5 252t435.5 120q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582q-92 -27 -136.5 -75t-44.5 -99q0 -39 26 -58.5t60 -19.5q37 0 74 25l62 -135q-84 -68 -207 -68q-94 0 -155.5 49t-61.5 137q0 80 44 142.5t97 97.5 l-27 108h-6q-147 -129 -297 -129q-135 0 -218 87.5t-83 218.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ć" horiz-adv-x="1187" d="M92 659q0 322 184.5 511.5t452.5 189.5q225 0 395 -174l-166 -187q-111 100 -225 101q-143 0 -237.5 -117t-94.5 -313q0 -203 88.5 -318.5t235.5 -115.5q145 0 254 118l166 -182q-168 -197 -424 -197q-272 0 -450.5 180t-178.5 504zM549 1438l164 245h319l-244 -245h-239 z" /> +<glyph unicode="ć" horiz-adv-x="956" d="M74 508q0 244 153.5 388t374.5 144q184 0 297 -116l-137 -187q-72 59 -141 60q-109 0 -173.5 -78t-64.5 -211q0 -131 63.5 -210t163.5 -79q90 0 183 74l120 -191q-145 -127 -338 -127q-219 0 -360 142.5t-141 390.5zM428 1176l180 307h293l-254 -307h-219z" /> +<glyph unicode="Ĉ" horiz-adv-x="1187" d="M92 659q0 322 184.5 511.5t452.5 189.5q225 0 395 -174l-166 -187q-111 100 -225 101q-143 0 -237.5 -117t-94.5 -313q0 -203 88.5 -318.5t235.5 -115.5q145 0 254 118l166 -182q-168 -197 -424 -197q-272 0 -450.5 180t-178.5 504zM358 1438l197 245h293l196 -245h-229 l-110 125h-9l-108 -125h-230z" /> +<glyph unicode="ĉ" horiz-adv-x="956" d="M74 508q0 244 153.5 388t374.5 144q184 0 297 -116l-137 -187q-72 59 -141 60q-109 0 -173.5 -78t-64.5 -211q0 -131 63.5 -210t163.5 -79q90 0 183 74l120 -191q-145 -127 -338 -127q-219 0 -360 142.5t-141 390.5zM279 1176l196 307h240l196 -307h-202l-111 161h-8 l-109 -161h-202z" /> +<glyph unicode="Ċ" horiz-adv-x="1187" d="M92 659q0 322 184.5 511.5t452.5 189.5q225 0 395 -174l-166 -187q-111 100 -225 101q-143 0 -237.5 -117t-94.5 -313q0 -203 88.5 -318.5t235.5 -115.5q145 0 254 118l166 -182q-168 -197 -424 -197q-272 0 -450.5 180t-178.5 504zM526 1593.5q0 69.5 49.5 113.5t125 44 t124.5 -44t49 -113.5t-49 -113.5t-124.5 -44t-125 44t-49.5 113.5z" /> +<glyph unicode="ċ" horiz-adv-x="956" d="M74 508q0 244 153.5 388t374.5 144q184 0 297 -116l-137 -187q-72 59 -141 60q-109 0 -173.5 -78t-64.5 -211q0 -131 63.5 -210t163.5 -79q90 0 183 74l120 -191q-145 -127 -338 -127q-219 0 -360 142.5t-141 390.5zM428 1323q0 70 47 114t119 44q74 0 121 -44t47 -114 t-47 -114t-121 -44q-72 0 -119 44t-47 114z" /> +<glyph unicode="Č" horiz-adv-x="1187" d="M92 659q0 322 184.5 511.5t452.5 189.5q225 0 395 -174l-166 -187q-111 100 -225 101q-143 0 -237.5 -117t-94.5 -313q0 -203 88.5 -318.5t235.5 -115.5q145 0 254 118l166 -182q-168 -197 -424 -197q-272 0 -450.5 180t-178.5 504zM358 1683h230l108 -124h9l110 124h229 l-196 -245h-293z" /> +<glyph unicode="č" horiz-adv-x="956" d="M74 508q0 244 153.5 388t374.5 144q184 0 297 -116l-137 -187q-72 59 -141 60q-109 0 -173.5 -78t-64.5 -211q0 -131 63.5 -210t163.5 -79q90 0 183 74l120 -191q-145 -127 -338 -127q-219 0 -360 142.5t-141 390.5zM279 1483h202l109 -162h8l111 162h202l-196 -307h-240 z" /> +<glyph unicode="Ď" horiz-adv-x="1282" d="M139 0v1335h379q317 0 493.5 -163.5t176.5 -497.5t-175 -504t-478 -170h-396zM291 1683h229l111 -124h8l109 124h229l-197 -245h-293zM442 244h58q379 0 379 430q0 227 -98.5 322.5t-280.5 95.5h-58v-848z" /> +<glyph unicode="ď" horiz-adv-x="1257" d="M80 508q0 240 126 386t296 146q137 0 250 -106l-13 156v346h301v-1436h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM1118 1577h195l-4 -141l-49 -314h-130z " /> +<glyph unicode="Đ" horiz-adv-x="1343" d="M49 616v136l154 10v573h377q317 0 493 -163.5t176 -497.5t-175 -504t-478 -170h-393v616h-154zM504 244h57q379 0 379 430q0 227 -98.5 322.5t-280.5 95.5h-57v-330h258v-146h-258v-372z" /> +<glyph unicode="đ" horiz-adv-x="1173" d="M80 487q0 227 126 369.5t296 142.5q137 0 250 -106l-13 156v90h-305v145h305v152h301v-152h140v-133l-140 -10v-1141h-252l-18 90h-8q-119 -115 -266 -115q-190 0 -303 136.5t-113 375.5zM389 492q0 -270 184 -271q98 0 166 92v375q-72 66 -168 66q-78 0 -130 -68 t-52 -194z" /> +<glyph unicode="Ē" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM299 1475v190h580v-190h-580z" /> +<glyph unicode="ē" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM270 1212v191h566v-191h-566zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5 t-68.5 -148.5z" /> +<glyph unicode="Ĕ" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM309 1683h164q23 -94 117 -94q92 0 115 94h163q-10 -115 -79.5 -180t-198.5 -65q-252 0 -281 245z" /> +<glyph unicode="ĕ" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM268 1460h168q14 -119 117 -119q51 0 81 33t36 86h168q-4 -121 -77 -202.5t-208 -81.5 t-208 81.5t-77 202.5zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5z" /> +<glyph unicode="Ė" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM416 1593.5q0 69.5 49 113.5t125 44t125 -44t49 -113.5t-49 -113.5t-125 -44t-125 44t-49 113.5z" /> +<glyph unicode="ė" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM385 1323q0 70 47 114 t121 44t120 -44t46 -114t-46 -114t-120 -44t-121 44t-47 114z" /> +<glyph unicode="Ę" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-13q-70 -2 -123 -59.5t-53 -124.5q0 -37 26 -57.5t60 -20.5q33 0 74 29l70 -152q-92 -72 -215 -72q-100 0 -167 51.5t-67 141.5q0 86 49.5 155.5t110.5 108.5h-610z" /> +<glyph unicode="ę" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-131 -90 -176 -146.5t-45 -117.5q0 -78 88 -78q31 0 72 25l61 -135q-84 -68 -207 -68q-94 0 -153.5 48t-59.5 138q0 125 115 226q-25 -6 -55 -7 q-223 0 -368.5 143.5t-145.5 389.5zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5z" /> +<glyph unicode="Ě" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM246 1683h229l111 -124h8l108 124h230l-197 -245h-293z" /> +<glyph unicode="ě" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM238 1483h202l109 -162h8l109 162h202l-196 -307h-240zM362 612h367q0 199 -170 199 q-74 0 -128.5 -50.5t-68.5 -148.5z" /> +<glyph unicode="Ĝ" horiz-adv-x="1302" d="M92 659q0 322 188.5 511.5t469.5 189.5q242 0 415 -174l-166 -187q-111 100 -245 101q-156 0 -254.5 -116t-98.5 -314q0 -209 95.5 -321.5t281.5 -112.5q90 0 142 40v230h-222v246h490v-615q-80 -70 -199 -116t-250 -46q-283 0 -465 179t-182 505zM408 1438l196 245h293 l197 -245h-232l-108 125h-9l-108 -125h-229z" /> +<glyph unicode="ĝ" horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-94 61 -94 172q0 113 115 190v9q-59 41 -98.5 110.5t-39.5 153.5q0 174 122 270t298 96q90 0 158 -24h371v-219h-162q33 -55 33 -133q0 -168 -112 -255t-288 -87q-59 0 -123 20q-37 -31 -37 -76q0 -76 154 -76h164q387 0 387 -258 q0 -160 -154.5 -262t-412.5 -102q-190 0 -308 64.5t-118 193.5zM199 1176l196 307h240l196 -307h-202l-111 161h-8l-109 -161h-202zM317 -127q0 -55 60.5 -86t165.5 -31q100 0 166.5 36t66.5 89q0 45 -38 62.5t-117 17.5h-105q-94 0 -143 12q-56 -49 -56 -100zM379 674 q0 -82 39 -126t100.5 -44t100 44t38.5 126q0 78 -38.5 121t-100 43t-100.5 -42t-39 -122z" /> +<glyph unicode="Ğ" horiz-adv-x="1302" d="M92 659q0 322 188.5 511.5t469.5 189.5q242 0 415 -174l-166 -187q-111 100 -245 101q-156 0 -254.5 -116t-98.5 -314q0 -209 95.5 -321.5t281.5 -112.5q90 0 142 40v230h-222v246h490v-615q-80 -70 -199 -116t-250 -46q-283 0 -465 179t-182 505zM469 1683h166 q23 -94 115 -94q94 0 116 94h164q-29 -245 -280.5 -245t-280.5 245z" /> +<glyph unicode="ğ" horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-94 61 -94 172q0 113 115 190v9q-59 41 -98.5 110.5t-39.5 153.5q0 174 122 270t298 96q90 0 158 -24h371v-219h-162q33 -55 33 -133q0 -168 -112 -255t-288 -87q-59 0 -123 20q-37 -31 -37 -76q0 -76 154 -76h164q387 0 387 -258 q0 -160 -154.5 -262t-412.5 -102q-190 0 -308 64.5t-118 193.5zM229 1460h168q18 -119 117 -119q102 0 117 119h168q-4 -121 -77 -202.5t-208 -81.5t-208 81.5t-77 202.5zM317 -127q0 -55 60.5 -86t165.5 -31q100 0 166.5 36t66.5 89q0 45 -38 62.5t-117 17.5h-105 q-94 0 -143 12q-56 -49 -56 -100zM379 674q0 -82 39 -126t100.5 -44t100 44t38.5 126q0 78 -38.5 121t-100 43t-100.5 -42t-39 -122z" /> +<glyph unicode="Ġ" horiz-adv-x="1302" d="M92 659q0 322 188.5 511.5t469.5 189.5q242 0 415 -174l-166 -187q-111 100 -245 101q-156 0 -254.5 -116t-98.5 -314q0 -209 95.5 -321.5t281.5 -112.5q90 0 142 40v230h-222v246h490v-615q-80 -70 -199 -116t-250 -46q-283 0 -465 179t-182 505zM575 1593.5 q0 69.5 49.5 113.5t125 44t125 -44t49.5 -113.5t-49.5 -113.5t-125 -44t-125 44t-49.5 113.5z" /> +<glyph unicode="ġ" horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-94 61 -94 172q0 113 115 190v9q-59 41 -98.5 110.5t-39.5 153.5q0 174 122 270t298 96q90 0 158 -24h371v-219h-162q33 -55 33 -133q0 -168 -112 -255t-288 -87q-59 0 -123 20q-37 -31 -37 -76q0 -76 154 -76h164q387 0 387 -258 q0 -160 -154.5 -262t-412.5 -102q-190 0 -308 64.5t-118 193.5zM317 -127q0 -55 60.5 -86t165.5 -31q100 0 166.5 36t66.5 89q0 45 -38 62.5t-117 17.5h-105q-94 0 -143 12q-56 -49 -56 -100zM348 1323q0 70 47 114t119 44q74 0 121 -44t47 -114t-47 -114t-121 -44 q-72 0 -119 44t-47 114zM379 674q0 -82 39 -126t100.5 -44t100 44t38.5 126q0 78 -38.5 121t-100 43t-100.5 -42t-39 -122z" /> +<glyph unicode="Ģ" horiz-adv-x="1302" d="M92 659q0 322 188.5 511.5t469.5 189.5q242 0 415 -174l-166 -187q-111 100 -245 101q-156 0 -254.5 -116t-98.5 -314q0 -209 95.5 -321.5t281.5 -112.5q90 0 142 40v230h-222v246h490v-615q-80 -70 -199 -116t-250 -46q-283 0 -465 179t-182 505zM530 -348 q168 18 168 76q0 53 -88 75l58 111q135 -14 191 -54t56 -118q0 -98 -102 -150.5t-260 -60.5z" /> +<glyph unicode="ģ" horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-94 61 -94 172q0 113 115 190v9q-59 41 -98.5 110.5t-39.5 153.5q0 174 122 270t298 96q90 0 158 -24h371v-219h-162q33 -55 33 -133q0 -168 -112 -255t-288 -87q-59 0 -123 20q-37 -31 -37 -76q0 -76 154 -76h164q387 0 387 -258 q0 -160 -154.5 -262t-412.5 -102q-190 0 -308 64.5t-118 193.5zM317 -127q0 -55 60.5 -86t165.5 -31q100 0 166.5 36t66.5 89q0 45 -38 62.5t-117 17.5h-105q-94 0 -143 12q-56 -49 -56 -100zM340 1286q0 98 101.5 151.5t260.5 61.5l23 -121q-168 -18 -168 -78q0 -53 88 -73 l-57 -111q-135 12 -191.5 52t-56.5 118zM379 674q0 -82 39 -126t100.5 -44t100 44t38.5 126q0 78 -38.5 121t-100 43t-100.5 -42t-39 -122z" /> +<glyph unicode="Ĥ" horiz-adv-x="1376" d="M156 0v1335h303v-514h461v514h301v-1335h-301v557h-461v-557h-303zM344 1438l197 245h293l196 -245h-229l-111 125h-8l-109 -125h-229z" /> +<glyph unicode="ĥ" horiz-adv-x="1169" d="M-63 1536l196 246h295l197 -246h-232l-108 123h-9l-108 -123h-231zM133 0v1436h301v-353l-14 -182q156 139 313 139q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301z" /> +<glyph unicode="Ħ" horiz-adv-x="1456" d="M49 995v133l148 13v194h301v-194h460v194h302v-194h147v-146h-147v-995h-302v557h-460v-557h-301v995h-148zM498 821h460v174h-460v-174z" /> +<glyph unicode="ħ" horiz-adv-x="1169" d="M-6 1139v133l139 10v154h301v-152h346v-145h-346v-97l-14 -182q156 139 313 139q315 0 316 -409v-590h-301v551q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-645h-301v1139h-139z" /> +<glyph unicode="Ĩ" horiz-adv-x="614" d="M-41 1440q14 135 74.5 206.5t144.5 71.5q61 0 140 -46t106 -46q57 0 78 92h153q-14 -135 -74.5 -206.5t-144.5 -71.5q-61 0 -140 46t-106 46q-57 0 -79 -92h-152zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="ĩ" horiz-adv-x="565" d="M-57 1178q16 137 72.5 206.5t140.5 69.5q59 0 138 -45t103 -45q51 0 72 90h154q-14 -135 -71.5 -205.5t-141.5 -70.5q-59 0 -138 46t-104 46q-49 0 -72 -92h-153zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="Ī" horiz-adv-x="614" d="M18 1475v190h578v-190h-578zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="ī" horiz-adv-x="565" d="M0 1212v191h565v-191h-565zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="Į" horiz-adv-x="614" d="M86 -264q0 154 152 264h-82v1335h303v-1335q-154 -63 -154 -184q0 -37 24.5 -57.5t59.5 -20.5q39 0 76 29l70 -152q-92 -72 -216 -72q-102 0 -167.5 51.5t-65.5 141.5z" /> +<glyph unicode="į" horiz-adv-x="565" d="M84 -244q0 137 133 244h-84v1016h301v-1016q-147 -55 -147 -174q0 -39 25.5 -58.5t62.5 -19.5q23 0 71 25l62 -135q-37 -31 -97.5 -49.5t-109.5 -18.5q-94 0 -155.5 49t-61.5 137zM109 1323q0 70 49 113t124.5 43t125 -43t49.5 -113t-49.5 -114t-125 -44t-124.5 44 t-49 114z" /> +<glyph unicode="İ" horiz-adv-x="614" d="M133 1593.5q0 69.5 49 113.5t125 44t125 -44t49 -113.5t-49 -113.5t-125 -44t-125 44t-49 113.5zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="ı" horiz-adv-x="565" d="M133 0v1016h301v-1016h-301z" /> +<glyph unicode="Ĵ" horiz-adv-x="1038" d="M31 217l205 152q76 -133 186 -133q86 0 126 52t40 181v866h303v-891q0 -207 -108.5 -338t-319.5 -131q-295 0 -432 242zM391 1438l197 245h293l196 -245h-229l-109 125h-8l-110 -125h-230z" /> +<glyph unicode="ĵ" horiz-adv-x="569" d="M-104 -373l53 221q47 -14 80 -14q59 0 82.5 39t23.5 125v1018h301v-1010q0 -408 -362 -407q-106 0 -178 28zM-29 1176l195 307h240l196 -307h-203l-108 161h-8l-109 -161h-203z" /> +<glyph unicode="Ķ" horiz-adv-x="1255" d="M156 0v1335h303v-547h6l399 547h330l-403 -532l479 -803h-332l-324 563l-155 -205v-358h-303zM467 -348q170 18 170 76q0 51 -90 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -101.5 -150.5t-261.5 -60.5z" /> +<glyph unicode="ķ" horiz-adv-x="1122" d="M133 0v1436h293v-824h8l322 404h327l-356 -418l383 -598h-326l-229 395l-129 -145v-250h-293zM393 -348q168 18 168 76q0 53 -88 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -102.5 -150.5t-259.5 -60.5z" /> +<glyph unicode="ĸ" horiz-adv-x="1122" d="M133 0v1016h301v-410h6l316 410h327l-348 -418l375 -598h-326l-229 387l-121 -147v-240h-301z" /> +<glyph unicode="Ĺ" horiz-adv-x="1056" d="M156 0v1335h303v-1081h526v-254h-829zM162 1438l166 245h319l-246 -245h-239z" /> +<glyph unicode="ĺ" horiz-adv-x="585" d="M133 315v1121h301v-1133q0 -84 53 -84q20 0 37 4l37 -223q-55 -25 -151 -25q-277 0 -277 340zM135 1550l166 246h320l-246 -246h-240z" /> +<glyph unicode="Ļ" horiz-adv-x="1056" d="M156 0v1335h303v-1081h526v-254h-829zM381 -348q170 18 170 76q0 51 -88 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -102.5 -150.5t-262.5 -60.5z" /> +<glyph unicode="ļ" horiz-adv-x="585" d="M133 315v1121h301v-1133q0 -84 53 -84q20 0 37 4l37 -223q-55 -25 -151 -25q-277 0 -277 340zM178 -348q170 18 170 76q0 51 -88 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -102.5 -150.5t-261.5 -60.5z" /> +<glyph unicode="Ľ" horiz-adv-x="1056" d="M156 0v1335h303v-1081h526v-254h-829zM711 1499h192l-4 -143l-49 -312h-129z" /> +<glyph unicode="ľ" horiz-adv-x="651" d="M133 315v1121h301v-1133q0 -84 53 -84q20 0 37 4l37 -223q-55 -25 -151 -25q-277 0 -277 340zM512 1577h193l-5 -141l-49 -314h-129z" /> +<glyph unicode="Ŀ" horiz-adv-x="1056" d="M156 0v1335h303v-1081h526v-254h-829zM657 674q0 80 51.5 134t129 54t130 -54t52.5 -134t-52.5 -135.5t-130 -55.5t-129 55.5t-51.5 135.5z" /> +<glyph unicode="ŀ" horiz-adv-x="927" d="M133 315v1121h301v-1133q0 -84 53 -84q20 0 37 4l37 -223q-55 -25 -151 -25q-277 0 -277 340zM565 674q0 80 51.5 134t129 54t130 -54t52.5 -134t-52.5 -135.5t-130 -55.5t-129 55.5t-51.5 135.5z" /> +<glyph unicode="Ł" horiz-adv-x="1071" d="M20 342v233l150 80v680h301v-532l356 194v-233l-356 -195v-315h526v-254h-827v422z" /> +<glyph unicode="ł" horiz-adv-x="620" d="M31 492v239l123 76v629h301v-480l133 80v-241l-133 -80v-412q0 -84 53 -84q20 0 37 4l37 -223q-59 -25 -152 -25q-276 0 -276 340v250z" /> +<glyph unicode="Ń" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-39 383 -39 487v471h287v-1335h-309l-348 666l-131 290h-8q39 -399 38 -483v-473h-288zM528 1438l166 245h320l-246 -245h-240z" /> +<glyph unicode="ń" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q162 154 325 153q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM463 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="Ņ" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-39 383 -39 487v471h287v-1335h-309l-348 666l-131 290h-8q39 -399 38 -483v-473h-288zM492 -348q170 18 170 76q0 51 -91 75l60 111q135 -14 190.5 -54t55.5 -118q0 -98 -101.5 -150.5t-261.5 -60.5z" /> +<glyph unicode="ņ" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q162 154 325 153q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM385 -348q170 18 170 76q0 51 -88 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -102.5 -150.5t-261.5 -60.5z" /> +<glyph unicode="Ň" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-39 383 -39 487v471h287v-1335h-309l-348 666l-131 290h-8q39 -399 38 -483v-473h-288zM338 1683h229l111 -124h8l109 124h229l-197 -245h-292z" /> +<glyph unicode="ň" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q162 154 325 153q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM315 1483h203l109 -162h8l108 162h203l-196 -307h-240z" /> +<glyph unicode="ʼn" horiz-adv-x="1744" d="M145 852q184 92 185 260q-6 -2 -19 -2q-68 0 -112.5 41t-44.5 109q0 76 44 121.5t113 45.5q92 0 142.5 -69.5t50.5 -198.5q0 -295 -293 -438zM702 0v1016h246l23 -129h6q162 154 328 153q315 0 315 -409v-631h-301v592q0 106 -29.5 149t-97.5 43q-53 0 -94 -22.5 t-94 -75.5v-686h-302z" /> +<glyph unicode="Ō" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM410 1475 v190h579v-190h-579z" /> +<glyph unicode="ō" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM287 1212v191h565v-191h-565zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="Ő" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM418 1438 l129 245h258l-184 -245h-203zM786 1438l129 245h256l-182 -245h-203z" /> +<glyph unicode="ő" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM311 1174l142 309h239l-196 -309h-185zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77 t-47 -212zM662 1174l141 309h237l-194 -309h-184z" /> +<glyph unicode="Œ" horiz-adv-x="1779" d="M92 674q0 330 187.5 495.5t498.5 165.5h877v-254h-508v-268h428v-252h-428v-307h528v-254h-913q-299 0 -484.5 172t-185.5 502zM401 674q0 -430 396 -430h49v848h-49q-190 0 -293 -95.5t-103 -322.5z" /> +<glyph unicode="œ" horiz-adv-x="1679" d="M74 508q0 244 138 388t341 144q205 0 330 -178q129 178 321 178q195 0 300.5 -138t105.5 -355q0 -78 -13 -127h-587q16 -102 81.5 -155.5t161.5 -53.5q88 0 215 74l105 -195q-168 -115 -361 -115q-195 0 -327 179q-129 -178 -338 -179q-203 0 -338 143.5t-135 389.5z M379 508q0 -133 46 -211t128 -78t130 78t48 211t-48 211t-130 78t-128 -78t-46 -211zM1010 604h342q0 207 -158 207q-74 0 -123 -52.5t-61 -154.5z" /> +<glyph unicode="Ŕ" horiz-adv-x="1259" d="M156 0v1335h481q516 0 516 -415q0 -279 -238 -385l302 -535h-338l-256 481h-164v-481h-303zM459 721h153q244 0 244 199q0 94 -60.5 135t-183.5 41h-153v-375zM479 1438l166 245h320l-244 -245h-242z" /> +<glyph unicode="ŕ" horiz-adv-x="815" d="M133 0v1016h246l20 -178h9q53 100 129.5 151t158.5 51q74 0 121 -20l-49 -260q-59 16 -111 16q-63 0 -124.5 -45t-98.5 -141v-590h-301zM338 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="Ŗ" horiz-adv-x="1259" d="M156 0v1335h481q516 0 516 -415q0 -279 -238 -385l302 -535h-338l-256 481h-164v-481h-303zM457 -348q170 18 170 76q0 50 -88 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -102.5 -150.5t-262.5 -60.5zM459 721h153q244 0 244 199q0 94 -60.5 135t-183.5 41h-153v-375 z" /> +<glyph unicode="ŗ" horiz-adv-x="815" d="M72 -348q168 18 168 76q0 53 -88 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -102.5 -150.5t-260.5 -60.5zM133 0v1016h246l20 -178h9q53 100 129.5 151t158.5 51q74 0 121 -20l-49 -260q-59 16 -111 16q-63 0 -124.5 -45t-98.5 -141v-590h-301z" /> +<glyph unicode="Ř" horiz-adv-x="1259" d="M156 0v1335h481q516 0 516 -415q0 -279 -238 -385l302 -535h-338l-256 481h-164v-481h-303zM289 1683h231l109 -124h8l108 124h232l-197 -245h-295zM459 721h153q244 0 244 199q0 94 -60.5 135t-183.5 41h-153v-375z" /> +<glyph unicode="ř" horiz-adv-x="815" d="M133 0v1016h246l20 -178h9q53 100 129.5 151t158.5 51q74 0 121 -20l-49 -260q-59 16 -111 16q-63 0 -124.5 -45t-98.5 -141v-590h-301zM190 1483h201l111 -162h8l108 162h203l-196 -307h-240z" /> +<glyph unicode="Ś" horiz-adv-x="1134" d="M70 168l174 207q160 -139 327 -139q186 0 187 129q0 68 -86 112q-23 12 -107 47l-172 74q-117 47 -193.5 138t-76.5 227q0 168 135 282.5t340 114.5q254 0 430 -176l-151 -191q-139 106 -279 107q-78 0 -124 -33t-46 -88q0 -37 27.5 -64.5t55.5 -41t97 -42.5l8 -3 q2 -1 7.5 -3t9.5 -4l170 -69q264 -106 264 -363q0 -174 -136 -294t-366 -120q-286 0 -495 193zM442 1438l166 245h320l-246 -245h-240z" /> +<glyph unicode="ś" horiz-adv-x="907" d="M43 117l135 188q141 -106 262 -106q129 0 129 86q0 10 -3 20t-11 19.5t-15.5 16.5t-22.5 15.5t-25.5 14.5t-30 14t-30.5 12t-33.5 13.5t-35.5 13.5q-268 102 -268 299q0 141 106.5 229t282.5 88q184 0 359 -129l-135 -180q-119 86 -215 86q-115 0 -115 -80q0 -14 5 -25.5 t17.5 -22.5t22.5 -18t32.5 -16.5t35 -14.5t43 -16.5t42.5 -15.5q125 -45 200 -112.5t75 -192.5q0 -143 -109.5 -235.5t-308.5 -92.5q-98 0 -204.5 39.5t-184.5 102.5zM315 1176l183 307h290l-253 -307h-220z" /> +<glyph unicode="Ŝ" horiz-adv-x="1134" d="M70 168l174 207q160 -139 327 -139q186 0 187 129q0 68 -86 112q-23 12 -107 47l-172 74q-117 47 -193.5 138t-76.5 227q0 168 135 282.5t340 114.5q254 0 430 -176l-151 -191q-139 106 -279 107q-78 0 -124 -33t-46 -88q0 -37 27.5 -64.5t55.5 -41t97 -42.5l8 -3 q2 -1 7.5 -3t9.5 -4l170 -69q264 -106 264 -363q0 -174 -136 -294t-366 -120q-286 0 -495 193zM252 1438l197 245h292l197 -245h-229l-109 125h-8l-111 -125h-229z" /> +<glyph unicode="ŝ" horiz-adv-x="907" d="M43 117l135 188q141 -106 262 -106q129 0 129 86q0 10 -3 20t-11 19.5t-15.5 16.5t-22.5 15.5t-25.5 14.5t-30 14t-30.5 12t-33.5 13.5t-35.5 13.5q-268 102 -268 299q0 141 106.5 229t282.5 88q184 0 359 -129l-135 -180q-119 86 -215 86q-115 0 -115 -80q0 -14 5 -25.5 t17.5 -22.5t22.5 -18t32.5 -16.5t35 -14.5t43 -16.5t42.5 -15.5q125 -45 200 -112.5t75 -192.5q0 -143 -109.5 -235.5t-308.5 -92.5q-98 0 -204.5 39.5t-184.5 102.5zM168 1176l194 307h240l197 -307h-203l-109 161h-8l-108 -161h-203z" /> +<glyph unicode="Ş" horiz-adv-x="1134" d="M70 168l174 207q160 -139 327 -139q186 0 187 129q0 68 -86 112q-23 12 -107 47l-172 74q-117 47 -193.5 138t-76.5 227q0 168 135 282.5t340 114.5q254 0 430 -176l-151 -191q-139 106 -279 107q-78 0 -124 -33t-46 -88q0 -37 27.5 -64.5t55.5 -41t97 -42.5l8 -3 q2 -1 7.5 -3t9.5 -4l170 -69q264 -106 264 -363q0 -154 -110.5 -268.5t-301.5 -138.5l-28 -70q119 -39 118 -152q0 -100 -102 -152t-260 -61l-23 121q168 18 168 90q0 57 -118 86l67 138q-236 27 -407 186z" /> +<glyph unicode="ş" horiz-adv-x="907" d="M43 117l135 188q141 -106 262 -106q129 0 129 86q0 10 -3 20t-11 19.5t-15.5 16.5t-22.5 15.5t-25.5 14.5t-30 14t-30.5 12t-33.5 13.5t-35.5 13.5q-268 102 -268 299q0 141 106.5 229t282.5 88q185 0 359 -129l-135 -180q-119 86 -215 86q-115 0 -115 -80q0 -14 5 -25.5 t17.5 -22.5t22.5 -18t32.5 -16.5t35 -14.5t43 -16.5t42.5 -15.5q125 -45 200 -112.5t75 -192.5q0 -115 -71.5 -199t-205.5 -114l-32 -78q119 -39 118 -152q0 -100 -102 -152t-260 -61l-23 121q168 18 168 90q0 57 -118 86l65 133q-197 16 -346 140z" /> +<glyph unicode="Š" horiz-adv-x="1134" d="M70 168l174 207q160 -139 327 -139q186 0 187 129q0 68 -86 112q-23 12 -107 47l-172 74q-117 47 -193.5 138t-76.5 227q0 168 135 282.5t340 114.5q254 0 430 -176l-151 -191q-139 106 -279 107q-78 0 -124 -33t-46 -88q0 -37 27.5 -64.5t55.5 -41t97 -42.5l8 -3 q2 -1 7.5 -3t9.5 -4l170 -69q264 -106 264 -363q0 -174 -136 -294t-366 -120q-286 0 -495 193zM252 1683h229l111 -124h8l109 124h229l-197 -245h-292z" /> +<glyph unicode="š" horiz-adv-x="907" d="M43 117l135 188q141 -106 262 -106q129 0 129 86q0 10 -3 20t-11 19.5t-15.5 16.5t-22.5 15.5t-25.5 14.5t-30 14t-30.5 12t-33.5 13.5t-35.5 13.5q-268 102 -268 299q0 141 106.5 229t282.5 88q184 0 359 -129l-135 -180q-119 86 -215 86q-115 0 -115 -80q0 -14 5 -25.5 t17.5 -22.5t22.5 -18t32.5 -16.5t35 -14.5t43 -16.5t42.5 -15.5q125 -45 200 -112.5t75 -192.5q0 -143 -109.5 -235.5t-308.5 -92.5q-98 0 -204.5 39.5t-184.5 102.5zM168 1483h203l108 -162h8l109 162h203l-197 -307h-240z" /> +<glyph unicode="Ţ" horiz-adv-x="1136" d="M49 1081v254h1036v-254h-366v-1081h-55l-37 -88q121 -39 121 -152q0 -100 -102.5 -152t-262.5 -61l-23 121q170 18 170 90q0 57 -118 86l77 156h-71v1081h-369z" /> +<glyph unicode="ţ" horiz-adv-x="784" d="M35 780v224l155 12l35 270h250v-270h244v-236h-244v-407q0 -162 131 -162q43 0 96 20l48 -219q-82 -27 -172 -35l-29 -65q119 -39 119 -152q0 -100 -102.5 -152t-260.5 -61l-22 121q168 18 168 90q0 57 -119 86l74 146q-231 59 -232 379v411h-139z" /> +<glyph unicode="Ť" horiz-adv-x="1136" d="M49 1081v254h1036v-254h-366v-1081h-301v1081h-369zM225 1683h230l108 -124h8l111 124h229l-196 -245h-293z" /> +<glyph unicode="ť" horiz-adv-x="784" d="M35 780v224l155 12l35 270h250v-270h244v-236h-244v-407q0 -162 131 -162q43 0 96 20l48 -219q-119 -37 -226 -37q-350 1 -350 394v411h-139zM561 1577h193l-2 -141l-52 -314h-129z" /> +<glyph unicode="Ũ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM330 1440q16 135 76.5 206.5t144.5 71.5q59 0 139 -46t105 -46q59 0 79 92h154q-14 -135 -74.5 -206.5t-144.5 -71.5 q-61 0 -141 46t-105 46q-59 0 -80 -92h-153z" /> +<glyph unicode="ũ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM242 1178q14 135 71.5 205.5t139.5 70.5q59 0 139 -45t104 -45q49 0 70 90h154q-14 -135 -70.5 -205.5t-140.5 -70.5 q-61 0 -139 46t-103 46q-51 0 -72 -92h-153z" /> +<glyph unicode="Ū" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM389 1475v190h580v-190h-580z" /> +<glyph unicode="ū" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM297 1212v191h565v-191h-565z" /> +<glyph unicode="Ŭ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM399 1683h164q23 -94 117 -94q92 0 115 94h163q-10 -115 -79.5 -180t-198.5 -65q-252 0 -281 245z" /> +<glyph unicode="ŭ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM295 1460h168q18 -119 119 -119q98 0 116 119h168q-4 -121 -76.5 -202.5t-208 -81.5t-209 81.5t-77.5 202.5z" /> +<glyph unicode="Ů" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM449 1628q0 90 64.5 145.5t166.5 55.5t165.5 -55.5t63.5 -145.5q0 -92 -63.5 -146.5t-165.5 -54.5q-104 0 -167.5 54.5 t-63.5 146.5zM596 1628q0 -41 23.5 -64.5t60.5 -23.5q35 0 58.5 23.5t23.5 64.5q0 39 -23.5 63.5t-58.5 24.5q-37 0 -60.5 -24.5t-23.5 -63.5z" /> +<glyph unicode="ů" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM350 1331q0 94 63.5 151.5t168.5 57.5q102 0 165.5 -57.5t63.5 -151.5t-63.5 -151.5t-165.5 -57.5q-104 0 -168 57.5t-64 151.5 zM498 1331q0 -43 23.5 -69.5t60.5 -26.5q35 0 58.5 26.5t23.5 69.5t-24 69.5t-58 26.5q-37 0 -60.5 -26.5t-23.5 -69.5z" /> +<glyph unicode="Ű" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM399 1438l129 245h256l-184 -245h-201zM766 1438l129 245h256l-182 -245h-203z" /> +<glyph unicode="ű" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM324 1174l141 309h240l-197 -309h-184zM674 1174l141 309h238l-195 -309h-184z" /> +<glyph unicode="Ų" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -274 -79.5 -408t-270.5 -220q-72 -33 -108.5 -81t-36.5 -93q0 -37 25.5 -57.5t60.5 -20.5q33 0 73 29l70 -152q-92 -72 -215 -72q-100 0 -166.5 51.5t-66.5 141.5q0 121 131 244 q-477 28 -477 638z" /> +<glyph unicode="ų" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 29.5 -149.5t97.5 -43.5q100 0 180 113v672h301v-1016q-92 -29 -135 -76t-43 -98q0 -37 24.5 -57.5t59.5 -20.5q37 0 74 25l63 -135q-88 -68 -209 -68q-94 0 -155.5 49t-61.5 137q0 141 141 240l-24 145h-8q-135 -166 -320 -166 q-315 0 -315 410z" /> +<glyph unicode="Ŵ" horiz-adv-x="1662" d="M27 1335h309l92 -624q18 -139 55 -422h9q29 164 77 422l144 624h256l145 -624q27 -135 80 -422h8q20 170 53 422l93 624h288l-237 -1335h-379l-131 606q-31 150 -53 309h-9q-43 -258 -53 -309l-127 -606h-373zM487 1438l197 245h295l197 -245h-232l-108 125h-9l-108 -125 h-232z" /> +<glyph unicode="ŵ" horiz-adv-x="1589" d="M49 1016h299l98 -471q8 -51 22.5 -151.5t23.5 -149.5h8q41 231 59 301l113 471h260l115 -471q18 -74 63 -301h8q8 51 22.5 150.5t24.5 150.5l97 471h278l-244 -1016h-352l-92 406q-23 102 -55 296h-9q-45 -266 -51 -296l-90 -406h-344zM481 1176l195 307h239l197 -307 h-203l-108 161h-8l-109 -161h-203z" /> +<glyph unicode="Ŷ" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475zM193 1438l196 245h293l197 -245h-230l-108 125h-9l-108 -125h-231z" /> +<glyph unicode="ŷ" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54zM231 1176l195 307h240l196 -307h-203l-108 161h-8l-109 -161h-203z" /> +<glyph unicode="Ÿ" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475zM190 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102zM596 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102 t-103.5 -41t-103.5 41t-40 102z" /> +<glyph unicode="Ź" horiz-adv-x="1105" d="M72 0v182l590 899h-535v254h907v-182l-590 -899h594v-254h-966zM426 1438l164 245h319l-243 -245h-240z" /> +<glyph unicode="ź" horiz-adv-x="942" d="M78 0v162l426 618h-379v236h754v-160l-426 -620h440v-236h-815zM336 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="Ż" horiz-adv-x="1105" d="M72 0v182l590 899h-535v254h907v-182l-590 -899h594v-254h-966zM403 1593.5q0 69.5 49.5 113.5t125.5 44q78 0 127 -44t49 -113.5t-49 -113.5t-127 -44q-76 0 -125.5 44t-49.5 113.5z" /> +<glyph unicode="ż" horiz-adv-x="942" d="M78 0v162l426 618h-379v236h754v-160l-426 -620h440v-236h-815zM336 1323q0 70 47 114t119 44q74 0 121 -44t47 -114t-47 -114t-121 -44q-72 0 -119 44t-47 114z" /> +<glyph unicode="Ž" horiz-adv-x="1105" d="M72 0v182l590 899h-535v254h907v-182l-590 -899h594v-254h-966zM236 1683h229l108 -124h9l110 124h230l-197 -245h-293z" /> +<glyph unicode="ž" horiz-adv-x="942" d="M78 0v162l426 618h-379v236h754v-160l-426 -620h440v-236h-815zM186 1483h203l109 -162h8l110 162h203l-196 -307h-240z" /> +<glyph unicode="Ə" horiz-adv-x="1431" d="M143 662q0 14 1 30.5t3.5 37t2.5 32.5h878q-35 342 -326 342q-153 0 -290 -117l-131 207q180 166 458 166q264 0 428 -184.5t164 -506t-166 -508t-434 -186.5q-266 0 -427 183.5t-161 503.5zM453 541q14 -150 88.5 -230t189.5 -80q111 0 188.5 80t102.5 230h-569z" /> +<glyph unicode="ƒ" horiz-adv-x="1081" d="M61 -166l41 223q35 -14 91 -18q74 4 106.5 61.5t50.5 229.5l35 299h-154v207l152 12h27l10 88q25 227 120 325.5t296 98.5q94 0 176 -37l-58 -225q-68 23 -94 22q-133 0 -149 -159l-15 -113h211v-219h-235l-47 -387q-25 -209 -110 -324t-277 -115q-125 0 -177 31z" /> +<glyph unicode="Ơ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440 182q156 0 287 -64q61 14 91 42t30 83q0 42 -31 95l205 90q59 -72 59 -164q0 -184 -217 -246q182 -188 183 -522q0 -324 -166 -511.5t-441 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5 t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="ơ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q98 0 195 -39q113 25 113 121q0 46 -31 95l205 90q59 -72 59 -164q0 -184 -199 -242q152 -147 152 -393q0 -244 -145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212 t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="Ư" horiz-adv-x="1394" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h143q76 4 122 30t46 97q0 45 -33 94l205 91q61 -70 61 -164q0 -109 -69.5 -172.5t-184.5 -85.5v-607q0 -332 -132 -487.5t-396 -155.5t-398 157t-134 486z" /> +<glyph unicode="ư" horiz-adv-x="1204" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h102q166 8 166 127q1 49 -32 94l206 90q59 -72 60 -164q0 -182 -201 -241v-922h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410z" /> +<glyph unicode="Ǎ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM236 1683h229l108 -124h9l110 124h230l-197 -245h-293zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ǎ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM258 1483h203l110 -162h9l108 162h203l-197 -307h-239zM383 305q0 -96 117 -96 q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ǐ" horiz-adv-x="614" d="M-37 1683h232l108 -124h8l109 124h231l-196 -245h-295zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="ǐ" horiz-adv-x="565" d="M-33 1483h203l109 -162h8l108 162h203l-195 -307h-239zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="Ǒ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM356 1683h230l108 -124h8l111 124h229l-196 -245h-293zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5 t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="ǒ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM252 1483h203l110 -162h8l109 162h203l-197 -307h-239zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77 q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="Ǔ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM336 1683h229l111 -124h8l109 124h229l-197 -245h-293z" /> +<glyph unicode="ǔ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM264 1483h203l111 -162h8l108 162h203l-197 -307h-239z" /> +<glyph unicode="Ǖ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM350 1561q0 53 36 89t91 36t90 -36t35 -89q0 -55 -35 -91t-90 -36t-91 35.5t-36 91.5zM389 1786v141h580v-141h-580z M756 1560.5q0 53.5 35.5 89.5t91 36t90.5 -36t35 -89q0 -55 -35 -91t-90.5 -36t-91 36.5t-35.5 90z" /> +<glyph unicode="ǖ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM252 1294q0 55 35 91t90 36t91 -35.5t36 -91.5q0 -53 -36 -89t-91 -36t-90 36t-35 89zM297 1548v142h567v-142h-567zM657 1294 q0 55 36 91t91.5 36t90 -35.5t34.5 -91.5q0 -53 -34.5 -89t-90 -36t-91.5 36t-36 89z" /> +<glyph unicode="Ǘ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM350 1561q0 53 36 89t91 36t90 -36t35 -89q0 -55 -35 -91t-90 -36t-91 35.5t-36 91.5zM526 1749l166 246h316l-242 -246h-240z M756 1560.5q0 53.5 35.5 89.5t91 36t90.5 -36t35 -89q0 -55 -35 -91t-90.5 -36t-91 36.5t-35.5 90z" /> +<glyph unicode="ǘ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM252 1294q0 55 35 91t90 36t91 -35.5t36 -91.5q0 -53 -36 -89t-91 -36t-90 36t-35 89zM442 1509l170 228h258l-237 -228h-191z M657 1294q0 55 36 91t91.5 36t90 -35.5t34.5 -91.5q0 -53 -34.5 -89t-90 -36t-91.5 36t-36 89z" /> +<glyph unicode="Ǚ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM336 1995h229l111 -123h8l109 123h229l-197 -246h-293zM350 1561q0 53 36 89t91 36t90 -36t35 -89q0 -55 -35 -91t-90 -36 t-91 35.5t-36 91.5zM756 1560.5q0 53.5 35.5 89.5t91 36t90.5 -36t35 -89q0 -55 -35 -91t-90.5 -36t-91 36.5t-35.5 90z" /> +<glyph unicode="ǚ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM252 1294q0 55 35 91t90 36t91 -35.5t36 -91.5q0 -53 -36 -89t-91 -36t-90 36t-35 89zM279 1737h202l97 -119h8l94 119h203 l-176 -228h-252zM657 1294q0 55 36 91t91.5 36t90 -35.5t34.5 -91.5q0 -53 -34.5 -89t-90 -36t-91.5 36t-36 89z" /> +<glyph unicode="Ǜ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM350 1561q0 53 36 89t91 36t90 -36t35 -89q0 -55 -35 -91t-90 -36t-91 35.5t-36 91.5zM352 1995h314l165 -246h-239z M756 1560.5q0 53.5 35.5 89.5t91 36t90.5 -36t35 -89q0 -55 -35 -91t-90.5 -36t-91 36.5t-35.5 90z" /> +<glyph unicode="ǜ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM252 1294q0 55 35 91t90 36t91 -35.5t36 -91.5q0 -53 -36 -89t-91 -36t-90 36t-35 89zM291 1737h258l172 -228h-193zM657 1294 q0 55 36 91t91.5 36t90 -35.5t34.5 -91.5q0 -53 -34.5 -89t-90 -36t-91.5 36t-36 89z" /> +<glyph unicode="Ǧ" horiz-adv-x="1302" d="M92 659q0 322 188.5 511.5t469.5 189.5q242 0 415 -174l-166 -187q-111 100 -245 101q-156 0 -254.5 -116t-98.5 -314q0 -209 95.5 -321.5t281.5 -112.5q90 0 142 40v230h-222v246h490v-615q-80 -70 -199 -116t-250 -46q-283 0 -465 179t-182 505zM408 1683h229l108 -124 h9l108 124h232l-197 -245h-293z" /> +<glyph unicode="ǧ" horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-94 61 -94 172q0 113 115 190v9q-59 41 -98.5 110.5t-39.5 153.5q0 174 122 270t298 96q90 0 158 -24h371v-219h-162q33 -55 33 -133q0 -168 -112 -255t-288 -87q-59 0 -123 20q-37 -31 -37 -76q0 -76 154 -76h164q387 0 387 -258 q0 -160 -154.5 -262t-412.5 -102q-190 0 -308 64.5t-118 193.5zM199 1483h202l109 -162h8l111 162h202l-196 -307h-240zM317 -127q0 -55 60.5 -86t165.5 -31q100 0 166.5 36t66.5 89q0 45 -38 62.5t-117 17.5h-105q-94 0 -143 12q-56 -49 -56 -100zM379 674q0 -82 39 -126 t100.5 -44t100 44t38.5 126q0 78 -38.5 121t-100 43t-100.5 -42t-39 -122z" /> +<glyph unicode="Ǫ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -270 -106.5 -429t-317.5 -255q-72 -33 -108 -80t-36 -94q0 -37 25.5 -57.5t60.5 -20.5q33 0 74 29l68 -152q-90 -72 -213 -72q-102 0 -169 51.5t-67 141.5q0 133 131 244q-256 18 -405.5 202.5t-149.5 491.5z M401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="ǫ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388q0 -193 -86 -312.5t-246 -195.5q-137 -61 -137 -174q0 -39 25.5 -58.5t60.5 -19.5q33 0 74 25l61 -135q-84 -68 -207 -68q-94 0 -155.5 49t-61.5 137q0 125 113 224q-182 23 -306 164t-124 364zM383 508 q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="Ș" horiz-adv-x="1134" d="M70 168l174 207q160 -139 327 -139q186 0 187 129q0 68 -86 112q-23 12 -107 47l-172 74q-117 47 -193.5 138t-76.5 227q0 168 135 282.5t340 114.5q254 0 430 -176l-151 -191q-139 106 -279 107q-78 0 -124 -33t-46 -88q0 -37 27.5 -64.5t55.5 -41t97 -42.5l8 -3 q2 -1 7.5 -3t9.5 -4l170 -69q264 -106 264 -363q0 -174 -136 -294t-366 -120q-286 0 -495 193zM360 -348q168 18 168 76q0 53 -88 75l58 111q135 -14 191 -54t56 -118q0 -98 -102 -150.5t-260 -60.5z" /> +<glyph unicode="ș" horiz-adv-x="907" d="M43 117l135 188q141 -106 262 -106q129 0 129 86q0 10 -3 20t-11 19.5t-15.5 16.5t-22.5 15.5t-25.5 14.5t-30 14t-30.5 12t-33.5 13.5t-35.5 13.5q-268 102 -268 299q0 141 106.5 229t282.5 88q184 0 359 -129l-135 -180q-119 86 -215 86q-115 0 -115 -80q0 -14 5 -25.5 t17.5 -22.5t22.5 -18t32.5 -16.5t35 -14.5t43 -16.5t42.5 -15.5q125 -45 200 -112.5t75 -192.5q0 -143 -109.5 -235.5t-308.5 -92.5q-98 0 -204.5 39.5t-184.5 102.5zM264 -348q170 18 170 76q0 51 -88 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -102.5 -150.5 t-261.5 -60.5z" /> +<glyph unicode="Ț" horiz-adv-x="1136" d="M49 1081v254h1036v-254h-366v-1081h-301v1081h-369zM358 -348q168 18 168 76q0 53 -88 75l58 111q135 -14 191 -54t56 -118q0 -98 -102 -150.5t-260 -60.5z" /> +<glyph unicode="ț" horiz-adv-x="784" d="M35 780v224l155 12l35 270h250v-270h244v-236h-244v-407q0 -162 131 -162q43 0 96 20l48 -219q-119 -37 -226 -37q-350 1 -350 394v411h-139zM270 -348q170 18 170 76q0 51 -88 75l58 111q135 -14 191 -54t56 -118q0 -98 -102 -150.5t-262 -60.5z" /> +<glyph unicode="ȷ" horiz-adv-x="569" d="M-104 -373l53 221q47 -14 80 -14q59 0 82.5 39t23.5 125v1018h301v-1010q0 -408 -362 -407q-106 0 -178 28z" /> +<glyph unicode="ɑ" horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph unicode="ə" horiz-adv-x="1056" d="M70 467q0 70 14 127h606q-33 217 -233 217q-109 0 -221 -68l-101 183q176 115 373 114q207 0 341 -144t134 -388q0 -240 -139 -386.5t-336 -146.5q-209 0 -323.5 136.5t-114.5 355.5zM328 408q0 -203 172 -203q166 0 194 203h-366z" /> +<glyph unicode="ɡ" horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM395 530q0 -125 50.5 -193.5t138.5 -68.5 q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194z" /> +<glyph unicode="ʰ" horiz-adv-x="786" d="M86 532v947h213v-230l-14 -125q94 98 211 99q213 0 213 -277v-414h-213v390q0 68 -15.5 95t-67 27t-114.5 -63v-449h-213z" /> +<glyph unicode="ʲ" horiz-adv-x="389" d="M-68 270l37 160q20 -10 54 -10q39 0 53 23.5t14 80.5v682h213v-674q0 -278 -248 -278q-66 0 -123 16zM76 1407q0 47 33.5 76.5t87 29.5t87 -30.5t33.5 -75.5q0 -47 -33.5 -78t-87 -31t-87 31t-33.5 78z" /> +<glyph unicode="ʳ" horiz-adv-x="557" d="M86 532v674h172l16 -116h5q78 133 192 133q53 0 86 -15l-37 -182q-45 10 -74 10q-98 0 -147 -118v-386h-213z" /> +<glyph unicode="ʷ" horiz-adv-x="1071" d="M33 1206h211l59 -303l31 -203h6l37 203l78 303h170l82 -303l38 -203h7l32 203l60 303h194l-159 -674h-248l-60 259l-32 186h-4l-33 -186l-58 -259h-243z" /> +<glyph unicode="ʸ" horiz-adv-x="722" d="M16 1206h213l93 -278q2 -6 51 -193h8q4 16 47 193l76 278h203l-230 -671q-53 -135 -120.5 -195.5t-186.5 -60.5q-55 0 -100 12l36 160q29 -10 48 -11q88 0 116 84l11 31z" /> +<glyph unicode="ʻ" horiz-adv-x="614" d="M113 961q-1 295 290 438l66 -131q-184 -92 -184 -260q6 2 20 2q66 0 112 -41t46 -109q0 -76 -44 -122t-114 -46q-94 0 -143 71t-49 198z" /> +<glyph unicode="ʼ" horiz-adv-x="614" d="M145 852q184 92 185 260q-6 -2 -19 -2q-68 0 -112.5 41t-44.5 109q0 76 44 121.5t113 45.5q92 0 142.5 -69.5t50.5 -198.5q0 -295 -293 -438z" /> +<glyph unicode="ʾ" horiz-adv-x="335" d="M53 1122v111q117 0 117 98.5t-117 98.5v110q129 6 196.5 -51t67.5 -157.5t-67.5 -158t-196.5 -51.5z" /> +<glyph unicode="ʿ" horiz-adv-x="344" d="M27 1331.5q0 100.5 66.5 157.5t197.5 51v-110q-117 0 -117 -98.5t117 -98.5v-111q-131 -6 -197.5 51.5t-66.5 158z" /> +<glyph unicode="ˆ" horiz-adv-x="1136" d="M252 1176l197 307h239l197 -307h-203l-109 161h-8l-110 -161h-203z" /> +<glyph unicode="ˇ" horiz-adv-x="1136" d="M252 1483h203l110 -162h8l109 162h203l-197 -307h-239z" /> +<glyph unicode="ˈ" horiz-adv-x="301" d="M31 1516h241l-12 -410h-217z" /> +<glyph unicode="ˉ" horiz-adv-x="630" d="M33 1212v191h565v-191h-565z" /> +<glyph unicode="ˊ" horiz-adv-x="483" d="M74 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="ˋ" horiz-adv-x="483" d="M-66 1483h291l183 -307h-220z" /> +<glyph unicode="ˌ" horiz-adv-x="301" d="M31 -543l12 412h217l12 -412h-241z" /> +<glyph unicode="˘" horiz-adv-x="1136" d="M283 1460h168q18 -119 118 -119q98 0 117 119h168q-4 -121 -76.5 -202.5t-208 -81.5t-209 81.5t-77.5 202.5z" /> +<glyph unicode="˙" horiz-adv-x="1136" d="M401 1323q0 70 47.5 114t120.5 44q72 0 119 -44t47 -114t-47 -114t-119 -44q-74 0 -121 44t-47 114z" /> +<glyph unicode="˚" horiz-adv-x="1136" d="M338 1331q0 94 63.5 151.5t167.5 57.5q102 0 166 -57.5t64 -151.5t-64 -151.5t-166 -57.5q-104 0 -167.5 57.5t-63.5 151.5zM485 1331q0 -43 23.5 -69.5t60.5 -26.5q35 0 58.5 26.5t23.5 69.5t-23.5 69.5t-58.5 26.5q-37 0 -60.5 -26.5t-23.5 -69.5z" /> +<glyph unicode="˛" horiz-adv-x="1136" d="M391 -244q0 80 46 145.5t100 102.5h168q-111 -90 -111 -178q0 -39 25.5 -58.5t60.5 -19.5q37 0 74 25l61 -135q-84 -68 -207 -68q-94 0 -155.5 49t-61.5 137z" /> +<glyph unicode="˜" horiz-adv-x="1136" d="M229 1178q14 135 71.5 205.5t139.5 70.5q59 0 139 -45t105 -45q49 0 70 90h153q-14 -135 -70.5 -205.5t-140.5 -70.5q-61 0 -139 46t-102 46q-51 0 -72 -92h-154z" /> +<glyph unicode="˝" horiz-adv-x="1136" d="M311 1174l142 309h239l-196 -309h-185zM662 1174l141 309h237l-194 -309h-184z" /> +<glyph unicode="ˡ" horiz-adv-x="397" d="M86 752v727h213v-736q0 -59 35 -59q14 0 26 4l25 -153q-45 -18 -104 -19q-195 0 -195 236z" /> +<glyph unicode="ˢ" horiz-adv-x="608" d="M31 606l92 133q98 -70 176 -69q80 0 80 53q0 12 -6 21.5t-22.5 18.5t-28 14t-39 16.5t-39.5 15.5q-180 70 -181 201q0 94 73 153.5t190 59.5q131 0 243 -86l-94 -125q-86 57 -143 57q-72 0 -72 -51q0 -8 3 -15.5t11.5 -13.5t16.5 -11t22.5 -10t24.5 -9.5t28.5 -10.5 t28.5 -10q180 -66 180 -201q0 -98 -74.5 -159.5t-207.5 -61.5q-141 0 -262 90z" /> +<glyph unicode="ˣ" horiz-adv-x="712" d="M16 532l213 351l-198 323h227l55 -104l58 -105h8l41 105l45 104h221l-199 -348l209 -326h-225l-59 105l-66 104h-8l-51 -104l-49 -105h-222z" /> +<glyph unicode="̀" d="M-305 1483h291l182 -307h-219z" /> +<glyph unicode="́" d="M-168 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="̂" d="M-315 1176l196 307h238l196 -307h-202l-109 161h-8l-109 -161h-202z" /> +<glyph unicode="̃" d="M-340 1178q14 135 71.5 205.5t141.5 70.5q59 0 138 -45t104 -45q49 0 71 90h154q-14 -135 -71.5 -205.5t-141.5 -70.5q-59 0 -138 46t-104 46q-49 0 -71 -92h-154z" /> +<glyph unicode="̄" d="M-283 1212v191h566v-191h-566z" /> +<glyph unicode="̆" d="M-285 1460h168q6 -53 36 -86t81 -33t81 33t36 86h168q-4 -121 -77 -202.5t-208 -81.5t-208 81.5t-77 202.5z" /> +<glyph unicode="̇" d="M-166 1323q0 70 46 114t120 44t120 -44t46 -114t-46 -114t-120 -44t-120 44t-46 114z" /> +<glyph unicode="̈" d="M-346 1313q0 59 40 100t103.5 41t103.5 -41t40 -100q0 -61 -40 -102.5t-103.5 -41.5t-103.5 41t-40 103zM59 1313q0 59 40 100t103.5 41t103.5 -41t40 -100q0 -61 -40 -102.5t-103.5 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="̉" d="M-166 1389l35 151q344 -10 344 -188q0 -98 -80 -150.5t-205 -60.5l-22 119q90 14 90 61q0 59 -162 68z" /> +<glyph unicode="̊" d="M-231 1331q0 94 63.5 151.5t167.5 57.5t167.5 -57.5t63.5 -151.5t-63.5 -151.5t-167.5 -57.5t-167.5 57.5t-63.5 151.5zM-84 1331q0 -43 23.5 -69.5t60.5 -26.5t60.5 26.5t23.5 69.5t-23.5 69.5t-60.5 26.5t-60.5 -26.5t-23.5 -69.5z" /> +<glyph unicode="̋" d="M-256 1174l139 309h240l-195 -309h-184zM92 1174l141 309h240l-194 -309h-187z" /> +<glyph unicode="̌" d="M-315 1483h202l109 -162h8l109 162h202l-196 -307h-238z" /> +<glyph unicode="̏" d="M-473 1483h240l141 -309h-187zM-123 1483h240l139 -309h-184z" /> +<glyph unicode="̒" d="M-139 1284q-1 186 202 264l46 -92q-115 -41 -127 -121q4 2 14 2q45 0 76.5 -29.5t31.5 -76.5q0 -53 -31.5 -85t-76.5 -32q-135 0 -135 170z" /> +<glyph unicode="̓" d="M-115 1200q115 43 127 123q-4 -2 -16 -2q-45 0 -76 28.5t-31 75.5q0 53 31 85t78 32q135 0 135 -170q0 -186 -203 -264z" /> +<glyph unicode="̛" d="M-20 995q68 12 102.5 40t34.5 87q0 49 -33 95l207 90q59 -72 59 -164q0 -127 -96 -194t-252 -75z" /> +<glyph unicode="̣" d="M-166 -305.5q0 69.5 46 114t120 44.5t120 -44.5t46 -114t-46 -113.5t-120 -44t-120 44t-46 113.5z" /> +<glyph unicode="̤" d="M-346 -299q0 61 41 102t102.5 41t102.5 -41t41 -102t-40 -102t-103.5 -41t-103.5 41t-40 102zM59 -299q0 61 41 102t102.5 41t102.5 -41t41 -102t-40 -102t-103.5 -41t-103.5 41t-40 102z" /> +<glyph unicode="̦" d="M-211 -348q170 18 170 76q0 51 -90 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -101.5 -150.5t-260.5 -60.5z" /> +<glyph unicode="̧" d="M-211 -332q170 18 170 90q0 57 -121 86l82 164h176l-41 -96q119 -39 119 -152q0 -100 -101.5 -152t-260.5 -61z" /> +<glyph unicode="̨" d="M-176 -244q0 80 45 145.5t98 102.5h170q-111 -86 -110 -178q0 -39 25.5 -58.5t60 -19.5t71.5 25l64 -135q-88 -68 -207 -68q-94 0 -155.5 49t-61.5 137z" /> +<glyph unicode="̮" d="M-285 -145h168q14 -121 116.5 -121t117.5 121h168q-4 -121 -77 -203t-208 -82t-208 82t-77 203z" /> +<glyph unicode="̱" d="M-283 -195h566v-192h-566v192z" /> +<glyph unicode="π" horiz-adv-x="1241" d="M37 778v226l151 12h998v-238h-137v-467q0 -92 61 -92q23 0 41 4l35 -221q-57 -27 -156 -27q-283 0 -282 349v454h-236l-2 -778h-297v778h-176z" /> +<glyph unicode="ᵃ" horiz-adv-x="735" d="M59 721q0 109 91.5 167t291.5 79q-10 88 -100 88q-76 0 -184 -62l-76 142q156 88 297 88q133 0 204.5 -76t71.5 -227v-388h-170l-20 68h-8q-85 -84 -191 -84q-92 0 -149.5 59.5t-57.5 145.5zM262 737q0 -59 76 -59q49 0 104 51v115q-180 -23 -180 -107z" /> +<glyph unicode="ᵇ" horiz-adv-x="788" d="M86 532v947h213v-230l-8 -102q86 76 178 76q123 0 194.5 -93.5t71.5 -246.5q0 -168 -83 -267.5t-199 -99.5q-104 0 -179 88h-8l-16 -72h-164zM299 723q47 -39 102 -39q51 0 84 48t33 147q0 174 -110 174q-53 0 -109 -58v-272z" /> +<glyph unicode="ᵈ" horiz-adv-x="788" d="M53 883q0 152 86 246t197 94q98 0 166 -72l-10 111v217h213v-947h-175l-16 64h-4q-84 -80 -176 -80q-131 0 -206 96.5t-75 270.5zM270 883q0 -199 121 -199q57 0 101 59v271q-49 41 -103 41q-51 0 -85 -45t-34 -127z" /> +<glyph unicode="ᵉ" horiz-adv-x="708" d="M49 870q0 156 95.5 254.5t228.5 98.5q143 0 217 -93.5t74 -230.5q0 -47 -11 -84h-401q23 -137 172 -137q82 0 147 41l72 -127q-115 -76 -248 -76q-150 0 -248 96.5t-98 257.5zM248 934h237q0 127 -110 127q-107 0 -127 -127z" /> +<glyph unicode="ᵍ" horiz-adv-x="739" d="M47 418q0 84 94 131v8q-61 41 -61 115q0 76 76 125v8q-92 57 -93 172q0 117 83 181.5t202 64.5q68 0 109 -17h248v-155h-105q18 -29 18 -80q0 -111 -76.5 -169.5t-193.5 -58.5q-41 0 -80 13q-23 -23 -22 -47q0 -45 100 -45h109q131 0 195.5 -41t64.5 -131 q0 -106 -104.5 -175t-280.5 -69q-127 0 -205 42t-78 128zM219 453q0 -74 146 -74q66 0 106.5 22.5t40.5 55.5q0 47 -98 47h-68q-63 0 -92 8q-35 -24 -35 -59zM260 977q0 -51 24.5 -79t63.5 -28t63.5 28t24.5 79t-24.5 77.5t-63.5 26.5t-63.5 -26.5t-24.5 -77.5z" /> +<glyph unicode="ᵏ" horiz-adv-x="759" d="M86 532v947h213v-533h8l199 260h229l-246 -284l263 -390h-230l-151 254l-72 -90v-164h-213z" /> +<glyph unicode="ᵐ" horiz-adv-x="1181" d="M86 532v674h172l16 -88h5q100 104 204 105q133 0 191 -115q106 115 213 115q109 0 163 -73t54 -204v-414h-213v390q0 63 -18.5 92.5t-65.5 29.5q-41 0 -107 -61v-451h-211v390q0 63 -18 92.5t-65 29.5q-45 0 -107 -61v-451h-213z" /> +<glyph unicode="ᵒ" horiz-adv-x="763" d="M49 868q0 162 97.5 258.5t234.5 96.5t234.5 -96.5t97.5 -258.5q0 -160 -97.5 -256t-234.5 -96t-234.5 96.5t-97.5 255.5zM266 868q0 -184 115 -184q117 0 117 184q0 186 -117 187q-115 0 -115 -187z" /> +<glyph unicode="ᵖ" horiz-adv-x="788" d="M86 260v946h170l14 -67h6q88 84 193 84q123 0 194.5 -93.5t71.5 -246.5q0 -168 -83 -267.5t-199 -99.5q-90 0 -166 72l12 -137v-191h-213zM299 723q47 -39 102 -39q51 0 84 48t33 147q0 174 -110 174q-53 0 -109 -58v-272z" /> +<glyph unicode="ᵗ" horiz-adv-x="530" d="M25 1042v158l102 6l25 176h178v-176h157v-164h-157v-256q0 -106 84 -106q37 0 61 10l37 -149q-78 -25 -158 -25q-237 0 -237 268v258h-92z" /> +<glyph unicode="ᵘ" horiz-adv-x="784" d="M80 786v420h211v-391q0 -66 16.5 -93.5t69.5 -27.5t112 62v450h213v-674h-170l-22 84h-4q-100 -100 -211 -100q-215 0 -215 270z" /> +<glyph unicode="ᵛ" horiz-adv-x="727" d="M16 1206h211l82 -309l58 -209h4l53 209l84 309h203l-224 -674h-245z" /> +<glyph unicode="ᶜ" horiz-adv-x="641" d="M49 870q0 160 100.5 256.5t243.5 96.5q139 0 213 -70l-98 -135q-47 37 -96 37q-63 0 -104.5 -51.5t-41.5 -133.5q0 -84 40 -135t104 -51q61 0 118 45l86 -135q-94 -78 -231 -78q-147 0 -240.5 94.5t-93.5 259.5z" /> +<glyph unicode="ᶠ" horiz-adv-x="475" d="M31 1042v158l92 6v25q0 123 62.5 200.5t195.5 77.5q82 1 137 -24l-39 -150q-45 10 -69 11q-74 0 -74 -107v-33h119v-164h-119v-510h-213v510h-92z" /> +<glyph unicode="ᶻ" horiz-adv-x="638" d="M51 532v115l281 395h-246v164h510v-114l-281 -396h289v-164h-553z" /> +<glyph unicode="Ḍ" horiz-adv-x="1282" d="M139 0v1335h379q317 0 493.5 -163.5t176.5 -497.5t-175 -504t-478 -170h-396zM442 244h58q379 0 379 430q0 227 -98.5 322.5t-280.5 95.5h-58v-848zM457 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ḍ" horiz-adv-x="1173" d="M80 508q0 240 126 386t296 146q137 0 250 -106l-13 156v346h301v-1436h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM473 -305.5q0 69.5 46 114t120 44.5 t121 -44.5t47 -114t-47 -113.5t-121 -44t-120 44t-46 113.5z" /> +<glyph unicode="Ḏ" horiz-adv-x="1282" d="M139 0v1335h379q317 0 493.5 -163.5t176.5 -497.5t-175 -504t-478 -170h-396zM340 -195h565v-192h-565v192zM442 244h58q379 0 379 430q0 227 -98.5 322.5t-280.5 95.5h-58v-848z" /> +<glyph unicode="ḏ" horiz-adv-x="1173" d="M80 508q0 240 126 386t296 146q137 0 250 -106l-13 156v346h301v-1436h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM356 -195h566v-192h-566v192zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph unicode="Ḡ" horiz-adv-x="1302" d="M92 659q0 322 188.5 511.5t469.5 189.5q242 0 415 -174l-166 -187q-111 100 -245 101q-156 0 -254.5 -116t-98.5 -314q0 -209 95.5 -321.5t281.5 -112.5q90 0 142 40v230h-222v246h490v-615q-80 -70 -199 -116t-250 -46q-283 0 -465 179t-182 505zM461 1475v190h579v-190 h-579z" /> +<glyph unicode="ḡ" horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-94 61 -94 172q0 113 115 190v9q-59 41 -98.5 110.5t-39.5 153.5q0 174 122 270t298 96q90 0 158 -24h371v-219h-162q33 -55 33 -133q0 -168 -112 -255t-288 -87q-59 0 -123 20q-37 -31 -37 -76q0 -76 154 -76h164q387 0 387 -258 q0 -160 -154.5 -262t-412.5 -102q-190 0 -308 64.5t-118 193.5zM231 1212v191h566v-191h-566zM317 -127q0 -55 60.5 -86t165.5 -31q100 0 166.5 36t66.5 89q0 45 -38 62.5t-117 17.5h-105q-94 0 -143 12q-56 -49 -56 -100zM379 674q0 -82 39 -126t100.5 -44t100 44t38.5 126 q0 78 -38.5 121t-100 43t-100.5 -42t-39 -122z" /> +<glyph unicode="Ḥ" horiz-adv-x="1376" d="M156 0v1335h303v-514h461v514h301v-1335h-301v557h-461v-557h-303zM520 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ḥ" horiz-adv-x="1169" d="M133 0v1436h301v-353l-14 -182q156 139 313 139q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM434 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="Ḫ" horiz-adv-x="1376" d="M156 0v1335h303v-514h461v514h301v-1335h-301v557h-461v-557h-303zM401 -145h168q18 -121 117 -121q102 0 117 121h168q-4 -121 -77 -203t-208 -82t-207.5 82t-77.5 203z" /> +<glyph unicode="ḫ" horiz-adv-x="1169" d="M133 0v1436h301v-353l-14 -182q156 139 313 139q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM315 -145h168q14 -121 116.5 -121t117.5 121h168q-4 -121 -77 -203t-208 -82t-208 82t-77 203z" /> +<glyph unicode="Ḷ" horiz-adv-x="1056" d="M156 0v1335h303v-1081h526v-254h-829zM426 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ḷ" horiz-adv-x="585" d="M133 315v1121h301v-1133q0 -84 53 -84q20 0 37 4l37 -223q-55 -25 -151 -25q-277 0 -277 340zM223 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="Ḹ" horiz-adv-x="1056" d="M25 1475v190h579v-190h-579zM156 0v1335h303v-1081h526v-254h-829zM426 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ḹ" horiz-adv-x="585" d="M-2 1645v192h565v-192h-565zM133 315v1121h301v-1133q0 -84 53 -84q20 0 37 4l37 -223q-55 -25 -151 -25q-277 0 -277 340zM223 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="Ḻ" horiz-adv-x="1056" d="M156 0v1335h303v-1081h526v-254h-829zM309 -195h565v-192h-565v192z" /> +<glyph unicode="ḻ" horiz-adv-x="585" d="M106 -195h566v-192h-566v192zM133 315v1121h301v-1133q0 -84 53 -84q20 0 37 4l37 -223q-55 -25 -151 -25q-277 0 -277 340z" /> +<glyph unicode="Ṃ" horiz-adv-x="1558" d="M156 0v1335h319l223 -600l80 -233h8l80 233l217 600h320v-1335h-283v489q0 104 39 455h-8l-109 -309l-206 -518h-121l-205 518l-107 309h-8q39 -350 39 -455v-489h-278zM616 -305.5q0 69.5 47.5 114t118.5 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44 q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ṃ" horiz-adv-x="1755" d="M133 0v1016h246l20 -131h9q156 156 307 155q201 0 280 -170q80 82 154 126t166 44q317 0 317 -409v-631h-301v592q0 109 -29.5 150.5t-95.5 41.5q-76 0 -174 -98v-686h-301v592q0 109 -29.5 150.5t-95.5 41.5q-76 0 -172 -98v-686h-301zM733 -305.5q0 69.5 46 114 t120 44.5t121 -44.5t47 -114t-47 -113.5t-121 -44t-120 44t-46 113.5z" /> +<glyph unicode="Ṅ" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-39 383 -39 487v471h287v-1335h-309l-348 666l-131 290h-8q39 -399 38 -483v-473h-288zM508 1593.5q0 69.5 49 113.5t125 44t125 -44t49 -113.5t-49 -113.5t-125 -44t-125 44t-49 113.5z" /> +<glyph unicode="ṅ" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q162 154 325 153q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM463 1323q0 70 47 114t121 44t120 -44t46 -114t-46 -114t-120 -44t-121 44t-47 114z" /> +<glyph unicode="Ṇ" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-39 383 -39 487v471h287v-1335h-309l-348 666l-131 290h-8q39 -399 38 -483v-473h-288zM537 -305.5q0 69.5 46 114t119.5 44.5t120.5 -44.5t47 -114t-47 -113.5t-120.5 -44t-119.5 44t-46 113.5z" /> +<glyph unicode="ṇ" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q162 154 325 153q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM430 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="Ṉ" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-39 383 -39 487v471h287v-1335h-309l-348 666l-131 290h-8q39 -399 38 -483v-473h-288zM420 -195h565v-192h-565v192z" /> +<glyph unicode="ṉ" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q162 154 325 153q315 0 316 -409v-631h-301v592q0 109 -30 150.5t-95 41.5q-53 0 -94.5 -22.5t-94.5 -75.5v-686h-301zM313 -195h566v-192h-566v192z" /> +<glyph unicode="Ṛ" horiz-adv-x="1259" d="M156 0v1335h481q516 0 516 -415q0 -279 -238 -385l302 -535h-338l-256 481h-164v-481h-303zM459 721h153q244 0 244 199q0 94 -60.5 135t-183.5 41h-153v-375zM502 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47.5 -113.5t-120.5 -44q-72 0 -119 44 t-47 113.5z" /> +<glyph unicode="ṛ" horiz-adv-x="815" d="M115 -305.5q0 69.5 47 114t120.5 44.5t120 -44.5t46.5 -114t-46.5 -113.5t-120 -44t-120.5 44t-47 113.5zM133 0v1016h246l20 -178h9q53 100 129.5 151t158.5 51q74 0 121 -20l-49 -260q-59 16 -111 16q-63 0 -124.5 -45t-98.5 -141v-590h-301z" /> +<glyph unicode="Ṝ" horiz-adv-x="1259" d="M156 0v1335h481q516 0 516 -415q0 -279 -238 -385l302 -535h-338l-256 481h-164v-481h-303zM344 1475v190h578v-190h-578zM459 721h153q244 0 244 199q0 94 -60.5 135t-183.5 41h-153v-375zM502 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47.5 -113.5 t-120.5 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ṝ" horiz-adv-x="815" d="M115 -305.5q0 69.5 47 114t120.5 44.5t120 -44.5t46.5 -114t-46.5 -113.5t-120 -44t-120.5 44t-47 113.5zM133 0v1016h246l20 -178h9q53 100 129.5 151t158.5 51q74 0 121 -20l-49 -260q-59 16 -111 16q-63 0 -124.5 -45t-98.5 -141v-590h-301zM223 1212v191h565v-191 h-565z" /> +<glyph unicode="Ṟ" horiz-adv-x="1259" d="M156 0v1335h481q516 0 516 -415q0 -279 -238 -385l302 -535h-338l-256 481h-164v-481h-303zM385 -195h565v-192h-565v192zM459 721h153q244 0 244 199q0 94 -60.5 135t-183.5 41h-153v-375z" /> +<glyph unicode="ṟ" horiz-adv-x="815" d="M-2 -195h567v-192h-567v192zM133 0v1016h246l20 -178h9q53 100 129.5 151t158.5 51q74 0 121 -20l-49 -260q-59 16 -111 16q-63 0 -124.5 -45t-98.5 -141v-590h-301z" /> +<glyph unicode="Ṡ" horiz-adv-x="1134" d="M70 168l174 207q160 -139 327 -139q186 0 187 129q0 68 -86 112q-23 12 -107 47l-172 74q-117 47 -193.5 138t-76.5 227q0 168 135 282.5t340 114.5q254 0 430 -176l-151 -191q-139 106 -279 107q-78 0 -124 -33t-46 -88q0 -37 27.5 -64.5t55.5 -41t97 -42.5l8 -3 q2 -1 7.5 -3t9.5 -4l170 -69q264 -106 264 -363q0 -174 -136 -294t-366 -120q-286 0 -495 193zM420 1593.5q0 69.5 49 113.5t127 44q76 0 125 -44t49 -113.5t-49 -113.5t-125 -44q-78 0 -127 44t-49 113.5z" /> +<glyph unicode="ṡ" horiz-adv-x="907" d="M43 117l135 188q141 -106 262 -106q129 0 129 86q0 10 -3 20t-11 19.5t-15.5 16.5t-22.5 15.5t-25.5 14.5t-30 14t-30.5 12t-33.5 13.5t-35.5 13.5q-268 102 -268 299q0 141 106.5 229t282.5 88q184 0 359 -129l-135 -180q-119 86 -215 86q-115 0 -115 -80q0 -14 5 -25.5 t17.5 -22.5t22.5 -18t32.5 -16.5t35 -14.5t43 -16.5t42.5 -15.5q125 -45 200 -112.5t75 -192.5q0 -143 -109.5 -235.5t-308.5 -92.5q-98 0 -204.5 39.5t-184.5 102.5zM315 1323q0 70 47.5 114t121 44t119.5 -44t46 -114t-46 -114t-119.5 -44t-121 44t-47.5 114z" /> +<glyph unicode="Ṣ" horiz-adv-x="1134" d="M70 168l174 207q160 -139 327 -139q186 0 187 129q0 68 -86 112q-23 12 -107 47l-172 74q-117 47 -193.5 138t-76.5 227q0 168 135 282.5t340 114.5q254 0 430 -176l-151 -191q-139 106 -279 107q-78 0 -124 -33t-46 -88q0 -37 27.5 -64.5t55.5 -41t97 -42.5l8 -3 q2 -1 7.5 -3t9.5 -4l170 -69q264 -106 264 -363q0 -174 -136 -294t-366 -120q-286 0 -495 193zM403 -305.5q0 69.5 47.5 114t120.5 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="ṣ" horiz-adv-x="907" d="M43 117l135 188q141 -106 262 -106q129 0 129 86q0 10 -3 20t-11 19.5t-15.5 16.5t-22.5 15.5t-25.5 14.5t-30 14t-30.5 12t-33.5 13.5t-35.5 13.5q-268 102 -268 299q0 141 106.5 229t282.5 88q184 0 359 -129l-135 -180q-119 86 -215 86q-115 0 -115 -80q0 -14 5 -25.5 t17.5 -22.5t22.5 -18t32.5 -16.5t35 -14.5t43 -16.5t42.5 -15.5q125 -45 200 -112.5t75 -192.5q0 -143 -109.5 -235.5t-308.5 -92.5q-98 0 -204.5 39.5t-184.5 102.5zM309 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44 t-47 113.5z" /> +<glyph unicode="Ṭ" horiz-adv-x="1136" d="M49 1081v254h1036v-254h-366v-1081h-301v1081h-369zM401 -305.5q0 69.5 47.5 114t120.5 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="ṭ" horiz-adv-x="784" d="M35 780v224l155 12l35 270h250v-270h244v-236h-244v-407q0 -162 131 -162q43 0 96 20l48 -219q-119 -37 -226 -37q-350 1 -350 394v411h-139zM315 -305.5q0 69.5 47.5 114t120.5 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="Ṯ" horiz-adv-x="1136" d="M49 1081v254h1036v-254h-366v-1081h-301v1081h-369zM285 -195h567v-192h-567v192z" /> +<glyph unicode="ṯ" horiz-adv-x="784" d="M35 780v224l155 12l35 270h250v-270h244v-236h-244v-407q0 -162 131 -162q43 0 96 20l48 -219q-119 -37 -226 -37q-350 1 -350 394v411h-139zM199 -195h565v-192h-565v192z" /> +<glyph unicode="Ẁ" horiz-adv-x="1662" d="M27 1335h309l92 -624q18 -139 55 -422h9q29 164 77 422l144 624h256l145 -624q27 -135 80 -422h8q20 170 53 422l93 624h288l-237 -1335h-379l-131 606q-31 150 -53 309h-9q-43 -258 -53 -309l-127 -606h-373zM500 1683h319l166 -245h-240z" /> +<glyph unicode="ẁ" horiz-adv-x="1589" d="M49 1016h299l98 -471q8 -51 22.5 -151.5t23.5 -149.5h8q41 231 59 301l113 471h260l115 -471q18 -74 63 -301h8q8 51 22.5 150.5t24.5 150.5l97 471h278l-244 -1016h-352l-92 406q-23 102 -55 296h-9q-45 -266 -51 -296l-90 -406h-344zM492 1483h290l183 -307h-222z" /> +<glyph unicode="Ẃ" horiz-adv-x="1662" d="M27 1335h309l92 -624q18 -139 55 -422h9q29 164 77 422l144 624h256l145 -624q27 -135 80 -422h8q20 170 53 422l93 624h288l-237 -1335h-379l-131 606q-31 150 -53 309h-9q-43 -258 -53 -309l-127 -606h-373zM678 1438l166 245h319l-243 -245h-242z" /> +<glyph unicode="ẃ" horiz-adv-x="1589" d="M49 1016h299l98 -471q8 -51 22.5 -151.5t23.5 -149.5h8q41 231 59 301l113 471h260l115 -471q18 -74 63 -301h8q8 51 22.5 150.5t24.5 150.5l97 471h278l-244 -1016h-352l-92 406q-23 102 -55 296h-9q-45 -266 -51 -296l-90 -406h-344zM629 1176l182 307h291l-254 -307 h-219z" /> +<glyph unicode="Ẅ" horiz-adv-x="1662" d="M27 1335h309l92 -624q18 -139 55 -422h9q29 164 77 422l144 624h256l145 -624q27 -135 80 -422h8q20 170 53 422l93 624h288l-237 -1335h-379l-131 606q-31 150 -53 309h-9q-43 -258 -53 -309l-127 -606h-373zM485 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102 t-103.5 -41t-103.5 41t-40 102zM891 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102z" /> +<glyph unicode="ẅ" horiz-adv-x="1589" d="M49 1016h299l98 -471q8 -51 22.5 -151.5t23.5 -149.5h8q41 231 59 301l113 471h260l115 -471q18 -74 63 -301h8q8 51 22.5 150.5t24.5 150.5l97 471h278l-244 -1016h-352l-92 406q-23 102 -55 296h-9q-45 -266 -51 -296l-90 -406h-344zM451 1313q0 59 40.5 100t102 41 t102.5 -41t41 -100q0 -61 -40 -102.5t-103.5 -41.5t-103 41t-39.5 103zM856 1313q0 59 41 100t102.5 41t102.5 -41t41 -100q0 -61 -40 -102.5t-103.5 -41.5t-103.5 41t-40 103z" /> +<glyph unicode="Ẏ" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475zM362 1593.5q0 69.5 49.5 113.5t125 44t125 -44t49.5 -113.5t-49.5 -113.5t-125 -44t-125 44t-49.5 113.5z" /> +<glyph unicode="ẏ" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54zM379 1323q0 70 47 114t121 44t120 -44t46 -114t-46 -114t-120 -44t-121 44t-47 114z" /> +<glyph unicode="Ẓ" horiz-adv-x="1105" d="M72 0v182l590 899h-535v254h907v-182l-590 -899h594v-254h-966zM410 -305.5q0 69.5 46 114t119.5 44.5t120.5 -44.5t47 -114t-47 -113.5t-120.5 -44t-119.5 44t-46 113.5z" /> +<glyph unicode="ẓ" horiz-adv-x="942" d="M78 0v162l426 618h-379v236h754v-160l-426 -620h440v-236h-815zM336 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ẗ" horiz-adv-x="784" d="M-4 1599.5q0 61.5 41 102.5t102.5 41t102.5 -41t41 -102.5t-40 -102.5t-103.5 -41t-103.5 41t-40 102.5zM35 780v224l155 12l35 270h250v-270h244v-236h-244v-407q0 -162 131 -162q43 0 96 20l48 -219q-119 -37 -226 -37q-350 1 -350 394v411h-139zM401 1599.5 q0 61.5 41 102.5t102.5 41t102.5 -41t41 -102.5t-40 -102.5t-103.5 -41t-103.5 41t-40 102.5z" /> +<glyph unicode="ẞ" horiz-adv-x="1441" d="M164 0v838q0 233 142.5 377.5t430.5 144.5q197 0 329 -101.5t179 -273.5l-221 -250q338 -106 338 -370q0 -170 -109.5 -280t-306.5 -110q-233 0 -381 148l158 184q88 -88 186 -88q66 0 105 41t39 107q0 141 -310 196l-18 176l223 256q-66 121 -219 121q-264 0 -264 -319 v-797h-301z" /> +<glyph unicode="Ạ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM412 -305.5q0 69.5 47 114t119 44.5q74 0 120.5 -44.5t46.5 -114t-47 -113.5t-120 -44q-72 0 -119 44t-47 113.5zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ạ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM373 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5 t-119 -44q-74 0 -121 44t-47 113.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ả" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM412 1665l34 150q344 -8 345 -187q0 -100 -79 -151.5t-206 -61.5l-23 119q90 18 90 61q0 57 -161 70zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ả" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM408 1389l34 151 q346 -10 346 -188q0 -98 -79.5 -150.5t-206.5 -60.5l-23 119q92 14 92 61q0 59 -163 68z" /> +<glyph unicode="Ấ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM254 1438l195 233h260l194 -233h-213l-108 112h-9l-106 -112h-213zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430zM809 1577l141 246h234l-203 -246h-172z" /> +<glyph unicode="ấ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM289 1176l166 262h239l166 -262h-186l-94 133h-9l-96 -133h-186zM383 305 q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM795 1323l139 242h223l-194 -242h-168z" /> +<glyph unicode="Ầ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM254 1438l195 233h260l194 -233h-213l-108 112h-9l-106 -112h-213zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430zM692 1823h234l139 -246h-170z" /> +<glyph unicode="ầ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM289 1176l166 262h239l166 -262h-186l-94 133h-9l-96 -133h-186zM383 305 q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM723 1565h223l139 -242h-167z" /> +<glyph unicode="Ẩ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM254 1438l195 233h260l194 -233h-213l-108 112h-9l-106 -112h-213zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430zM768 1755l29 123q299 -8 299 -164q0 -160 -236 -178l-24 96 q68 14 67 56q0 57 -135 67z" /> +<glyph unicode="ẩ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM289 1176l166 262h239l166 -262h-186l-94 133h-9l-96 -133h-186zM383 305 q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM766 1513l27 127q303 -8 303 -161q0 -92 -62.5 -134.5t-177.5 -58.5l-18 103q61 14 61 57q0 59 -133 67z" /> +<glyph unicode="Ẫ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM254 1438l195 233h260l194 -233h-213l-108 112h-9l-106 -112h-213zM272 1745q12 115 63.5 173t123.5 58q61 0 130.5 -37.5t92.5 -37.5q54 -1 72 75h131q-12 -115 -63.5 -173t-123.5 -58q-61 0 -130.5 39 t-92.5 39q-57 0 -72 -78h-131zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ẫ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM272 1174l166 227h273l166 -227h-197l-100 120h-9l-102 -120h-197zM276 1475 q12 117 62.5 175t124.5 58q61 0 123.5 -39t85.5 -39q55 0 71 78h131q-12 -115 -63 -174t-123 -59q-61 0 -124.5 38.5t-84.5 38.5q-57 1 -73 -77h-130zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ậ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM236 1438l196 245h293l197 -245h-230l-110 125h-9l-108 -125h-229zM412 -305.5q0 69.5 47 114t119 44.5q74 0 120.5 -44.5t46.5 -114t-47 -113.5t-120 -44q-72 0 -119 44t-47 113.5zM436 553h287l-33 123 q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ậ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM258 1176l197 307h239l197 -307h-203l-108 161h-9l-110 -161h-203zM373 -305.5 q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ắ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM299 1683h137q27 -111 141.5 -111t143.5 111h137q-27 -246 -280 -245q-127 0 -197 65.5t-82 179.5zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430zM487 1655l131 243h226 l-205 -243h-152z" /> +<glyph unicode="ắ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM291 1460h133q23 -137 151 -137q127 0 150 137h135q-4 -121 -76.5 -202.5 t-208 -81.5t-208 81.5t-76.5 202.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM479 1417l119 242h217l-184 -242h-152z" /> +<glyph unicode="Ằ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM299 1683h137q27 -111 141.5 -111t143.5 111h137q-27 -246 -280 -245q-127 0 -197 65.5t-82 179.5zM311 1898h228l131 -243h-152zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z " /> +<glyph unicode="ằ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM291 1460h133q23 -137 151 -137q127 0 150 137h135q-4 -121 -76.5 -202.5 t-208 -81.5t-208 81.5t-76.5 202.5zM336 1659h215l119 -242h-152zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ẳ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM299 1683h137q27 -111 141.5 -111t143.5 111h137q-27 -246 -280 -245q-127 0 -197 65.5t-82 179.5zM420 1870l29 125q299 -10 299 -166q0 -160 -236 -178l-25 96q68 14 68 55q0 31 -29.5 46.5 t-105.5 21.5zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ẳ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM291 1460h133q23 -137 151 -137q127 0 150 137h135q-4 -121 -76.5 -202.5 t-208 -81.5t-208 81.5t-76.5 202.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168zM412 1657l28 127q303 -10 303 -164q0 -92 -63 -134t-176 -56l-21 102q63 14 64 57q0 31 -30 46.5t-105 21.5z" /> +<glyph unicode="Ẵ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM266 1745q12 115 64.5 174t124.5 59q51 0 121.5 -40t95.5 -40q58 0 76 80h133q-12 -115 -64.5 -174t-126.5 -59q-51 0 -120.5 39t-94.5 39q-59 0 -76 -78h-133zM299 1683h137q27 -111 141.5 -110.5 t143.5 110.5h137q-27 -246 -280 -245q-127 0 -197 65t-82 180zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ẵ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM276 1475q12 117 62.5 175t124.5 58q61 0 123.5 -39t85.5 -39q55 0 71 78h131 q-12 -115 -63 -174t-123 -59q-61 0 -124.5 38.5t-84.5 38.5q-57 0 -73 -77h-130zM291 1419h141q25 -102 143 -102q117 0 142 102h141q-4 -104 -76 -173.5t-207 -69.5q-137 0 -208.5 69.5t-75.5 173.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ặ" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM299 1683h164q23 -94 115 -94q93 0 116 94h164q-29 -246 -280 -245q-129 0 -199 65.5t-80 179.5zM412 -305.5q0 69.5 47 114t119 44.5q74 0 120.5 -44.5t46.5 -114t-47 -113.5t-120 -44q-72 0 -119 44 t-47 113.5zM436 553h287l-33 123q-20 72 -56 220t-52 210h-9q-53 -246 -104 -430z" /> +<glyph unicode="ặ" horiz-adv-x="1093" d="M96 283q0 162 136.5 251t435.5 119q-10 147 -160 148q-113 0 -270 -92l-107 198q221 133 434 133q403 0 404 -458v-582h-246l-23 104h-6q-147 -129 -297 -129q-135 0 -218 88.5t-83 219.5zM291 1460h168q14 -119 116 -119q98 0 117 119h168q-4 -121 -76.5 -202.5 t-208 -81.5t-208 81.5t-76.5 202.5zM373 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5zM383 305q0 -96 117 -96q82 0 168 86v178q-285 -39 -285 -168z" /> +<glyph unicode="Ẹ" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM434 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="ẹ" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM385 -305.5 q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="Ẻ" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM422 1665l35 150q346 -8 346 -187q0 -100 -79 -151.5t-206 -61.5l-24 119q92 18 92 61q0 57 -164 70z" /> +<glyph unicode="ẻ" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM387 1389l33 151 q346 -10 346 -188q0 -98 -80 -150.5t-205 -60.5l-24 119q92 14 92 61q0 59 -162 68z" /> +<glyph unicode="Ẽ" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM242 1440q14 135 74.5 206.5t144.5 71.5q59 0 139 -46t105 -46q59 0 79 92h154q-14 -135 -74.5 -206.5t-144.5 -71.5q-61 0 -141 46t-105 46q-57 0 -80 -92h-151z" /> +<glyph unicode="ẽ" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM213 1178q14 135 71.5 205.5t141.5 70.5q59 0 138 -45t104 -45q49 0 71 90h154 q-16 -135 -72.5 -205.5t-140.5 -70.5q-61 0 -139 46t-103 46q-51 0 -71 -92h-154zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5z" /> +<glyph unicode="Ế" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM264 1438l195 233h260l194 -233h-213l-106 112h-8l-109 -112h-213zM819 1577l142 246h233l-203 -246h-172z" /> +<glyph unicode="ế" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM268 1176l164 262h240l166 -262h-187l-94 133h-8l-96 -133h-185zM362 612h367 q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM772 1323l139 242h224l-195 -242h-168z" /> +<glyph unicode="Ề" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM264 1438l195 233h260l194 -233h-213l-106 112h-8l-109 -112h-213zM702 1823h234l141 -246h-172z" /> +<glyph unicode="ề" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM268 1176l164 262h240l166 -262h-187l-94 133h-8l-96 -133h-185zM362 612h367 q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM700 1565h224l139 -242h-168z" /> +<glyph unicode="Ể" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM264 1438l195 233h260l194 -233h-213l-106 112h-8l-109 -112h-213zM778 1755l29 123q299 -8 299 -164q0 -160 -236 -178l-24 96q68 14 67 56q0 31 -29.5 46t-105.5 21z" /> +<glyph unicode="ể" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM268 1176l164 262h240l166 -262h-187l-94 133h-8l-96 -133h-185zM362 612h367 q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM743 1513l27 127q303 -8 303 -161q0 -92 -62 -134.5t-177 -58.5l-19 103q61 14 62 57q0 59 -134 67z" /> +<glyph unicode="Ễ" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM264 1438l195 233h260l194 -233h-213l-106 112h-8l-109 -112h-213zM283 1745q12 115 63 173t123 58q61 0 131 -37.5t92 -37.5q57 0 72 75h131q-12 -115 -63.5 -173t-122.5 -58q-61 0 -131 39t-93 39 q-55 0 -71 -78h-131z" /> +<glyph unicode="ễ" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM252 1174l164 227h274l164 -227h-195l-102 120h-8l-103 -120h-194zM254 1475 q12 117 62.5 175t123.5 58q61 0 124 -39t85 -39q57 0 72 78h131q-12 -115 -63.5 -174t-122.5 -59q-61 0 -124 38.5t-85 38.5q-58 1 -74 -77h-129zM362 612h367q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5z" /> +<glyph unicode="Ệ" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM246 1438l196 245h293l197 -245h-230l-108 125h-8l-111 -125h-229zM434 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="ệ" horiz-adv-x="1056" d="M74 508q0 238 143 385t336 147q209 0 320.5 -135t111.5 -352q0 -78 -12 -127h-608q39 -221 264 -221q109 0 219 67l100 -182q-168 -115 -360 -115q-223 0 -368.5 143.5t-145.5 389.5zM238 1176l194 307h240l196 -307h-202l-109 161h-8l-109 -161h-202zM362 612h367 q0 199 -170 199q-74 0 -128.5 -50.5t-68.5 -148.5zM385 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="Ỉ" horiz-adv-x="614" d="M141 1665l33 150q346 -8 346 -187q0 -100 -78.5 -151.5t-205.5 -61.5l-25 119q92 18 92 61q0 57 -162 70zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="ỉ" horiz-adv-x="565" d="M117 1389l35 151q344 -10 344 -188q0 -98 -80 -150.5t-205 -60.5l-23 119q90 14 91 61q0 59 -162 68zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="Ị" horiz-adv-x="614" d="M141 -305.5q0 69.5 46 114t120 44.5t121 -44.5t47 -114t-47 -113.5t-121 -44t-120 44t-46 113.5zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="ị" horiz-adv-x="565" d="M109 1323q0 70 49 113t125 43q78 0 126 -43t48 -113t-49.5 -114t-125 -44t-124.5 44t-49 114zM117 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="Ọ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM532 -305.5 q0 69.5 47.5 114t118.5 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ọ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212zM401 -305.5q0 69.5 47.5 114 t120.5 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="Ỏ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM532 1665 l35 150q344 -8 344 -187q1 -190 -284 -213l-23 119q92 18 92 61q0 57 -164 70z" /> +<glyph unicode="ỏ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212zM401 1389l35 151q344 -10 344 -188 q0 -98 -78.5 -150.5t-205.5 -60.5l-23 119q92 14 92 61q0 59 -164 68z" /> +<glyph unicode="Ố" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM375 1438l194 233h260l195 -233h-213l-109 112h-8l-106 -112h-213zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5 q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM930 1577l141 246h234l-203 -246h-172z" /> +<glyph unicode="ố" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM283 1176l166 262h239l166 -262h-186l-95 133h-8l-96 -133h-186zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212 t-138.5 77q-92 0 -139 -77t-47 -212zM786 1323l142 242h221l-193 -242h-170z" /> +<glyph unicode="Ồ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM375 1438l194 233h260l195 -233h-213l-109 112h-8l-106 -112h-213zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5 q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM813 1823h234l139 -246h-170z" /> +<glyph unicode="ồ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM283 1176l166 262h239l166 -262h-186l-95 133h-8l-96 -133h-186zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212 t-138.5 77q-92 0 -139 -77t-47 -212zM717 1565h223l139 -242h-168z" /> +<glyph unicode="Ổ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM375 1438l194 233h260l195 -233h-213l-109 112h-8l-106 -112h-213zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5 q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM889 1755l29 123q299 -8 299 -164q0 -160 -236 -178l-25 96q68 14 68 56q0 57 -135 67z" /> +<glyph unicode="ổ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM283 1176l166 262h239l166 -262h-186l-95 133h-8l-96 -133h-186zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212 t-138.5 77q-92 0 -139 -77t-47 -212zM760 1513l26 127q303 -8 304 -161q0 -92 -62.5 -134.5t-177.5 -58.5l-21 103q63 14 64 57q0 59 -133 67z" /> +<glyph unicode="Ỗ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM375 1438l194 233h260l195 -233h-213l-109 112h-8l-106 -112h-213zM393 1745q12 115 63.5 173t123.5 58q61 0 130.5 -37.5t92.5 -37.5 q57 0 71 75h132q-12 -115 -63.5 -173t-123.5 -58q-61 0 -131 39t-92 39q-58 0 -72 -78h-131zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="ỗ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM266 1174l166 227h273l165 -227h-196l-101 120h-8l-102 -120h-197zM270 1475q12 117 62.5 175t124.5 58q61 0 123.5 -39t85.5 -39q55 0 71 78 h131q-12 -115 -64 -174t-124 -59q-59 0 -122.5 38.5t-86.5 38.5q-56 1 -72 -77h-129zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="Ộ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440.5 182t440.5 -182.5t166 -503.5q0 -324 -166.5 -511.5t-440.5 -187.5q-272 0 -439 187.5t-167 511.5zM356 1438l197 245h293l196 -245h-229l-111 125h-8l-108 -125h-230zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5 q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM532 -305.5q0 69.5 47.5 114t118.5 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ộ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q203 0 348.5 -144t145.5 -388t-145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM252 1176l197 307h239l197 -307h-203l-109 161h-8l-110 -161h-203zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212 t-138.5 77q-92 0 -139 -77t-47 -212zM401 -305.5q0 69.5 47.5 114t120.5 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="Ớ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440 182q156 0 287 -64q61 14 91 42t30 83q0 42 -31 95l205 90q59 -72 59 -164q0 -184 -217 -246q182 -188 183 -522q0 -324 -166 -511.5t-441 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5 t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM547 1438l164 245h319l-244 -245h-239z" /> +<glyph unicode="ớ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q98 0 195 -39q113 25 113 121q0 46 -31 95l205 90q59 -72 59 -164q0 -184 -199 -242q152 -147 152 -393q0 -244 -145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212 t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212zM401 1176l183 307h290l-253 -307h-220z" /> +<glyph unicode="Ờ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440 182q156 0 287 -64q61 14 91 42t30 83q0 42 -31 95l205 90q59 -72 59 -164q0 -184 -217 -246q182 -188 183 -522q0 -324 -166 -511.5t-441 -187.5q-272 0 -439 187.5t-167 511.5zM367 1683h319l166 -245h-240zM401 674q0 -201 81 -319.5 t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="ờ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q98 0 195 -39q113 25 113 121q0 46 -31 95l205 90q59 -72 59 -164q0 -184 -199 -242q152 -147 152 -393q0 -244 -145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM262 1483h291l182 -307h-219zM383 508q0 -135 47 -212 t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="Ở" horiz-adv-x="1398" d="M92 674q0 322 166 504t440 182q156 0 287 -64q61 14 91 42t30 83q0 42 -31 95l205 90q59 -72 59 -164q0 -184 -217 -246q182 -188 183 -522q0 -324 -166 -511.5t-441 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5 t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM532 1665l35 150q344 -8 344 -187q1 -190 -284 -213l-23 119q92 18 92 61q0 57 -164 70z" /> +<glyph unicode="ở" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q98 0 195 -39q113 25 113 121q0 46 -31 95l205 90q59 -72 59 -164q0 -184 -199 -242q152 -147 152 -393q0 -244 -145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212 t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212zM401 1389l35 151q344 -10 344 -188q0 -98 -78.5 -150.5t-205.5 -60.5l-23 119q92 14 92 61q0 59 -164 68z" /> +<glyph unicode="Ỡ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440 182q156 0 287 -64q61 14 91 42t30 83q0 42 -31 95l205 90q59 -72 59 -164q0 -184 -217 -246q182 -188 183 -522q0 -324 -166 -511.5t-441 -187.5q-272 0 -439 187.5t-167 511.5zM350 1440q16 135 75.5 206.5t143.5 71.5q61 0 141.5 -46 t104.5 -46q60 0 80 92h154q-16 -135 -77 -206.5t-145 -71.5q-59 0 -139 46t-104 46q-59 0 -80 -92h-154zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312z" /> +<glyph unicode="ỡ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q98 0 195 -39q113 25 113 121q0 46 -31 95l205 90q59 -72 59 -164q0 -184 -199 -242q152 -147 152 -393q0 -244 -145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM229 1178q14 135 71.5 205.5t139.5 70.5q59 0 139 -45 t105 -45q50 0 70 90h153q-14 -135 -70.5 -205.5t-140.5 -70.5q-61 0 -139 46t-102 46q-51 0 -72 -92h-154zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212z" /> +<glyph unicode="Ợ" horiz-adv-x="1398" d="M92 674q0 322 166 504t440 182q156 0 287 -64q61 14 91 42t30 83q0 42 -31 95l205 90q59 -72 59 -164q0 -184 -217 -246q182 -188 183 -522q0 -324 -166 -511.5t-441 -187.5q-272 0 -439 187.5t-167 511.5zM401 674q0 -201 81 -319.5t216 -118.5q137 0 217 118.5 t80 319.5q0 199 -79.5 312.5t-217.5 113.5q-135 0 -216 -114t-81 -312zM532 -305.5q0 69.5 47 114t119 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ợ" horiz-adv-x="1136" d="M74 508q0 244 145.5 388t349.5 144q98 0 195 -39q113 25 113 121q0 46 -31 95l205 90q59 -72 59 -164q0 -184 -199 -242q152 -147 152 -393q0 -244 -145.5 -388.5t-348.5 -144.5q-205 0 -350 144.5t-145 388.5zM383 508q0 -135 47 -212t139 -77q90 0 138.5 77t48.5 212 t-48.5 212t-138.5 77q-92 0 -139 -77t-47 -212zM401 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="Ụ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM512 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="ụ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM451 -305.5q0 69.5 47 114t120 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -120.5 44t-46.5 113.5z" /> +<glyph unicode="Ủ" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h290v-717q0 -332 -132 -487.5t-396 -155.5t-398 156.5t-134 486.5zM512 1665l35 150q346 -8 346 -187q0 -100 -79 -151.5t-208 -61.5l-22 119q92 18 92 61q0 57 -164 70z" /> +<glyph unicode="ủ" horiz-adv-x="1161" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h301v-1016h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM414 1389l35 151q344 -10 344 -188q0 -98 -79 -150.5t-206 -60.5l-23 119q92 14 93 61q0 59 -164 68z" /> +<glyph unicode="Ứ" horiz-adv-x="1394" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h143q76 4 122 30t46 97q0 45 -33 94l205 91q61 -70 61 -164q0 -109 -69.5 -172.5t-184.5 -85.5v-607q0 -332 -132 -487.5t-396 -155.5t-398 157t-134 486zM526 1438l164 245h320l-244 -245h-240z " /> +<glyph unicode="ứ" horiz-adv-x="1204" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h102q166 8 166 127q1 49 -32 94l206 90q59 -72 60 -164q0 -182 -201 -241v-922h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM414 1176l180 307h293l-254 -307h-219z" /> +<glyph unicode="Ừ" horiz-adv-x="1394" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h143q76 4 122 30t46 97q0 45 -33 94l205 91q61 -70 61 -164q0 -109 -69.5 -172.5t-184.5 -85.5v-607q0 -332 -132 -487.5t-396 -155.5t-398 157t-134 486zM346 1683h320l165 -245h-239z" /> +<glyph unicode="ừ" horiz-adv-x="1204" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h102q166 8 166 127q1 49 -32 94l206 90q59 -72 60 -164q0 -182 -201 -241v-922h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM274 1483h291l183 -307h-220z" /> +<glyph unicode="Ử" horiz-adv-x="1394" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h143q76 4 122 30t46 97q0 45 -33 94l205 91q61 -70 61 -164q0 -109 -69.5 -172.5t-184.5 -85.5v-607q0 -332 -132 -487.5t-396 -155.5t-398 157t-134 486zM512 1665l35 150q344 -8 344 -187 q0 -190 -285 -213l-22 119q92 18 92 61q0 57 -164 70z" /> +<glyph unicode="ử" horiz-adv-x="1204" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h102q166 8 166 127q1 49 -32 94l206 90q59 -72 60 -164q0 -182 -201 -241v-922h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM414 1389l35 151q344 -10 344 -188q0 -98 -80 -150.5 t-205 -60.5l-23 119q90 14 90 61q0 59 -161 68z" /> +<glyph unicode="Ữ" horiz-adv-x="1394" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h143q76 4 122 30t46 97q0 45 -33 94l205 91q61 -70 61 -164q0 -109 -69.5 -172.5t-184.5 -85.5v-607q0 -332 -132 -487.5t-396 -155.5t-398 157t-134 486zM330 1440q16 135 75.5 206.5 t143.5 71.5q61 0 141 -46t105 -46q59 0 79 92h154q-16 -135 -76.5 -206.5t-144.5 -71.5q-59 0 -139 46t-105 46q-59 0 -80 -92h-153z" /> +<glyph unicode="ữ" horiz-adv-x="1204" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h102q166 8 166 127q1 49 -32 94l206 90q59 -72 60 -164q0 -182 -201 -241v-922h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM242 1178q14 135 70.5 205.5t140.5 70.5q59 0 139 -45 t102 -45q52 0 72 90h154q-14 -135 -71.5 -205.5t-139.5 -70.5q-59 0 -139.5 46t-104.5 46q-49 0 -70 -92h-153z" /> +<glyph unicode="Ự" horiz-adv-x="1394" d="M150 618v717h301v-747q0 -190 57 -271t174 -81t177.5 81.5t60.5 270.5v747h143q76 4 122 30t46 97q0 45 -33 94l205 91q61 -70 61 -164q0 -109 -69.5 -172.5t-184.5 -85.5v-607q0 -332 -132 -487.5t-396 -155.5t-398 157t-134 486zM512 -305.5q0 69.5 47 114t119 44.5 q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -119 44t-47 113.5z" /> +<glyph unicode="ự" horiz-adv-x="1204" d="M119 385v631h301v-592q0 -106 30.5 -149.5t96.5 -43.5q100 0 180 113v672h102q166 8 166 127q1 49 -32 94l206 90q59 -72 60 -164q0 -182 -201 -241v-922h-246l-20 141h-8q-135 -166 -320 -166q-315 0 -315 410zM451 -305.5q0 69.5 46.5 114t120.5 44.5q72 0 119 -44.5 t47 -114t-47 -113.5t-119 -44q-74 0 -120.5 44t-46.5 113.5z" /> +<glyph unicode="Ỳ" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475zM205 1683h319l166 -245h-241z" /> +<glyph unicode="ỳ" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54zM242 1483h290l183 -307h-221z" /> +<glyph unicode="Ỵ" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475zM373 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5z" /> +<glyph unicode="ỵ" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54zM748 -288.5q0 69.5 47 113.5t120.5 44t119.5 -44t46 -113.5t-46 -113.5t-119.5 -44t-120.5 44 t-47 113.5z" /> +<glyph unicode="Ỷ" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475zM369 1665l34 150q346 -8 347 -187q0 -100 -79 -151.5t-206 -61.5l-25 119q92 18 92 61q0 57 -163 70z" /> +<glyph unicode="ỷ" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54zM381 1389l33 151q346 -10 346 -188q0 -98 -80 -150.5t-205 -60.5l-24 119q92 14 92 61 q0 59 -162 68z" /> +<glyph unicode="Ỹ" horiz-adv-x="1073" d="M-16 1335h321l121 -307q37 -106 109 -295h8q20 55 58 152.5t54 142.5l119 307h316l-404 -860v-475h-301v475zM188 1440q14 135 75 206.5t145 71.5q59 0 139 -46t104 -46q59 0 80 92h154q-14 -135 -74.5 -206.5t-144.5 -71.5q-61 0 -140.5 46t-105.5 46q-57 0 -80 -92 h-152z" /> +<glyph unicode="ỹ" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -72 80 -289h8q45 193 70 289l123 436h288l-352 -1026q-76 -203 -174 -295t-270 -92q-76 0 -144 20l54 230q55 -12 67 -13q133 0 178 133l15 54zM207 1178q14 135 71.5 205.5t141.5 70.5q59 0 139 -45t103 -45q49 0 71 90h154 q-16 -135 -72.5 -205.5t-140.5 -70.5q-59 0 -138 46t-104 46q-51 0 -72 -92h-153z" /> +<glyph unicode=" " horiz-adv-x="997" /> +<glyph unicode=" " horiz-adv-x="1995" /> +<glyph unicode=" " horiz-adv-x="997" /> +<glyph unicode=" " horiz-adv-x="1995" /> +<glyph unicode=" " horiz-adv-x="665" /> +<glyph unicode=" " horiz-adv-x="498" /> +<glyph unicode=" " horiz-adv-x="332" /> +<glyph unicode=" " horiz-adv-x="1081" /> +<glyph unicode=" " horiz-adv-x="249" /> +<glyph unicode=" " horiz-adv-x="399" /> +<glyph unicode=" " horiz-adv-x="110" /> +<glyph unicode="‐" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> +<glyph unicode="‑" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> +<glyph unicode="‒" horiz-adv-x="1081" d="M88 422v192h905v-192h-905z" /> +<glyph unicode="–" horiz-adv-x="983" d="M88 422v192h807v-192h-807z" /> +<glyph unicode="—" horiz-adv-x="1638" d="M88 422v192h1462v-192h-1462z" /> +<glyph unicode="―" horiz-adv-x="1638" d="M88 422v192h1462v-192h-1462z" /> +<glyph unicode="‘" horiz-adv-x="614" d="M113 961q-1 295 290 438l66 -131q-184 -92 -184 -260q6 2 20 2q66 0 112 -41t46 -109q0 -76 -44 -122t-114 -46q-94 0 -143 71t-49 198z" /> +<glyph unicode="’" horiz-adv-x="614" d="M145 852q184 92 185 260q-6 -2 -19 -2q-68 0 -112.5 41t-44.5 109q0 76 44 121.5t113 45.5q92 0 142.5 -69.5t50.5 -198.5q0 -295 -293 -438z" /> +<glyph unicode="‚" horiz-adv-x="614" d="M145 -215q184 92 185 260q-6 -2 -19 -2q-68 0 -112.5 41t-44.5 109q0 76 44 121.5t113 45.5q92 0 142.5 -69.5t50.5 -198.5q0 -295 -293 -438z" /> +<glyph unicode="“" horiz-adv-x="1099" d="M113 961q-1 295 290 438l66 -131q-184 -92 -184 -260q6 2 20 2q66 0 112 -41t46 -109q0 -76 -44 -122t-114 -46q-94 0 -143 71t-49 198zM596 961q0 295 293 438l65 -131q-184 -92 -184 -260q6 2 21 2q66 0 110.5 -41t44.5 -109q0 -76 -44 -122t-111 -46q-94 0 -144.5 71 t-50.5 198z" /> +<glyph unicode="”" horiz-adv-x="1099" d="M145 852q184 92 185 260q-6 -2 -19 -2q-68 0 -112.5 41t-44.5 109q0 76 44 121.5t113 45.5q92 0 142.5 -69.5t50.5 -198.5q0 -295 -293 -438zM631 852q184 92 184 260q-6 -2 -20 -2q-66 0 -112 41t-46 109q0 76 44 121.5t114 45.5q94 0 143 -69.5t49 -198.5 q0 -295 -291 -438z" /> +<glyph unicode="„" horiz-adv-x="1099" d="M145 -215q184 92 185 260q-6 -2 -19 -2q-68 0 -112.5 41t-44.5 109q0 76 44 121.5t113 45.5q92 0 142.5 -69.5t50.5 -198.5q0 -295 -293 -438zM631 -215q184 92 184 260q-6 -2 -20 -2q-66 0 -112 41t-46 109q0 76 44 121.5t114 45.5q94 0 143 -69.5t49 -198.5 q0 -295 -291 -438z" /> +<glyph unicode="†" horiz-adv-x="1044" d="M90 881v241l330 -18l-19 354h242l-18 -354l329 18v-241l-329 16l18 -1061h-242l19 1061z" /> +<glyph unicode="‡" horiz-adv-x="1044" d="M90 172v242l330 -25l-19 258l19 258l-330 -24v241l330 -18l-19 354h242l-18 -354l329 18v-241l-329 24l18 -258l-18 -258l329 25v-242l-329 18l18 -354h-242l19 354z" /> +<glyph unicode="•" horiz-adv-x="706" d="M82 537q0 123 78 203.5t192 80.5q117 0 195 -81t78 -203q0 -121 -79 -203t-193.5 -82t-192.5 82t-78 203z" /> +<glyph unicode="…" horiz-adv-x="2002" d="M158 164q0 82 51 136t129 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-129 54.5t-51 134.5zM836 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5zM1516 164q0 82 51 136t129 54t130 -54t52 -136q0 -80 -52 -134.5 t-130 -54.5t-129 54.5t-51 134.5z" /> +<glyph unicode=" " horiz-adv-x="399" /> +<glyph unicode="‰" horiz-adv-x="2557" d="M53 938q0 197 92.5 309.5t239.5 112.5t240.5 -112.5t93.5 -309.5t-93.5 -311.5t-240.5 -114.5t-239.5 114.5t-92.5 311.5zM262 938q0 -258 123 -258t123 258q0 254 -123 254t-123 -254zM430 -25l721 1385h174l-721 -1385h-174zM1036 401.5q0 196.5 92.5 309t239.5 112.5 q150 0 242 -112.5t92 -309.5q0 -199 -92 -312.5t-242 -113.5q-147 0 -239.5 115t-92.5 311.5zM1245 401q0 -258 123 -258q125 0 125 258q0 254 -125 254q-123 0 -123 -254zM1839 401q0 197 92 309.5t242 112.5q147 0 239.5 -112.5t92.5 -309t-92.5 -311.5t-239.5 -115 q-150 0 -242 114t-92 312zM2048 401q0 -258 125 -258q123 0 123 258q0 254 -123 254q-125 0 -125 -254z" /> +<glyph unicode="′" horiz-adv-x="614" d="M164 727l43 678h301l-53 -297l-97 -381h-194z" /> +<glyph unicode="″" horiz-adv-x="1099" d="M164 727l43 678h301l-53 -297l-97 -381h-194zM647 727l45 678h299l-51 -297l-96 -381h-197z" /> +<glyph unicode="‹" horiz-adv-x="598" d="M100 410v213l275 295l112 -91l-227 -311l227 -311l-112 -90z" /> +<glyph unicode="›" horiz-adv-x="598" d="M111 205l227 311l-227 311l112 91l275 -295v-213l-275 -295z" /> +<glyph unicode="⁄" horiz-adv-x="196" d="M-350 -25l721 1385h174l-721 -1385h-174z" /> +<glyph unicode=" " horiz-adv-x="498" /> +<glyph unicode="⁰" horiz-adv-x="770" d="M53 1302.5q0 196.5 92.5 309t239.5 112.5t240.5 -112.5t93.5 -309t-93.5 -311t-240.5 -114.5t-239.5 114.5t-92.5 311zM262 1303q0 -259 123 -259t123 259q0 254 -123 253.5t-123 -253.5z" /> +<glyph unicode="ⁱ" horiz-adv-x="385" d="M72 1407q0 47 33.5 76.5t87 29.5t87 -30.5t33.5 -75.5q0 -47 -33.5 -78t-87 -31t-87 31t-33.5 78zM86 532v674h213v-674h-213z" /> +<glyph unicode="⁴" horiz-adv-x="770" d="M72 1079v111l288 510h275v-477h119v-144h-119v-178h-197v178h-366zM274 1223h164v84l13 239h-9l-82 -157z" /> +<glyph unicode="⁵" horiz-adv-x="770" d="M55 1038l133 105q74 -98 170 -99q49 0 83 36t34 85q0 55 -34.5 87t-86.5 32q-63 0 -118 -47l-95 66l35 397h483v-187h-309l-12 -110q53 12 94 12q111 0 185.5 -70.5t74.5 -189.5q0 -121 -87 -199.5t-222 -78.5q-217 -1 -328 161z" /> +<glyph unicode="⁶" horiz-adv-x="770" d="M74 1296q0 195 98 311.5t274 116.5q140 0 236 -84l-86 -137q-72 53 -135 53q-162 0 -185 -215q74 70 170 70q115 0 182.5 -68.5t67.5 -183.5q0 -121 -80.5 -201.5t-201.5 -80.5q-160 0 -250 113.5t-90 305.5zM276 1204q8 -82 43 -121t84 -39q41 0 69 28t28 81 q0 109 -105 109q-61 0 -119 -58z" /> +<glyph unicode="⁷" horiz-adv-x="770" d="M102 1516v184h603v-119q-129 -164 -174.5 -310.5t-57.5 -369.5h-233q10 180 60 314.5t159 300.5h-357z" /> +<glyph unicode="⁸" horiz-adv-x="770" d="M78 1104q0 125 147 207v8q-119 84 -119 186q0 100 80 159.5t199 59.5q121 0 201 -59t80 -160q0 -106 -119 -176v-8q143 -78 143 -215q0 -96 -87 -162.5t-218 -66.5q-133 0 -220 66.5t-87 160.5zM279 1126q0 -43 30.5 -72.5t75.5 -29.5t76 28.5t31 69.5q0 16 -6.5 28.5 t-12.5 22t-23.5 19.5t-27.5 15t-36 17.5t-38 18.5q-69 -47 -69 -117zM301 1499q0 -39 29 -62t88 -48q51 49 51 102q0 37 -24.5 59.5t-61.5 22.5q-35 0 -58.5 -20.5t-23.5 -53.5z" /> +<glyph unicode="⁹" horiz-adv-x="770" d="M72 1442q0 121 82 201.5t202 80.5q160 0 250 -113.5t90 -306t-99 -310t-273 -117.5q-140 0 -236 84l86 137q72 -53 135 -54q162 0 185 216q-74 -70 -172 -70q-115 0 -182.5 68.5t-67.5 183.5zM268 1448q1 -109 105 -109q63 0 121 60q-20 158 -129 157q-41 0 -69 -27.5 t-28 -80.5z" /> +<glyph unicode="⁽" horiz-adv-x="548" d="M129 1302.5q0 174.5 45 306.5t141 277l162 -65q-139 -250 -139 -518q0 -266 139 -521l-162 -65q-96 145 -141 278t-45 307.5z" /> +<glyph unicode="⁾" horiz-adv-x="548" d="M72 782q139 254 139 521q0 268 -139 518l164 65q94 -145 139 -278t45 -305q0 -174 -45 -307.5t-139 -278.5z" /> +<glyph unicode="ⁿ" horiz-adv-x="786" d="M86 532v674h170l18 -88h5q104 104 217 105q213 0 213 -277v-414h-213v390q0 68 -15.5 95t-64.5 27q-53 0 -117 -63v-449h-213z" /> +<glyph unicode="₀" horiz-adv-x="770" d="M53 -118.5q0 196.5 92.5 309t239.5 112.5t240.5 -112.5t93.5 -309t-93.5 -311.5t-240.5 -115t-239.5 115t-92.5 311.5zM262 -119q0 -258 123 -258t123 258q0 254 -123 254t-123 -254z" /> +<glyph unicode="₁" horiz-adv-x="770" d="M156 55v135q131 18 229 89h176v-799h-223v575h-182z" /> +<glyph unicode="₂" horiz-adv-x="770" d="M55 139q123 164 305 164q135 0 215 -71.5t80 -198.5q0 -61 -33.5 -129t-70.5 -114t-109 -126h242v-184h-592v119q180 147 265 237t85 160q0 59 -30.5 92t-85.5 33q-72 0 -146 -96z" /> +<glyph unicode="₃" horiz-adv-x="770" d="M55 -383l133 104q72 -98 170 -98q49 0 82 25.5t33 70.5q0 104 -190 105v127q162 0 161 98q0 39 -26.5 62.5t-73.5 23.5q-66 0 -131 -80l-125 111q68 72 135.5 104.5t159.5 32.5q115 0 197 -61.5t82 -161.5q0 -117 -117 -184q145 -57 145 -193q0 -109 -91 -178.5 t-218 -69.5q-217 0 -326 162z" /> +<glyph unicode="₄" horiz-adv-x="770" d="M72 -231l288 510h275v-478h119v-143h-119v-178h-197v178h-366v111zM274 -199h164v84l13 240h-9l-82 -158z" /> +<glyph unicode="₅" horiz-adv-x="770" d="M55 -383l133 104q74 -98 170 -98q49 0 83 36t34 85q0 55 -34.5 87t-86.5 32q-63 0 -118 -47l-95 65l35 398h483v-187h-309l-12 -110q51 12 94 12q111 0 185.5 -70.5t74.5 -189.5q0 -121 -87 -200t-222 -79q-217 0 -328 162z" /> +<glyph unicode="₆" horiz-adv-x="770" d="M74 -125q0 195 98 311.5t274 116.5q140 0 236 -84l-86 -137q-72 53 -135 53q-162 0 -185 -215q74 70 170 70q115 0 182.5 -68.5t67.5 -183.5q0 -121 -80.5 -202t-201.5 -81q-160 0 -250 114t-90 306zM276 -217q8 -82 43 -121t84 -39q41 0 69 27.5t28 81.5q0 109 -105 108 q-61 0 -119 -57z" /> +<glyph unicode="₇" horiz-adv-x="770" d="M102 94v185h603v-119q-129 -164 -174.5 -310.5t-57.5 -369.5h-233q10 180 60 314t159 300h-357z" /> +<glyph unicode="₈" horiz-adv-x="770" d="M78 -317q0 125 147 206v9q-119 84 -119 186q0 100 80 159.5t199 59.5q121 0 201 -59.5t80 -159.5q0 -106 -119 -176v-8q143 -78 143 -215q0 -96 -87 -163t-218 -67q-133 0 -220 67t-87 161zM279 -297q0 -41 30.5 -70.5t75.5 -29.5t76 28.5t31 69.5q0 16 -6.5 28.5 t-12.5 21.5t-23.5 19.5t-27.5 15.5t-36 17.5t-38 18.5q-69 -47 -69 -119zM301 78q0 -39 29 -62.5t88 -48.5q51 49 51 101q0 39 -24.5 61.5t-61.5 22.5q-35 0 -58.5 -20.5t-23.5 -53.5z" /> +<glyph unicode="₉" horiz-adv-x="770" d="M72 20q0 121 82 202t202 81q160 0 250 -113.5t90 -306t-99 -310.5t-273 -118q-140 0 -236 84l86 137q72 -53 135 -53q162 0 185 215q-74 -70 -172 -69q-115 0 -182.5 68.5t-67.5 182.5zM268 27q1 -109 105 -109q63 0 121 59q-20 158 -129 158q-41 0 -69 -27.5t-28 -80.5z " /> +<glyph unicode="₍" horiz-adv-x="548" d="M129 -119q0 174 45 306t141 278l162 -66q-139 -250 -139 -518q0 -266 139 -520l-162 -66q-96 145 -141 278.5t-45 307.5z" /> +<glyph unicode="₎" horiz-adv-x="548" d="M72 399l164 66q94 -145 139 -278.5t45 -305.5q0 -174 -45 -307t-139 -279l-164 66q139 254 139 520q0 268 -139 518z" /> +<glyph unicode="ₔ" horiz-adv-x="708" d="M43 842q0 39 12 86h402q-25 133 -152 133q-80 0 -145 -41l-74 127q115 76 246 76q147 0 237 -96.5t90 -256.5q0 -158 -94 -256t-229 -98q-143 0 -218 94.5t-75 231.5zM223 807q0 -129 110.5 -129t125.5 129h-236z" /> +<glyph unicode="₡" horiz-adv-x="1081" d="M111 643q0 276 127 452.5t342 217.5l24 213h103l-25 -201h23q18 0 59 -4l24 205h103l-29 -232q115 -49 193 -145l-166 -164q-28 31 -55 55l-99 -827q86 20 154 106l168 -155q-150 -172 -350 -187l-25 -202h-102l24 202q-53 8 -80 15l-26 -217h-103l31 252 q-147 72 -231 228.5t-84 387.5zM414 653q0 -178 51 -293l82 684q-133 -102 -133 -391zM555 248q31 -23 78 -33l102 872q-25 4 -39 5q-29 0 -41 -2z" /> +<glyph unicode="₤" horiz-adv-x="1081" d="M98 0v186q82 37 140.5 104.5t72.5 153.5h-205v142l152 10h45q-8 33 -29 98h-168v142l119 12h6q-6 29 -6 57q0 190 123 305t316 115q211 0 354 -166l-164 -164q-72 86 -162 86q-84 0 -131 -48t-47 -144q0 -27 2 -41h324v-154h-291q8 -33 20 -98h271v-152h-262 q-15 -98 -91 -182v-8h531v-254h-920z" /> +<glyph unicode="₦" horiz-adv-x="1081" d="M6 483v107l144 12v98h-144v107l144 12v481h278l164 -481h123v481h217v-481h141v-119h-141v-98h141v-119h-141v-483h-279l-164 483h-122v-483h-217v483h-144zM311 1077l27 -258h55l-74 258h-8zM350 700l8 -98h97l-29 98h-76zM627 700l28 -98h76l-8 98h-96zM688 483 l74 -260h8l-27 260h-55z" /> +<glyph unicode="₧" horiz-adv-x="1081" d="M6 778v174l127 11v337h352q403 0 457 -335h121v-187h-119q-29 -168 -155.5 -256t-303.5 -88h-67v-434h-285v778h-127zM418 625h51q156 0 193 153h-244v-153zM418 965h244q-35 147 -193 147h-51v-147z" /> +<glyph unicode="₫" horiz-adv-x="1081" d="M133 627q0 164 102.5 265t235.5 101q113 0 199 -80l-8 138v30h-295v152h295v100h247v-100h150v-139l-150 -13v-823h-204l-19 74h-6q-88 -94 -217 -94q-152 0 -241 102t-89 287zM160 0v152h817v-152h-817zM387 625q0 -188 137 -189q77 0 138 74v227q-59 53 -130 54 q-59 0 -102 -45.5t-43 -120.5z" /> +<glyph unicode="€" horiz-adv-x="1081" d="M43 440v142l111 8q-2 18 -2 53t2 53h-111v140l127 10q47 227 191.5 353t351.5 126q197 0 334 -160l-168 -161q-88 88 -177 88q-86 0 -145 -63.5t-84 -180.5h438v-152h-456v-43q0 -41 2 -59h372v-154h-352q57 -231 232 -231q106 -1 188 110l166 -155q-154 -188 -373 -189 q-197 0 -336 121t-184 344h-127z" /> +<glyph unicode="₱" horiz-adv-x="1081" d="M6 709v106l127 10v95h-127v106l127 10v264h352q352 0 441 -262h137v-118h-115q2 -18 2 -56q0 -25 -2 -37h115v-118h-137q-45 -135 -164 -205t-277 -70h-67v-434h-285v709h-127zM418 625h51q113 0 164 84h-215v-84zM418 827h252q2 12 2 37q0 39 -2 56h-252v-93zM418 1038 h213q-49 74 -162 74h-51v-74z" /> +<glyph unicode="₲" horiz-adv-x="1081" d="M78 643q0 276 122 451.5t328 218.5v213h201v-207q160 -27 285 -160l-166 -164q-100 96 -205 97q-127 0 -195.5 -116t-68.5 -323q0 -211 70.5 -322.5t199.5 -111.5q59 0 96 27v250h-141v245h410v-614q-125 -113 -285 -143v-209h-201v209q-205 35 -327.5 205.5 t-122.5 453.5z" /> +<glyph unicode="₵" horiz-adv-x="1081" d="M111 643q0 281 129 457t348 215v192h166v-184q168 -23 284 -158l-166 -161q-55 63 -118 79v-864q74 24 135 100l168 -155q-127 -150 -303 -180v-209h-166v205q-217 29 -347 200.5t-130 462.5zM414 653q0 -344 174 -424v840q-174 -80 -174 -416z" /> +<glyph unicode="₹" horiz-adv-x="1081" d="M141 412v239h133q195 0 236 146h-369v139l152 12h215q-39 113 -234 113h-133v239h811v-151h-270q98 -70 125 -201h145v-151h-143q-29 -240 -242 -334l351 -463h-338l-293 412h-146z" /> +<glyph unicode="₺" horiz-adv-x="1081" d="M29 367v165l155 84v113l-155 -84v166l155 84v405h301v-258l299 158v-166l-299 -157v-113l299 158v-166l-299 -158v-342q117 12 198 85t81 179q0 31 -4 62l248 57q14 -57 14 -104q0 -279 -219 -424.5t-619 -135.5v476z" /> +<glyph unicode="ℓ" horiz-adv-x="962" d="M20 401q98 59 201 125v451q0 248 104.5 373t278.5 125q152 0 241 -93.5t89 -255.5q0 -190 -98.5 -342.5t-321.5 -318.5v-51q0 -96 44 -142.5t114 -46.5q90 0 192 90l109 -182q-178 -158 -348 -158q-145 0 -254 78t-140 223q-10 -6 -43.5 -26.5t-54.5 -32.5zM514 750 q178 172 178 376q0 129 -78 129q-43 0 -71.5 -58t-28.5 -179v-268z" /> +<glyph unicode="℗" horiz-adv-x="1536" d="M92 665.5q0 307.5 196.5 491.5t479.5 184t478.5 -184t195.5 -491q0 -309 -195.5 -496.5t-478.5 -187.5t-479.5 188t-196.5 495.5zM231 665.5q0 -247.5 154 -403.5t383 -156t383 156t154 403.5t-154 400.5t-383 153t-383 -153t-154 -400.5zM489 285v747h297 q160 0 256.5 -63.5t96.5 -202.5q0 -145 -99.5 -220t-253.5 -75h-79v-186h-218zM707 627h63q156 0 156 131q0 113 -156 112h-63v-243z" /> +<glyph unicode="℠" horiz-adv-x="1396" d="M37 817l100 123q84 -76 164 -76q59 0 59 43q0 4 -1 9.5t-2 8.5t-4 7t-5 6t-8 6t-8 5t-10.5 5t-11.5 6.5t-12 6.5t-13 6l-88 39q-127 59 -127 190q0 86 67.5 145.5t177.5 59.5q115 0 224 -82l-93 -125q-86 57 -141 57q-59 0 -59 -45q0 -29 76 -59l86 -37q133 -51 133 -188 q0 -86 -70.5 -148.5t-183.5 -62.5q-137 0 -250 100zM647 741v643h227l78 -184l41 -137h8l43 137l76 184h230v-643h-191v197l23 236h-8l-109 -338h-133l-109 338h-8l23 -236v-197h-191z" /> +<glyph unicode="™" horiz-adv-x="1396" d="M8 1206v178h551v-178h-178v-465h-195v465h-178zM647 741v643h227l78 -184l41 -137h8l43 137l76 184h230v-643h-191v197l23 236h-8l-109 -338h-133l-109 338h-8l23 -236v-197h-191z" /> +<glyph unicode="Ω" horiz-adv-x="1490" d="M86 0v244h233v8q-82 82 -141 208t-59 275q0 297 172 469t454.5 172t454.5 -172t172 -469q0 -150 -60.5 -275.5t-140.5 -207.5v-8h232v-244h-565v199q225 184 225 518q0 182 -86 290.5t-231.5 108.5t-231.5 -108.5t-86 -290.5q0 -336 225 -518v-199h-567z" /> +<glyph unicode="℮" horiz-adv-x="1638" d="M94 665.5q0 284.5 213 486.5t514 202t513 -201t212 -487v-19h-1177q-8 0 -9 -8v-375q1 -18 17 -43q180 -203 446 -203q137 0 259 60.5t208 167.5h107q-102 -125 -253 -197t-323 -72q-301 0 -514 202t-213 486.5zM360 696q1 -10 9 -10h903q10 0 10 10v377q0 23 -18 45 q-188 195 -441 195q-260 0 -444 -201q-18 -23 -19 -47v-369z" /> +<glyph unicode="⅓" horiz-adv-x="1714" d="M94 1110v137q131 18 230 88h176v-798h-224v573h-182zM336 -25l721 1385h174l-721 -1385h-174zM999 137l134 105q72 -98 170 -99q49 0 81.5 26t32.5 71q0 104 -190 104v127q162 0 162 98q0 39 -28 62.5t-73 23.5q-66 0 -131 -80l-125 111q125 137 295 137q115 0 196 -61.5 t81 -161.5q0 -117 -115 -184q145 -57 145 -193q0 -109 -91 -178.5t-218 -69.5q-217 0 -326 162z" /> +<glyph unicode="⅔" horiz-adv-x="1738" d="M59 1196q127 164 306 164q135 0 214.5 -71.5t79.5 -198.5q0 -61 -33.5 -130t-69.5 -114t-110 -125h242v-184h-594v118q180 145 266 236.5t86 159.5q0 59 -30.5 93t-85.5 34q-72 0 -146 -97zM438 -25l721 1385h174l-721 -1385h-174zM1024 137l133 105q72 -98 168 -99 q51 0 84 26t33 71q0 104 -191 104v127q160 0 160 98q0 39 -26.5 62.5t-71.5 23.5q-66 0 -131 -80l-125 111q125 137 293 137q117 0 197.5 -61.5t80.5 -161.5q0 -115 -115 -184q145 -59 146 -193q0 -109 -92 -178.5t-219 -69.5q-215 0 -324 162z" /> +<glyph unicode="⅛" horiz-adv-x="1714" d="M94 1110v137q131 18 230 88h176v-798h-224v573h-182zM356 -25l721 1385h174l-721 -1385h-174zM1022 203q0 123 145 207v8q-119 84 -118 186q0 100 80.5 159.5t199.5 59.5q121 0 201 -59t80 -160q0 -109 -121 -176v-8q145 -76 145 -215q0 -96 -87 -163t-218 -67 q-133 0 -220 67t-87 161zM1223 225q0 -43 29.5 -72.5t76.5 -29.5q45 0 76 28.5t31 69.5q0 16 -6.5 28.5t-12.5 22t-23.5 19.5t-27.5 15t-35.5 17.5t-38.5 18.5q-69 -47 -69 -117zM1245 598q0 -39 29 -62.5t88 -48.5q51 49 51 103q0 37 -24.5 59.5t-61.5 22.5 q-35 0 -58.5 -20.5t-23.5 -53.5z" /> +<glyph unicode="⅜" horiz-adv-x="1738" d="M55 674l133 104q72 -98 170 -98q49 0 82 25.5t33 70.5q0 104 -190 105v127q162 0 161 98q0 39 -26.5 62.5t-73.5 23.5q-66 0 -131 -80l-125 111q131 137 295 137q115 0 197 -61.5t82 -161.5q0 -117 -117 -185q66 -27 105.5 -77t39.5 -117q0 -109 -91 -177.5t-218 -68.5 q-217 0 -326 162zM422 -25l721 1385h172l-719 -1385h-174zM1047 203q0 123 145 207v8q-119 84 -119 186q0 100 80 159.5t199 59.5q123 0 202.5 -59t79.5 -160q0 -109 -121 -176v-8q145 -76 146 -215q0 -96 -87 -163t-220 -67q-131 0 -218 67t-87 161zM1247 225 q0 -43 30 -72.5t75 -29.5t75.5 28.5t30.5 69.5q0 14 -3 24.5t-11 20.5t-15.5 16.5t-23.5 15.5t-25.5 14t-32 15.5t-32.5 14.5q-68 -49 -68 -117zM1270 598q0 -39 28.5 -62.5t87.5 -48.5q51 49 52 103q0 37 -24.5 59.5t-61.5 22.5q-35 0 -58.5 -20.5t-23.5 -53.5z" /> +<glyph unicode="⅝" horiz-adv-x="1738" d="M55 674l133 104q74 -98 170 -98q49 0 83 35t34 84q0 55 -34.5 88t-86.5 33q-63 0 -118 -48l-95 66l35 397h483v-186h-309l-12 -113q49 14 94 15q111 0 185.5 -72t74.5 -190.5t-87 -197.5t-222 -79q-217 0 -328 162zM422 -25l721 1385h172l-719 -1385h-174zM1047 203 q0 123 145 207v8q-119 84 -119 186q0 100 80 159.5t199 59.5q123 0 202.5 -59t79.5 -160q0 -109 -121 -176v-8q145 -76 146 -215q0 -96 -87 -163t-220 -67q-131 0 -218 67t-87 161zM1247 225q0 -43 30 -72.5t75 -29.5t75.5 28.5t30.5 69.5q0 14 -3 24.5t-11 20.5t-15.5 16.5 t-23.5 15.5t-25.5 14t-32 15.5t-32.5 14.5q-68 -49 -68 -117zM1270 598q0 -39 28.5 -62.5t87.5 -48.5q51 49 52 103q0 37 -24.5 59.5t-61.5 22.5q-35 0 -58.5 -20.5t-23.5 -53.5z" /> +<glyph unicode="⅞" horiz-adv-x="1697" d="M61 1149v186h603v-118q-129 -164 -174.5 -310.5t-57.5 -369.5h-233q10 180 60 314t159 298h-357zM319 -25l721 1385h172l-718 -1385h-175zM1006 203q0 123 145 207v8q-119 84 -119 186q0 100 80 159.5t199 59.5q123 0 202.5 -59t79.5 -160q0 -109 -120 -176v-8 q145 -76 145 -215q0 -96 -87 -163t-220 -67q-131 0 -218 67t-87 161zM1206 225q0 -43 30 -72.5t75 -29.5t75.5 28.5t30.5 69.5q0 14 -3 24.5t-11 20.5t-15.5 16.5t-23.5 15.5t-25.5 14t-32 15.5t-32.5 14.5q-68 -49 -68 -117zM1229 598q0 -39 29 -62.5t88 -48.5 q51 49 51 103q0 37 -24.5 59.5t-61.5 22.5q-35 0 -58.5 -20.5t-23.5 -53.5z" /> +<glyph unicode="←" horiz-adv-x="1263" d="M45 512v8l569 547l142 -162l-307 -270h733v-238h-733l307 -270l-142 -162z" /> +<glyph unicode="↑" horiz-adv-x="1263" d="M80 514l547 569h8l549 -569l-164 -141l-268 307v-733h-240v733l-270 -307z" /> +<glyph unicode="→" horiz-adv-x="1263" d="M82 397v238h731l-307 270l143 162l570 -547v-8l-570 -547l-143 162l307 270h-731z" /> +<glyph unicode="↓" horiz-adv-x="1263" d="M80 516l162 143l270 -307v731h240v-731l268 307l164 -143l-549 -569h-8z" /> +<glyph unicode="∂" horiz-adv-x="1181" d="M98 379q0 211 123 343t318 132q150 0 260 -123v33q0 369 -224 369q-112 -1 -210 -93l-129 185q170 152 372 151q231 0 353 -167t122 -453q0 -350 -161.5 -565.5t-421.5 -215.5q-170 0 -286 112t-116 292zM375 397q0 -84 45.5 -131t111.5 -47q186 0 244 285 q-78 121 -203 121q-90 0 -144 -58.5t-54 -169.5z" /> +<glyph unicode="∆" horiz-adv-x="1331" d="M70 0v182l415 1170h361l416 -1170v-182h-1192zM410 254h510l-154 467l-96 348h-8l-97 -348z" /> +<glyph unicode="∏" horiz-adv-x="1454" d="M164 -246v1546h1126v-1546h-301v1284h-524v-1284h-301z" /> +<glyph unicode="∑" horiz-adv-x="1093" d="M53 -68l424 594l-401 596v178h950v-253h-586v-9l344 -512l-358 -510v-8h649v-254h-1022v178z" /> +<glyph unicode="−" horiz-adv-x="1081" d="M70 569v213h942v-213h-942z" /> +<glyph unicode="∕" horiz-adv-x="196" d="M-350 -25l721 1385h174l-721 -1385h-174z" /> +<glyph unicode="∙" horiz-adv-x="1083" d="M358 674q0 80 52.5 134t130 54t129 -54t51.5 -134t-51.5 -135.5t-129 -55.5t-130 55.5t-52.5 135.5z" /> +<glyph unicode="√" horiz-adv-x="1204" d="M55 756l357 145l202 -602q23 -78 43 -168h9q12 90 30 168l322 1380h201l-443 -1843h-209l-307 842l-151 -64z" /> +<glyph unicode="∞" horiz-adv-x="1667" d="M76 649q0 197 106.5 309.5t282.5 112.5q197 0 336 -188h8q170 221 393 221q164 0 276.5 -116t112.5 -292q0 -215 -115.5 -340t-289.5 -125q-127 0 -224.5 57.5t-193.5 184.5h-8q-143 -188 -336 -188q-145 0 -246.5 108.5t-101.5 255.5zM297 655.5q0 -61.5 42 -106.5 t112 -45q117 0 208 135q-100 154 -219 154q-70 0 -106.5 -38t-36.5 -99.5zM909 717q76 -102 137.5 -154.5t139.5 -52.5q84 0 134 52t50 128q0 90 -54 142.5t-145 52.5q-143 0 -262 -168z" /> +<glyph unicode="∫" horiz-adv-x="798" d="M86 -307l29 217q41 -8 73 -8q78 0 103.5 60.5t25.5 211.5q0 154 -38.5 461t-38.5 479q0 244 81.5 375t305.5 131q63 0 116 -14l-30 -220q-25 8 -72 9q-78 0 -103.5 -60.5t-25.5 -212.5q0 -154 38 -461t38 -479q0 -119 -15.5 -202.5t-55.5 -156.5t-119 -110t-195 -37 q-72 0 -117 17z" /> +<glyph unicode="≈" horiz-adv-x="1081" d="M59 410q135 211 308 211q57 0 110 -24t87 -53.5t76 -53t79 -23.5q80 0 147 117l156 -119q-137 -211 -307 -211q-72 0 -136.5 39t-117.5 77t-99 38q-79 0 -147 -117zM59 887q137 211 308 211q72 0 136 -39t117.5 -77t98.5 -38q80 0 147 117l156 -119q-135 -211 -307 -211 q-57 0 -110.5 23.5t-87.5 53.5t-76 53.5t-79 23.5q-79 0 -147 -117z" /> +<glyph unicode="≠" horiz-adv-x="1081" d="M70 332v211h301l149 266h-450v211h567l147 250h193l-148 -250h183v-211h-301l-150 -266h451v-211h-568l-147 -250h-191l146 250h-182z" /> +<glyph unicode="≤" horiz-adv-x="1081" d="M70 0v213h942v-213h-942zM70 606v250l942 291v-248l-353 -94l-284 -70v-8l284 -70l353 -94v-248z" /> +<glyph unicode="≥" horiz-adv-x="1081" d="M70 0v213h942v-213h-942zM70 315v248l352 94l285 70v8l-285 70l-352 94v248l942 -291v-250z" /> +<glyph unicode="■" horiz-adv-x="706" d="M111 291v493h485v-493h-485z" /> +<glyph unicode="▲" horiz-adv-x="1212" d="M39 43v4l563 1069h8l561 -1069v-4h-1132z" /> +<glyph unicode="△" horiz-adv-x="1212" d="M39 43v4l563 1069h8l561 -1069v-4h-1132zM379 238h457l-230 456z" /> +<glyph unicode="▶" horiz-adv-x="1212" d="M109 10v1133h4l1071 -561v-9l-1071 -563h-4z" /> +<glyph unicode="▷" horiz-adv-x="1212" d="M109 10v1133h4l1071 -561v-9l-1071 -563h-4zM305 348l455 230l-455 227v-457z" /> +<glyph unicode="▼" horiz-adv-x="1212" d="M39 1108v4h1132v-4l-561 -1069h-8z" /> +<glyph unicode="▽" horiz-adv-x="1212" d="M39 1108v4h1132v-4l-561 -1071h-8zM379 915l227 -454l230 454h-457z" /> +<glyph unicode="◀" horiz-adv-x="1212" d="M29 573v9l1069 561h4v-1133h-4z" /> +<glyph unicode="◁" horiz-adv-x="1212" d="M29 573v9l1069 561h4v-1133h-4zM453 578l454 -230v457z" /> +<glyph unicode="◆" horiz-adv-x="706" d="M16 537l338 337l336 -337l-336 -336z" /> +<glyph unicode="◉" horiz-adv-x="993" d="M82 536.5q0 182.5 118.5 301t295 118.5t295 -118.5t118.5 -301t-118.5 -300t-295 -117.5t-295 117.5t-118.5 300zM242 537q0 -117 72.5 -192t181 -75t181.5 75t73 192q0 119 -73 192.5t-181.5 73.5t-181 -74t-72.5 -192zM360 537q0 61 39 102t97 41q59 0 98 -41t39 -102 q0 -59 -40 -100.5t-97.5 -41.5t-96.5 41t-39 101z" /> +<glyph unicode="◊" horiz-adv-x="1122" d="M106 676l332 696h246l332 -696l-332 -696h-246zM354 676l92 -197l111 -248h8l111 248l92 197l-92 196l-111 248h-8l-111 -248z" /> +<glyph unicode="☐" horiz-adv-x="1652" d="M152 -20v1269l153 133h1196v-1249l-133 -153h-1216zM270 98h1049v1102h-1049v-1102z" /> +<glyph unicode="☑" horiz-adv-x="1652" d="M152 -20v1269l153 133h938q105 152 230 283l184 -162q-86 -84 -156 -166v-1204l-133 -153h-1216zM270 98h1049v992q-236 -369 -365 -836l-282 -33q-106 291 -287 557l193 125q113 -182 210 -457h9q119 401 329 754h-856v-1102z" /> +<glyph unicode="♪" horiz-adv-x="1114" d="M51 119q0 111 101.5 190.5t246.5 79.5q84 0 121 -24v1056h160q18 -35 44 -58.5t103 -76.5q141 -96 198.5 -191.5t57.5 -222.5q0 -162 -100 -303l-100 41q29 88 28 189q0 94 -60 175t-165 116v-740q0 -197 -108.5 -302t-296.5 -105q-94 0 -162 45t-68 131z" /> +<glyph unicode="✓" horiz-adv-x="1325" d="M14 571l193 125q141 -221 256 -512h8q109 367 286 690.5t386 534.5l184 -160q-483 -454 -706 -1257l-283 -33q-125 334 -324 612z" /> +<glyph unicode="❒" horiz-adv-x="849" d="M111 209v520l137 117h491v-500l-116 -137h-512zM211 309h362v371h-362v-371z" /> +<glyph unicode="" horiz-adv-x="1014" d="M0 1015h1015v-1015h-1015v1015z" /> +<glyph unicode="fi" horiz-adv-x="1300" d="M49 780v224l135 10v55q0 176 90.5 283.5t284.5 107.5q100 0 203 -37l-55 -221q-57 20 -105 21q-117 0 -117 -146v-61h183v-236h-183v-780h-301v780h-135zM844 1323q0 70 49 113t125 43q78 0 126 -43t48 -113t-49 -114t-125 -44t-125 44t-49 114zM868 0v1016h301v-1016 h-301z" /> +<glyph unicode="fl" horiz-adv-x="1284" d="M49 780v224l135 10v55q0 176 90.5 283.5t284.5 107.5q100 0 203 -37l-55 -221q-57 20 -105 21q-117 0 -117 -146v-61h183v-236h-183v-780h-301v780h-135zM831 315v1121h302v-1133q0 -84 53 -84q21 0 37 4l37 -223q-55 -25 -152 -25q-276 0 -277 340z" /> +<glyph horiz-adv-x="1302" d="M92 659q0 322 188.5 511.5t469.5 189.5q242 0 415 -174l-166 -187q-111 100 -245 101q-156 0 -254.5 -116t-98.5 -314q0 -209 95.5 -321.5t281.5 -112.5q90 0 142 40v230h-222v246h490v-615q-80 -70 -199 -116t-250 -46q-283 0 -465 179t-182 505zM401 1440 q14 135 75 206.5t145 71.5q61 0 140 -46t105 -46q57 0 80 92h152q-14 -135 -74.5 -206.5t-144.5 -71.5q-61 0 -140.5 46t-105.5 46q-57 0 -78 -92h-154z" /> +<glyph horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-94 61 -94 172q0 113 115 190v9q-59 41 -98.5 110.5t-39.5 153.5q0 174 122 270t298 96q90 0 158 -24h371v-219h-162q33 -55 33 -133q0 -168 -112 -255t-288 -87q-59 0 -123 20q-37 -31 -37 -76q0 -76 154 -76h164q387 0 387 -258 q0 -160 -154.5 -262t-412.5 -102q-190 0 -308 64.5t-118 193.5zM176 1178q14 135 70.5 205.5t140.5 70.5q61 0 140 -45t102 -45q51 0 71 90h154q-14 -135 -71.5 -205.5t-139.5 -70.5q-59 0 -139 46t-105 46q-49 0 -69 -92h-154zM317 -127q0 -55 60.5 -86t165.5 -31 q100 0 166.5 36t66.5 89q0 45 -38 62.5t-117 17.5h-105q-94 0 -143 12q-56 -49 -56 -100zM379 674q0 -82 39 -126t100.5 -44t100 44t38.5 126q0 78 -38.5 121t-100 43t-100.5 -42t-39 -122z" /> +<glyph horiz-adv-x="565" d="M84 -244q0 137 133 244h-84v1016h301v-1016q-147 -55 -147 -174q0 -39 25.5 -58.5t62.5 -19.5q23 0 71 25l62 -135q-37 -31 -97.5 -49.5t-109.5 -18.5q-94 0 -155.5 49t-61.5 137z" /> +<glyph horiz-adv-x="811" d="M106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599z" /> +<glyph horiz-adv-x="811" d="M74 1683h319l166 -245h-242zM106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599z" /> +<glyph horiz-adv-x="811" d="M106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599zM252 1438l166 245h319l-245 -245h-240z" /> +<glyph horiz-adv-x="811" d="M61 1438l197 245h295l197 -245h-232l-108 125h-9l-108 -125h-232zM106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599z" /> +<glyph horiz-adv-x="811" d="M57 1440q14 135 75 206.5t144 71.5q61 0 140.5 -46t105.5 -46q57 0 78 92h154q-14 -135 -74.5 -206.5t-144.5 -71.5q-61 0 -140.5 46t-105.5 46q-57 0 -78 -92h-154zM106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599z" /> +<glyph horiz-adv-x="811" d="M59 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102zM106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599zM465 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102z" /> +<glyph horiz-adv-x="811" d="M106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599zM117 1475v190h577v-190h-577z" /> +<glyph horiz-adv-x="811" d="M106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599zM231 1593.5q0 69.5 49.5 113.5t125 44t125 -44t49.5 -113.5t-49.5 -113.5t-125 -44t-125 44t-49.5 113.5z" /> +<glyph horiz-adv-x="811" d="M61 1683h232l108 -124h9l108 124h232l-197 -245h-295zM106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599z" /> +<glyph horiz-adv-x="811" d="M106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599zM240 1665l32 150q346 -8 346 -187q0 -100 -78.5 -151.5t-205.5 -61.5l-25 119q92 18 92 61q0 57 -161 70z" /> +<glyph horiz-adv-x="811" d="M106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-599zM240 -305.5q0 69.5 47 114t119 44.5q74 0 120.5 -44.5t46.5 -114t-46.5 -113.5t-120.5 -44q-72 0 -119 44t-47 113.5z" /> +<glyph horiz-adv-x="811" d="M106 0v254h148v827h-148v254h599v-254h-150v-827h150v-254h-191q-111 -90 -111 -184q0 -37 26 -57.5t60 -20.5q33 0 74 29l68 -152q-90 -72 -213 -72q-102 0 -169 51.5t-67 141.5q0 84 46 153.5t102 110.5h-224z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM307 1483h291l182 -307h-219zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM446 1176l183 307h291l-254 -307h-220z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM297 1176l197 307h239l197 -307h-203l-111 161h-8l-108 -161h-203zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66 q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM274 1178q14 135 70.5 205.5t140.5 70.5q59 0 139.5 -45t102.5 -45q51 0 72 90h153q-14 -135 -71.5 -205.5t-139.5 -70.5 q-59 0 -139 46t-104 46q-49 0 -70 -92h-154zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM268 1312.5q0 61.5 40 101.5t101.5 40t102.5 -41t41 -100q0 -61 -40 -102.5t-103 -41.5q-61 0 -101.5 41t-40.5 102.5zM389 512 q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM674 1312.5q0 61.5 40 101.5t103 40q61 0 101 -40t40 -101.5t-40 -102.5t-101 -41q-63 0 -103 41t-40 102.5z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM330 1212v191h567v-191h-567zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM328 1460h168q18 -119 116 -119q100 0 119 119h168q-4 -121 -77.5 -202.5t-209 -81.5t-208 81.5t-76.5 202.5zM389 512 q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM383 1331q0 94 63.5 151.5t165.5 57.5q104 0 168 -57.5t64 -151.5t-64 -151.5t-168 -57.5q-102 0 -165.5 57.5t-63.5 151.5z M389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM530 1331q0 -43 23.5 -69.5t58.5 -26.5q37 0 60.5 26.5t23.5 69.5t-23.5 69.5t-60.5 26.5q-35 0 -58.5 -26.5t-23.5 -69.5z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM297 1483h203l108 -162h8l111 162h203l-197 -307h-239zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73 t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM451 -305.5q0 69.5 47 114t118 44.5 q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -118.5 44t-46.5 113.5z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM446 1389l35 151q344 -10 344 -188 q0 -98 -78.5 -150.5t-205.5 -60.5l-23 119q92 14 92 61q0 59 -164 68z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM328 1176l166 262h239l166 -262h-186l-97 133h-8l-94 -133h-186zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66 q-78 0 -130 -73t-52 -210zM831 1323l142 242h221l-195 -242h-168z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM328 1176l166 262h239l166 -262h-186l-97 133h-8l-94 -133h-186zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66 q-78 0 -130 -73t-52 -210zM762 1565h223l139 -242h-168z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM328 1176l166 262h239l166 -262h-186l-97 133h-8l-94 -133h-186zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66 q-78 0 -130 -73t-52 -210zM805 1513l26 127q303 -8 304 -161q0 -92 -62.5 -134.5t-177.5 -58.5l-21 103q63 14 64 57q0 59 -133 67z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM311 1174l166 227h273l165 -227h-196l-103 120h-8l-100 -120h-197zM313 1475q12 117 63.5 175t125.5 58q59 0 122.5 -39t86.5 -39 q55 0 71 78h131q-12 -115 -64 -174t-124 -59q-61 0 -123.5 38.5t-85.5 38.5q-56 1 -72 -77h-131zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM297 1176l197 307h239l197 -307h-203l-111 161h-8l-108 -161h-203zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66 q-78 0 -130 -73t-52 -210zM451 -305.5q0 69.5 47 114t118 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -118.5 44t-46.5 113.5z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM328 1460h135q23 -137 149 -137q129 0 152 137h135q-4 -121 -77.5 -202.5t-209 -81.5t-208 81.5t-76.5 202.5zM389 512 q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM518 1417l119 242h215l-182 -242h-152z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM328 1460h135q23 -137 149 -137q129 0 152 137h135q-4 -121 -77.5 -202.5t-209 -81.5t-208 81.5t-76.5 202.5zM375 1659h215 l119 -242h-152zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM328 1460h135q23 -137 149 -137q129 0 152 137h135q-4 -121 -77.5 -202.5t-209 -81.5t-208 81.5t-76.5 202.5zM389 512 q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM451 1657l28 127q303 -10 303 -164q0 -92 -63 -134t-176 -56l-21 102q63 14 64 57q0 31 -30 46.5t-105 21.5z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM313 1475q12 117 63.5 175t125.5 58q59 0 122.5 -39t86.5 -39q55 0 71 78h131q-12 -115 -64 -174t-124 -59q-61 0 -123.5 38.5 t-85.5 38.5q-55 0 -72 -77h-131zM330 1419h141q25 -102 141 -102q119 0 144 102h141q-4 -104 -76 -173.5t-209 -69.5q-135 0 -206.5 69.5t-75.5 173.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016h-245l-21 100h-8q-125 -125 -270 -125q-190 0 -303 142.5t-113 390.5zM328 1460h168q18 -119 116 -119q100 0 119 119h168q-4 -121 -77.5 -202.5t-209 -81.5t-208 81.5t-76.5 202.5zM389 512 q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210zM451 -305.5q0 69.5 47 114t118 44.5q74 0 121 -44.5t47 -114t-47 -113.5t-121 -44q-72 0 -118.5 44t-46.5 113.5z" /> +<glyph horiz-adv-x="1173" d="M80 508q0 238 129 385t299 147q147 0 264 -125h8l25 101h235v-1016q-92 -29 -135 -76t-43 -98q0 -37 24.5 -57.5t59.5 -20.5q37 0 74 25l63 -135q-88 -68 -209 -68q-94 0 -155.5 49t-61.5 137q0 141 142 240l-25 104h-8q-125 -125 -270 -125q-190 0 -303 142.5 t-113 390.5zM389 512q0 -291 184 -291q98 0 166 92v416q-72 66 -168 66q-78 0 -130 -73t-52 -210z" /> +<glyph horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM395 530q0 -125 50.5 -193.5t138.5 -68.5 q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194z" /> +<glyph horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM301 1176l195 307h239l197 -307h-203l-108 161h-9 l-108 -161h-203zM395 530q0 -125 50.5 -193.5t138.5 -68.5q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194z" /> +<glyph horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM332 1460h168q14 -119 116 -119q51 0 81 33t36 86 h168q-4 -121 -76.5 -202.5t-208 -81.5t-208 81.5t-76.5 202.5zM395 530q0 -125 50.5 -193.5t138.5 -68.5q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194z" /> +<glyph horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM395 530q0 -125 50.5 -193.5t138.5 -68.5 q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194zM449 1323q0 70 47 114t120.5 44t119.5 -44t46 -114t-46 -114t-119.5 -44t-120.5 44t-47 114z" /> +<glyph horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM395 530q0 -125 50.5 -193.5t138.5 -68.5 q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194zM440 1286q0 98 102.5 151.5t262.5 61.5l22 -121q-170 -18 -170 -78q0 -53 88 -73l-57 -111q-135 12 -191.5 52t-56.5 118z" /> +<glyph horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM301 1483h203l108 -162h9l108 162h203l-197 -307 h-239zM395 530q0 -125 50.5 -193.5t138.5 -68.5q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194z" /> +<glyph horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM334 1212v191h565v-191h-565zM395 530 q0 -125 50.5 -193.5t138.5 -68.5q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194z" /> +<glyph horiz-adv-x="1193" d="M90 526q0 223 130 368.5t298 145.5q154 0 260 -118h8l23 94h242v-1006q0 -197 -134.5 -302t-381.5 -105q-205 0 -379 112l98 199q137 -76 281 -76q197 0 215 164l8 127q-113 -102 -252 -102q-188 0 -302 139t-114 360zM276 1178q14 135 72 205.5t141 70.5q59 0 139.5 -45 t102.5 -45q49 0 72 90h153q-16 -135 -72.5 -205.5t-140.5 -70.5q-59 0 -139 46t-102 46q-51 0 -72 -92h-154zM395 530q0 -125 50.5 -193.5t138.5 -68.5q94 0 166 97v364q-72 66 -168 66q-80 0 -133.5 -71t-53.5 -194z" /> +<glyph horiz-adv-x="565" d="M133 0v1436h301v-1436h-301z" /> +<glyph horiz-adv-x="565" d="M133 0v1436h301v-1436h-301zM135 1550l166 246h320l-244 -246h-242z" /> +<glyph horiz-adv-x="651" d="M133 0v1436h301v-1436h-301zM512 1577h193l-5 -141l-49 -314h-129z" /> +<glyph horiz-adv-x="927" d="M133 0v1436h301v-1436h-301zM565 674q0 80 52.5 134t130 54t129 -54t51.5 -134t-51.5 -135.5t-129 -55.5t-130 55.5t-52.5 135.5z" /> +<glyph horiz-adv-x="565" d="M70 -348q170 18 170 76q0 51 -88 75l57 111q135 -14 191.5 -54t56.5 -118q0 -98 -102.5 -150.5t-262.5 -60.5zM133 0v1436h301v-1436h-301z" /> +<glyph horiz-adv-x="565" d="M115 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5zM133 0v1436h301v-1436h-301z" /> +<glyph horiz-adv-x="565" d="M-2 1645v192h565v-192h-565zM115 -305.5q0 69.5 47 114t121 44.5q72 0 119 -44.5t47 -114t-47 -113.5t-119 -44q-74 0 -121 44t-47 113.5zM133 0v1436h301v-1436h-301z" /> +<glyph horiz-adv-x="565" d="M-2 -195h565v-192h-565v192zM133 0v1436h301v-1436h-301z" /> +<glyph horiz-adv-x="612" d="M31 492v239l102 64v641h301v-492l154 92v-241l-154 -93v-702h-301v553z" /> +<glyph horiz-adv-x="1300" d="M49 780v224l135 10v55q0 176 90.5 283.5t284.5 107.5q100 0 203 -37l-55 -221q-57 20 -105 21q-117 0 -117 -146v-61h183v-236h-183v-780h-301v780h-135zM868 0v1436h301v-1436h-301z" /> +<glyph horiz-adv-x="1187" d="M109 655.5q0 317.5 131 493.5t354 176q221 0 353 -177t132 -492.5t-132 -498t-353 -182.5t-353 181.5t-132 499zM410 655.5q0 -241.5 47 -339t137 -97.5t137 97.5t47 339t-47 333.5t-137 92t-137 -92t-47 -333.5z" /> +<glyph horiz-adv-x="839" d="M80 995v187q186 35 321 118h224v-1300h-301v995h-244z" /> +<glyph horiz-adv-x="1077" d="M68 1118q102 109 203.5 158t236.5 49q193 0 306.5 -112.5t113.5 -301.5q0 -147 -105.5 -308t-294.5 -365q131 16 217 16h228v-254h-881v172q293 281 421 438.5t128 282.5q0 96 -45 146.5t-129 50.5q-111 0 -236 -134z" /> +<glyph horiz-adv-x="1081" d="M45 160l139 190q135 -131 285 -131q96 0 153.5 41t57.5 113q0 94 -75 140t-275 46v213q307 0 307 174q0 68 -42 106t-118 38q-113 0 -244 -115l-151 184q193 166 410 166q205 0 326.5 -94t121.5 -262q0 -197 -217 -289v-8q117 -35 187.5 -116t70.5 -202 q0 -174 -139.5 -276.5t-343.5 -102.5q-295 1 -453 185z" /> +<glyph horiz-adv-x="1146" d="M76 311v207l475 782h369v-759h149v-230h-149v-311h-281v311h-563zM365 541h274v211q0 86 10 290h-8q-33 -72 -106 -219z" /> +<glyph horiz-adv-x="1081" d="M47 158l135 190q139 -129 281 -129q102 0 160.5 52.5t58.5 150.5q0 96 -56.5 148.5t-148.5 52.5q-55 0 -93 -13.5t-99 -52.5l-135 86l36 657h738v-253h-478l-22 -244q68 31 145 31q178 0 296 -103.5t118 -300.5q0 -209 -139 -332t-338 -123q-277 1 -459 183z" /> +<glyph horiz-adv-x="1150" d="M117 621q0 344 152.5 524t373.5 180q229 0 381 -156l-160 -180q-33 39 -89 65.5t-111 26.5q-254 0 -269 -405q49 61 123 99t137 38q174 0 280.5 -101.5t106.5 -299.5q0 -197 -124.5 -317t-307.5 -120q-207 0 -350 162t-143 484zM401 471q35 -270 203 -270q72 0 118 53 t46 158q0 188 -172 188q-117 0 -195 -129z" /> +<glyph horiz-adv-x="1056" d="M90 1047v253h877v-184q-211 -258 -275.5 -480t-83.5 -636h-303q18 336 91 567.5t249 479.5h-555z" /> +<glyph horiz-adv-x="1124" d="M104 332q0 201 224 319v8q-174 131 -174 308q0 164 115.5 261t299.5 97q178 0 287 -97.5t109 -258.5q0 -170 -170 -285v-8q223 -121 223 -340q0 -156 -128 -258.5t-331 -102.5q-197 0 -326 99.5t-129 257.5zM365 367q0 -84 58 -133.5t142 -49.5q78 0 126 42t48 120 q0 41 -16 72t-63.5 60.5t-79 44t-115.5 50.5q-100 -91 -100 -206zM418 967q0 -74 55 -120t168 -89q80 92 80 190q0 76 -43 122t-117 46q-61 0 -102 -39t-41 -110z" /> +<glyph horiz-adv-x="1150" d="M102 889q0 197 125 316.5t310 119.5q207 0 349 -162t142 -483q0 -344 -151.5 -524.5t-374.5 -180.5q-225 0 -381 156l160 180q84 -92 202 -92q254 0 271 410q-49 -66 -124 -104t-138 -38q-176 0 -283 101.5t-107 300.5zM379 889q0 -189 170 -189q115 0 196 129 q-35 270 -204 271q-72 0 -117 -53.5t-45 -157.5z" /> +<glyph horiz-adv-x="1081" d="M76 592q0 293 127 454.5t338 161.5t338 -161.5t127 -454.5q0 -291 -127 -454t-338 -163t-338 163t-127 454zM360 592q0 -178 46.5 -280.5t134.5 -102.5t134 102.5t46 280.5t-46 281.5t-134 103.5t-134.5 -103.5t-46.5 -281.5z" /> +<glyph horiz-adv-x="1081" d="M143 0v244h283v635h-244v186q182 35 324 119h221v-940h244v-244h-828z" /> +<glyph horiz-adv-x="1081" d="M61 1001q100 106 200.5 156.5t236.5 50.5q188 0 304 -112.5t116 -292.5q0 -131 -91.5 -254t-289.5 -311q135 16 217 16h237v-254h-915v172q291 229 423 366.5t132 252.5q0 84 -47 133t-125 49q-104 0 -234 -133z" /> +<glyph horiz-adv-x="1081" d="M45 0l139 190q137 -133 285 -133q94 0 152.5 47.5t58.5 122.5q0 94 -76 144.5t-274 50.5v213q307 0 307 188q0 70 -42 110t-118 40q-113 0 -244 -115l-151 184q193 166 410 166q203 0 325.5 -97t122.5 -265q0 -211 -217 -303v-8q117 -33 187.5 -118t70.5 -210 q0 -176 -140.5 -283.5t-342.5 -107.5q-295 0 -453 184z" /> +<glyph horiz-adv-x="1081" d="M39 170v207l475 807h369v-785h149v-229h-149v-330h-281v330h-563zM328 399h274v236q0 45 12 291h-8q-66 -147 -106 -230z" /> +<glyph horiz-adv-x="1081" d="M47 2l135 186q141 -131 281 -131q100 0 159.5 57.5t59.5 161.5q0 98 -56.5 154.5t-148.5 56.5q-55 0 -94 -14t-98 -53l-135 88l36 676h738v-252h-478l-22 -264q70 29 145 28q178 0 296 -106.5t118 -306.5q0 -215 -138 -341t-339 -126q-273 0 -459 186z" /> +<glyph horiz-adv-x="1081" d="M84 621q0 344 151.5 524t374.5 180q225 0 381 -156l-160 -180q-35 39 -91 65.5t-111 26.5q-254 0 -271 -409q49 66 124 103.5t139 37.5q176 0 282.5 -101.5t106.5 -299.5q0 -197 -126 -317t-309 -120q-207 0 -349 162t-142 484zM367 471q34 -270 202 -270q72 0 118 53 t46 158q0 188 -170 188q-115 0 -196 -129z" /> +<glyph horiz-adv-x="1081" d="M90 932v252h905v-185q-213 -260 -280.5 -498.5t-85.5 -660.5h-303q18 344 94 593t254 499h-584z" /> +<glyph horiz-adv-x="1081" d="M86 332q0 201 221 319v8q-174 131 -174 308q0 164 116 261t300 97q178 0 286.5 -97.5t108.5 -258.5q0 -172 -170 -285v-8q225 -123 225 -340q0 -156 -128 -258.5t-332 -102.5q-197 0 -325 99.5t-128 257.5zM344 367q0 -84 58.5 -133.5t142.5 -49.5q78 0 126 42t48 120 q0 41 -16.5 72t-63.5 60.5t-79 44t-116 50.5q-100 -91 -100 -206zM397 967q0 -74 55.5 -120t168.5 -89q80 92 79 190q0 76 -42 122t-115 46q-63 0 -104.5 -39t-41.5 -110z" /> +<glyph horiz-adv-x="1081" d="M53 762q0 201 126 323.5t310 122.5q238 0 377.5 -180t139.5 -487q0 -332 -144.5 -528.5t-417.5 -196.5q-104 0 -180 24.5t-162 83.5l109 207q102 -74 211 -74q137 0 213 94.5t86 311.5q-53 -63 -132 -101t-147 -38q-182 0 -285.5 115.5t-103.5 322.5zM328 762 q0 -225 172 -225q129 0 217 135q-31 311 -221 311q-74 0 -121 -57.5t-47 -163.5z" /> +<glyph horiz-adv-x="1116" d="M92 592q0 293 127 454.5t338 161.5t338 -161.5t127 -454.5q0 -291 -127 -454t-338 -163t-338 163t-127 454zM377 592q0 -178 46 -280.5t134 -102.5t134 102.5t46 280.5t-46 281.5t-134 103.5t-134 -103.5t-46 -281.5z" /> +<glyph horiz-adv-x="839" d="M80 879v186q186 35 321 119h224v-1184h-301v879h-244z" /> +<glyph horiz-adv-x="1060" d="M66 1001q100 109 194 158t227 49q186 0 302 -111.5t116 -293.5q0 -133 -88 -260t-276 -305q131 16 217 16h198v-254h-864v172q268 211 396 355.5t128 263.5q0 86 -43 134t-122 48q-45 0 -88.5 -22.5t-67 -43t-68.5 -67.5z" /> +<glyph horiz-adv-x="1081" d="M45 0l139 190q137 -133 285 -133q94 0 152.5 47.5t58.5 122.5q0 94 -76 144.5t-274 50.5v213q307 0 307 188q0 70 -42 110t-118 40q-113 0 -244 -115l-151 184q193 166 410 166q203 0 325.5 -97t122.5 -265q0 -211 -217 -303v-8q117 -33 187.5 -118t70.5 -210 q0 -176 -140.5 -283.5t-342.5 -107.5q-295 0 -453 184z" /> +<glyph horiz-adv-x="1116" d="M55 170v207l475 807h369v-785h150v-229h-150v-330h-281v330h-563zM344 399h274v236q0 45 13 291h-8q-66 -147 -107 -230z" /> +<glyph horiz-adv-x="1081" d="M47 2l135 186q141 -131 281 -131q100 0 159.5 57.5t59.5 161.5q0 98 -56.5 154.5t-148.5 56.5q-55 0 -94 -14t-98 -53l-135 88l36 676h738v-252h-478l-22 -264q70 29 145 28q178 0 296 -106.5t118 -306.5q0 -215 -138 -341t-339 -126q-273 0 -459 186z" /> +<glyph horiz-adv-x="1116" d="M100 621q0 344 151.5 524t375.5 180q225 0 381 -156l-160 -180q-35 39 -91.5 65.5t-111.5 26.5q-254 0 -270 -409q49 66 123.5 103.5t138.5 37.5q176 0 282.5 -101.5t106.5 -299.5q0 -197 -126 -317t-308 -120q-207 0 -349.5 162t-142.5 484zM383 471q35 -270 203 -270 q72 0 118 53t46 158q0 188 -170 188q-115 0 -197 -129z" /> +<glyph horiz-adv-x="1056" d="M90 932v252h877v-185q-211 -266 -281 -501.5t-88 -657.5h-303q18 342 95 588t255 504h-555z" /> +<glyph horiz-adv-x="1120" d="M102 332q0 201 222 319v8q-174 131 -174 308q0 164 115.5 261t299.5 97q178 0 287 -97.5t109 -258.5q0 -172 -170 -285v-8q225 -123 225 -340q0 -156 -128 -258.5t-333 -102.5q-197 0 -325 99.5t-128 257.5zM360 367q0 -84 58.5 -133.5t142.5 -49.5q78 0 126 42t48 120 q0 41 -16.5 72t-63.5 60.5t-78.5 44t-115.5 50.5q-101 -91 -101 -206zM414 967q0 -74 55 -120t168 -89q80 92 80 190q0 76 -42 122t-116 46q-63 0 -104 -39t-41 -110z" /> +<glyph horiz-adv-x="1116" d="M70 762q0 201 126 323.5t310 122.5q238 0 377 -180t139 -487q0 -332 -144.5 -528.5t-416.5 -196.5q-104 0 -180 24.5t-162 83.5l108 207q102 -74 211 -74q137 0 213 94.5t86 311.5q-53 -63 -132 -101t-146 -38q-182 0 -285.5 115.5t-103.5 322.5zM344 762 q0 -225 172 -225q129 0 217 135q-31 311 -221 311q-74 0 -121 -57.5t-47 -163.5z" /> +<glyph horiz-adv-x="1699" d="M100 600q0 375 241 605.5t593 230.5q301 0 483 -173t182 -448q0 -248 -123.5 -390t-301.5 -142q-84 0 -138.5 43t-70.5 116h-4q-39 -59 -110 -98t-136 -39q-102 0 -168 78t-66 199q0 184 110.5 323t268.5 139q104 0 150 -102h4l33 86h184l-94 -397q-37 -164 65 -164 q78 0 142.5 90t64.5 246q0 203 -122 332t-376 129q-246 0 -430 -183.5t-184 -472.5q0 -256 147.5 -381t360.5 -125q145 0 256 58l69 -154q-164 -76 -350 -76q-133 0 -251.5 40t-216 118t-155 210t-57.5 302zM709 598q-1 -109 75 -109q53 0 125 86l45 228q-29 55 -86 55 q-68 0 -113.5 -85t-45.5 -175z" /> +<glyph horiz-adv-x="425" d="M84 1016q0 55 37 94t92 39t92 -39t37 -94q0 -57 -37 -94t-92 -37t-92 37t-37 94z" /> +<glyph horiz-adv-x="425" d="M63 748q158 51 158 155h-8q-53 0 -91 33t-38 90q0 53 39 88t94 35q70 0 107.5 -52.5t37.5 -146.5q0 -117 -66 -198.5t-187 -116.5z" /> +<glyph horiz-adv-x="425" d="M84 -406q0 55 37 94.5t92 39.5t92 -39t37 -95q0 -57 -37 -94t-92 -37t-92 37t-37 94z" /> +<glyph horiz-adv-x="425" d="M63 -674q158 51 158 156h-8q-53 0 -91 32.5t-38 90.5q0 53 39 88t94 35q70 0 107.5 -52.5t37.5 -146.5q0 -117 -66 -198.5t-187 -116.5z" /> +<glyph horiz-adv-x="770" d="M53 401.5q0 196.5 92.5 309t239.5 112.5t240.5 -112.5t93.5 -309t-93.5 -311.5t-240.5 -115t-239.5 115t-92.5 311.5zM262 401q0 -258 123 -258t123 258q0 254 -123 254t-123 -254z" /> +<glyph horiz-adv-x="770" d="M156 575v136q131 18 229 88h176v-799h-223v575h-182z" /> +<glyph horiz-adv-x="770" d="M55 659q123 164 305 164q135 0 215 -71.5t80 -198.5q0 -61 -33.5 -129t-70.5 -114t-109 -126h242v-184h-592v119q180 147 265 237t85 160q0 59 -30.5 92t-85.5 33q-72 0 -146 -96z" /> +<glyph horiz-adv-x="770" d="M55 137l133 105q72 -98 170 -99q49 0 82 26t33 71q0 104 -190 104v127q162 0 161 98q0 39 -26.5 62.5t-73.5 23.5q-66 0 -131 -80l-125 111q68 72 135.5 104.5t159.5 32.5q115 0 197 -61.5t82 -161.5q0 -117 -117 -184q145 -57 145 -193q0 -109 -91 -178.5t-218 -69.5 q-217 0 -326 162z" /> +<glyph horiz-adv-x="770" d="M72 178v111l288 510h275v-477h119v-144h-119v-178h-197v178h-366zM274 322h164v84l13 239h-9l-82 -158z" /> +<glyph horiz-adv-x="770" d="M55 137l133 105q74 -98 170 -99q49 0 83 36t34 85q0 55 -34.5 87t-86.5 32q-63 0 -118 -47l-95 65l35 398h483v-187h-309l-12 -110q51 12 94 12q111 0 185.5 -70.5t74.5 -189.5q0 -121 -87 -200t-222 -79q-217 0 -328 162z" /> +<glyph horiz-adv-x="770" d="M74 395q0 195 98 311.5t274 116.5q140 0 236 -84l-86 -137q-72 53 -135 53q-162 0 -185 -215q74 70 170 70q115 0 182.5 -68.5t67.5 -183.5q0 -121 -80.5 -202t-201.5 -81q-160 0 -250 114t-90 306zM276 303q8 -82 43 -121t84 -39q41 0 69 28t28 81q0 109 -105 108 q-61 0 -119 -57z" /> +<glyph horiz-adv-x="770" d="M102 614v185h603v-119q-129 -164 -174.5 -310.5t-57.5 -369.5h-233q10 180 60 314.5t159 299.5h-357z" /> +<glyph horiz-adv-x="770" d="M78 203q0 125 147 207v8q-119 84 -119 186q0 100 80 159.5t199 59.5q121 0 201 -59t80 -160q0 -106 -119 -176v-8q143 -78 143 -215q0 -96 -87 -163t-218 -67q-133 0 -220 67t-87 161zM279 225q0 -43 30.5 -72.5t75.5 -29.5t76 28.5t31 69.5q0 16 -6.5 28.5t-12.5 22 t-23.5 19.5t-27.5 15t-36 17.5t-38 18.5q-69 -47 -69 -117zM301 598q0 -39 29 -62.5t88 -48.5q51 49 51 103q0 37 -24.5 59.5t-61.5 22.5q-35 0 -58.5 -20.5t-23.5 -53.5z" /> +<glyph horiz-adv-x="770" d="M72 541q0 121 82 201.5t202 80.5q160 0 250 -113.5t90 -306t-99 -310.5t-273 -118q-140 0 -236 84l86 138q72 -53 135 -54q162 0 185 215q-74 -70 -172 -69q-115 0 -182.5 68.5t-67.5 183.5zM268 547q1 -109 105 -109q63 0 121 60q-20 158 -129 157q-41 0 -69 -27.5 t-28 -80.5z" /> +<glyph horiz-adv-x="548" d="M129 401q0 174 45 306.5t141 277.5l162 -65q-139 -250 -139 -519q0 -266 139 -520l-162 -65q-96 145 -141 278t-45 307z" /> +<glyph horiz-adv-x="548" d="M72 -119q139 254 139 520q0 268 -139 519l164 65q94 -145 139 -278.5t45 -305.5q0 -174 -45 -307t-139 -278z" /> +<glyph horiz-adv-x="425" d="M84 115q0 55 37 94t92 39t92 -39t37 -94q0 -57 -37 -94t-92 -37t-92 37t-37 94z" /> +<glyph horiz-adv-x="425" d="M63 -154q158 51 158 156h-8q-53 0 -91 33t-38 90q0 53 39 88t94 35q70 0 107.5 -52.5t37.5 -146.5q0 -117 -66 -198.5t-187 -116.5z" /> +<glyph horiz-adv-x="770" d="M53 938q0 197 92.5 309.5t239.5 112.5t240.5 -112.5t93.5 -309.5t-93.5 -311.5t-240.5 -114.5t-239.5 114.5t-92.5 311.5zM262 938q0 -258 123 -258t123 258q0 254 -123 254t-123 -254z" /> +<glyph horiz-adv-x="770" d="M156 1110v137q131 18 229 88h176v-798h-223v573h-182z" /> +<glyph horiz-adv-x="770" d="M55 1196q127 164 305 164q135 0 215 -71.5t80 -198.5q0 -61 -33.5 -130t-69.5 -114t-110 -125h242v-184h-592v118q180 147 265 237.5t85 158.5q0 59 -30.5 93t-85.5 34q-72 0 -146 -97z" /> +<glyph horiz-adv-x="770" d="M55 674l133 104q72 -98 170 -98q49 0 82 25.5t33 70.5q0 104 -190 105v127q162 0 161 98q0 39 -26.5 62.5t-73.5 23.5q-66 0 -131 -80l-125 111q131 137 295 137q115 0 197 -61.5t82 -161.5q0 -117 -117 -185q66 -27 105.5 -77t39.5 -117q0 -109 -91 -177.5t-218 -68.5 q-217 0 -326 162z" /> +<glyph horiz-adv-x="770" d="M72 713v110l288 512h275v-477h119v-145h-119v-176h-197v176h-366zM274 858h164v84l13 240h-9l-82 -158z" /> +<glyph horiz-adv-x="770" d="M55 674l133 104q74 -98 170 -98q49 0 83 35t34 84q0 55 -34.5 88t-86.5 33q-63 0 -118 -48l-95 66l35 397h483v-186h-309l-12 -113q49 14 94 15q111 0 185.5 -72t74.5 -190.5t-87 -197.5t-222 -79q-217 0 -328 162z" /> +<glyph horiz-adv-x="770" d="M74 932q0 195 98 311.5t274 116.5q140 0 236 -84l-86 -137q-72 53 -135 53q-162 0 -185 -215q72 68 170 67q115 0 182.5 -67.5t67.5 -181.5q0 -121 -80.5 -202t-201.5 -81q-160 0 -250 113.5t-90 306.5zM276 838q10 -80 45 -119t82 -39q41 0 69 26.5t28 79.5 q0 111 -105 111q-61 0 -119 -59z" /> +<glyph horiz-adv-x="770" d="M102 1149v186h603v-118q-129 -164 -174.5 -310.5t-57.5 -369.5h-233q10 180 60 314t159 298h-357z" /> +<glyph horiz-adv-x="770" d="M78 739q0 125 147 207v8q-119 84 -119 187q0 98 80 158.5t199 60.5q121 0 201 -59.5t80 -159.5q0 -109 -119 -178v-9q143 -74 143 -213q0 -98 -86 -163.5t-219 -65.5t-220 66.5t-87 160.5zM279 760q0 -41 30.5 -71t75.5 -30t76 29t31 70q0 14 -6.5 27.5t-12.5 21.5 t-23 19l-28 16q-10 6 -36 17t-38 18q-69 -45 -69 -117zM301 1135q0 -39 29 -62.5t88 -48.5q51 49 51 100q0 39 -24.5 61.5t-61.5 22.5q-35 0 -58.5 -21.5t-23.5 -51.5z" /> +<glyph horiz-adv-x="770" d="M72 1077q0 119 82 201t202 82q160 0 250 -113.5t90 -306t-99 -310.5t-273 -118q-140 0 -236 84l86 137q68 -53 135 -53q162 0 185 215q-74 -70 -172 -70q-115 0 -182.5 69t-67.5 183zM268 1083q0 -51 28 -80.5t77 -29.5q61 0 121 61q-20 158 -129 158q-41 0 -69 -27.5 t-28 -81.5z" /> +<glyph horiz-adv-x="548" d="M129 936q0 174 45 307t141 277l162 -66q-139 -250 -139 -518t139 -518l-162 -66q-96 145 -141 277.5t-45 306.5z" /> +<glyph horiz-adv-x="548" d="M72 418q139 250 139 518t-139 518l164 66q94 -143 139 -276.5t45 -307.5q0 -172 -45 -305t-139 -279z" /> +<glyph horiz-adv-x="425" d="M84 649q0 57 37 96t92 39t92 -38.5t37 -96.5q0 -55 -37 -92t-92 -37t-92 37t-37 92z" /> +<glyph horiz-adv-x="425" d="M63 381q80 27 119 63.5t39 94.5h-8q-53 0 -91 32.5t-38 88t39 90t94 34.5q70 0 107.5 -52t37.5 -146q0 -117 -66 -199t-187 -119z" /> +<glyph horiz-adv-x="788" d="M53 879q0 154 87 249t202 95q94 0 172 -84h8l19 65h164v-672h-173l-14 64h-8q-84 -80 -176 -80q-129 0 -205 96.5t-76 266.5zM270 883q0 -199 121 -199q57 0 101 59v271q-49 41 -103 41q-51 0 -85 -45t-34 -127z" /> +<glyph horiz-adv-x="788" d="M53 870q0 158 87 255.5t202 97.5q96 0 176 -88h4l19 71h164v-946h-213v219l10 111q-70 -74 -166 -74q-129 0 -206 94.5t-77 259.5zM270 872q0 -184 121 -184q57 0 101 53v269q-53 43 -102.5 43t-84.5 -46t-35 -135z" /> +<glyph horiz-adv-x="708" d="M49 870q0 156 95.5 254.5t228.5 98.5q143 0 217 -93.5t74 -230.5q0 -47 -11 -84h-401q23 -137 172 -137q82 0 147 41l72 -127q-115 -76 -248 -76q-150 0 -248 96.5t-98 257.5zM160 1516h207l118 -205h-155zM248 934h237q0 127 -110 127q-107 0 -127 -127z" /> +<glyph horiz-adv-x="708" d="M49 870q0 156 95.5 254.5t228.5 98.5q143 0 217 -93.5t74 -230.5q0 -47 -11 -84h-401q23 -137 172 -137q82 0 147 41l72 -127q-115 -76 -248 -76q-150 0 -248 96.5t-98 257.5zM248 934h237q0 127 -110 127q-107 0 -127 -127zM258 1311l121 205h205l-170 -205h-156z" /> +<glyph horiz-adv-x="788" d="M53 879q0 154 87 249t202 95q94 0 172 -84h8l19 65h164v-672h-173l-14 64h-8q-84 -80 -176 -80q-129 0 -205 96.5t-76 266.5zM270 883q0 -199 121 -199q57 0 101 59v271q-49 41 -103 41q-51 0 -85 -45t-34 -127z" /> +<glyph horiz-adv-x="802" d="M61 887q0 147 86 240.5t199 93.5q104 0 174 -78h6l17 61h168v-659q0 -143 -92.5 -219t-260.5 -76q-137 0 -256 76l72 137q86 -49 184 -49q68 0 105 39t37 96v10l6 68q-78 -66 -164 -66q-127 0 -204 90t-77 236zM276 889q0 -158 121 -158q59 0 103 57v222q-47 41 -109 41 q-49 0 -82 -42t-33 -120z" /> +<glyph horiz-adv-x="385" d="M86 532v947h213v-947h-213z" /> +<glyph horiz-adv-x="196" d="M-350 -25l721 1385h174l-721 -1385h-174z" /> +<glyph d="M-332 1683h320l166 -245h-240z" /> +<glyph d="M-154 1438l166 245h320l-246 -245h-240z" /> +<glyph d="M-344 1438l197 245h294l197 -245h-231l-109 125h-8l-109 -125h-231z" /> +<glyph d="M-348 1440q14 135 74.5 206.5t144.5 71.5q61 0 140 -46t106 -46q57 0 78 92h153q-14 -135 -74.5 -206.5t-144.5 -71.5q-61 0 -140 46t-106 46q-57 0 -78 -92h-153z" /> +<glyph d="M-289 1475v190h578v-190h-578z" /> +<glyph d="M-281 1683h166q23 -94 115 -94t115 94h166q-29 -245 -281 -245t-281 245z" /> +<glyph d="M-174 1593.5q0 69.5 49 113.5t125 44t125 -44t49 -113.5t-49 -113.5t-125 -44t-125 44t-49 113.5z" /> +<glyph d="M-346 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102zM59 1577q0 61 40 102t103.5 41t103.5 -41t40 -102t-40 -102t-103.5 -41t-103.5 41t-40 102z" /> +<glyph d="M-166 1665l35 150q344 -8 344 -187q0 -100 -79 -151.5t-206 -61.5l-22 119q90 18 90 61q0 57 -162 70z" /> +<glyph d="M-231 1628q0 90 64.5 145.5t166.5 55.5t166.5 -55.5t64.5 -145.5q0 -92 -63.5 -146.5t-167.5 -54.5t-167.5 54.5t-63.5 146.5zM-84 1628q0 -41 23.5 -64.5t60.5 -23.5q35 0 58.5 23.5t23.5 64.5q0 39 -23.5 63.5t-58.5 24.5q-37 0 -60.5 -24.5t-23.5 -63.5z" /> +<glyph d="M-281 1438l129 245h256l-182 -245h-203zM86 1438l131 245h256l-184 -245h-203z" /> +<glyph d="M-344 1683h231l109 -124h8l109 124h231l-197 -245h-294z" /> +<glyph d="M-473 1683h256l131 -245h-203zM-104 1683h256l129 -245h-203z" /> +<glyph d="M-211 -332q170 18 170 90q0 57 -121 86l82 164h176l-41 -96q119 -39 119 -152q0 -100 -101.5 -152t-260.5 -61z" /> +<glyph d="M-182 -264q0 86 49 157.5t104 110.5h185q-119 -96 -119 -188q0 -37 25.5 -57.5t60.5 -20.5q33 0 74 29l69 -152q-94 -72 -215 -72q-100 0 -166.5 51.5t-66.5 141.5z" /> +<glyph d="M-330 1294.5q0 53.5 36 90t91.5 36.5t91 -36.5t35.5 -90t-35.5 -89.5t-91 -36t-91.5 36t-36 89.5zM-283 1548v142h566v-142h-566zM76 1294.5q0 53.5 35.5 90t91 36.5t91.5 -36.5t36 -90t-36 -89.5t-91.5 -36t-91 36t-35.5 89.5z" /> +<glyph d="M-330 1560.5q0 53.5 36 89.5t91.5 36t91 -36t35.5 -89.5t-35.5 -90t-91 -36.5t-91.5 36.5t-36 90zM-289 1786v141h578v-141h-578zM76 1560.5q0 53.5 35.5 89.5t91 36t91.5 -36t36 -89.5t-36 -90t-91.5 -36.5t-91 36.5t-35.5 90z" /> +<glyph d="M-330 1294.5q0 53.5 36 90t91.5 36.5t91 -36.5t35.5 -90t-35.5 -89.5t-91 -36t-91.5 36t-36 89.5zM-139 1509l170 228h258l-236 -228h-192zM76 1294.5q0 53.5 35.5 90t91 36.5t91.5 -36.5t36 -90t-36 -89.5t-91.5 -36t-91 36t-35.5 89.5z" /> +<glyph d="M-330 1560.5q0 53.5 36 89.5t91.5 36t91 -36t35.5 -89.5t-35.5 -90t-91 -36.5t-91.5 36.5t-36 90zM-154 1749l166 246h316l-242 -246h-240zM76 1560.5q0 53.5 35.5 89.5t91 36t91.5 -36t36 -89.5t-36 -90t-91.5 -36.5t-91 36.5t-35.5 90z" /> +<glyph d="M-330 1294.5q0 53.5 36 90t91.5 36.5t91 -36.5t35.5 -90t-35.5 -89.5t-91 -36t-91.5 36t-36 89.5zM-303 1737h205l94 -119h8l94 119h205l-176 -228h-254zM76 1294.5q0 53.5 35.5 90t91 36.5t91.5 -36.5t36 -90t-36 -89.5t-91.5 -36t-91 36t-35.5 89.5z" /> +<glyph d="M-344 1995h231l109 -123h8l109 123h231l-197 -246h-294zM-330 1560.5q0 53.5 36 89.5t91.5 36t91 -36t35.5 -89.5t-35.5 -90t-91 -36.5t-91.5 36.5t-36 90zM76 1560.5q0 53.5 35.5 89.5t91 36t91.5 -36t36 -89.5t-36 -90t-91.5 -36.5t-91 36.5t-35.5 90z" /> +<glyph d="M-330 1294.5q0 53.5 36 90t91.5 36.5t91 -36.5t35.5 -90t-35.5 -89.5t-91 -36t-91.5 36t-36 89.5zM-289 1737h258l170 -228h-192zM76 1294.5q0 53.5 35.5 90t91 36.5t91.5 -36.5t36 -90t-36 -89.5t-91.5 -36t-91 36t-35.5 89.5z" /> +<glyph d="M-330 1560.5q0 53.5 36 89.5t91.5 36t91 -36t35.5 -89.5t-35.5 -90t-91 -36.5t-91.5 36.5t-36 90zM-328 1995h316l166 -246h-240zM76 1560.5q0 53.5 35.5 89.5t91 36t91.5 -36t36 -89.5t-36 -90t-91.5 -36.5t-91 36.5t-35.5 90z" /> +<glyph d="M-285 1176l166 262h238l166 -262h-185l-96 133h-8l-96 -133h-185zM219 1323l139 242h224l-195 -242h-168z" /> +<glyph d="M-324 1438l195 233h258l195 -233h-213l-107 112h-8l-107 -112h-213zM231 1577l140 246h233l-203 -246h-170z" /> +<glyph d="M-285 1176l166 262h238l166 -262h-185l-96 133h-8l-96 -133h-185zM147 1565h224l139 -242h-168z" /> +<glyph d="M-324 1438l195 233h258l195 -233h-213l-107 112h-8l-107 -112h-213zM115 1823h231l141 -246h-172z" /> +<glyph d="M-285 1176l166 262h238l166 -262h-185l-96 133h-8l-96 -133h-185zM190 1513l29 127q301 -8 301 -161q0 -92 -62 -134.5t-175 -58.5l-21 103q61 14 62 57q0 31 -29 47t-105 20z" /> +<glyph d="M-324 1438l195 233h258l195 -233h-213l-107 112h-8l-107 -112h-213zM190 1755l27 123q301 -8 301 -164q1 -160 -237 -178l-23 96q66 14 66 56q0 31 -30 46t-104 21z" /> +<glyph d="M-301 1174l164 227h274l164 -227h-195l-102 120h-8l-102 -120h-195zM-299 1475q12 117 63.5 175t122.5 58q61 0 124 -39t85 -39q57 0 72 78h131q-12 -115 -63.5 -174t-122.5 -59q-61 0 -124 38.5t-85 38.5q-58 1 -72 -77h-131z" /> +<glyph d="M-324 1438l195 233h258l195 -233h-213l-107 112h-8l-107 -112h-213zM-305 1745q12 115 62 173t124 58q61 0 131 -37.5t90 -37.5q55 0 74 75h129q-12 -115 -62 -173t-124 -58q-61 0 -131 39t-90 39q-58 0 -74 -78h-129z" /> +<glyph d="M-285 1460h133q23 -137 152 -137t152 137h133q-4 -121 -77 -202.5t-208 -81.5t-208 81.5t-77 202.5zM-94 1417l117 242h217l-183 -242h-151z" /> +<glyph d="M-279 1683h138q27 -111 141.5 -110.5t140.5 110.5h138q-10 -115 -81 -180t-198 -65t-197.5 65.5t-81.5 179.5zM-92 1655l131 243h227l-207 -243h-151z" /> +<glyph d="M-285 1460h133q23 -137 152 -137t152 137h133q-4 -121 -77 -202.5t-208 -81.5t-208 81.5t-77 202.5zM-240 1659h217l117 -242h-151z" /> +<glyph d="M-279 1683h138q27 -111 141.5 -110.5t140.5 110.5h138q-10 -115 -81 -180t-198 -65t-197.5 65.5t-81.5 179.5zM-266 1898h227l131 -243h-151z" /> +<glyph d="M-285 1460h133q23 -137 152 -137t152 137h133q-4 -121 -77 -202.5t-208 -81.5t-208 81.5t-77 202.5zM-162 1657l27 127q303 -10 303 -164q0 -92 -63.5 -134t-176.5 -56l-18 102q61 14 61 57q0 31 -29.5 46.5t-103.5 21.5z" /> +<glyph d="M-279 1683h138q27 -111 141.5 -110.5t140.5 110.5h138q-10 -115 -81 -180t-198 -65t-197.5 65.5t-81.5 179.5zM-158 1870l29 125q299 -10 299 -166q0 -160 -236 -178l-24 96q68 14 67 55q0 57 -135 68z" /> +<glyph d="M-299 1475q12 117 63.5 175t122.5 58q61 0 124 -39t85 -39q57 0 72 78h131q-12 -115 -63.5 -174t-122.5 -59q-61 0 -124 38.5t-85 38.5q-57 0 -72 -77h-131zM-285 1419h142q25 -102 143.5 -102t142.5 102h142q-4 -104 -77 -173.5t-208 -69.5t-208 69.5t-77 173.5z" /> +<glyph d="M-313 1745q12 115 65 174t125 59q51 0 122 -40t93 -40q61 0 76 80h135q-12 -115 -65.5 -174t-124.5 -59q-51 0 -122 39t-93 39q-27 0 -48.5 -20.5t-27.5 -57.5h-135zM-279 1683h138q27 -111 141.5 -110.5t140.5 110.5h138q-10 -115 -81 -180t-198 -65t-197.5 65.5 t-81.5 179.5z" /> +<glyph horiz-adv-x="83" d="M-55 1577h194l-4 -141l-49 -314h-129z" /> +<glyph d="M-176 1286q0 98 102.5 151.5t261.5 61.5l23 -121q-170 -18 -170 -78q0 -53 88 -73l-57 -111q-135 12 -191.5 52t-56.5 118z" /> +<glyph horiz-adv-x="284" /> +<glyph horiz-adv-x="284" /> +</font> +</defs></svg> \ 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/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<i.length;s++){var o=i[s];U(t,o)||r(t,o,n(e,o))}},St=/#|\.prototype\./,Lt=function(t,i){var r=Mt[At(t)];return r==Wt||r!=kt&&("function"==typeof i?e(i):!!i)},At=Lt.normalize=function(t){return String(t).replace(St,".").toLowerCase()},Mt=Lt.data={},kt=Lt.NATIVE="N",Wt=Lt.POLYFILL="P",Tt=Lt,jt=Q.f,Rt=function(t,e){var i,r,n,s,o,a=t.target,l=t.global,c=t.stat;if(i=l?E:c?E[a]||j(a,{}):(E[a]||{}).prototype)for(r in e){if(s=e[r],n=t.noTargetGet?(o=jt(i,r))&&o.value:i[r],!Tt(l?r:a+(c?".":"#")+r,t.forced)&&void 0!==n){if(typeof s==typeof n)continue;_t(s,n)}(t.sham||n&&n.sham)&&T(s,"sham",!0),dt(i,r,s,t)}},Nt=q(2);Rt({target:"Array",proto:!0,forced:!(ht="filter",!e(function(){var t=[];return(t.constructor={})[F]=function(){return{foo:1}},1!==t[ht](Boolean).foo}))},{filter:function(t){return Nt(this,t,arguments[1])}});var zt=function(t,i){var r=[][t];return!r||!e(function(){r.call(null,i||function(){throw 1},1)})},Ct=[].forEach,Vt=q(0),Dt=zt("forEach")?function(t){return Vt(this,t,arguments[1])}:Ct;Rt({target:"Array",proto:!0,forced:[].forEach!=Dt},{forEach:Dt});Rt({target:"Array",proto:!0,forced:zt("reduce")},{reduce:function(e){return function(e,i,r,n,o){t(i);var l=a(e),c=s(l),u=f(l.length),h=o?u-1:0,d=o?-1:1;if(r<2)for(;;){if(h in c){n=c[h],h+=d;break}if(h+=d,o?h<0:u<=h)throw TypeError("Reduce of empty array with no initial value")}for(;o?h>=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<arguments.length-2;n++)void 0===arguments[n]&&(r[n]=void 0)}),r});var oe=re;Rt({target:"RegExp",proto:!0,forced:/./.exec!==oe},{exec:oe});var ae=function(t,e,i){return e+(i?function(t,e,i){var r,n,s=String(o(t)),a=u(e),l=s.length;return a<0||a>=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,"$<a>")}),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<d.length;m++){p=d[m];for(var y=String(p[0]),x=de(pe(u(p.index),a.length),0),E=[],w=1;w<p.length;w++)E.push(void 0===(v=p[w])?v:String(v));var O=p.groups;if(l){var _=[y].concat(E,x,a);void 0!==O&&_.push(O);var S=String(n.apply(void 0,_))}else S=r(y,a,x,E,O,n);x>=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<i;){var r=t[e];this.set(r[0],r[1])}}function Li(t){var e=-1,i=t?t.length:0;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}function Ai(t){var e=-1,i=t?t.length:0;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}function Mi(t,e){for(var i,r,n=t.length;n--;)if((i=t[n][0])===(r=e)||i!=i&&r!=r)return n;return-1}function ki(t){return!(!Ri(t)||(e=t,bi&&bi in e))&&(function(t){var e=Ri(t)?xi.call(t):"";return e==ai||e==li}(t)||function(t){var e=!1;if(null!=t&&"function"!=typeof t.toString)try{e=!!(t+"")}catch(t){}return e}(t)?Ei:ci).test(function(t){if(null!=t){try{return mi.call(t)}catch(t){}try{return t+""}catch(t){}}return""}(t));var e}function Wi(t,e){var i,r,n=t.__data__;return("string"==(r=typeof(i=e))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==i:null===i)?n["string"==typeof e?"string":"hash"]:n.map}function Ti(t,e){var i=function(t,e){return null==t?void 0:t[e]}(t,e);return ki(i)?i:void 0}function ji(t,e){if("function"!=typeof t||e&&"function"!=typeof e)throw new TypeError(si);var i=function(){var r=arguments,n=e?e.apply(this,r):r[0],s=i.cache;if(s.has(n))return s.get(n);var o=t.apply(this,r);return i.cache=s.set(n,o),o};return i.cache=new(ji.Cache||Ai),i}function Ri(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}Si.prototype.clear=function(){this.__data__=_i?_i(null):{}},Si.prototype.delete=function(t){return this.has(t)&&delete this.__data__[t]},Si.prototype.get=function(t){var e=this.__data__;if(_i){var i=e[t];return i===oi?void 0:i}return yi.call(e,t)?e[t]:void 0},Si.prototype.has=function(t){var e=this.__data__;return _i?void 0!==e[t]:yi.call(e,t)},Si.prototype.set=function(t,e){return this.__data__[t]=_i&&void 0===e?oi:e,this},Li.prototype.clear=function(){this.__data__=[]},Li.prototype.delete=function(t){var e=this.__data__,i=Mi(e,t);return!(i<0||(i==e.length-1?e.pop():wi.call(e,i,1),0))},Li.prototype.get=function(t){var e=this.__data__,i=Mi(e,t);return i<0?void 0:e[i][1]},Li.prototype.has=function(t){return Mi(this.__data__,t)>-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__;i<r.length;i++){var n=r[i];t.call(e,n[1],n[0])}},e}()}(),Ci="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,Vi="undefined"!=typeof global&&global.Math===Math?global:"undefined"!=typeof self&&self.Math===Math?self:"undefined"!=typeof window&&window.Math===Math?window:Function("return this")(),Di="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(Vi):function(t){return setTimeout(function(){return t(Date.now())},1e3/60)},Bi=2;var Ii=20,Pi=["top","right","bottom","left","width","height","size","weight"],Hi="undefined"!=typeof MutationObserver,qi=function(){function t(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(t,e){var i=!1,r=!1,n=0;function s(){i&&(i=!1,t()),r&&a()}function o(){Di(s)}function a(){var t=Date.now();if(i){if(t-n<Bi)return;r=!0}else i=!0,r=!1,setTimeout(o,e);n=t}return a}(this.refresh.bind(this),Ii)}return t.prototype.addObserver=function(t){~this.observers_.indexOf(t)||this.observers_.push(t),this.connected_||this.connect_()},t.prototype.removeObserver=function(t){var e=this.observers_,i=e.indexOf(t);~i&&e.splice(i,1),!e.length&&this.connected_&&this.disconnect_()},t.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},t.prototype.updateObservers_=function(){var t=this.observers_.filter(function(t){return t.gatherActive(),t.hasActive()});return t.forEach(function(t){return t.broadcastActive()}),t.length>0},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);i<r.length;i++){var n=r[i];Object.defineProperty(t,n,{value:e[n],enumerable:!1,writable:!1,configurable:!0})}return t},$i=function(t){return t&&t.ownerDocument&&t.ownerDocument.defaultView||Vi},Xi=Qi(0,0,0,0);function Yi(t){return parseFloat(t)||0}function Gi(t){for(var e=[],i=1;i<arguments.length;i++)e[i-1]=arguments[i];return e.reduce(function(e,i){return e+Yi(t["border-"+i+"-width"])},0)}function Ki(t){var e=t.clientWidth,i=t.clientHeight;if(!e&&!i)return Xi;var r=$i(t).getComputedStyle(t),n=function(t){for(var e={},i=0,r=["top","right","bottom","left"];i<r.length;i++){var n=r[i],s=t["padding-"+n];e[n]=Yi(s)}return e}(r),s=n.left+n.right,o=n.top+n.bottom,a=Yi(r.width),l=Yi(r.height);if("border-box"===r.boxSizing&&(Math.round(a+s)!==e&&(a-=Gi(r,"left","right")+s),Math.round(l+o)!==i&&(l-=Gi(r,"top","bottom")+o)),!function(t){return t===$i(t).document.documentElement}(t)){var c=Math.round(a+s)-e,u=Math.round(l+o)-i;1!==Math.abs(c)&&(a-=c),1!==Math.abs(u)&&(l-=u)}return Qi(n.left,n.top,a,l)}var Ui="undefined"!=typeof SVGGraphicsElement?function(t){return t instanceof $i(t).SVGGraphicsElement}:function(t){return t instanceof $i(t).SVGElement&&"function"==typeof t.getBBox};function Ji(t){return Ci?Ui(t)?function(t){var e=t.getBBox();return Qi(0,0,e.width,e.height)}(t):Ki(t):Xi}function Qi(t,e,i,r){return{x:t,y:e,width:i,height:r}}var Zi=function(){function t(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=Qi(0,0,0,0),this.target=t}return t.prototype.isActive=function(){var t=Ji(this.target);return this.contentRect_=t,t.width!==this.broadcastWidth||t.height!==this.broadcastHeight},t.prototype.broadcastRect=function(){var t=this.contentRect_;return this.broadcastWidth=t.width,this.broadcastHeight=t.height,t},t}(),tr=function(){return function(t,e){var i,r,n,s,o,a,l,c=(r=(i=e).x,n=i.y,s=i.width,o=i.height,a="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,l=Object.create(a.prototype),Fi(l,{x:r,y:n,width:s,height:o,top:n,right:r+s,bottom:o+n,left:r}),l);Fi(this,{target:t,contentRect:c})}}(),er=function(){function t(t,e,i){if(this.activeObservations_=[],this.observations_=new zi,"function"!=typeof t)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=t,this.controller_=e,this.callbackCtx_=i}return t.prototype.observe=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof $i(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)||(e.set(t,new Zi(t)),this.controller_.addObserver(this),this.controller_.refresh())}},t.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof $i(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)&&(e.delete(t),e.size||this.controller_.removeObserver(this))}},t.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},t.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach(function(e){e.isActive()&&t.activeObservations_.push(e)})},t.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,e=this.activeObservations_.map(function(t){return new tr(t.target,t.broadcastRect())});this.callback_.call(t,e,t),this.clearActive()}},t.prototype.clearActive=function(){this.activeObservations_.splice(0)},t.prototype.hasActive=function(){return this.activeObservations_.length>0},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='<div class="hs-dummy-scrollbar-size"><div style="height: 200%; width: 200%; margin: 10px 0;"></div></div>';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/languages.yaml b/themes/yunohost-docs/languages.yaml new file mode 100644 index 00000000..77f045b0 --- /dev/null +++ b/themes/yunohost-docs/languages.yaml @@ -0,0 +1,44 @@ +en: + THEME_LEARN4_GITHUB_EDIT: Edit + THEME_LEARN4_GITHUB_NOTE: "Found errors? Think you can improve this documentation? Simply click the <strong><i class=\"fa fa-pencil-square\"></i> Edit</strong> link at the top of the page, and then the <strong><i class=\"fa fa-pencil\"></i></strong> icon on Github to suggest changes." + THEME_LEARN4_CLEAR_HISTORY: Clear History + THEME_LEARN4_BUILT_WITH_GRAV: Built with <a href="http://getgrav.org">Grav</a> - The Modern Flat File CMS + THEME_LEARN4_SEARCH_DOCUMENTATION: Search... + THEME_LEARN4_SEARCH_ADVANCED: Advanced search +cn: + THEME_LEARN4_GITHUB_NOTE: "发现错误?请帮忙改进,谢谢! Simply click the <strong><i class=\"fa fa-pencil-square\"></i> Edit</strong> link at the top of the page, and then the <strong><i class=\"fa fa-pencil\"></i></strong> icon on Github to suggest changes." + THEME_LEARN4_CLEAR_HISTORY: 清除历史 + THEME_LEARN4_BUILT_WITH_GRAV: Built with <a href="http://getgrav.org">Grav</a> - The Modern Flat File CMS + THEME_LEARN4_SEARCH_DOCUMENTATION: 搜索文档 +cs: + THEME_LEARN4_GITHUB_NOTE: "Našli jste chybu? Myslíte, že můžete vylepšit tuto dokumentaci? Simply click the <strong><i class=\"fa fa-pencil-square\"></i> Edit</strong> link at the top of the page, and then the <strong><i class=\"fa fa-pencil\"></i></strong> icon on Github to suggest changes." + THEME_LEARN4_CLEAR_HISTORY: Smazat historii + THEME_LEARN4_BUILT_WITH_GRAV: Postaveno na <a href="http://getgrav.org">Grav</a> - Moderní správce obsahu pomocí souborů prostých textů + THEME_LEARN4_SEARCH_DOCUMENTATION: Vyhledat v dokumentaci +de: + THEME_LEARN4_GITHUB_NOTE: "Fehler gefunden? Möchten Sie diese Seite verbessern? Simply click the <strong><i class=\"fa fa-pencil-square\"></i> Edit</strong> link at the top of the page, and then the <strong><i class=\"fa fa-pencil\"></i></strong> icon on Github to suggest changes." + THEME_LEARN4_CLEAR_HISTORY: Verlauf löschen + THEME_LEARN4_BUILT_WITH_GRAV: Seite erstellt mit <a href="http://getgrav.org">Grav</a> - The Modern Flat File CMS + THEME_LEARN4_SEARCH_DOCUMENTATION: Dokumentation durchsuchen +es: + THEME_LEARN4_GITHUB_NOTE: "¿Encontraste errores? ¿Crees que puedes mejorar esta documentación? Simply click the <strong><i class=\"fa fa-pencil-square\"></i> Edit</strong> link at the top of the page, and then the <strong><i class=\"fa fa-pencil\"></i></strong> icon on Github to suggest changes." + THEME_LEARN4_CLEAR_HISTORY: Limpiar historial + THEME_LEARN4_BUILT_WITH_GRAV: Hecho con <a href="http://getgrav.org">Grav</a> - El CMS moderno de archivos planos + THEME_LEARN4_SEARCH_DOCUMENTATION: Buscar en la documentación +fr: + THEME_LEARN4_GITHUB_EDIT: Éditer + THEME_LEARN4_GITHUB_NOTE: "Vous avez découvert des erreurs ? Vous pensez pouvoir améliorer cette documentation ? Cliquez sur <strong><i class=\"fa fa-pencil-square\"></i> Éditer</strong> en haut de la page, puis sur l'icone <strong><i class=\"fa fa-pencil\"></i></strong> crayon sur Github pour proposer vos changements." + THEME_LEARN4_CLEAR_HISTORY: Effacer l'historique + THEME_LEARN4_BUILT_WITH_GRAV: Créé avec <a href="http://getgrav.org">Grav</a> - Le CMS moderne sans base de données + THEME_LEARN4_SEARCH_DOCUMENTATION: Recherche... + THEME_LEARN4_SEARCH_ADVANCED: Recherche avancée +it: + THEME_LEARN4_GITHUB_NOTE: "Hai trovato degli errori? Pensi di poter migliorare questa documentazione? Simply click the <strong><i class=\"fa fa-pencil-square\"></i> Edit</strong> link at the top of the page, and then the <strong><i class=\"fa fa-pencil\"></i></strong> icon on Github to suggest changes." + THEME_LEARN4_CLEAR_HISTORY: Cancella Cronologia + THEME_LEARN4_BUILT_WITH_GRAV: Built with <a href="http://getgrav.org">Grav</a> - The Modern Flat File CMS + THEME_LEARN4_SEARCH_DOCUMENTATION: Cerca nella Documentatione +ru: + THEME_LEARN4_GITHUB_NOTE: "Нашли ошибки? Думаете, что можете улучшить документацию? Simply click the <strong><i class=\"fa fa-pencil-square\"></i> Edit</strong> link at the top of the page, and then the <strong><i class=\"fa fa-pencil\"></i></strong> icon on Github to suggest changes." + THEME_LEARN4_CLEAR_HISTORY: Очистить историю + THEME_LEARN4_BUILT_WITH_GRAV: Сделано на <a href="http://getgrav.org">Grav</a> — современной файловой CMS + THEME_LEARN4_SEARCH_DOCUMENTATION: Поиск по документации diff --git a/themes/yunohost-docs/screenshot.jpg b/themes/yunohost-docs/screenshot.jpg new file mode 100644 index 00000000..5205ca51 Binary files /dev/null and b/themes/yunohost-docs/screenshot.jpg differ diff --git a/themes/yunohost-docs/scss/custom.scss b/themes/yunohost-docs/scss/custom.scss new file mode 100644 index 00000000..565166eb --- /dev/null +++ b/themes/yunohost-docs/scss/custom.scss @@ -0,0 +1,11 @@ +/*######################################## +########################################## + 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 +########################################## +########################################*/ +@import "theme/light/custom"; +@import "theme/dark/custom"; +@import "theme/global"; diff --git a/themes/yunohost-docs/scss/theme/_global.scss b/themes/yunohost-docs/scss/theme/_global.scss new file mode 100644 index 00000000..0573bda3 --- /dev/null +++ b/themes/yunohost-docs/scss/theme/_global.scss @@ -0,0 +1,312 @@ +.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; +} diff --git a/themes/yunohost-docs/scss/theme/dark/_custom.scss b/themes/yunohost-docs/scss/theme/dark/_custom.scss new file mode 100644 index 00000000..7731ea8d --- /dev/null +++ b/themes/yunohost-docs/scss/theme/dark/_custom.scss @@ -0,0 +1,304 @@ +/*! + * Dark Mode Theme + * + * Inspired by Louis Charette + * https://github.com/lcharette/website/blob/cc855a6eb29693613e5e4e1d589a17ba7faf4aa9/themes/quark-custom/css/darkMode.scss + */ + +body.dark-mode { + // Variables + $background-color: rgb(23, 27, 33); + $text-color: rgb(232, 233, 235); + $text-accent-color: white; + $text-darker-color: rgb(165, 169, 175); + $card-bg-color: rgb(17, 20, 24); + $border-color: rgb(63, 71, 85); + $link-color: rgb(114, 182, 236); + + $danger: rgb(113, 44, 44); + $warning: rgb(132, 88, 4); + $success: rgb(51, 87, 35); + + // Main body background + background-color: $background-color; + + ::selection { + background-color: $border-color; + } + + // Page wrapper + #body-wrapper, + #page-wrapper { + background-color: $background-color; + color: $text-color; + } + + // Darker blue for links + a { + color: $link-color; + } + + // Card, header and dropdown have darker background + .card, + #footer, + .dropmenu ul ul { + background-color: $card-bg-color !important; + } + + // Headers have whiter color + h1, + h2, + h3, + h4, + h5, + h6, + #header a { + color: $text-accent-color; + } + + // Labels are grey + .label.label-primary { + color: $text-accent-color; + background-color: $link-color; + } + .label.label-secondary { + color: $text-color; + background-color: $border-color; + } + + // Pagination border is slighly different than the text + .pagination li { + border-color: $border-color; + background: $card-bg-color; + } + + #sidebar-id { + background: $background-color; + } + // Sidebar menu use darker text color for focus + .menu, + .learn-brand, + .learn-nav { + color: $text-darker-color; + } + + .menu .menu-item > a:focus, + .menu .menu-item > a:hover, + #top-bar #navigation > a:hover { + background: $card-bg-color; + } + + #sidebar ul.related-pages li { + border-bottom-color: $border-color; + } + + // Form background + .form-input, + .search-input, + [data-grav-field="array"] input, + [data-grav-field="array"] textarea { + background: $card-bg-color; + } + + /*================================================= + Side Bar + =================================================*/ + // Change logo color + .off-canvas .learn-sidebar .learn-brand #logo path { + fill: $text-color !important; + } + + // Sidebar separator + .simplebar-content h5 { + border-top-color: $border-color; + } + + .off-canvas #sidebar-id { + border-right: 0.05rem solid $border-color; + } + + // Text in the sidebar during a search + .off-canvas .learn-sidebar .learn-nav ul.searched a, + .off-canvas .learn-sidebar .searchbox input { + color: $text-color; + } + + // Selected text in the sidebar + .off-canvas .learn-sidebar .learn-nav ul li.active > a, + // Placeholder of the searching bar + .off-canvas .learn-sidebar .searchbox ::placeholder { + color: $text-darker-color; + background-color: transparent; + } + + // Matching text in the sidebar + .off-canvas .learn-sidebar .learn-nav ul.searched .search-match a:hover, + .off-canvas .learn-sidebar .learn-nav ul.searched .search-match a { + color: $link-color; + } + + // Background for selected submenu in the navbar + .off-canvas .learn-sidebar .learn-nav ul.topics > li.active, + .off-canvas .learn-sidebar .learn-nav ul.topics > li.parent { + background-color: rgba(255, 255, 255, 0.1); + } + + // Icons + .off-canvas .learn-sidebar .learn-nav .read-icon, + .off-canvas .learn-sidebar .searchbox { + color: $text-color; + } + + // Language selector + .off-canvas .learn-sidebar .search-options .version-chooser select { + color: $text-color; + } + + // Default text color + .off-canvas .learn-sidebar a, + .off-canvas .learn-sidebar .learn-nav ul li a, + .off-canvas .learn-sidebar .learn-nav ul li a > i, + .off-canvas .learn-sidebar .learn-nav ul li a > span > b { + color: $text-color; + } + + .off-canvas .learn-sidebar a:hover { + color: $text-darker-color; + } + + /*================================================= + App catalog + =================================================*/ + + #filter-app-icon, + #filter-app-cards { + color: $text-color; + background-color: $card-bg-color; + } + + #app-cards-list .app-title { + color: $text-accent-color; + } + + #app-cards-list .app-buttons { + border-top: 0.05rem solid $card-bg-color; + } + + #app-cards-list .app-buttons > .btn-default { + color: $text-accent-color; + background-color: $border-color; + } + + #app-cards-list .app-buttons > .btn:first-child { + border-right: 0.1rem solid $card-bg-color; + } + + #app-cards-list .app-card { + border-color: $border-color; + } + + #app-cards-list .label { + color: black; + } + + /*================================================= + Hardware image + =================================================*/ + + .hardware-image .card { + background-color: $background-color !important; + border-color: $border-color; + } + + .hardware-image .btn-group .btn.btn-info { + color: $card-bg-color; + } + + .hardware-image .btn-group .btn.btn-info:hover, + .btn.btn-info:focus { + color: $card-bg-color; + } + + /*================================================= + Other + =================================================*/ + + // Html tables + table tbody tr:nth-of-type(2n + 1) { + background: $card-bg-color; + } + + table td, + table th { + border-bottom-color: $border-color; + } + + // Color utils + .danger { + background-color: $danger; + } + .warning { + background-color: $warning; + } + .success { + background-color: $success; + } + + .page-toc { + background-color: $card-bg-color; + } + + .page-toc li, + .page-toc li > a { + color: $text-accent-color; + } +} + +/*================================================= + Dark mode specific +=================================================*/ +body.dark-mode { + // Dim images + img { + filter: brightness(0.85) contrast(1.2); + } + + img#whitelogo { + background-color: unset; + padding: 10px; + } + + #ynhlogo { + filter: invert(1); + } + + .notices.yellow { + border-left-color: rgb(147, 91, 12); + background-color: rgb(49, 34, 11); + color: rgb(238, 160, 52); + } + + .notices.red { + border-left-color: rgb(137, 33, 30); + background-color: rgb(46, 11, 11); + color: rgb(219, 90, 86); + } + + .notices.blue, + .notices.note { + border-left-color: rgb(27, 110, 134); + background-color: rgb(19, 34, 42); + color: rgb(75, 185, 218); + } + + .notices.green { + border-left-color: rgb(52, 120, 52); + background-color: rgb(25, 44, 19); + color: rgb(122, 197, 122); + } + + code { + background: rgb(58, 58, 58); + color: rgb(236, 229, 173); + } +} diff --git a/themes/yunohost-docs/scss/theme/light/_custom.scss b/themes/yunohost-docs/scss/theme/light/_custom.scss new file mode 100644 index 00000000..6b4e7717 --- /dev/null +++ b/themes/yunohost-docs/scss/theme/light/_custom.scss @@ -0,0 +1,258 @@ +body.light-mode { + // Variables + $background-color: rgb(255, 255, 255); + $text-color: rgb(23, 27, 33); + $text-accent-color: rgb(36, 41, 49); + $text-darker-color: rgb(17, 20, 24); + $card-bg-color: rgb(240, 240, 240); + $border-color: rgb(221, 221, 221); + $link-color: rgb(0, 112, 211); + + $danger: rgb(242, 222, 222); + $warning: rgb(252, 248, 227); + $success: rgb(223, 240, 216); + + // Main body background + background-color: $background-color; + + ::selection { + background-color: $border-color; + } + // Page wrapper + #body-wrapper, + #page-wrapper { + background-color: $background-color; + color: $text-color; + } + + // Darker blue for links + a { + color: $link-color; + } + + // Card, header and dropdown have darker background + .card, + #footer, + .dropmenu ul ul { + background-color: $card-bg-color !important; + } + + // Headers have whiter color + h1, + h2, + h3, + h4, + h5, + h6, + #header a { + color: $text-accent-color; + } + + // Labels are grey + .label.label-primary { + color: $text-accent-color; + background-color: $link-color; + } + .label.label-secondary { + color: $text-color; + background-color: $border-color; + } + + // Pagination border is slighly different than the text + .pagination li { + border-color: $border-color; + background: $card-bg-color; + } + + #sidebar-id { + background: $background-color; + } + // Sidebar menu use darker text color for focus + .menu, + .learn-brand, + .learn-nav { + color: $text-darker-color; + } + + .menu .menu-item > a:focus, + .menu .menu-item > a:hover, + #top-bar #navigation > a:hover { + background: $card-bg-color; + } + + #sidebar ul.related-pages li { + border-bottom-color: $border-color; + } + + // Form background + .form-input, + .search-input, + [data-grav-field="array"] input, + [data-grav-field="array"] textarea { + background: $card-bg-color; + } + + /*================================================= + Side Bar + =================================================*/ + // Change logo color + .off-canvas .learn-sidebar .learn-brand #logo path { + fill: $text-color !important; + } + + // Sidebar separator + .simplebar-content h5 { + border-top-color: $border-color; + } + + .off-canvas #sidebar-id { + border-right: 0.05rem solid $border-color; + } + + // Text in the sidebar during a search + .off-canvas .learn-sidebar .learn-nav ul.searched a, + .off-canvas .learn-sidebar .searchbox input { + color: $text-color; + } + + // Selected text in the sidebar + .off-canvas .learn-sidebar .learn-nav ul li.active > a, + // Placeholder of the searching bar + .off-canvas .learn-sidebar .searchbox ::placeholder { + color: $text-darker-color; + background-color: transparent; + } + + // Matching text in the sidebar + .off-canvas .learn-sidebar .learn-nav ul.searched .search-match a:hover, + .off-canvas .learn-sidebar .learn-nav ul.searched .search-match a { + color: $link-color; + } + + // Background for selected submenu in the navbar + .off-canvas .learn-sidebar .learn-nav ul.topics > li.active, + .off-canvas .learn-sidebar .learn-nav ul.topics > li.parent { + background-color: rgba(0, 0, 0, 0.1); + } + + // Icons + .off-canvas .learn-sidebar .learn-nav .read-icon, + .off-canvas .learn-sidebar .searchbox { + color: $text-color; + } + + // Language selector + .off-canvas .learn-sidebar .search-options .version-chooser select { + color: $text-color; + } + + // Default text color + .off-canvas .learn-sidebar a, + .off-canvas .learn-sidebar .learn-nav ul li a, + .off-canvas .learn-sidebar .learn-nav ul li a > i, + .off-canvas .learn-sidebar .learn-nav ul li a > span > b { + color: $text-color; + } + + .off-canvas .learn-sidebar a:hover { + color: $text-darker-color; + } + + /*================================================= + App catalog + =================================================*/ + + #filter-app-icon, + #filter-app-cards { + color: $text-color; + background-color: $card-bg-color; + } + + #app-cards-list .app-title { + color: $text-accent-color; + } + + #app-cards-list .app-buttons { + border-top: 0.05rem solid $card-bg-color; + } + + #app-cards-list .app-buttons > .btn-default { + color: $text-accent-color; + background-color: $border-color; + } + + #app-cards-list .app-buttons > .btn:first-child { + border-right: 0.1rem solid $card-bg-color; + } + + #app-cards-list .app-card { + border-color: $border-color; + } + + #app-cards-list .label { + color: black; + } + + /*================================================= + Hardware image + =================================================*/ + + .hardware-image .card { + background-color: $background-color !important; + border-color: $border-color; + } + + .hardware-image .btn-group .btn.btn-info { + color: $card-bg-color; + } + + .hardware-image .btn-group .btn.btn-info:hover, + .btn.btn-info:focus { + color: $card-bg-color; + } + + /*================================================= + Other + =================================================*/ + + // Html tables + table tbody tr:nth-of-type(2n + 1) { + background: $card-bg-color; + } + + table td, + table th { + border-bottom-color: $border-color; + } + + // Color utils + .danger { + background-color: $danger; + } + .warning { + background-color: $warning; + } + .success { + background-color: $success; + } + + .page-toc { + background-color: $card-bg-color; + } + + .page-toc li, + .page-toc li > a { + color: $text-accent-color; + } +} + +/*================================================= + Light mode specific +=================================================*/ +body.light-mode { + /* Give a gray background to the white logo*/ + img#whitelogo { + background-color: gray; + padding: 10px; + } +} diff --git a/themes/yunohost-docs/templates/macros/macros.html.twig b/themes/yunohost-docs/templates/macros/macros.html.twig new file mode 100644 index 00000000..9102f785 --- /dev/null +++ b/themes/yunohost-docs/templates/macros/macros.html.twig @@ -0,0 +1,35 @@ +{% macro loop(page, parent_loop) %} + {% import _self as macros %} + {% if parent_loop|length > 0 %} + {% set data_level = parent_loop %} + {% else %} + {% set data_level = 0 %} + {% endif %} + {% for p in page.children.visible %} + {% set parent_page = p.activeChild ? ' parent' : '' %} + {% set current_page = p.active ? ' active' : '' %} + <li class="dd-item{{ parent_page }}{{ current_page }}" data-nav-id="{{ p.route }}"> + <a href="{{ p.url }}" {% if p.header.class %}class="{{ p.header.class }}"{% endif %}> + <i class="fa fa-check-square read-icon"></i> + <span><b>{% if data_level == 0 %}{{ loop.index }}. {% endif %}</b>{{ p.menu }}</span> + </a> + {% if p.children.count > 0 %} + <ul> + {{ macros.loop(p, parent_loop|default(0)+loop.index) }} + </ul> + {% endif %} + </li> + {% endfor %} +{% endmacro %} + +{% macro version(p) %} + {% set parent_page = p.activeChild ? ' parent' : '' %} + {% set current_page = p.active ? ' active' : '' %} + <h5 class="{{ parent_page }}{{ current_page }}"> + {% if p.activeChild or p.active %} + <a href="{{ p.url }}"><i class="fa fa-chevron-down fa-fw"></i>{{ p.menu }}</a> + {% else %} + <a href="{{ p.url }}"><i class="fa fa-plus fa-fw"></i>{{ p.menu }}</a> + {% endif %} + </h5> +{% endmacro %} diff --git a/themes/yunohost-docs/templates/partials/base.html.twig b/themes/yunohost-docs/templates/partials/base.html.twig new file mode 100644 index 00000000..b4989e8c --- /dev/null +++ b/themes/yunohost-docs/templates/partials/base.html.twig @@ -0,0 +1,81 @@ +{% set theme_config = attribute(config.themes, config.system.pages.theme) %} +{% set github_config = theme_var('github') %} +{% set grid_size = theme_var('grid-size') %} +{% set compress = theme_var('production-mode') ? '.min.css' : '.css' %} +<!DOCTYPE html> +<html lang="{{ grav.language.getActive ?: grav.config.site.default_lang }}"> +<head> +{% block head deferred %} + <meta charset="utf-8" /> + <title>{% if page.title %}{{ page.title|e('html') }} | {% endif %}{{ site.title|e('html') }}</title> + + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + {% include 'partials/metadata.html.twig' %} + + <link rel="icon" type="image/png" href="{{ url('theme://images/favicon.png') }}" /> + <link rel="canonical" href="{{ page.url(true, true) }}" /> +{% endblock head %} + +{% block stylesheets %} + {% do assets.addCss('theme://css/fork-awesome.min.css') %} + {% do assets.addCss('theme://css-compiled/spectre'~compress) %} + {% do assets.addCss('theme://css-compiled/theme'~compress) %} + {% do assets.addCss('theme://css/custom.css') %} +{% endblock %} + +{% block javascripts %} + {% do assets.addJs('jquery', 101) %} + {% do assets.addJs('theme://js/simplebar.min.js', { group:'bottom' }) %} + {% do assets.addJs('theme://js/learn4.js', { group:'bottom' }) %} + {% do assets.addJs('theme://js/darkMode.js', { group:'bottom' }) %} +{% endblock %} + +{% block assets deferred %} + {{ assets.css()|raw }} + {{ assets.js()|raw }} +{% endblock %} +</head> +<body id="top" class="{{ sidebar_color }} {% block body_classes %}{{ body_classes|trim }}{% endblock %}" data-url="{{ page.route }}"> + <div id="page-wrapper" class="off-canvas off-canvas-sidebar-show"> + <!-- off-screen toggle button --> + <a class="off-canvas-toggle btn btn-primary btn-action" href="#sidebar-id"> + <i class="fa fa-bars"></i> + </a> + + <div id="sidebar-id" class="learn-sidebar off-canvas-sidebar"> + <!-- off-screen sidebar --> + {% include 'partials/sidebar.html.twig' %} + </div> + + <a class="off-canvas-overlay" href="#close"></a> + + <div class="learn-content off-canvas-content"> + {% block topbar %} + {% include 'partials/topbar.html.twig' %} + {% endblock %} + + <section id="start"> + {% block body %} + <section id="body-wrapper" class="section"> + <section class="container {{ grid_size }}"> + {% block messages %} + {% include 'partials/messages.html.twig' ignore missing %} + {% endblock %} + {% block content %}{% endblock %} + </section> + </section> + {% endblock %} + </section> + + {% block footer %} + {% include 'partials/footer.html.twig' %} + {% endblock %} + </div> + </div> + + {% block bottom %} + {{ assets.js('bottom')|raw }} + {% endblock %} +</body> +</html> diff --git a/themes/yunohost-docs/templates/partials/darkmodeswitcher.html.twig b/themes/yunohost-docs/templates/partials/darkmodeswitcher.html.twig new file mode 100644 index 00000000..99e7911f --- /dev/null +++ b/themes/yunohost-docs/templates/partials/darkmodeswitcher.html.twig @@ -0,0 +1,3 @@ +<a href="#" class="dark-mode-switcher"> + <i class="fa fa-moon-o"></i> +</a> \ No newline at end of file diff --git a/themes/yunohost-docs/templates/partials/logo.html.twig b/themes/yunohost-docs/templates/partials/logo.html.twig new file mode 100644 index 00000000..fb42c3fb --- /dev/null +++ b/themes/yunohost-docs/templates/partials/logo.html.twig @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + inkscape:version="1.0 (4035a4fb49, 2020-05-01)" + id="svg58" + version="1.1" + viewBox="0 0 263.25989 58.999805" + height="100%" + width="100%"> + <defs + id="defs52" /> + <sodipodi:namedview + inkscape:window-maximized="0" + inkscape:window-y="0" + inkscape:window-x="160" + inkscape:window-height="1030" + inkscape:window-width="1424" + fit-margin-bottom="0" + fit-margin-right="0" + fit-margin-left="0" + fit-margin-top="0" + showgrid="false" + inkscape:document-rotation="0" + inkscape:current-layer="layer1" + inkscape:document-units="mm" + inkscape:cy="41.790529" + inkscape:cx="441.04996" + inkscape:zoom="0.7" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" /> + <metadata + id="metadata55"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + transform="translate(-2.7614142,-147.72677)" + id="layer1" + inkscape:groupmode="layer" + inkscape:label="Layer 1"> + <g + transform="translate(-2.1219714,54.42857)" + id="g74"> + <path + id="path76" + d="m 144.84887,151.62424 c -2.63432,-1.45699 -4.5299,-3.63776 -6.44293,-7.41228 -1.06728,-2.10579 -3.02342,-4.67603 -4.34698,-5.71164 -2.74081,-2.14452 -4.32914,-4.76522 -4.32914,-7.14294 0,-2.20453 1.03456,-2.91837 5.74141,-3.96153 l 4.00198,-0.88694 0.49128,-5.02512 c 1.25869,-12.8747 2.36085,-16.78438 4.73162,-16.78438 2.40751,0 5.86749,1.98628 7.24523,4.1593 1.28369,2.02466 1.37768,2.90277 1.04729,9.78382 -0.33012,6.87539 -0.2571,7.55952 0.8068,7.55952 1.72963,0 4.02098,-1.82034 5.22701,-4.15254 0.64564,-1.24852 1.20356,-4.59501 1.42156,-8.52667 0.36193,-6.52733 1.51144,-10.42679 3.27297,-11.10275 1.53106,-0.58753 6.93271,0.66416 8.33231,1.93078 2.24898,2.03531 2.23385,4.37316 -0.0699,10.80562 -2.29741,6.41464 -2.7593,12.79727 -1.28526,17.7607 0.84762,2.85417 0.90501,12.07485 0.0832,13.37265 -0.86676,1.36883 -4.31924,-0.94641 -9.05826,-6.07448 l -3.83538,-4.15025 -2.34045,1.11609 c -1.28726,0.61385 -2.92433,1.11609 -3.63794,1.11609 -1.90868,0 -2.68868,2.04686 -2.68868,7.05556 0,6.41089 -1.14443,8.05413 -4.36772,6.27139 z M 17.689105,149.57216 c -2.81163,-2.99285 -4.438806,-7.86055 -4.442829,-13.29074 -0.0021,-2.78658 0.375562,-5.7436 0.844665,-6.61418 1.307133,-2.42582 0.344769,-4.6216 -3.927088,-8.96023 l -3.9213728,-3.98266 -0.832285,-7.72652 c -0.935277,-8.68265 -0.651533,-12.53585 1.0626007,-14.42994 1.8697561,-2.06606 4.2255211,-1.61038 7.0557501,1.36481 2.305489,2.42357 2.631406,3.25231 3.715957,9.44888 0.653851,3.73576 1.53393,7.26426 1.955733,7.84111 1.174302,1.60596 3.266527,0.56648 6.405141,-3.18225 3.405036,-4.06694 5.055314,-4.26376 7.964895,-0.94993 3.487721,3.9723 2.716076,7.10812 -3.287638,13.36037 l -4.011058,4.1771 -1.016706,7.68254 c -1.430203,10.80703 -3.019308,16.36467 -4.750445,16.61392 -0.752252,0.10831 -2.011307,-0.49645 -2.81532,-1.35228 z m 28.046358,-1.95042 c -2.386301,-0.95155 -4.624135,-3.20188 -6.156967,-6.19136 -1.547341,-3.01779 -3.252488,-11.31102 -3.246823,-15.79141 0.0054,-4.22626 1.808294,-15.94375 2.713485,-17.63511 0.717187,-1.34008 0.762901,-1.34188 2.867153,-0.11293 1.176091,0.68687 2.841972,2.29085 3.701957,3.56438 1.503878,2.22707 1.545784,2.63938 1.096947,10.79311 -0.339532,6.16807 -0.253448,8.60935 0.315991,8.96128 2.040708,1.26123 4.894015,-3.94885 8.446431,-15.42299 1.373059,-4.43492 2.730227,-8.31358 3.015929,-8.61923 0.86317,-0.92345 5.326633,4.24682 5.787627,6.70413 0.960052,5.11751 -2.072323,20.47205 -5.300116,26.83731 -1.966112,3.8772 -3.329713,5.22874 -6.693382,6.63417 -2.812878,1.1753 -4.156255,1.23246 -6.548232,0.27865 z m 22.947034,-1.26517 c -1.533757,-1.11105 -2.79356,-2.24498 -2.799563,-2.51984 -0.006,-0.27487 0.587401,-3.82595 1.318673,-7.89129 0.731273,-4.06535 1.793458,-11.72763 2.36041,-17.02729 0.566958,-5.29967 1.200923,-9.91098 1.408813,-10.24736 0.788468,-1.27577 3.704529,-0.53009 6.078609,1.55438 1.624693,1.42649 3.462504,4.31104 5.383066,8.449 1.603882,3.45567 3.190348,6.11357 3.52548,5.90645 0.335132,-0.20713 0.967451,-2.87525 1.405157,-5.92917 1.305688,-9.11003 2.749106,-15.40424 4.172326,-18.19397 l 1.341194,-2.62896 1.978613,1.89563 c 3.362906,3.22187 3.639269,5.45219 2.384912,19.24676 -0.613692,6.74895 -1.114099,15.5413 -1.112023,19.53854 0.0047,8.68661 -0.46101,9.86885 -3.883619,9.86278 -2.946669,-0.005 -4.846817,-1.18587 -9.074405,-5.63831 -3.660079,-3.85475 -4.19022,-3.69787 -6.805083,2.01373 -1.996594,4.36114 -3.460118,4.66764 -7.68256,1.60892 z M 213.63229,145.2526 c -2.44242,-2.77378 -3.93951,-6.88784 -3.93951,-10.8259 0,-5.61446 1.05532,-6.33764 4.07767,-2.79431 2.13786,2.50638 2.55582,2.72651 3.85582,2.03077 1.96325,-1.0507 2.48271,-3.52998 1.23131,-5.87683 -0.56315,-1.05614 -3.158,-4.47033 -5.76631,-7.58709 -4.21061,-5.03138 -4.74241,-5.98097 -4.74241,-8.46809 0,-5.32817 4.792,-9.71957 10.60622,-9.71957 5.06618,0 9.59365,3.47156 9.7831,7.50147 0.10413,2.21522 0.0654,2.24591 -3.2544,2.57789 -2.75899,0.2759 -3.39551,0.58599 -3.5596,1.73413 -0.1099,0.76899 0.38067,2.11503 1.09015,2.99121 l 1.28997,1.59304 1.93365,-2.10849 c 2.22527,-2.42646 4.74153,-3.53793 8.00954,-3.53793 2.67514,0 3.59045,-1.14699 5.36231,-6.71958 1.81864,-5.71976 2.84922,-7.39153 4.55654,-7.39153 3.12751,0 5.75474,2.99603 6.48168,7.39153 l 0.38895,2.35185 5.82879,0.39954 c 6.16158,0.42235 8.40703,1.35228 10.32186,4.27468 3.06971,4.68496 -0.85185,7.08201 -17.68135,10.80769 -1.47104,0.32565 -1.51197,0.56595 -1.51442,8.88936 -0.002,7.34263 -0.19116,8.86407 -1.33404,10.73852 -1.50567,2.46949 -3.48934,2.83014 -5.97818,1.08689 -2.69285,-1.88614 -4.07736,-6.00343 -4.09379,-12.17419 l -0.0148,-5.54365 h -2.29452 -2.29452 l -0.42527,5.20767 c -0.5525,6.7655 -1.59837,8.97498 -5.52829,11.67883 -2.57338,1.77054 -4.04896,2.27398 -7.26517,2.47877 -3.29462,0.20979 -4.23707,0.0286 -5.13102,-0.98668 z m -104.25811,-1.26585 c -1.40182,-0.51449 -3.47884,-1.59771 -4.61561,-2.40716 -2.78558,-1.98351 -5.938799,-7.10346 -5.938799,-9.64297 0,-5.86272 6.400399,-21.79974 9.842159,-24.50703 2.25453,-1.77341 8.57313,-3.64811 10.58982,-3.14195 2.39227,0.60042 5.0159,2.98355 6.51098,5.91415 1.22857,2.4082 1.28573,3.02044 0.55001,5.89108 -0.63025,2.45909 -0.64092,3.91896 -0.0459,6.28197 1.19496,4.74564 0.94067,8.79159 -0.79895,12.71149 -3.79053,8.54124 -9.08871,11.47133 -16.09371,8.90042 z m 7.06878,-17.44872 c 1.0077,-1.84788 1.83925,-4.19134 1.84789,-5.20767 0.0134,-1.58361 -0.25586,-1.84789 -1.88305,-1.84789 -3.61294,0 -6.88819,5.36668 -5.42745,8.89321 1.20803,2.91644 3.24348,2.23171 5.46261,-1.83765 z m 68.43539,15.69863 c -1.63669,-0.83089 -4.78198,-3.20839 -6.98953,-5.28333 -3.80388,-3.57539 -4.02977,-3.96622 -4.32079,-7.4755 -0.95549,-11.5219 5.40217,-22.09059 13.28873,-22.09059 3.61079,0 10.67616,3.20246 15.02205,6.80893 l 2.60137,2.15877 -0.29743,7.21887 c -0.26592,6.45413 -0.5279,7.68701 -2.47296,11.638 -1.73308,3.52039 -2.79049,4.77952 -5.19925,6.19115 -4.20282,2.46302 -7.90069,2.72805 -11.63219,0.8337 z m 5.78973,-13.51477 c 4.20311,-4.64425 0.56459,-10.88476 -3.69977,-6.34556 -0.84514,0.89961 -1.63746,2.87319 -1.88836,4.7037 l -0.43227,3.15377 h 2.32605 c 1.55881,0 2.77738,-0.4987 3.69435,-1.51191 z" + style="fill:#333333;fill-opacity:1;stroke-width:0.671958" /> + </g> + </g> +</svg> diff --git a/themes/yunohost-docs/templates/partials/page.html.twig b/themes/yunohost-docs/templates/partials/page.html.twig new file mode 100644 index 00000000..77854430 --- /dev/null +++ b/themes/yunohost-docs/templates/partials/page.html.twig @@ -0,0 +1,6 @@ +<div id="body-inner" dir="auto" class="highlightable"> + <h1>{{ page.title }}</h1> + <p> + {{ page.content|raw }} + </p> +</div> diff --git a/themes/yunohost-docs/templates/partials/sidebar.html.twig b/themes/yunohost-docs/templates/partials/sidebar.html.twig new file mode 100644 index 00000000..5741079c --- /dev/null +++ b/themes/yunohost-docs/templates/partials/sidebar.html.twig @@ -0,0 +1,34 @@ +{% import 'macros/macros.html.twig' as macros %} + +<div class="learn-brand"> + <div id="header"> + <a id="logo" href="{{ base_url_absolute }}">{% include 'partials/logo.html.twig' %}</a> + <div class="searchbox"> + <label for="search-by"><i class="fa fa-search"></i></label> + <input id="search-by" type="text" placeholder="{{ 'THEME_LEARN4_SEARCH_DOCUMENTATION'|t }}" + data-search-input="{{ base_url_relative }}/s/q"/> + <span data-search-clear><i class="fa fa-close"></i></span> + </div> + <div class="search-options columns"> + <div class="adv-search column col-8"><i class="fa fa-sliders"></i> <a href="/search?q=">{{ 'THEME_LEARN4_SEARCH_ADVANCED'|t }}</a></div> + {% include 'partials/versions.html.twig' %} + </div> + </div> +</div> +<div class="learn-nav" data-simplebar> + <div class="highlightable"> + {% for slug, ver in pages.children.visible %} + {{ macros.version(ver) }} + <ul id="{{ slug }}" class="topics"> + {% if ver.activeChild or ver.active %} + {{ macros.loop(ver, '') }} + {% endif %} + </ul> + {% endfor %} + <hr /> + + <a class="side-tools padding" href="#" data-clear-history-toggle> + <i class="fa fa-fw fa-history"></i> {{ 'THEME_LEARN4_CLEAR_HISTORY'|t }} + </a><br/> + </div> +</div> diff --git a/themes/yunohost-docs/templates/partials/topbar.html.twig b/themes/yunohost-docs/templates/partials/topbar.html.twig new file mode 100644 index 00000000..87734f15 --- /dev/null +++ b/themes/yunohost-docs/templates/partials/topbar.html.twig @@ -0,0 +1,27 @@ +<div id="top-bar"> + {% if github_link_position == 'top' %} + <div id="top-github-link"> + {% include 'partials/github-link.html.twig' %} + </div> + {% endif %} + + <div id="navigation"> + {% if theme_var('github.link') %} + {% include 'partials/github-link.html.twig' %} + {% endif %} + {% include 'partials/darkmodeswitcher.html.twig' %} + {% if not progress.isFirst(page.path) %} + <a class="nav-prev tooltip tooltip-bottom" data-tooltip="Previous Page [←]" href="{{ progress.nextSibling(page.path).url }}"> <i class="fa fa-angle-left"></i></a> + {% else %} + <span class="disabled"><i class="fa fa-angle-left"></i></span> + {% endif %} + {% if not progress.isLast(page.path) %} + <a class="nav-next tooltip tooltip-bottom" data-tooltip="Next Page [→]" href="{{ progress.prevSibling(page.path).url }}"><i class="fa fa-angle-right"></i></a> + {% else %} + <span class="disabled"><i class="fa fa-angle-right"></i></span> + {% endif %} + </div> + <div class="progress"></div> +</div> + + diff --git a/themes/yunohost-docs/templates/partials/versions.html.twig b/themes/yunohost-docs/templates/partials/versions.html.twig new file mode 100644 index 00000000..9559697e --- /dev/null +++ b/themes/yunohost-docs/templates/partials/versions.html.twig @@ -0,0 +1,18 @@ +<div class="version-chooser column col-4 text-right"> + <select id="switch-version"> + {% set langobj = grav['language'] %} + {% for key in langswitcher.languages %} + {% if key == langswitcher.current %} + {% set lang_url = page.url %} + {% set active = ' selected="selected"' %} + {% else %} + {% set lang_url = base_url_simple ~ langobj.getLanguageURLPrefix(key)~langswitcher.page_route ?: '/' %} + {% set active = '' %} + {% endif %} + <option value="{{ lang_url ~ uri.params }}"{{ active }}>{{ key }}</option> + {% endfor %} + </select> +</div> +<script> +jQuery(document).on('change', '#switch-version', function() { window.location.href = this.value }); +</script> 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 @@ +<?php +namespace Grav\Theme; + +use Grav\Common\Theme; + +class YunoHostDocs extends Learn4 +{ + // Access plugin events in this class +} diff --git a/themes/yunohost-docs/yunohost-docs.yaml b/themes/yunohost-docs/yunohost-docs.yaml new file mode 100644 index 00000000..02273d8e --- /dev/null +++ b/themes/yunohost-docs/yunohost-docs.yaml @@ -0,0 +1,8 @@ +streams: + schemes: + theme: + type: ReadOnlyStream + prefixes: + '': + - user/themes/yunohost-docs + - user/themes/learn4 diff --git a/try.md b/try.md deleted file mode 100644 index 58dac84a..00000000 --- a/try.md +++ /dev/null @@ -1,27 +0,0 @@ -#Try YunoHost - -<div class="alert alert-warning" markdown="1"> -**Note:** This demo server could be down from time to time. -<br> - -</div> - -<br> - - <div class="row text-center"> - <div class="col-md-6"> - <a href="https://demo.yunohost.org/" target="_blank" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-user"></span> User interface</a> - <p class="text-muted">Username: demo<br>Password: demo</p> - </div> - <div class="col-md-5"> - <a href="https://demo.yunohost.org/yunohost/admin" target="_blank" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-lock"></span> Administration interface</a> - <p class="text-muted">Password: demo</p> - </div> - </div> - -<br> - -<p class="text-center" markdown="1"> -***Demo server gracefully provided by -<a href="https://www.gitoyen.net" target="_blank">Gitoyen</a>*** -</p> 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 @@ -#<div dir="auto">تجريب YunoHost</div> - -<div dir=rtl class="alert alert-warning" markdown="1"> -**ملاحظة :** يمكن لهذا السيرفر التجريبي أن يتوقف من وقت إلى آخر. -<br> - -</div> - -<br> - - <div dir=rtl class="row text-center"> - <div dir=rtl class="col-md-6"> - <a href="https://demo.yunohost.org/" target="_blank" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-user"></span> واجهة المستخدم</a> - <p class="text-muted">إسم المستخدم : demo<br>كلمة السر : demo</p> - </div> - <div dir=rtl class="col-md-5"> - <a href="https://demo.yunohost.org/yunohost/admin" target="_blank" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-lock"></span> واجهة الإدارة</a> - <p dir=rtl class="text-muted">كلمة السر : demo</p> - </div> - </div> - -<br> - -<p dir=rtl class="text-center" markdown="1"> -***تم توفير الخادم التجريبي بفضل -<a href="https://www.gitoyen.net" target="_blank">Gitoyen</a>*** -</p> - - diff --git a/try_ca.md b/try_ca.md deleted file mode 100644 index e206bd89..00000000 --- a/try_ca.md +++ /dev/null @@ -1,27 +0,0 @@ -#Prova YunoHost - -<div class="alert alert-warning" markdown="1"> -**Nota:** Aquest és un servidor de demostració, podria estar caigut de tant en tant. -<br> - -</div> - -<br> - - <div class="row text-center"> - <div class="col-md-6"> - <a href="https://demo.yunohost.org/" target="_blank" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-user"></span> Interfície d'usuària</a> - <p class="text-muted">Nom d'usuària: demo<br>Contrasenya: demo</p> - </div> - <div class="col-md-5"> - <a href="https://demo.yunohost.org/yunohost/admin" target="_blank" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-lock"></span> Interfície d'administració</a> - <p class="text-muted">Contrasenya: demo</p> - </div> - </div> - -<br> - -<p class="text-center" markdown="1"> -***Servidor de demostració amablement ofert per -<a href="https://www.gitoyen.net" target="_blank">Gitoyen</a>*** -</p> 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 - -<div class="alert alert-warning" markdown="1"> -**Hinweis:** Dieser Demo-Server könnte zeitweilig nicht erreichbar sein. -<br> - -</div> - -<br> - - <div class="row text-center"> - <div class="col-md-6"> - <a href="https://demo.yunohost.org/" target="_blank" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-user"></span> Anwendungen</a> - <p class="text-muted">Username: demo<br>Password: demo</p> - </div> - <div class="col-md-5"> - <a href="https://demo.yunohost.org/yunohost/admin" target="_blank" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-lock"></span> Verwaltung</a> - <p class="text-muted">Password: demo</p> - </div> - </div> - -<br> - -<p class="text-center" markdown="1"> -***Demo-Server freundlicherweise zur Verfügung gestellt von -<a href="https://www.gitoyen.net" target="_blank">Gitoyen</a>*** -</p> diff --git a/try_es.md b/try_es.md deleted file mode 100644 index 99a3f063..00000000 --- a/try_es.md +++ /dev/null @@ -1,29 +0,0 @@ -#Probar YunoHost - -<div class="alert alert-warning" markdown="1"> -**Nota :** Este demo puede dejar de functionar de vez en cuando. -<br> - -</div> - -<br> - - <div class="row text-center"> - <div class="col-md-6"> - <a href="https://demo.yunohost.org/" target="_blank" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-user"></span> Interfaz de usuario</a> - <p class="text-muted">Usuario : demo<br>Contraseña : demo</p> - </div> - <div class="col-md-5"> - <a href="https://demo.yunohost.org/yunohost/admin" target="_blank" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-lock"></span> Interfaz de administración</a> - <p class="text-muted">Contraseña : demo</p> - </div> - </div> - -<br> - -<p class="text-center" markdown="1"> -***El servidor de demo es ofrecido generosamente por -<a href="https://www.gitoyen.net" target="_blank">Gitoyen</a>*** -</p> - - diff --git a/try_fr.md b/try_fr.md deleted file mode 100644 index 65ad6711..00000000 --- a/try_fr.md +++ /dev/null @@ -1,29 +0,0 @@ -#Essayer YunoHost - -<div class="alert alert-warning" markdown="1"> -**Note :** Cette démo peut cesser de fonctionner de temps en temps. -<br> - -</div> - -<br> - - <div class="row text-center"> - <div class="col-md-6"> - <a href="https://demo.yunohost.org/" target="_blank" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-user"></span> Interface utilisateur</a> - <p class="text-muted">Utilisateur : demo<br>Mot de passe : demo</p> - </div> - <div class="col-md-5"> - <a href="https://demo.yunohost.org/yunohost/admin" target="_blank" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-lock"></span> Interface d’administration</a> - <p class="text-muted">Mot de passe : demo</p> - </div> - </div> - -<br> - -<p class="text-center" markdown="1"> -***Le serveur de démo est fourni généreusement par -<a href="https://www.gitoyen.net" target="_blank">Gitoyen</a>*** -</p> - - diff --git a/try_it.md b/try_it.md deleted file mode 100644 index b69e00c9..00000000 --- a/try_it.md +++ /dev/null @@ -1,27 +0,0 @@ -#Prova YunoHost - -<div class="alert alert-warning" markdown="1"> -**Nota:** A volte questo server demo può essere irraggiungibile -<br> - -</div> - -<br> - - <div class="row text-center"> - <div class="col-md-6"> - <a href="https://demo.yunohost.org/" target="_blank" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-user"></span> Interfaccia utente</a> - <p class="text-muted">Nome utente: demo<br>Password: demo</p> - </div> - <div class="col-md-5"> - <a href="https://demo.yunohost.org/yunohost/admin" target="_blank" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-lock"></span> Interfaccia amministrazione</a> - <p class="text-muted">Password: demo</p> - </div> - </div> - -<br> - -<p class="text-center" markdown="1"> -***Il server demo è gentilmente fornito da -<a href="https://www.gitoyen.net" target="_blank">Gitoyen</a>*** -</p> 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 a570d767..00000000 --- a/users.md +++ /dev/null @@ -1,40 +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. - -<div class="alert alert-warning" markdown="1"> -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. -</div> - -The user portal, or SSO ------------------------ - -<center><img src="images/user_panel.png" style="max-width: 650px; border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"></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. - -<div class="alert alert-info" markdown="1"> -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). -</div> - -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. - -<div class="alert alert-warning" markdown="1"> -Be careful who you give SSH access to. This increases even more the attack surface available to a malicious user. -</div> diff --git a/users_fr.md b/users_fr.md deleted file mode 100644 index c52522dc..00000000 --- a/users_fr.md +++ /dev/null @@ -1,42 +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. - -<div class="alert alert-info" markdown="1"> -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. -</div> - -Le portail utilisateur, ou SSO ------------------------ - -<center><img src="images/user_panel.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"></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 changer leur mot de passe. - -<div class="alert alert-info" markdown="1"> -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). -</div> - -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. - -<div class="alert alert-warning" markdown="1"> -Faites attention à qui vous donnez accès à SSH. Cela augmente encore plus la surface d'attaque disponible pour un utilisateur malveillant. -</div> - 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 6ed0efd3..00000000 --- a/whatsyunohost.md +++ /dev/null @@ -1,58 +0,0 @@ -What is YunoHost? -================= - -<img src="/images/YunoHost_logo_vertical.png" width=400> - -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 --------- - -- <img src="/images/icon-debian.png" width=32 style="margin-right:5px"> Based on Debian ; -- <img src="/images/icon-tools.png" width=32 style="margin-right:5px" width=64> Administrate your server through a **friendly web interface** ; -- <img src="/images/icon-package.png" width=32 style="margin-right:5px"> Deploy **apps in just a few clicks** ; -- <img src="/images/icon-users.png" width=32 style="margin-right:5px"> Manage **users** <small>(based on LDAP)</small>; -- <img src="/images/icon-globe.png" width=32 style="margin-right:5px"> Manage **domain names** ; -- <img src="/images/icon-medic.png" width=32 style="margin-right:5px"> Create and restore **backups** ; -- <img src="/images/icon-door.png" width=32 style="margin-right:5px"> Connect to all apps simultaneously through the **user portal** <small>(NGINX, SSOwat)</small> ; -- <img src="/images/icon-mail.png" width=32 style="margin-right:5px"> Includes a **full e-mail stack** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; -- <img src="/images/icon-messaging.png" width=32 style="margin-right:5px"> … as well as **an instant messaging server** <small>(XMPP)</small> ; -- <img src="/images/icon-lock.png" width=32 style="margin-right:5px"> Manages **SSL certificates** <small>(based on Let's Encrypt)</small> ; -- <img src="/images/icon-shield.png" width=32 style="margin-right:5px"> … and **security systems** <small>(fail2ban, yunohost-firewall)</small> ; - -Origin ------- - -YunoHost was created in February 2012 after something like this: - - <blockquote><p>"Shit, I'm too lazy to reconfigure my mail server… Beudbeud, how were you able to get your little server running with LDAP?"</p> -<small>Kload, February 2012</small></blockquote> - -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: -<div class="text-center"><img style="border-radius: 5px; box-shadow: 0 5px 15px rgba(0,0,0,0.15);" src="/images/dude_yunohost.jpg"></div> - -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): - -<a href="/images/ynh_logo_black_300dpi.png"><img src="/images/ynh_logo_black_300dpi.png" width=220></a> - -<a href="/images/ynh_logo_white_300dpi.png"><img src="/images/ynh_logo_white_300dpi.png" width=220></a> - -Click to download. - -Licence: CC-BY-SA 4.0 diff --git a/whatsyunohost_de.md b/whatsyunohost_de.md deleted file mode 100644 index 226b6a0f..00000000 --- a/whatsyunohost_de.md +++ /dev/null @@ -1,57 +0,0 @@ -Was ist YunoHost? -================= - -<img src="/images/YunoHost_logo_vertical.png" width=400> - -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 --------- - -- <img src="/images/icon-debian.png" width=32 style="margin-right:5px"> Basierend auf Debian ; -- <img src="/images/icon-tools.png" width=32 style="margin-right:5px" width=64> Verwalten Sie Ihren Server über eine **benutzerfreundliche Weboberfläche** ; -- <img src="/images/icon-package.png" width=32 style="margin-right:5px"> Bereitstellen von **Apps mit nur wenigen Klicks** ; -- <img src="/images/icon-users.png" width=32 style="margin-right:5px"> Verwalten Sie **Benutzer** <small>(basierend auf LDAP)</small> ; -- <img src="/images/icon-globe.png" width=32 style="margin-right:5px"> Verwalten Sie Ihre **Domainnamen** ; -- <img src="/images/icon-medic.png" width=32 style="margin-right:5px"> Erstellen und Wiederherstellen von **Backups** ; -- <img src="/images/icon-door.png" width=32 style="margin-right:5px"> Stellen Sie über das **Benutzerportal** <small>(NGINX, SSOwat)</small> gleichzeitig eine Verbindung zu allen Apps her ; -- <img src="/images/icon-mail.png" width=32 style="margin-right:5px"> Enthält einen **vollständigen E-Mail-Stack** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; -- <img src="/images/icon-messaging.png" width=32 style="margin-right:5px"> … sowie **einen Instant Messaging Server** <small>(XMPP)</small> ; -- <img src="/images/icon-lock.png" width=32 style="margin-right:5px"> Verwaltet **SSL-Zertifikate** <small>(basierend auf Let's Encrypt)</small> ; -- <img src="/images/icon-shield.png" width=32 style="margin-right:5px"> … und **Sicherheitssysteme** <small>(fail2ban, yunohost-firewall)</small> ; - -Ursprung ------- - -YunoHost wurde im Februar 2012 aus folgender Situation heraus erstellt: - - <blockquote><p>"Scheiße, ich bin zu faul, um meinen Mailserver neu zu konfigurieren ... Beudbeud, wie hast Du deinen kleinen Server mit LDAP zum Laufen gebracht?"</p><small> Kload, Februar 2012</small></blockquote> - -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: -<div class="text-center"><img style="border-radius: 5px; box-shadow: 0 5px 15px rgba(0,0,0,0.15);" src="/images/dude_yunohost.jpg"></div> - -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): - -<a href="/images/ynh_logo_black_300dpi.png"><img src="/images/ynh_logo_black_300dpi.png" width=220></a> - -<a href="/images/ynh_logo_white_300dpi.png"><img src="/images/ynh_logo_white_300dpi.png" width=220></a> - -Zum download Klicken. - -Licence: CC-BY-SA 4.0 diff --git a/write_documentation.md b/write_documentation.md deleted file mode 100644 index 8b28dfac..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.