Digitalocean installare un droplet LAMP multisito su Ubuntu 14.04. <alebal web Blog> | Appunti di PHP, MySql, javascript, Css, HTML, HTML5 e altro...

Perchè questa guida?
Perchè ci ho bestemmiato per quasi un mese per riuscire a far funzionare tutto e sicuramente tra un paio di giorni non mi ricordo più un cazzo...

Sul mio droplet io ho fatto questa lista di cose:

Tutto inizia aprendo un droplet con Ubuntu 14.04 su Digitalocean.

Eesistono già anche 16.04 e 17.04 ma hanno gia php 7. PHP7 sembra essere meraviglioso ma all'atto pratico attualmente mi ha fatto perdere un sacco di visite, quindi per il momento, anche per fare un paragone con i server che avevo prima, continuo con 5, poi appena ho tempo installo un nuovo droplet aggiornato e provo cambiano i dns.


Bene, fatto il nuovo droplet, e adesso?

Si accede via SSH

con questa guida:

https://www.Digitalocean.com/community/tutorials/initial-server-setup-with-Ubuntu-14-04

Con linux CTRL+ALT+T -> ssh root@ip-del-droplet

Un utente magari crealo, probabilmente serve in futuro.


Bon, fatto ssh e adesso?

Adesso LAMP

con questa:

https://www.Digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-LAMP-stack-on-Ubuntu-14-04

Praticamente si inizia installando Apache2

sudo apt-get update
sudo apt-get install apache2

Poi si installa mysql

sudo apt-get install mysql-server php5-mysql
sudo mysql_install_db
sudo mysql_secure_installation

Poi si installa PHP 5

sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt

Poi loro ti fanno cambiare l'ordine di esecuzione in base all'estensione del file, ma a me piace che parta prima index.html e poi index.php vedi frontedelpiave.info e quindi non lo faccio.

si riavvia apache

sudo service apache2 restart

Si installano moduli su php (pochi, solo quel che serve)

sudo apt-get install php5-cgi php5-cli php5-common php5-curl php5-gd php5-json php5-mysql php5-readline php5-xmlrpc php5-apcu php5-fpm php5-imagick php5-mcrypt php5-memcached

pocini... si, ma non me ne servono altri... mi interessano soprattutto le cache apcu e memecached, opcache e pdo sono già installati.

Tanto per capire se tutto funziona puoi fare un file phpinfo()

sudo nano /var/www/html/info.php
<?php
phpinfo();
?>

Metti il "<?php" altrimenti non va un cazzo, perche sul php ini non è ancora abilitato short_open_tag e senza di lui "<?" questo non funziona.

Lo vedi cosi

http://your_server_IP_address/info.php

Bon, fatto il LAMP, e adesso?

Adesso Virtual Host di Apache

per aggiungere i domini, con questa:

https://www.Digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-Ubuntu-14-04-lts

Apache ce lo hai già, lo hai installato prima nel LAMP.

Creiamo la strutturra directory dove andranno fisicamente messi i file dei vari siti.

Loro creano una struttura cretina, dove ogni cartella sito ha una public_html al suo interno, ma a me rompe solo le balle e in seguito mi ha anche creato qualche casino perchè nelle guide successive la struttura standard è /var/www/html/.

Quindi la creo cosi:

sudo mkdir -p /var/www/html/example.com
sudo mkdir -p /var/www/html/test.com

Poi permessi

sudo chown -R $USER:$USER /var/www/html/example.com
sudo chown -R $USER:$USER /var/www/html/test.com

e permessi a /www

sudo chmod -R 755 /var/www

Poi loro ti fanno fare una pagina demo, una index.html dentro ogni cartella del sito, serve solo per vedere se tutto funziona, ma non funzionarà perchè sti stronzi dimenticano pezzi di guida e non ti fanno aprire le porte di Apache. Quindi magari la saltiamo.

Facciamo invece i file di Virtual Host veri e propri.

Si copia il file di default e gli si da il nome di un nostro sito:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf

Lo apriamo con nano

sudo nano /etc/apache2/sites-available/example.com.conf

Aggiungiamo:

ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com

Prima di DocumentRoot

e cambiamo DocumentRoot

DocumentRoot /var/www/html/example.com/

Si, la sua è diversa, ma ho cambiato la struttura cartelle prima.

Poi te lo fanno copiare anche per il secondo dominio, cambiando i dati qui sopra. Questo si farà anche per ogni nuovo dominio.

Si abilitano i domini

sudo a2ensite example.com.conf
sudo a2ensite test.com.conf

Si riavvia Apache

sudo service apache2 restart

Fatto Virtual Host, e adesso?

Adesso aggiungi il dominio a Digitalocean

Su Namesilo (o altro registar) metti i dns di Digitalocean al dominio

ns1.Digitalocean.com
ns2.Digitalocean.com
ns3.Digitalocean.com

poi aggiungi il dominio su Digitalocean. Vai sul menu droplet e a destra sul droplet clicca More->Add a domain cosi per metà si configura già su questo droplet.

Dopo aver aggiunto il dominio clicca CNAME e aggiungi:

www -> @
* -> @

Deve venire cosi

Digitalocean installare un droplet LAMP multisito su Ubuntu 14.04 | <alebal web Blog>

e a questo punto loro ti dicono: Bravo, hai fatto tutto, è tutto bello e meraviglioso, aspetta un pò che si propaghino i dns e poi vai sul tuo sito a vedere la meraviglia che hai fatto...

e tu ci vai e non funziona un cazzo! E allora aspetti, sono sicuramente i dns, e aspetti per giorni e continua a non funzionare un cazzo.
Poi comincia a provare di tutto, a rifare tutto, distruggi il droplet, ne fai un altro, provi 16.04, 17.04 72x12, 43,8 e non funziona mai, e allora comincia a rompere i coglioni a tutti sui forum, sulle chat, sulle assistenze e continui a cagare bestemmie finchè un giorno incontri un anima pia con nickname Barry-xlovecam che ti chiede: ma hai aperto le porte ad Apache?
E tu qui caghi un ultimo grosso bestemmione perche nessuno ti ha detto un cazzo delle porte di Apache, nemmeno sapevi Apache avesse le porte...

Perchè tra tutte le guide, i tutorial gli utili consigli e i suggeriemtni che ti hanno dato, nessuno ha mai penasato di dirti che su sto cazzo di droplet di default viene installato un cazzo di firewall e se non apri le porte ad Apache il tuo server non farà mai un cazzo!

E allora apri le porte ad Apache con questa semplice e stupida righina:

sudo ufw allow in "Apache Full"

e tutto comincia a funzionare.


Ok, ho fatto il Virtual Host, impostato i dns , aggiunto il dominio su Digitalocean e aperto quelle cazzo di porte di Apache, e adesso?

Adesso FTP!

C'è già, si usa sftp che va via ssh ed è anche più sicuro.

Si imposta cosi:

Host: ip del droplet
Protocollo: sftp
Tipo accesso: normale
Utente: root
password: password di ssh

Se come utente usi root, che probabilmente non è l'idea più intelligente del mondo, lui ti butta nella cartella root, torna indietro e vai su /var/ www/html


Ok, ho impostato l'ftp, e adesso?

Adesso phpMyadmin

https://www.Digitalocean.com/community/tutorials/how-to-install-and-secure-phpmyadmin-on-Ubuntu-14-04

phpMyAdmin lo installi:

sudo apt-get update
sudo apt-get install phpmyadmin

ti chiede delle cose, digli Apache2 (selezionando con spazio), poi clicca TAB per andare su OK e dagli invio. Digli di si a dbconfig-common e metti una password.
Poi lancia questo:

sudo php5enmod mcrypt

probabilmente lo hai già installato prima nei moduli, con questo ti assicuri che sia abilitato, phpMyAdmin lo vuole, fallo contento.

Quindi riavvia Apache

sudo service apache2 restart

Fatto! Adesso phpMyAdmin lo trovi qui: 

http://domain_name_or_IP/phpmyadmin

Qui però poi ti dicono che cosi phpMyAdmin non è molto sicuro, e poverino te lo sfondano allegramente. Meglio quindi mettere una stronzatina in più una password di accesso all'indirizzo con htpassword.

Si fa cosi:

sudo nano /etc/apache2/conf-available/phpmyadmin.conf

e aggiungi

AllowOverride All

dentro a

<Directory /usr/share/phpmyadmin>

Chiudi, salva e riavvia Apache.

sudo service apache2 restart

Adesso creiamo un htaccess che ti chiede una password quando provi ad accedere all'indirizzo di phpMyAdmin

sudo nano /usr/share/phpmyadmin/.htaccess

incolla questo e salva

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

Poi un htpassword con la password che userai per accedere.

Per farlo gli serve questo affarino qui:

sudo apt-get install apache2-utils

Con questo affarino qui puoi scrivere sul terminale questo:

sudo htpasswd -c /etc/phpmyadmin/.htpasswd username

username metti quello tuo, password te la chiede poi.

Fatto questo non entri più su phpMyAdmin se non gli metti le user e password che hai appena creato.


Ho installato phpMyAdmin e adesso?

Adesso ti servono i database e gli utenti mysql.

C'è tutta una guida https://www.Digitalocean.com/community/tutorials/how-to-create-a-new-user-and-grant-permissions-in-mysql, ma secondo me è strana, perchè ad esempio dopo tutto questo casino sulla sicurezza, nella guida ti fanno creare un utente mysql che accede a tutti i database a tutte le tabelle, e mi pare un pò una cazzata...

Quindi se vuoi, fatti la guida, ma database e utenti si possono creare anche da phpMyAdmin e magari te li fai che possano accedere ad un solo database per volta.

Di carino sulla guida c'è questo comando:

mysql -u root -p

che ti permette di accesere alla shell di mysql da terminale, carino perche capisce ed esegue query mysql, può tornare utile. Dalla shell di mysql si esce scrivendo "quit".


Va bene, ho capito come creare database e utenti mysql, e adesso?

Adesso php.ini

Primo, dove sta? Qui:

/etc/php5/apache2/php.ini

Te lo puoi scaricare e modificare con calma, oppure modificare con nano direttamente sul server.

sudo nano /etc/php5/apache2/php.ini

php.ini guardatelo un pò tutto, di solito si cambiano solo i parametri più comuni, questi:

post_max_size = 8M
upload_max_filesize = 2M
memory_limit = 128M
max_execution_time = 30

sono sempre bassini all'inizio, un pò penso per motivi di sicurezza, un pò perchè il php.ini è nato tanto tempo fa quando già sembravano alti.

Però ci sono anche altri parametri interessanti come accennavo prima, tipo: short_open_tag, se lo lasci a Off questo "<" non funziona e vedi pagine bianche, ti tocca modificare tutti gli script in cui lo hai utilizzato cosi "<?php" per cominciare a vedere qualcosa... io non lo scrivo mai tutto, quindi per me questo è un parametro fondamentale.

Comunque fatti una copia di backup prima di fare cazzate, e ricordati di riavviare apache dopo le modifiche altrimenti non cambia mai un cazzo.

sudo service apache2 restart

e divertiti, tanto prima o poi lo romperai comunque.


Adesso Symlink!

E che cazzo sono? Eh, ci fai ad esempio una cartella in /html con tutti gli script che usi più spesso, e invece di copiarla ogni volta su tutti i siti, quando ti serve qualcosa punti ai file di questa cartella... magari non ti serviranno mai, ma siccome a me servono mi metto un appunto... 

Comunque, sono una cagata, si fanno cosi:

ln -s /var/www/html/function_global /var/www/html/tuosito.com/function_global

Nella cartella col tuo sito ti ritrovi una nuova cartella function_global con sull'icona una freccetta, è un symlink.
Nella cartella function_global ci metti tutto quello che ti serve spesso, e la usi come una normale cartella del sito.


Va beh, ho capito i symlink, e adesso?

Adesso mod_rewriter

https://www.Digitalocean.com/community/tutorials/how-to-set-up-mod_rewrite-for-apache-on-Ubuntu-14-04

In pratica ce lo hai già ti si è installato prima con Apache, ma ti devi assicurare che sia abilitato:

sudo a2enmod rewrite

e tanto per essere sicuro riavvia anche Apache

sudo service apache2 restart

Adesso apri questo: 

sudo nano /etc/apache2/sites-enabled/000-default.conf

e incollaci questo codice:

<Directory /var/www/html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
                # New directive needed in Apache 2.4.3:
                Require all granted
</Directory>

tutto dentro a <VirtualHost *:80>, dove vuoi, basta sia dentro al tag.

e riavvia Apache

sudo service apache2 restart

Adesso la guida ti fa creare un htaccess con url_rewriter per la cartella /var/www/html su about.html, carino, ma non serve a un cazzo, bello però per vedere se tutto funziona. In seguito ti spiegano diversi parametri che puoi usare per fare url_rewriter su htaccess, ma insomma te li puoi imparare qui o anche da qualche altra parte, imparateli e non rompere i coglioni...

La prossima cosa che farai sarà andare sul tuo sito, che funziona con url_rewriter e accorgerti che non va un cazzo! Tanto per cambiare... 

Perchè sti stronzi non ti dicono che questo funziona solo su /html, e se vuoi farlo funzionare sui tuoi siti devi aggiungere questo:

<Directory /var/www/html/tuosito.com>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
                # New directive needed in Apache 2.4.3:
                Require all granted
</Directory>

anche nei file di Virtual Host dei tuoi siti... quelli che abbiamo fatto all'inizio...

sudo nano /etc/apache2/sites-enabled/example.com.conf

e devi anche cambiare:

/var/www/html in questo /var/www/html/tuosito.com

aggiungendo il tuo sito alla struttura cartelle.

E riavvia Apache:

sudo service apache2 restart

Ora se tutto è andato di culo, url_rewriter dovrebbe funzionare anche sul tuo sito.

Mi ha fatto alcune cose strane, tipo non c'è cazzi di fargli funzionare questo: 

RewriteRule ^tags$ tags.php [L]
RewriteRule ^tags/$ tags.php [L]

però regole anche molto più complesse funzionano senza problemi... boh, ci capirò più avanti...


Ho fatto mod_rewriter, e adesso?

Adesso scrivere file

Ti servirà prima o poi e se ci provi adesso non funziona un cazzo!

Ti mancano dei permessi, si aggiungono cosi:

chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html

Bon, fatto, chiuso il discorso, adesso va!


Ok, adesso scrivo anche file,e adesso?

Adesso mod_deflate!

E che cazzo fa? Comprime, lui è praticamente gzip, comprime tutte le pagine, i contenuti  e fa funzionare molte delle regole che aggiungerai su  htaccess per compressione e headers che al maledetto piacciono tanto.

https://www.Digitalocean.com/community/tutorials/how-to-install-and-configure-mod_deflate-on-Ubuntu-14-04

Sono 2, ci sono già , li devi solo abilitare:

sudo a2enmod expires
sudo a2enmod headers

Non serve fare altro, adesso va!


Ok, fatto anche mod_deflate, e adesso?

Adesso certificati https, Let's Encrypt

A me personalmente fanno schifo, soprattutto l'uso che se ne fa ultimamente per cercare di accontentare il maledetto, però usiamoli...

Per non romperci tanto le balle, e perchè son gratis usiamo Let's encrypt.

Si aggiunge il suo repository:

sudo add-apt-repository ppa:certbot/certbot

si aggiorna:

sudo apt-get update

si installa:

sudo apt-get install python-certbot-apache

e adesso certificato:

sudo certbot --apache -d example.com -d www.example.com

Fatto! Fa tutto lui, in teoria funziona già tutto, se funziona si vede cosi:

https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest

è carino, perchè fa tutto lui, non fiosse che scadono di continuo, e ti serve un crontab per rinnovarli:

sudo crontab -e

aggiungi questa riga alla fine:

15 3 * * * /usr/bin/certbot renew --quiet

e salva.

Fatto, per il prossimo basta che rilanci questa:

sudo certbot --apache -d test.com -d www.test.com

Ho fatto anche i certificati, e adesso?

Adesso OpCache!

E che cazzo fa? In pratica mette in cache gli script php.

C'è già, te la danno assieme a php, ma la devi abilitare. E come cazzo si fa? Forse l'hai vista prima, sta sul php.ini

/etc/php5/fpm/php.ini

Devi cambiare questi:

Change: ;opcache.enable=0 to opcache.enable=1
Change: ;opcache.memory_consumption=64 to opcache.memory_consumption=128
Change: ;opcache.max_accelerated_files=2000 to opcache.max_accelerated_files=4000 
Change: ;opcache.revalidate_freq=2 to opcache.revalidate_freq=60

va tolto il ; all'inizio altrimenti php non li caga.

Poi reboot, riavvia il droplet cosi sei sicuro che adesso li vede. Non serve fare altro, fa tutto da sola.


Ok, fatto Opcache, e adesso?

Adesso memcached

Non memcache! E che cazzo fa? In pratica mette in cache le query al database mysql.

Si installa:

sudo apt-get update
sudo apt-get install mysql-server php5-mysql php5 php5-memcached memcached

Fatto! Non serve altro, fa tutto da sola.

Puoi vedere se va, con questi:

test: ps aux | grep memcached
stat: echo "stats settings" | nc localhost 11211

Ma mi servono davvero sti affari? Eh, boh, nessuno lo sa ma in pratica servono a velocizzare il tempo in cu iil tuo sito mostra una pagina, cosa che piace al maledetto, e riducono considerevolmente il carico di lavoro del server, cosa che piace a te che lo paghi...

Ne esistono anche altri: https://www.Digitalocean.com/community/tutorials/how-to-configure-apache-content-caching-on-Ubuntu-14-04

alcuni stupidi, dove devi aggiungere in un file riga per riga ogni pagina che vuoi mettere in cache, altri magari più seri, ma un casino da configurare.
Tanto per non farmi mancare neinte sto provando "How To Configure Standard HTTP Caching" sapremo in futuro se fa qualcosa...

Per l'amor di dio non installare mai più Standard HTTP Caching, di suo effettivamente sembra essere meraviglioso e funzionare anche bene, ma dopo 2 giorni lo spazio su disco era finito fino all'ultimo Kb. Ha delle regole impostate nei file di configurazione di apache che limitano lo spazio e l'uso che dovrebbe fare delle risorse, ma non so bene perchè sembra averle completamente ignorate ed essersi preso tutto lo spazio libero rimasto, tanto da non riuscire a risolvere le query mysql per mancanza di spazio in cui salvare i dati temporanei. Probabilmente però questa è una cosa di Digitalocean che in qualche modo crea un sacco di symlink che prima o dopo da qualche parte fanno casino.
Riuscire a toglierlo e ripristinare lo spazio del disco è stata un impresa...
Disabilitando i moduli:

sudo a2dismod cache
sudo a2dismod cache_disk

e rimuovendo le righe aggiunte ai file ".conf" di virtual host, tutto il giochino si ferma, ma tutti i dati salvati in cache da mod_disk rimangono sul disco, che rimane pieno.
Probabilmente se ne andrebbero col tempo, perchè nei file di configurazione viene impostata anche una durata, ma se lo spazio ti serve subito, sei rovinato.

La prima idea che ti viene è rimuovere brutalmente i file con  un bel "rm" via SSH, ma si sa che cosi il rischio di fare un casino è  molto alto, cosi ho girato un pò per il maledetto e ho trovato questo http://manpages.Ubuntu.com/manpages/precise/man8/htcacheclean.8.html, htcacheclean è proprio quella funzioncina che dovrebbe limitare l'invasione sul disco di mod_disk, vuole fondamentalmente un indirizzo e un limite, impostando limit a 1Kb praticamente ho cancellato tutta la cache di mod_disk:

htcacheclean -p/var/cache/apache2/mod_cache_disk -l 1

Per ora tutto sembra funzionare, ho un sacco di spazio su disco libero e tutto va bene, speriamo continui cosi, la prossima volta comunque, col cazzo che installo mod_disk su Digitalocean...


Ok, fatto anche Memcached, e adesso?

Adesso ci starebbe bene Varnish.

Varnish è già un pò vecchiotto e soprattutto non fa https, però quel che faceva, spesso portava risultati davvero simpatici, velocizzava di molto i siti, creava una proxy cache e teneva per un pò online il sito anche se il server si piantava...

Esiste un modo per fargli capire https, installando nginx accanto ad apache, e lasciando ad apache il traffico http con varnish come al solito e a nginx il traffico https che viene "dirottato" su varnish.

Cosi:
Digitalocean installare un droplet LAMP multisito su Ubuntu 14.04 | <alebal web Blog>

https://www.Digitalocean.com/community/tutorials/how-to-configure-varnish-cache-4-0-with-ssl-termination-on-Ubuntu-14-04

è però effettivamente un casino... ho provato, ho installato tutto, configurato tutto, testato man mano tutto e alla fine non funzionava un cazzo... forse il tutto funziona meglio su 16.04 su 14.04 mi si è piantato in un modo schifoso, senza dare segnali di problemei o errori, funzionava tutto fino alla fine e alla fine si è spaccato tutto... e ho dovuto reinstallare tutto su un nuovo droplet. (porca di quella...)

Comunque, a un certo punto vada pure un pò affanculo https, nel senso che nel mio caso non tutti i miei siti sono https e Varnish nel traffico http continua a fare la sua magia, quindi magari vale la pena installarlo comunque. 

Se tutti i siti sul server dovranno essere https probabilmente non vale la pena installare Varnish.

Saltando tutta la parte nginx https e casini vari quello che rimane è un installazione pulita pulita di Varnish

Si controlla di avere questo:

sudo apt-get install apt-transport-https

Varnish sta qui, e molto probabilmente c'è già.

Si aggiunge la Varnish GPG Key

curl https://repo.varnish-cache.org/Ubuntu/GPG-key.txt | sudo apt-key add -

Si aggiunge il repository di Varnish

sudo sh -c 'echo "deb https://repo.varnish-cache.org/Ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list'

Poi come al solito si aggiorna e si installa:

sudo apt-get update
sudo apt-get install varnish

Per vedere se tutto funziona, vai qui:

http://varnish_VPS_public_IP:6081

(Attenzione! L'ip è quello pubblico)

e andando qui cosa succede? Trovi un errore:

Digitalocean installare un droplet LAMP multisito su Ubuntu 14.04 | <alebal web Blog>

Ma stavolta è normale, è fatto lui cosi, è solo che non lo hai ancora configurato.

E allora configuriamo:

sudo nano /etc/varnish/default.vcl

Nel file trova backend_default e cambialo cosi:

backend default {
    .host = "LAMP_VPS_private_IP";
    .port = "80";
}

Attenzione! Questa volta è private IP, e se sei andato di fretta non te ne sei accorto e ora non funziona più un cazzo.

E tanto per cambiare neanche sapevi esistesse un IP privato, perchè come al solito nessuno ti ha detto un cazzo, ci bestemmi qualche giorno, poi a forza di riguardare la guida a un certo punto te ne accorgi, e tiri giù un bel bestemmione.

Comunque, l'IP privato non ce l'hai, lo devi attivare sul sito Digitalocean, vai sul tuo droplet e lo trovi nel menu in alto (oppure networking -> Private network).

Qui "Private IP" cambia nome e diventa "Private network", non cambia niente ed è ovviamente la stessa cosa, ma soprattutto, a te che hai già un sacco di dubbi, fa tanto piacere...

Comunque, ti fanno spegnere il server, ti danno l'ip e devi riaccendere tutto, e finalmente hai un Ip privato da poter incollare nel file:

/etc/varnish/default.vcl

Incollalo e metti la porta 80.

Prima di salvare e chiudere, già che siamo qui attiviamo il "grace mode", "grace mode" è quell'affarino che se il tuo server rincoglionisce un attimo (per un qualsivoglia motivi) tiene online il tuo sito per un pò, in questo caso per un ora, nel frattempo vedi di capire cosa è successo e risolvilo.

Si attiva aggiungendo un paio di righe su "sub vlc_backend_response:

sub vcl_backend_response {
    set beresp.ttl = 10s;
    set beresp.grace = 1h;
}

Ora, salva e chiudi.

Non è finita, varnish risponde ancora sulla porta 6081, noi vogliamo 80 che è la porta di http.

Si apre questo file:

sudo nano /etc/default/varnish

e si cambia

DAEMON_OPTS="-a :6081 

In

DAEMON_OPTS="-a :80 

Bon, fatto! Salva e chiudi e riavvia il servizio Varnish

sudo service varnish restart

A questo punto tutto è fatto e finito, andando qui

http://varnish_VPS_public_IP

dovresti vedere qualcosa che funziona, un tuo sito o la pagina di default di Apache, ma può anche essere che tu veda un errore o che non si carichi un tubo.

Capita che qualcosa in Varnish non si avvii, ma niente di grave, si riavvia il droplet, oppure anche solo il servizio varnish o apache e tutto torna a funzionare, è un errore cretino che ho visto capitare spesso con Varnish anche utilizzando pannelli come CPanel o CWP. Eh, a volte gli capita... comunque basta poco, si riavviano un paio di cose e tutto riparte.

Spesso te ne accorgi perchè i tuoi siti sembrano improvvisamente sparire dal tuo piano di esistenza nella realtà e dall'universo stesso, e il tuo server sembra essere risucchiato da un buco nero che trattenenedo tutto cio che cade al suo interno (compresa la luce stessa) impedisce ai tuoi siti di comunicare con la dimensione spazio-temporale in cui vivi.

Ecco, prima di imbarcarti in un viaggio interpalnetario, prova a riavviare Varnish e magari se ti avanza tempo anche Apache e forse già cosi i tuoi siti tornano a esistere.

Da qui in poi la guida continua con Nginx, https ecc ed è qui che mi sono cominciati i casini la prima volta, io l'ho saltata, i miei siti sembrano tutti funzionare, sia http che https senza problemi.


Varnish P.S.

Allora, dopo qualche giorno di test varnish su Digitalocean non sembra funzionare granche, rompe le balle ad apache e spesso non si avvia e non cache un tubo.

Il problema sembra essere che varnish e Apache si litigano la porta 80, perchè su Digitalocean c'è qualcosa tipo un symlink che crea confusione. Online si trova qualcosa su questo problema, ma non molto, perchè sembra essere un problema dell'ultima versione di Varnish per php5, risolto nella versione per php7. Quindi la soluzione ufficiale sembra essere passa a Ubuntu 16.04 con php7 e tutto funziona.

Per il momento io voglio php5 per fare un paragone con il precedente server e quindi me lo tengo, se mi avanza tempo, provo a capire se è possibile far funzionare varnish, ma siccome non lo avevo nemmeno sul server precedente, magari ci penso con calma....


Ok, fatto/capito Varnish, e adesso?

Adesso ci sarebbero i cronjobs php

Ma qui è un casino...

Intanto controlliamo che esista:

sudo apt-get update
sudo apt-get install cron

Ma sicuramente già esiste, si installa assieme ad altre cose.

Poi andiamo a fare un cronjob da terminale, si apre da terminale (è nano)

crontab -e

Qui per creare un nuovo cronjob si aggiunge una riga alla fine tipo questa
(lasciando una riga vuota tra uno e l'altro)

* * * * * /usr/bin/php /var/www/html/tuosito.com/cronjob.php

Gli asterischi sono :

Un esempio di digitura corretta e perfetta è questo:

0 16 * * 3 /usr/bin/php /var/www/html/tuosito.com/cronjob.php

a volte -q, -f anche se non riesco a capire cosa siano di preciso, forse -f gli dice eseguilo, ma di questi parametri non ho mai trovato una guida seria (probabilmente tra le guide linux)

0 16 * * 3 /usr/bin/php -q /var/www/html/tuosito.com/cronjob.php
0 16 * * 3 /usr/bin/php -f /var/www/html/tuosito.com/cronjob.php

Ma sui server Ubuntu 14.04 di Digitalocean questa dicitura non ne vuole sapere di funzionare...
non è sbagliata, è capitato anche ad altri, ho provato centinaia di versioini differenti della stessa riga, ho provato a a lanciarla con diversi utenti, ho provato a cambiare indirizzi, ecc, ecc, ecc, non c'è cazzi, non vuole andare...
Forse bug di 14.04, forse di Digitalocean, non lo so, fatto sta che ad alcuni tutto funziona senza problemi ad altri non funzionaerà mai...

Finchè non capisco perchè non funziona la soluzione è curl (se la pagina è accessibile via browser)

0 16 * * 3 curl https://www.tuosito.com/cronojob.php

Per non avere tutta la porcheria via mail si usa --silent, però non ti arrivano più nemmeno gli errori PHP.

0 16 * * 3 curl --silent https://www.tuosito.com/cronojob.php

Questa funziona, quindi i cron stanno funzionando, tutti i servizi sono installati e abilitati, il server funziona bene, anche se quello stronzissimo cron con php non ne vuole sapere di funzionare... @#½³@#%

Se vuoi una mail con l'output dello script su una tua mail va aggiunto questo, in alto, nel file dei cronjob (crontab -e)

MAILTO="tuamail@tuosito.com"

Questo forse basta a farti arrivare una mail ogni volta che un cronjob viene eseguito. 

Ma anche qui ho avuto dei casini...

I cronjob rompono anche le balle perchè ti vogliono mandare una mail, anche se tu non la vuoi lui comunque ci pensa, e rompe le balle perche non trova un servizio MTA (Mail Trensfer Agent), senza di lui i cronjob non sembrano funzionare e te ne accorgi solo guardando i syslog

In terminale:

less /var/log/syslog

Io non voglio mail su questo server, non ne ho bisogno e comunque pensaci bene prima di installare mail, imap, smtp ecc ecc perchè comportano un sacco di casini tipo spam, DDos, sovraccarico del server ecc ecc ecc...

Insomma le mail solo se serve e solo quando server, perche al server rompono solo le balle...

Comunque, per far funzionare questi maledetti cronjob ho installato postfix.

In realtà, l'ho installato prima di pensare al parametro MAILTO nel file crontab, quindi forse, magari, può essere che postfix non servisse, magari la mail arriva lo stesso e rimane solo un avviso nei syslog, ma la cagata ormai l'ho fatta, è andata cosi e ce la teniamo, ma nel prossimo server che installo magari aspetto un attimo a installare postfix e vedo prima se le mail arrivano anche senza di lui.

Comunque, non dovesse funzionare senza postfix, tocca installare postfix.


Merda, mi tocca installare postfix.

https://www.Digitalocean.com/community/tutorials/how-to-install-and-setup-postfix-on-Ubuntu-14-04

Premettiamo che l'ho installato solo per i motivi spiegati sopra legati al cronjob, e magari la prossima volta aspetta ad installarlo
(pensi che lo scrivo per te? No, lo scrivo perche sennò la prossima volta non mi ricordo)

Postfix:

sudo apt-get update
sudo apt-get install postfix

e già cosi, per quel che devo fare forse bastava... ma tanto per non farci mancare niente ho aggiunto il mio hostname

Apri il file di configurazione di postfix

sudo nano /etc/postfix/main.cf

Cambia questo:

myhostname = example.com

Sulla guida, ti spiegano che puoi forwardare la mail settando un alias cambiando un indirizzo nel file di configurazione ecc ecc ecc...
L'ho fatto e dopo non andava più un cazzo... Se non tocchi niente lui funziona.

E cosi postfix per me è finito, perchè mi fa schifo, non lo voglio e l'ho installato solo perche ho dovuto per far funzionare i cronjob. 

Il consiglio finale, se proprio ti serve una mail aprila su Gmail o Yandex Mail e lascia che il tuo server faccia altro.


Fatto anche quel maledetto di postfix, e adesso?

Adesso, va bèh dai, però magari un paio di mail mi servono, cosa faccio?

Usi Yandex. Yandex ti permette di verificare il tuo dominio e aprirci delle mail, da lui, sul tuo dominio, tipo miamail@miodominio.com, anche se il tuo sito e il tuo dominio sono su Digitalocean.

E come si fa? si va qui: https://domain.yandex.com/domains_add/, aggiungi e verifichi il tuo dominio, e poi puoi aggiungerci una mail.

Su Digitalocean devi andare su networking -> tuodominio.com e aggiungere un record MX, hostname -> @, mail providers -> mx.yandex.net. (col punto alla fine), priority -> 10, TTL -> 1800

Yandex controlla se tutto a posto e praticamente hai finito, adesso ricevi le tue mail sul tuo dominio senza aver minimamente rotto le balle al tuo serverino su Digitalocean.

Ci sono in realta un paio di altre cose per completare il tutto, ad esempio sempre in Digitalocean sarebbe carino aggiungere un recordt TXT, con value -> v=spf1 redirect=_spf.yandex.net, hostneam -> @, TTL ->3600. E' un record SPF, praticamente impedisce che qualcun'altro invii mail con la tua mail.

Poi sarebbe bello configurare un client di posta sul pc, si usano i parametri yandex. es: imap.yandex.com, smtp.yandex.com, te li da yandex e comunque di solito i client nelle configurazioni automatiche leggono bene yandex e si configurano da soli.

Ci sono altri servizi che fanno la stessa cosa, acneh google, ma si pagano 5€ al mese per ogni mail, oppure Zoho ma ho provato e si è comportato in modo strano, le mail non arrivavano sempre o spesso non si inviavano e i parametri di configurazione erano confusi e vari, es zoho.com, zoho,eu, prosoho.com, non mi è piaciuto più di tanto, anche se in giro comunque se ne parla benissimo.


P.S. può darsi che mail come quelle dei cronjob non ti arrivino utilizzando yandex, perchè tutto si incasina un pò tra mail locali, mail su yandex ecc ecc ecc.

Probabilmente cercando nei log delle mail (/var/log/mail.log) trovi errori del tipo: Postfix: status=bounced (unknown user: “user”)

Si risolve cosi:

Apri il file di configurazione di postfix:

sudo nano /etc/postfix/main.cf

Cerca queste 2 righe e cambiale cosi:

myhostname = localhost
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

Già cosi tutto dovrebbe tornare a funzionare.

Google Digg Reddit Tumblr Pinterest StumbleUpon Email

Rating: 4 out of 5 by 578 visitors

Leave your comment