Лёгкий сервер для wordpress на виртуальном хостинге

ubuntu-server-lts

Системные требования для сайта на wordpress таковы:

  • PHP версии 5.2.4 или выше;
  • MySQL версии 5.0.15 или выше.

Сама установка очень проста — создать базу данных, скачать архив с последней версией вордпресса и распаковать его в корень сайта. Далее настроить по подсказкам и начать наполнять содержимым.

Обычно, провайдеры виртуальных серверов (VPS) предлагают разные варианты систем. Лучше всего выбирать сервер на Ubuntu LTS, в настоящее время 14.04, т.к. это очень стабильная и легко управляемая система, со своевременными обновлениями и длительным сроком поддержки. Провайдеры зачастую предоставляют к ней виртуальный терминал, работающий в браузере, но, в целях безопасности, лучше им не пользоваться, а заходить на сервер из защищённой консоли (SSH) со своего компьютера.

Прежде чем покупать VPS, можно поупражняться в работе с сервером на виртуальной машине. Для этого хорошо подходит VirtualBox или бесплатный VMWarePlayer. А после отладки сайта на виртуалке, очень просто перенести весь сайт на рабочий VPS, включая базу данных.

Поэтому, начнём, помолясь, с виртуального сервера.

Я буду устанавливать Ubuntu Server 14.04.3 LTS, скачать который можно отсюда на VMware Workstation 12 Player for Linux. Установка VMware Player:

cd ~/download
sudo sh ./VMware-Player-12.0.0-2985596.x86_64.bundle

После этого нужно перелогиниться или перезагрузить систему. Создадим виртуальную машину с такими параметрами:

  • Диск 10гб;
  • Сеть Bridged;
  • Память 1гб.

Звуковую карту, 3д ускорение, принтеры и USB отключим, ни к чему это на сервере.

screen-02

При установке из списка пакетов нужно выбрать только OpenSSH-server, всё остальное поставим вручную.

При установке сервера на VPS существует только один пользователь root, поэтому нужно создать обычного пользователя и задать его пароль. Пользователь root является администратором в среде Linux и имеет очень широкий набор прав, поэтому не рекомендуется работать под ним, т.к. можно по неосторожности или по незнанию убить всю систему.

# создание пользователя и пароля
adduser ваше-имя
# удаление пользователя вместе с домашним каталогом
deluser --remove-home ваше-имя

Добавить нового пользователя в группы www-data и sudo:

usermod -a -G www-data, sudo ваше-имя

А на виртуальной машине понадобится только добавить себя в группу www-data.

Теперь нужно выйти exit и зайти под своим именем и первым делом обновить систему.

sudo apt update && sudo apt upgrade -y && sudo reboot

Чтобы не светиться в интернете своими действиями и паролями, нужно создать ключи безопасности, состоящими из публичного (открытого) и секретного (закрытого) ключей для работы в защищённой консоли.

ssh-keygen

При этом пароль можно оставить пустым, дальше настроим вход по ssh только с открытым колючом; распечатать его можно так:

cat ~/.ssh/id_rsa.pub

скопировать его, и добавить на свой рабочий компьютер:

nano .ssh/authorized_keys # вставить ключ в конец файла на новую строку
chmod 600 .ssh/authorized_keys # и запретить всем его смотреть…

На сервере изменим настройку ssh:

nano /etc/ssh/sshd_config

Отключить вход пользователя root — PermitRootLogin no
Запретить вход по паролю — PasswordAuthentication no
Изменить порт, напр 4567 — Port 4567 (только потом не забыть его…)

Чтобы сервер нормально работал и можно было его найти, ему необходим статичный адрес (на VPS провайдером уже будет назначен адрес, узнать который можно командой ifconfig | grep ‘inet addr’) :

sudo nano /etc/network/interfaces
# и вписать в него
auto eth0
iface eth0 inet static
address 192.168.1.44 <-- это будет статичный адрес вашего сервера
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 8.8.8.8, 8.8.4.4 <-- это гугловский днс

Чтобы вордпресс правильно работал по сети, нужно задать доменное имя на сервере и рабочем компьютере. Например testserver.my.

# добавить строку
# 192.168.1.44 testserver.my
# в /etc/hosts на сервере и рабочем
sudo nano /etc/hosts

Перезагрузить сервер, а на своём рабочем компьютере выполнить команду

ssh-copy-id testserver.my

для того, чтобы входить на сервер по ssh только по публичному ключу без пароля. Так будет безопаснее.

Подготовка завершена и сервер готов к дальнейшей настройке.

screen-03

Теперь можно работать с сервером со своего компьютера в терминале по ssh.

screen-04

Самое время решить, что ставить в качестве серверного стэка. Стандартное решение для вордпресса предполагает LAMP, т.е. Linux, Apache, MySQL, PHP. Линукс уже установлен, а остальное ставится командой:

sudo tasksel install lamp-server

Но Апач для небольшого сайта слишком тяжол, а MySQL потребляет много памяти. Поэтому я буду устанавливать Nginx в качестве фронтэнда и MariaDB в качестве сервера баз данных.

Сперва базу данных.

# при установке запросит пароль администратора root БД
sudo apt-get install mariadb-server
# проверка работы
sudo service mysql status
# очистить демо-данные и запретить доступ из сети
sudo mysql_secure_installation

Если всё в порядке, содаём пользователя БД

mysql -u root -p
CREATE USER 'ваше-имя'@'localhost' IDENTIFIED BY 'пароль';
# даём этому пользователю полные права
GRANT ALL PRIVILEGES ON * . * TO 'ваше-имя'@'localhost';
FLUSH PRIVILEGES;
# создаём базу данных wordpress
CREATE DATABASE wordpress;
exit;
sudo service mysql restart

Потом сервер Nginx:

sudo apt-get install nginx

И php5:

sudo apt-get install php5-fpm php5-mysql
# настраиваем php
sudo nano /etc/php5/fpm/php.ini
# заменить cgi.fix_pathinfo=1 на cgi.fix_pathinfo=0
# это нужно для повышения безопасности
# перезагружаем php
sudo service php5-fpm restart

Настраиваем Nginx.

cd ~/
mkdir testserver.my
cd /etc/nginx/sites-available/
sudo nano testserver

И в него вставляем:

server {
       listen 80;
       server_name www.testserver.my testserver.my;
       root /home/ваше-имя/testserver.my; # здесь корень сайта

       if ($http_host != "www.testserver.my") {
                 rewrite ^ http://www.testserver.my$request_uri permanent;
       }

       index index.php index.html; # сначала php

       location = /favicon.ico {
                log_not_found off;
                access_log off;
       }

       location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
       }

       # запрет выполнения скриптов в перезаписываемых директориях
       location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
                return 403;
                error_page 403 /403_error.html;
       }

       # запрет доступа к скрытым файлам .htaccess, .htpasswd, .DS_Store (Mac).
       location ~ /\. {
                deny all;
                access_log off;
                log_not_found off;
       }

        # пресылаем PHP скрипты FastCGI серверу, слушающего 127.0.0.1:9000
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
        
		location / {
                try_files $uri $uri/ /index.php?q=$uri&$args;
		}
		# кэширование файлов
		location ~* \.(ico|pdf|flv)$ {
                expires 1y;
		}
		location ~* \.(js|css|png|jpg|jpeg|gif|swf|xml|txt)$ {
                expires 14d;
		}
}

Нужно содать ссылку на нашу конфигурацию:

# удалим ссылку на дефолтную конфигурацию
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/testserver /etc/nginx/sites-enabled/testserver

Для проверки создаём в корне сайта файл index.php:

cd
nano ~/testserver.my/index.php

В него вставляем:

<?php
phpinfo();
?>

Перезапускаем nginx:

sudo service nginx restart

Если нигде не напортачили, то зайдя по адресу http://testserver.my/ увидим информацию о php.

screen-05

Теперь самое время установить собственно вордпресс. Скачиваем последнюю версию c сайта ru.wordpress.org и распаковываем её:

cd ~/
wget https://ru.wordpress.org/wordpress-4.3.1-ru_RU.zip
unzip wordpress-4.3.1-ru_RU.zip
mv wordpress/* ~/testserver.my/
rm -rf wordpress

Назначаем права доступа: для файлов 755, а для директорий 644.

sudo chown -R www-data:www-data ~/testserver.my
find ~/testserver.my/ -type f -exec chmod 644 {} +
find ~/testserver.my/ -type d -exec chmod 755 {} +

И наконец, настройка самого вордпресса. Заходим на http://testserver.my/ и далее настраиваем по подсказкам…

screen-06

Если возникнут проблемы с закачкой обновлений, то нужно добавить в конце файла ~/testserver.my/wp-config.php

if(is_admin()) {
add_filter('filesystem_method', create_function('$a', 'return "direct";' ));
define( 'FS_CHMOD_DIR', 0751 );
}

Ещё иногда бывает нужно загрузить на сайт файлы больше 2Мб, что установлено по-умочанию. Для этого изменим несколько параметров в файле /etc/php5/fpm/php.ini, а если их нет, то добавляем:

  • post_max_size = 30M # этот параметр должен быть больше следующего
  • upload_max_filesize = 20M

screen-07

В итоге получился довольно лёгкий и быстрый сервер с малым потреблением памяти.

screen-08

Теперь о резервной копии сайта. Проще всего сделать скрипт и лёгким движение руки архивирование превращается… превращается…

mkdir ~/site-backups
cd site-backups
nano testserver-bk
chmod +x testserver-bk

В него вставляем такой код:

#!/bin/bash

# Цветовые коды
red=$'\e[1;31m'
grn=$'\e[1;32m'
yel=$'\e[1;33m'
blu=$'\e[1;34m'
mag=$'\e[1;35m'
cyn=$'\e[1;36m'
end=$'\e[0m'

# Переменные
SRVADDR="testserver.my" # Адрес сайта
SRVROOT="/home/sergei/$SRVADDR" # Корень сайта
BKDIR="$HOME/webkp/" # Директория для архивирования
BKNAME=$1 # Передаём скрипту имя. Лучше называть по дате создания архива

if [ -e $BKNAME ]; then # Если архив уже есть, то  нужно другое имя
   printf "${red}Архив '$BKNAME' уже есть…\n${end}"
else
   mkdir $BKNAME # Создаём директорию для архива
   printf "${grn}Начинается архивация\n${yel}"
   rsync -av $SRVADDR:$SRVROOT $BKDIR$BKNAME/ &&\
   printf "${grn}Архивация успешно завершена.\n${blu}Создаём копию базы данных…\n${yel}" &&\
   # Здесь нужно указать имя пользователя, пароль и название базы данных
   ssh $SRVADDR 'mysqldump -uИМЯ -pПАРОЛЬ -hlocalhost wordpress > wordpress-bk.sql' &&\
   printf "${grn}Копия базы данных успешно создана.\n${blu}Начинается копирование…\n${yel}" &&\
   scp $SRVADDR:/home/sergei/wordpress-bk.sql $BKDIR$BKNAME/ &&\
   printf "${grn}Копирование успешно завершено.\n${blu}Удаление копии с сервера…\n${yel}" &&\
   ssh $SRVADDR 'rm wordpress-bk.sql' &&\
   printf "${cyn}Копия удалена с сервера…\n${end}" || printf "${red}Что-то пошло не так…\n${end}"
fi

Процесс пошел…

./testserver-bk 3-okt-2015

screen-09

Получается вот так:

screen-10

Обратный процесс также очень прост — копируем всё на сервер, соответственно, содержимое — в корень сайта, архив базы данных — в домашнюю директорию; создаём базу данных и импортируем архив в неё:

# Это если только базы данных ещё нет
mysql -u имя-польз-бд -p
CREATE DATABASE wordpress;
exit
# А если есть, то просто импортируем архив
mysql -u имя-польз-бд -p wordpress < wordpress-bk.sql

Конец.

При перепечатке ссылка на unixone.ru обязательна.

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