文章目录
- 1:环境介绍
- 2:安装nginx
- 1:安装所需插件
- 1:安装gcc
- 2:pcre、pcre-devel安装
- 3:zlib安装
- 4:安装openssl
- 2:安装nginx
- 3:安装docker
- 1:系统操作
- 2:安装docker
- 4:安装docker-compose
- 5:安装mysql
- 6:后端项目部署启动流程
- 1:拉取镜像
- 2:通过docker-compose创建容器、启动镜像
- 7:前端项目部署流程
- 1:上传前端ui,web两个项目的编译生成的dist文件
- 2:配置nginx文件(用于端口监听和服务转发)
1:环境介绍
- Centos7
- nginx:1.9.9+
- Docker:19.03.13+
- docker-compose : 1.18.0+
- mysql:5.7+
2:安装nginx
如果安装过此步可以跳过
1:安装所需插件
1:安装gcc
gcc是linux下的编译器在此不多做解释,感兴趣的小伙伴可以去查一下相关资料,它可以编译 C,C++,Ada,Object C和Java等语言
- 命令:查看gcc版本
[root@localhost ~]# gcc -v
- 一般阿里云的centOS7里面是都有的,没有安装的话会提示命令找不到
- 安装命令:
[root@localhost ~]# yum -y install gcc
2:pcre、pcre-devel安装
pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。
- 安装命令:
[root@localhost ~]# yum install -y pcre pcre-devel
3:zlib安装
zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip,所以需要安装
- 安装命令:
[root@localhost ~]# yum install -y zlib zlib-devel
4:安装openssl
openssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔。。。。。。
- 安装命令:
[root@localhost ~]# yum install -y openssl openssl-devel
2:安装nginx
首先下载nginx
- 下载nginx安装包
[root@localhost ~]# wget http://nginx.org/download/nginx-1.9.9.tar.gz
- 把压缩包解压到usr/local/java(如果:如果没有java目录自己创建)
[root@localhost ~]# mkdir -p /usr/local/java #创建java目录
[root@localhost ~]# tar -zxvf nginx-1.9.9.tar.gz -C /usr/local/java #解压到java目录
- 切换到/usr/local/java/nginx-1.9.9/下面
[root@localhost ~]# cd /usr/local/java/nginx-1.9.9
- 执行三个命令:
[root@localhost ~]# ./configure
[root@localhost ~]# make && make install
- 切换到/usr/local/nginx安装目录
[root@liulei local]# cd /usr/local/nginx/
- 配置nginx的配置文件nginx.conf文件,主要也就是端口
[root@liulei nginx]# vim conf/nginx.conf
可以按照自己服务器的端口使用情况来进行配置
ESC键,wq!强制保存并退出
7. 启动nginx服务
切换目录到/usr/local/nginx/sbin下面
[root@liulei nginx]# cd /usr/local/nginx/sbin
- 启动nginx命令:
[root@liulei sbin]# ./nginx
- 查看nginx服务是否启动成功
[root@liulei sbin]# ps -ef | grep nginx
- 访问你的服务器IP
说明安装和配置都没问题OK了 - nginx.conf说明
#user nobody;
worker_processes 1; #工作进程:数目。根据硬件调整,通常等于cpu数量或者2倍cpu数量。
#错误日志存放路径
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid; # nginx进程pid存放路径
events {
worker_connections 1024; # 工作进程的最大连接数量
}
http {
include mime.types; #指定mime类型,由mime.type来定义
default_type application/octet-stream;
# 日志格式设置
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main; #用log_format指令设置日志格式后,需要用access_log来指定日志文件存放路径
sendfile on; #指定nginx是否调用sendfile函数来输出文件,对于普通应用,必须设置on。
如果用来进行下载等应用磁盘io重负载应用,可设着off,以平衡磁盘与网络io处理速度,降低系统uptime。
#tcp_nopush on; #此选项允许或禁止使用socket的TCP_CORK的选项,此选项仅在sendfile的时候使用
#keepalive_timeout 0; #keepalive超时时间
keepalive_timeout 65;
#gzip on; #开启gzip压缩服务
#虚拟主机
server {
listen 80; #配置监听端口号
server_name localhost; #配置访问域名,域名可以有多个,用空格隔开
#charset koi8-r; #字符集设置
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#错误跳转页
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
# root html; #根目录
# fastcgi_pass 127.0.0.1:9000; #请求转向定义的服务器列表
# fastcgi_index index.php; # 如果请求的Fastcgi_index URI是以 / 结束的, 该指令设置的文件会被附加到URI的后面并保存在变量$fastcig_script_name中
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl; #监听端口
# server_name localhost; #域名
# ssl_certificate cert.pem; #证书位置
# ssl_certificate_key cert.key; #私钥位置
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5; #密码加密方式
# ssl_prefer_server_ciphers on; # ssl_prefer_server_ciphers on; #
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
3:安装docker
系统操作:关闭防火墙的原因
1:系统操作
- 关闭firewalld防火墙
[root@localhost ~]# systemctl stop firewalld
- 禁止开机启动
[root@localhost ~]# systemctl disable firewalld
- 修改系统编码
[root@localhost ~]# vim /etc/sysconfig/i18n
添加内容LANG=“zh_CN.UTF-8”
2:安装docker
- 安装一些必要的系统工具
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加软件源信息
[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新 yum 缓存
[root@localhost ~]# yum makecache fast
- 安装 Docker-ce
[root@localhost ~]# yum -y install docker-ce
- 启动 Docker 后台服务
[root@localhost ~]# systemctl start docker
- 查看 Docker 启动状态
[root@localhost ~]# systemctl status docker
- docker常用命令
Docker常用命令:
[root@localhost ~]# systemctl start docke #启动docker
[root@localhost ~]# systemctl stop docker #停止docker
[root@localhost ~]# systemctl restart docker #重启docker
[root@localhost ~]# systemctl status docker #查看docker状态
[root@localhost ~]# systemctl enable docker #加入开机自启
[root@localhost ~]# systemctl disable docker #解除开机自启
4:安装docker-compose
在安装docker-compose之前首先检查是否安装了python-pip
终端输入
- 检查pip是否安装命令
[root@localhost ~] pip -v
- 确认没有安装python-pip,则以此执行
[root@localhost ~]# yum -y install epel-release
[root@localhost ~]# yum -y install python-pip
[root@localhost ~]# pip install --upgrade pip
[root@localhost ~]# pip install docker-compose --ignore-installed requests
[root@localhost ~]# docker-compose -version #查看docker-compose版本
/usr/lib/python2.7/site-packages/paramiko/transport.py:33: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in a future release.
from cryptography.hazmat.backends import default_backend
docker-compose version 1.26.2, build unknown
- 版本信息
docker-compose version 1.26.2, build unknown
5:安装mysql
- 创建用户和组
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -g mysql mysql
- 修改linux 系统用户mysql的密码
[root@localhost ~]# passwd mysql
#设置密码为MYsql!@#$%12345
- 准备安装包:上传准备好的包到/usr/local下
[root@localhost ~]# cd /usr/local
[root@localhost local]# tar -zxvf mysql-5.7.31-el7-x86_64.tar.gz
[root@localhost local]# mv mysql-5.7.31-el7-x86_64 mysql
- 为mysql目录改变所属用户和组
[root@localhost local]# chown -R mysql:mysql mysql
- 创建数据目录和日志目录:切换到mysql用户
[root@localhost local]# su mysql
[mysql@localhost local]# cd /usr/local/mysql
[mysql@localhost mysql]# mkdir data log
- 初始化数据库:记录下初始化密码
[mysql@localhost mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
- 配置文件
[mysql@localhost mysql]# vim mysql.cnf
# 添加以下内容至文件
[client]
port=43306
socket=/usr/local/mysql/mysql.sock
[mysqld]
#忽略大小写
lower_case_table_names = 1
#端口
port=43306
#设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
pid-file=/usr/local/mysql/mysql.pid
socket=/usr/local/mysql/mysql.sock
log_error=/usr/local/mysql/log/error.log
collation_server=utf8_general_ci
# 服务端使用的字符集默认为8比特编码的latin1字符集
character_set_server=utf8
log-bin=/usr/local/mysql/log/mysql-bin
server-id=100
- 启动mysql
[mysql@localhost mysql]# bin/mysqld_safe --defaults-file=/usr/local/mysql/mysql.cnf --user=mysql &
- 查看是否启动
[mysql@localhost mysql]# ps aux|grep mysql
- 为sock文件创建软连接:不设置,进入数据库会报错
[mysql@localhost mysql]# ln -s /usr/local/mysql/mysql.sock /tmp/mysql.sock
- 进入数据库
[mysql@localhost mysql]# bin/mysql -u root -p
# 输入之前记录的初始密码
- 修改数据库密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123123';
- 退出数据库,用新密码
mysql> exit;
[mysql@localhost mysql]# mysql -u root -p
- 远程访问的授权
mysql> create user 'root'@'%' identified with mysql_native_password by 'HZct@123';
mysql> grant all privileges on *.* to 'root'@'%' with grant option;
mysql> flush privileges;
mysql> exit;
- 执行sql文件(这个是示例!!!)
#上传sql文件
[root@csp-boot-test-128 ~]# chown -R mysql:mysql 文件夹名称/文件名称 #切换文件所在用户
[root@csp-boot-test-128 ~]# mv 文件/文件夹名称 /home/mysql/ #移动到sql文件/文件夹目录
[root@csp-boot-test-128 ~]#su mysql #切换到mysql用户
[mysql@csp-boot-test-128 root]$ cd /usr/local/mysql #进入到mysql目录下
[mysql@localhost mysql]# bin/mysql -u root -p #连接数据库
# 输入之前记录的初始密码
mysql> create database csp; #创建数据库
mysql> show databases; #查看是否创建成功
mysql>use csp; #使用csp数据库
mysql>source /home/mysql/sql文件 #执行命令进行导入
mysql>show tables; #查看是否导入
mysql>exit
- 执行sql文件(创建这四个数据库)
create database microservice-auth default character set utf8 collate utf8_general_ci;
create database microservice-exam default character set utf8 collate utf8_general_ci;
create database microservice-gateway default character set utf8 collate utf8_general_ci;
create database microservice-user default character set utf8 collate utf8_general_ci;
6:后端项目部署启动流程
1:拉取镜像
- 拉取auth-service服务
[root@localhost ~]# sudo docker pull registry.cn-hangzhou.aliyuncs.com/hzct-microservice-exam/auth-service:[镜像版本号]
- 拉取config-service服务
[root@localhost ~]# $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/hzct-microservice-exam/config-service:[镜像版本号]
- 拉取exam-service服务
[root@localhost ~]# $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/hzct-microservice-exam/exam-service:[镜像版本号]
- 拉取gateway-service服务
[root@localhost ~]# $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/hzct-microservice-exam/gateway-service:[镜像版本号]
- 拉取monitor-service服务
[root@localhost ~]# $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/hzct-microservice-exam/monitor-service:[镜像版本号]
- 拉取msc-service服务
[root@localhost ~]# $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/hzct-microservice-exam/msc-service:[镜像版本号]
- 拉取user-service服务
[root@localhost ~]# $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/hzct-microservice-exam/user-service:[镜像版本号]
2:通过docker-compose创建容器、启动镜像
- 创建exam目录
[root@localhost ~]# mkdir -p /opt/exam
- 切换到exam目录
[root@iZbp1268ldc0zhxbsmny6xZ opt]# cd /opt/exam/
[root@iZbp1268ldc0zhxbsmny6xZ exam]#
- 把deploy打包上传到该目录
[root@iZbp1268ldc0zhxbsmny6xZ exam]# rz
- linux中提示没有unzip命令解决方法(此步可忽略)
使用unzip命令解压.zip文件,可能没有安装unzip软件
命令: yum list | grep zip/unzip #获取安装列表 获取不到说明没有安装
安装命令: yum install zip #提示输入时,请输入y;
安装命令:yum install unzip #提示输入时,请输入y;
解压命令:unzip xxx.zip #解压
- 进入该目录运行下面的命令
[root@liulei ~]# cd /opt/exam/deploy
- 首先运行docker-compose-base.yml(基本插件和监控模块)
# 运行此文件的命令:
[root@liulei deploy]# docker-compose -f docker-compose-base.yml up
特别说明:此步初次运行可能会比较慢,需要下载对应的插件,和网络有很大关系
此文件ip地址和端口号需要修改为对应的
- 再运行docker-compose-services.yml(后端服务模块)
# 运行此文件的命令:
[root@liulei deploy]# docker-compose -f docker-compose-services.yml up
特别说明:此文件ip地址和端口号需要修改为对应的
- 至此后端所需插件和模块都启动完成了。
- 温馨提示:访问这个地址可以查看服务的启动情况
http://ip:8500/
7:前端项目部署流程
1:上传前端ui,web两个项目的编译生成的dist文件
- nginx默认存放dist文件的路径为
[root@liulei ~]# cd /usr/local/nginx/html/
[root@liulei html]# ll
-rw-r--r--. 1 root root 537 9月 26 17:33 50x.html
-rw-r--r--. 1 root root 612 9月 26 17:33 index.html
- 首先创建存放dist文件的文件夹ui、web
[root@liulei exam]# mkdir -p /usr/local/nginx/html/{ui,web}
- 把spring-microservice-exam-web编译的dist文件放到web目录下
- 把spring-microservice-exam-ui编译的dist文件放到ui目录下
- 两个文件打的都是zip包
- 解压命令
[root@liulei ui]# unzip dist.zip
[root@liulei web]# unzip dist.zip
2:配置nginx文件(用于端口监听和服务转发)
- 进入nginx的配置文件
[root@liulei ui]# vim /usr/local/nginx/conf/nginx.conf
- 配置web(9528)、ui(9527)的监听
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#root /usr/local/nginx/html/dist;
index index.html index.htm;
upstream gateway-service {
server 192.168.1.126:9180 max_fails=3 fail_timeout=30s;
}
server {
listen 9527;
server_name 192.168.1.126;
location ~* /a(pi|uth) {
proxy_pass http://192.168.1.126:9180;
}
location ~* /admin {
proxy_pass http://192.168.1.126:9527;
}
location / {
root html/ui/dist;
index index.html index.htm;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.html?s=$1 last;
break;
}
}
}
server {
listen 9528;
server_name 192.168.1.126;
location ~* /a(pi|uth) {
proxy_pass http://192.168.1.126:9180;
}
location ~* /admin {
proxy_pass http://192.168.1.126:9527;
}
location / {
root html/web/dist;
index index.html index.htm;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.html?s=$1 last;
break;
}
}
}
server {
listen 81;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
- 配置好之后
按 Ese 、Shift+:wq!(退出)
- 配置好之后重新启动nginx,进入sbin目录
[root@liulei html]# cd /usr/local/nginx/sbin/
[root@liulei sbin]#
- 执行启动命令
[root@liulei sbin]# ./nginx
- 如果报错
[root@liulei sbin]# ./nginx
nginx: [emerg] bind() to 0.0.0.0:81 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:81 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:81 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:81 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:81 failed (98: Address already in use)
nginx: [emerg] still could not bind()
[root@liulei sbin]# netstat -tunlp|grep 81
tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN 88055/nginx: master
tcp6 0 0 :::9181 :::* LISTEN 88832/docker-proxy
[root@liulei sbin]# kill 88055
- 就是81端口你启动了,先查询关闭再启动就好了。命令分别为
[root@liulei sbin]# netstat -tunlp|grep 81 #查询进程号
[root@liulei sbin]# kill 88055 #关闭进程
- 前端登录界面截图
- 前端登录成功截图