my blog my blog

Monthly 11月 2018
Comodo Positive SSL申请过程

黑五过去了,留下了一些折腾。不过还好,今天蛮有收获的。

说下Comodo Positive SSL到底怎么申请怎么用。对于Nginx用户来说,添加SSL就需要两个文件,一个是private.key,一个是domain.cer。其中private.key是我们自己生成的,cer是得花钱买的,当然也可以自己签,但是自己签的浏览器不认。

private.key的生成我们需要了解一个东西叫CSR。根据百科的内容是这样介绍的:

CSR是Certificate Signing Request的英文缩写,即证书请求文件,也就是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书申请者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书。

生成private.key的方法很多,奶牛就不介绍了,使用linux或者windows下的签名软件生成,或者现在已经有很多网站支持在线生成CSR了,直接生成就可以。生成完成后我们得到csr.cer和private.key两个文件。

然后我们需要将csr.cer的内容提交给Comodo,然后需要一个验证过程,叫Domain Control Validation (DCV) 。这个验证过程有几种方式:

1.邮件,但是需要域名的[email protected]的邮箱可以接收邮件,这个比较麻烦,pass掉。

2.dns,这个可以,添加一个记录即可。

3.http文件,这个需要你下载他们的验证文件,然后使http://domain.com/.well-known/pki-validation/file.txt可以验证这个文件,这个方案也可以。

验证通过后就可以得到domain.cer了,然后修改nginx的conf文件增加ssl证书即可。

配置Django的Celery异步之路踩坑

终于的终于,奶牛还是踏上了新的踩坑之路。

人生苦短,我用python。

看到这句话的时候,感觉可能确实是很深得人心,不过每每想学学,就又止步,年纪大了,感觉学什么东西都很慢,很难,精神啊注意力啊思维啊都跟不上。今天奶牛来分享自己今天踩的一个坑。

先说说配置过程吧,初学Django,啥都不懂,当然,python也很水,啥东西都得现查现用。Django安装还是很简单的。

apt-get install python3
pip3 install django

嗯,就是两条命令的事儿。

再说celery的安装:

pip3 install celery
pip3 install redis==2.10.6

目前奶牛所在的时间redis for python的版本是redis-3.0.1,为什么要用2.10.6呢?因为3.0.1压根配置就无法运行!!!

继续安装redis server

apt-get install redis
service redis start

然后就可以按照celery的官方教程走了,放个URL:http://docs.celeryproject.org/en/latest/django/index.html

python3 manage.py startproject nenew
cd nenew
python3 manage.py startapp nenewapp
touch ./nenew/celery.py
touch ./nenewapp/tasks.py

然后增加nenew/nenew/celery.py内容为

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nenew.settings')

app = Celery('nenew')

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

增加nenew/nenew/__init__.py的内容

from __future__ import absolute_import, unicode_literals

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app

__all__ = ('celery_app',)

增加nenew/nenewtest/tasks.py的内容

# Create your tasks here
from __future__ import absolute_import, unicode_literals
from celery import shared_task


@shared_task
def add(x, y):
    return x + y


@shared_task
def mul(x, y):
    return x * y


@shared_task
def xsum(numbers):
    return sum(numbers)

在nenew/nenew/settings.py中增加和修改

...

ALLOWED_HOSTS = ['*']
....

INSTALLED_APPS = [
...
    'nenewtest',
]

...

CELERY_BROKER_URL = 'redis://localhost:6379/1'
CELERY_RESULT_BACKEND = ‘redis://localhost:6379/0'

在nenew/nenewtest/views.py中增加或修改为

from django.shortcuts import render
from django.http import HttpResponse
from .tasks import add
# Create your views here.
def nenewtest(request):
    result = add.delay('2','2')
    result.ready()
    return HttpResponse('nenew Django Celery worker run !')

最后把views添加到nenew/nenew/urls.py中

from django.contrib import admin
from django.urls import path
from nenewtest import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', views.nenewtest),
]

然后在项目目录nenew执行

celery -A nenew worker -l info

这时候worker启动正常会显示:

-------------- celery@nenew v4.2.1 (windowlicker)
---- **** -----
--- * ***  * -- Linux-4.15.0-39-generic-x86_64-with-Ubuntu-18.04-bionic 2018-11-23 17:31:25
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app:         nenew:0x7fdc5a155cc0
- ** ---------- .> transport:   redis://localhost:6379/1
- ** ---------- .> results:     redis://localhost:6379/0
- *** --- * --- .> concurrency: 1 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery

这样类似的信息,然后我们启动项目,这里需要新开一个shell:

python3 manage.py runserver 0:80

这样我们就可以通过80端口直接访问我们的web了。地址是http://locahost/test

当我们这里访问正常后,在worker界面会有

[2018-11-23 18:09:19,469: INFO/MainProcess] Received task: nenewtest.tasks.add[35faa0fe-dd48-4f8d-9559-516556a93a40]
[2018-11-23 18:09:19,470: INFO/ForkPoolWorker-1] Task nenewtest.tasks.add[35faa0fe-dd48-4f8d-9559-516556a93a40] succeeded in 0.00031037399821798317s: '22'

如下语句表示执行成功,这样子就表示通过Django的网页我们对celery任务的异步执行成功。

当然,按照我的方法是可以一步成功的,因为奶牛已经踩了一整天的坑了,被一个错误郁闷得不要不要的。

AttributeError: 'float' object has no attribute 'items'

就是这个错误,查遍国内的所有网站都没有结果,然后就去bing的国际版查,然后发现果然是有bug在啊,奶牛这一天浪费得可真是够了。

这是celery的一个issue,在地址https://github.com/celery/celery/issues/5175 ,issue里面提及在2018/11/22日 it’s fixed in kombu and celery master。问题的根源是celery对redis3的支持不好,补救方法是

Solution: Roll back redis with pip: pip install redis==2.10.6

然后在commit里面找到是对requirements/extras/redis.txt文件进行版本限定。

-redis>=2.10.5
+redis>=2.10.5,<3

好了,踩坑总算结束了。毕竟是新手,很多问题可能就是潜意识认为是自己的代码有问题,实际。。。实际可能并不是这样子,得多关注源码的更迭和问题处理才好。

Linux下挂载VisualBox的共享目录

奶牛最近还是切换到了虚拟机下的linux,因为windows还得玩儿游戏,ps:游戏毁一生,吃鸡都是挂。

好了,方法:

1.安装Vbox的增强工具,方法不讲了

2.mount

mount -t vboxsf shared_dir_name /location_name
使用ab在linux下进行网站压力测试

ab是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。原理就是模拟并发请求访问指定次数,如果并发很大就相当于cc攻击了。

安装:我们当然不要安装一整套apache来用这么一个工具了,只安装相应套件就可以了。

sudo apt-get install apache2-utils  
sudo yum -y install httpd-tools

在ubuntu里面用apache2-utils,在centos里面用httpd-tools.

测试:

ab -n 1000 -c 10 https://www.xxx.com/

其中-n是指定总的访问次数,总的访问次数,总的访问次数,重要的事儿说三遍。

-c是指定并发数。

https://www.xxx.com/后面的/不能省略,或者需要指定完整的页面路径

上面命令的解释就是用10个并发访问https://www.xxx.com/,每个并发访问100次,总共访问了1000次。

自己玩儿了下,发现缓存插件真的能有效降低cpu的压力,提高网站性能,如果不用缓存cpu占用率简直不要飞到天上去。

SSH免密码登录配置教程

以前奶牛觉得输入个密码其实是很简单的事儿,但是有时候复杂密码输错再输也很烦心。提供一个比较好的方法吧,就是用ssh-keygen生成密码对,然后将公钥传给被管理机,之后即可免密码登录了。

ssh-keygen -t rsa -N '' -f id_rsa -q 
ssh-copy-id -i .ssh/id_rsa.pub user@host -p port
ssh -p port user@host

就这样简单的记录下吧。

ssh-keygen会生成rsa类型的公钥和私钥。将公钥传给服务器就可以通过私钥来进行无密码登录了。

一篇PT入门教程,以M-Team为例

很久不更新了,写一下最近玩的PT吧。PT即Private Tracker,属于私有分享型种子下载,你需要在PT站点有注册会员,然后才可以下载。比较大的站点有M-Team,奶牛也就刷的M-Team.

1.注册

多数PT站点都是邀请制的,所以没有邀请码就无法进入,获取途径无二,一是有好友是注册会员,可以邀请你。二是可以通过捐赠的方式来获得,以M-Team为例,捐赠会员是$25.00美元。

2.新号如何过考核

考核的方面也就那么几个:分享率、上传量、下载量、魔力值。

先说分享率,这个就是你单个种子的上传量/下载量的比值,热门的种子可以快速提升你的分享率,尤其是新种,下载量大,提升分享率快。

上传量、下载量顾名思义就是你的上传和下载的数量,PT也好,BT也好,都是要有分享精神的,所以要求上传量越大越好,所以,下载完后不要停止做种。

魔力值提升是最慢的,也没有特别好的途径,不过我们仍旧有迹可循,达到自己的最大提升速度。以M-Team为例,首先M-Team官方的种子有额外加成,所以保持M-Team的官方种子做种可以额外获得魔力值。初级会员的魔力值计算:

0.7個魔力值 * 你的做種數 (做種數最多計14個)。

也就是说你至少要保持14个种子才会接近你的满魔力值增速,所以,提升魔力值就要挂不少于14个种子,最好要多挂M-Team的官方种子。大种子也有利于提升魔力值。

最最关键的是魔力值是靠时间而不是你的上传量,所以你最好有NAS机器,通过NAS来挂,那样子就24小时魔力值都在增长。

上传量其实也很好刷,M-Team打开实验室功能,有成人模块,里面每天都限时很多免费的种子,这是提升上传量比较快的方式。

新手一定不要追求下载量,而要追求上传量,分享率过低会被封号,这里的分享率是总分享率,即你的总上传/总下载。

好吧,就写这些吧,希望奶牛的教程对PT新手朋友有帮助。