# Установка 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
Включение роли Hyper-V с помощью раздела "Параметры":
1.Щелкните правой кнопкой мыши кнопку Windows и выберите пункт "Приложения и возможности".
2.Выберите "Программы и компоненты" справа в разделе "Сопутствующие параметры" параметры.
3.Выберите пункт Включение или отключение компонентов Windows.
4.Выберите Hyper-V и нажмите кнопку ОК.
После установки компонентов перезагрузите компьютер.
Важно!
Обратите внимание, на состояние строки "Низкоуровневая оболочка Hyper-V", если она "некликабельна" (серая), еще раз убедитесь, что ваше оборудование поддерживает технологию виртуализации и она включена в BIOS машины.
# Создание виртуальной машины в Hyper-V
Скопируйте к себе с сервера \\fsrv\DISTR\CentOS\ файл ubuntu-18.04.3-live-server-amd64.iso или скачайте с сайта https://releases.ubuntu.com/18.04/ к себе на компьютер образ установочного диска для сервера:
В поле поиска в панели задач введите Hyper-V
(или через Панель управления - Администрирование - Диспетчер Hyper-V) и запустите "Диспетчер Hyper-V"
В диспетчере Hyper-V слева выбираем имя своего компьютера, а в правом столбце "Действия" выбираем Создать - Виртуальная машина
В открывшемся окне задайте произвольное имя виртуальной машины, ее расположение и нажмите Далее
Выберите Поколение 2 и нажмите Далее
Укажите размер выделяемой памяти для виртуальной машины, исходя из возможностей Вашего оборудования, но не менее 512 Мб (минимальные требования Ubuntu Server) и нажмите Далее
В настройках сети выберите "Default Switсh" и нажмите Далее
Создайте виртуальный диск для Вашей новой машины задав имя, расположение и размер. При выборе расположения и размера виртуального диска исходите из конфигурации оборудования и задач, под которые создается сервер, но не менее 16 Гб и нажмите Далее
В следующем окне укажите путь к ранее загруженному файлу установочного образа и нажмите Далее
В следующем окне завершите работу мастера создания виртуальной машины, нажав Готово
После окончания работы мастера откройте Диспетчер Hyper-V, выберите свою виртуальную машину из списка:
кликнете правой кнопкой мыши и выберите "Параметры", в открывшемся окне перейдите на вкладку "Безопасность", уберите отметку в чекбоксе "Включить безопасную загрузку" и нажмите "ОК".
Виртуальная машина создана и готова к установке операционной системы.
# Установка Ubuntu Server
В Диспетчере Hyper-V дважды кликните на Вашу виртуальную машину и в открывшемся окне нажмите "Пуск"
Дождитесь инициализация виртуальной машины и начала установки Ubuntu Server 18.04. (возможен вывод лога сообщений об ошибках или из-за кортокого таймаута перед началом установки Вы сразу увидите меню выбора языка установки)
В открывшемся окне настройки установки в первым будет предложен выбор языка устанавливаемой ОС. Управление производится клавишами "Вверх", "Вниз" и "Enter". Выбираем "Русский".
В следующем окне будет предложено обновить дистрибутив установки, мы уже определились с устанавливаемой версией, выбираем "Continue without updating" и нажимаем "Enter"
В окне конфигурации клавиатуры выбираем "Русская" с вариантом "Русская" выбираем "Готово" и нажимаем "Enter"
В следующем окне выбираем сочетание клавиш для переключения раскладки клавиатуры, выбираем "ОК", "Готово" и нажимаем "Enter"
В открывшемся окне конфигурации сетевого соединения настраиваем динамический или статический IP адрес, в данном случае оставляем конфигурацию выбранного адаптера без изменений, выбираем "Готово" и нажимаем "Enter"
В следующем окне конфигурируем proxy, если Вы не используете proxy, оставляем поле "Proxy address" пустым, выбираем "Готово" и нажимаем "Enter"
Зеркало для загрузки пакетов тоже оставьте по умолчанию, выбираем "Готово" и нажимаем "Enter"
В окне "File system setup" настраиваем разметку разделов Linux, можно предоставить возможность инсталлятору сделать это по своему усмотрению (Use An Entire Disk) или настроить "Вручную". Рассмотрим вариант установки вручную. Выбираем "Вручную" и нажимаем "Enter"
В следующем разделе выбираем нужный диск в списке "Available Devices" и нажимаем "Enter"
В открывшемся контекстном меню выбираем "Add Partition" и нажимаем "Enter"
В следующем окне задаем размер раздела, формат и точку монтирования. Создам корневой раздел, оставляем точку монтирования в поле "Mount" в виде одного слэша " / ", или выбираем эту точку из списка. Формат файловой системы ext4. Все свободное место выделяем под корневой каталог, выбираем "Create" и нажимаем "Enter"
В разделе "File system summary" мы видим смонтированный нами корневой раздел с файловой системой ext4 и инсталлятор автоматически выделил место и смонтировал загрузочный раздел /boot/efi с файловой системой fat32:
Когда завершите создавать разделы, у вас должно получится два раздела. Выбираем "Готово" и нажимаем "Enter".
В следующем диалоге соглашаемся на начало инсталляции и внесение изменений в структуру разделов, выбираем "Продолжить" и нажимаем "Enter"
Следующий шаг - создание учетной записи пользователя и выбор имени сервера. Заполните такие поля:
- Ваше имя - просто имя, можно русскими буквами;
- Your server's name - имя вашего сервера, только строчные латинские буквы;
- Имя пользователя - имя пользователя для входа в систему, только строчные латинские буквы;
- Пароль - вводится два раза, используйте сложные пароли для серверов.
На следующем этапе выбираем "Install OpenSSH server", выбираем "Готово" и нажимаем "Enter"
Когда установка Ubuntu Server 18.04 lts завершится, дождитесь установки обновлений безопасности и нажмите кнопку Перезагрузить сейчас.
После перезагрузки введите логин и пароль, которые вы использовали во время установки:
Откроется окно с готовой к работе системой Ubuntu Server
Так как, в дальнейшем предстоит вводить много команд через терминал, а в гипервизоре корректно не работает вставка из буфера обмена, для подключения по ssh воспользуемся сторонним клиентом. Сначала узнаем IP адрес нашей виртуальной машины, для этого вводим sudo ifconfig
в терминале гипервизора, подтверждаем команду паролем и получаем вывод терминала вида:
Запоминаем IP адрес интерфейса eth0.
Теперь установим ssh клиент, например, Snowflake. Для этого скачаем его с GitHub https://github.com/subhra74/snowflake/releases, выбираем инсталятор для Windows snowflake.msi:
Сохраняем и запускаем скачанный устанвщик snowflake.msi, в открывшемся после усановки окне программы, нажимаем "New connection", задаем произвольное имя сервера, в поле "Host" вводим IP адрес виртуальной машины, порт оставляем без изменений, заполняем поля с логином и паролем, которые Вы ввели при установке Ubuntu в виртуальную машину и нажимаем "Connect":
Соглашаемся с добавлением RSA ключа:
Откроется терминал для управления установленной Ubuntu Server по ssh:
Далее все команды вводим здесь, копируя из инструкции.
# Установка PostgreSQL 11 на Ubuntu Server 18.04
Обновление установленных пакетов
Обновляем текущие установленные пакеты для вновь установленного сервера, для этого последовательно вводим команды:
sudo apt update
sudo apt -y upgrade
После обновления пакетов, перезагрузите сервер
sudo reboot
На время перезагрузки будет разорвано соединение, выждите некоторое время и нажмите "Reconnect" в красном поле справа:
После перезагрузки системы установите vim
и wget
, если они еще не установлены.
sudo apt install -y wget vim
# Добавление репозиториев PostgreSQL 11
Перед добавлением содержимого репозитория на Ваш Ubuntu Server вам необходимо импортировать ключ подписи репозитория:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
В выводе теминала будет "ОК":
После импорта ключа 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
добавление прошло без ошибок, теперь проверим содержимое файла репозитория
cat /etc/apt/sources.list.d/pgdg.list
В выводе терминала отобразится строка содержимого:
Установите PostgreSQL 11 в Ubuntu Server, для этого введите следующие две команды:
sudo apt update
sudo apt -y install postgresql-11
Разрешить доступ к PostgreSQL с удаленных хостов
По умолчанию доступ к серверу базы данных PostgreSQL осуществляется только с localhost:
Чтобы разрешить доступ к сети, отредактируйте файл конфигурации, для этого введите:
sudo nano /etc/postgresql/11/main/postgresql.conf
Откроется редактор nano, переместите курсор в раздел CONNECTIONS AND AUTHENTICATION, добавьте строку:
listen_addresses = '*'
Для сохранения нажмите сочетание CTRL + X, для подтверждения введите "Y" и "Enter"
Не забудьте перезапустить службу postgresql после внесения изменений.
sudo systemctl restart postgresql
Убедитесь в адресе привязки для PostgreSQL:
sudo ss -tunelp | grep 5432
Если у вас активен брандмауэр UFW, разрешите порт 5432
sudo ufw allow 5432/tcp
Установка пароля администратора PostgreSQL
Установите пароль для администратора по умолчанию
sudo su - postgres
psql -c "alter user postgres with password 'ВашПароль'"
Вы также можете добавить других пользователей базы данных:
createuser dbuser1
Добавить тестовую базу данных:
createdb testdb -O dbuser1
Выполните тестовую операцию, войдя в систему как dbuser1 и работая с testdb:
psql -l | grep testdb
Установите пароль пользователя:
psql
alter user dbuser1 with password 'ПарольПользователя';
Создайте таблицу и добавьте какие-нибудь данные данные:
create table test_table ( id int,Имя text, Фамилия text );
insert into test_table (id,Имя,Фамилия) values (1,'Иван','Пупкин');
Просмотрите данные таблицы:
select * from test_table;
Удалите Вашу тестовую таблицу:
DROP TABLE test_table;
\q
Удалите тестовую базу данных:
dropdb testdb;
Выйдите из PostgreSQL
exit
Вы успешно установили и протестировали сервер базы данных PostgreSQL в Ubuntu 18.04.
# Установка инструментов управления
# Создание пользователя
Для последующей работы с Ubuntu, у вас должен быть обычный пользователь без полномочий root с привилегиями sudo, настроенными на вашем сервере. Кроме того, вам потребуется включить базовый брандмауэр, чтобы блокировать второстепенные порты.
В этом примере создается новый пользователь с именем ssh_user, но вы должны заменить его на имя пользователя, которое вам нравится:
sudo adduser ssh_user
Вам будет задано несколько вопросов, начиная с пароля учетной записи.
Введите надежный пароль и, при желании, введите любую дополнительную информацию. Это не обязательно, и вы можете просто нажать ENTER в любом поле, которое хотите пропустить.
Теперь у нас есть новая учетная запись пользователя с обычными привилегиями учетной записи. Однако иногда нам может потребоваться выполнение административных задач.
Чтобы избежать необходимости выходить из системы обычного пользователя и снова входить в систему как учетная запись root, мы можем настроить так называемые «суперпользовательские» или привилегии root для нашей обычной учетной записи. Это позволит нашему обычному пользователю запускать команды с административными привилегиями, помещая слово sudo перед каждой командой.
Чтобы добавить эти привилегии нашему новому пользователю, от имени пользователя root выполните эту команду, чтобы добавить нового пользователя в группу sudo:
sudo usermod -aG sudo ssh_user
# Включение брандмауэра
Серверы Ubuntu 18.04 могут использовать брандмауэр UFW, чтобы убедиться, что разрешены только подключения к определенным службам. С помощью этого приложения мы можем очень легко настроить базовый брандмауэр.
Различные приложения могут зарегистрировать свои профили в UFW после установки. Эти профили позволяют UFW управлять этими приложениями по имени. У OpenSSH, сервиса, позволяющего нам теперь подключаться к нашему серверу, есть профиль, зарегистрированный в UFW.
Вы можете увидеть это, набрав:
sudo ufw app list
Нам нужно убедиться, что брандмауэр разрешает SSH-соединения, чтобы мы могли снова войти в систему в следующий раз. Мы можем разрешить эти подключения, набрав:
sudo ufw allow OpenSSH
После этого мы можем включить брандмауэр, набрав:
sudo ufw enable
Введите «y» и нажмите ENTER, чтобы продолжить. Вы можете видеть, что соединения SSH по-прежнему разрешены, набрав:
sudo ufw status
Как видим, разрешены только подключения через порт который мы добавили ранее для работы с PostgreSQL и подключения OpenSSH.
# Установка pgAdmin
Установите открытый ключ для репозитория:
sudo curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add
Создайте файл конфигурации репозитория:
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'
Установите pgAdmin как web сервер:
sudo apt install pgadmin4-web
Дождитесь окончания процесса:
Настройте веб-сервер:
sudo /usr/pgadmin4/bin/setup-web.sh
Для настройки укажите в качестве логина адрес электронной почты (можно любой) и пароль:
Затем согласитесь с настройкой Apache и дополнительных модулей, для чего введите "Y", также согласитесь с перезапуском службы Apache:
Разрешим доступ к Apache в файрволле:
sudo ufw allow 'Apache Full'
Теперь можно подключиться к pgAdmin
# Доступ к pgAdmin
На локальном компьютере откройте веб-браузер и перейдите по IP-адресу вашего сервера:
http://IP_Вашего_сервера/pgadmin4
Вам будет представлен экран входа в систему:
Введите учетные данные, которые вы вводили ранее, и вы попадете на приветственный экран pgAdmin.
Теперь, когда вы убедились, что можете получить доступ к интерфейсу pgAdmin, осталось только подключить pgAdmin к вашей базе данных PostgreSQL.
Подключение pgAdmin к серверу
Откройте диалог добавления сервера, на первой вкладке введите имя сервера:
На вкладке "Соединение" введите имя сервера, порт. Базу данных и пользователя оставьте "postgres" (это пользователь с правами супервизора PostgreSQL по умолчанию) и пароль который Вы задали ранее:
На вкладке "SSL" выберите "допускается" (SSl еще не настроен, поэтому установив, например, "требуется" Вы не соединитесь с сервером):
И нажмите "Сохранить"
В левой части окна pgadmin появится обозреватель (browser) подключенных серверов:
Создание ролей
Создаем роли с правами админа db_owner (без права логина) и SA (обязательно в верхнем регистре), для этого в обозревателе нажимаем правой кнопкой мыши на вкладку "Роли входа/группы" и выбираем "создать роль входа/группы":
В открывшемся окне на вкладке "Общие" задаем имя роли:
На вкладке "Определение" задаем пароль:
На вкладке права выставляем для db_owner права, как на скриншоте:
И нажимаем "Сохранить"
Повторяем действия для роли SA, с той разницей, что на вкладке "Права" разрешаем вход:
И нажимаем "Сохранить"
Проверить созданные роли можно также из командной строки PostgreSQL, не изменяя при этом сессии пользователя. Чтобы получить доступ к командной строке Postgres, запустите команду psql как пользователь postgres с правами sudo:
sudo -u postgres psql
Эта команда выполнит автоматический вход в PostgreSQL без промежуточной оболочки bash.
Затем введите:
\du
В выводе терминала Вы увидите список ролей с их правами:
Выйдите из командной строки PostgreSQL
exit
Создание табличного пространства и базы данных
Создайте табличное пространство (tablespace), для этого в web-интерфейсе pgAdmin, в обозревателе на вкладке "Табличные пространства" кликните правой кнопкой мыши и выберите "Создать табличное пространство". В открывшемся окне на вкладке "Общие" введите имя пространства и определите владельца dw_owner:
На вкладке "Определение" укажите расположение, как на скриншоте или задайте табличное пространство сообразно своей логики размещения файлов объектов базы данных в файловой системе:
И нажимаем "Сохранить"
Создайте базу данных, для этого в web-интерфейсе pgAdmin, в обозревателе на вкладке "Базы данных" кликните правой кнопкой мыши и выберите "Создать Базу данных". В открывшемся окне на вкладке "Общие" введите имя базы данных и определите владельца dw_owner:
На вкладке "Определение" выставите значения, как на скриншоте:
И нажимаем "Сохранить"
Выполнение скриптов
На созданной базе выполните скрипты, для этого выбираем созданную базу в списке, нажимаем правой кнопкой мыши и выбираем "Запросник" (Query tool):
В правой части окна pgadmin в открывшемся редакторе вводим:
CREATE EXTENSION "uuid-ossp";
И нажимаем F5, появится сообщение об успешном выполнении запроса.
Выполняем еще один скрипт:
CREATE EXTENSION "tablefunc";
# Установка PGagent
Для устанвки пакета вернемся в ssh клиент и введем в терминале:
sudo apt-get install pgagent
Соглашаемся на установку:
Создаем скрипт автозапуска:
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
Выполнить:
sudo chmod 755 /etc/init.d/pgagent
sudo update-rc.d pgagent defaults
И запустить сервис:
sudo service pgagent start
Через web-интерфейс pgAdmin на базе postgres выполнить:
CREATE EXTENSION pgagent;
# Настройка заданий
Перед настройкой заданий в pgagent в файл конфигурации в строку подключения добавим password=ВашПароль
пользователя posgres:
sudo nano /etc/pgagent.conf
Настроить ежедневную задачу в pgagent с тремя запросами по шагам, для этого в левой части интерфейса pgAdmin переходим на "Задания paAgent" (если меню заданий pgAgent не отображается в браузере, нажмите правой кнопкой мыши на имя сервера и выберите в контестном меню "Обновить" (Refresh)), нажимаем правой кнопкой мыши и выбираем "Создать - Задание pgAgent":
В открывшемся окне, на вкладке "Общие", задаем имя задания, выбираем класс задания "Routine Maintenance":
На вкладке шаги для добавления в верхней правой части нажать "+", ввести имя:
Затем нажать на иконку изменения шага (слева от имени), в открывшемся окне на вкладке "Общие" свойств шага, выберите базу для которой создается задание:
На вкладке "Код" ввести vacuum analyze;
Добавить следующий шаг, нажать "+", на изменение выбрать базу и ввести код cluster;
Повторить дествия для третьего шага, выбрать базу и ввести код `reindex database <имя базы>;
На вкладке "Расписания" добавить расписание, присвоить имя, в разделе "Общие" задать дату и время начала и окончания выполнения задания:
В разделе "Повтор" выберите время выполнения задания:
Таким образом, было создано задание на ежедневное обслуживание базы данных с тремя шагами (Очистка всех таблиц, кластеризация всех таблиц и переиндексация.