tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

WordPressin siirto serveriltä toiselle

Jos joutuu siirtämään WordPress-sivuston web-hotellista toiseen, eikä ole mahdollista käyttää SSH:ta, niin muuttotyökalut rajoittuvat hyvin pitkälle backup-tyyppisiin työkaluihin. Mutta jos pääset (windows-maailmassa) serverille esimerkiksi PuTTY:llä ja komento rsync --help antaa nipun ohjeita, niin elämäsi helpottuu todella. Jos lisäksi pääset komentoriviltä käyttäämään tietokantaasi, niin tulevaisuus on todella valoisa – mutta cPanelissakin voi tietokannan hoitaa. Kun siirron tekee rsyncillä, niin säästää aivan tolkuttomasti aikaa vaivaa.

Toki sivuston voi hieman vastaavalla tavalla siirtää käyttämällä FTP:tä ja cPanelia. Siirretään ensin koko hakemistorakenne kaikkine tietoineen omalle koneelle ja sitten uuteen paikkaan. Tehdään cPanelissa tietokantadumppi (eli kopio) wordpressin käyttämästä tietokannasta, siirretään se omalle konelle ja sitten uuden osoitteen cPanelissa tehdään sitten siitä kopio. Laitetaan wp-config.php -tiedostoon uudet tiedot ja homma on sillä selvä. Ainakin periaatteessa. Luultavasti joudut säätämään web-hakemistosi omistajan, joka muuttui rootille FTP:n myötä, ja myös hakemistojen luku/kirjoitus/suoritus-oikeudet täytyy laittaa paikalleen. Ei päättömän kova homma, mutta aikaa palaa, jos sivustolla on hiukankaan kokoa. Rsync hoitaa homman kotiin, jos ei ihan sekunneissa, niin minuuteissa ainakin.

Ohjeiden lähtötilanne on:

  • sivuston URL ei muutu
  • Ubuntu, Apache2 ja MySQL
  • SSH
  • root-oikeudet
  • ei web-hotelliympäristöä

Jos, tai kun, sinulla on erilaisempi ympäristö, niin sovella. Perusteet ja rsyncin muoto eivät muutu mihinkään, mutta esimerkiksi hakemistot saattavat olla erilaisia.

Siirto toiselle serverille

Itseasiassa siirto on se vähäisin tehtävä työ. Eniten aikaa menee alustaviin töihin. Oletan, että sinulla on kunnossa itse serveripuoli. Eli virtual host laitettuna, MySQL pyörii jne.

Pohjustus

Aseta domainin nimipalvelimet osoittamaan uuteen paikkaan. Niiden päivittymiseen menee sen verran kauan, että ehdit tekemään siirron valmiiksi ennen kuin ensimmäinenkään kävijä ohjautuu uudelle serverille.

Riippuu aivan miten hallitset domainiasi miten se on tehtävä. Jos domainisi on esim. name.com’in hallussa, niin laita siellä domainin asetuksista se nimipalvelimet, joita uusi paikka käyttää. Tai jos olet Louhen asiakas, niin mene asetuksiin, klikkaa domainit ja vaihda nimipalvelin niihin, joita uusi paikkaa käyttää. Periaatteessa voit jättää nimipalvelimet rauhaankin ja säätää vain DNS-tietoja, mutta jos siirryt johonkin VPS-palveluun, kuten Amazonin EC2, Google Cloudiin tai DigitalOceaniin, niin sinun täytyy vaihtaa tilalle heidän käyttämänsä nimipalvelimet.

Asenna uudessa paikassa DNS-tiedot. Ota mallia vanhasta paikasta, mutta muista käyttää IP-osoitteina uuden paikan antamaa IP-osoitetta. Jos kopypeistaat vanhat, niin kävijät ohjautuvat takaisin entiseen (kyllä, minä olen joskus onnistunut tuonkin tekemään…).

Kirjaudu PuTTY:llä uuteen paikkaan. Tee sinne MySQL-kanta. Jos laitat samat tiedot kuin vanhassa paikassa, niin pääset helpoimmalla.

mysql -u root -p

Anna rootin salasana,

Tehdään uusi tietokanta, Vaihda wordpress oikeaksi. Sinun ei tarvitse kirjoittaa isoilla kirjaimilla. Ne ovat tässä vain erottamassa komennot niistä tiedoista, jotka sinun pitää antaa. Muista puolipiste aina viimeiseksi. Jos unohdat sen, ja täräytät enteriä, niin ainoa mitä tapahtuu on uusi mysql-kehoite odottamassa. Anna silloin siihen puolipiste, niin kaikki on ok.

mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Tehdään käyttäjä, annetaan salasana ja myönnetään kaikki oikeudet tietokantaa. Muista vaihtaa wordpress, tunnus ja salasana oikeiksi.

mysql> GRANT ALL ON wordpress.* TO 'tunnus'@'localhost' IDENTIFIED BY 'salasana';

Nollataan eräällä tavalla cache ja poistutaan MySQl:stä.

mysql> FLUSH PRIVILEGES;
mysql> EXIT;

Siirto

Pysytään vielä vanhassa osoitteessa,

Siirrytään web-hakemistoon. Ei se pakko ole, mutta helpottaa hieman hetken kuluttua, kun ei tarvitse kohdehakemistolle kirjoittaa koko polkua. Laiska säästää vähässäkin.

cd /var/www/html

Jos sinulla on virtual host, niin polku voi myös olla

cd /var/www/EXAMPLE.COM/public_html

Tehdään tietokantadumppi. Vaihda database_name sille nimelle, jossa wordpressin data on.

mysqldump -u root -p -C -Q -e --create-options database_name > database_name.sql

Yksinkertaisempikin komento kuulemma tekee saman. En tiedä, olen aina käyttänyt tuota pidempää.

mysqldump -u root -p database_name > database_name.sql

On kolmaskin tapa, joka säästää hieman vaivaa – mutta vain vähän. Tehdään dumppi ja asennetaan se suoraan uuden saitin tietokantaan. Edellä olevahan olettaa, että tietokantadumppi on tiedostona muiden joukossa, siirtyy sitten uuteen osoitteeseen ja kopioidaan siellä sitten käyttöön. Näin se hoidetaan paikalleen kertaheitolla (ja disclaimer, en ole tehnyt tätä koskaan WordPressin siirrossa, mutta kylläkin aina Moodlen kanssa; tuskin niillä eroa on):

mysqldump --allow-keywords --opt -uroot -psalasana DATABASE | ssh root@ip-osoite "mysql -uroot -psalasana DATABASE"

Laita vanhassa osoitteessa sivusto huoltotilaan. Jos kävijät eivät pääse sivustolla tekemään mitään ihmeellistä, niin tämä on vain merkki – kun jossain vaiheessa siirron jälkeen sivusto ei olekaan enää huoltotilassa, niin nimipalvelimet ovat muuttuneet (ainakin sinulle). Verkkokaupoissa huoltotila on tietysti aivan ehdoton. Kannattaa siis ehkä tehdä muutto hiljaisena aikana.

Siirrytään takaisin uuteen osoitteeseen. Mennään taas web-hakemistoon, niin säästetään hieman näppäimistöä myöhemmin.

cd /var/www/html

Siirretään web-hakemiston sisältö vanhasta uuteen. Nyt siirtyy koko wordpress, pluginit, tyyli, omat lataukset, juuri tekemäsi tietokannan kopio jne. Kaikki kerralla.

Vaihda polku siihen, joka sinulla on vanhassa paikassa. Uuden paikan kohdetta, eli missä nyt ollaan, polkua ei tarvitse antaa, vaan piste tarkoittaa sitä missä nyt ollaan. Vaihda vanha_ip vanhan serverin IP-osoitteksi. Voit käyttää sen tilalla host-nimeä, jos tiedät sen.

sudo rsync -avz -e ssh root@vanha_ip:/var/www/html/ .

Sinulta kysytään haluatko jatkaa. Vastaa siihen yes – huomaa, pelkkä y ei kelpaa. Seuraavaksi joudut antamaan vanhan osoitteen rootin salasanan.

Sitten vain ihmettelet. Siirto ei kestä kauaa isollakaan saitilla, koska mikään ei kierrä sinun koneesi kautta.

Jos siirrätkin vanhalta uuteen, niin rsync muuttuu hiukan:

sudo rsync -av -e ssh vanhan_polku/ root@uusi_ip:/polku/uuteen/

Vielä puuttuu tietokanta. Mutta jos aiemmin asensit jo tietokannan vanhasta uuteen rsyncin avulla, niin tätä ei tietenkään tarvitse enää tehdä.

mysql -u root -p database_name < database_name.sql

Se oli siinä, jos kaikki meni kuten pitikin. Nyt kannattaa vielä kerran tarkistaa, että wp-config.php on oikein. Ja koska ollaan edelleen web-hakemistossa, niin simppelisti:

sudo nano wp-config.php

Loppuhommat

rsync pitäisi pitää omistajat ja oikeudet paikallaan, mutta toki ne kannattaa varmistaa. Se on sitten eri asia, että mitkä oikeudet ovat järkeviä pitää. Jos googletat, niin löydät tuhottomasti erilaisia suosituksia. Muistisääntönä voi lähes pitää, että jos jutussa on mainittu turvallisuus, niin tiedosto-oikeudet ovat sellaisia, että pluginien ja teeman päivitys ei onnistu. Toki on hyvä olla varovainen, mutta minä en jaksa joka kerta mennä erikseen sallimaan kirjoitus ja päivityksen jälkeen taas kiristää asetuksia.

Varmistetaan, että hakemistot ja tiedostot omistaa Apache, ei root.

sudo chown -R www-data:www-data /var/www/html

Laitetaan hakemistoille oikeuksiksi 644 ja tiedostoille 755. Jos haluat tiukempaa, niin voit laittaa 640 ja 750.

sudo find /var/www/html/ -type d -exec chmod 750 {} \;
sudo find /var/www/html/ -type f -exec chmod 640 {} \;

Saitin toimivuuttahan et pääse kokeilemaan ennen kuin nimipalvelimet ovat muuttuneet. Joten jos laitoit sivusi huoltotilaan, ja näet sen edelleenkin, niin olet vanhassa paikassa. Jos sivusto on auki, niin olet uudessa.

Tosin, jos sinulle on SSL-sertifikaatti, niin jo pelkästään tympeä ilmoitus sivustosi turvattomuudesta ja kuinka nyt yritetään varastaa luottokorttitiedot, kertoo nimipalvelimien vaihtuneen. Mehän siirsimme vain WordPressin tietoineen, mutta emme SSL-sertifikaatin tietoja. Jos tiedät missä ne ovat, niin voit käyttää rsync siirtoa niihinkin ja laittaa tiedot kohdalleen Apachessa. Tai jos käytät Let’s Encryptiä Apachella, niin komennat:

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

Homman pitäisi olla valmis ja kaiken toimivan. Jos ei toimi, niin varmista, että seurasit kaikkia vaiheita ja sen jälkeen googletat mitä virhe tarkoitti. Jos etusivu toimii ja pääset hallintaan, mutta kaikki muu antaa error 404, niin siihen löytyy ohjeet.