三不朽

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

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

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

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

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

阅读剩余部分...

twill 安装记录

Publish: May 9, 2020 Category: WEB,小玩具 No Comments

要找一个laravel的cms,看这个start数量和文档写的都还不错,现在本地搭建环境。

先看下环境版本要求:

支持版本 推荐版本
PHP >= 7.1 7.4
Laravel >= 5.6 7
npm >= 5.7 6.13
MySQL >= 5.7 5.7
PostgreSQL >= 9.3 10

首先安装laravel

composer create-project --prefer-dist laravel/laravel baogaoban.com "6.*"

如果国内的composer比较慢,推荐使用阿里的镜像

全局设置
#设置全局composer镜像配置
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
#取消配置
composer config -g --unset repos.packagist

项目设置
#设置项目composer镜像配置
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
#取消配置
composer config --unset repos.packagist

安装twill composer包

cd baogaoban.com
composer require area17/twill:"^2.0"

安装twill

php artisan twill:install

注意:
该命令会执行数据库迁移,务必保证 .env配置文件中关于数据库的配置能正确的连接到数据库。
该命令主要有一下操作:

  1. 在 routes 目录创建一个 admin.php 文件。
  2. twill数据库迁移
  3. 发布 twill的配置文件到 config 目录
  4. 发布twill的资源文件到 admin console 界面
  5. 创建一个超级用户 (这里的邮箱和密码要记住,后面登录时候会用到)


阅读剩余部分...

MySQL地理围栏数据处理实践

Publish: April 15, 2020 Category: 编程,代码分享 No Comments

我们本次实践的主要内容

  • 地理围栏数据构建
  • mysql 如何使用geo相关字段类型
  • 围栏算法计算

地理围栏数据构建

使用DDL创建一个数据库模式:

CREATE TABLE `geo_1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fence_point` point NOT NULL COMMENT '中心点',
  `fence_polygon` polygon NOT NULL COMMENT '单个围栏',
  `fence_multipolygon` multipolygon NOT NULL COMMENT '多围栏',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

使用原生sql语句插入几条数据

INSERT INTO `geo_1`(
    `id`,
    `fence_point`,
    `fence_polygon`,
    `fence_multipolygon`
)
VALUES(
    NULL,
    GEOMFROMTEXT('POINT(117.134516 36.672215)'),
    GEOMFROMTEXT(
        'POLYGON((117.147711 36.692958,117.152174 36.664804,117.120588 36.659434,117.116297 36.678848,117.147711 36.692958))'
    ),
    GEOMFROMTEXT(
        'MULTIPOLYGON(((117.143528 36.678686,117.144215 36.676758,117.142927 36.67669,117.142412 36.677997,117.143528 36.678686)),((117.144837 36.675829,117.144794 36.674487,117.143743 36.674659,117.14385 36.675881,117.144837 36.675829)),((117.127574 36.670235,117.124227 36.668858,117.124785 36.666448,117.13075 36.667412,117.127574 36.670235)))'
    )
);

特别要注意的几点:

  • POINT类型是单个点,构建只需要一个POINT类型数据即可
  • POLYGON类型或者MULTIPOLYGON中的数据必须是首位相连,也就是第一组数据和最后一组数据是相同的,以构成一个闭合的多边形。

阅读剩余部分...

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日志清理。集群请参考其他文章。