Краткая инструкция по установки #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 и необходимые для него пакеты.
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
Перегружаем apache.
sudo systemctl restart apache2
Настраиваем сайт на WordPress
Подключаемся к нашему сайте через публичный ИП (84.252.141.239) виртуальной машины http://84.252.141.239/blog/wp-admin/install.php
Вводим необходимые данные и нажимаем "Install WordPress"
Site Title: MyWP
Username: admin
Password: TP5YdkZfbq28Lb9u5
Your Email: admin@84.252.141.239.nip.io
Для корректной работы 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
Если вам не нравится тема по умолчанию, то может добавить другую.
Appearance -> Themes -> Add New -> Renden Magazine -> Install
Не забудьте её активировать.
Appearance -> Themes -> Renden Magazine -> Activate
Создадим сразу архивные копии Wordpress.
Plugins -> Add New -> UpdraftPlus WordPress Backup -> Install Now
Активируем плагин UpdraftPlus WordPress Backup Plugin
Plugins -> UpdraftPlus - Backup/Restore -> Activate
Делаем первую архивную копию.
Plugins -> UpdraftPlus - Backup/Restore -> Settings -> Backup Now -> Backup Now
Меняем адрес сайта.
Если вы выключали виртуальную машину и у вас был динамический публичный адрес, то он мог поменяться. В этом случае просто поменять адрес сайта не получится так, как он внутри базы сохранит ссылки на старый адрес. Проще поменять адрес внутри базы. Если адрес у вас прежний, то пропустите этот шаг.
Создаём резервную копию базы данных.
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/
Меняем адрес сайта 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/
Можем посмотреть логи, если что-то пошло не так.
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
Подготавливаем 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/
Добавляем 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/
В следующей статье мы установим почтовый сервер postfix и добавим в WordPress плагины WP Mail SMTP и Contact Form для создания формы и получения ответов на почту.