目录

背景

FTP/SFTP服务器

FTP

SFTP

SMTP服务器

缓存服务器

用户界面客户端

LDAP服务器

替代物

重要!

SSO Server

用户界面客户端

管理员用户

Docker命令

其他

引用


  • 下载源代码 - 3.6 KB

背景

在设置新项目时,有时会有一个完整的先决条件列表才能运行该项目,这可能会导致我们使用多个外部服务。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

单点登录(SSO)

https://www.codeproject.com/Tips/5337112/Running-FTP-SFTP-SMTP-Cache-LDAP-SSO-and-Other-Ser