Compilation, installation et configuration de CouchDB sur Debian Strech

Compilation

Installer les dépendances :

apt-get update && apt-get --no-install-recommends -y install \
            ca-certificates \
            curl \
            net-tools \
            nginx \
            sudo \
            vim-tiny \
            build-essential \
            pkg-config \
            erlang \
            libicu-dev \
            libmozjs185-dev \
            libcurl4-openssl-dev

Télécharger les sources, ici la version 2.1.0

cd /tmp
curl -LO https://dist.apache.org/repos/dist/release/couchdb/source/2.1.0/apache-couchdb-2.1.0.tar.gz

Extraire et compiler les sources

tar xf apache-couchdb-2.1.0.tar.gz
cd apache-couchdb-2.1.0
./configure
make release

Puis créer l’utilisateur dédié

adduser --system \
        --no-create-home \
        --shell /bin/bash \
        --group --gecos \
        "CouchDB Administrator" couchdb
Installation

Nous installons CouchDB dans le répertoire /home/couchdb

cp -R rel/couchdb /home/couchdb
chown -R couchdb:couchdb /home/couchdb
find /home/couchdb -type d -exec chmod 0770 {} \;
chmod -R 0644 /home/couchdb/etc/*
mkdir /var/log/couchdb && chown couchdb: /var/log/couchdb

Création du fichier de service

cat <<EOT >> /etc/systemd/system/couchdb.service
[Unit]
Description=Couchdb service
After=network.target

[Service]
Type=simple
User=couchdb
ExecStart=/home/couchdb/bin/couchdb -o /dev/stdout -e /dev/stderr
Restart=always

[Install]
WantedBy=multi-user.target
EOT

Et enregistrement du service

systemctl  daemon-reload
systemctl  start couchdb.service
systemctl  enable couchdb.service
Configuration

Création des bases par défaut

HOST="http://127.0.0.1:5984"
curl -X PUT $HOST/_users
curl -X PUT $HOST/_replicator
curl -X PUT $HOST/_global_changes

Ajout d’un administrateur

Vous trouverez l’interface d’administration à l’adresse suivante

http://127.0.0.1:5984/_utils/

Il est alors possible d’y créer un compte administrateur.

 

Sources

http://docs.couchdb.org/en/2.1.0/install/setup.html

https://docs.cozy.io/en/install/manual/

 

 

Installation de Docker sur Debian Jessie

Définition

Docker est un logiciel libre qui automatise le déploiement d’applications dans des conteneurs logiciels. Selon la firme de recherche sur l’industrie 451 Research, « Docker est un outil qui peut empaqueter une application et ses dépendances dans un conteneur isolé, qui pourra être exécuté sur n’importe quel serveur Linux ». Ceci permet d’étendre la flexibilité et la portabilité d’exécution d’une application, que ce soit sur la machine locale, un cloud privé ou public, une machine nue, etc.

Installation

Se Connecter avec l’utilisateur root ou préfixer les commandes par sudo.

Faire le ménage
apt remove docker docker-engine

Installation des outils

$ sudo apt-get install \
     apt-transport-https \
     ca-certificates \
     curl \
     software-properties-common
Ajouter la clé PGP de Docker
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
Ajouter le dépôt

Ajouter la ligne suivante au fichier /etc/apt/sources.list

deb [arch=amd64] https://download.docker.com/linux/debian jessie stable

Et mettre à jour les dépôts :

apt update
Installer Docker
apt install docker-ce
Tester
docker run hello-world

 

Installer Docker-Compose

Docker-compose est l’outil indispensable pour gérer vos images.

$ curl -L "https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose

Et pour l’auto complétion…

curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

Sources

Wikipedia.org

https://docs.docker.com/engine/installation/linux/debian/

https://docs.docker.com/compose/install/

Script de création d’un daemon sous Debian

Pour la station météo, certains programmes doivent fonctionner en tache de fond. Pour cela on utilise des démons.

Dans mon exemple j’ai un script Python à lancer. Ce script est capable de fonctionner en mode autonome mais je souhaite l’intégrer au système. Mon service s’appelle « launcher ».

#!/bin/sh

### BEGIN INIT INFO
# Provides:          launcher
# Required-Start:    $remote_fs
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Run weathergh
# Description:       Run weatherg-hardware as daemon.
### END INIT INFO

. /lib/lsb/init-functions

[ -f /etc/default/rcS ] && . /etc/default/rcS
PATH=/bin:/usr/bin:/sbin:/usr/sbin

SCRIPT_DIR=/home/rep/
SCRIPT=script_a_lancer.py

case "$1" in
  start)
    log_begin_msg "Running launcher"
    cd $SCRIPT_DIR
    python $SCRIPT --daemon
    log_end_msg 0
    ;;
  stop)
    log_begin_msg "Stopping launcher"

    cd $SCRIPT_DIR
    python $SCRIPT --quit
    log_end_msg 0
    ;;
  force-reload|restart)
    $0 stop
    $0 start
    ;;
  status)
    exit 0
    ;;
  *)
    log_success_msg "Usage: /etc/init.d/launcher {start|stop|restart|force-reload|status}"
    exit 1
esac

exit 0

Copier le script launcher dans le répertoire /etc/init.d/ et donner les droits d’exécution chmod +x /etc/init.d/launcher

Enregistrer le service et le démarrer :

update-rc.d launcher defaults
services start launcher

Sources :

https://openclassrooms.com/courses/faire-un-demon-sous-linux

Installation et quelques tricks autour de Docker sur Debian

Installation

En fonction des plateformes il existe plusieurs méthodes, j’ai choisi celle conseillée par la documentation.

Installer les dépendances :

apt-get install apt-transport-https ca-certificates

Ajouter la clé GPG

apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

Ajouter le dépot en fonction de votre configuration dans le fichier /etc/apt/sources.list.d/docker.list

Pour Jessie : deb https://apt.dockerproject.org/repo debian-jessie main

Pour les autres distributions, se fier à la documentation.

Enfin installer les paquets…

apt-get update
apt-get install docker-engine

Pour permettre à un utilisateur autre que root de contrôler Docker

# Add the docker group if it doesn't already exist.
$ sudo groupadd docker

# Add the connected user "${USER}" to the docker group.
# Change the user name to match your preferred user.
# You may have to logout and log back in again for
# this to take effect.
$ sudo gpasswd -a ${USER} docker

# Restart the Docker daemon.
$ sudo service docker restart

Configuration

Modifier les serveurs DNS

$ vi /etc/default/docker.io
 
# Use DOCKER_OPTS to modify the daemon startup options.
DOCKER_OPTS="-dns 208.67.220.220 -dns 208.67.220.222"

Installation de Docker Compose

Télécharger la version depuis GitHub

curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

Et donner les droits d’éxécution :

chmod +x /usr/local/bin/docker-compose

Ajouter l’auto-completion pour le bash

curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

Commandes

Lister les images disponibles

docker images -a

Stopper un conteneur détaché (docker run -d nom_conteneur)

docker stop nom_conteneur

Lister les conteneurs

docker container ls

 

 

Suite à venir

Sources

Installation

Nicolargo

https://docs.docker.com/engine/reference/run/

Limiter l’accès de certains pays avec Nginx

Je suis récemment tombé sur un article décrivant comment bloquer l’accès de certains pays avec Nginx. J’ai donc décidé de bloquer les pays responsables de spams (commentaires indésirables). Je vais ici décrire la procédure sur Debian Jessie.

Tout d’abord vérifier que le module GOIP est  activé :

nginx -V

Si c’est le cas, la commande vous retournera quelque chose comme cela. C’est normalement la configuration par défaut sur Debian :

nginx version: nginx/1.x.x 
TLS SNI support enabled 
configure arguments: [...] --with-http_geoip_module [...]

Installer GEOIP :

apt-get install geoip-database libgeoip1

Puis créer le fichier /etc/nginx/conf.d/geo.conf

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
    default yes;
    BE no;
    FR no;
}

Via cette configuration, la France et la Belgique (désolé amis frontaliés) sont bloquées. Je vous laisse le soin d’ajouter d’autres pays…

Dans la le fichier de configuration du site web concerné, ajouter :

if ($allowed_country = no) {
        return 444;
}

Redémarrer le serveur :

service nginx configtest
service nginx restart

Au besoin, il possible de mettre à jour la base de données GEOIP

cd /usr/share/GeoIP/
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz

A surveiller dans la durée dans vos logs. La manipulation fonctionne, je l’ai tester depuis un poste extérieur.

Source : JBNet.fr

Documentation Nginx : HttpGeoipModule

Liste des codes pays : ICI

 

Matomo encountered an error: Uncaught Error: Class "Piwik\Plugins\CustomVariables\CustomVariables" not found in /var/www/piwik/core/Tracker/TrackerCodeGenerator.php:101 Stack trace: #0 /var/www/piwik/plugins/SitesManager/API.php(160): Piwik\Tracker\TrackerCodeGenerator->generate() #1 [internal function]: Piwik\Plugins\SitesManager\API->getJavascriptTag() #2 /var/www/piwik/core/API/Proxy.php(255): call_user_func_array() #3 /var/www/piwik/core/Context.php(29): Piwik\API\Proxy->Piwik\API\{closure}() #4 /var/www/piwik/core/API/Proxy.php(158): Piwik\Context::executeWithQueryParameters() #5 /var/www/piwik/core/API/Request.php(274): Piwik\API\Proxy->call() #6 /var/www/thegtricks/wp-content/plugins/wp-piwik/classes/WP_Piwik/Request/Php.php(46): Piwik\API\Request->process() #7 /var/www/thegtricks/wp-content/plugins/wp-piwik/classes/WP_Piwik/Request/Php.php(18): WP_Piwik\Request\Php->call() #8 /var/www/thegtricks/wp-content/plugins/wp-piwik/classes/WP_Piwik/Request.php(63): WP_Piwik\Request\Php->request() #9 /var/www/thegtricks/wp-content/plugins/wp-piwik/classes/WP_Piwik.php(1038): WP_Piwik\Request->perform() #10 /var/www/thegtricks/wp-content/plugins/wp-piwik/classes/WP_Piwik.php(1205): WP_Piwik->request() #11 /var/www/thegtricks/wp-content/plugins/wp-piwik/classes/WP_Piwik/TrackingCode.php(16): WP_Piwik->updateTrackingCode() #12 /var/www/thegtricks/wp-content/plugins/wp-piwik/classes/WP_Piwik.php(296): WP_Piwik\TrackingCode->__construct() #13 /var/www/thegtricks/wp-includes/class-wp-hook.php(324): WP_Piwik->addJavascriptCode() #14 /var/www/thegtricks/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters() #15 /var/www/thegtricks/wp-includes/plugin.php(517): WP_Hook->do_action() #16 /var/www/thegtricks/wp-includes/general-template.php(3080): do_action() #17 /var/www/thegtricks/wp-content/themes/twentyfifteen-child/footer.php(45): wp_footer() #18 /var/www/thegtricks/wp-includes/template.php(810): require_once('...') #19 /var/www/thegtricks/wp-includes/template.php(745): load_template() #20 /var/www/thegtricks/wp-includes/general-template.php(92): locate_template() #21 /var/www/thegtricks/wp-content/themes/twentyfifteen/archive.php(68): get_footer() #22 /var/www/thegtricks/wp-includes/template-loader.php(106): include('...') #23 /var/www/thegtricks/wp-blog-header.php(19): require_once('...') #24 /var/www/thegtricks/index.php(17): require('...') #25 {main} thrown (which lead to: Session must be started before any output has been sent to the browser; output started in /var/www/thegtricks/wp-includes/script-loader.php/2938)