野生运维之:从运行的Docker容器中直接打包Docker镜像

Publish: May 16, 2020 Category: 运维 No Comments

用过Docker的朋友都知道,如果不使用dockerfile构建镜像,可能会随着我们的操作构建的镜像体积会呈现爆炸性增长。这是为什么呢? 这是因为Docker镜像的文件系统是层级结构,每执行一次构建都会将叠加在前置的文件系统上。docker运行的的时候只抽取有用的部分。

如果想直接从当前的容器中构建一个镜像是不是体积就很小了呢? 我做了如下尝试:使用容器打包镜像

  1. 进入容器根目录操作
#进入目录
cd /
#查看体积
du -sh ./*
  1. 删除无用文件
#各种rm rm -rf 操作, 这里一定要认证一点

阅读剩余部分...

LNMP下单独使用let's encrypt签ssl证书和nginx配置

Publish: April 13, 2020 Category: 运维 No Comments

lnmp本身支持自签证书,这里只说使用用acme.sh脚本单独签发证书。

lnmp环境由于修改了原生nginx的一些规则,需要稍作修改。本文只记录我自己签发证书过程。

安装acme.sh

curl https://get.acme.sh | sh

生成证书

lnmp 环境下做了部分配置变更,不建议直接使用--nginx方式验证和生成。


acme.sh --issue -d www.evenvi.com --webroot /home/wwwroot/www.evenvi.com/public/

证书安装

前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.
正确的使用方法是使用 --installcert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:

acme.sh --installcert -d www.evenvi.com --key-file /home/wwwroot/www.evenvi.com/cert/key.pem --fullchain-file /home/wwwroot/www.evenvi.com/cert/cert.pem --reloadcmd "/etc/init.d/nginx reload"








阅读剩余部分...

mysql bin-log日志占满磁盘问题解决

Publish: April 7, 2020 Category: 运维 No Comments

开启MySQL binlog日志的服务器,如果不设置自动清理日志,默认binlog日志一直保留着,最终导致服务器磁盘空间被binlog日志占满,导致MySQL数据库出错。

正常情况下(磁盘没有被完全占满)我们按照此情况处理即可,直接修改日志过期时间,重启服务

/etc/my.cnf  #配置文件位置

expire_logs_days = 3  #自动删除3天前的日志。默认值为0,表示从不删除。

log-bin=mysql-bin   #注释掉之后,会关闭binlog日志

binlog_format=mixed   #注释掉之后,会关闭binlog日志

:wq!  #保存退出

如果磁盘已经完全被占满,这时候mysql服务可能起不来。
需要手动删除一部分日志数据。

比如我们的日志目录在:

root@iZ8vbbdf6epai4kh5einddZ:/usr/local/mysql/var#

删掉一个比较旧的日志文件

rm mysql-bin.000051
 
然后启动服务
/etc/init.d/mysql start

再用df命令看下磁盘空间

df -h

此方法只适用于单机部署下的mysql日志清理。集群请参考其他文章。

Nginx TCP端口转发和基于域名的HTTP流量转发

Publish: March 7, 2020 Category: 小技巧,运维 No Comments

开发过程中经常遇到这样的需求

  1. 需要基于某网关设备做负载均衡
  2. 内网中某台服务器提供外网访问服务
  3. 80端口流量区分

TCP端口转发

需求1、2归结起来说就是对TCP流量转发,nginx 原生支持tcp流量转发。

阅读剩余部分...

Windows下Wamware在 Linux 客户机中自动装载共享文件夹

Publish: January 16, 2020 Category: 小玩具,运维 No Comments

图形界面中按下面操作:

1、使用VMware启动虚拟机,选择:菜单Player->Manage->install VMware Tools,因为我已经安装过了,所以菜单变为灰色(如果没有安装VMware Tools,请参考上面的安装链接):

2、选择:Virtual Machine Settings->Share Folders,将Disabled改为Always enabled:
我这里共享了两个目录分别如下

workspace_share
box_share

下面的脚本中会用到,下面说下挂载问题。

启用共享文件夹后,除默认位置 /mnt/hgfs 外,您还可以将共享文件夹中的一个或多个目录/子目录装载到文件系统中的任意位置。

使用 mount 命令可将所有共享、某一个共享或共享中的某个子目录装载到文件系统的任意位置。

查看共享目录

vmware-hgfsclient

装载命令语法

命令    说明
mount -t vmhgfs .host:/ /home/user1/shares    将所有共享装载到 /home/user1/shares
mount -t vmhgfs .host:/foo /tmp/foo    将名为 foo 的共享装载到 /tmp/foo
mount -t vmhgfs .host:/foo/bar /var/lib/bar    将共享 foo 中的子目录 bar 装载到 /var/lib/bar

除标准 mount 语法外,您可以使用 VMware 的特定选项。要获得“主机-客户机”文件系统选项的用法信息,请键入命令

/sbin/mount.vmhgfs -h。

安装 VMware Tools 时会向 etc/fstab 添加一个条目,用于指定共享文件夹的位置。您可以编辑该文件以更改或添加条目。例如,要在启动时自动装载,可编辑 /etc/fstab 并添加以下行:

.host:/ /mnt/hgfs vmhgfs defaults 0 0

VMware Tools 服务脚本会加载执行装载操作的驱动程序。如果装载失败,将显示一条关于装载 HGFS 共享的消息。

下面是我写init脚本实现开机自动挂载

/etc/init.d/mount-shared-path

#!/bin/bash


### BEGIN INIT INFO
# Provides:          evenvi.com
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

vmhgfs-fuse .host:/workspace_share /root/workspace_share
vmhgfs-fuse .host:/box_share /root/box_share
echo 'hello, world' >> /tmp/boot.log