├── .gitignore ├── docker ├── es-cluster.sh ├── redis-cluster.sh ├── nexus3.sh ├── buildx.sh ├── nacos.sh ├── skywalking-ui.sh ├── redis.sh ├── rustdesk-server.sh ├── postgresql.sh ├── gitlab.sh ├── kibana.sh ├── minio.sh ├── mysql.sh ├── es.sh ├── uninstall.sh ├── skywalking-oap.sh ├── ssr.sh └── install.sh ├── README_ZH.md ├── README.md ├── docker-install.sh └── k8s-install.sh /.gitignore: -------------------------------------------------------------------------------- 1 | /.idea/ -------------------------------------------------------------------------------- /docker/es-cluster.sh: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README_ZH.md: -------------------------------------------------------------------------------- 1 | [English](README.md) 2 | 3 | # 一键安装脚本 4 | 5 | Linux 的快速安装脚本 6 | 7 | ## 建议系统 8 | 9 | - 系统: CentOS 8+/Ubuntu 20+/Debian 11+ 10 | - CPU: x86_64/amd64 arm64/aarch64 11 | 12 | ## 安装 Kubernetes (K8s) 13 | 14 | - 系统: CentOS 7+ / Ubuntu 18+ / Debian 10+ 15 | - CPU: x86_64/amd64 arm64/aarch64 16 | - Kubernetes 版本: v1.29 17 | 18 | 安装命令: 19 | 20 | ```bash 21 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/k8s-install.sh) 22 | ``` 23 | 24 | ## 安装 Docker 和基于 Docker 的服务 25 | 26 | - 系统: CentOS 7+ / Ubuntu 18+ / Debian 10+ 27 | - CPU: x86_64/amd64 arm64/aarch64 28 | - Docker 版本: Latest 29 | 30 | 安装命令: 31 | 32 | ```bash 33 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/docker-install.sh) 34 | ``` 35 | 36 | ## 其他 37 | 38 | Telegram Channel: https://t.me/jonssonyan_channel 39 | 40 | 你可以在 YouTube 上订阅我的频道: https://www.youtube.com/@jonssonyan 41 | 42 | 如果这个项目对你有帮助,你可以请我喝杯咖啡: 43 | 44 | 微信赞赏码 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [简体中文](README_ZH.md) 2 | 3 | # Install Script 4 | 5 | Quick installation scripts for Linux servers 6 | 7 | ## Recommended OS 8 | 9 | - OS: CentOS 8+/Ubuntu 20+/Debian 11+ 10 | - CPU: x86_64/amd64 arm64/aarch64 11 | 12 | ## Install Kubernetes (K8s) 13 | 14 | - OS: CentOS 7+ / Ubuntu 18+ / Debian 10+ 15 | - CPU: x86_64/amd64 arm64/aarch64 16 | - Kubernetes Version: v1.29 17 | 18 | Installation Command: 19 | 20 | ```bash 21 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/k8s-install.sh) 22 | ``` 23 | 24 | ## Install Docker and Docker-based Services 25 | 26 | - OS: CentOS 7+ / Ubuntu 18+ / Debian 10+ 27 | - CPU: x86_64/amd64 arm64/aarch64 28 | - Docker Version: Latest 29 | 30 | Installation Command: 31 | 32 | ```bash 33 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/docker-install.sh) 34 | ``` 35 | 36 | ## Other 37 | 38 | Telegram Channel: https://t.me/jonssonyan_channel 39 | 40 | You can subscribe to my channel on YouTube: https://www.youtube.com/@jonssonyan 41 | 42 | If this project is helpful to you, you can buy me a cup of coffee. 43 | 44 | Wechat sponsor code 45 | -------------------------------------------------------------------------------- /docker/redis-cluster.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Redis Cluster Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e 7 | 8 | init_var() { 9 | ECHO_TYPE="echo -e" 10 | 11 | # Redis 12 | REDIS_CLUSTER_DATA="/dockerdata/redis-cluster/" 13 | redis_cluster_ip="jy-redis-cluster" 14 | redis_cluster_port=6378 15 | redis_cluster_pass="" 16 | } 17 | 18 | echo_content() { 19 | local color_code 20 | case $1 in 21 | "red") color_code="\033[31m" ;; 22 | "green") color_code="\033[32m" ;; 23 | "yellow") color_code="\033[33m" ;; 24 | "blue") color_code="\033[34m" ;; 25 | "purple") color_code="\033[35m" ;; 26 | "skyBlue") color_code="\033[36m" ;; 27 | "white") color_code="\033[37m" ;; 28 | *) color_code="\033[0m" ;; 29 | esac 30 | ${ECHO_TYPE} "${color_code}$2\033[0m" 31 | } 32 | 33 | create_dirs() { 34 | mkdir -p ${REDIS_CLUSTER_DATA} 35 | mkdir -p ${REDIS_CLUSTER_DATA}data/ 36 | } 37 | 38 | install_docker() { 39 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/docker/install.sh) 40 | } 41 | 42 | install_redis_cluster() { 43 | if [[ -z $(docker ps -q -f "name=^${redis_cluster_ip}$") ]]; then 44 | echo_content skyBlue "---> 安装 Redis 集群" 45 | else 46 | echo_content skyBlue "---> 你已经安装了 Redis 集群" 47 | fi 48 | } 49 | 50 | main() { 51 | cd "$HOME" || exit 1 52 | 53 | init_var 54 | 55 | create_dirs 56 | 57 | install_docker 58 | 59 | install_redis_cluster 60 | } 61 | 62 | main "$@" 63 | -------------------------------------------------------------------------------- /docker/nexus3.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Nexus3 Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e 7 | 8 | init_var() { 9 | ECHO_TYPE="echo -e" 10 | 11 | NEXUS3_DATA="/dockerdata/nexus3/" 12 | nexus3_ip="jy-nexus3" 13 | nexus3_port=8081 14 | } 15 | 16 | echo_content() { 17 | local color_code 18 | case $1 in 19 | "red") color_code="\033[31m" ;; 20 | "green") color_code="\033[32m" ;; 21 | "yellow") color_code="\033[33m" ;; 22 | "blue") color_code="\033[34m" ;; 23 | "purple") color_code="\033[35m" ;; 24 | "skyBlue") color_code="\033[36m" ;; 25 | "white") color_code="\033[37m" ;; 26 | *) color_code="\033[0m" ;; 27 | esac 28 | ${ECHO_TYPE} "${color_code}$2\033[0m" 29 | } 30 | 31 | create_dirs() { 32 | mkdir -p ${NEXUS3_DATA} 33 | } 34 | 35 | install_nexus3() { 36 | if [[ -z $(docker ps -q -f "name=^${nexus3_ip}$") ]]; then 37 | echo_content skyBlue "---> 安装 Nexus3" 38 | 39 | read -r -p "请输入Nexus3的端口(默认:8081): " nexus3_port 40 | [[ -z "${nexus3_port}" ]] && nexus3_port=8081 41 | 42 | docker pull sonatype/nexus3:3.49.0 && 43 | docker run -d --name ${nexus3_ip} --restart always \ 44 | - p ${nexus3_port}:8081 \ 45 | -v ${NEXUS3_DATA}:/nexus-data \ 46 | -e TZ=Asia/Shanghai \ 47 | sonatype/nexus3:3.49.0 48 | 49 | if [[ -n $(docker ps -q -f "name=^${nexus3_ip}$" -f "status=running") ]]; then 50 | password=$(docker exec ${nexus3_ip} cat /nexus-data/admin.password) 51 | echo_content skyBlue "---> Nexus3安装完成" 52 | echo_content yellow "---> Nexus3 admin的密码(请妥善保存): ${password}" 53 | else 54 | echo_content red "---> Nexus3安装失败或运行异常,请尝试修复或卸载重装" 55 | exit 1 56 | fi 57 | else 58 | echo_content skyBlue "---> 你已经安装了Nexus3" 59 | fi 60 | } 61 | 62 | main() { 63 | cd "$HOME" || exit 1 64 | 65 | init_var 66 | 67 | create_dirs 68 | 69 | install_docker 70 | 71 | install_nexus3 72 | } 73 | 74 | main "$@" 75 | -------------------------------------------------------------------------------- /docker/buildx.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Docker buildx Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e 7 | 8 | init_var() { 9 | ECHO_TYPE="echo -e" 10 | 11 | buildx_ip="jy-buildx" 12 | DOCKER_CONFIG_PATH='/root/.docker/' 13 | docker_config='/root/.docker/config.json' 14 | } 15 | 16 | echo_content() { 17 | local color_code 18 | case $1 in 19 | "red") color_code="\033[31m" ;; 20 | "green") color_code="\033[32m" ;; 21 | "yellow") color_code="\033[33m" ;; 22 | "blue") color_code="\033[34m" ;; 23 | "purple") color_code="\033[35m" ;; 24 | "skyBlue") color_code="\033[36m" ;; 25 | "white") color_code="\033[37m" ;; 26 | *) color_code="\033[0m" ;; 27 | esac 28 | ${ECHO_TYPE} "${color_code}$2\033[0m" 29 | } 30 | 31 | install_docker() { 32 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/docker/install.sh) 33 | } 34 | 35 | install_buildx() { 36 | if docker buildx inspect --bootstrap | grep -q "${buildx_ip}"; then 37 | echo_content skyBlue "---> buildx is already installed" 38 | return 39 | fi 40 | 41 | echo_content skyBlue "---> Installing buildx" 42 | 43 | mkdir -p "${DOCKER_CONFIG_PATH}" 44 | if [[ -f "${docker_config}" ]]; then 45 | if ! grep -q "experimental" "${docker_config}"; then 46 | jq '.experimental="enabled"' "${docker_config}" >"${docker_config}.tmp" && mv "${docker_config}.tmp" "${docker_config}" 47 | fi 48 | else 49 | cat >"${docker_config}" < buildx installation complete" 61 | else 62 | echo_content red "---> buildx installation failed" 63 | exit 1 64 | fi 65 | } 66 | 67 | main() { 68 | cd "$HOME" || exit 1 69 | 70 | init_var 71 | 72 | install_docker 73 | 74 | install_buildx 75 | } 76 | 77 | main "$@" 78 | -------------------------------------------------------------------------------- /docker/nacos.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Nacos Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e 7 | 8 | init_var() { 9 | ECHO_TYPE="echo -e" 10 | 11 | NACOS_DATA="/dockerdata/nacos/" 12 | nacos_ip="jy-nacos" 13 | nacos_port=8848 14 | } 15 | 16 | echo_content() { 17 | local color_code 18 | case $1 in 19 | "red") color_code="\033[31m" ;; 20 | "green") color_code="\033[32m" ;; 21 | "yellow") color_code="\033[33m" ;; 22 | "blue") color_code="\033[34m" ;; 23 | "purple") color_code="\033[35m" ;; 24 | "skyBlue") color_code="\033[36m" ;; 25 | "white") color_code="\033[37m" ;; 26 | *) color_code="\033[0m" ;; 27 | esac 28 | ${ECHO_TYPE} "${color_code}$2\033[0m" 29 | } 30 | 31 | create_dirs() { 32 | mkdir -p ${NACOS_DATA} 33 | } 34 | 35 | install_docker() { 36 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/docker/install.sh) 37 | } 38 | 39 | install_nacos() { 40 | if [[ -z $(docker ps -q -f "name=^${nacos_ip}$") ]]; then 41 | echo_content skyBlue "---> 安装 Nacos" 42 | 43 | read -r -p "请输入Nacos的端口(默认:8848): " nacos_port 44 | [[ -z "${nacos_port}" ]] && nacos_port=8848 45 | 46 | docker pull nacos/nacos-server:v2.1.2 && 47 | docker run -d --name ${nacos_ip} --restart=always \ 48 | --network=host \ 49 | -e MODE=standalone \ 50 | -e NACOS_SERVER_PORT=${nacos_port} \ 51 | -e TZ=Asia/Shanghai \ 52 | nacos/nacos-server:v2.1.2 53 | if [[ -n $(docker ps -q -f "name=^${nacos_ip}$" -f "status=running") ]]; then 54 | echo_content skyBlue "---> Nacos安装完成" 55 | echo_content yellow "---> Nacos的登录地址: http://ip:${nacos_port}/nacos/#/login" 56 | echo_content yellow "---> Nacos的用户号名(请妥善保存): nacos" 57 | echo_content yellow "---> Nacos的密码(请妥善保存): nacos" 58 | else 59 | echo_content red "---> Nacos安装失败或运行异常,请尝试修复或卸载重装" 60 | exit 1 61 | fi 62 | else 63 | echo_content skyBlue "---> 你已经安装了Nacos" 64 | fi 65 | } 66 | 67 | main() { 68 | cd "$HOME" || exit 1 69 | 70 | init_var 71 | 72 | create_dirs 73 | 74 | install_docker 75 | 76 | install_nacos 77 | } 78 | 79 | main "$@" 80 | -------------------------------------------------------------------------------- /docker/skywalking-ui.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # SkyWalking UI Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e 7 | 8 | init_var() { 9 | ECHO_TYPE="echo -e" 10 | 11 | SW_DATA="/dockerdata/skywalking/" 12 | 13 | sw_ui_ip="jy-skywalking-ui" 14 | sw_ui_port=8080 15 | sw_oap_url="http://127.0.0.1:12800" 16 | } 17 | 18 | echo_content() { 19 | local color_code 20 | case $1 in 21 | "red") color_code="\033[31m" ;; 22 | "green") color_code="\033[32m" ;; 23 | "yellow") color_code="\033[33m" ;; 24 | "blue") color_code="\033[34m" ;; 25 | "purple") color_code="\033[35m" ;; 26 | "skyBlue") color_code="\033[36m" ;; 27 | "white") color_code="\033[37m" ;; 28 | *) color_code="\033[0m" ;; 29 | esac 30 | ${ECHO_TYPE} "${color_code}$2\033[0m" 31 | } 32 | 33 | create_dirs() { 34 | mkdir -p ${SW_DATA} 35 | } 36 | 37 | install_docker() { 38 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/docker/install.sh) 39 | } 40 | 41 | install_skywalking_ui() { 42 | if [[ -z $(docker ps -q -f "name=^${sw_ui_ip}$") ]]; then 43 | echo_content skyBlue "---> 安装 SkyWalking UI" 44 | 45 | read -r -p "请输入SkyWalking UI的端口(默认:8080): " sw_ui_port 46 | [[ -z "${sw_ui_port}" ]] && sw_ui_port=8080 47 | read -r -p "请输入SkyWalking OAP的URL(默认:http://127.0.0.1:12800): " sw_oap_url 48 | [[ -z "${sw_oap_url}" ]] && sw_oap_url="http://127.0.0.1:12800" 49 | 50 | docker pull apache/skywalking-ui:9.5.0 && 51 | docker run -d --name ${sw_ui_ip} --restart always \ 52 | --network=host \ 53 | -e TZ=Asia/Shanghai \ 54 | -e SW_SERVER_PORT=${sw_ui_port} \ 55 | -e SW_OAP_ADDRESS="${sw_oap_url}" \ 56 | apache/skywalking-ui:9.5.0 57 | 58 | if [[ -n $(docker ps -q -f "name=^${sw_ui_ip}$" -f "status=running") ]]; then 59 | echo_content skyBlue "---> SkyWalking UI安装完成" 60 | else 61 | echo_content red "---> SkyWalking UI安装失败或运行异常,请尝试修复或卸载重装" 62 | exit 1 63 | fi 64 | else 65 | echo_content skyBlue "---> 你已经安装了SkyWalking UI" 66 | fi 67 | } 68 | 69 | main() { 70 | cd "$HOME" || exit 1 71 | 72 | init_var 73 | 74 | create_dirs 75 | 76 | install_docker 77 | 78 | install_skywalking_ui 79 | } 80 | 81 | main "$@" 82 | -------------------------------------------------------------------------------- /docker/redis.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Redis Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e 7 | 8 | init_var() { 9 | ECHO_TYPE="echo -e" 10 | 11 | # Redis 12 | REDIS_DATA="/dockerdata/redis/" 13 | redis_ip="jy-redis" 14 | redis_port=6378 15 | redis_pass="" 16 | } 17 | 18 | echo_content() { 19 | local color_code 20 | case $1 in 21 | "red") color_code="\033[31m" ;; 22 | "green") color_code="\033[32m" ;; 23 | "yellow") color_code="\033[33m" ;; 24 | "blue") color_code="\033[34m" ;; 25 | "purple") color_code="\033[35m" ;; 26 | "skyBlue") color_code="\033[36m" ;; 27 | "white") color_code="\033[37m" ;; 28 | *) color_code="\033[0m" ;; 29 | esac 30 | ${ECHO_TYPE} "${color_code}$2\033[0m" 31 | } 32 | 33 | create_dirs() { 34 | mkdir -p ${REDIS_DATA} 35 | mkdir -p ${REDIS_DATA}data/ 36 | } 37 | 38 | install_docker() { 39 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/docker/install.sh) 40 | } 41 | 42 | install_redis() { 43 | if [[ -z $(docker ps -q -f "name=^${redis_ip}$") ]]; then 44 | echo_content skyBlue "---> 安装 Redis" 45 | 46 | read -r -p "请输入 Redis 的端口(默认:6378): " redis_port 47 | [[ -z "${redis_port}" ]] && redis_port=6378 48 | while read -r -p "请输入 Redis 的密码(必填): " redis_pass; do 49 | if [[ -z "${redis_pass}" ]]; then 50 | echo_content red "密码不能为空" 51 | else 52 | break 53 | fi 54 | done 55 | 56 | docker pull redis:6.2.13 && 57 | docker run -d --name ${redis_ip} --restart always \ 58 | --network=host \ 59 | -e TZ=Asia/Shanghai \ 60 | -v ${REDIS_DATA}data/:/data/ \ 61 | -v ${REDIS_DATA}etc/:/usr/local/etc/redis/ \ 62 | redis:6.2.13 \ 63 | redis-server --requirepass "${redis_pass}" --port "${redis_port}" 64 | 65 | if [[ -n $(docker ps -q -f "name=^${redis_ip}$" -f "status=running") ]]; then 66 | echo_content skyBlue "---> Redis 安装完成" 67 | echo_content yellow "---> Redis 的数据库密码(请妥善保存): ${redis_pass}" 68 | else 69 | echo_content red "---> Redis 安装失败或运行异常,请尝试修复或卸载重装" 70 | exit 1 71 | fi 72 | else 73 | echo_content skyBlue "---> 你已经安装了 Redis" 74 | fi 75 | } 76 | 77 | main() { 78 | cd "$HOME" || exit 1 79 | 80 | init_var 81 | 82 | create_dirs 83 | 84 | install_docker 85 | 86 | install_redis 87 | } 88 | 89 | main "$@" 90 | -------------------------------------------------------------------------------- /docker/rustdesk-server.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # RustDesk Server Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e 7 | 8 | # https://rustdesk.com/docs/zh-cn/self-host/rustdesk-server-oss/install/#docker示范 9 | 10 | init_var() { 11 | ECHO_TYPE="echo -e" 12 | 13 | # RustDesk Server 14 | RUSTDESK_SERVER="/dockerdata/rustdesk-server/" 15 | # hbbr RustDesk 中继服务器 16 | rustdesk_server_hbbr="jy-rustdesk-server-hbbr" 17 | # hbbs RustDesk ID注册服务器 18 | rustdesk_server_hbbs="jy-rustdesk-server-hbbs" 19 | } 20 | 21 | echo_content() { 22 | local color_code 23 | case $1 in 24 | "red") color_code="\033[31m" ;; 25 | "green") color_code="\033[32m" ;; 26 | "yellow") color_code="\033[33m" ;; 27 | "blue") color_code="\033[34m" ;; 28 | "purple") color_code="\033[35m" ;; 29 | "skyBlue") color_code="\033[36m" ;; 30 | "white") color_code="\033[37m" ;; 31 | *) color_code="\033[0m" ;; 32 | esac 33 | ${ECHO_TYPE} "${color_code}$2\033[0m" 34 | } 35 | 36 | create_dirs() { 37 | mkdir -p ${RUSTDESK_SERVER} 38 | mkdir -p ${RUSTDESK_SERVER}data/ 39 | } 40 | 41 | install_docker() { 42 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/docker/install.sh) 43 | } 44 | 45 | install_rustdesk_bbr() { 46 | if [[ -z $(docker ps -q -f "name=^${rustdesk_server_hbbr}$") ]]; then 47 | echo_content skyBlue "---> 安装 RustDesk Server hbbr" 48 | 49 | docker run -d --name ${rustdesk_server_hbbr} --restart always \ 50 | --network=host \ 51 | -e TZ=Asia/Shanghai \ 52 | -v ${RUSTDESK_SERVER}data/:/root/ \ 53 | rustdesk/rustdesk-server hbbr 54 | 55 | else 56 | echo_content skyBlue "---> 你已经安装了 RustDesk Server hbbr" 57 | fi 58 | 59 | if [[ -z $(docker ps -q -f "name=^${rustdesk_server_hbbr}$") ]]; then 60 | install_rustdesk_hbbs 61 | fi 62 | 63 | } 64 | 65 | install_rustdesk_hbbs() { 66 | if [[ -z $(docker ps -q -f "name=^${rustdesk_server_hbbs}$") ]]; then 67 | echo_content skyBlue "---> 安装 RustDesk Server hbbs" 68 | 69 | docker run -d --name ${rustdesk_server_hbbs} --restart always \ 70 | --network=host \ 71 | -e TZ=Asia/Shanghai \ 72 | -v ${RUSTDESK_SERVER}data/:/root/ \ 73 | rustdesk/rustdesk-server hbbs 74 | 75 | else 76 | echo_content skyBlue "---> 你已经安装了 RustDesk Server hbbs" 77 | fi 78 | } 79 | 80 | main() { 81 | cd "$HOME" || exit 1 82 | 83 | init_var 84 | 85 | create_dirs 86 | 87 | install_docker 88 | 89 | install_rustdesk_bbr 90 | } 91 | 92 | main "$@" 93 | -------------------------------------------------------------------------------- /docker/postgresql.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # PostgreSQL Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e 7 | 8 | init_var() { 9 | ECHO_TYPE="echo -e" 10 | 11 | POSTGRESQL_DATA="/dockerdata/postgresql/" 12 | postgresql_ip="jy-postgresql" 13 | postgresql_port=9876 14 | postgresql_user="postgres" 15 | postgresql_pas="" 16 | } 17 | 18 | echo_content() { 19 | local color_code 20 | case $1 in 21 | "red") color_code="\033[31m" ;; 22 | "green") color_code="\033[32m" ;; 23 | "yellow") color_code="\033[33m" ;; 24 | "blue") color_code="\033[34m" ;; 25 | "purple") color_code="\033[35m" ;; 26 | "skyBlue") color_code="\033[36m" ;; 27 | "white") color_code="\033[37m" ;; 28 | *) color_code="\033[0m" ;; 29 | esac 30 | ${ECHO_TYPE} "${color_code}$2\033[0m" 31 | } 32 | 33 | create_dirs() { 34 | mkdir -p ${POSTGRESQL_DATA} 35 | } 36 | 37 | install_docker() { 38 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/docker/install.sh) 39 | } 40 | 41 | install_postgresql() { 42 | if [[ -z $(docker ps -q -f "name=^${postgresql_ip}$") ]]; then 43 | read -r -p "请输入数据库的端口(默认:9876): " postgresql_port 44 | [[ -z "${postgresql_port}" ]] && postgresql_port=9876 45 | read -r -p "请输入数据库的用户名(默认:postgres): " postgresql_user 46 | [[ -z "${postgresql_user}" ]] && postgresql_user="postgres" 47 | while read -r -p "请输入数据库的密码(必填): " postgresql_pas; do 48 | if [[ -z "${postgresql_pas}" ]]; then 49 | echo_content red "密码不能为空" 50 | else 51 | break 52 | fi 53 | done 54 | 55 | docker pull postgres:13 && 56 | docker run -d --name ${postgresql_ip} --restart always \ 57 | --network=host \ 58 | -e POSTGRES_USER="${postgresql_user}" \ 59 | -e POSTGRES_PASSWORD="${postgresql_pas}" \ 60 | -e TZ="Asia/Shanghai" \ 61 | -v ${POSTGRESQL_DATA}data:/var/lib/postgresql/data \ 62 | postgres:13 \ 63 | -c "port=${postgresql_port}" 64 | 65 | if [[ -n $(docker ps -q -f "name=^${postgresql_ip}$" -f "status=running") ]]; then 66 | echo_content skyBlue "---> PostgreSQL 安装完成" 67 | echo_content yellow "---> PostgreSQL postgres 的数据库密码(请妥善保存): ${postgresql_pas}" 68 | else 69 | echo_content red "---> PostgreSQL 安装失败或运行异常,请尝试修复或卸载重装" 70 | exit 1 71 | fi 72 | else 73 | echo_content skyBlue "---> 你已经安装了 PostgreSQL" 74 | fi 75 | } 76 | 77 | main() { 78 | cd "$HOME" || exit 1 79 | 80 | init_var 81 | 82 | create_dirs 83 | 84 | install_docker 85 | 86 | install_postgresql 87 | } 88 | 89 | main "$@" 90 | -------------------------------------------------------------------------------- /docker/gitlab.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # GitLab Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e 7 | 8 | # 官方文档:https://docs.gitlab.com/ee/install/docker.html 9 | 10 | init_var() { 11 | ECHO_TYPE="echo -e" 12 | 13 | GITLAB_DATA="/dockerdata/gitlab/" 14 | GITLAB_CONFIG="${GITLAB_DATA}config/" 15 | GITLAB_LOG="${GITLAB_DATA}logs/" 16 | GITLAB_OPT="${GITLAB_DATA}opt/" 17 | gitlab_ip="jy-gitlab" 18 | gitlab_http_port=80 19 | gitlab_https_port=443 20 | gitlab_ssh_port=22 21 | } 22 | 23 | echo_content() { 24 | local color_code 25 | case $1 in 26 | "red") color_code="\033[31m" ;; 27 | "green") color_code="\033[32m" ;; 28 | "yellow") color_code="\033[33m" ;; 29 | "blue") color_code="\033[34m" ;; 30 | "purple") color_code="\033[35m" ;; 31 | "skyBlue") color_code="\033[36m" ;; 32 | "white") color_code="\033[37m" ;; 33 | *) color_code="\033[0m" ;; 34 | esac 35 | ${ECHO_TYPE} "${color_code}$2\033[0m" 36 | } 37 | 38 | create_dirs() { 39 | mkdir -p ${GITLAB_DATA} 40 | mkdir -p ${GITLAB_CONFIG} 41 | mkdir -p ${GITLAB_LOG} 42 | mkdir -p ${GITLAB_OPT} 43 | } 44 | 45 | install_gitlab() { 46 | if [[ -z $(docker ps -q -f "name=^${gitlab_ip}$") ]]; then 47 | echo_content skyBlue "---> 安装 GitLab" 48 | 49 | read -r -p "请输入GitLab的HTTP端口(默认:80): " gitlab_http_port 50 | [[ -z "${gitlab_http_port}" ]] && gitlab_http_port=80 51 | read -r -p "请输入GitLab的HTTPS端口(默认:443): " gitlab_https_port 52 | [[ -z "${gitlab_https_port}" ]] && gitlab_https_port=443 53 | read -r -p "请输入GitLab的SSH端口(默认:22): " gitlab_ssh_port 54 | [[ -z "${gitlab_ssh_port}" ]] && gitlab_ssh_port=22 55 | 56 | docker pull gitlab/gitlab-ce:15.11.11-ce.0 && 57 | docker run -d --name ${gitlab_ip} --restart always \ 58 | -e TZ=Asia/Shanghai \ 59 | -p ${gitlab_http_port}:80 \ 60 | -p ${gitlab_https_port}:443 \ 61 | -p ${gitlab_ssh_port}:22 \ 62 | -v ${GITLAB_CONFIG}gitlab.rb:/etc/gitlab/gitlab.rb \ 63 | -v ${GITLAB_LOG}:/var/log/gitlab \ 64 | -v ${GITLAB_OPT}:/var/opt/gitlab \ 65 | gitlab/gitlab-ce:15.11.11-ce.0 66 | 67 | if [[ -n $(docker ps -q -f "name=^${gitlab_ip}$" -f "status=running") ]]; then 68 | gitlab_password=$(docker exec cat ${GITLAB_CONFIG}initial_root_password) 69 | echo_content skyBlue "---> GitLab安装完成" 70 | echo_content yellow "---> GitLab的用户号名(请妥善保存): root" 71 | echo_content yellow "---> GitLab的密码(请妥善保存): ${gitlab_password}" 72 | else 73 | echo_content red "---> GitLab安装失败或运行异常,请尝试修复或卸载重装" 74 | exit 1 75 | fi 76 | else 77 | echo_content skyBlue "---> 你已经安装了GitLab" 78 | fi 79 | } 80 | 81 | main() { 82 | cd "$HOME" || exit 1 83 | 84 | init_var 85 | 86 | create_dirs 87 | 88 | install_docker 89 | 90 | install_gitlab 91 | } 92 | 93 | main "$@" 94 | -------------------------------------------------------------------------------- /docker/kibana.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Kibana Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e 7 | 8 | # 官方文档:https://www.elastic.co/guide/en/kibana/7.17/settings.html 9 | 10 | init_var() { 11 | ECHO_TYPE="echo -e" 12 | 13 | KIBANA_DATA="/dockerdata/kibana/" 14 | KIBANA_DATA_CONFIG="${KIBANA_DATA}config/" 15 | kibana_ip="jy-kibana" 16 | kibana_server_port=5601 17 | kibana_server_name="jy-kibana" 18 | es_url="http://127.0.0.1:9200" 19 | es_username="elastic" 20 | es_password="elastic" 21 | } 22 | 23 | echo_content() { 24 | local color_code 25 | case $1 in 26 | "red") color_code="\033[31m" ;; 27 | "green") color_code="\033[32m" ;; 28 | "yellow") color_code="\033[33m" ;; 29 | "blue") color_code="\033[34m" ;; 30 | "purple") color_code="\033[35m" ;; 31 | "skyBlue") color_code="\033[36m" ;; 32 | "white") color_code="\033[37m" ;; 33 | *) color_code="\033[0m" ;; 34 | esac 35 | ${ECHO_TYPE} "${color_code}$2\033[0m" 36 | } 37 | 38 | create_dirs() { 39 | mkdir -p ${KIBANA_DATA} 40 | mkdir -p ${KIBANA_DATA}config/ 41 | } 42 | 43 | install_docker() { 44 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/docker/install.sh) 45 | } 46 | 47 | install_kibana() { 48 | if [[ -z $(docker ps -q -f "name=^${kibana_ip}$") ]]; then 49 | echo_content skyBlue "---> 安装 Kibana" 50 | 51 | read -r -p "请输入Kibana的端口(默认:5601): " kibana_server_port 52 | [[ -z "${kibana_server_port}" ]] && kibana_server_port=5601 53 | read -r -p "请输入Kibana的主机名(默认:jy-kibana): " kibana_server_name 54 | [[ -z "${kibana_server_name}" ]] && kibana_server_name="jy-kibana" 55 | 56 | read -r -p "请输入Elasticsearch的URL(默认:http://127.0.0.1:9200): " es_url 57 | [[ -z "${es_url}" ]] && es_url="http://127.0.0.1:9200" 58 | read -r -p "请输入Elasticsearch的用户名(默认:elastic): " es_username 59 | [[ -z "${es_username}" ]] && es_username="elastic" 60 | read -r -p "请输入Elasticsearch的密码(默认:elastic): " es_password 61 | [[ -z "${es_password}" ]] && es_password="elastic" 62 | 63 | cat >${KIBANA_DATA}config/kibana.yml < Kibana安装完成" 82 | else 83 | echo_content red "---> Kibana安装失败或运行异常,请尝试修复或卸载重装" 84 | exit 1 85 | fi 86 | else 87 | echo_content skyBlue "---> 你已经安装了Kibana" 88 | fi 89 | } 90 | 91 | main() { 92 | cd "$HOME" || exit 1 93 | 94 | init_var 95 | 96 | create_dirs 97 | 98 | install_docker 99 | 100 | install_kibana 101 | } 102 | 103 | main "$@" 104 | -------------------------------------------------------------------------------- /docker/minio.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Minio Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e 7 | 8 | init_var() { 9 | ECHO_TYPE="echo -e" 10 | 11 | MINIO_DATA="/dockerdata/minio/" 12 | MINIO_DATA_DATA="${MINIO_DATA}data/" 13 | MINIO_DATA_CONFIG="${MINIO_DATA}config/" 14 | minio_ip="jy-minio" 15 | minio_server_port=9000 16 | minio_console_port=9001 17 | minio_root_user="admin" 18 | minio_root_password="" 19 | } 20 | 21 | echo_content() { 22 | local color_code 23 | case $1 in 24 | "red") color_code="\033[31m" ;; 25 | "green") color_code="\033[32m" ;; 26 | "yellow") color_code="\033[33m" ;; 27 | "blue") color_code="\033[34m" ;; 28 | "purple") color_code="\033[35m" ;; 29 | "skyBlue") color_code="\033[36m" ;; 30 | "white") color_code="\033[37m" ;; 31 | *) color_code="\033[0m" ;; 32 | esac 33 | ${ECHO_TYPE} "${color_code}$2\033[0m" 34 | } 35 | 36 | create_dirs() { 37 | mkdir -p ${MINIO_DATA} 38 | mkdir -p ${MINIO_DATA_DATA} 39 | mkdir -p ${MINIO_DATA_CONFIG} 40 | } 41 | 42 | install_docker() { 43 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/docker/install.sh) 44 | } 45 | 46 | install_minio() { 47 | if [[ -z $(docker ps -q -f "name=^${minio_ip}$") ]]; then 48 | echo_content skyBlue "---> 安装 Minio" 49 | 50 | read -r -p "请输入Minio的服务端口(默认:9000): " minio_server_port 51 | [[ -z "${minio_server_port}" ]] && minio_server_port=9000 52 | read -r -p "请输入Minio的控制台端口(默认:9001): " minio_console_port 53 | [[ -z "${minio_console_port}" ]] && minio_console_port=9001 54 | read -r -p "请输入Minio的控制台用户名(默认:admin): " minio_root_user 55 | [[ -z "${minio_root_user}" ]] && minio_root_user="admin" 56 | while read -r -p "请输入Minio的控制台密码: " minio_root_password; do 57 | if [[ -z "${minio_root_password}" ]]; then 58 | echo_content red "密码不能为空" 59 | elif [[ ${#minio_root_password} -lt 8 ]]; then 60 | echo_content red "密码长度不能小于8位" 61 | else 62 | break 63 | fi 64 | done 65 | 66 | docker pull minio/minio && 67 | docker run -d --name ${minio_ip} --restart=always \ 68 | --network=host \ 69 | -e "MINIO_ROOT_USER=${minio_root_user}" \ 70 | -e "MINIO_ROOT_PASSWORD=${minio_root_password}" \ 71 | -e TZ=Asia/Shanghai \ 72 | -v ${MINIO_DATA_DATA}:/data \ 73 | -v ${MINIO_DATA_CONFIG}:/root/.minio \ 74 | minio/minio \ 75 | server /data --address ":${minio_server_port}" --console-address ":${minio_console_port}" 76 | 77 | if [[ -n $(docker ps -q -f "name=^${minio_ip}$" -f "status=running") ]]; then 78 | echo_content skyBlue "---> Minio安装完成" 79 | echo_content yellow "---> Minio的用户号名(请妥善保存): ${minio_root_user}" 80 | echo_content yellow "---> Minio的密码(请妥善保存): ${minio_root_password}" 81 | else 82 | echo_content red "---> Minio安装失败或运行异常,请尝试修复或卸载重装" 83 | exit 1 84 | fi 85 | else 86 | echo_content skyBlue "---> 你已经安装了Minio" 87 | fi 88 | } 89 | 90 | main() { 91 | cd "$HOME" || exit 1 92 | 93 | init_var 94 | 95 | create_dirs 96 | 97 | install_docker 98 | 99 | install_minio 100 | } 101 | 102 | main "$@" 103 | -------------------------------------------------------------------------------- /docker/mysql.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # MySQL Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e 7 | 8 | init_var() { 9 | ECHO_TYPE="echo -e" 10 | 11 | MySQL_DATA="/dockerdata/mysql/" 12 | MySQL_DATA_MYSQL="${MySQL_DATA}/mysql/" 13 | mysql_ip="jy-mysql" 14 | mysql_port=9507 15 | mysql_user="root" 16 | mysql_pas="" 17 | } 18 | 19 | echo_content() { 20 | local color_code 21 | case $1 in 22 | "red") color_code="\033[31m" ;; 23 | "green") color_code="\033[32m" ;; 24 | "yellow") color_code="\033[33m" ;; 25 | "blue") color_code="\033[34m" ;; 26 | "purple") color_code="\033[35m" ;; 27 | "skyBlue") color_code="\033[36m" ;; 28 | "white") color_code="\033[37m" ;; 29 | *) color_code="\033[0m" ;; 30 | esac 31 | ${ECHO_TYPE} "${color_code}$2\033[0m" 32 | } 33 | 34 | create_dirs() { 35 | mkdir -p ${MySQL_DATA} 36 | mkdir -p ${MySQL_DATA_MYSQL} 37 | } 38 | 39 | install_docker() { 40 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/docker/install.sh) 41 | } 42 | 43 | install_mysql() { 44 | if [[ -z $(docker ps -q -f "name=^${mysql_ip}$") ]]; then 45 | echo_content skyBlue "---> 安装 MySQL" 46 | 47 | read -r -p "请输入数据库的端口(默认:9507): " mysql_port 48 | [[ -z "${mysql_port}" ]] && mysql_port=9507 49 | read -r -p "请输入数据库的用户名(默认:root): " mysql_user 50 | [[ -z "${mysql_user}" ]] && mysql_user="root" 51 | while read -r -p "请输入数据库的密码(必填): " mysql_pas; do 52 | if [[ -z "${mysql_pas}" ]]; then 53 | echo_content red "密码不能为空" 54 | else 55 | break 56 | fi 57 | done 58 | 59 | if [[ "${mysql_user}" == "root" ]]; then 60 | docker pull mysql:5.7.42 && 61 | docker run -d --name ${mysql_ip} --restart always \ 62 | --network=host \ 63 | -e MYSQL_ROOT_PASSWORD="${mysql_pas}" \ 64 | -e TZ=Asia/Shanghai \ 65 | -v ${MySQL_DATA_MYSQL}:/var/lib/mysql \ 66 | mysql:5.7.42 \ 67 | --port ${mysql_port} \ 68 | --character-set-server=utf8mb4 \ 69 | --collation-server=utf8mb4_unicode_ci 70 | else 71 | docker pull mysql:5.7.42 && 72 | docker run -d --name ${mysql_ip} --restart always \ 73 | --network=host \ 74 | -e MYSQL_ROOT_PASSWORD="${mysql_pas}" \ 75 | -e MYSQL_USER="${mysql_user}" \ 76 | -e MYSQL_PASSWORD="${mysql_pas}" \ 77 | -e TZ=Asia/Shanghai \ 78 | -v ${MySQL_DATA_MYSQL}:/var/lib/mysql \ 79 | mysql:5.7.42 \ 80 | --port ${mysql_port} \ 81 | --character-set-server=utf8mb4 \ 82 | --collation-server=utf8mb4_unicode_ci 83 | fi 84 | 85 | if [[ -n $(docker ps -q -f "name=^${mysql_ip}$" -f "status=running") ]]; then 86 | echo_content skyBlue "---> MySQL 安装完成" 87 | echo_content yellow "---> MySQL root 的数据库密码(请妥善保存): ${mysql_pas}" 88 | if [[ "${mysql_user}" != "root" ]]; then 89 | echo_content yellow "---> MySQL ${mysql_user}的数据库密码(请妥善保存): ${mysql_pas}" 90 | fi 91 | else 92 | echo_content red "---> MySQL 安装失败或运行异常,请尝试修复或卸载重装" 93 | exit 1 94 | fi 95 | else 96 | echo_content skyBlue "---> 你已经安装了 MySQL" 97 | fi 98 | } 99 | 100 | main() { 101 | cd "$HOME" || exit 1 102 | 103 | init_var 104 | 105 | create_dirs 106 | 107 | install_docker 108 | 109 | install_mysql 110 | } 111 | 112 | main "$@" 113 | -------------------------------------------------------------------------------- /docker/es.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Elasticsearch Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e 7 | 8 | # 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/docker.html#docker 9 | # 设置密码:进入容器执行 `elasticsearch-setup-passwords interactive` 10 | 11 | init_var() { 12 | ECHO_TYPE="echo -e" 13 | 14 | ES_DATA="/dockerdata/es/" 15 | ES_DATA_CONFIG="${ES_DATA}config/" 16 | ES_DATA_LOGS="${ES_DATA}logs/" 17 | ES_DATA_DATA="${ES_DATA}data/" 18 | ES_DATA_PLUGINS="${ES_DATA}plugins/" 19 | es_ip="jy-es" 20 | es_http_port=9200 21 | es_transport_port=9300 22 | es_node_name='node-1' 23 | } 24 | 25 | echo_content() { 26 | local color_code 27 | case $1 in 28 | "red") color_code="\033[31m" ;; 29 | "green") color_code="\033[32m" ;; 30 | "yellow") color_code="\033[33m" ;; 31 | "blue") color_code="\033[34m" ;; 32 | "purple") color_code="\033[35m" ;; 33 | "skyBlue") color_code="\033[36m" ;; 34 | "white") color_code="\033[37m" ;; 35 | *) color_code="\033[0m" ;; 36 | esac 37 | ${ECHO_TYPE} "${color_code}$2\033[0m" 38 | } 39 | 40 | create_dirs() { 41 | mkdir -p ${ES_DATA} 42 | mkdir -p ${ES_DATA_CONFIG} ${ES_DATA_LOGS} ${ES_DATA_DATA} ${ES_DATA_PLUGINS} 43 | chmod -R g+rwx ${ES_DATA} 44 | } 45 | 46 | install_docker() { 47 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/docker/install.sh) 48 | } 49 | 50 | install_es() { 51 | if [[ -z $(docker ps -q -f "name=^${es_ip}$") ]]; then 52 | echo_content skyBlue "---> 安装 Elasticsearch" 53 | 54 | read -r -p "请输入ES的HTTP端口(默认:9200): " es_http_port 55 | [[ -z "${es_http_port}" ]] && es_http_port=9200 56 | read -r -p "请输入ES的传输端口(默认:9300): " es_transport_port 57 | [[ -z "${es_transport_port}" ]] && es_transport_port=9300 58 | read -r -p "请输入ES的节点名称(默认:node-1): " es_node_name 59 | [[ -z "${es_node_name}" ]] && es_node_name='node-1' 60 | 61 | cat >${ES_DATA}config/elasticsearch.yml < Elasticsearch安装完成" 87 | echo_content yellow "---> 设置密码请进入容器执行: elasticsearch-setup-passwords interactive" 88 | else 89 | echo_content red "---> Elasticsearch安装失败或运行异常,请尝试修复或卸载重装" 90 | exit 1 91 | fi 92 | else 93 | echo_content skyBlue "---> 你已经安装了Elasticsearch" 94 | fi 95 | } 96 | 97 | main() { 98 | cd "$HOME" || exit 1 99 | 100 | init_var 101 | 102 | create_dirs 103 | 104 | install_docker 105 | 106 | install_es 107 | } 108 | 109 | main "$@" -------------------------------------------------------------------------------- /docker/uninstall.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Docker Uninstallation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e 7 | 8 | init_var() { 9 | ECHO_TYPE="echo -e" 10 | 11 | package_manager="" 12 | release="" 13 | version="" 14 | get_arch="" 15 | } 16 | 17 | echo_content() { 18 | local color_code 19 | case $1 in 20 | "red") color_code="\033[31m" ;; 21 | "green") color_code="\033[32m" ;; 22 | "yellow") color_code="\033[33m" ;; 23 | "blue") color_code="\033[34m" ;; 24 | "purple") color_code="\033[35m" ;; 25 | "skyBlue") color_code="\033[36m" ;; 26 | "white") color_code="\033[37m" ;; 27 | *) color_code="\033[0m" ;; 28 | esac 29 | ${ECHO_TYPE} "${color_code}$2\033[0m" 30 | } 31 | 32 | # 检查系统 33 | check_sys() { 34 | if [[ $(id -u) != "0" ]]; then 35 | echo_content red "You must be root to run this script" 36 | exit 1 37 | fi 38 | 39 | if [[ $(command -v yum) ]]; then 40 | package_manager='yum' 41 | elif [[ $(command -v dnf) ]]; then 42 | package_manager='dnf' 43 | elif [[ $(command -v apt-get) ]]; then 44 | package_manager='apt-get' 45 | elif [[ $(command -v apt) ]]; then 46 | package_manager='apt' 47 | fi 48 | 49 | if [[ -z "${package_manager}" ]]; then 50 | echo_content red "This system is not currently supported" 51 | exit 1 52 | fi 53 | 54 | if [[ -n $(find /etc -name "redhat-release") ]] || grep /dev/null; then 57 | version=$(rpm -q --queryformat '%{VERSION}' centos-stream-release) 58 | elif rpm -q centos-release &>/dev/null; then 59 | version=$(rpm -q --queryformat '%{VERSION}' centos-release) 60 | fi 61 | elif grep 请先安装 Docker" 126 | fi 127 | } 128 | 129 | main() { 130 | cd "$HOME" || exit 1 131 | 132 | init_var 133 | 134 | check_sys 135 | 136 | uninstall_docker 137 | } 138 | 139 | main "$@" 140 | -------------------------------------------------------------------------------- /docker/skywalking-oap.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # SkyWalking Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e 7 | 8 | init_var() { 9 | ECHO_TYPE="echo -e" 10 | 11 | can_google=0 12 | 13 | SW_DATA="/dockerdata/skywalking/" 14 | SW_DATA_OAP_LIBS="${SW_DATA}oap-libs/" 15 | sw_oap_ip="jy-skywalking-oap" 16 | sw_oap_http=12800 17 | sw_oap_grpc=11800 18 | 19 | es_url="http://127.0.0.1:9200" 20 | es_username="elastic" 21 | es_password="elastic" 22 | 23 | mysql_jdbc_url="jdbc:mysql://127.0.0.1:9507/skywalking" 24 | mysql_user="root" 25 | mysql_pass="123456" 26 | 27 | mysql_connector_java_url_aliyun="https://mirrors.aliyun.com/mysql/Connector-J/mysql-connector-java-8.0.28.tar.gz" 28 | mysql_connector_java_url="https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar" 29 | } 30 | 31 | echo_content() { 32 | local color_code 33 | case $1 in 34 | "red") color_code="\033[31m" ;; 35 | "green") color_code="\033[32m" ;; 36 | "yellow") color_code="\033[33m" ;; 37 | "blue") color_code="\033[34m" ;; 38 | "purple") color_code="\033[35m" ;; 39 | "skyBlue") color_code="\033[36m" ;; 40 | "white") color_code="\033[37m" ;; 41 | *) color_code="\033[0m" ;; 42 | esac 43 | ${ECHO_TYPE} "${color_code}$2\033[0m" 44 | } 45 | 46 | can_connect() { 47 | if ping -c2 -i0.3 -W1 "$1" &>/dev/null; then 48 | return 0 49 | else 50 | return 1 51 | fi 52 | } 53 | 54 | create_dirs() { 55 | mkdir -p ${SW_DATA} 56 | mkdir -p ${SW_DATA_OAP_LIBS} 57 | } 58 | 59 | install_docker() { 60 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/docker/install.sh) 61 | } 62 | 63 | install_skywalking() { 64 | if [[ -z $(docker ps -q -f "name=^${sw_oap_ip}$") ]]; then 65 | echo_content skyBlue "---> 安装 SkyWalking OAP" 66 | 67 | echo_content yellow "---> 设置 SkyWalking OAP 存储方式" 68 | echo_content yellow "1. Elasticsearch7" 69 | echo_content yellow "2. MySQL" 70 | read -r -p "请选择(默认:1): " sw_storage 71 | [[ -z "${sw_storage}" ]] && sw_storage=1 72 | 73 | if [[ "${sw_storage}" == "1" ]]; then 74 | read -r -p "请输入Elasticsearch的URL(默认:http://127.0.0.1:9200): " es_url 75 | [[ -z "${es_url}" ]] && es_url="http://127.0.0.1:9200" 76 | read -r -p "请输入Elasticsearch的用户名(默认:elastic): " es_username 77 | [[ -z "${es_username}" ]] && es_username="elastic" 78 | read -r -p "请输入Elasticsearch的密码(默认:elastic): " es_password 79 | [[ -z "${es_password}" ]] && es_password="elastic" 80 | 81 | docker pull apache/skywalking-oap-server:9.5.0 && 82 | docker run -d --name ${sw_oap_ip} --restart always \ 83 | --network=host \ 84 | -e TZ=Asia/Shanghai \ 85 | -e SW_CORE_REST_PORT=${sw_oap_http} \ 86 | -e SW_CORE_GRPC_PORT=${sw_oap_grpc} \ 87 | -e SW_STORAGE=elasticsearch \ 88 | -e SW_STORAGE_ES_CLUSTER_NODES="${es_url}" \ 89 | -e SW_ES_USER="${es_username}" \ 90 | -e SW_ES_PASSWORD="${es_password}" \ 91 | apache/skywalking-oap-server:9.5.0 92 | elif [[ "${sw_storage}" == "2" ]]; then 93 | read -r -p "请输入MySQL的JDBC URL(默认:jdbc:mysql://127.0.0.1:9507/skywalking): " mysql_jdbc_url 94 | [[ -z "${mysql_jdbc_url}" ]] && mysql_jdbc_url="jdbc:mysql://127.0.0.1:9507/skywalking" 95 | read -r -p "请输入数据库的用户名(默认:root): " mysql_user 96 | [[ -z "${mysql_user}" ]] && mysql_user="root" 97 | while read -r -p "请输入数据库的密码(必填): " mysql_pass; do 98 | if [[ -z "${mysql_pass}" ]]; then 99 | echo_content red "密码不能为空" 100 | else 101 | break 102 | fi 103 | done 104 | 105 | # 下载MySQL驱动 106 | can_connect www.google.com && can_google=1 107 | 108 | if [[ ${can_google} == 0 ]]; then 109 | wget -c ${mysql_connector_java_url_aliyun} -O ${SW_DATA_OAP_LIBS}mysql-connector-java-8.0.28.tar.gz && 110 | tar -zxvf ${SW_DATA_OAP_LIBS}mysql-connector-java-8.0.28.tar.gz -C ${SW_DATA_OAP_LIBS} && 111 | cp ${SW_DATA_OAP_LIBS}mysql-connector-java-8.0.28/mysql-connector-java-8.0.28.jar ${SW_DATA_OAP_LIBS} 112 | else 113 | wget -c ${mysql_connector_java_url} -O ${SW_DATA_OAP_LIBS}mysql-connector-java-8.0.28.jar 114 | fi 115 | docker pull apache/skywalking-oap-server:9.5.0 && 116 | docker run -d --name ${sw_oap_ip} --restart always \ 117 | --network=host \ 118 | -e TZ=Asia/Shanghai \ 119 | -e SW_CORE_REST_PORT=${sw_oap_http} \ 120 | -e SW_CORE_GRPC_PORT=${sw_oap_grpc} \ 121 | -e SW_STORAGE=mysql \ 122 | -e SW_JDBC_URL="${mysql_jdbc_url}" \ 123 | -e SW_DATA_SOURCE_USER="${mysql_user}" \ 124 | -e SW_DATA_SOURCE_PASSWORD="${mysql_pass}" \ 125 | -v ${SW_DATA_OAP_LIBS}mysql-connector-java-8.0.28.jar:/skywalking/oap-libs/mysql-connector-java-8.0.28.jar \ 126 | apache/skywalking-oap-server:9.5.0 127 | fi 128 | 129 | if [[ -n $(docker ps -q -f "name=^${sw_oap_ip}$" -f "status=running") ]]; then 130 | echo_content skyBlue "---> SkyWalking OAP安装完成" 131 | else 132 | echo_content red "---> SkyWalking OAP安装失败或运行异常,请尝试修复或卸载重装" 133 | exit 1 134 | fi 135 | else 136 | echo_content skyBlue "---> 你已经安装了SkyWalking OAP" 137 | fi 138 | } 139 | 140 | main() { 141 | cd "$HOME" || exit 1 142 | 143 | init_var 144 | 145 | create_dirs 146 | 147 | install_docker 148 | 149 | install_skywalking 150 | } 151 | 152 | main "$@" 153 | -------------------------------------------------------------------------------- /docker/ssr.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # SSR Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e 7 | 8 | init_var() { 9 | ECHO_TYPE="echo -e" 10 | 11 | # ShadowsocksR 12 | SSR_DATA="/dockerdata/ssr/" 13 | ssr_ip="jy-ssr" 14 | ssr_port=80 15 | ssr_password="123456" 16 | ssr_method="" 17 | ssr_protocols="" 18 | ssr_obfs="" 19 | methods=( 20 | none 21 | aes-256-cfb 22 | aes-192-cfb 23 | aes-128-cfb 24 | aes-256-cfb8 25 | aes-192-cfb8 26 | aes-128-cfb8 27 | aes-256-ctr 28 | aes-192-ctr 29 | aes-128-ctr 30 | chacha20-ietf 31 | chacha20 32 | salsa20 33 | xchacha20 34 | xsalsa20 35 | rc4-md5 36 | ) 37 | # https://github.com/shadowsocksr-rm/shadowsocks-rss/blob/master/ssr.md 38 | protocols=( 39 | origin 40 | verify_deflate 41 | auth_sha1_v4 42 | auth_sha1_v4_compatible 43 | auth_aes128_md5 44 | auth_aes128_sha1 45 | auth_chain_a 46 | auth_chain_b 47 | auth_chain_c 48 | auth_chain_d 49 | auth_chain_e 50 | auth_chain_f 51 | ) 52 | obfs=( 53 | plain 54 | http_simple 55 | http_simple_compatible 56 | http_post 57 | http_post_compatible 58 | tls1.2_ticket_auth 59 | tls1.2_ticket_auth_compatible 60 | tls1.2_ticket_fastauth 61 | tls1.2_ticket_fastauth_compatible 62 | ) 63 | } 64 | 65 | echo_content() { 66 | local color_code 67 | case $1 in 68 | "red") color_code="\033[31m" ;; 69 | "green") color_code="\033[32m" ;; 70 | "yellow") color_code="\033[33m" ;; 71 | "blue") color_code="\033[34m" ;; 72 | "purple") color_code="\033[35m" ;; 73 | "skyBlue") color_code="\033[36m" ;; 74 | "white") color_code="\033[37m" ;; 75 | *) color_code="\033[0m" ;; 76 | esac 77 | ${ECHO_TYPE} "${color_code}$2\033[0m" 78 | } 79 | 80 | create_dirs() { 81 | mkdir -p ${SSR_DATA} 82 | } 83 | 84 | install_docker() { 85 | bash <(curl -fsSL https://github.com/jonssonyan/install-script/raw/main/docker/install.sh) 86 | } 87 | 88 | install_ssr() { 89 | if [[ -z $(docker ps -q -f "name=^${ssr_ip}$") ]]; then 90 | echo_content skyBlue "---> 安装 ShadowsocksR" 91 | 92 | read -r -p "请输入ShadowsocksR的端口(默认:80): " ssr_port 93 | [[ -z "${ssr_port}" ]] && ssr_port=80 94 | read -r -p "请输入ShadowsocksR的密码(默认:123456): " ssr_password 95 | [[ -z "${ssr_password}" ]] && ssr_password="123456" 96 | 97 | while true; do 98 | for ((i = 1; i <= ${#methods[@]}; i++)); do 99 | hint="${methods[$i - 1]}" 100 | echo "${i}) $(echo_content yellow "${hint}")" 101 | done 102 | read -r -p "请选择ShadowsocksR的加密类型(默认:${methods[0]}): " r_methods 103 | [[ -z "${r_methods}" ]] && r_methods=1 104 | expr ${r_methods} + 1 &>/dev/null 105 | if [[ "$?" != "0" ]]; then 106 | echo_content red "请输入数字" 107 | continue 108 | fi 109 | if [[ "${r_methods}" -lt 1 || "${r_methods}" -gt ${#methods[@]} ]]; then 110 | echo_content red "输入的数字范围在 1 到 ${#methods[@]}" 111 | continue 112 | fi 113 | ssr_method=${methods[r_methods - 1]} 114 | break 115 | done 116 | 117 | while true; do 118 | for ((i = 1; i <= ${#protocols[@]}; i++)); do 119 | hint="${protocols[$i - 1]}" 120 | echo "${i}) $(echo_content yellow "${hint}")" 121 | done 122 | read -r -p "请选择ShadowsocksR的协议(默认:${protocols[0]}): " r_protocols 123 | [[ -z "${r_protocols}" ]] && r_protocols=1 124 | expr ${r_protocols} + 1 &>/dev/null 125 | if [[ "$?" != "0" ]]; then 126 | echo_content red "请输入数字" 127 | continue 128 | fi 129 | if [[ "${r_protocols}" -lt 1 || "${r_protocols}" -gt ${#protocols[@]} ]]; then 130 | echo_content red "输入的数字范围在 1 到 ${#protocols[@]}" 131 | continue 132 | fi 133 | ssr_protocols=${protocols[r_protocols - 1]} 134 | break 135 | done 136 | 137 | while true; do 138 | for ((i = 1; i <= ${#obfs[@]}; i++)); do 139 | hint="${obfs[$i - 1]}" 140 | echo "${i}) $(echo_content yellow "${hint}")" 141 | done 142 | read -r -p "请选择ShadowsocksR的混淆方式(默认:${obfs[0]}): " r_obfs 143 | [[ -z "${r_obfs}" ]] && r_obfs=1 144 | expr ${r_obfs} + 1 &>/dev/null 145 | if [[ "$?" != "0" ]]; then 146 | echo_content red "请输入数字" 147 | continue 148 | fi 149 | if [[ "${r_obfs}" -lt 1 || "${r_obfs}" -gt ${#obfs[@]} ]]; then 150 | echo_content red "输入的数字范围在 1 到 ${#obfs[@]}" 151 | continue 152 | fi 153 | ssr_obfs=${obfs[r_obfs - 1]} 154 | break 155 | done 156 | 157 | cat >${SSR_DATA}config.json < ShadowsocksR安装完成" 187 | echo_content yellow "---> 端口: ${ssr_port}" 188 | echo_content yellow "---> 密码(请妥善保存): ${ssr_password}" 189 | echo_content yellow "---> 加密类型: ${ssr_method}" 190 | echo_content yellow "---> 协议: ${ssr_protocols}" 191 | echo_content yellow "---> 混淆方式: ${ssr_obfs}" 192 | else 193 | echo_content red "---> ShadowsocksR安装失败或运行异常,请尝试修复或卸载重装" 194 | exit 1 195 | fi 196 | else 197 | echo_content skyBlue "---> 你已经安装了ShadowsocksR" 198 | fi 199 | } 200 | 201 | main() { 202 | cd "$HOME" || exit 1 203 | 204 | init_var 205 | 206 | create_dirs 207 | 208 | install_docker 209 | 210 | install_ssr 211 | } 212 | 213 | main "$@" 214 | -------------------------------------------------------------------------------- /docker/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Docker Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e # Exit immediately if a command exits with a non-zero status 7 | 8 | # Initialize variables 9 | init_var() { 10 | ECHO_TYPE="echo -e" 11 | 12 | # System variables 13 | package_manager="" 14 | release="" 15 | version="" 16 | arch="" 17 | can_access_internet=1 # Default to true, will check google.com accessibility 18 | 19 | # Docker directories and files 20 | DOCKER_DATA="/dockerdata" 21 | 22 | # Docker configuration 23 | docker_mirror='"https://docker.m.daocloud.io"' 24 | DOCKER_CONFIG="/etc/docker" 25 | } 26 | 27 | # Colorized output functions 28 | echo_content() { 29 | local color_code 30 | case $1 in 31 | "red") color_code="\033[31m" ;; 32 | "green") color_code="\033[32m" ;; 33 | "yellow") color_code="\033[33m" ;; 34 | "blue") color_code="\033[34m" ;; 35 | "purple") color_code="\033[35m" ;; 36 | "skyBlue") color_code="\033[36m" ;; 37 | "white") color_code="\033[37m" ;; 38 | *) color_code="\033[0m" ;; 39 | esac 40 | ${ECHO_TYPE} "${color_code}$2\033[0m" 41 | } 42 | 43 | # Create necessary directories 44 | create_dirs() { 45 | mkdir -p ${DOCKER_DATA} 46 | } 47 | 48 | # Check if can connect to a host 49 | can_connect() { 50 | ping -c2 -i0.3 -W1 "$1" &>/dev/null 51 | return $? 52 | } 53 | 54 | # Check if service exists 55 | service_exists() { 56 | systemctl list-units --type=service --all | grep -Fq "$1.service" 57 | } 58 | 59 | # Check system compatibility and gather information 60 | check_system() { 61 | if [[ $(id -u) != "0" ]]; then 62 | echo_content red "You must be root to run this script" 63 | exit 1 64 | fi 65 | 66 | # Check internet connectivity 67 | if ! can_connect www.google.com; then 68 | can_access_internet=0 69 | echo_content yellow "Limited internet connectivity detected. Using Chinese mirrors." 70 | fi 71 | 72 | # Determine package manager 73 | if command -v yum &>/dev/null; then 74 | package_manager='yum' 75 | elif command -v dnf &>/dev/null; then 76 | package_manager='dnf' 77 | elif command -v apt-get &>/dev/null; then 78 | package_manager='apt-get' 79 | elif command -v apt &>/dev/null; then 80 | package_manager='apt' 81 | else 82 | echo_content red "Unsupported system. No compatible package manager found." 83 | exit 1 84 | fi 85 | 86 | # Determine OS distribution and version 87 | if [[ -n $(find /etc -name "redhat-release") ]] || grep /dev/null; then 90 | version=$(rpm -q --queryformat '%{VERSION}' centos-stream-release) 91 | elif rpm -q centos-release &>/dev/null; then 92 | version=$(rpm -q --queryformat '%{VERSION}' centos-release) 93 | fi 94 | elif grep Installing dependencies" 145 | 146 | if [[ "${package_manager}" == 'apt-get' || "${package_manager}" == 'apt' ]]; then 147 | ${package_manager} update -y 148 | fi 149 | 150 | ${package_manager} install -y \ 151 | curl \ 152 | wget \ 153 | systemd \ 154 | lrzsz \ 155 | bash-completion 156 | 157 | echo_content skyBlue "---> Dependencies installed" 158 | } 159 | 160 | # Prepare environment 161 | prepare_environment() { 162 | echo_content skyBlue "---> Preparing environment" 163 | 164 | # Sync time 165 | timedatectl set-timezone Asia/Shanghai && timedatectl set-local-rtc 0 166 | echo_content skyBlue "---> Timezone set to Asia/Shanghai" 167 | 168 | # Restart required services 169 | if service_exists "rsyslog"; then 170 | systemctl restart rsyslog 171 | fi 172 | 173 | case "${release}" in 174 | centos) 175 | if service_exists "crond"; then 176 | systemctl restart crond 177 | fi 178 | ;; 179 | debian | ubuntu) 180 | if service_exists "cron"; then 181 | systemctl restart cron 182 | fi 183 | ;; 184 | esac 185 | 186 | # Disable SELinux if enabled 187 | if [ -s /etc/selinux/config ] && grep 'SELINUX=enforcing' /etc/selinux/config; then 188 | setenforce 0 && sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config 189 | echo_content skyBlue "---> SELinux disabled" 190 | fi 191 | 192 | echo_content skyBlue "---> Environment preparation complete" 193 | } 194 | 195 | # Configure Docker daemon 196 | setup_docker() { 197 | echo_content skyBlue "---> Configuring Docker daemon" 198 | 199 | mkdir -p ${DOCKER_CONFIG} 200 | 201 | if [[ ${can_access_internet} == 0 ]]; then 202 | cat >${DOCKER_CONFIG}/daemon.json <${DOCKER_CONFIG}/daemon.json < Docker daemon configured" 224 | } 225 | 226 | # Install Docker 227 | install_docker() { 228 | if command -v docker &>/dev/null; then 229 | echo_content skyBlue "---> Docker is already installed" 230 | return 231 | fi 232 | 233 | echo_content skyBlue "---> Installing Docker" 234 | 235 | if [[ "${release}" == "centos" ]]; then 236 | if [[ "${package_manager}" == "dnf" ]]; then 237 | ${package_manager} install -y dnf-plugins-core 238 | else 239 | ${package_manager} install -y yum-utils 240 | fi 241 | if [[ ${can_access_internet} == 0 ]]; then 242 | ${package_manager} config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 243 | else 244 | ${package_manager} config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 245 | fi 246 | ${package_manager} makecache || ${package_manager} makecache fast 247 | elif [[ "${release}" == "debian" || "${release}" == "ubuntu" ]]; then 248 | ${package_manager} update -y 249 | ${package_manager} install -y \ 250 | ca-certificates \ 251 | curl \ 252 | gnupg \ 253 | lsb-release 254 | 255 | sudo install -m 0755 -d /etc/apt/keyrings 256 | if [[ ${can_access_internet} == 0 ]]; then 257 | sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/${release}/gpg -o /etc/apt/keyrings/docker.asc 258 | sudo chmod a+r /etc/apt/keyrings/docker.asc 259 | echo \ 260 | "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.aliyun.com/docker-ce/linux/${release} \ 261 | $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | 262 | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null 263 | else 264 | sudo curl -fsSL https://download.docker.com/linux/${release}/gpg -o /etc/apt/keyrings/docker.asc 265 | sudo chmod a+r /etc/apt/keyrings/docker.asc 266 | echo \ 267 | "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/${release} \ 268 | $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | 269 | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null 270 | fi 271 | ${package_manager} update -y 272 | fi 273 | 274 | ${package_manager} install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin 275 | 276 | setup_docker 277 | 278 | systemctl enable docker && systemctl restart docker 279 | 280 | if command -v docker &>/dev/null; then 281 | echo_content skyBlue "---> Docker installation complete" 282 | else 283 | echo_content red "---> Docker installation failed" 284 | exit 1 285 | fi 286 | } 287 | 288 | # Main execution function 289 | main() { 290 | cd "$HOME" || exit 1 291 | 292 | # Initialize variables 293 | init_var 294 | 295 | # Create necessary directories 296 | create_dirs 297 | 298 | # Check system compatibility 299 | check_system 300 | 301 | # Install basic dependencies 302 | install_dependencies 303 | 304 | # Default behavior: prepare environment and install Docker 305 | prepare_environment 306 | 307 | install_docker 308 | } 309 | 310 | # Execute main function with all arguments 311 | main "$@" 312 | -------------------------------------------------------------------------------- /docker-install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Docker Services Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e # Exit immediately if a command exits with a non-zero status 7 | 8 | # Initialize variables 9 | init_var() { 10 | ECHO_TYPE="echo -e" 11 | SCRIPT_VERSION="1.2.0" 12 | 13 | # System variables 14 | package_manager="" 15 | release="" 16 | version="" 17 | arch="" 18 | 19 | # Docker directories and files 20 | DOCKER_DATA="/dockerdata" 21 | 22 | # Remote script base URL 23 | REMOTE_SCRIPT_BASE="https://github.com/jonssonyan/install-script/raw/main/docker" 24 | } 25 | 26 | # Colorized output functions 27 | echo_content() { 28 | local color_code 29 | case $1 in 30 | "red") color_code="\033[31m" ;; 31 | "green") color_code="\033[32m" ;; 32 | "yellow") color_code="\033[33m" ;; 33 | "blue") color_code="\033[34m" ;; 34 | "purple") color_code="\033[35m" ;; 35 | "skyBlue") color_code="\033[36m" ;; 36 | "white") color_code="\033[37m" ;; 37 | *) color_code="\033[0m" ;; 38 | esac 39 | ${ECHO_TYPE} "${color_code}$2\033[0m" 40 | } 41 | 42 | # Create necessary directories 43 | create_dirs() { 44 | mkdir -p ${DOCKER_DATA} 45 | } 46 | 47 | # Check if service exists 48 | service_exists() { 49 | systemctl list-units --type=service --all | grep -Fq "$1.service" 50 | } 51 | 52 | # Check system compatibility and gather information 53 | check_system() { 54 | if [[ $(id -u) != "0" ]]; then 55 | echo_content red "You must be root to run this script" 56 | exit 1 57 | fi 58 | 59 | # Determine package manager 60 | if command -v yum &>/dev/null; then 61 | package_manager='yum' 62 | elif command -v dnf &>/dev/null; then 63 | package_manager='dnf' 64 | elif command -v apt-get &>/dev/null; then 65 | package_manager='apt-get' 66 | elif command -v apt &>/dev/null; then 67 | package_manager='apt' 68 | else 69 | echo_content red "Unsupported system. No compatible package manager found." 70 | exit 1 71 | fi 72 | 73 | # Determine OS distribution and version 74 | if [[ -n $(find /etc -name "redhat-release") ]] || grep /dev/null; then 77 | version=$(rpm -q --queryformat '%{VERSION}' centos-stream-release) 78 | elif rpm -q centos-release &>/dev/null; then 79 | version=$(rpm -q --queryformat '%{VERSION}' centos-release) 80 | fi 81 | elif grep Installing dependencies" 132 | 133 | if [[ "${package_manager}" == 'apt-get' || "${package_manager}" == 'apt' ]]; then 134 | ${package_manager} update -y 135 | fi 136 | 137 | ${package_manager} install -y \ 138 | curl \ 139 | wget \ 140 | systemd \ 141 | lrzsz \ 142 | bash-completion 143 | 144 | echo_content skyBlue "---> Dependencies installed" 145 | } 146 | 147 | # Prepare environment 148 | prepare_environment() { 149 | echo_content skyBlue "---> Preparing environment" 150 | 151 | # Sync time 152 | timedatectl set-timezone Asia/Shanghai && timedatectl set-local-rtc 0 153 | echo_content skyBlue "---> Timezone set to Asia/Shanghai" 154 | 155 | # Restart required services 156 | if service_exists "rsyslog"; then 157 | systemctl restart rsyslog 158 | fi 159 | 160 | case "${release}" in 161 | centos) 162 | if service_exists "crond"; then 163 | systemctl restart crond 164 | fi 165 | ;; 166 | debian | ubuntu) 167 | if service_exists "cron"; then 168 | systemctl restart cron 169 | fi 170 | ;; 171 | esac 172 | 173 | # Disable SELinux 174 | if [ -s /etc/selinux/config ] && grep 'SELINUX=enforcing' /etc/selinux/config; then 175 | setenforce 0 && sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config 176 | echo_content skyBlue "---> SELinux disabled" 177 | fi 178 | 179 | echo_content skyBlue "---> Environment preparation complete" 180 | } 181 | 182 | # Install Docker service with remote script 183 | install_docker_service() { 184 | local service_name=$1 185 | local script_name=$2 186 | local require_docker=$3 187 | 188 | echo_content skyBlue "---> Installing ${service_name}" 189 | 190 | # Check if Docker is required and not installed 191 | if [[ "${require_docker}" == "true" ]] && ! command -v docker &>/dev/null; then 192 | echo_content yellow "---> Docker not found, installing Docker first..." 193 | bash <(curl -fsSL ${REMOTE_SCRIPT_BASE}/install.sh) 194 | fi 195 | 196 | # Run the remote installation script 197 | bash <(curl -fsSL ${REMOTE_SCRIPT_BASE}/${script_name}) 198 | 199 | echo_content skyBlue "---> ${service_name} installation complete" 200 | } 201 | 202 | # Show installation help 203 | show_help() { 204 | echo_content green "Docker Services Installation Script v${SCRIPT_VERSION}" 205 | echo_content green "Usage: $0 [option]" 206 | echo_content green "Options:" 207 | echo_content yellow " docker Install Docker Engine" 208 | echo_content yellow " buildx Install Docker Buildx" 209 | echo_content yellow " uninstall Uninstall Docker" 210 | echo_content yellow " mysql Install MySQL 5.7.38" 211 | echo_content yellow " postgresql Install PostgreSQL 13" 212 | echo_content yellow " redis Install Redis 6.2.13" 213 | echo_content yellow " elasticsearch Install Elasticsearch 7.17.10" 214 | echo_content yellow " kibana Install Kibana 7.17.10" 215 | echo_content yellow " minio Install Minio" 216 | echo_content yellow " nacos Install Nacos v2.1.2" 217 | echo_content yellow " ssr Install ShadowsocksR" 218 | echo_content yellow " nexus3 Install Nexus3" 219 | echo_content yellow " gitlab Install GitLab" 220 | echo_content yellow " skywalking-oap Install SkyWalking OAP" 221 | echo_content yellow " skywalking-ui Install SkyWalking UI" 222 | echo_content yellow " rustdesk-server Install RustDesk Server" 223 | echo_content yellow " help Show this help message" 224 | echo_content yellow "If no option is provided, the interactive menu will be displayed." 225 | } 226 | 227 | # Main menu for interactive use 228 | show_menu() { 229 | clear 230 | echo_content red "==============================================================" 231 | echo_content skyBlue "Docker Services Installation Script v${SCRIPT_VERSION}" 232 | echo_content skyBlue "Supported OS: CentOS 8+/Ubuntu 20+/Debian 11+" 233 | echo_content skyBlue "Author: jonssonyan " 234 | echo_content skyBlue "Github: https://github.com/jonssonyan/install-script" 235 | echo_content red "==============================================================" 236 | echo_content yellow "1. Install Docker Engine" 237 | echo_content yellow "2. Install Docker Buildx" 238 | echo_content yellow "3. Uninstall Docker" 239 | echo_content green "==============================================================" 240 | echo_content yellow "4. Install MySQL 5.7.38" 241 | echo_content yellow "5. Install PostgreSQL 13" 242 | echo_content yellow "6. Install Redis 6.2.13" 243 | echo_content yellow "7. Install Elasticsearch 7.17.10" 244 | echo_content yellow "8. Install Kibana 7.17.10" 245 | echo_content yellow "9. Install Minio" 246 | echo_content yellow "10. Install Nacos v2.1.2" 247 | echo_content yellow "11. Install ShadowsocksR" 248 | echo_content yellow "12. Install Nexus3" 249 | echo_content yellow "13. Install GitLab" 250 | echo_content yellow "14. Install SkyWalking OAP" 251 | echo_content yellow "15. Install SkyWalking UI" 252 | echo_content yellow "16. Install RustDesk Server" 253 | echo_content red "==============================================================" 254 | echo_content yellow "0. Exit" 255 | echo_content red "==============================================================" 256 | } 257 | 258 | # Process CLI arguments 259 | process_args() { 260 | case "$1" in 261 | docker) 262 | prepare_environment 263 | install_docker_service "Docker Engine" "install.sh" "false" 264 | ;; 265 | buildx) 266 | install_docker_service "Docker Buildx" "buildx.sh" "true" 267 | ;; 268 | uninstall) 269 | install_docker_service "Docker" "uninstall.sh" "true" 270 | ;; 271 | mysql) 272 | install_docker_service "MySQL" "mysql.sh" "true" 273 | ;; 274 | postgresql) 275 | install_docker_service "PostgreSQL" "postgresql.sh" "true" 276 | ;; 277 | redis) 278 | install_docker_service "Redis" "redis.sh" "true" 279 | ;; 280 | elasticsearch) 281 | install_docker_service "Elasticsearch" "es.sh" "true" 282 | ;; 283 | kibana) 284 | install_docker_service "Kibana" "kibana.sh" "true" 285 | ;; 286 | minio) 287 | install_docker_service "Minio" "minio.sh" "true" 288 | ;; 289 | nacos) 290 | install_docker_service "Nacos" "nacos.sh" "true" 291 | ;; 292 | ssr) 293 | install_docker_service "ShadowsocksR" "ssr.sh" "true" 294 | ;; 295 | nexus3) 296 | install_docker_service "Nexus3" "nexus3.sh" "true" 297 | ;; 298 | gitlab) 299 | install_docker_service "GitLab" "gitlab.sh" "true" 300 | ;; 301 | skywalking-oap) 302 | install_docker_service "SkyWalking OAP" "skywalking-oap.sh" "true" 303 | ;; 304 | skywalking-ui) 305 | install_docker_service "SkyWalking UI" "skywalking-ui.sh" "true" 306 | ;; 307 | rustdesk-server) 308 | install_docker_service "RustDesk Server" "rustdesk-server.sh" "true" 309 | ;; 310 | help | --help | -h) 311 | show_help 312 | ;; 313 | *) 314 | return 1 315 | ;; 316 | esac 317 | return 0 318 | } 319 | 320 | # Main execution function 321 | main() { 322 | cd "$HOME" || exit 1 323 | 324 | # Initialize variables 325 | init_var 326 | 327 | # Create necessary directories 328 | create_dirs 329 | 330 | # Check system compatibility 331 | check_system 332 | 333 | # Install basic dependencies 334 | install_dependencies 335 | 336 | # Prepare environment 337 | prepare_environment 338 | 339 | # Process command line arguments if provided 340 | if [[ $# -gt 0 ]]; then 341 | if process_args "$@"; then 342 | exit 0 343 | fi 344 | fi 345 | 346 | # Interactive menu 347 | while true; do 348 | show_menu 349 | read -r -p "Please choose an option: " input_option 350 | case ${input_option} in 351 | 1) 352 | install_docker_service "Docker Engine" "install.sh" "false" 353 | echo_content yellow "Press Enter to continue..." 354 | read -r 355 | ;; 356 | 2) 357 | install_docker_service "Docker Buildx" "buildx.sh" "true" 358 | echo_content yellow "Press Enter to continue..." 359 | read -r 360 | ;; 361 | 3) 362 | install_docker_service "Docker" "uninstall.sh" 363 | echo_content yellow "Press Enter to continue..." 364 | read -r 365 | ;; 366 | 4) 367 | install_docker_service "MySQL" "mysql.sh" "true" 368 | echo_content yellow "Press Enter to continue..." 369 | read -r 370 | ;; 371 | 5) 372 | install_docker_service "PostgreSQL" "postgresql.sh" "true" 373 | echo_content yellow "Press Enter to continue..." 374 | read -r 375 | ;; 376 | 6) 377 | install_docker_service "Redis" "redis.sh" "true" 378 | echo_content yellow "Press Enter to continue..." 379 | read -r 380 | ;; 381 | 7) 382 | install_docker_service "Elasticsearch" "es.sh" "true" 383 | echo_content yellow "Press Enter to continue..." 384 | read -r 385 | ;; 386 | 8) 387 | install_docker_service "Kibana" "kibana.sh" "true" 388 | echo_content yellow "Press Enter to continue..." 389 | read -r 390 | ;; 391 | 9) 392 | install_docker_service "Minio" "minio.sh" "true" 393 | echo_content yellow "Press Enter to continue..." 394 | read -r 395 | ;; 396 | 10) 397 | install_docker_service "Nacos" "nacos.sh" "true" 398 | echo_content yellow "Press Enter to continue..." 399 | read -r 400 | ;; 401 | 11) 402 | install_docker_service "ShadowsocksR" "ssr.sh" "true" 403 | echo_content yellow "Press Enter to continue..." 404 | read -r 405 | ;; 406 | 12) 407 | install_docker_service "Nexus3" "nexus3.sh" "true" 408 | echo_content yellow "Press Enter to continue..." 409 | read -r 410 | ;; 411 | 13) 412 | install_docker_service "GitLab" "gitlab.sh" "true" 413 | echo_content yellow "Press Enter to continue..." 414 | read -r 415 | ;; 416 | 14) 417 | install_docker_service "SkyWalking OAP" "skywalking-oap.sh" "true" 418 | echo_content yellow "Press Enter to continue..." 419 | read -r 420 | ;; 421 | 15) 422 | install_docker_service "SkyWalking UI" "skywalking-ui.sh" "true" 423 | echo_content yellow "Press Enter to continue..." 424 | read -r 425 | ;; 426 | 16) 427 | install_docker_service "RustDesk Server" "rustdesk-server.sh" "true" 428 | echo_content yellow "Press Enter to continue..." 429 | read -r 430 | ;; 431 | 0) 432 | echo_content green "Exiting..." 433 | exit 0 434 | ;; 435 | *) 436 | echo_content red "Invalid option. Please try again." 437 | sleep 2 438 | ;; 439 | esac 440 | done 441 | } 442 | 443 | # Execute main function with all arguments 444 | main "$@" 445 | -------------------------------------------------------------------------------- /k8s-install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Kubernetes Installation Script 3 | # Author: jonssonyan 4 | # Github: https://github.com/jonssonyan/install-script 5 | 6 | set -e # Exit immediately if a command exits with a non-zero status 7 | 8 | # Initialize variables 9 | init_var() { 10 | ECHO_TYPE="echo -e" 11 | SCRIPT_VERSION="1.1.0" 12 | 13 | # System variables 14 | package_manager="" 15 | release="" 16 | version="" 17 | arch="" 18 | can_access_internet=1 # Default to true, will be set to 0 if can't reach google 19 | 20 | # Host settings 21 | host_name="k8s-master" 22 | public_ip="" 23 | 24 | # K8s directories and files 25 | K8S_DATA="/k8sdata" 26 | K8S_LOG="${K8S_DATA}/log" 27 | K8S_NETWORK="${K8S_DATA}/network" 28 | k8s_lock_file="${K8S_DATA}/k8s.lock" 29 | 30 | # K8s configuration 31 | k8s_version="1.29" 32 | k8s_versions="1.24 1.25 1.26 1.27 1.28 1.29 1.30 1.31" 33 | is_master=1 34 | k8s_cri_sock="unix:///var/run/containerd/containerd.sock" 35 | network="flannel" 36 | network_file="${K8S_NETWORK}/kube-flannel.yml" 37 | 38 | # URLs and mirrors 39 | kube_flannel_url="https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml" 40 | calico_url="https://docs.projectcalico.org/manifests/calico.yaml" 41 | k8s_mirror="https://registry.cn-hangzhou.aliyuncs.com/google_containers" 42 | docker_mirror='"https://docker.m.daocloud.io"' 43 | } 44 | 45 | # Colorized output functions 46 | echo_content() { 47 | local color_code 48 | case $1 in 49 | "red") color_code="\033[31m" ;; 50 | "green") color_code="\033[32m" ;; 51 | "yellow") color_code="\033[33m" ;; 52 | "blue") color_code="\033[34m" ;; 53 | "purple") color_code="\033[35m" ;; 54 | "skyBlue") color_code="\033[36m" ;; 55 | "white") color_code="\033[37m" ;; 56 | *) color_code="\033[0m" ;; 57 | esac 58 | ${ECHO_TYPE} "${color_code}$2\033[0m" 59 | } 60 | 61 | # Create necessary directories 62 | create_dirs() { 63 | mkdir -p ${K8S_DATA} ${K8S_LOG} ${K8S_NETWORK} 64 | } 65 | 66 | # Check if can connect to a host 67 | can_connect() { 68 | ping -c2 -i0.3 -W1 "$1" &>/dev/null 69 | return $? 70 | } 71 | 72 | # Get configuration value from lock file 73 | get_config_val() { 74 | grep "^$1=" ${k8s_lock_file} | cut -d= -f2 75 | } 76 | 77 | # Check if service exists 78 | service_exists() { 79 | systemctl list-units --type=service --all | grep -Fq "$1.service" 80 | } 81 | 82 | # Check system compatibility and gather information 83 | check_system() { 84 | if [[ $(id -u) != "0" ]]; then 85 | echo_content red "You must be root to run this script" 86 | exit 1 87 | fi 88 | 89 | # Check internet connectivity 90 | if ! can_connect www.google.com; then 91 | can_access_internet=0 92 | echo_content yellow "Limited internet connectivity detected. Using Chinese mirrors." 93 | fi 94 | 95 | # Determine package manager 96 | if command -v yum &>/dev/null; then 97 | package_manager='yum' 98 | elif command -v dnf &>/dev/null; then 99 | package_manager='dnf' 100 | elif command -v apt-get &>/dev/null; then 101 | package_manager='apt-get' 102 | elif command -v apt &>/dev/null; then 103 | package_manager='apt' 104 | else 105 | echo_content red "Unsupported system. No compatible package manager found." 106 | exit 1 107 | fi 108 | 109 | # Determine OS distribution and version 110 | if [[ -n $(find /etc -name "redhat-release") ]] || grep /dev/null; then 113 | version=$(rpm -q --queryformat '%{VERSION}' centos-stream-release) 114 | elif rpm -q centos-release &>/dev/null; then 115 | version=$(rpm -q --queryformat '%{VERSION}' centos-release) 116 | fi 117 | elif grep >/etc/hosts 168 | hostnamectl set-hostname "$1" 169 | echo_content green "Hostname set to: $1" 170 | } 171 | 172 | # Install dependencies 173 | install_dependencies() { 174 | echo_content green "---> Installing dependencies" 175 | 176 | if [[ "${package_manager}" == 'apt-get' || "${package_manager}" == 'apt' ]]; then 177 | ${package_manager} update -y 178 | fi 179 | 180 | ${package_manager} install -y \ 181 | curl \ 182 | wget \ 183 | systemd \ 184 | lrzsz \ 185 | bash-completion \ 186 | gpg 187 | 188 | echo_content skyBlue "---> Dependencies installed" 189 | } 190 | 191 | # Prepare environment 192 | prepare_environment() { 193 | echo_content green "---> Preparing environment" 194 | 195 | # Sync time 196 | timedatectl set-timezone Asia/Shanghai && timedatectl set-local-rtc 0 197 | echo_content skyBlue "---> Timezone set to Asia/Shanghai" 198 | 199 | # Restart required services 200 | if service_exists "rsyslog"; then 201 | systemctl restart rsyslog 202 | fi 203 | 204 | case "${release}" in 205 | centos) 206 | if service_exists "crond"; then 207 | systemctl restart crond 208 | fi 209 | ;; 210 | debian | ubuntu) 211 | if service_exists "cron"; then 212 | systemctl restart cron 213 | fi 214 | ;; 215 | esac 216 | 217 | # Disable SELinux 218 | if [ -s /etc/selinux/config ] && grep 'SELINUX=enforcing' /etc/selinux/config; then 219 | setenforce 0 && sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config 220 | echo_content skyBlue "---> SELinux disabled" 221 | fi 222 | 223 | # Disable swap 224 | swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab 225 | echo_content skyBlue "---> Swap disabled" 226 | 227 | echo_content skyBlue "---> Environment preparation complete" 228 | } 229 | 230 | # Configure containerd 231 | configure_containerd() { 232 | echo_content green "---> Configuring containerd" 233 | 234 | mkdir -p /etc/containerd 235 | containerd config default >/etc/containerd/config.toml 236 | 237 | # Enable SystemdCgroup 238 | sed -i "s#SystemdCgroup = false#SystemdCgroup = true#g" /etc/containerd/config.toml 239 | 240 | # Configure mirrors if limited internet access 241 | if [[ ${can_access_internet} == 0 ]]; then 242 | k8s_mirror_escape=${k8s_mirror//\//\\\/} 243 | docker_mirror_escape=${docker_mirror//\//\\\/} 244 | 245 | # Replace registry.k8s.io with mirror 246 | sed -i "s#registry.k8s.io#${k8s_mirror_escape}#g" /etc/containerd/config.toml 247 | 248 | # Add Docker.io mirror 249 | sed -i "/\[plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors\]/a\ [plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"docker.io\"]" /etc/containerd/config.toml 250 | sed -i "/\[plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"docker.io\"\]/a\ endpoint = [${docker_mirror_escape}]" /etc/containerd/config.toml 251 | 252 | # Add registry.k8s.io mirror 253 | sed -i "/endpoint = \[${docker_mirror_escape}]/a\ [plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"registry.k8s.io\"]" /etc/containerd/config.toml 254 | sed -i "/\[plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"registry.k8s.io\"\]/a\ endpoint = [\"${k8s_mirror_escape}\"]" /etc/containerd/config.toml 255 | 256 | # Add k8s.gcr.io mirror 257 | sed -i "/endpoint = \[\"${k8s_mirror_escape}\"]/a\ [plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"k8s.gcr.io\"]" /etc/containerd/config.toml 258 | sed -i "/\[plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"k8s.gcr.io\"\]/a\ endpoint = [\"${k8s_mirror_escape}\"]" /etc/containerd/config.toml 259 | fi 260 | 261 | systemctl daemon-reload 262 | echo_content skyBlue "---> containerd configured" 263 | } 264 | 265 | # Install containerd 266 | install_containerd() { 267 | if command -v containerd &>/dev/null; then 268 | echo_content skyBlue "---> containerd is already installed" 269 | return 270 | fi 271 | 272 | echo_content green "---> Installing containerd" 273 | 274 | if [[ "${release}" == "centos" ]]; then 275 | if [[ "${package_manager}" == "dnf" ]]; then 276 | ${package_manager} install -y dnf-plugins-core 277 | else 278 | ${package_manager} install -y yum-utils 279 | fi 280 | if [[ ${can_access_internet} == 0 ]]; then 281 | ${package_manager} config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 282 | else 283 | ${package_manager} config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 284 | fi 285 | ${package_manager} makecache || ${package_manager} makecache fast 286 | elif [[ "${release}" == "debian" || "${release}" == "ubuntu" ]]; then 287 | ${package_manager} update -y 288 | ${package_manager} install -y \ 289 | ca-certificates \ 290 | curl \ 291 | gnupg \ 292 | lsb-release 293 | 294 | sudo install -m 0755 -d /etc/apt/keyrings 295 | if [[ ${can_access_internet} == 0 ]]; then 296 | sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/${release}/gpg -o /etc/apt/keyrings/docker.asc 297 | sudo chmod a+r /etc/apt/keyrings/docker.asc 298 | echo \ 299 | "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.aliyun.com/docker-ce/linux/${release} \ 300 | $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | 301 | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null 302 | else 303 | sudo curl -fsSL https://download.docker.com/linux/${release}/gpg -o /etc/apt/keyrings/docker.asc 304 | sudo chmod a+r /etc/apt/keyrings/docker.asc 305 | echo \ 306 | "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/${release} \ 307 | $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | 308 | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null 309 | fi 310 | ${package_manager} update -y 311 | fi 312 | 313 | ${package_manager} install -y containerd.io 314 | 315 | configure_containerd 316 | 317 | systemctl enable containerd && systemctl restart containerd 318 | 319 | if command -v containerd &>/dev/null; then 320 | echo_content skyBlue "---> containerd installation complete" 321 | else 322 | echo_content red "---> containerd installation failed" 323 | exit 1 324 | fi 325 | } 326 | 327 | # Install Kubernetes runtime 328 | install_runtime() { 329 | echo_content green "---> Installing container runtime" 330 | 331 | # Setup kernel modules for networking 332 | cat >/etc/modules-load.d/k8s.conf </etc/sysctl.d/k8s.conf <>${k8s_lock_file} 352 | 353 | echo_content skyBlue "---> Container runtime installation complete" 354 | } 355 | 356 | # Setup Kubernetes bash completion 357 | setup_bash_completion() { 358 | echo_content green "---> Setting up bash completion for Kubernetes tools" 359 | 360 | if ! grep -q bash_completion "$HOME/.bashrc"; then 361 | echo "source /usr/share/bash-completion/bash_completion" >>"$HOME/.bashrc" 362 | fi 363 | 364 | if command -v kubectl &>/dev/null && ! grep -q kubectl "$HOME/.bashrc"; then 365 | echo "source <(kubectl completion bash)" >>"$HOME/.bashrc" 366 | fi 367 | 368 | if command -v kubeadm &>/dev/null && ! grep -q kubeadm "$HOME/.bashrc"; then 369 | echo "source <(kubeadm completion bash)" >>"$HOME/.bashrc" 370 | fi 371 | 372 | if command -v crictl &>/dev/null && ! grep -q crictl "$HOME/.bashrc"; then 373 | echo "source <(crictl completion bash)" >>"$HOME/.bashrc" 374 | fi 375 | 376 | source "$HOME/.bashrc" 377 | echo_content skyBlue "---> Bash completion setup complete" 378 | } 379 | 380 | # Install Kubernetes network plugin 381 | install_network_plugin() { 382 | if ! systemctl is-active kubelet >/dev/null 2>&1; then 383 | echo_content yellow "---> Kubelet not running, skipping network plugin installation" 384 | return 385 | fi 386 | 387 | if kubectl get pods -n kube-system 2>/dev/null | grep -E 'calico|flannel' >/dev/null; then 388 | echo_content skyBlue "---> Network plugin already installed" 389 | return 390 | fi 391 | 392 | echo_content green "---> Installing network plugin: ${network}" 393 | 394 | if [[ ${network} == "flannel" ]]; then 395 | wget --no-check-certificate -O "${network_file}" ${kube_flannel_url} || { 396 | echo_content red "---> Failed to download flannel manifest" 397 | exit 1 398 | } 399 | 400 | kubectl create -f "${network_file}" || { 401 | echo_content red "---> Failed to apply flannel manifest" 402 | exit 1 403 | } 404 | elif [[ ${network} == "calico" ]]; then 405 | wget --no-check-certificate -O "${K8S_NETWORK}/calico.yaml" ${calico_url} || { 406 | echo_content red "---> Failed to download calico manifest" 407 | exit 1 408 | } 409 | 410 | kubectl create -f "${K8S_NETWORK}/calico.yaml" || { 411 | echo_content red "---> Failed to apply calico manifest" 412 | exit 1 413 | } 414 | fi 415 | 416 | echo_content skyBlue "---> Network plugin installation complete" 417 | } 418 | 419 | # Set up Kubernetes components 420 | setup_kubernetes() { 421 | echo_content green "---> Setting up Kubernetes components" 422 | 423 | # Configure kubelet to use systemd cgroup driver 424 | for file in /etc/default/kubelet /etc/sysconfig/kubelet; do 425 | if [[ -f "$file" ]]; then 426 | if ! grep -q "KUBELET_EXTRA_ARGS" "$file"; then 427 | echo 'KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"' >>"$file" 428 | fi 429 | break 430 | fi 431 | done 432 | 433 | # Configure crictl 434 | if command -v crictl &>/dev/null; then 435 | crictl config --set runtime-endpoint=${k8s_cri_sock} 436 | crictl config --set image-endpoint=${k8s_cri_sock} 437 | fi 438 | 439 | # Setup bash completion 440 | setup_bash_completion 441 | 442 | echo_content skyBlue "---> Kubernetes components setup complete" 443 | } 444 | 445 | # Setup Kubernetes repository 446 | setup_kubernetes_repo() { 447 | echo_content green "---> Setting up Kubernetes repository for version ${k8s_version}" 448 | 449 | if [[ "${release}" == "centos" ]]; then 450 | if [[ ${can_access_internet} == 0 ]]; then 451 | cat < Kubernetes repository setup complete" 490 | } 491 | 492 | # Install Kubernetes 493 | install_kubernetes() { 494 | if command -v kubeadm &>/dev/null; then 495 | echo_content skyBlue "---> Kubernetes is already installed" 496 | return 497 | fi 498 | 499 | echo_content green "---> Installing Kubernetes ${k8s_version}" 500 | 501 | # Get node type 502 | echo_content yellow "Please select node type:" 503 | echo_content yellow "1) Master node (control plane)" 504 | echo_content yellow "2) Worker node" 505 | read -r -p "Your choice (default: 1): " node_type_choice 506 | 507 | case ${node_type_choice} in 508 | 2) 509 | is_master=0 510 | ;; 511 | *) 512 | is_master=1 513 | ;; 514 | esac 515 | 516 | echo "is_master=${is_master}" >>${k8s_lock_file} 517 | 518 | # Check CPU cores for master node 519 | if [[ ${is_master} == 1 && $(grep -c "processor" /proc/cpuinfo) -lt 2 ]]; then 520 | echo_content red "Error: Master node requires at least 2 CPU cores" 521 | exit 1 522 | fi 523 | 524 | # Get public IP 525 | echo_content yellow "Please enter this node's public IP address (required):" 526 | read -r -p "> " public_ip 527 | 528 | if [[ -z "${public_ip}" ]]; then 529 | echo_content red "Error: Public IP cannot be empty" 530 | exit 1 531 | fi 532 | 533 | echo "public_ip=${public_ip}" >>${k8s_lock_file} 534 | 535 | # Get hostname 536 | echo_content yellow "Please enter hostname for this node (default: k8s-master):" 537 | read -r -p "> " host_name 538 | 539 | [[ -z "${host_name}" ]] && host_name="k8s-master" 540 | set_hostname ${host_name} 541 | 542 | # Get Kubernetes version 543 | echo_content yellow "Please select Kubernetes version:" 544 | echo_content yellow "Available versions: ${k8s_versions}" 545 | read -r -p "Enter version (default: ${k8s_version}): " selected_version 546 | 547 | [[ -z "${selected_version}" ]] && selected_version="${k8s_version}" 548 | 549 | if ! echo "${k8s_versions}" | grep -w -q "${selected_version}"; then 550 | echo_content red "Error: Version ${selected_version} is not supported" 551 | exit 1 552 | fi 553 | 554 | k8s_version="${selected_version}" 555 | echo "k8s_version=${k8s_version}" >>${k8s_lock_file} 556 | 557 | # Install container runtime 558 | install_runtime 559 | 560 | # Setup Kubernetes repositories 561 | setup_kubernetes_repo 562 | 563 | # Install Kubernetes components 564 | echo_content green "---> Installing Kubernetes components for version ${k8s_version}" 565 | 566 | if [[ -z "${k8s_version}" ]]; then 567 | ${package_manager} install -y kubelet kubeadm kubectl 568 | else 569 | if [[ ${package_manager} == "yum" || ${package_manager} == "dnf" ]]; then 570 | ${package_manager} install -y kubelet-"${k8s_version}" kubeadm-"${k8s_version}" kubectl-"${k8s_version}" 571 | elif [[ ${package_manager} == "apt" || ${package_manager} == "apt-get" ]]; then 572 | kubelet_version=$(apt-cache madison kubelet | grep ${k8s_version} | head -n1 | awk '{print $3}') 573 | kubeadm_version=$(apt-cache madison kubeadm | grep ${k8s_version} | head -n1 | awk '{print $3}') 574 | kubectl_version=$(apt-cache madison kubectl | grep ${k8s_version} | head -n1 | awk '{print $3}') 575 | ${package_manager} install -y kubelet="${kubelet_version}" kubeadm="${kubeadm_version}" kubectl="${kubectl_version}" 576 | fi 577 | fi 578 | 579 | # Setup Kubernetes components 580 | setup_kubernetes 581 | 582 | # Enable and start kubelet 583 | systemctl enable --now kubelet 584 | 585 | if command -v kubeadm &>/dev/null; then 586 | echo_content skyBlue "---> Kubernetes installation complete" 587 | else 588 | echo_content red "---> Kubernetes installation failed" 589 | exit 1 590 | fi 591 | } 592 | 593 | # Initialize Kubernetes master node 594 | initialize_kubernetes_master() { 595 | if ! command -v kubeadm &>/dev/null; then 596 | echo_content red "---> Kubernetes is not installed. Please install Kubernetes first." 597 | return 598 | fi 599 | 600 | # Load configuration from lock file 601 | is_master=$(get_config_val is_master) 602 | public_ip=$(get_config_val public_ip) 603 | k8s_version=$(get_config_val k8s_version) 604 | k8s_cri_sock=$(get_config_val k8s_cri_sock) 605 | 606 | if [[ "${is_master}" != "1" ]]; then 607 | echo_content yellow "---> This is configured as a worker node." 608 | echo_content yellow "---> Please run 'kubeadm join' command provided by your master node." 609 | echo_content yellow "---> If you forgot the command, run this on the master node:" 610 | echo_content green " kubeadm token create --print-join-command" 611 | return 612 | fi 613 | 614 | echo_content green "---> Initializing Kubernetes master node" 615 | 616 | # Get exact Kubernetes version 617 | k8s_version_mini=$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable-"${k8s_version}".txt) || { 618 | echo_content yellow "---> Could not determine exact Kubernetes version, using specified version" 619 | k8s_version_mini="v${k8s_version}.0" 620 | } 621 | 622 | # Initialize Kubernetes master 623 | local init_log="${K8S_LOG}/kubeadm-init-$(date +%Y%m%d-%H%M%S).log" 624 | 625 | echo_content green "---> Running kubeadm init with version ${k8s_version_mini}" 626 | 627 | if [[ ${can_access_internet} == 0 ]]; then 628 | kubeadm init \ 629 | --apiserver-advertise-address="${public_ip}" \ 630 | --image-repository="${k8s_mirror}" \ 631 | --kubernetes-version="${k8s_version_mini}" \ 632 | --service-cidr=10.96.0.0/12 \ 633 | --pod-network-cidr=10.244.0.0/16 \ 634 | --cri-socket="${k8s_cri_sock}" | tee "${init_log}" 635 | else 636 | kubeadm init \ 637 | --apiserver-advertise-address="${public_ip}" \ 638 | --kubernetes-version="${k8s_version_mini}" \ 639 | --service-cidr=10.96.0.0/12 \ 640 | --pod-network-cidr=10.244.0.0/16 \ 641 | --cri-socket="${k8s_cri_sock}" | tee "${init_log}" 642 | fi 643 | 644 | if [[ ${PIPESTATUS[0]} -eq 0 ]]; then 645 | # Set up kubeconfig 646 | mkdir -p "$HOME"/.kube 647 | cp -i /etc/kubernetes/admin.conf "$HOME"/.kube/config 648 | chown "$(id -u)":"$(id -g)" "$HOME"/.kube/config 649 | 650 | echo_content skyBlue "---> Kubernetes master node initialization complete" 651 | 652 | # Extract join command for future use 653 | local join_command=$(grep -A 1 "kubeadm join" "${init_log}" | tr -d '\\\n' | sed 's/^[ \t]*//') 654 | echo "${join_command}" >"${K8S_DATA}/join-command.txt" 655 | echo_content green "---> Worker join command saved to ${K8S_DATA}/join-command.txt" 656 | 657 | # Install network plugin 658 | install_network_plugin 659 | 660 | # Print cluster status 661 | echo_content green "---> Kubernetes cluster status:" 662 | kubectl get nodes 663 | else 664 | echo_content red "---> Kubernetes master node initialization failed" 665 | echo_content yellow "---> Check logs in ${init_log}" 666 | exit 1 667 | fi 668 | } 669 | 670 | # Reset Kubernetes 671 | reset_kubernetes() { 672 | if ! command -v kubeadm &>/dev/null; then 673 | echo_content yellow "---> Kubernetes is not installed, nothing to reset" 674 | return 675 | fi 676 | 677 | echo_content green "---> Resetting Kubernetes cluster" 678 | 679 | echo_content yellow "WARNING: This will remove all Kubernetes configurations and data!" 680 | read -r -p "Are you sure you want to continue? (y/N): " confirm_reset 681 | 682 | if [[ ! ${confirm_reset} =~ ^[Yy]$ ]]; then 683 | echo_content yellow "---> Reset cancelled" 684 | return 685 | fi 686 | 687 | # Reset Kubernetes 688 | kubeadm reset -f 689 | 690 | # Clean up directories 691 | rm -rf /etc/cni /etc/kubernetes /var/lib/dockershim /var/lib/etcd /var/lib/kubelet /var/run/kubernetes "$HOME"/.kube 692 | 693 | # Reset iptables 694 | iptables -F && iptables -X 695 | iptables -t nat -F && iptables -t nat -X 696 | iptables -t raw -F && iptables -t raw -X 697 | iptables -t mangle -F && iptables -t mangle -X 698 | 699 | # Reload systemd 700 | systemctl daemon-reload 701 | 702 | # Restart container runtime 703 | if command -v docker &>/dev/null; then 704 | systemctl restart docker 705 | elif command -v containerd &>/dev/null; then 706 | systemctl restart containerd 707 | fi 708 | 709 | # Apply sysctl settings 710 | sysctl --system 711 | 712 | # Remove lock file 713 | rm -f ${k8s_lock_file} 714 | 715 | echo_content skyBlue "---> Kubernetes reset complete" 716 | } 717 | 718 | # Display cluster information 719 | show_cluster_info() { 720 | if ! command -v kubectl &>/dev/null; then 721 | echo_content yellow "---> Kubernetes is not installed" 722 | return 723 | fi 724 | 725 | if ! kubectl cluster-info &>/dev/null; then 726 | echo_content yellow "---> Kubernetes cluster is not running or kubeconfig is not configured" 727 | return 728 | fi 729 | 730 | echo_content green "---> Cluster Information" 731 | echo "----------------------------------------" 732 | kubectl cluster-info 733 | echo "----------------------------------------" 734 | echo_content green "---> Node Status" 735 | echo "----------------------------------------" 736 | kubectl get nodes -o wide 737 | echo "----------------------------------------" 738 | echo_content green "---> Pod Status" 739 | echo "----------------------------------------" 740 | kubectl get pods --all-namespaces 741 | echo "----------------------------------------" 742 | } 743 | 744 | # Display installation help 745 | show_help() { 746 | echo_content green "Kubernetes Installation Script v${SCRIPT_VERSION}" 747 | echo_content green "Usage: $0 [option]" 748 | echo_content green "Options:" 749 | echo_content yellow " install Install Kubernetes" 750 | echo_content yellow " init Initialize Kubernetes master node" 751 | echo_content yellow " reset Reset Kubernetes cluster" 752 | echo_content yellow " info Show cluster information" 753 | echo_content yellow " help Show this help message" 754 | echo_content yellow "If no option is provided, the interactive menu will be displayed." 755 | } 756 | 757 | # Main menu for interactive use 758 | show_menu() { 759 | clear 760 | echo_content red "==============================================================" 761 | echo_content skyBlue "Kubernetes Installation Script v${SCRIPT_VERSION}" 762 | echo_content skyBlue "Supported OS: CentOS 8+/Ubuntu 20+/Debian 11+" 763 | echo_content skyBlue "Author: Original by jonssonyan, optimized version" 764 | echo_content skyBlue "Github: https://github.com/jonssonyan/install-script" 765 | echo_content red "==============================================================" 766 | echo_content yellow "1. Install Kubernetes" 767 | echo_content yellow "2. Initialize Kubernetes Master Node" 768 | echo_content yellow "3. Show Cluster Information" 769 | echo_content red "==============================================================" 770 | echo_content yellow "4. Reset Kubernetes" 771 | echo_content red "==============================================================" 772 | echo_content yellow "0. Exit" 773 | echo_content red "==============================================================" 774 | } 775 | 776 | # Check if lock file exists and load configuration 777 | check_lock_file() { 778 | if [[ -f "${k8s_lock_file}" ]]; then 779 | echo_content skyBlue "---> Loading configuration from ${k8s_lock_file}" 780 | 781 | is_master=$(get_config_val is_master) 782 | public_ip=$(get_config_val public_ip) 783 | k8s_version=$(get_config_val k8s_version) 784 | k8s_cri_sock=$(get_config_val k8s_cri_sock) 785 | 786 | echo_content skyBlue "---> Configuration loaded" 787 | else 788 | echo_content yellow "---> No configuration found. This appears to be a new installation." 789 | fi 790 | } 791 | 792 | # Process CLI arguments 793 | process_args() { 794 | case "$1" in 795 | install) 796 | prepare_environment 797 | install_kubernetes 798 | ;; 799 | init) 800 | initialize_kubernetes_master 801 | ;; 802 | reset) 803 | reset_kubernetes 804 | ;; 805 | info) 806 | show_cluster_info 807 | ;; 808 | help | --help | -h) 809 | show_help 810 | ;; 811 | *) 812 | return 1 813 | ;; 814 | esac 815 | return 0 816 | } 817 | 818 | # Main execution function 819 | main() { 820 | cd "$HOME" || exit 1 821 | 822 | # Initialize variables 823 | init_var 824 | 825 | # Create necessary directories 826 | create_dirs 827 | 828 | # Check system compatibility 829 | check_system 830 | 831 | # Install basic dependencies 832 | install_dependencies 833 | 834 | # Check for existing configuration 835 | check_lock_file 836 | 837 | # Process command line arguments if provided 838 | if [[ $# -gt 0 ]]; then 839 | if process_args "$@"; then 840 | exit 0 841 | fi 842 | fi 843 | 844 | # Interactive menu 845 | while true; do 846 | show_menu 847 | read -r -p "Please choose an option: " input_option 848 | case ${input_option} in 849 | 1) 850 | prepare_environment 851 | install_kubernetes 852 | echo_content yellow "Press Enter to continue..." 853 | read -r 854 | ;; 855 | 2) 856 | initialize_kubernetes_master 857 | echo_content yellow "Press Enter to continue..." 858 | read -r 859 | ;; 860 | 3) 861 | show_cluster_info 862 | echo_content yellow "Press Enter to continue..." 863 | read -r 864 | ;; 865 | 4) 866 | reset_kubernetes 867 | echo_content yellow "Press Enter to continue..." 868 | read -r 869 | ;; 870 | 0) 871 | echo_content green "Exiting..." 872 | exit 0 873 | ;; 874 | *) 875 | echo_content red "Invalid option. Please try again." 876 | sleep 2 877 | ;; 878 | esac 879 | done 880 | } 881 | 882 | # Execute main function with all arguments 883 | main "$@" 884 | --------------------------------------------------------------------------------