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

  1. 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
    Ens assegurem que també estiguin instal·lats:
    • 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

Instal·lació

  1. Activarem el entorn virtual (virtualactive - si disposem de l'alias)

  2. Ens col·locarem dins del directori del virtualenv i ens baixarem:
    • hg clone https://bitbucket.org/zikzakmedia/trytontasks tasks
  3. 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
  4. Crearem el fitxer per repos personalitzats:
    • touch local.cfg
  5. Instal·larem tryton, trytond, sao i modules amb Develop/InvokeTask

  6. Crearem el directori data per store files:
    • mkdir /home/<NOM_INSTANCIA>/tryton/data
  7. Crearem el directori public_data per JS apps (Sao - AngularJS):
    • mkdir /home/<NOM_INSTANCIA>/tryton/www
  8. Crearem el fitxer de configuració:
    • sudo cp src/trytond/etc/trytond.conf /etc/trytond/.trytond_nomserver
  9. 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

Configuració del servidor per crear bases de dades de test des del client d'escriptori amb el mòdul dbcopy

Ant backup

http://doc.zikzakmedia.com/AntBkp

Parametrització

Demanar dades als clients

Parametrització

Sao - client web

Ens situem al directori sao i executem:

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"]


CategorySistema

Develop/ServerTryton (last edited 2017-02-09 18:39:16 by resteve)

Contenidos creados por el equipo de Zikzakmedia. Creative Commons By-NC-SA

PythonZikzakmedia