2008年10月26日 星期日

一套程式管理多個wordpress

由於已經多達四個wordpress的站,將來可能還會幫別人架在自己的主機上。

然而wordpress還蠻常更新的,包括wordpress本身的程式和plugin。

而更新的程序還挺麻煩的。

因此,那天突然想到說,我可以把程式用symbolic的方式來實作。

然而多套的wordpress用同一套code。

大家就來看看怎麼做吧!

限unix主機哦!(而且要能夠以ssh登入)



後來有去參考了一些國外的文章

還有官方推薦的project。

官方推薦的project還有另外安裝,我是沒試過,但總覺得這些東西自己來,比較能夠控制。

然而照著國外的文章的方式實作,卻會導致一些問題,沒關係,等等都可以解決。

先解釋一下原理,wordpress使用者的文章放在資料庫,使用者上傳的圖片都放在

./wp-content/

而plugin放在

./wp-content/plugins/*

但plugins裡面的資料是不會變的,也不會紀錄資料在裡面(記在資料庫)。

因此要建立兩個code base,一個是plugin, 一個是wordpress core(核心)

下列流程只適用於把專案建好的情況下。

詳細步驟如下:


備份資料


請記得,這很重要!

把cache關閉


不然連發生錯誤的時候都不知道

建立資料匣


選定兩個路徑來放置 wordpress的最新版本以及plugin

wordpress core放在  /home/www/public_html/pack/wordpress/

plugin放在 /home/www/public_html/pack/wordpress-plugins/

語言檔放在 /home/www/public_html/pack/wordpress-languages/

建立資料


去下載wordpress最新版本的code放進去

如果我原本的專案放在

/home/www/public_html/sopili.dev/

那我就把 /home/www/public_html/sopili.dev/wp-content/plugins/* 都放到

/home/www/public_html/pack/wordpress-plugins/*

把語言檔 /home/www/public_html/sopili.dev/wp-content/languages/* 都放到

/home/www/public_html/pack/wordpress-languages/*

修改資料


由於wp裡面常用到ABSPATH的變數,但卻是由

wp-config.php和wp-load.php產生的

產生的方式是 dirname(__FILE__);

但這卻會產生 不正確的路徑,因此要修改這兩隻。

到 /home/www/public_html/pack/wordpress/wp-load.php

define( 'ABSPATH', dirname(__FILE__) . '/' );

改成

define( 'ABSPATH', $_SERVER['DOCUMENT_ROOT']. '/' );

再到原本的專案底下,把 /home/www/public_html/sopili.dev/wp-config.php

在 /* That's all, stop editing! Happy blogging. */ 的上面,加一行。

define( 'ABSPATH', $_SERVER['DOCUMENT_ROOT']. '/' );

把所有的code換成捷徑的方式


cd /home/www/public_html/sopili.dev/

rm index.php && ln -s /home/www/public_html/pack/wordpress/index.php index.php


rm license.txt && ln -s /home/www/public_html/pack/wordpress/license.txt license.txt

rm readme.html && ln -s /home/www/public_html/pack/wordpress/readme.html readme.html

rm wp-app.php && ln -s /home/www/public_html/pack/wordpress/wp-app.php wp-app.php

rm wp-atom.php && ln -s /home/www/public_html/pack/wordpress/wp-atom.php wp-atom.php

rm wp-blog-header.php && ln -s /home/www/public_html/pack/wordpress/wp-blog-header.php wp-blog-header.php

rm wp-comments-post.php && ln -s /home/www/public_html/pack/wordpress/wp-comments-post.php wp-comments-post.php

rm wp-commentsrss2.php && ln -s /home/www/public_html/pack/wordpress/wp-commentsrss2.php wp-commentsrss2.php

rm wp-config-sample.php && ln -s /home/www/public_html/pack/wordpress/wp-config-sample.php wp-config-sample.php

rm wp-cron.php && ln -s /home/www/public_html/pack/wordpress/wp-cron.php wp-cron.php

rm wp-feed.php && ln -s /home/www/public_html/pack/wordpress/wp-feed.php wp-feed.php

rm wp-links-opml.php && ln -s /home/www/public_html/pack/wordpress/wp-links-opml.php wp-links-opml.php

rm wp-load.php && ln -s /home/www/public_html/pack/wordpress/wp-load.php wp-load.php

rm wp-login.php && ln -s /home/www/public_html/pack/wordpress/wp-login.php wp-login.php

rm wp-mail.php && ln -s /home/www/public_html/pack/wordpress/wp-mail.php wp-mail.php

rm wp-pass.php && ln -s /home/www/public_html/pack/wordpress/wp-pass.php wp-pass.php

rm wp-rdf.php && ln -s /home/www/public_html/pack/wordpress/wp-rdf.php wp-rdf.php

rm wp-register.php && ln -s /home/www/public_html/pack/wordpress/wp-register.php wp-register.php

rm wp-rss.php && ln -s /home/www/public_html/pack/wordpress/wp-rss.php wp-rss.php

rm wp-rss2.php && ln -s /home/www/public_html/pack/wordpress/wp-rss2.php wp-rss2.php

rm wp-settings.php && ln -s /home/www/public_html/pack/wordpress/wp-settings.php wp-settings.php

rm wp-trackback.php && ln -s /home/www/public_html/pack/wordpress/wp-trackback.php wp-trackback.php

rm xmlrpc.php && ln -s /home/www/public_html/pack/wordpress/xmlrpc.php xmlrpc.php

rm -rf wp-admin && ln -s /home/www/public_html/pack/wordpress/wp-admin wp-admin

rm -rf wp-includes && ln -s /home/www/public_html/pack/wordpress/wp-includes wp-includes

rm -rf wp-content/plugins &&  ln -s /home/www/public_html/pack/wordpress-plugins wp-content/plugins
rm -rf wp-content/languages && ln -s /home/www/public_html/pack/wordpress-languages wp-content/languages


已知問題:


使用wp-super-cache在第一次啟用時,會在 wp-content/wp-cache-config.php 發生錯誤。

去修改這一次,把 Added by WP-Cache Manager 的這一行

改成

define( 'WPCACHEHOME', ABSPATH .  "wp-content/plugins/wp-super-cache/" ); //Added by WP-Cache Manager
就可以了!

大功告成


因此,以後更新plugin只要更新一次。

而wordpress core也只需要一次。