埋头工作
专职养娃

Python-socketio介绍01

xinyigirl阅读(693)

Python-socketio其实是socket.io的一种python实现,其实在python中socketio还有一个叫[Githug]flask-socketio,看名字就能看得出来这个sockeio是和flask框架进行结合的,这篇文章对这个不做任何介绍了,因为在web框架上我们的首选是django,但是如果你自习去看flask-socketio的文档的话,你可以看出关于socketio的通信部分的语法都是一模一样的,区别大不。

一、socketio基本说明

Socket.io是一个WebSocket库,包括了客户端的js服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用。它会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,非常方便和人性化,而且支持的浏览器最低达IE5.5,主要特点如下:

  • 实时分析:将数据推送到客户端,这些客户端会被表示为实时计数器,图表或日志客户。
  • 实时通信和聊天:只需几行代码便可写成一个Socket.IO的”Hello,World”聊天应用。
  • 二进制流传输:从1.0版本开始,Socket.IO支持任何形式的二进制文件传输,例如:图片,视频,音频等。
  • 文档合并:允许多个用户同时编辑一个文档,并且能够看到每个用户做出的修改。

socket.io是要求前后端必须配套使用的,如果你准备在前段使用socket.io来进行websocket通信,那么服务器端就必须使用socketio,否则websocket是建立不起来的。我们都知道在前段上是没得选择的,只能使用socket.io.js来进行实现,但是在后台的选择上我们可以采用多种方式,具体可以查看socket.io官网的说明。主要有下面的几种

而我们的选择就是python版本的实现,python-socketio。

二、Python-socketio概览

Python-socketio的文档写的相对比较详细,查看官方的文档内容,一定程度能够提前让自己有比较详尽的概念和了解,但是具体编码的时候建议还是看下github上的样例,感觉英文的官方文档虽然能看懂,但是理解上总感觉有偏差,还是直接看样例代码比较靠谱。

python-socketio因为只是一个实时通信的框架,在后台上还是要依托一个http server框架来进行运行,那么在官方的文档里面,提供了很多种的实现方式,比如tornado,uwsgi,gevent等等。也包括前面提到的flask,django这些web框架。

python-socketio的server端的服务器功能跟socket.io nodejs版本的功能没啥大的区别,都包含了连接,断开,消息发送,广播等等多种消息,但是在消息体上还是有一定的区别,这点需要注意,尤其是要将nodejs实现的socket.io替换为python-socketio的时候,尤其要注意。

nodejs上server端向前台发送消息可以直接这样写

sio.emit(“eventname”,arg1,arg2,arg3)

然后前端获取到的就是一个数组

[“eventname”,arg1,arg2,arg3]

但是在python-socketio中就不能这么写,这个可以看下源码的参数

def emit(self, event, data=None, to=None, room=None, skip_sid=None,
namespace=None, callback=None, **kwargs):

那么在写的时候就必须把所有要发送给client前段的字段进行打包,比如使用下面的方式

sio.emit(“eventname”,json.dumps([arg1,arg2,arg3])),

然后前端获取到的就是另外一个结构[“eventname”,[arg1,arg2,arg3]]

这样就能确保前段无感了。

其他地方几乎没有变化,直接替换即可。

 

 

 

 

 

实时通信技术简述

xinyigirl阅读(722)

之前从来没有了解过socketio,或者说连polling、websocket此类全双工通信协议的使用概念都没有,但是突然要做一个使用此类技术的项目,于是赶鸭子上架,开学了扫盲和搬码,在搬码之前总得让自己有一些基础的概念,下面是从网络上了解到和收集到的一些知识。

一、综述

http:http是一种面向连接(基于TCP协议)的单向的通信协议,总的来说就是客户端发送一个request请求(GET、POST、PUT……),然后服务器接到请求之后,经过后台的处理,将数据通过response发送回客户端。从这个简单的描述可以看出,服务器是一个被动接收者。更加详细的内容可以参见http协议说明,或者这篇通俗的文章——《HTTP粗解》(人家原名叫详解,说实在的详的太粗……)

但是我们在很多的实际应用中,我们是需要前后端保持一种实时的通信的,又或者说服务器也需要能够主动联系到客户端,或者我们需要实时从服务器获取最新的数据(如股票交易等),总不能让用户不停的刷新浏览器吧,比如我们的即时通信,又比如我们现在的各种直播啊,聊天室啊等等。这样就慢慢延伸出来了新的技术

Comet:它会延迟完成 HTTP 响应以将消息传递到客户端。基于 Comet 的推送一般采用 JavaScript 实现并使用长连接或流等连接策略。 基于 HTTP 长连接的“服务器推”技术。基于这种架构开发的应用中,服务器端会主动以异步的方式向客户端程序推送数据,而不需要客户端显式的发出请求。Comet 架构非常适合事件驱动的 Web 应用,以及对交互性和实时性要求很强的应用,如股票交易行情分析、聊天室和 Web 版在线游戏等。

polling:浏览器定期发送 HTTP 请求并立即接收响应,这项技术是浏览器首次尝试传递实时信息。显然,如果消息传递的确切时间间隔已知,这是一个很好的解决方案,因为可以在服务器上先把需要发送的信息准备好之后在发送给客户端。然而,实时数据通常是不可预测的,这必然造成许多不必要的请求,因此,在低频率消息的情况下,许多连接被不必要地打开和关闭的

Long-Polling (长轮询):长轮询是让服务器在接收到浏览器所送出 HTTP 请求后,服务器会等待一段时间,若在这段时间里面服务器有新的消息,它就会把最新的消息传回给浏览器,如果等待的时间到了之后也没有新的消息的话,就会送一个回应给浏览器,告知浏览器消息没有更新。虽然轮询可以减少产生原本轮询造成网络带宽浪费的情况,但是,如果在资料更新频繁的状况下,长时间轮询不传统比传统的轮询有效率,而且有时候资料量很大时,会造成连续的轮询不断产生,反而会更糟糕。

WebSocket:是一种在单个TCP连接上进行全双工通信的协议。在WebSocket API中,浏览器和服务器只需要完成一次握手(不是指建立TCP连接的那个三次握手,是指在建立TCP连接后传输一次握手数据),两者之间就直接可以创建持久性的连接,并进行双向数据传输。Websocket使用和 HTTP 相同的 TCP 端口,可以绕过大多数防火墙的限制。默认情况下,Websocket协议使用80端口;运行在TLS之上时,默认使用443端口。

Socket.IO :原本一个面向实时 web 应用的 JavaScript 库,现在已成为拥有众多语言支持的Web即时通讯应用的框架。Socket.IO 主要使用WebSocket协议。但是如果需要的话,Socket.io可以回退到几种其它方法,例如Adobe Flash Sockets,JSONP拉取,或是传统的AJAX拉取,并且在同时提供完全相同的接口。尽管它可以被用作WebSocket的包装库,它还是提供了许多其它功能,比如广播至多个套接字,存储与不同客户有关的数据,和异步IO操作。Socket.IO 不等价于 WebSocket,WebSocket只是Socket.IO实现即时通讯的其中一种技术依赖,而且Socket.IO还在实现WebSocket协议时做了一些调整

二、Websocket和Socket.io的优缺点对比

WebSocket Socket.io
节省资源开销:服务器到客户端的内容,头部大小只有2至10字节(和数据包长度有关),而HTTP请求每次都要携带完整的头部。
更强的实时性:因为协议是全双工的,所以服务器可以随时主动给客户端下发数据。
保持连接状态:Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。
更好的二进制支持:Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。
可扩展:Websocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如部分浏览器支持压缩等。
更好的压缩效果:相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率。
没有同源限制:客户端可以与任意服务器通信。
可以发送文本,也可以发送二进制数据。
优点:

Socket.IO 会自动选择合适双向通信协议,仅仅需要程序员对套接字的概念有所了解。

有Python库的实现,可以在Python实现的Web应用中去实现IM后台服务。

缺点:

Socket.io并不是一个基本的、独立的、能够回退到其它实时协议的WebSocket库,它实际上是一个依赖于其它实时传输协议的自定义实时传输协议的实现。该协议的协商部分使得支持标准WebSocket的客户端不能直接连接到Socket.io服务器,并且支持Socket.io的客户端也不能与非Socket.io框架的WebSocket或Comet服务器通信。因而,Socket.io要求客户端与服务器端均须使用该框架。

文章内容参考下面的帖子

1)即时通信WebSocket 和Socket.IO

2)【HTTP协议】—HTTP协议详解

【问题】Pymysql不兼容导致的migrate失败的问题

xinyigirl阅读(657)

这个问题导致我自己做的一个平台在迁移之后,一周都没成功开起来,真心是吃了大亏。

【背景】本人在2018年开发的一套小系统,用的是python3.6+django1.8+mysql6.5进行搭建的,然后数据库连接器用的是PyMysql;系统运行了半年,因为部署在一台普通pc上面,结果pc主机整个挂了,只把mysql的备份抢救了回来。在重新搭建环境的时候,决定同步把版本升上去。于是生产环境就变成了python3.6+django2.2+mysql8.0。结果就出现了python manage makemigrations成功,但是python manage migrate的时候一直吊死。

【解决过程】

1、尝试重装了django,mysql,重建数据库,重装pymysql,失败,还是吊死。

2、尝试删除migrations文件夹里面的迁移记录,失败,还是吊死。

3、我试着查看migrate的语句,检查没问题。 python manage.py sqlmigrate app_name 0001_initial

3、python、django、mysql不能换,只能换数据库连接器了,于是删掉了pymysql,然后用回mysqlclient;然后修改setting配置,竟然成功了!!!

【结论】

真正的原因我没有技术能力找到,网上说的那些兼容性问题,我也没碰到,我只是逃避了问题,换了一种解决方案,如果有谁碰到相同的问题,没精力的话,可以用的办法进行规避解决。

1)安装mysqlclient: pip install mysqlclient

2)修改setting.py中数据库配置部分

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '******',
'USER': '**********',
'PASSWORD': '********************',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}

3)数据库同步迁移

python manage makemigrations

python manage migrate 

4)开启服务

用apach开启 httpd

原生开启:python manage runserver *.*.*.*:8081  

 

Centos7安装Mysql8新手教程

xinyigirl阅读(768)

Mysql自从被Oracle收购之后,逐步有了收费的迹象,现在Mysql的版本也多了起来,主要有下面四种

  • Oracle Mysql云服务:基于MySQL企业版,由Oracle云提供支持——商业,收费
  • MySQL企业版:包含了最全面的MySQL高级功能和管理工具——商业,收费
  • MySQL Cluster CGE:是一个实时开源事务数据库,专为在高吞吐量条件下快速,永久地访问数据而设计——商业,收费
  • MySQL社区版——目前开源,免费,因此这也是现在大家安装的首选。
    • MySQL Community Server GPL版本
    • MySQL Cluster GPL版本
    • MySQL Router GPL版本
    • *** GPL版本

一、安装环境

操作系统:Centos7.6.1810 x86_64位

[root@madecentos ~]# ll /etc/*centos*
-rw-r–r–. 1 root root 38 Nov 23 2018 /etc/centos-release
-rw-r–r–. 1 root root 51 Nov 23 2018 /etc/centos-release-upstream
[root@madecentos ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
[root@madecentos ~]# cat /etc/centos-release-upstream
Derived from Red Hat Enterprise Linux 7.6 (Source)
[root@madecentos ~]# uname -a
Linux madecentos.novalocal 3.10.0-957.12.2.el7.x86_64 #1 SMP Tue May 14 21:24:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[root@madecentos ~]#

数据库:Mysql8.0.16(最新版20190702)

可以从Mysql官网进行RPM包下载,然后源码安装。

https://dev.mysql.com/downloads/mysql/

二、开工安装

1、删除mariadb:由于Centos系统自带了Mariadb数据库,这属于mysql的一个分支,但是版本太低,无法兼容MySQL8的安装,所以需要先进行卸载,不信邪的你也可以先不卸载,直接安装,后面会报错。

rpm -qa |grep mariadb

如果有输出mariadb的包,那么执行下面的删除,注意加上–nodeps参数,否则会报错,提示这个数据库被其他包依赖使用

rpm -e mariadb-libs-5.5.56-2.el7.x86_64 –nodeps

2、上传提前下载的Mysql RPM包

  • 如果你能联网,可以直接wget下载(连接就是上图中的“Download获取的包”)
  • 如果不能,就像我一样,提前下载好,通过WinSCP软件上传都centos中。
  • 创建文件夹,并将文件放到文件夹内
  • [root@madecentos ~]# mkdir -p /usr/local/mysql
    [root@madecentos ~]# cp /home/centos/mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar /usr/local/mysql/
    [root@madecentos ~]# cd /usr/local/mysql/
    [root@madecentos mysql]# ls
    mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar

3、解压安装包

[root@madecentos mysql]# tar -xvf mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar
mysql-community-libs-8.0.16-2.el7.x86_64.rpm
mysql-community-embedded-compat-8.0.16-2.el7.x86_64.rpm
mysql-community-devel-8.0.16-2.el7.x86_64.rpm
mysql-community-server-8.0.16-2.el7.x86_64.rpm
mysql-community-libs-compat-8.0.16-2.el7.x86_64.rpm
mysql-community-client-8.0.16-2.el7.x86_64.rpm
mysql-community-common-8.0.16-2.el7.x86_64.rpm
mysql-community-test-8.0.16-2.el7.x86_64.rpm
[root@madecentos mysql]# ll
total 1185680
-rw-r–r–. 1 root root 607068160 Jul 1 08:24 mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar
-rw-r–r–. 1 7155 31415 33432660 May 3 04:38 mysql-community-client-8.0.16-2.el7.x86_64.rpm
-rw-r–r–. 1 7155 31415 588520 May 3 04:38 mysql-community-common-8.0.16-2.el7.x86_64.rpm
-rw-r–r–. 1 7155 31415 5712552 May 3 04:38 mysql-community-devel-8.0.16-2.el7.x86_64.rpm
-rw-r–r–. 1 7155 31415 24493344 May 3 04:38 mysql-community-embedded-compat-8.0.16-2.el7.x86_64.rpm
-rw-r–r–. 1 7155 31415 3127296 May 3 04:38 mysql-community-libs-8.0.16-2.el7.x86_64.rpm
-rw-r–r–. 1 7155 31415 2177156 May 3 04:38 mysql-community-libs-compat-8.0.16-2.el7.x86_64.rpm
-rw-r–r–. 1 7155 31415 422672748 May 3 04:39 mysql-community-server-8.0.16-2.el7.x86_64.rpm
-rw-r–r–. 1 7155 31415 114848996 May 3 04:40 mysql-community-test-8.0.16-2.el7.x86_64.rpm

4、开始逐个安装解压之后的rpm包

注意这里面的rpm包之间是有依赖关系的,我是一个一个试着安装,而且中间会报缺少其他依赖包,然后找出的顺序,比如下面的这个。。。。

[root@work.xinyigirl.com mysql]# rpm -ivh mysql-community-server-8.0.16-2.el7.x86_64.rpm
warning: mysql-community-server-8.0.16-2.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
libaio.so.1()(64bit) is needed by mysql-community-server-8.0.16-2.el7.x86_64
libaio.so.1(LIBAIO_0.1)(64bit) is needed by mysql-community-server-8.0.16-2.el7.x86_64
libaio.so.1(LIBAIO_0.4)(64bit) is needed by mysql-community-server-8.0.16-2.el7.x86_64
mysql-community-client(x86-64) >= 8.0.11 is needed by mysql-community-server-8.0.16-2.el7.x86_64
mysql-community-common(x86-64) = 8.0.16-2.el7 is needed by mysql-community-server-8.0.16-2.el7.x86_64
[root@xiaobingzhanggamadecentos mysql]# yum install -y libaio
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ap.stykers.moe
* extras: centos.ustc.edu.cn
* updates: ap.stykers.moe
Resolving Dependencies
–> Running transaction check
—> Package libaio.x86_64 0:0.3.109-13.el7 will be installed
–> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================================
Package Arch Version Repository Size
====================================================================================================================================
Installing:
libaio x86_64 0.3.109-13.el7 base 24 k

Transaction Summary
====================================================================================================================================
Install 1 Package

Total size: 24 k
Installed size: 38 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
** Found 2 pre-existing rpmdb problem(s), ‘yum check’ output follows:
2:postfix-2.10.1-7.el7.x86_64 has missing requires of libmysqlclient.so.18()(64bit)
2:postfix-2.10.1-7.el7.x86_64 has missing requires of libmysqlclient.so.18(libmysqlclient_18)(64bit)
Installing : libaio-0.3.109-13.el7.x86_64 1/1
Verifying : libaio-0.3.109-13.el7.x86_64 1/1

Installed:
libaio.x86_64 0:0.3.109-13.el7

Complete!

整理之后的顺序如下,请参考

必须安装,而且必须是这个顺序安装!

rpm -ivh mysql-community-common-8.0.16-2.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.16-2.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.16-2.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.16-2.el7.x86_64.rpm

可选,建议安装,顺序无所谓

rpm -ivh mysql-community-libs-compat-8.0.16-2.el7.x86_64.rpm
rpm -ivh mysql-community-embedded-compat-8.0.16-2.el7.x86_64.rpm
rpm -ivh mysql-community-devel-8.0.16-2.el7.x86_64.rpm
rpm -ivh mysql-community-test-8.0.16-2.el7.x86_64.rpm

5、安装过程中可能碰到的错误如下,可以对照着进行解决

错误信息A:

[root@work.xinyigirl.com mysql]# rpm -ivh mysql-community-server-8.0.16-2.el7.x86_64

error:Failed dependencies:
libnuma.so.1()(64bit) is needed by mysql-community-server-8.0.16-2.el7.x86_64……

解决办法:安装numactl

yum install numactl

 

错误信息B:

[root@work.xinyigirl.com mysql]# rpm -ivh mysql-community-devel-8.0.16-2.el7.x86_64

error:Failed dependencies:
pkgconfig(openssl) is needed by mysql-community-devel-8.0.16-2.el7.x86_64
解决办法:安装openssl-devel
yum install openssl-devel.x86_64 openssl.x86_64 -y

错误信息C:

[root@work.xinyigirl.com mysql]# rpm -ivh mysql-community-test-8.0.16-2.el7.x86_64.rpm

warning: mysql-community-test-8.0.16-2.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
perl(JSON) is needed by mysql-community-test-8.0.16-2.el7.x86_64

解决办法:安装perl相关依赖,一共三个

yum install perl.x86_64 perl-devel.x86_64 -y
yum install perl-JSON.noarch -y

三、数据库初始化工作

1、初始化

mysqld –initialize –console

正常没有任何输出

2、目录授权,避免启动失败

chown -R mysql:mysql /var/lib/mysql/

3、启动数据库服务——启动数据库之后mysql会在首次初始化的时候创建一个随机密码

启动服务:systemctl start mysqld

查看状态:service mysqld status

[root@work.xinyigirl.com mysql]# systemctl start mysqld
[root@work.xinyigirl.com mysql]# service mysqld status
Redirecting to /bin/systemctl status mysqld.service
● mysqld.service – MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2019-07-01 08:50:03 UTC; 5s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 4292 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 4319 (mysqld)
Status: “SERVER_OPERATING”
Tasks: 38
Memory: 373.8M
CGroup: /system.slice/mysqld.service
└─4319 /usr/sbin/mysqld

Jul 01 08:50:00 madecentos.novalocal systemd[1]: Starting MySQL Server…
Jul 01 08:50:03 madecentos.novalocal systemd[1]: Started MySQL Server.

4、查看初始密码

初始密码放在/var/log/mysqld.log文件中,找到红色行,冒号后面的就是初始密码,注意不含冒号。

[root@work.xinyigirl.com mysql]# cat /var/log/mysqld.log
2019-07-01T08:48:59.966835Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.16) initializing of server in progress as process 4239
2019-07-01T08:49:10.009291Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 8_UakedX4eof
2019-07-01T08:49:14.048223Z 0 [System] [MY-013170] [Server] /usr/sbin/mysqld (mysqld 8.0.16) initializing of server has completed
2019-07-01T08:50:02.112246Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.16) starting as process 4319
2019-07-01T08:50:03.319215Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2019-07-01T08:50:03.371928Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: ‘8.0.16’ socket: ‘/var/lib/mysql/mysql.sock’ port: 3306 MySQL Community Server – GPL.
2019-07-01T08:50:03.505602Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: ‘/var/run/mysqld/mysqlx.sock’ bind-address: ‘::’ port: 33060

5、登录并更改密码

登录:mysql -u root -p

更改密码(XXXXX改成你的密码): alter USER ‘root’@’localhost’ IDENTIFIED BY ‘XXXXXXXXXX‘;

[root@work.xinyigirl.com mysql]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.16

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> alter USER ‘root’@’localhost’ IDENTIFIED BY ‘XXXXXXXXXX‘;
Query OK, 0 rows affected (0.06 sec)

至此大功告成,开始使用吧。

新开通网站无法被百度搜索到的解决方案

xinyigirl阅读(545)

序言:本站开通之后,我试着在百度搜索最新的文章,发现搜索不到,搜索我的网站名称,也搜索不到,最后无奈之下搜索域名http://work.xinyigirl.com,竟然竟然竟然也搜索不到……然后就开始了跟百度杠上的不归路。

一、综述

其实要想被百度搜索到,真的有好多步骤要做,而且散落再好多个环节,但是全部的说明和帮助都在百度的产品——“百度资源平台”。一步一步跟着做,就能够确保网站被收录,也能被别人搜索到。当然如果你只是想打造自己的私人网站,里面的内容只想自己看,感觉也没有必要做网站了哦,直接写笔记就好了……

二、收录操作

1、网站站点录入

  • 直接进入百度资源平台 或者你搜索不到网址的页面下面点击“提交链接”

到此只是网站被收录,但是里面的内容还是没办法搜索到的,这显然不是我们的目的,开始维护如何将网站内的内容推送到搜索引擎去。

三、提交网站内部链接

百度提供了三种方式,一种是手工,一种是自动,推荐使用自动,这样可以省去好多工作量。百度提供的帮助文档如下

https://ziyuan.baidu.com/linksubmit/index

  • 拉到页面中篇下部分,个人建议采用自动推送这种方式。

  • 这个是sitemap提交。

其实到这一步我们用户能做的都已经做完了,剩下的就是百度根据我们的网站设置爬取数据的工作了。我用亲身经历告诉诸位,做好之后就洗洗睡吧,不要想着提交了立马就有结果了。。。。

我的网站被收录,印象中花了三天时间

链接被收录,也是一两天的时间。

 

Centos安装Python3新手教程

xinyigirl阅读(550)

序言:虽然linux系统已经内置了python,尤其是yum等工具也是要依赖python运行,但是大家都知道linux内置的是python2.7.而根据python最新的规划,python2.7将在2020年开始不在支持,也不在更新,因此现在几乎所有用python的人都转向了python3.X。那么如何安装python3呢?如何按准过python3之后又不影响linux系统中yum等工具依赖Python2.7的环境呢?

注:所有的命令均会打底色,方便识别。

一、环境准备

其实既然你有安装python3的需求,证明你是一个有开发需求的人,那么在安装python3之前,我们要yum一些基础的包或者底层包。

  • 切换root用户:输入 sudo su –  或者  su -u root  进行root账号切换
  • 通过yum工具安装依赖的底层包:
    • yum groupinstall “Development tools”
    • yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-develtk-devel gdbm-devel db4-devel libpcap-devel xz-devel libfii-devel
    • 上面的执行在执行中有时候会出现找不到目录或者文件夹等错误,根据我后面使用的情况,可以忽略不计,没啥影响(可能有,还没发现)
  • 如果你的linux中没有wget,可以提前安装wget工具,以便在线下载源码进行编译安装。
    • yum -y install wget

二、开始安装

大体步骤就是,先下载python3.X的源码,然后源码安装;修改建立python3的软连接(有点类似windows的环境变量,让centos能够在任意目录下识别python和pip命令);修改centos系统yum等工具的运行环境,否则无法运行。

  • 下载源码:有两种方式

    • 输入wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
    • centos会自动下载文件
    • 如果wget下载不下来,建议提前下载源码,通过winscp连接到centos主机,直接上传。
  • 解压,编译,安装
    • 提前创建好python3的安装路径文件夹,比如 mkdir /usr/local/python3
    • 解压:tat -zxvf Python-3.6.8.tgz
    • 编译:
      • 进入解压后的python源码中 cd Python-3.6.8
      • 直接将编译文件制定存放到新创建的python3文件夹里面 ./configure –prefix=/usr/local/python3./config 
      • 开始编译:make
      • 安装:make install
  • 配置环境变量:分四步,先移除python2的,再创建python3的
    • mv /usr/bin/python /usr/bin/python.bak
      ln -s /usr/local/bin/python3 /usr/bin/python
      mv /usr/bin/pip /usr/bin/pip.bak
      ln -s /usr/local/bin/pip3 /usr/bin/pip
    • 注意:第三步可能会报错,提示文件不存在之类的,这是因为centos之前就没有创建python2的环境变量,没关系。
  • 验证:输入python,看到提示的版本号编程3了吧,输入pip也会看出是python3的环境。

三、修改yum配置

这个时候如果你执行yum instlall XXX 你会发现centos报错,这是因为你修改了centos自带的2.7的版本,而且修改了环境变量等配置为python3,但是yum命令执行依赖的是2.7;

前面的安装步骤其实我们只是安装,没有任何删除python2.7的操作,所以centos里面还是有python2.7的,因此我们只需要强制yum执行采用python2.7的环境即可。

  • 修改yum配置文件(vi /usr/bin/yum),把文件头部的#!/usr/bin/python改成#!/usr/bin/python2.7保存退出即可。
  • 修改/usr/libexec/urlgrabber-ext-down文件(vi  /usr/libexec/urlgrabber-ext-down),把文件头部的#!/usr/bin/python改成#!/usr/bin/python2.7保存退出即可。

至此,全部搞定,大功告成,你可以愉快的使用Python3开启编程啦。

WordPress开启多站点教程

xinyigirl阅读(739)

序言:好不容易注册了域名,而且备案成功啦,无论如何都得搞几个二级域名吧,那么有了二级域名,总不能都指到同一个网站吧,那样多没意思啊,就像我,打着给闺女建网站的旗号,先给自己弄一个网站记录自己的工作和学习总结,替代自己日益衰老的脑瓜子,本篇文章主要介绍的模式如下:

二级域名+wordpress子域名模式打造多个网站

一、什么是二级域名?

二级域名,顾名思义就是顶级域名的下一级,域名整体包括两个“.”或包括一个“.”和一个“/”。顶级域名就是你在工信部备案的域名,比如我的域名:

  • 顶级域名:xinyigirl.com
  • 二级域名:本站,work.xinyigirl.com

二、WordPress多站点模式

现在WordPress的版本天生支持多站点,不需要再安装任何插件支持。其实多站点在技术实现上大体可以分为三种。

  • 安装多个wordpress主程序,分别开站。这种方式无疑是最费劲的,因为wordpress要安装多次,不推荐;
  • 安装一个wordpress,采用子目录方式。这种方式我尝试了,子目录的域名我的将会成为http://xinyigirl.com/work/XXXXX。这样域名看着很奇怪,如果个人不介意的话。可以采用这种方式,还有如果你没有注册域名,而是采用ip地址做域名,那么只能采用子目录方式。
  • 安装一个wordpress,采用子域名方式,这种方式就是我现在用的方式,子域名其实就是我们要启用的二级域名,唯一需要注意的就是在文章《一个小白通过ECS快速部署WordPress》中提到的,必须在DNS中增加二级域名的解析,或者直接添加一条*统配的泛解析。

三、开始进行子域名多站点开通

1、安装wordpress并开通主站点

可以直接参考《一个小白通过ECS快速部署WordPress》进行安装并开通,切记切记!开通后不要进行任何插件主题等的安装,开通好即可。

2、开启多站点功能

  • STEP1:找到你安装wordpress项目的路径,如果跟我一样使用宝塔安装的话,就是/www/wwwroot/XXXXX,进入此目录,
  • STEP2:找到wp-config.php.打开编辑。在define(‘WP_ZH_CN_ICP_NUM’, true);/* 好了!请不要再继续编辑。请保存本文件。使用愉快! */在下面代码中间添加一句 define(‘WP_ALLOW_MULTISITE’, true); 开启多站点功能。如下图红框中代码所示

  • STEP3:进入网站管理页面,http://yourdomain.com/wp-admin,登录账号,进入。
  • STEP4:首页—>工具—>配置网络;如果你添加了ip地址作为域名,那么只能是子目录这种方式;如果你添加的是注册的域名,那么就可以使用子域名模式开启多站点。

  • STEP5:按照指引修改wp-config.php文件。

  • STEP6:退出来,重新登录管理后台即可配置具体的站点啦。首页—>站点—->添加新的

  • 搞定!你就能进入每一个子域名网站开始单独的维护啦。

4、完善伪静态配置

其实在STEP5的时候wordpress提示让我们修改两个地方,一个是wp-config.php;一个是apache的.htaccess文件,由于我们是使用的Nginx,所以这个apache的配置没什么意义,但是这不代表我们就不用理会了。我们同样需要修改一些Nginx的配置文件。否则你会碰到下面的各种问题

  • 打不开子域名站点对应的仪表盘
  • 打开子域名网站时,首页可以打开,但是所有的文章或者子页面全都是404
  • 打开子域名的网站或者仪表盘没有任何样式
  • 等扥一大堆的问题。这是因为我们还没有修改Nginx的配置。

还是用宝塔linux面板进行维护更改

  • 进入宝塔Linux面板,http://ip:8888 (如果你修改了登录配置,就输入你修改后的网址。)
  • 点击网站—>找到你当前站点的条目,最右侧的“设置”

  • 找到“配置文件”,然后在最后一个 之前,增加下面的代码

#ignored: “-” thing used or unknown variable in regex/rew
rewrite ^/([_0-9a-zA-Z-]+/)?wp-admin$ /$1wp-admin/ permanent;
if (-f $request_filename){
set $rule_2 1;
}
if (-d $request_filename){
set $rule_2 1;
}
if ($rule_2 = “1”){
#ignored: “-” thing used or unknown variable in regex/rew
}
rewrite ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) /$2 last;
rewrite ^/([_0-9a-zA-Z-]+/)?(.*.php)$ /$2 last;
rewrite /. /index.php last;

如下图示

  • 重启Nginx,网站就全部搞定了。
  • 然后根据自己的需要为不同的子站点开启不同的主题,插件等等进行美化即可。

一个小白通过ECS快速部署WordPress

xinyigirl阅读(574)

序言:其实本人是完全不懂PHP的,本来在准备搭建系统的时候是想自己通过Django结合Ckeditor或者MarkDown插件,然后前端使用Bootstrap自己编码实现的,后来因为工作中事情太多,简单搜索了一下如何快速建站,才知道原来还有WordPress这么一个博客平台。中途自己其实是摸索了好多遍,大概花了三四天零星时间才完全掌握如何搭建和使用WordPress。所以这篇文章其实可以当做一个小白部署WordPress的教程。

一、准备工作

没啥可说的,准备干活之前得先把工具准备好:

  • 属于自己的已经备案的合法域名(如果没有域名的话,就使用ip地址吧)后面完全以我的域名xinyigirl.com为例
  • 属于自己的ECS服务器
  • 那么一丢丢Centos/Linux IT运维能力(没有也算了,比如我这种)
  • 充足的折腾耐心,因为确实好多东西需要搞。。。。

二、云平台上配置DNS解析规则

这里说的是,要在自己的域名注册商控制台配置自己的DNS解析规则,因为我是在腾讯云平台购买的,所以这里截图以腾讯云为例。如第三张截图所示,有几种常见的解析是必须要配置的。

  • www解析:解析完成域名就是www.xinyigirl.com
  • @解析:解析完成后域名就是xinyigirl.com
  • *解析:泛解析,匹配其他所有*.xinyigirl.com
  • 二级解析:匹配二级域名

三、在ECS上安装系统镜像

ECS购买后,云平台会提示用户选择操作系统进行安装,因为我们的目的就是建站,那么就直接选择一个现成的镜像来安装吧,这样可以省去自己的很多步骤,尤其是针对我这种还不熟悉Linux/Centos操作系统的小白,甚至还是完全不懂PHP编程语言的小白。。。。

各个云平台提供的镜像市场其实种类是很丰富的,有专门的建站系统,也有运维系统,这里建议选择“运维类系统”,比如宝塔运维界面的系统,可以让我们通过WEB页面的方式快速操作Centos系统的文件,数据库,网站,防火墙等等配置,而不是采用ssh登录到Centos系统,然后通过命令行进行操作配置。

1、安装运维类系统

  • 选择自己的ECS服务器,点击“更多”开始重装系统

  • 选择“服务市场”—>”运维工具”,这其实我们是能看到很多类型的,比如就有“建站系统”的,新ECS,用户可以先自己摸索摸索,装上后试一下,选择适合自己的。

配置自己的root密码,其实推荐使用密钥方式

2、初始化配置宝塔Linux面板

有关宝塔Linux面板的内容,推荐移步至官网进行查看学习,其实直接使用即可,因为WEB操作已经很傻瓜了。

  • 初始化页面:http://你的公网ip:8888 输入前面格式的网址到你的浏览器中即可进入初始化页面,然后配置账号名,密码即可。
  • 初始化完成后即可进入登录页面。
  • 第一次进入会让用户选择那种建站模式,LNMP和LAMP,推荐使用LNMP模式,选择快速安装即可。

3、利用宝塔的“一键部署源码”功能安装WordPress

这里才显示出这种“运维工具”类镜像在快速建站上的优势,用户只需要进行页面配置,点击,即可完成一个网站的搭建。

  • 首页—->往下拉,找到“宝塔一键部署源码”,点击进入:选择“博客”—->”wordpress”—->”一键部署”

  • 填写你注册的域名,然后修改数据库账号和密码,提交(可以根据自己需要选择php的版本,默认在2初始化配置宝塔Linux面板你选择安装的版本,如果有其他版本需要,可以在“软件面板”中进行安装)
    • 如果你没有域名,那么就在域名那里输入你的公网IP地址
    • 如果你有域名,就直接输入你的域名即可

4、初始化WordPress

这里还是真正初始化WordPress网站啦,有几个注意点提前列出来,方便大家提前准备。

  • 如果你的域名还没有备案成功,那么肯定你还没有配置DNS解析,这个时候如果你在安装wordpress时输入了自己的域名,那么就需要在宝塔面板的“网站”中新增一个域名,这样你才能访问刚才安装的WordPress开始真正网站的初始化。

  • 进入WordPress初始化安装页面:打开浏览器—>输入http://yourdomain.com/wp-admin;
  • 如果你的域名还没有备案成功和配置DNS解析,打开浏览器—>输入http://IP/wp-admin;
    • 第一步:点击开始

    • 第二步:输入刚才安装时配置的数据库名称和账号密码

    • 第三步:配置网站管理员,安装wordpress,等待一分钟左右即可完成网站的初始化。

    • 第四步:输入用户名和密码(第三步中配置的用户名和密码),登录进入后台管理。

5、开始wordpress后台管理工作

后台管理是根据你自己想搭建网站的样子,用途等等进行个性化配置的,这里不在单独说明了,只是大概讲解一下该如何进行基本的后台管理

  • 安装主题:一个网站搭建完成后,每个人都有自己想要的主题样式,这个可以在“主题”—>安装主题,进行安装
    • 一种是上传你离线的主题包。
    • 一种是安装在线的主题包。

  • 安装插件:这个是根据自己的需要进行安装的,跟主题差不多操作。
  • 主题个性化配置:每个主题的个性化配置都不尽相同,但是都排除不了几个地方,主页,菜单,边栏等等

 

开始愉快的玩耍吧