Apache APISIX
This service deploys Apache APISIX, a dynamic, real-time, high-performance cloud-native API gateway.
Services
apisix: The APISIX API gateway.etcd: The configuration storage backend for APISIX.apisix-dashboard(optional): Web UI for managing APISIX configuration.
Environment Variables
| Variable Name | Description | Default Value |
|---|---|---|
| APISIX_VERSION | APISIX image version | 3.13.0-debian |
| APISIX_HTTP_PORT_OVERRIDE | Host port mapping for HTTP traffic (9080) | 9080 |
| APISIX_HTTPS_PORT_OVERRIDE | Host port mapping for HTTPS traffic (9443) | 9443 |
| APISIX_ADMIN_PORT_OVERRIDE | Host port mapping for Admin API (9180) | 9180 |
| APISIX_STAND_ALONE | Run APISIX in standalone mode (without etcd) | false |
| ETCD_VERSION | etcd image version | v3.6.0 |
| ETCD_CLIENT_PORT_OVERRIDE | Host port mapping for etcd client connections (2379) | 2379 |
| APISIX_DASHBOARD_VERSION | APISIX Dashboard image version | 3.0.1-alpine |
| APISIX_DASHBOARD_PORT_OVERRIDE | Host port mapping for Dashboard (9000) | 9000 |
| APISIX_DASHBOARD_USER | Dashboard admin username | admin |
| APISIX_DASHBOARD_PASSWORD | Dashboard admin password | admin |
Please modify the .env file as needed for your use case.
Volumes
apisix_logs: A volume for storing APISIX logs.etcd_data: A volume for storing etcd configuration data.dashboard_conf: A volume for storing Dashboard configuration.config.yaml: Optional custom APISIX configuration file (mount to/usr/local/apisix/conf/config.yaml).apisix.yaml: Optional custom APISIX route configuration file (mount to/usr/local/apisix/conf/apisix.yaml).
Network Ports
9080: HTTP traffic port9443: HTTPS traffic port9180: Admin API port9000: Dashboard web interface (optional)2379: etcd client port
Usage
Basic Setup
-
Start the services:
docker compose up -d -
Access the Admin API:
curl http://localhost:9180/apisix/admin/routes
With Dashboard
To enable the web dashboard, use the dashboard profile:
docker compose --profile dashboard up -d
Access the dashboard at http://localhost:9000 with credentials:
- Username:
admin(configurable viaAPISIX_DASHBOARD_USER) - Password:
admin(configurable viaAPISIX_DASHBOARD_PASSWORD)
Creating Routes
Using Admin API
Create a simple route:
curl -X PUT http://localhost:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
-H 'Content-Type: application/json' \
-d '{
"uri": "/get",
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'
Test the route:
curl http://localhost:9080/get
Using Dashboard
- Access the dashboard at
http://localhost:9000 - Login with admin credentials
- Navigate to "Route" section
- Create and configure routes through the web interface
Configuration Files
Custom APISIX Configuration
Mount a custom config.yaml file:
volumes:
- ./config.yaml:/usr/local/apisix/conf/config.yaml
Example config.yaml:
apisix:
node_listen: 9080
enable_ipv6: false
enable_admin: true
port_admin: 9180
etcd:
host:
- "http://etcd:2379"
prefix: "/apisix"
timeout: 30
plugin_attr:
prometheus:
export_addr:
ip: "0.0.0.0"
port: 9091
Standalone Mode
For simple setups without etcd, enable standalone mode:
APISIX_STAND_ALONE=true
Mount an apisix.yaml file with route definitions:
volumes:
- ./apisix.yaml:/usr/local/apisix/conf/apisix.yaml
SSL/TLS Configuration
To enable HTTPS:
- Mount SSL certificates
- Configure SSL in
config.yaml - Create SSL-enabled routes
Example SSL volume mount:
volumes:
- ./ssl:/usr/local/apisix/conf/cert
Plugins
APISIX supports numerous plugins for authentication, rate limiting, logging, etc.:
- Authentication:
jwt-auth,key-auth,oauth - Rate Limiting:
limit-req,limit-conn,limit-count - Observability:
prometheus,zipkin,skywalking - Security:
cors,csrf,ip-restriction
Enable plugins through the Admin API or Dashboard.
Security Notes
- Change the default Admin API key (
edd1c9f034335f136f87ad84b625c8f1) in production - Change dashboard credentials for production use
- Configure proper SSL/TLS certificates for HTTPS
- Use authentication plugins for sensitive routes
- Implement rate limiting to prevent abuse
- Regular security updates are recommended
Monitoring
APISIX provides built-in metrics for Prometheus:
- Enable the
prometheusplugin - Metrics available at
http://localhost:9091/apisix/prometheus/metrics
Performance Tuning
- Adjust worker processes based on CPU cores
- Configure appropriate buffer sizes
- Use connection pooling for upstream services
- Enable response caching when appropriate
License
Apache APISIX is licensed under the Apache 2.0 license.