1 前言
最近在学习go,想找个好一点的开源项目学习下。在极客时间里看到了一个专栏项目『Go 语言项目开发实战』,讲的很详细。看了下部署,是在Linux服务器上的。但要学习的话,最好还是能在goland本地debug。
在Linux服务器上部署成功的情况下,尝试在本地启动。大部分不会像文章中那样,一个个重新生成。基于已经在Linux生成好的配置文件,放到本地使用
2 安装和配置
2.1 iam-apiserver
2.1.1 先在项目根目录位置新建一个文件:iam-apiserver.yaml,添加下面的内容
# Copyright 2020 Lingfei Kong <colin404@foxmail.com>. All rights reserved.
# Use of this source code is governed by a MIT style
# license that can be found in the LICENSE file.
# iam-apiserver 全配置
# RESTful 服务配置
server:
mode: debug # server mode: release, debug, test,默认 release
healthz: true # 是否开启健康检查,如果开启会安装 /healthz 路由,默认 true
middlewares: recovery,logger,secure,nocache,cors,dump # 加载的 gin 中间件列表,多个中间件,逗号(,)隔开
max-ping-count: 3 # http 服务启动后,自检尝试次数,默认 3
# GRPC 服务配置
grpc:
bind-address: 0.0.0.0 # grpc 安全模式的 IP 地址,默认 0.0.0.0
bind-port: 8081 # grpc 安全模式的端口号,默认 8081
# HTTP 配置
insecure:
bind-address: 127.0.0.1 # 绑定的不安全 IP 地址,设置为 0.0.0.0 表示使用全部网络接口,默认为 127.0.0.1
bind-port: 8080 # 提供非安全认证的监听端口,默认为 8080
# HTTPS 配置
secure:
bind-address: 0.0.0.0 # HTTPS 安全模式的 IP 地址,默认为 0.0.0.0
bind-port: 8443 # 使用 HTTPS 安全模式的端口号,设置为 0 表示不启用 HTTPS,默认为 8443
tls:
#cert-dir: .iam/cert # TLS 证书所在的目录,默认值为 /var/run/iam
#pair-name: iam # TLS 私钥对名称,默认 iam
cert-key:
# cert-file: /etc/iam/cert/iam-apiserver.pem # 包含 x509 证书的文件路径,用 HTTPS 认证
# private-key-file: /etc/iam/cert/iam-apiserver-key.pem # TLS 私钥
cert-file: ./cert/iam-apiserver.pem # 包含 x509 证书的文件路径,用 HTTPS 认证
private-key-file: ./cert/iam-apiserver-key.pem # TLS 私钥
# MySQL 数据库相关配置
mysql:
host: 127.0.0.1:3306 # MySQL 机器 ip 和端口,默认 127.0.0.1:3306
# username: iam # MySQL 用户名(建议授权最小权限集)
username: root # MySQL 用户名(建议授权最小权限集)
# password: iam59!z$ # MySQL 用户密码
password: 123456 # MySQL 用户密码
database: iam # iam 系统所用的数据库名
max-idle-connections: 100 # MySQL 最大空闲连接数,默认 100
max-open-connections: 100 # MySQL 最大打开的连接数,默认 100
max-connection-life-time: 10s # 空闲连接最大存活时间,默认 10s
log-level: 4 # GORM log level, 1: silent, 2:error, 3:warn, 4:info
# Redis 配置
redis:
host: 127.0.0.1 # redis 地址,默认 127.0.0.1:6379
port: 6379 # redis 端口,默认 6379
# password: iam59!z$ # redis 密码
#addrs:
#master-name: # redis 集群 master 名称
#username: # redis 登录用户名
#database: # redis 数据库
#optimisation-max-idle: # redis 连接池中的最大空闲连接数
#optimisation-max-active: # 最大活跃连接数
#timeout: # 连接 redis 时的超时时间
#enable-cluster: # 是否开启集群模式
#use-ssl: # 是否启用 TLS
#ssl-insecure-skip-verify: # 当连接 redis 时允许使用自签名证书
# JWT 配置
jwt:
realm: JWT # jwt 标识
key: dfVpOK8LZeJLZHYmHdb1VdyRrACKpqoo # 服务端密钥
timeout: 24h # token 过期时间(小时)
max-refresh: 24h # token 更新时间(小时)
log:
name: apiserver # Logger的名字
development: true # 是否是开发模式。如果是开发模式,会对DPanicLevel进行堆栈跟踪。
level: debug # 日志级别,优先级从低到高依次为:debug, info, warn, error, dpanic, panic, fatal。
format: console # 支持的日志输出格式,目前支持console和json两种。console其实就是text格式。
enable-color: true # 是否开启颜色输出,true:是,false:否
disable-caller: false # 是否开启 caller,如果开启会在日志中显示调用日志所在的文件、函数和行号
disable-stacktrace: false # 是否再panic及以上级别禁止打印堆栈信息
# output-paths: /var/log/iam/iam-apiserver.log,stdout # 支持输出到多个输出,逗号分开。支持输出到标准输出(stdout)和文件。
output-paths: ./log/iam-apiserver.log,stdout # 支持输出到多个输出,逗号分开。支持输出到标准输出(stdout)和文件。
# error-output-paths: /var/log/iam/iam-apiserver.error.log # zap内部(非业务)错误日志输出路径,多个输出,逗号分开
error-output-paths: ./log/iam-apiserver.error.log # zap内部(非业务)错误日志输出路径,多个输出,逗号分开
feature:
enable-metrics: true # 开启 metrics, router: /metrics
profiling: true # 开启性能分析, 可以通过 <host>:<port>/debug/pprof/地址查看程序栈、线程等系统信息,默认值为 true
2.1.1 https配置
可以按照文章的方式去生成对应的密钥文件,想简单点的话,可以直接用我生成好的两个:iam-apiserver.pem和iam-apiserver-key.pem,我在项目根目录创建了一个文件夹:cert,放这两个文件
iam-apiserver.pem
-----BEGIN CERTIFICATE-----
MIIEHTCCAwWgAwIBAgIUYlIkcgUgY/uUP6P2c7YaN4mdz5IwDQYJKoZIhvcNAQEL
BQAwZDELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB0JlaUppbmcxEDAOBgNVBAcTB0Jl
aUppbmcxEjAQBgNVBAoTCW1hcm1vdGVkdTEMMAoGA1UECxMDaWFtMQ8wDQYDVQQD
EwZpYW0tY2EwIBcNMjQwMTEzMDEwNDAwWhgPMjEyMzEyMjAwMTA0MDBaMHUxCzAJ
BgNVBAYTAkNOMRAwDgYDVQQIEwdCZWlKaW5nMRAwDgYDVQQHEwdCZWlKaW5nMRIw
EAYDVQQKEwltYXJtb3RlZHUxFjAUBgNVBAsTDWlhbS1hcGlzZXJ2ZXIxFjAUBgNV
BAMTDWlhbS1hcGlzZXJ2ZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQDb2Kw+7oUKe5ZWSimOpXILk44YD5LGgXRFZJXN3XVa+Np42VFumBOqfAw/wXHO
oxN2neqVvHS3Ym9Q1p/u/oDNLlZsO2gtZgCB2ToG0vbYCCfSBd0smyB2DFEE7+83
CazydofPSXaP9WKSPa+A7zAYXB9I3+tIUmB5Lv5A3cNL8k19Cs6/crp2Td6Wo5KR
Y8+MSLGJOQ0xYGLhPw7Z0zVxH6f9biPJZdHzokU9WDDVZydXktlmgV3f+P9Vwi64
p6xAVV8URMbI7wO+OZIQbhQ1FqOlSuQor0fhOxy5wrmU7lLHIFA4+hT7RcpXJt97
MQuvUvdBM2U7csywmYth+VN5AgMBAAGjgbMwgbAwDgYDVR0PAQH/BAQDAgWgMB0G
A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1Ud
DgQWBBTcIRCbvmnrxp0D7eUzsJmuDM1QKjAfBgNVHSMEGDAWgBRf4PDj7jrmekNa
IlweYdU9o1JMrTAxBgNVHREEKjAogglsb2NhbGhvc3SCFWlhbS5hcGkubWFybW90
ZWR1LmNvbYcEfwAAATANBgkqhkiG9w0BAQsFAAOCAQEAGvrwCcX4dw4GjRPzAIH2
EmWM+4JTBS1GWZh3KYkuLsO7MgpJWxckY03crpePIM87IGWEZ/niNWOu7XLKrPjw
m7TD9HkkVT6TyDu/PoKo9fwxBXIPw5vbv9reziPADxQBq4esjZsWgoNjMp3LV1UA
mDS6mrXqVDM9N8BTFS4R+JSfx1bExLPNBbk2JUMispvugcRVtN1k1PR7cDQHDMeU
OyJfkvL8XslzWHjP89MPzKFDFkkLcz08im9bBhQQDanbkW7i57YNRqUC+CzAb4av
vWuZ5R0ZyHKofw/k3FbdpSSA4nzmIb4jHdEhk+vbTRA+5XGgoX+5/cqCm9yMNgfA
FQ==
-----END CERTIFICATE-----
iam-apiserver-key.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA29isPu6FCnuWVkopjqVyC5OOGA+SxoF0RWSVzd11WvjaeNlR
bpgTqnwMP8FxzqMTdp3qlbx0t2JvUNaf7v6AzS5WbDtoLWYAgdk6BtL22Agn0gXd
LJsgdgxRBO/vNwms8naHz0l2j/Vikj2vgO8wGFwfSN/rSFJgeS7+QN3DS/JNfQrO
v3K6dk3elqOSkWPPjEixiTkNMWBi4T8O2dM1cR+n/W4jyWXR86JFPVgw1WcnV5LZ
ZoFd3/j/VcIuuKesQFVfFETGyO8DvjmSEG4UNRajpUrkKK9H4TscucK5lO5SxyBQ
OPoU+0XKVybfezELr1L3QTNlO3LMsJmLYflTeQIDAQABAoIBAD9ndP3NYpdMX2ZR
izy1oHeQPbnYu/b+HN9qi/3Mce0jujaCTob72ygfEJVOoBj9VT6veplmua6t9/az
f3q48cK7K3eZhokZUuogESkorMJPT9S1lj0oHCuPj8pBvJb99mATKUXyJPyNw7jz
i2s/EHrmDqvA0KWSBHrOv8tLaei71x5UUWorBSg6/FF5fmyrEplP7i7lmwQPt9Bl
xG0JS9pJDNTVEauolBQh6AzzMCJjX5GQFrHEHIyg+rTcpnG9WShl5qXeRJZDzujc
5zh+GWjpWwTUUiqpOSMBrDn1vl8iEpl+0cQOZpvxz8egTkG0Hyi8hDSdAsylMoq6
5R7MGTUCgYEA6tbiuxMj58dGg83Ucbqg0blSzdwgQhDzUP3O57TSsRYtNZdbJLEK
eDSkctVFgpJOYrgx53O3AuzI+r6XhiDfOG/8+2qhgQWZxgS9NmvufroXCKYspyeg
UzHlCVCcr+8annmWrz6fqlHqI25gHNAZxtCFX32F6u1R7gKJqE79LYsCgYEA76fw
QDojMUl1WojNLeS0ng+awcOAfU5N1qhng5mtDw3aviq5gLQuHcaoYdsPe64W6b+N
Cq6jbMAowPBnqGJr5HASZ89w4bfJtLAu85AqAzq78HVT6gu53Cc0mtTJAuCW6GLr
FvopS9EM776OzBFisufh1CgNG7CN919Bco1564sCgYA/HOMwXbN/ngmwcIfQzNRd
qM29L5SnzMBnmt6ZXPpmx0v9JCFFmiLzLUqo5fJZZhKU62XWCz47FgHpiYFVdc4n
78jwlLa04xlxo2JqltUwz7hTBb3oanjnAvjH6RdDHSJtRsYdcNoePweK4CYKeE8F
JJNDl4t/GKq1KY9vYVMfgwKBgQDHOfPWYL46zddZ8NmoqjSgJVbAd1aMVJkOtqZ+
1zTvi9PpPLlDTgX8SNZXqvT/GyT/IncMh0tiL4hxhCiX6WHJ4ITcea1cZx2uMLyH
S7QxRRVReyfMK/1RD+KCSBvmYW/yNbE7Q7EqztmTP/WTnWxQT8YDSVxERYxvNWfB
4+yTqwKBgE1XjjVEwXSsdfKkCSBIc5c/5dG28cb0I6/qzincKmeoDXK2L/lMe4uM
sw9gF9IiN35XBohZ/dz34pLv6gk2XlJmlWx6Sb5rjgVzwOSCcUwPw7+qFCm7LRSq
OwZmUo5MoG+K6DQ0Ae5WaUg8UPukvy2ydHaR1OAve+Bc4nEKZPdq
-----END RSA PRIVATE KEY-----
如果你和我一样把这两个文件都放在了cert目录,那么下面两个配置就不需要调整,否则就需要在iam-apiserver.yaml里换成自己对应的目录
2.1.2 mysql、redis
apiserver需要用到mysql、redis,因此启动服务前需要先将对应用户名、密码换成自己的,并启动
记得把项目的configs/iam.sql在mysql执行下,生成对应的数据库和表
2.1.3 日志文件
提前建好两个日志文件,对应iam-apiserver.yaml配置在:output-paths和error-output-paths,替换成自己的日志路径
如果跟我一样是在根目录建了一个目录:log,也不需要调整,
2.1.4 启动
apiserver服务的main方法在:iam/cmd/iam-apiserver/apiserver.go中
启动成功如下所示
测试下