среда, 28 августа 2019 г.

Допиливаем Sentry

В предыдущей заметке описал установку Sentry в Docker контейнере, но всплыла одна небольшая печалька: современные броузеры отказываются переходить с HTTPS сайта по HTTP ссылке.
Сегодня будем прикручивать SSL сертификаты к Sentry.
Ставим Nginx и скрипт-клиент Let's Encrypt:
apt install -y nginx certbot
Для того, чтобы сгенерировать сертификаты необходимо осуществить промежуточную настройку для доступа по HTTP
Создаем конфиг Nginx для sentry /etc/nginx/sites-available/sentry.mysite.com следующего содержания:
server {                                                                                                                                                                        
       listen 80;                                                                                                                                                               
       listen [::]:80;                                                                                                                                                          
                                                                                                                                                                                
       server_name sentry.mysite.com www.sentry.mysite.com;                                                                                                     
    location / {                                                                                                                                                                
      proxy_pass        http://localhost:8080;                                                                                                                                  
    }                                                                                                                                                                           
}
Создаем на наш конфиг символическую ссылку из папки /etc/nginx/sites-enabled:
cd /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/sentry.mysite.com
Рестартим Nginx:
systemctl restart nginx.service
Необходимо обеспечить разрешение доменных имен для sentry.mysite.com и www.sentry.mysite.com, а так же доступ из мира по 80 и 443 портам.
Генерируем сертификаты:
certbot certonly --webroot --agree-tos --email admin_mail@mysite.com -w /var/www/mysite.com/ -d mysite.com
Жмем Y
Приводим файл /etc/nginx/sites-available/sentry.mysite.com к виду:

  server {                                                                                                                                                                      
    listen   80;                                                                                                                                                                
    server_name sentry.mysite.com www.sentry.mysite.com;                                                                                                        
                                                                                                                                                                                
    location / {                                                                                                                                                                
      if ($request_method = GET) {                                                                                                                                              
        rewrite  ^ https://$host$request_uri? permanent;                                                                                                                        
      }                                                                                                                                                                         
      return 405;                                                                                                                                                               
    }                                                                                                                                                                           
  }                                                                                                                                                                             
                                                                                                                                                                                
  server {                                                                                                                                                                      
    listen   443 ssl;                                                                                                                                                           
    server_name sentry.mysite.com www.sentry.mysite.com;                                                                                                        
                                                                                                                                                                                
  set_real_ip_from 127.0.0.1;                                                                                                                                                   
  set_real_ip_from 10.0.0.0/8;                                                                                                                                                  
  real_ip_header X-Forwarded-For;                                                                                                                                               
  real_ip_recursive on;                                                                                                                                                         
                                                                                                                                                                                
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;                                                                                                                                          
  ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;                                    
  ssl_prefer_server_ciphers on;                                                                                                                                                 
  ssl_session_cache shared:SSL:128m;                                                                                                                                            
  ssl_session_timeout 10m;                                                                                                                                                      
  ssl_certificate      /etc/letsencrypt/live/sentry.mysite.com/fullchain.pem;                                                                                           
  ssl_certificate_key  /etc/letsencrypt/live/sentry.mysite.com/privkey.pem;                                                                                             
                                                                                                                                                                                
                                                                                                                                                                                
    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;                                                                                                                                                        
                                                                                                                                                                                
    # use very aggressive timeouts                                                                                                                                              
    proxy_read_timeout 5s;                                                                                                                                                      
    proxy_send_timeout 5s;                                                                                                                                                      
    send_timeout 5s;                                                                                                                                                            
    resolver_timeout 5s;                                                                                                                                                        
    client_body_timeout 5s;                                                                                                                                                     
                                                                                                                                                                                
    # buffer larger messages                                                                                                                                                    
    client_max_body_size 5m;                                                                                                                                                    
    client_body_buffer_size 100k;                                                                                                                                               
                                                                                                                                                                                
    location / {                                                                                                                                                                
      proxy_pass        http://localhost:9000;                                                                                                                                  
                                                                                                                                                                                
      add_header Strict-Transport-Security "max-age=31536000";                                                                                                                  
    }                                                                                                                                                                           
  }
Снова рестартим Nginx:
systemctl restart nginx.service
Заходим на сайт по имени: sentry.mysite.com
Все работает!
Добавляем автоматическое обновление сертификатов:
crontab -e
Добавляем строку:
0 0 1,16 * * /usr/bin/certbot renew
Порты 80 и 443 должны быть доступны из мира.

Комментариев нет:

Отправить комментарий