搭建自己的sentry 服务(docker+ubuntu)

Sentry 是一个开源实时错误的报告工具,支持 web 前后端、移动应用以及游戏,支持 Python、OC、Java、Go、Node.js、Django、RoR 等主流编程语言和框架 ,还提供了 GitHub、Slack、Trello 等常见开发工具的集成。它可以实时收集程序内部发生的异常,并友好展示在后台。

一. 安装docker-compose

二. 部署Sentry

三. 启动


一. 安装docker-compose

安装docker

sudo apt install docker.io

安装docker-compose, 在某个目录下执行:

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod 755 /usr/local/bin/docker-compose

二. 部署

克隆

git clone https://github.com/getsentry/onpremise
cd onpremise

生成一个SENTRY_SECRET_KEY, 运行后进入漫长等待:

docker-compose run --rm web config generate-secret-key

打开目录下docker-compose.yml, 修改SENTRY_SECRET_KEY

  base:
    restart: unless-stopped
    build: .
    environment:
      # Run `docker-compose run web config generate-secret-key`
      # to get the SENTRY_SECRET_KEY value.
      SENTRY_SECRET_KEY: '0cw5he02=baa2p2)o2c*(ludb1y8taomopy(8o%xpfu7qbpy7-))'  # 就是这里
      SENTRY_MEMCACHED_HOST: memcached
      SENTRY_REDIS_HOST: redis
      SENTRY_POSTGRES_HOST: postgres
      SENTRY_EMAIL_HOST: smtp
    volumes:
      - ./data/sentry:/var/lib/sentry/files

生成数据库, 并创建用户:

docker-compose run --rm web upgrade

三. 启动

docker-compose up -d

打开:http://url:9000登录并添加项目

django: rest-framework序列化对象及关联对象(实现多级分类的序列化例子)

  1. 在项目中经常会遇到多级分类的状态, model中,常常用只用一个model类来表示多级分类, 那么使用restframework序列化的时候如何让类别的层级更有条理呢?
  • 1.在模块中是常规写法:

此处商品类别的分类级别是固定的, 不会无限级分类的的情况, 这样会简单的多。
models.py的常规写法:

class GoodsCategory(models.Model):
    """ 
    商品类别
    """
    CATEGORY_TYPE = ( 
        (1, "一级类目"),
        (2, "二级类目"),
        (3, "三级类目"),
    )   
    name = models.CharField(default="", max_length=30, verbose_name="类别名", help_text="类别名")
    category_type = models.IntegerField(choices=CATEGORY_TYPE, verbose_name="类目级别", help_text="类目级别")
    parent_category = models.ForeignKey("self", null=True, blank=True, verbose_name="父类目级别", help_text="父目录", related_name="sub_cat")

注意此处的related_name定义为sub_cat, 待会会用的到。

  • 2.在视图方法中同样使用的常规的写法:

在视图中指定一个需要序列化的查询集和一个序列化类:

class CategoryViewSet(mixins.ListModelMixin,  viewsets.GenericViewSet):
    queryset = GoodsCategory.objects.all()
    serializer_class = CategorySerializer
  • 3.关键之处在于序列化类的书写
class CategorySerializer(serializers.ModelSerializer):
    # sub_cat是model中已经指定的related_name, 需要保持一致
    # 以下sub_cat和parent_category均可以体现分类的层级关系, 
    # sub_cat表示子类, parent_category表示父类
    sub_cat = CategorySerializer2(many=True)
    # parent_category = CategorySerializer2()    
    class Meta:
        model = GoodsCategory
        fields = '__all__'

可以看出, 序列化类CategorySerializer中又对sub_cat字段作序列化。
当然还需要再写两个序列化类。

class CategorySerializer3(serializers.ModelSerializer):
    class Meta:
        model = GoodsCategory
        fields = '__all__'

class CategorySerializer2(serializers.ModelSerializer):
    sub_cat = CategorySerializer3(many=True)
    class Meta:
        model = GoodsCategory
        fields = '__all__'
  • 未完

linux 连接共享windows服务器和shadowsoscksr客户端linux使用配置

linux连接共享windows服务器

1.

sudo apt-get install cifs-utils

2.查看共享目录:

smbclient -L 10.31.162.41 -N

3.挂载

mount -t cifs //10.31.162.41/共享文件夹  /home/user1/tool/share

4.解除挂载

sudo umount /挂载的目录

shadowsoacksr

  • 原文:
    https://cndaqiang.github.io/2017/09/28/ubuntu1604-ssr/
配置完成后的常用命令:
  1. 启动:
sudo python ./shadowsocks/local.py -c config.json -d start
  1. config.json的配置示例
{
    "server": "38.141.44.98",
    "local_address": "127.0.0.1", 
    "local_port": "1080",
    "server_port": "512",
    "password":  "ntdtv.com",
    "method": "aes-256-cfb",
    "protocol":"auth_sha1_v4",
    "obfs": "plain"
}

** 以下复制原文:

环境
Ubuntu 16.04 LTS (GNU/Linux 2.6.32-042stab116.2 x86_64)

Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-62-generic x86_64)

python版本 python 2.7

操作
安装python
$ sudo apt-get update
$ sudo apt-get install python
下载ssr
$ mkdir shadowsocksr
$ cd shadowsocksr/
$ wget https://github.com/cndaqiang/shadowsocksr/archive/manyuser.zip
配置ssr
$ sudo apt-get install unzip
$ unzip manyuser.zip
cd shadowsocksr-manyuser/
配置文件shadowsocksr-manyuser/config.json

配置文件内容解释可参考SSR配置config.json配置文件各项说明

主要参数和示例

“server_port”:8388, //端口
“password”:”password”, //密码
“protocol”:”origin”, //协议插件
“obfs”:”http_simple”, //混淆插件
“method”:”aes-256-cfb”, //加密方式
配置示例
多用户,不同用户不同端口 修改 vi config.json 删除以下内容

"server_port": 8388,
"password": "m",

添加,不同端口和密码

“port_password”:{
“端口1″:”密码1”,
“端口2″:”密码2”
},
其他参数可自定义

“protocol”:”origin”, //协议插件
“obfs”:”http_simple”, //混淆插件
“method”:”aes-256-cfb”, //加密方式
启动服务
$ python ./shadowsocks/server.py -c config.json
会显示连接等信息 其他启动方式

sudo python ./shadowsocks/server.py -c config.json -d start
停止

sudo python ./shadowsocks/server.py -c config.json -d stop
帮助

python ./shadowsocks/server.py -h
客户端
IOS: Potatso Lite(支持的参数更多)
Wingy 其他平台自行搜索

linux端
与服务器端使用相同软件

$ wget https://github.com/cndaqiang/shadowsocksr/archive/manyuser.zip
过程同服务器安装 config.json修改为

“server”: “服务器密码ipv4地址”,
“server_ipv6”: “::”,

"local_address": "127.0.0.1", 本地地址
"local_port": xxx, 本地socks端口
"server_port": xxx, 服务器端口
"password": "密码", 服务器密码

其他参数同服务器一样就可以
使用方式

sudo python ./shadowsocks/local.py -c config.json -d start|stop
遇到的问题
如果安装防火墙,请允许对应端口通过

JWT(JSON Web Tokens) With Django REST Framework

代码: https://github.com/wktadmin/REST-Framework-Model-Relationships

教程: https://www.youtube.com/watch?v=Fhcn2qx-4VQ&t=223s

  1. setting里的基本权限设置:

REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_simplejwt.authentication.JWTAuthentication', ), 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', ), }
  1. TokenObtainPairView 和 TokenRefreshView
    one is an access tokens , one is refresh token

  2. urlpatterns

from django.conf.urls import url, include
from django.contrib import admin
# one is an access tokens , one is refresh token
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('languages.urls')),
    url(r'^api-atuh', include('rest_framework.urls')), 
    url(r'^api/token/', TokenObtainPairView.as_view()), # is only accept post request, get is not allowed
    url(r'^api/token/refresh/', TokenRefreshView.as_view()),
]


  • models serializer…详见代码

nginx重启报pid错误和配置静态文件浏览功能

重启报pid错误

  • 重启检测nginx -t 显示正常, 但是 ngix -s reload报错
  • 解决方法
  1. 如果nginx服务已经启动, 先使用kill -9 停止
  2. 随后:
sudo nginx -c /usr/local/nginx/conf/nginx.conf
  1. 重启:
nginx -s reload

静态文件浏览功能

  • nginx.conf
root /home/user1/nginx # 路径
autoindex on; # 开启文件浏览
autoindex_exact_size off; # 文件大小显示优化
autoindex_localtime on; # 时间显示优化
charset utf-8,gbk; # 中文显示优化
  • 设置可读