项目实训(八)

一、

        这一篇讲述一些最后部署中遇到的一些问题,比如云服务器的防火墙问题,在服务器上使用pip3下载库以及定时运行python脚本,和mysql不同版本之间导入sql文件存在的问题等。

二、

        首先是关于云服务器中防火墙的问题,阿里云首先提供了安全组,在之前的博客中我们也曾经介绍过,需要对入方向组添加对应端口才能访问到云服务器,安全组,就是为了服务器安全设置的。其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。

        在购买阿里云ECS服务器的时候,阿里云默认安全组只放行了ICMP协议、SSH 22端口、RDP 3389端口三个端口,访问网站的80或443端口并没有放行

        这里我们添加了我们所需的几个端口:

协议类型,我们选择自定义的TCP;

端口范围,这里要求填写的是一个范围,所以我们要写80/80。

授权对象,这里我们要让所有人都可以访问,所以我们要写0.0.0.0/0

优先级,填一到一百的数字,数字越小,优先级越高好了。

源,0.0.0.0/0代表允许所有ip访问该端口

点击确定我们在安全组里的80端口就已经打开了。除了以上场景,安全组还用于设置内网互通拦截特定的IP和端口,只允许特定的IP来登录服务器,或者只允许读取访问公网上的某个特定的IP。

         下面是一些常用端口:

  • 22:SSH(安全登录)、SCP(文件传输)、端口号重定向
  • 21:FTP(文件传输)协议代理服务器常用端口
  • 39000/40000:FTP被动模式常用端口
  • 80/8080/3128/8081/9098:HTTP协议代理服务器常用端口号
  • 23:Telnet(不安全的文本传送)
  • 3389:windows RDP远程登录
  • 1521:Oracle数据库
  • 3306:MySQL

        我们这里选择了一个非常用端口8443作为我们后端服务器接口 。

        但是在我们实际部署项目的时候发现即使添加了安全组,仍然无法访问到我们所需要访问的接口,经过一系列的实验,最后我们把问题锁定在云服务器操作系统上,很显然,如果操作系统拒绝了对端口的访问,那我们从外部也无法通过端口访问到服务器。

        那么接下来就是对服务器的防火墙进行设置,centos7默认的防火墙从原来的iptables变为了firewalld(阿里云的centos默认没有开启防火墙,但不知道为什么我们的系统开启了)。因此,在使用阿里云服务器时,不仅要在阿里云后端开放端口,同时在关闭centos的防火墙或者在操作系统中也开放对应的端口,才能进行访问。

        1、 /usr/lib/firewalld/services        系统配置目录

        目录中存放定义好的网络服务和端口参数,系统参数,不能修改

        2、 /etc/firewalld/       用户配置目录

        3、自定义添加端口的方法:

firewall-cmd --permanent --add-port=9527/tcp 

参数如下:

1、firewall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;

         4、常用的firewall命令

systemctl start firewalld         # 启动,
systemctl enable firewalld        # 开机启动
systemctl stop firewalld          # 关闭
systemctl disable firewalld       # 取消开机启动
service firewalld restart      # 重启 

firewall-cmd --state    # 查看firewall状态

firewall-cmd –list-all     # 查看防火墙规则

        根据自己的要求添加端口即可。


         下面是有关在阿里云服务器上使用pip3的方法,其实主要是介绍使用镜像的方式,否则会导致在下载库的时候十分缓慢

        进入根目录下(~),查看.pip文件夹是否存在,不存在则创建,进入该目录,创建pip.conf文件,写入如下内容,即可在下载时使用阿里云的镜像:

 


        python查询数据库时可能会出现 当小数点较长时,python会自动将其转为科学技术法,如下:

[{'merchant_price': Decimal('14.00000000'), 'platform_price': Decimal('15.0000000'), 'user_id': 3, 'supplier_price': Decimal('2.00000000')}]

        即使用Decimal对象保存的形式,这样常导致数据不是我们所期望的样式。

        解决方式:


        在写SQL语句时使用如下转换函数:

CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。

语法:CAST (expression AS data_type)

expression:任何有效的SQServer表达式。

可以转换的类型是有限制的。这个类型可以是以下值其中的一个:


二进制 : BINARY
字符型,可带参数 : CHAR()
日期 : DATE
时间: TIME
日期时间型 : DATETIME
浮点数 : DECIMAL
整数 : SIGNED
无符号整数 : UNSIGNED

         最后在python中获取的数据就是我们所需要的类型了。


        下面是有关mysql版本问题导致的sql文件无法执行的问题,因为在本地开发是使用的是本地的数据库,在将本地数据库导出为sql文件,再向服务器数据库导入sql文件是最方便的的方式。这里本地使用的mysql 8.0.22,服务器使用的是mysql 5.6

        在迁移时报错:

ERROR 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci'

        也就是编码的问题,因为高版本mysql和低版本所使用字符集不同导致,因此需要我们将从本地 服务器导出的sql文件中的编码更改:

utf8mb4_0900_ai_ci替换为utf8_general_ci

utf8mb4替换为utf8

        重新保存后即可在在低版本的mysql中运行sql文件。 


         下面是有关在centos操作系统下定时运行python脚本的问题,关于定时运行python程序的问题,其实python自己也提供了调度器完成这个任务。不过这里我觉得直接使用操作系统的定时方法也是简单便捷

        centos中的定时任务:

        在centos中使用crontab进行定时任务的处理,高版本的centos已经安装有crontab。

        在正式使用 crontab 前,需要提前了解一下 crond , crond 和 crontab 是密切相关了, crond 是 linux 中用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows的计划任务类似, crontab 是一个编辑或者说是管理定时任务的工具。
        简单理解就是 crond是一个服务,crontab是一个命令。

        下面是与之相关的命令:

yum install crontabs
systemctl enable crond (开机启动)
systemctl start crond(启动 `crond` 服务)
systemctl stop crond(停止服务)
systemctl restart crond  (重启服务)
systemctl reload  crond (重载配置文件)
systemctl status crond (查看状态)

        crontab文件:

        用户所建立的crontab文件中,每一行都代表一项任务每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute hour day month week command

 crontab -l   # 查看已经开启了哪些定时任务

crontab -u # 设定某个用户的crond服务
crontab -e # 编辑crontab文件(编辑定时任务)
crontab -r  # 删除crontab文件(删除定时任务)
crontab -i  # 删除crontab文件提醒用户(删除定时任务)

        下面是介绍具体的定时任务如何设置,上面已经提到,crontab设置定时任务有如下的格式:

minute hour day month week command

分别代表:分,时,日,月,周,命令

        每个字段的具体设置如下:

 

第1列表示分钟1~59 每分钟用 * 或者 */1 表示;

第2列表示小时1~23(0表示0点);

第3列表示日期1~31;

第4列表示月份1~12;

第5列标识号星期0~6(0表示星期天);

第6列要运行的命令;

* :任意时间,可以代表00-23小时或者00-12每月或者00-59分,例如 0 9 * * * cmd 表示每月每周每日的 9:00 都执行cmd任务;

- :表示一个范围,例如 00 17-19 * * * cmd,就是每天17, 18, 19点的整点执行命令;

, :是分割时段,例如 30 1,3,5 * * * cmd,就是每天凌晨1点30,3点30,5点30都执行命令;

/n :n 为数字,表示分割,每隔 n 单位时间,可以看成除法,*/6 * * * * cmd,每隔6分钟执行一次。

        下面是设置定时任务 ,使用如下命令打开任务文件,向任务文件中写入上述定时命令,一行代表一个定时任务。

        crontab -e # 直接写入定时任务

        service crond reload # 重新加载配置

        service crond restart # 重启crontab

        如下命令 

*/1 1-2 * * * root python3 test1.py > test1.log
*/1 1-2 * * * root python3 test2.py > test2.log

        注意要将所要执行文件的路径写全,> 待表将标准输出定向到后面所指向的文件中。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值