Corrección importación CSV, robustez en restore_feeds y scripts de instalación para PostgreSQL
This commit is contained in:
parent
72dd972352
commit
0442d3fc0e
6 changed files with 119 additions and 68 deletions
107
install.sh
107
install.sh
|
|
@ -1,62 +1,103 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# ========= CONFIGURACIÓN =========
|
||||
APP_NAME="rss"
|
||||
USER=$(whoami)
|
||||
APP_DIR="/home/$USER/rss"
|
||||
APP_DIR="$(cd "$(dirname "$0")" && pwd)" # SIEMPRE el directorio del script
|
||||
PYTHON_ENV="$APP_DIR/venv"
|
||||
SERVICE_FILE="/etc/systemd/system/$APP_NAME.service"
|
||||
FLASK_FILE="app.py"
|
||||
|
||||
DB_NAME="noticiasrss"
|
||||
MYSQL_USER="root"
|
||||
DB_NAME="rss"
|
||||
DB_USER="rss"
|
||||
DB_PASS="x"
|
||||
|
||||
# ========= PEDIR CONTRASEÑA MYSQL =========
|
||||
read -s -p "Introduce la contraseña MySQL para '$MYSQL_USER': " MYSQL_PASS
|
||||
echo
|
||||
# ========= INSTALAR POSTGRESQL (ÚLTIMA VERSIÓN RECOMENDADA) =========
|
||||
echo "🟢 Instalando PostgreSQL (repositorio oficial)..."
|
||||
sudo apt update
|
||||
sudo apt install -y wget ca-certificates
|
||||
|
||||
# ========= BASE DE DATOS Y TABLAS =========
|
||||
echo "🛠️ Verificando/creando base de datos '$DB_NAME'..."
|
||||
mysql -u"$MYSQL_USER" -p"$MYSQL_PASS" -e "CREATE DATABASE IF NOT EXISTS $DB_NAME DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
||||
# Añade el repositorio oficial de PostgreSQL (ajusta para tu distro si hace falta)
|
||||
echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
|
||||
wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
||||
sudo apt update
|
||||
sudo apt install -y postgresql postgresql-contrib
|
||||
|
||||
echo "📐 Verificando tablas necesarias..."
|
||||
mysql -u"$MYSQL_USER" -p"$MYSQL_PASS" "$DB_NAME" <<EOF
|
||||
# ========= CAMBIAR AUTENTICACIÓN DE peer A md5 =========
|
||||
PG_HBA=$(find /etc/postgresql -name pg_hba.conf | head -1)
|
||||
if grep -q "local\s\+all\s\+all\s\+peer" "$PG_HBA"; then
|
||||
echo "📝 Ajustando pg_hba.conf para autenticación md5 (contraseña)..."
|
||||
sudo sed -i 's/local\s\+all\s\+all\s\+peer/local all all md5/' "$PG_HBA"
|
||||
sudo systemctl restart postgresql
|
||||
else
|
||||
echo "✅ pg_hba.conf ya configurado para md5."
|
||||
fi
|
||||
|
||||
# ========= CONFIGURAR BASE DE DATOS Y USUARIO =========
|
||||
echo "🛠️ Configurando PostgreSQL: usuario y base de datos..."
|
||||
|
||||
sudo -u postgres psql <<EOF
|
||||
DO \$\$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT FROM pg_catalog.pg_user WHERE usename = '$DB_USER'
|
||||
) THEN
|
||||
CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';
|
||||
END IF;
|
||||
END
|
||||
\$\$;
|
||||
|
||||
CREATE DATABASE $DB_NAME OWNER $DB_USER;
|
||||
GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;
|
||||
EOF
|
||||
|
||||
# ========= CREAR TABLAS =========
|
||||
echo "📐 Creando tablas en PostgreSQL..."
|
||||
|
||||
export PGPASSWORD="$DB_PASS"
|
||||
psql -U "$DB_USER" -h localhost -d "$DB_NAME" <<EOF
|
||||
CREATE TABLE IF NOT EXISTS continentes (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nombre VARCHAR(255)
|
||||
id SERIAL PRIMARY KEY,
|
||||
nombre VARCHAR(50) NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS categorias_estandar (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nombre VARCHAR(255)
|
||||
CREATE TABLE IF NOT EXISTS categorias (
|
||||
id SERIAL PRIMARY KEY,
|
||||
nombre VARCHAR(100) NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS paises (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nombre VARCHAR(255),
|
||||
continente_id INT
|
||||
id SERIAL PRIMARY KEY,
|
||||
nombre VARCHAR(100) NOT NULL,
|
||||
continente_id INTEGER REFERENCES continentes(id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS feeds (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
id SERIAL PRIMARY KEY,
|
||||
nombre VARCHAR(255),
|
||||
url TEXT,
|
||||
categoria_id INT,
|
||||
pais_id INT,
|
||||
activo BOOLEAN DEFAULT TRUE
|
||||
descripcion TEXT,
|
||||
url TEXT NOT NULL,
|
||||
categoria_id INTEGER REFERENCES categorias(id),
|
||||
pais_id INTEGER REFERENCES paises(id),
|
||||
idioma CHAR(2),
|
||||
activo BOOLEAN DEFAULT TRUE,
|
||||
fallos INTEGER DEFAULT 0,
|
||||
CONSTRAINT feeds_idioma_chk CHECK (idioma ~* '^[a-z]{2}$' OR idioma IS NULL)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS noticias (
|
||||
id CHAR(32) PRIMARY KEY,
|
||||
id VARCHAR(32) PRIMARY KEY,
|
||||
titulo TEXT,
|
||||
resumen TEXT,
|
||||
url TEXT,
|
||||
fecha DATETIME,
|
||||
fecha TIMESTAMP,
|
||||
imagen_url TEXT,
|
||||
categoria_id INT,
|
||||
pais_id INT
|
||||
categoria_id INTEGER REFERENCES categorias(id),
|
||||
pais_id INTEGER REFERENCES paises(id)
|
||||
);
|
||||
EOF
|
||||
|
||||
echo "✅ Tablas creadas/verificadas correctamente."
|
||||
|
||||
# ========= DATOS INICIALES =========
|
||||
|
|
@ -64,7 +105,7 @@ echo "✅ Tablas creadas/verificadas correctamente."
|
|||
# Continentes
|
||||
if [ -f "$APP_DIR/continentes.sql" ]; then
|
||||
echo "🌎 Insertando continentes..."
|
||||
mysql -u"$MYSQL_USER" -p"$MYSQL_PASS" "$DB_NAME" < "$APP_DIR/continentes.sql"
|
||||
psql -U "$DB_USER" -h localhost -d "$DB_NAME" -f "$APP_DIR/continentes.sql"
|
||||
else
|
||||
echo "⚠️ No se encontró $APP_DIR/continentes.sql"
|
||||
fi
|
||||
|
|
@ -72,7 +113,7 @@ fi
|
|||
# Países
|
||||
if [ -f "$APP_DIR/paises.sql" ]; then
|
||||
echo "🌐 Insertando países..."
|
||||
mysql -u"$MYSQL_USER" -p"$MYSQL_PASS" "$DB_NAME" < "$APP_DIR/paises.sql"
|
||||
psql -U "$DB_USER" -h localhost -d "$DB_NAME" -f "$APP_DIR/paises.sql"
|
||||
else
|
||||
echo "⚠️ No se encontró $APP_DIR/paises.sql"
|
||||
fi
|
||||
|
|
@ -80,7 +121,7 @@ fi
|
|||
# Categorías
|
||||
if [ -f "$APP_DIR/categorias.sql" ]; then
|
||||
echo "🏷️ Insertando categorías estándar..."
|
||||
mysql -u"$MYSQL_USER" -p"$MYSQL_PASS" "$DB_NAME" < "$APP_DIR/categorias.sql"
|
||||
psql -U "$DB_USER" -h localhost -d "$DB_NAME" -f "$APP_DIR/categorias.sql"
|
||||
else
|
||||
echo "⚠️ No se encontró $APP_DIR/categorias.sql"
|
||||
fi
|
||||
|
|
@ -118,7 +159,7 @@ echo "🔁 Recargando systemd y activando servicio"
|
|||
sudo systemctl daemon-reexec
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable "$APP_NAME"
|
||||
sudo systemctl start "$APP_NAME"
|
||||
sudo systemctl restart "$APP_NAME"
|
||||
|
||||
# ========= ESTADO =========
|
||||
echo "✅ Servicio '$APP_NAME' instalado y funcionando."
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue