<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apisix Docker部署 on lategege 的技术博客</title><link>https://lategege.com/tags/apisix-docker%E9%83%A8%E7%BD%B2/</link><description>Recent content in Apisix Docker部署 on lategege 的技术博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Mon, 29 Jan 2024 17:13:18 +0000</lastBuildDate><atom:link href="https://lategege.com/tags/apisix-docker%E9%83%A8%E7%BD%B2/index.xml" rel="self" type="application/rss+xml"/><item><title>Docker compose部署最新版Apisix网关(一）</title><link>https://lategege.com/p/docker-compose%E9%83%A8%E7%BD%B2%E6%9C%80%E6%96%B0%E7%89%88apisix%E7%BD%91%E5%85%B3-%E4%B8%80/</link><pubDate>Mon, 29 Jan 2024 17:13:18 +0000</pubDate><guid>https://lategege.com/p/docker-compose%E9%83%A8%E7%BD%B2%E6%9C%80%E6%96%B0%E7%89%88apisix%E7%BD%91%E5%85%B3-%E4%B8%80/</guid><description>&lt;p&gt;高性能且具备一系列安全策略的网关对于承载具体业务至关重要，对于个人开发者而言，你的入口更是决定着你收益的稳定性，因此，选择一款合适的Api网关来承载自身不断扩展的业务就成了首要任务，在对比了Nginx、Kong、Tyk、Gloo、Apache Apisix之后，果断入坑apisix, apisix无论在性能、配置效率、还是功能层面，都领先其他产品，尽管在使用的时候遇到了很多坑，官方的文档也很糟乱，不过在部署完成后，就不需要管那些了。&lt;/p&gt;
&lt;p&gt;部署apisix首选docker compose方式，可以在官方的github上面下载demo&lt;/p&gt;
&lt;p&gt;一、克隆仓库&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/apache/apisix-docker.git
cd example 
&lt;p&gt;##其中docker-compose.yml就是部署需要的文件，由于官网的这份compose中没有dashboard容器，而部署apisix的目的就是为了方便配置，所以dashboard是必须的，我在官网基础上加入了dashboard
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;二、拷贝dashboard配置文件
将all-in-one中apisix-dashboard文件夹拷贝到example目录中，下面dashboard容器需要挂载使用&lt;/p&gt;
&lt;p&gt;三、编写compose文件
最终修改后的docker-compose.yml 如下&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;version: "3"
&lt;p&gt;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:
- &amp;ldquo;9180:9180/tcp&amp;rdquo;
- &amp;ldquo;9080:9080/tcp&amp;rdquo;
- &amp;ldquo;9091:9091/tcp&amp;rdquo;
- &amp;ldquo;9443:9443/tcp&amp;rdquo;
- &amp;ldquo;9092:9092/tcp&amp;rdquo;
networks:
apisix:&lt;/p&gt;
&lt;p&gt;etcd:
image: bitnami/etcd:3.5.11
restart: always
volumes:
- etcd_data:/bitnami/etcd
environment:
ETCD_ENABLE_V2: &amp;ldquo;true&amp;rdquo;
ALLOW_NONE_AUTHENTICATION: &amp;ldquo;yes&amp;rdquo;
ETCD_ADVERTISE_CLIENT_URLS: &amp;ldquo;http://etcd:2379&amp;rdquo;
ETCD_LISTEN_CLIENT_URLS: &amp;ldquo;http://0.0.0.0:2379&amp;rdquo;
ports:
- &amp;ldquo;2379:2379/tcp&amp;rdquo;
networks:
apisix:
##这是新增的，注意必须别用3.0.1有bug,插件市场是加载不出来的
dashboard:
image: &amp;ldquo;apache/apisix-dashboard:3.0.0-centos&amp;rdquo;
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:
- &amp;ldquo;9000:9000/tcp&amp;rdquo;
networks:
- apisix
###测试用的服务，测完负载均衡可删除
web1:
image: nginx:1.19.0-alpine
restart: always
volumes:
- ./upstream/web1.conf:/etc/nginx/nginx.conf
ports:
- &amp;ldquo;8081:80/tcp&amp;rdquo;
environment:
- NGINX_PORT=80
networks:
apisix:
###测试用的服务，测完负载均衡可删除
web2:
image: nginx:1.19.0-alpine
restart: always
volumes:
- ./upstream/web2.conf:/etc/nginx/nginx.conf
ports:
- &amp;ldquo;8082:80/tcp&amp;rdquo;
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:
- &amp;ldquo;9090:9090&amp;rdquo;
networks:
apisix:
###上面这个监控工具的图形化展示，很有必要
grafana:
image: grafana/grafana:7.3.7
restart: always
ports:
- &amp;ldquo;3000:3000&amp;rdquo;
volumes:
- &amp;ldquo;./grafana_conf/provisioning:/etc/grafana/provisioning&amp;rdquo;
- &amp;ldquo;./grafana_conf/dashboards:/var/lib/grafana/dashboards&amp;rdquo;
- &amp;ldquo;./grafana_conf/config/grafana.ini:/etc/grafana/grafana.ini&amp;rdquo;
networks:
apisix:
####使用独立的网络名为apisix
networks:
apisix:
driver: bridge&lt;/p&gt;
&lt;p&gt;volumes:
etcd_data:
driver: local&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;四、如果只是跑起来试一下，以上就OK了，接着就是启动&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;##在当前目录下执行，前提是安装了docker和compose
docker-compose -p docker-apisix up -d&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;五、如果要用到生产环境，有几个地方必须要改一下
apisix_conf/config.yaml中&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; .......
 admin_key:
 ##这个名称也最好改掉
 - name: "admin"
 ##这个key改掉，随便找个md5工具，输个字符串，输出32位哈希值即可使用
 key: edd1c9f034335f136f87ad84b625c8f1
 role: admin # admin: manage all configuration data
 ##名称最好也改掉
 - name: "viewer"
 ##上面都改了，这边也干脆改下
 key: 4054f7cf07e344346cd3f287985e76a2
 role: viewer
.......&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;apisix-dashboard/conf.yaml中&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;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&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;web1、web2两个容器可以删掉，留着没必要，docker-compose.yaml文件中配置删除即可。
另外更安全的做法是把端口全部改掉，一是因为apisix使用到的端口很常见，很难避免不与其他服务端口冲突。
如果没有冲突，或者你的端口不会暴露到公网，不改也没事，但是暴露到公网的端口尽量改掉。
修改端口只要修改docker-compose.yaml中的冒号前面部分，至于配置中的端口号大部分都不需要改，因为他们同属于一个网络组，他们内部通信使用容器端口是可以访问的。&lt;/p&gt;
&lt;p&gt;注意点：
apisix-dashboard:3.0.0请使用3.0.0版本，不要用最新的3.0.1，有插件显示空白bug,这个问题在github issue中有人提到。&lt;/p&gt;
&lt;p&gt;具体配置请看第二篇&lt;a href="https://lategege.com/p/docker-compose部署最新版apisix网关-二/" title=" Docker compose部署最新版Apisix网关(二）"&gt; Docker compose部署最新版Apisix网关(二）&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>