ubuntu 18 vnc 连接

2018/11/14 posted in  linux

mac mojave增加锁屏快捷键

mac的锁屏方式一只是鼠标移动到边角进行锁屏。一只没有一个类似Windows上的Win+L的快捷键来一键锁屏。今天Mojave第二次更新的时候一不小心看到Mac菜单多了一个选项

所以后续锁屏可以直接选择快捷键 ALT+CMD+Q

2018/11/8 posted in  linux

MWeb 网站生成到Gitee发布为个人网站

一直希望有一个直接在客户端上更新文档,然后直接提交到个人网站上面进行发布,省去中间的操作~没有中间商赚差价~,所以一直说世界是懒人改变的~懒癌病犯了~

一直在用MWeb,确实是一个很好的Markdown MAC客户端,平常都是用MWeb在写日志,之前一直没有用MWeb发布blog,只是用来做平时工作的记录,在把自己的MWEB更新了3.0版本之后,还是抽出时间来整理一下自己的功能。

Mweb作者写过一篇放在github上面的文档,多少年前也在用github做自己的网页,但是现在手头有自己的服务器,还是做一个直接发布到自己服务器上面的方法,平时使用gitee比较多(因为可以私有库),所以就整理一个在MWeb上面写blog,然后生成静态网站,最后自动部署的小工具。

整体流程如下: ~后面补个流程图

  1. MWEB写blog,同步目录到Website里面,(我使用的是双目录的方式,平时日志还是卸载资源库里面,然后需要发布的blog将目录添加到网站目录中去,这样方便以后维护,不要的把目录去掉就可以了)
  2. 发布网站
  3. 将发布的网站文件同步到Gitee。
  4. 使用webhook将gitee上面的文件同步到阿里云发布服务器上
  5. 发布服务器获取后自动同步更新

先说一下配置优势:

  1. 文章在gitee上实时归档,并且可以不同方式撤回,免去了丢失的风险,同时将生成的MD文件也进行一个归档,这样会比当前很多的网盘要好,方便找回某个时间点的备份。 ~吐个小嘈,有时候MWeb还是会出现目录删除之后里面的文档都删除了的问题,那叫一个郁闷~
  2. 方便,一件发布到网站。在MWeb里面更新Blog绝对是一种享受。不用再像以前要多做一次发布

具体过程:

1. MWEB中构建静态网站

在MWeb中创建一个静态网站的分类,构建好网站的目录,然后将需要发布到网站的文章添加网站目录。 (具体操作MWeb官方blog上都有,可以直接参考,就不在这里废话了)

2. 设置网站发布目录

设置网站发布位置,MWEB默认的位置比较难找,主要是还担心添加了git之后出问题,所以就把网站发布位置切换了,具体可以看下面

我将目录移动到自己的目录了

3. 在Gitee创建项目

在Gitee上创建新的项目,项目创建之后Gitee也有默认的告诉你的基本命令。创建完成之后就可以将本地目录绑定到项目上了,建议多加一层目录同步,否则会比较麻烦

4. 绑定本地仓库

命令行到本地目录

git init
git add .
git commit -m "first commit"
git remote add origin https://gitee.com/********/ITBoxBlog.git
git push -u origin master

新的提交使用如下命令

git add --ignore-removal .
git commit -m "我的注释"
git push -u origin master

这样就把本地同步到gitee上了。

5. 配置远程发布环境

由于MWeb直接生成的静态化页面,所以只需要在远端建立目录,pull代码,然后使用Nginx发布就可以了。

linux上创建文件夹,执行 git clone
由于gitee需要密码访问,所以最好的方式是记录下来密码,这样方便后续的自动化脚本执行。直接修改.git/config文件

ubuntu@VM-7-212-ubuntu:~/kernel-code/kernel-netfilter-sample-code$ vim .git/config

##修改成如下

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = https://github.com/Miss-you/kernel-netfilter-sample-code.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
##主要是后面这两行,如果不想保存,则删除即可
[credential]
    helper = store

##保存

这样后续就会记住当前的用户名和密码。下次git pull的时候可以直接使用

6. 配置Nginx

Nginx中增加如下配置

server {
    listen 80;
    server_name blog.pengjunjie.com;

    location / {
        alias /opt/itboxblog/ITBoxBlog/;
        index index.html;
    }
}

增加DNS配置到当前服务器

启动后查看一下Nginx配置是否成功,网站是否成功启动

7. 配置WebHookit自动发布

前面的步骤,中间push和pull都是手动的。所以先解决发布服务器在检测到Push之后自动化发布的问题。

现在基本上所有的Git都用上了webhook, 这里采用国内的一个webhookit组件。 这个组件非常的轻量,不用搞很多复杂的配置,安装即用

# 1. install webhookit
pip install webhookit

# 2. initial a webhookit config file
webhookit_config > /home/hustcc/webhook-configs/config4hustcc.py

# 3. update config4hustcc.py with your own config and save
vim config4hustcc.py

# 4. run webhookit http server
webhookit -c config4hustcc.py

这样启动是带着客户端启动,建议使用后台启动方式

nohup webhookit -c config4itbox.py &

如果需要停止进程可以使用ps -ef|grep config来找到相应的进程进行kill

安装完成后需要使用到系统的18340端口,所以需要在安全组里面把18340端口给打开

配置好之后在gitee上配置相对应的webhook

注意这个地方一定要配置http://121.41.8.92:18340/webhookit 带webhooit的子目录,如果没有配置会找不到相应的方法。

前面配置http://121.41.8.92:18340/ 一直返回405找不到原因,翻出来源码看到了如下一段代码

application = tornado.web.Application([
    (r'/', IndexPageHandler),
    (r'/webhookit', WebhookitHandler),
    (r'/ws', WSHandler)
])

可以看到tornado解析了如下三个目录,如果没有的话会走/,会走到默认的get方法里面,但是webhooks发的是POST请求,所以肯定会报405方法没有定义。而真正的webhookit定义的webhook在WebhookitHandler里面,所以需要带上/webhookit目录。

配置完成后执行测试如果看到如下结果就是成功,可以在服务器上看到相应的任务进程

最后需要修改配置

config4itbox.py文件

# -*- coding: utf-8 -*-
'''
Created on Nov-04-18 13:07:25

@author: hustcc/webhookit
'''


# This means:
# When get a webhook request from `repo_name` on branch `branch_name`,
# will exec SCRIPT on servers config in the array.
WEBHOOKIT_CONFIGURE = {
    # a web hook request can trigger multiple servers.
    'ITBoxBlog/master': [{
        # if exec shell on local server, keep empty.
        'HOST': '',  # will exec shell on which server.
        'PORT': '',  # ssh port, default is 22.
        'USER': '',  # linux user name
        'PWD': '',  # user password or private key.

        # The webhook shell script path.
        'SCRIPT': '/opt/itboxblog/webhookit/exec_shell_hook.sh'
    }]
}

完成之后修改这个exec_shell_hook.sh文件

#!/bin/bash
echo `date +"%Y-%m-%d %H:%M:%S"` begin >> update.log

cd /opt/itboxblog/ITBoxBlog/
git pull

完成后这样每次webhookie会自动催发这段脚本进行Git pull更新

访问这个链接地址可以查看webhookit状态 http://......:18340

8. 配置MWeb生成后自动提交

在MWEB中提供了发布脚本的功能,可以写好脚本后发布使用,相应的配置如下

注意这里的发布脚本执行前的动作可以选上生成网站,这样就只用点发布命令就可以进行全部发布了。

在网站上选择发布脚本命令就会在终端里自动执行这一段代码

参考文章

https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/index.html

git设置用户名密码

2018/11/5 posted in  linux

centos 6 防火墙开启端口无效问题

CentOS安装完成后防火墙一个奇怪的问题。

昨天尝试redis在centos的安装,配置文件都检查了,外网就是不能访问

#添加端口开启
$ iptables -A INPUT -p tcp --dport 6379 -j ACCEPT 
#保存配置
$ /etc/rc.d/init.d/iptables save
#重启防火墙
$ /etc/init.d/iptables restart
试了好久才想到是不是端口问题,关闭防火墙试了试

$ service iptables stop
就行了。。。就行了。。。就行了。。。就行了。。。

百度了好多,上面的配置是没有问题的,只好打开配置文件

/etc/sysconfig/iptables
看看

昨天尝试redis在centos的安装,配置文件都检查了,外网就是不能访问

#添加端口开启
$ iptables -A INPUT -p tcp --dport 6379 -j ACCEPT 
#保存配置
$ /etc/rc.d/init.d/iptables save
#重启防火墙
$ /etc/init.d/iptables restart
试了好久才想到是不是端口问题,关闭防火墙试了试

$ service iptables stop
就行了。。。

只好打开配置文件 /etc/sysconfig/iptables 看看

 # Generated by iptables-save v1.4.7 on Fri Jan 26 09:49:55 2018
  *filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4:496] 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
COMMIT
# Completed on Fri Jan 26 09:49:55 2018

我是用FlashFXP下载到本地看得,原谅我个Windows渣。。。。。

重点来了,仔细看了一下

-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT 
这一句前后都有一句

-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
然后百度了下,这两条的意思是

在INPUT表和FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条host prohibited的消息给被拒绝的主机。
So,我配置的6379被拒绝了,把前面的那一条删除掉,变成这个样

# Generated by iptables-save v1.4.7 on Fri Jan 26 09:49:55 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4:496] 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT  
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
COMMIT
# Completed on Fri Jan 26 09:49:55 2018

保存,放回centos覆盖

重启iptables服务,重启后生效

$ /etc/init.d/iptables restart

外网可以访问了!!!!!!

2018/11/2 posted in  linux

CentOS6.8下使用yum安装mysql,并远程登陆mysql

2016年12月10日 17:04:39 JeffCoding 阅读数:9983

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jeffleo/article/details/53559712

第1步、查看CentOS下是否已安装mysql

输入命令 :yum list installed | grep mysql

[image:70C5E65E-4041-4C45-A908-5F235FB584CE-1481-0000046D7665FC28/20161210164346267.jpeg]

第2步、删除已安装mysql

输入命令:yum -y remove mysql

[image:A84C4792-A508-47A4-95AC-1648170A5424-1481-0000046D76392F96/20161210164523785.jpeg]

[image:365D0A46-D47F-4671-8260-74417C8E582C-1481-0000046D76074E2D/20161210164541231.jpeg]
看到complete就说明成功了

[image:4860F875-6BA9-4FFF-AACB-6EC41E07C02D-1481-0000046D75D88A75/20161210164554794.jpeg]

第3步、查看yum库中的mysql(非必须)

输入命令:yum list | grep mysql

[image:176165CB-042F-4DBF-A64C-24EB5A16895F-1481-0000046D75AD2A75/20161210164753655.jpeg]

第4步、从yum库中的安装mysql

输入命令: yum -y install mysql mysql-server mysql-devel

[image:43B7D2B3-8CCD-44B6-89D1-3E3164A30273-1481-0000046D757A47EF/20161210164845453.jpeg]

第5步、验证是否安装成功

输入命令:rpm -qi mysql-server

[image:755D395B-1F64-46C0-BD4D-0994805B9494-1481-0000046D754BE2A1/20161210165003541.jpeg]

第6步、启动MySql服务

输入命令:service mysqld start

[image:B2D122B1-3CEA-430D-B8E1-3E7A8DF91B5F-1481-0000046D75144082/20161210165320174.jpeg]

第7步、进入MySql

输入命令:mysql -u root

[image:79900F49-249C-4F9A-8512-9FF97D49EFE4-1481-0000046D74DDBCFF/20161210165401908.jpeg]
如果出现ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ 错误,可能是服务未开启,也可能是/var/lib/mysql的访问权限问题。
如果是服务未开启:service mysqld start
如果是访问权限问题:chown -R openscanner:openscanner /var/lib/mysql

第8步、修改密码

mysql > use mysql;
mysql > update user set password=password(‘123456‘) where user=‘root‘;

[image:B71BD043-21CC-4674-969E-24083FF9F0AA-1481-0000046D74ACA201/20161210165648862.jpeg]

第9步、用新密码登陆

mysql -u root -p

第10步、开放远程登录权限

输入命令:GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘你的密码’ WITH GRANT OPTION;
FLUSH PRIVILEGES;

[image:4E583013-A163-4C98-A1AA-839A2524CEC2-1481-0000046D7472EA80/20161210165859818.jpeg]

第11步、开放3306端口

输入命令:vim /etc/sysconfig/iptables
添加:-A INPUT -p tcp -m state –state NEW -m tcp –dport 3306 -j ACCEPT
然后重启 防火墙:service iptables restart

[image:89C6A257-9F89-452A-8865-51B2F2B7EB51-1481-0000046D743F3DC9/20161210170321481.jpeg]

第12步、设置开机启动(非必须)

chkconfig mysqld on

2018/11/2 posted in  linux

ubuntu18 下配置shadowsocksr

现在到了没有shadowsocks 不能使用电脑的情况,很多东西依赖于外面的资源,所有整理新的ubuntu的时候,花了比较多的时间整理,现在这里做个总结

ubuntu下面使用shadowsocks只有几种方法,shadowsocks命令,shadowssock-qt5以及国人写的electron-ssr. 由于现在国内多使用混淆了,前面两种支持都比较不好,必须要安插件才可以,而且各种麻烦,最好的方式还是选择electron-ssr

安装

安装比较简单,直接

在这里下载electron的ubuntu下载包 https://github.com/erguotou520/electron-ssr/releases/

然后在ubuntu下安装

sudo dpkg -i electron-ssr_0.2.4_amd64.deb

安装完成后二维码扫描既可以配置服务器。

在ubuntu 18下默认只安装了python3.6,但是electron需要使用python2.7,不安装不会报错,但是也不会连接上。所以需要安装python2 sudo apt-get install python

完成之后需要更新一下PAC文件,这样才能有效的上网。

安装是发现的几个问题

  1. electron-ssr中有通用设置,其中包含PAC、本地监听和Http代理三个端口,可以设置相应的端口号,这三个也是ssr最重要的部分
  2. 在firefox配置的时候,可以使用SwitchyOmega来进行配置,也可以直接使用firefox本身的配置来,firefox的配置使用socks5协议,连接127.0.0.1:1080来进行。 这种模式实际上没有发挥出来ssr的优势
  3. chrome可以使用Proxy配置来进行,在设置框中搜索Proxy可以进行配置,有三种设置模式Automatic、Manual、Disabled这三种方式。其中Manul是和firefox一样的配置方式,Automatic实际是使用PAC模式。PAC模式配置http://127.0.0.1:2333/proxy.pac。同样可以通过这个链接访问这个PAC文件。这个PAC文件实际上就是配置的electron-ssr中的pac文件,文件的位置在/home/william/.config/electron-ssr/pac.txt 中,实际上更新的也是这样文件,安装release下的pac文件是有问题的,需要手动去下载更新一下这个文件才能使用。

bug

electron-ssr的源码可以参考 github https://github.com/erguotou520/electron-ssr, 直接安装到ubuntu下面之后,通过chrome配置autoproxy是没有办法实现pac上网的,其中bug不得而知,可以看看这个ISSUEhttps://github.com/erguotou520/electron-ssr/issues/212,按照这个帖子换一个PAC文件就可以了。

换PAC文件是下载之后上传到~/.config/electron-ssr/pac.txt文件就可以了。注意换完之后需要重启一下electron-ssr进行重新加载,不然不会生效,访问的时候通过链接http://127.0.0.1:2333/proxy.pac就可以看到pac文件更新了,完成后设置chrome下面的autoproxy即可

2018/10/31 posted in  linux

成为DevOps/SRE工程师有多难?看看这份必备技能清单

原创: 杨雷 译 高效开发运维 高效开发运维

微信号 DevOpsGeek

功能介绍 InfoQ旗下开发运维和云计算领域的垂直公众号。常规运维,亦或是崛起的DevOps,以及云计算技术的动态,探讨如何IT交付实现价值。服务于广大运维工作者,为您献上技术知识的支持。

作者 | Aymen El Amri译者 | 杨雷好长的技能清单!

这个列表并非详尽无遗,只是列举了技术基础、必须知道的技能和一些随机的想法。可以用它们作为一个清单来评估你自己或其他人,或者为下一次面试 DevOps/SRE(Site Reliability Engineers,网站可靠性工程师)工作做准备。补充下,这个清单是比较个人的想法。

准备好看这一份清单了吗?

  • 首先,一定要了解文化要点的重要性:15 点 DevOps 检查表(https://medium.com/devopslinks/the-15-point-devops-check-list-8cd2afb4a448)可以获得更多信息。

  • 应该掌握 *nix 系统并且很好地理解 Linux 发行版的工作原理。

  • 为产品设置选择一个操作系统。不需要掌握每一个操作系统,这会让你的工作陷入困境,选择其中一个并掌握它。

  • 能轻松使用终端,可能有一些 GUI 来管理服务器,但是无论如何,必须热爱终端,它更快、更安全,坦白说,一旦掌握了用起来会更容易。

  • 如何获取 CPU/ 系统信息(cat /proc/version,/proc/cpuinfo,uptime,等。)

  • cron 作业如何运作。在特定日期 / 时间 / 月设置 cron 作业。

  • 了解在机器上运行的操作系统是什么(cat /etc/lsb-release)

  • 了解不同的 *nix 操作系统之间的区别,以及了解在机器上运行的操作系统(例如 cat /etc/lsb-release)

  • shell 之间的区别:sh/dash/bash/ash/zsh

  • 如何设置和取消设置 ENV 变量。导出的 ENV 变量是临时的,如何导出永久的变量?

  • 什么是 shell 配置文件:〜/.bashrc,.bash_profile,.environment .. 如何为程序初始化文件“添加”设置?

  • 了解 Vim,其配置(.vimrc)及其一些基本提示是必须的。

  • 日志如何在 *nix 系统中运行,什么是日志记录级别以及如何使用日志管理工具(rsyslog,logstash,fluentd,logwatch,awslogs ..)

  • swapping 如何工作。swappiness 是什么。(swapon -s,/proc/sys/vm/swappiness,sysctl vm.swappiness ..)

  • 能轻松使用脚本语言。Bash 是必须了解的(其他脚本语言也是非常有用的,如 Python,Perl ..)。

  • 掌握有用的命令,例如进程监控命令(ps,top,htop,atop ..),系统性能命令(nmon,iostat,sar,vmstat..)和网络故障排除和分析(nmap,tcpdump,ping,traceroute,airmon,airodump ..)。

  • 你的备份策略是什么?如何测试备份的可靠性?

  • 你知道 ext4,ntfs,fat?知道联合文件系统(Union FS)吗?

  • 如何在系统上查看 / 设置网络配置?

  • 如何在具有不同子网的计算机上设置静态 / 动态 IP 地址?(提示:CIDR)

  • 使用网络数据包分析来分析和了解网络的工作原理:tcpdump,Wireshark ..

  • 你熟悉 OSI 模型和 TCP/IP 模型的规范吗?TCP 和 UDP 有什么区别?你知道 vxlan 吗?

  • 如何设置防火墙(iptables,至少知道 ufw):设置规则,列出规则,路由流量,阻止协议 / 端口 ..

  • 如何查看 / 设置 / 备份路由器设置?

  • DNS 如何工作?如何设置 DNS 服务器(Bind,Unbound,PowerDNS,Dnsmasq ..)?递归(recursive)和权威(authoritative)DNS 有什么区别?如何排除 DNS 故障(nslookup,dig ..)

  • 熟悉 DNS 和 A,AAAA,C,CNAME,TXT 记录

  • 当你在浏览器中点击 google.com 时会发生什么?从浏览器的缓存、本地 DNS 缓存、本地网络配置(hosts 文件)、路由、DNS、网络、Web 协议中,缓存系统到 Web 服务器(如果深入分析,最基本的问题也很难回答)。

  • 熟悉 CDN 提供商(例如 Akamai 等)

  • 熟悉 SSL/TLS 的工作原理以及数字证书的工作原理(https)

  • 了解 SSL 证书(需要加密)

  • 熟悉更安全的协议和工具:TLS,STARTTLS,SCP,SSH,SFTP,FTPS ..

  • 了解 PPTP,OpenVPN,L2TP/IPSec 之间的区别

  • 学习为域设置记录集(可以使用 Route53 或 CloudFlare 等托管云服务)

  • SSH 如何工作,如何调试它,如何生成 ssh 密钥以及无密码登录到其他计算机什么是 init 系统?你知道 Systemd(自 15.04 以来由 Ubuntu 使用),Upstart(由 Ubuntu 开发),SysV ..

  • 用任何软件的源代码编译它(gcc,make 和其他相关内容)

  • 如何通过终端用不同的格式压缩 / 解压缩文件(主要是:tar/tar.gz)

  • 如何设置 Web 服务器(Apache,Nginx ..)

  • 学习使用“awk,sed,sort,uniq”操作 Nginx/Apache 日志文件

  • Nginx 和 Apache 有什么区别?什么时候使用 Nginx?什么时候使用 Apache?在同一个 Web 应用程序中,何时以及如何同时使用它们?

  • 如何设置反向代理(Nginx ..)

  • 如何设置缓存服务器(Squid,Nginx,Varnish ..)

  • 如何设置负载均衡器(HAproxy,Nginx ..)

  • 如何为您的微服务建立 API 网关(Ambassador,Kong,Traefik,Nginx ..)

  • 熟悉 Systemd 以及如何使用 systemctl 和 journalctl 等命令分析和管理服务

  • 熟悉 OAuth、SAML、Auth0 集成

  • 熟悉 RESTful API,Webhooks,GraphQL,gRPC

  • 确保 ES 集群安全(XPack(商业),OpenSource:ReadOnlyREST,Search Guard)

  • 使用 snapshot API 或 esdump 进行 ES 备份(快照和增量)(注意:需要 nodejs/npm)

  • 使用 DB 备份

  • 学习 Python(pip + setup.py)和 BASH。是否开始使用 Golang 作为脚本语言?尝试一下吧。

  • 发展云计算技能。从选择云基础架构提供商开始:Amazon Web Services,Google Cloud Platform,Digitalocean,Microsoft Azure。或者使用 OpenStack 创建自己的私有云。

  • staging 服务器怎么样?单元测试的测试策略是什么?端到端?真的需要 staging 服务器吗?Google 下“staging servers must die”。

  • 阅读有关 PaaS/Iaas/Saas/CaaS/FaaS/DaaS 和无服务器架构的信息

  • 了解如何通过 CLI 中的 Cloud Shell,或你的程序中的 Cloud SDK,来使用和配置云资源

  • 了解如何使用至少一个配置管理和远程执行工具(Ansible,Puppet,SaltStack,Chef 等)。您的选择应基于以下标准:语法,性能,模板语言,推拉模型,性能,架构,与其他工具的集成,可伸缩性,可用性等等。

  • 用于 image 构建的 Packer

  • 将 Jenkins 集成到 CI/CD 中

  • 设置 Consul(用于服务发现)

  • 开始研究“基础架构即代码”(infrastructure as code),以及基础架构配置自动化工具,如 Terraform 和 Packer

  • 开始研究容器和 Docker。容器是底层架构(cgroups 和 namespaces),它是如何工作的?

  • 开始熟悉基本的 Docker 命令(logs/inspect/top/ps/rm)。另外得研究 docker hub(push/pull image)

  • 开始研究容器编排工具:Docker Swarm,Kubernetes,Mesosphere DC/OS,AWS ECS

  • 阅读有关无状态和有状态应用程序的知识

  • 学习为您的应用程序构建小型的 docker image(alpine 比较合适)。仅安装所需的包就够了。

  • 了解默认运行服务的最常用端口号(如:SSH(22),Web(80),HTTP/S(443)等)

  • 从分布式角度学习网络(在容器世界中建立网络)。利用分布式系统中的 8 个谬论,让自己轻松应对。

  • 了解 L4/L7 负载均衡器。

  • 了解如何确保代理服务器和反向代理服务器的安全(Nginx,Traefik,Ambassador ..),并了解它们的网络系统是如何工作的。

  • 熟悉帮助创建可分发和可移植开发环境的工具(例如:Vagrant 和 Docker)。

  • 部署应用程序时,管理私密信息。Hashicorp Vault 会帮助你。

  • 了解 AWS SQS,Google PubSub 或其它替代方案。

  • 熟悉 Kafka,AWS Kinesis 或其它替代方案。

  • 了解 AWS RDS,大多数时候 Ops 发现很容易将普通任务委派给服务提供商以避免额外的工作,但这会带来一些费用。

  • 如果你在使用 Kubernetes,那么了解它的所有组件和工作。

  • 学习如何首先处理 K8s 内置功能,然后学习 Helm/Istio。

  • 了解监控的方式和内容(从操作系统和应用程序的角度来看)。

  • 一旦到了合适的阶段,接着会需要追踪(Tracing)来帮助理解和挖掘,并且应用程序需要直接支持它

  • 如果您正在处理(大)数据工程相关应用程序,那么得熟悉 Hadoop,HBase,Zookeeper,Spark 以及如何设置相关集群

  • 学习如何根据应用需求设置和调整 Redis,如何添加身份验证。

  • 了解应用程序的性质:CPU 密集型,内存密集型,I/O 密集型,然后了解如何相应地进行处理。

  • 学习根据需要在不同类型的数据库之间进行选择:SQL,NoSQL,TSDB,图形数据库 ……

  • 学习管理 IAM 角色 / 权限以及如何管理不同用户的密钥(AWS IAM,GCP IAM ..)。

  • 如果你喜欢分享并帮助其他人解决遇到过的问题,请将代码发布到 GitHub。

  • 学习对基础架构和应用程序进行基准测试以填补空白。

  • 不要直接去执行。先可视化最终目标、画图、与开发人员详细讨论、毫不犹豫地提问、让问题彻底变得愚蠢。

  • 不时做小型演示或 PoC 以便更好地理解。

  • 你熟悉 IDE(Sublime Text,Atom,Eclipse ..)吗?

  • 深入了解 DB(MySQL 或任何其它你喜欢的数据库)。

  • 了解 Redis/Memcache 以及类似工具。

  • 了解微服务架构的优缺点,并开始构建类似的架构。

  • 了解如何配置和使用持续集成和持续交付工具,如 Jenkins,Travis CI,Buildbot,GoCd。将这些工具与其它工具(如 Selenium,构建工具,配置管理软件,Docker,云供应商的 SDK 等)集成是非常有帮助的。

  • 学习分布式版本控制系统 Git 及其基本命令(pull/push/commit/clone/branch/merge/logs 等)。了解 git 工作流程。你知道如何将 Git 存储库恢复到以前的提交吗?

  • 如何使用 SSH 密钥。尝试使用 Github,Bitbucket 或 Gitlab 等来配置对 repo/account 的无密码访问。

  • 熟悉内核版本的混乱以及如何修补它们。

  • 了解如何生成校验(md5,SHA ..)以验证任何文件的完整性。

  • 了解单体(Monolithic)和微服务(Microservices)架构之间的区别。

  • 如何实现零宕机部署?制定回滚、自修复、自动扩展的策略是什么?

  • 了解可扩展性和高度分布式系统,如何让它们一直保持运行状态?

  • 熟悉 API 和服务:RESTfull,RESTful-like,API 网关,Lambda 函数,serverless 计算,SOA,SOAP,JMS,CRUD ...

  • 如何确保基础架构、网络和运行的应用程序的安全?

  • 你知道什么是 ChatOps 吗?是否尝试过使用一个已知框架? Hubot,Lita,Cog?

  • 了解如何设置、配置和使用某些监控系统(Nagios,Zabix,Sensu,Prometheus ..)

  • 无论你做什么都“记录下来”,无论多么粗糙,做吧。以后你会感谢自己的。

  • 制作小的代码脚本以方便使用,记下命令或片段(通过 StackOverflow,Github Gists 或其它在线记事板),它会帮助你得到想要的东西。

  • 让 Google,StackExchange,Quora 和其它专业论坛成为你的朋友。

  • 读,读,读。在 Twitter/StackOverflow 上提问。

  • 与同一领域的研究员交谈并讨论问题。通过社区学习。

  • 不要试图解决所有问题。永远记住一件事:没有人是一座孤岛。你不能做、学习、实现一切。要了解对于手头的任务最重要的是什么。

  • 阅读 DevOps 词汇表(请 Google 它)

  • 关注开源项目(Kubernetes/Docker 等)或者让你感到兴奋的东西。

  • 关注来自社区的志同道合的人,并了解最新的科技趋势。

  • 尝试搭建良好的开发实践以及坚实的架构。

  • 了解如何在生产级别进行扩展。

  • 了解如何在生产服务器中实时调试和跟踪运行的应用程序。

  • 关注一些合适的科技公司的技术博客(我们关注了:Google/Uber/Quora/Github/Netflix)。这是可以直接从专家那里学习的地方,并有机会看到他们解决任何问题的方法。

  • 浏览资讯聚合类网站,如 Reddit,hackernews,medium 等。

  • 关注志同道合的开发人员和技术公司。 (我总是阅读文章和观看谈话 / 会议,事后剖析(post-mortems)是我最喜欢的内容。我也关注一些 github 库看看我使用的技术发生了什么。)

  • 阅读各种与技术相关的博客并订阅 DevOps Newsletters。

  • 了解开源以及如何为开源项目做出贡献。

  • 如果系统出现问题,您应该能够进行事后剖析。详细记录出现了什么问题,以及如何防止它再次发生。

  • 尝试学习 StackOverflow 的专家如何解决问题。永远记住,方法是不断变化的,不像基础知识总是保持不变。

  • 读书。

  • 最后这点也很重要...... 不要假设任何事情,永远不要把现实视为理所当然,总是去尝试并享受旅程。

如果你拥有以上大部分技能,则可以确保你具备 DevOps、SRE 和系统工程知识的先决条件。

你无法一次性学习所有这些,但是具备这样一个思维模式是主要的。 即使去熟悉所有这些也肯定需要时间,但俗话说旅程很有趣。 你会失败很多次,并从错误中吸取教训,不要重蹈覆辙。

永远记住,我们都是学生。我们通过碰撞和试验来学习。不要羞于失败,因为这就是学习的方式。

原文链接:

https://hackernoon.com/the-must-know-checklist-for-devops-site-reliability-engineers-update-8ba44dbc824

2018/10/20 posted in  linux

macbook 24小时桌面

2018/10/17 posted in  linux

unknown locale: UTF-8解决方法

在试有gitinspector的时候,安装这个包的时候,遇到了这个问题——万恶的编码问题。

Traceback (most recent call last):
File "gitinspector.py", line 25, in
localization.init()
File "/Users/fdhuang/learing/git-analytics/gitinspector-0.3.2/gitinspector/localization.py", line 43, in init
lang = locale.getlocale()
File "/usr/local/Cellar/python/2.7.8_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py", line 562, in getlocale
return _parse_localename(localename)
File "/usr/local/Cellar/python/2.7.8_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py", line 475, in _parse_localename
raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8
Google了一下,发现原来是少了这些东西:

export LANG="en_US.UTF-8"

export LC_COLLATE="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
export LC_MESSAGES="en_US.UTF-8"
export LC_MONETARY="en_US.UTF-8"
export LC_NUMERIC="en_US.UTF-8"
export LC_TIME="en_US.UTF-8"
export LC_ALL=
把上面的代码加到相应的shell profile。即在bash下应该是.bash_profile。
记得source一下

2018/9/27 posted in  linux

Linux下无法使用add-apt-repository命令

sudo apt-get install python-software-properties
sudo apt-get update
sudo apt install software-properties-common 
sudo apt-get update

这样就能使用add-apt-repository了

ubuntu下python3.5升级python3.6

sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt-get update
sudo apt-get install python3.6

# 移除原3.4link 
sudo rm /usr/bin/python3

# 更换默认python3 的版本为3.6
sudo ln -s /usr/bin/python3.6 /usr/bin/python3
2018/9/6 posted in  linux

ubuntu 16 下redis安装

apt-get update 更新一下才可以安装redis-server,不然很多时候加载不到

apt-get install redis-server 可以安装redis-Server

安装完成后可以直接用redis-server启动,但是这种是控制台启动,不然参数。

建议使用

redis-server /etc/redis/redis.conf

2018/9/5 posted in  linux

git常用命令记录

查看当前git远程仓库路径

git config --get remote.origin.url

git diff

Git 比较不同版本文件差异的常用命令格式:

git diff 查看尚未暂存的文件更新了哪些部分

git diff filename 查看尚未暂存的某个文件更新了哪些

git diff –cached 查看已经暂存起来的文件和上次提交的版本之间的差异

git diff –cached filename 查看已经暂存起来的某个文件和上次提交的版本之间的差异

git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9 b8e7b00c02b95b320f14b625663fdecf2d63e74c 查看某两个版本之间的差异

git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9:filename b8e7b00c02b95b320f14b625663fdecf2d63e74c:filename 查看某两个版本的某个文件之间的差异

2018/9/5 posted in  linux

MAC应用无法打开或文件损坏的处理方法

如果没有这个选项的话(macOS Sierra 10.12),打开终端,输入sudo spctl --master-disable然后按回车。

2018/8/10 posted in  linux

mac 上卸载Java

sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -fr /Library/PreferencesPanes/JavaControlPanel.prefPane
sudo rm -fr ~/Library/Application\ Support/Java
上面是官网的卸载步骤,按照上面的卸载完后,要从finder中进入 /Library/Java/JavaVirtualMachines,然后删除jdk1.8.xxx,这样才算彻底卸载完成。

2018/8/10 posted in  linux

CentOS 安装nginx

Nginx ("engine x") 是一个高性能、轻量级的HTTP和反向代理服务器,也是一个电子邮件(IMAP/POP3)服务器。

     Nginx的最大优势在于高负载情况下内存和CPU的低消耗;并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动;在高连接并发的情况下,Nginx是Apache服务器不错的替代品:能够支持高达 50,000 个并发连接数的响应。

环境:Centos6.6

一:准备工作

首先安装缺少的依赖包
[root@localhost ~]# yum -y install gcc gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel

二:下载并安装nginx

nginx官网地址:http://nginx.org
最新版nginx获取地址:http://nginx.org/download

下载nginx安装包地址:wget http://nginx.org/download/nginx-1.8.1.tar.gz

[root@localhost ~]# wget http://nginx.org/download/nginx-1.8.1.tar.gz

[root@localhost ~]# tar -zxvf nginx-1.8.1.tar.gz
#解压缩nginx安装包

[root@localhost ~]# cd nginx-1.8.1
#切到nginx安装包下

[root@localhost nginx-1.8.1]# ./configure --with-http_stub_status_module --with-http_ssl_module
#根据需求编译安装(默认路径:/usr/local/nginx)

#--with-http_stub_status_module  启用 "server status" 页,用来监控 Nginx 的当前状态

#--with-http_ssl_module  开启HTTP SSL模块,使NGINX可以支持HTTPS请求

#在不同版本间,选项可能会有些许变化,请总是使用 ./configure --help 命令来检查一下当前的选项列表

[root@localhost nginx-1.8.1]# make
[root@localhost nginx-1.8.1]# make install

三:启动nginx服务
[root@localhost nginx-1.8.1]# /usr/local/nginx/sbin/nginx

四:测试
启动完nginx之后,直接在浏览器键入http://localhost或http://本机IP,会看到nginx的测试页面na

./configure --sbin-path=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid   --with-http_ssl_module --with-pcre=/opt/pcre-8.42 --with-zlib=/opt/zlib-1.2.11 --with-openssl=/opt/openssl-1.1.0h

./configure --user=www-data --group=www-data --with-debug --with-http_gzip_static_module --with-http_ssl_module --with-pcre=../pcre-8.38/ --with-http_perl_module --with-perl=/usr/bin/perl --with-http_stub_status_module --with-http_realip_module --prefix=/usr/local/nginx

2018/4/17 posted in  linux