Un container con WooCommerce per lo sviluppo e test di plugin

Ho pubblicato un Dockerfile per la creazione di un container che ripropone l’e-commerce realizzato in un post di qualche giorno fa [2] e permette di provarlo in modo semplice e su qualsiasi sistema operativo evitando di dover eseguire tutti i passaggi elencati in quel post.

Il container lo si può utilizzare per fare delle prove con un sito WordPress o con un e-commerce WooCommerce oppure per testare velocemente plugin realizzati per WordPress o per WooCommerce. Io stesso l’ho riutilizzato includendone una versione modificata in un progetto di lavoro che prevedeva appunto la realizzazione di un plugin per WooCommerce.

E’ un unico container che contiene tutti i servizi al suo interno e quindi non è assolutamente indicato per ambienti di produzione. Lo si può usare però per fare degli sviluppi veloci o delle spike.

Sul container sono installati:

  • PHP 7.4.3
  • Apache2
  • WordPress 5.8.2
  • WooCommerce 5.9.0
  • StoreFront 3.9.1 (è un tema WordPress)
  • Mariadb 10.3.31
  • Adminer 4.8.1

Il codice del Dockerfile è pubblicato in questo progetto su Bitbucket e nel README sono descritti tutti i passaggi per installarlo ed utilizzarlo. Riporto anche in questo post i passi principali.

Io ho usato un portatile con Windows 10, ma è possibile replicare i passi su un qualsiasi sistema operativo su cui possa girare il servizio Docker, quindi in pratica dappertutto.

 

Ingredienti

  • Portatile o pc con Windows 10
  • Docker Desktop 4.3.0 [6]
  • Git for Windows 2.34.1 [3]
  • Git Extensions 3.5.4 [4]
  • Visual Studio Code 1.63.0 [5]

 

Procedimento

Con i seguenti comandi si scarica il Dockerfile, si costruisce l’immagine e si lancia in esecuzione il container:

git clone https://bitbucket.org/ilclaudio/myshopdocker.git
cd myshopdocker
docker build -t myshop-img -f Dockerfile .
docker run -p 80:80 -p 3306:3306 --name=myshop -d myshop-img
 
A questo punto l’e-commerce è visualizzabile a questa url: 
http://localhost/shop
 
L’e-commerce preconfigurato permette di acquistare tre libri e di completare un ordine usando il contrassegno come modalità di pagamento [2].
 

Informazioni utili

Per poter utilizzare al meglio il contenitore possono essere utili le seguenti informazioni
  • Per autenticarsi come amministratore di WordPress usare questi dati
    • Url: http://localhost/wp-login
    • Username: manager
    • Password: password
  • Per connettersi da un client MySql del proprio pc al database del container usare le seguenti configurazioni:
    • username: admin
    • password: admin
    • host: 127.0.0.1
    • database: myshop
  • Per accedere alla shell del container usare il comando:
    • docker exec -it myshop /bin/bash
  • Per accedere alla shell del database sul container usare i comandi:
    • docker exec -it myshop /bin/bash
    • mysql -u admin -padmin
  • Per visualizzare le tabelle del database con una interfaccia web, usare Adminer:
    • http://localhost/adminer.php

 

Analisi del Dockerfile

Il container è basato sul container ufficiale di PHP che contiene anche Apache2:
FROM php:7.4.3-apache
 
Si definiscono poi delle variabili da utilizzare per scaricare la versione desiderata delle varie componenti software:
ARG WP_ARCHIVE=wordpress-5.8.2.tar.gz
ARG WC_ZIP_FILE=woocommerce.5.9.0.zip
ARG SF_THEME_FILE=storefront.3.9.1.zip
 
Si aggiorna il sistema scaricato e si installano alcuni programmi e alcune librerie utili:
RUN apt-get update && apt-get install
RUN apt-get install -y \
    vim \
    git \
    bash-completion \
    libxml2-dev \
    unzip \
    wget
 
Si installano e si abilitano alcuni moduli indispensabili al funzionamento dei CMS:
RUN docker-php-ext-install mysqli && \
    docker-php-ext-install soap && \
    a2enmod rewrite
 
Si copiano nella cartella /tmp del container tutti i file che servono per: configurare il database, craeare gli utenti, avviare i servizi apache e mariadb, ecc.
COPY configure/createUserAndDatabase.sql /tmp/createUserAndDatabase.sql
COPY src/myshopdb.sql /tmp/myshopdb.sql
COPY configure/configureWP.sql /tmp/configureWP.sql
COPY configure/startServicesScript.sh /root/startServicesScript.sh
COPY src/uploads.zip /tmp/uploads.zip
COPY configure/wp-config.php /tmp/wp-config.php
COPY configure/.htaccess /tmp/.htaccess
 
 
Si installa mariadb, lo si fa partire e si eseguono degli script per creare il database, gli utenti, per popolare il datase e per impostare l’entry point del sito:
RUN apt-get install -y mariadb-server  && \
    /usr/sbin/service mysql start && \
    mysql < /tmp/createUserAndDatabase.sql && \
    mysql myshop < /tmp/myshopdb.sql && \
    mysql myshop < /tmp/configureWP.sql
 
Si scaricano, si copiano e si configurano WordPress, WooCommerce e il tema StoreFront:
RUN curl -o /tmp/${WP_ARCHIVE} https://wordpress.org/${WP_ARCHIVE} && \
    rm -rf /var/www/html && \
    tar -xvzf /tmp/${WP_ARCHIVE} --directory /var/www/ && \
    mv /var/www/wordpress /var/www/html && \
    curl -o /tmp/${WC_ZIP_FILE} https://downloads.wordpress.org/plugin/${WC_ZIP_FILE} && \
    unzip /tmp/${WC_ZIP_FILE} -d /var/www/html/wp-content/plugins/ && \
    curl -o /tmp/${SF_THEME_FILE} https://downloads.wordpress.org/theme/${SF_THEME_FILE} && \
    unzip /tmp/${SF_THEME_FILE} -d /var/www/html/wp-content/themes/ && \
    cp -f /tmp/wp-config.php  /var/www/html/wp-config.php && \
    cp /tmp/.htaccess /var/www/.htaccess && \
    unzip /tmp/uploads.zip -d /var/www/html/wp-content/uploads/ && \
    wget https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php -O  /var/www/html/adminer.php && \
    chown -R www-data:www-data /var/www/html/*
 
Si cancellano i file temporanei, si indicano le porte che saranno accessibili dall’esterno, si definisce la shell di default e si indica lo script che farà partirte i servizi Apache e Mariadb all’avvio del container.
RUN rm -rf /tmp/*
EXPOSE 80 330
ENTRYPOINT ["/bin/bash"]
CMD ["/root/startServicesScript.sh"]
 
 

Considerazioni

Questo container permette di provare in modo semplice e rapido WordPress, WooCommerce e i plugin realizzati per questi due CMS. E’ possibile modificare il Dockerfile in modo da poter utilizzare la versione desiderata delle varie componenti software, basta modificare il valore delle variabili d’ambiente. Se si volesse, invece, un e-commerce non pre-configurato, allora basterebbe togliere o commentare nel Dockerfile le seguenti righe presenti nelle direttive RUN:

    mysql myshop < /tmp/myshopdb.sql && \
....
    unzip /tmp/uploads.zip -d /var/www/html/wp-content/uploads/ && \
 
A quel punto all’url http://localhost si visualizzerebbe non più l’e-commerce, ma la procedura di installazione di WordPress, la si potrebbe completare usando il database già presente nel sistema (database: myshop, username: admin, password: admin, host: 127.0.0.1). Una volta terminata l’installazione di WordPress, si potrebbe attivare il plugin già presente WooCommerce e scaricare e installare qualsiasi altro plugin si volesse provare.

 

 

Fonti e riferimenti

 

 

2 years ago

Leave a Reply

Your email address will not be published. Required fields are marked *