126 lines
3.2 KiB
Bash
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"
|
|
|