Перенос сайта под управлением WordPress на домашний сервер с Ubuntu 13.10 + Nginx

от автора


Задача была такая: перенести свой блог, сделанный на WordPress на свой домашний сервер. Все в целях эксперимента. Установку Nginx, PHP (не забудьте установить php5-fpm), MySQL описывать не буду – это все просто, при установке по умолчанию все должно работать. Еще нам понадобятся бэкапы сайта и его базы данных. Их можно получить на хостинге, где находится сайт.

Разархивируем файлы сайта в папку на новом сервере, например в /usr/local/www/bdb.net.ua.

Теперь настроим файлы Nginx. Редактируем файл /etc/nginx/nginx.conf:

user www-data; worker_processes 1; pid /var/run/nginx.pid; events { worker_connections 256; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; server_tokens off; client_max_body_size 8m; reset_timedout_connection on; # server_names_hash_bucket_size 64; # server_name_in_redirect off; index index.php index.html index.htm; include /etc/nginx/mime.types; default_type application/octet-stream; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; upstream php5-fpm { keepalive 8; server unix:/var/run/php5-fpm.sock; } # include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } 

Опция worker_processes у меня равна 1, потому, что на сервере один процессор.

Создаем конфигурацию для WordPress — /etc/nginx/conf.d/wordpress.conf:

# WordPress single blog rules. # Designed to be included in any server {} block. # This order might seem weird - this is attempted to match last if rules below fail. # http://wiki.nginx.org/HttpCoreModule location / { try_files $uri $uri/ /index.php?$args; } # Add trailing slash to */wp-admin requests. rewrite /wp-admin$ $scheme://$host$uri/ permanent; # Directives to send expires headers and turn off 404 error logging. location ~* ^.+.(xml|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { access_log off; log_not_found off; expires max; } # Uncomment one of the lines below for the appropriate caching plugin (if used). #include global/wordpress-wp-super-cache.conf; #include global/wordpress-w3-total-cache.conf; # Pass all .php files onto a php-fpm/php-fcgi server. location ~ .php$ { # Zero-day exploit defense. # http://forum.nginx.org/read.php?2,88845,page=3 # Won't work properly (404 error) if the file is not stored on this server, which is # entirely possible with php-fpm/php-fcgi. # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on another machine. # And then cross your fingers that you won't get hacked. try_files $uri =404; fastcgi_split_path_info ^(.+.php)(/.+)$; #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini include fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; fastcgi_ignore_client_abort on; fastcgi_keep_conn on; fastcgi_pass php5-fpm; } 

Добавляем набор ограничений — /etc/nginx/conf.d/restrictions.conf:

# Global restrictions configuration file. # Designed to be included in any server {} block.</p> location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac). # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban) location ~ /\. { deny all; } # Deny access to any files with a .php extension in the uploads directory # Works in sub-directory installs and also in multisite network # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban) location ~* /(?:uploads|files)/.*\.php$ { deny all; } 

По умолчанию в Nginx уже есть файл начальной конфигурации /etc/nginx/sites-available/default, мы заменим его содержимое на такое (не забывайте подставлять свои пути к паке с файлами сайта):

server { server_name localhost; root /usr/local/www/bdb.net.ua; access_log /var/log/nginx/bdb.info-access.log; error_log /var/log/nginx/bdb.info-error.log; include conf.d/restrictions.conf; include /usr/local/www/bdb.net.ua/nginx.conf; include conf.d/wordpress.conf; } 

Стоит заметить, что на этот файл существует симлинк в папке /etc/nginx/sites-enabled/, иначе конфигурация работать не будет.

Создадим файл:

touch /usr/local/www/bdb.net.ua/nginx.conf 

Он понадобится для функционирования очень полезного плагина для WordPress — W3 Total Cache, который рекомендуется к установке.

Не забываем установить владельца – www-data и группу-владельца — www-data на папку с сайтом. Разрешения на папку и файлы я установил – 755.

Перезагрузить конфигурационный файл Nginx можно так:

sudo nginx -s reload 

Теперь импортируем базу данных. Запускаем MySQL:

mysql -uroot -p<password> 

Создаем базу:

CREATE DATABASE wordpress; 

Выходим из MySQL и импортируем базу:

mysql -uroot -p<password> wordpress < /path/to/base/site.sql 

Теперь нужно поменять в базе данных URL сайта. Запускаем MySQL:

mysql -uroot -p<password>  

Последовательно выполните такие команды:

USE wordpress; UPDATE wp_options SET option_value = REPLACE(option_value, 'http://старый_домен.com', 'http://новый_домен.com') WHERE option_name = 'home' OR option_name = 'siteurl'; UPDATE wp_posts SET guid = REPLACE(guid, 'http://старый_домен.com', 'http://новый_домен.com'); UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://старый_домен.com', 'http://новый_домен.com'); 

Первая команда у меня не сработала, пришлось заменить такой:

UPDATE wp_options SET option_value = 'http://bdb.net.ua/' WHERE option_name = 'home' OR option_name = 'siteurl'; 

После этого я беспрепятственно зашел в админку сайта.

ссылка на оригинал статьи http://habrahabr.ru/post/208896/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *