|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# Vars |
| 4 | +CERTS_PATH="/root/certs" |
| 5 | +DOCKER_PATH="/var/lib/docker" |
| 6 | +DOCKER_MIRROR_CACHE_PATH="/docker_mirror_cache" |
| 7 | + |
| 8 | +# Add proxy to docker |
| 9 | +if [ ! -d /etc/systemd/system/docker.service.d ]; then |
| 10 | + mkdir /etc/systemd/system/docker.service.d |
| 11 | + cat << 'EOF' > /etc/systemd/system/docker.service.d/proxy.conf |
| 12 | +[Service] |
| 13 | +Environment="NO_PROXY=*.docker.io,*.cloudflarestorage.com" |
| 14 | +Environment="HTTPS_PROXY=https://user1:password1@my-proxy.local:3128" |
| 15 | +EOF |
| 16 | +fi |
| 17 | + |
| 18 | +# Install packages |
| 19 | +apt-get update |
| 20 | +apt-get install -y docker.io docker-compose docker-buildx apache2-utils |
| 21 | + |
| 22 | +# Start and enable docker |
| 23 | +systemctl is-active --quiet docker || systemctl enable docker |
| 24 | +systemctl is-active --quiet docker || systemctl start docker |
| 25 | + |
| 26 | +if [ ! -f ${CERTS_PATH}/custom_ca.key ]; then |
| 27 | + # Generate certificates |
| 28 | + mkdir -p ${CERTS_PATH} |
| 29 | + ## CA |
| 30 | + openssl genrsa -out ${CERTS_PATH}/custom_ca.key 4096 |
| 31 | + openssl req -x509 -new -nodes -key ${CERTS_PATH}/custom_ca.key -sha256 -days 3650 -subj "/C=AU/ST=Some-State/O=MyOrg/CN=local" -out ${CERTS_PATH}/custom_ca.crt |
| 32 | + |
| 33 | + ## Proxy CRT |
| 34 | + openssl genrsa -out ${CERTS_PATH}/proxy_server.key 4096 |
| 35 | + openssl req -new -sha256 \ |
| 36 | + -key ${CERTS_PATH}/proxy_server.key \ |
| 37 | + -subj "/C=AU/ST=Some-State/O=ORG/OU=ORG_UNIT/CN=my-proxy.local" \ |
| 38 | + -reqexts SAN \ |
| 39 | + -config <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:my-proxy.local")) \ |
| 40 | + -out ${CERTS_PATH}/proxy_server.csr |
| 41 | + openssl x509 -req -extfile <(printf "subjectAltName=DNS:my-proxy.local") -days 3650 -in ${CERTS_PATH}/proxy_server.csr -CA ${CERTS_PATH}/custom_ca.crt -CAkey ${CERTS_PATH}/custom_ca.key -CAcreateserial -out ${CERTS_PATH}/proxy_server.crt -sha256 |
| 42 | + |
| 43 | + ## Docker-registry CRT |
| 44 | + openssl genrsa -out ${CERTS_PATH}/server.key 4096 |
| 45 | + openssl req -new -sha256 \ |
| 46 | + -key ${CERTS_PATH}/server.key \ |
| 47 | + -subj "/C=AU/ST=Some-State/O=ORG/OU=ORG_UNIT/CN=my-registry.local" \ |
| 48 | + -reqexts SAN \ |
| 49 | + -config <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:my-registry.local")) \ |
| 50 | + -out ${CERTS_PATH}/server.csr |
| 51 | + openssl x509 -req -extfile <(printf "subjectAltName=DNS:my-registry.local") -days 3650 -in ${CERTS_PATH}/server.csr -CA ${CERTS_PATH}/custom_ca.crt -CAkey ${CERTS_PATH}/custom_ca.key -CAcreateserial -out ${CERTS_PATH}/server.crt -sha256 |
| 52 | + |
| 53 | + #Add ca-cert to system |
| 54 | + cp ${CERTS_PATH}/custom_ca.crt /usr/local/share/ca-certificates |
| 55 | + update-ca-certificates |
| 56 | +fi |
| 57 | + |
| 58 | +grep -q "my-proxy.local" /etc/hosts |
| 59 | +if [[ $? != 0 ]]; then |
| 60 | + echo "127.0.0.1 my-proxy.local" >> /etc/hosts |
| 61 | +fi |
| 62 | + |
| 63 | +# Build image |
| 64 | +docker buildx bake --file /vagrant/docker-bake.hcl --set *.context=/vagrant |
| 65 | + |
| 66 | +# Create docker network |
| 67 | +docker network inspect registry >/dev/null 2>&1 || docker network create registry |
| 68 | + |
| 69 | +# Run docker registry container |
| 70 | +if [ ! "$(docker ps -a -q -f name=my-registry)" ]; then |
| 71 | + docker run -dit --name my-registry \ |
| 72 | + --hostname my-registry.local \ |
| 73 | + -v ${CERTS_PATH}:/certs \ |
| 74 | + -v ${DOCKER_MIRROR_CACHE_PATH}/docker-registry:/var/lib/registry \ |
| 75 | + -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \ |
| 76 | + -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt \ |
| 77 | + -e REGISTRY_HTTP_TLS_KEY=/certs/server.key \ |
| 78 | + --network registry \ |
| 79 | + registry:2 |
| 80 | +fi |
| 81 | + |
| 82 | +# Run docker registry cache container |
| 83 | +if [ ! "$(docker ps -a -q -f name=openresty_docker_registry_proxy)" ]; then |
| 84 | + mkdir ${DOCKER_MIRROR_CACHE_PATH}/docker-cache/ |
| 85 | + chown 1001:1001 ${DOCKER_MIRROR_CACHE_PATH}/docker-cache/ |
| 86 | + chown 1001:1001 ${CERTS_PATH}/*server.{crt,key} |
| 87 | + docker run -dit --name openresty_docker_registry_proxy \ |
| 88 | + -p 3128:3128 \ |
| 89 | + -v ${DOCKER_MIRROR_CACHE_PATH}/docker-cache/:/docker_mirror_cache \ |
| 90 | + -v ${CERTS_PATH}:/certs \ |
| 91 | + -e VERIFY_SSL=false \ |
| 92 | + -e CACHE_MAX_SIZE=5G \ |
| 93 | + -e ALLOW_PUSH=true \ |
| 94 | + -e ENABLE_MANIFEST_CACHE=false \ |
| 95 | + -e REGISTRIES=my-registry.local \ |
| 96 | + -e ALLOW_UNKNOWN_REGISTRIES=false \ |
| 97 | + -e HTPASSWD=$(htpasswd -nbB user1 password1) \ |
| 98 | + --network registry \ |
| 99 | + docker-registry-proxy-cache:latest |
| 100 | +fi |
0 commit comments