目录
背景
在设置新项目时,有时会有一个完整的先决条件列表才能运行该项目,这可能会导致我们使用多个外部服务。Docker非常适合在开发环境中运行本地服务器。在这里,我们将探索docker-compose.yml文件,以在Docker中设置FTP,SFTP,SMTP,Cache,LDAP,SSO服务器和GUI客户端。这将是一个快速而基本的演练。
FTP/SFTP服务器
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:
FTP
要从主机使用FTP,请使用:
- 主机127.0.0.1
- 端口21
- 用户adminuser
- 密码adminpass
SFTP
要从主机使用SFTP,请使用:
- 主机127.0.0.1
- 端口22
- 用户adminuser
- 密码adminpass
SMTP服务器
在这里,我们用作服务器:MailHog
version: "3.7"
services:
mailhog:
image: mailhog/mailhog
container_name: MailHog
restart: always
ports:
- 1025:1025 # smtp
- 8025:8025 # ui
UI将在http://localhost:8025/ 上提供。
从主机使用PowerShell进行测试:
Send-MailMessage -To "recipient@test.com" -From "sender@test.com"
-Subject "Mail subject" -Body "Some important plain text!"
-SmtpServer "127.0.0.1" -Port 1025
要从主机使用服务器,我们需要使用IP 127.0.0.1和端口1025。
缓存服务器
在这里,我们使用Redis作为服务器,使用RedisInsight作为UI客户端。
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:
用户界面客户端
这将在http://localhost:8001/ 上提供。让我们使用以下方法连接到服务器:
- 主机redis
- 端口6379
- 用户default
- 密码adminpass
在Redis容器中测试:
redis-cli SET key1 "Hello"
redis-cli GET key1
redis-cli DEL key1
redis-cli FLUSHDB
redis-cli FLUSHALL
要从主机使用服务器,我们需要使用IP 127.0.0.1和端口6379。
LDAP服务器
在这里,我们使用OpenLDAP作为服务器和phpLDAPadmin作为UI客户端。
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:
phpLDAPadmin UI将在http://localhost:8081/ 上提供。
管理员用户
- 用户名cn=admin,dc=example,dc=org
- 密码adminpass
只读用户
- 用户名cn=userro,dc=example,dc=org
- 密码userropass
在openldap容器中测试凭据:
ldapsearch -x -h openldap -b 'dc=example,dc=org'
-D 'cn=admin,dc=example,dc=org' -w "adminpass"
ldapsearch -x -b 'dc=example,dc=org' -D 'cn=userro,
dc=example,dc=org' -w "userropass"
要从主机访问服务器,我们需要使用ldap://127.0.0.1:389。
替代物
bitnami/openldap可以是另一种选择:
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:
在openldap-bitnami容器中测试凭据:
ldapsearch -x -H ldap://openldap-bitnami:1389 -b 'dc=example,dc=org'
-D 'cn=admin,dc=example,dc=org' -w "adminpass"
ldapsearch -x -H ldap://openldap-bitnami:1389 -D "cn=user01,
ou=users,dc=example,dc=org" -b "ou=users,dc=example,dc=org" -w "password1"
要从主机访问服务器,我们需要使用ldap://127.0.0.1:1389。
重要!
组织明智的数据层次结构可以是不同的。因此,我们需要按预期设置层次结构。
SSO Server
对于SSO示例,这里我们使用keycloak。
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:
用户界面客户端
UI将在我们需要选择控制台或http://localhost:8080/auth/realms/master/protocol/openid-connect/auth?client_id=security-admin-console 的http://localhost:8080/auth/ 中可用。
管理员用户
- 用户名admin
- 密码password
Docker命令
Ftp/sftp
docker-compose -f docker-compose.ftp.yml up -d
Smtp
docker-compose -f docker-compose.smtp.yml up -d
Cache
docker-compose -f docker-compose.cache.yml up -d
LDAP
docker-compose -f docker-compose.ldap.yml up -d
docker-compose -f docker-compose.ldap.bitnami.yml up -d
SSO
docker-compose -f docker-compose.sso.yml up -d
其他
- API模拟服务器
引用
LDAP
- https://www.youtube.com/watch?v=PGL1D_Lv2FU
- openldap/docker-compose.yml at master · Ramhm/openldap · GitHub
- https://devconnected.com/how-to-search-ldap-using-ldapsearch-examples/
- Run OpenLDAP With a UI on Docker - Ruan Bekker's Blog
单点登录(SSO)
https://www.codeproject.com/Tips/5337112/Running-FTP-SFTP-SMTP-Cache-LDAP-SSO-and-Other-Ser