Julkaisu

Dudella ei tehdä julkaisuja lähtökohtaisesti iltapäivisin ja perjantaisin. Jos jokin menee pieleen, on hyvä että toimistolla on vielä työntekijöitä ja kukaan ei joudu korjailemaan asioita liiaksi työaikojen ulkopuolella. Paras julkaisuajankohta on aamusta tai aamupäivästä ma-ke-akselilla.

Huomaathan, että tätä opasta käytetään ainoastaan silloin kun asiakkaan sivut julkaistaan Duden palvelimella. Muussa tapauksessa toimitaan tilannekohtaisesti.

Miten deploy toimii

Deployn automatisointi tapahtuu Capistranon avulla, joka on osa digitoimisto/dudestack-kokonaisuutta. Ensimmäinen deploy suoritetaan aina Capistranon työkalulla, mutta esim. pienet teemapäivitykset hoidetaan suoralla sftp- tai rsync-yhteydellä.

Julkaisut vanhaan projektiin

Jatkokehitykset, freesaukset yms. hoidetaan suoralla sftp- tai rsync-yhteydellä jo aiemmin deployattuun projektiin. Isommat releaset tehdään uudella cap production deploylla.

Muutosten myötä tulee muistaa ngx-pagespeed-välimuistin tyhjennys:

sudo rm -rf /tmp/pgsp/v3/domain.fi

Uuden julkaisun vaiheet

Duden julkaisutoimenpiteet eli deploy on monivaiheinen ja varsinaista tiedonsiirtoa ja kansiorakennetta lukuunottamatta (Capistrano) enimmäkseen manuaalinen. Käsipelillä asioiden tekemisellä pyrimme varmistamaan että kaikki on varmistettu ja menee oikein. Kokonaisuudessaan vaiheisiin kuluu testausta lukuunottamatta aikaa noin varttitunti.

26.4.2018 eteenpäin vaiheet 1, 2 on automatisoitu scripteihin (huomaathan käyttää bashia sh sijaan, sillä ubuntun sh ei tue read-komentoa).

1. Deploy-asetustiedoston luominen paikalliseen ympäristöön

digitoimisto/dudestackin aloitusscripti (lisää kohdassa Projektin aloitus) määrittää oletuskonffit valmiiksi, mutta tuotannon conffiin saattaa joskus tulla muutoksia, joten se tarkistetaan aina erikseen.

Avaa projektikansion sisällä oleva config/deploy/production.rb. Jos tiedostoa, ei ole, luo oletustiedostot menemällä Terminalilla projektikansioosi, esimerkiksi cd ~/Projects/project ja ajamalla cap install. Tämän jälkeen nappaa uusin deployconfig Google Drivestä hakemiston Dude/Palvelin/Deployconfigs (latest)/deploy/production.rb alta. Valitse kaikki, kopioi ja liitä projektin alla olevaan avattuun production.rb-tiedostoon.

Korvaa tiedostosta kaikki DOMAIN -tekstit projektin oikealla päädomainilla, esim. asiakas.fi. Täytä myös käyttäjätunnuksesi ja salasanasi.

Tuplatsekkaa, että komennot ovat kunnossa, etenkin testiympäristön ja staging (vaiheessa.fi) osoitteet.

2. Alustavan deployn ajaminen

Siirry Terminalilla projektikansioosi, esimerkiksi cd ~/Projects/project ja aja deploy-komento seuraavasti:

cap production deploy

Saat viestin: ERROR linked file /var/www/asiakas.fi/deploy/shared/.env does not exist, tämä on normaalia ja kuuluu asiaan.

3. Tuotantoympäristön asettaminen tietokantaa varten

1. Avaa paikallisen projektin .env-tiedosto ja muokkaa siitä WP_ENV=production DB_HOST=ghostin tai craftin paikallinen IP-osoite tähän (craftin tietokantapalvelin on beardfish ja paikallinen IP on 192.168.0.4, ghostin tietokantapalvelin on faith ja paikallinen IP on 192.168.0.6).
2. Lisää DB_USER ja DB_NAME-kohtiin esimerkiksi projektin nimi. Jätä salasana toistaiseksi tyhjäksi. Vaihda WP_HOME ja WP_SITEURL -kohtiin projektin oikea tuotanto-osoite, huom! http:// tässä vaiheessa, ei https://. SSL-sertifikaatti nimittäin asennetaan myöhemmässä vaiheessa, sitten kun sivut näkyy ulkomaailmalle.

Tässä vaiheessa .env-tiedoston pitäisi näyttää jotakuinkin tältä:

DB_NAME=projektinnimi
DB_USER=projektinnimi
DB_PASSWORD=
DB_HOST=192.168.0.6

WP_ENV=production
WP_HOME=http://www.asiakas.fi
WP_SITEURL=http://www.asiakas.fi/wp
AUTH_KEY=...

Älä tallenna tiedostoa paikallisen tiedostosi päälle, ota se vaan talteen! jätä auki tässä vaiheessa, luodaan seuraavaksi kannan salasana .env-tiedostoa varten.

3. Seuraavaksi kirjaudu tietokantapalvelimelle seuraavasti. Kirjaudu ensin valitulle edustapalvelimelle (ghost.dude.fi, craft.dude.fi), aliaksella craft tai ghost, jos olet luonut sellaisen, jos taas et, perinteisesti ssh käyttäjänimesi@185.87.110.9 (ghost), ssh käyttäjänimesi@185.87.110.7 (craft).

4. Kirjauduttuasi edustapalvelimelle, kirjaudu sitä kautta tietokantapalvelimelle. Jos käytät craftia, kirjaudu beardfish-tietokantapalvelimelle komennolla ssh käyttäjätunnus@192.168.0.4, jos taas ghostia, kirjaudu faith-tietokantapalvelimelle komennolla ssh käyttäjätunnus@192.168.0.6.

Kun olet palvelimella, kirjaudu tietokannan komentorivitulkille komennolla:

mysql -u root -p

Tämän jälkeen aja seuraavat komennot (ylöspäin painaminen helpottaa, sillä historiasta saat pohjan myös).

Luodaan ensin tietokanta projektille:

CREATE USER 'projektinnimi'@'192.168.0.7' IDENTIFIED BY 'TÄHÄN_1PASSWORDISSA_GENEROITU_VAIKEA_SALASANA';

Huom! IP-osoitteeksi tulee paikallinen IP, craftin on 192.168.0.5 ja ghostin 192.168.0.7.

Sitten lisätään oikeudet projektikohtaiselle käyttäjälle:

GRANT ALL PRIVILEGES ON projektinnimi.* TO 'projektinnimi'@'192.168.0.7';

Otetaan muutokset käyttöön:

FLUSH PRIVILEGES;

4. Tässä vaiheessa kopioi salasana talteen. Tätä salasanaa ei tallenneta mihinkään, edes 1Passwordiin. Liitä salasana auki jättämääsi tallentamattoman .env-tiedoston DB_PASSWORD -kohtaan.

5. Ellet jo ole, kirjaudu edustapalvelimelle (ghost.dude.fi, craft.dude.fi), aliaksella craft tai ghost, jos olet luonut sellaisen, jos taas et, perinteisesti ssh käyttäjänimesi@185.87.110.9 (ghost), ssh käyttäjänimesi@185.87.110.7 (craft).

Avaa muokkaukseen tiedosto, josta deploy-komento aiemmin herjasi, tämän näköisellä komennolla:

nano /var/www/asiakas.fi/deploy/shared/.env

Valitse kaikki auki olevasta .env-tiedostostasi ja liitä sisältö komentorivi-ikkunassasi auki olevaan tyhjään .env-tiedostoon. Tallenna näppäinyhdistelmällä CTRL + O ja poistu CMD + X.

4. Tietokannan luominen ja tuominen

1. Avaa Sequel Pro. Kirjaudu gunship -nimiselle staging palvelimelle (tunnukset ja Sequel Pro -asetukset 1Passwordista ja kollegoilta), valitse työstössä olevan projektin tietokanta, valikosta File > Export….

2. Kirjaudu valitasemallesi tuotantopalvelimelle (craft tai ghost, mainittu aiemmin), valitse vasemman ylälaidan pudotusvalikko ja sieltä Add Database…, kirjoita projektin nimi (sama mikä .env DB_NAME kohdassa), valitse kanta ja tuo kanta valikosta File > Import….

Tietokanta on nyt kunnossa ja voidaan siityä eteenpäin.

5. Projektin koodipohjan julkaiseminen (deploy) palvelimelle

Aja uudestaan deploy-komento:

cap production deploy

Tällä kertaa komento meneee läpi sujuvasti. Komento ajaa WordPressin, teemat ja lisäosat sisään, sekä korvaa dev- ja staging-urlit tuotannon urlilla (WP-CLI).

Sillä välin kun deployscripti on ajossa, voidaan siirtyä mediakirjaston siirtämiseen.

6. Mediakirjaston vieminen palvelimelle

1. Avaa FileZilla (tai muu käyttämäsi SFTP-ohjelma) ja kirjaudu staging-palvelimelle (gunship). Mene /var/www/projektinnimi/shared/media ja kopioi uusimmat mediakirjaston tiedostot sekä backup-kansio paikalliseen projektiisi.

2. Vedä media-kansion kuvat (ei backup) ImageOptimin läpi.

3. Kirjaudu tuotantopalvelimelle, jonne projekti on deployattu (craft tai ghost) ja kopioi mediatiedostot tuotantoon /var/www/asiakas.fi/public_html/media.

7. Virtualhostin luominen tuotantopalvelimelle

Tässä vaiheessa sivuston tiedostot ja tietokanta ovat paikallaan, mutta mikään muu web-palvelimella ei ole vielä kunnossa tai vastaa osoitteisiin, koska vhostia ei ole luotu. Se tapahtuu automatisoidusti seuraavasti:

sudo bash /etc/bin/release-site.sh

Scripti käytännössä kysyy pelkästään päädomainia ilman www:tä (esimerkiksi asiakas.fi) ja luo nginxiä varten tiedostot kansioihin /etc/nginx/sites-available/, symlinkittää ne käyttöön /etc/nginx/sites-enabled/, luo poolin php-fpm:lle ja käynnistää palvelimet uudestaan sen jälkeen kun on kysynyt sinulta näkyikö testikomennoilla virheitä.

8. Sivuston toiminnan testaaminen paikallisesti

Ennen sivut julkaistaan maailmalle päivittämällä domainin nimipalvelintietueita, on hyvä tehdä lopputestaukset ja varmistaa että vhost toimii. Se tehdään muokkaamalla omalla koneella hosts-tiedostoa:

sudo nano /etc/hosts

Lisää tiedoston pohjalle IP (ghost tai craft) ja sen perään asiakkaalla käytössä olevat domainit. Craftin tapauksessa rivi näyttäisi tältä:

185.87.110.7 asiakas.fi www.asiakas.fi

Tallenna näppäinyhdistelmillä ctrl + o ja poistu ctrl + x näppäimillä.

Nyt sinun pitäisi päästä katsomaan sivustoa kun menet selaimella asiakkaan domainiin. Saattaa vaatia selaimen refreshausta tai jopa ihan tuoretta selainta, ei välttämättä ihan heti haista muutosta hosts-tiedostosta.

10. Oikeudet kuntoon

Deploy-komennon myötä saattaa usein jäädä esimerkiksi mediakirjaston oikeudet eri käyttäjälle, joten kannattaa ajaa automatisoitu oikeudenkorjaus script (joka pyörii säännöllisesti cronissa, mutta vain kaksi kertaa päivässä):

sudo bash /etc/bin/correct-permissions.sh

11. Ajolista

Käy sivut läpi niin edustan puolella kuin wp-adminissakin ja katso että kaikki toimii. Sitten siirry käymään tarkistuslistaa läpi.

Ennen julkaisua ja julkaisun jälkeen käydään aina tarkistuslista huolellisesti läpi. Listaa päivitetään Google Sheetiin, josta se ladataan Todoist Template-yhteensopivassa .csv-muodossa ja tuodaan projektiin mukaan. Tässä vaiheessa on hyvä avata lista, ohje:

Lataa lista Google Sheetistä. Julkinen versio selkomuodossa ja kommentointioikeuksilla.

12. Domainin ja nimipalvelinten ohjaus

Kun ajolista on käyty läpi, on aika julkaista sivusto maailmalle. Tämä vaihe koskee vain ylläpitoasiakkaita, joiden domain on Duden hallinnassa.

1. Kirjaudu Cloudflareen. Mene kohdasta Menu > domainisi.fi.
2. Kirjaudu registry.domain.fi tai jos domain on jonkun muun kuin .fi päätteinen, namecheap.com/myaccount/login. Mene domainin asetuksiin ja päivitä nimipalvelimet ohjeiden mukaisesti (chan.ns.cloudflare.com ja cody.ns.cloudflare.com).
3. Paina Cloudflaren kautta Re-Check -nappia.
4. Poista tässä vaiheessa /etc/hosts -tiedostostasi aiemmin asetettu rivi. Tässä vaiheessa odotellaan että sivusto tulee näkyviin.
5. Lisää A-recordit. @ ja www -tietueet laitetaaan osoittamaan valitulle palvelimelle (craft: 185.87.110.7 tai ghost: 185.87.110.9).
6. Odota kun domain tulee voimaan.

13. HTTPS-sertifikaatin asentaminen

Kun sivusto näkyy maailmalle ja nimipalvelimet ovat päivittyneet (tämän voit tarkistaa kirjautumalla craftille tai ghostille ja pingaamalla domainia komennolla ping asiakas.fi, jos IP ei ole craftin tai ghostin, ei muutos ole vielä voimassa)

Tämäkin työ on automatisoitu ja homman saa hoidettua yhdellä komennolla:

sudo bash /etc/bin/ssl.sh

Seuraa ohjeita tarkasti. Komento generoi sertifikaatin Let’s Encryptillä, eli käytännössä ajaa certbot-auto-komennon listatuille domaineille.

Kun komento on ajettu, sivusto toimii oikein https-osoitteella ja ohjaa http:n https:ään automaattisesti.

14. Ohjaa asiakas.vaiheessa.fi tuotantoon

Jos sivustoa ei heti jatkokehitetä, kannattaa staging-osoite ohjata tuotantoon siltä varalta että asiakas menee vahingossa tekemään näyttöversioon muutoksia, jotka eivät tule voimaan tuotantoversioon.

Ohjaus tehdään simppelillä php-tiedostolla, jonka saat kopioitua esimerkiksi edellisestä projektista. Kirjaudu gunshipille komentorivillä ja kopioi edellisestä projektista tai alta tiedosto redirect-to-production.php projektin mu-plugins -kansioon:

<?php
/**
 * Redirect staging site to production. Place this file to mu-plugins directory.
 *
 * Plugin Name: Redirect site to production
 * Plugin URI:
 * Description:
 * Version: 1.0.0
 * Author: Digitoimisto Dude Oy, Timi Wahalahti
 * Author URI: https://www.dude.fi
 * Requires at least: 4.7
 * Tested up to: 5.2
 * License: GPLv3
 * License URI: https://www.gnu.org/licenses/gpl-3.0.html
 *
 * @Author:                         sippis, Digitoimisto Dude Oy (https://dude.fi)
 * @Date:                           2019-05-15 11:48:23
 * @Last Modified by:   sippis
 * @Last Modified time: 2019-05-15 11:50:20
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit();
}

add_action( 'init', function() {
    wp_redirect( 'https://asiakas.fi' );
} );

15. Loppusilaukset ja viimeiset testaukset

Tässä vaiheessa on hyvä rämpätä vielä sivusto kertaalleen läpi. Katso myös ajolistan Julkaisun jälkeen listan kohdat.

Onnittelut, olet juuri julkaissut sivuston!

Viimeksi muokattu käyttäjän GitHub toimesta viestillä "Update julkaisu.md", katso muutos b642071 GitHubissa. Näytä versiohistoria.

13.9.2019 06:35:23 Muokattu käyttäjän GitHub toimesta viestillä "Update julkaisu.md", katso muutos b642071 GitHubissa.

28.8.2019 12:21:46 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Esimerkkipingin korjauss", katso muutos c2168ae GitHubissa.

28.8.2019 12:13:38 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Sanavirhe", katso muutos 8d16285 GitHubissa.

28.8.2019 12:10:03 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Typo", katso muutos a5696a9 GitHubissa.

27.8.2019 09:30:34 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Lisäys cachesta ja vanhaan projektiin julkaisusta", katso muutos 2e56fa6 GitHubissa.

27.8.2019 09:27:49 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Tarkemmat julkaisun vaiheet ja ajan tasalle päivittäminen", katso muutos 61ee86b GitHubissa.

7.6.2019 09:36:15 Muokattu käyttäjän GitHub toimesta viestillä "Update julkaisu.md", katso muutos 6199764 GitHubissa.

20.5.2019 08:36:56 Muokattu käyttäjän Roni toimesta viestillä "Syncing _pages/julkaisu.md from WordPress at https://handbook.dude.fi/wp (Dude Handbook) - wpghs", katso muutos 77a8f98 GitHubissa.

8.5.2019 11:55:24 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Tarkistuslistan siirtäminen Google Sheets alle", katso muutos c2db221 GitHubissa.

30.4.2019 12:42:35 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "pa11y-ci -komennosta tieto checklistiin", katso muutos c1f0546 GitHubissa.

3.4.2019 12:06:38 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "HTML validator", katso muutos 662dcb5 GitHubissa.

3.4.2019 11:51:09 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Ohjeet somejakofallback-kuvalle", katso muutos 798f58a GitHubissa.

3.4.2019 11:47:06 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Linkit", katso muutos 2330400 GitHubissa.

3.4.2019 11:45:20 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Checklist ajan tasalle", katso muutos cb833ea GitHubissa.

8.1.2019 09:29:00 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Tallennus", katso muutos 708e694 GitHubissa.

8.1.2019 09:28:04 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Merge conflict", katso muutos a4c0173 GitHubissa.

8.1.2019 09:25:46 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Redis ym. checklistiin", katso muutos ff5a8e1 GitHubissa.

8.1.2019 09:23:28 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Varmuuskopiokomennon linkkaus", katso muutos 4775fee GitHubissa.

2.1.2019 09:18:41 Muokattu käyttäjän Timi Wahalahti toimesta viestillä "Syncing _pages/julkaisu.md from WordPress at https://handbook.dude.fi/wp (Dude Handbook) - wpghs", katso muutos d59a7a7 GitHubissa.

2.1.2019 08:46:34 Muokattu käyttäjän Timi Wahalahti toimesta viestillä "Syncing _pages/julkaisu.md from WordPress at https://handbook.dude.fi/wp (Dude Handbook) - wpghs", katso muutos b38753c GitHubissa.

21.12.2018 09:10:19 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Mailchimp", katso muutos 1cc10e5 GitHubissa.

28.11.2018 13:08:20 Muokattu käyttäjän GitHub toimesta viestillä "Lisää kohta SEO jutuista julkaisun yhteydessä", katso muutos e09ec88 GitHubissa.

14.11.2018 19:29:52 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Lisäys julkaisun checklistaan", katso muutos f166240 GitHubissa.

14.11.2018 16:53:37 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Lisää validoinnista", katso muutos 3350683 GitHubissa.

4.9.2018 11:51:47 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Lisäys, jotta muistaa disabloida esim. haun simppeleiltä saiteilta", katso muutos 612a7cb GitHubissa.

4.9.2018 11:51:04 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Trello-kortti hostingeihin checklistalle", katso muutos cce70a2 GitHubissa.

20.8.2018 06:02:32 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Backuppaus checklistaan", katso muutos 3e1a6d9 GitHubissa.

26.4.2018 11:36:50 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Huomio bashista", katso muutos 029800b GitHubissa.

26.4.2018 11:36:21 Muokattu käyttäjän Roni Laukkarinen toimesta viestillä "Muistioon scriptit", katso muutos d1fb1a8 GitHubissa.

25.4.2018 13:59:54 Muokattu käyttäjän Roni toimesta viestillä "Syncing _pages/julkaisu.md from WordPress at https://handbook.dude.fi/wp (Dude Handbook) - wpghs", katso muutos 86e342c GitHubissa.

Tämä Handbook kertoo kuinka me teemme asioita Dudella, mutta saa ottaa koppia myös omaan toimintaan. Emme takaa että kaikki meidän jutut toimivat muilla samalla tavalla. Ole mitä olet! Kaikki on avointa GitHubissa: digitoimistodude/handbook