Python使用dotenv来管理环境变量
管理环境变量是一件比较麻烦的事情,好在python有python-dotenv可以帮助我们来简化这个操作
安装直接pip来安装就好
1pip install python-dotenv
使用创建.env文件,记得添加到.gitignore里面
.env文件内容为键值对形式
12#这是注释FOO="BAR"
123456import dotenvimport osdotenv.load_dotenv()print(os.getenv("FOO"))
shell脚本怎么使用.env文件123source .envecho $FOO
搭建NFS服务
k8s集群需要存储,本地测试环境懒得搞些复杂的,开始回忆回忆入门时学的nfs的搭建,记录下吧,方便查看
搭建服务器Ubuntu和DebianCentOS和Fedora1sudo apt install -y nfs-kernel-server1sudo yum install -y nfs-utils
1234567891011121314# 创建共享目录sudo mkdir /nfs# 删除权限限制sudo chown -R nobody:nogroup /nfs# RHEL 9 系统# sudo chown -R nobody:nobody /nfs# 修改配置文件echo "/nfs *(rw,sync,no_subtree_check,no_root_squash)" >> /etc/exports# 使配置生效sudo exportfs -a
重启服务
Ubuntu和DebianCentOS和Fedora12sudo systemctl restart nfs-serversudo systemctl enable nfs-server ...
Docker不支持中文解决方案
ubuntu官方镜像默认的字符集支持C, C.UTF-8, and POSIX
查看容器使用的字符集
12345678910111213141516root@huige-demo-web-0:/var/www/html/forum/files# localeLANG=LANGUAGE=LC_CTYPE="POSIX"LC_NUMERIC="POSIX"LC_TIME="POSIX"LC_COLLATE="POSIX"LC_MONETARY="POSIX"LC_MESSAGES="POSIX"LC_PAPER="POSIX"LC_NAME="POSIX"LC_ADDRESS="POSIX"LC_TELEPHONE="POSIX"LC_MEASUREMENT="POSIX"LC_IDENTIFICATION="POSIX"LC_ALL=
要使容器内 ...
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 ...
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 ...