Thématiques principales

jeudi 28 septembre 2017

Postgres : commandes de base

Postgres est un système de gestion de base de données relationnelle et objet. Il permet la sauvegarde et l'exploitation de données métiers et/ou applicatives. C'est un produit libre sous licence BSD. 

Il supporte une grande partie du standard SQL et offres des nombreuses autres fonctionnalités telles que la capacité de réplication, la répartition de charge, le contrôle de version concurrentes, intégrité transactionnelle, les triggers, etc... Pour plus d’informations je vous invite a consulter sa documentation.

Enfin de part sa licence libre qui facilite sa démocratisation, s'il n'y a qu'un seul SGBDR a connaitre, c'est probablement celui-ci.

Connexion au shell psql

1
$ sudo -u postgres psql 

Creation d'un utilisateur pour l'etablissement d'une connexion vers une futur base de données

1
2
3
4
5
6
7
$ sudo -i -u postgres
$ createuser -P --interactive nom_utilisateur
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y

Suppression d'un utilisateur

1
2
$ sudo -i -u postgres
$ dropuser -U postgres nom_utilisateur

Creation/suppression d'une base de données associée a un utilisateur

1
2
3
$ sudo -i -u postgres
$ createdb -O nom_utilisateur -E UTF8 nom_de_la_db
$ dropdb -U nom_utilisateur nom_de_la_db

Execution d'une requette sur une base de données sur le compte de son l'utilisateur

1
$ sudo -u postgres psql -U nom_utilisateur nom_de_la_db -c requette

Sauvegarde d'une base de données

1
2
$ sudo -i -u postgres
$ pg_dump -f $PATH_SAVE/nom_de_la_base.sql nom_de_la_base 

 Restauration d'une base de données (attention la base doit avoir été recréer préalablement avec createdb)

1
$ sudo -u postgres psql -f $PATH_SAVE/nom_de_la_base.sql nom_de_la_base

Creation d'une table utilisateurs:

1
2
3
4
5
6
7
8
$ sudo -u postgres psql 
$ CREATE TABLE  utilisateurs (
 id SERIAL PRIMARY KEY,
 email varchar( 60 ) UNIQUE NOT NULL ,
 mot_de_passe varchar( 32 ) NOT NULL ,
 nom varchar( 20 ) NOT NULL ,
 date_inscription date NOT NULL
);

On pourra noté pour ceux qui sont plus habitué de MySQL que les requêtes SQL ne sont pas syntaxiquement identique. On reviendra sur ce "détail". Mais ici par exemple il faut savoir que SERIAL signifie juste "NOT NULL AUTO_INCREMENT"

Insersion de données dans la table

1
2
$ INSERT INTO utilisateurs (email, mot_de_passe, nom, date_inscription) VALUES ('moi@la.com', MD5('tutu'), 'BaMoi', NOW());
$ INSERT INTO utilisateurs (email, mot_de_passe, nom, date_inscription) VALUES ('toi@pas.la', MD5('utut'), 'EtToi', NOW());

Vérification de l’insertion

1
2
3
4
5
6
7
$ SELECT * FROM utilisateurs;

 id |   email    |           mot_de_passe           |  nom  | date_inscription
----+------------+----------------------------------+-------+------------------
  4 | moi@la.com | bdb8c008fa551ba75f8481963f2201da | BaMoi | 2017-09-27
  5 | toi@pas.la | 5c587bce24972d7a92e6cf1200f2001a | EtToi | 2017-09-27
(2 rows)

La vérification de la suppression nous renvoie le résultat suivant


1
2
3
4
5
6
$ delete from utilisateurs where id = 4;

 id |   email    |           mot_de_passe           |  nom  | date_inscription
----+------------+----------------------------------+-------+------------------
  5 | toi@pas.la | 5c587bce24972d7a92e6cf1200f2001a | EtToi | 2017-09-27
(1 row)

dimanche 17 septembre 2017

Docker - base

Allez aujourd'hui un peu de docker, reprenons depuis le début! On va largement s'aider du tutoriel fourni par la doc officiel Docker

Le but du post n'est pas forcement de paraphraser mais d'en extraire les lignes directrices, globalement c'est un peu comme si tiens si je fais ça, qu'est ce que ça fait.

Bien passons sur l'installation selon votre plateforme, moi je travaille sous Ubuntu donc


1
2
$ sudo apt-get update 
$ sudo apt-get install docker-ce

ou suivez la partie dédiée.

Le plus important est de comprendre l'utilisation d'un coté des commandes de base et de l'autre du fichier de configuration et de sa hiérarchie d’héritage.

Le fichier Dockerfile comporte un ensemble de mot clef permettant la définition d'une image instanciable dans lequel sera exécuté le code cible/produit. Les plus important:

  • FROM Défini l'image initiale depuis laquelle notre image sera creer
  • WORKDIR Défini l’arborescence de travail interne au conteneur
  • ADD Permet de réaliser des copies depuis votre environnement de développement vers celui du conteneur
  • RUN Permet de définir des actions précédant l’exécution de l'applicatif permettant d'initialiser le conteneur avec des dépendances éventuellement manquantes
  • EXPOSE Permet la redirection de port comme on pourrait le faire pour une VM et ainsi accéder au contenu via se port
  • ENV NAME Son petit nom... ^^
  • CMD Défini comment on va démarrer notre application
Pour exemple, autant ne pas aller tres loin: Dockerfile

Une fois le fichier image docker creer il faut l’officialiser via un build. A noter que ce build permet de configurer ce que seront les instances de cette image, on peut donc y définir via la commande de build quelques particularités telles que la limite mémoire utilisable ou l'utilisation CPU


1
$ sudo docker build -t nom_image_docker $DockerFileDir

Et la normalement votre image est prete a etre instancié attention donc aux dépendances indirect réalisé (comme le processus de copy ADD qui impose la présence des fichiers sources)

Il ne reste plus qu'a lancer notre image:


1
$ docker run nom_image_docker 

Forcement quelques paramètres bien senti pourront vous permettre d'y voir plus clair en utilisant un nom pour votre container avec --name nom_cont et en exposant par exemple dans le cas de l'exemple docker cité plus haut un port de communication avec l'option -p 8080:80 (portExterne:portInterne) 


1
$ docker run nom_image_docker -p 80:7070 --name container_name

Et grace a son petit nom vous allez pouvoir utiliser votre conteneur et son contenu comme un service


1
2
$ docker stop container_name
$ docker restart container_name

Voila les bases essentielles a docker. 

Son intérêt est clairement de fournir un environnement spécifique et maîtrisé pour nos applications, de faciliter la reconfiguration et fiabiliser la mise en prod.

Au delà de cela, on y trouvera aussi un intérêt pour se substituer a l'utilisation de machines virtuelles qui elles vont nécessité un environnement plus lourd et complet. Par contre, si il est vrai que pour celui qui sait bien gérer des VM et leur restauration, docker présentera peu d’intérêt (a priori), il ne faut pourtant pas sous-estimer sa capacité a devenir un livrable en soit même (comme une VM pourrait l’être) composable a volonté, chose plus difficile a réaliser avec des VM qui vont consommer beaucoup plus de ressources.

Ainsi docker, en se plaçant entre l'OS et la virtualisation fourni un outils puissant d'isolation et de composition de services indépendant permettant de penser des architectures logicielles et systèmes nouvelles, dont l’évolution et la maintenance sera plus simple, rapide et fiable.

La prochaine fois on s’intéressera aux propriétés réseaux

Donc ça...

Nous y voici, je dis nous mais en fait je parle de ce moment important dans la vie ou nous sentons qu'il est temps que les choses changent. Dans la vie la notion de changement est importante, c'est elle qui nous permet de grandir, qui nous challenge, qui nous fait peur mais c'est elle qui fait que l'on se décide a prendre les choses en main et qu'il est hors de question que le temps passe sans que l'on puisse lui donner du sens (j'aborderai peut etre plus tout ca plus tard). 

Enfin tout ça est long a expliquer et mon but dans ce mot n'est pas de traiter des raisons profondes de ce nouveau départ. Il s'agit surtout de lancer ce que l'on appelle un blog.... Quoi? un blog? mais c'est hasbeen un blog (meme l'expression hasbeen est hasbeen peut etre... ). Et ouai effectivement aujourd'hui on traite déjà de Vlog, les plateformes youtube le prouvent et qui sait ce que l'on découvrira dans quelques années. Mais non un blog c'est bien! 

Oui, ça ancre les choses noir sur blanc, et malgré mon gout pour l'avenir, j'aime a trouver les livres plus excitant que les films... Vous savez, quoi, ce fameux débat ... de la qualité imaginaire du livre sur le film, la liberté du lecteur de ne pas se voir fermer sur la vision d'un metteur en scène... de pouvoir squeezer des lignes sans prendre le risque immense de ne plus rien comprendre...enfin tout ça quoi... Bon j'admet aussi que je n'ai pas envie de me prendre la tête sur des montages vidéo et sur un investissement matériel de ouf....

Bon donc, un blog...  J'en avais déjà essayé d'autres a une époque mais finalement cela n'avait mené a pas grand chose car j'avais voulu essayer de faire quelque chose de trop carré. J'avais fait quelque chose de très orienté "boulot", c'est a dire l'informatique,  mais finalement cela n’était pas concluant et cela demandait trop de temps pour être suffisamment sérieux pour apporter quelque chose de significatif, et d'un autre coté, je n'avais pas trop le loisir de m'exprimer librement sur mes réflexions courantes, sur l'actualité, mon boulot, ma vie en général, etc.

Du coup changement d'orientation, aujourd'hui, plus de limites. Je vais parler de tout... d'informatique surtout car c'est ma vie en quelque sorte, mais aussi des choses de la vie qui m’intéresse, des réflexions, les interrogations (j'en ai pas mal en ce moment j'expliquerai pourquoi... ou pas...), des trucs marrants et peut être aussi d'autres moins... enfin on verra. 

Donc voila prenez ceci est un peu comme un cahier de notes, des réflexions sur des sujets divers et variés. J’espère que pour ceux qui tomberont dessus, cela les intéressera même un peu et qu'ils prendront part a la discussion.