一个特殊的空格--硬空格
事情的起因我在测试一个nginx配置文件,配置文件来自于印象笔记网页版复制(本人用的linux,没有印象笔记客户端可用),编辑的时候发现了蹊跷:
不过没有太在意,还有一点蹊跷的是vim编辑的时候该高亮的地方也不高亮了,接着改好了配置文件后,发现nginx -t怎么测试都不通过。
排查问题当然怀疑是nginx配置文件的问题,将配置文件复制到windows下,使用notepad++编辑(显示所有符号)发现里面的空格并不是空格
真正的空格应该显示的是.,tab显示的应该是➡️。将这个”空格”复制出来,然后找个在线转换器http://www.hiencode.com/jinzhi.html转换成16进制数据,发现是a0
然后到https://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC%A6%E5%88%97%E8%A1%A8搜了下a0,发现是一个叫做不换行空格的东西,又叫硬空格(hard space、fixed space)
用途是禁止换行,常用于html,比如地址xx省xx市 xx县 xx镇 xx村这个我们希望在网页上不要换行显示,就会打 ...
Linux网络设备命名规则及修改
命名规则centos从7开始网卡名称默认不再是熟悉的eth0、而是类似于ens33、enps0f0等rhel7官方文档
这么做的好处是在 Red Hat Enterprise Linux 7 中,udev 支持大量不同的命名方案。默认是根据固件、拓扑及位置信息分配固定名称。这样做的优点是命名可完全自动进行,并可预期,即使添加或删除硬件后也会保留其名称(不会出现重复枚举的情况),同时可顺利更换损坏的硬件。不足之处是,相比传统的名称,比如 eth0 或 wlan0,这些名称有时会比较难理解。例如:enp5s0。
设备命名的过程
/usr/lib/udev/rules.d/60-net.rules 文件中的规则会让 udev 帮助工具 /lib/udev/rename_device 查看所有 /etc/sysconfig/network-scripts/ifcfg-suffix 文件。如果发现包含 HWADDR 条目的 ifcfg 文件与某个接口的 MAC 地址匹配,它会将该接口重命名为 ifcfg 文件中由 DEVICE 指令给出的名称。
/usr/lib/udev/rules.d/71- ...
Puppet Server从部署到上线使用
这是一篇todo文章,可以快速将puppetserver部署起来,经常遇到的坑也会写出来,但是自己不踩吭记忆是没有成长的(不仅仅是收获经验,重要的是增加了学习的能力),如果不缺时间的话,强烈建议看官方文档:https://puppet.com/docs/puppet/7/server/install_from_packages.html
安装master通过源来安装12sudo rpm -Uvh https://yum.puppet.com/puppet7-release-el-8.noarch.rpmsudo yum install puppetserver
启动master服务1sudo systemctl start puppetserver
如果报错Found master private key '/etc/puppetlabs/puppet/ssl/private_keys/localhost.localdomain.pem' but master public key '/etc/puppetlabs/puppet/ssl/public. ...
Linux网络管理命令
2009年 Debian 开发者邮件列表宣布放弃使用缺乏维护的net-tools工具包,net-tools包含历史悠久的ifconfig, netstat等网络相关的命令iproute2用于取代net-tools,在大部分的发行版都自带了。命令有ip, ss, net等命令替代了之前的网络操作命令。
命令对照表
net-tools
iproute2
arp -na
ip neigh
ifconfig
ip link
ifconfig -a
ip addr show
ifconfig -s
ip -s link
ifconfig eth0 up
ip link set eth0 up
ipmaddr
ip maddr
iptunnel
ip tunnel
netstat
ss
netstat -i
ip -s link
netstat -g
ip maddr
netstat -l
ss -l
netstat -r
ip route
route add
ip route add
route del
ip route del
...
我们为什么要用容器(或者说k8s)
起因或现状
公司准备上线k8s集群,目前在云上有微软azure托管的aks,aks上面的用来部署一些对外的业务,数据中心(有两个 - 移动和电信)是我自建的,主要是对内网服务
现在的问题是我们构使用的是jenkins,构建方式和传统虚拟机发布没什么区别,只是换成了容器,简单来说就是:
传统发布(所有环境流程一致): 拉代码 - 构建 - 可执行文件上传服务器现在发布(所有环境流程一致): 拉容器镜像(基础环境) - 拉代码 - 构建 - 上传镜像仓库
所有环境的发布都需要准备一套环境,也就是说容器并没有解决我们的环境标准化的问题,比如:
我们的jenkins的node节点在数据中心、办公室内网、azure云上都有,因为这些环境都需要构建一遍镜像围绕构建需要提供一些基础设施,比如我们apt、maven、pypi等的缓存服务(用的nexus),容器镜像仓库(用的jfrog)这些都需要在每个环境准备一套,每个服务还需要做高可用,简单算下来也有6个nexus和4个jfrog
如果我们换成办公室构建完成,上传到公网的jfrog仓库,后面所有的操作都以容器镜像为单位进行(比如测试 ...
使用 docker buildx 构建不同平台的镜像
一直使用oracle提供的免费arm云服务器,自己的pc又是x86架构,x86构建出来的镜像不能在arm平台使用
使用buildx可以生成跨平台镜像,跨平台镜像就是同一个镜像名称,同一个tag,但是arm机器和amd64机器拉下来的镜像hash是不一样的
创建docker buildx构建环境
这里的driver有两种,一种是docker-container,一种是docker,构建多平台版本只能使用docker-container, –use是将切换为默认
1docker buildx create --use --name buildx --node buildx --driver-opt network=host
准备qemu模拟器构建不通架构的镜像是通过qemu来模拟的,你会发现构建过程中,和build机器同架构的会构建很快,不同架构构建很慢。
12345678# 安装全部模拟器docker run --privileged --rm tonistiigi/binfmt --install all# 安装指定的模拟器docker run --privileged --r ...
使用certbot自动申请ssl证书
certbot可以自动申请let’s encrypt https证书, 并且可以自动续期,另见:使用acme.sh来自动更新https证书
申请证书前准备添加DNS解析域名为你需要申请https证书的域名,添加A记录到服务器IP
安装certbot和certbot nginx plugin12sudo apt install certbotsudo apt install python3-certbot-nginx
申请证书1sudo certbot --non-interactive --redirect --agree-tos --nginx -d password.zahui.fan -m captain@zahui.fan
以上操作除了申请证书外,还可以自动添加https配置到nginx,很方便。
证书续期1sudo certbot renew
添加到root用户的crontab里面就可以实现自动续期,距离到期时间太长会自动跳过续期
删除证书1sudo certbot delete
Systemd入门教程all in One
参考自https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html,感谢阮一峰老哥。同样可以看Arch Wiki:systemd ,Arch Wiki真的不错。
由来历史上,Linux 的启动一直采用init进程。
下面的命令用来启动服务。
123sudo /etc/init.d/apache2 start# 或者service apache2 start
这种方法有两个缺点。
一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
二是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。
systemd的诞生Systemd 就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。systemd成为系统的第一个进程(也就是PID=1),其他进程都是它的子进程。
systemd 包括的命令
systemd 不是一个命令,而是一组命令。比如systemctl hostnamec ...
Nginx反向代理wordpress并启用https
反向代理wordpress遇到了问题,nginx不启用https,反向代理没问题(wordpress和nginx之间走http),但是nginx启用了https,页面上的样式就没有了,f12查看,发现js和css走的还是http,所以404
根本原因:wordpress代码里没有开启https,(wordpress认为自己是被http访问的,毕竟nginx是通过http来访问它的)
修改wordpress配置
感觉这种方案最靠谱,谁的债谁来还。。
在wp-config.php的if ( ! defined( ‘ABSPATH’ ) )前面添加:
123$_SERVER['HTTPS'] = 'on';define('FORCE_SSL_LOGIN', true);define('FORCE_SSL_ADMIN', true);
如果是官方Docker容器的话强烈建议Nginx的location /里面添加一个头:
1proxy_set_header X-Forwarded-Proto $s ...
openSUSE常用配置
安装vscode12345sudo rpm --import https://packages.microsoft.com/keys/microsoft.ascsudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ntype=rpm-md\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/zypp/repos.d/vscode.repo'sudo zypper refreshsudo zypper install code
安装vmware workstation1sudo zypper install gcc gcc-c++ kernel-source kernel-syms
然后正常安装vmware-workstation
关闭休眠,虚拟机建议操 ...