Migrácia webu cez SSH
Existuje veľa spôsobov, akými sa dá premigrovať webstránka, ale najrýchlejší z nich je premigrovať web cez Putty pomocou skriptu. Stačí správne vyplniť premenné a všetko ostatné vykoná skript.
V tomto návode si vysvetlíme celý postup migrácie webstránky cez SSH.
V tomto návode budeme postupovať bez preskakovania jednotlivých krokov, aby bol čo najpodrobnejší. Aj napriek tomu je určený pre pokročilejších úžívateľov, ktorí majú aspoň základné znalosti práce pomocou SSH.
Skôr než začneme potrebujete mať:
Postup
- Skopírovanie skriptu do wordového dokumentu
- Dohľadanie a doplnenie potrebných údajov do skriptu
- Doplnenie údajov k pôvodnému FTP
- Cestu k priečinku pôvodného webu
- Údaje k pôvodnej databáze
- Relatívnu cestu k priečinku novej domény
- Spustenie skriptu
- Zmena url adresy a relatívnych ciest (pomocou wp search-replace ak ide o wordpress)
- Zmena url adresy ( web nie je vo WordPresse)
1. Skopírovanie skriptu do wordu
Skopírujte si čistý skript, ktorý je na úplnom konci tohto návodu do wordu, kde ho budeme upravovať.
Vyberte si z dvoch možností podľa toho, či máte web postavený na WordPresse, alebo nie:
- Čistý skript pre WordPress
- Čistý skript pre web, ktorý nie je vo WordPresse
Vysvetlivky k skriptu
Tento skript priložený nižšie použijeme len pre vysvetlenie. Odporúčame skopírovať čistý skript, ktorý prikladáme na konci tohto návodu, aby sa nestalo, že zabudnete odstrániť komentáre, alebo iné popisy, ktoré by mohli narušiť správne fungovanie skriptu.
Všetko čo je napísané hrubým písmom sú len pomocné poznámky a nie sú súčasťou skriptu.
#!/bin/bash
PHPBIN='/usr/lib64/php7.4/bin/php'
HOST='old.ftp.host' #– pôvodný host
USER='odl.ftp.user' #- pôvodné meno
PASSWORD='old.ftp.password' #– pôvodné heslo
REMOTE_DIR='/nazov_starej_domeny/web' #–adresár, z ktorého sa bude migrovať
LOCAL_DIR='/var/www2/pXXXX/nazov_novej_domeny/web' #–adresár kam sa bude migrovať
DB_OLD_SERVER='old.sql.server' #- host starej databázy (bez portu)
DB_OLD_SERVER_PORT=3306 #- port k starej databáze
DB_OLD_DATABASE='olddatabase' #- názov starej databázy
DB_OLD_USER='olduser'#- používateľ starej databázy
DB_OLD_PASS='oldpass' #- heslo k starej databáze
DB_SERVER='sql2.hostcreators.sk' #- host novej databázy (bez portu)
DB_SERVER_PORT=3307 #- port novej databázy
DB_DATABASE='dXXXX_db' #- názov novej databázy
DB_USER='uXXXX_user' #- používateľ novej databázy
DB_PASS='XXXXXXXX' #- heslo k novej databázy
echo "Starting dump OLD database $DB_OLD_DATABASE to NEW database $DB_DATABASE"
mysqldump -h $DB_OLD_SERVER -P $DB_OLD_SERVER_PORT -u $DB_OLD_USER -p$DB_OLD_PASS --routines $DB_OLD_DATABASE > oldsqldump.sql #– iba ak prenášam aj databázu
mysql -h $DB_SERVER -P $DB_SERVER_PORT -u $DB_USER -p$DB_PASS $DB_DATABASE < oldsqldump.sql #– iba ak prenášam aj databázu
echo "Starting download $REMOTE_DIR from $HOST to $LOCAL_DIR"
lftp -u "$USER","$PASSWORD" $HOST <<EOF
# the next 3 lines put you in ftpes mode. Uncomment if you are having trouble connecting.
set ftp:ssl-force true
set ftp:ssl-protect-data true
set ssl:verify-certificate no
set ftp:list-options -a
# transfer starts now...
mirror --delete --verbose --parallel=10 $REMOTE_DIR $LOCAL_DIR;
exit
EOF
#(Nasledujúce4 riadky odkomentovať, len ak ide o wordpress)
#$PHPBIN /usr/local/bin/wp config set DB_HOST $DB_SERVER:$DB_SERVER_PORT --path=$LOCAL_DIR
#$PHPBIN /usr/local/bin/wp config set DB_NAME $DB_DATABASE --path=$LOCAL_DIR
#$PHPBIN /usr/local/bin/wp config set DB_USER $DB_USER --path=$LOCAL_DIR
#$PHPBIN /usr/local/bin/wp config set DB_PASSWORD $DB_PASS --path=$LOCAL_DIR
chmod -R g+rw $LOCAL_DIR
find $LOCAL_DIR -type d -exec chmod g+x {} +
#(Nasledujúce 4 riadky odkomentovať, len ak ide o wordpress)
#echo "WordPress Info"
#$PHPBIN /usr/local/bin/wp user list --path=$LOCAL_DIR
#$PHPBIN /usr/local/bin/wp plugin list --path=$LOCAL_DIR
#$PHPBIN /usr/local/bin/wp theme list --path=$LOCAL_DIR
echo "Transfer finished"
2.1. a 2.2. Údaje k pôvodnému FTP
Údaje k starému FTP nájdete u súčasného poskytovateľa hostingu vo Webadmine.
Potrebujete:
- host
- meno
- heslo
- cestu k priečinku web, ktorý idete migrovať - Zistíte ju cez FTP klienta, z ktorej si ju aj skopírujete (podľa obrázku nižšie).
Tieto údaje doplnte do skriptu:
HOST='old.ftp.host' #– pôvodný host
USER='odl.ftp.user' #- pôvodné meno
PASSWORD='old.ftp.password' #– pôvodné heslo
REMOTE_DIR='/nazov_starej_domeny/web' #–adresár, z ktorého sa bude migrovať
2.2. Údaje k pôvodnej databáze
Údaje k pôvodnej databáze zistíte z konfiguračného súboru, ku ktorému sa dostanete takisto cez FTP klienta:
- Konfiguračný súbor pre WordPress: wp-config.php v adresári web
- Konfiguračný súbor pre Joomlu: configuration.php v adresári web
- Konfiguračný súbor pre PrestaShop: settings.inc.php v adresári config
- Konfiguračný súbor pre Opencart: config.php v adresári web
- Konfiguračný súbor pre Shoptet: config.php v adresári web
K migrácii budete potrebovať nasledovné údaje k databáze:
- host pôvodnej databázy
- názov databázy pôvodnej databázy
- meno používateľa pôvodnej databázy
- heslo pôvodnej databázy
Tieto údaje vložte do skriptu:
DB_OLD_SERVER='old.sql.server' #- host starej databázy (bez portu)
DB_OLD_SERVER_PORT=3306 #- port k starej databáze
DB_OLD_DATABASE='olddatabase' #- názov starej databázy
DB_OLD_USER='olduser' #- používateľ starej databázy
DB_OLD_PASS='oldpass' #- heslo k starej databáze
2.3. Relatívna cesta k priečinku novej domény
Prihláste sa do putty pomocou prihlasovacích údajov do SSH.
Na migráciu webu cez SSH, budeme potrebovať iba základné príkazy.
Keď už ste prihlasení do SSH napíšte príkaz ls -la. Takto si necháte vypísať všetky priečinky, aj súbory, ktoré sa v roote vášho hostingového balíka nachádzajú.
Napíšte príkaz cd nazov_domeny. Týmto príkazom sa dostanete do priečinku vašej domény.
Takto isto postupujte, až sa dostanete do priečinku web, do ktorého budete kopírovať dáta z pôvodného FTP.
Skopírujte relatívnu cestu k adresáru web podľa obrázka nižšie. Tú potom použijete v skripte.
Celú relatívnu cestu vložte do skriptu:
LOCAL_DIR='/var/www2/pXXXX/nazov_novej_domeny/web' #–adresár kam sa bude migrovať
Pozor: V putty funguje kopírovanie inak ako sme zvkynutí vo Windowse.
CTRL + C - iba vysvietite to, čo chcete skopírovať (nič viac).
CTRL + V - klik pravým tlačítkom na myši.
3. Spustenie skriptu
Teraz sa nachádzate v priečinku web vašej domény. Treba, aby ste sa dostali o priečinok späť, kde budeme vykonávať samotnú migráciu. To dosiahnete napísaním príkazu cd .. (cd + dve bodky).
Tu si vytvoríme súbor, ktorý nazveme migracia.sh. Vytvoríme si ho napísaním príkazov nano migracia.sh. Tento príkaz (nano nazov_súboru) slúži pre editovanie vybraného súboru, ale pokiaľ taký súbor neexistuje, tak ho zároveň aj vytvorí.
Do súboru migracia.sh prekopírujeme skript, ktorý sme si predpripravili vo worde.
Následne zmeny uložíme klávesovou skratkou Ctrl + O, potvrdíme klávesou ENTER, stlačíme klávesovú skratku Ctrl + X, čím zatvoríme súbor migracia.sh a dostaneme sa späť do adresára našej domény.
Napíšeme chmod u+x migracia.sh a potvrdíme stlačením klávesy ENTER. Zadáme príkaz ./migracia.sh a stlačíme ENTER. Týmto príkazom sme sputili migráciu webu. Ako prvé sa začne zálohovať databáza a následne sa prekopíruje celý obsah vybraného adresára.
Pokiaľ kopírujete WordPress web a použili ste skript pre WordPress, tak na konci migrácie vám vypíše info o používateľoch, pluginoch, témach, ktoré sú vo WordPresse nainštalované.
4. Zmena url adresy pomocou wp search-replace (ak ide o wordpress)
Po skončení migrácie budú prekopírované dáta z FTP a takisto aj databáza, ale url adresy zapísané v databáze, budú nezmenené.
Tie zmeníme pomocou wp-cli príkazu wpsearch-replace, pričom potrebujeme obsiahnuť všetky varianty: http:// | https:// | http://www | https://www.
Do putty prejdeme do adresára web (tam kde máme prekopírovaný web) a zadáme príkaz:
wp search-replace http://stara_domena.sk http://nova_domena.sk
wp search-replace https://stara_domena.sk https://nova_domena.sk
wp search-replace http://www.stara_domena.sk http://www.nova_domena.sk
wp search-replace https://www.stara_domena.sk https://www.nova_domena.sk
Po každej variante stlačíme enter, čím spustíme príkaz.
Následne sa pirihláste do (novej) databázy a v tabuľke "options" treba skontrolovať, či niekde nebola natvrdo zadaná relatívna cesta k niektorým súborom.
Príklad relatívnej cesty: /var/www2/pXXXX/nazov_domeny/web/content/uploads/nazov_suboru
Túto relatívnu cetu treba zmeniť pomocou príkazu wp search-replace rovnakým spôsobom, ako sme menili starú URL adresu za novú.
Príklad:
wp search-replace /var/www4/pXXXX/nazov_starej_domeny/web/content/uploads/nazov_suboru /var/www2/pxxxx/nazov_novej_domeny/web/content/uploads/nazov_suboru
4.1. Zmena url adresy (web nie je vo WordPresse)
V prípade, že migrujete web, ktorý nie je vytvorený vo WordPresse, nebudú fungovať príkazy wp-cli, čiže ani wp search-replace.
URL adresy a prípadne aj relatívne cesty v databáze musíte zmeniť manuálne v samotnej databáze v tabuľke "options".
Čistý skript pre WordPress
#!/bin/bash
PHPBIN='/usr/lib64/php7.4/bin/php'
HOST=''
USER=''
PASSWORD=''
REMOTE_DIR=''
LOCAL_DIR=''
DB_OLD_SERVER=''
DB_OLD_SERVER_PORT=
DB_OLD_DATABASE=''
DB_OLD_USER=''
DB_OLD_PASS=''
DB_SERVER=''
DB_SERVER_PORT=
DB_DATABASE=''
DB_USER=''
DB_PASS=''
echo "Starting dump OLD database $DB_OLD_DATABASE to NEW database $DB_DATABASE"
mysqldump -h $DB_OLD_SERVER -P $DB_OLD_SERVER_PORT -u $DB_OLD_USER -p$DB_OLD_PASS --routines $DB_OLD_DATABASE > oldsqldump.sql
mysql -h $DB_SERVER -P $DB_SERVER_PORT -u $DB_USER -p$DB_PASS $DB_DATABASE < oldsqldump.sql
echo "Starting download $REMOTE_DIR from $HOST to $LOCAL_DIR"
lftp -u "$USER","$PASSWORD" $HOST <<EOF
# the next 3 lines put you in ftpes mode. Uncomment if you are having trouble connecting.
set ftp:ssl-force true
set ftp:ssl-protect-data true
set ssl:verify-certificate no
set ftp:list-options -a
# transfer starts now...
mirror --delete --verbose --parallel=10 $REMOTE_DIR $LOCAL_DIR;
exit
EOF
$PHPBIN /usr/local/bin/wp config set DB_HOST $DB_SERVER:$DB_SERVER_PORT --path=$LOCAL_DIR
$PHPBIN /usr/local/bin/wp config set DB_NAME $DB_DATABASE --path=$LOCAL_DIR
$PHPBIN /usr/local/bin/wp config set DB_USER $DB_USER --path=$LOCAL_DIR
$PHPBIN /usr/local/bin/wp config set DB_PASSWORD $DB_PASS --path=$LOCAL_DIR
chmod -R g+rw $LOCAL_DIR
find $LOCAL_DIR -type d -exec chmod g+x {} +
echo "WordPress Info"
$PHPBIN /usr/local/bin/wp user list --path=$LOCAL_DIR
$PHPBIN /usr/local/bin/wp plugin list --path=$LOCAL_DIR
$PHPBIN /usr/local/bin/wp theme list --path=$LOCAL_DIR
echo "Transfer finished"
Čistý skript pre web, ktorý nie je vo WordPresse
Tento skript môžete použiť, pokiaľ máte web naprogramovaný a nie je vytvorený v nijakom redakčnom systéme.
#!/bin/bash
PHPBIN='/usr/lib64/php7.4/bin/php'
HOST=''
USER=''
PASSWORD=''
REMOTE_DIR=''
LOCAL_DIR=''
DB_OLD_SERVER=''
DB_OLD_SERVER_PORT=
DB_OLD_DATABASE=''
DB_OLD_USER=''
DB_OLD_PASS=''
DB_SERVER=''
DB_SERVER_PORT=
DB_DATABASE=''
DB_USER=''
DB_PASS=''
echo "Starting dump OLD database $DB_OLD_DATABASE to NEW database $DB_DATABASE"
mysqldump -h $DB_OLD_SERVER -P $DB_OLD_SERVER_PORT -u $DB_OLD_USER -p$DB_OLD_PASS --routines $DB_OLD_DATABASE > oldsqldump.sql
mysql -h $DB_SERVER -P $DB_SERVER_PORT -u $DB_USER -p$DB_PASS $DB_DATABASE < oldsqldump.sql
echo "Starting download $REMOTE_DIR from $HOST to $LOCAL_DIR"
lftp -u "$USER","$PASSWORD" $HOST <<EOF
# the next 3 lines put you in ftpes mode. Uncomment if you are having trouble connecting.
set ftp:ssl-force true
set ftp:ssl-protect-data true
set ssl:verify-certificate no
set ftp:list-options -a
# transfer starts now...
mirror --delete --verbose --parallel=10 $REMOTE_DIR $LOCAL_DIR;
exit
EOF
chmod -R g+rw $LOCAL_DIR
find $LOCAL_DIR -type d -exec chmod g+x {} +
echo "Transfer finished"