分类 DevOps 下的文章

目录

  1. 安装和配置Jenkins
  2. 构建和发布Docker镜像

安装和配置Jenkins

  1. 准备一个操作系统,并安装Docker,具体可以参考Docker文档

    • 若是Linux操作系统,应增加docker用户组并将当前作业用户添加进组,否则必须使用sudo升权执行

      sudo groupadd docker
      sudo usermod -aG docker ${USER}

      退出登陆或重启系统后即可直接运行docker

  2. 拉取Jenkins相关Docker镜像并运行

    • 拉取并运行blueocean版本的Jenkins镜像:

      docker run -p 8080:8080 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean
    • 为了支持SSH操作,拉取并运行jenkins/ssh-agent镜像:

      cat pub.key | docker run jenkins/ssh-agent

      * pub.key配置相关证书密钥中Jenkins容器的公钥

  3. 配置Jenkins:

    • 浏览器打开Jenkins镜像宿主机IP地址所在8080端口,如:http://localhost:8080
    • 使用上一步启动Jenkins获得的初始密码进入系统并创建用户
    • 进入Manage Jenkins -> Manage Plugins添加Maven Integration pluginGitLab PluginSSH pluginDocker Pipeline这些插件
    • 进入Manage Jenkins -> Global Tool Configuration配置JDK、Git、Maven、Docker
      jenkins-jdk.png
      Jenkins- Git.png
      Jenkins- Maven.png
      Jenkins-Docker.png
  4. 配置相关证书密钥和用户名密码,为连接GitHub、Gitlab,Docker私服、远程服务器做准备:

    • 配置Jenkins自身的证书:进入Jenkins所在容器,创建SSH密钥/证书,并添加进Jenkins系统中(用来从Github/Gitlab下载源码)

      # 进入jenkins容器,假设容器ID为abc
      docker exec -it abc /bin/bash
      # 生成证书,默认在/var/jenkins_home/.ssh/下有id_rsa和id_rsa.pub两个密钥和公钥
      ssh-keygen -t rsa
    • 将公钥作为Deploy Key添加进对应的Github或者Gitlab项目中
    • Manage Jenkins -> Credentials中添加此密钥(Jenkins自身密钥)
    • 继续添加Docker私服的用户名密码
    • 继续添加远程服务器SSH登陆的用户名密码
  5. 创建Jenkins构建脚本

    • 若是Maven项目,可以选择Maven项目构建;若是纯Docker构建,直接选择Freestyle
    • 配置source为Git,输入repo地址(git@开头),并选择Jenkins自身密钥作为凭证(Credentials)
    • 添加构建步骤,选择Docker构建和发布,输入Dockerfile所在文件夹,若就在根目录则不必输入
    • 选择使用Docker构建,设置镜像名称为Docker私服地址/用户/镜像名,勾选发布镜像,并选择Docker私服的凭证
    • 在触发条件出选择push event,将对应的Webhook填写到GitHub/Gitlab对应项目的Webhook设置中去
  6. 测试构建脚本(略)
  7. 在远程服务器上线
    通过布置一个脚本,进行远程登录+拉取并运行docker镜像,即可实现在远程服务器上上线的操作。

参考

  1. 高效部署Springboot的三种方式,知乎

Nginx settings:

/etc/nginx/sites-available/domain.name.com

include        /etc/nginx/proxy.conf;
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
server_tokens  off;

upstream corshapi {
        server localhost:5001;
}

add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;


limit_req  zone=one burst=10 nodelay;

location /api {
        proxy_pass         http://localhost:5001;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
}

Reference

  1. Publishing to local IIS failed to include JS files for Pages when using 'abp-script' Tag
  2. Configure IdentityServer4 behind nginx reverse-proxy
  3. Enforce HTTPS in ASP.NET Core
  4. Host ASP.NET Core on Linux with Nginx
  5. Depoloyment Problem: invalid_request
  6. ABP Framework to Azure! - Part 10
  7. Sign-in - IdentityServer 4
  8. Authorization in Angular UI

微信截图_20200606131522.png

引子

心血来潮想看看Nginx的access日志,然而拉下来之后,打开几十万行的文件,无从下手。于是想找一个日志分析工作,能够达成以下目的:

  • 网络流量:某个区间范围内的入站、出站流量
  • IP地址,最好可以Geolocaiton一下知道物理位置
  • 访问设备、浏览器等信息
  • 访问的路由信息,比如访问了那个URI等

搜索了一下,发现其实有非常多的运维工作能够满足需求,但是最简单的还是GoAccess的方案。

GoAccess

微信截图_20200606131350.png

官网:https://goaccess.io/

GoAccess is an open source real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems or through your browser.

It provides fast and valuable HTTP statistics for system administrators that require a visual server report >on the fly.

简单来说GoAccess可以直接对Nginx等程序产生的日志进行分析,然后直接可视化。这个过程比使用诸如ELK方案来得简单快捷

GoAccess功能特征

GoAccess解析指定的Web日志文件并将数据输出到X终端。功能包括:

  • 完全实时,所有面板和指标定时在终端输出上每200 ms更新一次,在HTML输出上每秒更新一次。
  • 跟踪应用程序响应时间,如果您想跟踪减慢网站速度的网页,会非常有用。
  • 支持几乎所有Web日志格式, GoAccess允许任何自定义日志格式字符串。
  • 支持增量日志处理,GoAccess能够通过磁盘上的B + Tree数据库逐步处理日志,保持数据持久性。
  • 可定制配色方案,Tailor GoAccess以适合您自己的色彩品味/方案。
  • 支持大型数据集,GoAccess 为大型数据集提供磁盘B +树存储,无法将所有内容都安装在内存中。
  • Docker支持,能够从上游构建GoAccess的Docker镜像。

安装和配置

安装

安装GoAccess的话,官网有非常详细的教程,可以点击这里(download)查看详情,这里以Ubuntu 16.04/18.04为例:

不要使用Ubuntu官方源, 使用GoAccess官方源:

$ echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list
$ wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install goaccess

配置

基本上不用配置,可以略去

简单使用和部署

在终端输出

定位到access.log所在文件夹,比如/var/log/nginx, 然后执行

# goaccess access.log -c

如果提示没有权限打开access.log文件,则需要使用sudo等命令提权

输出为静态报告

定位到access.log所在文件夹,比如/var/log/nginx, 然后执行

# goaccess access.log -o report.html --log-format=COMBINED

如果提示没有权限打开access.log文件,则需要使用sudo等命令提权

输出为动态报告

定位到access.log所在文件夹,比如/var/log/nginx, 然后执行

# goaccess access.log -o report.html --log-format=COMBINED

如果提示没有权限打开access.log文件,则需要使用sudo等命令提权

这样我们打开report.html即可以看到可视化的报告

多个日志文件的分析

Nginx一般会有多个日志文件,有得还gz压缩了,这时候需要使用:

$ sudo zcat -f access.log* | sudo goaccess -o /var/www/monitor/report.html --log-format=COMBINED --real-time-html

这种方式,将多个日志文件传入GoAccess

这样我们打开report.html即可以看到可视化的报告,我这里把html页面放在了web server上,可以直接通过web server访问

通过网络可以访问的实时日志记录

1. 配置Nginx

location /report.html {
    alias /var/www/html/report.html;
    # 下面三行是为了实现websocket
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

2. 使用Daemon模式启动GoAccess

# sudo zcat -f access.log* | sudo goaccess access.log* -o /var/www/html/report.html --real-time-html --time-format='%H:%M:%S' --date-format='%d/%b/%Y' --log-format=COMBINED --daemonize

我们加--daemonize参数是为了后台执行,执行这个的前提是有--real-time-html这个参数。如果我们是https的还需要添加--ssl-cert=crt文件目录 --ssl-key=key文件目录这两个参数才可以实现wss