Rumah  >  Artikel  >  Tutorial CMS  >  Klon WordPress dalam Linux

Klon WordPress dalam Linux

王林
王林asal
2023-09-03 08:25:06709semak imbas

Klon WordPress dalam Linux

Menyalin WordPress tidak pernah kelihatan mudah

Saya sering suka melancarkan laman web WordPress baharu berdasarkan laman web sedia ada sebagai templat. Konfigurasi tema, pemalam dan tetapan berguna dari awal lagi, tidak seperti pemasangan baharu di mana anda perlu mengulangi semuanya dari awal.

Dalam Membina imej aplikasi untuk dijual semula di Lautan Digital, saya memperincikan proses membina titisan WordPress yang boleh dipasang, diprakonfigurasikan dan dipraoptimumkan. Pada asasnya, ia adalah lautan imej digital yang boleh melancarkan laman web WordPress yang dimuatkan sepenuhnya dalam beberapa minit. Walau bagaimanapun, lebih biasa, saya ingin menambah tapak web WordPress pada salah satu pelayan sedia ada saya sendiri.

Terdapat banyak cara untuk melakukan ini, tetapi saya sering mendapati bahawa ia memerlukan pendekatan khusus dan terperinci yang nampaknya perlu saya pelajari semula setiap kali. Saya memutuskan sudah tiba masanya untuk menulis skrip shell Linux yang akan melakukan semua kerja untuk saya dalam beberapa minit.

Dalam tutorial ini, saya akan membimbing anda melalui penyelidikan saya dan skrip klon WordPress yang dihasilkan. Saya harap anda menyukainya - apabila saya menyelesaikannya saya fikir ia berfungsi dengan baik.

Sebelum kita mula, sila ingat bahawa saya cuba melibatkan diri dalam perbincangan di bawah. Jika anda mempunyai soalan atau cadangan topik, sila tinggalkan komen di bawah atau hubungi saya di Twitter @reifman. Anda juga boleh menghantar e-mel kepada saya secara terus. Saya harap ramai daripada anda akan mendapat idea dan penambahbaikan yang lebih baik untuk skrip ini. Saya gembira mendengar daripada anda.

Kaedah Lain untuk Migrasi WordPress

Biasanya, anda melancarkan tapak web baharu dengan memindahkan tapak web sedia ada anda ke pelayan baharu (pada asasnya menyalinnya) dan membina salinan sambil mengekalkan tapak web sumber itu utuh. Terdapat beberapa cara untuk mencapai ini.

Dalam Memindahkan WordPress ke Keluaran Pelayan Baharu dengan WordPress , saya menulis tentang menggunakan pemalam Pendua untuk melakukan ini, tetapi saya mendapati prosesnya menyusahkan. Sukar juga untuk mengenali semula diri saya dengan replikator setiap kali saya perlu memindahkan tapak.

Saya baru-baru ini menulis tentang perkara ini dalam Menyandarkan dan memulihkan tapak WordPress anda dengan CodeGuard untuk Envato Tuts+ . Perkhidmatan ini memudahkan proses. Tidak lama lagi, kami akan menerbitkan Cara Memudahkan Mengurus Berbilang Laman Web WordPress , yang menerangkan banyak kelebihan hebat menggunakan ManageWP. Ia mempunyai keupayaan pengklonan, tetapi memerlukan FTP — Saya mengelak daripada menjalankan FTP pada pelayan saya atas sebab keselamatan.

Juga dengan siri Envato Tuts+ dua bahagian Rachel McCollin: WordPress Mudah Alih: Pengenalan dan WordPress Mudah Alih: Menggerakkan Tapak Anda dengan Pemalam. Terdapat tutorial menggunakan BackupBuddy pada WPBeginner. Akhir sekali, WPClone tidak memerlukan FTP, tetapi memerlukan pemasangan WordPress yang bersih untuk dibina.

Anda boleh belajar banyak daripada semua tutorial dan perkhidmatan ini, tetapi saya ingin melihat sama ada saya boleh mencipta skrip baris arahan yang akan menjadikan pengklonan tapak WordPress lebih pantas dan mudah setiap masa.

Skrip perancangan

Untuk menulis tutorial ini, saya sangat bergantung pada kerja awal orang lain untuk mendapatkan kelajuan pada skrip bash dan operasi laman web WordPress. Saya tidak pernah menganggap diri saya sebagai pentadbir sistem Linux profesional. Akhirnya, saya memutuskan untuk membina skrip klon saya di atas skrip pemasangan WordPress Bash Brian Gallagher.

Nota: Ini adalah skrip pemasangan berasaskan Debian (seperti RedHat dan CentOS) mempunyai utiliti yang berbeza untuk Apache dan Program mempunyai laluan yang berbeza.

Berikut ialah penerangan Gallagher tentang skrip asasnya:

Muat turun versi WP terkini, kemas kini wp-config dengan nama pangkalan data, nama pengguna dan kata laluan yang disediakan oleh pengguna, cipta dan CHMOD direktori muat naik, salin semua fail ke akar skrip yang sedang berjalan, dan kemudian padam sendiri!

Terdapat banyak skrip tersusun di luar sana, tetapi saya ingin membuat sesuatu yang akan mengklon tapak langsung. Mari kita semak seni bina konfigurasi WordPress biasa.

Komponen awal laman web WordPress

Pemasangan WordPress biasa mempunyai empat komponen utama untuk pengklonan:

  1. Pokok direktori tapak web
  2. pangkalan data
  3. Konfigurasi pelayan rangkaian, seperti fail konfigurasi Apache
  4. Pemetaan Domain

Kami juga memerlukan maklumat, hak akses dan tetapan keselamatan:

  • Akaun Pengurusan Pelayan dan Kata Laluan
  • nama pengguna dan kata laluan pelayan MySql
  • Direktori sumber tapak web
  • Fail konfigurasi pelayan web tapak web
  • Nama pangkalan data, nama pengguna dan kata laluan

Inilah perkara yang perlu kami nyatakan untuk tapak klon:

  • Direktori sasaran tapak web yang diklon
  • Klon nama pangkalan data, nama pengguna dan kata laluan
  • Klon fail konfigurasi pelayan web tapak web

Apa yang perlu dilakukan oleh skrip

  • Dapatkan semua tetapan melalui pembolehubah konfigurasi atau input pengguna.
  • Salin direktori laman web dan simpan semula ke direktori sasaran.
  • Eksport pangkalan data sumber dan importnya ke pangkalan data sasaran.
  • Pastikan direktori ini mempunyai kebenaran yang sesuai.

  • Salin fail konfigurasi pelayan dan kemas kini tetapan domain dan direktori.
  • Muat semula pelayan web.

Kita mesti mengemas kini DNS domain sasaran baharu secara manual. Saya syorkan anda membuat rekod DNS sebelum anda bermula supaya rekod tersebut sedia untuk digunakan sebaik sahaja tapak web anda diklon. Tiada yang lebih baik daripada mengklon tapak anda dan tidak dapat menguji nama domain kerana anda sedang menunggu DNS.

Cara melaksanakan skrip klon

Kini, kami bersedia untuk melangkah melalui cara seni bina skrip berfungsi. Sekali lagi, saya bermula dengan memanfaatkan skrip pemasangan WordPress Gallagher, dan anda memerlukan baris bash awal di bahagian atas:

#!/bin/bash -e
# Clone a WordPress site via Bash script
clear
echo "==================================================="
echo "Clone WordPress Script"
echo "==================================================="

Sediakan tetapan DNS anda

Sebelum menyalin tapak, anda perlu mengkonfigurasi DNS untuk tapak klon. Anda boleh membaca tentang konfigurasi DNS untuk tapak WordPress baharu di sini. Saya juga teruja dengan tutorial Envato Tuts+ ini "Pengenalan kepada Pembelajaran dan Penggunaan Rekod DNS."

Pada asasnya, anda perlu mencipta rekod A atau CNAME yang menyalurkan URL klon yang dikehendaki ke pelayan yang kami replikasi.

Tetapkan kebenaran

Pada pelayan saya, saya sedang mencipta skrip bash yang dipanggil clnewp.sh. Ia memerlukan kebenaran boleh laku:

chmod +x clonewp.sh

Kemudian, setelah selesai, anda boleh menjalankannya seperti ini:

sudo bash clonewp.sh

Saya syorkan jalankan skrip sebagai sudo supaya anda tidak menghadapi masalah kebenaran fail.

Tetapkan nilai lalai

Untuk tujuan ujian, saya mencipta fungsi yang pramuat skrip dengan tetapan lalai. Ia membantu saya menjalankan ujian berulang kali tanpa perlu menaip semuanya berulang kali. Saya juga fikir ini mungkin berguna untuk sesiapa sahaja yang ingin mengubah suai skrip atau menggunakannya dengan cara lain pada masa hadapan.

Berikut ialah semua tetapan lalai:

# Set Default Settings (helpful for testing)
default_mysql_user=$"root-admin"
default_mysql_pass=$"super-strong-password"
default_source_domain=$"gardening.io"
default_target_domain=$"cycling.io"
default_source_directory=$"/var/www/gardening"
default_target_directory=$"/var/www/cycling"
default_apache_directory=$"/etc/apache2/sites-available"
default_source_conf=$"gardening.conf"
default_target_conf=$"cycling.conf"
default_source_dbname=$"gardening"
default_source_dbuser=$"user_for_garden"
default_source_dbpass=$"pwd_garden"
default_target_dbname=$"cycling"
default_target_dbuser=$"user_for_cycling"
default_target_dbpass=$"pwd_cycling"
NOW=$(date +"%Y-%m-%d-%H%M")

Saya tahu ini kelihatan seperti banyak, tetapi saya mendapati ia berguna untuk mempunyai pengguna induk MySQL dan kata laluan untuk sandaran pangkalan data, penciptaan pangkalan data dan import. Walau bagaimanapun, ia juga berguna untuk mempunyai pengguna pangkalan data dan kata laluan khusus tapak untuk menetapkan kebenaran pangkalan data sasaran dan mencari serta menggantikan dalam fail wp-config.php. Ia menjadikan proses pengklonan akhir sangat lancar.

Saya menggunakan NOW cap masa untuk memastikan bahawa arkib yang kami cipta adalah unik.

Tetapan Permintaan

Kod berikut memaparkan nilai lalai kepada pengguna dan membenarkan mereka menerimanya (tekan enter) atau menggantikannya:

# Request Source Settings
read -p "Source Domain (e.g. "$default_source_domain"): " source_domain
source_domain=${source_domain:-$default_source_domain}
echo $source_domain
read -p "Source Directory (no trailing slash e.g. "$default_source_directory"): " source_directory
source_directory=${source_directory:-$default_source_directory}
echo $source_directory
read -p "Source Database Name (e.g. "$default_source_dbname"): " source_dbname
source_dbname=${source_dbname:-$default_source_dbname}
echo $source_dbname
read -p "Source Database User (e.g. "$default_source_dbuser"): " source_dbuser
source_dbuser=${source_dbuser:-$default_source_dbuser}
echo $source_dbuser
read -p "Source Database Pass (e.g. "$default_source_dbpass"): " source_dbpass
source_dbpass=${source_dbpass:-$default_source_dbpass}
echo $source_dbpass
# Request Source Settings
read -p "Source Conf File (e.g. "$default_source_conf"): " source_conf
source_conf=${source_conf:-$default_source_conf}
echo $source_conf
# Request Target Settings
read -p "Target Domain (e.g. "$default_target_domain"): " target_domain
target_domain=${target_domain:-$default_target_domain}
echo $target_domain
read -p "Target Directory (no trailing slash e.g. "$default_target_directory"): " target_directory
target_directory=${target_directory:-$default_target_directory}
echo $target_directory
read -p "Target Database Name (e.g. "$default_target_dbname"): " target_dbname
target_dbname=${target_dbname:-$default_target_dbname}
echo $target_dbname
read -p "Target Database User (e.g. "$default_target_dbuser"): " target_dbuser
target_dbuser=${target_dbuser:-$default_target_dbuser}
echo $target_dbuser
read -p "Target Database Pass (e.g. "$default_target_dbpass"): " target_dbpass
target_dbpass=${target_dbpass:-$default_target_dbpass}
echo $target_dbpass
read -p "Target Conf File (e.g. "$default_target_conf"): " target_conf
target_conf=${target_conf:-$default_target_conf}
echo $target_conf

Setelah kami mengumpulkan semua tetapan pengguna, kami bertanya kepada mereka sama ada mereka mahu bermula:

echo "Clone now? (y/n)"
read -e run
if [ "$run" == n ] ; then
exit
else
echo "==================================================="
echo "WordPress Cloning is Beginning"
echo "==================================================="

Salin pokok direktori

Perkara kini bergerak lebih pantas. Kami mencipta tarball tapak sumber, mencipta direktori sasaran dan mengekstrak tarball di sana:

#backup source_directory
cd $source_directory
# add -v option to these if you want to see verbose file listings
tar -czf source_clone_$NOW.tar.gz .
#unzip clone in target directory
mkdir -p $target_directory
tar -xzf source_clone_$NOW.tar.gz -C $target_directory
#remove tarball of source
rm source_clone_$NOW.tar.gz
cd $target_directory

Kami juga menjalankan kebenaran fail standard WordPress untuk memastikan semuanya disediakan dengan betul dan selamat:

# Reset Directory Permissions
find $target_directory -type d -exec chmod 755 {} \;
find $target_directory -type f -exec chmod 644 {} \;

Kemas kini fail WP-Config

Seterusnya, kami menggunakan perl untuk mencari dan menggantikan pengesahan pangkalan data sumber dengan maklumat pangkalan data sasaran:

#set database details with perl find and replace
perl -pi -e "s/$source_dbname/$target_dbname/g" wp-config.php
perl -pi -e "s/$source_dbuser/$target_dbuser/g" wp-config.php
perl -pi -e "s/$source_dbpass/$target_dbpass/g" wp-config.php
echo "define('RELOCATE',true);" | tee -a wp-config.php
#echo "define('WP_HOME','http://$target_domain');" | tee -a wp-config.php
#echo "define('WP_SITEURL','http://$target_domain');" | tee -a wp-config.php
echo "================================"
echo "Directory duplicated"
echo "================================"

Saya juga menambahkan tetapan RELOCATE pada penghujung fail. Jika anda mahu, anda boleh menggantikannya dengan tetapan WP_HOME dan WP_SITEURL statik. RELOCATE 设置添加到文件末尾。如果您愿意,可以将其替换为静态 WP_HOMEWP_SITEURL 设置。

复制数据库

接下来,我们转储数据库,使用用户提供的权限创建一个新数据库,然后将数据库导入其中:

# Begin Database Duplication
# Export the database
mysqldump -u$mysql_user -p$mysql_pass $source_dbname > $target_directory/clone_$NOW.sql
# Create the target database and permissions
mysql -u$mysql_user -p$mysql_pass -e "create database $target_dbname; GRANT ALL PRIVILEGES ON $target_dbname.* TO '$target_dbuser'@'localhost' IDENTIFIED BY '$target_dbpass'"
# Import the source database into the target
mysql -u$mysql_user -p$mysql_pass $target_dbname < $target_directory/clone_$NOW.sql
echo "================================"
echo "Database duplicated"
echo "================================"

我再次发现,最好在这些活动中使用主 MySQL 身份验证,同时根据源站点和单站点克隆设置配置数据库设置。

复制 Web 服务器配置

最后,我们准备好结束一切并按下启动按钮。我很少看到此类脚本管理 Web 服务器配置的额外步骤。所以我也想这么做。

我将源站点的 Apache .conf 文件复制到克隆的新 .conf 文件中。我使用 perl 对域和目录路径进行字符串替换。然后,我使用 Apache 激活了该站点并重新加载了 Web 服务器:

#Activate Web Configuration
cp $default_apache_directory/$source_conf $default_apache_directory/$target_conf
#set database details with perl find and replace
perl -pi -e "s/$source_domain/$target_domain/g" $default_apache_directory/$target_conf
perl -pi -e "s|${source_directory}|${target_directory}|g" $default_apache_directory/$target_conf
a2ensite $target_conf
service apache2 reload
echo "================================"
echo "Web configuration added"
echo "================================"
echo "Clone is complete."
echo "Test at http://"$target_domain
echo "================================"
fi

而且,就是这样。以下是脚本在现实生活中的运行情况:

===================================================
Clone WordPress Script
===================================================
MySQL Master Username (e.g. root-admin): harry_potter
harry_potter
MySQL Master Password (e.g. super-strong-password): voldemoort~jenny7!
voldemoort~jenny7!
Source Domain (e.g. gardening.io): 
gardening.io
Source Directory (no trailing slash e.g. /var/www/gardening): 
/var/www/gardening
Source Database Name (e.g. gardening): database_gardening
database_gardening
Source Database User (e.g. user_for_garden): hermione
hermione
Source Database Pass (e.g. pwd_garden): !987654321abcdefgh#
!987654321abcdefgh#
Source Conf File (e.g. gardening.conf): gardening.conf
gardening.conf
Target Domain (e.g. cycling.io): 
cycling.io
Target Directory (no trailing slash e.g. /var/www/cycling): /var/www/cycling
/var/www/cycling
Target Database Name (e.g. cycling): database_cycling
database_cycling
Target Database User (e.g. user_for_cycling): hedwig
hedwig
Target Database Pass (e.g. pwd_cycling): 
pwd_for_cycling_not_hogwartz
Target Conf File (e.g. cycling.conf): 0007b-cycling.conf               
0007b-cycling.conf
Clone now? (y/n)
y
===================================================
WordPress Cloning is Beginning
===================================================
tar: .: file changed as we read it
define('RELOCATE',true);
================================
Directory duplicated
================================
================================
Database duplicated
================================
Enabling site 0007b-cycling.
To activate the new configuration, you need to run:
  service apache2 reload
 * Reloading web server apache2                                                                                     * 
================================
Web configuration added
================================
Clone is complete.
Test at http://cycling.io
================================

在我的小型 WordPress 网站上,复制只需要 30 到 90 秒!

精美印刷

您还需要了解更多事情。

首先直接登录路径

首先,要登录克隆的网站,您需要使用 wp-login.php 路径,而不是使用重定向到源网站网址的 wp-admin,例如http://clone.io/wp-login.php如下图:

Klon WordPress dalam Linux

切换域名

由于 WordPress 在数据库中硬编码了大部分源域,我发现使用 wp-config.php 中的 RELOCATE 设置可以轻松通过常规 > 设置进行更新。您只需使用新的目标网址保存表单即可:

Klon WordPress dalam Linux

保存克隆的目标 URL 后,您可以从 wp 中删除 RELOCATE

Salin Pangkalan Data#🎜🎜# #🎜🎜#Seterusnya, kami membuang pangkalan data, mencipta pangkalan data baharu dengan kebenaran yang diberikan oleh pengguna, dan mengimport pangkalan data ke dalamnya: #🎜🎜#
#!/bin/bash -e
# Clone a WordPress site via Bash script
clear
echo "==================================================="
echo "Clone WordPress Script"
echo "==================================================="
# Set Default Settings (helpful for testing)
default_mysql_user=$"root-admin"
default_mysql_pass=$"super-strong-password"
default_source_domain=$"gardening.io"
default_target_domain=$"cycling.io"
default_source_directory=$"/var/www/gardening"
default_target_directory=$"/var/www/cycling"
default_apache_directory=$"/etc/apache2/sites-available"
default_source_conf=$"gardening.conf"
default_target_conf=$"cycling.conf"
default_source_dbname=$"gardening"
default_source_dbuser=$"user_for_garden"
default_source_dbpass=$"pwd_garden"
default_target_dbname=$"cycling"
default_target_dbuser=$"user_for_cycling"
default_target_dbpass=$"pwd_cycling"
NOW=$(date +"%Y-%m-%d-%H%M")

#Request MySQL Admin
read -p "MySQL Master Username (e.g. "$default_mysql_user"): " mysql_user
mysql_user=${mysql_user:-$default_mysql_user}
echo $mysql_user
read -p "MySQL Master Password (e.g. "$default_mysql_pass"): " mysql_pass
mysql_pass=${mysql_pass:-$default_mysql_pass}
echo $mysql_pass

# Request Source Settings
read -p "Source Domain (e.g. "$default_source_domain"): " source_domain
source_domain=${source_domain:-$default_source_domain}
echo $source_domain
read -p "Source Directory (no trailing slash e.g. "$default_source_directory"): " source_directory
source_directory=${source_directory:-$default_source_directory}
echo $source_directory
read -p "Source Database Name (e.g. "$default_source_dbname"): " source_dbname
source_dbname=${source_dbname:-$default_source_dbname}
echo $source_dbname
read -p "Source Database User (e.g. "$default_source_dbuser"): " source_dbuser
source_dbuser=${source_dbuser:-$default_source_dbuser}
echo $source_dbuser
read -p "Source Database Pass (e.g. "$default_source_dbpass"): " source_dbpass
source_dbpass=${source_dbpass:-$default_source_dbpass}
echo $source_dbpass
# Request Source Settings
read -p "Source Conf File (e.g. "$default_source_conf"): " source_conf
source_conf=${source_conf:-$default_source_conf}
echo $source_conf
# Request Target Settings
read -p "Target Domain (e.g. "$default_target_domain"): " target_domain
target_domain=${target_domain:-$default_target_domain}
echo $target_domain
read -p "Target Directory (no trailing slash e.g. "$default_target_directory"): " target_directory
target_directory=${target_directory:-$default_target_directory}
echo $target_directory
read -p "Target Database Name (e.g. "$default_target_dbname"): " target_dbname
target_dbname=${target_dbname:-$default_target_dbname}
echo $target_dbname
read -p "Target Database User (e.g. "$default_target_dbuser"): " target_dbuser
target_dbuser=${target_dbuser:-$default_target_dbuser}
echo $target_dbuser
read -p "Target Database Pass (e.g. "$default_target_dbpass"): " target_dbpass
target_dbpass=${target_dbpass:-$default_target_dbpass}
echo $target_dbpass
read -p "Target Conf File (e.g. "$default_target_conf"): " target_conf
target_conf=${target_conf:-$default_target_conf}
echo $target_conf
echo "Clone now? (y/n)"
read -e run
if [ "$run" == n ] ; then
exit
else
echo "==================================================="
echo "WordPress Cloning is Beginning"
echo "==================================================="
#backup source_directory
cd $source_directory
# add -v option to these if you want to see verbose file listings
tar -czf source_clone_$NOW.tar.gz .
#unzip clone in target directory
mkdir -p $target_directory
tar -xzf source_clone_$NOW.tar.gz -C $target_directory
#remove tarball of source
rm source_clone_$NOW.tar.gz
cd $target_directory
# Reset Directory Permissions
find $target_directory -type d -exec chmod 755 {} \;
find $target_directory -type f -exec chmod 644 {} \;
#set database details with perl find and replace
perl -pi -e "s/$source_dbname/$target_dbname/g" wp-config.php
perl -pi -e "s/$source_dbuser/$target_dbuser/g" wp-config.php
perl -pi -e "s/$source_dbpass/$target_dbpass/g" wp-config.php
echo "define('RELOCATE',true);" | tee -a wp-config.php
#echo "define('WP_HOME','http://$target_domain');" | tee -a wp-config.php
#echo "define('WP_SITEURL','http://$target_domain');" | tee -a wp-config.php
echo "================================"
echo "Directory duplicated"
echo "================================"
# Begin Database Duplication
# Export the database
mysqldump -u$mysql_user -p$mysql_pass $source_dbname > $target_directory/clone_$NOW.sql
# Create the target database and permissions
mysql -u$mysql_user -p$mysql_pass -e "create database $target_dbname; GRANT ALL PRIVILEGES ON $target_dbname.* TO '$target_dbuser'@'localhost' IDENTIFIED BY '$target_dbpass'"
# Import the source database into the target
mysql -u$mysql_user -p$mysql_pass $target_dbname < $target_directory/clone_$NOW.sql
echo "================================"
echo "Database duplicated"
echo "================================"
#Activate Web Configuration
cp $default_apache_directory/$source_conf $default_apache_directory/$target_conf
#set database details with perl find and replace
perl -pi -e "s/$source_domain/$target_domain/g" $default_apache_directory/$target_conf
perl -pi -e "s|${source_directory}|${target_directory}|g" $default_apache_directory/$target_conf
a2ensite $target_conf
service apache2 reload
echo "================================"
echo "Web configuration added"
echo "================================"
echo "Clone is complete."
echo "Test at http://"$target_domain
echo "================================"
fi
#🎜🎜# Sekali lagi saya mendapati bahawa adalah yang terbaik untuk menggunakan pengesahan MySQL utama untuk aktiviti ini semasa mengkonfigurasi tetapan pangkalan data berdasarkan tapak sumber dan tetapan klon tapak tunggal. #🎜🎜# #🎜🎜#Salin Konfigurasi Pelayan Web#🎜🎜# #🎜🎜#Akhirnya, kami bersedia untuk menyelesaikan perkara dan menekan butang mula. Jarang saya melihat skrip sedemikian mengambil langkah tambahan untuk mengurus konfigurasi pelayan web. Jadi saya nak buat juga. #🎜🎜# #🎜🎜#Saya menyalin fail Apache .conf tapak sumber ke dalam fail .conf baharu yang diklon. Saya menggunakan perl untuk melakukan penggantian rentetan untuk laluan domain dan direktori. Saya kemudian mengaktifkan tapak menggunakan Apache dan memuat semula pelayan web: #🎜🎜#
  sudo rm -ifr /var/www/clone
  sudo a2dissite clone.conf 
  sudo service apache2 reload
  sudo rm /etc/apache2/sites-available/clone.conf
  mysql -u root -p -e "drop database clone;"
#🎜🎜#Dan, itu sahaja. Begini cara skrip berfungsi dalam kehidupan sebenar: #🎜🎜#
/**#@+
 * Authentication Unique Keys and Salts.
 *
 * Change these to different unique phrases!
 * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key 
service}
 * You can change these at any point in time to invalidate all existing cookies. This will force all users to have 
to log in again.
 *
 * @since 2.6.0
 */
define('AUTH_KEY',         '+9%S?YVnr%5Vr!Et4J,@9/Z^.kT_Lu~5SGwr9=|Y &D-ARSWf$mF#J_3U:/iE>-R');
define('SECURE_AUTH_KEY',  'e3Wr7%Aa7H1,f<SR[Sp&g.kJw,.)bR-9jz{uU&[R{[J]ITK8q>:!5@y:Q;c01dL ');
define('LOGGED_IN_KEY',    '1I%pW%UyjRMqy__Da)siA)+V]UruXPmxv|eBjM~-m&-<WEy&+XXb43uh8&aP+U');
define('NONCE_KEY',        'A9]+PFgvxYa^<B}_.F?9A,!&i-.b6E.I?&?U*)X.Vh+fq`SfE[XJG+MG|pg;y%Ah');
define('AUTH_SALT',        'gT (4]L{mm!|>9kC<%59rB7sbe1)jW0GCnfupJT+8z-z#%o@b|[QH=i@h|-/t!9S');
define('SECURE_AUTH_SALT', 'ON8K<,WSy8+F ~XaQpCwC8(a/{HksMh<T)QLD]s[-:yv+fx8!`<!*~mgB32X:w5k');
define('LOGGED_IN_SALT',   'vHJ%{=X6$ue>ZIo|%|cisp1R}9cJ< Rz-J;H|:O2A7$+*aGXMH!+KvD+tZ/I*U5$');
define('NONCE_SALT',       '[ytQ;C)BvgU!#>a,,g|)~EKBQUig7Uv.-8?q%lmFte,P>,]f#.}i`Wx8S+_S@&.(');
/**#@-*/
#🎜🎜#Di tapak WordPress kecil saya, menyalin hanya mengambil masa 30 hingga 90 saat! #🎜🎜# #🎜🎜#cetakan halus#🎜🎜# #🎜🎜# Banyak lagi perkara yang anda perlu tahu. #🎜🎜#

Mula-mula log masuk terus ke laluan

#🎜🎜#Pertama sekali, untuk log masuk ke laman web klon, anda perlu menggunakan laluan wp-login.php dan bukannya menggunakan wp-admin yang mengubah hala ke URL laman web sumber, seperti http://clone.io/ wp-login.php Seperti yang ditunjukkan di bawah: #🎜🎜# #🎜🎜#Klon WordPress dalam Linux#🎜🎜#

Tukar nama domain

#🎜🎜#Oleh kerana WordPress kod keras kebanyakan domain sumber dalam pangkalan data, saya mendapati bahawa ini boleh dilakukan dengan mudah melalui tetapan Umum> menggunakan tetapan RELOCATE dalam wp -config.php Buat kemas kini. Hanya simpan borang dengan URL destinasi baharu anda: #🎜🎜# #🎜🎜#Klon WordPress dalam Linux#🎜🎜##🎜 🎜 #Selepas menyimpan URL sasaran klon, anda boleh memadamkan RELOCATE settings-config.php daripada wp secara manual. #🎜🎜#

但是,一位同事建议您可能需要使用 InterconnectIT 的 WordPress 数据库搜索和替换等工具。 Envato Tuts+ 中的“跨主机、服务器和 URL 迁移 WordPress”中也对此进行了记录。

最终脚本

这是 wpclone.sh 的最终脚本 - 请随意更改默认值:

#!/bin/bash -e
# Clone a WordPress site via Bash script
clear
echo "==================================================="
echo "Clone WordPress Script"
echo "==================================================="
# Set Default Settings (helpful for testing)
default_mysql_user=$"root-admin"
default_mysql_pass=$"super-strong-password"
default_source_domain=$"gardening.io"
default_target_domain=$"cycling.io"
default_source_directory=$"/var/www/gardening"
default_target_directory=$"/var/www/cycling"
default_apache_directory=$"/etc/apache2/sites-available"
default_source_conf=$"gardening.conf"
default_target_conf=$"cycling.conf"
default_source_dbname=$"gardening"
default_source_dbuser=$"user_for_garden"
default_source_dbpass=$"pwd_garden"
default_target_dbname=$"cycling"
default_target_dbuser=$"user_for_cycling"
default_target_dbpass=$"pwd_cycling"
NOW=$(date +"%Y-%m-%d-%H%M")

#Request MySQL Admin
read -p "MySQL Master Username (e.g. "$default_mysql_user"): " mysql_user
mysql_user=${mysql_user:-$default_mysql_user}
echo $mysql_user
read -p "MySQL Master Password (e.g. "$default_mysql_pass"): " mysql_pass
mysql_pass=${mysql_pass:-$default_mysql_pass}
echo $mysql_pass

# Request Source Settings
read -p "Source Domain (e.g. "$default_source_domain"): " source_domain
source_domain=${source_domain:-$default_source_domain}
echo $source_domain
read -p "Source Directory (no trailing slash e.g. "$default_source_directory"): " source_directory
source_directory=${source_directory:-$default_source_directory}
echo $source_directory
read -p "Source Database Name (e.g. "$default_source_dbname"): " source_dbname
source_dbname=${source_dbname:-$default_source_dbname}
echo $source_dbname
read -p "Source Database User (e.g. "$default_source_dbuser"): " source_dbuser
source_dbuser=${source_dbuser:-$default_source_dbuser}
echo $source_dbuser
read -p "Source Database Pass (e.g. "$default_source_dbpass"): " source_dbpass
source_dbpass=${source_dbpass:-$default_source_dbpass}
echo $source_dbpass
# Request Source Settings
read -p "Source Conf File (e.g. "$default_source_conf"): " source_conf
source_conf=${source_conf:-$default_source_conf}
echo $source_conf
# Request Target Settings
read -p "Target Domain (e.g. "$default_target_domain"): " target_domain
target_domain=${target_domain:-$default_target_domain}
echo $target_domain
read -p "Target Directory (no trailing slash e.g. "$default_target_directory"): " target_directory
target_directory=${target_directory:-$default_target_directory}
echo $target_directory
read -p "Target Database Name (e.g. "$default_target_dbname"): " target_dbname
target_dbname=${target_dbname:-$default_target_dbname}
echo $target_dbname
read -p "Target Database User (e.g. "$default_target_dbuser"): " target_dbuser
target_dbuser=${target_dbuser:-$default_target_dbuser}
echo $target_dbuser
read -p "Target Database Pass (e.g. "$default_target_dbpass"): " target_dbpass
target_dbpass=${target_dbpass:-$default_target_dbpass}
echo $target_dbpass
read -p "Target Conf File (e.g. "$default_target_conf"): " target_conf
target_conf=${target_conf:-$default_target_conf}
echo $target_conf
echo "Clone now? (y/n)"
read -e run
if [ "$run" == n ] ; then
exit
else
echo "==================================================="
echo "WordPress Cloning is Beginning"
echo "==================================================="
#backup source_directory
cd $source_directory
# add -v option to these if you want to see verbose file listings
tar -czf source_clone_$NOW.tar.gz .
#unzip clone in target directory
mkdir -p $target_directory
tar -xzf source_clone_$NOW.tar.gz -C $target_directory
#remove tarball of source
rm source_clone_$NOW.tar.gz
cd $target_directory
# Reset Directory Permissions
find $target_directory -type d -exec chmod 755 {} \;
find $target_directory -type f -exec chmod 644 {} \;
#set database details with perl find and replace
perl -pi -e "s/$source_dbname/$target_dbname/g" wp-config.php
perl -pi -e "s/$source_dbuser/$target_dbuser/g" wp-config.php
perl -pi -e "s/$source_dbpass/$target_dbpass/g" wp-config.php
echo "define('RELOCATE',true);" | tee -a wp-config.php
#echo "define('WP_HOME','http://$target_domain');" | tee -a wp-config.php
#echo "define('WP_SITEURL','http://$target_domain');" | tee -a wp-config.php
echo "================================"
echo "Directory duplicated"
echo "================================"
# Begin Database Duplication
# Export the database
mysqldump -u$mysql_user -p$mysql_pass $source_dbname > $target_directory/clone_$NOW.sql
# Create the target database and permissions
mysql -u$mysql_user -p$mysql_pass -e "create database $target_dbname; GRANT ALL PRIVILEGES ON $target_dbname.* TO '$target_dbuser'@'localhost' IDENTIFIED BY '$target_dbpass'"
# Import the source database into the target
mysql -u$mysql_user -p$mysql_pass $target_dbname < $target_directory/clone_$NOW.sql
echo "================================"
echo "Database duplicated"
echo "================================"
#Activate Web Configuration
cp $default_apache_directory/$source_conf $default_apache_directory/$target_conf
#set database details with perl find and replace
perl -pi -e "s/$source_domain/$target_domain/g" $default_apache_directory/$target_conf
perl -pi -e "s|${source_directory}|${target_directory}|g" $default_apache_directory/$target_conf
a2ensite $target_conf
service apache2 reload
echo "================================"
echo "Web configuration added"
echo "================================"
echo "Clone is complete."
echo "Test at http://"$target_domain
echo "================================"
fi

如果您有建议和定制,请告诉我。在下面的评论中发表您的想法。

清理以进行扩展测试

以下行可能有助于您删除和撤消克隆的测试站点。您可以根据您的需要对其进行自定义:

  sudo rm -ifr /var/www/clone
  sudo a2dissite clone.conf 
  sudo service apache2 reload
  sudo rm /etc/apache2/sites-available/clone.conf
  mysql -u root -p -e "drop database clone;"

更改 Wp-Config.php 中的安全密钥

您还可以通过手动替换目标站点的 wp-config.php 中的身份验证密钥和盐来更好地保护您的新 WordPress 站点:

/**#@+
 * Authentication Unique Keys and Salts.
 *
 * Change these to different unique phrases!
 * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key 
service}
 * You can change these at any point in time to invalidate all existing cookies. This will force all users to have 
to log in again.
 *
 * @since 2.6.0
 */
define('AUTH_KEY',         '+9%S?YVnr%5Vr!Et4J,@9/Z^.kT_Lu~5SGwr9=|Y &D-ARSWf$mF#J_3U:/iE>-R');
define('SECURE_AUTH_KEY',  'e3Wr7%Aa7H1,f<SR[Sp&g.kJw,.)bR-9jz{uU&[R{[J]ITK8q>:!5@y:Q;c01dL ');
define('LOGGED_IN_KEY',    '1I%pW%UyjRMqy__Da)siA)+V]Ur$9uXPmxv|eBjM~-m&-<WEy&+XXb43uh8&aP+U');
define('NONCE_KEY',        'A9]+PFgvxYa^<B}_.F?9A,!&i-.b6E.I?&?U*)X.Vh+fq`SfE[XJG+MG|pg;y%Ah');
define('AUTH_SALT',        'gT (4]L{mm!|>9kC<%59rB7sbe1)jW0GCnfupJT+8z-z#%o@b|[QH=i@h|-/t!9S');
define('SECURE_AUTH_SALT', 'ON8K<,WSy8+F ~XaQpCwC8(a/{HksMh<T)QLD]s[-:yv+fx8!`<!*~mgB32X:w5k');
define('LOGGED_IN_SALT',   'vHJ%{=X6$ue>ZIo|%|cisp1R}9cJ< Rz-J;H|:O2A7$+*aGXMH!+KvD+tZ/I*U5$');
define('NONCE_SALT',       '[ytQ;C)BvgU!#>a,,g|)~EKBQUig7Uv.-8?q%lmFte,P>,]f#.}i`Wx8S+_S@&.(');
/**#@-*/

您只需访问 https://api.wordpress.org/secret-key/1.1/salt/ 并将它们剪切并粘贴到您的 wp-config.php 文件中即可:

Klon WordPress dalam Linux

现在,如果您是 Linux 脚本纯粹主义者,我将允许您更新 Gallagher 的 WordPress Bash 安装脚本。他的脚本复制了默认的 WordPress wp-config.php,因此他可以使用可预测的源字符串来替换他的脚本生成的密钥:

#set WP salts
perl -i -pe'
  BEGIN {
    @chars = ("a" .. "z", "A" .. "Z", 0 .. 9);
    push @chars, split //, "!@#$%^&*()-_ []{}<>~\`+=,.;:/?|";
    sub salt { join "", map $chars[ rand @chars ], 1 .. 64 }
  }
  s/put your unique phrase here/salt()/ge
' wp-config.php

我从未编写过正则表达式来替换我们源站点的动态预先存在的 wp-config.php 文件中的键值。如果您决定这样做,请在评论中分享并提前致谢。

有疑问吗?

我非常喜欢让这个脚本工作。或者,我至少应该说我喜欢在完成后运行它。我希望我很久以前就创建了它,因为它非常有效和高效。我可以克隆小型 WordPress 网站,并在大约 60 秒内让它们在我的服务器上运行。其他插件或复制选项都不是那么无缝。

如果您有任何疑问,请在下面发布。或者,您可以通过 Twitter @reifman 联系我或直接给我发电子邮件。请查看我的 Envato Tuts+ 讲师页面,查看我编写的其他教程,例如我的创业系列(使用 PHP 构建您的创业公司)。

相关链接

  • WordPress Bash 安装脚本,作者:Brian Gallagher
  • 移动 WordPress
  • 用于完整 WordPress 备份的 Shell 脚本,作者:Konstantin Kovshenin
  • CodeCanyon 上提供 WordPress 插件

Atas ialah kandungan terperinci Klon WordPress dalam Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn