Add registry-convoy template to build registry using Convoy pools (#143)
This commit is contained in:
parent
5dc83c0e4b
commit
6486b05e79
111
templates/registry-convoy/0/docker-compose.yml
Normal file
111
templates/registry-convoy/0/docker-compose.yml
Normal file
@ -0,0 +1,111 @@
|
||||
db:
|
||||
image: mysql:5.7.10
|
||||
environment:
|
||||
MYSQL_DATABASE: portus
|
||||
MYSQL_ROOT_PASSWORD: ${ROOTPASSWORD}
|
||||
MYSQL_USER: portus
|
||||
MYSQL_PASSWORD: ${DBPASSWORD}
|
||||
tty: true
|
||||
stdin_open: true
|
||||
volume_driver: ${DRIVER}
|
||||
volumes:
|
||||
- ${PFX}-db:/var/lib/mysql
|
||||
labels:
|
||||
registry.portus.db: 1
|
||||
sslproxy:
|
||||
image: nginx:1.9.9
|
||||
tty: true
|
||||
stdin_open: true
|
||||
links:
|
||||
- portus:portus
|
||||
volume_driver: ${DRIVER}
|
||||
volumes:
|
||||
- ${PFX}-certs:/etc/nginx/certs:ro
|
||||
- ${PFX}-proxy:/etc/nginx/conf.d:ro
|
||||
labels:
|
||||
io.rancher.scheduler.affinity:container_label_soft: registry.portus.db=1
|
||||
registry:
|
||||
image: registry:2.3.1
|
||||
environment:
|
||||
REGISTRY_LOG_LEVEL: warn
|
||||
REGISTRY_STORAGE_DELETE_ENABLED: true
|
||||
REGISTRY_AUTH: token
|
||||
REGISTRY_AUTH_TOKEN_REALM: https://${DOMAIN}:${PPORT}/v2/token
|
||||
REGISTRY_AUTH_TOKEN_SERVICE: ${DOMAIN}:${RPORT}
|
||||
REGISTRY_AUTH_TOKEN_ISSUER: ${DOMAIN}
|
||||
REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE: /certs/registry.crt
|
||||
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/registry.crt
|
||||
REGISTRY_HTTP_TLS_KEY: /certs/registry.key
|
||||
REGISTRY_HTTP_SECRET: httpsecret
|
||||
REGISTRY_NOTIFICATIONS_ENDPOINTS: >
|
||||
- name: portus
|
||||
url: http://portus:3000/v2/webhooks/events
|
||||
timeout: 500
|
||||
threshold: 5
|
||||
backoff: 1
|
||||
tty: true
|
||||
stdin_open: true
|
||||
links:
|
||||
- portus:portus
|
||||
volume_driver: ${DRIVER}
|
||||
volumes:
|
||||
- ${PFX}-certs:/certs
|
||||
- ${PFX}-data:/var/lib/registry
|
||||
lb:
|
||||
image: rancher/load-balancer-service
|
||||
tty: true
|
||||
stdin_open: true
|
||||
ports:
|
||||
- ${RPORT}:5000/tcp
|
||||
- ${PPORT}:443/tcp
|
||||
labels:
|
||||
io.rancher.loadbalancer.target.sslproxy: ${PPORT}=443
|
||||
io.rancher.loadbalancer.target.registry: ${RPORT}=5000
|
||||
io.rancher.scheduler.global: 'true'
|
||||
io.rancher.scheduler.affinity:not_host_label: lb=0
|
||||
io.rancher.scheduler.affinity:not_host_label: registry.enabled=false
|
||||
links:
|
||||
- registry:registry
|
||||
- sslproxy:sslproxy
|
||||
portus:
|
||||
image: sshipway/portus:2.0.5
|
||||
environment:
|
||||
PORTUS_MACHINE_FQDN: ${DOMAIN}
|
||||
PORTUS_PRODUCTION_HOST: db
|
||||
PORTUS_PRODUCTION_DATABASE: portus
|
||||
PORTUS_PRODUCTION_USERNAME: portus
|
||||
PORTUS_PRODUCTION_PASSWORD: ${DBPASSWORD}
|
||||
PORTUS_GRAVATAR_ENABLED: true
|
||||
PORTUS_KEY_PATH: /certs/registry.key
|
||||
PORTUS_PASSWORD: ${DBPASSWORD}
|
||||
PORTUS_SECRET_KEY_BASE: ${ROOTPASSWORD}
|
||||
PORTUS_CHECK_SSL_USAGE_ENABLED: true
|
||||
PORTUS_SMTP_ENABLED: false
|
||||
PORTUS_LDAP_ENABLED: ${LDAP}
|
||||
PORTUS_LDAP_HOSTNAME: ${LDAPHOST}
|
||||
PORTUS_LDAP_PORT: ${LDAPPORT}
|
||||
PORTUS_LDAP_METHOD: ${LDAPTLS}
|
||||
PORTUS_LDAP_BASE: ${LDAPBASE}
|
||||
PORTUS_LDAP_UID: cn
|
||||
PORTUS_LDAP_AUTHENTICATION_ENABLED: ${LDAPBIND}
|
||||
PORTUS_LDAP_AUTHENTICATION_BIND_DN: ${LDAPBINDDN}
|
||||
PORTUS_LDAP_AUTHENTICATION_PASSWORD: ${LDAPBINDPASS}
|
||||
PORTUS_LDAP_GUESS_EMAIL_ENABLED: true
|
||||
PORTUS_LDAP_GUESS_EMAIL_ATTR: mail
|
||||
PORTUS_PORT: ${PPORT}
|
||||
REGISTRY_SSL_ENABLED: true
|
||||
REGISTRY_HOSTNAME: ${DOMAIN}
|
||||
REGISTRY_PORT: ${RPORT}
|
||||
REGISTRY_NAME: Registry
|
||||
tty: true
|
||||
stdin_open: true
|
||||
volume_driver: ${DRIVER}
|
||||
volumes:
|
||||
- ${PFX}-certs:/certs
|
||||
- ${PFX}-proxy:/etc/nginx/conf.d
|
||||
links:
|
||||
- db:db
|
||||
labels:
|
||||
io.rancher.container.pull_image: always
|
||||
io.rancher.scheduler.affinity:container_label_soft: registry.portus.db=1
|
||||
registry.portus.app: 1
|
116
templates/registry-convoy/0/rancher-compose.yml
Normal file
116
templates/registry-convoy/0/rancher-compose.yml
Normal file
@ -0,0 +1,116 @@
|
||||
.catalog:
|
||||
name: "Registry"
|
||||
version: "v2.3.1-3.1"
|
||||
description: "Docker Registry"
|
||||
uuid: registry-3
|
||||
questions:
|
||||
- variable: "RPORT"
|
||||
label: "Registry Port"
|
||||
description: "Port on which to run the registry service"
|
||||
default: 5000
|
||||
required: true
|
||||
type: "int"
|
||||
- variable: "PPORT"
|
||||
label: "Admin Port"
|
||||
description: "Port on which to run the SSL Portus administration service and API"
|
||||
default: 443
|
||||
required: true
|
||||
type: "int"
|
||||
- variable: "DBPASSWORD"
|
||||
label: "DB Password"
|
||||
description: "Password for Portus database access, must be 8 characters or longer"
|
||||
required: true
|
||||
default: password
|
||||
type: "password"
|
||||
- variable: "ROOTPASSWORD"
|
||||
label: "DB Root Password"
|
||||
description: "Root Password for MySQL database, must be 8 characters or longer. This is not normally used."
|
||||
required: true
|
||||
default: password
|
||||
type: "password"
|
||||
- variable: "DRIVER"
|
||||
label: "Storage Pool"
|
||||
description: "Convoy storage pool name"
|
||||
required: true
|
||||
type: "string"
|
||||
default: "convoy"
|
||||
- variable: "PFX"
|
||||
label: "Convoy volume prefix"
|
||||
description: "Prefix to use for all Convoy storage pool volumes"
|
||||
required: true
|
||||
type: "string"
|
||||
default: "registry"
|
||||
- variable: "DOMAIN"
|
||||
label: "FQDN"
|
||||
description: "FQDN of server. This should be the CN in the certificates and will be the URL to contact the Registry and Web interface"
|
||||
required: true
|
||||
type: "string"
|
||||
- variable: "LDAP"
|
||||
label: "LDAP Enabled"
|
||||
description: "Enable LDAP authentication"
|
||||
required: true
|
||||
default: false
|
||||
type: "boolean"
|
||||
- variable: "LDAPHOST"
|
||||
label: "LDAP Server"
|
||||
description: "The FQDN of the LDAP server (if LDAP authentication is being used)"
|
||||
required: false
|
||||
default: "ldap.company.com"
|
||||
type: "string"
|
||||
- variable: "LDAPPORT"
|
||||
label: "LDAP Server port"
|
||||
description: "The port number on the LDAP server (if LDAP authentication is being used)"
|
||||
required: false
|
||||
default: 389
|
||||
type: "int"
|
||||
- variable: "LDAPTLS"
|
||||
label: "LDAP TLS"
|
||||
description: "The TLS option for the LDAP server (if LDAP authentication is being used)"
|
||||
required: false
|
||||
default: "starttls"
|
||||
type: "enum"
|
||||
options:
|
||||
- starttls
|
||||
- simple_tls
|
||||
- plain
|
||||
- variable: "LDAPBASE"
|
||||
label: "LDAP Base DN"
|
||||
description: "The Base DN for User lookups on the LDAP server (if LDAP authentication is being used)"
|
||||
required: false
|
||||
default: "ou=People,dc=company,dc=com"
|
||||
type: "string"
|
||||
- variable: "LDAPBIND"
|
||||
label: "LDAP Bind enabled"
|
||||
description: "Should an authenticated Bind be used to access LDAP (if LDAP authentication is being used)"
|
||||
required: false
|
||||
default: false
|
||||
type: "boolean"
|
||||
- variable: "LDAPBINDDN"
|
||||
label: "LDAP Bind DN"
|
||||
description: "The DN to use for binding to the LDAP server (if LDAP authentication is being used with Bind enabled)"
|
||||
required: false
|
||||
default: "ou=portus,dc=company,dc=com"
|
||||
type: "string"
|
||||
- variable: "LDAPBINDPASS"
|
||||
label: "LDAP Bind Password"
|
||||
description: "The password to use for binding to the LDAP server (if LDAP authentication is being used with Bind enabled)"
|
||||
required: false
|
||||
default: "password"
|
||||
type: "password"
|
||||
db:
|
||||
scale: 1
|
||||
sslproxy:
|
||||
scale: 1
|
||||
lb:
|
||||
load_balancer_config:
|
||||
haproxy_config: {}
|
||||
health_check:
|
||||
port: 42
|
||||
interval: 2000
|
||||
unhealthy_threshold: 3
|
||||
healthy_threshold: 2
|
||||
response_timeout: 2000
|
||||
registry:
|
||||
scale: 1
|
||||
portus:
|
||||
scale: 1
|
77
templates/registry-convoy/README.md
Normal file
77
templates/registry-convoy/README.md
Normal file
@ -0,0 +1,77 @@
|
||||
# Registry
|
||||
|
||||
This catalogue item consists of a Registry, and the Portus web UI for
|
||||
authentication. There is also a MySQL database for storage, and a nginx
|
||||
proxy to provide SSL for the web frontend.
|
||||
|
||||
This version mounts volumes from Convoy rather than using shared mounts.
|
||||
A common prefix is expected for the volumes to be created.
|
||||
|
||||
If no certificates are provided in the /certs directory, then the system
|
||||
will generate self-signed SSL certificates to use.
|
||||
|
||||
Note that the containers will take a significant amount of time to initialse after
|
||||
they are started. You may need to wait 15 minutes for the Portus instance
|
||||
to finally spot the registry instance and perform its first synchronisation,
|
||||
after which the web interface will come online.
|
||||
|
||||
## Backing Store
|
||||
|
||||
A set of Convoy volues are used to host the Registry, and also the
|
||||
MySQL database, as well as the certificates under certs/server.crt
|
||||
and certs/server.key; if no certificate is present, then a self-signed
|
||||
certificate will be created (valid for one year only) that can later be
|
||||
replaced.
|
||||
|
||||
## LDAP Authentication
|
||||
|
||||
If you enable LDAP authentication, then this will be used for both the
|
||||
Web interface and for Registry authentication. The LDAP configuration
|
||||
may optionally have authenticated Bind credentials, and TLS options.
|
||||
|
||||
## Security
|
||||
|
||||
All connections are protected by SSL. A self-signed certificate is
|
||||
automatically generated as certs/server.crt and certs/server.key in
|
||||
the persistent shared storage; this can be replaced if necessary.
|
||||
|
||||
The certificate is used for registry access, for web admin access,
|
||||
and for signing API access keys.
|
||||
|
||||
Registry access is controlled by the same user access as the web interface;
|
||||
so if you link to LDAP then this will also lock the Registry access.
|
||||
|
||||
If not using LDAP, then the 'portus' use password is the Database Password
|
||||
as defined in the template options.
|
||||
|
||||
## Access
|
||||
|
||||
The template will create a Load Balancer for access to the Registry and
|
||||
to the Web Admin interface. This will run on all Hosts without the label
|
||||
LB=0, listening on the defined ports.
|
||||
|
||||
To access the web UI, use https on the hostname and port you configured.
|
||||
|
||||
To upload to the repository, use an SSL connection to the hostname and
|
||||
registry port you configured.
|
||||
|
||||
## Administration
|
||||
|
||||
The first user to log in to the web interface will be granted Admin
|
||||
privileges.
|
||||
|
||||
## Synchronisation with Registry
|
||||
|
||||
The Web interface will be initially configured to use the incorporated
|
||||
registry. A periodic synchronisation task and the upload webhook will
|
||||
ensure they are in synch. If, for some reason, your registry already
|
||||
has items (for example, if you are recreating the stack on preexisting
|
||||
shared storage) then it may take up to 5min for the Portus Web UI to
|
||||
synchronise the registry content to its database.
|
||||
|
||||
## Feedback
|
||||
|
||||
This is a complex setup, and uses a custom build of the Portus container,
|
||||
which is not yet available as an official release. You may need to
|
||||
customise this heavily for your own site. Any feedback can
|
||||
be logged against https://github.com/sshipway/Portus
|
201
templates/registry-convoy/catalogIcon-registry.svg
Normal file
201
templates/registry-convoy/catalogIcon-registry.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 34 KiB |
7
templates/registry-convoy/config.yml
Normal file
7
templates/registry-convoy/config.yml
Normal file
@ -0,0 +1,7 @@
|
||||
name: Registry-Convoy
|
||||
description: |
|
||||
Secure Docker registry using Convoy. Web based administration. Optional LDAP authentication.
|
||||
version: v2.3.1-3.1
|
||||
category: Applications
|
||||
maintainer: Steve Shipway <s.shipway@auckland.ac.nz>
|
||||
|
Loading…
x
Reference in New Issue
Block a user