「这是我参与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
后面是服务的安装和配置,今天没有个人的闲时间了,下个博客说服务的安装和配置