qfdk's Blog

黑科技自留地...

Go 语言项目开发实战 macOS 踩坑集锦

概述

早晨起来收到推送,说是有一门 Go 语言项目开发实战 的课程 虽然自己也在清明节假期补了一下语法,重写了一个 nodejs 的项目,现在平稳运行。
看了一下课程的简介,感觉还是很有意思的于是乎买了课程。 课程的规划还是比较合理的,但是大多数就第二部分就劝退了。。环境安装。

踩坑集锦

02 | 环境准备:如何安装和配置一个基本的 Go 开发环境?

官方推荐使用 centOS 8.2 来进行部署,这里需要涉及到 Linux 服务器。尝试了国内腾讯云,因为速度实在太慢放弃。
海外的 vps 性能又不是很好,考虑到后面代码要是频繁修改的话 gui 的编辑器还是靠谱,vim 虽然是神器,
出现网络卡顿自动补全会让人心里难受至极,决定还是本地来吧。

本地解决方案 有两种:

  1. 虚拟机(还要去下载镜像。。。)
  2. 手动排雷

要是为了搞明白 决定还是手动排雷一下。

分析所需要环境:

  • 家目录下建立 (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)

  • 创建并安装 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 指定配置,比较灵活,因为我们不需要服务方式启动,到时候需要什么启动什么。

临时写这么多。。。后面慢慢修改