Разворачиваем код сайта на 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 на 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.

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

Хостинг Digital Ocean

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

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

Имею достаточно большой и позитивный опыт с Amazon (AWS), хотя он, считается дорогим (заслуженно, так как инфраструктура там широчайшая). Зная, что есть альтернативы, решил остановить свой выбор на Digital Ocean (DO), так же широко известном.

Плюсом будет то, что у DO есть достаточный по характеристикам сервер стоимостью 5 у.е.

Итак, нужно зарегистрировать :

https://cloud.digitalocean.com/registrations/new

Процесс регистрации типичный, сложностей возникнуть не должно.

Далее, привязываем карту (или другой платежный инструмент).

В DO облачные сервера называются «дроплетами» (Droplet). С английского переводится, как «капля». Это, чтоли, отсылка к тому, что облако состоит из множества капелек?! =)

Итак, перейдем к созданию дроплета-сервера: CreateDroplets

Далее выбираем операционную систему. Исторически сложилось, что, в основном, приходилось работать со сборками CentOS (версии 6 и 7) — выбираем 7.6 версию

План — Standard

Тариф — 5 у.е. в месяц (1GB / 1CPU / 25GB SSD)

Датацентр (физическое расположение сервера) выбираем поближе к России. Я выбирал Frankfurt

Метод аутентификации, для пущей «секьюрности» выбрал SSH keys (в этом случае доступ к серверу будет осуществляться не по паре {логин + пароль}, а по паре {логин + файл-ключ}). При этом необходимо загрузить сгенерированные самостоятельно SSH-ключ. Это и сделаем далее…

Нажимаем тут кнопку New SSH Key и видим следующее диалоговое окно:

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

Оговорюсь, что, при написании данной статьи, была использована операционная система macOS (процесс создания аналогичный для Linux систем, а для Windows постараюсь описать позже). Итак, открываем терминал и выполняем команду

$ cd ~/.ssh

для перехода в специальную директорию (для SSH ключей) внутри домашней директории для вашего текущего пользователя

Далее выполняем команду для генерации ключа

$ ssh-keygen -t rsa

Увидим следующую предложение для ввода имени ключа

Enter file in which to save the key (/home/user/.ssh/id_rsa):

вводим удобное для вас имя (чтобы далее его можно было найти), например blog_01a и подтверждаем ввод — ENTER

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

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

$ cat ~/.ssh/blog_01a.pub

Копируем полученное буквенно-цифровое выражение, а это будет что-то вроде…

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDi28juE0FufXdPwZmOUE+E+gQJSunhUmsE7mSnuPmwcb8VBVuly4Uarq3EkCYAXrjrPwq/FOQWDX1Yw2sC16gQLWECUUKmnVR3OPrZCW2iPOO/ZpSLvs0cMrAHZlobBrNOYLl22tnIuaZVl49GLCcwuEFIQuxcIO9fU8ZBD0fpJoOEl9niqg2n2/86IczTGhsxdjq+EXyYLTUv/F0GtEneQQCxiHRVRTL1dDNbSQZj1Y0UtKZHFNHsI6TbmhkUlFZX3jEmC+b6XxSmJM2UiTCKOERAKmImTwnDOyLPZmnKAbGrqLmQv/E1GQdAqyGJCEC7zThFxwPtkvcmo2NzFwsr

…и вставляем в ранее указанное поле в диалоговом окне добавления файла-ключа в интерфейсе создания Droplet. Даем имя в поле Name (например тоже, что и у файла-ключа — blog_01a) и жмем кнопку Add SSH Key

Готово. Осталось отметить его галочкой, оставить, как есть «1 Droplet» в поле «How many Droplets?» и дать ему имя в поле «Choose a hostname».

Tags — опционально, выбираем Project (если ранее не создавали проект — создаем, это просто), пока что отключаем backups (так как это лишние траты, если захотим — включим позже) и, наконец-то нажимаем кнопку Create Droplet. С удовольствием наблюдаем за процессом создания нашего сервера…

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