个人搭建网站使用的docker-compose.yml及服务器配置

10 篇文章 2 订阅
2 篇文章 0 订阅

docker-compose.yml

version: '3'
services:
  redis:
    image: redis
    #    restart: always
    ports:
      - "6379:6379"
    volumes:
      - /root/docker/redis/data:/data
    container_name: "redis"
    networks:
      - dev
  mongo:
    image: mongo
    #    restart: always
    ports:
      - "27017:27017"
    volumes:
      - /root/docker/mongo/db:/data/db
    container_name: "mongo"
    networks:
      - dev
  tracker:
    image: morunchang/fastdfs       #基于file出来的镜像
    container_name: "tracker"          #新建容器名字
    command: sh tracker.sh
    #    restart: always
    network_mode: host
  storage:
    image: morunchang/fastdfs
    container_name: "storage"           #新建容器名字
    environment:
      - TRACKER_IP=你的ip:22122      #自己Linux地址
      - GROUP_NAME=xiaohong  #自己定义名字,但是nginx中也要改
    command: sh storage.sh
    #    restart: always
    network_mode: host
  elasticsearch-head:
    image: mobz/elasticsearch-head:5
    #    restart: always
    ports:
      - "9100:9100"
    container_name: "elasticsearch-head"
    networks:
      - dev
#  kibana:
#    image: kibana
    #    restart: always
#    ports:
#      - "5601:5601"
#    environment:
#      - elasticsearch_url=http://你的ip:9200
#    depends_on:
#      - elasticsearch
#    container_name: "kibana"
#    networks:
#      - dev
  canal:
    image: docker.io/canal/canal-server
    #    restart: always
    ports:
      - "11111:11111"
    container_name: "canal"
    networks:
      - dev
  rabbitmq:
    image: rabbitmq
    #    restart: always
    ports:
      - "15672:15672"
      - "4369:4369"
      - "5671:5671"
      - "5672:5672"
      - "15671:15671"
      - "25672:25672"
    environment:
      - RABBITMQ_DEFAULT_VHOST=my_vhost #主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名)
      - RABBITMQ_DEFAULT_USER=admin #登录用户名
      - RABBITMQ_DEFAULT_PASS=admin #登录密码
    container_name: "rabbitmq"
    networks:
      - dev
  elasticsearch:
    image: yaoguoh/elasticsearch-ik-pinyin
    #    restart: always
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
#    volumes:
#      - /root/docker/elasticsearch/data:/usr/share/elasticsearch/data
#       - /root/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    container_name: "elasticsearch"
    networks:
      - dev
#  nginx:
#    image: nginx
#    #    restart: always
#    container_name: nginx
#    environment:
#      - TZ=Asia/Shanghai
#    ports:
#      - "80:80"
#      - "443:443"
#    volumes:
#      - /usr/local/nginx/conf.d:/etc/nginx/conf.d
#      - /usr/local/nginx/log:/var/log/nginx
#      - /usr/local/nginx/www:/etc/nginx/html
#      - /etc/letsencrypt:/etc/letsencrypt
#    networks:
#      - dev
  mysql:
    image: mysql
    #    restart: always
    container_name: "mysql"
    environment:
      MYSQL_ROOT_PASSWORD: root
    command:
      --max_connections=1000
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --default-authentication-plugin=mysql_native_password
    ports:
      - 3306:3306
    volumes:
      - /root/docker/mysql:/var/lib/mysql
    networks:
      - dev
  web:
    image: tomcat
    #    restart: always
    volumes:
      - /root/docker/tomcat/webapps:/usr/local/tomcat/webapps
      - /root/docker/tomcat/conf:/usr/local/tomcat/conf
    #8080端口被storage占用了
    ports:
      - "8081:8080"
    container_name: "tomcat"
    networks:
      - dev
      - pro
networks:
  dev:
    driver: bridge
  pro:
    driver: bridge

还需配置的步骤

进入storage的容器内部,修改nginx.conf

docker exec -it storage /bin/bash

进入后

vi /etc/nginx/conf/nginx.conf

找到以下内容

location ~ /M00 {
	root /data/fast_data/data;
	ngx_fastdfs_module;
}

在里面在加一段,禁止缓存

add_header Cache-control no-store;

在这里插入图片描述

退出容器

exit

重启storage容器

docker restart storage

安装lua

//版本去官网看
curl -R -O http://www.lua.org/ftp/lua-5.x.x.tar.gz 
tar zxf lua-5.x.x.tar.gz
cd lua-5.x.x
make linux test
make install
yum install libtermcap-devel ncurses-devel libevent-devel readline-devel

安装Openresty

yum install yum-utils

yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

yum install openresty

如果openresty安装好了,在/usr/local下会看到一个文件夹名叫openresty
在这里插入图片描述
打开文件夹会看到一个nginx文件夹,因为openresty内部集成了nginx
先修改nginx.conf再启动nginx试试看能不能用

vi /usr/local/openresty/nginx/conf/nginx.conf

在这里插入图片描述

启动nginx

/usr/local/openresty/nginx/sbin/nginx

浏览器输入自己的网站测试
在这里插入图片描述
如果是这页面就成功了

创建lua缓存脚本

在/root/lua目录下创建content_update.lua ,实现连接mysql 查询数据 并存储到redis中。

ngx.header.content_type="application/json;charset=utf8"
local cjson = require("cjson")
local mysql = require("resty.mysql")
local uri_args = ngx.req.get_uri_args()
local id = uri_args["id"]

local db = mysql:new()
db:set_timeout(1000)
local props = {
    host = "xx.xxx.xx.xx",
    port = 3306,
    database = "changgou_content",
    user = "root",
    password = "root"
}

local res = db:connect(props)
local select_sql = "select url,pic from tb_content where status ='1' and category_id="..id.." order by sort_order"
res = db:query(select_sql)
db:close()

local redis = require("resty.redis")
local red = redis:new()
red:set_timeout(2000)

local ip ="xx.xxx.xx.xx"
local port = 6379
red:connect(ip,port)
red:set("content_"..id,cjson.encode(res))
red:close()

ngx.say("{flag:true}")

其他的数据库也一样自己修改

再修改/usr/local/openresty/nginx/conf/nginx.conf文件,在里面添加一段

 location /ad_update {
            content_by_lua_file /root/lua/ad_update.lua;
        }

在这里插入图片描述

重启nginx测试

/usr/local/openresty/nginx/sbin/nginx -s reload

打开redis查看是否有数据
在这里插入图片描述
如果有则清空
现在发起请求测试数据
如果看到这个
在这里插入图片描述
还有这个
在这里插入图片描述
那就稳了

创建lua读取缓存脚本

在/root/lua目录下创建content_read.lua

ngx.header.content_type="application/json;charset=utf8"
local uri_args = ngx.req.get_uri_args();	-- 获取uri中的所有参数
local id = uri_args["id"];		-- 获取名为id的参数
--获取本地缓存
local cache_ngx = ngx.shared.dis_cache;	-- 加载Nginx缓存模块,需要先定义
--根据ID 获取本地缓存数据
local contentCache = cache_ngx:get('content_cache_'..id);
--[[
Nginx中有缓存就输出缓存,没有的话就从Redis中加载
--]]
if contentCache == "" or contentCache == nil then
    local redis = require("resty.redis");	-- 依赖Redis模块
    local red = redis:new()				-- 创建Redis对象
    red:set_timeout(2000)	-- 超时
    red:connect("xx.xxx.xx.xx", 6379) 	-- 连接Redis
    local rescontent=red:get("content_"..id);	-- 从Redis中读数据
	-- Redis中没有就从MySQL中加载
    if ngx.null == rescontent then
        local cjson = require("cjson");		-- 依赖json模块
        local mysql = require("resty.mysql");	-- 依赖mysql模块
        local db = mysql:new();		-- 创建mysql对象
        db:set_timeout(2000)	-- 设置过期时间
        -- mysql的参数信息
        local props = {	
            host = "xx.xxx.xx.xx",
            port = 3306,
            database = "changgou_content",
            user = "root",
            password = "root"
        }
        local res = db:connect(props);	-- 连接mysql
        local select_sql = "select url,pic from tb_content where status ='1' and category_id="..id.." order by sort_order";
        res = db:query(select_sql);	--执行sql
        local responsejson = cjson.encode(res);	-- 将mysql返回的数据转换成json
        red:set("content_"..id,responsejson);	-- 存到Redis中
        ngx.say(responsejson);			-- 输出
        db:close()		-- 关闭mysql连接
    else
        cache_ngx:set('content_cache_'..id, rescontent, 10*60);	-- 把Redis中的数据写到Nginx缓存中,设置过期时间
        ngx.say(rescontent)		-- 输出
    end
    red:close()	  -- 关闭Redis连接
else
    ngx.say(contentCache)	-- 输出
end

在/usr/local/openresty/nginx/conf/nginx.conf中server下添加配置

location /content_read {
            content_by_lua_file /root/lua/content_read.lua;
        }

在这里插入图片描述
修改nginx配置文件vi/usr/local/openresty/nginx/conf/nginx.conf ,http节点下添加配置:
在这里插入图片描述

配置限流

在http里面添加以下内容进行限流配置

#限流设置
#binary_remote_addr 是一种key,表示基于 remote_addr(客户端IP) 来做限流,binary_ 的目的是压缩内存占用量。
#zone:定义共享内存区来存储访问信息, contentRateLimit:10m 表示一个大小为10M,名字为contentRateLimit的内存区域。1M能存储16000 IP地址的访问信息,10M可以存储16W IP地址访问信息。
#rate 用于设置最大访问速率,rate=10r/s 表示每秒最多处理10个请求。Nginx 实际上以毫秒为粒度来跟踪请求信息,因此 10r/s 实际上是限制:每100毫秒处理一个请求。这意味着,自上一个请求处理完后,若后续100毫秒内又有请求到达,
limit_req_zone $binary_remote_addr zone=contentRateLimit:10m rate=2r/s;

在这里插入图片描述

在server的l读取缓存配置里添加以下内容使用限流配置

#burst相当于队列,若rate=2r/s同时有4个请求到达,Nginx 会处理第一个请求,剩余3个请求将放入队列,然后每隔500ms从队列中获取一个请求进行处理。若请求数大于4,将拒绝处理多余的请求,直接返回503
#nodelay,配合burst使用,并发处理不延迟,不按(1s/rate)秒/个的速率处理,等到完成之后,按照正常的速率处理
limit_req zone=contentRateLimit burst=4 nodelay; #使用限流配置

在这里插入图片描述

控制并发量

控制并发量就是限制一个ip对服务器的连接数。首先我们需要配置一下,编辑nginx.conf文件,在http下添加如下配置。

#根据IP地址来限制,存储内存大小10M,配置名为perip,大小为1m
limit_conn_zone $binary_remote_addr zone=perip:10m;
#根据IP地址来限制,存储内存大小10M,配置名为perserver,大小为1m
limit_conn_zone $server_name zone=perserver:10m;

在这里插入图片描述

配置完成之后,我们需要让某一个location使用这个配置,这里,我们让/brand使用这个配置,在nginx.conf中的http.server.location /brand中添加以下内容。

limit_conn perip 10;   #设置单个客户端ip与服务器的连接数为10.
limit_conn perserver 100; #限制与服务器的总连接数为100
#表示这个请求给180主机处理,因为程序运行在主机上,不在虚拟机上
proxy_pass http://192.168.31.180:18081;

在这里插入图片描述
最后重启一下nginx,用浏览器测试一下
在这里插入图片描述

看到这个openresty就部署完成了

配置canal

进入MySQL开启binlog模式

docker exec -it mysql /bin/bash
cd /etc/mysql
apt-get update
apt-get install vim
vim my.cnf

输入以下代码

log-bin=/var/lib/mysql/mysql-bin  #二进制日志的存储路径
server-id=123456  #数据库的唯一编号,不能与canal的id一样

在这里插入图片描述

配置数据库闲置连接断开时间

vim /etc/mysql/my.cn
interactive_timeout=388000
wait_timeout=388000

在这里插入图片描述

退出mysql,并重启mysql

exit
docker restart mysql

再进入到MySQL里测试binlog是否开启成功

show variables like '%log_bin%';

在这里插入图片描述

创建一个canal专用数据库用户

-- 用户名是canal,%表示能在任意机器上登录,密码是canal
-- SELECT查询权限,REPLICATION SLAVE, REPLICATION CLIENT主从复制权限,
-- SUPER ON *.* TO 'canal'@'%':用户canal拥有任意数据库,任意表的这些权限
-- FLUSH PRIVILEGES:刷新权限
create user canal@'%' IDENTIFIED by 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;

在这里插入图片描述

进入canal配置canal

docker exec -it canal /bin/bash
cd canal-server/conf
vi canal.properties

在这里插入图片描述

这里id与前面的数据库编号不冲突就可以
(不过这里好像没找到canal.id的)
为了保险起见避免重复还是添加一个id
在这里插入图片描述

cd example
vi instance.properties

下面几个地方修改成自己的数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里的匹配可以自己修改
比如只监听changgou_content中的tb_content表和changgou_goods中所有表就可以写成
在这里插入图片描述

在这里插入图片描述

配置Elasticsearch

进入elasticcsearch

docker exec -it elasticsearch /bin/bash

配置elasticsearch.yml 文件

cd /usr/share/elasticsearch/config
apt-get update
apt-get install vim
vim elasticsearch.yml 

把transport.host前面的注释去掉
再加上当前集群节点的名称

cluster.name: 名称

再开启跨域和填写主机ip

http.cors.enabled: true
http.cors.allow-origin: "*"
network.host: 120.55.57.108

图片enable少了一个d
在这里插入图片描述
这时重启elasticsearch会失败,还需修改主机系统参数

vi /etc/security/limits.conf 
添加下面数据到末尾(nofile是单个进程允许打开的最大文件个数 soft nofile 是软限制 hard nofile是硬限制 )
* soft nofile 65536
* hard nofile 65536

在这里插入图片描述

vi /etc/sysctl.conf
添加一下数据到末尾(限制一个进程可以拥有的VMA(虚拟内存区域)的数量 )
vm.max_map_count=655360

在这里插入图片描述

执行命令使修改内核参数马上生效

sysctl -p

在这里插入图片描述
重启服务器即可

添加ik分词器

先去查看elasticsearch的版本
在这里插入图片描述
根据版本安装对于的ik分词器,方法参考之前的文章
跳转
如果下载慢可以试试用gitee镜像仓库
镜像仓库

然后用cmd直接clone下来
在这里插入图片描述
免得出现以下场景。。。
在这里插入图片描述
注意:下载的版本不能高于要安装的版本,比如要安装5.x版本,下载7.x版本就不行
在这里插入图片描述

把配置好的ik分词器解压,改名为ik
上传到服务器

然后再拷贝到elasticsearch容器里

docker cp ./ik elasticsearch:/usr/share/elasticsearch/plugins

浏览器访问测试

http://ip地址:9200/_analyze?analyzer=ik_smart&pretty=true&text=超级棒棒糖
http://ip地址:9200/_analyze?analyzer=ik_max_word&pretty=true&text=超级棒棒糖

在这里插入图片描述
在这里插入图片描述
如果添加的是6版本以上的ik分词器

请求方式: post  数据格式:json
http://ip:9200/_analyze/?pretty
{ "analyzer": "ik_max_word", "text": "测试用例" }

在这里插入图片描述

如果要添加自定义分词文件,进入到elasticsearch容器,找到ik/config文件下的IKAnalyzer.cfg.xm文件
添加分词文件
如果要添加停用词文件也是一样
在这里插入图片描述

在这里插入图片描述
例如:
分词前
在这里插入图片描述
创建一个文件,添加入自定义分词
vim 写中文需要设置 :set encoding=utf-8
在这里插入图片描述
加入配置文件
在这里插入图片描述
重启容器后刷新浏览器
在这里插入图片描述
添加禁用词汇一样的操作

启动RabbitMq

docker容器启动MQ后用浏览器登录
在这里插入图片描述
这时还访问不到,
还需要到MQ的容器中执行下面一段代码启动RabbitMQ包含有管理台插件

docker exec -it rabbitmq /bin/bash
rabbitmq-plugins enable rabbitmq_management

在这里插入图片描述
完成后再登录,这时就可以了
在这里插入图片描述
最后给用户设置权限

//后面跟的时权限列表
rabbitmqctl set_permissions -p "主机名" 用户名 ".*" ".*" ".*"

在这里插入图片描述
但登录发现有些功能还不能用,比如图像报表功能
在这里插入图片描述
还需进入到rabbitMq配置一下

vi /etc/rabbitmq/conf.d/management_agent.disable_metrics_collector.conf

在这里插入图片描述
把true改为false
重启rabbitMq后 再次登录
在这里插入图片描述
功能显示正常
警告:仅供自己使用
他人使用报错不负责哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值