Найти в Дзене
www.TechPlanet.pro

Установка WordPress на Ubuntu с MySQL

Краткая инструкция по установки #WordPress на #Ubuntu с #MySQL .Так же установим бесплатный сертификат #Let's Encrypt на бесплатном домене #nip.io Предварительная подготовка Как создать виртуальную машину с Ubuntu можете посмотреть в этом посте. Если в дальнейшем вы планируете так же установить почту с ClamAV, то вам потребуется 4GB RAM на виртуальной машине. Заходим на консоль яндекс облако и при создании виртуальной машины меняем помять на 4 ГБ. После подключения обновляем систему. sudo apt update && sudo apt upgrade -y Настройка MySQL Устанавливаем MySQL sudo apt install mysql-server mysql-client -y Подключаемся к MySQL, добавляем базу и пользователя для WordPress. sudo mysql mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; mysql> CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'password'; mysql> GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost'; mysql> FLUSH PRIVILEGES; Установка WordPress Устанавливаем WordPress и необходимые для не
Оглавление

Краткая инструкция по установки #WordPress на #Ubuntu с #MySQL .Так же установим бесплатный сертификат #Let's Encrypt на бесплатном домене #nip.io

Предварительная подготовка

Как создать виртуальную машину с Ubuntu можете посмотреть в этом посте.

Если в дальнейшем вы планируете так же установить почту с ClamAV, то вам потребуется 4GB RAM на виртуальной машине.

Заходим на консоль яндекс облако и при создании виртуальной машины меняем помять на 4 ГБ.

-2

После подключения обновляем систему.

sudo apt update && sudo apt upgrade -y

Настройка MySQL

Устанавливаем MySQL

sudo apt install mysql-server mysql-client -y

Подключаемся к MySQL, добавляем базу и пользователя для WordPress.

sudo mysql
mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
mysql> CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost';
mysql> FLUSH PRIVILEGES;

Установка WordPress

Устанавливаем WordPress и необходимые для него пакеты.

sudo apt install wordpress apache2 php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip -y

Разрешаем rewrite модуль в apache.

sudo a2enmod rewrite

Перегружаем apache и проверяем, что модуль rewrite включен.

sudo systemctl restart apache2
apachectl -M | grep -i rewrite_module

Добавление сайта WordPress

Создаём сайт в apache.

sudo bash -c 'cat > /etc/apache2/sites-available/wordpress.conf <<EOF
Alias /blog /usr/share/wordpress
<Directory /usr/share/wordpress>
    Options FollowSymLinks
    AllowOverride All
    DirectoryIndex index.php
    Order allow,deny
    Allow from all
</Directory>
<Directory /usr/share/wordpress/wp-content>
    Options FollowSymLinks
    Order allow,deny
    Allow from all
</Directory>
EOF'

Добавляем его в активную конфигурацию.

sudo ln -s /etc/apache2/sites-available/wordpress.conf /etc/apache2/sites-enabled/wordpress.conf

Добавляем конфигурацию для WordPress.

sudo cp /usr/share/wordpress/wp-config-sample.php /etc/wordpress/config-default.php

Подключение базу данных.

sudo sed -i 's/database_name_here/wordpress/' /etc/wordpress/config-default.php
sudo sed -i 's/username_here/wordpressuser/' /etc/wordpress/config-default.php
sudo sed -i 's/password_here/password/' /etc/wordpress/config-default.php
sudo sed -i 's/define( .DB_COLLATE., .. );/define( \x27DB_COLLATE\x27, \x27utf8_unicode_ci\x27 );/' /etc/wordpress/config-default.php
-3

Перегружаем apache.

sudo systemctl restart apache2

Настраиваем сайт на WordPress

Подключаемся к нашему сайте через публичный ИП (84.252.141.239) виртуальной машины http://84.252.141.239/blog/wp-admin/install.php

-4

Вводим необходимые данные и нажимаем "Install WordPress"

Site Title: MyWP
Username: admin
Password: TP5YdkZfbq28Lb9u5
Your Email: admin@84.252.141.239.nip.io
-5

Для корректной работы WordPress нужны права на редактирования его файлов.

sudo chown www-data:www-data -R /usr/share/wordpress
sudo find /usr/share/wordpress -type d -exec chmod 755 {} \;
sudo find /usr/share/wordpress -type f -exec chmod 644 {} \;

Можем теперь подключится и залогиниться как admin http://84.252.141.239/blog/wp-login.php

Username: admin
Password: TP5YdkZfbq28Lb9u5
-6

Если вам не нравится тема по умолчанию, то может добавить другую.

Appearance -> Themes -> Add New -> Renden Magazine -> Install
-7

Не забудьте её активировать.

Appearance -> Themes -> Renden Magazine -> Activate
-8

Создадим сразу архивные копии Wordpress.

Plugins -> Add New -> UpdraftPlus WordPress Backup -> Install Now
-9

Активируем плагин UpdraftPlus WordPress Backup Plugin

Plugins -> UpdraftPlus - Backup/Restore -> Activate
-10

Делаем первую архивную копию.

Plugins -> UpdraftPlus - Backup/Restore -> Settings -> Backup Now -> Backup Now
-11

Меняем адрес сайта.

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

Создаём резервную копию базы данных.

sudo mysqldump wordpress > wordpress.sql
cp wordpress.sql wordpress_org.sql

Меняем старый ИП 84.252.141.239 на новый 51.250.107.122

sed -i 's/84.252.141.239/51.250.107.122/g' wordpress.sql

Перезаливаем базу.

sudo mysql wordpress < wordpress.sql

Проверяем новый адрес http://51.250.107.122/blog/

-12

Меняем адрес сайта Wordpress с ИП на хост.

Меняем /blog на нормальный хост http://www.51.250.107.122.nip.io.

Создаём резервную копию базы данных.

sudo mysqldump wordpress > wordpress.sql
cp wordpress.sql wordpress_org.sql

Если nginx вы установили на другом сервера, а него другой ИП адрес, то вы можете сразу поменять и ИП.

sed -i 's/http:..51.250.107.122.blog/http:\/\/www.51.250.107.122.nip.io/g' wordpress.sql

Перезаливаем базу.

sudo mysql wordpress < wordpress.sql

Создаём сайт в apache

sudo bash -c 'cat > /etc/apache2/sites-available/www.51.250.107.122.nip.io.conf <<EOF
<VirtualHost *:80>
  ServerName www.51.250.107.122.nip.io
  ServerAlias 51.250.107.122.nip.io mail.51.250.107.122.nip.io
  ServerAdmin admin@localhost
  DocumentRoot /usr/share/wordpress
  ErrorLog \${APACHE_LOG_DIR}/www.51.250.107.122.nip.io_error.log
  CustomLog \${APACHE_LOG_DIR}/www.51.250.107.122.nip.io_access.log combined
   <Directory /usr/share/wordpress>
       Options FollowSymLinks
       AllowOverride All
       DirectoryIndex index.php
       Order allow,deny
       Allow from all
   </Directory>
   <Directory /usr/share/wordpress/wp-content>
       Options FollowSymLinks
       Order allow,deny
       Allow from all
   </Directory>
</VirtualHost>
EOF'

Удаляем старый сайт

sudo unlink /etc/apache2/sites-enabled/wordpress.conf

Добавляем новый

sudo ln -s /etc/apache2/sites-available/www.51.250.107.122.nip.io.conf /etc/apache2/sites-enabled/www.51.250.107.122.nip.io.conf

Перегружаем apache

sudo systemctl restart apache2

Проверяем по новому хосту http://www.51.250.107.122.nip.io/

-13

Можем посмотреть логи, если что-то пошло не так.

sudo bash -c "tail -f /var/log/apache2/www.51.250.107.122.nip.io_*"

Подключаем сертификат ssl

Разрешаем ssl модуль в apache.

sudo a2enmod ssl

Перегружаем apache.

sudo systemctl restart apache2

Для получения бесплатного ssl сертификата от Let's Encrypt, установим репозиторий.

sudo add-apt-repository ppa:certbot/certbot

Установим пакет certbot

sudo apt install certbot python3-certbot-apache -y

Получим ssl сертификат на хосты www.51.250.107.122.nip.io, 51.250.107.122.nip.io и mail.51.250.107.122.nip.io

sudo certbot --apache -d www.51.250.107.122.nip.io -d 51.250.107.122.nip.io -d mail.51.250.107.122.nip.io
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): my@email.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access.
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://www.51.250.107.122.nip.io,
https://51.250.107.122.nip.io, and https://mail.51.250.107.122.nip.io
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Проверяем ssl сертификат https://www.51.250.107.122.nip.io

-14

Подготавливаем apache для работы с nginx

Так как мы будем использовать один сервер, то поменям порты в apache, что бы не было конфликтов с nginx.

Если вы будет это делать на разных серверах, то порты можно не менять, но далее по тексту будут указаны новые порты, а вам нужно будет использовать старые.

Меняем порты для сайта на http.

sudo sed -i 's/:80/:8080/' /etc/apache2/sites-available/www.51.250.107.122.nip.io.conf

Меняем порты для сайта на https.

sudo sed -i 's/:443/:8081/' /etc/apache2/sites-available/www.51.250.107.122.nip.io-le-ssl.conf

Удаляем сайт по умолчанию.

sudo unlink /etc/apache2/sites-enabled/000-default.conf

Меняем порты в apache.

sudo sed -i 's/Listen 80/Listen 8080/' /etc/apache2/ports.conf
sudo sed -i 's/Listen 443/Listen 8081/' /etc/apache2/ports.conf

Перегружаем apache.

sudo systemctl restart apache2

Добавляем nginx как reverse proxy для Wordpress

Устанавливаем nginx

sudo apt install nginx -y

Создаём новый сайт по умолчанию и перенаправляем весь трафик на apache.

sudo bash -c 'cat > /etc/nginx/sites-enabled/default <<EOF
server {
        listen 80 default_server;
        server_name _;
        location / {
                proxy_pass http://127.0.0.1:8080;
                proxy_set_header Host \$host;
                proxy_set_header X-Real-IP \$remote_addr;
                proxy_set_header X-Forwarded-Host \$host;
                proxy_set_header X-Forwarded-Server \$host;
                proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto \$scheme;
                proxy_set_header X-Server-Address  \$server_addr;
        }
}
EOF'

Перегружаем nginx

sudo systemctl restart nginx

Проверяем сайт на http (можно включить debug панель нажатием F12) http://www.51.250.107.122.nip.io/

-15

Добавляем https.

sudo bash -c 'cat >> /etc/nginx/sites-enabled/default <<EOF
server {
       listen 443 ssl default_server;
       server_name _;
        ssl_certificate /etc/letsencrypt/live/www.51.250.107.122.nip.io/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.51.250.107.122.nip.io/privkey.pem;
       location / {
               proxy_pass https://127.0.0.1:8081;
               proxy_set_header Host \$host;
               proxy_set_header X-Real-IP \$remote_addr;
               proxy_set_header X-Forwarded-Host \$host;
               proxy_set_header X-Forwarded-Server \$host;
               proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
               proxy_set_header X-Forwarded-Proto \$scheme;
               proxy_set_header X-Server-Address  \$server_addr;
       }
}
EOF'

Перегружаем nginx

sudo systemctl restart nginx

Проверяем сайт на https https://www.51.250.107.122.nip.io/

-16

В следующей статье мы установим почтовый сервер postfix и добавим в WordPress плагины WP Mail SMTP и Contact Form для создания формы и получения ответов на почту.