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/p ...
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 ...
我们为什么要用容器(或者说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# 安 ...
使用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 ...
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 /里面添加一个头:
...
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
关闭休眠,虚拟机 ...
通过inode删除文件
有时候会有一些文件名是乱码的文件无法删除,这时候可以通过 inode 来删除。
获取文件的 inode1ls -ali
第一列就是文件的 inode
通过 inode 删除1find -inum 527084 -exec rm -rf {} \;
Bash中双横线的作用
看个例子:
假设有个文件叫 -f, 我想把这个文件删除假设我要用 rm -f -f 来删除,会发现无法删除,bash 把第二个 -f 当作参数了
这个时候可以使用 --(当然有其他方法,这里先不讨论)
1rm -f -- -f
这里的 -- 表示这个程序的参数已经结束了,后面所有的内容都是参数的值了,比如第二个 -f 就不会认为它是 rm 的参数了
现在使用 kubectl exec 也会推荐你用 – 后面再接上命令