Drupal 7 サイトリビルド
Nid: 1200
データベースバックアップを使用してサイトを再作成し、不要モジュールや不要ファイルを一掃する。サイバー攻撃を受けたサイトでも、データベース感染していなければこの方法によって復旧可能。
1 . 準備
$ sitename=octaviadata.com $ cd /var/www/html/$sitename
2 . ユーザ確認
$ drush uinf $(drush sqlq --extra=--skip-column-names "SELECT GROUP_CONCAT(name) FROM users") User ID : 0 User name : User mail : User roles : anonymous user User status : blocked User ID : 1 User name : admin User mail : octaviadata@outlook.com User roles : authenticated user administrator User status : active
パスワード設定
$ drush upwd --password="newPassword" admin
ユーザをブロック
$ drush ublk <username>
3 . データベース確認
レコード件数確認
$ cd /var/www/html/$sitename $ drush sql-query "select table_name, table_rows from information_schema.TABLES where table_schema = 'db_${PWD##*/}' order by table_rows;"
キャッシュテーブルクリア
$ drush sql-query "SHOW TABLES LIKE 'cache%'" | grep '^cache' | xargs -L1 -I% echo "TRUNCATE TABLE %;" | xargs | $(drush sql-connect) -v
ログデータクリア
$ drush watchdog-delete all -y
ログ設定見直し
admin/config/development/logging
empty core search index tables
$ drush sql-query "SHOW TABLES LIKE 'search_%'" | grep -v '^Tables' | xargs -L1 -I% echo "TRUNCATE TABLE %;" | xargs | $(drush sql-connect) -v
to disable core search indexing
$ sudo vi sites/default/settings.php $conf['search_cron_limit'] = '0';
アクセスログ設定の見直し、停止。人気記事を表示させる場合は必要。
admin/config/system/statistics $ drush dis statistics -y
cron 設定確認
admin/config/system/cron
cron を実行し、レコードをクリアさせる。
$ sudo -u www-data drush cron
4 . 変更ファイル確認
コピーすべきファイルがないかどうか確認する。
$ sudo drush en hacked -y && drush hacked-list-projects --force-rebuild && drush hacked-list-projects | grep Changed Title Name Version Status Changed Deleted Drupal core drupal 7.61 Changed 3 1 Free pager freepager 7.x-2.x-dev Changed 1 0 Gratis gratis 7.x-2.10 Changed 1 0 Media Responsive Theme media-responsive-theme 7.x-1.1 Changed 4 0 Views Fluid Grid views_fluid_grid 7.x-3.0 Changed 1 0
$ drush hacked-details gratis Details for project: Gratis Total files: 92, files changed: 1, deleted files: 0 Detailed results: count(): Parameter must be an array or an object that implements Countable Table.php:699 [warning] Status File Changed templates/html.tpl.php
$ drush hacked-diff gratis diff -uprb a/templates/html.tpl.php b/templates/html.tpl.php --- templates/html.tpl.php 2016-04-17 18:04:29.000000000 +0000 +++ templates/html.tpl.php 2016-05-27 08:14:50.000000000 +0000 @@ -63,5 +63,7 @@ <?php print $page_top; ?> <?php print $page; ?> <?php print $page_bottom; ?> +<!-- Go to www.addthis.com/dashboard to customize your tools --> +<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-999" async="async"></script> </body> </html> Only in /var/www/html/octaviadata.com/sites/all/themes/gratis/templates: html.tpl.php.org
5 . モジュールリストアップ
不要モジュールをOFFにする。
$ drush dis addthis addthis_displays addthis_test addtoany adsense_cse adsense_oldcode adsense_search xmlsitemap_user editor editor_ckeditor entitycache memcache memcache_admin mollom panels wysiwyg php matomo -y
モジュールリストを半角スペース区切りの文字列で作成し、モジュールをインストールする際に使用する。
$ dpmodules=`drush pm-list --status=enabled --pipe | tr '\n' ' '` && echo $dpmodules actions_permissions admin_devel ...
6 . 必要ライブラリの確認
$ dplib=`/bin/ls /var/www/html/$sitename/sites/all/libraries` && echo $dplib ckeditor colorbox htmlpurifier jquery.imagesloaded jsonpath predis
7 . データベースバックアップ
メンテナンスモード設定
$ drush vset maintenance_mode 1
日付と時間をファイル名に指定して、データベースをバックアップ。
$ sudo sh -c 'drush sql-dump > /var/www/html/db_${PWD##*/}.`date +%Y%m%d_%H%M%S`.sql'
8 . 旧サイトの退避
$ cd /var/www/html && sudo mv $sitename /var/www/html/tmp
9 . Drupal 7 インストール
データベースのパスワードはランダム。
$ cd /var/www/html && sudo drush dl drupal-7 --drupal-project-rename=$sitename && cd /var/www/html/$sitename && sudo drush -y si minimal --db-url=mysql://dbadmin_$sitename:`head /dev/urandom | tr -dc A-Za-z0-9 | head -c 12`@localhost/db_$sitename --db-su=root --site-name="example web site" --account-mail=octaviadata@outlook.com --site-mail=octaviadata@outlook.com && sudo sh -c "chown -R www-data:www-data . && find . -type f -exec chmod 444 '{}' \; && find . -type d -exec chmod 555 '{}' \; && chmod a+w sites/default/files && chmod 444 sites/default/settings.php && find sites/default/files -type d -print0 | xargs -0 chmod 755"
当日日付ファイル名の sql ファイルからデータベースリストア。
$ drush -y sql-drop && drush sql-cli < ../db_$sitename.`date +%Y%m%d_`*.sql
10 . モジュールインストール
ライブラリ等ダウンロード
$ sudo rm -rf sites/all/libraries/{htmlpurifier,FooTable,predis,prettify,footable,fitvids,jsonpath}
$ sudo sh -c "git clone https://github.com/ezyang/htmlpurifier.git sites/all/libraries/htmlpurifier && git clone --branch V2 https://github.com/fooplugins/FooTable.git sites/all/libraries/FooTable && git clone https://github.com/nrk/predis.git sites/all/libraries/predis && git clone https://github.com/google/code-prettify.git sites/all/libraries/prettify && rm -rf /tmp/FooTable-3 && wget -cP /tmp https://github.com/fooplugins/FooTable/archive/V3.zip && unzip /tmp/V3.zip -d /tmp && mv /tmp/FooTable-3/compiled sites/all/libraries/footable && wget -c -P sites/all/libraries/fitvids https://raw.github.com/davatron5000/FitVids.js/master/jquery.fitvids.js && mkdir -p sites/all/libraries/jsonpath && wget -c -O sites/all/libraries/jsonpath/jsonpath.php https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/jsonpath/jsonpath-0.8.1.php"
必要に応じてその他ライブラリ。
$ echo $dplib
$ sudo sh -c "rm -rf sites/all/libraries/superfish && git clone --branch 1.x https://github.com/mehrpadin/Superfish-for-Drupal.git sites/all/libraries/superfish" $ rm -rf /tmp/leaflet.zip ; wget -c -P /tmp http://cdn.leafletjs.com/leaflet/v1.0.3/leaflet.zip && sudo unzip -d sites/all/libraries/leaflet /tmp/leaflet.zip $ sudo sh -c "rm -rf sites/all/libraries/openlayers && git clone https://github.com/openlayers/openlayers.git sites/all/libraries/openlayers" $ versionJuicebox='1.5.1.2' $ sudo sh -c "rm -rf /tmp/juicebox_lite_${versionJuicebox}; wget -cP /tmp http://www.juicebox.net/release/juicebox_lite_${versionJuicebox}.zip && unzip /tmp/juicebox_lite_${versionJuicebox}.zip -d /tmp && rsync -av /tmp/juicebox_lite_${versionJuicebox}/ sites/all/libraries/juicebox && cp /tmp/juicebox_lite_${versionJuicebox}/web/jbcore/juicebox.js sites/all/libraries/juicebox/ && cp -r /tmp/juicebox_lite_${versionJuicebox}/web/jbcore/classic sites/all/libraries/juicebox/" $ rm -rf /tmp/DataTables-*; wget -cP /tmp http://datatables.net/releases/DataTables-1.10.19.zip && unzip /tmp/DataTables-1.*.zip -d /tmp && sudo mkdir -p sites/all/modules/datatables && sudo mv /tmp/DataTables-1.10.19 sites/all/modules/datatables/dataTables $ sudo sh -c "rm -rf sites/all/libraries/flexslider && git clone https://github.com/woocommerce/FlexSlider.git sites/all/libraries/flexslider" $ sudo sh -c "rm -rf sites/all/libraries/colorbox && git clone https://github.com/jackmoore/colorbox.git sites/all/libraries/colorbox" $ sudo wget -P sites/all/libraries/masonry https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js $ sudo wget -P sites/all/libraries/jquery.cycle http://malsup.github.io/jquery.cycle.all.js $ sudo wget -P sites/all/libraries/imagesloaded http://imagesloaded.desandro.com/imagesloaded.pkgd.min.js $ sudo mkdir -p sites/all/libraries/jquery.imagesloaded && sudo cp sites/all/libraries/imagesloaded/imagesloaded.pkgd.min.js sites/all/libraries/jquery.imagesloaded/jquery.imagesloaded.js $ sudo mkdir -p sites/all/libraries/infobubble/src && sudo wget -c -O sites/all/libraries/infobubble/src/infobubble-compiled.js https://raw.githubusercontent.com/googlemaps/v3-utility-library/master/infobubble/src/infobubble-compiled.js $ sudo sh -c "rm -rf sites/all/libraries/soundmanager2 && git clone https://github.com/scottschiller/SoundManager2 sites/all/libraries/soundmanager2" $ sudo sh -c "rm -rf sites/all/libraries/PHPExcel && git clone https://github.com/PHPOffice/PHPExcel.git sites/all/libraries/PHPExcel" $ sudo wget -P sites/all/libraries/isotope https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.min.js $ sudo mkdir -p sites/all/modules/whois; wget -c -P /tmp https://jaist.dl.sourceforge.net/project/phpwhois/phpwhois/phpwhois-4.2.2/phpwhois-4.2.2.tar.gz && sudo tar xvzf /tmp/phpwhois-*.tar.gz -C sites/all/modules/whois && sudo mv sites/all/modules/whois/phpwhois-4.2.2 sites/all/modules/whois/phpwhois $ sudo sh -c "rm -rf sites/all/libraries/jquery-simple-color && git clone https://github.com/recurser/jquery-simple-color.git sites/all/libraries/jquery-simple-color"
作成したモジュールリスト $dpmodules を使用して、モジュールをインストール
$ sudo drush dl google_analytics footable-7.x-1.0 -y
$ sudo drush -y en redis optimizedb path2ban module_missing_message_fixer schema_metatag $dpmodules $ sudo drush -y en footable && sudo drush chosenplugin && drush -y dis toolbar overlay
エラーが出る場合、原因のモジュールを除外し、キャッシュクリアしてインストール再実行。
$ drush sql-query "DELETE FROM cache_bootstrap ;DELETE FROM cache"
不要モジュールがあれば、アンインストール
$ dpmunused='panels metatag_panels panels_mini panels_node panels_ipe i18n_panels total_control addthis addthis_displays adsense_cse' && drush dis $dpmunused -y && drush pm-uninstall $dpmunused -y
モジュールアップデート
$ drush module-missing-message-fixer-list
$ sudo sh -c "drush module-missing-message-fixer-fix --all && drush php-eval 'actions_synchronize(actions_list(), TRUE);' && drush -y pm-update && drush l10n-update"
11 . database update script の実行
$ sudo drush updatedb -y
update.php
12 . ファイルコピー
必要ファイル、変更したファイルをコピー
$ sudo rsync -avz --exclude='styles/' --exclude='*.gz' --exclude='*.js' --exclude='*.css' --exclude='.htaccess' ../tmp/$sitename/sites/default/files sites/default/ $ sudo rsync -avz ../tmp/$sitename/sites/default/files/favicons sites/default/files/ $ sudo cp -p ../tmp/$sitename/robots.txt . $ sudo cp -p ../tmp/$sitename/sites/all/themes/responsive_bartik/templates/html.tpl.php ./sites/all/themes/responsive_bartik/templates/html.tpl.php $ sudo cp -p ../tmp/$sitename/sites/all/themes/gratis/templates/html.tpl.php ./sites/all/themes/gratis/templates/html.tpl.php $ sudo cp -p ../tmp/$sitename/sites/all/themes/responsive_business/templates/html.tpl.php ./sites/all/themes/responsive_business/templates/html.tpl.php $ sudo cp -p ../tmp/$sitename/sites/all/themes/responsive_business/images/slide-image-* ./sites/all/themes/responsive_business/images/
差分の確認
$ diff /var/www/html/$sitename /var/www/html/tmp/$sitename $ diff -r /var/www/html/$sitename /var/www/html/tmp/$sitename
13 . settings.php 設定
$ sudo vi sites/default/settings.php /** * Redis */ $conf['redis_client_interface'] = 'Predis'; $conf['lock_inc'] = 'sites/all/modules/redis/redis.lock.inc'; $conf['path_inc'] = 'sites/all/modules/redis/redis.path.inc'; $conf['cache_backends'][] = 'sites/all/modules/redis/redis.autoload.inc'; $conf['cache_default_class'] = 'Redis_Cache'; $conf['redis_client_socket'] = '/var/run/redis/redis-server.sock'; $conf['cache_prefix'] = 'octaviadata.com'; $databases['default']['default'] = array( 'driver' => 'mysql', 'username' => 'dp_db_admin', 'password' => 'dp_db_password', 'port' => '', 'host' => 'localhost', 'database' => 'db_octaviadata.com', 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_general_ci', );
14 . アップデート、キャッシュクリア、ディレクトリパーミッション設定
$ [ ! -z $sitename ] || echo '$sitename is not set.' && cd /var/www/html/$sitename && pwd
$ sudo sh -c "drush pm-updatestatus 2>/dev/null && drush -y l10n-update; drush -y pm-update && drush -y updatedb && drush cron -d && drush cc all && chown -R www-data:www-data . && find . -type f -exec chmod 444 '{}' \; && find . -type d -exec chmod 555 '{}' \; && chmod a+w sites/default/files && chmod 444 sites/default/settings.php && find sites/default/files -type d -print0 | xargs -0 chmod 755"
Redis キー削除 settings.phpでキー設定している場合
$ redis-cli --scan --pattern hostname.octaviadata.com* | xargs redis-cli del
設定しているテーマの設定画面を開き、保存をクリックする。これをしないと、cssファイルが存在せずに、文字や色装飾のない画面になっていることがある。
admin/appearance
15 . ログ確認、設定確認
$ drush ws
サイトにアクセスして、エラー確認。
admin/reports/status
メンテナンスモード解除
$ drush vset maintenance_mode 0
16 . サイトのバックアップ
$ sudo drush archive-dump --tar-options='--exclude=.git --exclude=sites/default/files/styles' --destination=/var/www/html/db_${PWD##*/}.`date +%Y%m%d_%H%M%S`.tar.gz
関連記事
- 1 of 2
- next ›