====================请跳过,以下叨叨念与本文无大关系=================
【先说点废话】本来想搭dubbo分布式环境的,但是阿里云EDAS估计流量投放较大,鬼使神差就入了EDAS的船,花了十块大洋成为包年的屌丝版人民币玩家。根据教程把玩后发现,有如下优点和不足:
优点:分布式服务框架 HSF(好舒服)轻量配置即可,甚至不用搭建注册中心,监控台等,项目运维自动化,吧啦吧啦优点看文档玩一次就知道了;
我的不足:穷的只有一台云服。搭个云上测试环境,要学下docker才能对服务器增删改查,部署Nginx+redis+mysql这些常用的中间件
阿里云优惠券,点入免费领哦~
====================以上叨叨念纯属发泄下贫穷的可怕=================
【目标】
* EDAS单机配置多应用MVC项目+常用中间件 *
【准备】
1.支付宝至少一块钱(具体价格见官网)
2.至少一台可以更换镜像的阿里云服(我的华东2,不清楚所有区域是否都可用)
阿里云服务器ESC优惠券,点入免费领券购买,算是对我的小小支持
3.需要域名访问的话你懂的,域名备案去。
其他就是有折腾的时间和耐心。。。
【部署EDAS单机多应用】
1.开通EDAS服务,乞丐版1元/月(实际看广网报价)
EDAS服务优惠券,点入免费领券购买,算是对我的小小支持
2.通过 导入 ECS 自动安装 Agent,按照最后一个部署方式最方便。
3.导入ESC
由于官方教程优先配置是用于单机单应用,所有根据下图操作,我们要改成Docker+Swarm的部署方式支持单机多应用。
其他参数默认或自己取名,主要集群类型必须Swarm。创建好后就选这个集群,其他的按教程走就行。
4.按着教程配个应用试试,至于SLB那个,一台服务器就省省心吧。
5.把4的不走在走一遍,看看多应用是否ok。实质多应用就是多个tomcat环境。
【部署常用中间件】
目前就调了Nginx+redis+mysql这三个,本来想直接原始安装,想想这样和高大上的docker部署不搭,所以学了点docker皮毛,开始docker模式部署这些中间件,测试用用配置大多随意,求轻虐。(要是能力够的可以尝试docker+Swarm的compose文件方式部署,Onz给大神跪)
docker学习.pdf,点击跳转,然后找个PDF。
Mysql
参考链接方法二
mkdir -p ~/mysql/data ~/mysql/logs ~/mysql/conf && cd ~/mysql
docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
Redis
参考链接方法二
mkdir -p ~/redis ~/redis/data
touch ~/redis/redis.conf && cd ~/redis
//下载官方默认配置,主要要设置密码(默认无)和访问白名单(默认会只准许本地访问),怎么修改请度娘
wget http://download.redis.io/redis-stable/redis.conf -O redis.conf
docker run -p 6379:6379 --name myredis --restart always -v $PWD/redis.conf:/etc/redis/redis.conf -v $PWD/data:/data -d redis:latest redis-server /etc/redis/redis.conf --appendonly yes
Nginx
参考链接方法二
mkdir -p ~/nginx/logs ~/nginx/conf ~/nginx/conf/conf.d ~/nginx/cert
touch ~/nginx/conf/nginx.conf
#添加配置,一般还是多应用域名分离配置
#见下文我的渣渣配置nginx.conf 和conf.d下的*.conf
cd ~/nginx
如下是http访问的启动
docker run -p 80:80 --name mynginx -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/conf/conf.d:/etc/nginx/conf.d -v $PWD/logs:/var/log/nginx -d nginx:latest
#需要https时
#充分利用阿里免费CA证书,见下文[免费证书申请]
#要把证书配置文件放到~/nginx/cert下,
#把官方给的service{...}拷到~/nginx/conf.d/xxx_ssl.conf中
docker run -p 80:80 -p 443:443 --name mynginx -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/conf/conf.d:/etc/nginx/conf.d -v $PWD/logs:/var/log/nginx -v $PWD/cert:/etc/nginx/cert -d nginx:latest
每增加一个应用(域名访问)就按上面的添加相应nginx配置
##配置文件错误容易导致启动后退出,可通过以下命令查看原因
docker container logs 容器ID
#容器起不来大多原因是配置文件有问题
以wx.51guagua.top域名为例的nginx简单配置
nginx.conf
user root;
worker_processes 2;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
autoindex on;
#gzip on;
include /etc/nginx/conf.d/*.conf;
client_max_body_size 100M;
client_header_buffer_size 128k;
large_client_header_buffers 4 128k;
}
web.conf
server {
listen 80;
server_name wx.51guagua.top;
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
location / {
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_pass http://应用所在主机内网IP:应用端口;
}
}
web_ssl.conf(用于https)
server {
listen 443;
server_name wx.51guagua.top;
***这里的配置直接用CA证书成功申请后,点击“下载”会跳到帮助页,直接copy提供的配置,删除本段***,
location / {
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_pass http://应用所在主机内网IP:应用端口;
}
}
应用所在主机内网IP:应用端口怎么获取!
应用本机内网IP去ESC控制台看服务所在的机子的内网IP,用127.0.0.1不行的,因为nginx是装在容器里,这会访问当前容器,而不是本机;
端口获取查看docker容器配置,这是EDAS部署应用项目时自动绑定的端口,还没看到是否能手动更改,命令如下:
docker ps
#会看到有个NAMES栏目,其中以ip_container_数字结尾的名称就是应用容器,其对应的PORTS栏目中用例如0.0.0.0:1025->8080/tcp内容,就是本机的1025端口映射到容器的8080端口,1025就是我们要找的端口。
免费证书申请
先登录阿里云,再点传送门
购买好了,就去控制台补全证书。
【demo测试】
写了个HSF-SSM的脚手架,请猛击可测试用==》https://gitee.com/wesleyOne/edashsfssm_scaffolding
配个数据库表,修改下srv项目下的pom.xml文件配置,主要是mysql和redis内网访问地址和账号密码。
以下简单测试2018-05-12,可忽略。
偷懒,直接拿测试demo稍微修改方便页面展示,打包,EDAS后台创建两个应用,发包,惊喜!
测试demo下载
修改了detail项目下的IndexServlet.java如下
public class IndexServlet extends HttpServlet {
private static final long serialVersionUID = -112210702214857712L;
@Override
public void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException {
ApplicationContext ctx = ApplicationContextUtil.getApplicationContext();
#获取服务接口
ItemService itemService = ( ItemService ) ctx.getBean( "item" );
PrintWriter writer = resp.getWriter();
writer.write( itemService.getItemById(new Random().nextLong()).getItemId() +"\n");
writer.write( itemService.getItemByName( "REQ_URI:" ).getItemName()+req.getRequestURI() +"\n");
writer.write("白驹过隙:"+ new SimpleDateFormat("yyyy MM dd HH mm ss").format(new Date()));
return;
}
@Override
protected void doPost( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException {
}
}
访问,忽略中文乱码23333
安全组配置规则什么的自己配一下80,443其他看你心情
【总结】
哈哈哈,一周业余时间工作量,学习docker花了较多时间,实际流程通了一遍发现也不麻烦,而且代码配置也不麻烦,发布项目很舒服,更多功能待发掘。欢迎指正!