CentminMod site & adatbázis migráció
- Linux
- 2025. február 15.
Tartalomjegyzék
CSF Firewall konfiguráció
Először megfelelően engedélyezd a forrás- és távoli szerver IP-címét, valamint az SSH portokat a CSF tűzfalban.
A forrásadat-szerveren add hozzá az alábbi sort az /etc/csf/csf.allow
fájlhoz, amely engedélyezi a TCP-kapcsolatokat az alapértelmezett 22-es SSH-porton a távoli szerver (111.222.333.444) felé. Ha a távoli szerver SSH-portja nem 22, módosítsd ennek megfelelően.
tcp|out|d=22|d=111.222.333.444
Majd indítsd újra a CSF tűzfal szolgáltatást:
csf -ra
A távoli szerveren add hozzá az /etc/csf/csf.allow
fájlhoz az alábbi sort, amely engedélyezi a TCP-kapcsolatokat a 22-es SSH-porton a forrásadat-szerver (1.2.3.4) felől:
tcp|in|d=22|s=1.2.3.4
Ezután indítsd újra a CSF tűzfal szolgáltatást:
csf -ra
Keygen.sh jelszómentes beállítás
Második lépésként állítsd be a keygen.sh
eszközt a forrásadat-szerveren (ahol az átmásolandó adatok találhatók).
mkdir -p /root/tools
cd /root/tools
git clone https://github.com/centminmod/keygen
Ezután generáld le az SSH-kulcspárt a keygen.sh
eszközzel. Ehhez szükséged lesz a távoli szerver IP-címére.
Állítsd be a változókat a terminálban a távoli szerver IP-címével, az SSH-porttal és egy megjegyzéssel a kulcs azonosítására. Ezek a változók csak az aktuális SSH-munkamenetben lesznek érvényesek.
remoteip=111.222.333.444
port=22
comment=mykey
remoterootpass=yourremoteserver_rootpassword
Ezután futtasd a keygen.sh
eszközt:
cd /root/tools/keygen
./keygen.sh gen rsa $remoteip $port root $comment $remoterootpass
Első csatlakozáskor az SSH kérni fogja a kapcsolat hitelesítését. Írd be:
The authenticity of host 'remoteipaddress (remoteipaddress)' can't be established.
ECDSA key fingerprint is 68:8x:2e:6d:c0:c1:7s:81:73:c0:7a:82:45:2e:1c:98.
Are you sure you want to continue connecting (yes/no)? yes
A generált kulcsok neve myX
formátumú lesz, ahol X egy automatikusan növekvő szám.
Privát kulcs: /root/.ssh/my1.key
Publikus kulcs: /root/.ssh/my1.key.pub
A privát kulcs megadásával SSH kapcsolatot létesíthetsz a távoli szerverrel:
ssh root@$remoteip -p 22 -i ~/.ssh/my1.key
A távoli szerveren az /root/.ssh/authorized_keys
fájlban megjelenik a generált kulcs az előzőleg megadott megjegyzéssel (mykey
):
cat /root/.ssh/authorized_keys
ssh-rsa AAAAB3....pOlOCB/UhEQ== mykey
A keygen.sh
teszteli a kapcsolatot
-------------------------------------------------------------------
Testing connection please wait...
-------------------------------------------------------------------
ssh [email protected] -p 22 -i /root/.ssh/my1.key 'uname -nr'
------ 5.14.0-503.23.2.el9_5.x86_64
-------------------------------------------------------------------
Setup source server file /root/.ssh/config
-------------------------------------------------------------------
Add to /root/.ssh/config:
Host my1
Hostname 111.222.333.444
Port 22
IdentityFile /root/.ssh/my1.key
IdentitiesOnly=yes
User root
#LogLevel DEBUG3
saved copy at /etc/keygen/logs/ssh-config-alias-my1-111.222.333.444.key.log
cat /etc/keygen/logs/ssh-config-alias-my1-111.222.333.444.key.log >> /root/.ssh/config
-------------------------------------------------------------------
Once /root/.ssh/config entry added, can connect via Host label:
my1
-------------------------------------------------------------------
ssh my1
Ebben leírja, hogy a forrás szerveren létrehozhatsz egy /root/.ssh/config
fájlt (ha még nem létezik) vagy, ha igen, akkor hozzá adhatod a végéhez az alábbi sorokat, amivel egy alias-t hozol létre így gyorsabban, az ssh my1
paranccsal is csatlakozhatsz a távoli szerverhez.
Rsync & mysqldump átvitele
Most elkezdhetjük az adatok átvitelét. A biztonság kedvéért ismét adjuk meg a változókat a terminalban és egészítsük ki az előzőekben létrehozott kulccsal.
remoteip=111.222.333.444
port=22
privatekey=my1.key
backupdir=/root/backupsql
DUMPOPT='-Q -K --max_allowed_packet=256M --net_buffer_length=65536 --routines --events --triggers --hex-blob'
CLIENTOPT='--max_allowed_packet=256M --net_buffer_length=65536'
Majd hozzuk létre a backup mappát:
mkdir -p $backupdir
Rsync adatok átvitele
Ez az adatátviteli folyamat feltételezi, hogy a távoli szerveren a Centmin Mod telepítve van, de még nincsenek létrehozva vhostok vagy MySQL-adatbázisok. Az is feltételezett, hogy a /root/.my.cnf
fájl be van állítva a MySQL root felhasználó jelszavával, amit a Centmin Mod telepítése automatikusan elvégez.
Fájlok másolása rsync segítségével
Az rsync -avzin
opciókkal fut, ahol:
-a
(archive) – megőrzi a jogosultságokat és tulajdonosi információkat-v
(verbose) – részletes kimenetet ad-z
(compress) – tömöríti az adatokat a gyorsabb átvitel érdekében-i
(itemize-changes) – megmutatja, milyen változtatásokat hajt végre-n
(dry-run) – tesztmód, amely nem visz át tényleges adatokat
Ha minden teszt (dry-run) megfelelően működik, távolítsd el az n
opciót, és használd -avzi
-ként a tényleges átvitelhez.
Megjegyzések
Az
/etc/csf/csf.conf
CSF tűzfal konfigurációs fájl átvitelét kikommenteztem, mert előfordulhat, hogy a forrás szerveren az IPSET le van tiltva, míg a távoli szerveren engedélyezve van. Ha ezt a fájlt átmásolnád, az IPSET letiltásra kerülhet a távoli szerveren is.Az
/etc/my.cnf
fájl átvitelét szintén kikommenteztem, mert eltérések lehetnek az előre beállított konfigurációk között a forrás és a távoli szerverek között.A nagy méretű adatállományok migrációja hosszú ideig tarthat, ezért ajánlott az alábbi SSH-alapú parancsokat egy Screen vagy Tmux munkamenetben futtatni. Ez lehetővé teszi, hogy az SSH kapcsolat megszakadása esetén is folytathasd a folyamatot. Ha az internetszolgáltatód vagy az SSH kapcsolat megszakad, egyszerűen újra bejelentkezel az SSH-ba, és újracsatlakozol a Screen vagy Tmux munkamenethez.
Ha a távoli (új) szerveren még nincs beállítva a Letsencrypt, akkor azt most installálni kell. Futtassuk ezt az új szerveren:
echo "LETSENCRYPT_DETECT='y'" >> /etc/centminmod/custom_config.inc
/usr/local/src/centminmod/addons/acmetool.sh acmeinstall
Erről részletesebben olvashatsz itt: https://szab.ee/2025/02/centminmod-letsencrypt/
Először futtassuk az alábbi parancsot dry-runnal:
cd /home
rsync -avzin --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" --exclude 'domains/*/log/*' --exclude 'domains/*/backup/*' /home/nginx/ root@$remoteip:/home/nginx
rsync -avzin --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" --exclude 'conf.d/virtual.conf' /usr/local/nginx/conf/ root@$remoteip:/usr/local/nginx/conf
rsync -avzin --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /etc/centminmod/custom_config.inc root@$remoteip:/etc/centminmod/custom_config.inc
rsync -avzin --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /usr/local/etc/php-fpm.conf root@$remoteip:/usr/local/etc/php-fpm.conf
#rsync -avzin --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /etc/my.cnf root@$remoteip:/etc/my.cnf
#rsync -avzin --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /etc/csf/csf.conf root@$remoteip:/etc/csf/csf.conf
rsync -avzin --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /etc/init.d/memcached root@$remoteip:/etc/init.d/memcached
rsync -avzin --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /etc/pure-ftpd/pureftpd.passwd root@$remoteip:/etc/pure-ftpd/pureftpd.passwd
Ha úgy tűnik ez gond nélkül fut, akkor térjünk rá a Let’s Encrypt SSL tanúsítványok és automatikus megújítási profilok és az aktuális SSL tanúsítványok átmásolásához (DRY RUN!!!)
Győződj meg róla, hogy az új szerveren már korábban lefuttattad az /usr/local/src/centminmod/addons/acmetool.sh acmeinstall
parancsot, mielőtt az alábbi 3 parancssort futtatnád:
ssh root@$remoteip -p $port -i ~/.ssh/$privatekey mkdir -p /usr/local/nginx/conf/ssl/
rsync -avzin --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /root/.acme.sh/ root@$remoteip:/root/.acme.sh/
rsync -avzin --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /usr/local/nginx/conf/ssl/ root@$remoteip:/usr/local/nginx/conf/ssl/
Ha lelkileg felkészültünk futtassuk a parancsokat -n nélkül (LIVE RUN!!!)
cd /home
rsync -avzi --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" --exclude 'domains/*/log/*' --exclude 'domains/*/backup/*' /home/nginx/ root@$remoteip:/home/nginx
rsync -avzi --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" --exclude 'conf.d/virtual.conf' /usr/local/nginx/conf/ root@$remoteip:/usr/local/nginx/conf
rsync -avzi --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /etc/centminmod/custom_config.inc root@$remoteip:/etc/centminmod/custom_config.inc
rsync -avzi --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /usr/local/etc/php-fpm.conf root@$remoteip:/usr/local/etc/php-fpm.conf
#rsync -avzi --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /etc/my.cnf root@$remoteip:/etc/my.cnf
#rsync -avzi --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /etc/csf/csf.conf root@$remoteip:/etc/csf/csf.conf
rsync -avzi --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /etc/init.d/memcached root@$remoteip:/etc/init.d/memcached
rsync -avzi --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /etc/pure-ftpd/pureftpd.passwd root@$remoteip:/etc/pure-ftpd/pureftpd.passwd
Aztán az ACME:
ssh root@$remoteip -p $port -i ~/.ssh/$privatekey mkdir -p /usr/local/nginx/conf/ssl/
rsync -avzi --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /root/.acme.sh/ root@$remoteip:/root/.acme.sh/
rsync -avzi --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /usr/local/nginx/conf/ssl/ root@$remoteip:/usr/local/nginx/conf/ssl/
Ha eddig minden rendben ment és átmásoltuk a konfigurációs fájlokat és az adatokat, ne felejtsük el újraindítani az Nginx-et:
ngxrestart
Fontos
Figyelj arra, hogy a fájlok átvitele után frissítsd az Nginx vhost beállításait a /usr/local/nginx/conf/conf.d/virtual.conf
fájlban. Ez a fájl tartalmazhatja a régi szerver nevét vagy más eltérő beállításokat, ezért ellenőrizd és szükség esetén módosítsd az új szerver adataival.
MySQL adatbázis biztonsági mentése mysqldump segítségével
A helyi mysqldump adatok közvetlen átvitele a távoli (új) szerverre megkerüli a forráskiszolgálón a helyi SQL dump fájl létrehozását. Ez különösen akkor lehet hasznos, ha a forráskiszolgálón nincs elegendő szabad lemezterület az SQL mentési fájl tárolásához. Nagy méretű MySQL adatbázisok esetén azonban előfordulhat, hogy némi optimalizálásra van szükség.
Mivel a folyamat hosszú időt vehet igénybe, javasolt a következő SSH-alapú parancsokat screen vagy tmux munkamenetben futtatni. Ezek lehetővé teszik, hogy a munkamenet folytatódjon akkor is, ha az SSH-kapcsolat megszakad. Ha az internetkapcsolat vagy az SSH-kapcsolat megszakad, egyszerűen csatlakozzon újra a screen vagy tmux munkamenethez bejelentkezés után, és folytassa a műveletet onnan, ahol abbahagyta.
DBNAME=$(mysql -N -e "show databases;" | grep -wEv '(information_schema|performance_schema|mysql)')
CHARSET=utf8mb4
for db in $DBNAME; do ssh root@$remoteip -p $port -i ~/.ssh/$privatekey mysqladmin create $db; mysqldump --default-character-set=$CHARSET $DUMPOPT $db | ssh root@$remoteip -p $port -i ~/.ssh/$privatekey mysql --default-character-set=$CHARSET $CLIENTOPT $db; done
A fentebb leírt módszer közvetlenül, SSH-val viszi át az adatbázisokat a célszerverre. Ha valami miatt erre nincs lehetőségünk, akkor az adatbázisokat menthetjük a korábban beállított $backupdir
változóban tárolt helyre.
mysql -N -e "show databases;" | grep -wEv '(information_schema|performance_schema|mysql)' | while read db; do mysqldump --default-character-set=utf8mb4 $DUMPOPT "$db" > "$backupdir/$db.sql"; done
Ez a parancs az adatbázisokat külön SQL fájlokba menti, amelyeket egyenként visszaállíthatunk a célszerveren a következő paranccsal:
for file in $backupdir/*.sql; do db=$(basename "$file" .sql); mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS $db;" && mysql -u root -p "$db" < "$file"; done
MySQL jogosultságok, felhasználók és jelszavak átvitele
Az adatbázis kaland itt még nem ér véget, mert a jogosultságok az új szerveren még nincsenek létrehozva. Hozzunk létre egy új könyvtárat a /root/dbgrants
alatt.
mkdir /root/dbgrants
cd /root/dbgrants
Majd itt futtassuk az alábbi parancsot:
mysql --batch --skip-column-names -e "SELECT user, host FROM user" mysql | while read user host; do
if [[ "$user" != 'root' ]]; then
mysql --batch --skip-column-names -e "SHOW GRANTS FOR '$user'@'$host'" | sed -e 's|$|;|';
fi;
done > grants.sql
Mit csinál?
- Lekéri az összes MySQL felhasználót és hostot.
- Azon felhasználókra, akik nem
root
, lekérdezi a jogosultságokat. - Az eredményt SQL formátumban elmenti a
grants.sql
fájlba.
Ezt a fájlt aztán dobjuk át rsync-el a távoli (új) szerverre:
rsync -avzi --progress --stats -e "ssh -p $port -i $HOME/.ssh/$privatekey" /root/dbgrants/grants.sql root@$remoteip:/root/dbgrants/
Ezután a távoli szerveren töltsük be ezt a fájlt a mysql parancs segítségével:
mysql < /root/dbgrants/grants.sql
Majd futtassuk az alábbi parancsokat, hogy újra töltse a MariaDB a jogosultságokat és újraindítsuk az adatbázis szervert:
mysql -e "FLUSH PRIVILEGES;"
systemctl restart mariadb
Költözés után - tesztek
Az adatok átvitele után meg kell győződnünk arról, hogy a szerver üzemképes-e.
Konfiguráció ellenőrzése
A fentebb már említett
/usr/local/nginx/conf/conf.d/virtual.conf
konfigurációs fájlt nézzük meg és javítsuk a benne lévő paramétereket, ha szükséges.Ellenőrizzük az
nginx -t
paranccsal az Nginx konfigurációt. Ha minden rendben vagy csak néhány szokásos warning üzenetet ad, akkor indítsuk újrangxrestart
paranccsal vagysystemctl restart nginx
paranccsal.Ellenőrizzük le az acme.sh működését:
A
/root/.acme.sh/
könyvtárban ellenőrizzük meg a domain címekhez tartozó könyvtárak meglétét../root/.acme.sh/acme.sh --list
paranccsal ellenőrizzük le a domainek listáját.crontab -l | grep acme.sh
paranccsal ellenőrizzük az acme.sh meglétét a crontabban, hogy biztosítva legyen a tanúsítványok megújítása. Ha minden rendben van, akkor egy ilyen eredményt kapunk:0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
Ez azt jelenti, hogy naponta egyszer, éjfélkor lefut az
acme.sh
.
Ellenőrizzük a MariaDB-t a
systemctl status mariadb
paranccsal.Centmin Mod domain előnézete DNS-frissítés előtt
Ha egy áttelepített domaint szeretnél előnézetben megtekinteni az új Centmin Mod szerveren anélkül, hogy frissítenéd a DNS-t, szerkeszd a
/etc/hosts
fájlt Linuxon, vagy ac:\Windows\System32\Drivers\etc\hosts
fájlt Windows PC-n.111.222.333.444 domain.com
Titkos tipp: A HostsMan alkalmazással könnyen szerkesztheted a
c:\Windows\System32\Drivers\etc\hosts
fájlt és ürítheted a DNS gyorsítótárat.