
# 云上PostgreSQL实例部署PoWA
华为云上进行远程模式部署PoWA，需要一台ECS，并在ECS上安装PoWA-archivist、PoWA-collector、PoWA-web。本章节主要介绍PoWA-archivist、PoWA-collector、PoWA-web的安装过程。
#### 架构图
远程模式部署PoWA的架构如下图所示：
图1远程模式架构图   
![](https://support.huaweicloud.com/bestpractice-rds-pg/zh-cn_image_0000002229707946.png "点击放大")
#### 准备工作
- 已创建RDS for PostgreSQL 12.6实例。
- 已创建ECS并绑定弹性公网IP，本次演示所创建的ECS系统镜像为：CentOS 8.2 64bit。
 
#### Python3的安装部署
安装PoWA-collector、PoWA-web依赖Python3环境，且使用pip3安装可以减少很多依赖环境安装的工作量。当前ECS已默认安装了 Python 3.6.8版本，由于版本偏低，安装最新版本的PoWA失败，建议安装最新的Python版本，详情请参见[安装Python 3.9.9]。
#### 安装PoWA-archivist
1. 通过wget命令获取[PoWA-archivist源码](https://github.com/powa-team/powa-archivist/archive/refs/tags/REL_4_1_2.tar.gz)：
   ```
   wget https://github.com/powa-team/powa-archivist/archive/refs/tags/REL_4_1_2.tar.gz
   ```
   
2. 将下载好的REL_4_1_2.tar.gz进行解压。
3. 进入解压后的目录，执行命令完成安装。
   ```
   make && make install
   ```
   
 
#### 安装PoWA-collector、PoWA-web
1. 切换到RDS for PostgreSQL数据库用户下，本次演示使用的是postgres。
   ```
   su - postgres
   ```
   
2. psycopg2 是 PoWA-collector、powa-web安装必不可少的依赖环境。
   ```
   pip install psycopg2
   pip install powa-collector
   pip install powa-web
   ```
   
安装完成后，查看路径树如下所示，表示PoWA-collector、PoWA-web均已安装完成。
```
/home/postgres/.local/bin
├── powa-collector.py
├── powa-web
└── __pycache__
```
#### 创建powa插件
1. 使用root用户登录RDS for PostgreSQL实例的powa数据库。（若不存在，请先自行创建powa数据库）
2. 在powa数据库中创建powa插件。 
   ```
   select control_extension('create', 'pg_stat_statements');
   select control_extension('create', 'btree_gist');
   select control_extension('create', 'powa');
   ```
   
   
 
#### 常见问题
Q：在执行**pip install psycopg2**时可能会遇到报错python setup.py build_ext --pg-config /path/to/pg_config build。
A：配置RDS for PostgreSQL的bin、lib路径到环境变量中，重新执行 pip install psycopg2 即可完成安装。
 #### 安装Python 3.9.9
1. 环境准备。 [使用华为云开源镜像配置yum源](https://support.huaweicloud.com/usermanual-mirrors/mirrors_hlp_0003.html)。
   请按照以下顺序执行，否则安装Python3.9.9可能会有部分失败（SSL组件依赖失败），导致后续无法安装PoWA-collector、PoWA-web。
   ```
   yum install readline* -y
   yum install zlib* -y
   yum install gcc-c++ -y
   yum install sqlite* -y
   yum install openssl-* -y
   yum install libffi* -y
   ```
   
2. 安装[python 3.9.9](https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz)。
   1. 使用root用户执行下列命令。
      ```
      mkdir env
      cd env
      wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz
      tar -xzvf Python-3.9.9.tgz
      cd Python-3.9.9
      ./configure --prefix=/usr/local/python3.9.9
      make && make install
      ```
      
   
   2. 创建软链接。
      ```
      ln -s /usr/local/python3.9.9/bin/python3.9 /usr/bin/python
      ln -s /usr/local/python3.9.9/bin/pip3.9 /usr/bin/pip
      ```
      
    
3. 验证安装是否成功。
   1. 验证安装，重点验证SSL功能。
      ```
      [root@ecs-ad4d Python-3.9.9]# python
      Python 3.9.9 (main, Nov 25 2021, 12:36:32)
      [GCC 8.4.1 20200928 (Red Hat 8.4.1-1)] on linux
      Type "help", "copyright", "credits" or "license" for more information.
      import ssl
      import urllib.request
      context = ssl._create_unverified_context()
      urllib.request.urlopen('https://www.example.com/',context=context).read()
      ```
      
   
   2. 如果有返回，说明安装成功。执行以下命令退出。
      ```
      quit()
      ```
      
    
 
