ksergio.com

github-logo

  • React
  • Shell
  • Linux
  • Laravel
Publicado hace 3 semanas

Script push-pull simple deploy

Script push-pull simple deploy

No queria usar herramientas más complejas para desplegar mis cambios de mi proyecto de React en mi servidor de pruebas. Así que decidí usar un simple script de bash para subir los cambios de mi repositorio, acceder a mi servidor hacer clone o pull del repositorio y hacer npm run build para hacer el build final del proyecto en el servidor.

¡Cuidado con la passphrase de la clave ssh! Hay que hacer alguna virguería extra si tiene contraseña.

Script para deploy de React


#!/bin/bash


#################################################
# Deploy simple de React
# 1. Hacer push de la rama especificada
# 2. Conectarse al servidor
# 3. 
#   Si el repositorio no existe; hacer git clone.
#   Si el repositorio existe, hacer git pull.
# 4. Hacer `npm install` y `npm run build` en el servidor
#################################################

# Tengo en cuenta que el fichero esta en la raiz del repo
cd "$(dirname "$0")" || { echo "❌ No se pudo acceder al directorio del script"; exit 1; }

# Configuración
BRANCH="main"
SERVER_USER="usuario"                    # Cambia por tu usuario en el servidor
SERVER_HOST="tudominio.com"              # Cambia por la IP o dominio
APP_PATH="/ruta_proyecto"    # Ruta donde está tu proyecto en el servidor
REPO_URL="git@github.com:nombregit/nombreproyecto.git"  # Cambia por la URL SSH de tu repositorio

# 1. Hacer push de la rama especificada
echo -e "\n📤 Subiendo cambios a $BRANCH...\n"
git push origin "$BRANCH" || {
    echo -e "\n❌ Error al hacer git push\n"
    exit 1
}

# 2. Conectarse al servidor y ejecutar los comandos de deploy
echo -e  "\n🔗 Conectando a $SERVER_USER@$SERVER_HOST..."
ssh "$SERVER_USER@$SERVER_HOST" "
    if [ -d \"$APP_PATH/.git\" ]; then
        echo -e '\n🔄 Repositorio ya existe, haciendo git pull...\n'
        cd $APP_PATH && \
        git checkout $BRANCH && \
        git pull || { echo '❌ Error al hacer git pull'; exit 1; }
    else
        echo -e '\n📥 Repositorio no existe, haciendo git clone...\n'
        mkdir -p $APP_PATH && \
        git clone $REPO_URL $APP_PATH && \
        cd $APP_PATH && \
        git checkout $BRANCH || { echo -e '\n❌ Error al hacer git clone\n'; exit 1; }
    fi && \
    echo -e '\n📦 Instalando dependencias...' && \
    npm install && \
    echo -e '\n🏗️ Construyendo el proyecto...' && \
    npm run build || { echo '❌ Error al hacer npm install o npm run build'; exit 1; }
" || {
    echo -e "\n❌ Error en el despliegue remoto\n"
    exit 1
}

echo -e "\n✅ Deploy completado\n"

Script para deploy de Laravel

#!/bin/bash

#################################################
# Deploy simple de Laravel
# 1. Hacer push de la rama especificada
# 2. Conectarse al servidor
# 3. 
#   Si el repositorio no existe; hacer git clone.
#   Si el repositorio existe, hacer git pull.
# 4. Instalar dependencias de PHP y JS
# 5. Ejecutar build de Vite y optimización de Laravel
#################################################

# Tengo en cuenta que el fichero esta en la raiz del repo
cd "$(dirname "$0")" || { echo "❌ No se pudo acceder al directorio del script"; exit 1; }

# Configuración
BRANCH="main"
SERVER_USER="usuario"             
SERVER_HOST="midominio.com"              
APP_PATH="/mi_ruta"              
REPO_URL="git@github.com:usuario/repositorio.git" 

# 1. Hacer push de la rama especificada
echo -e "\n📤 Subiendo cambios a $BRANCH...\n"
git push origin "$BRANCH" || {
    echo -e "\n❌ Error al hacer git push\n"
    exit 1
}

# 2. Conectarse al servidor y ejecutar los comandos de deploy
echo -e  "\n🔗 Conectando a $SERVER_USER@$SERVER_HOST..."
ssh "$SERVER_USER@$SERVER_HOST" "
    if [ -d \"$APP_PATH/.git\" ]; then
        echo -e '\n🔄 Repositorio ya existe, haciendo git pull...\n'
        cd $APP_PATH && \
        git checkout $BRANCH && \
        git pull || { echo '❌ Error al hacer git pull'; exit 1; }
    else
        echo -e '\n📥 Repositorio no existe, haciendo git clone...\n'
        mkdir -p $APP_PATH && \
        git clone $REPO_URL $APP_PATH && \
        cd $APP_PATH && \
        git checkout $BRANCH || { echo -e '\n❌ Error al hacer git clone\n'; exit 1; }
    fi && \
    echo -e '\n📦 Instalando dependencias de PHP...' && \
    composer install --no-dev --optimize-autoloader && \
    echo -e '\n📦 Instalando dependencias de Node...' && \
    npm install && \
    echo -e '\n🏗️ Construyendo assets con Vite...' && \
    npm run build && \
    echo -e '\n⚙️ Optimizando Laravel...' && \
    php artisan optimize || { echo '❌ Error en el build o artisan optimize'; exit 1; }
" || {
    echo -e "\n❌ Error en el despliegue remoto\n"
    exit 1
}

echo -e "\n✅ Deploy de Laravel completado 🚀\n"