
# 自建PostgreSQL实例部署PoWA
本章节主要介绍ECS自建PostgreSQL数据库部署PoWA的过程。
#### 准备工作
已有自建PostgreSQL实例：
- 版本：PostgreSQL 12.6
- 管理员账号：postgres
- PostgreSQL专用存储数据库：powa-repository
- data路径：/home/postgres/data
 
#### 部署PoWA
1. 修改配置文件 /home/postgres/data/postgresql.conf，添加 pg_stat_statements 至参数 shared_preload_libraries，如下图所示： 
   ![](https://support.huaweicloud.com/bestpractice-rds-pg/zh-cn_image_0000002229708238.png "点击放大")
   
   
2. 执行命令重启数据库。 
   ```
   pg_ctl restart -D /home/postgres/data/
   ```
   
   
3. 使用postgres登录数据库，并创建database: powa，以及安装相关插件。 
   ![](https://support.huaweicloud.com/bestpractice-rds-pg/public_sys-resources/notice_3.0-zh-cn.png)
   创建的database必须命名为powa，否则PoWA运行过程中会报错，部分功能失效。
   ```
   [postgres@ecs-ad4d ~]$ psql -U postgres -d postgres
   psql (12.6)
   Type "help" for help.
   postgres=# create database powa;
   CREATE DATABASE
   postgres=# \c powa
   You are now connected to database "powa" as user "postgres".
   powa=# create extension pg_stat_statements ;
   CREATE EXTENSION
   powa=# create extension btree_gist ;
   CREATE EXTENSION
   powa=# create extension powa;
   CREATE EXTENSION
   ```
   
   
4. 配置需要采集性能指标的实例信息。 
   1. 执行SQL，添加目标实例信息。
      ```
      powa=# select powa_register_server(
      hostname => '192.168.0.1',
      alias => 'myInstance',
      port => 5432,
      username => 'user1',
      password => '**********',
      frequency => 300);
       powa_register_server
      ----------------------
       t
      (1 row)
      ```
      
   
   2. 通过查看"powa_servers"表来获取当前采集指标的实例信息。
      ```
      powa=# select * from powa_servers;
      id | hostname | alias | port | username |  password  | dbname | frequency | powa_coalesce | retention | allow_ui_connection |version
      ----+---------------+------------+------+----------+------------+--------+-----------+---------------+-----------+------------------
      0 |           | <local>|  0 |          |            |        |        -1 |   100         | 00:00:00  | t           |
      1 | 192.168.0.1 | myInstance | user1 | 5432     | ********** | powa   |       300 |           100 | 1 day       | t             |
      (2 rows)
      ```
      ![](https://support.huaweicloud.com/bestpractice-rds-pg/public_sys-resources/notice_3.0-zh-cn.png)
      在录入目标实例信息、查询目标实例都会涉及到目标实例的IP、root用户账户、明文密码等重要隐私信息，可能会面临安全风险。
      请谨慎评估该插件带来的安全风险后决定是否使用该插件。
      
   
   
   
   
 
#### PoWA-collector配置
启动PoWA-collector：
```
cd /home/postgres/.local/bin
./powa-collector.py &
```
PoWA-collector启动时，将按以下顺序搜索配置文件作为其配置：
1. /etc/powa-collector.conf
2. \~/.config/powa-collector.conf
3. \~/.powa-collector.conf
4. ./powa-collector.conf
配置文件中需要包含以下选项：
- repository.dsn : URL，用于通知 powa-collector 如何连接专用存储数据库（powa-repository）。
- debug : Boolean类型，用于指定是否在调试模式下启动 powa-collector。
本次演示中将配置写入文件./powa-collector.conf
```
{
    "repository": {
"dsn": "postgresql://postgres@localhost:5432/powa"
},
"debug": true
}
```
PoWA-collector 的配置中并没有密码的配置，所以powa-repository数据库的pg_hba.conf中需要配置对应的连接策略为trust免密连接。
#### PoWA-web配置
启动PoWA-web：
```
cd /home/postgres/.local/bin
./powa-web &
```
PoWA-web启动时，将按以下顺序搜索配置文件作为其配置：
1. /etc/powa-web.conf
2. \~/.config/powa-web.conf
3. \~/.powa-web.conf
4. ./powa-web.conf
本次实例中需要将配置内容写入文件./powa-web.conf中。
```
# cd /home/postgres/.local/bin
# vim ./powa-web.conf
# 写入配置内容，并保存
servers={
  'main': {
    'host': 'localhost',
    'port': '5432',
    'database': 'powa',
    'username': 'postgres',
    'query': {'client_encoding': 'utf8'}
  }
}
cookie_secret="SECRET_STRING"
```
本章节中powa-repository数据库pg_hba.conf中配置为trust，免密连接，因此未配置password。
