Categoria: Blog

A questa categoria appartengono tutti i post che vanno in home page

  • Uno script sh per settare i permessi di file e cartelle di wordpress

    Uno script sh per settare i permessi di file e cartelle di wordpress

    Lo script segue le pratiche consigliate per i permessi di WordPress:

    • File: Permessi a 644 (lettura/scrittura per il proprietario, lettura per altri).
    • Directory: Permessi a 755 (lettura/esecuzione per tutti, scrittura solo per il proprietario).
    • File sensibili: Come wp-config.php, impostati a 600 (solo il proprietario può leggere/scrivere).
    • Utente/Group: Facoltativamente, puoi assegnare un utente o un gruppo specifico.

    #!/bin/bash

    # Configura il percorso root di WordPress
    WP_ROOT="/percorso/al/tuo/sito" # Cambia con il percorso corretto

    # Configura il proprietario (user e group) - modifica se necessario
    USER="www-data" # Utente web server (es: www-data, apache, nginx)
    GROUP="www-data" # Gruppo web server

    # Controlla se eseguito come root
    if [ "$EUID" -ne 0 ]; then
    echo "Per favore esegui lo script come root o con sudo."
    exit 1
    fi

    echo "Impostazione dei permessi per il sito WordPress nella directory: $WP_ROOT"

    # Imposta il proprietario per tutti i file e directory
    echo "Imposto il proprietario a $USER:$GROUP..."
    chown -R $USER:$GROUP "$WP_ROOT"

    # Imposta i permessi per le directory
    echo "Imposto i permessi delle directory a 755..."
    find "$WP_ROOT" -type d -exec chmod 755 {} \;

    # Imposta i permessi per i file
    echo "Imposto i permessi dei file a 644..."
    find "$WP_ROOT" -type f -exec chmod 644 {} \;

    # Imposta i permessi sicuri per wp-config.php
    if [ -f "$WP_ROOT/wp-config.php" ]; then
    echo "Imposto permessi sicuri per wp-config.php (600)..."
    chmod 600 "$WP_ROOT/wp-config.php"
    fi

    # Permessi speciali per wp-content/uploads (scrivibili dal server)
    UPLOADS_DIR="$WP_ROOT/wp-content/uploads"
    if [ -d "$UPLOADS_DIR" ]; then
    echo "Imposto permessi per la directory uploads (775)..."
    chmod -R 775 "$UPLOADS_DIR"
    echo "Rendo uploads scrivibile da utente e gruppo..."
    chown -R $USER:$GROUP "$UPLOADS_DIR"
    fi

    echo "Permessi impostati correttamente per WordPress!"

    # Finitura
    exit 0

    Come usare lo script:

    1. Crea lo script:
      • Salva il codice in un file chiamato, ad esempio, set-wordpress-permissions.sh.
    2. Modifica le variabili:
      • Cambia WP_ROOT con il percorso della root del tuo sito WordPress.
      • Cambia USER e GROUP con l’utente e il gruppo utilizzati dal server web (es. www-data per Apache/Nginx su Ubuntu).
    3. Rendi lo script eseguibile:
      chmod +x set-wordpress-permissions.sh
    4. Esegui lo script con privilegi di amministratore:
      sudo ./set-wordpress-permissions.sh
    5. Verifica i permessi:
      Puoi controllare che i permessi siano stati applicati correttamente con
      ls -l /percorso/al/tuo/sito

    Spiegazione dei permessi:

    • 644 (file): Lettura/scrittura per il proprietario, lettura per il gruppo e altri.
    • 755 (directory): Lettura/esecuzione per tutti, scrittura per il proprietario.
    • 600 (wp-config.php): Lettura/scrittura solo per il proprietario.
    • 775 (uploads): Lettura/scrittura per proprietario e gruppo, lettura per altri.

    Nota:

    • Lo script si assume che il server web (Apache/Nginx) utilizzi l’utente/gruppo specificato (www-data).
    • Se stai utilizzando configurazioni diverse, assicurati di modificare di conseguenza i permessi o il proprietario.
    • Avrai bisogno di un’utenza con abbastanza privilegi per eseguire il file sh sulla macchina dove gira il tuo wordpress.
  • Come faccio a eliminare massivamente gli utenti di wordpress che hanno una certa email?

    Come faccio a eliminare massivamente gli utenti di wordpress che hanno una certa email?

    Questo script SH viene in nostro soccorso:

    #!/bin/bash

    # usalo per RIMUOVERE UTENTI CON UNA CERTA EMAIL @dominio-da-eliminare.com

    # Trova gli utenti con email che contengono "@dominio-da-eliminare.com" e cancella ciascuno di essi
    wp user list --field=ID,user_email --allow-root | while read -r line; do
    user_id=$(echo "$line" | awk '{print $1}')
    user_email=$(echo "$line" | awk '{print $2}')

    # Controlla se l'email contiene "@dominio-da-eliminare.com"
    if [[ "$user_email" == *"@dominio-da-eliminare.com"* ]]; then
    echo "Eliminazione utente con ID: $user_id e email: $user_email"
    # Elimina l'utente senza chiedere conferma
    wp user delete "$user_id" --yes --allow-root
    fi
    done

    Teniamo presente che lo script si può personalizzare per ottenere un elenco di utenti corrispondente ad altre caratteristiche, che possono provenire anche da comandi cli personalizzati.

    Inoltre, per coloro che hanno una bella banca dati e che vogliono lasciare il processo attivo, senza necessità di stare collegato contestualmente via console (ssh), che il comando può essere lanciato con screen.

    Spiegazione dello script

    1. Elenco ID degli utenti: il comando wp user list --field=ID --allow-root restituisce una lista di ID di tutti gli utenti.
    2. Ciclo sugli ID degli utenti: usa while read -r user_id per iterare su ciascun ID utente.
    3. Controllo dell’email: per ogni utente, il comando wp user get "$user_id" --field=user_email --allow-root recupera l’email dell’utente. Successivamente, viene eseguito un controllo per verificare se l’email contiene la stringa "@pippo.".
    4. Eliminazione dell’utente: se l’email contiene “@pippo.”, l’utente viene eliminato con wp user delete "$user_id" --reassign=0 --allow-root. L’opzione --reassign=0 assicura che i contenuti creati da questi utenti siano assegnati all’utente con ID 0 (tipicamente “Admin”).

    ATTENZIONE

    • Back up: Assicurati di effettuare un backup del database prima di eseguire questo script, per evitare di perdere dati accidentalmente.
    • Log delle eliminazioni: L’output del comando echo ti aiuterà a monitorare quali utenti vengono eliminati.
    • Lo script utilizza la WP-CLI.

    Spero di essere stato utile.

  • GitHub Actions CI/CD per l’Automazione del Deployment su ECS Fargate

    GitHub Actions CI/CD per l’Automazione del Deployment su ECS Fargate

    GitHub Actions è uno strumento potente per l’automazione dei workflow di CI/CD, che offre ai team di sviluppo una soluzione efficiente per automatizzare il ciclo di vita del codice, dalla fase di build alla distribuzione in produzione. In questa guida esploreremo le nozioni chiave, i costi e i passaggi per creare una pipeline CI/CD utilizzando GitHub Actions, con particolare attenzione al deployment su AWS ECS Fargate.

    Cosa è la CI/CD e Perché è Importante?

    La Continuous Integration (CI) e la Continuous Deployment (CD) sono pratiche essenziali per migliorare la qualità e la velocità di rilascio del software.

    • CI automatizza l’integrazione del codice di più sviluppatori, eseguendo test ogni volta che viene effettuato un push.
    • CD gestisce il rilascio del codice in produzione, aggiornando automaticamente l’applicazione con nuove modifiche una volta superati i test.

    GitHub Actions e il Funzionamento dei Workflow

    Con GitHub Actions, possiamo creare pipeline di CI/CD per automatizzare i processi del ciclo di vita del codice. La piattaforma utilizza workflow scritti in YAML per definire una serie di operazioni eseguite automaticamente al verificarsi di eventi specifici (es. push o pull request). Ogni workflow può contenere:

    • Jobs: blocchi che descrivono passaggi di build, test e deployment.
    • Actions: task riutilizzabili eseguiti nei jobs.
    • Events: condizioni che scatenano i workflow, come push, pull_request, ecc.

    Differenza tra uses e run nelle Azioni

    Nel file YAML di GitHub Actions, possiamo trovare sia il comando uses sia il comando run per eseguire operazioni diverse:

    • uses: richiama un’azione predefinita o custom da GitHub Actions, utile per operazioni comuni e riutilizzabili (es. actions/checkout@v2 per clonare il repository).
    • run: esegue comandi di shell inline, ottimo per eseguire comandi personalizzati come npm install o docker build.

    Esempio di Configurazione CI/CD con GitHub Actions

    Per configurare una pipeline che builda un’immagine Docker e la deploya su AWS ECS Fargate, possiamo seguire i passaggi seguenti.

    Configurazione del Workflow

    Ecco un esempio di configurazione di workflow in YAML per GitHub Actions. Questo workflow si attiva al push su staging o master e include una build Docker, il push dell’immagine su Amazon ECR e l’aggiornamento di un container Fargate su ECS.

    name: CI/CD Pipeline
    
    on:
      push:
        branches:
          - staging
          - master
    
    jobs:
      build-and-deploy:
        runs-on: ubuntu-latest  # Runner predefinito Ubuntu
    
        steps:
          - name: Checkout code
            uses: actions/checkout@v2
    
          - name: Set up Docker Buildx
            uses: docker/setup-buildx-action@v1
    
          - name: Log in to Amazon ECR
            uses: aws-actions/amazon-ecr-login@v1
    
          - name: Build Docker image
            run: |
              docker build -t ${{ secrets.AWS_ECR_REGISTRY }}/${{ secrets.AWS_ECR_REPOSITORY }}:latest -f Dockerfile.alpine .
              docker tag ${{ secrets.AWS_ECR_REGISTRY }}/${{ secrets.AWS_ECR_REPOSITORY }}:latest ${{ secrets.AWS_ECR_REGISTRY }}/${{ secrets.AWS_ECR_REPOSITORY }}:${{ github.sha }}
    
          - name: Push Docker image to Amazon ECR
            run: |
              docker push ${{ secrets.AWS_ECR_REGISTRY }}/${{ secrets.AWS_ECR_REPOSITORY }}:latest
              docker push ${{ secrets.AWS_ECR_REGISTRY }}/${{ secrets.AWS_ECR_REPOSITORY }}:${{ github.sha }}
    
          - name: Update ECS Service
            run: |
              cluster_name=your-cluster-name
              service_name=your-service-name
              new_image=${{ secrets.AWS_ECR_REGISTRY }}/${{ secrets.AWS_ECR_REPOSITORY }}:${{ github.sha }}
    
              ecs_task_def=$(aws ecs describe-services --cluster $cluster_name --services $service_name | jq -r '.services[0].taskDefinition')
              ecs_task_def_arn=$(aws ecs describe-task-definition --task-definition $ecs_task_def | jq -r '.taskDefinition.taskDefinitionArn')
    
              new_task_def=$(aws ecs describe-task-definition --task-definition $ecs_task_def | jq -r '.taskDefinition | .containerDefinitions[0].image = "'$new_image'" | del(.taskDefinitionArn) | del(.requiresAttributes) | del(.revision) | del(.status) | del(.registeredAt) | del(.registeredBy) | del(.compatibilities)')
    
              echo $new_task_def > new_task_def.json
              new_task_def_arn=$(aws ecs register-task-definition --cli-input-json file://new_task_def.json | jq -r '.taskDefinition.taskDefinitionArn')
    
              aws ecs update-service --cluster $cluster_name --service $service_name --task-definition $new_task_def_arn
    

    Spiegazione Passo per Passo

    1. Runner ubuntu-latest: GitHub Actions usa un ambiente temporaneo (Ubuntu) per buildare e testare il codice, separato dal container di produzione.
    2. Checkout del Codice: Utilizza actions/checkout per clonare il repository.
    3. Configurazione di Docker e AWS CLI: Set up Docker per build e logga su Amazon ECR per il push.
    4. Build e Push dell’Immagine Docker: L’immagine viene costruita e pushata su ECR usando docker build e docker push.
    5. Aggiornamento del Servizio su Fargate: Con aws ecs update-service viene aggiornata la task definition del servizio, causando un aggiornamento del container Fargate con la nuova immagine.

    Costi di GitHub Actions

    Per i repository pubblici, GitHub Actions è gratuito. Per i repository privati, GitHub offre 2000 minuti gratuiti al mese, superati i quali i costi sono i seguenti:

    • Ubuntu: $0.008/minuto
    • Windows: $0.016/minuto
    • macOS: $0.24/minuto

    Opzioni di ottimizzazione:

    • Runner Self-Hosted: Eseguendo i workflow su server propri, non ci sono costi aggiuntivi per i minuti di GitHub, ma solo per l’infrastruttura.
    • Ottimizzazione del Workflow: Attivare workflow solo per eventi specifici e ridurre i tempi di esecuzione con caching per risparmiare minuti.

    Tirando le somme

    GitHub Actions è una soluzione potente per CI/CD che, unita a AWS ECS Fargate, consente di automatizzare completamente il processo di deployment, riducendo i tempi di rilascio e migliorando l’affidabilità. Con una configurazione ottimizzata e un’attenta gestione dei costi, è possibile automatizzare il flusso di lavoro mantenendo alta l’efficienza.