docker、Jenkins和Nginx之间的一些事儿

62 阅读4分钟

一、安装docker

  • 删除错误的 repo

  • sudo rm -f /etc/yum.repos.d/docker-ce.repo
    
  • 使用官方 Docker repo

  • sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
  • 换国内镜像源

  • sudo sed -i 's#https://download.docker.com/linux/centos#http://mirrors.aliyun.com/docker-ce/linux/centos#g' /etc/yum.repos.d/docker-ce.repo
    
  • 清理缓存并重新安装

  • sudo dnf clean all
    sudo dnf makecache
    sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
  • 开机启动

  • sudo systemctl enable --now docker
    

二、安装Jenkins

  • 更改成国内的源

  • sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://mirror.ccs.tencentyun.com",
        "https://hub-mirror.c.163.com",
        "https://registry.docker-cn.com"
      ]
    }
    EOF
    
  • 重启docker

  • sudo systemctl daemon-reexec
    sudo systemctl restart docker
    
  • 执行安装命令

    docker pull jenkins/jenkins:lts
    
  • 当有success输出时,证明成功了。也可以通过 docker images 来查看本地镜像列表。

三、配置Jenkins

1. 安装Jenkins
  • 创建 Jenkins 数据目录

  • sudo mkdir -p /var/jenkins_home
    sudo chown -R 1000:1000 /var/jenkins_home
    sudo chmod -R 700 /var/jenkins_home
    
  • 第一次启动 Jenkins 容器

  • docker run -d \
      --name jenkins \
      -u 0 \
      --restart=always \
      -p 8080:8080 \
      -p 50000:50000 \
      -v /var/jenkins_home:/var/jenkins_home \
      -v /data/web_builds:/data/web_builds \
      jenkins/jenkins:lts
    

    参数解释:

    • -d → 后台运行

    • --name jenkins → 容器名字叫 jenkins

    • --restart=always 表示:

      • Docker 启动时自动启动 Jenkins 容器;
      • Jenkins 容器异常退出时自动重启;
      • 只有手动 docker stop jenkins 才不会自动重启。
      • -p 8080:8080 → 映射 Web UI 端口
    • -p 50000:50000 → 代理端口(Jenkins Agent 用的)

    • -v /var/jenkins_home:/var/jenkins_home → 数据持久化

    • -u 0 → 以 root 用户启动(方便安装插件时创建目录权限,之后可以切回 1000 用户)

  • 停止容器:

    docker stop jenkins
    

    可以通过 docker ps -a 来检查状态。

  • 再次启动容器:

    docker start jenkins
    
  • 获取初始密码

  • docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
    
  • 放行8080端口:要记得给服务器的安全组里添加8080。

2. 修改运行在docker的Jenkins的时区:
docker exec -it jenkins bash

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone

之后退出容器,重启Jenkins即可生效。

3. 配置 SSH Username with private key 凭证

需要进入到容器内,创建.ssh文件夹并生成公私钥,拉取 Gitee 主机指纹,之后设置权限。

  • docker exec -it jenkins bash
    
    cd /var/jenkins_home
    mkdir -p .ssh && cd .ssh
    
    ssh-keygen -t rsa -b 4096 -C "xxxxxxx@qq.com"
    
    ssh-keyscan gitee.com >> known_hosts
    
    chmod 700 /var/jenkins_home/.ssh
    chmod 600 /var/jenkins_home/.ssh/known_hosts
    
    

    需要注意的是,git的仓库地址必须是ssh形式的,比如“git@gitee.com:u-web/vue-mall.git”

4. 重置Jenkins密码
  • 进入容器内部

  • docker exec -it jenkins bash
    
  • 跳过安全验证
    • 编辑 Jenkins 配置文件,禁用安全验证。在 /var/jenkins_home/config.xml 里,将 <useSecurity>true</useSecurity> 改为 <useSecurity>false</useSecurity>

    • vi /var/jenkins_home/config.xml
      
    • 之后重启Jenkins

    • docker restart jenkins
      
    • 之后进入Jenkins

    • http://你的IP:8080
      
    • 此时无需登录,直接进入 Jenkins 管理后台。之后,依次点击 系统管理 (Manage Jenkins)全局安全配置 (Configure Global Security),在 安全域 里选择 Jenkins 自身的用户数据库 并勾选 允许用户注册(这样你就能注册新用户)并保存配置。

    ⚠️ 修改完毕后记得把 false 改回 true,重新启用安全验证。

    • 创建新用户

      创建新用户之前,删除 /var/jenkins_home/users/admin_* 的目录,不然原先的id将无法注册。

      回到 Jenkins 首页,点击登录,点击下面的register完成注册,最后使用新注册的账号登录。

    • 提升权限

      1. 登录新账号
      2. 去:
      系统管理 (Manage Jenkins)
        → 全局安全配置 (Configure Global Security)
      

      授权策略 (Authorization) 部分,选择 安全矩阵

      • 给你的新账号勾选所有权限(特别是 Administer 管理员权限)

      • 保存。

    • 关闭“允许用户注册”(可选)

      • 出于安全考虑,等新账号创建好后,可以回到 安全配置允许用户注册 取消勾选。
      • 这样外部用户不能随便注册。

四、安装Nginx

  1. 先创建文件夹:
mkdir -p /data/web_builds
chmod -R 777 /data/web_builds 

之后安装Nginx并启动:

docker run -d \
  --name nginx \
  --restart=always \
  -p 80:80 \
  -p 8081-8083:8081-8083 \
  -v /data/web_builds:/usr/share/nginx/html:ro \
  -v /data/nginx/conf.d:/etc/nginx/conf.d \
  nginx:alpine
  • /data/web_builds:挂载 Jenkins 输出目录(只读 :ro)。
  • /data/nginx/conf.d:存放 Nginx 配置文件(持久化)。
  • Nginx 启动后即可通过 http://宿主机IP 访问部署的 Web 项目。
  1. /data/nginx/conf.d 下创建 default.conf 文件:
# dev 环境:端口 8081
server {
  listen 8081;
  server_name 120.79.250.121;

  root /usr/share/nginx/html/test-jewery/dev;
  index index.html;

  location / {
    try_files $uri $uri/ /index.html;
  }
}

# uat 环境:端口 8082
server {
  listen 8082;
  server_name 120.79.250.121;

  root /usr/share/nginx/html/test-jewery/uat;
  index index.html;

  location / {
    try_files $uri $uri/ /index.html;
  }
}

# sit 环境:端口 8083(与 80 的默认站点一致,仅便于分环境访问)
server {
  listen 8083;
  server_name 120.79.250.121;

  root /usr/share/nginx/html/test-jewery/sit;
  index index.html;

  location / {
    try_files $uri $uri/ /index.html;
  }
}