rss/install.sh

126 lines
3.2 KiB
Bash

#!/bin/bash
# ========= CONFIGURACIÓN =========
APP_NAME="rss"
USER=$(whoami)
APP_DIR="/home/$USER/rss"
PYTHON_ENV="$APP_DIR/venv"
SERVICE_FILE="/etc/systemd/system/$APP_NAME.service"
FLASK_FILE="app.py"
DB_NAME="noticiasrss"
MYSQL_USER="root"
# ========= PEDIR CONTRASEÑA MYSQL =========
read -s -p "Introduce la contraseña MySQL para '$MYSQL_USER': " MYSQL_PASS
echo
# ========= 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;"
echo "📐 Verificando tablas necesarias..."
mysql -u"$MYSQL_USER" -p"$MYSQL_PASS" "$DB_NAME" <<EOF
CREATE TABLE IF NOT EXISTS continentes (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(255)
);
CREATE TABLE IF NOT EXISTS categorias_estandar (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(255)
);
CREATE TABLE IF NOT EXISTS paises (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(255),
continente_id INT
);
CREATE TABLE IF NOT EXISTS feeds (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(255),
url TEXT,
categoria_id INT,
pais_id INT,
activo BOOLEAN DEFAULT TRUE
);
CREATE TABLE IF NOT EXISTS noticias (
id CHAR(32) PRIMARY KEY,
titulo TEXT,
resumen TEXT,
url TEXT,
fecha DATETIME,
imagen_url TEXT,
categoria_id INT,
pais_id INT
);
EOF
echo "✅ Tablas creadas/verificadas correctamente."
# ========= DATOS INICIALES =========
# Continentes
if [ -f "$APP_DIR/continentes.sql" ]; then
echo "🌎 Insertando continentes..."
mysql -u"$MYSQL_USER" -p"$MYSQL_PASS" "$DB_NAME" < "$APP_DIR/continentes.sql"
else
echo "⚠️ No se encontró $APP_DIR/continentes.sql"
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"
else
echo "⚠️ No se encontró $APP_DIR/paises.sql"
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"
else
echo "⚠️ No se encontró $APP_DIR/categorias.sql"
fi
# ========= ENTORNO PYTHON =========
echo "🌀 Creando entorno virtual en $PYTHON_ENV"
python3 -m venv "$PYTHON_ENV"
echo "📦 Instalando dependencias"
source "$PYTHON_ENV/bin/activate"
pip install --upgrade pip
pip install -r "$APP_DIR/requirements.txt"
deactivate
# ========= SYSTEMD SERVICE =========
echo "⚙️ Creando servicio systemd: $SERVICE_FILE"
sudo tee "$SERVICE_FILE" > /dev/null <<EOF
[Unit]
Description=RSS Flask App
After=network.target
[Service]
User=$USER
WorkingDirectory=$APP_DIR
ExecStart=$PYTHON_ENV/bin/python $FLASK_FILE
Restart=always
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=multi-user.target
EOF
# ========= ACTIVAR SERVICIO =========
echo "🔁 Recargando systemd y activando servicio"
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable "$APP_NAME"
sudo systemctl start "$APP_NAME"
# ========= ESTADO =========
echo "✅ Servicio '$APP_NAME' instalado y funcionando."
echo "👉 Revisa con: systemctl status $APP_NAME"