Update Instalar

Mauricio Baeza 2017-11-24 07:03:28 +00:00
parent 198728d4b7
commit 1ef84e539a
1 changed files with 579 additions and 0 deletions

@ -21,3 +21,582 @@ La máquina virtual la puedes descargar desde [nuestras documentación](https://
La maquina virtual está configurada con ArchLinux. **Empresa Libre** ya viene instalada y configurada tanto en pruebas como en producción en esta **MV**. La siguiente guía es solo si quieres experimentar en un sistema limpio.
Accede como root y agregamos un nuevo usuario
useradd -m empresa
Establece su contraseña
passwd empresa
Instala sudo
pacman -S sudo
Agrega al nuevo usuario como sudo
nano /etc/sudoers
root ALL=(ALL) ALL
empresa ALL=(ALL) ALL
Guarda y cierra
Instalamos openssh
pacman -S openssh
Edita el archivo de configuración local de ssh y establece el puerto de tu
preferencia
nano /etc/ssh/ssh_config
Edita el archivo de configuración del servidor ssh y establece el mismo puerto
de comunicación. Desactiva el acceso por root y agrega al usuario.
nano /etc/ssh/sshd_config
Port 22
PermitRootLogin no
AllowUsers empresa
Guarda y sal. Activamos e iniciamos el demonio.
systemctl enable sshd
systemctl start sshd
Verifica que IP tiene asignada la maquina:
ip addr | grep "inet "
Ya deberías poder acceder desde otra línea de comandos desde otra maquina desde
cualquier sistema operativo con soporte para SSH.
ssh empresa@192.168.X.X
Vamos a configurar el prompt del usuario para que muestre información util. En
este momento estamos identificados con el nuevo usuario.
nano .bashrc
Y agregas las líneas:
THEIP=$(ip addr | grep 'inet ' | grep -v '127.0.0.1' | cut -d '/' -f 1 | awk '{print $2}')
PS1="┌─[\e[0;32m\H-"$THEIP"\e[m][\e[1;31m\u\e[m]->{\[\e[34;1m\]\w\[\e[0;1m\]}\n└──> \[\e[0m\]"
PS1 ya debería existir, comenta la línea o reemplazala completamente.
Guarda (CTRL+O) y sal (CTRL+X) y activa.
source .bashrc
Debes de ver
┌─[empresalibre-192.168.X.X][empresa]->{~}
└──>
Esto es util cuando se usa la MV por que podría llegar a cambiar la IP, si es
un VPS en línea, la IP es fija, por lo que puedes dejar solo:
PS1="┌─[\e[0;32m\H-\e[m][\e[1;31m\u\e[m]->{\[\e[34;1m\]\w\[\e[0;1m\]}\n└──> \[\e[0m\]"
Que se debe ver:
┌─[empresalibre][empresa]->{~}
└──>
Instalamos algunas herramientas y librerías necesarias; mlocate para localizar
archivos, vim para tener una alternativa para editar archivos, git para hacer
la magia de las actualizaciones, gcc para compilar algunos librerías necesarias,
rsync para sincronizacion de archivos y directorios, por supuesto Python,
libxslt para el procesamiento de los XML y xmlsec para firmar los XML.
sudo pacman -S mlocate vim git gcc rsync python python-pip libxslt xmlsec
Actualizamos la base de datos de archivos.
sudo updatedb
Instalamos el servidor de base de datos. Empresa Libre funciona con SQLite,
MySQL/MariaDB y PostgreSQL (recomendado). SQLite esta en el core de Python,
para los demás tienes que instalar el servidor y las librerías Python. Para
esta guía usaremos PostgreSQL.
Instalamos el servidor
sudo pacman -S postgresql
Nos cambiamos al usuario postgres
sudo -u postgres -i
Inicializamos el servidor
initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'
Salimos del usuario
exit
Activamos e iniciamos el demonio
sudo systemctl enable postgresql
sudo systemctl start postgresql
Accedemos al shell de postgres
sudo -u postgres -i psql
Crearemos dos roles, uno para el ambiente productivo y otro para el de pruebas.
CREATE ROLE empresalibre WITH LOGIN ENCRYPTED PASSWORD 'supersecret';
CREATE ROLE empresatest WITH LOGIN ENCRYPTED PASSWORD 'supersecret';
Creamos las bases de datos para cada entorno, asignando su respectivo dueño.
CREATE DATABASE empresalibre WITH OWNER empresalibre;
CREATE DATABASE empresatest WITH OWNER empresatest;
Puedes usar el nombre que prefieras tanto en los roles como en las bases de
datos. Solo toma nota de cual asignas a cada una.
Salimos
\q
Estando en el home del usuario empresa, creamos una carpeta para proyectos.
mkdir proyectos
Y otra para los registros log
mkdir log
Accedemos a proyectos
cd proyectos
Clonamos el repositorio de Empresa Libre
git clone https://gitlab.com/mauriciobaeza/empresa-libre.git
Vamos a crear un vínculo simbólico a esta carpeta dentro del home del
usuario para tener rutas más cortas y accesibles. Regresamos a la carpeta home
cd
Creamos el vínculo simbólico para producción.
ln -s proyectos/empresa-libre/source/ empresa-libre
Entramos a la carpeta para producción.
cd proyectos/empresa-libre
Instalamos los requerimientos de Empresa Libre.
sudo pip install -r requirements.txt
Instalamos la librería para PostgreSQL y Uwsgi
sudo pip install psycopg2 uwsgi
Accedemos a la carpeta de la aplicación.
cd source/app
Copia los archivos inicales de configuración
cp conf.py.example conf.py
cp main.ini.example main.ini
Edita conf.py
nano conf.py
Establece DEBUG en False y la ruta para el log de registro.
DEBUG = False
LOG_PATH = '/home/empresa/log/empresalibre.log'
Edita el archivo de configuración de Uwsgi main.ini
nano main.ini
Establece las rutas correctas de la aplicación y del log de registros
[uwsgi]
socket = 127.0.0.1:3033
uid = empresa
gid = empresa
chdir = /home/empresa/empresa-libre/app
wsgi-file = main.py
callable = app
master = true
processes = 4
threads = 4
thunder-lock = true
logger = file:/home/empresa/log/empresalibre-uwsgi.log
Toma nota del socket, lo usaremos al configurar nginx. Nota que en uid y gid
usamos el nombre del usuario. La ruta en chdir es el vínculo simbolico creado
previamente. En processes puedes establecer tantos CPUs le asignes a tu maquina
virtual.
Accede a controllers y copia el archivo de configuración para el PAC
cd controllers
cp conf.py.example conf.py
Asegurate de que DEBUG este en False
nano conf.py
Nos movemos a la carpeta de los modelos de la base de datos.
cd ../models/
Agregamos nuestro RFC y la configuración de nuestra base de datos.
└──> python main.py -rfc
Introduce el nuevo RFC: BASM740115RW0
Introduce los datos de conexión: postgres|||empresalibre|empresalibre|supersecret
[01-Nov-2017 23:47:00] INFO: API: Conectado a la BD...
[01-Nov-2017 23:47:02] INFO: API: Tablas creadas correctamente...
[01-Nov-2017 23:47:02] INFO: API: SuperUsuario creado correctamente...
[01-Nov-2017 23:47:02] INFO: API: Valores iniciales insertados...
[01-Nov-2017 23:47:02] INFO: API: Importando datos...
[01-Nov-2017 23:47:02] INFO: API: Importando tabla: Categorias
[01-Nov-2017 23:47:02] INFO: API: Importando tabla: SATImpuestos
[01-Nov-2017 23:47:02] INFO: API: Importando tabla: SATUnidades
[01-Nov-2017 23:47:02] INFO: API: Importando tabla: SATTipoRelacion
[01-Nov-2017 23:47:02] INFO: API: Importando tabla: SATMonedas
[01-Nov-2017 23:47:02] INFO: API: Importando tabla: SATFormaPago
[01-Nov-2017 23:47:02] INFO: API: Importando tabla: SATRegimenes
[01-Nov-2017 23:47:02] INFO: API: Importando tabla: SATUsoCfdi
[01-Nov-2017 23:47:03] INFO: API: Importación terminada...
[01-Nov-2017 23:47:03] INFO: API: RFC agregado correctamente...
El script realiza las siguientes acciones:
0.- Guarda el RFC y la configuración de acceso a la base de datos
1.- Crea las tablas necesarias
2.- Inserta los valores iniciales
3.- Importa las tablas del SAT
Si se usara SQLite, la configuración sería:
sqlite|RUTA_ABSOLUTA_A_ARCHIVO_SQLITE
Para PostgreSQL y MySQL es:
TIPO|SERVIDOR|PUERTO|BASE_DE_DATOS|USUARIO|CONTRASEÑA
Donde:
TIPO = postgres o mysql
SERVIDOR = localhost (default) o IP del servidor
PUERTO = default de cada base de datos
BASE_DE_DATOS = Nombre de la base de datos
USUARIO = Usuario con permisos de conexión, lectura y escritura en la BD
CONTRASEÑA = contraseña de la base de datos
Ahora instalamos y configuramos nginx
sudo pacman -S nginx
Activamos e iniciamos nginx
sudo systemctl enable nginx
sudo systemctl start nginx
Desde cualquier navegador de la red, con la IP de esta maquina virtual, deberías
poder ver la página inicial de bienvenida de Nginx
Vamos a configurar nginx como proxy de uwsgi. Editamos.
sudo nano /etc/nginx/nginx.conf
Con el siguiente contenido
user empresa;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_tokens off;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
disable_symlinks off;
client_max_body_size 1m;
}
Nota que estamos ejecutando nginx con el usuario empresa, no es lo más
ortodoxo pero como es una maquina virtual exclusiva para Empresa Libre
funciona correctamente. Si haces esta configuración en un VPS en Internet,
es mejor ejecutarlo con el usuario predeterminado de la distribución, que,
generalmente es nginx o http, depende de cada distribución.
Creamos el directorio para las configuraciónes de los servidores.
sudo mkdir /etc/nginx/conf.d
Editamos el archivo default.conf para agregar el servidor.
sudo nano /etc/nginx/conf.d/default.conf
Con el siguiente contenido
server {
listen 80 default_server;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:3033;
access_log /var/log/nginx/empresalibre.access.log;
error_log /var/log/nginx/empresalibre.error.log;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location /static {
alias /home/empresa/empresa-libre/static;
}
}
Nota que en server_name usamos localhost, para una VM esta bien, si estas
usando una VPS en Internet, debes de usar tu dominio o subdominio, por ejemplo:
server_name empresalibre.net;
Nota que en uwsgi_pass va el mismo valor previamente configurado en main.ini
Ahora configuramos el service para Empresa Libre
sudo vim /etc/systemd/system/empresalibre.service
Con el contenido
[Unit]
Description=uWSGI instance to serve Empresa Libre
[Service]
ExecStart=/usr/bin/uwsgi /home/empresa/empresa-libre/app/main.ini
[Install]
WantedBy=multi-user.target
Lo activamos e iniciamos.
sudo systemctl enable empresalibre
sudo systemctl start empresalibre
Solo nos resta reiniciar Nginx y listo, debemos poder ver la pantalla de acceso
a Empresa Libre. Tal vez tengas que presionar CTRL+F5 en tu navegador para
forzar el refresco de la pantalla.
Ahora vamos a configurar el entorno de pruebas. Accede a la carpeta proyectos
dentro del home del usuario.
cd proyectos
Hacemos una copia de la carpeta empresa-libre para usarla como pruebas.
rsync -atv empresa-libre/ empresa-libre-develop/
En la carpeta home del usuario, creamos el vínculo simbólico para pruebas.
cd
ln -s proyectos/empresa-libre-develop/source/ empresa-libre-develop
El primer paso importante es cambiar la rama del proyecto.
cd proyectos/empresa-libre-develop/
Cambiamos a la rama de desarrollo.
git checkout develop
Rama 'develop' configurada para hacer seguimiento a la rama remota 'develop' de 'origin'.
Cambiado a nueva rama 'develop'
Ahora editamos los archivos necesarios. Para no movernos del directorio actual,
usamos las rutas relativas
sudo nano source/app/conf.py
Aquí cambia solo la ruta del log, DEBUG debe estar en False
DEBUG = False
LOG_PATH = '/home/empresa/log/empresalibre-develop.log'
Editamos el ini de uwsgi
sudo nano source/app/main.ini
Debe quedar:
[uwsgi]
socket = 127.0.0.1:3034
uid = empresa
gid = empresa
chdir = /home/empresa/empresa-libre-develop/app
wsgi-file = main.py
callable = app
master = true
processes = 4
threads = 4
thunder-lock = true
logger = file:/home/empresa/log/empresalibre-develop-uwsgi.log
Nota que las rutas cambian a develop y que el puerto del socket cambia a 3034,
es el valor que estableceremos en la configuración de nginx
Editamos el archivo conf.py del PAC
sudo vim source/app/controllers/conf.py
Aquí es importante que DEBUG este en True, si no, no podrás timbrar en pruebas
DEBUG = True
Ahora si nos movemos a la carpeta de los modelos para iniciar la base de datos
de pruebas con el RFC de pruebas del PAC
cd source/app/models/
Agregamos el RFC de pruebas (LAN7008173R5) y configuramos el acceso con la base de datos de
pruebas configurada al inicio.
└──> python main.py -rfc
Introduce el nuevo RFC: LAN7008173R5
Introduce los datos de conexión: postgres|||empresatest|empresatest|blades3.3
[02-Nov-2017 00:42:08] INFO: API: Conectado a la BD...
[02-Nov-2017 00:42:09] INFO: API: Tablas creadas correctamente...
[02-Nov-2017 00:42:09] INFO: API: SuperUsuario creado correctamente...
[02-Nov-2017 00:42:09] INFO: API: Valores iniciales insertados...
[02-Nov-2017 00:42:09] INFO: API: Importando datos...
[02-Nov-2017 00:42:09] INFO: API: Importando tabla: Categorias
[02-Nov-2017 00:42:09] INFO: API: Importando tabla: SATImpuestos
[02-Nov-2017 00:42:09] INFO: API: Importando tabla: SATUnidades
[02-Nov-2017 00:42:09] INFO: API: Importando tabla: SATTipoRelacion
[02-Nov-2017 00:42:09] INFO: API: Importando tabla: SATMonedas
[02-Nov-2017 00:42:09] INFO: API: Importando tabla: SATFormaPago
[02-Nov-2017 00:42:09] INFO: API: Importando tabla: SATRegimenes
[02-Nov-2017 00:42:09] INFO: API: Importando tabla: SATUsoCfdi
[02-Nov-2017 00:42:09] INFO: API: Importación terminada...
[02-Nov-2017 00:42:09] INFO: API: RFC agregado correctamente...
IMPORTANTE: Solo usa el RFC de pruebas del PAC LAN7008173R5
Ahora editamos el archivo default.conf de nginx para agregar el nuevo servidor
de pruebas.
sudo vim /etc/nginx/conf.d/default.conf
No borres el servidor anterior, solo agregalo debajo del mismo.
server {
listen 8000;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:3034;
access_log /var/log/nginx/empresalibre-develop.access.log;
error_log /var/log/nginx/empresalibre-develop.error.log;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location /static {
alias /home/empresa/empresa-libre-develop/static;
}
}
Nota el cambio de puerto de escucha (listen 8000), el valor del puerto en
uwsgi_pass y los cambios en las rutas de los logs y static. Guarda los cambios.
Ahora vamos a copiar el service empresalibre a empresatest
sudo cp /etc/systemd/system/empresalibre.service /etc/systemd/system/empresapruebas.service
Y editalo
sudo vim /etc/systemd/system/empresapruebas.service
para que quede con las nuevas rutas.
[Unit]
Description=uWSGI instance to serve Empresa Libre Develop
[Service]
ExecStart=/usr/bin/uwsgi /home/empresa/empresa-libre-develop/app/main.ini
[Install]
WantedBy=multi-user.target
Te recomendamos no activar (enable) para que arranque al inicio, como el
servidor de producción, si no que solo lo inicies cuando quieras hacer alguna
prueba.
sudo systemctl start empresapruebas
Por ultimo reinicia nginx
sudo systemctl restart nginx
IMPORTANTE: Antes de entrar a uno u otro servidor, producción o pruebas, cierra
siempre tu sessión de usuario.
Ahora debes de poder entrar en la misma IP pero con el puerto 8000
Para usar las plantillas de LibreOffice, hay que instalar:
sudo pacman -S libreoffice-still ttf-freefont ttf-liberation