美文网首页
完整搭建linux应用服务器(tomcat、nginx、http

完整搭建linux应用服务器(tomcat、nginx、http

作者: 科比可比克 | 来源:发表于2020-03-31 21:52 被阅读0次

    搭建应用服务器(tomcat、mysql、nginx、https)

    主要内容

    1. linux系统上软件的安装
    2. 应用部署
    3. https 证书申请、配置过程及踩得坑
    4. nginx 反向代理、动静分离、集群配置

    准备工作

    1. 硬件centerOS服务器、一台nginx服务器、两台应用服务器、一台数据库服务器(网络互通)
    2. Xshell、Xftp连接工具(连接服务器、上传文件用到)
    3. jdk安装文件、tomcat安装文件、nginx安装文件(官网下载)

    jdk 安装

    1. 将jdk-8u191-linux-x64.tar.gz上传至服务
    2. mkdir /opt/jdk
    3. tar -zxvf jdk-8u191-linux-x64.tar.gz -C /opt/jdk 解压到指定目录
    4. 配置jdk环境变量,修改profile配置文件
    mkdir /opt/jdk
    # 配置jdk环境变量
    vi /etc/profile
    export JAVA_HOME=/opt/jdk/jdk1.8.0_191;
    export PATH=$PATH:$JAVA_HOME/bin;
    export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
    #使配置生效
    source profile
    
    1. 校验jdk是否安装成功java -version 能够正常查看jdk版本即可
    [root@VM_0_10_centos jdk1.8.0_191]# java -version
    java version "1.8.0_191"
    Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
    [root@VM_0_10_centos jdk1.8.0_191]# 
    

    tomcat 安装

    1. rpm -qa | grep tomcat 查看是否曾经安装
    2. 官网下载tomcat https://tomcat.apache.org/download
    3. 将tomcat安装文件上传至服务器(通过Xftp上传)
    4. 解压安装文件
    tar -zxvf apache-tomcat-7.0.99.tar.gz -C /opt
    mv apache-tomcat-7.0.99/ tomcat
    
    1. 启动、关闭tomcat 执行以下命令启动,关闭tomcat
    cd /opt/tomcat/bin
    ./start.sh
    ./shutdown.sh
    或者通过ps -ef |java 命令查找进程,然后kill掉
    
    1. 需要安全组开放8080端口TCP:3306-20000 有些服务器因为对端口默认是限制的,这里是以腾讯云平台为例
    2. 访问http:localhost:8080能够进入tomcat首页即可"

    mysql安装(centos7.5)

    安装YUM Repo

    1. 由于CentOS 的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。
    wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
    
    1. 然后进行repo的安装:
    rpm -ivh mysql57-community-release-el7-9.noarch.rpm
    执行完成后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repo mysql-community-source.repo
    

    使用yum命令即可完成安装

    1. 安装命令:yum install mysql-server
    2. 启动msyql:systemctl start mysqld #启动MySQL
    3. 获取安装时的临时密码(在第一次登录时就是用这个密码):grep 'temporary password' /var/log/mysqld.log
    4. 倘若没有获取临时密码,则删除原来安装过的mysql残留的数据rm -rf /var/lib/mysql,再启动mysql
      systemctl start mysqld

    登录

    1. mysql -u root -p 输入刚刚获取的随机密码
    2. 若登录不了,则进行以下配置,vim /etc/my.cnf(注:windows下修改的是my.ini)
      在文档内搜索mysqld定位到[mysqld]文本段:
      在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密码验证的过程
    3. 修改密码,先删除密码强度校验,再修改密码
     SHOW VARIABLES LIKE 'validate_password%'; 
      set global validate_password_policy=LOW; 
      ALTER USER 'root'@'*' IDENTIFIED BY '123456'; 
    

    开启远程登录

    1. grant all privileges on 数据库名.表名 to 创建的用户名(root)@"%" identified by "密码";
    grant all privileges on *.* to root@"*" identified by "123456789";
    flush privileges;
    

    常用mysql启动、停止命令

    启动mysql
    systemctl start mysqld
    重启
    systemctl restart mysqld
    关闭
    systemctl stop mysqld
    查看启动状态
    systemctl status mysqld 
    设置(开启/关闭)开机启动
    systemctl enable/disable mysqld 
    查看版本
    select version();
    

    设置常用配置

    vi /etc/my.cnf
    #添加 [mysqld] character_set_server=utf8 init_connect='SET NAMES utf8'
    配置文件:/etc/my.cnf 日志文件:/var/log//var/log/mysqld.log 服务启动脚本:/usr/lib/systemd/system/mysqld.service socket文件:/var/run/mysqld/mysqld.pid
    

    安装过程中错误

    1. 网上查了一下据说5.7 版本password 字段改成authentication_string password函数还是原来的password函数
    update user set authentication_string=password('123') where user='root';
    

    nginx安装

    1. 下载安装介质 http://nginx.org/en/download.html
    2. 通过Xftp上传至服务器
    3. 解压到指定目录
    tar -zxvf nginx-1.14.2.tar.gz -C /opt/nginx-1.14.2
    
    1. 进入目录 执行./configure
    出现错误
    ./configure: error: C compiler cc is not found
    出现这个错误,是因为gcc包没有安装
    yum -y install gcc
    
    出现错误:
    ./configure: error: the HTTP rewrite module requires the PCRE library.
    You can either disable the module by using --without-http_rewrite_module
    option, or install the PCRE library into the system, or build the PCRE library
    statically from the source with nginx by using --with-pcre=<path> option.
    执行
    # yum -y install pcre-devel 
    
    如果报错:
    Require the zlib library
    则执行安装
    # yum install -y zlib-devel
    
    1. 编译安装
    make
    make install
    
    1. 配置环境变量
    找到nginx安装目录
    whereis nginx
    nginx:/usr/local/nginx
    在/etc/profile 中加入配置
    # vi /etc/profile
    在配置文件中加入:
    #nginx configure
    export NGINX_HOME=/usr/local/nginx
    export PATH=$PATH:$NGINX_HOME/sbin
    使配置生效
    # source /etc/profile
    
    1. 查看nginx是否安装成功 nginx -v
    2. 启动nginx
    # cd /usr/local/nginx
    # nginx -c conf/nginx.conf
    

    启动成功后,将在浏览器打开 ip加端口号 默认端口号是80

    1. 启动、停止nginx 命令如下
    cd /usr/local/nginx/sbin/
    ./nginx 启动
    ./nginx -t 测试nginx配置是否正确
    ./nginx -s stop此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
    ./nginx -s quit此方式停止步骤是待nginx进程处理任务完毕进行停止。
    ./nginx -s reload 重新加载nginx配置
    查询nginx进程:
    ps aux|grep nginx
    
    1. 开机自启动
      即在rc.local增加启动代码就可以了。
      vi /etc/rc.local
      增加一行 /usr/local/nginx/sbin/nginx
      设置执行权限:
      chmod 755 rc.local
    2. Nginx开启SSL模块 后面需要配置https
     cd /usr/local/src/nginx-1.11.3
     ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
     make
    

    nginx 对https支持

    1. 需要针对这个服务器申请https证书 申请之前需要本机服务器request.csr,并产生私钥
    2. 给证书颁发机构发证,cer文件
    3. nginx 增加https 配置
    4. https证书相关过程见另一篇文章
    server {
           listen       443;
           server_name domain;
           ssl on;
           ssl_certificate /soft/domain.crt;
           ssl_certificate_key /soft/server0228.key;
           ssl_session_cache    shared:SSL:1m;
           ssl_session_timeout 5m;
           ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
            location / {
            client_max_body_size    16m;
                  client_body_buffer_size 128k;
                  proxy_pass              http://domain;
                  proxy_set_header        Host $host;
                  proxy_set_header        X-Real-IP $remote_addr;
                  proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header           X-Forwarded-Proto https;
                  proxy_next_upstream   off;
                  proxy_connect_timeout   30;
                  proxy_read_timeout      300;
                  proxy_send_timeout      300;
            }
        }
    
    1. 重新加载配置。

    应用部署

    1. 将应用包拷贝到tomcat下的webapps目录下即可,根据实际应用要求修改相关参数、比如编码、连接数、端口等

    nginx基于 sticky 集群部署

    下载解压nginx sticky

    cd /opt/nginx/nginx-1.14.2/src/
    wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz
    tar -zcxf master.tar.gz
    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/opt/nginx/nginx-1.14.2/src/nginx-sticky
    

    查看nginx 编译参数

    /usr/local/nginx/sbin/nginx –V
    service nginx stop
    cd /usr/local/nginx-1.12.2
    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
    make
    cd /usr/local/nginx/sbin
    mv nginx nginx.old
    //执行make之后再src目录下面的objs下会生成一个nginx文
    件,需要替换开始的文件
    cp /usr/local/nginx-1.12.2/objs/nginx ./ 
    

    关闭nginx ,加上sticky重新编译

    nginx 配置文件添加sticky配置

    upstream domain
    {
        sticky;
        server serverip1:8080 weight=5 max_fails=2 fail_timeout=30s;
        server serverip2:8080 weight=5 max_fails=2 fail_timeout=30s;
    }
    

    搭建nfs共享目录

    因为集群部署的话就需要有文件共享目录,因为没有使用阿里云的oss服务,所以只能自己通过ntf方式共享文件夹

    主机端1

    1. 查看是否安裝nfs
    rpm –qa|grep nfs
    rpm –qa|grep portmap
    
    1. 安装 nfs 和 rpcbind
    yum install nfs-utils rpcbind
    
    1. 增加 nfs 配置文件
    vi /etc/exports
    输入
    /sharedata 192.168.0.1(rw)次
    /sharedata 192.168.0.2(rw) 主
    
    1. 创建共享文件夹
    mkdir sharedata
    chmod -R 777 sharedata
    
    1. 启动 nfs 和 rpcbind 服务
    service rpcbind start
    service nfs start
    service rpcbind status
    service nfs status
    

    客戶端2

    1. 客户端服务器也需要安装 nfs 和 rpcbind 服务,参考服务端,启动,检查服务是否正常。
    service rpcbind start
    service nfs start
    service rpcbind status
    service nfs status
    
    1. 显示 NFS 服务器共享目录列表
    showmount -e 192.168.0.1
    
    1. 创建文件夹
    mkdir /sharedata
    chmod –R 777 /sharedata
    
    1. 挂载服务端的共享目录
    mount  -t  nfs  -o  nolock,nfsvers=3,vers=3  192.168.0.1:/home/adam/static
    /sharedata /sharedata
    

    注意共享目录子权限问题。

    nginx、tomcat前动静分离

    1. Nginx 反向代理服务器处理静态资源比 Tomcat 性能高很多
    2. 将部署包拷贝到nginx下
    cp -rf /opt/tomcat/webapps/appName /usr/local/nginx/html/
    删除WEB-INF
    rm -rf WEB-INF/
    
    1. 修改nginx配置
    2. 下面是nginx.conf的完整配置
    #user  nobody;
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        client_header_buffer_size 128k;
        client_body_buffer_size 1m;
        proxy_buffer_size 32k;
        proxy_buffers 64 32k;
        proxy_busy_buffers_size 1m;
        proxy_temp_file_write_size 512k;
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
        sendfile        on;
        keepalive_timeout  65;
        gzip  on;
        upstream domain
        {
           sticky;
          server ip:port weight=5 max_fails=2 fail_timeout=30s;
          server ip:port weight=5 max_fails=2 fail_timeout=30s;
        }
    
        server {
            listen       80;
            server_name domain;
            location / {
                proxy_pass http://ip:port/appName/;
                proxy_cookie_path /appName /;
            }
           location ~/appName/.*\.(js|css|ico|png|jpg|eot|svg|ttf|woff)?$
          {
            root /usr/local/nginx/html;
            expires 30d;
          }
           location ~/appName/ {
            proxy_pass http://ip:port;
            proxy_cookie_path /appName / ;
            proxy_connect_timeout 500s;
            proxy_read_timeout 500s;
            proxy_send_timeout 500s;
            client_max_body_size 20m;
        }
        #另一个应用
          location /forms_tb_client/login/{
                proxy_pass http://ip2:port2;
            }
            rewrite ^(.*)$ https://$host$1 permanent;
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
        # HTTPS server
        server {
           listen       443;
           server_name domain;
           ssl on;
           ssl_certificate /soft/domain.crt;
           ssl_certificate_key /soft/server0228.key;
           ssl_session_cache    shared:SSL:1m;
           ssl_session_timeout 5m;
           ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
            location / {
            client_max_body_size    16m;
                  client_body_buffer_size 128k;
                  proxy_pass              http://domain;
                  proxy_set_header        Host $host;
                  proxy_set_header        X-Real-IP $remote_addr;
                  proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header           X-Forwarded-Proto https;
                  proxy_next_upstream   off;
                  proxy_connect_timeout   30;
                  proxy_read_timeout      300;
                  proxy_send_timeout      300;
            }
        }
    }
    

    总结

    以上就是整个应用服务器搭建、部署过程,其中https申请的过程会根据不同的证书颁发机构不同,生成现有文件的过程也不同,其中阿里云上面还提供免费的证书,如果不是很正式的项目可以在阿里云上申请一个免费的https证书试一下。我另一篇文章会写一下处理https证书的过程以及踩得坑。

    相关文章

      网友评论

          本文标题:完整搭建linux应用服务器(tomcat、nginx、http

          本文链接:https://www.haomeiwen.com/subject/fexnuhtx.html