Если ты читаешь это, значит кто-то решил, что ты должен возиться с PostgreSQL на Ubuntu 18.04. Возможно, ты сам. Мои соболезнования. Не потому что Postgres — плохая штука. Он отличный. Просто он старше тебя, злее тебя и, судя по конфигам, немного псих. Вот тебе реальность без обёртки.
Установка. Без плясок.
Хочешь, чтобы оно работало? Вот команда:
sudo apt update
sudo apt install postgresql postgresql-contrib
Не спрашивай, зачем postgresql-contrib. Просто ставь. Потом, когда всё взорвётся, ты будешь рад, что оно уже установлено.
После этого PostgreSQL как бы запускается сам. Типа работает. Проверим:
sudo -u postgres psql -c "SELECT version();" Если видишь версию, значит сервер жив. Поздравляю, ты пока ничего не сломал.
Кто такой postgres и почему он как призрак
При установке появляется юзер postgres. Он бог. Без пароля. Без интерфейса. Без души.
Чтобы войти в него:
sudo su - postgres
psql
А если не хочется переодеваться в другого пользователя — сделай так:
sudo -u postgres psql
Появился промт postgres=#? Ты внутри. Добро пожаловать в админ-панель, сделанную в аду. Чтобы выйти:
\q Аутентификация. Механизмы из 90-х
PostgreSQL до сих пор живёт в парадигме "давай сделаем всё максимально неочевидно". Там есть свои "методы":
peer: работает только локально, спрашивает у ОС "а ты кто вообще?"ident: почти какpeer, но через TCP/IP и с выкрутасамиtrust: просто поверь человеку. Ну да, это безопасно, ага.password,md5,scram-sha-256: нормальные люди используют хотя быmd5, если не маниакально параноят.
Всё это живёт в /etc/postgresql/10/main/pg_hba.conf. Где 10 — это версия, не вздумай писать "latest". Ubuntu не прощает таких.
Создать роль и не облажаться
Допустим, тебе нужен пользователь john, а не этот жуткий postgres.
sudo su - postgres -c "createuser john"
sudo su - postgres -c "createdb johndb" Теперь ты заходишь под postgres, как обычно, и отдаёшь john права:
GRANT ALL PRIVILEGES ON DATABASE johndb TO john;
Это не сделает john умнее. Это просто даст ему возможность всё сломать.
Включить удалённый доступ (если ты осознанный суицидник)
По умолчанию Postgres слушает только 127.0.0.1. Хочешь пустить кого-то снаружи — лезь в конфиг:
sudo vim /etc/postgresql/10/main/postgresql.conf
Найди строку:
#listen_addresses = 'localhost'
И преврати её в:
listen_addresses = '*'
Сохрани, плюнь три раза и перезапусти:
sudo service postgresql restart
Проверь, что он теперь реально слушает:
ss -nlt | grep 5432
Если видишь 0.0.0.0:5432 — значит Postgres стал общительным. Ну или просто открыт в интернет, как бабушкин роутер.
Но это ещё не всё. Иди в pg_hba.conf и скажи Postgres, что можно доверять не только localhost:
sudo vim /etc/postgresql/10/main/pg_hba.conf
Добавь что-то вроде:
host all all 0.0.0.0/0 md5
Сохрани. Перезапусти. Молись.
Что точно пойдёт не так
Забудешь про pg_hba.conf, будешь сидеть с listen_addresses='*', и всё равно не пустит.
Попробуешь подключиться по паролю, а он требует peer. Потому что он тебя знает, а пароль — нет.
Создашь роль, а пароль не задашь. Она существует, но войти в неё нельзя. Типа как депутат.
Ubuntu обновится, версия Postgres поменяется, а ты не знал. Теперь у тебя /etc/postgresql/12/main/ вместо 10.
Итого
Ты поставил Postgres. Ты его запустил. Он даже работает. Не радуйся. Это только начало. PostgreSQL — не тот друг, который прощает ошибки. Это тот, кто молча смотрит, как ты сам себя хоронишь в конфигах и думает: "Я ведь предупреждал". Зато, если сдружитесь, он тебя вытащит даже из дерьмового продакшена.
0 комментариев