sentry+docker+traefik 自建部署

需要sentry来记录前后端记录,商用的购买太贵还有限制,不划算。打算用服务器自建部署,踩了不少坑,做个记录。

基本思路,使用getsentry/onpremise的脚本安装,然后使用traefik做代理(ssl在traefik上配置)

  1. 环境准备:Docker 17.05.0+ Compose 1.23.0+
  2. clone https://github.com/getsentry/onpremise
  3. 进入onpremise,切换到10.0.1分支(为什么要用这个分支,因为后续的,项目使用了nginx做内部的代理,尝试了很久traefik代理nginx,都没有成功,所以就用了这个版本,以下步骤都是基于这个版本的)
  4. 修改配置:进入sentry文件夹
    1. 复制config.example.yml为config.yml,修改以下配置
      1. 增加 system.url-prefix: ‘https://xxxx.xxx.com’  // 这个填写你自己的sentry的域名地址
      2. 修改Email,sentry需要发邮件来添加用户。自己用QQ或其他邮箱,把smtp的信息获取到,对应的填写即(注意,下面mail.from必须跟username一致)
        mail.backend: 'smtp'  # Use dummy if you want to disable email entirely
        mail.host: 'smtp.yandex.ru'
        mail.port: 587
        mail.username: 'username@your.host'
        mail.password: 'password'
        mail.use-tls: true
        # The email address to send on behalf of
        mail.from: 'username@your.host'
    2. 复制sentry.conf.example.py为sentry.conf.py,修改以下配置:(不需要http的可以跳过这步)
      把SSL/TLS里的注释去掉就行
  5. 运行安装脚本,因为安装比较慢,建议进入用screen来运行:
    1. screen -S sentry
    2. 进入onpremise文件夹
    3. ./install.sh
      (这个步骤比较慢,可以按Ctrl+A+D,将screen放入后台运行。需要进入查看,输入命令screen -r sentry就行。 具体的可以查screen命令)
    4. 安装完后,会提示你创建帐号,输入邮箱、密码即可
  6. 修改onpremise文件夹下的docker-compose.yml(下面的1和2是为了配置traefik,如果用ninx的话,代理到9000端口就行)
    1. 增加全局nertwork:
      配置最底部,增加:
      networks:
      traefik_gateway:
      external: true
    2. 修改service的web,增加lables和对应需要的traefik的nertwork,我这边修改后的:(注意,ports注释掉。如果不需要https,lables的https可以去掉;如果不是deploy部署的,把下面的deploy去掉,直接用lables就行)
      web:
      << : *sentry_defaults
      #ports:
      # – ‘9000:9000/tcp’
      networks:
      – default
      – traefik_gateway
      deploy:
      labels:
      – “traefik.enable=true”
      – “traefik.http.services.sentry.loadbalancer.server.port=9000″# http
      – “traefik.http.routers.sentry.entrypoints=web”
      – “traefik.http.routers.sentry.rule=Host(`sentry.xxx.com`)”# https
      – “traefik.http.routers.sentry-web-secure.tls=true”
      – “traefik.http.routers.sentry-web-secure.entrypoints=web-secure”
      – “traefik.http.routers.sentry-web-secure.rule=Host(`sentry.xxx.com`)”
    3. 把配置里的image变量改为真实image地址:
      1. $SNUBA_IMAGE改为getsentry/snuba:latest
      2. $SYMBOLICATOR_IMAGE改为getsentry/symbolicator:latest
    4. 更新sunba的命令:
      https://github.com/getsentry/onpremise/pull/434/files
  7. 运行docker:
    1. deploy:docker stack deploy -c docker-compose.yml sentry
    2. 非deploy:docker-compose up -d

React-native Image组件相关问题记录

最近应用内的表情(图片)问题,发现了很多奇怪的问题,总结如下:

  1. IOS13下,Text包裹Image会出现一个文件图标背景。
    原因:因为Text里显示Image,需要用一个占位符,RN的IOS原生使用了一个组件来占位。IOS13下,这个组件会默认显示为空为一个文件图标,导致这个问题。
    解决:https://github.com/facebook/react-native/commit/06599b3e594355a1d5062ede049ff3e333285516?tdsourcetag=s_pcqq_aiomsg
    如果不升级版本,可以用过打Patch方式补丁
  2. android下,Gif不动态:这个是没有启用动态库的原因,可以参考官方文档:
    注意,一定要看自己RN对应版本的,因为不同版本的库版本不一样
    https://facebook.github.io/react-native/docs/0.59/image#gif-and-webp-support-on-android
  3. 如果你是用Text包裹的Image,你会发现,用第二个办法加了动态库反而会导致图片无法显示。这是一个BUG,暂时还没找到解决方案。等空一点再查下,估计也是某个源码的问题
  4. 如果你是Text包裹的Image,然后你还在Text上增加了selectable属性,会导致Image的加载也有问题。第一次显示不加载,然后比如点进入一个详情,或者其他地方显示了Image,才会都显示。也是未找到原因。

React-Native 踩坑记录

在React-Native开发的过程中,遇到了非常多的问题,好在社区比较强大,搜索都解决了。这里做一个记录,一个是自己做备忘,防止哪天又碰到相同问题;另一个,也给其他碰到的人做一个总结。

  1. gradle 3.3 在windows下报apt打包错误
    解决方案:升级到3.4
  2. build出现:Error:Execution failed for task ‘:app:transformClassesWithDexForDebug’. > java.lang.OutOfMemoryError: GC overhead limit exceeded
    解决方案:
    次点击 Help > Edit Custom VM Options 以打开 studio.vmoptions 文件。(没有新建就行)
    之后编辑文件,填入配置,然后保存,重启Android studio

    -Xms256m
    -Xmx3080m
    -XX:MaxPermSize=350m
    -XX:ReservedCodeCacheSize=225m
    -XX:+UseCompressedOops

  3. 升级到gradle5之后,build release报错unable to load script make sure you are either running a metro server or that your bundle “index.android.bundle” is packaged correctly for release https://github.com/facebook/react-native/issues/25348
    解决方案:
    build release之前运行:
    react-native bundle –platform android –dev false –entry-file index.js –bundle-output android/app/src/main/assets/index.android.bundle –assets-dest android/app/src/main/res
  4. 接问题3,运行bundle之后,build release出现报错:Duplicate resources
    解决方案:
    https://github.com/facebook/react-native/issues/19239#issuecomment-414564404
    android-> app -> src -> main -> res文件夹里,除了drawable,其他drawable-hdpi之类的,都删除即可

打算学习的技术栈

今年以来,一直在接触新的技术,但是一直没有比较成块的时间来学习。列个单子,督促自己抽时间来学习:

  • 后端
    • TP5 完成公司项目
    • laravel 使用laravel重构订单系统 API风格
    • Go 使用Go写个小工具
    • Node.js 配合Electron搭建一个客户端
    • docker 多容器部署订单系统
    • 部署 自动部署 测试等
    • 持续集成 Jenkins
  • 前端
    • Vue.js 订单系统前端用Vue.js实现
    • Webpack 完成公司项目
  • 其他
    • 微信小程序 开发一个小程序,有趣 社交 传播
    • Weex 订单系统发布个Android/IOS 应用
    • Electron 搞个客户端

不列不知道,一列一大堆。好了,有压力才有动力。加油加油!