搭建私有的前端監控服務: sentry

YDJFE發表於2018-06-15

去年底寫過一篇簡單而完整地體驗一遍sentry的sourcemap服務, 是完全基於使用層面的. 由於有需求需要自行搭建sentry, 整理一下搭建流程

版本

8.22.0 參考github release

搭建方式

官方推薦的方法是使用Docker, 我們這裡以使用Docker為例

前期準備

daocloud上附有教程, 請自行查閱

$ docker --version
Docker version 18.05.0-ce, build f150324
$ docker-compose --version
docker-compose version 1.21.2, build a133471
複製程式碼

搭建步驟

拉取onpremise

onpremise是官方提供的包含了sentry搭建所需要的全部依賴的載入程式

$ git clone https://github.com/getsentry/onpremise.git
複製程式碼

進到onpremise並新建本地資料庫和sentry配置目錄

$ cd onpremise
$ mkdir -p data/{sentry,postgres}
複製程式碼

這樣需要說明一下, 我一開始沒執行這一步操作, 雖然在構建過程中程式會給我們新建這些本該有的目錄. 然而, 後續出現的一連串讓人崩潰的問題, 譬如There was an error loading data, 也會與此相關.

生成secret key

$ docker-compose run --rm web config generate-secret-key
複製程式碼

這個時候會在終端輸出

Starting onpremise_redis_1     ... done
Starting onpremise_postgres_1  ... done
Starting onpremise_memcached_1 ... done
xxx+5%xxxxxxx!!xxxxxxxx&6(xxxxxxx%xoml)xxxxxxxxxx
複製程式碼

複製祕鑰(即最後一行)到docker-compose.yml中的SENTRY_SECRET_KEY對應的value

更新配置及建立super user

$ docker-compose run --rm web upgrade
複製程式碼

正常的話, 終端會出現

...
Would you like to create a user account now...
...
複製程式碼

正常鍵入即可

在部署到linux機器上時, 出現過一種情況就是: 根本沒出現這一步, 果斷從頭再來. 還好, 問題就此打住.

郵件配置

不像國內, 很多應用都支援郵件手機二選一的註冊方式. 而sentry, 少了郵件功能, 就好像被閹割了一樣, 也沒什麼好用的了.

在onpremise根目錄裡, 有一個config.yml配置檔案, 裡面定義了一些常規配置, 包括郵件配置方式.

# Use dummy if you want to disable email entirely
mail.backend: 'smtp'
mail.host: 'smtp.qq.com'
mail.port: 587
mail.username: '123@qq.com'
# 郵箱授權碼, 非郵箱密碼
mail.password: '123'
mail.use-tls: true
# The email address to send on behalf of
mail.from: '123@qq.com'
# 請保持與域名嚴格一致
mail.list-namespace: 'sentry.yourdomain.com'
複製程式碼

除了上述的註釋外, 還有:

  • 我一開始嘗試的是163的郵箱, 一直髮不出郵件, 顯示timeout, 所以轉了qq, 還不知道為什麼.
  • 用qq郵箱時埠號儘量用587, 用465會出現一些奇怪的問題. sentry只支援tls而非ssh,所以埠改587試試

啟動服務

$ docker-compose up -d
複製程式碼

如無意外, 一切正常, 埠預設是9000, 本地的話可以直接開啟localhost:9000訪問

用nginx配置http(s)

官網上也有相關說明

配置https不要忽略了文件末段的修改sentry.conf.py

import os
import os.path

# 新增變數
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
複製程式碼

貼一下我的 nginx for https 配置

sentry.conf

server {
    listen 80;
    server_name sentry.yourdomain.com www.sentry.yourdomain.com;
    location / {
        if ($request_method = GET) {
            rewrite  ^ https://$host$request_uri? permanent;
        }
        return 405;
    }
    access_log /home/wwwlogs/sentry_yourdomain.log main;
}
server {
    listen 443;
    ssl on;
    ssl_certificate      /etc/nginx/ssl/yourdomain.crt;
    ssl_certificate_key  /etc/nginx/ssl/yourdomain.key;

    proxy_set_header   Host                 $http_host;
    proxy_set_header   X-Forwarded-Proto    $scheme;
    proxy_set_header   X-Forwarded-For      $remote_addr;
    proxy_redirect     off;

    # keepalive + raven.js is a disaster
    keepalive_timeout 0;

    location / {
	proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://localhost:9000;
        add_header Strict-Transport-Security "max-age=31536000";
    }


    access_log /home/wwwlogs/sentry_yourdomain.log main;
}
複製程式碼

訪問並配置

搭建私有的前端監控服務: sentry
使用super user賬戶登入

首次需要配置Root URL等資訊, 其中的Root URL填寫https://sentry.yourdomain.com即可, 不要填類似https://sentry.yourdomain.com/這種, 貌似對從郵件中點選跳轉等操作不友好.

驗證郵箱

搭建私有的前端監控服務: sentry

團隊內部使用可以使用郵件邀請機制!!!!

結合文章開始介紹的簡單而完整地體驗一遍sentry的sourcemap服務, 可以體驗一下自己搭建並使用sentry的快感!!!!

相關文章