Linux 서버에 PostgreSQL 도입~외부 서버 접속까지

7660 단어 PostgreSQLDBNode.js

이번 흐름



➀PostgreSQL 도입
➁ 로컬 앱 연결(Node.js)
➂ 외부 서버 앱 연결(Node.js)

➀PostgreSQL 도입



서버는 사쿠라 VPS의 CentOS8입니다.

우선 아래에서 OS에 따른 리포지토리 URL을 취득합니다.
htps // 유 m. 포스트g sql. 오 rg/레포파 c카게 s/
이번에는 CentOS 8 - x86_64 링크를 복사합니다.


그런 다음 서버에 설치합니다.
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo dnf -qy module disable postgresql
sudo dnf install -y postgresql13-server

위에서 순서대로 리포지토리 추가, 기본 PostgreSQL 모듈 중지, PostgreSQL 설치가 됩니다.
덧붙여 옵션에 대해서는 q:메시지 출력하지 않는다, y:모두 yes 이므로, 있어도 없어도 됩니다.

이제 자동으로 postgres 사용자가 생겼다고 생각하므로 su하고 환경 변수를 확인합니다.
제 환경에서는 「PGDATA=/var/lib/pgsql/13/data」가 되어 있었습니다.
sudo su - postgres
env | grep PGDATA

그런 다음 초기 데이터베이스 작성
export PGSETUP_INITDB_OPTIONS="--encoding=UTF8 --locale=ja_JP.UTF-8 --lc-collate=ja_JP.UTF-8 --lc-ctype=ja_JP.UTF-8"
/usr/pgsql-13/bin/postgresql-13-setup initdb

데이터베이스 시작
--now를 붙이면 enable과 start를 동시에 할 수 있습니다.
systemctl enable postgresql-13 --now

postgres 사용자로 DB에 연결, 데이터베이스 생성, 역할 생성
psql
create database first_db
create role test login password 'test';

일단 빠져 test 사용자로 연결을 시도합니다.
psql -U test -d first_db
psql: error: FATAL:  Peer authentication failed for user "test"

오류가 발생했습니다.
뭐든지 PostgreSQL은 Peer 인증이라고 하는 것에 디폴트로 되어 있어, Linux의 유저명과 PostgreSQL의 유저명이 같지 않으면 안 된다고 합니다.
불편하기 때문에 거기를 바꿉니다./var/lib/pgsql/13/data/pg_hba.conf 를 만나갑니다.

pg_hba.conf_bk
local   all             all                                     peer



pg_hba.conf
local   all             postgres                                peer
local   all             all                                     md5

peer를 md5로 바꾸고 있습니다.
이제 암호 인증이 됩니다.

다만, postgres 유저는 디폴트에서는 패스워드가 설정되어 있지 않고, 패스워드 인증으로 하면 사용할 수 없게 되어 버리기 때문에, peer 인증 그대로 하고 있습니다.
비밀번호를 설정하면됩니다.

이제 PostgreSQL을 다시 시작하고 다시 test 사용자로 연결
sudo systemctl restart postgresql-13
psql -U test -d first_db

비밀번호를 듣기 때문에 설정한 "test"를 입력하여 확인 OK

이것으로 일단 PostgreSQL 도입 완료로 합니다!

➁ 로컬 앱 연결(Node.js)



그런 다음 Node.js에서 만든 앱에서 DB에 연결을 시도합니다.

새 디렉토리를 만들고 npm을 초기화하고 pg 모듈을 설치합니다.
mkdir db_connect
cd $_
npm init -y
npm install pg

알맞은 파일 만듭니다.

index.js
const pg = require('pg');

// 接続先文字列
const connectionString = 'postgres://test:test@localhost:5432/first_db';

console.log(`開始 : ${connectionString}`);
const pool = new pg.Pool({
    connectionString: connectionString
});

pool.query('SELECT * FROM user')
.then(result => {
    // 結果データの表示
    if (result.rows) {
        result.rows.forEach((row) => {
            console.log(row);
        });
    }
})
.catch(err => {
    console.log('err: ', err);
})
.then(() => {
    console.log('切断');
    pool.end();
});

이 근처는 이쪽의 기사를 참고로, 라고 할까 거의 둥근 파크리입니다.
pg 패키지를 사용하여 로컬 PostgreSQL 또는 Heroku Postgres에 연결

이것을 실행하고 결과가 반환되었으므로 OK라고 가정합니다.
$ node index.js
開始 : postgres://test:test@localhost:5432/first_db
{ user: 'test' }
切断

➂ 외부 서버 앱 연결(Node.js)



마지막으로 수중의 로컬 머신(Windows)으로부터 Linux상의 PostgreSQL에 접속해 보겠습니다.

Node.js 파일은 ➁에서 사용한 것을 유용합니다.
그러나 연결 대상 문자열만 변경합니다.
postgres://test:test@[接続先サーバのアドレス]:5432/first_db

이 작업을 수행하면 연결 오류가 발생합니다.

PostgreSQL은 기본적으로 localhost에서만 연결을 허용합니다.
그러므로, 이 변의 설정을 만나 갑니다.

먼저 청취 대상을 *(모두)로 설정하여 포트 5432를 허용합니다.

/var/lib/pgsql/13/data/postgresql.conf_bk
#listen_addresses = 'localhost'
#port = 5432



/var/lib/pgsql/13/data/postgresql.conf
listen_addresses = '*'
port = 5432

이어서 pg_hba.conf 에 아래의 한 줄을 추가

/var/lib/pgsql/13/data/pg_hba.conf
host    first_db        test            [接続元アドレス]/32         md5

이제 PostgreSQL 재부팅
sudo systemctl restart postgresql-13

그리고는 방화벽 등으로 5432 포트를 개방합니다.

사쿠라의 VPS는 브라우저에서 패킷 필터링 설정을 변경할 수 있기 때문에 거기에서 5432 포트를 열었습니다.

이제 수중의 머신으로부터 node index.js 라고 하면(자), 접속에 성공해 결과를 취득할 수 있었습니다!

좋은 웹페이지 즐겨찾기