IBM Cloud Docs
Applicazione web PHP su uno Stack LAMP in VPC

Applicazione web PHP su uno Stack LAMP in VPC

Questa esercitazione può comportare degli addebiti. Utilizza lo stimatore costi per generare una stima dei costi basata sul tuo utilizzo previsto.

Questo tutorial illustra la creazione di un server virtuale Ubuntu Linux con server web Apache, database MySQL e scripting PHP su IBM Cloud Infrastruttura Virtual Private Cloud(VPC). Questa combinazione di software, più comunemente chiamata stack LAMP, è spesso utilizzata per fornire siti e applicazioni web. Utilizzando IBM Cloud VPC distribuirai rapidamente il tuo stack LAMP e, se lo desideri, aggiungerai la registrazione e il monitoraggio. Per sperimentare il server LAMP in azione, installerete e configurerete anche il sistema di gestione dei contenuti gratuito e open source WordPress.

Obiettivi

  • Eseguire il provisioning di una VSI (virtual server instance) in un VPC.
  • Installare il software Apache, MySQL e PHP più recente.
  • Ospitare un sito web o un blog installando e configurando WordPress.
  • Configurare la registrazione e il monitoraggio per rilevare interruzioni e monitorare le prestazioni lente (facoltativo).
  • Ridimensiona la VSI (facoltativo).

dell'architettura*Schema dell'architettura del

  1. L'utente finale accede al server LAMP in esecuzione su un VPC utilizzando un browser web.
  2. La VSI è configurata per utilizzare i dati da un volume Block Storage crittografato (facoltativo).

Prima di iniziare

Questa esercitazione richiede:

  • Un account fatturabile IBM Cloud,
  • la CLI IBM Cloud,
    • il plugin IBM Cloud VPC (vpc-infrastructure),
  • terraform per utilizzare IaS (Infrastructure as Code) per il provisioning delle risorse,
  • jq per eseguire query sui file JSON,
  • git per clonare il repository di codice sorgente.

Le istruzioni per scaricare e installare questi strumenti per il vostro ambiente operativo sono contenute nella guida Getting started with solution tutorials. Per evitare l'installazione di questi strumenti si può usare la Cloud Shell.

Crea i servizi

In questa sezione, si effettuerà il provisioning di una VPC, di una subnet, di un gruppo di sicurezza e di un'istanza di server virtuale (VSI) utilizzando la IBM Cloud Shell e la IBM Cloud CLI CLI. Le VSI spesso si occupano dei picchi di richieste dopo i quali possono essere sospese o spente in modo che l'ambiente cloud si adatti perfettamente alle esigenze della tua infrastruttura.

Se preferisci utilizzare un template Terraform per generare queste risorse, puoi utilizzare il template disponibile all'indirizzo https://github.com/IBM-Cloud/vpc-tutorials/tree/master/vpc-lamp e seguire le istruzioni nel README.md. Questo modello può essere usato anche in Schematics.

  1. Mentre accedi al tuo account IBM Cloud, avvia IBM Cloud Shell.
  2. Nella shell, si accede automaticamente a una delle regioni di IBM Cloud ; è possibile passare a una regione diversa, se lo si desidera, eseguendo il seguente comando:
    ibmcloud target -r <region-name> -g <resource-group>
    

Crea le chiavi SSH

  1. Nel VPC, viene utilizzata una chiave SSH anziché una password per l'accesso come amministratore a una VSI. Crea una chiave SSH immettendo il seguente comando e accetta i valori predefiniti quando richiesto. Per ulteriori informazioni sulle chiavi SSH, vedi la documentazione Chiavi SSH.

    ssh-keygen -t rsa -b 4096
    

    Il comando precedente genera due file all'interno della directory ~/.ssh: id_rsa e id_rsa.pub. La tua sessione Cloud Shell è di breve durata, pertanto tutti i file creati all'interno di IBM Cloud Shell devono essere salvati in un luogo sicuro per un futuro riutilizzo. In Cloud Shell è disponibile un'opzione di download e upload dei file nella sezione superiore destra della schermata.

    Se hai una chiave SSH esistente che desideri riutilizzare, puoi caricarla invece nella tua sessione di Cloud Shell.

  2. Aggiungi la chiave SSH al tuo account.

    SSHKEY_ID=$(ibmcloud is key-create sshkey-lamp-tutorial @$HOME/.ssh/id_rsa.pub --json | jq -r '.id')
    

Crea il VPC, le sottoreti e i gruppi di sicurezza

  1. Crea un VPC. Per ulteriori informazioni, consulta la documentazione per la creazione di un VPC nella console o nella CLI.

    VPC_ID=$(ibmcloud is vpc-create vpc-lamp-tutorial --json | jq -r '.id')
    
  2. Crea la sottorete per il tuo VPC.

    SUBNET_ID=$(ibmcloud is subnet-create subnet-lamp-1 $VPC_ID --zone $(ibmcloud target --output json | jq -r '.region.name')-1 --ipv4-address-count 256 --json | jq -r '.id')
    
  3. Crea il gruppo di sicurezza per il tuo VPC.

    SG_ID=$(ibmcloud is security-group-create sg-lamp-1 $VPC_ID --json | jq -r '.id')
    
  4. Aggiungi una regola per limitare il traffico in entrata sulla porta SSH 22.

    ibmcloud is security-group-rule-add $SG_ID inbound tcp --port-min 22 --port-max 22 --json
    

    È possibile limitare l'accesso alla porta SSH a un sottoinsieme di indirizzi, utilizzando --remote nel comando precedente per limitare chi può accedere a questo server, ad es. ibmcloud is security-group-rule-add $SG_ID inbound tcp --remote YOUR_IP_ADDRESS --port-min 22 --port-max 22 --json

  5. Aggiungi una regola per limitare il traffico in entrata sulla porta HTTP 80.

    ibmcloud is security-group-rule-add $SG_ID inbound tcp --port-min 80 --port-max 80 --json
    

    È anche possibile limitare l'accesso alla porta HTTP a un sottoinsieme di indirizzi, utilizzando --remote nel comando precedente per limitare chi può accedere a questo server, ad es. ibmcloud is security-group-rule-add $SG_ID inbound tcp --remote YOUR_IP_ADDRESS --port-min 80 --port-max 80 --json

  6. Aggiungi una regola per consentire il traffico in uscita su tutte le porte; questa regola è necessaria per installare il software e può essere disabilitata o rimossa in seguito.

    ibmcloud is security-group-rule-add $SG_ID outbound all --json
    

Crea la VSI (Virtual Server Instance)

  1. IBM Cloud aggiorna periodicamente l'immagine di Ubuntu con il software più recente; ottenere l'ID dell'immagine di Ubuntu 20.x più recente eseguendo il seguente comando.
    IMAGE_ID=$(ibmcloud is images --json | jq -r '.[] | select (.name=="ibm-ubuntu-22-04-1-minimal-amd64-3") | .id')
    
  2. Crea istanza del server virtuale
    NIC_ID=$(ibmcloud is instance-create vsi-lamp-1 $VPC_ID $(ibmcloud target --output json | jq -r '.region.name')-1 cx2-2x4 $SUBNET_ID --image-id $IMAGE_ID --key-ids $SSHKEY_ID --security-group-ids $SG_ID --json | jq -r '.primary_network_interface.id')
    
  3. Riserva un IP mobile
    FLOATING_IP=$(ibmcloud is floating-ip-reserve fip-lamp-1 --nic-id $NIC_ID --json | jq -r '.address')
    
  4. Connettiti al server con SSH; nota che potrebbe essere necessario un minuto affinché il server appena creato sia accessibile tramite SSH.
    ssh root@$FLOATING_IP
    
    Dovrai conoscere l'IP mobile per accedere al server virtuale tramite il tuo browser. Poiché è stato acquisito in precedenza in una variabile di shell, puoi immettere il seguente comando per ottenere l'indirizzo IP mobile echo $FLOATING_IP oppure eseguire ibmcloud is floating-ips --json e cercare il nome utilizzato per creare l'IP mobile fip-lamp-1 nel risultato. È possibile trovare l'indirizzo IP flottante del server anche dalla console web.

Installa Apache, MySQL e PHP

In questa sezione, eseguirai i comandi per aggiornare le origini di pacchetto Ubuntu e installare Apache, MySQL e PHP con la versione più recente.

Quando il server viene avviato per la prima volta, è possibile che stia già eseguendo gli aggiornamenti del sistema e che impedisca l'esecuzione dei comandi riportati di seguito; è possibile verificare lo stato degli aggiornamenti del sistema eseguendo ps aux | grep -i apt, e attendere il completamento dell'attività di aggiornamento automatico del sistema o eliminare l'attività.

  1. Disabilita la modalità interattiva durante gli aggiornamenti
    export DEBIAN_FRONTEND=noninteractive
    
  2. Aggiorna i pacchetti
    apt update
    
  3. Installa Apache
    apt install apache2 -y
    
  4. Installa MySQL
    apt install mysql-server -y
    
  5. Installa PHP
    apt install php libapache2-mod-php php-mysql php-common php-cli -y
    

Verifica l'installazione e la configurazione

In questa sezione, verificherai che Apache, MySQL e PHP siano aggiornati e in esecuzione sull'immagine Ubuntu. Implementerai anche le impostazioni di sicurezza consigliate per MySQL.

  1. Verifica Ubuntu aprendo l'indirizzo IP mobile nel browser. Dovreste vedere la pagina di benvenuto di Ubuntu.
    Verifica Ubuntu
    Verifica Ubuntu
  2. Esamina le versioni Apache, MySQL e PHP installate utilizzando i seguenti comandi.
    apache2 -v
    
    mysql -V
    
    php -v
    
  3. Aprire il prompt mysql.
    mysql
    
  4. Immetti i seguenti comandi sostituendo la password per yourPassword.
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourPassword';
    
  5. Uscire dalla richiesta mysql.
    exit
    
  6. Esegui questo script per proteggere il database MySQL. Scegliere le opzioni che meglio si adattano alle proprie preferenze o semplicemente premere il tasto ENTER per passare rapidamente attraverso la configurazione.
    mysql_secure_installation
    
  7. Inoltre, è possibile creare rapidamente una pagina informativa in PHP con il seguente comando.
    echo "<?php phpinfo(); ?>" > /var/www/html/info.php
    
  8. Visualizza la pagina di informazioni PHP che hai creato: apri un browser e vai a http://{FloatingIPAddress}/info.php. Sostituisci l'indirizzo IP mobile della tua VSI. Sarà simile alla seguente immagine.

Informazioni PHP
Informazioni PHP

Installa e configura WordPress

Prova il tuo stack LAMP installando un'applicazione. La seguente procedura installa la piattaforma WordPress open source, che viene spesso utilizzata per creare siti web e blog. Per ulteriori informazioni e impostazioni per l'installazione in produzione, consultare il sito WordPress documentazione.

  1. Esegui questo comando per installare WordPress.
    apt install wordpress -y
    
  2. Configura WordPress per utilizzare MySQL e PHP. Esegui questo comando per aprire un editor di testo e creare il file /etc/wordpress/config-localhost.php.
    sensible-editor /etc/wordpress/config-localhost.php
    
  3. Copia le seguenti righe nel file sostituendo yourPassword con la tua password del database MySQL e lasciando immutati gli altri valori. Salva il file ed esci.
    <?php
    define('DB_NAME', 'wordpress');
    define('DB_USER', 'wordpress');
    define('DB_PASSWORD', 'yourPassword');
    define('DB_HOST', 'localhost');
    define('WP_CONTENT_DIR', '/usr/share/wordpress/wp-content');
    ?>
    
  4. Aprire una richiesta mysql e fornire la password.
    mysql -u root -p
    
  5. Eseguire i seguenti comandi sostituendo la password del database con yourPassword e lasciando invariati gli altri valori.
    CREATE DATABASE wordpress;
    
    CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'yourPassword';
    
    GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON wordpress.* TO 'wordpress'@'localhost';
    
    FLUSH PRIVILEGES;
    
  6. Uscire dalla richiesta mysql.
    exit
    
  7. Sposta l'installazione di WordPress alla radice dei documenti del server web.
    ln -s /usr/share/wordpress /var/www/html/wordpress
    
    mv /etc/wordpress/config-localhost.php /etc/wordpress/config-default.php
    
  8. Completa la configurazione di WordPress ed esegui la pubblicazione sulla piattaforma. Aprite un browser e andate su http://{FloatingIPAddress}/wordpress/wp-admin. Sostituisci l'indirizzo IP mobile della tua istanza. L'aspetto dovrebbe essere simile a quello dell'immagine seguente.
    WordPress in esecuzione
    Sito WordPress in esecuzione

Configura il dominio

Per utilizzare un nome dominio esistente con il tuo server LAMP, aggiorna il record A per puntare all'indirizzo IP mobile della VSI.

Gestione del monitoraggio e dei log del server

Per garantire la disponibilità del server e la migliore esperienza dell'utente, il monitoraggio deve essere abilitato su ogni server di produzione. Sono disponibili diverse opzioni per monitorare la tua VSI e acquisire i log in una posizione centrale per l'analisi.

Monitoraggio del server

Puoi monitorare l'utilizzo di CPU, volume, memoria e rete delle tue istanze VSI dopo aver configurato un'istanza del servizio IBM Cloud Monitoring. Se desideri configurare il servizio di monitoraggio, segui le procedure indicate nella documentazione Monitoraggio di un host Linux.

Registrazione del server

È possibile creare un'istanza IBM Cloud Logs per gestire i log di sistema e delle applicazioni in IBM Cloud.

IBM Cloud Logs offre ad amministratori, team DevOps e sviluppatori delle funzioni avanzate per filtrare, cercare e personalizzare i dati di log, definire avvisi e progettare viste personalizzate per monitorare i log di applicazione e sistema

Seguire le istruzioni descritte nella sezione Gestione dell'agente di registrazione per Linux

Configura un volume di dati crittografati con BYOK (Bring-Your-Own-Key) (facoltativo)

La VSI è stata creata con un volume di Avvio crittografato gestito dal provider con una dimensione di 100 GB, tuttavia, se elimini tale VSI, tutti i dati che desideri proteggere dovranno essere spostati prima di eliminare la VSI. Un'alternativa è creare un volume di Dati che può essere conservato anche se la VSI viene eliminata e collegato a una nuova VSI. Puoi anche crittografare il volume con la tua propria chiave. Se questo è il risultato che vuoi ottenere, segui i passi descritti di seguito per creare un volume di dati e collegarlo alla tua VSI.

  1. Crea un file di configurazione del volume di dati.

    VOLUME_ID=$(ibmcloud is volume-create volume-lamp-1 10iops-tier $(ibmcloud target --output json | jq -r '.region.name')-1 --capacity 100 --json | jq -r '.id')
    

    Nel VPC puoi anche scegliere di utilizzare una chiave di crittografia gestita dal cliente. Per memorizzare le proprie chiavi di crittografia, è possibile utilizzare uno dei due servizi disponibili: (1) Un servizio FIPS 140-2 di livello 3 IBM Key Protect. Vedi l'argomento Provisioning del servizio IBM Key Protect nella documentazione. (2) Un servizio FIPS 140-2 livello 4 IBM Cloud Hyper Protect Crypto Services, consulta l'argomento Introduzione a IBM Cloud Hyper Protect Crypto Services nella documentazione. Durante la creazione del volume, puoi specificare il parametro --encryption-key con il CRN per la chiave di crittografia che vuoi utilizzare.

  2. Acquisisci l'ID della VSI creata in precedenza elencando tutte le istanze e filtrando in base al nome istanza:

    VSI_ID=$(ibmcloud is instances --json | jq -r '.[] | select(.name == "vsi-lamp-1") | .id')
    
  3. Collega il volume di dati alla tua VSI esistente.

    ibmcloud is instance-volume-attachment-add attachment-data-1 $VSI_ID $VOLUME_ID --auto-delete false --json
    
  4. Connettiti al server con SSH.

    ssh root@$FLOATING_IP
    
  5. Configura il volume di dati appena creato sulla VSI, esegui ogni linea sotto una alla volta.

    new_bsv=$(echo $(parted -l 2>&1) | awk 'NR==1{print $2}' | sed 's/:$//')
    parted $new_bsv mklabel gpt
    parted -a opt $new_bsv mkpart primary ext4 0% 100%
    new_part=${new_bsv}1
    mkfs.ext4 -L lamp-data ${new_part}
    mkdir /data
    mount ${new_part} /data
    echo "${new_part} /data ext4 defaults,relatime 0 0" | tee -a /etc/fstab
    mount -a
    

Configura Apache per utilizzare il nuovo file system /data

  1. Arresta il servizio Apache
    service apache2 stop
    
  2. Sposta la directory Apache da /var a /data
    mv /var/www /data/
    
  3. Crea un link alla nuova ubicazione
    ln -s /data/www /var/www
    
  4. Avvia il servizio Apache
    service apache2 start
    

Configura MySQL per utilizzare il nuovo file system /data

  1. Arresta il servizio MySQL
    service mysql stop
    
  2. Sposta la directory MySQL da /var a /data
    mkdir /data/lib
    
    mv /var/lib/mysql /data/lib/
    
  3. Crea un link alla nuova ubicazione
    ln -s /data/lib/mysql /var/lib/mysql
    
  4. Aggiungere un alias della nuova posizione ad AppArmor, altrimenti AppArmor bloccherà l'accesso.
    echo "alias /var/lib/mysql/ -> /data/lib/mysql/," >> /etc/apparmor.d/tunables/alias
    
  5. Riavvia il servizio AppArmor
    systemctl restart apparmor
    
  6. Avvia il servizio MySQL
    service mysql start
    
  7. Aprite un browser e andate su http://{FloatingIPAddress}/wordpress. Sostituisci l'indirizzo IP mobile della tua istanza. Dovresti essere in grado di accedere alla tua pagina WordPress proprio come lo avevi prima di aggiungere il nuovo volume di Dati.

Ridimensiona VSI (facoltativo)

La VSI è stata creata utilizzando uno dei profili più piccoli disponibili in VPC, ovvero 2 vCPU e 4GiB RAM. È possibile in base ai requisiti di utilizzo per aumentare o diminuire la quantità di vCPU e RAM disponibili, vedi Ridimensionamento di un'istanza del server virtuale.

  1. Acquisisci l'ID della VSI creata in precedenza elencando tutte le istanze e filtrando in base al nome istanza:

    VSI_ID=$(ibmcloud is instances --json | jq -r '.[] | select(.name == "vsi-lamp-1") | .id')
    
  2. Arrestare l'istanza.

    ibmcloud is instance-stop $VSI_ID
    
  3. Ridimensionare l'istanza.

    ibmcloud is instance-update $VSI_ID --profile cx2-4x8
    

    È possibile ottenere un elenco di profili alternativi emettendo il seguente comando ibmcloud is instance-profiles, notare tuttavia le restrizioni sul ridimensionamento in base ai profili correnti / di destinazione nell'argomento Ridimensionamento di un'istanza del server virtuale.

  4. Avviare l'istanza.

    ibmcloud is instance-start $VSI_ID
    
  5. Potresti dover attendere un paio di minuti quando la VSI viene posizionata su un host appropriato e avviata. Aprite un browser e andate su http://{FloatingIPAddress}/wordpress. Sostituisci l'indirizzo IP mobile della tua istanza. Dovresti essere in grado di accedere alla tua pagina WordPress proprio come lo avevi prima del ridimensionamento.

Rimuovi le risorse

  1. Nella console VPC, fai clic su Floating IPs, poi sull'indirizzo IP per le tue VSI, quindi, nel menu delle azioni, seleziona Release. Conferma che vuoi rilasciare l'indirizzo IP.
  2. Passa quindi a Virtual server instances e fai clic su, Delete per eliminare la tua istanza.
  3. Una volta terminato con le VSI, passa a Subnets. Elimina la tua sottorete.
  4. Una volta eliminate le sottoreti, passa alla scheda VPC ed elimina il tuo VPC.
  5. Se hai creato il volume di dati facoltativo e non ti serve più, passa alla scheda Block storage volumes ed elimina il volume.

Quando utilizzi la console, potresti dover aggiornare il tuo browser per vedere le informazioni sullo stato aggiornate dopo l'eliminazione di una risorsa.

A seconda della risorsa, potrebbe non essere eliminata immediatamente, ma conservata (per impostazione predefinita per 7 giorni). È possibile recuperare la risorsa eliminandola in modo permanente o ripristinarla entro il periodo di conservazione. Consultare questo documento su come utilizzare il recupero delle risorse.