ce script part du principe que vous avez installé GNU Health suivant mon article sur le sujet Installation GNU Health sur Ubuntu/Debian
Certain chemin peuvent avoir changer à cause du numéro de version de tryton
ce script part du principe que vous avez installé GNU Health suivant mon article sur le sujet Installation GNU Health sur Ubuntu/Debian
Certain chemin peuvent avoir changer à cause du numéro de version de tryton
j’ai écrit un simple fichier docker pour générer une install odoo 9.0 ( un autre existe pour la v8 voir sur bitbucket ou github)
Il est nécessaire de l’améliorer mais à la fin du build vous avez un Odoo en capacité de fonctionner
Je l’améliorerai au fur et à mesure de mes besoins (DockerFile sur bitbucket)
FROM debian:stable MAINTAINER EricVernichon "eric@vernichon.fr" RUN (apt-get update && apt-get upgrade -y -q && apt-get dist-upgrade -y -q && apt-get -y -q autoclean && apt-get -y -q autoremove) RUN apt-get -y install postgresql-9.4 postgresql-client-9.4 RUN apt-get -y install git RUN mkdir /opt/odoo RUN git clone -b 9.0 https://github.com/odoo/odoo.git /opt/odoo/9.0 RUN apt-get -y install python-dev libsasl2-dev sudo libjpeg-dev libevent-dev gcc libxml2-dev libxslt-dev node-less libldap2-dev RUN apt-get -y install wget net-tools apt-utils RUN apt-get -y install postgresql-server-dev-9.4 RUN wget https://bootstrap.pypa.io/get-pip.py RUN python get-pip.py RUN pip install -r /opt/odoo/9.0/requirements.txt RUN pip install pillow RUN useradd --home /opt/odoo --shell /bin/bash odoo RUN chown odoo.odoo -R /opt/odoo RUN pg_dropcluster --stop 9.4 main RUN pg_createcluster -e UTF-8 9.4 main RUN /etc/init.d/postgresql start && su - postgres -c "createuser -s odoo" COPY start_openerp /usr/local/bin/ RUN chmod +x /usr/local/bin/start_openerp CMD ["/bin/bash","/usr/local/bin/start_openerp"] EXPOSE 8069
Pour rappel pour générer l’image
git clone git@bitbucket.org:eric_vernichon/dockerfiles.git sudo docker build -t erp/odoo:v9 dockerfiles/odoo/9.0/
....
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE erp/odoo v9 9b47bc2fa2ae 15 seconds ago 3.343 GB debian stable 315baabd82d5 8 days ago 125.2 MB
pour l’utiliser
09:57 $ sudo docker run -p 8069:8069 -t -i erp/odoo:v9 [ ok ] Starting PostgreSQL 9.4 database server: main. 2015-09-16 07:58:31,287 83 INFO ? openerp: OpenERP version 9.0rc1 2015-09-16 07:58:31,287 83 INFO ? openerp: addons paths: ['/opt/odoo/.local/share/Odoo/addons/9.0', u'/opt/odoo/9.0/openerp/addons', u'/opt/odoo/9.0/addons'] 2015-09-16 07:58:31,287 83 INFO ? openerp: database: default@default:default 2015-09-16 07:58:31,520 83 INFO ? openerp.service.server: HTTP service (werkzeug) running on 0.0.0.0:8069
Vous pouvez vous connecter sur l’instance à l’adresse http://127.0.0.1:8069
Exemple de script pour connection à Odoo
#!/usr/bin/python import requests import json import sys id=0 headers = {'Content-Type':'application/json'} serveur = 'http://127.0.0.1' port = 8069 URL = serveur+":"+str(8069)+"/web/session/get_session_info" DATA = { "jsonrpc": "2.0", "method": "call", "params": {"context": {}}, "id":id, } res = requests.post(URL,headers=headers,data=json.dumps(DATA) ) cookies = res.cookies id = id + 1 URL = serveur+":"+str(8069)+"/web/session/authenticate" DATA = { "jsonrpc": "2.0", "method": "call", "params": {"db":"demo","login":"admin","password":"admin","base_location":serveur+":"+str(8069)}, "id":id, } res = requests.post(URL,headers=headers, data=json.dumps(DATA),cookies=cookies ) RESULT = eval(res.text) if not 'result' in RESULT: print "Erreur de connection " sys.exit() else: uid = RESULT['result']['uid'] if not uid: print "Erreur d'authentification" sys.exit() else: print "Connection OK " CONTEXT = RESULT["result"]['user_context'] id = id + 1 URL = serveur+":"+str(8069)+"/web/dataset/call_kw" DATA_READ = {"method": "call", "id":"r%s" % id, "params": {"context" : CONTEXT,"model" : "res.partner", "args" : [[1],['name']],"context": {}, "kwargs": {},'method':'read', }} res = requests.post(URL,headers=headers,data=json.dumps(DATA_READ),cookies=cookies ) RESULT = res.json() print "result ",RESULT id = id + 1 URL = serveur+":"+str(8069)+"/web/dataset/search_read" DATA_READ = {"method": "call","id":"r%s" % id, "params": {"context" : CONTEXT,"model" : "res.partner", "domain" : [['customer','=',1]],"fields" : ['id','name'], "limit" : False, "offset" : 0,"sort":"" } } res = requests.post(URL,headers=headers,data=json.dumps(DATA_READ),cookies=cookies ) RESULT = res.json() print "result ",RESULT
Pour cette doc notre sous module s’appelle SousModule (original non ?)
git config -f .gitmodules --remove-section submodule.SousModule
git add .gitmodules
git config -f .git/config --remove-section submodule.SousModule
git rm --cached SousModule rm -rf .git/modules/SousModule
git commit -m "Remove submodule SousModule"
rm -rf SousModule
rm -rf SousModule/.git
rm -rf SousModule/.gitignore
git add SousModule
– Initialiser git flow
git flow init Which branch should be used for bringing for the production releases? - master Branch name for production releases: [master] Branch name for "next release" development: [develop] How to name your supporting branch prefixes? Feature branches? [feature/] Release branches? [release/] Hotfix branches? [hotfix/] Support branches? [support/] Version tag prefix? []
démarrer un nouveau développement :
git flow feature start modificationX
une fois la feature developé :
git flow feature finish modificationX
Le fait de finir la feature merge la feature dans develop et nous place
dans le branche develop
il suffit aprés de la pusher pour l’envoyer sur le serveur de dev
git push -u origin
Lorsque la branche “develop” est prêt à être testé :
git flow release start v1.0.0
Pour publier sur integration :
git flow release publish
une fois l’intégration validé pour merger en production et develop et retourner sur la branche master
git flow release finish v1.0.0
puis pour pusher
git push -u origin
Le push peut provoquer une mise en production par le hook post-update
Pour développer rapidement un hotfix
git flow hotfix start correction
Une branche hotfix/correction est créé
Une fois la correction faite
git flow hotfix finish correction
merge la branche dans master et develop, ajoute un tag et supprime la branche
Requete pour connaitre les 20 plus grosses tables
SELECT nspname || '.' || relname AS "table", pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') AND C.relkind <> 'i' AND nspname !~ '^pg_toast' ORDER BY pg_total_relation_size(C.oid) DESC LIMIT 20;
Tables ayant le plus grand nombre de lignes
SELECT schemaname || '.' || relname as table,n_live_tup as num_rows FROM pg_stat_user_tables ORDER BY n_live_tup DESC limit 20;
Tables les plus lus
SELECT schemaname || '.' || relname as table, heap_blks_read as disk_reads, heap_blks_hit as cache_reads, heap_blks_read + heap_blks_hit as total_reads from pg_statio_user_tables order by heap_blks_read + heap_blks_hit desc limit 15;
tables les plus mise à jour
SELECT schemaname || '.' || relname as table, seq_scan,idx_scan,idx_tup_fetch+seq_tup_read lines_read_total, n_tup_ins as num_insert,n_tup_upd as num_update,n_tup_del as num_delete from pg_stat_user_tables order by n_tup_upd desc limit 10;
Outil pour tracer l’activité d’une base
pip install pg_activity
recreer la base en utf-8 (attention la base est détruite, si besoin faire un backup avant avec pg_dumpall)
pg_dropcluster 9.4 main --stop #suppression de la base avec le mauvais encodage pg_createcluster --locale fr_FR.UTF-8 9.4 main # creation en utf-8 pg_ctlcluster 9.4 main start # redemarrage
select count(*) from pg_stat_activity;
La commande suivante va stopper les connexions à la base sauf la connexion courante:
Il faut pour cela effectuer une requête sur pg_stat_activity pour trouver les valeurs de PID que nous souhaitons killer. La fonction pg_terminate_backend(pid int) effectue cette action.
Pour PostgreSQL 9.1 et plus petit:
SELECT pg_terminate_backend(pg_stat_activity.procpid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'TARGET_DB' AND procpid <> pg_backend_pid();
Pour PostgreSQL 9.2 et suivants:
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'TARGET_DB' AND pid <> pg_backend_pid();
Une fois les connections supprimées il est possible de supprimer la base avec un DROP DATABASE.
Pour afficher par exemple le code de la fonction update_sequence
select prosrc FROM pg_proc where proname = 'update_sequence';
ce qui donne
prosrc -------------------------------------------------------------------------------------------------------------------------------- DECLARE + line RECORD; + newsequence ALIAS FOR $1; + id_order alias for $2; + pas alias for $3; + BEGIN + if pas >=1 then + FOR line IN SELECT id FROM sale_order_line where order_id = id_order and sequence>=newsequence ORDER BY sequence desc LOOP+ EXECUTE 'update sale_order_line set sequence=sequence+'||pas||' where id = '|| line.id ; + END LOOP; + else + FOR line IN SELECT id FROM sale_order_line where order_id = id_order and sequence>=newsequence ORDER BY sequence asc LOOP + EXECUTE 'update sale_order_line set sequence=sequence+'||pas||' where id = '|| line.id ; + END LOOP; + end if; + RAISE NOTICE 'Done update sequence.'; + RETURN 1; + END;
create language plpgsql; create or replace function exec(text) returns void as $$ begin execute $1; end; $$ language plpgsql;
exemple d’application (changement de propriétaire des tables de la base en cours)
select exec('alter table '||tablename||' owner to user_toto ; ') from pg_tables where schemaname = 'public';
récuperer une image (par exemple debian)
docker pull debian
liste des images
docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE debian rc-buggy 350a74df81b1 11 days ago 159.9 MB debian experimental 36d6c9c7df4c 11 days ago 159.9 MB debian 6.0.9 3b36e4176538 12 days ago 112.4 MB debian squeeze 3b36e4176538 12 days ago 112.4 MB debian latest 667250f9a437 12 days ago 115 MB debian 6.0.8 d56191e18d6b 4 months ago 113.1 MB debian 7.3 b5fe16f2ccba 4 months ago 117.7 MB
créer un container et le lancer
docker run --name="mon container" -i -t ubuntu /bin/bash
liste des containers
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0a1e7bcdbdea ubuntu:14.04 /bin/bash 4 minutes ago Exit 0 agitated_mclean
demarrer un container
docker start 0a1e7bcdbdea
attacher un container
docker attach 0a1e7bcdbdea root@0a1e7bcdbdea:/#
sortir du container en le laissant tourner
CTRL+P + Q
sauver un container comme une image
sudo docker commit container_id
Creer une image à partir d’un Dockerfile
Si le fichier Dockerfile est dans le repertoire odoo/9.0
docker build odoo/9.0
Stopper tout les containers
docker stop $(docker ps -a -q)
rentrer dans un container
docker exec -it container_id bash
Link
Exemple postgres
Lancer un container postgres
docker run -d --name db --expose 5432 -e POSTGRES_PASSWORD=password postgres
Connection à la base dans un autre container
docker run -it --link db:postgres --rm postgres sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'