本文基于华为云云耀云服务器L实例下的场景体验开源软件Domain Admin的安装部署,实现SSL证书的到期提醒
目录
1、购买华为云耀云服务器L实例
打开华为云耀云服务器L实例购买地址
https://www.huaweicloud.com/product/hecs-light.html
购买步骤:
-
点击
购买
按钮跳转到 【云耀云服务器L实例】 产品购买页 -
选择规格:
- 区域
华北-北京四
- 系统镜像
CentOS 7.9
- 实例规格
2核|2G
- 购买时长
1个月
- 购买数量
1
- 区域
此时可以看到价格:配置费用:¥55.02
,点击立即购买
,跳转到 【订单配置确认】 页
- 确认购买实例参数
- 勾选协议许可
点击去支付
按钮,跳转到【购买云耀云服务】订单支付页
- 支付订单
勾选华为云代金券
点击 去在线支付
按钮,选择适合自己的支付方式,我实际支付0.03
元
2、登录服务器
回到控制台,找到自己刚刚购买的服务器实例
2.1、重置密码
考虑到网页版的控制终端操作起来不舒服,所以我们使用本地终端连接服务器
先重置密码,可以通过在线工具很方便的生成一个随机密码
https://mouday.github.io/tools/pages/password/index.html
2.2、连接服务器
通过ssh命令,通过公网地址连接服务器
ssh root@<服务器公网IP>
Welcome to Huawei Cloud Service
如果连接正确,可以看到华为云的欢迎词
3、安装Domain Admin
Domain Admin是一个基于Python + Vue3.js 技术栈实现的域名和SSL证书监测平台
用于解决,不同业务域名SSL证书,申请自不同的平台,到期后不能及时收到通知,导致线上访问异常,被老板责骂的问题
Domain Admin 安装文档
https://domain-admin.readthedocs.io/zh_CN/latest/manual/install.html
3.1、检查Python
$ python --version
Python 2.7.5
可以看到,华为云镜像 CentOS 7.9
默认安装了Python 2.7.5
3.2、检查pip
检查pip安装情况
pip -V
-bash: pip: 未找到命令
发现pip并未安装,所以,接下来我们需要安装pip
为了方便管理,我们安装的软件统一放到/opt
文件夹下
cd /opt
安装pip
# 下载get-pip
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
# 安装
python get-pip.py
# 检查
pip -V
pip 20.3.4 from /usr/lib/python2.7/site-packages/pip (python 2.7)
3.3、安装Domain Admin
安装 domain-admin
和gunicorn
gunicorn,“Green Unicorn”是用于UNIX的Python WSGI HTTP服务器,可以用它作为domain-admin的服务器
# 使用清华源镜像
pip install gunicorn domain-admin
由于没有设置pip镜像,下载速度较慢,需要等待一会
如果速度太慢,也可以使用国内镜像进行加速
# 使用清华源镜像
pip install gunicorn domain-admin -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn
## 当然也可以选择华为云镜像
pip install fabric -i https://repo.huaweicloud.com/repository/pypi/simple --trusted-host https://repo.huaweicloud.com
3.4、启动
可以让服务监听80端口
gunicorn --bind '0.0.0.0:80' 'domain_admin.main:app'
3.5、开放端口
检查安全组,发现仅开放了22端口,我们还需要开放80端口
用于web访问
4、使用Domain Admin
通过公网IP就可以访问,输入默认的账号密码登录(账号:admin / 密码:123456),添加需要监控的域名即可
更多使用帮助,可以参考他的文档:
- https://github.com/mouday/domain-admin
这样一来,周末就可以睡个安稳觉了,再也不怕周末线上出现这种低级异常导致奖金被扣了。
5、遇到的问题
由于版本兼容的问题,我们不可避免的会遇到一些奇怪的问题
首先,遇到问题先别慌,看报错日志,根据日志就可以排查问题,进而对症下药,有效解决问题
首先可以明确的是:domain-amdin 同时兼容Python2.7和Python3。所以可以排除domain-amdin的问题。
5.1、No matching distribution found for invoke>=2.0
安装domain-admin的是时候,发现依赖fabric包安装错误
ERROR: Could not find a version that satisfies the requirement invoke>=2.0
(from fabric)
(from versions:
0.2.0, 0.3.0, 0.4.0, 0.5.0, 0.5.1, 0.6.0, 0.6.1, 0.7.0, 0.8.0, 0.8.1, 0.8.2,
0.9.0, 0.10.0, 0.10.1, 0.11.0, 0.11.1, 0.12.0, 0.12.1, 0.12.2, 0.13.0, 0.14.0,
0.15.0, 0.16.0, 0.16.1, 0.16.2, 0.16.3, 0.17.0, 0.18.0, 0.18.1, 0.19.0, 0.20.0,
0.20.1, 0.20.2, 0.20.3, 0.20.4, 0.21.0, 0.22.0, 0.22.1, 0.23.0, 1.0.0, 1.0.1,
1.0.2, 1.1.0, 1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.4.0, 1.4.1, 1.5.0, 1.5.1, 1.6.0,
1.7.0, 1.7.1, 1.7.2, 1.7.3)
ERROR: No matching distribution found for invoke>=2.0 (from fabric)
通过pypi上的发布历史和版本兼容情况,我们发现最新版本的fabric 3.2.2
已经不支持Python2.7
了
https://pypi.org/project/fabric/2.7.1/
所以,我们选择一个支持Python2.7
的版本,手动安装
pip install fabric==2.7.1
再次执行安装命令
pip install gunicorn domain-admin -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn
安装成功
5.2、ImportError: No module named abc
执行启动命令发现 flask_cors 也有问题
from flask_cors import CORS
File "/usr/lib/python2.7/site-packages/flask_cors/__init__.py", line 11, in <module>
from .decorator import cross_origin
File "/usr/lib/python2.7/site-packages/flask_cors/decorator.py", line 16, in <module>
from .core import get_cors_options, set_cors_headers, FLASK_CORS_EVALUATED
File "/usr/lib/python2.7/site-packages/flask_cors/core.py", line 12, in <module>
from collections.abc import Iterable
ImportError: No module named abc
解决办法就是降级Flask-Cors,找一个兼容python2.7版本的包即可
pip install Flask-Cors==3.0.10 --trusted-host repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple
5.3、AttributeError: ‘datetime.datetime’ object has no attribute ‘timestamp’
APScheduler 也报错了
scheduler_service.init_scheduler()
File "/usr/lib/python2.7/site-packages/domain_admin/service/scheduler_service.py", line 102, in init_scheduler
scheduler.start()
File "/usr/lib/python2.7/site-packages/apscheduler/schedulers/background.py", line 35, in start
BaseScheduler.start(self, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/apscheduler/schedulers/base.py", line 167, in start
self._real_add_job(job, jobstore_alias, replace_existing)
File "/usr/lib/python2.7/site-packages/apscheduler/schedulers/base.py", line 863, in _real_add_job
replacements['next_run_time'] = job.trigger.get_next_fire_time(None, now)
File "/usr/lib/python2.7/site-packages/apscheduler/triggers/cron/__init__.py", line 179, in get_next_fire_time
next_date, fieldnum = self._increment_field_value(next_date, fieldnum - 1)
File "/usr/lib/python2.7/site-packages/apscheduler/triggers/cron/__init__.py", line 147, in _increment_field_value
return normalize(dateval + difference), fieldnum
File "/usr/lib/python2.7/site-packages/apscheduler/util.py", line 431, in normalize
return datetime.fromtimestamp(dt.timestamp(), dt.tzinfo)
AttributeError: 'datetime.datetime' object has no attribute 'timestamp'
解决办法同样是降级APScheduler
pip install APScheduler==3.8.1 --trusted-host repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple
6、总结
通过使用华为云云耀云服务器L实例进行实际评测,满足企业正常的需求,默认安装了Python2.7,很容易部署第三方应用。
Domain Admin只是众多开源软件中一个应用,还有很多应用也可以部署到华为云服务器上面使用。虽然安装过程遇到一些问题,不过很快就解决了。并且这些问题本身也不是华为云服务器的问题,其他家的服务器也会遇到这样的问题。根本原因是Python版本和pip包版本的兼容性问题,知道了问题的根本所在,就很容易顺藤摸瓜,找到解决办法。而且本次使用的是华为云服务器的CentOS 7.9
镜像,和其他云服务器产商的镜像是一样的,所以是一个CentOS的问题。
至此,购买、登录、安装部署第三方应用、并且解决了遇到的问题,完成了整个流程,学习到了使用华为云云耀云服务器L实例的方式,同时也为中国云服务器商的崛起二自豪,他们提供了云服务器,让企业很容易使用云资源,简单的购买配置就可以实现自身业务需要的功能。这也是中国互联网经济的基础,为互联网的腾飞提供了必要的基础设施保障。