maanantai 28. tammikuuta 2019

Drupal 8:n päivitys (nopea ja hauras tapa)

Nämä ohjeet toimivat ainakin Sigmaticin palvelimilla. Ohjeet voivat toimia myös muilla palvelimilla/virtuaalikoneilla, joilla on yli 1 gigatavu muistia ja joille on asennettu vaadittavat komentoriviohjelmat: PHP, MySQL, Git ja Drush.

Huomaa, että jos jotain menee vikaan, niin päivitys saattaa rikkoa tuotannossa olevan sivuston!

1. Ota varmuuskopio koodeista ja tietokannasta
cd /var/www
tar --gzip -cvf ~/backup/DIR-2019-01-28.tar.gz DIR
mysqldump -uUSER -pPASS DB | gzip > ~/backup/DIR-2019-01-28.sql.gz

missä /var/www on Apachen juurihakemisto, DIR on hakemistonimi Apachen juurihakemistossa, USER on tietokantakäyttäjän nimi, PASS on tietokannan salasana ja DB on tietokannan nimi.

2. Päivitä Drupal uusimpaan versioon:
cd DIR
php composer update --with-dependencies
drush updb
drush cr

missä DIR on composer.json-tiedoston sisältävä hakemisto. (Composer tulee olla asennettu Drupalin kylkeen nimellä 'composer', jotta tämä vaihe toimii.)

Drupal 8:n päivitys (hidas ja varma tapa)

Nämä ohjeet toimivat pienimmilläkin Amazonin virtuaalikoneilla ja jopa Nettihotelli.fi:n chrootatussa putkassa (kunhan SSH on avattu asiakaspalvelusta ja tietokantaa käsitellään hallintapaneelin kautta). Ohjeet voivat toimia myös muilla virtuaalikoneilla, joilla on alle 1 gigatavu muistia, rajoitetut verkkoyhteydet tai palvelimelta puuttuu tärkeitä ohjelmia kuten PHP komentotulkki, MySQL komentotulkki, Git, Drush tai Wget.

1. Aseta sivusto huoltotilaan

2. Kirjaudu sisään www-palvelimelle SSH:lla

3. Ota kopio sivustosta:
cd /var/www
tar --gzip -cvf ~/DIR-2019-01-28.tar.gz DIR

missä /var/www on Apachen juurihakemisto ja DIR on sivuston sisältävä hakemisto.

4. Ota kopio tietokannasta (Nettihotelli.fi:n palvelimilla käytä hallintapaneelia):
mysqldump -uUSER -pPASS DB | gzip > ~/DIR-2019-01-28.sql.gz

missä USER on tietokantakäyttäjän nimi, PASS on tietokantakäyttäjän salasana, DB on tietokannan nimi ja DIR on sivuston nimi kohdasta 3.

5. Avaa uusi konsoli paikallisesssa koneessa ja kopioi sivusto www-palvelimelta:
cd ~/projektit/omat
scp HOST:DIR-2019-01-28.tar.gz .
scp HOST:DIR-2019-01-28.sql.gz .

missä HOST on www-palvelimen nimi, ja DIR on kohdissa 3 ja 4 käyttämäsi sivuston/hakemiston nimi.

6. Pura sivuston koodi paikallisella koneella:
rm -fr DIR
gunzip -c DIR-2019-01-28.tar.gz | tar xvf -

missä DIR on kohdissa 3 ja 4 käyttämäsi sivuston nimi.

7. Pura tietokanta paikalliseen koneeseen:
gunzip -c DIR-2019-01-28.sql.gz | mysql -uUSER -pPASS DB

missä DIR on sivuston nimi, USER on tietokantakäyttäjän nimi, PASS on tietokantakäyttäjän salasana ja DB on tietokannan nimi. Ensimmäisellä kerralla luo tietokanta ja käyttäjätunnus samoilla tiedoilla kuin www-palvelimella, jotta voit purkaa tietokannan kopion helposti myöhemmin uudelleen samaan kantaan.

8. Korjaa tiedostojen oikeudet, jos käytät mod_php:tä omalla koneellasi:
cd DIR
chmod -R g+rw .
chgrp -R www-data web/sites/default/files
chgrp -R www-data web/sites/default/private
find web/sites/default/files -type d -exec chmod g+xs {} \;
find web/sites/default/private -type d -exec chmod g+xs {} \;
find web/sites/default/files -type d -exec setfacl -dm g::rwx {} \;
find web/sites/default/private -type d -exec setfacl -dm g::rwx {} \;

missä DIR on sivuston nimi ja www-data on Apachen ryhmä, jolla on kirjoitusoikeus tiedostoihin.

9. Lisää sivusto Apacheen (tarvitsee tehdä vain ensimmäisen kerran) avaamalla tiedosto /etc/httpd/conf/extra/httpd-vhosts.conf (Arch linux) ja lisäämällä sinne rivit:
<Directory "/home/teppo">
    AllowOverride all
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

<VirtualHost *:80>
    DocumentRoot "/home/teppo/DIR/web"
    ServerName DIR.localhost
</VirtualHost>

missä /home/teppo on kotihakemistosi ja DIR on kohdassa 6 luomasi hakemiston nimi.

10. Avaa nettiselain ja mene osoitteeseen http://DIR.localhost, missä DIR on aiemmin asettamasi sivuston nimi. Jos edelliset vaiheet menivät oikein, niin sinulla on nyt toimiva kopio sivustosta.

11. Päivitä Drupal uusimpaan versioon:
php composer update --with-dependencies
drush updb
drush cr

Composer tulee olla asennettu Drupalin kylkeen nimellä 'composer', jotta tämä vaihe toimii.

12. Avaa nettiselain ja mene osoitteeseen http://DIR.localhost, missä DIR on aiemmin asettamasi sivuston nimi. Kirjaudu sisään Drupaliin ja tarkista saatavilla olevat päivitykset. Jos kaikki meni oikein, niin varoitus tietoturvapäivityksestä on kadonnut.

13. Ota kopio päivitetystä versiosta ja tietokannasta:
cd ..
tar --gzip -cvf uusi-2019-01-28.tar.gz DIR
mysqldump -uUSER -pPASS DB | gzip > ~/uusi-2019-01-28.sql.gz

missä DIR on sivuston nimi, USER on tietokantakäyttäjän nimi, PASS on tietokannan salasana ja DB on tietokannan nimi.

14. Siirrä päivitetty sivusto ja tietokanta www-palvelimelle:
scp uusi-2019-01-28.tar.gz uusi-2019-01-28.sql.gz HOST:

missä HOST on www-palvelimen nimi.

15. Kirjaudu www-palvelimelle SSH:lla

16. Pura tietokantakopio www-palvelimella (Nettihotelli.fi:n palvelimilla käytä hallintapaneelia):
gunzip -c uusi-2019-01-28.sql.gz | mysql -uUSER -pPASS DB

missä USER on tietokantakäyttäjän nimi, PASS on tietokantakäyttäjän salasana, DB on tietokannan nimi.

17. Pura koodit www-palvelimella
cd /var/www
rm -fr DIR
gunzip -c ~/uusi-2019-01-28.tar.gz | tar xvf -

missä /var/www on Apachen juurihakemisto ja DIR on hakemistonimi palvelimella.

18. Korjaa tiedostojen oikeudet, jos www-palvelimella käytetään mod_php:tä:
cd DIR
chmod -R g+rw .
chgrp -R www-data web/sites/default/files
chgrp -R www-data web/sites/default/private
find web/sites/default/files -type d -exec chmod g+xs {} \;
find web/sites/default/private -type d -exec chmod g+xs {} \;
find web/sites/default/files -type d -exec setfacl -dm g::rwx {} \;
find web/sites/default/private -type d -exec setfacl -dm g::rwx {} \;
chmod 444 web/sites/default/files/.htaccess

missä DIR on kohdassa 17 luotu hakemisto palvelimella ja www-data on Apachen ryhmä, jolla on kirjoitusoikeus tiedostoihin.

19. Kirjaudu sisään Drupaliin www-palvelimella ja tarkista, että kaikki toimii

20. Lopuksi ota huoltotila pois päältä ja poista tarpeettomat gz tiedostot