docker-compose编排,gitlab安装和授权,git使用和jenkins安装和使用

一,基于docker-compose实现对nginx+tomcat web服务的单机编排。
介绍:docker-compose是实现对单机容器的快速编排,它将管理的容器分为三层,分别为project,service和container.

1.创建docker-compose.yml文件 每个service包含image,container_name,expose,ports,networks和links(依赖的服务)

cat docker-compose.yml
version: '3.6'
services:
  nginx-server:
    image: nginx:1.22.0-alpine
    container_name: nginx-web1
    expose:
      - 80
      - 443
    ports:
      - "80:80"
      - "443:443"
    networks: #网络2,使用自定义的网络,如果网络不存在则会自动创建该网络并分配子网,并且容器会有两块网卡
      - front
      - backend
    links:
      - tomcat-server

  tomcat-server:
    #image: tomcat:7.0.93-alpine
    image: registry.cn-hangzhou.aliyuncs.com/zhangshijie/tomcat-myapp:v1
    container_name: tomcat-app1
    ##network_mode: bridge #网络1,使用docker安装后的默认网桥
    #expose:
    #  - 8080
    #ports:
    #  - "8080:8080"
    networks: #网络2,使用自定义的网络,如果网络不存在则会自动创建该网络并分配子网,并且容器会有一块网卡
      - backend
    links:
      - mysql-server
   mysql-server:
    image: mysql:5.6.48
    container_name: mysql-container
**#    network_mode: bridge #网络1,使用docker安装后的默认网桥**
    volumes:
      - /data/mysql:/var/lib/mysql
      #- /etc/mysql/conf/my.cnf:/etc/my.cnf:ro
    environment:
      - "MYSQL_ROOT_PASSWORD=12345678"
      - "TZ=Asia/Shanghai"
    expose:
      - 3306
    ports:
      - "3306:3306"
    networks: #网络2,使用自定义的网络,如果网络不存在则会自动创建该网络并分配子网,并且容器会有一块网卡
      - backend

networks:
  front: #自定义前端服务网络,需要docker-compose创建
    driver: bridge
  backend:  #自定义后端服务的网络,要docker-compose创建
    driver: bridge
  default: #使用已经存在的docker0默认172.17.0.1/16的网络
    external:
      name: bridge

执行docker-compose up -d 命令
root@ubuntu-server1:/data/docker-compose/case3# docker-compose up -d

Creating network "case3_backend" with driver "bridge"
Creating network "case3_front" with driver "bridge"
Pulling mysql-server (mysql:5.6.48)...
5.6.48: Pulling from library/mysql
.....
Digest: sha256:2bf1a0a05a6ad437dcac6689e48a9c33774ac92c6213fce2c4196343210592f3
Status: Downloaded newer image for mysql:5.6.48
Pulling tomcat-server (registry.cn-hangzhou.aliyuncs.com/zhangshijie/tomcat-myapp:v1)...
v1: Pulling from zhangshijie/tomcat-myapp
.....
Digest: sha256:66b601cecdf422c112ba9e71d38e33e577691f91c41b2fe7b5a21055c6a7142a
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/zhangshijie/tomcat-myapp:v1
Creating mysql-container ... done
Creating tomcat-app1     ... done
Creating nginx-web1      ... done

创建网络和拉取镜像。注意里面的links 字段,表示依赖下面的服务。
修改nginx容器配置,访问nginx时转发到后端的tomcat服务上,

root@ubuntu-server1:/data/docker-compose/case3# docker ps -a
CONTAINER ID   IMAGE                                                           COMMAND                  CREATED          STATUS                     PORTS                                                                      NAMES
81599b77c4fd   nginx:1.22.0-alpine                                             "/docker-entrypoint.…"   22 minutes ago   Up 22 minutes              0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   nginx-web1
aeb77640ef60   registry.cn-hangzhou.aliyuncs.com/zhangshijie/tomcat-myapp:v1   "/apps/tomcat/bin/do…"   22 minutes ago   Up 22 minutes              8080/tcp, 8443/tcp                                                         tomcat-app1
e6806bf17625   mysql:5.6.48                                                    "docker-entrypoint.s…"   22 minutes ago   Exited (1) 6 seconds ago                                                                              mysql-container
root@ubuntu-server1:/data/docker-compose/case3# docker exec -it 81599b77c4fd sh
/etc/nginx/conf.d # vim default.conf
.........
location /myapp {
	proxy_pass http://tomcat-server:8080;
    }
..........

访问nginx服务,跳转到tomcat服务,成功。
在这里插入图片描述
二, 安装gitlab,创建group、user和project并授权

**#安装gitlab**
root@yong:~# dpkg -i gitlab-ce_15.4.3-ce.0_amd64.deb
**#配置/etc/gitlab/gitlab.rb配置文件**
vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.159.130'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "603938723@qq.com"
gitlab_rails['smtp_password'] = "gavtxtsroksubxfx"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = :login
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = "603938723@qq.com"
user["git_user_email"] = "603938723@qq.com"
**#重新配置服务**
 root@yong:~# gitlab-ctl reconfigure 

#创建Group组
在这里插入图片描述
在这里插入图片描述#创建user用户 user1 user2
在这里插入图片描述
#创建project
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/bafd2e86467f43d5993f6a71b565b08d.png

在这里插入图片描述
#对创建的用户user1,user2授权
在这里插入图片描述
三,熟练git命令的基本使用,通过git命令实现源代码的clone、push等基本操作。
登录另一台server1服务器,安装git工具

root@ubuntu-server1:/data# mkdir code
root@ubuntu-server1:/data# cd code
root@ubuntu-server1:/data/code# git clone http://192.168.159.130/primaryedu/app1.git
Cloning into 'app1'...
Username for 'http://192.168.159.130': user1
Password for 'http://user1@192.168.159.130': 
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 2.78 KiB | 2.78 MiB/s, done.
root@ubuntu-server1:/data/code# ls
app1
root@ubuntu-server1:/data/code# cd app1/
#生成一个代码文件,把代码文件上传到git服务器
root@ubuntu-server1:/data/code/app1# cat index.html 
<h1>This is a heading1</h1>
root@ubuntu-server1:/data/code/app1# git config --global user.email "admin@qq.com"  #设置全局邮箱
root@ubuntu-server1:/data/code/app1# git config --global user.name "admin"   #设置全局用户名
root@ubuntu-server1:/data/code/app1# git add .     #添加当前目录下所有数据到暂存区
root@ubuntu-server1:/data/code/app1# git commit -m "add inde.html"   #提交文件到工作区
root@ubuntu-server1:/data/code/app1# git push  #提交代码到服务器,分支是master是受保护分支,无论是master还是开发者都无权限push,只有owner user2可以操作
Username for 'http://192.168.159.130': user2
Password for 'http://user2@192.168.159.130': 
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 2 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 295 bytes | 295.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://192.168.159.130/primaryedu/app1.git
   e2b5f64..cacc324  main -> main

在这里插入图片描述
#更新代码,操作代码本地回退操作

root@ubuntu-server1:/data/code/app1# cat index.html 
<h1>This is a heading1</h1>
<h1>This is a heading22222222222</h1>
root@ubuntu-server1:/data/code/app1# git add .
root@ubuntu-server1:/data/code/app1# git commit -m "v2"
[main 64b6ef4] v2
 1 file changed, 1 insertion(+)
root@ubuntu-server1:/data/code/app1# git push
Username for 'http://192.168.159.130': user2
Password for 'http://user2@192.168.159.130': 
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 2 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 294 bytes | 294.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://192.168.159.130/primaryedu/app1.git
   cacc324..64b6ef4  main -> main
root@ubuntu-server1:/data/code/app1# git reset --hard HEAD^  **#git版本回滚, HEAD为当前版**本,加一个^为上一个,^^为上上一个版本
HEAD is now at cacc324 add inde.html
root@ubuntu-server1:/data/code/app1# cat index.html 
<h1>This is a heading1</h1>

四,熟练掌握对gitlab服务的数据备份与恢复
#执行备份命令
root@ubuntu-server1:/data/code/app1# gitlab-ctl stop unicorn sidekiq
root@ubuntu-server1:/data/code/app1# gitlab-rake gitlab:backup:create
2022-11-09 15:09:41 +0000 – Dumping main_database …
Dumping PostgreSQL database gitlabhq_production … [DONE]
2022-11-09 15:09:46 +0000 – Dumping main_database … done
root@ubuntu-server1:/data/code/app1# cd /var/opt/gitlab/backups/
root@ubuntu-server1:/var/opt/gitlab/backups# ls
1668006581_2022_11_09_15.4.3_gitlab_backup.tar #生成的备份文件包,用于恢复

删除用户user1,在线编辑修改代码,合并提交
在这里插入图片描述
在这里插入图片描述
#执行恢复操作

root@ubuntu-server1#gitlab-ctl stop unicorn sidekiq
root@ubuntu-server1#gitlab-rake gitlab:backup:create
root@ubuntu-server1# cd /var/opt/gitlab/backups/
root@ubuntu-server1:/var/opt/gitlab/backups# ls
1668006581_2022_11_09_15.4.3_gitlab_backup.tar

在这里插入图片描述

root@ubuntu-server1#gitlab-rake gitlab:backup:restore BACKUP=1668006581_2022_11_09_15.4.3
root@ubuntu-server1:/var/opt/gitlab/backups# gitlab-ctl start unicorn sidekiq  #启动服务

在这里插入图片描述
五,部署jenkins服务器并安装gitlab插件、实现代码免秘钥clone
#安装jenkins服务,修改配置文件

root@jenkins:~# dpkg -i jenkins_2.361.2_all.deb && systemctl stop jenkins
Selecting previously unselected package jenkins.
(Reading database ... 73685 files and directories currently installed.)
Preparing to unpack jenkins_2.361.2_all.deb ...
...................
root@jenkins:~# vim /lib/systemd/system/jenkins.service
User=root
Group=root
Environment="JAVA_OPTS=-Djava.awt.headless=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true"
root@jenkins:~# systemctl daemon-reload && systemctl start jenkins

#初次登录jenkins,需要copy密码黏贴到下面,后面安装推荐的插件,配置登录账号信息。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
#安装插件后,重启jenkins服务。安装可选插件,配置邮件服务。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
#配置任务,先配置shell命令方式来执行任务。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
#配置脚本方式执行任务,需要把运行jenkins服务的root用户公钥copy到gitlab上,实现无密码登录拉取代码。
在这里插入图片描述
在这里插入图片描述
#jenkins产生秘钥对

root@jenkins:/data/scripts# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 

#拷贝公钥到gitlab服务器上

root@jenkins:~/.ssh# cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDM9BVhM2FsuY+t5LqhZIKDZWM4eQ0j9qocFI87OEGeJ7Ns6QA4m8d+62Md9Jb3XbzfsrMIGY/DOkW/H9ww9hE9KP4y20DUU5lIeRnQIsfJecdCrcSkBy4gFDu4oSBVcg7k4GFXCNoOkNPu79u87PrIV4QWPul2aDGv+CQM/ITb9fE8smSmocxKgbjd7ewyMmh4ev067huqbuC9FJgh4lqmvHamFBPk+TfCGZAILqqohY+q/77KJ+lG2Wj77dbz/+pat/N65a1MHJxwHrD+5WI4F7eEHxhKH7f7EvWk6sk02K94Ym/neJV+K0B1FgNNeW8SRWlYP2KDwXsua7t9DNrknw79eJ39M11j8qhHUUSEM2o5xX6UJBczdQJud1sSHoDCV7NgcOI6lcd/nnZbetBx6tVyMJdECkLnuA+cVnfCxzfMpyRAl37gCfRxwASGKqj44hmdLnP6UiW4oJ0l1o/E/nNCwvMcUZDDXW+ZDQJL3Y32VC1ucPP8XyqJX0PodN8= root@jenkins

#通过git协议clone gitlab上的代码,成功

root@jenkins:/tmp# git clone git@192.168.159.130:primaryedu/app1.git
Cloning into 'app1'...
The authenticity of host '192.168.159.130 (192.168.159.130)' can't be established.
ECDSA key fingerprint is SHA256:BvlthaVudES3m4d6odiQUIuOFMCLcd4KBuGAB5K++jk.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.159.130' (ECDSA) to the list of known 
.......
Unpacking objects: 100% (20/20), 4.46 KiB | 415.00 KiB/s, done.

#在jenkins上通过执行脚本拉取gitlab上代码,并copy到web1服务器nginx上

root@jenkins:/var/lib/jenkins/workspace/test-job1# cat /data/scripts/test.py 
#!/bin/bash
#print("output for jenkins test")
cd /data/scripts/code/
rm -rf app1/
git clone git@192.168.159.130:primaryedu/app1.git
cd app1
scp index.html 192.168.159.132:/var/www/html/

在jenkins web界面上填入脚本路径,执行 成功
在这里插入图片描述
在这里插入图片描述
#在jenkins上配置,通过jenkins拉取gitlab上源码,并上传到web1服务器nginx服务,成功。
注意:把运行jenkins服务的root账号的private key复制到 Credentials里。之前gitlab上有jenkins服务器root用户的公钥,需要配对,才能正常拉取代码。
在这里插入图片描述
在这里插入图片描述
#登录web1服务器,查看nginx服务,有拉取到新的代码,并运行了。
在这里插入图片描述

1. 安装DockerDocker Compose 在安装DockerDocker Compose之前,需要先安装Docker的依赖包。 首先,更新apt-get: ``` sudo apt-get update ``` 然后安装Docker的依赖包: ``` sudo apt-get install apt-transport-https ca-certificates curl software-properties-common ``` 接下来,添加Docker的GPG密钥: ``` curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - ``` 添加Docker的APT仓库: ``` sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" ``` 更新apt-get: ``` sudo apt-get update ``` 安装Docker: ``` sudo apt-get install docker-ce ``` 安装Docker Compose: ``` sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose ``` 添加执行权限: ``` sudo chmod +x /usr/local/bin/docker-compose ``` 2. 编写Docker Compose文件 在本地创建一个文件夹,用于存放Docker Compose文件和Jenkins的数据: ``` mkdir jenkins cd jenkins mkdir jenkins-data ``` 然后,在该文件夹下创建一个docker-compose.yml文件,用于定义Jenkins容器和相关配置: ``` version: '3' services: jenkins: container_name: jenkins image: jenkins/jenkins:lts ports: - "8080:8080" - "50000:50000" volumes: - "./jenkins-data:/var/jenkins_home" networks: - jenkins_network networks: jenkins_network: ``` 此配置文件会创建一个名为“jenkins”的容器,使用jenkins/jenkins:lts镜像,映射8080和50000端口,并将/var/jenkins_home目录映射到本地的./jenkins-data目录。 3. 启动Jenkins容器 启动Jenkins容器: ``` docker-compose up -d ``` 访问http://localhost:8080,输入初始管理员密码,完成Jenkins安装。 4. 配置Jenkins 登录Jenkins后台,安装Git插件和Maven插件。 在Jenkins后台,选择“新建任务”,配置任务信息,选择“自由风格项目”。 在“源码管理”中选择“Git”,填写Git仓库地址和用户凭证,保存并应用配置。 在“构建触发器”中选择“轮询SCM”,填写轮询时间间隔。 在“构建”中选择“执行shell命令”,填写构建命令,如: ``` mvn clean package ``` 在“构建后操作”中选择“部署war/ear到容器”,填写部署配置信息,如: ``` Container: Tomcat 8.x Remote Tomcat URL: http://localhost:8080 Credentials: Jenkins WAR/EAR files: **/*.war Context path: / ``` 保存并应用配置。 5. 获取远程代码并构建 在Jenkins任务列表中,选择要构建的任务,点击“立即构建”按钮,Jenkins会自动获取远程Git仓库中的代码,并执行构建命令。 构建完成后,Jenkins会自动将构建好的war包部署到Tomcat容器中,访问http://localhost:8080即可查看部署的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值