问题来源
Letsencrypt
依赖python 2.7
及以上,而CentOS 6.5
又只支持到2.6,每次执行letsencrypt
都会卡在升级上,总是过不去,最后决定使用docker
解决此问题。
步骤
安装docker
docker
缺省要求CentOS 7
,但实际在CentOS 6.5
上也是可以安装的,只不过包名不叫docker
,而是docker-io
。
yum install docker-io
配置国内镜像
如你所知,docker
在国内访问不了,所以需要配置国内镜像,按照这篇文章的说法:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://ed92cb97.m.daocloud.io
然后,你需要重新启动docker
服务:
service docker restart
错误
很有可能,这时你的docker起不来:
Cannot connect to the Docker daemon. Is 'docker -d' running on this host?
ps aux | grep docker
也看不到docker进程。当你执行docker -d
命令时:
INFO[0000] Listening for HTTP on unix (/var/run/docker.sock)
INFO[0000] [graphdriver] using prior storage driver "devicemapper"
WARN[0000] Running modprobe bridge nf_nat failed with message: , error: exit status 1
FATA[0000] Error starting daemon: Error initializing network controller: Error creating default "bridge" network: can't find an address range for interface "docker0"
这时,你需要vi /etc/sysconfig/network-scripts/route-eth0
,把其中有172.16.0.0
的这一行注释掉,在前面加一个#
号。然后:
route del -net 172.16.0.0 netmask 255.240.0.0
/etc/init.d/network restart
再次执行service docker restart
,然后,执行ps aux | grep docker
,你会看到docker进程已启动。
运行
装好之后,就可以执行了:
docker run --rm -it -v "/var/log/letsencrypt:/var/log/letsencrypt" -v "/etc/letsencrypt:/etc/letsencrypt" lojzik/letsencrypt renew
几个参数解释一下:--rm
表示删除container
,每次执行完之后,需要把container
删除,否则系统里留一堆没用的container
很浪费。-it
表示交互。-v
表示把我们本系统的目录配置给container
使用,冒号前面是本系统的路径,冒号后面是container
里的路径。因为我们之前已经在本系统安装过letsencrypt
并且配置过了,所以直接用相同的就可以。
后面是包名。
再往后是所执行的命令,在这里我只需要执行renew
就好了,其它命令同certbot
。
运行完之后可以执行
docker images
看一下,系统自动下载了一个letsencrypt
的image
进来,只是第一次下,以后就不需要下了。
可以执行docker ps -a
检查确保没有垃圾container
留在系统里。如果有的话,执行docker rm container-name
删除之。
利用docker
,我们实现了完全不依赖CentOS
的独立python
以及letsencrypt
,这样不管你系统是什么,都不会影响letsencrypt
的正常使用。
关于letsencrypt
的安装和使用,请参考我前面的文章。