Update Instalar
parent
198728d4b7
commit
1ef84e539a
579
Instalar.md
579
Instalar.md
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue