# 安装部署

> 下载、配置、安装 Pigsty
---

> 安装 Pigsty 四步走: [**准备**](#准备)，[**下载**](#下载)，[**配置**](#配置)，以及 [**安装**](#安装)。如果您没有互联网访问，请同时参阅 [**离线安装**](/zh/docs/setup/offline/)。


----------------

## 简短版本

[**准备**](#准备) 一个安装了 [**兼容**](/zh/docs/reference/compatibility/) 操作系统的 Linux x86_64 节点，使用带有免密 `sudo` 权限的用户，执行以下命令：

```bash
curl -L https://get.pigsty.cc/install | bash -s v2.7.0
```

该命令会 [**下载**](#下载) 并解压 Pigsty 源码至家目录，依次完成 [**配置**](#配置) 与[**安装**](#安装) 即可完成安装。

```bash
cd ~/pigsty      # 下载源码包解压后进入 Pigsty 源码目录，完成后续 准备、配置、安装 三个步骤
./bootstrap      # 【可选项】用于确保 Ansible 正常安装，如果 /tmp/pkg.tgz 离线包则使用它
./configure      # 【可选项】执行环境检测，并生成相应的推荐配置文件，如果知道如何配置可以跳过
./install.yml    # 根据生成的配置文件开始在当前节点上执行安装，使用离线安装包大概需要10分钟完成
```

安装完成后，您可以通过域名，或`80/443`端口通过 Nginx 访问 WEB [**界面**](#用户界面)，
通过 `5432` 端口访问默认的 PostgreSQL 数据库 [**服务**](/zh/docs/concept/svc/)。
您可以继续使用 Pigsty 纳管 [**更多**](#更多) 节点，并部署各种 [**模块**](/zh/docs/about/module/)。

**样例：在 Ubuntu 22.04 节点上，在线单机安装流程**

[![asciicast](https://asciinema.org/a/659640.svg)](https://asciinema.org/a/659640)

<details><summary>样例：在 EL8 节点上，使用离线软件包完成安装</summary>

[![asciicast](https://asciinema.org/a/659637.svg)](https://asciinema.org/a/659637)

</details>



----------------

## 准备

> 关于准备工作的完整详细说明，请参考 [**入门：准备工作**](/zh/docs/setup/prepare) 一节。

Pigsty 支持 `Linux` 内核与 `x86_64/amd64` 架构，运行于物理机、虚拟机环境中，要求使用**静态IP地址**。
最低配置要求为 `1C1G`，推荐至少使用 `2C4G` 以上的机型，上不封顶，参数会自动优化适配。

我们强烈建议您使用刚安装完操作系统的全新节点部署，从而避免无谓的安装异常问题，建议使用 **RockyLinux 8.9** 或 **Ubuntu 22.04.3**，
支持的完整操作系统列表请参考 [**兼容性**](/zh/docs/reference/compatibility)。

在安装 Pigsty 的管理节点上，您需要拥有 `ssh` 登陆权限与 `sudo` 权限：如果您的部署涉及多个节点，您应当确保当前管理用户在当前管理节点上，可以通过 SSH 公钥免密登陆其他被管理的节点（包括本节点）。

Pigsty 依赖 Ansible 执行剧本，在执行安装前，您需要先安装 `ansible` 与 `jmespath` 软件包。您还可以通过 [**`bootstrap`**](/zh/docs/setup/offline#bootstrap) 脚本完成这一任务，特别是当您没有互联网访问时。

**安装 Ansible**



**EL 8 \/ 9**

sudo dnf install -y ansible python3.11-jmespath python3-cryptography

**EL 7**

sudo yum install -y ansible   # EL7 无需显式安装 Jmespath

**Debian \/ Ubuntu**

sudo apt install -y ansible python3-jmespath

**MacOS**

brew install ansible


**避免使用 root 用户安装**


尽管使用 `root` 用户安装 Pigsty 是可行的，但 [安全最佳实践](/zh/docs/setup/security/)
是使用一个不同于根用户（`root`）与数据库超级用户 (`postgres`) 的专用管理员用户（如：`dba`），
Pigsty 安装过程中会默认创建由配置文件指定的可选管理员用户 `dba`






----------------

## 下载

您可以使用以下命令自动下载、解压 Pigsty 源码包至 `~/pigsty` 目录下使用：

```bash
curl -L https://get.pigsty.cc/install  | bash -s v2.7.0
```

<details><summary>一键下载脚本的样例输出</summary>

```bash
$ bash -c "$(curl -fsSL https://get.pigsty.cc/install)" -- v2.7.0
[v2.7.0] ===========================================
$ curl -fsSL https://pigsty.cc/install | bash -s v2.7.0
[Site] https://pigsty.io
[Demo] https://demo.pigsty.cc
[Repo] https://github.com/Vonng/pigsty
[Docs] https://pigsty.io/docs/setup/install
[Download] ===========================================
[ OK ] version = v2.7.0 (from default)
curl -fSL https://get.pigsty.cc/v2.7.0/pigsty-v2.7.0.tgz -o /tmp/pigsty-v2.7.0.tgz
########################################################################### 100.0%
[ OK ] md5sums = some_random_md5_hash_value_here_  /tmp/pigsty-v2.7.0.tgz
[Install] ===========================================
[ OK ] install = /home/vagrant/pigsty, from /tmp/pigsty-v2.7.0.tgz
[Resource] ===========================================
[HINT] rocky 8  have [OPTIONAL] offline package available: https://pigsty.io/docs/setup/offline
curl -fSL https://github.com/Vonng/pigsty/releases/download/v2.7.0/pigsty-pkg-v2.7.0.el8.x86_64.tgz -o /tmp/pkg.tgz
curl -fSL https://get.pigsty.cc/v2.7.0/pigsty-pkg-v2.7.0.el8.x86_64.tgz -o /tmp/pkg.tgz # or use alternative CDN
[TodoList] ===========================================
cd /home/vagrant/pigsty
./bootstrap      # [OPTIONAL] install ansible & use offline package
./configure      # [OPTIONAL] preflight-check and config generation
./install.yml    # install pigsty modules according to your config.
[Complete] ===========================================
```


**安装特定版本的软件**



提示：如果要下载特定版本的 Pigsty，请向安装脚本传入可用的 [版本号参数](/zh/docs/releasenote)，本例中为 `v2.7.0`。

```bash
bash -c "$(curl -fsSL https://get.pigsty.cc/i)" -- v2.7.0   # 安装特定版本：v2.7.0
curl -fsSL https://get.pigsty.cc/i | bash -s v2.7.0         # 另一种传入参数的办法
```



</details><br>

对于没有互联网访问的环境，您可以参考 [**离线安装**](/zh/docs/setup/offline) 的说明，提前下载好源码包，与可选的离线软件包，手工上传至目标服务器，并解压使用。
[**GitHub Release**](https://github.com/Vonng/pigsty/releases) 页面提供下载，您也可以直接使用以下 URL：

- 中国CDN： https://get.pigsty.cc/v2.7.0/pigsty-v2.7.0.tgz
- GitHub： https://github.com/Vonng/pigsty/releases/download/v2.7.0/pigsty-v2.7.0.tgz

```bash
curl https://get.pigsty.cc/v2.7.0/pigsty-v2.7.0.tgz -o pigsty.tgz
tar -xvf pigsty.tgz -C ~ ; cd ~/pigsty ;  # 手工下载，并解压至家目录中
```

你也可以使用 `git` 来下载 Pigsty 源代码，请 **务必** 检出特定版本后使用。

```bash
git clone https://github.com/Vonng/pigsty; cd pigsty;  git checkout v2.7.0;
```

**检出特定版本使用**



`master` 主干为活跃开发分支，使用 `git` 时请务必检出特定版本后使用，可用版本请参考 [**发行注记**](/zh/docs/releasenote)。




----------------

## 配置

配置 / [`configure`](/zh/docs/setup/config) 会根据您当前的环境，自动生成推荐的（单机安装） [`pigsty.yml`](https://github.com/Vonng/pigsty/blob/v2.7.0/pigsty.yml) [**配置文件**](/zh/docs/setup/config/)。

提示: 如果您已经了解了如何配置 Pigsty，`configure` 这个步骤是可选的，可以跳过。

```bash
./configure # 不带参数会自动推荐配置，并交互式问询
./configure [-i|--ip <ipaddr>] [-m|--mode <name>]  # 选择首要 IP 地址与配置模板
            [-r|--region <default|china|europe>]   # 选择镜像源区域
            [-n|--non-interactive]                 # 跳过交互式向导
            [-x|--proxy]                           # 将环境变量中的代理配置写入配置文件
```

<details><summary>配置 / configure 过程的样例输出</summary>

```bash
$ ./configure
configure pigsty v2.7.0 begin
[ OK ] region = china
[ OK ] kernel = Linux
[ OK ] machine = x86_64
[ OK ] package = rpm,dnf
[ OK ] vendor = rocky (Rocky Linux)
[ OK ] version = 8 (8.9)
[ OK ] sudo = vagrant ok
[ OK ] ssh = vagrant@127.0.0.1 ok
[WARN] Multiple IP address candidates found:
    (1) 192.168.121.165	    inet 192.168.121.165/24 brd 192.168.121.255 scope global dynamic noprefixroute eth0
    (2) 10.10.10.8	    inet 10.10.10.8/24 brd 10.10.10.255 scope global noprefixroute eth1
[ IN ] INPUT primary_ip address (of current meta node, e.g 10.10.10.10):
=> 10.10.10.8     # 如果有多个可用IP地址，在这里输出当前节点的首要IP地址本身
[ OK ] primary_ip = 10.10.10.8 (from input)
[ OK ] admin = vagrant@10.10.10.8 ok
[ OK ] config = el @ 10.10.10.8 [tiny -> oltp]
[ OK ] configure pigsty done
proceed with ./install.yml
```

</details><br>

* `-m|--mode`： 用于直接指定配置 [**模板**](https://github.com/Vonng/pigsty/tree/v2.7.0/files/pigsty) : (`auto|el|el7|ubuntu|debian|demo|prod|...`)
* `-i|--ip`： 当前主机的首要内网IP地址，用于替换配置文件中的 IP 地址占位符 `10.10.10.10`。
* `-r|--region`： 用于指定上游软件源的区域，加速下载： (`default|china|europe`)
* `-n|--non-interactive`： 直接使用命令行参数提供首要IP地址，跳过交互式向导。
* `-x|--proxy`: 使用当前环境变量配置  [`proxy_env`](/docs/reference/param#proxy_env) 变量（影响 `http_proxy`/`HTTP_PROXY`， `HTTPS_PROXY`， `ALL_PROXY`， `NO_PROXY`）。

如果您的机器网卡绑定了多个 IP 地址，那么需要使用 `-i|--ip <ipaddr>` 显式指定一个当前节点的首要 IP 地址，或在交互式问询中提供。
选用的地址应为静态 IP 地址，请勿使用公网 IP 地址。

配置过程生成的配置文件默认位于：`~/pigsty/pigsty.yml`，您可以在安装前进行检查与修改定制。

**修改默认密码！**


我们强烈建议您在安装前，事先修改配置文件中使用的默认密码与凭据，详情参考 [**安全考量**](/zh/docs/setup/security/#密码)。





----------------

## 安装

使用 [**`install.yml`**](https://github.com/Vonng/pigsty/blob/v2.7.0/install.yml) 剧本，默认在当前节点上完成标准的单节点 Pigsty 安装。

```bash
./install.yml    # 一次性在所有节点上完成安装
```

<details><summary>安装过程的样例输出</summary>

```bash
[vagrant@meta pigsty]$ ./install.yml

PLAY [IDENTITY] ********************************************************************************************************************************

TASK [node_id : get node fact] *****************************************************************************************************************
changed: [10.10.10.12]
changed: [10.10.10.11]
changed: [10.10.10.13]
changed: [10.10.10.10]
...
...
PLAY RECAP **************************************************************************************************************************************************************************
10.10.10.10                : ok=288  changed=215  unreachable=0    failed=0    skipped=64   rescued=0    ignored=0
10.10.10.11                : ok=263  changed=194  unreachable=0    failed=0    skipped=88   rescued=0    ignored=1
10.10.10.12                : ok=263  changed=194  unreachable=0    failed=0    skipped=88   rescued=0    ignored=1
10.10.10.13                : ok=153  changed=121  unreachable=0    failed=0    skipped=53   rescued=0    ignored=1
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=4    rescued=0    ignored=0
```

</details><br>

这是一个 **Ansible** [**剧本**](/zh/docs/setup/playbook)，您可以使用以下参数控制其执行的目标、任务、并传递额外的命令参数：

* `-l`: 限制执行的目标对象
* `-t`: 限制要执行的任务
* `-e`: 传入额外的命令行参数
* `-i`: 指定使用不同于 `pigsty.yml` 的配置文件
* ...

**避免重复执行安装！**


警告： 在已经初始化的环境中再次运行 [**`install.yml`**](https://github.com/Vonng/pigsty/blob/v2.7.0/install.yml) 会重置整个环境，所以请务必小心！

此剧本仅用于初始安装，安装完毕后可以用 `chmod a-x install.yml` 来避免此剧本的误执行。







----------------

## 用户界面

当安装完成后，当前节点会安装有四个 [**核心模块**](/zh/docs/about/module/#核心模块)：[**`PGSQL`**](/zh/docs/pgsql)，[**`INFRA`**](/zh/docs/infra)，[**`NODE`**](/zh/docs/node)，[**`ETCD`**](/zh/docs/etcd)。

本机上的 [**PGSQL**](/zh/docs/pgsql) 模块提供了一个开箱即用的单机 PostgreSQL 数据库实例，默认可以使用以下连接串 [**访问**](/zh/docs/pgsql/svc#单机用户)：

**默认用户连接串**



**dbuser\_dba**

psql postgres://dbuser_dba:DBUser.DBA@10.10.10.10/meta     # DBA / 超级用户（IP直连）

**dbuser\_meta**

psql postgres://dbuser_meta:DBUser.Meta@10.10.10.10/meta   # 业务管理员用户，读/写/DDL变更

**dbuser\_view**

psql postgres://dbuser_view:DBUser.View@pg-meta/meta       # 只读用户（走域名访问）

本机上的 [**INFRA**](/zh/docs/infra) 模块为您提供了监控基础设施，默认使用的域名与端口如下所示：

|      组件      |     端口     |     域名     | 说明               | Demo地址                                     |
|:------------:|:----------:|:----------:|------------------|--------------------------------------------|
|  **Nginx**   | **80/443** | `h.pigsty` | Web 服务总入口，本地YUM源 | [`home.pigsty.cc`](http://home.pigsty.cc)  |
| AlertManager |    9093    | `a.pigsty` | 告警聚合/屏蔽页面        | [`a.pigsty.cc`](http://a.pigsty.cc)        |
| **Grafana**  |  **3000**  | `g.pigsty` | Grafana 监控面板     | [`demo.pigsty.cc`](https://demo.pigsty.cc) |
|  Prometheus  |    9090    | `p.pigsty` | Prometheus 管理界面  | [`p.pigsty.cc`](http://p.pigsty.cc)        |

> Grafana 监控系统（g.pigsty / 3000端口）的默认用户名与密码为：`admin` / `pigsty`

[![pigsty-home.jpg](/img/pigsty/home.jpg)](https://demo.pigsty.cc)

您可以通过 IP地址 + 端口的方式直接访问这些服务。但我们更推荐您使用域名通过 Nginx 80/443 端口代理访问所有组件。
使用域名访问 Pigsty WebUI 时，您需要配置 **DNS** 解析，或者修改本地的 `/etc/hosts` 静态解析文件。

<br>
<details><summary> 如何通过域名访问 Pigsty WebUI ？</summary><br>

客户端可以通过几种不同的办法来使用域名访问：

1. 通过 DNS 服务商解析互联网域名，适用于公网可访问的系统。
2. 通过配置内网 DNS 服务器解析记录实现内网域名解析。
3. 修改本机的 `/etc/hosts` 文件添加静态解析记录。（Windows下为：）

我们建议普通用户使用第三种方式，在使用浏览器访问 Web 系统的机器上，修改 `/etc/hosts` （需要 sudo 权限）或 `C:\Windows\System32\drivers\etc\hosts`（Windows）文件，添加以下的解析记录：

```
<your_public_ip_address>  h.pigsty a.pigsty p.pigsty g.pigsty
```

这里的 IP 地址是安装 Pigsty 服务的 **对外IP地址**。

</details>


<br>
<details><summary> 如何配置服务端使用的域名？</summary><br>

服务器端域名使用 Nginx 进行配置，如果您想要替换默认的域名，在参数 [`infra_portal`](/zh/docs/reference/param#infra_portal) 中填入使用的域名即可。
当您使用 `http://g.pigsty` 访问 Grafana 监控主页时，实际上是通过 Nginx 代理访问了 Grafana 的 WebUI：

```
http://g.pigsty ️-> http://10.10.10.10:80 (nginx) -> http://10.10.10.10:3000 (grafana)
```

</details>


<br>
<details><summary> 如何使用 HTTPS 访问 Pigsty WebUI ？</summary><br>

Pigsty默认使用自动生成的自签名的 CA 证书为 Nginx 启用 SSL，如果您希望使用 HTTPS 访问这些页面，而不弹窗提示"不安全"，通常有三个选择：

* 在您的浏览器或操作系统中信任 Pigsty 自签名的 CA 证书： `files/pki/ca/ca.crt`
* 如果您使用 Chrome，可以在提示不安全的窗口键入 `thisisunsafe` 跳过提示
* 您可以考虑使用 Let's Encrypt 或其他免费的 CA 证书服务，为 Pigsty Nginx 生成正式的 SSL证书。

</details><br>



----------------

## 更多

你可以使用 Pigsty 部署更多的集群，管理更多的节点，例如：

```bash
bin/node-add   pg-test      # 将集群 pg-test 的3个节点纳入 Pigsty 管理
bin/pgsql-add  pg-test      # 初始化一个3节点的 pg-test 高可用PG集群
bin/redis-add  redis-ms     # 初始化 Redis 集群： redis-ms
```

大多数模块都依赖 [**`NODE`**](/zh/docs/node) 模块，请确保节点被 Pigsty 纳管后再加装其他模块。更多细节请参考 [**模块**](/zh/docs/about/module) 详情：

[**`PGSQL`**](/zh/docs/pgsql)，[**`INFRA`**](/zh/docs/infra)，[**`NODE`**](/zh/docs/node)，[**`ETCD`**](/zh/docs/etcd)，[**`MINIO`**](/zh/docs/minio)，[**`REDIS`**](/zh/docs/redis)，[**`MONGO`**](/zh/docs/mongo)，[**`DOCKER`**](/zh/docs/node)，……

<br>
<br>

----------------

<br>
<br>
