2. Configuración de servidor¶
2.1. Python 3.12 + virtualenv¶
# Ubuntu 22.04 / 24.04
apt install -y software-properties-common
add-apt-repository -y ppa:deadsnakes/ppa
apt update
apt install -y python3.12 python3.12-venv python3.12-dev \
build-essential libpq-dev \
libcairo2 libpango-1.0-0 libpangoft2-1.0-0 \
libxml2-dev libxslt1-dev \
libssl-dev libffi-dev \
libxmlsec1-dev pkg-config \
tesseract-ocr tesseract-ocr-spa \
poppler-utils
Por qué: libxmlsec1-dev es requisito de signxml para XAdES; Cairo/Pango para WeasyPrint; Tesseract para OCR de facturas de proveedor.
2.2. Crear entorno virtual¶
mkdir -p /opt/tienda
cd /opt/tienda
python3.12 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip wheel setuptools
2.3. PostgreSQL¶
apt install -y postgresql postgresql-contrib
systemctl enable --now postgresql
# Crear usuario y base
sudo -u postgres psql <<EOF
CREATE USER tienda WITH PASSWORD 'CAMBIA_ESTE_PASSWORD_FUERTE!';
CREATE DATABASE tienda_db OWNER tienda ENCODING 'UTF8' LC_COLLATE 'es_DO.UTF-8' LC_CTYPE 'es_DO.UTF-8' TEMPLATE template0;
ALTER USER tienda CREATEDB;
GRANT ALL PRIVILEGES ON DATABASE tienda_db TO tienda;
\q
EOF
# Verificar conexión local
PGPASSWORD=CAMBIA_ESTE_PASSWORD_FUERTE! psql -h 127.0.0.1 -U tienda -d tienda_db -c "SELECT version();"
Buena práctica: configurar /etc/postgresql/16/main/pg_hba.conf para que tienda use scram-sha-256 y restringir conexiones a 127.0.0.1. Activar archive_mode y pg_dumpall diario para backup.
2.4. Redis¶
apt install -y redis-server
systemctl enable --now redis-server
# Verificar
redis-cli ping # debe responder PONG
Buena práctica: en /etc/redis/redis.conf setear bind 127.0.0.1, requirepass <password fuerte>, maxmemory 256mb, maxmemory-policy allkeys-lru.