envsubst命令, 并实现docker下nginx动态配置
使用1234# 添加环境变量export myname=pangxieke# 查看env | grep myname
使用
123echo $myname# 注意单引号包裹的时候代表是字符串echo "$myname"
通过envsubst用环境变量替换掉了字符串$myname
1echo '$myname' | envsubst
进阶使用新建一个测试文件echo '我的名字=$myname' > one
将one文件的内容输入到envsubst envsubst '$myname' < one
将内容输出到two文件中envsubst '$myname' < one > two, 查看cat two
常见应用新建.env文件
1echo "PORT=9998" > .env
创建中间文件, source.template 方便查看并将defalut.conf置空
cp defalut.conf source.template 注意这里中间文 ...
Golang 源码剖析,log 标准库
日志输出12018/09/28 20:03:08 EDDYCJY Blog...
构成[日期]<空格>[时分秒]<空格>[内容]<\n>
源码剖析Logger1234567type Logger struct { mu sync.Mutex prefix string flag int out io.Writer buf []byte}
mu:互斥锁,用于确保原子的写入
prefix:每行需写入的日志前缀内容
flag:设置日志辅助信息(时间、文件名、行号)的写入。可选如下标识位:
123456789const ( Ldate = 1 << iota // value: 1 Ltime // value: 2 Lmicroseconds // value: 4 Llongfile // value: 8 Lshortfile ...
gitbook介绍及使用
gitbook 介绍gitbook网站是一个简单的个人在线书籍网站,在这里可以把自己的文档整理成书籍发布出来,便于阅读。gitbook网站:https://legacy.gitbook.com/
可以使用gitbook工具,来制作精美的电子书,然后部署到自己的网站上(或在github托管)。
本文主要介绍gitbook工具
基本操作1234567891011# Installnpm install -g gitbook-cli# initgitbook init# servegitbook serve# buildgitbook build
部署通过docker部署一个nginx
123456789web: image: nginx:1.20 privileged: true volumes: - ./conf.d:/etc/nginx/conf.d - ./www/_book:/data/www/_book - /data/logs/nginx:/data/logs/nginx ports: - "80:80"
将gitbook中文档 ...
阿里云k8s+log-pilot日志收集
阿里云k8s+log-pilot日志收集
部署Elasticsearch集群
登录阿里云Elasticsearch控制台。
在Elasticsearch实例页面的实例列表中,单击实例ID/名称链接。
单击左侧导航栏的ES集群配置,进入ES集群配置页面。在YML文件配置区域框右侧单击修改配置,弹出YAML文件配置页面。
自动创建索引设置为允许自动创建索引,选中该操作会重启实例,请确认后操作。然后单击确认。
需要开启自动创建索引功能,版本最好选择6.3 或者6.7版本。
测试Elasticsearch集群测试集群
1curl -XGET "http://name:passwd@es-cn-*******.public.elasticsearch.aliyuncs.com:9200/_cluster/health?pretty"
查看index
1curl 'name:passwd@es-cn-******.public.elasticsearch.aliyuncs.com:9200/_cat/indices?v'
部署Log- ...
Swagger介绍及使用
swagger是什么无论是前端调用后端,还是后端调用后端,都期望有一个好的接口文档。
但是这个接口文档对于程序员来说,就跟注释一样,经常会抱怨别人写的代码没有写注释,然而自己写起代码起来,最讨厌的,也是写注释。所以仅仅只通过强制来规范大家是不够的,随着时间推移,版本迭代,接口文档往往很容易就跟不上代码了。
你只需要按照它的规范去定义接口及接口相关的信息。再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,生成多种语言的客户端和服务端的代码,以及在线接口调试页面等等。
这样,如果按照新的开发模式,在开发新版本或者迭代版本的时候,只需要更新Swagger描述文件,就可以自动生成接口文档和客户端服务端代码,做到调用端代码、服务端代码以及接口文档的一致性。
Openapi规范因为 Swagger 定义是基于 OpenAPI 规范的。
OpenAPI 规范(OAS)为 RESTful API 定义了一个与语言无关的标准接口,允许人和计算机发现和理解服务的功能,而无需通过访问源代码、文档或开发者工具。
OpenAPI 定义大致如下:
123456789101112 ...
解决x509:certificate signed by unknown authority证书验证问题
错误信息在go项目中发送https请求时,就会提示x509:certificate signed by unknown authority
原因我们在构建 docker 镜像时一般使用的是 linux(centos或者ubuntu等待) 系统,默认是不带 ca-certificates 根证书的,导致无法识别外部 https 携带的数字证书。
所以在我们项目中发送https请求时,就会提示x509:certificate signed by unknown authority
为了解决证书验证的问题,我们要在构建 docker 镜像的时候把 ca-certificates 根证书给装上,这样就能识别来自外部 https 的数字证书了。
12FROM alpine:3.8RUN apk --no-cache add ca-certificates
以utuntu基础镜像为例,apt-get是utuntu的下载命令在编辑 Dockerfile 的时候加入以下命令即可:
12RUN apt-get -qq update \ && apt-get -qq install ...
Elasticsearch数据迁移
公司测试的elasticsearch是直接在ECS上安装的,现在需要迁移服务器,准备通过docker安装一个elasticsearch,并将数据迁移过去。
查询资料,有多种迁移方式。
通过Oss快照
通过阿里云Logstash的管道配置功能实现
通过reindex方式
本文通过reindex方式,将旧数据迁移到新的es中。
Docker启动elasticsearch12345678910#!/bin/bashdocker stop elasticsearchdocker rm elasticsearchdocker run --name elasticsearch -d \ -p 9200:9200 \ -e "discovery.type=single-node" \ -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ -v /data/services/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticse ...
Elasticsearch状态red解决
将公司的Elasticsearch的磁盘缩小了一些,节省点成本。但是操作完成后,发现status为red。参考了相关文章,终于解决了问题。现在将参考文章及解决方法分享如下。
这里说的red,是指es集群的状态,一共有三种,green、red、yellow。具体含义:
问题:ES集群Red集群节点是否都存在、查看集群状态。
1curl -XGET 'http://localhost:9200/_cluster/health?pretty'
响应
1234567891011121314151617{ "cluster_name" : "es_idc", "status" : "red", "timed_out" : false, "number_of_nodes" : 2, "number_of_data_nodes" : 2, "active_primary_shards" : 10 ...
Docker容器内用户与宿主机用户不匹配问题
打包了一个lnmp包,里面包含了Nginx和php服务。设置nginx和php用户为www-data,同时将代码挂载到容器下。使用时,发现代码基本能正常运行,但生成缓存及图片上传时,都提示文件夹权限错误。因为使用Thinkphp,框架运行时会生成缓存文件,图片上传时也需要生成存放路径。
总结来说,容器中php能够读取代码,但是写的权限不够。这很奇怪。
而且在不同服务器,表现不同。有一台服务器能够运行,另外一个却出现这个问题。
进入容器中查看,php和nginx中配置运行用户都是www-data,理论上应该是没有问题的。搜索了相关问题,仔细研究,才发现了问题所在。
发现问题代码目录,所属用户www-data,同时设置php配置文件中用户使用www-data
正常时候能够运行,但是生成的runtime缓存文件,用户却不是www-data
缓存文件的所属用户为33,而用户组都是tape,为啥会是这样的。
产生原因产生上述问题的根源是,容器中用户和宿主机用户ID不同。
宿主机用户的ID查看宿主机用户www-data的id,可以看到所属用户及组
1id www-data
为uid=1000 ...
阿里云远程连接mysql失败
在阿里云的服务器上使用docker安装了MySQL, 然后远程访问总是不通。 查询了很久,排查思路如下:
检查mysql是否启动,服务是否正常
检查本机3306端口是否处于监听状态
检查阿里云控制台是否开启了安全限制, 限制3306和23端口
检查mysql用户能否在远程进行登录
mysql 的 bind-address 设置为 127.0.0.1
mysql是否启动这个比较简单, ps -ef | grep mysql 如果能看到对应的进程就是没有问题的
如果使用docker安装,需要docker ps 查看对应的状态
检查本机3306端口是否处于监听状态可以通过netstat -tlanp | grep 3306 来看mysql是否在监听。
主要如果使用docker安装,要查看docker 3306端口所对应开发是否是指定IP,还是0.0.0.0
如果本地端口监听状态 telnet 127.0.0.1 3306 看看是否成功, 如果成功。则说明本地服务没有问题。
远程 telnet 公网ip 3306 则 在远程 telnet 公网ip 3306 来判断一下是否成功, 如果成 ...