在Linux服务器上安装PostgreSQL并连接到外部服务器

本次事件发展的过程

➀ PostgreSQL的安装
➁ 本地应用程序连接(使用Node.js)
➂ 外部服务器应用程序连接(使用Node.js)

➀引入PostgreSQL。

服务器使用的是樱花VPS上的CentOS8操作系统。

image.png

接下来我们将安装到服务器上。

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用户了,所以我们切换用户并检查环境变量。
在我的环境中,环境变量设置为「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参数,可以同时启用和启动数据库。

systemctl enable postgresql-13 --now

使用postgres用户连接到数据库,创建数据库和角色。

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文件。

local   all             all                                     peer

请削减你的支出,以便更好地管理你的财务状况。

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创建的应用程序连接到数据库。

新建一个文件夹,进行npm初始化,并安装pg模块。

mkdir db_connect
cd $_
npm init -y
npm install pg

我会创建一个适当的文件。

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默认只接受来自本地主机的连接。因此,需要调整相关设置。

首先,将监听地址设置为*(全部),并允许端口5432。

#listen_addresses = 'localhost'
#port = 5432

请将以下内容用中文进行同义表达,只需要一种选项:

请将以下内容翻译成中文,只提供一种选项:

listen_addresses = '*'
port = 5432

接下来,在pg_hba.conf中添加以下1行。

host    first_db        test            [接続元アドレス]/32         md5

用这个命令重新启动PostgreSQL

sudo systemctl restart postgresql-13

然后可以通过防火墙等方式打开5432端口。

由于樱花VPS可以通过浏览器更改数据包过滤设置,我们在那里开放了5432端口。

如果从我的电脑上运行 “node index.js”,连接成功并成功获取结果!

广告
将在 10 秒后关闭
bannerAds