在Linux服务器上安装PostgreSQL并连接到外部服务器
本次事件发展的过程
➀ PostgreSQL的安装
➁ 本地应用程序连接(使用Node.js)
➂ 外部服务器应用程序连接(使用Node.js)
➀引入PostgreSQL。
服务器使用的是樱花VPS上的CentOS8操作系统。
接下来我们将安装到服务器上。
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”,连接成功并成功获取结果!