Migrácia webu cez SSH
Existuje veľa spôsobov, akými sa dá premigrovať webstránka, ale najrýchlejší z nich je migrácia webstránky cez SSH 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.
Skôr než začneme
Skôr než začneme potrebujete mať:
Na začiatok Vám môže byť nápomocný návod Základné príkazy SSH a práca s PuTTY.
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
- Absolútnu cestu k priečinku novej domény
- Spustenie skriptu
- Zmena url adresy a absolútnych ciest (pomocou wp search-replace ak ide o WordPress)
- Zmena url adresy (ak 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
Skript priložený nižšie použijeme len pre vysvetlenie (všetko čo je napísané hrubým písmom sú len pomocné poznámky a nie sú súčasťou skriptu). 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.
#!/bin/bash
PHPBIN='/usr/lib64/php7.4/bin/php'
HOST='old.ftp.host' #– pôvodný host FTP
USER='odl.ftp.user' #- pôvodné meno FTP
PASSWORD='old.ftp.password' #– pôvodné heslo FTP
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ť
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.3. Údaje k pôvodnej databáze
Údaje k pôvodnej databáze zistíte u Vášho súčasného hostingového poskytovateľa, alebo z konfiguračného súboru, ku ktorému sa dostanete 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: app/config/parameters.php v adresári app/config/
- Konfiguračný súbor pre Opencart: config.php v adresári web/ a v adresári admin/
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.4. Absolútna 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 koreňovom adresári 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 absolútnu cestu k adresáru web. Tú potom použijete v skripte.
Celú absolútnu cestu vložte do skriptu:
LOCAL_DIR='/var/www2/pXXXX/nazov_novej_domeny/web' #–adresár kam sa bude pôvodný web migrovať
Vedeli ste že?: V putty funguje kopírovanie inak ako sme zvkynutí vo Windowse.
CTRL + C - iba vyznačíte to, čo chcete skopírovať (nič viac).
CTRL + V - klik pravým tlačidlom 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ň 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.
Ak kopírujete WordPress web a použili ste skript pre WordPress, tak na konci migrácie Vám vypíše informácie 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.
V putty zadávame v adresári web (tam, kde máme prekopírovaný web) 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á absolútna cesta k niektorým súborom.
Príklad absolútnej cesty: /var/www2/pXXXX/nazov_domeny/web/content/uploads/nazov_suboru
Túto absolútnu cetu treba zmeniť pomocou príkazu wp search-replace rovnakým spôsobom, ako sme menili starú URL adresu za novú (wp search-replace [stará absolútna cesta] [nová aboslútna cesta]).
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.
Všetky cesty v databáze musíte zmeniť manuálne v samotnej databáze.
Č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"