Go 语言项目开发实战[2] 部署 IAM 系统(数据库,证书等准备工作)

883 阅读2分钟

「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

写在前面

第一种部署方式是按部就班装工具写配置文件,第二种是一键部署。一键部署之后试试,因为系统不一样所以也没细看。

按部就班的来,主要是两大步。先配数据库,再配服务。数据库这里需要 MariaDB,Redis,MongoDB,服务就是 iam-apiserver,iam-authz-server,iam-pump,iamctl,man手册。

把 iam 代码拉下来

$ git clone --depth=1 https://github.com/marmotedu/iam

教程里比我这里要规范,专门开了个新目录放全部的学习资料和代码。之后为了访问方便设置一下环境变量(在 $HOME/.bashrc 里)。

$ tee -a $HOME/.bashrc << 'EOF'
# Alias for quick access
export GOWORK = "$WORKSPACE/golang/src"
export IAM_ROOT = "$GOWORK/github.com/marmotedu/iam"
alias mm = "cd $GOWORK/github.com/marmotedu"
alias i = "cd $GOWORK/github.com/marmotedu/iam"
EOF
$ bash

不想把环境变量搞乱的可以不设置。这么设置之后命令行敲 mm 就是切换到学习目录,i 就是切换到源码目录。

安装配置之前需要执行一个导出 going 用户密码的操作,比如说密码是 iam59!z$

export LINUX_PASSWORD='iam59!z$'

这个用户是学习源码专门创建的用户,之后可以删除。

安装和配置数据库

MariaDB

IAM 里面 REST 资源的定义信息存储在关系型数据库里,关系型数据库常见的有两个:MySQL 和 MariaDB,后者开源且完全兼容前者,那我就积极拥抱开源数据库吧。

$ cd $IAM_ROOT
$ ./scripts/install/mariadb.sh iam::mariadb::install

安装时给数据库 root 用户设置之前相同的密码,比如说密码是 iam59!z$

测试 MariaDB 是否安装成功

$ mysql -h 127.0.0.1 -uroot -p'iam59!z$'
MariaDB [(none)]>

Redis

为了保证数据的一致性,使用 Redis 的发布订阅功能进行消息通知。安装时设置一样的密码,比如说密码是 iam59!z$

$ cd $IAM_ROOT
$ ./scripts/install/redis.sh iam::redis::install

测试 Redis 是否安装成功

$ redis-cli -h 127.0.0.1 -p 6379 -a 'iam59!z$'

MongoDB

这一步和教程系统不一样,所以参考这里

Install MongoDB Community Edition on Ubuntu

开启外网访问权限和登陆验证

$ sudo sed -i '/bindIp/{s/127.0.0.1/0.0.0.0/}' /etc/mongod.conf
$ sudo sed -i '/^#security/a\security:\n  authorization: enabled' /etc/mongod.conf

启动 MongoDB

$ sudo systemctl start mongod
$ sudo systemctl enable mongod
$ sudo systemctl status mongod

测试 MongoDB 是否安装成功

$ mongo --quiet "mongodb://127.0.0.1:27017"
>

创建 MongoDB 账号

$ mongo --quiet "mongodb://127.0.0.1:27017"
> use admin
switched to db admin
> db.createUser({user:"root",pwd:"iam59!z$",roles:["root"]})
Successfully added user: { "user" : "root", "roles" : [ "root" ] }
> db.auth("root", "iam59!z$")
1

这是 MongoDB 的管理员账户,还需要一个普通账户 iam

$ mongo --quiet mongodb://root:'iam59!z$'@127.0.0.1:27017/iam_analytics?authSource=admin 
> use iam_analytics
switched to db iam_analytics
> db.createUser({user:"iam",pwd:"iam59!z$",roles:["dbOwner"]})
Successfully added user: { "user" : "iam", "roles" : [ "dbOwner" ] }
> db.auth("iam", "iam59!z$")
1

后续主要是通过 iam 这个普通账户登录 MongoDB。

安装配置 IAM 系统

准备工作

1. 初始化 MariaDB 数据库,创建 iam 数据库

登录数据库并且创建 iam 用户

$ cd $IAM_ROOT
$ mysql -h127.0.0.1 -P3306 -uroot -p'iam59!z$'
MariaDB [(none)]> grant all on iam.* TO iam@127.0.0.1 identified by 'iam59!z$';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.000 sec)

用 iam 用户登录 MariaDB,执行 iam.sql 文件,创建 iam 数据库

$ mysql -h127.0.0.1 -P3306 -uiam -p'iam59!z$'
MariaDB [(none)]> source configs/iam.sql;
MariaDB [iam]> show databases;
+--------------------+
| Database           |
+--------------------+
| iam                |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)
2. 配置 scripts/install/environment.sh

我直接用这个脚本里的默认值了,出问题再说。

3. 创建需要的目录
$ cd $IAM_ROOT
$ source scripts/install/environment.sh
$ sudo mkdir -p ${IAM_DATA_DIR}/{iam-apiserver,iam-authz-server,iam-pump} # 创建 Systemd WorkingDirectory 目录
$ sudo mkdir -p ${IAM_INSTALL_DIR}/bin #创建 IAM 系统安装目录
$ sudo mkdir -p ${IAM_CONFIG_DIR}/cert # 创建 IAM 系统配置文件存放目录
$ sudo mkdir -p ${IAM_LOG_DIR} # 创建 IAM 日志文件存放目录
4. 创建 CA 根证书和密钥

IAM 系统各组件需要使用 x509 证书对通信进行加密和认证。CA 根证书用 CloudFlare 的 PKI 工具集 cfssl 来创建。首先安装 cfssl 这个工具。

$ cd $IAM_ROOT
$ ./scripts/install/install.sh iam::install::install_cfssl

创建配置文件

$ cd $IAM_ROOT
$ tee ca-config.json << EOF
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "iam": {
        "usages": [
          "signing",
          "key encipherment",
          "server auth",
          "client auth"
        ],
        "expiry": "876000h"
      }
    }
  }
}
EOF

创建证书签名请求文件

$ cd $IAM_ROOT
$ tee ca-csr.json << EOF
{
  "CN": "iam-ca",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "marmotedu",
      "OU": "iam"
    }
  ],
  "ca": {
    "expiry": "876000h"
  }
}
EOF

创建 CA 证书和私钥

$ cd $IAM_ROOT
$ source scripts/install/environment.sh
$ cfssl gencert -initca ca-csr.json | cfssljson -bare ca
$ ls ca*
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem
$ sudo mv ca* ${IAM_CONFIG_DIR}/cert # 需要将证书文件拷贝到指定文件夹下(分发证书),方便各组件引用

创建完成后通过 cfssl certinfo 查看 cert 和 csr 信息

$ cfssl certinfo -cert ${IAM_CONFIG_DIR}/cert/ca.pem # 查看 cert(证书信息)
$ cfssl certinfo -csr ${IAM_CONFIG_DIR}/cert/ca.csr # 查看 CSR(证书签名请求)信息
5. 配置 hosts

就像有的时候 GitHub 访问不到了我们改 hosts 文件,是一样一样的。

$ sudo tee -a /etc/hosts <<EOF
127.0.0.1 iam.api.marmotedu.com
127.0.0.1 iam.authz.marmotedu.com
EOF

后面是服务的安装和配置,今天没有个人的闲时间了,下个博客说服务的安装和配置