1.基于 docker-compose 实现对 Nginx+Tomcat Web 服务的单机编排
[root@VM-4-6-centos case3-custom-network]# cat docker-compose.yml
version: '3.8' #对版本不是很敏感,'3.8'或'2.4'等都可以,旧版可能会少些功能
services:
nginx-server: #第一个service名字。docker-compose exec 等命令需要用到此service名称来操作;一个文件中可以写多个
image: nginx:1.22.0-alpine
container_name: nginx-web1-jeek03 #容器名称,docker-compose ps 看到的容器名字
# network_mode: bridge
#网络1,使用docker安装后的默认网桥;如果不指定网络,默认情况下,docker-compose会自己建一个新的网络
expose:
- 80
- 443
ports:
- "8001:80" #主机上80和443端口已经被占用,随便换两个
- "445:443"
# profiles: #基于配置文件指定要操作的目的容器,docker-compose --profile frontend up -d 可以只操作该组(前端)的若干个容器
# - frontend
networks: #网络2,使用自定义的网络,如果网络不存在则会自动创建该网络并分配子网,并且容器会有两块网卡
- front #网卡1;用于用户外部连接
- backend #网卡2;用于连接后端tomcat服务
links: #指定依赖关系:要tomcat容器起来之后再创建该nginx容器
- tomcat-server
tomcat-server:
#image: tomcat:7.0.93-alpine
image: registry.cn-hangzhou.aliyuncs.com/zhangshijie/tomcat-myapp:v1
container_name: tomcat-app1-jeek03
#network_mode: bridge
#expose:
# - 8080
#ports:
# - "8080:8080"
# profiles: #基于配置文件指定要操作的目的容器,docker-compose --profile backend up -d 可以只操作该组(后端)的若干个容器
# - backend
networks: #网络2,使用自定义的网络,如果网络不存在则会自动创建该网络并分配子网,并且容器会有一块网卡
- backend
links: #指定依赖关系:要MySQL容器起来之后再创建该tomcat容器
- mysql-server
mysql-server:
image: mysql:5.6.48
container_name: mysql-container-jeek03
# network_mode: bridge
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"
# profiles: #基于配置文件指定要操作的目的容器,docker-compose --profile backend up -d 可以只操作该组(后端)的若干个容器
# - backend
networks: #网络2,使用自定义的网络,如果网络不存在则会自动创建该网络并分配子网,并且容器会有一块网卡
- backend
networks:
front: #自定义前端服务网络,需要docker-compose创建
driver: bridge #使用bridge桥接模式。如不需要连接外部网络,也可以改为none/host
backend: #自定义后端服务的网络,要docker-compose创建
driver: bridge
default: #使用已经存在的docker0默认172.17.0.1/16的网络(该实验中用不到该项配置)
external: #表示不用docker-compose自己建网络。使用外部网络名称为bridge;与网络1:network_mode: bridge对应
name: bridge
未创建容器时:
docker-compose up -d 创建容器:
[root@VM-4-6-centos case3-custom-network]# docker-compose down #会先停止容器;再删容器;最后将创建的网络都删掉
2.安装 GitLab、创建 group、user 和 project 并授权
从清华下centos的包gitlab-ce-15.4.3-ce.0.el7.x86_64.rpm
[root@VM-4-6-centos file]# yum -y install gitlab-ce-15.4.3-ce.0.el7.x86_64.rpm #装包
修改配置:vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.1.101' #外部访问的域名或ip
gitlab_rails['smtp_enable'] = true #开启smtp
gitlab_rails['smtp_address'] = "smtp.163.com" #指定smtp发件服务器(smtp.qq.com、公司邮箱等)
gitlab_rails['smtp_port'] = 465 #启用tls是465,不启用就是25
gitlab_rails['smtp_user_name'] = "13693204832@163.com" #发件箱
gitlab_rails['smtp_password'] = "QXMFEYOTAMDBOQXH" #发件箱授权码
gitlab_rails['smtp_domain'] = "163.com" #发件箱的域名
gitlab_rails['smtp_authentication'] = :login #认证,采用login登录的方式认证
gitlab_rails['smtp_enable_starttls_auto'] = true #启用tls认证,自动配置tls认证
gitlab_rails['smtp_tls'] = true #是否启用tls认证,对邮件进行加密
gitlab_rails['gitlab_email_from'] = "13693204832@163.com" #发件人地址
user["git_user_email"] = "13693204832@163.com" #收件人、管理员地址,公司负责gitlab的运维
[root@VM-4-6-centos file]# gitlab-ctl reconfigure #重新配置服务
[root@VM-4-6-centos file]# gitlab-ctl restart #重启服务
装好后:
登录后初始操作:1、修改密码
2、修改默认邮箱
3、将通知里默认使用的邮箱改成自己的
4、禁止其他人注册账号
创建group、user和project并授权:
点击左上角gitlab的logo旁边的三条杠----> 选择最下方的 管理员 -----> 左侧 群组
group----对应公司的项目,要先创建一个组(项目),起个组名,选择私有。
user----对应公司研发人员。添加用户hy-admin(管理员)和hy-ordinary(普通用户)
用户创建后给一个密码,然后该用户需要登陆一下修改密码,才可以使用
project—对应公司项目中的服务。新建一个空的项目,选择刚才创建的项目group,起一个名称hy-app1
3.熟练 Git 命令的基本使用,通过 Git 命令实现源代码的 clone、push 等基本操作
另开一个虚拟机(192.168.1.102);安装git命令
[root@master2 ~]# yum -y install git
[root@master2 ~]# git clone http://192.168.1.101/hy/hy-app1.git #将项目先克隆下来
正克隆到 'hy-app1'...
Username for 'http://192.168.1.101': root #使用root克隆,普通用户还没给授权
Password for 'http://root@192.168.1.101':
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), done. #克隆完成后,当前目录生成一个和创建的项目名hy-app1同名的目录
[root@master2 hy-app1]# echo v11111111111111 > v1 #模拟开发写代码
[root@master2 hy-app1]# git add . #添加当前目录下所有变化过的内容到本地仓库
[root@master2 hy-app1]# git commit -m "first" #执行commit提交时,需认证
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'root@master2.(none)')
[root@master2 hy-app1]# git config --global user.email "13693204832@163.com"
[root@master2 hy-app1]# git config --global user.name "hy-admin"
[root@master2 hy-app1]# git commit -m "first" #提交成功
[main b076e74] first
1 file changed, 1 insertion(+)
create mode 100644 v1
[root@master2 hy-app1]# git push #往gitlab服务器提交代码
Username for 'http://192.168.1.101': hy-admin #需要登录,需要登陆一次修改密码后才可以用
Password for 'http://hy-admin@192.168.1.101':
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 266 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://192.168.1.101/hy/hy-app1.git
c44da01..b076e74 main -> main
[root@master2 hy-app1]# echo v2222222 > v2
[root@master2 hy-app1]# git commit -m "second"
[root@master2 hy-app1]# echo v3333 > v3
[root@master2 hy-app1]# git status #查看工作区状态,有无文件变化等
# 位于分支 main
# 您的分支领先 'origin/main' 共 1 个提交。
# (使用 "git push" 来发布您的本地提交)
#
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
# v3 #看出v3还没提交
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
[root@master2 hy-app1]# git add .
[root@master2 hy-app1]# git commit -m "3"
提交之后,在开一个中断,登录hy-ordinary拉取
[root@master1 hy-app1]# git pull #拉取新文件
Username for 'http://192.168.1.101': hy-ordinary
Password for 'http://hy-ordinary@192.168.1.101':
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), done.
来自 http://192.168.1.101/hy/hy-app1
b076e74..1959f42 main -> origin/main
更新 b076e74..1959f42
Fast-forward
v2 | 1 +
v3 | 1 +
2 files changed, 2 insertions(+)
create mode 100644 v2
create mode 100644 v3
4.熟练掌握对 GitLab 服务的数据备份与恢复
[root@master1 hy-app1]# gitlab-ctl stop unicorn sidekiq #停止gitlab这两个写入的服务
[root@master1 hy-app1]# gitlab-rake gitlab:backup:create #创建git备份,可以再任意目录执行
2022-11-11 17:04:53 +0800 -- Backup 1668157485_2022_11_11_15.4.3 is done.
#该备份只备份账号信息和源代码,配置文件啥的再另外打包备份
/var/opt/gitlab/nginx/conf #nginx配置文件
/etc/gitlab/gitlab.rb #gitlab配置文件
/etc/gitlab/gitlab-secrets.json #key文件
再将这三个文件打包备份
[root@master1 hy-app1]# gitlab-ctl start unicorn sidekiq #启动写入服务
[root@master1 hy-app1]# ll /var/opt/gitlab/backups/ #备份文件路径
总用量 392
-rw------- 1 git git 399360 11月 11 17:04 1668157485_2022_11_11_15.4.3_gitlab_backup.tar
#模拟故障:页面删除文件v2
[root@master1 hy-app1]# gitlab-ctl stop unicorn sidekiq #停止gitlab这两个写入的服务
[root@master1 hy-app1]# gitlab-rake gitlab:backup:restore BACKUP=1668157485_2022_11_11_15.4.3
#BACKUP=后面不用写绝对路径,也不用写完整文件_gitlab_backup.tar
#登录页面看到v2又回来了
5.部署 Jenkins 服务器并安装 GitLab 插件、实现代码免秘钥代码 clone
伟大时代
[root@master2 ~]# yum -y install jdk-17_linux-x64_bin.rpm
[root@master2 ~]# yum -y install jenkins-2.361.2-1.1.noarch.rpm
[root@master2 ~]# systemctl status jenkins.service #centos不会自动启动服务,ubuntu会自动启动服务
[root@master2 ~]# vim /etc/default/jenkins #老师说该不该均可
JENKINS_USER=root
JENKINS_GROUP=root
[root@master2 ~]# vim /lib/systemd/system/jenkins.service #修改service文件
34 User=jenkins # 默认会创建jenkins用户,但是普通用户权限不够,建议改成root
35 Group=jenkins
59 Environment="JAVA_OPTS=-Djava.awt.headless=true" #要开启gitlab远程触发
修改为:
User=root
Group=root
Environment="JAVA_OPTS=-Djava.awt.headless=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true"
[root@master2 ~]# systemctl daemon-reload
[root@master2 ~]# systemctl start jenkins.service
[root@master2 ~]# ps -ef | grep jenkins #查看参数是否生效
root 50689 1 4 18:31 ? 00:00:03 /usr/bin/java -Djava.awt.headless=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true -jar /usr/share/java/jenkins.war --webroot=%C/jenkins/war --httpPort=8080
部署不成功,尚未找到解决方案
############################
20221113
之前的起不来,换了个端口号8088
[root@VM-4-6-centos day03]# vim /lib/systemd/system/jenkins.service
Environment=“JENKINS_PORT=8088”
就能起来
装插件:采用系统推荐选项(需要联网)
安装推荐的插件:需要连外网
jenkins是个完全插件化的服务,有1000多个插件
安装的插件全都在/var/lib/jenkins/plugins/中
每个插件有两个文件(一个目录一个jpi文件)
离线装插件:将插件文件打包拷贝过来,解压到/var/lib/jenkins/plugins/目录中也可以
第一次登陆,有些插件还没有生效(汉化也不太彻底)。需要在服务器后台systemctl restart jenkins 重启服务
然后重新登陆 jenkins
安装 GitLab 插件:
左侧系统管理---->插件管理------>可选插件---->搜索gitlab
装好插件后也要重启jenkins服务才能生效。