最佳实践
你不知道的 Docker 使用技巧
· ☕ 2 分钟
1. 分阶段构建 编译项目需要借助一系列特定的工具,但在运行阶段并不需要这些工具。为了减小镜像体积,可以分阶段构建。在第一阶段进行构建,然后将编译生成的文件传入下一个阶段,生成更小体积的镜像。 1 2 3 4 5 6 7 8 9 10 11 FROM golang:1.12 as builder COPY / /go/src/github.com/shaowenchen/goproject WORKDIR /go/src/github.com/shaowenchen/goproject RUN CGO_ENABLED=0 GO111MODULE=on GOOS=linux GOARCH=amd64 GOFLAGS=-mod=vendor go

从账户安全到二次验证
· ☕ 3 分钟
1. 安全问题日趋严重 随着互联网对生活场景的层层渗透,我们越来越依赖于各种网络 ID。这些 ID 构成了数字版的我们,是极其重要的账户资产。 另一方面,各种账户信息泄露事件、安全事件却时有发生,CSDN、12306、华住酒店、Facebook、Twitt

敏捷开发之研发流程
· ☕ 3 分钟
1. 敏捷开发是什么 在传统的软件研发模型中,从提出需求到最后交付,时间周期较长。瀑布模型遵循需求分析、设计、编码、集成、测试、维护六个步骤进行。一旦需求发生变化,不仅浪费前期投入,还不易于调整。 敏捷开发是一种应对快速变化的需求的软件开发能力。特

Pytest 入门学习
· ☕ 3 分钟
Pytest 测试框架使用简单、插件丰富、功能强大,被广泛用于 Python 自动化测试。本文主要介绍一些 Pytest 的基本概念和使用方法。 1. 运行机制 第一步,Pytest 从命令行或文件中读取配置 第二步,在指定目录下查找并导入 conftest.py 文件 第三步,查找满足匹配条件的测试文件,通常是 test_ 开

Nginx 配置问题记录
· ☕ 1 分钟
1. server_name 无效 现象:Nginx 反向代理了两个应用,配置详情如下。发现访问 b.chenshaowen.com 和 a.chenshaowen.com 时,返回的都是 A 服务的请求。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 server { listen 80; server_name a.chenshaowen.com; location / { proxy_pass http://A; } } server { listen 8080; server_name b.chenshaowen.com; location / { proxy_pass http://B; } } 原因:当所有 server 的规则都不匹配时,Nginx 会采用第一条