TKey 环境

  • CentOS 7.5 x64

修改 SSH 端口

  • 配置文件介绍(记得先备份):sudo vim /etc/ssh/sshd_config
  • 打开这一行注释:Port 22
    • 自定义端口选择建议在万位的端口,如:10000-65535之间,假设这里我改为 52221
  • CentOS 7:添加端口:firewall-cmd --zone=public --add-port=52221/tcp --permanent
    • 重启防火墙:firewall-cmd --reload
  • CentOS 7 命令:systemctl restart sshd.service

安装后的检测

  1. docker --version && docker-compose --version && java -version && mvn -v && mysql --version && redis-server --version && node -v && npm -v && nginx -V

设置免密登录

  • 在 A 机器上输入命令:ssh-keygen
    • 根据提示回车,共有三次交互提示,都回车即可。
  • 生成的密钥目录在:/root/.ssh
  • 写入:cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
  • 测试:ssh localhost

安装 ansible

  • CentOS:sudo yum install -y ansible
    • 查看版本:ansible --version
  • 编辑配置文件:vim /etc/ansible/hosts,在文件尾部添加:
  • 查看自己的内网 ip:ifconfig,假设是:172.16.16.4
  1. [local]
  2. 172.16.16.4 ansible_ssh_port=52221
  • 让远程所有主机都执行 ps 命令,输出如下
  1. ansible all -a 'ps'

基础设置

  • 禁用
    • firewalld
    • selinux
    • swap
  • 安装

    • zip unzip lrzsz git wget htop deltarpm
    • zsh vim
    • docker docker-compose
  • 创建脚本文件:vim /opt/1-install-basic-playbook.yml

  1. - hosts: all
  2. remote_user: root
  3. tasks:
  4. - name: Disable SELinux at next reboot
  5. selinux:
  6. state: disabled
  7. - name: disable firewalld
  8. shell: "{{ item }}"
  9. with_items:
  10. - systemctl stop firewalld
  11. - systemctl disable firewalld
  12. - echo "vm.swappiness = 0" >> /etc/sysctl.conf
  13. - swapoff -a
  14. - sysctl -w vm.swappiness=0
  15. - name: install-epel
  16. shell: "{{ item }}"
  17. with_items:
  18. - yum install -y epel-release
  19. - name: install-basic
  20. shell: "{{ item }}"
  21. with_items:
  22. - yum install -y zip unzip lrzsz git wget htop deltarpm
  23. - name: install zsh oh-my-zsh
  24. shell: "{{ item }}"
  25. with_items:
  26. - yum install -y zsh
  27. - wget https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh -O - | sh
  28. - chsh -s /bin/zsh root
  29. - name: install-vim
  30. shell: "{{ item }}"
  31. with_items:
  32. - yum install -y vim
  33. - curl https://gitee.com/cdk8s_org/vim-for-server/raw/master/vimrc > ~/.vimrc
  34. - name: install-docker
  35. shell: "{{ item }}"
  36. with_items:
  37. - yum install -y yum-utils device-mapper-persistent-data lvm2
  38. - yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  39. - yum makecache fast
  40. - yum install -y docker-ce docker-ce-cli containerd.io
  41. - systemctl start docker.service
  42. - name: create /etc/docker directory
  43. file:
  44. path: /etc/docker
  45. state: directory
  46. - name: create daemon.json file
  47. file:
  48. path=/etc/docker/{{ item }}
  49. state=touch
  50. mode=777
  51. with_items:
  52. - daemon.json
  53. - name: set docker registry mirrors
  54. blockinfile:
  55. path: /etc/docker/daemon.json
  56. marker: ""
  57. block: |
  58. {
  59. "registry-mirrors": [
  60. "https://ldhc17y9.mirror.aliyuncs.com",
  61. "https://hub-mirror.c.163.com",
  62. "https://mirror.baidubce.com",
  63. "https://docker.mirrors.ustc.edu.cn"
  64. ]
  65. }
  66. - name: restart docekr
  67. shell: "{{ item }}"
  68. with_items:
  69. - systemctl daemon-reload
  70. - systemctl restart docker
  71. - name: install-docker-compose
  72. shell: "{{ item }}"
  73. with_items:
  74. - curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  75. - chmod +x /usr/local/bin/docker-compose
  76. - docker-compose --version
  77. - systemctl restart docker.service
  78. - systemctl enable docker.service

离线安装 jdk

  • 下载 jdk 到 /opt 目录下
  • 创建脚本文件:vim /opt/2-jdk8-playbook.yml
  1. - hosts: all
  2. remote_user: root
  3. vars:
  4. java_install_folder: /usr/local
  5. file_name: jdk-8u261-linux-x64.tar.gz
  6. tasks:
  7. - name: copy jdk
  8. copy:
  9. src=/opt/{{ file_name }}
  10. dest={{ java_install_folder }}
  11. - name: tar jdk
  12. shell:
  13. chdir={{ java_install_folder }}
  14. tar zxf {{ file_name }}
  15. - name: set JAVA_HOME
  16. blockinfile:
  17. path: /root/.zshrc
  18. marker: "#{mark} JDK ENV"
  19. block: |
  20. JAVA_HOME={{ java_install_folder }}/jdk1.8.0_261
  21. JRE_HOME=$JAVA_HOME/jre
  22. PATH=$PATH:$JAVA_HOME/bin
  23. CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  24. export JAVA_HOME
  25. export JRE_HOME
  26. export PATH
  27. export CLASSPATH
  28. - name: source zshrc
  29. shell: source /root/.zshrc
  30. - name: remove tar.gz file
  31. file:
  32. state: absent
  33. path: "{{ java_install_folder }}/{{ file_name }}"
  • 执行命令:ansible-playbook /opt/2-jdk8-playbook.yml

安装 maven

  • 把 maven 放到 /opt 目录下
  • 创建脚本文件:vim /opt/3-maven-playbook.yml
  1. - hosts: all
  2. remote_user: root
  3. vars:
  4. maven_install_folder: /usr/local
  5. file_name: apache-maven-3.6.3-bin.zip
  6. tasks:
  7. - name: copy maven
  8. copy:
  9. src=/opt/{{ file_name }}
  10. dest={{ maven_install_folder }}
  11. - name: unzip maven
  12. shell:
  13. chdir={{ maven_install_folder }}
  14. unzip {{ file_name }}
  15. - name: set MAVEN_HOME
  16. blockinfile:
  17. path: /root/.zshrc
  18. marker: "#{mark} MAVEN ENV"
  19. block: |
  20. MAVEN_HOME={{ maven_install_folder }}/apache-maven-3.6.3
  21. M3_HOME={{ maven_install_folder }}/apache-maven-3.6.3
  22. M2_HOME={{ maven_install_folder }}/apache-maven-3.6.3
  23. PATH=$PATH:$M3_HOME/bin
  24. MAVEN_OPTS="-Xms256m -Xmx356m"
  25. export M3_HOME
  26. export M2_HOME
  27. export MAVEN_HOME
  28. export PATH
  29. export MAVEN_OPTS
  30. - name: source zshrc
  31. shell: source /root/.zshrc
  32. - name: remove zip file
  33. file:
  34. path: "{{ maven_install_folder }}/{{ file_name }}"
  35. state: absent
  36. - name: create local_maven_repository directory
  37. file:
  38. path: /opt/local_maven_repository
  39. state: directory
  40. - name: remove old settings.xml
  41. file:
  42. path: "{{ maven_install_folder }}/apache-maven-3.6.3/conf/settings.xml"
  43. state: absent
  44. - name: create settings.xml file
  45. file:
  46. path="{{ maven_install_folder }}/apache-maven-3.6.3/conf/{{ item }}"
  47. state=touch
  48. mode=777
  49. with_items:
  50. - settings.xml
  51. - name: set settings.xml aliyun
  52. blockinfile:
  53. path: "{{ maven_install_folder }}/apache-maven-3.6.3/conf/settings.xml"
  54. marker: ""
  55. block: |
  56. <?xml version="1.0" encoding="UTF-8"?>
  57. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  58. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  59. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  60. <localRepository>/opt/local_maven_repository</localRepository>
  61. <pluginGroups>
  62. </pluginGroups>
  63. <proxies>
  64. </proxies>
  65. <servers>
  66. </servers>
  67. <profiles>
  68. <profile>
  69. <id>aliyun</id>
  70. <repositories>
  71. <repository>
  72. <id>aliyun</id>
  73. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  74. <releases>
  75. <enabled>true</enabled>
  76. </releases>
  77. <snapshots>
  78. <enabled>true</enabled>
  79. </snapshots>
  80. </repository>
  81. </repositories>
  82. <pluginRepositories>
  83. <pluginRepository>
  84. <id>aliyun</id>
  85. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  86. <releases>
  87. <enabled>true</enabled>
  88. </releases>
  89. <snapshots>
  90. <enabled>true</enabled>
  91. </snapshots>
  92. </pluginRepository>
  93. </pluginRepositories>
  94. </profile>
  95. <profile>
  96. <id>maven</id>
  97. <repositories>
  98. <repository>
  99. <id>maven</id>
  100. <url>https://repo.maven.apache.org/maven2/</url>
  101. <releases>
  102. <enabled>true</enabled>
  103. </releases>
  104. <snapshots>
  105. <enabled>true</enabled>
  106. </snapshots>
  107. </repository>
  108. </repositories>
  109. <pluginRepositories>
  110. <pluginRepository>
  111. <id>maven</id>
  112. <url>https://repo.maven.apache.org/maven2/</url>
  113. <releases>
  114. <enabled>true</enabled>
  115. </releases>
  116. <snapshots>
  117. <enabled>true</enabled>
  118. </snapshots>
  119. </pluginRepository>
  120. </pluginRepositories>
  121. </profile>
  122. </profiles>
  123. <activeProfiles>
  124. <activeProfile>aliyun</activeProfile>
  125. </activeProfiles>
  126. </settings>
  • 执行命令:ansible-playbook /opt/3-maven-playbook.yml

安装 node

  • 创建脚本文件:vim /opt/4-node-playbook.yml
  1. - hosts: all
  2. remote_user: root
  3. tasks:
  4. - name: remove the nodejs
  5. yum:
  6. name: nodejs
  7. state: absent
  8. - name: remove the npm
  9. yum:
  10. name: npm
  11. state: absent
  12. - name: curl node
  13. shell: "curl --silent --location https://rpm.nodesource.com/setup_12.x | sudo bash -"
  14. - name: install node
  15. shell: "{{ item }}"
  16. with_items:
  17. - yum -y install nodejs
  18. - name: curl yarn
  19. shell: "curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo"
  20. - name: install yarn
  21. shell: "{{ item }}"
  22. with_items:
  23. - yum -y install yarn
  • 执行命令:ansible-playbook /opt/4-node-playbook.yml

安装原生 MySQL 5.7(可选 Docker)

  • 创建脚本文件:vim /opt/5-mysql-playbook.yml
  1. - hosts: all
  2. remote_user: root
  3. tasks:
  4. - name: remove the mariadb
  5. yum:
  6. name: mariadb
  7. state: absent
  8. - name: install mysql 1
  9. shell: "{{ item }}"
  10. with_items:
  11. - wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
  12. - yum localinstall -y mysql57-community-release-el7-11.noarch.rpm
  13. - name: install mysql 2
  14. yum:
  15. name: mysql-community-server
  16. - name: remove old /etc/my.cnf
  17. file:
  18. path: "/etc/my.cnf"
  19. state: absent
  20. - name: create my.cnf file
  21. file:
  22. path="/etc/{{ item }}"
  23. state=touch
  24. mode=777
  25. with_items:
  26. - my.cnf
  27. - name: set my.cnf
  28. blockinfile:
  29. path: /etc/my.cnf
  30. marker: ""
  31. block: |
  32. [mysql]
  33. default-character-set = utf8mb4
  34. [mysqld]
  35. max_connections = 500
  36. datadir = /var/lib/mysql
  37. socket = /var/lib/mysql/mysql.sock
  38. bind-address = 127.0.0.1
  39. symbolic-links=0
  40. log-error=/var/log/mysqld.log
  41. pid-file=/var/run/mysqld/mysqld.pid
  42. default-storage-engine = InnoDB
  43. collation-server = utf8mb4_unicode_520_ci
  44. init_connect = 'SET NAMES utf8mb4'
  45. character-set-server = utf8mb4
  46. lower_case_table_names = 1
  47. max_allowed_packet = 50M
  48. sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  49. - name: enable mysql
  50. shell: "{{ item }}"
  51. with_items:
  52. - systemctl enable mysqld.service
  53. - systemctl restart mysqld.service
  • 执行命令:ansible-playbook /opt/5-mysql-playbook.yml

安装原生 Redis 5(可选 Docker)

  • 创建脚本文件:vim /opt/6-redis-playbook.yml
  1. - hosts: all
  2. remote_user: root
  3. tasks:
  4. - name: install redis
  5. yum:
  6. name: redis
  7. - name: remove old /etc/redis.conf
  8. file:
  9. path: "/etc/redis.conf"
  10. state: absent
  11. - name: create /etc/redis.conf file
  12. file:
  13. path="/etc/{{ item }}"
  14. state=touch
  15. mode=777
  16. with_items:
  17. - redis.conf
  18. - name: set redis.conf
  19. blockinfile:
  20. path: /etc/redis.conf
  21. marker: ""
  22. block: |
  23. bind 0.0.0.0
  24. requirepass adgredis123456
  25. protected-mode yes
  26. port 6379
  27. tcp-backlog 511
  28. timeout 0
  29. tcp-keepalive 300
  30. daemonize no
  31. supervised no
  32. pidfile /var/run/redis_6379.pid
  33. loglevel notice
  34. logfile /var/log/redis/redis.log
  35. databases 16
  36. save 900 1
  37. save 300 10
  38. save 60 10000
  39. stop-writes-on-bgsave-error yes
  40. rdbcompression yes
  41. rdbchecksum yes
  42. dbfilename dump.rdb
  43. dir /var/lib/redis
  44. slave-serve-stale-data yes
  45. slave-read-only yes
  46. repl-diskless-sync no
  47. repl-diskless-sync-delay 5
  48. repl-disable-tcp-nodelay no
  49. slave-priority 100
  50. appendonly no
  51. appendfilename "appendonly.aof"
  52. appendfsync everysec
  53. no-appendfsync-on-rewrite no
  54. auto-aof-rewrite-percentage 100
  55. auto-aof-rewrite-min-size 64mb
  56. aof-load-truncated yes
  57. lua-time-limit 5000
  58. slowlog-log-slower-than 10000
  59. slowlog-max-len 128
  60. latency-monitor-threshold 0
  61. notify-keyspace-events ""
  62. hash-max-ziplist-entries 512
  63. hash-max-ziplist-value 64
  64. list-max-ziplist-size -2
  65. list-compress-depth 0
  66. set-max-intset-entries 512
  67. zset-max-ziplist-entries 128
  68. zset-max-ziplist-value 64
  69. hll-sparse-max-bytes 3000
  70. activerehashing yes
  71. client-output-buffer-limit normal 0 0 0
  72. client-output-buffer-limit slave 256mb 64mb 60
  73. client-output-buffer-limit pubsub 32mb 8mb 60
  74. hz 10
  75. aof-rewrite-incremental-fsync yes
  76. - name: enable redis
  77. shell: "{{ item }}"
  78. with_items:
  79. - systemctl enable redis
  80. - systemctl restart redis
  • 执行命令:ansible-playbook /opt/6-redis-playbook.yml

安装 Jenkins

  • 创建脚本文件:vim /opt/jenkins-playbook.yml
  1. - hosts: all
  2. remote_user: root
  3. tasks:
  4. - name: wget
  5. shell: wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
  6. - name: rpm import
  7. shell: rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
  8. - name: install
  9. shell: yum install -y jenkins
  • 执行命令:ansible-playbook /opt/jenkins-playbook.yml
  • 在安装完默认推荐的插件后还需要额外安装:
    • Maven Integration
  • 设置 全局工具配置 点击我查看设置方法

安装 Redis 5.x(Docker)

  1. mkdir -p /data/docker/redis/conf /data/docker/redis/db
  2. chmod -R 777 /data/docker/redis
  1. 创建配置文件:
  2. vim /data/docker/redis/conf/redis.conf
  3. bind 0.0.0.0
  4. requirepass 123456
  5. protected-mode yes
  6. port 6379
  7. tcp-backlog 511
  8. timeout 0
  9. tcp-keepalive 300
  10. daemonize no
  11. supervised no
  12. pidfile /data/redis_6379.pid
  13. loglevel notice
  14. logfile ""
  15. databases 16
  16. always-show-logo yes
  17. save 900 1
  18. save 300 10
  19. save 60 10000
  20. stop-writes-on-bgsave-error yes
  21. rdbcompression yes
  22. rdbchecksum yes
  23. dbfilename dump.rdb
  24. dir /data
  25. replica-serve-stale-data yes
  26. replica-read-only yes
  27. repl-diskless-sync no
  28. repl-diskless-sync-delay 5
  29. repl-disable-tcp-nodelay no
  30. replica-priority 100
  31. lazyfree-lazy-eviction no
  32. lazyfree-lazy-expire no
  33. lazyfree-lazy-server-del no
  34. replica-lazy-flush no
  35. appendonly no
  36. appendfilename "appendonly.aof"
  37. appendfsync everysec
  38. no-appendfsync-on-rewrite no
  39. auto-aof-rewrite-percentage 100
  40. auto-aof-rewrite-min-size 64mb
  41. aof-load-truncated yes
  42. aof-use-rdb-preamble yes
  43. lua-time-limit 5000
  44. slowlog-log-slower-than 10000
  45. slowlog-max-len 128
  46. latency-monitor-threshold 0
  47. notify-keyspace-events ""
  48. hash-max-ziplist-entries 512
  49. hash-max-ziplist-value 64
  50. list-max-ziplist-size -2
  51. list-compress-depth 0
  52. set-max-intset-entries 512
  53. zset-max-ziplist-entries 128
  54. zset-max-ziplist-value 64
  55. hll-sparse-max-bytes 3000
  56. stream-node-max-bytes 4096
  57. stream-node-max-entries 100
  58. activerehashing yes
  59. client-output-buffer-limit normal 0 0 0
  60. client-output-buffer-limit replica 256mb 64mb 60
  61. client-output-buffer-limit pubsub 32mb 8mb 60
  62. hz 10
  63. dynamic-hz yes
  64. aof-rewrite-incremental-fsync yes
  65. rdb-save-incremental-fsync yes
  • 启动镜像:
  1. docker run \
  2. --name cdk8s-redis \
  3. --restart always \
  4. -d -it -p 6379:6379 \
  5. -v /data/docker/redis/conf/redis.conf:/etc/redis/redis.conf \
  6. -v /data/docker/redis/db:/data \
  7. redis:5 \
  8. redis-server /etc/redis/redis.conf

安装 MySQL(Docker)

  1. mkdir -p /data/docker/mysql/datadir /data/docker/mysql/conf /data/docker/mysql/log
  1. 创建配置文件:
  2. vim /data/docker/mysql/conf/mysql-1.cnf
  3. # 该编码设置是我自己配置的
  4. [mysql]
  5. default-character-set = utf8mb4
  6. # 下面内容是 docker mysql 默认的 start
  7. [mysqld]
  8. max_connections = 500
  9. pid-file = /var/run/mysqld/mysqld.pid
  10. socket = /var/run/mysqld/mysqld.sock
  11. datadir = /var/lib/mysql
  12. #log-error = /var/log/mysql/error.log
  13. # By default we only accept connections from localhost
  14. #bind-address = 127.0.0.1
  15. # Disabling symbolic-links is recommended to prevent assorted security risks
  16. symbolic-links=0
  17. # 上面内容是 docker mysql 默认的 end
  18. # 下面开始的内容就是我自己配置的
  19. log-error=/var/log/mysql/error.log
  20. default-storage-engine = InnoDB
  21. collation-server = utf8mb4_unicode_520_ci
  22. init_connect = 'SET NAMES utf8mb4'
  23. character-set-server = utf8mb4
  24. # 表名大小写敏感 0 是区分大小写,1 是不分区,全部采用小写
  25. lower_case_table_names = 1
  26. max_allowed_packet = 50M
  27. sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  28. # 避免在 dump 命令中加上密码后提示:Using a password on the command line interface can be insecure
  29. [mysqldump]
  30. user=root
  31. password=123456
  1. chmod -R 777 /data/docker/mysql/datadir /data/docker/mysql/log
  2. chown -R 0:0 /data/docker/mysql/conf
  1. docker run \
  2. --name cdk8s-mysql \
  3. --restart always \
  4. -d \
  5. -p 3306:3306 \
  6. -v /data/docker/mysql/datadir:/var/lib/mysql \
  7. -v /data/docker/mysql/log:/var/log/mysql \
  8. -v /data/docker/mysql/conf:/etc/mysql/conf.d \
  9. -e MYSQL_ROOT_PASSWORD=123456 \
  10. mysql:5.7

安装 Prometheus(Docker)

  1. 创建配置文件:
  2. mkdir -p /data/docker/prometheus/conf && vim /data/docker/prometheus/conf/prometheus.yml
  3. chmod -R 777 /data/docker/prometheus
  4. # my global config
  5. global:
  6. scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  7. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  8. # scrape_timeout is set to the global default (10s).
  9. # Alertmanager configuration
  10. alerting:
  11. alertmanagers:
  12. - static_configs:
  13. - targets:
  14. # - alertmanager:9093
  15. # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
  16. rule_files:
  17. # - "first_rules.yml"
  18. # - "second_rules.yml"
  19. scrape_configs:
  20. - job_name: 'cdk8s-sso'
  21. metrics_path: '/tkey-actuator/actuator/prometheus'
  22. static_configs:
  23. - targets: ['172.16.16.4:19091']
  • 启动
  1. docker run \
  2. -d \
  3. --name cdk8s-prometheus \
  4. --restart always \
  5. -p 9090:9090 \
  6. -v /data/docker/prometheus/conf/prometheus.yml:/etc/prometheus/prometheus.yml \
  7. prom/prometheus

安装 Grafana(Docker)

  1. mkdir -p /data/docker/grafana/data
  2. chmod -R 777 /data/docker/grafana/data
  3. docker run \
  4. -d \
  5. --name cdk8s-grafana \
  6. --restart always \
  7. -p 3000:3000 \
  8. -v /data/docker/grafana/data:/var/lib/grafana \
  9. grafana/grafana

安装 Portainer(Docker)

  1. mkdir -p /data/docker/portainer
  2. chmod -R 777 /data/docker/portainer
  • 创建文件:vim docker-compose.yml
  1. version: '3'
  2. services:
  3. portainer:
  4. container_name: portainer
  5. image: portainer/portainer
  6. volumes:
  7. - /data/docker/portainer:/data
  8. - /var/run/docker.sock:/var/run/docker.sock
  9. ports:
  10. - "9000:9000"
  • 启动:docker-compose up -d
  • 浏览器访问访问:http://182.61.44.40:9000
  • 第一次启动会让你创建用户名和密码。第二步就是配置管理哪里的 docker 容器,我这里选择:local

安装 Nginx(Docker)

  1. mkdir -p /data/docker/nginx/logs /data/docker/nginx/conf /data/docker/nginx/html
  2. chmod -R 777 /data/docker/nginx
  1. 创建配置文件:
  2. vim /data/docker/nginx/conf/nginx.conf
  3. worker_processes 1;
  4. events {
  5. worker_connections 1024;
  6. }
  7. http {
  8. include mime.types;
  9. default_type application/octet-stream;
  10. sendfile on;
  11. keepalive_timeout 65;
  12. gzip on;
  13. gzip_buffers 8 16k;
  14. gzip_min_length 512;
  15. gzip_disable "MSIE [1-6]\.(?!.*SV1)";
  16. gzip_http_version 1.1;
  17. gzip_types text/plain text/css application/javascript application/x-javascript application/json application/xml;
  18. server {
  19. listen 80;
  20. server_name localhost 127.0.0.1 191.112.221.203;
  21. location / {
  22. root /usr/share/nginx/html;
  23. index index.html index.htm;
  24. }
  25. }
  26. }
  • 运行容器:
  1. docker run \
  2. -d \
  3. --name cdk8s-nginx \
  4. --restart always \
  5. -p 80:80 \
  6. -v /data/docker/nginx/logs:/var/log/nginx \
  7. -v /data/docker/nginx/html:/data/html \
  8. -v /data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
  9. nginx:1.17
  • 重新启动服务:docker restart cdk8s-nginx

Jenkins pipeline (Docker 方式运行 tkey-sso-server)

  • 确保 项目根目录有 Dockerfile 文件
  • 特别注意:
  1. 这两个大写的名词来自 Jenkins 全局工具配置中相应配置的 name 中填写的内容
  2. jdk 'JDK8'
  3. maven 'MAVEN3'
  1. pipeline {
  2. agent any
  3. /*=======================================工具环境修改-start=======================================*/
  4. tools {
  5. jdk 'JDK8'
  6. maven 'MAVEN3'
  7. }
  8. /*=======================================工具环境修改-end=======================================*/
  9. options {
  10. timestamps()
  11. disableConcurrentBuilds()
  12. buildDiscarder(logRotator(
  13. numToKeepStr: '20',
  14. daysToKeepStr: '30',
  15. ))
  16. }
  17. /*=======================================常修改变量-start=======================================*/
  18. environment {
  19. gitUrl = "https://github.com/cdk8s/tkey.git"
  20. branchName = "master"
  21. giteeCredentialsId = "cdk8s-github"
  22. projectWorkSpacePath = "${env.WORKSPACE}"
  23. projectBuildTargetPath = "${projectWorkSpacePath}/target"
  24. dockerImageName = "harbor.cdk8s.com/tkey/${env.JOB_NAME}:${env.BUILD_NUMBER}"
  25. dockerContainerName = "${env.JOB_NAME}"
  26. inHostPort = "9091"
  27. inHostPortByActuator = "19091"
  28. inDockerAndJavaPort = "9091"
  29. inDockerAndJavaPortByActuator = "19091"
  30. inHostLogPath = "/data/logs/${dockerContainerName}/${env.BUILD_NUMBER}"
  31. inDockerLogPath = "/logs"
  32. dockerRunParam = "--name=${dockerContainerName} --hostname=${dockerContainerName} -v /etc/hosts:/etc/hosts -v ${inHostLogPath}:${inDockerLogPath} --restart=always -p ${inHostPort}:${inDockerAndJavaPort} -p ${inHostPortByActuator}:${inDockerAndJavaPortByActuator} -e SPRING_PROFILES_ACTIVE=test -e SERVER_PORT=${inHostPort} -e SPRING_REDIS_HOST=redis.cdk8s.com -e SPRING_REDIS_PASSWORD=123456 -e TKEY_NODE_NUMBER=12"
  33. }
  34. /*=======================================常修改变量-end=======================================*/
  35. stages {
  36. stage('Pre Env') {
  37. steps {
  38. echo "======================================项目名称 = ${env.JOB_NAME}"
  39. echo "======================================项目 URL = ${gitUrl}"
  40. echo "======================================项目分支 = ${branchName}"
  41. echo "======================================当前编译版本号 = ${env.BUILD_NUMBER}"
  42. echo "======================================项目空间文件夹路径 = ${projectWorkSpacePath}"
  43. echo "======================================项目 build 后 jar 路径 = ${projectBuildTargetPath}"
  44. echo "======================================Docker 镜像名称 = ${dockerImageName}"
  45. echo "======================================Docker 容器名称 = ${dockerContainerName}"
  46. }
  47. }
  48. stage('Git Clone'){
  49. steps {
  50. git branch: "${branchName}",
  51. credentialsId: "${giteeCredentialsId}",
  52. url: "${gitUrl}"
  53. }
  54. }
  55. stage('Maven Clean') {
  56. steps {
  57. sh "mvn clean"
  58. }
  59. }
  60. stage('Maven Package') {
  61. steps {
  62. sh "mvn package -DskipTests"
  63. }
  64. }
  65. stage('构建 Docker 镜像') {
  66. steps {
  67. sh """
  68. cd ${projectWorkSpacePath}
  69. docker build -t ${dockerImageName} ./
  70. """
  71. }
  72. }
  73. stage('运行 Docker 镜像') {
  74. steps {
  75. sh """
  76. docker stop ${dockerContainerName} | true
  77. docker rm -f ${dockerContainerName} | true
  78. docker run -d ${dockerRunParam} ${dockerImageName}
  79. """
  80. }
  81. }
  82. }
  83. }

Jenkins pipeline (Docker 方式运行 tkey-sso-client-management 后端)

  • 确保 项目根目录有 Dockerfile 文件
  • 特别注意:
  1. 这两个大写的名词来自 Jenkins 全局工具配置中相应配置的 name 中填写的内容
  2. jdk 'JDK8'
  3. maven 'MAVEN3'
  1. pipeline {
  2. agent any
  3. /*=======================================工具环境修改-start=======================================*/
  4. tools {
  5. jdk 'JDK8'
  6. maven 'MAVEN3'
  7. }
  8. /*=======================================工具环境修改-end=======================================*/
  9. options {
  10. timestamps()
  11. disableConcurrentBuilds()
  12. buildDiscarder(logRotator(
  13. numToKeepStr: '20',
  14. daysToKeepStr: '30',
  15. ))
  16. }
  17. /*=======================================常修改变量-start=======================================*/
  18. environment {
  19. gitUrl = "https://github.com/cdk8s/tkey-sso-client-management.git"
  20. branchName = "master"
  21. giteeCredentialsId = "cdk8s-github"
  22. projectWorkSpacePath = "${env.WORKSPACE}"
  23. projectBuildTargetPath = "${projectWorkSpacePath}/target"
  24. dockerImageName = "harbor.cdk8s.com/tkey/${env.JOB_NAME}:${env.BUILD_NUMBER}"
  25. dockerContainerName = "${env.JOB_NAME}"
  26. inHostPort = "9095"
  27. inHostPortByActuator = "19095"
  28. inDockerAndJavaPort = "9095"
  29. inDockerAndJavaPortByActuator = "19095"
  30. inHostLogPath = "/data/logs/${dockerContainerName}/${env.BUILD_NUMBER}"
  31. inDockerLogPath = "/logs"
  32. dockerRunParam = "--name=${dockerContainerName} --hostname=${dockerContainerName} -v /etc/hosts:/etc/hosts -v ${inHostLogPath}:${inDockerLogPath} --restart=always -p ${inHostPort}:${inDockerAndJavaPort} -p ${inHostPortByActuator}:${inDockerAndJavaPortByActuator} -e SPRING_PROFILES_ACTIVE=test -e SERVER_PORT=${inHostPort} -e SPRING_REDIS_HOST=redis.cdk8s.com -e SPRING_REDIS_PASSWORD=123456"
  33. }
  34. /*=======================================常修改变量-end=======================================*/
  35. stages {
  36. stage('Pre Env') {
  37. steps {
  38. echo "======================================项目名称 = ${env.JOB_NAME}"
  39. echo "======================================项目 URL = ${gitUrl}"
  40. echo "======================================项目分支 = ${branchName}"
  41. echo "======================================当前编译版本号 = ${env.BUILD_NUMBER}"
  42. echo "======================================项目空间文件夹路径 = ${projectWorkSpacePath}"
  43. echo "======================================项目 build 后 jar 路径 = ${projectBuildTargetPath}"
  44. echo "======================================Docker 镜像名称 = ${dockerImageName}"
  45. echo "======================================Docker 容器名称 = ${dockerContainerName}"
  46. }
  47. }
  48. stage('Git Clone'){
  49. steps {
  50. git branch: "${branchName}",
  51. credentialsId: "${giteeCredentialsId}",
  52. url: "${gitUrl}"
  53. }
  54. }
  55. stage('Maven Clean') {
  56. steps {
  57. sh "mvn clean"
  58. }
  59. }
  60. stage('Maven Package') {
  61. steps {
  62. sh "mvn package -DskipTests"
  63. }
  64. }
  65. stage('构建 Docker 镜像') {
  66. steps {
  67. sh """
  68. cd ${projectWorkSpacePath}
  69. docker build -t ${dockerImageName} ./
  70. """
  71. }
  72. }
  73. stage('运行 Docker 镜像') {
  74. steps {
  75. sh """
  76. docker stop ${dockerContainerName} | true
  77. docker rm -f ${dockerContainerName} | true
  78. docker run -d ${dockerRunParam} ${dockerImageName}
  79. """
  80. }
  81. }
  82. }
  83. }

Jenkins pipeline (Docker 方式运行 tkey-sso-client-management 前端)

  1. pipeline {
  2. agent any
  3. options {
  4. timestamps()
  5. disableConcurrentBuilds()
  6. buildDiscarder(logRotator(
  7. numToKeepStr: '20',
  8. daysToKeepStr: '30',
  9. ))
  10. }
  11. /*=======================================常修改变量-start=======================================*/
  12. environment {
  13. gitUrl = "https://github.com/cdk8s/tkey-sso-client-management-frontend.git"
  14. branchName = "master"
  15. giteeCredentialsId = "cdk8s-github"
  16. projectBuildPath = "${env.WORKSPACE}/dist"
  17. nginxHtmlRoot = "/data/docker/nginx/html/tkey-sso-client-management-frontend"
  18. }
  19. /*=======================================常修改变量-end=======================================*/
  20. stages {
  21. stage('Pre Env') {
  22. steps {
  23. echo "======================================项目名称 = ${env.JOB_NAME}"
  24. echo "======================================项目 URL = ${gitUrl}"
  25. echo "======================================项目分支 = ${branchName}"
  26. echo "======================================当前编译版本号 = ${env.BUILD_NUMBER}"
  27. echo "======================================项目 Build 文件夹路径 = ${projectBuildPath}"
  28. echo "======================================项目 Nginx 的 ROOT 路径 = ${nginxHtmlRoot}"
  29. }
  30. }
  31. stage('Git Clone'){
  32. steps {
  33. git branch: "${branchName}",
  34. credentialsId: "${giteeCredentialsId}",
  35. url: "${gitUrl}"
  36. }
  37. }
  38. stage('YARN Install') {
  39. steps {
  40. sh "yarn install"
  41. }
  42. }
  43. stage('YARN Build') {
  44. steps {
  45. sh "yarn build:test"
  46. }
  47. }
  48. stage('Nginx Deploy') {
  49. steps {
  50. sh "rm -rf ${nginxHtmlRoot}/"
  51. sh "cp -r ${projectBuildPath}/ ${nginxHtmlRoot}/"
  52. }
  53. }
  54. }
  55. }

GoAccess

  • GoAccess 建议用本地安装
  • 安装步骤过长,请参考我们的这篇文章:GoAccess
  • 创建目录:mkdir -p /data/docker/nginx/html/report
  • 手动运行
  1. goaccess -f /data/docker/nginx/logs/access.log --geoip-database=/opt/GeoLite2-City_20190820/GeoLite2-City.mmdb -p /etc/goaccess_log_conf_nginx.conf -o /data/docker/nginx/html/report/index.html
  • 实时运行
  1. goaccess -f /data/docker/nginx/logs/access.log --geoip-database=/opt/GeoLite2-City_20190820/GeoLite2-City.mmdb -p /etc/goaccess_log_conf_nginx.conf -o /data/docker/nginx/html/report/index.html --real-time-html --daemonize

Nginx 最终配置

  • 因为 nginx 在 docker 里面,所以不能用 127.0.0.1
  1. 配置文件:
  2. vim /data/docker/nginx/conf/nginx.conf
  3. worker_processes 1;
  4. events {
  5. worker_connections 1024;
  6. }
  7. http {
  8. include mime.types;
  9. default_type application/octet-stream;
  10. charset utf8;
  11. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  12. '$status $body_bytes_sent "$http_referer" '
  13. '"$http_user_agent" "$http_x_forwarded_for" "$request_time"';
  14. access_log /var/log/nginx/access.log main;
  15. error_log /var/log/nginx/error.log;
  16. sendfile on;
  17. keepalive_timeout 65;
  18. gzip on;
  19. gzip_buffers 8 16k;
  20. gzip_min_length 512;
  21. gzip_disable "MSIE [1-6]\.(?!.*SV1)";
  22. gzip_http_version 1.1;
  23. gzip_types text/plain text/css application/javascript application/x-javascript application/json application/xml;
  24. server {
  25. listen 80;
  26. server_name localhost 127.0.0.1 182.61.44.40;
  27. location /tkey-test {
  28. return 601;
  29. }
  30. location ^~ /upload {
  31. root /home/root/sculptor-boot-backend-upload-dir;
  32. autoindex on;
  33. autoindex_exact_size off;
  34. autoindex_localtime on;
  35. }
  36. # 需要创建目录 /data/html/tkey-sso-client-management-frontend,里面存放 index.html 等静态文件
  37. location ^~ /tkey-sso-client-management-frontend {
  38. root /data/html;
  39. index index.html;
  40. try_files $uri /tkey-sso-client-management-frontend/index.html;
  41. }
  42. location ^~ /sso-client-management/ {
  43. proxy_pass http://172.16.16.4:9095;
  44. proxy_redirect off;
  45. proxy_set_header Host $host;
  46. proxy_set_header X-Real-IP $remote_addr;
  47. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  48. proxy_set_header X-Forwarded-Proto $scheme;
  49. }
  50. location ^~ /sso/ {
  51. proxy_pass http://172.16.16.4:9091;
  52. proxy_redirect off;
  53. proxy_set_header Host $host;
  54. proxy_set_header X-Real-IP $remote_addr;
  55. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  56. proxy_set_header X-Forwarded-Proto $scheme;
  57. }
  58. location ^~ /report {
  59. root /data/html;
  60. index index.html index.htm;
  61. }
  62. location / {
  63. root /usr/share/nginx/html;
  64. index index.html index.htm;
  65. }
  66. }
  67. }

hosts 配置

  1. 172.16.16.4 sso.cdk8s.com
  2. 172.16.16.4 test1.cdk8s.com
  3. 172.16.16.4 test2.cdk8s.com
  4. 172.16.16.4 redis.cdk8s.com
  5. 172.16.16.4 mysql.cdk8s.com
  6. 172.16.16.4 management.cdk8s.com
  7. 172.16.16.4 tkey-sso-client-management
  8. 172.16.16.4 tkey-sso