Discussion:
Wordpress site van test naar productie
(te oud om op te antwoorden)
Paul van der Vlis
2023-02-04 21:51:18 UTC
Permalink
Hoi,

Ik heb een scriptje geschreven om een Wordpress site van een testsite te
kopiëren naar een productie site, met wijziging van de URL.

Met sommige sites functioneert het goed, maar met eentje niet. Daar
missen b.v. delen van de voorpagina zoals menu's.
In de logs vind ik niet veel zinvols.

Volgens mij doe ik alles wat nodig is, zie script onder.

Enig idee wat er zou kunnen zijn als het mis gaat?
Misschien een theme met een soort kopieer beveiliging?

Groet,
Paul

------
#!/bin/bash

set -e # stop on error

read -p "Test site login (bijvoorbeeld test): " test
read -p "Productie site login: (bijvoorbeeld prod): " prod

read -p "Zoek op: (bijvoorbeeld test.site.nl): " zoek
read -p "Vervang door: (bijvoorbeeld www.site.nl): " vervang

if test -e /tmp/$prod; then
mv /tmp/$prod /tmp/$prod-weg # voor als hij bestaat
fi
mkdir /tmp/$prod/

echo "dumpen"
mysqldump -QR $prod > /tmp/$prod/$prod.sql
mysqldump -QR $test > /tmp/$prod/$test.sql

echo "database corrigeren"
sed -i -e "s/$zoek/$vervang/g" /tmp/$prod/$test.sql
cp -a /usr/local/sbin/fix-serialization.php /tmp/$prod/
php /tmp/$prod/fix-serialization.php /tmp/$prod/$test.sql
# from https://github.com/Blogestudio/Fix-Serialization

echo "importeren"
mysql $prod < /tmp/$prod/$test.sql

echo "backuppen"
mv /home/$prod/www /tmp/$prod/backup

echo "kopieren en rechten zetten"
cp -a /home/$test/www /home/$prod/
cp /tmp/$prod/backup/wp-config.php /home/$prod/www/wp-config.php
chown -R $prod:$prod /home/$prod/www/*
chown -R $prod:$prod /home/$prod/www/.*

echo "overzetten en rechten zetten"
cp -a /home/$test/www /home/$prod/
cp /tmp/$prod/backup/wp-config.php /home/$prod/www/wp-config.php
chown -R $prod:$prod /home/$prod/www/*
chown -R $prod:$prod /home/$prod/www/.*

echo "zoeken en vervangen"
grep -Rl "/home/$test/www" /home/$prod/www | xargs sed -i
"s|/home/$test/www|/home/$prod/www|g"
grep -Rl "$zoek" /home/$prod/www | xargs sed -i "s|$zoek|$vervang|g"

echo "let op deze bestanden:"
echo "/home/$test/www/wp-config.php"
echo "/home/$prod/www/wp-config.php"
-----
--
Paul van der Vlis Linux systeembeheer Groningen
https://vandervlis.nl
Paul van der Vlis
2023-02-04 22:16:17 UTC
Permalink
Ik heb nog een regeltje tussen gevoegd in het script, lijkt me een
Post by Paul van der Vlis
echo "database corrigeren"
sed -i -e "s/$zoek/$vervang/g" /tmp/$prod/$test.sql
sed -i -e "s|/home/$test/www|/home/$prod/www|g" /tmp/$prod/$test.sql
Post by Paul van der Vlis
cp -a /usr/local/sbin/fix-serialization.php /tmp/$prod/
php /tmp/$prod/fix-serialization.php /tmp/$prod/$test.sql
Groeten,
Paul
--
Paul van der Vlis Linux systeembeheer Groningen
https://vandervlis.nl
Oscar
2023-02-06 09:30:39 UTC
Permalink
Post by Paul van der Vlis
Hoi,
Ik heb een scriptje geschreven om een Wordpress site van een testsite te
kopiëren naar een productie site, met wijziging van de URL.
Met sommige sites functioneert het goed, maar met eentje niet. Daar
missen b.v. delen van de voorpagina zoals menu's.
In de logs vind ik niet veel zinvols.
Volgens mij doe ik alles wat nodig is, zie script onder.
Enig idee wat er zou kunnen zijn als het mis gaat?
Misschien een theme met een soort kopieer beveiliging?
Hoe zou dat moeten werken? Het gaat om pure tekst...
Post by Paul van der Vlis
set -e # stop on error
read -p "Test site login (bijvoorbeeld test): " test
read -p "Productie site login: (bijvoorbeeld prod): " prod
read -p "Zoek op: (bijvoorbeeld test.site.nl): " zoek
read -p "Vervang door: (bijvoorbeeld www.site.nl): " vervang
if test -e /tmp/$prod; then
mv /tmp/$prod /tmp/$prod-weg # voor als hij bestaat
fi
mkdir /tmp/$prod/
Dit is al link! Als meerdere mensen (of processen) tegelijk dit script
draaien, dan wordt het een grote puinhoop. Beter is om een tijdelijke
en onvoorspelbare naam te gebruiken, dat in een variabele te stoppen en
dat overal gebruiken. Het mktemp(1) commando is dan erg handig:

TMPDIR=$(mktemp -d /tmp/prod.XXXXXXXX)

Deze maakt een nieuwe directory met een random naam en geeft die naam op
de output. Met $( ) vang je dat op en stop je het in TMPDIR.

Vanaf nu moet je dan $TMPDIR/... gebruiken in plaats van /tmp/$prod/...

Je kan deze automatisch opruimen met deze constructie:

trap 'rm -rf $TMPDIR' EXIT

Als het script om wat voor reden dan ook exit, wordt dat rm-commando
uitgevoerd. Alleen 'kill -9' is zo niet af te vangen.
Post by Paul van der Vlis
echo "dumpen"
mysqldump -QR $prod > /tmp/$prod/$prod.sql
mysqldump -QR $test > /tmp/$prod/$test.sql
echo "database corrigeren"
sed -i -e "s/$zoek/$vervang/g" /tmp/$prod/$test.sql
cp -a /usr/local/sbin/fix-serialization.php /tmp/$prod/
php /tmp/$prod/fix-serialization.php /tmp/$prod/$test.sql
# from https://github.com/Blogestudio/Fix-Serialization
Gaat dit allemaal wel goed?
Post by Paul van der Vlis
echo "importeren"
mysql $prod < /tmp/$prod/$test.sql
echo "backuppen"
mv /home/$prod/www /tmp/$prod/backup
Backuppen naar de $TMPDIR is wel minder handig als dat trap commando de
boel weer opruimt.
Post by Paul van der Vlis
echo "kopieren en rechten zetten"
cp -a /home/$test/www /home/$prod/
cp /tmp/$prod/backup/wp-config.php /home/$prod/www/wp-config.php
chown -R $prod:$prod /home/$prod/www/*
chown -R $prod:$prod /home/$prod/www/.*
WHOA!!

Kijk hier mee uit! .* matched ook met .., dus je chowned ook je parent
directory. In dit geval geen probleem, maar maak dit geen gewoonte!

Beide commando's kun je samenvoegen tot eentje:

chown -R $prod:$prod /home/$prod/www/
Post by Paul van der Vlis
echo "overzetten en rechten zetten"
cp -a /home/$test/www /home/$prod/
cp /tmp/$prod/backup/wp-config.php /home/$prod/www/wp-config.php
chown -R $prod:$prod /home/$prod/www/*
chown -R $prod:$prod /home/$prod/www/.*
Idem!

chown -R $prod:$prod /home/$prod/www/
Post by Paul van der Vlis
echo "zoeken en vervangen"
grep -Rl "/home/$test/www" /home/$prod/www | xargs sed -i
In een ander bericht al gevraagd waarom je -R gebruikt? Het gevaar is
dat je nat gaat als iemand symlinks naar plekken aanlegt waar je
helemaal niet wil komen. Je kan beter -r aanwennen.
Post by Paul van der Vlis
"s|/home/$test/www|/home/$prod/www|g"
grep -Rl "$zoek" /home/$prod/www | xargs sed -i "s|$zoek|$vervang|g"
grep -Zrl "$zoek" /home/$prod/www \
| xargs -0 -t sed -i "s|$zoek|$vervang|g"

Gaat het hier mis? Gebruik dan eens "-i.bak" zodat je van alle bestanden
nog een backup hebt. Kijk dan eens wat er precies veranderd is:

find -name \*.bak -print | while read file
do
diff "${file%.bak}" "$file"
done
Post by Paul van der Vlis
echo "let op deze bestanden:"
echo "/home/$test/www/wp-config.php"
echo "/home/$prod/www/wp-config.php"
Wat betekent "let op" in deze context? Zie je hier een probleem?
--
[J|O|R] <- .signature.gz
Paul van der Vlis
2023-02-08 11:12:38 UTC
Permalink
Post by Oscar
Post by Paul van der Vlis
Hoi,
Ik heb een scriptje geschreven om een Wordpress site van een testsite te
kopiëren naar een productie site, met wijziging van de URL.
Met sommige sites functioneert het goed, maar met eentje niet. Daar
missen b.v. delen van de voorpagina zoals menu's.
In de logs vind ik niet veel zinvols.
Volgens mij doe ik alles wat nodig is, zie script onder.
Enig idee wat er zou kunnen zijn als het mis gaat?
Misschien een theme met een soort kopieer beveiliging?
Hoe zou dat moeten werken? Het gaat om pure tekst...
Post by Paul van der Vlis
set -e # stop on error
read -p "Test site login (bijvoorbeeld test): " test
read -p "Productie site login: (bijvoorbeeld prod): " prod
read -p "Zoek op: (bijvoorbeeld test.site.nl): " zoek
read -p "Vervang door: (bijvoorbeeld www.site.nl): " vervang
if test -e /tmp/$prod; then
mv /tmp/$prod /tmp/$prod-weg # voor als hij bestaat
fi
mkdir /tmp/$prod/
Dit is al link! Als meerdere mensen (of processen) tegelijk dit script
draaien, dan wordt het een grote puinhoop. Beter is om een tijdelijke
en onvoorspelbare naam te gebruiken, dat in een variabele te stoppen en
TMPDIR=$(mktemp -d /tmp/prod.XXXXXXXX)
Deze maakt een nieuwe directory met een random naam en geeft die naam op
de output. Met $( ) vang je dat op en stop je het in TMPDIR.
Vanaf nu moet je dan $TMPDIR/... gebruiken in plaats van /tmp/$prod/...
trap 'rm -rf $TMPDIR' EXIT
Als het script om wat voor reden dan ook exit, wordt dat rm-commando
uitgevoerd. Alleen 'kill -9' is zo niet af te vangen.
Post by Paul van der Vlis
echo "dumpen"
mysqldump -QR $prod > /tmp/$prod/$prod.sql
mysqldump -QR $test > /tmp/$prod/$test.sql
echo "database corrigeren"
sed -i -e "s/$zoek/$vervang/g" /tmp/$prod/$test.sql
cp -a /usr/local/sbin/fix-serialization.php /tmp/$prod/
php /tmp/$prod/fix-serialization.php /tmp/$prod/$test.sql
# from https://github.com/Blogestudio/Fix-Serialization
Gaat dit allemaal wel goed?
Post by Paul van der Vlis
echo "importeren"
mysql $prod < /tmp/$prod/$test.sql
echo "backuppen"
mv /home/$prod/www /tmp/$prod/backup
Backuppen naar de $TMPDIR is wel minder handig als dat trap commando de
boel weer opruimt.
Post by Paul van der Vlis
echo "kopieren en rechten zetten"
cp -a /home/$test/www /home/$prod/
cp /tmp/$prod/backup/wp-config.php /home/$prod/www/wp-config.php
chown -R $prod:$prod /home/$prod/www/*
chown -R $prod:$prod /home/$prod/www/.*
WHOA!!
Kijk hier mee uit! .* matched ook met .., dus je chowned ook je parent
directory. In dit geval geen probleem, maar maak dit geen gewoonte!
chown -R $prod:$prod /home/$prod/www/
Post by Paul van der Vlis
echo "overzetten en rechten zetten"
cp -a /home/$test/www /home/$prod/
cp /tmp/$prod/backup/wp-config.php /home/$prod/www/wp-config.php
chown -R $prod:$prod /home/$prod/www/*
chown -R $prod:$prod /home/$prod/www/.*
Idem!
chown -R $prod:$prod /home/$prod/www/
Post by Paul van der Vlis
echo "zoeken en vervangen"
grep -Rl "/home/$test/www" /home/$prod/www | xargs sed -i
In een ander bericht al gevraagd waarom je -R gebruikt? Het gevaar is
dat je nat gaat als iemand symlinks naar plekken aanlegt waar je
helemaal niet wil komen. Je kan beter -r aanwennen.
Post by Paul van der Vlis
"s|/home/$test/www|/home/$prod/www|g"
grep -Rl "$zoek" /home/$prod/www | xargs sed -i "s|$zoek|$vervang|g"
grep -Zrl "$zoek" /home/$prod/www \
| xargs -0 -t sed -i "s|$zoek|$vervang|g"
Gaat het hier mis? Gebruik dan eens "-i.bak" zodat je van alle bestanden
find -name \*.bak -print | while read file
do
diff "${file%.bak}" "$file"
done
Post by Paul van der Vlis
echo "let op deze bestanden:"
echo "/home/$test/www/wp-config.php"
echo "/home/$prod/www/wp-config.php"
Wat betekent "let op" in deze context? Zie je hier een probleem?
Een soort handmatige controle, omdat ik dat bestand kopieer van de oude
naar de nieuwe site. Naast paswoorden etc kunnen er geloof ik ook andere
dingen in staan, dat moet met de hand.

Bedankt voor je kritiek, sommige dingen heb ik al verwerkt.

Maar waar het me natuurlijk eigenlijk om gaat is waarom die site
helemaal raar is na overzetten, terwijl ik dat overzetten volgens mij in
principe toch goed doe volgens mij.

Jammer dat ik hem moeilijk kan laten zien.

Groet,
Paul
--
Paul van der Vlis Linux systeembeheer Groningen
https://vandervlis.nl
Oscar
2023-02-08 18:43:09 UTC
Permalink
Post by Paul van der Vlis
Maar waar het me natuurlijk eigenlijk om gaat is waarom die site
helemaal raar is na overzetten, terwijl ik dat overzetten volgens mij in
principe toch goed doe volgens mij.
Kun je ook niet naar het resultaat kijken en zien wat je moet fixen om
het aan de praat te krijgen? Het is wel heel erg gissen zo...
--
[J|O|R] <- .signature.gz
Paul van der Vlis
2023-02-08 19:31:20 UTC
Permalink
Post by Oscar
Post by Paul van der Vlis
Maar waar het me natuurlijk eigenlijk om gaat is waarom die site
helemaal raar is na overzetten, terwijl ik dat overzetten volgens mij in
principe toch goed doe volgens mij.
Kun je ook niet naar het resultaat kijken en zien wat je moet fixen om
het aan de praat te krijgen? Het is wel heel erg gissen zo...
De vraag was meer bedoeld als: ik doe het volgens mij goed, wat zou er
nog meer kunnen zijn?

Het lijkt er op dat ik eruit ben.

Er wordt een betaalde template gebruikt die vastgekoppeld wordt aan de
domeinnaam. De domeinnaam wijzigde van test.domein.nl in www.domein.nl
of zoiets. Er moet iets geactiveerd worden met een code die bij aankoop
is verkregen. Ik heb die code nog niet, maar die gaat nu vast komen.

Groet,
Paul
--
Paul van der Vlis Linux systeembeheer Groningen
https://vandervlis.nl
Paul van der Vlis
2023-02-09 15:56:03 UTC
Permalink
Post by Oscar
Post by Paul van der Vlis
Maar waar het me natuurlijk eigenlijk om gaat is waarom die site
helemaal raar is na overzetten, terwijl ik dat overzetten volgens mij in
principe toch goed doe volgens mij.
Kun je ook niet naar het resultaat kijken en zien wat je moet fixen om
het aan de praat te krijgen? Het is wel heel erg gissen zo...
De vraag was meer bedoeld als:  ik doe het volgens mij goed, wat zou er
nog meer kunnen zijn?
Het lijkt er op dat ik eruit ben.
Er wordt een betaalde template gebruikt die vastgekoppeld wordt aan de
domeinnaam. De domeinnaam wijzigde van test.domein.nl in www.domein.nl
of zoiets. Er moet iets geactiveerd worden met een code die bij aankoop
is verkregen. Ik heb die code nog niet, maar die gaat nu vast komen.
Dit bleek inderdaad de oplossing, de boel werkt nu. Ik bleek nog eerst
de testsite te moeten deactiveren voordat ik de echte site kon
activeren. Toch vervelend, zulk gedoe met commerciële licenties,
gelukkig weinig mee te maken...

Groet,
Paul
--
Paul van der Vlis Linux systeembeheer Groningen
https://vandervlis.nl
De ongekruisigde
2023-02-08 19:15:21 UTC
Permalink
Post by Paul van der Vlis
Hoi,
Ik heb een scriptje geschreven om een Wordpress site van een testsite te
kopiëren naar een productie site, met wijziging van de URL.
Met sommige sites functioneert het goed, maar met eentje niet. Daar
missen b.v. delen van de voorpagina zoals menu's.
In de logs vind ik niet veel zinvols.
Misschien browsercache? (probeer de productiesite eens in een anonieme
browser sessie?)
Paul van der Vlis
2023-02-08 20:19:50 UTC
Permalink
Post by De ongekruisigde
Post by Paul van der Vlis
Hoi,
Ik heb een scriptje geschreven om een Wordpress site van een testsite te
kopiëren naar een productie site, met wijziging van de URL.
Met sommige sites functioneert het goed, maar met eentje niet. Daar
missen b.v. delen van de voorpagina zoals menu's.
In de logs vind ik niet veel zinvols.
Misschien browsercache? (probeer de productiesite eens in een anonieme
browser sessie?)
Nee, dat was het niet.

Ik ga daartoe naar de geschiedenis, klik rechts op de site, en zeg "deze
site vergeten". En dan wist hij alles in de cache, cookies, e.d.

Groet,
Paul
--
Paul van der Vlis Linux systeembeheer Groningen
https://vandervlis.nl
Loading...