Captain的个人博客

Acme.sh申请免费ssl证书

acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.

主要步骤:

  1. 安装 acme.sh
  2. 生成证书
  3. copy 证书到 nginx/apache 或者其他服务
  4. 更新证书
  5. 更新 acme.sh
  6. 出错怎么办, 如何调试

下面详细介绍.

1. 安装 acme.sh

安装很简单, 一个命令:

通过实例理解Web应用用户密码存储方案

1. Web应用用户密码存储的重要性

用户密码是访问Web应用的关键,它直接关乎到用户账号和应用数据的安全。

如果用户密码被泄露或破解,将导致严重后果。后果最轻的算是某个用户或某少数用户的账号被盗用了,用户将失去对账号的控制。盗用账号后,攻击者可以获取该用户的私密信息,或进行额外的攻击;如果用户在多个应用重复使用同一密码,那么后果将进一步严重,用户的一系列账号都将受到安全威胁;更为严重的是Web应用存储用户账号信息的数据库被攻破(俗称“脱库”),攻击者会拿到存储的全部用户账号信息等,如果用户密码存储不当,攻击者可以很容易破译所有用户的密码,并基于这些密码信息做进一步的攻击。

Docker部署Redis集群及集群伸缩

1. Docker部署Redis集群及集群伸缩

1.1. 创建6个data目录

1 mkdir /mnt/data/6381
2 mkdir /mnt/data/6382
3 mkdir /mnt/data/6383
4 mkdir /mnt/data/6384
5 mkdir /mnt/data/6385
6 mkdir /mnt/data/6386

1.2. 官网下载最新的redis包

1 wget http://download.redis.io/releases/redis-6.0.6.tar.gz

1.3. docker拉取对应的redis镜像

1 docker pull redis:6.0.6

1.4. 修改配置文件

1 [root@localhost ~]# cp redis-6.0.6/redis.conf /mnt/redis.conf
2 [root@localhost ~]# vim /mnt/redis.conf
3 # bind 127.0.0.1 "注释bind 127.0.0.1"
4 protected-mode no   #"将 protected-mode yes 改为 protected-mode no "
5 # daemonize yes  "注释daemonize yes, 或改为no"
6 cluster-enabled yes #"启用集群配置"
7 cluster-config-file nodes-6381.conf #"节点配置文件"
8 cluster-node-timeout 5000 # "节点通信超时时间5s"

1.5. 启动6台redis容器

1 docker run -p 6381:6379 --name redis01 -v /mnt/redis.conf:/etc/redis/redis.conf -v /mnt/data/6381:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
2 docker run -p 6382:6379 --name redis02 -v /mnt/redis.conf:/etc/redis/redis.conf -v /mnt/data/6382:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
3 docker run -p 6383:6379 --name redis03 -v /mnt/redis.conf:/etc/redis/redis.conf -v /mnt/data/6383:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
4 docker run -p 6384:6379 --name redis04 -v /mnt/redis.conf:/etc/redis/redis.conf -v /mnt/data/6384:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
5 docker run -p 6385:6379 --name redis05 -v /mnt/redis.conf:/etc/redis/redis.conf -v /mnt/data/6385:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
6 docker run -p 6386:6379 --name redis06 -v /mnt/redis.conf:/etc/redis/redis.conf -v /mnt/data/6386:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

1.6. 查看各容器IP

 1 [root@localhost ~]# docker inspect redis01 | grep "172.17"
 2 172.172.0.2
 3 [root@localhost ~]# docker inspect redis02 | grep "172.17"
 4 172.172.0.3
 5 [root@localhost ~]# docker inspect redis03 | grep "172.17"
 6 172.172.0.4
 7 [root@localhost ~]# docker inspect redis04 | grep "172.17"
 8 172.172.0.5
 9 [root@localhost ~]# docker inspect redis05 | grep "172.17"
10 172.172.0.6
11 [root@localhost ~]# docker inspect redis06 | grep "172.17"
12 172.172.0.7

1.7. 进入任一容器配置集群(遇yes敲yes)

1 redis-cli --cluster create 172.17.0.2:6379 172.17.0.3:6379 172.17.0.4:6379 172.17.0.5:6379 172.17.0.6:6379 172.17.0.7:6379  --cluster-replicas 1

1.8. 查看集群信息

1 root@d5fb8214a10a:/data# cat nodes-6379.conf 
2 748eb947ae5ac0c721740870ad44cb356a4b0ca5 172.17.0.4:6379@16379 master - 0 1598101846000 3 connected 10923-16383
3 8e986c400c6b0d47064ee2fbf7a391574042dbc4 172.17.0.6:6379@16379 slave 092994cf7044995d41a876370af56c97894adea0 0 1598101846000 1 connected
4 df1c66d381237ed63a6a6045c84942b7a7f9df9 172.17.0.5:6379@16379 slave 748eb947ae5ac0c721740870ad44cb356a4b0ca5 0 1598101847085 3 connected
5 092994cf7044995d41a876370af56c97894adea0 172.17.0.2:6379@16379 myself,master - 0 1598101844000 1 connected 0-5460
6 220fba07c2e345c8aa4578e8bb3b45451377d335 172.17.0.7:6379@16379 slave bb02a3720ff638ea7edb147580e9ffa1dce29726 0 1598101845000 2 connected
7 bb02a3720ff638ea7edb147580e9ffa1dce29726 172.17.0.3:6379@16379 master - 0 1598101846077 2 connected 5461-10922
8 vars currentEpoch 6 lastVoteEpoch 0

1.9. 集群取存测试

1 172.17.0.2:6379>cluster nodes      # 查看本机信息
2 172.17.0.2:6379>cluster info       # 查看集群信息
3 172.17.0.2:6379>set lan golang     # master插入数据(可能会报错,叫我们去别的实例存)
4 172.17.0.3:6379>get lan            # node查询数据
5 (error) MOVED 5798 172.17.0.2:6379 # 告诉我们该数据在172.17.0.2上
6 172.17.0.5:6386> keys *            # 查键          
7 1) "lan"

解决(error) MOVED问题

Golang常用库之UUID

1. 什么是UUID?

通用唯一标识符 (UUID) 是一种特定形式的标识符,在大多数实际用途中可以安全地认为是唯一的。两个正确生成的 UUID 相同的可能性几乎可以忽略不计,即使它们是由不同的各方在两个不同的环境中创建的。这就是为什么说 UUID 是普遍唯一的。

Dockerfile操作指令

1. DockerFile介绍

dockerfile是用来构建dokcer镜像的文件!命令参数脚本! 通过以下脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!