背景
在建立一个新项目时,有时会有一个完整的先决条件列表才能运行该项目,这可能导致我们使用多个外部服务。Docker 非常适合在开发环境中运行本地服务器。在这里,我们将探索docker-compose.yml文件以在 Docker 中设置 FTP、SFTP、SMTP、缓存、LDAP、SSO 服务器和 GUI 客户端。这将是一个快速而基本的解决方法。
FTP/SFTP 服务器
<span style="color:#000000"><span style="background-color:#fbedbb">version: "3.7"
services:
ftp:
image: fauria/vsftpd:latest
container_name: Ftp
restart: always
environment:
- FTP_USER=adminuser
- FTP_PASS=adminpass
- PASV_ADDRESS=127.0.0.1
- PASV_MIN_PORT=21100
- PASV_MAX_PORT=21110
volumes:
- ftp-data:/home/vsftpd
- ftp-log-data:/var/log/vsftpd
ports:
- 0.0.0.0:20:20
- 0.0.0.0:21:21
- "21100-21110:21100-21110"
sftp:
image: atmoz/sftp:latest
container_name: Sftp
restart: always
command: adminuser:adminpass:1001
volumes:
- sftp-data:/home/foo/upload
ports:
- 0.0.0.0:2222:22
volumes:
ftp-data:
ftp-log-data:
sftp-data:</span></span>
FTP
要从主机使用 FTP,请使用:
- 主持人
127.0.0.1
- 港口
21
- 用户
adminuser
- 密码
adminpass
SFTP
要从主机使用 SFTP,请使用:
- 主持人
127.0.0.1
- 港口
22
- 用户
adminuser
- 密码
adminpass
SMTP 服务器
在这里,我们MailHog
用作服务器:
<span style="color:#000000"><span style="background-color:#fbedbb">version: "3.7"
services:
mailhog:
image: mailhog/mailhog
container_name: MailHog
restart: always
ports:
- 1025:1025 # smtp
- 8025:8025 # ui</span></span>
Ui 将在http://localhost:8025/可用。
从主机使用 PowerShell 进行测试:
127.0.0.1
和端口1025
。
缓存服务器
在这里,我们使用 Redis 作为服务器,使用 RedisInsight 作为 UI 客户端。
<span style="color:#000000"><span style="background-color:#fbedbb">version: "3.7"
services:
redis:
image: redis:alpine
container_name: redis
restart: always
command: ["sh", "-c", "redis-server --requirepass \"$REDIS_PASSWORD\""]
environment:
- REDIS_PASSWORD=adminpass
volumes:
- redis-data:/data/redis
ports:
- 6379:6379
redis-ui:
image: redislabs/redisinsight:1.12.0
container_name: RedisInsight
restart: always
ports:
- 8001:8001
volumes:
redis-data:</span></span>
用户界面客户端
这将在http://localhost:8001/可用。让我们使用以下命令连接到服务器:
- 主持人
redis
- 港口
6379
- 用户
default
- 密码
adminpass
在redis容器中测试:
127.0.0.1
和端口6379
。
LDAP 服务器
在这里,我们OpenLDAP
用作服务器和phpLDAPadmin
UI 客户端。
<span style="color:#000000"><span style="background-color:#fbedbb">version: "3.7"
services:
openldap:
image: osixia/openldap:1.5.0
container_name: openldap
volumes:
- openldap-data:/var/lib/ldap
#- ./data/certificates:/container/service/slapd/assets/certs
#- ./storage/ldap_config:/etc/ldap/slapd.d
environment:
- LDAP_ORGANISATION=example
- LDAP_DOMAIN=example.org
- LDAP_ADMIN_PASSWORD=adminpass
- LDAP_CONFIG_PASSWORD=configpass
- LDAP_RFC2307BIS_SCHEMA=true
- LDAP_REMOVE_CONFIG_AFTER_SETUP=true
- LDAP_TLS_VERIFY_CLIENT=never
- LDAP_READONLY_USER=true
- LDAP_READONLY_USER_USERNAME=userro
- LDAP_READONLY_USER_PASSWORD=userropass
ports:
- 389:389
- 636:636
networks:
- openldap
phpldapadmin:
image: osixia/phpldapadmin:latest
container_name: phpldapadmin
hostname: phpldapadmin
environment:
- PHPLDAPADMIN_LDAP_HOSTS=openldap
- PHPLDAPADMIN_HTTPS=false
ports:
- 8081:80
depends_on:
- openldap
networks:
- openldap
networks:
openldap:
name: openldap
volumes:
openldap-data:</span></span>
phpLDAPadmin
UI 将在http://localhost:8081/可用。
管理员用户
- 用户名
cn=admin,dc=example,dc=org
- 密码
adminpass
只读用户
- 用户名
cn=userro,dc=example,dc=org
- 密码
userropass
openldap
在容器中测试凭据:
ldap://127.0.0.1:389
.
选择
bitnami/openldap
可以是另一种选择:
<span style="color:#000000"><span style="background-color:#fbedbb">version: "3.7"
services:
openldap-bitnami:
image: bitnami/openldap:2.6.2
container_name: openldap-bitnami
volumes:
- openldap-bitnami-data:/bitnami/openldap
environment:
- LDAP_ROOT=dc=example,dc=org
- LDAP_ADMIN_USERNAME=admin
- LDAP_ADMIN_PASSWORD=adminpass
- LDAP_USERS=user01,user02
- LDAP_PASSWORDS=password1,password2
ports:
- 1389:1389
- 1636:1636
networks:
- openldap-bitnami
networks:
openldap-bitnami:
name: openldap-bitnami
volumes:
openldap-bitnami-data:</span></span>
openldap-bitnami
在容器中测试凭据:
ldap://127.0.0.1:1389
.
重要的!
组织明智的数据层次结构可以不同。因此,我们需要按预期设置层次结构。
单点登录服务器
对于 SSO 示例,我们在这里使用keycloak
.
<span style="color:#000000"><span style="background-color:#fbedbb">version: '3.7'
services:
postgres:
image: postgres:13
container_name: keycloak-db
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: password
PGDATA: /var/lib/postgresql/data
volumes:
- pgsql-data:/var/lib/postgresql/data
ports:
- 5432:5432
pgadmin:
image: dpage/pgadmin4:4.18
container_name: keycloak-pgadmin
restart: always
environment:
PGADMIN_DEFAULT_EMAIL: admin
PGADMIN_DEFAULT_PASSWORD: secret
PGADMIN_LISTEN_PORT: 80
ports:
- 8087:80
volumes:
- pgadmin-data:/var/lib/pgadmin
mailhog:
image: mailhog/mailhog:latest
container_name: keycloak-mail
ports:
- 8025:8025
keycloak:
image: quay.io/keycloak/keycloak:11.0.3 #jboss/keycloak:11.0.3
container_name: keycloak
environment:
DB_VENDOR: POSTGRES
DB_ADDR: keycloak-db #user service name postgres
#or container name
DB_DATABASE: keycloak
DB_SCHEMA: public
DB_USER: keycloak
DB_PASSWORD: password
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: password
ROXY_ADDRESS_FORWARDING: "true"
TZ: UTC
#KEYCLOAK_DEFAULT_THEME: theme-minimal #custom theme
#KEYCLOAK_WELCOME_THEME: theme-minimal
# Uncomment the line below if you want to specify JDBC parameters.
# The parameter below is just an example, and it shouldn't be used
# in production without knowledge. It is highly recommended that you
# read the PostgreSQL JDBC driver documentation in order to use it.
#JDBC_PARAMS: "ssl=true"
ports:
- 8080:8080
volumes:
- keycloak-data:/opt/jboss/keycloak/
depends_on:
- postgres
- mailhog
volumes:
pgsql-data:
pgadmin-data:
keycloak-data:</span></span>
用户界面客户端
UI 将在http://localhost:8080/auth/可用,我们需要选择控制台或http://localhost:8080/auth/realms/master/protocol/openid-connect/auth?client_id=security-admin -控制台。
管理员用户
- 用户名
admin
- 密码
password