Contents
Instal·lació d'un servidor Tryton en un servidor GNU/Linux Debian/Ubuntu.
Per servidors RedHat/CentOS, consultar primer la documentació Develop/ServerTrytonCentOS
PostgreSQL
Veure documentació PostgreSQL.
Preparació paquets de Tryton
- Instal·lem paquets de sistema:
sudo apt-get install python-lxml python-pip python-pkg-resources python-ldap python-vobject python-tz npm libxml2-dev libxslt-dev libjpeg-dev
sudo apt-get install unoconv sudo apt-get install gcc sudo apt-get install libffi-dev sudo apt-get install python-dev sudo apt-get install python-virtualenv | sudo pip install virtualenv sudo apt-get install mercurial | sudo pip install mercurial
Pel show, si ens dona error de readline:
sudo apt-get install libncurses5-dev
- Els paquets a instal·lar amb npm pel SAO:
npm install -g grunt
deb http://http.us.debian.org/debian wheezy main contrib sudo apt-get install ttf-mscorefonts-installer
sudo apt-get install rabbitmq-server
sudo apt-get install openjdk-7-jdk sudo update-alternatives --config java
$ sudo adduser <NOM_INSTANCIA> $ sudo adduser <NOM_INSTANCIA> sudo
$ chmod 700 .ssh $ vi .ssh/authorized_keys $ chmod 600 .ssh/authorized_keys
Ens crearem un VIRTUALENV anomenat tryton (entorn virtual) http://doc.zikzakmedia.com/Python/virtualenv
virtualenv tryton --system-site-packages
alias cp='cp -i' alias mv='mv -i' alias rm='rm -i' alias renta='rm -f *~ *.pyc' alias mhg='more .hg/hgrc' alias hgl='hg log|less' alias hgp='hg pull' alias hgpu='hg pull -u' alias hgb='hg branch' alias hgbs='hg branches' alias hgd='hg diff' alias hgs='hg status' virtualcreate() { virtualenv $1 --system-site-packages } alias virtualactive='source bin/activate'
Instal·lació
Activarem el entorn virtual (virtualactive - si disposem de l'alias)
- Ens col·locarem dins del directori del virtualenv i ens baixarem:
hg clone https://bitbucket.org/zikzakmedia/trytontasks tasks
- Instal·larem els paquets addicionals que trobarem al requeriments de tasks on hi ha totes les llibreries de pypi que necessitarem:
pip install --upgrade pip pip install genshi pip install python-stdnum pip install -r tasks/requirements.txt Després d'instal·lar trytond, instalarem el celery_tryton ja que no s'inclou en els requeriments perque no instal·li trytond desde pypi: pip install celery_tryton Si tenim problemes amb el PIL: pip install PIL --allow-external PIL --allow-unverified PIL
- Crearem el fitxer per repos personalitzats:
touch local.cfg
Instal·larem tryton, trytond, sao i modules amb Develop/InvokeTask
- Crearem el directori data per store files:
mkdir /home/<NOM_INSTANCIA>/tryton/data
- Crearem el directori public_data per JS apps (Sao - AngularJS):
mkdir /home/<NOM_INSTANCIA>/tryton/www
- Crearem el fitxer de configuració:
sudo cp src/trytond/etc/trytond.conf /etc/trytond/.trytond_nomserver
- Donarem permisos de usuari al directori /var/run/trytond/
Creació del fitxer de configuració
Al directori etc disposem d'un fitxer de configuració demo pel nostre servidor de Tryton. Copiem aquest fitxer al directori arrel /etc del nostre servidor Linux i el modifiquem segons els nostres paràmetres. Si la línia està comentada o no s'especifica cap opció, el servidor de Tryton agafarà els valors globals.
trytond -c /etc/tryton.conf
Els paràmetres que hem de modificar com a mínim són:
jsonrpc = *:8000 #permès per a tothom xmlrpc = *:8069 #activem el xmlrpc per proteus db_user = usuari #usuari db db_password = contrasenya #contrasenya db admin_passwd = contrasenya_secreta pidfile = /var/run/trytond/<instancia>_server.pid logfile = /var/log/trytond/<instancia>_server.log smtp_server = localhost smtp_port = 25 smtp_ssl = False smtp_tls = False smtp_password = False smtp_user = False data_path = /home/nominstancia/tryton/data #directori on es guarden els fitxers adjunts session_timeout = 3600 auto_reload = False jasperport = 38033 jasperpid = tryton-nominstancia-jasper.pid erpdbcopy_server = localhost erpdbcopy_user = root erpdbcopy_port = 22
Arranc, aturada, actualització del servidor Tryton
Configuració
1. Copiem el fitxer configuració d'arrancada de Tryton.
sudo cp tasks/etc/trytond.config /etc/trytond.config sudo chmod 775 /etc/trytond.config
2. Creem els fitxers pid i log
sudo mkdir /var/log/trytond/ sudo chown usuari.usuari /var/log/trytond/ sudo mkdir /var/run/trytond/ sudo chown usuari.usuari /var/run/trytond/ pidfile = /var/run/trytond/nominstancia_server.pid logfile = /var/log/trytond/nominstancia_server.log
Supervisor
Per últim, configurarem l'arranc/parada de Trytond amb Supervisor
WSGI
Gunicorn
pip install gunicorn
En el directory tasks tenim el wsgi.py i el ini d'exemple.
cd /home/INSTANCIA/tryton/ cp tasks/app.py . touch /var/log/trytond/INSTANCIA-wsgi.log
Crearem el fitxer gunicorn.conf.py
bind = "127.0.0.1:38054" logfile = "/var/log/trytond-wsgi.log" workers = 2 loglevel = 'info' #daemon = True debug = True
Arranc manual
Ara ja el prodriem arrancar amb la comanda:
export TRYTOND_CONFIG=/home/INSTANCIA/trytond.conf /home/INSTANCIA/tryton/bin/gunicorn --chdir /home/INSTANCIA/tryton app:app -c /home/INSTANCIA/tryton/gunicorn.conf.py
Supervisor
[program:trytond-wsgi_INSTANCIA] command=/home/INSTANCIA/tryton/bin/gunicorn --chdir /home/INSTANCIA/tryton app:app -c /home/INSTANCIA/tryton/gunicorn.conf.py directory=/home/INSTANCIA/tryton autostart=true autorestart=true stdout_logfile=/var/log/trytond/INSTANCIA_supervisord.log redirect_stderr=true environment=TRYTOND_CONFIG='/home/INSTANCIA/trytond.conf'
Ara ja tenim el servei WSGI per arrancar amb supervisor.
Notes
- bin/trytond executarà crons.
WSGI si captura un error de codi s'envia un correu a bugs@domini.com
uWSGI
pip install uwsgi
* app.py
from trytond.application import app as wsgi_app application = wsgi_app
$ uwsgi --socket 127.0.0.1:3031 --chdir ~/virtualenv/nan40 --protocol=http --wsgi-file wsgi.py
O bé:
* uwsgi.ini
[uwsgi] # http://uwsgi-docs.readthedocs.org/en/latest/Options.html main_path = /home/resteve/virtualenv/nan40 http-socket = :3031 #~ https-socket = :3031,%(main_path)/projectes/tryton/cert/server.pem,%(main_path)/projectes/tryton/cert/server.key # # store up to 20k sessions # cache = 20000 # # 4k per object is enough for SSL sessions # cache-blocksize = 4096 # # force the SSL subsystem to use the uWSGI cache as session storage # ssl-sessions-use-cache = true # # set SSL session timeout (in seconds) # ssl-sessions-timeout = 30 #chdir = %(path) virtualenv = %(main_path) env = TRYTOND_CONFIG=%(main_path)/trytond.conf file = %(main_path)/wsgi.py master = True processes = 4 threads = 2 #enable-threads = true #daemonize = %(path)/uwsgi.log #pidfile = %(path)/uwsgi.pid # It is a monitor (managed by the master process) that will destroy processes # stuck for more than the specified number of seconds. # harakiri = 30 # Try to remove all of the generated file/sockets vacuum = True # uwsgi --connect-and-read %(path)/server.log1|2|...*processes #py-tracebacker = %(path)/uwsgi_trytond.log # uwsgitop :8010 #~ stats = :8010 logto = /tmp/trytond-wsgi.log
$ uwsgi uwsgi.ini
ERP DB Copy
http://doc.zikzakmedia.com/ErpDbCopy
Ant backup
http://doc.zikzakmedia.com/AntBkp
Parametrització
Sao - client web
apt-get install npm
sudo npm install -g grunt-cli sudo npm install -g grunt-contrib-concat sudo npm install -g grunt-contrib-jshint sudo npm install -g grunt-contrib-uglify sudo npm install -g grunt-contrib-less sudo npm install -g grunt-contrib-watch
Ens situem al directori sao i executem:
sudo npm install grunt
Si ens apareix el missatge: no such file or directory: ln -s /usr/bin/nodejs /usr/bin/node
Tasques finals
Neteja periòdica de la carpeta /tmp
Configurar neteja periòdica de la carpeta /tmp de fitxers temporals creats per JasperReports
sudo touch /etc/cron.daily/clean_tmp sudo chmod 755 /etc/cron.daily/clean_tmp sudo vi /etc/cron.daily/clean_tmp
#!/bin/sh
rm -rf /tmp/tmp*
rm -rf /tmp/trytond-jasper*
Log rotates
Creem un arxiu /etc/logrotate.d/tryton amb el següent contingut:
/var/log/openerp6/*.log { weekly rotate 4 delaycompress compress missingok }
Backups
Farem ús de AntBKp. Consultem l'apartat AntBKP per la seva configuració.
Monotorització - Nagios
Configurem Nagios per monitoritzar el servidor i els backups.
sudo nano /etc/nagios3/conf.d/nom_instancia.cfg
Adaptem el següent codi:
# Define a service to check if Backup is made define service { use backup-service host_name zzsaas service_description Backup Tryton NomInstancia check_command check_nrpe!check_remote_backup!/home/backups/backup/backup_nom_instancia.sql } # Define a service to check if Tryton is running define service { use tryton-service host_name zzsaas service_description Tryton NomInstancia check_command check_trytond!8069!nom_instancia!usuari_nagios!password }
Comprovem que la configuració és correcta:
# /usr/sbin/nagios3 -v /etc/nagios3/nagios.cfg
I que funciona remotament:
$ /usr/lib/nagios/plugins/check_nrpe -H <IP-ADDRESS> -c check_remote_backup -a /home/backups/backup/backup_nom_instancia.sql $ /usr/lib/nagios/plugins/check_openerp -H <IP-ADDRESS> -P <PORT> -d base_dades -u usuari_nagios -p password_nagios
SSL
Howto activate SSL connection: http://code.google.com/p/tryton/wiki/SSLHowto
Crear certificats
Generem el certificat
$ openssl genrsa 1024 > server.pkey $ openssl req -new -x509 -days 365 -key server.pkey -out server.cert $ chmod 600 server.pkey $ chmod 600 server.cert $ sudo chown root:root server.* $ sudo mv server.pkey /etc/stunnel $ sudo mv server.cert /etc/stunnel
I el copiem a:
sudo cp server.* /etc/ssl/tryton/
Al fitxer de configuració Tryton:
privatekey = /etc/ssl/tryton/server.pkey certificate = /etc/ssl/tryton/server.cert
Ara ja podem comprovar la connexió:
pip install jsonrpclib from jsonrpclib import Server as ServerProxy import jsonrpclib import json import pprint server = ServerProxy("https://5.10.81.11:8000", verbose=0) try: server.common.db.list(None,None) a = json.loads( jsonrpclib.history.response) pprint.pprint(a["result"]) except TypeError: a = json.loads( jsonrpclib.history.response) print "error:" print a["error"]