0%

0X00 使用docker部署RabbitMQ

自从用起docker之后,每次在自己本地开发环境部署新服务就首选用docker了。虽然理论上docker跟裸机部署比起来多多少少有一些缺点,但是跟3分钟部署几乎一些开发环境服务的优势比起来简直都是毛毛雨了。

首先要拉个镜像下来,通常拉镜像都是选择最新的或者特定某个版本,但是RabbitMQ有一点比较奇怪,如果逆向拉带有web管理页面的就不能用latest,而应该选择management。然后确定好镜像之后再了解一下端口情况,RabbitMQ带有web管理页面的话会用到两个端口:提供MQ服务的5672和提供web服务的15672

下面是我的配置文件,把内容保存为docker-compose.yml然后docker-compose up -d就好了(如果不在yml文件所在目录下执行或者文件名不叫docker-compose.yml的话要用docker-compose -f xxx/xxx/xxx/xxx.yml指定配置文件的位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3'

services:
rabbitmq:
# image: rabbitmq:latest # 如果要用不带web界面的可以选这个
image: rabbitmq:management # 带有web界面的镜像
container_name: rabbitmq # 取一个容器名
ports: # 开放两个端口,当然没有web界面的话就不用开放15672了
- "5672:5672"
- "15672:15672"
environment: # 这里设置登录名和密码
RABBITMQ_DEFAULT_USER: shawn
RABBITMQ_DEFAULT_PASS: **************** # 高科技加密(骗你的,我自己打的星号

这样以来服务就启动起来了,可以访问http://127.0.0.1:15672看到RabbitMQ的web登录页面了。

docker-compose并不是docker的一部分,而是一个用Python编写的docker编排工具。如果电脑上的话可以使用pip install docker-compose来安装它

阅读全文 »

0X00 url的源头

使用django-admin startproject test_project创建一个新的Django项目之后在settings.py中可以找到一个配置项ROOT_URLCONF,默认情况下值为项目目录下的urls,也就是test_project.urls

默认情况下这个urls.py的内容大致是这样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
"""learn_django URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path


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

这里就是根目录了,新项目使用python manage.py runserver启动之后访问http://127.0.0.1:8000/就是访问到这个url的根路由了,默认情况下有一个admin/可选,也就是Django自己的后台管理页面。Django所有的url都是从这个文件发散出去的urlpatterns里除了将url路由至view就是其他的子url配置。换句话说,通常情况下DJango中所有url最终都应该被路由到View上才对。

阅读全文 »

0X00 Python3的super

Python中对象的概念都快被大家淡忘了,因为一切都是对象(话虽然这么说,但是怎么可能淡忘对象呢)。看下面一段Python2的代码,Python2中麻烦的就是这个super()的用法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Human:
def __init__(self):
self.name = 'human'
print 'hello, i im', self.name


class Student(Human):
def __init__(self):
super(Student, self).__init__()
self.name = 'student'
print 'hello, i im', self.name


a = Student()

在初学Python的时候,如果是Python2很大可能会在super(Student, self).__init__()这段迷惑好一阵子,不过好在Python2马上就要凉透了,在Python3中可以将代码改写成如下方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Human:    # 不用强行继承自object了
def __init__(self):
self.name = 'human'
print('hello, i im', self.name)


class Student(Human):
def __init__(self):
super().__init__() # super的用法也更明了
self.name = 'student'
print('hello, i im', self.name)


a = Student()

其中super的用法由super(Student, self).__init__()改成了super().__init__(),看起来清晰多了,在使用Python3后不建议以任何理由使用老式Python中的super调用。

阅读全文 »

0X00 使用docker部署的优势

在使用docker部署之前,一般都是直接将MySQL和Redis这类服务直接安装在机器上的。以至于好多新手才开始安装使用的时候经常会出问题,出了问题解决不了就重装系统然后再重装软件,而且如果想同时用MySQL5和MySQL8就非常麻烦了。话说回来,在生产环境服务器上其实还是很多直装的服务的,不过其实使用docker部署一套相同的环境是非常有利于自己本地开发的。

我个人看来使用docker部署的优势有这几点比较明显的:

  1. 很容易做到开发环境、测试环境和生产环境的“环境与版本”大统一;
  2. 很容易在开发环境本地同时部署多套不同版本的同一服务;(比如你负责8个项目,这8个项目要用8个不同版本的MySQL)
  3. 能很快部署一套开发环境;(事实证明在一台网络环境好的机器上,能在5分钟内部署一套数据库)
  4. 整理好配置文件后可以很容易备份整套配置;
  5. 安全问题,在物理机上直接装了MySQL,如果部署不够仔细的话有数据库被攻破后危及服务器的风险,而Docker部署的由于容器所在就不会有这种问题;
阅读全文 »

0X00 线程池和进程池

多线程和多进程在平时编程中是挺常见的操作,不过控制进程和线程的数量是一件比较麻烦的事情。尤其是线程,之前在搜索到的关于线程池的内容多数都是“造轮子”,实际上Python已经给我们造好了这个轮子。文档在这里,甚至还是中文的https://docs.python.org/zh-cn/3.7/library/concurrent.futures.html#module-concurrent.futures

我这里简单的整理了一下,做个小样例展示出来方便查阅。这里就假装大家对Python有一定的了解,而且也对操作系统中的线程和进程有一些了解了。(哦对了,还需要了解一下GIL才行)

阅读全文 »