Skip to content

安装DockerCompose

sh
#! /bin/sh

BASE_IP="192.168.150.101"
while getopts "i:" opt; do
    case $opt in
         i)
            BASE_IP=$OPTARG
          ;;
         ?)
            echo "unkonw argument"
            exit 1
          ;;
    esac
done

echo "========= start init CI/CD enviroment=========="
BASE_PATH=/usr/local/src
# --same-permissions 解压文件权限信息(默认只为超级用户服务)
tar -zxf $(pwd)/tjxt.env.tar.gz -C /usr/local/ --same-permissions

echo "=== 1.begin set JAVA_HOME==="
if command -v java &> /dev/null;then
    java -version       
    echo "INFO:Already Install Jdk"
else
    tee -a /etc/profile << EOF
    export JAVA_HOME=${BASE_PATH}/java
    export PATH=\$JAVA_HOME/bin:\$PATH
    export CLASS_PATH=\$JAVA_HOME/lib
EOF
    source /etc/profile
    if command -v java &> /dev/null;then     
    echo "INFO:Jdk Install Success..."
    else
        echo "ERROR:Jdk Install Fail..." && exit 1
    fi
fi

echo "=== 2.begin config command alias ==="
cp ${BASE_PATH}/.bashrc ~
source ~/.bashrc

echo "=== 3.begin docker compose ==="
# 设置jenkins用户,并关联docker
USER_NAME=jenkins
if id -u ${USER_NAME} >/dev/null 2>&1 ; then
    echo "try create user jenkins"
else
    useradd -U -m jenkins
fi
if id -u ${USER_NAME} >/dev/null 2>&1 ; then
    echo "create user jenkins success"
fi
usermod -aG docker jenkins
usermod -aG root jenkins
chmod 777 /var/run/docker.sock

# 设置虚拟机真实IP
if [ $BASE_IP != "192.168.150.101" ];then
    sed -i -e "s#192.168.150.101#${BASE_IP}#g" ${BASE_PATH}/jenkins/jobs/tjxt-dev-build/config.xml
    sed -i -e "s#192.168.150.101#${BASE_IP}#g" ${BASE_PATH}/nginx/conf/nginx.conf
    sed -i -e "s#192.168.150.101#${BASE_IP}#g" ${BASE_PATH}/gogs/gogs/conf/app.ini
fi

# 执行 DockerCompose 部署
dc -f ${BASE_PATH}/docker-compose.yml up -d

echo "=== 4.begin set cron to clean logs ==="
echo "0 21 * * * root sh ${BASE_PATH}/clean-docker-logs.sh" >> /etc/crontab

echo "========= init CI/CD enviroment success!! =========="

rm -f $(pwd)/tjxt.env.tar.gz

echo "===== please reboot your System ====="

.bashrc

sh
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table{{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"'
alias dc='docker-compose'
alias dis='docker images'
alias dexe='docker exec -it'
alias dlog='docker logs'
# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi

docker-compose.yml

yaml
version: "3.2"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: abc123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
    restart: always
    networks:
      - new
  nacos:
    image: nacos/nacos-server:v2.1.0-slim
    container_name: nacos
    environment:
      - MODE=standalone
      - JVM_XMS=512m
      - JVM_XMX=512m
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=abc123
      - MYSQL_SERVICE_DB_NAME=nacos
      - SPRING_DATASOURCE_PLATFORM=mysql
    ports:
      - "8848:8848"
    restart: always
    depends_on:
      - mysql
    networks:
      - new
  xxl-job:
    image: xuxueli/xxl-job-admin:2.3.0
    container_name: xxljob
    ports:
      - "8880:8880"
    volumes:
      - "./xxl-job/logs:/data/applogs"
      - "./xxl-job/application.properties:/config/application.properties"
    networks:
      - new
    restart: always
    depends_on:
      - mysql
  seata:
    image: seataio/seata-server
    container_name: seata
    ports:
      - "8099:8099"
      - "7099:7099"
    environment:
      SEATA_IP: 192.168.150.101
    volumes:
      - "./seata:/seata-server/resources"
    networks:
      - new
    restart: always
    depends_on:
      - mysql
      - nacos
  gogs:
    image: gogs/gogs:0.12
    container_name: gogs
    ports:
      - "10022:22"
      - "10880:3000"
    environment:
      TZ: Asia/Shanghai
    volumes:
      - "./gogs:/data"
    networks:
      - new
    restart: always
    depends_on:
      - mysql
  jenkins:
    image: jenkins/jenkins:2.361.1-lts-jdk11
    container_name: jenkins
    ports:
      - "18080:8080"
      - "50000:50000"
    environment:
      - "JAVA_OPTS=-server -Xms1024m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m"
    volumes:
      - "./jenkins:/var/jenkins_home"
      - "/usr/bin/docker:/usr/bin/docker"
      - "/var/run/docker.sock:/var/run/docker.sock"
    restart: always
    networks:
      - new
  mq:
    image: rabbitmq:3.8-management
    container_name: mq
    hostname: mq
    ports:
      - "15672:15672"
      - "5672:5672"
    environment:
      RABBITMQ_DEFAULT_USER: hmtt
      RABBITMQ_DEFAULT_PASS: abc123
    volumes:
      - "./mq/plugins:/plugins"
      - "./mq/data:/var/lib/rabbitmq"
      - "./mq/conf:/etc/rabbitmq"
    restart: always
    networks:
      - new
  es:
    image: elasticsearch:7.12.1
    container_name: es
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "discovery.type=single-node"
    volumes:
      - "./es/data:/usr/share/elasticsearch/data"
      - "./es/plugins:/usr/share/elasticsearch/plugins"
    restart: always
    networks:
      - new
  redis:
    image: redis
    container_name: redis
    ports:
      - "6379:6379"
    volumes:
      - "./redis/conf:/usr/local/etc/redis"
      - "./redis/data:/tmp"
    networks:
      - new
    restart: always
    entrypoint: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - "./nginx/conf/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/etc/nginx/html"
    restart: always
    networks:
      - new
networks:
  new:
    name: hmtt

clean-docker-logs.sh

sh
#!/bin/sh 
echo "======== start clean docker containers logs ========"  
logs=$(find /var/lib/docker/containers/ -name *-json.log)  
for log in $logs  
        do  
                echo "clean logs : $log"  
                cat /dev/null > $log  
        done  
echo "======== end clean docker containers logs ========"

重要配置文件 nginx.conf

nginx
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

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

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
  
    server {
       listen       80;
       server_name  git.tianji.com;
       location / {
            proxy_pass http://192.168.150.101:10880;
       }
    }
    server {
       listen       80;
       server_name  jenkins.tianji.com;
       location / {
            proxy_pass http://192.168.150.101:18080;
       }
    }
    server {
       listen       80;
       server_name  mq.tianji.com;
       location / {
            proxy_pass http://mq:15672;
       }
    }
    server {
       listen       80;
       server_name  nacos.tianji.com;
       location / {
            rewrite /(.*)  /nacos/$1 break;
            proxy_pass http://nacos:8848;
       }
    }
    server {
       listen       80;
       server_name  xxljob.tianji.com;
       location / {
            rewrite /  /xxl-job-admin break;
            proxy_pass http://xxljob:8880;
       }
       location /xxl-job-admin {
            proxy_pass http://xxljob:8880;
       }
    }
    
    server {
       listen       80;
       server_name  es.tianji.com;
       location / {
            proxy_pass http://es:5601;
       }
    }
    server {
       listen       80;
       server_name  api.tianji.com;
       location / {
            proxy_set_header Host       $host; # 传递原始Host头
            proxy_pass http://192.168.150.101:10010;
            # proxy_pass http://192.168.150.1:10010; # 由于要修改网关在本地测试,所以代理到本地IP
       }
    }
    server {
       listen       80;
       server_name  www.tianji.com;
       location / {
            root html/tj-portal;
            index  index.html index.htm;
          #   proxy_pass http://192.168.150.1:18082;
       }
       location /img-tx {
            rewrite /img-tx/(.*)  /$1 break;
            proxy_pass http://wisehub-1312394356.cos.ap-shanghai.myqcloud.com;
       }
    }
    server {
       listen       80;
       server_name  manage.tianji.com;
       location / {
            root html/tj-admin;
            index  index.html index.htm;
          #   proxy_pass http://192.168.150.1:18081;
       }
       location /img-tx {
            rewrite /img-tx/(.*)  /$1 break;
            proxy_pass http://wisehub-1312394356.cos.ap-shanghai.myqcloud.com;
       }
    }
}

xxl-job 的配置文件 application.yml

properties
### web
server.port=8880
server.servlet.context-path=/xxl-job-admin

### actuator
management.server.servlet.context-path=/actuator
management.health.mail.enabled=false

### resources
spring.mvc.servlet.load-on-startup=0
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/

### freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.##########

### mybatis
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
#mybatis.type-aliases-package=com.xxl.job.admin.core.model

### xxl-job, datasource
spring.datasource.url=jdbc:mysql://mysql:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=abc123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

### datasource-pool
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.max-lifetime=900000
spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.validation-timeout=1000

### xxl-job, email
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.from=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

### xxl-job, access token
xxl.job.accessToken=tianji

### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
xxl.job.i18n=zh_CN

## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100

### xxl-job, log retention days
xxl.job.logretentiondays=30