1. #/!bin/bash
    2. #+++++++++++++++++++++++++++++++++++++++ 脚本信息 +++++++++++++++++++++++++++++++++++++++#
    3. ##################################################
    4. # #
    5. # System: centos7 #
    6. # Version: v1.0 #
    7. # Description: System init and install LNMP #
    8. # Author: Sand #
    9. # Mail: sandbenene@163.com #
    10. # Date: 2022.4.16 #
    11. # #
    12. ##################################################
    13. ###############################################################
    14. ### 注意点:运行脚本需要在脚本所在路径,系统初始环境必须干净
    15. ### 安装包存放位置 :~/package
    16. ### 配置文件存放位置 :~/config
    17. ### test : sh -vx system_init.sh
    18. ### grep -v '^$|^;' etc/php.ini
    19. #################### 要求 #####################################
    20. ### 1,JDK 1.8.0_91
    21. ### 2,mysql 5.7.30 不对外访问
    22. ### 3,redis 5.0.14 不对外访问
    23. ### 4,php 7.3.32
    24. ### 5,nginx 1.20.2
    25. ###
    26. ### JDK 网络下载地址 : https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
    27. ### nginx 网络获取安装包: wget http://nginx.org/download/nginx-1.20.2.tar.gz
    28. ### php 网络获取安装包: wget https://www.php.net/distributions/php-7.3.32.tar.gz
    29. ### mysql 网络下载地址 : wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
    30. ### redis 网络下载安装包:wget https://download.redis.io/releases/redis-5.0.14.tar.gz
    31. ###
    32. ##############################################
    33. ### [root@localhost ~]# tree auto
    34. ### auto
    35. ### ├── info.sh
    36. ### ├── init.sh
    37. ### ├── mian.sh
    38. ### ├── config
    39. ### │ ├── java
    40. ### │ │ └── java.sh
    41. ### │ ├── mysql
    42. ### │ │ ├── my.cnf
    43. ### │ │ └── mysqld.service
    44. ### │ ├── nginx
    45. ### │ │ ├── default.conf
    46. ### │ │ ├── nginx.conf
    47. ### │ │ └── nginx.service
    48. ### │ └── redis
    49. ### │ ├── redis.conf
    50. ### │ └── redis.service
    51. ### └── packages
    52. ### ├── jdk-8u91-linux-x64.tar.gz
    53. ### ├── mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz
    54. ### ├── nginx-1.22.0.tar.gz
    55. ### ├── php-7.3.30.tar.gz
    56. ### └── redis-5.0.14.tar.gz
    57. #=======================================脚本通用变量=======================================#
    58. filedir=$(cd `dirname $0`;pwd)
    59. packages=$filedir/work/packages
    60. config=$filedir/work/config
    61. nginx_version=nginx-1.22.0
    62. nginx_install_path=/usr/local/nginx
    63. mysql_version=mysql-5.7.36
    64. mysql_install_path=/usr/local/mysql
    65. redis_version=redis-5.0.14
    66. redis_install_path=/usr/local/redis
    67. php_version=php-7.3.30
    68. php_install_path=/usr/local/php
    69. #========================================脚本插件=======================================#
    70. #################### 插件一:字体 ######################
    71. ### 设置文件输出警告色,info/warning/error "你要输出信息"
    72. ### 使用方法
    73. ### info "This is a info!"
    74. ### warnning "This is a warn"
    75. ### error "This is a error"
    76. function info(){
    77. # 32 绿色字
    78. SAND=${1:-'没有传参'}
    79. echo -e "\033[1;32mINFO: $SAND\033[0m"
    80. }
    81. function warnning(){
    82. # 33 黄色字
    83. SAND=${1:-'没有传参'}
    84. echo -e "\033[1;33mWARN: $SAND\033[0m"
    85. }
    86. function error(){
    87. # 31 红色字
    88. SAND=${1:-'没有传参'}
    89. echo -e "\033[1;5;41;37mERROR: $SAND\033[0m"
    90. }
    91. #################### 插件二:判断服务是否安装 ######################
    92. function judge_server_install(){
    93. NO_install=0
    94. if [ $SERVER == 'docker' ]; then
    95. if [ -f /bin/docker ]; then
    96. warnning "docker已安装"
    97. NO_install=1
    98. fi
    99. elif [ $SERVER == 'mysql' ]; then
    100. if [ -f /usr/local/mysql/bin/mysqld ]; then
    101. warnning "mysql已安装"
    102. NO_install=1
    103. fi
    104. elif [ $SERVER == 'php' ]; then
    105. if [ -f /usr/local/php/sbin/php-fpm ]; then
    106. warnning "php已安装"
    107. NO_install=1
    108. fi
    109. elif [ $SERVER == 'nginx' ]; then
    110. if [ -f /usr/local/nginx/sbin/nginx ]; then
    111. warnning "nginx已安装"
    112. NO_install=1
    113. fi
    114. elif [ $SERVER == 'zabbix-agent' ]; then
    115. if [ -f /etc/zabbix/zabbix_agent2.conf ]; then
    116. warnning "zabiix-agent2已安装"
    117. NO_install=1
    118. fi
    119. elif [ $SERVER == 'redis' ]; then
    120. if [ -f /usr/local/redis/bin/redis-server ]; then
    121. warnning "redis已安装"
    122. NO_install=1
    123. fi
    124. fi
    125. }
    126. #========================================功能模块=======================================#
    127. function install_docker(){
    128. SERVER=docker
    129. judge_server_install
    130. if [ ! $NO_install -eq 1 ]; then
    131. info +++++++++++++++++++++++安装docker20.10.8+++++++++++++++++++++++
    132. info "1.卸载部分已安装软件"
    133. yum -y remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine &>/dev/null
    134. info "2.安装yum-config-manager和yum-utils"
    135. yum install -y yum-utils >&/dev/null
    136. yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo &>/dev/null
    137. sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
    138. info "3.安装20.10版本Docker"
    139. yum -y install docker-ce-20.10.8-3.el7 docker-ce-cli-20.10.8-3.el7 containerd.io &>/dev/null
    140. info "4.配置加速源"
    141. [ ! -d /etc/docker ] && mkdir /etc/docker && touch /etc/docker/daemon.json
    142. echo -e "{ \n \"registry-mirrors\": [\n \"https://hub-mirror.c.163.com\",\n \"https://mirror.baidubce.com\" \n ]\n}" >/etc/docker/daemon.json
    143. info "5.安装Docker-Compose"
    144. if [ ! -f /usr/local/bin/docker-compose ]; then
    145. 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
    146. chmod +x /usr/local/bin/docker-compose
    147. fi
    148. info "6.启动"
    149. systemctl enable --now docker &>/dev/null
    150. if [ ps -ef |grep dockerd |wc -l -gt 1 ] ; then
    151. info "+++++docker以启动 √+++++"
    152. fi
    153. fi
    154. }
    155. function install_zabbix_agent(){
    156. SERVER='zabbix-agent'
    157. judge_server_install
    158. if [ ! $NO_install -eq 1 ]; then
    159. info +++++++++++++++++++++++安装zabbix-agent2+++++++++++++++++++++++
    160. info "1.获取zabbix源,请耐心等待..."
    161. rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm &>/dev/null
    162. sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#g' /etc/yum.repos.d/zabbix.repo
    163. sed -i 's/enabled=0/enabled=1/' /etc/yum.repos.d/zabbix.repo
    164. info "2 安装zabbix-agent2"
    165. yum -y install zabbix-agent2 &>/dev/null
    166. info "3.开启zabbix-agent2"
    167. systemctl enable --now zabbix-agent2 &>/dev/null
    168. if ss -antl |grep :10050 &>/dev/null ; then
    169. info "+++++zabbix-agent以启动 √+++++"
    170. fi
    171. fi
    172. }
    173. function install_nginx(){
    174. SERVER=nginx
    175. judge_server_install
    176. if [ ! $NO_install -eq 1 ];then
    177. info "+++++++++++++++++++++++安装$nginx_version+++++++++++++++++++++++"
    178. info "1. 创建nginx用户"
    179. if ! grep www /etc/passwd &>/dev/null ;then
    180. useradd -r -s /sbin/nologin -M www
    181. fi
    182. info "2. 解决依赖"
    183. yum install -y gcc gcc-c++ glibc glibc-devel pcre pcre-devel zlib zlib-devel openssl openssl-devel wget &>/dev/null
    184. info "3. 下载nginx"
    185. if [ ! -f $packages/$nginx_version.tar.gz ]; then
    186. wget -O $packages/$nginx_version.tar.gz https://nginx.org/download/$nginx_version.tar.gz &>/dev/null
    187. fi
    188. info "4. 解压"
    189. cd $packages && tar -xf $packages/$nginx_version.tar.gz
    190. info "5. 编译nginx"
    191. cd $packages/$nginx_version
    192. ./configure --prefix=$nginx_install_path --user=www --with-http_stub_status_module --with-http_ssl_module &>/dev/null
    193. make &>/dev/null && make install &>/dev/null
    194. info "6. 设置systemd管理"
    195. ln -s $nginx_install_path/sbin/* /sbin/
    196. \cp -f $config/nginx/nginx.service /usr/lib/systemd/system/
    197. info "7. 配置nginx"
    198. \cp -f $config/nginx/nginx.conf $nginx_install_path/conf/
    199. mkdir -p $nginx_install_path/conf/vhost/ && \cp -f $config/nginx/default.conf $nginx_install_path/conf/vhost/
    200. info "8. 启动nginx"
    201. systemctl enable --now nginx
    202. if ss -antl |grep :80 &>/dev/null ; then
    203. info "+++++nginx以启动 √+++++"
    204. fi
    205. fi
    206. }
    207. function install_mysql(){
    208. SERVER=mysql
    209. judge_server_install
    210. if [ ! $NO_install -eq 1 ];then
    211. info "1. 解决依赖"
    212. yum -y remove `rpm -qa | grep mariadb` &>/dev/null
    213. yum install -y libaio-* &>/dev/null
    214. info "2. 创建mysql用户"
    215. groupadd mysql && useradd -M -s /sbin/nologin -r -g mysql mysql
    216. info "3. 解压,安装"
    217. cd $packages
    218. tar -xf $packages/$mysql_version-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
    219. mv /usr/local/$mysql_version-linux-glibc2.12-x86_64/ $mysql_install_path
    220. # 设置mysql目录权限
    221. chown -R mysql.mysql $mysql_install_path
    222. info "4. 设置systemd管理"
    223. ln -s /usr/local/mysql/bin/* /bin/
    224. echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile && source /etc/profile
    225. cd /usr/lib/systemd/system && touch mysqld.service && chmod 644 mysqld.service
    226. cp $config/mysql/mysqld.service /etc/systemd/system/mysqld.service
    227. cd /usr/lib/tmpfiles.d && touch mysql.conf && chmod 644 mysql.conf
    228. echo 'd /usr/local/mysql/data 0750 mysql mysql -' > /usr/lib/tmpfiles.d/mysql.conf
    229. info "5. 配置服务器启动选项,初始化数据目录"
    230. cp $config/mysql/my.cnf /etc/my.cnf
    231. mkdir -p /data/mysql/mysql3306/{data,logs,tmp}
    232. chown -R mysql:mysql /data/mysql/
    233. info "6. 初始化MySQL"
    234. cd /usr/local/mysql
    235. ./bin/mysqld --defaults-file=/etc/my.cnf --initialize &>/dev/null
    236. echo "----请及时修改密码,密码:【SET PASSWORD = PASSWORD('lnmp@123');】"
    237. grep "temporary password" /data/mysql/mysql3306/data/error.log
    238. info "7. 启动mysql"
    239. systemctl enable --now mysqld &>/dev/null
    240. if ss -antl |grep :3306 &>/dev/null ; then
    241. info "+++++mysql以启动 √+++++"
    242. fi
    243. fi
    244. }
    245. function install_redis(){
    246. SERVER=redis
    247. judge_server_install
    248. if [ ! $NO_install -eq 1 ];then
    249. info +++++++++++++++++++++++安装redis-5.0.14+++++++++++++++++++++++
    250. info "1. 创建redis用户"
    251. groupadd redis && useradd -M -s /sbin/nologin -r -g redis redis
    252. info "2. 解压redis安装包..."
    253. tar -xf /work/packages/$redis_version.tar.gz -C /usr/local/
    254. mv /usr/local/$redis_version $redis_install_path
    255. cd $redis_install_path
    256. info "3. 解决依赖"
    257. yum -y install gcc gcc-c++ &>/dev/null
    258. info "4. 安装redis..."
    259. make &>/dev/null && make install PREFIX=$redis_install_path &>/dev/null
    260. info "5. 设置systemd管理"
    261. cp $redis_install_path/src/redis-server /usr/local/bin/
    262. cp $redis_install_path/src/redis-cli /usr/local/bin/
    263. \cp -f $config/redis/redis.service /etc/systemd/system/redis.service
    264. info "6. 配置启动redis..."
    265. \cp -f $config/redis/redis.conf $redis_install_path/
    266. systemctl enable --now redis &>/dev/null
    267. if ss -antl |grep :6379 &>/dev/null ; then
    268. info "+++++redis以启动 √+++++"
    269. fi
    270. fi
    271. }
    272. function install_php(){
    273. SERVER=php
    274. judge_server_install
    275. if [ ! $NO_install -eq 1 ];then
    276. # 1. 解决依赖
    277. 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
    278. # 2. 创建www用户
    279. useradd -M -s /sbin/nologin www
    280. # 3. 解压安装包
    281. cd $packages && tar -xf $php_version.tar.gz
    282. # 4. 正在安装PHP...
    283. cd $packages/php-7.3.30
    284. ./configure --prefix=$php_install_path --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
    285. # 5. 正在编译php7
    286. make -j 5 &>/dev/null && make install &>/dev/null
    287. # 6. 设置命令路径优化
    288. ln -s $php_install_path/sbin/php-fpm /usr/sbin/
    289. ln -s $php_install_path/bin/* /bin/
    290. cp $php_install_path/etc/{php-fpm.conf.default,php-fpm.conf}
    291. cp $php_install_path/etc/php-fpm.d/{www.conf.default,www.conf}
    292. # 7. 配置php7
    293. cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
    294. cp php.ini-production $php_install_path/etc/php.ini
    295. sed -i 's#;date.timezone =#date.timezone = Asia/Shanghai#' /usr/local/php/etc/php.ini
    296. sed -i 's#max_execution_time = .*#max_execution_time = 300#' /usr/local/php/etc/php.ini
    297. sed -i 's#post_max_size =.*#post_max_size = 32M#' /usr/local/php/etc/php.ini
    298. sed -i 's#max_input_time = .*#max_input_time = 300#' /usr/local/php/etc/php.ini
    299. # 8. 启动php-fpm
    300. systemctl enable --now php-fpm &>/dev/null
    301. if ss -antl |grep :9000 &>/dev/null ; then
    302. info "+++++php以启动 √+++++"
    303. fi
    304. fi
    305. }
    306. function install_jdk(){
    307. if [ ! -f /etc/profile.d/java.sh ]; then
    308. info +++++++++++++++++++++++安装jdk1.8+++++++++++++++++++++++
    309. info "1. 安装jdk1.8"
    310. cd $packages && tar -xf jdk-8u91-linux-x64.tar.gz
    311. mv jdk1.8.0_91/ /usr/local/java
    312. info "2. 配置环境变量"
    313. echo "export JAVA_HOME=/usr/local/java" >>/etc/profile.d/java.sh
    314. echo "export PATH=$PATH:$JAVA_HOME/bin" >>/etc/profile.d/java.sh
    315. echo "export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar" >>/etc/profile.d/java.sh
    316. echo "export JRE_HOME=$JAVA_HOME/jre" >>/etc/profile.d/java.sh
    317. warnning "你需要手动执行一条命令【source /etc/profile】"
    318. source /etc/profile
    319. if java -version |grep java &>/dev/null ; then
    320. info "+++++jdk以安装 √+++++"
    321. fi
    322. fi
    323. }
    324. function install_lnmp(){
    325. install_nginx
    326. install_mysql
    327. install_redis
    328. install_php
    329. }
    330. function install_all(){
    331. install_zabbix_agent
    332. install_docker
    333. install_nginx
    334. install_mysql
    335. install_redis
    336. install_php
    337. }
    338. function mian(){
    339. INSTALL=${1:-'lnmp'} # 默认值
    340. # 判断输入安装服务
    341. if [ $INSTALL == '1' -o $INSTALL == 'init' ]; then
    342. source $filedir/init.sh
    343. elif [ $INSTALL == '2' -o $INSTALL == 'docker' ]; then
    344. install_docker
    345. elif [ $INSTALL == '3' -o $INSTALL == 'java' -o $INSTALL == 'jdk' ]; then
    346. install_jdk
    347. elif [ $INSTALL == '4' -o $INSTALL == 'zabbix_agent' ]; then
    348. install_zabbix_agent
    349. elif [ $INSTALL == '5' -o $INSTALL == 'nginx' ]; then
    350. install_nginx
    351. elif [ $INSTALL == '6' -o $INSTALL == 'mysql' ]; then
    352. install_mysql
    353. elif [ $INSTALL == '7' -o $INSTALL == 'redis' ]; then
    354. install_redis
    355. elif [ $INSTALL == '8' -o $INSTALL == 'php' ]; then
    356. install_php
    357. elif [ $INSTALL == '9' -o $INSTALL == 'lnmp' ]; then
    358. install_lnmp
    359. elif [ $INSTALL == '10' -o $INSTALL == 'all' ]; then
    360. install_all
    361. else
    362. source $filedir/info.sh
    363. info "请输入"
    364. info "1.init 2.docker 3.java 4.zabbix_agent 5.nginx"
    365. info "6.mysql 7.redis 8.php 9.lnmp 10.all"
    366. fi
    367. }
    368. mian $1