概述
早晨起来收到推送,说是有一门 Go 语言项目开发实战 的课程 虽然自己也在清明节假期补了一下语法,重写了一个 nodejs 的项目,现在平稳运行。
看了一下课程的简介,感觉还是很有意思的于是乎买了课程。 课程的规划还是比较合理的,但是大多数就第二部分就劝退了。。环境安装。
踩坑集锦
02 | 环境准备:如何安装和配置一个基本的 Go 开发环境?
官方推荐使用 centOS 8.2 来进行部署,这里需要涉及到 Linux 服务器。尝试了国内腾讯云,因为速度实在太慢放弃。
海外的 vps 性能又不是很好,考虑到后面代码要是频繁修改的话 gui 的编辑器还是靠谱,vim 虽然是神器,
出现网络卡顿自动补全会让人心里难受至极,决定还是本地来吧。
本地解决方案 有两种:
- 虚拟机(还要去下载镜像。。。)
- 手动排雷
要是为了搞明白 决定还是手动排雷一下。
分析所需要环境:
-
家目录下建立 (workspace,bin 文件夹)
-
mkdir -p ~/workspace
-
mkdir -p ~/bin
-
git (相信 macOS 的朋友这里都搞定了,如果没有的话 github搞下配置)
-
protobuf (https://github.com/protocolbuffers/protobuf/releases/download 二进制拿回来) 直接放到 ~/bin 里面
-
Go 环境 (brew install go 无脑安装,应该是 1.16.3)
-
IDE 这里 (全家桶里面的 Goland 不香么, 主要是专注业务)
最后最后 记得 在.bashrc 或者 .zshrc 中配置一下环境变量 !!
export WORKSPACE="$HOME/workspace" # 设置工作目录export PATH=$HOME/bin:$PATH # 将 $HOME/bin 目录加入到 PATH 变量中
# Go envs
export WORKSPACE=$HOME/workspace
export GOROOT=/usr/local/Cellar/go/1.16.3/libexec # GOROOT 设置
export GOPATH=$WORKSPACE/golang # GOPATH 设置
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH # 将 Go 语言自带的和通过 go install 安装的二进制文件加入到 PATH 路径中
export GO111MODULE="on" # 开启 Go moudles 特性
export GOSUMDB=off # 关闭校验 Go 依赖包的哈希值
最后的最后 刷新下配置文件 source ~/.bashrc
或者 source ~/.zshrc
03 | 项目部署:如何快速部署 IAM 系统?
这里是坑的所在,需要三个数据库: MariaDb, mongodb, redis,
看了下文档,里面涉及到建立用户等等 权限管理,因为是本地开发,直接无脑跳过。
为了不污染 macOS 的环境,直接 docker 来处理. MariaDb 换成 MySQL,因为本地正好有而且还有个 phpmyadmin 方便管理
# 建立MySQL容器 记得不要选择latest 版本,会很恶心
docker run --restart always --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6
# 建立phpmyadmin和 数据库的关联
docker run --restart always --name phpmyadmin -p 8888:80 --link mysql:db -d phpmyadmin/phpmyadmin:latest
# redis
docker run --restart always --name redis -p 6379:6379 -d redis
# mongodb
docker run --restart always -p 27017:27017 --name mongo -d mongo
好了至此 三个数据库无脑起来了 数据库管理界面 可以用 localhost:8888 去管理导入了,这里不是这里的核心。
拉下代码
mkdir -p $WORKSPACE/golang/src/github.com/marmotedu
cd $WORKSPACE/golang/src/github.com/marmotedu
git clone --depth=1 https://github.com/marmotedu/iam
然后 在终端配置文件里面加入
# 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"
环境坑的正式开始
初始化 MariaDB 数据库,创建 iam 数据库
- (phpmyadmin 导入)
配置 scripts/install/environment.sh
- ( 里面的 IAM_ROOT 记得换成自己的绝对路径 或者注释掉,因为已经设置过了)
- 下面建立了 对应的 iam-data 文件夹 来存放各种相关文件,方便以后移除或者查询日志
readonly IAM_DATA_DIR=${IAM_DATA_DIR:-/Users/qfdk/workspace/iam-data/data/iam} # iam 各组件数据目录
readonly IAM_INSTALL_DIR=${IAM_INSTALL_DIR:-/Users/qfdk/workspace/iam-data/opt/iam} # iam 安装文件存放目录
readonly IAM_CONFIG_DIR=${IAM_CONFIG_DIR:-/Users/qfdk/workspace/iam-data/etc/iam} # iam 配置文件存放目录
readonly IAM_LOG_DIR=${IAM_LOG_DIR:-/Users/qfdk/workspace/iam-data/var/log/iam} # iam 日志文件存放目录
readonly CA_FILE=${CA_FILE:-/Users/qfdk/workspace/iam-data/${IAM_CONFIG_DIR}/cert/ca.pem} # CA
创建需要的目录
- 参照老师
创建 CA 根证书和密钥
- 安装 cfssl 工具集 (!!! 一定要去官方获取 不要用脚本)
https://github.com/cloudflare/cfssl 拿回来自己编译 扔到 之前的 path 里面 记得刷新 bash 或者 zsh
配置 hosts
- 参照老师
编译 app 我用一个举例子 : iam-apiserver
所有的命令 不要带 sudo
-
安装 iam-apiserver 可执行程序
-
cp _output/platforms/linux/darwin/iam-apiserver ${IAM_INSTALL_DIR}/bin
-
路径里面的 linux 换成 darwin
-
-
生成并安装 iam-apiserver 的配置文件(iam-apiserver.yaml)
-
这里会提示 decalre 的错误问题,
-
解决方案升级 bash https://stackoverflow.com/questions/27002192/bash-declare-a-does-not-work-on-macos
-
配置文件 一定检查路径!!!!
-
-
创建并安装 iam-apiserver systemd unit 文件
- 这里只要看 service 里面都有设么命令就好了
- 建立对应的文件夹
- 启动命令
/Users/qfdk/workspace/iam-data/opt/iam/bin/iam-apiserver
--config=/Users/qfdk/workspace/iam-data/etc/iam/iam-apiserver.yaml
这样指定 APP 指定配置,比较灵活,因为我们不需要服务方式启动,到时候需要什么启动什么。
临时写这么多。。。后面慢慢修改