# Установка Ubuntu Server 18.04 на виртуальную машину Hyper-V, установка PostgreSQL и средств управления

# Включение роли Hyper-V

Для развертывания Ubuntu Server в виртуальной среде Microsoft Hyper-V убедитесь, что Ваше оборудование отвечает следующим требованиям:

Требования к операционной системе:

Роль Hyper-V можно включить в следующих версиях Windows 10:

  • Windows 10 Корпоративная
  • Windows 10 Pro
  • Windows 10 для образовательных учреждений

Требования к оборудованию:

Хотя в этом документе не приводится полный список оборудования, совместимого с Hyper-V, укажем следующие обязательные требования:

  • 64-разрядный процессор с поддержкой преобразования адресов второго уровня (SLAT).
  • Поддержка расширения режима мониторинга виртуальной машины (технология VT-x на компьютерах с процессорами Intel).
  • Не менее 4 ГБ оперативной памяти. Так как виртуальные машины и узел Hyper-V используют память совместно, необходимо обеспечить достаточный объем памяти для обработки предполагаемой рабочей нагрузки на виртуальной машине.

В BIOS системы необходимо включить следующие компоненты.

  • Virtualization Technology (Технология виртуализации) — может иметь другое название (VTx, Vanderpool Technology, VT Technology, Virtualization) в зависимости от производителя системной платы;
  • Hardware Enforced Data Execution Prevention (Принудительное аппаратное предотвращение выполнения данных) — может отсутствовать в настройках BIOS.

На следующем этапе включаем Hyper-V:

Hyper-V можно включить разными способами, в том числе используя панель управления Windows 10, PowerShell или с помощью средства обслуживания образов развертывания и управления ими (DISM).

Включение Hyper-V с помощью PowerShell:

1.Откройте консоль PowerShell от имени администратора.

2.Выполните следующую команду:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

По завершении установки выполните перезагрузку.

Включение Hyper-V с помощью CMD и DISM:

Система обслуживания образов развертывания и управления ими (DISM) позволяет настраивать ОС Windows и образы Windows. Помимо всего прочего, средство DISM может включать функции Windows во время выполнения операционной системы. Чтобы включить роль Hyper-V с помощью DISM, выполните указанные ниже действия.

1.Запустите PowerShell или сеанс CMD от имени администратора.

2.Введите следующую команду:

DISM /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V

image

Включение роли Hyper-V с помощью раздела "Параметры":

1.Щелкните правой кнопкой мыши кнопку Windows и выберите пункт "Приложения и возможности".

2.Выберите "Программы и компоненты" справа в разделе "Сопутствующие параметры" параметры.

image

3.Выберите пункт Включение или отключение компонентов Windows.

4.Выберите Hyper-V и нажмите кнопку ОК.

image

После установки компонентов перезагрузите компьютер.

Важно!

Обратите внимание, на состояние строки "Низкоуровневая оболочка Hyper-V", если она "некликабельна" (серая), еще раз убедитесь, что ваше оборудование поддерживает технологию виртуализации и она включена в BIOS машины.

# Создание виртуальной машины в Hyper-V

Скопируйте к себе с сервера \\fsrv\DISTR\CentOS\ файл ubuntu-18.04.3-live-server-amd64.iso или скачайте с сайта https://releases.ubuntu.com/18.04/ к себе на компьютер образ установочного диска для сервера:

image

В поле поиска в панели задач введите Hyper-V (или через Панель управления - Администрирование - Диспетчер Hyper-V) и запустите "Диспетчер Hyper-V"

image

В диспетчере Hyper-V слева выбираем имя своего компьютера, а в правом столбце "Действия" выбираем Создать - Виртуальная машина

image

В открывшемся окне задайте произвольное имя виртуальной машины, ее расположение и нажмите Далее

image

Выберите Поколение 2 и нажмите Далее

image

Укажите размер выделяемой памяти для виртуальной машины, исходя из возможностей Вашего оборудования, но не менее 512 Мб (минимальные требования Ubuntu Server) и нажмите Далее

image

В настройках сети выберите "Default Switсh" и нажмите Далее

image

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

image

В следующем окне укажите путь к ранее загруженному файлу установочного образа и нажмите Далее

image

В следующем окне завершите работу мастера создания виртуальной машины, нажав Готово

image

После окончания работы мастера откройте Диспетчер Hyper-V, выберите свою виртуальную машину из списка:

image

кликнете правой кнопкой мыши и выберите "Параметры", в открывшемся окне перейдите на вкладку "Безопасность", уберите отметку в чекбоксе "Включить безопасную загрузку" и нажмите "ОК".

image

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

# Установка Ubuntu Server

В Диспетчере Hyper-V дважды кликните на Вашу виртуальную машину и в открывшемся окне нажмите "Пуск"

image

Дождитесь инициализация виртуальной машины и начала установки Ubuntu Server 18.04. (возможен вывод лога сообщений об ошибках или из-за кортокого таймаута перед началом установки Вы сразу увидите меню выбора языка установки)

image

В открывшемся окне настройки установки в первым будет предложен выбор языка устанавливаемой ОС. Управление производится клавишами "Вверх", "Вниз" и "Enter". Выбираем "Русский".

image

В следующем окне будет предложено обновить дистрибутив установки, мы уже определились с устанавливаемой версией, выбираем "Continue without updating" и нажимаем "Enter"

image

В окне конфигурации клавиатуры выбираем "Русская" с вариантом "Русская" выбираем "Готово" и нажимаем "Enter"

image

В следующем окне выбираем сочетание клавиш для переключения раскладки клавиатуры, выбираем "ОК", "Готово" и нажимаем "Enter"

image

В открывшемся окне конфигурации сетевого соединения настраиваем динамический или статический IP адрес, в данном случае оставляем конфигурацию выбранного адаптера без изменений, выбираем "Готово" и нажимаем "Enter"

image

В следующем окне конфигурируем proxy, если Вы не используете proxy, оставляем поле "Proxy address" пустым, выбираем "Готово" и нажимаем "Enter"

image

Зеркало для загрузки пакетов тоже оставьте по умолчанию, выбираем "Готово" и нажимаем "Enter"

image

В окне "File system setup" настраиваем разметку разделов Linux, можно предоставить возможность инсталлятору сделать это по своему усмотрению (Use An Entire Disk) или настроить "Вручную". Рассмотрим вариант установки вручную. Выбираем "Вручную" и нажимаем "Enter"

image

В следующем разделе выбираем нужный диск в списке "Available Devices" и нажимаем "Enter"

image

В открывшемся контекстном меню выбираем "Add Partition" и нажимаем "Enter"

image

В следующем окне задаем размер раздела, формат и точку монтирования. Создам корневой раздел, оставляем точку монтирования в поле "Mount" в виде одного слэша " / ", или выбираем эту точку из списка. Формат файловой системы ext4. Все свободное место выделяем под корневой каталог, выбираем "Create" и нажимаем "Enter"

image

В разделе "File system summary" мы видим смонтированный нами корневой раздел с файловой системой ext4 и инсталлятор автоматически выделил место и смонтировал загрузочный раздел /boot/efi с файловой системой fat32:

Когда завершите создавать разделы, у вас должно получится два раздела. Выбираем "Готово" и нажимаем "Enter".

image

В следующем диалоге соглашаемся на начало инсталляции и внесение изменений в структуру разделов, выбираем "Продолжить" и нажимаем "Enter"

image

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

  • Ваше имя - просто имя, можно русскими буквами;
  • Your server's name - имя вашего сервера, только строчные латинские буквы;
  • Имя пользователя - имя пользователя для входа в систему, только строчные латинские буквы;
  • Пароль - вводится два раза, используйте сложные пароли для серверов.

image

На следующем этапе выбираем "Install OpenSSH server", выбираем "Готово" и нажимаем "Enter"

image

Когда установка Ubuntu Server 18.04 lts завершится, дождитесь установки обновлений безопасности и нажмите кнопку Перезагрузить сейчас.

image

После перезагрузки введите логин и пароль, которые вы использовали во время установки:

image

Откроется окно с готовой к работе системой Ubuntu Server

image

Так как, в дальнейшем предстоит вводить много команд через терминал, а в гипервизоре корректно не работает вставка из буфера обмена, для подключения по ssh воспользуемся сторонним клиентом. Сначала узнаем IP адрес нашей виртуальной машины, для этого вводим sudo ifconfig в терминале гипервизора, подтверждаем команду паролем и получаем вывод терминала вида:

image

Запоминаем IP адрес интерфейса eth0.

Теперь установим ssh клиент, например, Snowflake. Для этого скачаем его с GitHub https://github.com/subhra74/snowflake/releases, выбираем инсталятор для Windows snowflake.msi:

image

Сохраняем и запускаем скачанный устанвщик snowflake.msi, в открывшемся после усановки окне программы, нажимаем "New connection", задаем произвольное имя сервера, в поле "Host" вводим IP адрес виртуальной машины, порт оставляем без изменений, заполняем поля с логином и паролем, которые Вы ввели при установке Ubuntu в виртуальную машину и нажимаем "Connect":

image

Соглашаемся с добавлением RSA ключа:

image

Откроется терминал для управления установленной Ubuntu Server по ssh:

image

Далее все команды вводим здесь, копируя из инструкции.

# Установка PostgreSQL 11 на Ubuntu Server 18.04

Обновление установленных пакетов

Обновляем текущие установленные пакеты для вновь установленного сервера, для этого последовательно вводим команды:

sudo apt update

image

 sudo apt -y upgrade

image

После обновления пакетов, перезагрузите сервер

sudo reboot

На время перезагрузки будет разорвано соединение, выждите некоторое время и нажмите "Reconnect" в красном поле справа:

image

После перезагрузки системы установите vim и wget, если они еще не установлены.

sudo apt install -y wget vim

image

# Добавление репозиториев PostgreSQL 11

Перед добавлением содержимого репозитория на Ваш Ubuntu Server вам необходимо импортировать ключ подписи репозитория:

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

В выводе теминала будет "ОК":

image

После импорта ключа GPG добавьте содержимое репозитория в вашу систему:

RELEASE=$(lsb_release -cs)
echo "deb http://apt.postgresql.org/pub/repos/apt/ ${RELEASE}"-pgdg main | sudo tee  /etc/apt/sources.list.d/pgdg.list

image

добавление прошло без ошибок, теперь проверим содержимое файла репозитория

cat /etc/apt/sources.list.d/pgdg.list

В выводе терминала отобразится строка содержимого:

image

Установите PostgreSQL 11 в Ubuntu Server, для этого введите следующие две команды:

sudo apt update
sudo apt -y install postgresql-11

image

Разрешить доступ к PostgreSQL с удаленных хостов

По умолчанию доступ к серверу базы данных PostgreSQL осуществляется только с localhost:

image

Чтобы разрешить доступ к сети, отредактируйте файл конфигурации, для этого введите:

sudo nano /etc/postgresql/11/main/postgresql.conf

Откроется редактор nano, переместите курсор в раздел CONNECTIONS AND AUTHENTICATION, добавьте строку:

listen_addresses = '*'

image

Для сохранения нажмите сочетание CTRL + X, для подтверждения введите "Y" и "Enter"

Не забудьте перезапустить службу postgresql после внесения изменений.

sudo systemctl restart postgresql

Убедитесь в адресе привязки для PostgreSQL:

sudo ss -tunelp | grep 5432

image

Если у вас активен брандмауэр UFW, разрешите порт 5432

sudo ufw allow 5432/tcp

image

Установка пароля администратора PostgreSQL

Установите пароль для администратора по умолчанию

sudo su - postgres
psql -c "alter user postgres with password 'ВашПароль'"

image

Вы также можете добавить других пользователей базы данных:

createuser dbuser1

Добавить тестовую базу данных:

createdb testdb -O dbuser1

image

Выполните тестовую операцию, войдя в систему как dbuser1 и работая с testdb:

psql -l  | grep testdb

image

Установите пароль пользователя:

psql
alter user dbuser1 with password 'ПарольПользователя';

image

Создайте таблицу и добавьте какие-нибудь данные данные:

create table test_table ( id int,Имя text, Фамилия text );
insert into test_table (id,Имя,Фамилия) values (1,'Иван','Пупкин');

image

Просмотрите данные таблицы:

select * from test_table;

image

Удалите Вашу тестовую таблицу:

DROP TABLE test_table;
\q

image

Удалите тестовую базу данных:

dropdb testdb;

image

Выйдите из PostgreSQL

exit

image

Вы успешно установили и протестировали сервер базы данных PostgreSQL в Ubuntu 18.04.

# Установка инструментов управления

# Создание пользователя

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

В этом примере создается новый пользователь с именем ssh_user, но вы должны заменить его на имя пользователя, которое вам нравится:

sudo adduser ssh_user

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

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

image

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

Чтобы избежать необходимости выходить из системы обычного пользователя и снова входить в систему как учетная запись root, мы можем настроить так называемые «суперпользовательские» или привилегии root для нашей обычной учетной записи. Это позволит нашему обычному пользователю запускать команды с административными привилегиями, помещая слово sudo перед каждой командой.

Чтобы добавить эти привилегии нашему новому пользователю, от имени пользователя root выполните эту команду, чтобы добавить нового пользователя в группу sudo:

sudo usermod -aG sudo ssh_user

# Включение брандмауэра

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

Различные приложения могут зарегистрировать свои профили в UFW после установки. Эти профили позволяют UFW управлять этими приложениями по имени. У OpenSSH, сервиса, позволяющего нам теперь подключаться к нашему серверу, есть профиль, зарегистрированный в UFW.

Вы можете увидеть это, набрав:

sudo ufw app list

image

Нам нужно убедиться, что брандмауэр разрешает SSH-соединения, чтобы мы могли снова войти в систему в следующий раз. Мы можем разрешить эти подключения, набрав:

sudo ufw allow OpenSSH

image

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

sudo ufw enable

image

Введите «y» и нажмите ENTER, чтобы продолжить. Вы можете видеть, что соединения SSH по-прежнему разрешены, набрав:

sudo ufw status

image

Как видим, разрешены только подключения через порт который мы добавили ранее для работы с PostgreSQL и подключения OpenSSH.

# Установка pgAdmin

Установите открытый ключ для репозитория:

sudo curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add

image

Создайте файл конфигурации репозитория:

sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'

image

Установите pgAdmin как web сервер:

sudo apt install pgadmin4-web

Дождитесь окончания процесса:

image

Настройте веб-сервер:

sudo /usr/pgadmin4/bin/setup-web.sh

Для настройки укажите в качестве логина адрес электронной почты (можно любой) и пароль:

image

Затем согласитесь с настройкой Apache и дополнительных модулей, для чего введите "Y", также согласитесь с перезапуском службы Apache:

image

Разрешим доступ к Apache в файрволле:

sudo ufw allow 'Apache Full'

image

Теперь можно подключиться к pgAdmin

# Доступ к pgAdmin

На локальном компьютере откройте веб-браузер и перейдите по IP-адресу вашего сервера:

http://IP_Вашего_сервера/pgadmin4

Вам будет представлен экран входа в систему:

image

Введите учетные данные, которые вы вводили ранее, и вы попадете на приветственный экран pgAdmin.

image

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

Подключение pgAdmin к серверу

Откройте диалог добавления сервера, на первой вкладке введите имя сервера:

image

На вкладке "Соединение" введите имя сервера, порт. Базу данных и пользователя оставьте "postgres" (это пользователь с правами супервизора PostgreSQL по умолчанию) и пароль который Вы задали ранее:

image

На вкладке "SSL" выберите "допускается" (SSl еще не настроен, поэтому установив, например, "требуется" Вы не соединитесь с сервером):

image

И нажмите "Сохранить"

В левой части окна pgadmin появится обозреватель (browser) подключенных серверов:

image

Создание ролей

Создаем роли с правами админа db_owner (без права логина) и SA (обязательно в верхнем регистре), для этого в обозревателе нажимаем правой кнопкой мыши на вкладку "Роли входа/группы" и выбираем "создать роль входа/группы":

image

В открывшемся окне на вкладке "Общие" задаем имя роли:

image

На вкладке "Определение" задаем пароль:

image

На вкладке права выставляем для db_owner права, как на скриншоте:

image

И нажимаем "Сохранить"

Повторяем действия для роли SA, с той разницей, что на вкладке "Права" разрешаем вход:

image

И нажимаем "Сохранить"

Проверить созданные роли можно также из командной строки PostgreSQL, не изменяя при этом сессии пользователя. Чтобы получить доступ к командной строке Postgres, запустите команду psql как пользователь postgres с правами sudo:

sudo -u postgres psql

Эта команда выполнит автоматический вход в PostgreSQL без промежуточной оболочки bash.

image

Затем введите:

\du

В выводе терминала Вы увидите список ролей с их правами:

image

Выйдите из командной строки PostgreSQL

exit

Создание табличного пространства и базы данных

Создайте табличное пространство (tablespace), для этого в web-интерфейсе pgAdmin, в обозревателе на вкладке "Табличные пространства" кликните правой кнопкой мыши и выберите "Создать табличное пространство". В открывшемся окне на вкладке "Общие" введите имя пространства и определите владельца dw_owner:

image

На вкладке "Определение" укажите расположение, как на скриншоте или задайте табличное пространство сообразно своей логики размещения файлов объектов базы данных в файловой системе:

image

И нажимаем "Сохранить"

Создайте базу данных, для этого в web-интерфейсе pgAdmin, в обозревателе на вкладке "Базы данных" кликните правой кнопкой мыши и выберите "Создать Базу данных". В открывшемся окне на вкладке "Общие" введите имя базы данных и определите владельца dw_owner:

image

На вкладке "Определение" выставите значения, как на скриншоте:

image

И нажимаем "Сохранить"

Выполнение скриптов

На созданной базе выполните скрипты, для этого выбираем созданную базу в списке, нажимаем правой кнопкой мыши и выбираем "Запросник" (Query tool):

image

В правой части окна pgadmin в открывшемся редакторе вводим:

CREATE EXTENSION "uuid-ossp";

image

И нажимаем F5, появится сообщение об успешном выполнении запроса.

Выполняем еще один скрипт:

CREATE EXTENSION "tablefunc";

image

# Установка PGagent

Для устанвки пакета вернемся в ssh клиент и введем в терминале:

sudo apt-get install pgagent

Соглашаемся на установку:

image

Создаем скрипт автозапуска:

sudo nano /etc/init.d/pgagent

В открывшемся окне вставляем код:

#!/bin/sh
#
# start/stop pgagent daemon.

### BEGIN INIT INFO
# Provides:  pgagent
# Required-Start:$network $local_fs postgresql
# Required-Stop: $network $local_fs postgresql
# Default-Start: S 2 3 4 5
# Default-Stop:  0 1 6
### END INIT INFO

. /lib/lsb/init-functions

path2bin="/usr/bin/pgagent"

if ! test -f $path2bin; then
log_failure_msg "$path2bin not found"
exit 1
fi

RUN_AS=""
CONNECT_STRING=""
LOGLEVEL=0
LOGFILE="/var/log/pgagent.log"

if [ -f /etc/default/pgagent ]; then
  . /etc/default/pgagent
elif [ -f /etc/pgagent.conf ]; then
  . /etc/pgagent.conf
fi

if [ "$CONNECT_STRING" = "" ]; then
log_failure_msg "CONNECT_STRING not specified"
exit 1
fi

opts="--quiet --oknodo --exec $path2bin"

case "$1" in
start)
	log_begin_msg "Starting PgAgent daemon..."
	if pidof $path2bin > /dev/null; then
		log_begin_msg "Already running"
		log_end_msg 0
		exit 0
	fi
	if [ "$RUN_AS" != "" ]; then
		opts="-c $RUN_AS $opts"
		if [ ! -f "$LOGFILE" ]; then touch $LOGFILE; fi
		chown $RUN_AS $LOGFILE
	fi
	OPTIONS="-l $LOGLEVEL -s $LOGFILE $CONNECT_STRING"
	start-stop-daemon --start $opts -- $OPTIONS
	log_end_msg $?
	;;
stop)
	log_begin_msg "Stopping PgAgent daemon..."
	start-stop-daemon --stop $opts
	log_end_msg $?
	;;
force-reload)
	$0 restart
	;;
restart)
	$0 stop
	$0 start
	;;
status)
	if ! pidof $path2bin > /dev/null; then
		log_success_msg "PgAgent isn't running"
		exit 3
	fi
	log_success_msg "PgAgent running"
	exit 0
	;;
*)
	log_success_msg "Usage: /etc/init.d/pgagent {start|stop|force-reload|restart|status}"
	exit 1
	;;
esac

exit 0

Для выхода нажимаем "Ctrl + x", соглашаемся на сохранение изменений: вводим "Y" и "Enter".

Добавляем файл конфигурации:

sudo nano /etc/pgagent.conf

В открывшемся окне вставляем:

CONNECT_STRING="host=127.0.0.1 port=5432 user=postgres"
LOGLEVEL=2
RUN_AS=postgres:postgres

image

Выполнить:

sudo chmod 755 /etc/init.d/pgagent
sudo update-rc.d pgagent defaults

И запустить сервис:

sudo service pgagent start

Через web-интерфейс pgAdmin на базе postgres выполнить:

CREATE EXTENSION pgagent;

image

# Настройка заданий

Перед настройкой заданий в pgagent в файл конфигурации в строку подключения добавим password=ВашПароль пользователя posgres:

sudo nano /etc/pgagent.conf

image

Настроить ежедневную задачу в pgagent с тремя запросами по шагам, для этого в левой части интерфейса pgAdmin переходим на "Задания paAgent" (если меню заданий pgAgent не отображается в браузере, нажмите правой кнопкой мыши на имя сервера и выберите в контестном меню "Обновить" (Refresh)), нажимаем правой кнопкой мыши и выбираем "Создать - Задание pgAgent":

image

В открывшемся окне, на вкладке "Общие", задаем имя задания, выбираем класс задания "Routine Maintenance":

image

На вкладке шаги для добавления в верхней правой части нажать "+", ввести имя:

image

Затем нажать на иконку изменения шага (слева от имени), в открывшемся окне на вкладке "Общие" свойств шага, выберите базу для которой создается задание:

image

На вкладке "Код" ввести vacuum analyze;

image

Добавить следующий шаг, нажать "+", на изменение выбрать базу и ввести код cluster;

image

Повторить дествия для третьего шага, выбрать базу и ввести код `reindex database <имя базы>;

image

На вкладке "Расписания" добавить расписание, присвоить имя, в разделе "Общие" задать дату и время начала и окончания выполнения задания:

image

В разделе "Повтор" выберите время выполнения задания:

image

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