Разворачиваем код сайта на Apache с HTTPS из репозитория на Git

Предположим у нас есть сконфигурированный сервер, готовый к запуску веб-сайта (для Caddy, Nginx и Apache настраивали ранее) и так же git репозиторий (GitHub или Bitbucket) c кодом, который нужно «деплоить» в подготовленную директорию для сайта.

В данной статье будем использовать метод аутентификации на Git с помощью публичного SSH ключа.

Установим git, если ранее он не был установлен

$ sudo yum install git -y

Далее, сгенерируем SSH ключи, получаем root-права

$ sudo su

На целевом сервере переходим в домашнюю директорию

# cd ~/.ssh

И проверяем есть ли пара файлов с именем id_dsa — выводим список всех файлов в директории

# ls

Если их нету — необходимо сгенерировать. Команда для генерации ключей

# ssh-keygen -t rsa

Оставляем имя по-умолчанию (id_dsa), далее, система попросит ввести passphrase (оставляем пустым) и повторить ввод passphrase (тоже пустое)

В результате, в папке .ssh (внутри домашней директории) будет создана пара ключей — приватный и публичный (который с расширением .pub) 

Распечатываем его (в нашем примере имя — gitkey.pub)

# cat ~/.ssh/id_dsa.pub

И копируем содержимое в буфер обмена для сохранения в настройках аутентификации репозитория по SSH

Давайте рассмотрим этот процесс на примере Bitbucket

Выбираем репозиторий на сайте Bitbucket, затем Repository settingsAccess keys и жмем кнопку Add key

Label — даем название ключу

Key — вставляем наш публичный ключ из буфера и сохраняем — Add key

Возвращаемся к серверу, переходим к папке с проектами

# cd /var/www

И клонируем код из репозитория (в нашем примере имя репозитория domain-project) в рабочую папку для проекта (в нашем примере это папка domain-web)

# sudo git clone git@bitbucket.org:your-user-name/domain-project.git domain-web 

Ссылку для клонирования репозитория в Bitbucket можно взять от сюда:

SourceClone — копируем код как показано ниже

И, назначаем необходимые права для системного пользователя apache

# chown apache:apache /var/www/domain-web/ -R
# chmod 775 /var/www/domain-web/ -R

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

$ sudo su

Установим необходимые для SSL-шифрования пакет

# yum install mod_ssl openssl

Будем использовать наиболее известный сервис по генерации SSL-сертификатов — letsencrypt. Для этого установим Certbot

# yum install epel-release -y

(для AWS серверов команда выглядит следующим образом # amazon-linux-extras install epel -y )

# yum install certbot -y

Генерируем ключ Dh (для первой установки сертификата)

# openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Чтобы выписать сертификат, letsencrypt проверяет принадлежит ли вам домен, и делает это с помощью временных файлов, которые генерирует на сервере и проверяет их доступность

Создадим необходимую папку и представим права

# mkdir -p /var/lib/letsencrypt/.well-known
# chgrp apache /var/lib/letsencrypt
# chmod g+s /var/lib/letsencrypt

Подготовим конфиги для получения сертификатов — переходим в папку кончиков Apache

# cd /etc/httpd/conf.d

Создаем конфигурацию для проверки принадлежности домена (под letsencrypt)

# nano letsencrypt.conf

Вносим туда следующий код

Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"

<Directory "/var/lib/letsencrypt/">

    AllowOverride None

    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec

    Require method GET POST OPTIONS

</Directory>

И конфигурацию параметров SSL

# nano ssl-params.conf

Куда вносим следующий код

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH

SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

SSLHonorCipherOrder On

Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

Header always set X-Frame-Options DENY

Header always set X-Content-Type-Options nosniff

SSLCompression off

SSLUseStapling on

SSLStaplingCache "shmcb:logs/stapling-cache(150000)"

SSLSessionTickets Off

Перезапускаем Apache

# systemctl restart httpd

Выписываем сертификат (вместо your-domain.com — указываем свое доменное имя)

# certbot certonly --agree-tos --email admin@your-domain.com --webroot -w /var/lib/letsencrypt/ -d your-domain.com

В результате успешной операции увидим поздравления:

Congratulations! Your certificate and chain have been saved at:

   /etc/letsencrypt/live/your-domain.com/fullchain.pem

Так же нам понадобится комбинированный сертификат — cert + dhparam, который мы генерировали ранее (не забываем поменять your-domain.com на ваш домен в путях ниже)

# cat /etc/letsencrypt/live/your-domain.com/cert.pem /etc/ssl/certs/dhparam.pem >/etc/letsencrypt/live/your-domain.com/cert.dh.pem

Финальный шаг — вносим изменения в файл конфигурации веб-сайта

# nano /etc/httpd/conf.d/andreyex.ru.conf

Вставляем такой конфиг (вместо your-domain.com — ваш домен, а your-domain — папочка вашего проекта)

<VirtualHost *:80>

 ServerName your-domain.com

 Redirect permanent / https://your-domain.com/

</VirtualHost>

<VirtualHost *:443>

  ServerName your-domain.com

  DocumentRoot /var/www/your-domain

  <Directory /var/www/your-domain>

   Options FollowSymLinks

   AllowOverride All

   Require all granted

  </Directory>

  SSLEngine On

  SSLCertificateFile /etc/letsencrypt/live/your-domain.com/cert.dh.pem

  SSLCertificateKeyFile /etc/letsencrypt/live/your-domain.com/privkey.pem

  SSLCertificateChainFile /etc/letsencrypt/live/your-domain.com/chain.pem

</VirtualHost>

Перезагружаем Apache

# systemctl restart httpd

Теперь ваш сайт будет доступен с https

Так как сертификат от letsencrypt будет действовать 90 дней, давайте, сделаем автоматическое возобновление сертификата

Открываем на редактирование расписание задач системы

# EDITOR=nano crontab -e

И, в конце вставляем следующую команду

0 3 */2 * * certbot renew --cert-name your-domain.com --renew-hook "cat /etc/letsencrypt/live/your-domain.com/cert.pem /etc/ssl/certs/dhparam.pem >/etc/letsencrypt/live/your-domain.com/cert.dh.pem && systemctl restart httpd"

Сохраняем (CTRL+O) и закрываем редактор (CTRL+X)

Бонус: если вы внесли изменения в код проекта и слили в репозиторий, теперь очень просто подтянуть изменения на сервере. Примерный подход будет выглядеть так

Заходим под рутом

$ sudo su

Переходим в папку проекта

# cd /var/www/your-project-name

Переключаемся на мастер-ветку

# git checkout .
# git reset

Следующий шаг опциональный — не рекомендуется делать, если у вас не добавлены в гит-игнор все ресурсы, который могут на сервере отличаться от локальной машины (например папки vendor или uploads). Тут очищаются все файлы, которые не входят в структуру репозитория

# git clean -d -f

забираем изменения из репозитория

# git pull

И назначаем необходимые права на папку проекта

# chown apache:apache /var/www/your-project-name/ -R
# chmod 775 /var/www/your-project-name/ -R

Можно пойти дальше и занести все эти команды в баш-скрипт, чтобы запускать все одним махом

# cd /var/www
# nano git-update-project.sh

Вставить необходимые команды, описанные выше, и сохранить

А запускаем скрипт следующим образом

$ sudo sh git-update-project.sh

Установка Apache на CentOS 7

Второй по популярности веб-сервер для Linux систем — Apache.

Периодически встречаю ПО, требованием для установки которого является, как раз, Apache web-server.

Для CentOS 7 команда для установки Апача следующая

$ sudo yum install -y httpd

Чтобы при перезагрузке сервера сервис стартовал автоматически

$ sudo systemctl enable httpd

И запускаем его

$ sudo systemctl start httpd

Чтобы проверить корректность установки, можно перейти по адресу

http://ip-адрес-вашего-сервера

Тестовая страница выглядит примерно так

Установка Apache, в том числе, создает папку для ваших проектов

/var/www

и системного пользователя apache c группой apache

Давайте еще создадим и сконфигурируем веб-сайт.

В предыдущей статье рассказывалось как искать, приобретать и настраивать доменное имя. Предположим мы обладаем именем domain.com, наш проект назовем «domain» и разместим его на сервере.

Итак, чтобы иметь возможность редактировать файлы конфигураций

$ sudo su

Создадим папку для нашего проекта

# mkdir /var/www/domain/

и простую тестовую страницу

# nano index.html

(введите тут любой приветственный текст, сохраните CTRL+O и выйдите из режима редактирования CTRL+X)  

И применим необходимые права

# chown -R apache:apache /var/www/domain/

Переходим в директорию конфига нашего веб-сервера

# cd /etc/httpd/conf.d

Создаем и открываем для редактирования конфиг для нашего сайта

# nano domain.conf

С таким наполнением

<VirtualHost *:80>

 ServerName domain.com

 DocumentRoot /var/www/domain

 <Directory /var/www/domain>

  Options FollowSymLinks

  AllowOverride All

  Require all granted

 </Directory>

</VirtualHost>

И перезапускаем Apache

# systemctl restart httpd

Пробуем запускаться в браузере

http://domain.com

Создание и добавление Google Analytics в блоге на WordPress

Это бонусная статья из цикла «Устанавливаем и конфигурируем блог на WordPress». Ранее настраивали хостинг для нашего домена, выбирали доменное имя и проводили установку вордпресс и создавали первую статью с сео-оптимизацией.

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

Напоминаю, что плагин All In One SEO Pack добавляет код отслеживания на ваш блог и нужно только ввести Идентификатор отслеживания в соответствовавшем поле

Итак, если у вас нету гугл-акканта (email в зоне @gmail.com) — регистрируем по адресу

https://accounts.google.com/signin/v2/identifier

После того, как мы заимели гугл-аккаунт, переходим по адресу аналитики

https://analytics.google.com/analytics/web

И, если, ранее не добавляли аналитику по этого пользователю, то увидите приветственный экран

Жмем Start

Вводим Account name (Название аккаунта)

Далее, оставляем значение по-умолчанию для вопроса What do you want to measure? — Web (Веб)

На последнем шаге в разделе Property setup (Настройка ресурса) указываем следующие значения:

Website Name (Название сайта) — имя для вашего блога (например Blog)

Website URL (URL сайта) — если у вас настроен SSL сертификат выбираем https:// и вводим адрес вашего блога

Industry Category (Отрасль) — для направленности блога в сфере информационных технологий выбрал вариант Computers and Electronics

Reporting Time Zone (Отчетный часовой пояс) — Russia и часовой пояс Moscow Time

Нажимаем кнопку Create (Создать)

Соглашаемся с условиями использования и нажимаем Finish

В результате отобразится страница Все данные по веб-сайту.

На данный момент нам нужен только Идентификатор отслеживания

Выбираем Настройки ресурса 

и копируем его там

Далее, открываем: Админка блога — Плагины — All In One SEO Pack — Настройки SEO — Google Analytics — Google Analytics ID

Применяем изменения — кнопка Обновить настройки в самом низу.

Ну, а саму статистику постепенно наблюдаем по адресу

https://analytics.google.com/analytics/web

Подготовка, публикация и сео-оптимизация статьи WordPress

Попадая в административную панель блога на вордпресс мы сразу же хотим создать свою первую статью. Я решил попробовать с приветственного слова.

Но, сперва, стоит внести простейшие изменения, чтобы ваш блог с первой статьей не был «Очередной сайт на WordPress»

Переходим в Настройки и вводим Заголовок вот какой нам понравится, и заполняем другие поля актуальными данными и сохраняем.

В разделе Страниц нам необходимо или же отредактировать единственную там опубликованные страницу (обычно там размещается информация об авторе блога или его компании) или же удалить ее.

Затем, в разделе Записи, выбираем первую статью, сгенерированную системой, нажимаем Изменить и описываем, например, что сподвигло вас начать вести этот блог. Сохраняем изменения и публикуем статью (совет: чаще сохранять изменения). Любуемся результатами.

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

Рекомендую поставить plugin All In One SEO Pack, один из «топовых» расширений для WordPress по данной тематике (весь необходимый нам функционал размещен в бесплатной версии). Итак, заходим в раздел Плагины, нажимаем на кнопку Добавить новый и в строке поиска вводим «All In One SEO Pack»

Искомый плагин будет первым в списке, и в его карточке нажимаем кнопку Установить.

После этого, возвращаемся в раздел Плагины и для нашего плагина нажимает Активировать для его «включения».

Перейдем к общим настройкам SEO — там же нажимаем, соответсвенно, Настройки SEO.

Большинство настроек уже хорошо смотрятся со значениями по умолчанию. Стоит обратить внимание на следующие, отредактировав их:

Заголовок дом. страницы — указываем краткий, емкий заголовок для вашего блога

Описание дом. страницы — указываем чуть более развернутое описание

Google Analytics ID — да-да, тут необходимо создать счетчик для гугл аналитики. Делается это несложно — процесс описан в одной из следующих статей (ссылка)

Исключить отслеживание пользователей — чтобы не влиять на статистику по сайту нашими проверками веб-страниц в блоге

После этих немногочисленных изменений в работе плагина, в самом низу списка, нажимаем кнопку Обновить настройки.

А, теперь, мы можем за-апгрейдить нашу первую статью-запись.

Возвращаемся в раздел редактирования Записей

При наведении на название статьи появляются элементы управления — выбираем Изменить.

Справа от самой Записи есть элементы управления. Из значимых для нас:

Постоянная ссылка — так как строка урла браузера больше дружит с латиницей (последствия систем кодировок), советую адрес ввести латинскими буквами, произведя транслитерацию в случае русского-буквенного предлагаемого урла

Рубрики — тоже советую этот инструмент, категоризируя свои статьи, например «administration», «code», «books», «uncategorized», и другие

Метки — указываем ключевые тэги (это так же помогаем категоризировать наши статьи, но в другом срезе, а, кроме того, создает новые страницы в нашем блоге — страницы со статьями по определенному тегу, что положительно влияет на сео)

Последний важный момент — скролим в самый низ нашей статьи до раздела All In One SEO Pack и заполняем поля:

Заголовок — указываем краткий, но емкий заголовок для это статьи

Описание — указываем более развернутое описание

Чуть выше отображается «сниппет» — как будет выглядеть интерпритация страницы статьи в поисковиках.

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

Установка WordPress на CentOS7 c PHP7.2 и MySQL 8

Это последняя статья из серии «Устанавливаем блог WordPress на CentOS 7 с веб-сервером Caddy, PHP 7.2 и MySQL 8.0».

Ранее, для установки блога на вордпресс, мы уже сконфигурировали CentOS 7, установили майскл восьмой версии, пхп и кэдди в качестве быстрого, современного веб-сервера. Последний элемент — сам блог wordpress

Итак, на нашем сервере, переходим в директорию для веб-сайтов

$ cd /var/www

Скачиваем последнюю версию WordPress

$ sudo curl -O https://wordpress.org/latest.tar.gz

Распаковываем (архиватор распакует автоматически в директорию wordpress)

$ sudo tar zxf latest.tar.gz

Удаляем архив с файлами блога вордпресс (он нам больше не нужен)

$ sudo rm latest.tar.gz 

Устанавливаем права на директорию wordpress для caddy пользователя (ранее сконфигурированного при установке Caddy web-сервера)

$ sudo chown -R caddy:caddy wordpress

Теперь, подключим и настроим сайт нашего вордпресса

В данном примере, используем текстовый редактор nano, который мы ставили ранее (при конфигурировании операционной системы CentOS 7), однако вы можете использовать другой редактор, в том числе стандартный vi

Итак, открываем конфишурационный файл веб-сервера кедди

$ sudo nano /etc/caddy/Caddyfile

Копируем код ниже и вставляем его в файл конфигурации (при это необходимо заменить «example.com», в двух местах, доменом, который мы создавали в статье по выбору и приобретению простого и недорогого домена для вашего блога)

example.com {

    tls admin@example.com

    root /var/www/wordpress

    gzip

    fastcgi / 127.0.0.1:9000 php

    rewrite {

        if {path} not_match ^\/wp-admin

        to {path} {path}/ /index.php?_url={uri}

    }

}

Сохраняем (CTRL+O и ENTER для текстового редактора nano) и закрываем файл (CTRL+X).

Перезагружаем веб-сервер Caddy, чтобы применить новую конфигурацию

$ sudo systemctl restart caddy

Теперь наш блог должен открыться через браузер (пока что интерфейс для дальнейшего конфигурирования) — вводим в строке урл любого браузера наш домен (в моем случае это questpro.club), выбираем язык интерфейса (мне удобнее будет английский, но советую выбрать русский).

Жмем кнопку Let’s go

В предлагаемых полях на следующем экране вводим следующие данные (из этого мануала)

Database Name = wordpress

Username = wordpressuser

Password = gHspvn@36nBA

Database Host — оставляем значения по умолчанию

Table Prefix — оставляем значения по умолчанию.

Происходит инсталляция…

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

WordPress установлен

В следующей статье опишу процесс создания вашей собственной первой статьи и расскажу про популярный seo-плагин для начальной сео-оптимизации.

Установка PHP 7.2 на Centos 7 для WordPress

Это статья из серии «Устанавливаем блог WordPress на CentOS 7 с веб-сервером Caddy, PHP 7.2 и MySQL 8.0».

Для установки блога на WordPress мы уже сконфигурировали CentOS 7, установили майскл восьмой версии и кэдди в качестве быстрого, современного веб-сервера. Осталось поставить пхп с необходимыми плагинами.

На момент написании статьи CentOS 7 в стандартном репозитории имеет на борту php версии 5.4. И установить ее можно одной командой. Однако у меня было желание работать с более актуальной версией PHP (стабильной 7.2). В моем случае, необходимо заменить репозиторий (попутно установив утилиты для работы с репозиториями).

Последовательно выполняем команды ниже (может потребоваться ввод пароля от аккаунта операционной системы)

$ sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
$ sudo yum install epel-release
$ sudo yum install yum-utils
$ sudo yum-config-manager --disable remi-php54
$ sudo yum-config-manager --enable remi-php72

И, вот тут то, устанавливаем PHP с необходимыми для блога плагинами

$ sudo yum -y install php-cli php-fpm php-mysql php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath

проверяем установленную версию

$ php -v

Вывод должен быть наподобие

PHP 7.2.30 (cli) (built: Apr 15 2020 07:23:04) ( NTS )

Copyright (c) 1997-2018 The PHP Group

Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

Теперь, слегка модифицируем конфигурационный файл, чтобы PHP сервис мог запускаться от имени пользователя веб-сервера caddy.

Будем использовать текстовый редактор nano, который мы ставили ранее (описано в статье), однако вы можете использовать другой редактор, в том числе стандартный vi. Итак

$ sudo nano /etc/php-fpm.d/www.conf

Ищем фрагмент с user =  и group =  

; Unix user/group of processes

; Note: The user is mandatory. If the group is not set, the default user's group

;       will be used.

; RPM: apache Choosed to be able to access some dir as httpd

user = apache

; RPM: Keep a group allowed to write in log dir.

group = apache

И меняем apache на caddy. Сохраняем (CTRL+O и ENTER для nano) и закрываем файл (CTRL+X).

Запускаем PHP сервис

$ sudo systemctl start php-fpm

Вуаля!

Установка и настройка веб-сервера Caddy на Centos 7

Как альтернативу, ранее незыблемым, веб-серверам (Nginx, Apache), предлагаю использовать Caddy, который стал достаточно популярным, так как он гораздо легче разворачивается и конфигурируется, да и поддержка сертификатов тут «с коробки» (а это немаловажно в последние года, когда поисковики лучше ранжируют сайты с HTTPS, да и браузеры, ныне, показывают всякие бяки для HTTP сайтов рядом с урлом)

Подробно об установке Caddy на операционной системе CentOS можно посмотреть в официальной документации нашего облачного провайдера Digital Ocean (хостинг на котором мы настраивали ранее)

https://www.digitalocean.com/community/tutorials/how-to-host-a-website-with-caddy-on-centos-7

Но давайте опишу процесс ниже (и по-русски)

В одном из предыдущих туториалов мы использовали текстовый редактор vi, однако предлагаю поставить более удобный — nano

$ sudo yum install nano

Чтобы установить Caddy (не-коммерческая лицензия) запускаем

$ curl https://getcaddy.com | bash -s personal

Установка попросит ввести пароль для аккаунта операционной системы

Следующей командой можем проверить путь, куда был установлен Caddy:

$ which caddy

У меня это — /usr/local/bin/caddy

Далее, создадим пользователя, от имени которого будем работать с веб-сервером — caddy

$ sudo adduser -r -d /var/www -s /sbin/nologin caddy

Потребуется ввести пароль от аккаунта операционной системы

Создаем директорию для главного конфигурационного файла веб-сервера (Caddyfile)

$ sudo mkdir /etc/caddy

Назначаем необходимые права на директорию

$ sudo chown -R root:caddy /etc/caddy

Создаем конфигурационный файл Caddyfile

$ sudo touch /etc/caddy/Caddyfile

(чуть позже его отредактируем)

Создадим директорию для хранения SSL приватных ключей и сертификатов

$ sudo mkdir /etc/ssl/caddy

И необходимые права для этой директории

$ sudo chown -R caddy:root /etc/ssl/caddy
$ sudo chmod 0770 /etc/ssl/caddy

Также, нам нужна директория для хранения кода нашего блога (да и других будущих сайтов)

$ sudo mkdir /var/www

И необходимые права на эту директорию

$ sudo chown caddy:caddy /var/www

Теперь необходимо сконфигурировать веб-сервер Кэдди (Caddy), чтобы запускался автоматически с загрузкой системы как сервис

Скачиваем необходимый для этого файл из официального репозитория Caddy

$ sudo curl -s https://raw.githubusercontent.com/caddyserver/dist/master/init/caddy.service -o /etc/systemd/system/caddy.service

(потребуется ввод пароля для аккаунта операционной системы)

Необходимо внести мелкие изменения в скачанный файл — открываем caddy.service с помощью редактора nano (или другого любимого редактора)

$ sudo nano /etc/systemd/system/caddy.service

Находим секцию с установкой User и Group, как указано ниже

User=caddy

Group=caddy

Если User или Group отличный от caddy — меняем на caddy как в примере выше.

Сохраняем файл и закрываем (в nano редакторе это CTRL+O и CTRL+X соответсвенно)

Подбираем наш новый сервис системой:

$ sudo systemctl daemon-reload

Добавляем Caddy в автозагрузку

$ sudo systemctl enable caddy.service

И, удостоверившись, что он загружен и может быть запущен

$ sudo systemctl status caddy.service

Вывод будет примерно такой

● caddy.service - Caddy

   Loaded: loaded (/etc/systemd/system/caddy.service; enabled; vendor preset: disabled)

   Active: inactive (dead)

     Docs: https://caddyserver.com/docs/

Что говорит о том, что сервис загружен и доступен.

Последним этапом можно запустить веб-сервер Кэдди, например, командой

$ sudo systemctl start caddy

Но это будет сделано в любом случае в следующей статье, где мы установим WordPress

Установка MySQL 8 на CentOS 7 для WordPress

Это четвертая статья из серии «Устанавливаем блог WordPress на CentOS с Caddy, PHP 7.2 и MySQL 8.0». Вот мы, как раз, и приступаем к установке и настройке сервера базы данных MySQL 8 версии.

Скачиваем репозиторий с mysql сервером

$ sudo rpm -ivh https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm

Cистема может запросить пароль для пользователя — вводим его (тот что сохранили при создании пользователя для системы CentOS 7)

Далее запускаем установку mysql сервера:

$ sudo yum install mysql-server

Будет вычислено необходимое место и запрошено подтверждения на установку — вводим y и ENTER.

По завершении установки сервера базы данных (сам процесс установки может занять от нескольких минут)

В завершении установки соглашаемся на подтверждение GPG-key — вводим y и ENTER.

После этого стартуем «майэскюэл» как сервис (скорее всего будет опять запрошен пароль для аккаунта)

$ sudo systemctl start mysqld

И проверяем статус работы сервиса

$ sudo systemctl status mysqld

В результате в выводе будет такая надпись Active: active (running), сигнализирующая что сервис работает.

При этом, вместе с установкой, mysql будет добавлен в автозагрузку и будет сгенерирован временный пароль для root пользователя, чтобы его просмотреть и сохранить введем команду

$ sudo grep 'temporary password' /var/log/mysqld.log

в конце строки вывода будет 12ти-значный набор символов, содержащий малые и большие буквы, цифры и как минимум 1 спец символ — это правила для пароля

Далее рекомендуется улучшить безопасность установленой версии базы данных с помощью встроенного скрипта:

$ sudo mysql_secure_installation

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

Система запросит еще раз заметь пароль — отказываемся — No.

На все остальные следующие вопросы отвечаем да — Y: убираем доступ для анонимных пользователей, запрещаем доступ к базе извне для root, убираем тестовую базу данных, которая по умолчанию доступна всем и др.

MySQL установлен и сконфигурирован, давайте проверим работоспособность командой

$ mysqladmin -u root -p version

При вводе пароля к root пользователю базы данных — получаем в выводе некоторую информацию о сервере базы данных, включая его версию.

Далее, проведем начальную подготовку мускула (там mysql тоже называют 🙂 ) к установке WordPress…

Соединяемся с сервером базы данных под юзером root

$ mysql -u root -p

Вводим ранее сгенерированный (измененный и с сохраненный) пароль

Как только соединение будет установлено — создаем базу данных для WordPress (имя — wordpress)

mysql > CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

И пользователя с именем wordpressuser (и, например, с паролем gHspvn@36nBA) для доступа к этой базе данных

mysql> CREATE USER 'wordpressuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'gHspvn@36nBA';

Имеем ввиду, что пароль должен быть достаточно сложным, иначе увидим сообщение об ошибке (пароль: минимум 12 символов, должна быть заглавная буква, цифра и спец-символ).

Назначаем доступ пользователю wordpressuser к базе данных wordpress

mysql> GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost’;

Сообщаем mysql, что изменили привелегии (ни в кое случае нельзя забыть это)

mysql> FLUSH PRIVILEGES;

И безопасно закрываем соединение с базой данных

mysql> EXIT;

Далее можем приступить к установке Веб-сервера Caddy

Начальная конфигурация CentOS 7

Это третья статья из серии «Устанавливаем блог WordPress на CentOS с Caddy, PHP 7.2 и MySQL 8.0». Вот мы, как раз, и приступаем к настройке операционной системы центос.

Первый коннект к серверу выглядит следующим образом

$ ssh -i {/path/to/private/key} root@{IP-address}

(например ssh -i ~/.ssh/sy_blog_01a root@203.0.113.0 — т.е. без фигурных скобок) 

При самом первом соединении с сервером CentOS, когда удаленный сервер не «встречал» ранее ваш локальный сервер, он спросит уверены ли вы, что хотите законнектиться — набираем yes и жмем Enter.

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

Root юзер (супер-админский пользователь, генерируемый при создании сервера) обладает сверх-привилегиями, поэтому рекомендуется создать нового пользователя для дальнейшей работы с сервером.

Делается это просто (имя нового юзера может быть любое, в этом примере указываю имя droplet)

$ adduser droplet 

следующей коммандой устанавливаем юзеру пароль (как и в примере выше, у нас юзер droplet)

$ passwd droplet

вводим пароль и повторяем ввод пароля (обязательно сохраните, система может иногда запрашивать пароль)

Далее, чтобы можно было выполнять административные команды от имени нового юзера, добавим его в специальную группу wheel

$ gpasswd -a droplet wheel

Рекомендуется (с точки зрения безопасности) создать пользователю SSH ключ для доступа, плюс в конфигах операционной системы CentOS, по умолчанию, включен запрет на вход по паролю, разрешен только по файл-ключу. 

Ключ этот генерируем на локальном компьютере, а не на сервере. Ранее мы это делали для root пользователя (ссылка на предыдущую статью). Напоминаю, что делаю на macOS (для Windows процедура немного другая)

Открываем терминал и выполняем команду

$ cd ~/.ssh

для перехода в директорию ключей. Далее

$ ssh-keygen -t rsa

Для генерации ключа. В наем примере, имя будем использовать blog_02a, а поле passphrase оставляем пустое.

Распечатываем публичный ключ для переноса на наш сервер

$ cat ~/.ssh/blog_02a.pub

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

# su - droplet

Оказываемся в домашней директории пользователя droplet.

Создаем новую директорию для ключа и назначаем ей необходимые права

$ mkdir .ssh
$ chmod 700 .ssh

Следующей командой создаем и открываем файл для ввода ключа

$ vi .ssh/authorized_keys

Нажимает клавишу i чтобы перейти в режим редактирования в редакторе vi, вставляем ключ из буфера обмена, скопированный ранее, нажимаем ESC, чтобы выйти из режима редактирования. После этого набираем с клавиатуры 2 символа: символ «двоеточия» и английская буква x и жмем ENTER чтобы сохранить и закрыть файл.

И, так же, устанавливаем на созданный файл необходимые права

$ chmod 600 .ssh/authorized_keys

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

$ exit
$ exit

Команда соединения с сервером с новым пользователем для нашего примера будет выглядит так

$ ssh -i ~/.ssh/blog_02a droplet@203.0.113.0

(у вас будет точно другой IP после знака @, и, возможно, другие имя пользователя и путь к ключу)

Таким образом, у нас готовая операционна система для установки блога.

Доменное имя на GoDaddy

Это вторая статья из серии «Устанавливаем блог WordPress на CentOS с Caddy, PHP 7.2 и MySQL 8.0». Нам, разумеется, понадобится хостинг, адрес для блога, причем недорогой.

К моменту написания статьи, работал с несколькими регистралами доменных имен, некоторые казались или не особо дружественными или же складывалось впечатление, что они специально блокируют какой то функционал, например работа с записями DNS. 

В итоге, остановил свой выбор на GoDaddy (https://dcc.godaddy.com/). Для упрощение статьи, не буду пояснять плюсы и минусы именно этого выбора.

После регистрации на годадди — на странице поиска домена сразу же вводим что-то достаточно амбициозное (короткое и в зоне .com): https://ru.godaddy.com/domainsearch/find

В моем случае это было questpro.com. И, разумеется, такой домен был занят. Тем не менее свободна куча доменов в других зонах с аналогичным или таким же именем. Проанализировав цены на них, а на первый год использования у многих вариантов весьма заманчивые предложения, выбрал вариант «questpro.club» c ценой чуть больше доллара за год. 

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

При этом отказывается от всех дополнительных услуг (многие, по-умолчанию, и так отключены, тем не менее нужно быть чуточку внимательным и следить за графой Итого при оплате, чтобы она не была выше ожидаемого).

Приобретенный домен появится в разделе «Мои домены»

https://dcc.godaddy.com/domains

Последний момент по домену — необходимо, чтобы домен указывал на айпи нашего, ранее созданного сервера.

Делается это через «Управление DNS»: https://dcc.godaddy.com/manage/{имя_вашего_домена}/dns

Для записи с именем (Хост) «@», нажав на кнопку Редактировать (карандашик) в поле «Указывает на» вводим айпишником сервера. Жмем OK.

Вот и все готово с доменным именем…