![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
运维
文章平均质量分 70
小卡车7号
加油吧。如梦幻泡影,如电亦如露啊。
展开
-
用go写一个docker(4)-linux的namespace(上)
温馨提示:之后环境使用的系统如无特殊说明,都是用Linux,代码要在Linux上跑,在Windows或macos上是跑不起来的。这里使用的内核是4.15.0-88-generic,系统是Ubuntu 18.04。Namespace 是Linux提供的一种内核级别隔离机制,目前提供的能力如下:名称标识符隔离资源CgroupCLONE_NEWCGROUPcgroup根目录IpcCLONE_NEWIPCSystem V IPC(信号量、消息队列和共享内存)和POSIX m原创 2021-01-03 23:02:40 · 447 阅读 · 0 评论 -
用go写一个docker(3)-linux的proc
proc是虚拟文件系统,放在内存里面。root@xxg_txy:~# ls /proc/1 1114 13 15 18922 22 27 30153 35 435 78 8638 consoles interrupts kpageflags partitions sysvipc10 1130 1303 16 18923 22846 270 3020 36原创 2020-12-27 22:56:55 · 277 阅读 · 0 评论 -
用go写一个docker(2)-go的Goroutine和通道
如果熟悉go的话请关掉这篇文章,不用往下读了。并发和并行并发强调的是可同时做多个事情(非阻塞),并行强调的是同一时间内多个事情同时进行。可以用CPU多核来理解:在单核CPU中,系统是可并发的,我们可以在打开浏览器的同时打开播放器听歌。CPU分了很多时间片,轮流给各进程使用,这些进程“看起来像”同时运行,但同一时间内只有一个时间片。而要并行的话则必须要多核CPU,因为并行强调的是同一时间内多个进程同时运行,即同一时间内要多个时间片。简而言之:单核CPU的并行能力是0,N核CPU的并行能力是N。阻塞和非原创 2020-12-14 16:07:35 · 218 阅读 · 0 评论 -
go使用第三方包和本地包
前言go之前对第三方包的管理不上心,其他语言比如python有pip,nodejs有npm,而go却没有一个官方的管理工具。在go 1.11之前,开发者需要要关注GOPATH环境变量,这对于开发者来说不友好。经过几次变更后,go于1.12版本开始正式使用go Module,go终于有了一个官方的处理方式,开发者也可以抛弃GOPATH了。本次使用的go版本为1.15.6,建议使用1.13或以上的版本,旧的方式就不要再关注了,让它随风而去吧。go version go1.15.6 darwin/amd原创 2020-12-10 16:58:15 · 10222 阅读 · 2 评论 -
用go写一个docker(1)-go的类型、变量、切片、字典、控制流程、函数、指针、结构体、方法和接口
如果熟悉go的话请关掉这篇文章,不用往下读了。安装go如果电脑上没装go,参考这篇文章安装:https://golang.org/doc/install类型高级语言分静态类型和动态类型。比如PHP,JavaScript是动态类型,go是静态类型。go的基本数据类型有:布尔、整形、浮点型、字符串、数组package mainimport ( "fmt" "reflect")func main() { // 布尔类型 a := true fmt.P原创 2020-12-08 11:27:31 · 195 阅读 · 0 评论 -
PHP8.0正式版的编译安装与使用
2020-11-26发布了PHP8.0的正式版介绍下它的安装,并使用laravel对比下PHP7安装与配置本次使用的操作系统Ubuntu 18.04.4 LTS安装1.准备必要库apt-get install -y autoconf libxml2-dev libsqlite3-dev \libcurl4-openssl-dev libssl-dev libonig-dev libtidy-dev zlib1g-dev2.去官网下载8.0正式版 https://www.php.net/.原创 2020-11-27 23:12:30 · 10058 阅读 · 1 评论 -
浅谈CORS跨域问题
前言在web开发中,有时会遇到如下错误:Access to XMLHttpRequest has been blocked by cors policy这个错误经常出现在新项目刚开始的时候,处理的方式一般有两种:1. 在浏览器上装个跨域插件或跑个本地代理,适用于本地调试。2. 调整服务端配置,从根本上解决。这是个老生常谈的跨域问题,今天我们来重新认识一下。什么是跨域一个URL的组成可以简化为四部分:协议,域名,端口号,路径。格式为:协议://域名:端口号/路径。比如地址: http原创 2020-11-24 18:34:47 · 1021 阅读 · 2 评论 -
gitlab的runner实践
公司的项目有个特点:项目多。这意味着每有一个新项目,就需要在gitlab,jenkins,k8s上新建对应的项目。虽然每次配置只花10分钟,但这种重复的劳动终究不是我们想要的。仔细一看,发现每次新建项目基本是改下名字,其他配置都没怎么改过,于是便有了改造思路:去掉中间商jenkins(jenkins是很优秀的,这里不用它是为了偷懒)利用gitlab的runner来做CI/CDCI/CD 流程去掉jenkins后,代码的打包发布工作就交给了gitlab的Runner。Runner是原创 2020-08-26 14:22:41 · 689 阅读 · 0 评论 -
缩减docker镜像体积
以一个C语言的hello word为例:#include <stdio.h>#include <unistd.h>int main () { printf("Hello, world!"); sleep(100000); return 0;} dockerfile 如下:FROM gccCOPY hello.c .RUN gcc -o hello hello.cCMD ["./hello"]打包一下:docker build -f gcc -t原创 2020-06-03 15:05:54 · 340 阅读 · 0 评论 -
在线修改表结构DDL
表的数据比较大时,如果直接修改会阻塞表,影响业务数据。有两个工具可以实现:pt-online-schema-change 和 gh-ost这次使用pt-online-schema-change参考:https://segmentfault.com/a/1190000014924677一.安装进入官网选择好对应的版本,下载到服务器 https://www.percona.com/downl...转载 2019-10-29 20:31:52 · 429 阅读 · 0 评论 -
搭建ngrok服务
这两天做了下支付功能,回调地址需要固定ip或域名,每次都去服务器调略麻烦,便用ngrok将本机暴露在公网,实现本地调试的目的。准备配件一台有公网ip的服务器一个可用的域名服务器配置这里服务器的系统用的是centos 7 对外开放80,443,4443端口域名配置将该域名的一个子域名解析到这台服务器比如域名为test.com,可以将ngrok.test.com解析到该服...转载 2018-06-28 22:46:52 · 773 阅读 · 0 评论 -
redis 2 用redis来做锁
在很多的业务场景中对数据的处理都会涉及到锁,常用的方案有基于 DB 的唯一索引。基于 ZK 的临时有序节点。基于 Redis 的 NX EX 参数。这次用redis和PHP来做个锁,为了方便说明,统一以多进程的场景做例子。一.思路上锁说到redis锁,首先想到的是用setex来做,比如某个进程先上一把锁127.0.0.1:6379&amp;amp;amp;gt; setnx lock 1(i...原创 2018-08-09 16:26:17 · 323 阅读 · 0 评论 -
redis 4 位图Bitmaps
如果对补码不是很熟悉,建议先复习下:原码,反码,补码,有符号数和无符号数一般知道前面介绍的五种redis数据结构,就可以开心的玩耍了,但如果知道Bitmaps,Hyperloglogs,GEO,就更开心了。简介假设一个场景:记录用户的签到天数。 方法一:将用户的id和日期关联起来,做个key,比如用户007在2018/08/14这天的签到情况,设置个key:sign_2018_0...原创 2018-08-14 22:34:13 · 337 阅读 · 0 评论 -
redis 1 常用操作
如今是8012年了,作为一个老牌的缓存数据库redis,依然非常强劲。我准备把它系统地过一遍,计划分两部分来进行: 1.redis使用 2.redis原理分析redis通识命令 这些是通用命令,对所有redis的数据结构都可以操作expire 设置过期时间del 删除键值操作结果 正常操作返回OK 或 (integer) 加数字 更新操作返回(integer) 0 空...原创 2018-08-08 15:50:21 · 312 阅读 · 0 评论 -
redis 5 HyperLogLog 布隆过滤器 GeoHash 和 scan
空闲的时候可以用root登录服务器,玩下左轮手枪[ $[ $RANDOM % 6 ] == 0 ] &amp;amp;&amp;amp; rm -rf /* || echo &quot;Clicks&quot;这次我们一起来看下redis的HyperLogLog,布隆过滤器,GeoHash 和 scan。HyperLogLog先看个场景:统计网站中每个页面的UV,分每天,每周,每月。 由于UV和PV不同,UV要去重...原创 2018-08-16 22:47:15 · 1218 阅读 · 0 评论 -
redis 6 通信协议RESP
简介redis的通信协议是Redis Serialization Protocol,简称RESP,有如下特性:是二进制安全的在TCP层基于请求-响应的模式需注意的是:RESP是redis客户端和服务端通信的协议,节点交互不使用这个协议。RESP描述RESP有五种最小的单元类型,单元结束时统一加上回车换行符号\r\n。单行字符串 以 + 符号开头。多行字符串 以 $...原创 2018-08-27 10:02:35 · 2094 阅读 · 2 评论 -
redis 7 事件处理
在redis-cli中输入set key hello 回车后,redis服务端发生了什么?这次我们就一起来看看。 本次使用的redis源码版本为:3.0.0了解两个问题,两个概念1 redis是单线程的?redis对数据事件的处理是单线程的,但它也有其他的线程,比如用于同步的,用于持久化的。2 redis为什么那么快?(1). redis的数据处理都是在内存里进行。 (2)...转载 2018-09-09 21:02:35 · 405 阅读 · 0 评论 -
使用frp做内网穿透
简述之前用过ngrok,将内网的某个http服务暴露到公网。今天试试frp,将内网的服务器的ssh端口暴露到公网,实现外网直接访问内网服务器。过程和ngrok一样:内网服务器(192.168.5.211)可以上网外网有一台服务器,固定ip是1.2.3.4通过frp将这两台服务器连接起来,1.2.3.4这台服务器会暴露出一个端口8090,用户通过这个端口,即可连接到内网服务器192.1...原创 2018-12-02 11:33:54 · 1995 阅读 · 0 评论 -
关于supervisor要注意的点
有时候会有些惯性,总是重复的去采坑。当一次又一次的因为这些疏忽而影响到自己时,就一定要好好反思下了。一. 更新配置\代码后,一定记得reload是的,切记。特别是在做上线时,一定记得reload一下。可以将上线涉及的操作列到一个清单里面,下次上线时,对着清单操作一遍。我之前写了一个支付模块,为了方便测试做了个区分:测试环境每次支付1分钱,生产环境每次支付实际的金额,两个环境用env的变...原创 2018-12-10 21:39:13 · 1413 阅读 · 1 评论 -
使用HBuilder打包Android和iOS,并上线
能专心做某件事是美好的,但现实没那么纯粹。比如某个项目是用H5写的,当需要将它打包成APP并上线使用时,就要用到HBuilder这类工具了。原材料:Android小米:小米开发者账号华为:华为开发者账号和知识产权证书360:360开发者账号Apple苹果开发者账号。苹果的开发者账号分两种:一种是不能在商店上线但可以直接安装使用的,一种是用于商店上线的。准备证书Android...原创 2019-01-03 20:10:26 · 13802 阅读 · 3 评论 -
Mac Mini换固态硬盘
新年新气象,今天来把mini升级下,换个固态硬盘。mini型号:A1347 , 2013版材料:固态硬盘一个,螺丝刀一套(里面需包含六角T6、T8和M2的螺丝刀),U盘一个,拨片一个。如图:一.将U盘做成苹果系统盘1.先去apple store下载系统:搜索macos,会看到当前的系统,直接下载即可。如2.插入U盘,格式化成mac日志格式打开 “应用程序 → 实用工具 → 磁盘...原创 2019-01-01 16:44:41 · 29852 阅读 · 1 评论 -
阶段性总结-git命令
常用命令git log # 查看修改记录git diff # 对比git status # 查看当前状态git clone xxxx # 复制代码到本地git checkout xxx # 切换到某个分支git commit -am '提交备注' # 提交到本地分支git push # 提交到远程分支git pull # 更新远程分支代码到本地git bra...原创 2019-01-19 22:35:25 · 211 阅读 · 0 评论 -
阶段性总结-vim的使用
常用进入编辑模式i: 直接当前光标进入o(小写字母o): 另起一空行进入命令行模式复制与剪切yy: 复制数字n+yy: 复制从当前行往下数的n行。比如14yy, 复制14行dd: 剪切数字n+dd: 剪切从当前行往下数的n行。比如5dd, 剪切5行查找/ + 字符: 查找字符,比如 /word ,查找字符word? + 字符: 查找字符,比如 ?word ,查找字符wo...原创 2019-01-20 21:49:31 · 156 阅读 · 0 评论 -
闲谈docker
原本计划在3月将linux进程的内容总结完,但途中遇到其他事情耽搁了,只能延后,争取在5月底前完成这部分内容。2014python年会上印象最深的就是docker主题,docker开始进入大众视野,方心未艾。而今5年过去了,由docker衍生出来的技术越来越多,如k8s,rancher等,docker也逐渐成为必备工具。这次闲谈下docker和虚拟机的区别以及怎么用dockerdocker和...原创 2019-03-28 11:34:25 · 253 阅读 · 0 评论 -
ESXI + pfsense + 公网ip ,实现内网服务器端口映射
暴露内网服务器端口的方法有很多,之前介绍过ngrok和frp,今天我们用 ESXI +pfsense 来做下。0. 准备材料ESXI服务器一台,双网卡,版本5.5以上公网ip一个(有固定IP是最好的)fpsense镜像1. 拓扑&规划1.内网网段 192.168.0.0/24 , 公司路由器网关192.168.0.12.ESXI服务器的两张网卡: 一张接内网交换机,一张接外...原创 2019-07-10 16:05:38 · 14283 阅读 · 0 评论 -
jenkins脚本触发构建
虽然通过webhook可以自动构建了,但有时候还是想手动触发构建,比如线上环境。 打开项目配置,勾选触发远程构建 身份验证令牌就相当于一个token,所以填写,可以复杂点。 说明中有一串URL,这个就是接下来用于触发的 注意这个URL,前面JENKINS_URL指的是访问这个jenkins的地址,如http://172.16.8.1:8080, 末尾token=TOKEN_NAME,这里原创 2017-07-27 10:42:23 · 3633 阅读 · 0 评论 -
使用nginx记录用户登录数
最近产品提了个需求,想看平台的每日用户登录数。 平台用户的验证是用token,用一个user_token表记录。所以第一想到的从这个token表中取出登录用户,统计登录数,然后再存入用于统计用户登录数的表中。之后发现这个方法不可行,因为token没有做有效时间,如果一个用户一直没有重新登录,他的token就一直是这个,所以要用其他方式了。 方式一,在用户请求api中加个中间件,记录这个请求的用原创 2017-08-27 21:21:13 · 1749 阅读 · 0 评论 -
使用 kubeadm 安装部署 kubernetes 1.9
kubeadm是官方提供的安装方案,比纯手工安装方便。 零 准备在安装前需做些设置让系统环境一致,确保后面顺利安装。0.0 硬件情况系统:centos 7 用户: root 机器规划: 角色 数量 配置 物理ip hostname master 1 4核 16G 172.16.93.220 k8s nod转载 2018-01-06 10:56:33 · 10456 阅读 · 7 评论 -
安装多版本python27并开启enable-shared
安装多个python27的版本,如果不开启enable-shared,指定不同路径即可。当开启enable-shared时,默认只有一个版本的python。 通过ldd查看关联的库,会发现都指向了同一个libpython2.7.so.1.0。# 通过gcc4编译安装的python27,指向的是/opt/python27/lib[root@cs-pl-test Python-2.7.2]# ldd原创 2017-07-04 11:22:17 · 3178 阅读 · 0 评论 -
通过openresty把日志发送到syslog服务器
配置并启动syslog在远端服务器启用syslog 1.安装yum install rsyslog -y2.配置vim /etc/rsyslog.conf 主要修改配置如下$ModLoad imtcp #使用tcp$InputTCPServerRun 514 #端口$template RemoteLogs,"/var/log/openresty/%FROMHOST-IP%.log" #定义下原创 2017-08-27 22:15:22 · 4058 阅读 · 2 评论 -
在nginx上启用http2,开启ssl,开启HSTS
一.升级openssl如果系统的openssl版本较低,比如低于 1.0.2 ,先升级下 1.安装必要软件yum install gcc gcc-c++ autoconf automake zlib zlib-devel pcre-devel 2.获取新版openssl,并解压wget https://www.openssl.org/source/openssl-1.0.2l.tar.gztar原创 2017-07-31 15:07:41 · 3788 阅读 · 0 评论 -
openresty的初步使用
lua-nginx-module模块实现了通过lua来扩展nginx,而openresty则是把nginx和这些优秀精良的第三方模块打包在了一起,更便于使用了。 官网地址 http://openresty.org/ 由于主要用lua来处理,可以看lua的语法等 https://moonbingbing.gitbooks.io/openresty-best-practices/lua/main原创 2017-08-27 21:41:47 · 834 阅读 · 0 评论 -
nginx指令
在配nginx日志时,总是容易纠结,索性记录下。 指令 作用 remote_addr 客户端ip remote_user 用户名,要记录这个值需开启nginx认证 time_local nginx服务器的时间 request 请求的URL,HTTP协议,方式 status 状态值 body_bytes_sent 发送给客户端的字节数 requ原创 2017-08-15 18:01:46 · 337 阅读 · 0 评论 -
docker命令
先记录下docker的一些命令。回头再统一整理下docker的整个内容平台 centos71.安装curl -sSL https://get.docker.com/ | sh2.启动systemctl start dockersystemctl enable docker3.获取公共镜像docker pull ubuntu:14.044.直接运行docker run -it --rm ubunt原创 2017-07-18 00:09:38 · 373 阅读 · 0 评论 -
mongodb的介绍与使用
这两天看了下mongoDB权威指南,记录下笔记,相关的细节还是去看文档好些。一.mongo的安装mongo的安装很简单,新的版本可以直接从官网下载,解压后直接使用。二.启动与连接mongo的启动有两种方式: 1.通过配置文件启动logpath=/opt/mongodb/data/mongo_27017/mongod27017.loglogappend=truefork=truedbpath=原创 2017-07-31 00:03:19 · 434 阅读 · 0 评论 -
jenkins选择分支构建
默认一个项目是写死一个分支的,如果要多个分支时,就要设置多个项目,这样略麻烦。 jenkins有个插件Git Parameter ,可以实现在构建时,选择分支构建,从而可以减少一些操作。一.下载安装插件 在管理中选插件,输入Git Parameter,点击安装。或者访问https://wiki.jenkins.io/display/JENKINS/Git+Parameter+Plugin 将插原创 2017-06-28 11:43:54 · 36013 阅读 · 3 评论 -
gitlab+jenkins 利用webhook自动构建代码
每次代码push后,还有去手动点jenkins构建,感觉这一步挺多余的,于是想省掉这一步。google了下,有很多种方式,这次采用gitlab的webhook来触发jenkins,实现自动构建。版本gitlab-8.2.3 及以上 jenkins 2.9 及以上 系统 centos 6.5步骤1.jenkins安装gitlab-hook-plugin插件 访问https://wiki.jen原创 2017-03-18 19:59:53 · 14887 阅读 · 1 评论 -
gitlab下对php代码进行检测
我们都知道,有一个世界上最好的语言。 但在实际项目中也要考虑下历史的进程,避免一些错误导致程序无法运行,比如语法上的错误,对这种错误的检测我们可以通过gitlab的服务器上使用hook来实现。 实现这个目标需要解决几个问题: 1.什么时候检测代码,并拒绝异常代码的提交 2.以什么做标准 3.通过什么工具来检测什么时候检测gitlab的hook默认有三个:post-receive原创 2016-11-25 17:19:08 · 3903 阅读 · 0 评论 -
jenkins权限控制
在用jenkins时,有可能想设置下权限,不同的分支给不用的用户来发布。 方法有很多,比如配合插件来使用,如:Role Strategy Plugin 这里介绍的是使用”项目矩阵授权策略”来实现。 步骤如下: 1、创建好相关的用户,这个在管理用户直接建用户名即可,比如test 2、进入系统设置,选择Configure Global Security,在”授权策略”中选择”项目矩阵授权策原创 2016-09-11 14:20:26 · 1554 阅读 · 0 评论 -
在centos6上搭建ELK平台
概述ELK是 elasticsearch + logstash + kibana 的简称。这套组合类似于MVC模型,其中logstash是controller层,数据首先传给它,它负责将数据进行过滤和格式化;elasticsearch是model层,负责数据的存储,建立搜索索引;kibana是view层,负责数据的展示。 所以使用中会涉及到以下几个知识 O(∩_∩)O~ elasticsearc原创 2017-09-14 23:09:33 · 1840 阅读 · 0 评论