- PaaS - Gitlab/Nexus/Registry

>> 虛擬機服務器說明

在這裏插入圖片描述

  • Ubuntu server x64 位:基礎Ubuntu系統;配置好賬號密碼;
  • Ubuntu server x64 Docker:安裝Docker;
  • Ubuntu server x64 Docker Gitlab:Github 自託管Git項目倉庫;
  • Ubuntu server x64 Docker Nexus:Maven私服;
  • Ubuntu server x64 Docker Registry:鏡像私服;
  • Ubuntu server x64 Docker Deploy:拉取項目代碼,製作鏡像,推送到Git私服;
  • Ubuntu server x64 Docker MySQL:數據庫服務器;
  • Ubuntu server x64 Docker Myforum:拉取鏡像,運行容器;

>> GitLab - 代碼管理平臺

Git是一個第三方代碼託管平臺,互聯網企業,代碼不能放到第三方平臺上,但是又想用Git進行代碼託管,所以只能自己架設一個Git託管平臺;

開源的第三方託管平臺只有Gitlab;Gitlab既可以使用它的第三方託管,又可以本地部署;

Gitlab是利用Ruby on Rails實現的一個開源的版本管理系統,實現一個自託管的Git項目倉庫,可通過web界面訪問公開或私人項目,它擁有與Github類似的功能,能夠瀏覽源代碼、管理缺陷和註釋,可以管理團隊對倉庫的訪問,非常易於瀏覽提交過的版本並提供一個文件歷史庫;

~ GitLab 安裝

在這裏插入圖片描述

1、安裝gitlab的內存最低2G;

2、在docker鏡像中心搜索漢化社區版;

3、複製安裝鏈接:docker pull twang2218/gitlab-ce-zh

4、創建docker-compose.yml測試最新版本是否能正常運行:

version: '3'
services:
    web:
      image: 'twang2218/gitlab-ce-zh'
      restart: always
      hostname: '192.168.141.176'
      environment:
        TZ: 'Asia/Shanghai'
        GITLAB_OMNIBUS_CONFIG: |
          external_url 'http://192.168.141.176:8080'
          gitlab_rails['gitlab_shell_ssh_port'] = 2222
          unicorn['port'] = 8888
          nginx['listen_port'] = 8080
      ports:
        - '8080:8080'
        - '8443:443'
        - '2222:22'
      volumes:
        - /usr/local/docker/gitlab/config:/etc/gitlab
        - /usr/local/docker/gitlab/data:/var/opt/gitlab
        - /usr/local/docker/gitlab/logs:/var/log/gitlab
  • hostname:主機地址(主機名),這裏應該填寫域名,但是我們是本地部署,沒有域名,所以就用IP;hostname就是部署這臺機器的主機的IP地址;

  • GITLAB_OMNIBUS_CONFIG:GitLab初始化操作;

  • external_url:外部訪問地址:web頁面訪問的地址;這個gitlab能夠訪問是因爲使用了Nginx,使用了反向代理來代理了這臺lab被訪問;這個端口要跟Nginx監聽的端口一致;

  • gitlab_rails:SSH訪問:gitlab支持SSH訪問,GitHub也支持,這樣就做到了免密訪問;改成2222是因爲22已經被佔用了,這臺機器已經開了22端口;不改的話就會端口衝突;

  • unicorn:Gitlab的一個內部端口;

  • ports:左邊是宿主機端口,右邊是容器端口;

5、運行容器:root@Ubuntu:/usr/local/docker/gitlab# docker-compose up (需要等好久好久…)

6、瀏覽器地址欄訪問:192.168.141.176:8080
用戶:root,修改初始密碼爲12345678;
用戶:zxj/12345678

~ Gitlab 基本設置

登錄時是使用的root賬戶,但是真正使用時一般不會使用root賬戶,而是創建一個自己使用的root賬戶;

GitLab 使用 SSH 免密登錄:同Github設置祕鑰一模一樣!
在這裏插入圖片描述


>> Nexus - 依賴管理平臺

Nexus:是一個強大的Maven倉庫管理器(Maven私服);Nexus僅僅是私服的一種;

Nexus是一種遠程倉庫;在遠程倉庫中,默認的是中央倉庫,中央倉庫是Maven核心自帶的遠程倉庫;

那就使用中央倉庫不就得了嗎,爲什麼我們要安裝Nexus使用私服呢?

我們從項目實際開發來看:
1,一些無法從外部倉庫下載的構件,例如內部的項目還能部署到私服上,以便供其他依賴項目使用;
2, 爲了節省帶寬和時間,在局域網內架設一個私有的倉庫服務器,用其代理所有外部的遠程倉庫,當本地Maven項目需要下載構件時,先去私服請求,如果私服沒有,則再去遠程倉庫請求,從遠程倉庫下載構件後,把構件緩存在私服上;這樣,及時暫時沒有Internet鏈接,由於私服已經緩存了大量構件,整個項目還是可以正常使用的;同時,也降低了中央倉庫的負荷;

~ Nexus 安裝

在這裏插入圖片描述
注意:安裝Nexus服務的服務器需要2G內存;

1、複製鏈接:docker pull sonatype/nexus3

2、創建目錄/usr/local/docker/nexus/,創建docker-compose.yml文件:

version: '3.1'
services:
  nexus:
    restart: always
    image: sonatype/nexus3
    container_name: nexus
    ports:
      - 8081:8081
    volumes:
      - /usr/local/docker/nexus/data:/nexus-data

3、運行容器:docker-compose up

4、啓動會報錯:nexus | Unable to update instance pid: Unable to create directory /nexus-data/instances,這是因爲鏡像中掛載的數據卷/data缺少操作權限;

5、刪除正在進行的容器:root@Ubuntu:/usr/local/nexus# docker-compose down

6、修改/data/目錄操作權限:chmod 777 data/

7、瀏覽器訪問:192.168.141.178:8081 (Nexus暴露的端口是8081,Linux服務器的地址是178)

  • free -h:可以查看內存使用狀態;
  • htop:安裝htop查看內存使用詳細狀態;沒有就安裝一個;

8、登錄:默認賬戶admin/admin123. (可以登錄進去修改密碼)

~ 在項目中使用Maven私服

1、配置認證信息:
在Maven的settings.xml中添加Nexus認證信息(servers節點下):
設置發行版的服務節點,和快照版的服務節點;

<server>
  <id>nexus-releases</id>
  <username>admin</username>
  <password>admin123</password>
</server>

<server>
  <id>nexus-snapshots</id>
  <username>admin</username>
  <password>admin123</password>
</server>

2、配置自動化部署 - 上傳jar/war包到私服
在項目的 pom.xml 中添加如下代碼:
有兩個倉庫地址:發行版和快照版;

<distributionManagement>  
  <repository>  
    <id>nexus-releases</id>  
    <name>Nexus Release Repository</name>  
    <url>http://Linux服務器的地址:8081/repository/maven-releases/</url>   // 這個地址可以直接從Nexus中粘貼
  </repository>  
  <snapshotRepository>  
    <id>nexus-snapshots</id>  
    <name>Nexus Snapshot Repository</name>  
    <url>http://Linux服務器的地址:8081/repository/maven-snapshots/</url>  
  </snapshotRepository>  
</distributionManagement> 

注意:

  • ID 名稱必須要與 settings.xml 中 Servers 配置的 ID 名稱保持一致;
  • 項目版本號中有 SNAPSHOT 標識的,會發布到 Nexus Snapshots Repository, 否則發佈到 Nexus Release Repository,並根據 ID 去匹配授權賬號;

3、部署到倉庫:
在終端進入到項目目錄下執行:$ mvn deploy -Dmaven.test.skip=true

  • mvn package:打包,在項目這兒打包;
  • mvn install:打包到本地倉庫;
  • mvn deploy:推到私服;服務器是自己架設的,不是每個人都能往上面推送依賴,所以需要在settings.xml中設置賬號和密碼;

4、在瀏覽器頁面刷新,可以看到上傳了的文件包;
私服的步驟也是先安裝到本地,再上傳到服務器;

5、上傳第三方Jar包:
把無法通過公網從官服下載的第三方依賴,放到私服裏面;這樣別人就能用了;

# 如第三方JAR包:aliyun-sdk-oss-2.2.3.jar
mvn deploy:deploy-file 
  -DgroupId=com.aliyun.oss 
  -DartifactId=aliyun-sdk-oss 
  -Dversion=2.2.3 
  -Dpackaging=jar 
  -Dfile=D:\aliyun-sdk-oss-2.2.3.jar    // 本地存放路徑
  -Durl=http://127.0.0.1:8081/repository/maven-3rd/   // 要上傳到的地址
  -DrepositoryId=nexus-releases

注意:

  • 建議在上傳第三方 JAR 包時,創建單獨的第三方 JAR 包管理倉庫,便於管理有維護;(maven-3rd)
  • -DrepositoryId=nexus-releases對應的是 settings.xml中 Servers 配置的 ID 名稱;(授權)

6、配置代理倉庫: 從私服下載依賴
在項目的 pom.xml 中添加如下代碼:

<repositories>
    <repository>
        <id>nexus</id>
        <name>Nexus Repository</name>
        <url>http://服務器IP地址:8081/repository/maven-public/</url>   // 公共倉庫:是發行版和快照版倉庫的映射;包含2個地方的所有依賴;
        <snapshots>
            <enabled>true</enabled>   // 允許依賴快照版;設置false,則快照版本無法下載;
        </snapshots>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>nexus</id>
        <name>Nexus Plugin Repository</name>
        <url>http://服務器IP地址:8081/repository/maven-public/</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <releases>
            <enabled>true</enabled>
        </releases>
    </pluginRepository>
</pluginRepositories>

>> Registry - 鏡像管理平臺

官方的Docker hub是一個管理公共鏡像的地方,我們可以在上面找到想要的鏡像,也可以把自己的鏡像推送上去;但是有時候,我們的服務器無法訪問互聯網,或者不希望將自己的鏡像放到公網上去,那就需要Docker Registry,來存儲和管理自己的鏡像;

~ Registry 安裝

1、拉取鏡像:root@Ubuntu:~# docker pull registry

2、創建工作目錄/usr/local/docker/registry,創建docker-compose.yml文件;

version: '3.1'
services:
  registry:
    image: registry
    restart: always
    container_name: registry
    ports:
      - 5000:5000
    volumes:
      - /usr/local/docker/registry/data:/var/lib/registry

3、運行容器:root@Ubuntu:/usr/local/docker/registry# docker-compose up -d

4、瀏覽器訪問:192.168.141.179:5000/v2;(因爲裏面什麼都沒有,所以返回空的json)

~ Docker Registry 配置客戶端

重新克隆一個虛擬機,作爲docker registry 客戶端;然後再在這個客戶機上進行配置;

1、在/etc/docker/daemon.json中添加下面內容:(若文件不存在,則新建)

root@Ubuntu:/etc/docker# vi daemon.json
root@Ubuntu:/etc/docker# cat daemon.json 
{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ],
  "insecure-registries": [
    "192.168.141.179:5000"
  ]
}

2、重啓docker服務,讓配置生效:root@Ubuntu:/etc/docker# systemctl restart docker

3、手動檢查客戶端配置是否生效:root@Ubuntu:/etc/docker# docker info
在這裏插入圖片描述

4、測試鏡像是否能上傳:

  • 先拉取一個Tomcat鏡像到本地:docker pull tomcat
  • 使用tag標籤標記本地的Tomcat鏡像爲IP(服務器IP)、端口+名稱:docker tag tomcat 192.168.141.179:5000/tomcat[:版本號]
    拉取鏡像的時候,要的是完整的鏡像地址端口名稱,沒有指定地址端口,默認從中央倉庫拉取;
  • 推送鏡像到Registry倉庫:docker push tomcat 192.168.141.179:5000[:版本號]

5、在瀏覽器查看Docker Registry服務器中是否有上傳的鏡像:

  • http://192.168.141.179:5000/v2/_catalog:查看全部鏡像;
  • http://192.168.141.179:5000/v2/tomcat/tags/list:查看指定鏡像;

~ 部署 Docker Registry WebUI

在Docker Registry 服務器操作:

1、先關閉開啓的Registry服務:root@Ubuntu:/usr/local/docker/registry# docker-compose down

2、修改docker-compose.yml文件,添加Registry的前端 服務:

  frontend:
    image: konradkleine/docker-registry-frontend:v2
    ports:
      - 8080:80
    volumes:
      - ./certs/frontend.crt:/etc/apache2/server.crt:ro
      - ./certs/frontend.key:/etc/apache2/server.key:ro
    environment:
      - ENV_DOCKER_REGISTRY_HOST=192.168.141.179
      - ENV_DOCKER_REGISTRY_PORT=5000

3、啓動服務:root@Ubuntu:/usr/local/docker/registry# docker-compose up -d

4、瀏覽器訪問:http://192.168.141.179:8080 (Registry 前端的端口映射成了8080)

>> 實現一次構建 到處運行

(1)將項目代碼上傳到 Docker GitLab 服務器上

1、打開http://192.168.141.176:8080,創建項目,添加readme文件直接提交,什麼也不寫;

2、將項目克隆到本地:
# zxj @ zhangxuejiaodeMacBook-Pro in ~/文檔/Git [15:47:23] C:127
$ git clone ssh://[email protected]:2222/zxj/myforum.git

3、將項目代碼複製到這個目錄下:(除了.git文件夾)

4、將項目推送到倉庫:

git add .
git status
git commit -m "add all file"
git push -u origin master

(2)配置數據庫服務器 Docker mysql

安裝MySQL,並導入數據庫:https://blog.csdn.net/qq_37546891/article/details/92776939

(3)在docker deploy 服務器完成項目代碼的編譯打包上傳

1、每臺主機都需要在Git服務上添加本機的祕鑰,所以需要先在本機生成祕鑰對,然後在服務器上添加祕鑰:

2、創建項目目錄,克隆:root@Ubuntu:/usr/local/docker# git clone ssh://[email protected]:2222/zxj/myforum.git

3、安裝Java:https://blog.csdn.net/qq_37546891/article/details/92077749
安裝maven:從本地宿主機上傳Maven安裝文件:
root@Ubuntu:/usr/local# tar -zxvf apache-maven-3.6.1-bin.tar.gz:解壓縮;

4、配置環境變量:在root@Ubuntu:/usr/local# vi /etc/profile添加:

export MAVEN_HOME=/usr/local/apache-maven-3.6.1
export JAVA_HOME=/usr/local/jdk1.8.0_211
export JRE_HOME=/usr/local/jdk1.8.0_211/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$MAVEN_HOME/bin:$PATH:$HOME/bin

5、使環境變量配置生效:root@Ubuntu:/usr/local# source /etc/profile
檢驗配置是否生效:java -versionmvn -v

6、打包項目:root@Ubuntu:/usr/local/docker/myforum# mvn clean package -Dmaven.test.skip=true

7、打包鏡像:

  • root@Ubuntu:/usr/local/docker/myforum/target/myforum-0.0.1-SNAPSHOT# tar -czvf myforum.tar.gz .:將tag目錄下的war包文件打成壓縮包;

  • root@Ubuntu:/usr/local/docker/myforum/target/myforum-0.0.1-SNAPSHOT# mv myforum.tar.gz ../../image/:將壓縮包文件移動到/usr/local/docker/myforum/image目錄下;

  • /usr/local/docker/myforum/image目錄下編輯Dockerfile文件:

FROM tomcat
WORKDIR /usr/local/tomcat/webapps/ROOT
RUN rm -fr *
ADD myforum.tar.gz /usr/local/tomcat/webapps/ROOT
RUN rm -fr myforum.tar.gz
WORKDIR /usr/local/tomcat
  • 製作鏡像:root@Ubuntu:/usr/local/docker/myforum/image# docker build -t 192.168.141.179:5000/myforum .

  • 將鏡像推送到倉庫:root@Ubuntu:/usr/local/docker/myforum/image# docker push 192.168.141.179:5000/myforum

  • 到倉庫中(http://192.168.141.179:8080/tag//myforum/latest/)複製鏡像地址:docker pull 192.168.141.179:5000/myforum:latest

(4)克隆虛擬機Docker Myforum
原則上一臺服務器啓動一個服務,應該克隆一個虛擬機Docker Myforum,在這臺服務器上拉取myforum鏡像並運行容器; 但是由於內存不夠再開一個虛擬機,所以直接在Docker Deploy這臺虛擬機上操作了;

root@Ubuntu:/usr/local/docker# vi docker-compose.yml

version: '3.1'
services:
  myforum:
    restart: always
    image: 192.168.141.179:5000/myforum
    container_name: myforum
    ports:
      - 8080:8080

root@Ubuntu:/usr/local/docker# docker-compose up -d

注意:若是在Docker Myforum,運行容器會出錯,原因是沒有配置客戶端:
在這裏插入圖片描述

myforum容器啓動成功,瀏覽器訪問:192.168.141.180:8080/ (由於使用的是docker mysql這臺服務器,所以地址是180)

文章參考博客視頻教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章