搭建应用服务器(tomcat、mysql、nginx、https)
主要内容
- linux系统上软件的安装
- 应用部署
- https 证书申请、配置过程及踩得坑
- nginx 反向代理、动静分离、集群配置
准备工作
- 硬件centerOS服务器、一台nginx服务器、两台应用服务器、一台数据库服务器(网络互通)
- Xshell、Xftp连接工具(连接服务器、上传文件用到)
- jdk安装文件、tomcat安装文件、nginx安装文件(官网下载)
jdk 安装
- 将jdk-8u191-linux-x64.tar.gz上传至服务
- mkdir /opt/jdk
- tar -zxvf jdk-8u191-linux-x64.tar.gz -C /opt/jdk 解压到指定目录
- 配置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
- 校验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 安装
- rpm -qa | grep tomcat 查看是否曾经安装
- 官网下载tomcat https://tomcat.apache.org/download
- 将tomcat安装文件上传至服务器(通过Xftp上传)
- 解压安装文件
tar -zxvf apache-tomcat-7.0.99.tar.gz -C /opt
mv apache-tomcat-7.0.99/ tomcat
- 启动、关闭tomcat 执行以下命令启动,关闭tomcat
cd /opt/tomcat/bin
./start.sh
./shutdown.sh
或者通过ps -ef |java 命令查找进程,然后kill掉
- 需要安全组开放8080端口TCP:3306-20000 有些服务器因为对端口默认是限制的,这里是以腾讯云平台为例
- 访问http:localhost:8080能够进入tomcat首页即可"
mysql安装(centos7.5)
安装YUM Repo
- 由于CentOS 的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
- 然后进行repo的安装:
rpm -ivh mysql57-community-release-el7-9.noarch.rpm
执行完成后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repo mysql-community-source.repo
使用yum命令即可完成安装
- 安装命令:yum install mysql-server
- 启动msyql:systemctl start mysqld #启动MySQL
- 获取安装时的临时密码(在第一次登录时就是用这个密码):grep 'temporary password' /var/log/mysqld.log
- 倘若没有获取临时密码,则删除原来安装过的mysql残留的数据rm -rf /var/lib/mysql,再启动mysql
systemctl start mysqld
登录
- mysql -u root -p 输入刚刚获取的随机密码
- 若登录不了,则进行以下配置,vim /etc/my.cnf(注:windows下修改的是my.ini)
在文档内搜索mysqld定位到[mysqld]文本段:
在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密码验证的过程 - 修改密码,先删除密码强度校验,再修改密码
SHOW VARIABLES LIKE 'validate_password%';
set global validate_password_policy=LOW;
ALTER USER 'root'@'*' IDENTIFIED BY '123456';
开启远程登录
- 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
安装过程中错误
- 网上查了一下据说5.7 版本password 字段改成authentication_string password函数还是原来的password函数
update user set authentication_string=password('123') where user='root';
nginx安装
- 下载安装介质 http://nginx.org/en/download.html
- 通过Xftp上传至服务器
- 解压到指定目录
tar -zxvf nginx-1.14.2.tar.gz -C /opt/nginx-1.14.2
- 进入目录 执行./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
- 编译安装
make
make install
- 配置环境变量
找到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
- 查看nginx是否安装成功 nginx -v
- 启动nginx
# cd /usr/local/nginx
# nginx -c conf/nginx.conf
启动成功后,将在浏览器打开 ip加端口号 默认端口号是80
- 启动、停止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
- 开机自启动
即在rc.local增加启动代码就可以了。
vi /etc/rc.local
增加一行 /usr/local/nginx/sbin/nginx
设置执行权限:
chmod 755 rc.local - 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支持
- 需要针对这个服务器申请https证书 申请之前需要本机服务器request.csr,并产生私钥
- 给证书颁发机构发证,cer文件
- nginx 增加https 配置
- 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;
}
}
- 重新加载配置。
应用部署
- 将应用包拷贝到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
- 查看是否安裝nfs
rpm –qa|grep nfs
rpm –qa|grep portmap
- 安装 nfs 和 rpcbind
yum install nfs-utils rpcbind
- 增加 nfs 配置文件
vi /etc/exports
输入
/sharedata 192.168.0.1(rw)次
/sharedata 192.168.0.2(rw) 主
- 创建共享文件夹
mkdir sharedata
chmod -R 777 sharedata
- 启动 nfs 和 rpcbind 服务
service rpcbind start
service nfs start
service rpcbind status
service nfs status
客戶端2
- 客户端服务器也需要安装 nfs 和 rpcbind 服务,参考服务端,启动,检查服务是否正常。
service rpcbind start
service nfs start
service rpcbind status
service nfs status
- 显示 NFS 服务器共享目录列表
showmount -e 192.168.0.1
- 创建文件夹
mkdir /sharedata
chmod –R 777 /sharedata
- 挂载服务端的共享目录
mount -t nfs -o nolock,nfsvers=3,vers=3 192.168.0.1:/home/adam/static
/sharedata /sharedata
注意共享目录子权限问题。
nginx、tomcat前动静分离
- Nginx 反向代理服务器处理静态资源比 Tomcat 性能高很多
- 将部署包拷贝到nginx下
cp -rf /opt/tomcat/webapps/appName /usr/local/nginx/html/
删除WEB-INF
rm -rf WEB-INF/
- 修改nginx配置
- 下面是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证书的过程以及踩得坑。