Docker部署Sentry

2,410 阅读3分钟

Sentry 是一个错误记录和聚合的平台。本指南将指导您在Docker中部署设置自己的内部Sentry。

Docker

依赖

  • Docker version 1.10+

相关资料

构建容器镜像

初始化

clone官方Docker-Sentry镜像,这个是自定义Sentry镜像的基础文件。里面有sentry.conf.py和config.yml可以自定义修改

安装相关依赖

# 初次执行中间需要添加账户
./install.sh

Tip1: master分支执行下 ./install.sh 会失败,原因是某些镜像已经不存在了,所以在失败后可以切到stage分支执行 ./install.sh(确保切到stage时没有多余文件,有的话记得清除)

Tip2: 报RAM不够时,全局查找需要的大小修改成自己现有的大小

Tip3: SENTRY_SECRET_KEY is undefined, 查看

生成secret-key,将其添加到配置文件.env中(生成的secret key在最后一行)

# 可在任意时间执行
docker login

docker-compose run web config generate-secret-key # 得到一串包含*%()@+等的字符串

# .env
SENTRY_SECRET_KEY='' # 一串包含*%()@+等的字符串
SENTRY_IMAGE=sentry:9.1.2
SENTRY_IMAGE=getsentry/sentry:git

运行Sentry服务

以下命令均需在项目目录下执行

启动服务

docker-compose up

# 后台启动
docker-compose up -d

# 构建并后台启动
docker-compose up --build -d

更新镜像并构建服务

docker-compose build --pull

启动 web容器并迁移数据库,之后删除容器

docker-compose run --rm web upgrade

停止服务

# 前台服务直接cmd + c

# 后台服务
docker-compose stop

重启服务

docker-compose restart

关闭所有容器并删除,默认保留 数据卷

docker-compose down

输出当前运行状态

docker-compose ps

打包并发布

  1. 如果有一个私有容器镜像服务:
# 可在Makefile修改REPOSITORY
# 命令行中的优先级最高
REPOSITORY=reg.example.com/sentry make build push
# make build push === make all
  1. 如果没有:
# 1. 本地构建
make build

# make执行失败报如下错误时可执行下面两条命令
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

1 xcode-select --install # 不行的话执行 2
2 sudo xcode-select -switch /

# 2. 注册完服务后,推送到远程
docker login

make push

后续可直接执行 make all 打包并发布

扩展

一、Docker 命令

镜像列表

docker images

下载镜像

docker pull docker_name

删除镜像

docker rmi docker_name

创建镜像

docker run -it -rm docker_name

容器列表

docker ps

进入容器

# 查看 CONTAINER ID/NAMES
docker ps
# 进入容器
docker exec -it [CONTAINER ID/NAMES] /bin/bash

# 报错:OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown

# 原因:该镜像是使用alpine制作的,要进入该容器需要输入
docker exec -it [CONTAINER ID/NAMES] /bin/sh

退出容器

exit

删除所有容器

方法一:

#查询所有的容器,过滤出Exited状态的容器,列出容器ID,删除这些容器
sudo docker rm `docker ps -a|grep Exited|awk '{print $1}'`

方法二:

#删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)
sudo docker rm $(sudo docker ps -a -q)

方法三:

#根据容器的状态,删除Exited状态的容器
sudo docker rm $(sudo docker ps -qf status=exited)

方法四:

#Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器。
sudo docker container prune

删除所有xx

# 删除所有容器
docker container prune

# 删除所有镜像
docker image prune

docker rmi $(docker images -q)

# 删除所有网络
docker network prune

# 删除所有数据卷
docker volume prune

二、Docker-compose

菜鸟教程

配置

邮件配置

目前测试qq邮箱能成功

docker-compose.yml

# 设置相关环境变量
environment:
    SENTRY_MEMCACHED_HOST: memcached
    SENTRY_REDIS_HOST: redis
    SENTRY_POSTGRES_HOST: postgres
    SENTRY_EMAIL_HOST: 'smtp.email.qq.com'
    SENTRY_EMAIL_USER: '798052735@qq.com'
    SENTRY_EMAIL_PASSWORD: xxx  # 填写自己的邮箱授权码https://mail.qq.com/cgi-bin/frame_html => 设置-账户-开启STMP服务
    SENTRY_SERVER_EMAIL: '798052735@qq.com'
    SENTRY_EMAIL_PORT: 587
    SENTRY_EMAIL_USE_TLS: 'true'
    SENTRY_URL_PREFIX: http://sentry.com

重新来过

删除所有相关内容

  1. 执行相关命令-跳转
  2. 从头来过