docker lxc类型容器自启动以及自动执行命令

我们的容器采用的是lxc类型,一是为了固定ip,二是避开iptable类型转发的方式。因为我们是强网络管理环境,网络工程师对网络的规划和管控非常强。 这种方式下启动lxc容器倒是很好办,直接编辑/etc/rc.d/rc.local docker start jko2o-16-13-49 docker start vis-16-13-51 docker start vis-16-13-50 docker start vis-16-13-48 docker start vis-16-13-47 就可以开机自动启动容器了。 容器内我们是采用supervisord主进程来保持容器不自动销毁的,那么其他命令如果都加入supervisord,那会非常麻烦。 简单化,用lxc-execute来执行,比较麻烦的就是需要查出来lxc容器的名字,用以下命令查出jko2o-16-13-49的全名: docker inspect -f '{{.Id}}' jko2o-16-13-49 ebe2e6a1249f6f22334014b0072186dfaee52173f3df06cd826f9e64e7d4c51f 然后编辑/etc/rc.d/rc.local,用lxc-execute执行命令就可以了: #47 lxc-execute -n e223d81ea73551460b82e1977b92ef07e24437cd1f4494470feafd4ff455104b -- service mysqld start lxc-execute -n e223d81ea73551460b82e1977b92ef07e24437cd1f4494470feafd4ff455104b -- service httpd start #48 lxc-execute -n 1075971953b9c79494509bf89131e03bbd5ab0b9a388217bd9b6de7a553016a5 -- //www/wdlinux/init.d/mysqld start lxc-execute -n 1075971953b9c79494509bf89131e03bbd5ab0b9a388217bd9b6de7a553016a5 -- //www/wdlinux/init.d/httpd start lxc-execute -n 1075971953b9c79494509bf89131e03bbd5ab0b9a388217bd9b6de7a553016a5 -- //www/wdlinux/init.d/wdapache start lxc-execute -n 1075971953b9c79494509bf89131e03bbd5ab0b9a388217bd9b6de7a553016a5 -- //www/wdlinux/init.d/nginxd start lxc-execute -n 1075971953b9c79494509bf89131e03bbd5ab0b9a388217bd9b6de7a553016a5 -- //www/wdlinux/init.d/pureftpd start #49 lxc-execute -n ebe2e6a1249f6f22334014b0072186dfaee52173f3df06cd826f9e64e7d4c51f -- /export/servers/nginx178/sbin/nginx #50 lxc-execute -n 5b7e8cd3130d31bae5b089202c7e2092b9daca5f19cc055ce4ee50cf8b789504 -- /export/servers/tomcat/tomcat.sh

2024年1月8日

Openvpn服务器端无法开通udp端口的故障排除

openvpn server can’t use udp port 这个问题非常古怪,我们有两个机房。分别在两边假设了openvpn服务器,一个机房的ovpn就完全正常,而另一个机房的openvpn如果是tcp就没问题,如果是udp就报错,无法连接。把正常机房的openvpn完全复制一份拿过去,也是一样报错,太郁闷了! 错误提示是: TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) 非常古怪啊: 在内网用nc来试验udp是否正常: nc -ul 1194 在内网随便找一台机器测试: nc -u xxxx 1194 然后两边随便输入字符测试,没问题。 然后从公网测试,就出问题了。nc连接上以后,只能发送一次数据,然后管道就断裂了,无法再传数据。 nc -u 公网ip 1194 aaa nc: Write error: Connection refused 百思不得其解啊,试了若干次,才发现问题的症结所在。 错误的那台服务器,有两个网络地址: 172.16.8.4和172.16.8.1 其中8.4的地址是缺省地址,8.1的地址是用ifconfig手动后添加的。 而前端防火墙做得公网映射是映射到了8.1的1194端口 tcp由于双方是要校验来往src地址的,所以没问题,到了udp,只管发不管收,所以udp包就从8.4的缺省地址发出去,导致双方不一致,无法正常接收了。 解决方法也很简单,在openvpn服务器端的配置文件中强行指定local端的ip即可: local 172.16.8.1

2024年1月8日

Cisco ASA5520 VPN线路的监控和自动重启

Cisco ASA5520 VPN线路的监控和重启 公司从事第三方支付工作,跟很多银行都有合作关系,拉了很多专线直通银行,双方建立VPN,两端都是Cisco的设备,但是,这些线路有时候会莫名其妙的断掉,关键是程序不知道啊,老是重连,一直等到客服反映客户投诉,查一圈程序后才知道。这在生产环境上可是行不通的,找来了所谓Cisco高手,也搞不明白为什么老断,没办法,于是写了两个监控脚本,使用Ping检测VPN对端的状况,一旦Ping不通,就用脚本登陆防火墙,自动重启VPN。 在安装之前,先安装一个能从命令行发送邮件的软件Email来发送报警邮件,否则每台机器都起sendmail,没什么必要: https://github.com/muquit/mailsend-go #发送实例 mailsend-go -smtp smtp.126.com -port 25 \ auth \ -user xxx@126.com -pass xxx \ -from xxx@126.com -to "xxx@126.com" \ -sub "Test" \ body -msg 'hello world' 126邮箱这里的密码用的是授权码 授权密码,不是邮箱密码 说明一下场景: 210.210.210.3是对端Cisco vpn设备的公网IP 192.168.101.99是建立了VPN后,对端服务器的私网IP地址; 192.168.1.1是己方Cisco ASA5520的私网地址。 #!/bin/sh while [ "1" -eq "1" ] do live=`ping -c4 "192.168.101.99"|wc -l` if [ $live -eq 5 ] ; then /usr/local/bin/mailsend-go -debug -to "ranrui.zhang@rendoumi.com" -from monit@ddky.com -ssl -port 465 -smtp smtp.qiye.aliyun.com \ auth -user "monit@ddky.com" -pass "xxxxxxxx" \ -sub "vpn断了" body -msg "`date +%Y`年`date +%m`月`date +%d`日 vpn断了!!!" \ -cs "utf-8" /usr/local/bin/revpn.sh echo "`date +%Y`年`date +%m`月`date +%d`日 `date +%H`点`date +%M`分 线路不能到达王府井机房,重启VPN。" sleep 60 fi; sleep 60 done 以下是用expect自动登录Cisco路由器重启vpn的脚本 revpn.sh ...

2024年1月8日

最新版出国旅行安装一个FreePBX的voip电话自用

新的一年依始,开始定好了旅行计划,但是有个东西却依然心神不宁。 那就是万一在国外有什么变动,如何往国内打电话呢?! 说到这里,不得不提个东西,那就是旅顺的App,这个东西已经消失了,但是绝对值得被记住啊。 这个东西在塞班岛旅游的时候曾经救了自己两次 首先是它的第一代产品: 第一代的原理似乎是把手机的信号直接通过网络转移到了国内,随身携带然后配合app使用,这点非常牛吧!国内的窜出点会随机,忽而天津,忽而别的地方,所以呼出电话搞不好是长途计费。第一次呢八戒是在塞班岛中部那个麦当劳附近,用这个接到了国内的电话,说是出大事了,有人把公司数据库的数据给改了,当时约定下午6:00再打,然后下午在台湾牛肉面的店里,又用这个往国内通了电话,打了半个多小时,领导告知了具体的情况,要是接不起来那可真就麻烦大了。 这个是它第二代的产品: 这个是升级版pro,就更厉害了,直接放家里,手机上下个app,有网络就能用了,不用像第一代一样随身携带了。 这个更是救命了,话说第二回在塞班的时候正是疫情刚发作的时候,塞班直接封岛了,然后好多航班都延期或终止了,就是用这个旅顺打国内电话改签了回国的机票,足足打了两个小时啊,到处占线等待,如果打国际长途的话费用不堪设想,另外打塞班大韩航空的电话改签两程机票也是不可想像的,所以,关键时刻是真的救命啊。 这么好的软件却直接倒闭消失了,真是万分可惜啊。 哎,现在没有这个了,只能自己搭一个voip电话自用了。 刚开始是考虑RasPBX,其实自己用树莓派搭过,费事不说,主要树莓派容易死机,务必要稳定,所以干脆用FreePBX搭建在kvm服务器虚拟机上的方式,来保持绝对稳定。 以下教程只适用于 FreePBX 16 的官方ISO,具体做法如下: 一、安装KVM虚机: #下载FreePBX16的iso光盘 wget https://downloads.freepbxdistro.org/ISO/SNG7-PBX16-64bit-2302-1.iso #创建qcow2虚机文件 qemu-img create -f qcow2 freepbx-8-2-60/freepbx-8-2-60.qcow2 20G virt-install \ --name=freepbx-8-2-60 \ --vcpu=4 \ --ram=8096 \ --disk path=/export/kvm/freepbx-8-2-60/freepbs-8-2-60.qcow2,format=qcow2,size=20 \ --cdrom=/export/kvm/SNG7-PBX16-64bit-2302-1.iso \ --network bridge=br0 \ --os-type=linux \ --vnc --vnclisten=0.0.0.0 --vncport=5916 用vnc连接5916端口安装,设置一下root的密码安装。 这样安装好后,系统其实是dhcp动态获得ip的,进入看了看,是Centos,我们不需要dhcp,把IP给固定死 vi /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE="Ethernet" BOOTPROTO="static" IPADDR=10.8.2.60 NETMASK=255.255.255.0 GATEWAY=10.8.2.1 DNS1=114.114.114.114 DEFROUTE="yes" NAME="eth0" DEVICE="eth0" ONBOOT="yes" SSH登录一下没问题,看到绿框就ok了 二、配置FreePBX的分机 打开网址 http://10.8.2.60 , 登录 FreePBX Administration 登上去后是这个样子 上面我没有开System Firewall,这个看个人需求,绝对不要像公网开放80端口,只开5060的udp和1000-10004的UDP。 ...

2024年1月5日

配置Minio+nginx的代理来开放桶内内容

同事有个需求,想开放个域名,给别的同事们下载文件用。 这个其实很建单,问题就是文件怎么放上去,sftp、ftp什么的都需要搭个服务器,其实最简单应该是webdav,但是放公网又不太安全。 本来考虑是用 oss 的桶,前面直接套个CDN,但是如果桶文件泄露被疯狂下载,也会付出银两。 最后做法是用 Minio 弄一个模拟的桶环境,前面配置上 Nginx,带宽限制到1M,这样就无所谓了。同事用另一台机器模拟S3的API往上面放文件供下载。 一、minio的安装 下载二进制文件,简单粗暴启动: #!/bin/bash nohup /app/minio/minio server --address '0.0.0.0:9000' --console-address '0.0.0.0:9001' /app/bucket > /app/minio/minio.log 2>&1 & 这样就启动了,然后网页打开 http://10.10.247.211:9000 ,就可以看到登录界面了 登录后,我们先建立一个Bucket,就叫做pub桶,把pub桶的策略改成public,这样nginx代理的时候才能直接访问到 然后我们上传个图片,BOMS3.0.png,然后去/app/bucket目录下看看 结果发现BOMS3.0.png居然是个目录,进去继续看 meta信息和若干的part,看来这是为多版本准备的,这就是为什么要策略是public的原因,不是就无法从9000访问。 二、安装配置nginx server { listen 80; listen [::]:80; server_name supervisor-task.ddky.com; location / { return 301 https://supervisor-task.ddky.com$request_uri; } } server { listen 443 ssl; server_name supervisor_task.ddky.com; ssl_certificate /etc/nginx/cert/_.ddky.com.crt; ssl_certificate_key /etc/nginx/cert/_.ddky.com.key; ssl_session_timeout 5m; location / { rewrite ^/$ /pub/index.html break; proxy_pass http://10.10.247.211:9000/pub/; proxy_redirect off; } access_log /app/logs/access.log ; error_log /app/logs/error.log; } 主要就是要配置代理,代理到minio的9000端口 ...

2023年12月28日

NFS的详细解释

NFS的SERVER分两部分: 1、RPC 主程序:rpcbind NFS 本质是一个 RPC 服务,而要启动任何一个 RPC 服务之前,都需要做好 port 的对应 (mapping) 的工作才行,这个工作其实就是『 rpcbind 』这个服务所负责的!也就是说, 在启动任何一个 RPC 服务之前,我们都需要启动 rpcbind 才行! (在 CentOS 5.x 以前这个软件称为 portmap,在 CentOS 6.x 之后才称为 rpcbind 的!) 2、NFS 主程序:nfs-utils 就是提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其他相关 documents 与说明文件、执行文件等的软件!这个就是 NFS 服务所需要的主要软件! 安装服务端NFS Server yum install nfs-utils rpcbind -y sudo apt install nfs-kernel-server 客户端不提供服务,所以不用装rpcbind yum install nfs-utils sudo apt install nfs-common 将NFS和rpcbind加入开机启动 systemctl enable --now rpcbind systemctl enable --now nfs 客户端不用启用任何服务 服务端检查是否安装nfs: rpm -qa | grep nfs与 rpm -qa | grep rpcbind即可 停止服务端的nfs server的方法: systemctl stop nfs systemctl stop rpcbind 配置共享目录 在服务端配置一个共享目录 ...

2023年12月28日

Kvm虚拟机挂载临时急救iso启动的方法

Kvm虚拟机挂载临时急救iso启动的方法: 首先去到宿主机 编辑虚机文件virsh edit vis-18-32-6 <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='hda' bus='ide'/> <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> 在target下面增加一行source: <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='hda' bus='ide'/> <source file="/export/kvm/systemrescuecd-x86-5.2.2.iso"/> <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> 再修改boot为cdrom,改回去则是hd <os> <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> <boot dev='cdrom'/> </os> 然后启动虚机就可以了。

2023年12月28日

shell脚本的一个好的帮助信息

Shell脚本好的帮助信息的例子 一个好的脚本,必须有好的帮助信息 给一个比较简洁的例子 #!/bin/bash ### ### my-script — does one thing well ### ### Usage: ### my-script <input> <output> ### ### Options: ### <input> Input file to read. ### <output> Output file to write. Use '-' for stdout. ### -h Show this message. help() { awk -F'### ' '/^###/ { print $2 }' "$0" } if [[ $# == 0 ]] || [[ "$1" == "-h" ]]; then help exit 1 fi echo Hello World 以前丑陋的用法真是没法看!!! ...

2023年12月28日

Nodejs禁止后台偷偷升级

Nodejs禁止后台偷偷升级 去到172.18.31.2上,会看到很多node进程 有病噻,系统都没有运行node程序。唯一的程序是nci-ansible-ui-quick-setup,在/export/server下,还没有运行,升级个茄子噻。 全杀掉,然后全局禁止升级即可 npm config set update-notifier false --global 第一次运行会有个提示,再运行就没有了。

2023年12月28日

Tomcat配置不当导致文件泄露

Tomcat配置不当导致文件泄露 说明:Tomcat由于配置不当会导致tomcat/conf log webapps work temp bin lib等信息暴露在游览器中 例如: http://192.168.89.38:8080/conf/catalina.policy http://192.168.89.38:8080/conf/catalina.properties http://192.168.89.38:8080/conf/context.xml http://192.168.89.38:8080/conf/logging.properties http://192.168.89.38:8080/conf/server.xml http://192.168.89.38:8080/conf/tomcat-users.xml http://192.168.89.38:8080/conf/web.xml 修复方法: 将 /export/servers/tomcat 下的 server.xml <Host name="localhost" appBase="" 改成 <Host name="localhost" appBase="webapps" appBase千万不能为空 修改完后重启生效

2023年12月28日