Docker compose部署最新版Apisix网关(一)

高性能且具备一系列安全策略的网关对于承载具体业务至关重要,对于个人开发者而言,你的入口更是决定着你收益的稳定性,因此,选择一款合适的Api网关来承载自身不断扩展的业务就成了首要任务,在对比了Nginx、Kong、Tyk、Gloo、Apache Apisix之后,果断入坑apisix, apisix无论在性能、配置效率、还是功能层面,都领先其他产品,尽管在使用的时候遇到了很多坑,官方的文档也很糟乱,不过在部署完成后,就不需要管那些了。

部署apisix首选docker compose方式,可以在官方的github上面下载demo

一、克隆仓库

git clone https://github.com/apache/apisix-docker.git
cd example 

##其中docker-compose.yml就是部署需要的文件,由于官网的这份compose中没有dashboard容器,而部署apisix的目的就是为了方便配置,所以dashboard是必须的,我在官网基础上加入了dashboard

二、拷贝dashboard配置文件 将all-in-one中apisix-dashboard文件夹拷贝到example目录中,下面dashboard容器需要挂载使用

三、编写compose文件 最终修改后的docker-compose.yml 如下

version: "3"

services: apisix: ##这边写死为最新的版本 image: apache/apisix:3.8.0-debian restart: always volumes: - ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro depends_on: - etcd ##network_mode: host #9180 admin port, 9080 api端口,9443 https端口 ports: - “9180:9180/tcp” - “9080:9080/tcp” - “9091:9091/tcp” - “9443:9443/tcp” - “9092:9092/tcp” networks: apisix:

etcd: image: bitnami/etcd:3.5.11 restart: always volumes: - etcd_data:/bitnami/etcd environment: ETCD_ENABLE_V2: “true” ALLOW_NONE_AUTHENTICATION: “yes” ETCD_ADVERTISE_CLIENT_URLS: “http://etcd:2379” ETCD_LISTEN_CLIENT_URLS: “http://0.0.0.0:2379” ports: - “2379:2379/tcp” networks: apisix: ##这是新增的,注意必须别用3.0.1有bug,插件市场是加载不出来的 dashboard: image: “apache/apisix-dashboard:3.0.0-centos” restart: always depends_on: - etcd volumes: ##这里的配置文件使用all-in-one/apisix-dashboard/conf.yaml即可 - ./apisix-dashboard/conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml:ro ports: - “9000:9000/tcp” networks: - apisix ###测试用的服务,测完负载均衡可删除 web1: image: nginx:1.19.0-alpine restart: always volumes: - ./upstream/web1.conf:/etc/nginx/nginx.conf ports: - “8081:80/tcp” environment: - NGINX_PORT=80 networks: apisix: ###测试用的服务,测完负载均衡可删除 web2: image: nginx:1.19.0-alpine restart: always volumes: - ./upstream/web2.conf:/etc/nginx/nginx.conf ports: - “8082:80/tcp” environment: - NGINX_PORT=80 networks: apisix: ###监控工具,很有必要 prometheus: image: prom/prometheus:v2.25.0 restart: always volumes: - ./prometheus_conf/prometheus.yml:/etc/prometheus/prometheus.yml ports: - “9090:9090” networks: apisix: ###上面这个监控工具的图形化展示,很有必要 grafana: image: grafana/grafana:7.3.7 restart: always ports: - “3000:3000” volumes: - “./grafana_conf/provisioning:/etc/grafana/provisioning” - “./grafana_conf/dashboards:/var/lib/grafana/dashboards” - “./grafana_conf/config/grafana.ini:/etc/grafana/grafana.ini” networks: apisix: ####使用独立的网络名为apisix networks: apisix: driver: bridge

volumes: etcd_data: driver: local

四、如果只是跑起来试一下,以上就OK了,接着就是启动

##在当前目录下执行,前提是安装了docker和compose
docker-compose -p docker-apisix up -d

五、如果要用到生产环境,有几个地方必须要改一下 apisix_conf/config.yaml中

 .......
 admin_key:
        ##这个名称也最好改掉
      - name: "admin"
        ##这个key改掉,随便找个md5工具,输个字符串,输出32位哈希值即可使用
        key: edd1c9f034335f136f87ad84b625c8f1
        role: admin                 # admin: manage all configuration data
        ##名称最好也改掉
      - name: "viewer"
       ##上面都改了,这边也干脆改下
        key: 4054f7cf07e344346cd3f287985e76a2
        role: viewer
.......

apisix-dashboard/conf.yaml中

authentication:
  secret:
  ##看了注释,这个secret也改掉
    secret              # secret for jwt token generation.
                        # NOTE: Highly recommended to modify this value to protect `manager api`.
                        # if it's default value, when `manager api` start, it will generate a random string to replace it.
  expire_time: 3600     # jwt token expire time, in second
  users:
  ###这四个值都改掉,随便你怎么定义,这是dashboard管理页面要输入的地址
    - username: admin   # username and password for login `manager api`
      password: admin
    - username: user
      password: user

web1、web2两个容器可以删掉,留着没必要,docker-compose.yaml文件中配置删除即可。 另外更安全的做法是把端口全部改掉,一是因为apisix使用到的端口很常见,很难避免不与其他服务端口冲突。 如果没有冲突,或者你的端口不会暴露到公网,不改也没事,但是暴露到公网的端口尽量改掉。 修改端口只要修改docker-compose.yaml中的冒号前面部分,至于配置中的端口号大部分都不需要改,因为他们同属于一个网络组,他们内部通信使用容器端口是可以访问的。

注意点: apisix-dashboard:3.0.0请使用3.0.0版本,不要用最新的3.0.1,有插件显示空白bug,这个问题在github issue中有人提到。

具体配置请看第二篇 Docker compose部署最新版Apisix网关(二)

build with Hugo, theme Stack, visits 0