专栏首页浪子编程走四方记录一次docker+jenkins+gitlab搭建内网开发环境

记录一次docker+jenkins+gitlab搭建内网开发环境

本来是想通过视频的方式给录下来,这样更直观一些,但是硬件条件受限制,因此只能通过文章形式展现。总体过程下来,发现是环境的搭建和网络的配置比较多的坑,因此这一块比较细致一些。后面至于Jenkins和gitlab的配置网络上很多教程,都是适用于这套环境的,因此介绍的比较粗糙。如果有问题,可以留言,看到一定回复。

文章简介

文本主要的内容是,利用Jenkins+gitlab+NGINX+MySQL+docker搭建一套公司内部级别的开发、测试系统。整个系统的流程图如下。

适用对象

适用于熟悉NGINX、MySQL、docker、Jenkins的开发人员。文中部分截图省略但并未影响操作。

技术介绍

硬件设备

Macmini作为局域网内部服务器。配置为16G内存。硬盘为500G。

在下文演示中,该设备的IP为192.168.2.103。下文所提到的服务器均指的是这台Macmini设备。

下面提到的局域网内的任意一台设备和Mac都是指的我个人的Mac设备,不是上面提到的Macmini服务器,因此在文章中的演示操作,可能与使用Windows系统的人员有所区别。

软件技术

1.NGINX主要是提供web服务,提供Jenkins、gitlab的反向代理服务。

2.MySQL提供数据库存储。

3.gitlab实现代码的托管,webhooks提供自动触发脚本。

4.Jenkins主要负责构建任务。

5.docker负责Jenkins与gitlab容器的搭建。

搭建步骤

设置远程登录

想要通过shell操作服务器,就需要配置服务器的22端口。Mac具体的配置如下。配置路径:打开系统配置->找到共享菜单。

将下面的远程登录和远程管理给勾选上就可以了。

事先找一台显示器连接到服务器,查看一下服务器的IP地址。

这里的192.168.2.101在写文章时,为了方便截图,以局域网内部的其他设备作为示例,演示查看ip的方式。

接下来我们通过局域网的设备登录到该服务器。我们事先通过telnet命令,查看服务器22端口是否能够连接上。

连接服务器,如果出现下图则表示连接成功。

NGINX安装与配置

服务器安装NGINX、MySQL都是用的Mac的一款包管理工具(brew使用文档)。

下面的所有操作都是连接上服务器后,在服务器上进行的操作。

// 安装brew
 
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
 

如果我们使用brew安装程序,默认的安装程序在如下路径。

/usr/local/Cellar 

下面是brew常见的使用命令

// 帮助命令
 
brew -h
 
// 安装包
 
brew install xxx
 
// 更新包
 
brew update xxx
 
// 查看包信息
 
brew info xxx
 
// 移除指定包
 
brew uninstall xxx
 
// 搜索包
 
brew search xxx
 
// 列出已经安装过的包
 
brew list 

我们在使用brew安装软件时,可以先通过search命令搜索包。如下图,因为我已经安装NGINX,因此NGINX名称后面会有一个绿色的√。

下面是NGINX的几个常用目录。

// nginx配置文件目录
 
/usr/local/etc/nginx
 
// nginx日志文件位置(如果没有logs目录,我们需要自行创建logs目录,
 
后面的域名配置的access_log和error_log等日志类文件就可以放在该目录下面。)
 
/usr/local/Cellar/nginx/1.17.3_1/logs 

下面是NGINX常用的操作命令。

// 搜索NGINX
 
brew search nginx
 
// 安装NGINX
 
brew install nginx
 
// 启动NGINX
 
nginx -c /usr/local/etc/nginx/nginx.conf
 
// 测试NGINX配置文件
 
nginx -t
 
// 重启NGINX
 
nginx -s reload 

检测NGINX安装是否成功 我们使用nginx -c /usr/local/etc/nginx/nginx.conf启动NGINX服务,然后使用lsof命令查看NGINX服务是否正常启动。

xxx@qq  /usr/local/Cellar/nginx/1.17.3_1/logs  lsof -i :80
 
COMMAND    PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
 
nginx     1764 xxx   11u IPv4 0x247f10f02380a3b7 0t0  TCP *:http (LISTEN) 

看到上面的输出结果,则表示我们的NGINX已经正常启动了。

在启动之前需要配置NGINX的配置文件,将默认的8080端口修改为80端口。

// 编辑/usr/local/etc/nginx/nginx.conf文件,将listen配置项的8080改为80
 
 server {
 
        listen       8080;
 
        server_name  localhost;
 


 
 #charset koi8-r;
 


 
 #access_log  logs/host.access.log  main;
 


 
        location / {
 
            root   html;
 
            index  index.html index.htm;
 
 }
 
 } 

现在就可以用局域网内部的任意一台电脑访问,如果出现如下界面则表示NGINX的操作已经成功。

NGINX额外的配置说明,默认情况下/usr/local/etc/nginx/目录下的nignx.conf就是nginx的配置文件。后面对nginx配置域名时,不会再该文件配置,因为所有的域名都在该文件中进行配置,显得太臃肿了。

// 在nginx.conf同级目录下创建一个servers的目录
 
mkdir servers
 
// 编辑nginx.conf文件,在文件的末尾"}"之前添加如下内容
 
include servers/*; 
// NGINX站点目录
/usr/local/var/www
 
// 给www目录做一个软连接,在不通过命令行的情况下也可以看到www目录
 
// ln -s /usr/local/var/www ~/www 

MySQL安装与配置

MySQL的安装方式可以有多种,这里使用的也是brew包管理器进行安装。搜索MySQL包。

安装MySQL。

brew install mysql@5.7 

配置MySQL远程连接

// 查找MySQL配置文件路径
 
sudo find / -name my.cnf
 
// MySQL配置文件路径
 
/usr/local/etc/my.cnf 

将下面的127.0.0.1修改为0.0.0.0,接下来启动MySQL服务,配置数据库用户远程登录权限(这里直接使用root用户作为示例)。数据库用户授权配置

brew services start mysql@5.7 

按照如下几个命令进行操作。

// 切换到mysql数据库
 
use mysql;
 
// 修改root用户的`host`字段(将user用户设置为允许远程登录)
 
update user set host = '%' where user = 'root'; 

重启MySQL服务。

brew services start mysql@5.7

远程登录测试。同样的,在局域网内找一台电脑,尝试连接到服务器的MySQL服务。在连接之前,我们可以使用telnet命令测试一下,服务器的3306端口是否开放。

telnet 192.168.2.103 

如果服务器3306端口未开放,需要将服务器的防火墙进行关闭。这个可以自行百度---[如果关闭Mac防火墙]。

mysql -h192.168.2.103 -uroot -p 

出现如下界面就证明我们的MySQL可远程登录了。

docker安装与配置

在Mac上安装docker都多种方式,这里推荐直接使用官方的dmg安装包进行安装。

配置docker的镜像源,我这里使用的是网易的镜像源。

sudo vim ~/.docker/daemon.json 

配置为下面的内容,然后启动docker。

{
 
 "registry-mirrors" : [
 
 "http://hub-mirror.c.163.com"
 
 ],
 
 "debug" : true,
 
 "experimental" : false
 
} 

如果要配置多个镜像源,可以直接使用","隔开即可。 Jenkins安装与配置

事先给Jenkins创建一个磁盘挂载目录。

mkdir /usr/local/var/www/jenkins

安装Jenkins使用的是jenkinsci/blueocean镜像。使用如下命令拉取镜像并创建一个Jenkins容器。

docker run -p 8080:8080 -v /usr/local/var/www/jenkins:/var/jenkins_home -d --name jenkins_local jenkinsci/blueocean
 

-p 将本机的8080端口映射到Jenkins容器的8080端口。

-v 将物理机的指定目录映射到Jenkins容器的工作目录(磁盘挂载)。(这一步很重要,因为docker里面的容器一旦被删掉,里面的文件就不存在了,下面的gitlab操作同理)。

-d 将容器以后台方式运行。

--name 给容器取名。

安装完成之后,直接使用http://192.168.2.103:8080,然后按照操作进行即可。

在第一次访问的时候,需要输入初始密码,默认的初始密码在Jenkins容器里面,我们这里使用了磁盘挂载,便直接操作物理机上的文件就可以了。初始密码在/usr/local/var/www/jenkins/secrets/initialAdminPassword。 gitlab安装与配置

事先给gitlab创建一个磁盘挂载目录

mkdir /usr/local/var/www/gitlab/{config,logs,data} 

使用如下命令拉起gitlab镜像并创建容器。

sudo docker run --detach --hostname bruce.gitlab.com --publish 0.0.0.0:8081:80 --name gitlab --restart always  --volume /usr/local/var/www/gitlab/config:/etc/gitlab  --volume /usr/local/var/www/gitlab/logs:/var/log/gitlab  --volume /usr/local/var/www/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:12.9.2-ce.0 

安装完成之后使用docker ps命令查看当前的容器状态。

 xxx@qq  /usr/local/var/www/jenkins/secrets  docker ps -a
 
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS                 PORTS                                   NAMES
 
8461608c3604        gitlab/gitlab-ce:12.9.2-ce.0 "/assets/wrapper" 7 hours ago         Up 7 hours (healthy) 22/tcp, 443/tcp, 0.0.0.0:8081->80/tcp   gitlab
 
b2df445142a8        jenkinsci/blueocean            "/sbin/tini -- /usr/…" 2 days ago          Up 7 hours             0.0.0.0:8080->8080/tcp, 50000/tcp       jenkins_local

访问gitlab,http://192.168.2.103:8081,默认的gitlab用户名为root,在第一次登陆时会提示你设置一个秘密的,下面截图是我已经设置过秘密之后进行的登录截图。

局域网内设备与gitlab通信

这里的通信指的是给gitlab配置一个域名,达到通过域名访问gitlab而不是通过ip+端口的方式。下面的Jenkins也是同理。主要是用到了NGINX的反向代理功能,通过访问NGINX配置的域名转发到对应的端口。

我们在NGINX的servers目录下创建一个gitlab.conf的配置文件,写入如下内容:

server{
 
        listen 80;
 
        server_name bruce.gitlab.com;
 
        location / {
 
                proxy_pass http://127.0.0.1:8081;
 
 }
 
} 

接着在我们局域网内的设备上的主机文件hosts中添加如下配置,这样我们就可以通过gitlab.com这个域名访问gitlab了。

192.168.2.103 gitlab.com; 

局域网内设备与Jenkins通信

Jenkins和gitlab的配置同理,下面是具体的NGINX配置文件。这个和上面的gitlab同理,就不提如何访问了。

server{
 
    listen 80;
 
    server_name bruce.jenkins.com;
 
    location / {
 
        proxy_pass http://192.168.2.103:8080/;
 
 }
 
} 

在实际的过程中,不管是通过ip还是配置的虚拟域名,发现都是无法访问,并且使用telnet、ping命令都是无法进行通讯,还需要做如下配置。

docker安装后,默认会创建三种网络类型,bridge、host和none,可通过如下命令查看

sudo docker network ls

bridge:网络桥接 默认情况下启动、创建容器都是用该模式,所以每次docker容器重启时会按照顺序获取对应ip地址,这就导致容器每次重启,ip都发生变化 none:无指定网络 启动容器时,可以通过–network=none,docker容器不会分配局域网ip host:主机网络 docker容器的网络会附属在主机上,两者是互通的。创建固定ip容器 1、创建自定义网络类型,并且指定网段

sudo docker network create --subnet=192.168.0.0/16 staticnet 

通过docker network ls可以查看到网络类型中多了一个staticnet

2、使用新的网络类型创建并启动容器

sudo docker run -it --name userserver --net staticnet --ip 192.168.0.2 ubuntu /bin/bash 

通过docker inspect可以查看容器ip为192.168.0.2,关闭容器并重启,发现容器ip并未发生改变。

配置操作

Jenkins基础配置

jenkkin配置gitlab插件。

进入系统管理->插件管理->可安装插件,输入gitlab,将gitlabplugin插件进行安装。

配置gitlab配置信息。

进入系统管理->系统配置->找到gitlab配置项,一共有三项:

Connection name:任意填写一个名字即可。

gitlab Host:填写gitlab的url地址即可。上面我给gitlab配置了一个bruce.gitlab.com的域名,因此这里填写这个域名即可。

Crenditals:选择add,根据弹出框选择gitlab APi Token选项。这里只需填写gitlab的token即可。token应该在gitlab中进行获取。获取的途径如下:打开GitLab,点击“setting”——“Account”,选择“Private token”即可。

配置gitlab的webhooks地址,实现自动化构建、部署。

参考链接

gitlab基础配置

接下来我们配置,我们主要局域网内的主机的公钥添加到自己对应的gitlab账号中,就可以免密进行提交代码。剩下的操作就和githuab,gitee操作仓库一样操作了。

本文分享自微信公众号 - 卡二条的技术圈(qq1005349393),作者:浪子编程走四方

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PHP垃圾回收机制

    PHP 是一门托管型语言,在 PHP 编程中,程序员不需要手工处理内存资源的分配与释放(使用 C 编写 PHP 或 Zend 扩展除外),这就意味着 PHP 本...

    A梦多啦A
  • 微信小程序pick组件使用问题总结

    . 这里我创建了一个index目录,该目录下面创建好必备的文件。这里只会操作到.js和.wxml文件。 第一种方案 wxml文件添加如下内容

    A梦多啦A
  • docker搭建环境如何配置端口

    在上面一篇文章中,分享过如何搭建和使用dnmp,今天分享如何修改dnmp中PHP容器的端口映射功能。

    A梦多啦A
  • 2016年最流行的六大深度学习开源工具

    对于希望在应用中整合深度学习功能的开发者来说,GitHub上其实还有很多不错的开源项目值得关注,以下我们推荐2016年人气最高的六款开源深度学习工具:(阅读原文...

    小莹莹
  • 本体技术视点 | 身份的五种思维模型(一)

    作者:Joe Andrieu, Nathan George, Andrew Hughes, Christophe MacIntosh, Antoine Rond...

    本体Ontology
  • CentOS配置docker和docker-compose

    最近在部署一个web服务,需要docker和docker-compose,遇到了许多问题,记录一下。

  • github优秀项目分享:基于yolov3的轻量级人脸检测、增值税发票OCR识别 等8大项目

    yolo-face-with-landmark 使用pytroch实现的基于yolov3的轻量级人脸检测

    公众号机器学习与生成对抗网络
  • 苹果WWDC:不搞AI优先,先用AI来加速你的手机应用

    今天的WWDC,除了年度硬件、系统更新,大家更为关注的是苹果是否也去选择“AI优先”的战略,因为它的老对手微软和Google早已经走上这条路了。 两个半小时的K...

    AI科技大本营
  • 从MySQL源码看日志命令失效的原因

    今天看数据库内核月报,发现一个蛮有意思的问题,就是show binary logs的时候没有任何结果,这个问题的原因很简单,但是分析问题的过程相比是艰辛...

    jeanron100
  • 【实战项目代码分享】计算机视觉入门教程&实战项目代码

    对理论知识有了了解后,这里介绍两个实战项目,分别是基于keras的多标签图像分类以及基于 Pytorch 的迁移学习教程。

    机器视觉CV

扫码关注云+社区

领取腾讯云代金券