CentOS 下 Nginx 部署免费SSL安全证书 Let's Encrypt (certbot)

关于Let’s Encrypt

Let’s Encrypt 是一个免费、开放,自动化的证书颁发机构,由 ISRG(Internet Security Research Group)运作。

兼容性: Let’s Encrypt 已经得了 IdenTrust 的交叉签名,这意味着其证书现在已经可以被所有主流的浏览器所信任,包括从IE6-IE11,其它现代浏览器更没话说,100%放心使用。

申请频率限制

注册IP限制:每IP每3个小时不超过10次

域名数量限制:每个域名(包含子域名)每7天不超过5个

证书位置

所有版本已申请的证书放在 /etc/letsencrypt/archive下,/etc/letsencrypt/live是指向最新版本的符号链接。web server中关于证书的配置建议指向 live 目录下的文件,以免证书更新后还需要更改配置。

每个域名一个目录,主要包含以下几个文件:

  • cert.pem 申请的服务器证书文件
  • privkey.pem 服务器证书对应的私钥
  • chain.pem 除服务器证书外,浏览器解析所需的其他全部证书,比如根证书和中间证书
  • fullchain.pem 包含服务器证书的全部证书链文件

证书更新

阅读更多

解决 vim 粘贴内容缩进错乱问题

平时经常用vim编辑服务器端一些配置文件和脚本,当复制粘贴内容时,会因为自动缩进把代码缩进搞乱了。

解决办法:进入粘贴模式粘贴内容

1
:set paste

我们不能直接通过修改配置来适应粘贴内容,因为粘贴模式下配置变化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
textwidth = 0
wrapmargin = 0
set noai
set nosi
softtabstop = 0
revins 重置
ruler 重置
showmatch 重置
formatoptions 使用空值

# 下面的选项值不变,但却被禁用:
lisp
indentexpr
cindent

Python项目提交成 pip 包

注册账号

注册登录 https://pypi.org/ 账号,在 “Account Setting” 中点击 “Add API token”,把创建好的 token 保存起来。

创建 setup.py 文件

setup.py 设置包的参数,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from distutils.core import setup
from setuptools import find_packages

with open("README.rst", "r") as f:
long_description = f.read()

setup(
name='', # 包名
version='1.0.0', # 版本号
description='A small example package',
long_description=long_description,
author='',
author_email='',
url='',
install_requires=[],
license='MIT',
packages=find_packages(),
platforms=["all"],
classifiers=[
'Intended Audience :: Developers',
'Operating System :: OS Independent',
'Natural Language :: Chinese (Simplified)',
'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Topic :: Software Development :: Libraries'
],
)

重要参数说明:

  • name:项目的名称,name是包的分发名称。
  • version:项目的版本。需要注意的是,PyPI上只允许一个版本存在,如果后续代码有了任何更改,再次上传需要增加版本号
  • author和author_email:项目作者的名字和邮件, 用于识别包的作者。
  • description:项目的简短描述
  • long_description:项目的详细描述,会显示在PyPI的项目描述页面。必须是rst(reStructuredText) 格式的
  • packages:指定最终发布的包中要包含的packages。
  • install_requires:项目依赖哪些库,这些库会在pip install的时候自动安装
  • classifiers:其他信息,一般包括项目支持的Python版本,License,支持的操作系统。

pip 安装需要的包

1
pip install setuptools wheel twine

打包&发布

执行命令

1
2
3
4
# 打包
python setup.py sdist build
# 发布
twine upload dist/*

弹出的 username 输入:__token__,密码输入前面创建的 API token,这样就发布好 pip 包了。

这个密码每次要输入比较麻烦,执行如下配置就可以省掉输入账号密码的步骤:

在系统用户文件夹中创建 .pypirc 文件,输入内容:

1
2
3
[pypi]
username = __token__
password = 前面创建的 API token