首页
留言
下载
友链
统计
推荐
vue
在线工具
Search
1
ElasticSearch ES 安装 Kibana安装 设置密码
305 阅读
2
记一个报错GC overhead limit exceeded解决方法
231 阅读
3
Teamcity + Rancher + 阿里云Code 实现Devops 自动化部署
175 阅读
4
小妹
150 阅读
5
分布式锁Redisson,完美解决高并发问题
150 阅读
JAVA开发
前端相关
Linux相关
电商开发
经验分享
电子书籍
个人随笔
行业资讯
其他
登录
/
注册
Search
标签搜索
AOP
支付
小说
docker
SpringBoot
XML
秒杀
K8S
RabbitMQ
工具类
Shiro
多线程
分布式锁
Redisson
接口防刷
Jenkins
levis
累计撰写
151
篇文章
累计收到
14
条评论
首页
栏目
JAVA开发
前端相关
Linux相关
电商开发
经验分享
电子书籍
个人随笔
行业资讯
其他
页面
留言
下载
友链
统计
推荐
vue
在线工具
搜索到
15
篇与
的结果
2022-08-30
Linux查看java项目启动情况
ps -aux | grep java
2022年08月30日
50 阅读
0 评论
0 点赞
2022-06-08
分享一个正在用的jar启动、关闭、暂停脚本
#!/bin/bash #这里可替换为你自己的执行程序,其他代码无需更改 APP_NAME=某某某.jar #使用说明,用来提示输入参数 usage() { echo "Usage: sh 执行脚本.sh [start|stop|restart|status]" exit 1 } #检查程序是否在运行 is_exist(){ pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' ` #如果不存在返回1,存在返回0 if [ -z "${pid}" ]; then return 1 else return 0 fi } #启动方法 start(){ is_exist if [ $? -eq "0" ]; then echo "${APP_NAME} is already running. pid=${pid} ." else nohup java -jar -Xms1024m -Xmx2048m -Dapollo.meta=http://192.168.44.120:8080 $APP_NAME & fi } #停止方法 stop(){ is_exist if [ $? -eq "0" ]; then kill -9 $pid else echo "${APP_NAME} is not running" fi } #输出运行状态 status(){ is_exist if [ $? -eq "0" ]; then echo "${APP_NAME} is running. Pid is ${pid}" else echo "${APP_NAME} is NOT running." fi } #重启 restart(){ stop start } #根据输入参数,选择执行对应方法,不输入则执行使用说明 case "$1" in "start") start ;; "stop") stop ;; "status") status ;; "restart") restart ;; *) usage ;; esac
2022年06月08日
45 阅读
0 评论
0 点赞
2022-04-28
一些查看linux配置的指令
# 设置主机名 hostnamectl set-hostname # CPU个数: $ grep ``'physical id'` `/``proc``/``cpuinfo | sort ``-``u | wc ``-``l # CPU核数: $ cat ``/``proc``/``cpuinfo | grep ``"cpu cores"` `| uniq # CPU型号: $ cat ``/``proc``/``cpuinfo | grep ``'model name'` `|uniq # cpu内核频率: $ cat ``/``proc``/``cpuinfo |grep MHz|uniq # 查看CPU统计信息: $ lscpu # 内存总数: $ cat ``/``proc``/``meminfo | grep MemTotal # 内核版本: $ cat ``/``proc``/``version # 操作系统内核信息: uname -a # 查看显卡; $ lspci | grep ``-``i vga # 机器型号: dmidecode | grep "Product Name" # 主板型号: dmidecode |grep -A16 "System Information$" # 磁盘信息: fdisk -l # 操作系统发行版信息: cat /etc/redhat-release
2022年04月28日
31 阅读
0 评论
0 点赞
2022-03-28
记录一个启动sentinel的脚本
执行前提:1.在/usr/local/sentinel/目录下添加sentinel-dashboard-1.8.3.jar2.创建/data/logs/sentinel目录3.执行chmod +x /usr/local/sentinel/sentinel-dashboard-1.8.3.jar添加权限{dotted startColor="#ff6c6c" endColor="#1989fa"/}#!/bin/bash # # chkconfig: 2345 10 90 # # description:auto_run ##### 上面这三行注释的代码必须添加 上面的注释的意思是,sentinel服务必须在运行级2,3,4,5下被启动或关闭,启动的优先级是90,关闭的优先级是10。 #程序名 RUN_NAME="sentinel-dashboard" #资源位置 JAVA_OPTS=/usr/local/sentinel/sentinel-dashboard-1.8.3.jar #日志位置 LOG_DIR=/data/logs/sentinel LOG_FILE=$LOG_DIR/sentinel-dashboard.log LOG_OPTS=$LOG_DIR/sentinel_temp.log #开始方法 start() { source /etc/profile; nohup java -Xms256M -Xmx512M -XX:PermSize=128M -XX:MaxPermSize=256M -Dcsp.sentinel.log.dir=$LOG_DIR -Dlogging.file=$LOG_FILE -Dserver.port=29000 -Dcsp.sentinel.dashboard.server=127.0.0.1:29000 -Dproject.name=Sentinel-Dashboard -jar $JAVA_OPTS >$LOG_OPTS 2>&1 & echo "$RUN_NAME started success..." } #结束方法 stop() { echo "stopping $RUN_NAME ..." kill -9 `ps -ef|grep $JAVA_OPTS|grep -v grep|grep -v stop|awk '{print $2}'` } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo "Userage: $0 {start|stop|restart}" exit 1 esac{dotted startColor="#ff6c6c" endColor="#1989fa"/}执行后: chkconfig --add /etc/rc.d/init.d/sentinel # 添加自定义服务 chkconfig sentinel on # 自定义服务开机启动 systemctl daemon-reload # 刷新 systemctl start sentinel # 启动sentinel netstat -ntlp #查看端口启动情况 ps -ef|grep sentinel # 查看启动情况
2022年03月28日
38 阅读
0 评论
0 点赞
2022-01-27
ElasticSearch ES 安装 Kibana安装 设置密码
一、下载安装ES数据库# 新建一个文件夹 mkdir elasticSearch # 进入文件夹 cd elasticSearch/ # 下载安装包 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-linux-x86_64.tar.gz # 解压安装包 gzip -d elasticsearch-7.8.0-linux-x86_64.tar.gz tar -vxf elasticsearch-7.8.0-linux-x86_64.tar # 进入解压后的目录 cd elasticsearch-7.8.0 # 添加跨域 vim config/elasticsearch.yml # 将以下两段话插入文档最底下 http.cors.enabled: true http.cors.allow-origin: "*" # 因为linux下不支持root用户启动所以我们要创建一个es用户 # window和mac不需要此步骤可以直接启动数据库 # 创建linux的es用户 adduser es # 设置密码 输入两次密码 passwd es # 给es用户赋予权限 后面的是es安装的目录 chown es /usr/local/elasticSearch/ -R # 切换到es用户 su es # 启动es数据库 cd bin/ ./elasticsearch -d # 启动访问本地的9200端口查看是否启动成功 # 出现如所示则启动成功 curl http://127.0.0.1:9200二、安装IK分词器下载地址将插件解压之后放入elasticSearch目录的plugins文件夹中然后重启ElasticSearch即可可以看到启动日志中显示已经加载了IK分词器三、下载安装KibanaKibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,并让您在 Elastic Stack 中进行导航。您可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。3.1安装kibana# 下载kibana wget https://artifacts.elastic.co/downloads/kibana/kibana-7.8.0-linux-x86_64.tar.gz # 解压kibana tar -xvf kibana-7.8.0-linux-x86_64 # 进入config文件夹设置kibana.yml文件 server.port: 5601 server.host: "localhost" server.basePath: "/kibana" server.name: "kibana" elasticsearch.hosts: ["http://localhost:9200"] # 启动kibana cd kibana-7.8.0-linux-x86_64/bin/ ./kibana # 后台启动 nohup ./kibana & # 访问本地 5601接口即可3.2设置kibana密码# 修改kibana安装文件下的config的kibana.yml文件,打开 #elasticsearch.username: "kibana_system" #elasticsearch.password: "pass" #修改成 elasticsearch.username: "kibana" # abcd1234 = es密码 elasticsearch.password: "abcd1234"3.3设置kibana用户权限四、设置ElasticsSearch访问权限(密码)由于上线需要设置用户名和密码,发现ES7.7以后的版本将安全认证功能免费开放了。并将X-pack插件集成了到了开源的ElasticSearch版本中。下面将图文介绍如何利用X-pack给ElasticSearch相关组件设置用户名和密码。进入ES的安装目录config下的elasticsearch.yml文件在最后一行添加xpack.security.enabled: true=开启密码验证2.重启了Es数据库。只有重启之后才可以设置用户名和密码# 启动ES ./elasticsearch -d # 设置用户名密码 ./elasticsearch-setup-passwords interactive # 为ES很多预设的用户设置密码,如果记不住最好都设为一样。3.到此已经完成ES及相关组件的加密了,后续访问和使用相关组件都需要验证用户名和密码了, 使用curl会报错。使用curl localhost:9200 -u elastic:{password}如下方式访问则正常:4.如果你觉得之前用户的密码设置的太简单了,你想修改密码可以采用如下方式:curl -XPOST -u elastic "localhost:9200/_security/user/elastic/_password" -H 'Content-Type: application/json' -d'{"password" : "abcd1234"}'这种方式修改密码需要注意的是:(1)之前设置过elastic的用户密码;(2)还记的用户elastic用户的密码。如果忘记之前elastic用户的密码,这个时候又要用到ES的加密功能,那需要重置ES的密码认证;详细步骤如下:修改config/elasticsearch.yml;注释掉 xpack.security.enabled: true这一行; 重启ES,查看下索引,发现多了一个.security-7 删除掉.security-7索引:到此就回到ES没有设置密码的阶段了五、ES常见启动错误查看原文
2022年01月27日
305 阅读
0 评论
0 点赞
2021-11-01
Nginx 通过 Lua + Redis 实现动态封禁 IP
背景 为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单。对于黑名单之内的 IP ,拒绝提供服务。架构 实现 IP 黑名单的功能有很多途径:1、在操作系统层面,配置 iptables,拒绝指定 IP 的网络请求;2、在 Web Server 层面,通过 Nginx 自身的 deny 选项 或者 lua 插件 配置 IP 黑名单;3、在应用层面,在请求服务之前检查一遍客户端 IP 是否在黑名单。为了方便管理和共享,我们选择通过 Nginx+Lua+Redis 的架构实现 IP 黑名单的功能,架构图如下:实现1、安装 Nginx+Lua模块,推荐使用 OpenResty,这是一个集成了各种 Lua 模块的 Nginx 服务器:2、安装并启动 Redis 服务器;3、配置 Nginx 示例:Nginx 配置其中lua_shared_dict ip_blacklist 1m;由 Nginx 进程分配一块 1M 大小的共享内存空间,用来缓存 IP 黑名单。access_by_lua_file lua/ip_blacklist.lua;指定 lua 脚本位置4、配置 lua 脚本,定期从 Redis 获取最新的 IP 黑名单。5、在 Redis 服务器上新建 Set 类型的数据 ip_blacklist,并加入最新的 IP 黑名单。完成以上步骤后,重新加载 nginx,配置便开始生效了。这时访问服务器,如果你的 IP 地址在黑名单内的话,将出现拒绝访问,如下图:
2021年11月01日
63 阅读
0 评论
0 点赞
2021-10-21
安装Gitlab到CentOS(YUM)
GitLab是Git的基于WEB的图形化管理平台,提供Git的用户、权限等高级管理功能。 {card-default label="运行环境" width=""}系统版本:CentOS Linux release 7.3.1611 (Core)软件版本:Gitlab-ce-11.10.1硬件要求:最低2核4GB,建议4核8GB{/card-default}安装过程1、安装依赖[root@localhost ~]# yum -y install curl policycoreutils-python openssh-server 2、配置系统环境[root@localhost ~]# systemctl enable sshd => 设置SSH远程服务开机自启 [root@localhost ~]# systemctl start sshd => 启动SSH远程服务 [root@localhost ~]# systemctl stop firewalld => 停止Firewalld防火墙服务 [root@localhost ~]# systemctl disable firewalld => 禁用Firwalld防火墙服务开机自启 [root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux => 关闭SeLinux(重启主机生效) [root@localhost ~]# setenforce 0 => 关闭SeLinux(当前生效)3、添加YUM-Gitlab源我们使用清华大学提供的YUM源,以提高下载速度。[root@localhost ~]# vim /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] name=Gitlab CE Repository baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gpgcheck=0 enabled=1 [root@localhost ~]# yum makecache4、安装Gitlab我们选择安装最新版本的Gitlab。[root@localhost ~]# yum install -y gitlab-ce可以访问"https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/"查看Gitlab-ce的版本。安装历史版本请使用下面命令:[root@localhost ~]# yum install -y gitlab-ce-{VERSION}5、配置Gitlab建议使用HTTPS。[root@localhost ~]# vim /etc/gitlab/gitlab.rb ### 基础配置 ### external_url 'https://gitlab.xxx.cn' #用户访问所使用的URL,域名或者IP地址 gitlab_rails['time_zone'] = 'Asia/Shanghai' #时区 ### SSH配置 ### gitlab_rails['gitlab_shell_ssh_port'] = 10222 #使用SSH协议拉取代码所使用的连接端口。 ### 邮箱配置 ### gitlab_rails['smtp_enable'] = true #启用SMTP邮箱功能,绑定一个第三方邮箱,用于邮件发送 gitlab_rails['smtp_address'] = "smtp.exmail.qq.com" #设置SMTP服务器地址 gitlab_rails['smtp_port'] = 465 #设置SMTP服务器端口 gitlab_rails['smtp_user_name'] = "xxx@xxx.cn" #设置邮箱账号 gitlab_rails['smtp_password'] = "xxx" #设置邮箱密码 gitlab_rails['smtp_authentication'] = "login" #设置邮箱账号密码身份验证方式,"login"表示采用账号密码的方式登陆 gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true #设置开启SMTP邮件使用TLS传输加密协议传输邮件,以保证邮件安全传输 gitlab_rails['gitlab_email_from'] = 'xxx@xxx.cn' #设置Gitlab来源邮箱地址,设置登陆所使用的邮箱地址 ### WEB配置 ### nginx['enable'] = true #启用Nginx服务 nginx['client_max_body_size'] = '250m' #设置客户端最大文件上传大小 nginx['redirect_http_to_https'] = true #设置开启自动将HTTP跳转到HTTPS nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.xxx.cn.pem" #设置HTTPS所使用的证书 nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.xxx.cn.key" #设置HTTPS所使用的证书密码 nginx['ssl_protocols'] = "TLSv1.1 TLSv1.2" #设置HTTPS所使用的TLS协议版本 nginx['ssl_session_cache'] = "builtin:1000 shared:SSL:10m" #设置开启SSL会话缓存功能 nginx['ssl_session_timeout'] = "5m" #设置SSL会话超时时间 nginx['listen_addresses'] = ['*', '[::]'] #设置Nginx监听地址,"*"表示监听主机上所有网卡的地址 nginx['gzip_enabled'] = true #设置开启Nginx的传输压缩功能,以节约传输带宽,提高传输效率6、上传SSL证书到指定目录[root@localhost ~]# ll /etc/gitlab/ssl/ total 28 drwxr-xr-x 2 root root 4096 Apr 25 11:48 ./ drwxrwxr-x 4 root root 4096 Apr 25 12:50 ../ -rw-r--r-- 1 root root 1675 Apr 25 11:45 gitlab.xxx.cn.key -rw-r--r-- 1 root root 3671 Apr 25 11:45 gitlab.xxx.cn.pem7、刷新配置当配置文件发生变化时,或者是第一次启动时,我们需要刷新配置。[root@localhost ~]# systemctl restart gitlab-runsvdir [root@localhost ~]# gitlab-ctl reconfigure8、启动服务[root@localhost ~]# gitlab-ctl restart [root@localhost ~]# gitlab-ctl status run: alertmanager: (pid 13541) 2171s; run: log: (pid 13221) 2192s run: gitaly: (pid 13557) 2170s; run: log: (pid 12463) 2266s run: gitlab-monitor: (pid 13580) 2169s; run: log: (pid 13103) 2208s run: gitlab-workhorse: (pid 13602) 2169s; run: log: (pid 12887) 2226s run: logrotate: (pid 13617) 2168s; run: log: (pid 12959) 2218s run: nginx: (pid 13628) 2168s; run: log: (pid 12927) 2222s run: node-exporter: (pid 13714) 2168s; run: log: (pid 13002) 2214s run: postgres-exporter: (pid 13720) 2167s; run: log: (pid 13270) 2188s run: postgresql: (pid 13740) 2167s; run: log: (pid 12669) 2258s run: prometheus: (pid 13748) 2166s; run: log: (pid 13181) 2198s run: redis: (pid 13761) 2166s; run: log: (pid 11907) 2293s run: redis-exporter: (pid 13800) 2165s; run: log: (pid 13143) 2202s run: sidekiq: (pid 13821) 2163s; run: log: (pid 12872) 2227s run: unicorn: (pid 13833) 2162s; run: log: (pid 12832) 2233s9、测试邮件发送我们在启动完成后测试一下邮件发送功能是否正常工作。[root@localhost ~]# gitlab-rails console irb(main):001:0> Notify.test_email('邮箱地址', '标题', '内容').deliver_now irb(main):002:0> exit10、第一次访问登陆第一次需要输入新的超级管理员(root)密码。修改成功后,我们使用超级管理员用户“root”账号登录Gitlab管理平台。11、关闭用户注册功能为了避免用户随便注册账号,我们将注册功能关闭。11、设置语言为"简体中文"保存后重启登陆即可。
2021年10月21日
28 阅读
0 评论
0 点赞
2021-07-12
Teamcity + Rancher + 阿里云Code 实现Devops 自动化部署
Teamcity + Rancher + 阿里云CODE + 阿里云镜像仓库实现DevOps1.安装DockerDocker相关知识具体参考:https://www.bdysoft.com/archives/3.html备注:由于rancher 1.6.30仅支持19.03.2一下版本建议在执行docker安装时,执行一下指令进行安装:# 1.删除服务器中原本安装的docker yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 2.安装yum-utils yum install -y yum-utils device-mapper-persistent-data lvm2 # 3.为yum源添加docker仓库位置 yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo # 4.yum安装docker yum -y install docker-ce-18.06.3.ce # 5.设置docker开机自启 systemctl start docker systemctl enable docker2.安装Teamcity + Teamcity Agent# 1.安装Teamcity docker run -d -u 0 -it --name teamcity -v /data/tc/server/datadir:/data/teamcity_server/datadir -p 你准备用来提供访问的接口:8111 --restart=always jetbrains/teamcity-server # 2.如果是在同一台机器部署Teamcity + Teamcity Agent,可以通过一下指令找到Teamcity的地址 docker inspect --format '{{ .NetworkSettings.IPAddress }}' teamcity-server的CONTAINERID # 3.安装Teamcity Agent docker run -d -u 0 -it -e SERVER_URL="可以访问Teamcity的地址" \ -v /data/tc/agent/conf:/data/teamcity_agent/conf \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /data/tc/agent/buildagent/work:/opt/buildagent/work \ -v /data/tc/agent/buildagent/temp:/opt/buildagent/temp \ -v /data/tc/agent/buildagent/tools:/opt/buildagent/tools \ -v /data/tc/agent/buildagent/plugins:/opt/buildagent/plugins \ -v /data/tc/agent/buildagent/system:/opt/buildagent/system \ --restart=always \ jetbrains/teamcity-agent 3.配置Teamcity 及设置Teamcity Agent到这里teamcity就配置结束了,我们尝试用temacity打包并推送到阿里云镜像仓库。4.利用Teamcity 完成项目创建及配置项目中必须包含Dockerfile文件,Dockerfile文件里面的一些参数可参考以下说明,形象的理解。备注:测试所用的阿里云code,输入账号密码登录有问题,所以需要在project上传SSHkey 。5.配置阿里云镜像仓库与Teamcity关联备注:所需要的密码是在这里设置的:6.配置Teamcity 发版流水线先设置maven clean package构建镜像推送镜像, 其中%name%是在parameters里面配置的:推送完成, 其中%name%是在parameters里面配置的:6.在一台【Docker环境干净的】服务器上创建Rancher 1.6.30版本1.具体安装教程:https://docs.rancher.cn/docs/rancher1/overview/start/_index/2.注意需要开放以下接口:https://www.cnblogs.com/heqiuyong/p/10460150.htmlhttp://docs.rancher.cn/docs/rancher2/installation/requirements/ports/_index3.开放端口firewall-cmd --zone=public --add-port=6443/tcp --permanent # 开放5672端口firewall-cmd --zone=public --remove-port=6443/tcp --permanent #关闭5672端口firewall-cmd --reload # 配置立即生效4.查看防火墙所有开放的端口firewall-cmd --zone=public --list-ports# 1.安装前可以清理一下容器: docker stop $(docker ps -aq) docker system prune -f docker volume rm $(docker volume ls -q) docker image rm $(docker image ls -q) rm -rf /etc/ceph \ /etc/cni \ /etc/kubernetes \ /opt/cni \ /opt/rke \ /run/secrets/kubernetes.io \ /run/calico \ /run/flannel \ /var/lib/calico \ /var/lib/etcd \ /var/lib/cni \ /var/lib/kubelet \ /var/lib/rancher/rke/log \ /var/log/containers \ /var/log/pods \ /var/run/calico # 2.安装Docker 镜像 docker run -d --restart=unless-stopped -p 80:8080 rancher/server:stable7.完成Rancher 主机注册并配置镜像仓库:1.添加镜像仓库2.注册主机,选择custom,将主机注册指令,复制到需要注册的主机节点上即可#可通过修改主机名: hostnamectl set-hostname node2 8.创建应用9.创建服务10.通过触发器实现镜像一旦在阿里云仓库更新则容器上的服务自动更新11.通过Rancher API 实现在Teamcity里通过输入build的版本号部署对应的服务前置条件为每次build及push到阿里云镜像仓库的版本号都不一样。1.打开浏览器的开发者模式,点击服务右侧的升级按钮,复制浏览器发送请求的升级参数,然后API查看里面打开,找到upgrade那个API,将参数复制进去后show requerst,复制完整的requert,并且将其中appkey 和 secret 换成自己生成的,还有其中有一个参数是imageUuid,我们可以在imageUUid对应的镜像末尾修改为%version%,这个version就是前面我们设计的必须要输入的参数。2.在teamcity中添加build step,选择runner type = Command Line,在下面的命令行输入上面复制并进行修改的代码即可。
2021年07月12日
175 阅读
2 评论
0 点赞
2021-03-12
Docker Compose的介绍安装与使用
一、Docker ComposeCompose 简介Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。Compose 使用的三个步骤:使用 Dockerfile 定义应用程序的环境。使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。最后,执行 docker-compose up 命令来启动并运行整个应用程序。docker-compose.yml 的配置案例如下(配置参数参考下文):实例:# yaml 配置实例 version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redis volumes: logvolume01: {}Compose 安装LinuxLinux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases。运行以下命令以下载 Docker Compose 的当前稳定版本:$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose{message type="info"}要安装其他版本的 Compose,请替换 1.24.1。{/message}将可执行权限应用于二进制文件:$ sudo chmod +x /usr/local/bin/docker-compose创建软链:$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose测试是否安装成功:$ docker-compose --version{message type="info"}注意: 对于 alpine,需要以下依赖包: py-pip,python-dev,libffi-dev,openssl-dev,gcc,libc-dev,和 make。{/message}二、Docker Compose使用2.1.准备工作2.1.1 创建一个测试目录:$ mkdir composetest $ cd composetest2.1.2 在测试目录中创建一个名为 app.py 的文件,并复制粘贴以下内容:import time import redis from flask import Flask app = Flask(__name__) cache = redis.Redis(host='redis', port=6379) def get_hit_count(): retries = 5 while True: try: return cache.incr('hits') except redis.exceptions.ConnectionError as exc: if retries == 0: raise exc retries -= 1 time.sleep(0.5) @app.route('/') def hello(): count = get_hit_count() return 'Hello World! I have been seen {} times.\n'.format(count){message type="info"}在此示例中,redis 是应用程序网络上的 redis 容器的主机名,该主机使用的端口为 6379。{/message}2.1.3在 composetest 目录中创建另一个名为 requirements.txt 的文件,内容如下:flask redis2.2 创建 Dockerfile 文件2.2.1 在 composetest 目录中,创建一个名为的文件 Dockerfile,内容如下:FROM python:3.7-alpine WORKDIR /code ENV FLASK_APP app.py ENV FLASK_RUN_HOST 0.0.0.0 RUN apk add --no-cache gcc musl-dev linux-headers COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD ["flask", "run"]2.2.2 Dockerfile 内容解释:①:FROM python:3.7-alpine: 从 Python 3.7 映像开始构建镜像。②:WORKDIR /code: 将工作目录设置为 /code。③:ENV FLASK_APP app.py ENV FLASK_RUN_HOST 0.0.0.0 设置 flask 命令使用的环境变量。④:RUN apk add --no-cache gcc musl-dev linux-headers: 安装 gcc,以便诸如 MarkupSafe 和 SQLAlchemy 之类的 Python 包可以编译加速。⑤:COPY requirements.txt requirements.txt RUN pip install -r requirements.txt 复制 requirements.txt 并安装 Python 依赖项。⑥:COPY . .: 将 . 项目中的当前目录复制到 . 镜像中的工作目录。⑦:CMD ["flask", "run"]: 容器提供默认的执行命令为:flask run。2.3 创建 docker-compose.yml2.3.1 在测试目录中创建一个名为 docker-compose.yml 的文件,然后粘贴以下内容:# yaml 配置 version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"该 Compose 文件定义了两个服务:web 和 redis。①:web:该 web 服务使用从 Dockerfile 当前目录中构建的镜像。然后,它将容器和主机绑定到暴露的端口 5000。此示例服务使用 Flask Web 服务器的默认端口 5000 。②:redis:该 redis 服务使用 Docker Hub 的公共 Redis 映像。2.4 使用 Compose 命令构建和运行您的应用2.4.1 在测试目录中,执行以下命令来启动应用程序:docker-compose up2.4.2 如果你想在后台执行该服务可以加上 -d 参数:docker-compose up -d
2021年03月12日
45 阅读
0 评论
0 点赞
2021-03-10
除了负载均衡,Nginx 能做的真是太强大了!
Nginx应该是现在最火的web和反向代理服务器,没有之一。她是一款诞生于俄罗斯的高性能web服务器,尤其在高并发情况下,相较Apache,有优异的表现。那除了负载均衡,她还有什么其他的用途呢,下面我们来看下。一、静态代理Nginx擅长处理静态文件,是非常好的图片、文件服务器。把所有的静态资源的放到nginx上,可以使应用动静分离,性能更好。二、负载均衡Nginx通过反向代理可以实现服务的负载均衡,避免了服务器单节点故障,把请求按照一定的策略转发到不同的服务器上,达到负载的效果。常用的负载均衡策略有,1、轮询将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。2、加权轮询不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。3、ip_hash(源地址哈希法)根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客户端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。4、随机通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。5、least_conn(最小连接数法)由于后端服务器的配置不尽相同,对于请求的处理有快有慢,最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。三、限流Nginx的限流模块,是基于漏桶算法实现的,在高并发的场景下非常实用。1、配置参数1)limit_req_zone定义在http块中,$binary_remote_addr 表示保存客户端IP地址的二进制形式。2)Zone定义IP状态及URL访问频率的共享内存区域。zone=keyword标识区域的名字,以及冒号后面跟区域大小。16000个IP地址的状态信息约1MB,所以示例中区域可以存储160000个IP地址。3)Rate定义最大请求速率。示例中速率不能超过每秒100个请求。2、设置限流burst排队大小,nodelay不限制单个请求间的时间。四、缓存1、浏览器缓存,静态资源缓存用expire。2、代理层缓存五、黑白名单1、不限流白名单2、黑名单
2021年03月10日
41 阅读
0 评论
0 点赞
1
2