Configurazione Windows Server 2016 con Dominio, DNS e DHCP [per esordienti totali]

Vediamo come configurare Windows Server 2016 impostando il server come controller di Dominio (Active Directory) e configurando DNS e DHCP. Gli argomenti trattati in questo articolo saranno i seguenti:

  1. Configurazione di VirtualBox
  2. Installazione di Windows Server 2016
  3. Configurazione DHCP
  4. Configurazione del DNS
  5. Configurazione Dominio su Active Directory

Per questa guida utilizzerò una macchina virtuale configurata con VirtualBox. Prima di procedere assicuriamoci quindi di disporre di:

  1. VirtualBox installato sul computer (se vogliamo replicare l’operazione su una macchina virtuale)
  2. Un disco di installazione di Windows Server 2016

Le modalità di configurazione, a esclusione della macchina virtuale ovviamente, sono valide per qualunque Windows Server 2016.

1. Configurazione di VirtualBox

Anzitutto creiamo una nuova macchina virtuale. Per farlo apriamo VirtualBox e sotto la voce Macchina selezioniamo Nuova, possiamo anche premere CTRL+N

Diamo un nome alla nostra macchina e selezioniamo, alla voce Versione, l’opzione Windows 2016 (64-bit):

Assegniamo 4096MB di RAM (ne sarebbero sufficienti 2048, dipende da quante risorse ha la nostra macchina host) e premiamo su successivo:

Lasciamo spuntata la voce Crea subito un nuovo disco fisso virtuale:

E come tipo di disco, alla pagina successiva, scegliamo VDI (VirtualBox Disk Image):

Scegliamo di allocare lo spazio dinamicamente e procediamo oltre:

Possiamo lasciare come dimensione predefinita 50GB:

A questo punto la macchina virtuale è pronta per essere avviata. Nell’elenco delle macchine disponibili dovremmo vedere qualcosa del genere:

Clicchiamo sul tasto Avvia. Ci verrà chiesto di selezionare il dispositivo per l’installazione, scegliamo il disco o l’ISO di installazione per Windows Server 2016.

2. Installazione di Windows Server 2016

Anzitutto ci verrà chiesta la lingua in cui vogliamo configurare Windows, io lascerò tutto in italiano nel modo seguente:

Premiamo Avanti. A questo punto scegliamo Installa.

Immettiamo il codice seriale se lo possediamo, altrimenti scegliamo Non ho un codice Product Key per installare la versione di prova.

Scegliamo a questo punto la versione da installare (questa opzione dipende anche dalla versione del disco di installazione che stiamo utilizzando). Io installerò la versione Windows Server 2016 Standard (Esperienza desktop). ATTENZIONE! Installando la versione senza Esperienza desktop, si avrà accesso al sistema operativo solo da PowerShell.

Premiamo avanti e accettiamo le condizioni di licenza.

Procediamo avanti e ci verrà chiesto il tipo di installazione che intendiamo fare. Scegliamo Personalizzata: installa solo Windows (opzione avanzata).

Scegliamo il disco sul quale intendiamo effettuare l’installazione. Nel mio caso ho un unico disco e posso utilizzarlo per intero (il disco virtuale da 50GB creato all’inizio).

A questo punto comincerà la copia dei file per l’installazione, aspettiamo.

Finita l’installazione Windows si riavvierà da solo e arriverà a chiederci una password per Administrator.

Fatto tutto questo si arriverà alla schermata di accesso.

Per usare ALT+CTRL+CANC dentro a VirtualBox premiamo i tasti CTRL (destro) + CANC. Inseriamo la password e premiamo Invio.

Lasciamo avviare Windows, mentre verrà aperto il Server Manager. Ci verrà chiesto se attivare l’individuazione della rete, diciamo di .

Nel caso ci siano dei servizi non avviati sotto il Server Locale, clicchiamo sulla voce Servizi.

Clicchiamo col destro su ciascun servizio in arresto e scegliamo l’opzione Avvia servizi.

Se tutti i servizi ripartono arriveremo ad una situazione come la seguente.

Potrebbe capitare comunque, a seguito di installazioni successive, che alcuni servizi non si avviino o tendano a disattivarsi automaticamente. Di solito si tratta di servizi secondari e non essenziali all’operatività del sistema operativo, in tal caso possiamo anche ignorarli.

3. Configurazione DHCP

Procediamo adesso a configurare sul server il servizio di DHCP, in modo che il nostro server si occupi dell’assegnazione degli indirizzi all’interno della rete. Questo servizio andrà poi disabilitato sul router, per evitare conflitti tra i due. Per chi volesse approfondire il funzionamento del DHCP rimando alla pagina dedicata all’argomento su Wikipedia:

In telecomunicazioni e informatica il Dynamic Host Configuration Protocol (DHCP) (protocollo di configurazione IP dinamica) è un protocollo di rete di livello applicativo che permette ai dispositivi o terminali di una certa rete locale di ricevere automaticamente ad ogni richiesta di accesso a una rete IP. Fonte: Wikipedia – DHCP

Apriamo dunque il Server Manager e andiamo su Gestione > Aggiungi ruoli e funzionalità

Andiamo su Ruoli Server e spuntiamo la voce Server DHCP. Clicchiamo su Aggiungi funzionalità.

Si verrà avvisati che dobbiamo assegnare un indirizzo IP statico al Server.

Premiamo su Annulla e premiamo WIN + R per aprire la finestra Esegui. Digitiamo CMD.

Nel prompt dei comandi digitiamo ipconfig. Scopriamo così i parametri della rete sulla quale si trova il server. Nel mio caso questa rete dipende dalla macchina virtuale di VirtualBox e appare configurata nel modo seguente:

A questo punto apriamo il Pannello di controllo dal menu Start.

Andiamo su Rete e Internet > Centro connessioni di rete e condivisione > Modifica impostazioni scheda. Individuiamo la nostra scheda di rete e clicchiamoci sopra col destro, andiamo su Proprietà.

Selezioniamo Protocollo Internet versione 4 (TCP/IPv4) e poi scegliamo Proprietà. Configuriamo i parametri nel modo seguente (ovviamente si dovranno mettere i parametri rispetto alla rete che si intende configurare):

Questo significa che ho posizionato il server all’indirizzo 10.0.2.100. Questa è una scelta assolutamente arbitraria. Dal momento che ci troviamo all’interno della rete 10.0.0.0/8 abbiamo a disposizione 16.777.214 di host assegnabili. Per valutare i parametri della rete rimando all’IP Calculator.

Premiamo OK. Una volta tornati sulla schermata con tutte le reti disabilitiamo e riabilitiamo la rete, cliccandoci sopra col destro e scegliendo l’opportuna voce.

Torniamo sul Server Manager e riprendiamo la configurazione del DHCP. Se l’errore dovesse ripresentarsi premiamo su Continua e ignoriamolo (ormai sappiamo di aver impostato un indirizzo statico). Clicchiamo su Avanti.

Alla voce Funzionalità clicchiamo ancora Avanti. Qui non selezioniamo alcunché.

Sotto la voce Server DHCP clicchiamo su Avanti.

Alla Conferma spuntiamo la voce Riavvia automaticamente il server di destinazione se necessario. Premiamo Installa.

Attendiamo la fine dell’installazione. Una volta conclusa clicchiamo su Completa configurazione DHCP.

Nella schermata successiva clicchiamo su Commit.

Se tutto è andato bene vedremo una schermata come la seguente. Clicchiamo su Chiudi.

Adesso sul Server Manager spostiamoci su Strumenti > DHCP.

Si aprirà una schermata come la seguente. Clicchiamo col destro sul nome del server e poi scegliamo Aggiungi/Rimuovi binding.

Nella schermata successiva confermiamo la scheda di rete interessata.

Adesso espandiamo la voce sotto al server e clicchiamo col destro su IPv4, dopodiché scegliamo Nuovo ambito…

Premiamo Avanti.

Diamo un nome all’ambito, tipo Generale. Il nome è a piacere. Poi premiamo su Avanti.

Configuriamo l’indirizzo IP iniziale e finale. Ricordiamoci i parametri di cui parlavamo prima. La nostra rete ha lunghezza 8 e subnet mask 255.0.0.0. Il primo indirizzo IP sarà al minimo 10.0.0.1 mentre il massimo indirizzo IP sarà 10.255.255.254. Possiamo ovviamente scegliere anche un intervallo minore. Io avrò una configurazione come la seguente:

Negli indirizzi esclusi inseriamo quello assegnato al server e al gateway. Per aggiungere un singolo indirizzo basta mettere quello iniziale e premere su Aggiungi. Altrimenti si può aggiungere un intervallo scegliendo l’indirizzo iniziale e quello finale.

Premiamo su Avanti. Scegliamo la durata del lease. Se non abbiamo particolari esigenze possiamo lasciare il valore predefinito.

Confermiamo di voler configurare le opzioni adesso.

Inseriamo ora l’indirizzo del router (gateway predefinito), nel mio caso 10.0.2.2.

Al DNS aggiungiamo quello di Google per ora 8.8.8.8

Alla voce Server WINS premiamo ancora Avanti.

Confermiamo l’attivazione dell’ambito.

Infine premiamo su Fine.

4. Configurazione del DNS

Procediamo adesso a configurare il server come server DNS. In questo modo il server si occuperà della traduzione dei nomi di dominio.

Andiamo nuovamente su Server Manager > Gestione > Aggiungi ruoli e funzionalità. Sotto la voce Ruoli server selezioniamo Server DNS.

Una volta spuntata la voce confermiamo Aggiungi funzionalità.

Premiamo Avanti fino alla voce Conferma. Selezioniamo Riavvia automaticamente il server di destinazione se necessario. Poi scegliamo Installa.

Attendiamo il completamento dell’installazione. Una volta completata premiamo su Chiudi. Adesso sempre andiamo ancora su Server Manager > Strumenti > DNS.

Si aprirà una finestra simile alla seguente.

Adesso clicchiamo col destro sul nome del nostro server e poi su Configurazione server DSN…

Scegliamo ancora Avanti.

Scegliamo Creazione di una zona di ricerca diretta e poi di nuovo Avanti.

Scegliamo Questo server gestirà la zona e premiamo ancora Avanti.

Diamo un nome alla zona, che sarà anche il nome del dominio che andremo a configurare in seguito. Nel mio caso metterò petarkaran.local. Ci possiamo mettere quello che preferiamo.

Confermiamo la creazione di un nuovo file DNS. Premiamo Avanti.

Selezioniamo Consenti aggiornamenti dinamici sicuri e non sicuri. Di nuovo Avanti.

Nella schermata successiva aggiungiamo i server DNS da cui prelevare le informazioni. Nel nostro caso utilizzerò quelli di Google: 8.8.8.8 e 8.8.4.4. Aggiungiamo anche quelli di OpenDNS: 208.67.222.222 e 208.67.220.220

Per aggiungerli è sufficiente digitare gli indirizzi e premere Invio.

Confermiamo la configurazione finale.

A questo punto dobbiamo fare solo un paio di modifiche. Anzitutto torniamo alla configurazione della scheda di rete. Impostiamo l’indirizzo del server come Server DNS preferito.

Confermiamo con OK. Adesso andiamo sul DHCP. Server Manager > Strumenti > DHCP

Sotto il nostro server, all’IPv4 sotto la voce Ambito > Opzioni Ambito individuiamo 006 Server DNS ed impostiamo l’indirizzo IP del nostro server.

Clicchiamo sopra 006 Server DNS e rimuoviamo il DNS di Google impostato prima, mettendoci l’indirizzo del nostro server. Questo sarà il valore per il Server DNS preferito per tutti i client attaccati alla rete gestita dal nostro Server.

Se abbiamo fatto tutto correttamente dovremmo arrivare ad una situazione del genere:

Premiamo OK e con questo abbiamo configurato anche il servizio DNS.

5. Configurazione Dominio su Active Directory

Infine configuriamo il dominio che gestirà il nostro server. Un dominio di Active Directory è esattamente la stessa cosa di un dominio web a cui siamo abituati comunemente. Per esempio petarkaran.it è un dominio e potrei utilizzarlo anche come dominio di AD. Inutile dire che se lo configurassi come tale, dopo dovrei provvedere ad indirizzare le chiamate sulla porta 80 e la porta 443 verso il mio server web dove si trova il sito internet, per non creare conflitti interni. In caso contrario, da dentro il dominio gestito da Windows, il sito risulterebbe irraggiungibile. Allo scopo di questo esercizio configurerò un dominio chiamato petarkaran.local. Non essendo *.local utilizzato dai siti web non rischio conflitti con la rete esterna. Inutile dire che il dominio può essere scelto in modo arbitrario e a piacere.

Prima di procedere voglio fare un altro piccolo approfondimento. Possiamo immaginare un dominio come il contenitore del nostro server, gestore del dominio, di tutti i client (gli utenti che possono accedere al dominio) e di tutti i computer (dispositivi che sono connessi al dominio). In sostanza un dominio contiene questi 3 elementi principali.

Il Server si occupa di amministrare i permessi e le relazioni tra client (utenti) e dispositivi (computer). Un gruppo di domini costituisce un albero.

A sua volta un gruppo di alberi costituisce una foresta.

Detto tutto questo cominciamo la configurazione del nostro server per elevarlo a gestore del Dominio.

Anzitutto voglio cambiare nome al mio server, chiamandolo SERVER (questo passaggio non è obbligatorio, lo faccio per motivi puramente estetici). Questo passaggio non è obbligatorio e può essere saltato.

Cliccando col tasto destro sul simbolo di Windows scegliamo Sistema.

Individuiamo il nome del computer e clicchiamo su Cambia impostazioni

Nella finestra che si aprirà scegliamo Cambia… Cambiamo il nome in SERVER.

Premiamo OK e di nuovo OK. Poi scegliamo di riavviare il server.

 

Una volta riavviato il server andiamo su Server Manager > Gestione > Aggiungi ruoli e funzionalità

Dalla sezione Ruoli server selezioniamo Servizi di dominio Active Directory.

Come al solito premiamo Avanti e configuriamo il Riavvio automatico. Premiamo infine su Installa.

Aspettiamo la conclusione dell’aggiornamento, dopodiché selezioniamo la voce Alza di livello il server a controller di dominio.

Essendo il primo dominio che configuriamo dobbiamo aggiungere una nuova foresta. Procediamo quindi nel modo seguente (il mio dominio sarà petarkaran.local):

Premiamo su Avanti. Creiamo adesso una password per le modalità di ripristino dei servizi di directory. E’ molto importante non dimenticare questa password, perché sarà necessaria in caso di necessità di ripristino della active directory. Premiamo su Avanti.

Confermiamo la creazione della Delega DNS.

Clicchiamo su Cambia… e inseriamo utente e password di amministratore.

Clicchiamo su Avanti. Confermiamo il nome di dominio NetBIOS (sono i vecchi nomi di dominio sostanzialmente). Clicchiamo su Avanti.

Alla schermata successiva clicchiamo ancora su Avanti.

Verrà mostrato il riepilogo di tutte le impostazioni, clicchiamo di nuovo su Avanti.

Se va tutto bene arriveremo ad una schermata come la seguente. L’importante è che compaia la spunta verde che Tutti i controlli dei prerequisiti sono riusciti.

Clicchiamo infine su Installa. Se tutto è andato bene il sistema verrà riavviato e al prossimo accesso apparirà una schermata simile a questa:

Faccio notare come questa volta l’amministratore non è più del SERVER ma del dominio PETARKARAN. Notiamo anche l’avviso sulla scheda di rete.

Entriamo dentro Windows e andiamo alle impostazioni della scheda di rete. Noteremo che l’indirizzo del DNS è stato spostato su 127.0.0.1. Benché funzioni anche così, facendo il loopback sull’indirizzo locale della macchina, che è anche il server DNS, per una serie di bug di Windows ci viene mostrato un errore.

Modifichiamo il server DNS preferito impostando l’indirizzo su quello del nostro SERVER, nel mio caso nel modo seguente:

Adesso andiamo su Server Manager > Strumenti > DHCP e aggiungiamo alle Opzioni ambito il parametro 015 Nome dominio DNS inserendo il nome del nostro dominio, nel modo seguente:

Premiamo OK. Se tutto è andato bene vedremo una configurazione come la seguente alla fine:

A questo punto il nostro Server è stato elevato a controller di dominio e abbiamo finito.

Vedi articolo

[magento 2] Exception #0 (LogicException): catalog_product index does not exist yet. Make sure everything is reindexed [risolto]

In Magento 2 l’errore Exception #0 (LogicException): catalog_product index does not exist yet. Make sure everything is reindexed si riferisce al fatto che il catalogo dei prodotti non è stato indicizzato. Questo problema si presenta frequentemente quando si usano altri motori per la gestione del catalogo, come ad esempio ElasticSearch (specialmente con il plugin di Smile-SA, ma non solo).

Per risolvere il problema lanciamo nuovamente l’indicizzazione del catalogo ed aggiorniamo il tutto, procedendo nel modo seguente da riga di commando.

ATTENZIONE: In teoria l’unico comando utile e necessario è il seguente:

Se dovessero sorgere problemi o non esserci risultati, procedere nella maniera descritta di seguito.

Se non lo abbiamo procuriamoci n98-magerun2.

Scarichiamolo nella cartella di installazione di Magento, poi rendiamolo eseguibile, eseguendo i seguenti comandi:

A questo punto eseguiamo la richiesta di reindicizzazione:

Eseguiamola anche sul fulltext:

Faccio notare che sto concedendo al PHP 5G di memoria per poter portare a termine, senza errori, il processo.

Qualora dovessero sorgere errori nel processo di indicizzazione, come per esempio Catalog Search index is locked by another reindex process. Skipping., procediamo nel modo seguente, altrimenti andiamo alla pulizia della cache.

Individuiamo i processi attivi con:

Reimpostiamo il processo che ci interessa con:

Nel dubbi possiamo reimpostarli tutti eseguendo i seguenti comandi:

A questo punto possiamo rilanciare il processo che ci interessa.

Puliamo tutta la cache:

La cache di Magento è una delle cose più problematiche, per cui conviene eseguire anche comandi superflui per ripetere l’operazione per sicurezza.

Detto questo riavviamo apache e il servizio di elastisearch, se lo abbiamo installato:

A questo punto dovrebbe essere tornato tutto normale.

Vedi articolo

[risolto] Wacom Desktop Center: nessun dispositivo connesso (su Windows 10)

Problema: la tavoletta grafica non sembra essere più riconosciuta dal Wacom Desktop Center, nonostante sia stata installata correttamente e altra volte la riconoscesse

Soluzione: riavviare il servizio Wacom Professional Service da Servizi di Windows

Il problema potrebbe dipendere dal servizio Wacom Professional Service che per qualche motivo si è bloccato (in altri casi bisogna reinstallare il driver). Aprendo il Wacom Desktop Center sotto la voce I miei dispositivi si vedrà che non ci sono dispositivi connessi ed apparirà il messaggio: nessun dispositivo connesso

Per risolvere il problema premiamo Win+R e digitiamo services.msc

Si aprirà la finestra di gestione dei servizi, cerchiamo il servizio Wacom Professional Service o TabletServiceWacom.

Una volta individuato il servizio clicchiamoci sopra col destro e selezioniamo la voce Riavvia.

A questo punto apriamo nuovamente Wacom Desktop Center e dovremmo vedere nuovamente la tavoletta elencata tra i nostri dispositivi.

[questa soluzione è stata testata con una Wacom – One]

Vedi articolo

Simulazione sull’espansione del contagio da Coronavirus (COVID-19)

Se stai cercando informazioni sul Coronavirus (COVID-19) ti raccomando di visitare i seguenti siti ufficiali:

Informazioni sul Coronavirus in Italia (Ministero della Salute)

Informazioni sul Coronavirus nel mondo (Organizzazione Mondiale della Sanità)

Panoramica delle condizioni del Coronavirus (Organizzazione Mondiale della Sanità)

Domande e risposte sul Coronavirus (Organizzazione Mondiale della Sanità)

Io non sono un medico e il presente articolo è stato ispirato da quello pubblicato sul The Whashington Post: Why outbreaks like coronavirus spread exponentially, and how to “flatten the curve” 

Quello che mi interessa in questa sede è dare uno spunto di programmazione a tutti quelli che, come me, ora sono chiusi in casa ed hanno voglia di ingannare il tempo con qualcosa di diverso dal solito (insomma, buttandosi a fare un po’ di programmazione!).

Spero che questo sia anche un ottimo esempio del perché, in questo momento, dobbiamo fare di tutto per restare il più possibile a casa ed evitare il contatto con gli altri, per la nostra e la loro salute, anche se sono nostri familiari o amici.

Fatte queste premesse arriviamo a noi: quello che vogliamo fare è costruire un simulatore, similmente a quanto dimostrato dal The Whashington Post, su come si possa espandere un’epidemia e quanto sia utile ridurre al minimo l’interazione tra i vari membri della popolazione.

Il simulatore è costruito interamente in JavaScript utilizzando l’elemento canvas del HTML5.

La versione interattiva del simulatore, realizzato come illustrato nell’articolo, si trova in fondo all’articolo

Quello che vogliamo costruire è un simulatore come questo di seguito:

I parametri in input che vogliamo passare al simulatore saranno:

  1. la popolazione totale (800 nel mio caso)
  2. il numero di malati iniziali (ne basta anche solo 1)
  3. il numero di quelli che restano fermi
  4. il tempo di guarigione in millisecondi (3000 nel mio caso)

Giocando un po’ con il simulatore ci accorgeremo subito del perché restare a casa è in questo momento fondamentale.

Partendo dai parametri precedenti e impostando a 0 il numero di quelli fermi otterremo una curva simile alla seguente:

In questo caso il contagio ha raggiunto un picco massimo del 81% della popolazione, infettando tutti quanti alla fine della simulazione. Nella realtà questo picco rappresenta il massimo impatto sul sistema sanitario, che nella realtà sarebbe al collasso se dovesse avvenire qualcosa di simile.

Se aumentiamo il numero della popolazione che sta ferma (200 individui, ovvero il 25%) abbiamo una curva simile alla seguente:

Notiamo che il picco massimo è sceso leggermente, arrivando al 68%, ma restando comunque molto alto.

Attuando misure più restrittive e fermando il 75% della popolazione, ossia 600 individui su 800, avremo una curva come la seguente:

Il picco si è dimezzato in questo caso, arrivando ad un massimo del 39%. Con misure ancora più restrittive, arrivando a fermare 700 individui, quindi l’87,5% della popolazione, si arriva a picchi ancora inferiori, ma non inesistenti (si parla del 21%):

Questo modello rappresenta, sebbene in linea di massima, molto bene la situazione attuale. Le misure restrittive servono principalmente per evitare il collasso del sistema sanitario e dare la possibilità ai medici di occuparsi di tutti quanti i pazienti più gravi, cosa che in caso contrario sarebbe impossibile. Il contagio allungherà così la sua presenza nel tempo, ma verrà anche abbattuto il suo impatto sulla società.

Inutile dire come questa simulazione sia molto approssimativa e non tiene conto di altri fattori, tra il quale anche il decesso dei malati.

Detto tutto questo arriviamo al codice vero e proprio. Anzitutto creiamo l’interfaccia in HTML nel modo seguente:

Procediamo adesso con il codice in JavaScript, che riporto di seguito con i commenti all’interno del codice:

Infine riporto di seguito l’esempio funzionante, per chiunque lo volesse testare al volo (inserisci i parametri e premi INIZIA):

Popolazione Malati iniziali Fermi T. guarigione

Con un po’ di pazienza e qualche altro accorgimento (per esempio che i pallini non possano essere generati fuori dalle pareti) si può implementare la simulazione per avere anche diverse zone isolate.In questo caso notiamo come una zona isolata aiuti ulteriormente a ridurre il numero di contagiati e mantenere anche parte della popolazione sana, benché nessuno stia fermo.

Per costruire la zona isolata possiamo predisporre le pareti nel modo seguente:

Dobbiamo inoltre prendere qualche altro accorgimento, ma questo lo lascio per chi ha voglia di provarci per conto proprio. 🙂

Vedi articolo

[mysql] Ripristinare utente root sul database MySQL su Ubuntu

Potrebbe accadere che si debba ripristinare la password dell’utente root del database MySQL. In tal caso su Ubuntu è sufficiente seguire la seguente procedura.

Interrompiamo l’esecuzione del servizio MySQL.

Facciamo ripartire il MySQL in modalità safe saltando le tabelle relative ai permessi.

Entriamo nel database:

Modifichiamo la password dell’utente root.

Fermiamo nuovamente il servizio:

Riavviamo il servizio.

Vedi articolo

[wordpress] Trasferire sito da un dominio (o da locale) ad un altro

Trasferire un sito fatto in WordPress da un dominio all’altro è molto semplice. Questo vale anche nel caso in cui si abbia un sito in WordPress su un server locale (per esempio XAMPP) e lo si voglia trasferire su un hosting online.

1. Copiare tutti i file

Anzitutto dobbiamo copiare tutti i file da un dominio all’altro. Se abbiamo il sito su XAMPP, in locale quindi, dobbiamo individuare la cartella di installazione e copiare tutti i file contenuti in essa. La cartella con i file avrà circa questo aspetto:

Trasferiamo tutti quanti i file nella radice del nuovo hosting.

2. Esportare il database

Adesso dobbiamo esportare il database del sito, cosa che possiamo fare tipicamente da PHPMyAdmin. Nel caso di XAMPP l’indirizzo per l’accesso al database sarà probabilmente http://127.0.0.1/phpmyadmin

Dentro PHPMyAdmin selezioniamo il nostro database e poi andiamo alla voce Esporta. In generale da qui è sufficiente cliccare su esegui per scaricare il file *.sql.

3. Cambiare l’indirizzo del sito nel database

A questo punto apriamo il file *.sql che abbiamo appena scaricato con un editor di testo (per esempio Notepad++).

Dentro il file cerchiamo il termine siteurl, dovremmo trovare qualcosa di simile a questo:

Questo è l’indirizzo del nostro sito. Nel caso specifico vuol dire che il vecchio percorso del sito era http://127.0.0.1/wp

Immaginiamo che il nuovo dominio, sul quale vogliamo trasferire il sito, sia https://petarkaran.it

Faccio notare che il nuovo dominio ha la dicitura https anziché http.

A questo punto dobbiamo fare le seguenti sostituzioni usando l’opzione Trova e Sostituisci (disponibile nella maggior parte degli editor come Notepad++). Nel mio caso procederò nel modo seguente:

Attenzione a rispettare la medesima combinazione di slash. Quindi sostituiremo con i seguenti comandi:

http://127.0.0.1/wphttps://petarkaran.it

http:\/\/127.0.0.1\/wphttps:\/\/petarkaran.it

127.0.0.1/wppetarkaran.it

127.0.0.1\/wppetarkaran.it

ATTENZIONE a non fare i seguenti errori dove la struttura del dominio non è la medesima.

http://127.0.0.1/wphttps://petarkaran.it/

http://127.0.0.1/wp/https://petarkaran.it

In generale se si deve passare da un dominio ad un altro dominio è sufficiente usare:

https://vecchiodominio.exthttps://nuovodominio.ext

https:\/\/vecchiodominio.exthttps:\/\/nuovodominio.ext

Una volta fatte le modifiche salvare il file *.sql ed importarlo sul nuovo database.

4. Modificare wp-config.php

Ultima operazione che dobbiamo fare è modificare la configurazione del database dentro al file wp-config.php

Apriamo il file e modifichiamo le seguenti righe di codice:

In ordine mettiamo i dati del nome del database, lo username del database, la password del database e l’indirizzo host del database.

Una volta modificato il file wp-config.php carichiamolo sul nostro nuovo hosting ed abbiamo finito.

Vedi articolo

[magento2] Script esterno per rimuovere le immagini duplicate su tutti i prodotti

Obiettivo: leggere tutti i prodotti del negozio su Magento 2 e eliminare tutte le immagini duplicate per ciascun prodotto.

In Magento 2 può capitare di ritrovarsi prodotti con immagini duplicate, specialmente a seguito di una importazione di dati. Inoltre sembra che ci siano anche dei bug, o almeno ci sono stati nelle diverse versioni, che producevano questo fastidioso problema.

Quello che vogliamo fare è creare una pagina correggi_immagini.php, nella root del sito, richiamando la quale percorreremo tutti i prodotti in cerca di immagini duplicate e le elimineremo.

Come piccolo accorgimento voglio che lo script sia eseguito solo a seguito di una specifica chiamata GET sulla pagina, per esempio /correggi_immagini.php?auth=1234567890abcdefghilmnopqrstuv

Al posto di 1234567890abcdefghilmnopqrstuv raccomando di sostituire un codice sufficientemente complesso.

Nei commenti ho inserito i dettagli sullo sviluppo dello script:

Vedi articolo

[excel] Generare una password casuale di lunghezza arbitraria usando il calcolo matriciale

Questa soluzione si ispira ad un precedente articolo a cui rimando per chi fosse curioso di approfondire: [excel] Come creare una password casuale di lunghezza arbitraria con un’unica formula

Il risultato che voglio ottenere sarà simile a questo:

Avendo una cella in input F2 indichiamo la lunghezza della password che desideriamo ottenere, nella cella sottostante una singola formula genera una password pseudo-casuale.

Prima di procedere oltre raccomando per password importanti l’uso di software più affidabile, con algoritmi di generazione di valori casuali superiori ad Excel, come per esempio KeePass.

Anzitutto voglio creare un set di caratteri da cui estrarre quelli della password. Immaginiamo di voler scrivere automaticamente una stringa contenente tutte le lettere maiuscole.

Come illustrato nell’articolo precedente partiamo dal presupposto di voler ricavare i caratteri da una tabella ASCII come la seguente:

Le lettere maiuscole vanno dal carattere 65 al carattere 90. Per ottenere l’intervallo di numeri desiderato usiamo:

Questo produrrà una matrice come questa:

Se volessimo trasformare ciascun numero in un carattere dovremmo usare la funzione CARATT.UNI nel modo seguente:

Il risultato sarà simile a questo:

Applichiamo ora CONCAT alla matrice così ottenuta e avremo tutti i caratteri in una singola riga.

Ripetiamo l’operazione per gli intervalli 97:122 e 33:47 e concateniamo il tutto ai numeri da 0 a 9, nella seguente unica formula:

Tutto questo produrrà una riga come la seguente:

La riga ha in tutto 77 caratteri. Adesso, dopo averla unita, vogliamo spezzarla di nuovo in ogni singolo carattere, usando, come nell’esercizio precedente, la funzione STRINGA.ESTRAI:

Infine usiamo INDICE sulla matrice così creata ed estraiamo per n volte un valore a caso tra 1 e 77. Concateniamo il tutto per ottenere una unica stringa di testo contenente la password.

Affinché la funzione CASUALE.TRA ricalcoli il valore per ogni singolo carattere desiderato, utilizziamo un piccolo trucchetto, inserendo una matrice all’interno della funzione CASUALE.TRA in questo modo:

Grazie al SE sommo sempre 0, per qualunque valore generato da RIF.RIGA(INDIRETTO("1:"&F2)) che produrrà un vettore di dimensione n quanto è la lunghezza desiderata della password.

Vedi articolo

[woocommerce] Disabilitare metodi di spedizione in base alla classe di spedizione

Aggiungendo un filtro a functions.php del tema attivo o in qualunque plugin attivo, possiamo escludere alcuni metodi di spedizione in base alla class di spedizione del prodotto.

Immaginiamo di aver aggiunto, tra i metodi di spedizione, qualcosa di simile (nel mio caso Corriere BRT):

E contestualmente abbiamo creato una classe di spedizione chiamata sempre Corriere BRT nel modo seguente:

A questo punto vogliamo che solo i prodotti con la suddetta classe abbiano a disposizione il suddetto metodo di spedizione, che venga invece escluso per quelli senza una classe.

Procuriamoci anzitutto l’ID della classe e quello della spedizione. Utilizzando Chrome, nel mio esempio, clicchiamo col destro sulla classe di spedizione e scegliamo Ispeziona.

Nella finestra di ispezione individuiamo il codice della classe nel modo seguente:

Nel mio caso il valore da salvare è 17834.

Adesso individuiamo l’ID del metodo di spedizione. Lo possiamo recuperare dal carrello sempre utilizzando Ispeziona su Chrome. Andiamo nel carrello dove abbiamo un prodotto con il metodo di spedizione desiderato:

Clicchiamo su Ispeziona ed individuiamo il seguente pezzo di codice:

Nel mio caso il codice è flat_rate:7

Raccolte tutte queste informazioni andiamo a modificare il file functions.php aggiungendo il filtro.

Modifichiamo opportunamente i due codici che ci interessano.

Fatto questo ci accorgeremo come il hook woocommerce_package_rates non viene chiamato sempre, ma solamente al momento in cui si aggiorna la quantità di prodotti nel carrello. Affinché la cosa funzioni correttamente dobbiamo chiamarlo sempre.

Per farlo andiamo su WooCommerce > Impostazioni > Spedizione > Opzioni di spedizione e qui spuntiamo la voce Abilita la modalità di debug

Se abbiamo fatto tutto correttamente adesso il metodo di spedizione è disponibile solo per la classe scelta.

Vedi articolo

[wordpress] Escludere pagine dalla sitemap generata da YoastSEO oppure JetPack

Sia YoastSEO che JetPack permettono di generare automaticamente delle sitemap per i contenuti del sito.

Potrebbe essere però necessario escludere alcune pagine dalla sitemap. Per esempio le pagine del carrello, del checkout e dell’account, generate da WooCommerce, comprendono il tag noindex, che le esclude dall’indicizzazione di Google per ovvie ragioni (principalmente pratiche, inutile indicizzare contenuti accessibili solo per motivi funzionali o per alcuni utenti).

In entrambi i casi, la presenza di tali pagine nella sitemap, provoca degli errori sulla Google Search Console (vengono proposti link per l’indicizzazione, che poi non possono essere indicizzati per via del tag noindex). Per risolvere simili problemi è sufficiente rimuovere le pagine coinvolte dalla sitemap.

In entrambi i casi è possibile farlo programmaticamente (per YoastSEO anche intervenendo nelle opzioni di ciascuna pagina) aggiungendo un’opportuno filtro nel file functions.php del tema (o dove si preferisce).

Per JetPack sarà sufficiente aggiungere il seguente codice:

In questo caso verranno escluse le pagine con ID 102, 103 e 104. Per trovare l’ID di un contenuto, in generale, è sufficiente controllare l’indirizzo al momento della modifica. Modificando un articolo si avrà un indirizzo del tipo post.php?post=102&action=edit

Il 102 è l’ID del contenuto.

In maniera analoga per YoastSEO è sufficiente aggiungere il seguente codice:

In entrambi i casi i contenuti con l’ID coinvolto non verranno più inseriti nella sitemap.

Vedi articolo