Итак, у нас есть чистый VDS. Задача - создать на его базе сервер базы данных. В качестве БД используем postgresql
1. Настройка VDS
Провайдеры VDS на чистом контейнере как правило предоставляют доступ по ssh под пользователем root. Изменим эти пастройки по умолчанию
ssh root@__host__
apt-get update
apt-get install language-pack-ru-base
apt-get install mc
useradd __adminName__
mkdir /home/__adminName__
chown __adminName__:__adminName__ /home/__adminName__
passwd __adminName__
apt-get install sudo
visudo
меняем "root ALL=(ALL:ALL)" ALL на "adminName ALL=(root:root) ALL"
Команды для работы в редакторе:
- o - Создать текст с начала новой строки, расположенной под текущей строкой),
- ESC - закончить редактирование,
- :w - созранить изменения
- :q - выйти из редактора
(все команды редактора vi здесь)
Проверяем, можем ли мы подключиться через __adminName__
ssh __adminName__@__host__
Закрываем пользователя для root
Заходим под __adminName__, выполняем
sudo passwd -l root
Правим /etc/ssh/sshd_config: "PermitRootLogin no"
Перезапускаем sshd.
sudo service ssh restart
Меняем командную оболочку по умолчанию
sudo chsh __adminName__
В диалоге указываем путь к нужной оболочке. Доступные оболочки можно посмотреть в файле /etc/shells
Установка последней версии postgresql
sudo nano /etc/apt/sources.list.d/postgresql.list
Добавляем строку "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main"
Выполняем команды
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-9.6
Настройка postgresql
sudo passwd postgres
su postgres
mkdir /var/lib/postgresql/data
sudo nano /etc/environment
Если на данном этапе будет выдавать такую ошибку "в postgres отсутствует в файле sudoers", сделать следующее
su __adminName__
sudo visudo
postgres ALL=(ALL) ALL
su postgres
sudo nano /etc/environment
Внутри файла дополняем значение переменной PATH, дописав в него через двоеточие путь "/usr/lib/postgresql/9.6/bin". И, затем, в конце этого файла дописываем следующую строчку '"PGDATA="/var/lib/postgresql/data"'
Завершаем сеанс (exit) и заходим заново
su postgres
initdb
Редактируем файл sudo nano '/etc/postgresql/9.6/main/postgresql.conf'. В нем находим строчки (значения переменных не обязательно именно такие)
data_directory = '/var/lib/postgresql/9.1/main'
hba_file = '/etc/postgresql/9.1/main/pg_hba.conf'
ident_file = '/etc/postgresql/9.1/main/pg_ident.conf'
external_pid_file = '/var/run/postgresql/9.1-main.pid'
и комментируем их, поставив вначале каждой строки знак "#". Теперь после перезагрузки системы PostgreSQL не будет автоматически стартовать.
Для автозапуска PostgreSQL в Ubuntu нужно открыть файл sudo nano '/etc/rc.local' и в нем вписать строчку "su -c 'pg_ctl start' postgres" (до команды exit в файле).
Перезапускаем VDS
sudo reboot
Удаленный доступ к бд
По умолчанию postgres настроен для доступа только с локальной машины. Поэтому прежде всего огранизуем доступ к БД через ssh туннель
ssh -L 63333:localhost:5432 zlukfo@188.120.236.2
Терминал не закзывать!
Теперь мы можем подключиться к бд. Открываем новый терминал и подключаемся
psql -h localhost -p 63333 -U postgres
Для поклонников Sublime Text
Можно настроить выполнение sql запросов из редактора. В нем же просматривать ответы. Для этого заходим Tools - > Build System -> New Build system . И пишем примерно такой код
{
"cmd": ["/usr/bin/psql", "-U", "postgres", "-h", "localhost", "-p", "63333", "-o", "/home/zlukfo/result_sql.txt", "-a", "-E", "-f", "$file"]
}
и сохранаяем в предложенный по умолчанию каталог
Создаем файл .sql и пишем туда один или несколько sql запросов. Сохраняем файл. Нажимаем ctl+shift+b.
Внимание!!!. Конфигурацию выше нужно создавать для каждой БД (параметр -d psql). А перед тем как отправлять запрос (ctl+shift+b) - выбирать соотвествующую конфигурацию в меню Tools - > Build System
Результат запроса сохранится в файл "/home/zlukfo/result_sql.txt", В Side Bar можно создать быструю ссылку на этот файл.
Если при отурытии файла будут автоматически переноситься строки - добавить Preferenses -> settings-user "word_wrap": "false"
Если очень нужно, можно открыть доступ с улаленных хостов
/var/lib/postgresql/data/postgresql.cong
listen_addresses = '*'
pg_hba.conf
host all postgres 0.0.0.0/0 md5
Перегружаемся
su postgres
pg_ctl restart
Отправка файлов на сервер по ssh
Очень частая задача, тем более, что она может быть решена без установки дополнительных программ
scp /directory/some_file user@server_domain:/remote/directory