# Docker

# MariaDb

## Installation du docker MariaDb 

Mise en place de du container :

```shell
sudo docker create \
  --name=mariadb \
  -e PUID=1035 \
  -e PGID=100 \
  -e MYSQL_ROOT_PASSWORD=BibiTux2020 \
  -e TZ=Europe/Paris \
  -e MYSQL_DATABASE=bookstack_db \
  -e MYSQL_USER=bookstack \
  -e MYSQL_PASSWORD=secret \
  -p 3306:3306 \
  -v /volume1/docker/data:/config \
  --restart unless-stopped \
  linuxserver/mariadb
```

<p class="callout warning">ne pas oublier de lier le container DB au container principal dans le DSM</p>

# Installation de bookstack et mariadb

## Installation de bookstack

##### Mise en place du container MariaDB :

```shell
docker create \
  --name=mariadb \
  -e PUID=1000 \
  -e PGID=1000 \
  -e MYSQL_ROOT_PASSWORD=secret \
  -e TZ=Europe/Paris \
  -e MYSQL_DATABASE=bookstack_db \
  -e MYSQL_USER=bookstack \
  -e MYSQL_PASSWORD=secret \
  -p 3306:3306 \
  -v /mnt/vms/bookstack/db:/config \
  --restart unless-stopped \
  linuxserver/mariadb
```

##### Mise en place du container BookStack :

```shell
 docker create \
  --name=bookstack \
  --link mariadb:mariadb \
  -e PUID=1000 \
  -e PGID=1000 \
  -e DB_HOST=mariadb \
  -e DB_USER=bookstack \
  -e DB_PASS=secret \
  -e DB_DATABASE=bookstack_db \
  -p 6875:80 \
  -v /mnt/vms/bookstack:/config \
  --restart unless-stopped \
  linuxserver/bookstack
```

<p class="callout warning">Sur DSM Synology ne pas oublier de lier les 2 containers !!! en CLI `--link mariadb:mariadb \`</p>

#####  

##### Sur le container BookStack lier le au container MariaDB :

[![link.png](http://192.168.1.45:6875/uploads/images/gallery/2020-04/scaled-1680-/link.png)](http://192.168.1.45:6875/uploads/images/gallery/2020-04/link.png)

# Docker Plex

##### <span style="color:#aaaaaa;">Plex est un logiciel client-serveur de gestion multimédia qui permet d'accéder à des films, séries, musiques et photos sur le serveur peu importe où le client se situe, s'il a une connexion Internet.  
</span>

créer un fichier docker-compose.yml

```YAML
---
version: "2.1"
services:
  plex:
    image: linuxserver/plex
    container_name: plex
    network_mode: host
    environment:
      - PUID=0
      - PGID=0
      - VERSION=docker
    volumes:
      - /mnt/NAS/Series:/tv
      - /mnt/PLEX/database:/config
      - /mnt/NAS:/data
      - /mnt/NAS/Films_1:/movies
      - /tmp:/transcode
    restart: unless-stopped
```

Lancer en root la commande suivante :

`docker-compose up`

# Ghost avec docker-compose

#### Installation du web serveur Ghost 3 et Mysql 5.7

Création d'un fichier ghost.yml dans nano :

```shell
# by default, the Ghost image will use SQLite (and thus requires no separate database container)
# we have used MySQL here merely for demonstration purposes

version: '3.1'

services:

  ghost:
    image: ghost:3-alpine
    restart: always
    ports:
      - 8080:2368
    environment:
      # see https://docs.ghost.org/docs/config#section-running-ghost-with-config-env-variables
      database__client: mysql
      database__connection__host: db
      database__connection__user: root
      database__connection__password: secret
      database__connection__database: ghost

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: secret
```

ensuite lancer la commande docker-compose :

`<span class="s1"> docker-compose -f ghost.yml up</span>`

#####  

##### Ajout de l'URL du domaine

il faut ajouter la variable environnement :

`URL=https://blog.wlan.ovh/`

# Portainer Docker

installation de Portainer :

```shell
$ docker volume create portainer_data
$ docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
```

installation du repo de Templates Portainer :

`<a href="https://raw.githubusercontent.com/SelfhostedPro/selfhosted_templates/master/Template/template.json">https://raw.githubusercontent.com/SelfhostedPro/selfhosted_templates/master/Template/template.json</a>`

https://yangkghjh.github.io/selfhosted\_store/unraid/templates/portainer/template.json

installation de Portainer 2.0

```shell
docker run -d -p 9000:9000 -p 8000:8000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
```

```bash
alias mntnas="sshfs garfieldtux@192.168.1.45:/ /mnt/NAS -o nonempty,port=22,idmap=user,gid=125,allow_other,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3"
```

# docker-gateone

defines a docker container with gateone installed

## Usage

1. [**Install docker**](https://docs.docker.com/installation/)
2. **Download and start the gateone server instance**  
    `docker run --name gateone -p 443:10443 -p 2345:22 -d greyltc/gateone`
3. **Test the gateone server**  
    Point your browser to:  
    [https://localhost](https://localhost/)  
    and you should see a page with a big button for the Terminal:SSH application
4. Click the `Terminal:SSH` button
5. Hit enter (accept the default) to choose to connect to localhost
6. Hit enter (accept the default) to choose to connect through port 22
7. Enter `docker` for the user
8. Type `sl` to see a nice steam locomotive.
9. **\[Optional\] Stop the gateone docker server instance**  
    `docker stop gateone`
10. **\[Optional\] Delete the gateone docker server instance (after stopping it)**  
    `docker rm gateone`
11. **Profit.**

## SSH

You can also ssh into the container with `ssh docker@localhost:2345`

# Statistiques web avec Ackee via Docker

##### 1. Installation de la Base MongoDB :

```shell
docker run -p 27017:27017 -v /path/to/local/folder:/data/db --name mongo mongo
```

Explication :

- `-p` ouvrir le port `27017` disponible sur le port `27017` sur l'host
- `-v` mounts `/path/to/local/folder` vers `/data/db` du container
- `--name` choisir un nom au container `mongo`
- `mongo` le nom de l'image docker

##### 2. Création du container Ackee et de MongoDB

```shell
docker run -p 3000:3000 -e ACKEE_MONGODB='mongodb://mongo:27017/ackee' -e ACKEE_USERNAME='username' -e ACKEE_PASSWORD='password' --link mongo --name ackee electerious/ackee
```

Explanation:

- `-p` makes port `3000` available at port `3000` on the host
- `-e` sets [environment variables](https://github.com/electerious/Ackee/blob/master/docs/Options.md) required by Ackee
- `--link` links Ackee with the `mongo` container
- `--name` sets the container name to `ackee`
- `electerious/ackee` is the name of the image

##### 3. Ouvrir Ackee

```
docker run -p 3000:3000 -e ACKEE_MONGODB='mongodb://mongo:27017/ackee' -e ACKEE_USERNAME='username' -e ACKEE_PASSWORD='password' --link mongo --name ackee electerious/ackee
```

# installation de SearX Docker

```YAML
version: '3.7'

services:

  caddy:
    container_name: caddy
    image: abiosoft/caddy:1.0.3-no-stats
    ports:
      - 80:80
      - 443:443
    network_mode: host
    command: -email ${LETSENCRYPT_EMAIL} -agree=${LETSENCRYPT_AGREE} -log stdout -host ${SEARX_HOSTNAME} -conf /etc/Caddyfile
    volumes:
      - ./Caddyfile:/etc/Caddyfile:rw
      - ./caddy:/root/.caddy:rw
      - ./srv:/srv:rw
      - searx-checker:/srv/searx-checker:rw
    environment:
      - SEARX_HOSTNAME=${SEARX_HOSTNAME}
      - SEARX_PROTOCOL=${SEARX_PROTOCOL:-}
      - SEARX_TLS=${SEARX_TLS:-}
      - FILTRON_USER=${FILTRON_USER}
      - FILTRON_PASSWORD=${FILTRON_PASSWORD}
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
      - DAC_OVERRIDE

  filtron:
    container_name: filtron
    image: dalf/filtron
    restart: always
    ports:
      - 4040:4040
      - 4041:4041
    networks:
      - searx
    command: -listen 0.0.0.0:4040 -api 0.0.0.0:4041 -target searx:8080
    volumes:
      - ./rules.json:/etc/filtron/rules.json:rw
    read_only: true
    cap_drop:
      - ALL

  searx:
    container_name: searx
    image: searx/searx:latest
    restart: always
    networks:
      - searx
    command: ${SEARX_COMMAND:-}
    volumes:
      - ./searx:/etc/searx:rw
    environment:
      - BIND_ADDRESS=0.0.0.0:8080
      - BASE_URL=https://${SEARX_HOSTNAME}/
      - MORTY_URL=https://${SEARX_HOSTNAME}/morty/
      - MORTY_KEY=${MORTY_KEY}
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
      - DAC_OVERRIDE

  morty:
    container_name: morty
    image: dalf/morty
    restart: always
    ports:
      - 3000:3000
    networks:
      - searx
    command: -listen 0.0.0.0:3000 -timeout 6 -ipv6
    environment:
      - MORTY_KEY=${MORTY_KEY}
    logging:
      driver: none
    read_only: true
    cap_drop:
      - ALL

  searx-checker:
    container_name: searx-checker
    image: searx/searx-checker
    restart: always
    networks:
      - searx
    command: -cron -o html/data/status.json http://searx:8080
    volumes:
      - searx-checker:/usr/local/searx-checker/html/data:rw

networks:
  searx:
    ipam:
      driver: default

volumes:
  searx-checker:
```

# Wordpress WP-CLI

[https://www.datanovia.com/en/fr/lessons/utilisation-de-docker-wordpress-cli-pour-gerer-les-sites-web-wordpress/](https://www.datanovia.com/en/fr/lessons/utilisation-de-docker-wordpress-cli-pour-gerer-les-sites-web-wordpress/)

## Exigences du WP-Cli

<div id="bkmrk-acc%C3%A8s-ssh-%C3%A0-votre-se">1. Accès SSH à votre serveur
2. PHP 5.3.2 ou version ultérieure.
3. WordPress 3.4 ou version ultérieure.
4. Un environnement UNIX comme Linux.

</div>## Installer WP-Cli

Vous pouvez soit 1) installer directement WP-Cli sur votre système ou l’installer en utilisant Docker.

### Installer directement sur votre système

<div id="bkmrk-%23-1%2F-t%C3%A9l%C3%A9charger-wp-"><div><div>```
<span class="hljs-comment"># 1/ Télécharger  wp-cli</span>
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
<span class="hljs-comment"># 2/ Rendre l'application exécutable</span>
chmod +x wp-cli.phar
<span class="hljs-comment"># 3/ Déplacez-le dans /usr/local/bin/wp</span>
sudo mv wp-cli.phar /usr/<span class="hljs-built_in">local</span>/bin/wp
<span class="hljs-comment"># Vérifier si l'installation a fonctionné</span>
wp --info
```

<div></div></div></div></div>Vous pouvez maintenant simplement taper “wp” dans votre terminal pour appeler WP-Cli. Au fait, n’oubliez pas de lancer wp depuis le répertoire racine de WordPress.

### Installer WordPress en utilisant le docker-compose et WP-ClI

Voir notre précédent tutoriel pour installer et configurer automatiquement wordpress en utilisant docker-compose et WP-CLI.

Vous pouvez [déployer automatiquement un site WordPress docker local](https://www.datanovia.com/en/fr/lessons/wordpress-development-local-avec-docker-compose/) en 5 minutes en utilisant les commandes suivantes:

<div id="bkmrk-%23-t%C3%A9l%C3%A9chargez-un-exe"><div><div>```
<span class="hljs-comment"># Téléchargez un exemple de docker-compose pour WordPress</span>
git <span class="hljs-built_in">clone</span> https://github.com/kassambara/wordpress-docker-compose
<span class="hljs-built_in">cd</span> wordpress-docker-compose
<span class="hljs-comment"># Installation automatique de wordpress</span>
make autoinstall
```

</div></div></div>Visitez votre site à l’adresse [http://localhost](http://localhost/) et votre base de données via phpMyAdmin à l’adresse [http://localhost:8080](http://localhost:8080/).

![Site internet](https://www.datanovia.com/en/wp-content/uploads/dn-tutorials/docker-compose-wordpress-woocommerce-and-wp-cli/images/wordpress-docker-compose-006-website.png)

![phpMyAdmin](https://www.datanovia.com/en/wp-content/uploads/dn-tutorials/docker-compose-wordpress-woocommerce-and-wp-cli/images/wordpress-docker-compose-007-phpmyadmin.png)

Identification par défaut de l’administrateur de votre site wordpress:

<div id="bkmrk-username%3A-wordpress-"><div><div>- `Username: wordpress`
- `Password: wordpress`

</div></div></div>Identification par défaut de l’interface phpMyAdmin:

<div id="bkmrk-username%3A-root-passw"><div><div>- `Username: root`
- `Password: password`

</div></div></div>Cette installation comprend également l’outil WP-ClI. Dans les prochaines sections, nous utiliserons les commandes WP-ClI de docker-compose. Donc, commencez par créer un alias pour appeler simplement les commandes de composition du docker WP-CLI:

<div id="bkmrk-wp%3D%22docker-compose-r"><div>```
wp=<span class="hljs-string">"docker-compose run --rm wpcli"</span>
```

</div></div>## Les commandes WP-CLI les plus populaires

<div id="bkmrk-commande-description"><table><colgroup><col style="width:17%;"></col><col style="width:82%;"></col></colgroup><thead><tr class="header"><th>COMMANDE</th><th>DESCRIPTION</th></tr></thead><tbody><tr class="odd"><td>wp cap</td><td>Ajoute, supprime et liste les capacités d’un rôle utilisateur.</td></tr><tr class="even"><td>wp cli</td><td>Examine les informations actuelles du WP-CLI, vérifie les mises à jour ou affiche les alias définis.</td></tr><tr class="odd"><td>wp comment</td><td>Crée, met à jour, supprime et modère les commentaires.</td></tr><tr class="even"><td>wp config</td><td>Génère et lit le fichier wp-config.php.</td></tr><tr class="odd"><td>wp core</td><td>Télécharge, installe, met à jour et gère une installation WordPress.</td></tr><tr class="even"><td>wp cron</td><td>Teste, exécute et supprime les événements WP-Cron ; gère les horaires WP-Cron.</td></tr><tr class="odd"><td>wp db</td><td>Effectue les opérations de base de la base de données en utilisant les informations d’identification stockées dans wp-config.php.</td></tr><tr class="even"><td>wp eval</td><td>Exécute un code PHP arbitraire.</td></tr><tr class="odd"><td>wp eval-file</td><td>Charge et exécute un fichier PHP.</td></tr><tr class="even"><td>wp export</td><td>Exporte le contenu de WordPress vers un fichier WXR.</td></tr><tr class="odd"><td>wp i18n</td><td>Fournit des outils d’internationalisation pour les projets WordPress.</td></tr><tr class="even"><td>wp import</td><td>Importe le contenu d’un fichier WXR donné.</td></tr><tr class="odd"><td>wp language</td><td>Installe, active et gère les packs de langues.</td></tr><tr class="even"><td>wp maintenance-mode</td><td>Active, désactive ou vérifie l’état du mode de maintenance d’un site.</td></tr><tr class="odd"><td>wp media</td><td>Importe des fichiers en pièces jointes, régénère des vignettes ou liste les tailles d’images enregistrées.</td></tr><tr class="even"><td>wp menu</td><td>Liste, crée, attribue et supprime les menus de navigation du thème actif.</td></tr><tr class="odd"><td>wp plugin</td><td>Gère les plugins, y compris les installations, les activations et les mises à jour.</td></tr><tr class="even"><td>wp post</td><td>Gère les messages, le contenu et les méta.</td></tr><tr class="odd"><td>wp post-type</td><td>Récupère les détails sur les types de publications.</td></tr><tr class="even"><td>wp rewrite</td><td>Liste ou supprime les règles de réécriture du site, met à jour la structure du permalien.</td></tr><tr class="odd"><td>wp role</td><td>Gère les rôles des utilisateurs, y compris la création de nouveaux rôles et la réinitialisation des valeurs par défaut.</td></tr><tr class="even"><td>wp scaffold</td><td>Génère du code pour les types de messages, les taxonomies, les plugins, les child thèmes, etc.</td></tr><tr class="odd"><td>wp search-replace</td><td>Recherche/remplacement de textes dans la base de données.</td></tr><tr class="even"><td>wp shell</td><td>Ouvre une console PHP interactive pour exécuter et tester le code PHP.</td></tr><tr class="odd"><td>sidebar wp</td><td>Listes des sidebars enregistrés.</td></tr><tr class="even"><td>wp site</td><td>Crée, supprime, vide, modère et liste un ou plusieurs sites sur une installation multisite.</td></tr><tr class="odd"><td>wp super-admin</td><td>Liste, ajoute ou supprime les utilisateurs super-admin sur une installation multisite.</td></tr><tr class="even"><td>wp taxonomy</td><td>Recherche d’informations sur les taxonomies enregistrées.</td></tr><tr class="odd"><td>wp term</td><td>Gère les termes de la taxonomie et les méta termes, avec les commandes de création, de suppression et de liste.</td></tr><tr class="even"><td>wp theme</td><td>Gère les thèmes, y compris les installations, les activations et les mises à jour.</td></tr><tr class="odd"><td>wp user</td><td>Gère les utilisateurs, ainsi que leurs rôles, leurs capacités et leurs méta.</td></tr><tr class="even"><td>wp widget</td><td>Gère les widgets, y compris l’ajout et le déplacement de ceux-ci dans les barres latérales.</td></tr></tbody></table>

</div>## Mise à jour de WordPress

<div id="bkmrk-%23-mise-%C3%A0-jour-vers-l">```
<span class="hljs-comment"># Mise à jour vers la dernière version</span>
<span class="hljs-variable">$wp</span> core update
<span class="hljs-comment"># Revenir à une version plus ancienne</span>
wp core update --version=4.9.6 --force
```

</div>## Commandes de plugins

<div id="bkmrk-nom-description-wp-p"><div><table><colgroup><col style="width:28%;"></col><col style="width:71%;"></col></colgroup><thead><tr class="header"><th>NOM</th><th>DESCRIPTION</th></tr></thead><tbody><tr class="odd"><td>wp plugin activate</td><td>Active un ou plusieurs plugins.</td></tr><tr class="even"><td>wp plugin deactivate</td><td>Désactive un ou plusieurs plugins.</td></tr><tr class="odd"><td>wp plugin delete</td><td>Supprime les fichiers de plugin sans les désactiver ou les désinstaller.</td></tr><tr class="even"><td>wp plugin get</td><td>Obtention de détails sur un plugin installé.</td></tr><tr class="odd"><td>wp plugin install</td><td>Installe un ou plusieurs plugins.</td></tr><tr class="even"><td>wp plugin is-active</td><td>Vérifie si un plugin donné est actif.</td></tr><tr class="odd"><td>wp plugin is-installed</td><td>Vérifie si un plugin donné est installé.</td></tr><tr class="even"><td>Liste de plugins wp</td><td>Obtenir une liste de plugins.</td></tr><tr class="odd"><td>wp plugin path</td><td>Donne le chemin d’accès à un plugin ou au répertoire des plugins.</td></tr><tr class="even"><td>wp plugin search</td><td>Recherche dans le répertoire des plugins de WordPress.org.</td></tr><tr class="odd"><td>wp plugin status</td><td>Révèle le statut d’un ou de tous les plugins.</td></tr><tr class="even"><td>wp plugin toggle</td><td>Bascule l’état d’activation d’un plugin.</td></tr><tr class="odd"><td>wp plugin uninstall</td><td>Désinstallation d’un ou plusieurs plugins.</td></tr><tr class="even"><td>wp plugin update</td><td>Mise à jour d’un ou plusieurs plugins.</td></tr></tbody></table>

<div></div></div></div>### Liste des plugins

<div id="bkmrk-%24wp-plugin-list-%2B---"><div><div>```
<span class="hljs-variable">$wp</span> plugin list
```

```
+---------+----------+--------+---------+
| nom | statut | mise à jour | version |
+---------+----------+--------+---------+
| akismet | inactif | aucun | 4.1.3 |
| hello | inactif | aucun | 1.7.2 |
+---------+----------+--------+---------+
```

</div><div></div></div></div>### Supprimer le plugin

<div id="bkmrk-%24wp-plugin-delete-ak"><div><div>```
<span class="hljs-variable">$wp</span> plugin delete akismet hello
```

</div><div></div></div></div>### Installer et activer le plugin

<div id="bkmrk-%23-installer-et-activ"><div><div>```
<span class="hljs-comment"># Installer et activer un nouveau plugin</span>
<span class="hljs-variable">$wp</span> plugin install woocommerce --activate
<span class="hljs-comment"># désactiver un plugin</span>
<span class="hljs-variable">$wp</span> plugin deactivate woocommerce
<span class="hljs-comment"># N'activez qu'un plugin</span>
<span class="hljs-variable">$wp</span> plugin activate woocommerce
<span class="hljs-comment"># Mise à jour des plugins</span>
<span class="hljs-variable">$wp</span> plugin update woocommerce
<span class="hljs-variable">$wp</span> plugin update --all
```

```
If you want to install and activate multiple WordPress plugins at once, you can mention multiple plugins in the same command.
```

</div><div></div></div></div>### Version du plugin et détails

<div id="bkmrk-%24wp-plugin-activate-"><div>```
<span class="hljs-variable">$wp</span> plugin activate woocommerce
```

```
+-------------+-----------------------------------------------------------------+
| Champ | Valeur |
+-------------+-----------------------------------------------------------------+
| nom | woocommerce |
| titre | WooCommerce |
| auteur | Automattic |
| version | 3.8.1 |
| description | Une boîte à outils pour le commerce électronique qui vous aide à vendre n'importe quoi. Magnifiquement. |
| statut | actif |
+-------------+-----------------------------------------------------------------+
```

</div></div>## Commandes de thème

<div id="bkmrk-nom-description-wp-t"><div><table><colgroup><col style="width:30%;"></col><col style="width:69%;"></col></colgroup><thead><tr class="header"><th>NOM</th><th>DESCRIPTION</th></tr></thead><tbody><tr class="odd"><td>wp theme activate</td><td>Active un thème.</td></tr><tr class="even"><td>Suppression d’un ou plusieurs thèmes.</td><td> </td></tr><tr class="odd"><td>wp theme disable</td><td>Désactive un thème sur une installation multi-sites WordPress.</td></tr><tr class="even"><td>wp theme enable</td><td>Active un thème sur une installation multisite WordPress.</td></tr><tr class="odd"><td>wp theme get</td><td>Obtenir des détails sur un thème.</td></tr><tr class="even"><td>wp theme install</td><td>Installe un ou plusieurs thèmes.</td></tr><tr class="odd"><td>wp theme is-active</td><td>Vérifie si un thème donné est actif.</td></tr><tr class="even"><td>wp theme is-installed</td><td>Vérifie si un thème donné est installé.</td></tr><tr class="odd"><td>wp theme list</td><td>Obtenir une liste des thèmes.</td></tr><tr class="even"><td>wp theme mod</td><td>Définit, obtient et supprime les mods de thèmes.</td></tr><tr class="odd"><td>wp theme path</td><td>Donne le chemin d’accès à un thème ou au répertoire des thèmes.</td></tr><tr class="even"><td>wp theme search</td><td>Recherche dans le répertoire des thèmes de WordPress.org.</td></tr><tr class="odd"><td>wp theme status</td><td>Révèle le statut d’un ou de tous les thèmes.</td></tr><tr class="even"><td>wp theme update</td><td>Mise à jour d’un ou plusieurs thèmes.</td></tr></tbody></table>

<div></div></div></div>### Liste de thèmes

<div id="bkmrk-%24wp-theme-list-%2B----"><div><div>```
<span class="hljs-variable">$wp</span> theme list
```

```
+-----------------+----------+--------+---------+
| nom | statut | mise à jour | version |
+-----------------+----------+--------+---------+
| twentynineteen | inactifs | aucun | 1,4 |
| twentyseventeen | inactifs | aucun | 2,2 |
| twentysixteen | inactifs | aucun | 2.0 |
| twentytwenty | actifs | aucun | 1.1 |
+-----------------+----------+--------+---------+
```

</div><div></div></div></div>### Activer un thème

<div id="bkmrk-%24wp-theme-activate-t"><div><div>```
<span class="hljs-variable">$wp</span> theme activate twentyseventeen
```

</div><div></div></div></div>### Mise à jour de thème

<div id="bkmrk-%23-mise-%C3%A0-jour-d%27un-t"><div>```
<span class="hljs-comment"># Mise à jour d'un thème</span>
<span class="hljs-variable">$wp</span> theme update twentyseventeen
<span class="hljs-comment"># Mettre à jour tous les thèmes</span>
<span class="hljs-variable">$wp</span> theme update --all
```

</div></div>## Rechercher et remplacer

Cette commande est particulièrement utile lorsque vous avez modifié l’URL du site ou même ajouté HTTPS à l’URL du site.

Faites d’abord un essai:

<div id="bkmrk-%24wp-search-replace-%7B"><div>```
<span class="hljs-variable">$wp</span> search-replace {old URL} {new URL} --dry-run
```

</div></div>La commande ci-dessus n’affichera le résultat escompté qu’une fois cette requête exécutée. Il s’agit d’une mesure de précaution pour s’assurer que le résultat sera conforme à l’attente. Une fois que vous êtes satisfait, vous pouvez procéder au remplacement effectif en retirant dry-run de la commande ci-dessus, comme suit:

<div id="bkmrk-%24wp-search-replace-%7B-0">```
<span class="hljs-variable">$wp</span> search-replace {old URL} {new URL}
```

</div>## Migration de contenu

<div id="bkmrk-wp-db-export%3A-export"><div>- `wp db export`: Exporte la base de données vers un fichier ou vers STDOUT.
- `wp db import`: Importe une base de données à partir d’un fichier ou de STDIN.

```
<span class="hljs-comment"># Exporte toute la base de données vers un fichier dans le répertoire wordpress</span>
<span class="hljs-variable">$wp</span> db <span class="hljs-built_in">export</span> db.sql

<span class="hljs-comment"># Exporter certains tableaux</span>
<span class="hljs-variable">$wp</span> db <span class="hljs-built_in">export</span> --tables=wp_options,wp_users

<span class="hljs-comment"># Importer une base de données</span>
<span class="hljs-variable">$wp</span> db import db.sql
```

<div></div></div></div>Il migre efficacement toutes les données et informations, y compris les messages, les liens, les dates, les auteurs, les commentaires, etc., et correspond en conséquence aux taxonomies WordPress existantes.

Commandes supplémentaires de gestion de la base de données:

<div id="bkmrk-nom-description-wp-d"><table><colgroup><col style="width:21%;"></col><col style="width:78%;"></col></colgroup><thead><tr class="header"><th>NOM</th><th>DESCRIPTION</th></tr></thead><tbody><tr class="odd"><td>wp db check</td><td>Vérifie l’état actuel de la base de données.</td></tr><tr class="even"><td>wp db clean</td><td>Supprime toutes les tables avec `$table_prefix` de la base de données.</td></tr><tr class="odd"><td>wp db cli</td><td>Ouvre une console MySQL en utilisant les informations d’identification de wp-config.php</td></tr><tr class="even"><td>wp db columns</td><td>Affiche des informations sur une table donnée.</td></tr><tr class="odd"><td>wp db create</td><td>Crée une nouvelle base de données.</td></tr><tr class="even"><td>wp db drop</td><td>Supprime la base de données existante.</td></tr><tr class="odd"><td>wp db export</td><td>Exporte la base de données vers un fichier ou vers STDOUT.</td></tr><tr class="even"><td>wp db import</td><td>Importe une base de données à partir d’un fichier ou de STDIN.</td></tr><tr class="odd"><td>wp db optimize</td><td>Optimise la base de données.</td></tr><tr class="even"><td>wp db prefix</td><td>Affiche le préfixe de la table de la base de données.</td></tr><tr class="odd"><td>wp db query</td><td>Exécute une requête SQL sur la base de données.</td></tr><tr class="even"><td>wp db repair</td><td>Réparation de la base de données.</td></tr><tr class="odd"><td>wp db reset</td><td>Supprime toutes les tables de la base de données.</td></tr><tr class="even"><td>wp db search</td><td>Trouve un texte dans la base de données.</td></tr><tr class="odd"><td>wp db size</td><td>Affiche le nom et la taille de la base de données.</td></tr><tr class="even"><td>wp db tables</td><td>Liste des tables de la base de données.</td></tr></tbody></table>

</div>## Gérer les utilisateurs

<div id="bkmrk-%23-liste-des-identifi">```
<span class="hljs-comment"># Liste des identifiants d'utilisateurs</span>
<span class="hljs-variable">$wp</span> user list 

<span class="hljs-comment"># Créer un nouvel utilisateur.</span>
<span class="hljs-variable">$wp</span> user create bob bob@example.com --role=author

<span class="hljs-comment"># Mettre à jour un utilisateur existant.</span>
<span class="hljs-variable">$wp</span> user update 123 --display_name=Mary --user_pass=marypass

<span class="hljs-comment"># Supprimer l'utilisateur 123 et réassigner les postes à l'utilisateur 567</span>
$ wp user delete 123 --reassign=567
```

</div>## Lire plus

<div id="bkmrk-https%3A%2F%2Fdeveloper.wo">- [https://developer.wordpress.org/cli/commands/](https://developer.wordpress.org/cli/commands/)

</div>

# Docker-compose Wordpress-Mysql-Adminer

Docker-compose

installation de Wordpress / Mysql / Adminer

créer les 3 dossiers suivants :

- plugins
- themes
- uploads

modifier le chemin dans le fichier docker-compose.yaml

```YAML
version: '3'

services:

    wordpress:
        image: wordpress:latest
        network_mode: bridge
        links:
           - mysql:mysql
        container_name: wp_wordpress
        depends_on:
            - mysql
        ports:
            - 80:80
        restart: always
        environment:
            WORDPRESS_DB_HOST: 'mysql:3306'
            WORDPRESS_DB_USER: wordpress
            WORDPRESS_DB_PASSWORD: wordpress
            WORDPRESS_DB_NAME: wordpress
        volumes:
            - ~/wordpress/plugins:/var/www/html/wp-content/plugins
            - ~/wordpress/themes:/var/www/html/wp-content/themes
            - ~/wordpress/uploads:/var/www/html/wp-content/uploads
        
           
    mysql:
        image: mysql:5.7
        container_name: wp_mysql
        network_mode: bridge
        volumes:
            - mysql_data:/var/lib/mysql
        ports:
            - 3306:3306
        restart: always
        environment:
            MYSQL_ROOT_PASSWORD: mypassword
            MYSQL_DATABASE: wordpress
            MYSQL_USER: wordpress
            MYSQL_PASSWORD: wordpress
    
    adminer:
        image: adminer
        restart: always
        network_mode: bridge
        links:
           - mysql:mysql
        container_name: wp_adminer
        ports:
            - 8080:8080 
volumes:
    mysql_data: {}
       

```

une fois le fichier enregistré, lancer la commande suivante :

`sudo docker-composer up -d `

##### Vérification des containers :

lancement de la commande `sudo docker ps`

[![Screen-Capture_select-area_20200518224541.png](https://docs.wlan.ovh/uploads/images/gallery/2020-05/scaled-1680-/Screen-Capture_select-area_20200518224541.png)](https://docs.wlan.ovh/uploads/images/gallery/2020-05/Screen-Capture_select-area_20200518224541.png)

# Ubuntu Mate XDRP Docker

### docker-ubuntu-xrdp-mate-custom

Utilisez [https://github.com/RattyDAVE/docker-ubuntu-xrdp-mate-custom/issues](https://github.com/RattyDAVE/docker-ubuntu-xrdp-mate-custom/issues) pour envoyer des commentaires, des problèmes, des commentaires et une discussion générale.

### Démarrage rapide

Exécutez ce qui suit pour commencer.

```
echo "user:pass:N" > CREATEUSERS.TXT
docker run --name RattyDAVE20.04 \
           --privileged=true \
           -p 3389:3389 \
           -e TZ="Europe/London" \
           -v CREATEUSERS.TXT:/root/createusers.txt \
           -dit --restart unless-stopped \
           rattydave/docker-ubuntu-xrdp-mate-custom:20.04
```

Puis sur un type de machine Windows

```
mstsc
```

Ensuite, entrez l'adresse IP de l'hôte docker.

Connectez-vous en utilisant le nom d'utilisateur `user`et le mot de passe`pass`

### Ubuntu 20.04 avec XRDP et MATE. (dernier)

- rattydave / docker-ubuntu-xrdp-mate-custom: 20.04
- rattydave / docker-ubuntu-xrdp-mate-custom: 20.04-tools

Contenu:

- Ubuntu 19.10
- Bureau Mate (repo ubuntu)
- XRDP (construit à partir de la source)
- XRPDXORG (construit à partir de la source)
- tightvncserver (dépôt ubuntu)
- Navigateur Web Epiphany (ubuntu repo)
- Script xrdp.ini personnalisé
- Disposition du clavier britannique par défaut (peut être modifiée)
- Fuseau horaire britannique par défaut (peut être modifié)
- Vous pouvez maintenant définir le fuseau horaire avec la variable TZ
- Possibilité d'exécuter un script au démarrage du conteneur. Ceci est utile pour installer les packages nécessaires.
- Mappage de lecteur local (nécessite des droits élevés avec ce paramètre `--privileged=true`)
- Partage du Presse-papiers (nécessite des droits élevés avec ce paramètre `--privileged=true`)

```
docker run --name RattyDAVE20.04 \
           --privileged=true \
           -p 3389:3389 \
           -e TZ="Europe/London" \
           -v %LOCAL_PATH_TO_CREATEUSERS.TXT_FILE%:/root/createusers.txt \
           -v %LOCAL_PATH_TO_STARTUP.SH_FILE%:/root/startup.sh \
           -v %LOCAL_PATH_TO_HOME_DIRECTORY%:/home \
           -dit --restart unless-stopped \
           rattydave/docker-ubuntu-xrdp-mate-custom:20.04
```

- Remplacez% LOCAL\_PATH\_TO\_CREATEUSERS.TXT\_FILE% par le nom de fichier local du fichier createusers.
- Remplacez% LOCAL\_PATH\_TO\_STARTUP.SH\_FILE% par le nom de fichier local du script startup.sh. Ceci est exécuté après la création de l'utilisateur et avant le démarrage du service.
- Remplacez% LOCAL\_PATH\_TO\_HOME\_DIRECTORY% par le répertoire local des répertoires / home.

Ce fichier contient 3 champs (nom d'utilisateur: mot de passe: is\_sudo). Où nom d'utilisateur est l'identifiant de connexion. Le mot de passe est le mot de passe. is\_sudo l'utilisateur a-t-il un accès sudo (seul Y est reconnu). Il a également besoin d'une "nouvelle ligne" à la fin de la ligne.

Exemple de fichier CREATEUSERS.TXT

```
mickey:mouse:N
daisy:duke:Y
dog:flash:n
morty:rick:wubba
```

Dans cet exemple, 4 utilisateurs seront créés et seule daisy aura les droits sudo. À chaque redémarrage, il vérifiera ce fichier et AJOUTERA tous les nouveaux utilisateurs.

Exemple de fichier STARTUP.SH pour changer les paramètres régionaux.

```
apt-get update
apt-get -y install language-pack-de language-pack-gnome-de
locale-gen de_DE.UTF-8
update-locale LANG=de_DE.UTF-8
```

## Se connecter

Veuillez noter que certains clients ont besoin d'un jeu de paramètres supplémentaire glyph-cache. xfreerdp, remmina et d'autres ont besoin de cet ensemble.

Exemple Linux de connexion:

```
xfreerdp /size:1920x1140 /kbd:0x00000809 /v:%IP_ADDRESS% /gdi:hw /drive:home,$HOME +clipboard /sound:sys:alsa +glyph-cache
```

Exemple Windows:

Ouvrez une invite de commande et tapez

```
mstsc
```

Ensuite, entrez l'adresse IP de l'hôte docker.

## Mise à jour automatique

Pour mettre à jour automatiquement, je recommande d'utiliser Watchtower.

```
docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower
```

# XTeve EPG Docker installation

#### Création du container xteve :

` docker run -it -d --name=xteve -p 34400:34400 -v xteve:/home/xteve/.xteve bl0m1/xtevedocker:latest `

#### Connexion sur l'interface web :

[http://192.168.1.69:34400/web/](http://192.168.1.69:34400/web/)

<table id="bkmrk-m3u-url%3A-http%3A%2F%2F192." style="font-family:monospace;letter-spacing:1px;display:block;font-size:9px;background-color:#111111;color:#00e6ff;padding:0px;border-spacing:4px;border-bottom:1px solid #444444;font-style:normal;font-weight:400;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;"><tbody style="font-family:Arial, sans-serif;letter-spacing:2px;width:1001.82px;"><tr style="font-family:Arial, sans-serif;letter-spacing:2px;"><td class="tdKey phone" style="font-family:Arial, sans-serif;letter-spacing:2px;">M3U URL:</td><td class="tdVal phone" id="bkmrk-http%3A%2F%2F192.168.1.69%3A-0" style="font-family:Arial, sans-serif;letter-spacing:2px;color:#aaaaaa;white-space:inherit;">http://192.168.1.69:34400/m3u/xteve.m3u (Specific groups: \[http://...?group-title=foo,bar\])</td></tr></tbody></table>

<table id="bkmrk-xepg-url%3A-http%3A%2F%2F192" style="font-family:monospace;letter-spacing:1px;display:block;font-size:9px;background-color:#111111;color:#00e6ff;padding:0px;border-spacing:4px;border-bottom:1px solid #444444;font-style:normal;font-weight:400;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;"><tbody style="font-family:Arial, sans-serif;letter-spacing:2px;width:1001.82px;"><tr style="font-family:Arial, sans-serif;letter-spacing:2px;"><td class="tdKey phone" style="font-family:Arial, sans-serif;letter-spacing:2px;">XEPG URL:</td><td class="tdVal phone" id="bkmrk-http%3A%2F%2F192.168.1.69%3A-1" style="font-family:Arial, sans-serif;letter-spacing:2px;color:#aaaaaa;white-space:inherit;">http://192.168.1.69:34400/xmltv/xteve.xml</td></tr></tbody></table>

# File Browser dans docker

Création du container :

`docker run -d --name IptvFilesHttp -p 4466:80 -v /mnt/storage/docker/tellytv/config/:/opt/www/files/ mohamnag/nginx-file-browser`

http://192.168.1.69:4466/

# Automatisation Tidal-DL

Création de l'image Docker pour Tidal-DL

- #### Docker

Fichier Dockerfile : (source ici : [https://git.wlan.ovh/garfieldtux/docker-demo](https://git.wlan.ovh/garfieldtux/docker-demo))

```Ruby
# This file is a template, and might need editing before it works on your project.
FROM python:3.8-slim

WORKDIR /usr/src/app

COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt

COPY .tidal-dl.json /root/.tidal-dl.json
COPY .tidal-dl.token.json /root/.tidal-dl.token.json
```

Création de l'image et Lancement du docker

```shell
docker build -t tidal-dl .
docker run -itd --name=TidalDL -v /mnt/NAS/music:/mnt/music tidal-dl
```

- #### Rundeck

Mise en place de RunDeck pour l'automatisation :

[![rundeck1.PNG](https://docs.wlan.ovh/uploads/images/gallery/2021-11/scaled-1680-/rundeck1.PNG)](https://docs.wlan.ovh/uploads/images/gallery/2021-11/rundeck1.PNG)

Utiliser les options suivante pour l'utilisation du WEBhook

`docker exec -it TidalDL tidal-dl -l ${option.ID} ${option.URL}`

####  

- #### WebHook

Ensuite il faut crée un webhook avec les options suivantes

`-URL ${data.field1}```

[![rundeck2.PNG](https://docs.wlan.ovh/uploads/images/gallery/2021-11/scaled-1680-/rundeck2.PNG)](https://docs.wlan.ovh/uploads/images/gallery/2021-11/rundeck2.PNG)

- #### Requête CURL pour le Webhook

```shell
curl -H "Content-Type: application/json" -X POST -d '{"field1" : "117790336"}' https://run.wlan.ovh/api/38/webhook/nWfevIsA7ieJz9f1FKsW0Ib7uNwXWUfR
```

- #### Raccourci Apple :

Dans Ios Raccourci il faut crée ceci :

[![iphone.jpg](https://docs.wlan.ovh/uploads/images/gallery/2021-11/scaled-1680-/iphone.jpg)](https://docs.wlan.ovh/uploads/images/gallery/2021-11/iphone.jpg)

# Docker speedtest-cli

commande pour tester la ligne avec speedtest-cli

`docker run --rm moutten/speedtest-cli speedtest --accept-gdpr`

# WireGuard

**WireGuard c'est quoi ?**  
WireGuard est un protocole de communication et un logiciel libre et open source permettant de créer un réseau privé virtuel (VPN)2. Il est conçu avec les objectifs de facilité d'utilisation, de performances et de surface d'attaque basse. Il vise une meilleure performance3 et une plus grande économie d'énergie que les protocoles IPsec et OpenVPN Tunneling4. Le protocole WireGuard transmet le trafic sur UDP. [(Source - Wikipédia)](https://fr.wikipedia.org/wiki/WireGuard)  
  
**<u>Sommaire :</u>**  
**<u>1/ Création des dossiers</u>**  
**<u>2/ Création du docker-compose</u>**  
**<u>3/ Création du conteneur</u>**  
**<u>4/ Ouverture de port</u>**  
**<u>5/ Récupération des fichiers de configuration des clients</u>**  
  
C'est parti ! ![:giggle:](https://docs.wlan.ovh/uploads/images/gallery/2022-01/embedded-image-pvpohlmn.gif "Giggle    :giggle:")  
  
**<u>1/ Création des dossiers</u>**  
Je vais installer mon serveur WireGuard dans mon dossier **docker**, qui se situe sur **/srv/disk1**, je vais donc créer dans le dossier docker, un dossier wireguard qui contient un dossier config avec la commande suivante :

<div id="bkmrk-code%3A-sudo-mkdir--p-"><div>Code:</div><div>```
sudo mkdir -p /srv/disk1/docker/wireguard/config
```

</div></div>  
  
**<u>2/ Création du docker-compose</u>**  
Maintenant, toujours dans mon dossier **Dashy** :

<div id="bkmrk-code%3A-cd-%2Fsrv%2Fdisk1%2F"><div>Code:</div><div>```
cd /srv/disk1/docker/wireguard
```

</div></div>  
Je crée un fichier docker-compose.yml :

<div id="bkmrk-code%3A-sudo-nano-dock"><div>Code:</div><div>```
sudo nano docker-compose.yml
```

</div></div>  
Avec le contenu suivant :

<div id="bkmrk-code%3A-version%3A-%222.1%22"><div>Code:</div><div>```
version: "2.1"
services:
  wireguard:
    image: ghcr.io/linuxserver/wireguard
    container_name: wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
      - SERVERURL=tuto-evo.fr
      - SERVERPORT=51820
      - PEERS=PC,TEL,PCPRO
      - PEERDNS=auto
      - INTERNAL_SUBNET=10.13.13.0
      - ALLOWEDIPS=0.0.0.0/0
    volumes:
      - /srv/disk1/docker/wireguard/config:/config
      - /lib/modules:/lib/modules
    ports:
      - 51820:51820/udp
    restart: unless-stopped
```

</div></div>  
Ici, plusieurs choses sont a adapter suivant votre installation :  
\- **PUID** et **PGID**sont à modifier suivant les ID de votre utilisateur\*  
\* Pour connaitre le PUID/GUID de l'utilisateur : [\[Tuto\] Connaitre le PUID / PGID d'un utilisateur](https://www.forum-nas.fr/viewtopic.php?f=56&t=13213).  
  
\- **SERVERURL**, ici j'ai indiqué **tuto-evo.fr** comme nom de domaine d'acces a mon serveur. Ceci est a remplacer par votre nom de domaine, si vous avez une IP Fixe, vous pouvez également ici indiquer l'IP Fixe plutot qu'un nom de domaine.  
  
\- **PEERS**, contient soit un nombre soit des valeur texte séparé par une virgule, cela correspond au nombre de configuration client que vous voulez générer à la création du serveur. Ici, je souhaite créer 3 profils : "PC" , "TEL" et "PCPRO". J'aurai également pu indiquer : **<u>PEERS=3</u>** a la seul différence que les 3 profils générer n'ont dans ce cas, pas de nom.  
  
\- **ALLOWEDIPS** correspond à la plage d'IP autorisé a utilisé le VPN. Avec la configuration "0.0.0.0/0" alors le client VPN forcera toutes les connexions a utiliser le VPN.  
  
\- Sur la ligne "/srv/disk1/docker/wireguard/config:/config", **/srv/disk1/docker/wireguard/config** doit correspondre avec le dossier crée a l'étape 1 du tuto.  
  
**<u>3/ Création du conteneur</u>**  
Maintenant, toujours dans mon dossier **wireguard** :

<div id="bkmrk-code%3A-cd-%2Fsrv%2Fdisk1%2F-0"><div>Code:</div><div>```
cd /srv/disk1/docker/wireguard
```

</div></div>  
on execute la commande :

<div id="bkmrk-code%3A-sudo-docker-co"><div>Code:</div><div>```
sudo docker-compose up -d
```

</div></div>  
Une fois fini, la commande renvoi "done", alors le conteneur est bien créé !  
Il faut attendre quelques minutes pour que le conteneur soit bien créer et les configuration générées.  
  
**<u>4/ Ouverture de port</u>**  
Pour fonctionner correctement, Wireguard a besoin que le port **51820 UDP** soit correctement ouvert et redirigé. Pensez donc a bien l'ouvrir/redirigé dans votre box et/ou pare-feu.  
  
**<u>5/ Récupération des fichiers de configuration des clients</u>**  
Dans votre dossier de configuration ( **/srv/disk1/docker/wireguard/config** ), nous allons trouver des dossier commençant par **<u>peer\_</u>**.  
Dans mon cas, 3 dossiers car nous avons configuré 3 clients ! Un dossier peer\_PC, un peer\_TEL et un peer\_PCPRO.  
  
Dans chacun de ces dossiers vous allez trouver un fichier .conf, qui servira a connecté votre client au serveur Wireguard !

# Sshwifty Web SSH & Telnet Client

**Sshwifty is a SSH and Telnet connector made for the Web.** It can be deployed on your computer or server to provide SSH and Telnet access interface for any compatible (standard) web browser.

[![Web Interface](https://github.com/nirui/sshwifty/raw/master/Screenshot.png)](https://github.com/nirui/sshwifty/blob/master/Screenshot.png)

[![Build Status](https://github.com/nirui/sshwifty/workflows/Sshwifty-CI/badge.svg)](https://github.com/nirui/sshwifty/workflows/Sshwifty-CI/badge.svg)

## Install

### Binary

Compiled binaries can be found at the [release](https://github.com/nirui/sshwifty/releases) section of the page.

Please be advised that those binaries are generated by an automatic proccess, the author of this project will NOT verify that they work. You will have to try it at your own risk.

### Docker Image

If [Docker](https://www.docker.com/) is installed on your machine, you may use our prebuilt Docker Image by executing following command:

```
$ docker run --detach \
  --restart always \
  --publish 8182:8182 \
  --name sshwifty \
  niruix/sshwifty:latest

```

When TLS is desired and you don't want to setup Docker Volumes, you can use `SSHWIFTY_DOCKER_TLSCERT` and `SSHWIFTY_DOCKER_TLSCERTKEY` environment variables to import credential files to the container and automatically apply them:

```
$ openssl req \
  -newkey rsa:4096 -nodes -keyout domain.key -x509 -days 90 -out domain.crt
$ docker run --detach \
  --restart always \
  --publish 8182:8182 \
  --env SSHWIFTY_DOCKER_TLSCERT="$(cat domain.crt)" \
  --env SSHWIFTY_DOCKER_TLSCERTKEY="$(cat domain.key)" \
  --name sshwifty \
  niruix/sshwifty:latest

```

The `domain.crt` and `domain.key` must be a valid TLS certificate and key file located on the same machine which the `docker run` command will be executed upon.

### Compile from source code (Recommanded if you're a developer)

The following tools are required in order to build the software from source code:

- `git` to download the source code
- `node` and `npm` to build front-end application
- `go` to build back-end application

To start the build process, execute:

```
$ git clone https://github.com/nirui/sshwifty
$ cd sshwifty
$ npm install
$ npm run build

```

When done, you can found the newly generated `sshwifty` binary inside the current working directory.

Notice: `Dockerfile` contains the entire build procedure of this software. Please refer to it when you encounter any compile/build related issue.

### Deploy on the cloud

To deploy this project onto the cloud, Google App Engine or Heroku for example, you need to first download the source code, then generate it locally before deploying it.

`npm run generate` command will generate all static files and automatically call `go generate ./...` to bind those static files directly into program source code. And you need those generated source code to get the software to function.

Trying to deploy ungenerated code directly to cloud will lead to failure, as required source code is missing.

Also keep in mind, if the cloud deployment process is `git` based, you may have to modify `.gitignore` file in order to allow all required files to be uploaded.

# webserver from files

```bash
docker run -d \
    -v /my/folder:/web \
    -p 8080:8080 \
    halverneus/static-file-server:latest
```

# infra