1. #!/bin/bash
    2. ####################################基础信息####################################
    3. #
    4. #system: centos7
    5. #
    6. #
    7. #
    8. #
    9. #
    10. #
    11. #
    12. ################################################################################
    13. ####################################环境配置####################################
    14. mkdir -p /work/{packages,config}
    15. ####################################通用变量####################################
    16. PathPackage=/work/packages
    17. pathConfig=/work/config
    18. PrefixNginx=/usr/local/nginx
    19. PrefixMysql=/usr/local/mysql
    20. PrefixRedis=/usr/local/redis
    21. prefixJava=/usr/local/java
    22. prefixPhp=/usr/local/php
    23. prefixDocker=/etc/docker
    24. PATHUSER=/usr/local/
    25. SystemPath=/etc/systemd/system
    26. userSystemPath=/usr/lib/systemd/system
    27. ####################################脚本插件####################################
    28. #~~~~~~~~~~~~~~~~~文字颜色~~~~~~~~~~~~~~~~~#
    29. function info(){
    30. # 32 绿色字
    31. ARGE=${1:-'没有传参'}
    32. echo -e "\033[1;32mINFO: $ARGE\033[0m"
    33. }
    34. function warnning(){
    35. # 33 黄色字
    36. ARGE=${1:-'没有传参'}
    37. echo -e "\033[1;33mWARN: $ARGE\033[0m"
    38. }
    39. function error(){
    40. # 31 红色字
    41. ARGE=${1:-'没有传参'}
    42. echo -e "\033[1;5;41;37mERROR: $ARGE\033[0m"
    43. }
    44. #~~~~~~~~~~~~~~~~~判断服务状态~~~~~~~~~~~~~~~~~#
    45. #"1.nginx 2.php 3.mysql 4.redis 5.java"
    46. #"6.zabbix-agent2 7.dockre 8.lnmp 9.all 10.exit"
    47. function server_status(){
    48. STATUS=0
    49. if [ -f $number ];then
    50. warnning "$servername 已安装"
    51. STATUS=1
    52. fi
    53. }
    54. ####################################功能模块####################################
    55. function install_nginx(){
    56. number=/usr/local/nginx/sbin/nginx
    57. servername=nginx
    58. server_status
    59. if [ ! $STATUS == 1 ];then
    60. info "1. 基础环境"
    61. useradd -r -s /sbin/nologin -M www &>/dev/null ##创建nginx用户
    62. yum install -y gcc gcc-c++ glibc glibc-devel pcre pcre-devel zlib zlib-devel openssl openssl-devel >/dev/null
    63. info "2. 下载...跳过"
    64. # wget -O https://nginx.org/download/nginx-1.22.0.tar.gz &>/dev/null
    65. info "3. 解压"
    66. cd $PathPackage
    67. tar -xf $PathPackage/nginx-1.22.0.tar.gz
    68. info "4. 编译安装nginx...请耐心等待" #echo $?查看是否出错
    69. cd $PathPackage/nginx-1.22.0
    70. ./configure --prefix=$PrefixNginx --user=www --with-http_stub_status_module --with-http_ssl_module &>/dev/null
    71. make &>/dev/null && make install &>/dev/null
    72. info "5. 设置systemd管理"
    73. ln -s $PrefixNginx/sbin/* /sbin/
    74. cp $pathConfig/nginx/nginx.service $userSystemPath
    75. info "6. 配置nginx"
    76. \cp -f $pathConfig/nginx/nginx.conf $PrefixNginx/conf/
    77. mkdir -p $PrefixNginx/conf/vhost/ && \cp -f $pathConfig/nginx/default.conf /usr/local/nginx/conf/vhost/
    78. info "7. 启动nginx"
    79. systemctl enable --now nginx
    80. fi
    81. }
    82. function install_zabiix_agent(){
    83. number=/sbin/zabbix_agent2
    84. servername=zabbix_agent2
    85. server_status
    86. if [ ! $STATUS == 1 ];then
    87. if [ !`ss -antl |grep 10050` ];then
    88. info "1.获取zabbix源"
    89. rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm &>/dev/null
    90. sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#g' /etc/yum.repos.d/zabbix.repo
    91. sed -i 's/enabled=0/enabled=1/' /etc/yum.repos.d/zabbix.repo
    92. info "2.安装zabbix-agent2"
    93. yum -y install zabbix-agent2 &>/dev/null
    94. info "3.启动zabbix-agent2"
    95. systemcel enabled --now zabbix-agent2 &>/dev/null
    96. fi
    97. fi
    98. }
    99. function install_mysql(){
    100. number=/usr/local/mysql/bin/mysql
    101. servername=mysql
    102. server_status
    103. if [ ! $STATUS == 1 ];then
    104. info "1. 解决依赖"
    105. yum -y remove `rpm -qa | grep mariadb` &>/dev/null
    106. yum install -y libaio-* &>/dev/null
    107. info "2. 创建mysql用户"
    108. if [ ! `cat /etc/passwd |grep 'mysql'` ];then
    109. useradd -M -s /sbin/nologin -r mysql
    110. fi
    111. info "3. 解压,安装,设置MySQL目录权限"
    112. tar -xf $PathPackage/mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz -C $PATHUSER
    113. mv $PATHUSER/mysql-5.7.36-linux-glibc2.12-x86_64/ $PrefixMysql
    114. chown -R mysql.mysql $PrefixMysql
    115. # 4. 设置systemd管理"
    116. ln -s $PrefixMysql/bin/* /bin/
    117. echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile && source /etc/profile
    118. cd && touch mysqld.service && chmod 644 mysqld.service
    119. cp $pathConfig/mysql/mysqld.service $SystemPath/mysqld.service
    120. cd /usr/lib/tmpfiles.d && touch mysql.conf && chmod 644 mysql.conf
    121. echo 'd /usr/local/mysql/data 0750 mysql mysql -' > /usr/lib/tmpfiles.d/mysql.conf
    122. info "5. 配置服务器启动选项,初始化数据目录"
    123. cp $pathConfig/mysql/my.cnf /etc/my.cnf
    124. mkdir -p /data/mysql/mysql3306/{data,logs,tmp}
    125. chown -R mysql:mysql /data/mysql/
    126. info "6. 初始化MySQL"
    127. cd $PrefixMysql
    128. ./bin/mysqld --defaults-file=/etc/my.cnf --initialize &>/dev/null
    129. warnning "----请及时修改密码,密码:【SET PASSWORD = PASSWORD('lnmp@123');】"
    130. grep "temporary password" /data/mysql/mysql3306/data/error.log
    131. info "7. 启动mysql"
    132. systemctl enable --now mysqld
    133. fi
    134. }
    135. function install_redis(){
    136. number=/usr/local/redis/bin/redis-cli
    137. servername=redis
    138. server_status
    139. if [ ! $STATUS == 1 ];then
    140. # 安装redis
    141. info "1. 创建redis用户"
    142. if [ ! `cat /etc/passwd |grep 'redis'` ];then
    143. useradd -M -s /sbin/nologin -r redis
    144. fi
    145. info "2. 解压redis安装包..."
    146. tar -xf $PathPackage/redis-5.0.14.tar.gz -C $PATHUSER
    147. mv $PATHUSER/redis-5.0.14 $PrefixRedis
    148. cd $PrefixRedis
    149. info "3. 解决依赖"
    150. yum -y install gcc gcc-c++ &>/dev/null
    151. info "4. 安装redis..."
    152. make &>/dev/null && make install PREFIX=$PrefixRedis &>/dev/null
    153. info "5. 设置systemd管理"
    154. cp $PrefixRedis/src/redis-server $PATHUSER
    155. cp $PrefixRedis/src/redis-cli $PATHUSER
    156. \cp -f $pathConfig/redis/redis.service $SystemPath/redis.service
    157. info "6. 配置启动redis..."
    158. \cp -f $pathConfig/redis/redis.conf $PrefixRedis &>/dev/null
    159. systemctl enable --now redis
    160. fi
    161. }
    162. function install_jdk(){
    163. number=/usr/local/java/jre/bin/java
    164. servername=java
    165. server_status
    166. if [ ! $STATUS == 1 ];then
    167. info "1.环境配置"
    168. #1.1新建一个自定义目录用于存放下载或挂载
    169. mkdir /data/jdk
    170. info "2.解压"
    171. #2.1将软件包上传服务器并解压
    172. cd $PathPackage
    173. tar -xf jdk-8u91-linux-x64.tar.gz
    174. info "3.移动解压后的文件夹" #(jdk1.8.0_91)到usr目录下并重命名(/usr/java)
    175. mv jdk1.8.0_91/ $prefixJava
    176. info "4.配置环境变量" #(vim /etc/profile)
    177. # cp $pathConfig/java/java.sh /etc/profile.d/
    178. echo -e "export JAVA_HOME=/usr/local/java\nexport PATH=$PATH:$JAVA_HOME/bin\nexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar\nexport JRE_HOME=$JAVA_HOME/jre" >> /etc/profile
    179. info "5.重新生效环境变量"
    180. # warnning "5.手动输入-生效" #2.4重新生效环境变量配置文件
    181. source /etc/profile
    182. # warnning "source /etc/profile.d/java.sh"
    183. fi
    184. }
    185. function install_php(){
    186. number=$prefixPhp/etc/php.ini
    187. servername=php
    188. server_status
    189. if [ ! $STATUS == 1 ];then
    190. info "1. 解决依赖"
    191. yum -y install libxslt-devel bxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel libzip-devel pcre-devel &>/dev/null
    192. info "2. 创建www用户"
    193. if [ ! `cat /etc/passwd |grep 'www'` ];then
    194. useradd -M -s /sbin/nologin -r www
    195. fi
    196. info "3. 解压安装包"
    197. cd $PathPackage && tar -xf php-7.3.30.tar.gz
    198. info "4. 正在安装PHP..."
    199. cd $PathPackage/php-7.3.30
    200. ./configure --prefix=$prefixPhp --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-pdo-mysql --with-openssl --with-pcre-regex --with-pdo-sqlite --with-pear --with-png-dir --with-xmlrpc --with-xsl --with-zlib --enable-bcmath --enable-libxml --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-xml >&/dev/null
    201. info "5. 正在编译php7...请耐心等待"
    202. make -j 5 &>/dev/null && make install &>/dev/null
    203. info "6. 设置命令路径优化"
    204. ln -s $prefixPhp/sbin/php-fpm /usr/sbin/
    205. ln -s $prefixPhp/bin/* /bin/
    206. cp $prefixPhp/etc/{php-fpm.conf.default,php-fpm.conf}
    207. cp $prefixPhp/etc/php-fpm.d/{www.conf.default,www.conf}
    208. info "7. 配置php7"
    209. cp sapi/fpm/php-fpm.service $userSystemPath
    210. cp $PathPackage/php-7.3.30/php.ini-production $prefixPhp/etc/php.ini
    211. sed -i 's#;date.timezone =#date.timezone = Asia/Shanghai#' $prefixPhp/etc/php.ini
    212. sed -i 's#max_execution_time = .*#max_execution_time = 300#' $prefixPhp/etc/php.ini
    213. sed -i 's#post_max_size =.*#post_max_size = 32M#' $prefixPhp/etc/php.ini
    214. sed -i 's#max_input_time = .*#max_input_time = 300#' $prefixPhp/etc/php.ini
    215. info "8. 启动php-fpm"
    216. systemctl enable --now php-fpm &>/dev/null
    217. fi
    218. }
    219. function install_docker(){
    220. number=/bin/docker
    221. servername=docker
    222. server_status
    223. if [ ! $STATUS == 1 ];then
    224. info "1.卸载部分已安装docker软件"
    225. yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine &>/dev/null
    226. info "2.安装yum-config-manager和yum-utils"
    227. yum install -y yum-utils &>/dev/null
    228. yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo &>/dev/null
    229. sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
    230. info "3.安装20.10版本Docker"
    231. yum -y install docker-ce-20.10.8-3.el7 docker-ce-cli-20.10.8-3.el7 containerd.io &>/dev/null
    232. info "4.配置加速源"
    233. [ ! -d /etc/docker ] && mkdir /etc/docker && touch /etc/docker/daemon.json
    234. echo -e "{\n\"registry-mirrors\": [\n\t\"https://hub-mirror.c.163.com\",\n\t\"https://mirror.baidubce.com\"\n ]\n}" >> /etc/docker/daemon.json
    235. info "5.安装Docker-Compose"
    236. curl -L https://download.fastgit.org/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose &>/dev/null
    237. chmod +x /usr/local/bin/docker-compose
    238. info "6.启动docker"
    239. systemctl enable --now docker &>/dev/null
    240. fi
    241. }
    242. function install_lnmp(){
    243. install_nginx
    244. install_redis
    245. install_mysql
    246. install_php
    247. }
    248. function install_all(){
    249. install_nginx
    250. install_redis
    251. install_mysql
    252. install_jdk
    253. install_zabiix_agent
    254. install_docker
    255. install_php
    256. }
    257. function mian (){
    258. info "请选择你要安装的程序 default:lnmp"
    259. info "1.nginx 2.php 3.mysql 4.redis 5.java"
    260. info "6.zabbix-agent2 7.dockre 8.lnmp 9.all 10.exit"
    261. read -p "请选择 1-10 " DFT
    262. case $DFT in
    263. 1)
    264. install_nginx
    265. ;;
    266. 2)
    267. install_php
    268. ;;
    269. 3)
    270. install_mysql
    271. ;;
    272. 4)
    273. install_redis
    274. ;;
    275. 5)
    276. install_jdk
    277. ;;
    278. 6)
    279. install_zabiix_agent
    280. ;;
    281. 7)
    282. install_docker
    283. ;;
    284. 8)
    285. install_lnmp
    286. ;;
    287. 9)
    288. install_all
    289. ;;
    290. 10)
    291. exit
    292. ;;
    293. *)
    294. install_lnmp
    295. esac
    296. }
    297. mian