那些杂七杂八的记录

1. GnuPG 加密与解密
gpg 对称加密
gpg 非对称加密
2. DOCKER 创建 DNS SERVER
3. Mysql Errcode: 24 - Too many open files
4. dotnet 环境搭建
5. 在Linux中删除virbr0接口
6. Linux 杀毒软件 clamav
7. acme.sh 管理免费域名证书
8. 禅道bug管理系统
9. nginx 代理php产生的一些故障
10. linux 合并文件系统 margerfs


1. GnuPG 加密与解密

1.1. gpg 对称加密

加密: gpg -c <file>, 输入两次加密密码,完成后生成文件<file>.gpg(加密后源文件保留)
解密: gpg <file>.gpg, 输入加密密码,正确后生成文件<file>(解密后加密文件保留)

1.2. gpg 非对称加密

非对称加密/解密文件时,Server 生成私钥与公钥,并把公钥发送给Client, Client 使用公钥加密数据,并把加密后的数据传给ServerServer 最后使用自己的私钥解密数据。

# Server: 创建公钥私钥 $> gpg --gen-key # 需要填写一些东西,可根据需求选择 ## 配置文件介绍 # GPG 配置文件目录:~/.gnupg # ~/.gnupg/gpg.conf – 配置文件 # ~/.gnupg/trustdb.gpg – 信任库 # ~/.gnupg/pubring.gpg – 公钥库 # ~/.gnupg/secring.gpg – 私钥库 $> gpg --list-key # 密钥查看 $> gpg -a --export <UserID> > ./public-key.pub # Server: 公钥导出 UserID 为公私钥创建时候生成的,即 gpg: 密钥 <UserID> 被标记为绝对信任 # 将公钥传送到Client上 # Client: 导入 公钥 $> gpg --import ./public-key.pub # Client: 文件加密 $> gpg -e -r <UserID> <file> <file>.gpg # 加密完成后将文件传送至Server 进行解密,此时Client上是不可解密的,要解密需要私钥 # Server: 文件解密 $> gpg -d <file>.gpg <file>

2. DOCKER 创建 DNS SERVER

$> vim /data/docker/dns/dnsmasq.conf #dnsmasq config, for a complete example, see: # http://oss.segetech.com/intra/srv/dnsmasq.conf #log all dns queries log-queries #dont use hosts nameservers no-resolv #use cloudflare as default nameservers, prefer 1^4 server=8.8.4.4 server=8.8.8.8 strict-order #serve all .company queries using a specific nameserver server=/company/10.0.0.1 #explicitly define host-ip mappings address=/www.example.com/172.16.10.10 $> docker run -d -p 53:53/udp -p 53:53/tcp -p 5380:8080 -v /data/docker/dns/dnsmasq.conf:/etc/dnsmasq.conf --log-opt "max-size=100m" -e "HTTP_USER=root" -e "HTTP_PASS=root" jpillora/dnsmasq

3. Mysql Errcode: 24 - Too many open files

https://blog.csdn.net/weixin_36343850/article/details/86293700

原因:打开文件数量太多,超出了open_files_limit这个参数的限制,在一个表中有多个分区的时候,这种情况更容易发生。
解决方法:

  • 查看 open_files_limit参数, 使用show variables like '%open%';就可以看到了
  • 修改 open_files_limit参数
    在网上找了很多资料,有的说直接在/etc/mysql/mysql.conf.d/mysqld.cnf文件中的[mysqld]部分添加open_files_limit参数,比如open_files_limit=102400,并且在/etc/security/limits.conf 添加mysql soft nofile 102400mysql hard nofile 102400这两个参数然后重启MySQL,但是发现不能生效。
  • 以下方法可用:
    • 在文件/etc/systemd/system/multi-user.target.wants/mysql.service(也有可能是/etc/systemd/system/mysql.service这个文件)最后添加LimitNOFILE=102400
  • 然后执行systemctl daemon-reload,接着再重启mysql服务sudo service mysql restart,可以看到已经修改成功了

4. dotnet 环境搭建

$> rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm $> yum install libgdiplus-devel libunwind icu -y $> wget https://packages.microsoft.com/rhel/7/prod/dotnet-sdk-2.1.200-rhel-x64.rpm $> yum install dotnet-sdk-2.1.200-rhel-x64.rpm -y $> dotnet --info # supervisor 管理 yum install supervisor -y # 前端管理样式页面 /usr/lib/python2.7/site-packages/supervisor/ui/status.html

5. 在Linux中删除virbr0接口

virbr0CentOS7在安装过程中选择了相关虚拟化的服务安装后产生的,实际上好像是没什么卵用的

$> virsh net-list $> virsh net-destroy default $> virsh net-undefine default $> systemctl restart libvirtd.service

6. Linux 杀毒软件 clamav

# 需要安装epel源 $> yum install clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd # 注释掉 /etc/freshclam.conf /etc/clamd.d/scan.conf 中的Example # 更新病毒库  $> /usr/bin/freshclam # 扫描 $> clamscan -ri /data --remove -l /var/log/clamscan.log

7. acme.sh 管理免费域名证书

此处说明两个注意一点设置的DNS API密钥的获取,cloudflare腾讯云, 其他可直接参看官方说明 https://github.com/acmesh-official/acme.sh/wiki/dnsapi

  • cloudflare:解析的需要创建API 令牌, API令牌权限需要创建 区域.区域区域.DNS,区域资源为所有区域或者帐号的所有区域 , 另外需要的CF_Account_IDurl中包含的那32位的字符串.
# cloudflare $> curl https://get.acme.sh | sh $> export CF_Token="xxxxx" $> export CF_Account_ID="xxxxxx" $> acme.sh --issue -d example.com -d '*.example.com' --dns dns_cf
  • 腾讯云:腾讯云实际上需要使用的是dnspodidtoken他们两个是共用的,可以直接用腾讯云帐号登录dnspod,进去后获取到idtoken 就行了
# 腾讯云 $> curl https://get.acme.sh | sh $> export DP_Id="xxxxx" $> export DP_Key="xxxxx" $> acme.sh --issue -d example.com -d '*.example.com' --dns dns_dp

8. 禅道bug管理系统

这个部署遇到的一个坑就是php打死获取不到session的位置
打开调试日志方式是将my.cnfdebug设置为true
实际错误体现是 ERROR: 您访问的域名 xxx.xxx.xxx 没有对应的公司。
我的解决方案是 代码目录整体权限设置为777,然后删除掉my.cnf进行重装,重装后在目录权限调整为正常权限即可.

9. nginx 代理php产生的一些故障

记录一个nginx 代理 php 产生的问题,问题已经解决了,但是似乎还是没有找到根本原因,若有了解的,请一定解惑一二, 以下记录下处理过程 .

  • 问题产生过程:

    • A服务器代码迁移到B机器上,代码是rsync直接同步的,然后B运行的时候就出问题了,根据调试发现,无论访问什么(html/js/css)都会跳转到首页,实际应该是都会经过php解析(我发誓A和B的环境配置是一模一样的!A可以正常运行.), php框架为opencart .
  • 浏览器访问表现以下错误:

    • Resource interpreted as Stylesheet but transferred with MIME type text/html
    • ERR_CONNECTION_REFUSED
  • 处理过程 :

    • 问题实际上是头一天发生的,经过多方调试发现,实际上通过域名访问任何资源均会跳转到首页,访问php资源则会出现无法加载js/css等静态资源全部都是MIME类型问题,nginx强行给css/js等资源设置一个content-type前端也无法识别正确,另外也测试过网上提供的多方解决方案,仍然无法得到解决 .
    • 第二天, 保持原有nginx配置 , 我给对应站点首页的index.php代码中加入了echo 123; exit();进行测试,访问发现可正常断开,此时在访问根下的静态html测试文件,发现可以正常访问了,此时删除echo 123; exit();,重新访问index.php,发现(js/css)静态资源被升级为https访问,此时我给相关域名配置上证书,然后访问就正常了!!!
  • 原因分析:

    • 站点缓存(这个可能性最大),opencart框架实际上session是存储到数据库中的,估计很多的cache也是存于数据中的,而今天解决的时间也恰好距离我最后一次同步一天的样子.
    • nginx 配置域名过多,导致配置混乱. B服务器的nginx实际上已经配置了很多个域名,php解析的SCRIPT_FILENAME 我使用的是$document_root,最后一次修改我也将$document_root修改为了具体的路径,不知道会不会是这个原因产生的.

10. linux 合并文件系统 margerfs

https://wzyboy.im/post/1148.html

https://github.com/trapexit/mergerfs

使用示例:

# 挂载目录必须为空 # 命令挂载 $> mergerfs -o defaults,allow_other,use_ino,minfreespace=10G,ignorepponrename=truey /data01:/data02 /shares # fstab $> /etc/fstab /data01:/data02 /shares fuse.mergerfs defaults,noauto,allow_other,use_ino,minfreespace=10G,ignorepponrename=true 0 0