瀏覽代碼

Add multiple domains

multi_domain
ßingen 6 年之前
父節點
當前提交
79b51cfbc2
共有 21 個檔案被更改,包括 127 行新增75 行删除
  1. +5
    -7
      add_dns_entries.sh
  2. +5
    -7
      add_dns_entries_noswarm.sh
  3. +2
    -3
      docker-compose.yml
  4. +8
    -2
      env.template
  5. +1
    -1
      gogs.env.template
  6. +0
    -5
      haproxy.env.template
  7. +1
    -1
      images/email/config/postfix/ldap_virtual_aliases.cf
  8. +2
    -2
      images/email/config/postfix/ldap_virtual_recipients.cf
  9. +2
    -2
      images/email/startup.sh
  10. +2
    -2
      images/gogs/app.ini
  11. +4
    -2
      images/gogs/docker-entrypoint.sh
  12. +12
    -5
      images/haproxy/haproxy.cfg
  13. +27
    -15
      images/haproxy/startup.sh
  14. +11
    -4
      images/nextcloud/docker-entrypoint.sh
  15. +1
    -1
      images/openldap/data/001_admin_mail.ldif
  16. +3
    -3
      images/openldap/startup.sh
  17. +3
    -3
      images/openldap/users/userimport_example.ldif.template
  18. +0
    -2
      mail.env.template
  19. +2
    -2
      nextcloud.env.template
  20. +0
    -1
      openldap.env.template
  21. +36
    -5
      setup_noswarm.sh

+ 5
- 7
add_dns_entries.sh 查看文件

source .env source .env


# global domain with all subdomains # global domain with all subdomains
echo address=/.${LDAP_DOMAIN}/${IP_LOOKUP} > /tmp/${CONF_FILE}
# mail
#echo address=/${MAIL_HOSTNAME}.${LDAP_DOMAIN}/${IP_LOOKUP} > /tmp/${CONF_FILE}
# Nextcloud
#echo address=/${NEXTCLOUD_SERVER_NAME}.${LDAP_DOMAIN}/${IP_LOOKUP} >> /tmp/${CONF_FILE}
# gogs
#echo address=/gogs.${LDAP_DOMAIN}/${IP_LOOKUP} >> /tmp/${CONF_FILE}
echo address=/.${DOMAIN}/${IP_LOOKUP} > /tmp/${CONF_FILE}
# virtual domains
for domain in ${VIRTUAL_DOMAINS[@]}; do
echo address=/.${domain}/${IP_LOOKUP} >> /tmp/${CONF_FILE}
done;


# ##### Add entries to PiHole ###### # # ##### Add entries to PiHole ###### #



+ 5
- 7
add_dns_entries_noswarm.sh 查看文件

source .env source .env


# global domain with all subdomains # global domain with all subdomains
echo address=/.${LDAP_DOMAIN}/${IP_LOOKUP} > /tmp/${CONF_FILE}
# mail
#echo address=/${MAIL_HOSTNAME}.${LDAP_DOMAIN}/${IP_LOOKUP} > /tmp/${CONF_FILE}
# Nextcloud
#echo address=/${NEXTCLOUD_SERVER_NAME}.${LDAP_DOMAIN}/${IP_LOOKUP} >> /tmp/${CONF_FILE}
# gogs
#echo address=/gogs.${LDAP_DOMAIN}/${IP_LOOKUP} >> /tmp/${CONF_FILE}
echo address=/.${DOMAIN}/${IP_LOOKUP} > /tmp/${CONF_FILE}
# virtual domains
for domain in ${VIRTUAL_DOMAINS[@]}; do
echo address=/.${domain}/${IP_LOOKUP} >> /tmp/${CONF_FILE}
done;


# ##### Add entries to PiHole ###### # # ##### Add entries to PiHole ###### #



+ 2
- 3
docker-compose.yml 查看文件

- ${LDAP_DATA_VOLUME_PATH}:/var/lib/ldap - ${LDAP_DATA_VOLUME_PATH}:/var/lib/ldap
- ${LDAP_CONFIG_VOLUME_PATH}:/etc/ldap/slapd.d - ${LDAP_CONFIG_VOLUME_PATH}:/etc/ldap/slapd.d
- ${LDAP_CERTS_VOLUME_PATH}:/container/service/slapd/assets/certs/ - ${LDAP_CERTS_VOLUME_PATH}:/container/service/slapd/assets/certs/
hostname: openldap.${LDAP_DOMAIN}
hostname: openldap.${DOMAIN}


db: db:
build: build:
image: bingen/${ARCH}-mailserver:latest image: bingen/${ARCH}-mailserver:latest
depends_on: depends_on:
- openldap - openldap
hostname: ${MAIL_HOSTNAME}.${MAIL_DOMAIN}
#domainname: ${MAIL_DOMAIN}
hostname: ${MAIL_HOSTNAME}.${DOMAIN}
env_file: env_file:
- mail.env - mail.env
networks: networks:

+ 8
- 2
env.template 查看文件



ARCH=ARCH_PLACEHOLDER ARCH=ARCH_PLACEHOLDER


# DOMAINS

DOMAIN=${DOMAIN}
VIRTUAL_DOMAINS=${VIRTUAL_DOMAINS}
DOMAINS=${DOMAIN} ${VIRTUAL_DOMAINS}

# DB # DB
DB_DATA_VOLUME_PATH=${VOLUMES_PATH}/mariadb/data DB_DATA_VOLUME_PATH=${VOLUMES_PATH}/mariadb/data
#DB_CONFIG_VOLUME_PATH=${VOLUMES_PATH}/mariadb/config #DB_CONFIG_VOLUME_PATH=${VOLUMES_PATH}/mariadb/config


# LDAP # LDAP
LDAP_DOMAIN=${DOMAIN}
LDAP_ORGANIZATION=${ORGANIZATION} LDAP_ORGANIZATION=${ORGANIZATION}
LDAP_EXTENSION=${EXTENSION} LDAP_EXTENSION=${EXTENSION}
LDAP_ADMIN_PWD_FILE=/run/secrets/admin_pwd LDAP_ADMIN_PWD_FILE=/run/secrets/admin_pwd
# MAIL # MAIL


MAIL_HOSTNAME=mail MAIL_HOSTNAME=mail
MAIL_DOMAIN=${DOMAIN}
MAIL_DATA_VOLUME_PATH=${VOLUMES_PATH}/mail MAIL_DATA_VOLUME_PATH=${VOLUMES_PATH}/mail
#MAIL_STATE_VOLUME_PATH=${VOLUMES_PATH}/mail/state #MAIL_STATE_VOLUME_PATH=${VOLUMES_PATH}/mail/state
MAIL_DATA_PATH=/srv/vmail MAIL_DATA_PATH=/srv/vmail
# NEXTCLOUD # NEXTCLOUD


NEXTCLOUD_VERSION=nextcloud-15.0.5 NEXTCLOUD_VERSION=nextcloud-15.0.5
NEXTCLOUD_SERVER_NAME=nextcloud
# Internal data path # Internal data path
NEXTCLOUD_DATA_PATH=/srv/nextcloud/data NEXTCLOUD_DATA_PATH=/srv/nextcloud/data
# external Volume path # external Volume path


# GOGS # GOGS


GOGS_SERVER_NAME=gogs
GOGS_DATA_VOLUME_PATH=${VOLUMES_PATH}/gogs/data GOGS_DATA_VOLUME_PATH=${VOLUMES_PATH}/gogs/data


# PI-HOLE # PI-HOLE

+ 1
- 1
gogs.env.template 查看文件

GOGS_DOMAIN=gogs.${DOMAIN}
GOGS_DOMAIN=${DOMAIN}
GOGS_ADMIN_PWD_FILE=/run/secrets/admin_pwd GOGS_ADMIN_PWD_FILE=/run/secrets/admin_pwd
ADMIN_EMAIL=${ADMIN_EMAIL} ADMIN_EMAIL=${ADMIN_EMAIL}



+ 0
- 5
haproxy.env.template 查看文件

# services
NEXTCLOUD_URL=nextcloud.${DOMAIN}
GOGS_URL=gogs.${DOMAIN}
ZONEMINDER_URL=zoneminder.${DOMAIN}

# Let's Encrypt # Let's Encrypt
ADMIN_EMAIL=${ADMIN_EMAIL} ADMIN_EMAIL=${ADMIN_EMAIL}

+ 1
- 1
images/email/config/postfix/ldap_virtual_aliases.cf 查看文件

bind_pw = ${LDAP_BIND_PWD} bind_pw = ${LDAP_BIND_PWD}
server_host = ${LDAP_SERVER_HOST} server_host = ${LDAP_SERVER_HOST}
search_base = ${LDAP_SEARCH_BASE} search_base = ${LDAP_SEARCH_BASE}
domain = ${DOMAIN}
#domain = ${DOMAINS}
query_filter = (&(mailAlias=%s)(mailEnabled=TRUE)) query_filter = (&(mailAlias=%s)(mailEnabled=TRUE))
result_attribute = mail, email result_attribute = mail, email

+ 2
- 2
images/email/config/postfix/ldap_virtual_recipients.cf 查看文件

bind_pw = ${LDAP_BIND_PWD} bind_pw = ${LDAP_BIND_PWD}
server_host = ${LDAP_SERVER_HOST} server_host = ${LDAP_SERVER_HOST}
search_base = ${LDAP_SEARCH_BASE} search_base = ${LDAP_SEARCH_BASE}
domain = ${DOMAIN}
query_filter = (&(mail=%s)(mailEnabled=TRUE))
domain = ${DOMAINS}
query_filter = (&(|(mail=%s)(uniqueIdentifier=%u))(mailEnabled=TRUE))
result_attribute = mail result_attribute = mail

+ 2
- 2
images/email/startup.sh 查看文件

sed -i "s/\${LDAP_BIND_DN}/${LDAP_BIND_DN}/g" $1 sed -i "s/\${LDAP_BIND_DN}/${LDAP_BIND_DN}/g" $1
sed -i "s/\${LDAP_SEARCH_BASE}/${LDAP_SEARCH_BASE}/g" $1 sed -i "s/\${LDAP_SEARCH_BASE}/${LDAP_SEARCH_BASE}/g" $1
sed -i "s/\${DOMAIN}/${DOMAIN}/g" $1 sed -i "s/\${DOMAIN}/${DOMAIN}/g" $1
sed -i "s/\${DOMAINS}/${DOMAINS[*]}/g" $1
sed -i "s/\${LDAP_BIND_PWD}/${LDAP_BIND_PWD}/g" $1 sed -i "s/\${LDAP_BIND_PWD}/${LDAP_BIND_PWD}/g" $1
} }
for i in `find /tmp/config/postfix -type f -exec ls {} \;`; do for i in `find /tmp/config/postfix -type f -exec ls {} \;`; do
cp -f /tmp/config/postfix/* /etc/postfix/ cp -f /tmp/config/postfix/* /etc/postfix/
mkdir -p /etc/postfix/sasl mkdir -p /etc/postfix/sasl
cp -f /tmp/config/postfix/sasl/* /etc/postfix/sasl/sasl cp -f /tmp/config/postfix/sasl/* /etc/postfix/sasl/sasl
echo "${DOMAIN} OK" >> /etc/postfix/virtual_domains;
for i in ${VIRTUAL_DOMAINS[@]}; do
for i in ${DOMAINS[@]}; do
echo "$i OK" >> /etc/postfix/virtual_domains; echo "$i OK" >> /etc/postfix/virtual_domains;
done; done;
postmap hash:/etc/postfix/virtual_domains postmap hash:/etc/postfix/virtual_domains

+ 2
- 2
images/gogs/app.ini 查看文件

RUN_MODE = prod RUN_MODE = prod


[server] [server]
DOMAIN = GOGS_DOMAIN
DOMAIN = GOGS_FULL_DOMAIN
SSH_ROOT_PATH = /data/ssh SSH_ROOT_PATH = /data/ssh
PROTOCOL = https PROTOCOL = https
ROOT_URL = https://GOGS_DOMAIN/
ROOT_URL = https://GOGS_FULL_DOMAIN/
CERT_FILE = /data/gogs/https/cert.pem CERT_FILE = /data/gogs/https/cert.pem
KEY_FILE = /data/gogs/https/key.pem KEY_FILE = /data/gogs/https/key.pem
HTTP_PORT = 2443 HTTP_PORT = 2443

+ 4
- 2
images/gogs/docker-entrypoint.sh 查看文件

#!/bin/bash #!/bin/bash


GOGS_FULL_DOMAIN=${GOGS_SERVER_NAME}.${GOGS_DOMAIN}

source /etc/profile.d/gogs.sh source /etc/profile.d/gogs.sh


# set DB root password from secret # set DB root password from secret
# SSH certs # SSH certs
if [[ ! -e ${GOGS_CUSTOM}/https/cert.pem || ! -e ${GOGS_CUSTOM}/https/key.pem ]]; then if [[ ! -e ${GOGS_CUSTOM}/https/cert.pem || ! -e ${GOGS_CUSTOM}/https/key.pem ]]; then
su git -c "mkdir -p ${GOGS_CUSTOM}/https" su git -c "mkdir -p ${GOGS_CUSTOM}/https"
su git -c "cd ${GOGS_CUSTOM}/https && ${GOGS_PATH}/gogs cert --ca=true --duration=8760h0m0s --host=${GOGS_DOMAIN} && cd -"
su git -c "cd ${GOGS_CUSTOM}/https && ${GOGS_PATH}/gogs cert --ca=true --duration=8760h0m0s --host=${GOGS_FULL_DOMAIN} && cd -"
fi fi


# ### Conf file ### # ### Conf file ###
mv ${GOGS_PATH}/custom/conf/app.ini ${CONF_FILE} mv ${GOGS_PATH}/custom/conf/app.ini ${CONF_FILE}


echo Setting domain echo Setting domain
sed -i "s/GOGS_DOMAIN/${GOGS_DOMAIN}/g" ${CONF_FILE}
sed -i "s/GOGS_FULL_DOMAIN/${GOGS_FULL_DOMAIN}/g" ${CONF_FILE}


# DB conf # DB conf
echo Setting DB conf echo Setting DB conf

+ 12
- 5
images/haproxy/haproxy.cfg 查看文件

# https://www.haproxy.com/blog/how-to-get-ssl-with-haproxy-getting-rid-of-stunnel-stud-nginx-or-pound/ # https://www.haproxy.com/blog/how-to-get-ssl-with-haproxy-getting-rid-of-stunnel-stud-nginx-or-pound/
frontend https-in frontend https-in
mode http mode http
bind *:443 ssl crt /etc/letsencrypt/haproxy/${NEXTCLOUD_URL}.pem crt /etc/letsencrypt/haproxy/${GOGS_URL}.pem
#bind *:443 ssl crt /etc/letsencrypt/haproxy/${NEXTCLOUD_URL}.pem crt /etc/letsencrypt/haproxy/${GOGS_URL}.pem
bind *:443 ssl ${HAPROXY_CERTS}


acl letsencrypt-acl path_beg /.well-known/acme-challenge/ acl letsencrypt-acl path_beg /.well-known/acme-challenge/
#acl nextcloud-acl ssl_fc_sni ${NEXTCLOUD_URL}
#acl gogs-acl ssl_fc_sni ${GOGS_URL}
acl nextcloud-acl ssl_fc_sni_reg ^${NEXTCLOUD_SERVER_NAME}\.
acl gogs-acl ssl_fc_sni_reg ^${GOGS_SERVER_NAME}\.


use_backend letsencrypt-backend if letsencrypt-acl use_backend letsencrypt-backend if letsencrypt-acl
use_backend nextcloud if { ssl_fc_sni ${NEXTCLOUD_URL} }
use_backend gogs if { ssl_fc_sni ${GOGS_URL} }
use_backend nextcloud if nextcloud-acl
use_backend gogs if gogs-acl


default_backend nextcloud default_backend nextcloud


frontend http-in frontend http-in
bind *:80 bind *:80
acl letsencrypt-acl path_beg /.well-known/acme-challenge/ acl letsencrypt-acl path_beg /.well-known/acme-challenge/
acl is_nextcloud hdr_end(host) -i ${NEXTCLOUD_URL}
acl is_gogs hdr_end(host) -i ${GOGS_URL}
#acl is_nextcloud hdr_end(host) -i ${NEXTCLOUD_URL}
#acl is_gogs hdr_end(host) -i ${GOGS_URL}
acl is_nextcloud hdr_reg(host) ^${NEXTCLOUD_SERVER_NAME}\.
acl is_gogs hdr_reg(host) ^${GOGS_SERVER_NAME}\.


use_backend letsencrypt-backend if letsencrypt-acl use_backend letsencrypt-backend if letsencrypt-acl
use_backend nextcloud-insecure if is_nextcloud use_backend nextcloud-insecure if is_nextcloud

+ 27
- 15
images/haproxy/startup.sh 查看文件



mkdir -p /etc/letsencrypt/haproxy mkdir -p /etc/letsencrypt/haproxy


sed -i "s/\${NEXTCLOUD_URL}/${NEXTCLOUD_URL}/g" $CFG_FILE
sed -i "s/\${GOGS_URL}/${GOGS_URL}/g" $CFG_FILE

# Let's Encrypt # Let's Encrypt


# Following these instructions: # Following these instructions:
haproxy -f $CFG_LE_FILE -D -p /tmp/haproxy.pid haproxy -f $CFG_LE_FILE -D -p /tmp/haproxy.pid


# Get Let's Encrypt certificates # Get Let's Encrypt certificates
for _URL in ${NEXTCLOUD_URL} ${GOGS_URL}; do
if [[ ! -s /etc/letsencrypt/haproxy/${_URL}.pem ]]; then
# Query Let's Encrypt
certbot certonly -d ${_URL} \
--email ${ADMIN_EMAIL} --non-interactive --agree-tos \
--standalone --http-01-port=${LETSENCRYPT_PORT}
if [ $? -eq 0 ]; then
cat /etc/letsencrypt/live/${_URL}/fullchain.pem \
/etc/letsencrypt/live/${_URL}/privkey.pem \
> /etc/letsencrypt/haproxy/${_URL}.pem
HAPROXY_CERTS=""
for domain in ${DOMAINS}; do
for server_name in ${NEXTCLOUD_SERVER_NAME} ${GOGS_SERVER_NAME}; do
_URL=${server_name}.${domain};
echo ${_URL}
HAPROXY_CERTS="${HAPROXY_CERTS} crt /etc/letsencrypt/haproxy/${_URL}.pem";
if [[ ! -s /etc/letsencrypt/haproxy/${_URL}.pem ]]; then
# Query Let's Encrypt
certbot certonly -d ${_URL} \
--email ${ADMIN_EMAIL} --non-interactive --agree-tos \
--standalone --http-01-port=${LETSENCRYPT_PORT}
if [ $? -eq 0 ]; then
cat /etc/letsencrypt/live/${_URL}/fullchain.pem \
/etc/letsencrypt/live/${_URL}/privkey.pem \
> /etc/letsencrypt/haproxy/${_URL}.pem
fi
fi fi
fi
done;
done
done

#sed -i "s/\${NEXTCLOUD_URL}/${NEXTCLOUD_URL}/g" $CFG_FILE
#sed -i "s/\${GOGS_URL}/${GOGS_URL}/g" $CFG_FILE
sed -i "s/\${NEXTCLOUD_SERVER_NAME}/${NEXTCLOUD_SERVER_NAME}/g" $CFG_FILE
sed -i "s/\${GOGS_SERVER_NAME}/${GOGS_SERVER_NAME}/g" $CFG_FILE
echo sed -i "s/\${HAPROXY_CERTS}/${HAPROXY_CERTS}/g" ${CFG_FILE}
sed -i "s/\${HAPROXY_CERTS}/${HAPROXY_CERTS//\//\\/}/g" ${CFG_FILE}

cat ${CFG_FILE}


echo Killing haproxy `cat /tmp/haproxy.pid` echo Killing haproxy `cat /tmp/haproxy.pid`
kill -SIGTERM `cat /tmp/haproxy.pid` kill -SIGTERM `cat /tmp/haproxy.pid`

+ 11
- 4
images/nextcloud/docker-entrypoint.sh 查看文件

exit 1 exit 1
fi fi


sed -i "s/server_name localhost/server_name ${NEXTCLOUD_SERVER_NAME}.${NEXTCLOUD_DOMAIN} ${NEXTCLOUD_SERVER_NAME}/g" /etc/nginx/sites-available/default
sed -i "s/server_name localhost/server_name ${NEXTCLOUD_SERVER_NAME}.${DOMAIN} ${NEXTCLOUD_SERVER_NAME}/g" /etc/nginx/sites-available/default


# set Admin password from secret # set Admin password from secret
if [ ! -z $NEXTCLOUD_ADMIN_PWD_FILE -a -f $NEXTCLOUD_ADMIN_PWD_FILE ]; then if [ ! -z $NEXTCLOUD_ADMIN_PWD_FILE -a -f $NEXTCLOUD_ADMIN_PWD_FILE ]; then
if [ ! -z "${NEXTCLOUD_SECRET}" ]; then if [ ! -z "${NEXTCLOUD_SECRET}" ]; then
sudo -u www-data php occ config:system:set secret --value "${NEXTCLOUD_SECRET}" sudo -u www-data php occ config:system:set secret --value "${NEXTCLOUD_SECRET}"
fi fi
sudo -u www-data php occ config:system:set trusted_domains 0 --value ${NEXTCLOUD_SERVER_NAME}.${NEXTCLOUD_DOMAIN}
sudo -u www-data php occ config:system:set trusted_domains 1 --value ${NEXTCLOUD_DOMAIN}
#sudo -u www-data php occ config:system:set trusted_domains 0 --value ${NEXTCLOUD_SERVER_NAME}.${DOMAIN}
#sudo -u www-data php occ config:system:set trusted_domains 1 --value ${DOMAIN}
index=0
for domain in ${DOMAINS[@]}; do
sudo -u www-data php occ config:system:set trusted_domains ${index} --value ${NEXTCLOUD_SERVER_NAME}.${domain}
index=$((${index}+1))
sudo -u www-data php occ config:system:set trusted_domains ${index} --value ${domain}
index=$((${index}+1))
done;
# Already in manitenance:install command: # Already in manitenance:install command:
#sudo -u www-data php occ config:system:set datadirectory ${NEXTCLOUD_DATA_PATH} #sudo -u www-data php occ config:system:set datadirectory ${NEXTCLOUD_DATA_PATH}
#sudo -u www-data php occ config:system:set dbtype --value mysql #sudo -u www-data php occ config:system:set dbtype --value mysql
#sudo -u www-data php occ config:system:set dbuser --value ${NEXTCLOUD_DB_USER} #sudo -u www-data php occ config:system:set dbuser --value ${NEXTCLOUD_DB_USER}
#sudo -u www-data php occ config:system:set dbpassword --value ${NEXTCLOUD_DB_PWD} #sudo -u www-data php occ config:system:set dbpassword --value ${NEXTCLOUD_DB_PWD}
sudo -u www-data php occ config:system:set mail_from_address --value postmaster sudo -u www-data php occ config:system:set mail_from_address --value postmaster
sudo -u www-data php occ config:system:set mail_domain --value ${NEXTCLOUD_DOMAIN}
sudo -u www-data php occ config:system:set mail_domain --value ${DOMAIN}
sudo -u www-data php occ config:system:set ldapIgnoreNamingRules --value false sudo -u www-data php occ config:system:set ldapIgnoreNamingRules --value false
sudo -u www-data php occ config:system:set ldapProviderFactory --value "\\OCA\\User_LDAP\\LDAPProviderFactory" sudo -u www-data php occ config:system:set ldapProviderFactory --value "\\OCA\\User_LDAP\\LDAPProviderFactory"
# https://docs.nextcloud.com/server/13/admin_manual/configuration_server/caching_configuration.html # https://docs.nextcloud.com/server/13/admin_manual/configuration_server/caching_configuration.html

+ 1
- 1
images/openldap/data/001_admin_mail.ldif 查看文件

dn: cn=admin,dc=${LDAP_ORGANIZATION},dc=${LDAP_EXTENSION} dn: cn=admin,dc=${LDAP_ORGANIZATION},dc=${LDAP_EXTENSION}
changetype: modify changetype: modify
add: mail add: mail
mail: admin@${LDAP_DOMAIN}
mail: admin@${DOMAIN}

+ 3
- 3
images/openldap/startup.sh 查看文件

&& echo slapd slapd/password2 password ${LDAP_ADMIN_PWD} | debconf-set-selections \ && echo slapd slapd/password2 password ${LDAP_ADMIN_PWD} | debconf-set-selections \
&& echo slapd slapd/password1 password ${LDAP_ADMIN_PWD} | debconf-set-selections \ && echo slapd slapd/password1 password ${LDAP_ADMIN_PWD} | debconf-set-selections \
&& echo slapd slapd/dump_database_destdir string /var/backups/slapd-VERSION | debconf-set-selections \ && echo slapd slapd/dump_database_destdir string /var/backups/slapd-VERSION | debconf-set-selections \
&& echo slapd slapd/domain string ${LDAP_DOMAIN} | debconf-set-selections \
&& echo slapd slapd/domain string ${DOMAIN} | debconf-set-selections \
&& echo slapd shared/organization string ${LDAP_ORGANIZATION} | debconf-set-selections \ && echo slapd shared/organization string ${LDAP_ORGANIZATION} | debconf-set-selections \
&& echo slapd slapd/purge_database boolean true | debconf-set-selections \ && echo slapd slapd/purge_database boolean true | debconf-set-selections \
&& echo slapd slapd/move_old_database boolean true | debconf-set-selections \ && echo slapd slapd/move_old_database boolean true | debconf-set-selections \
#pid="$!" #pid="$!"
#echo $pid #echo $pid
for i in {30..0}; do for i in {30..0}; do
ldapsearch -x -w ${LDAP_ADMIN_PWD} -D cn=admin,dc=${LDAP_DOMAIN},dc=${LDAP_EXTENSION} -b dc=${LDAP_DOMAIN},dc=${LDAP_EXTENSION} -LLL # &> /dev/null
ldapsearch -x -w ${LDAP_ADMIN_PWD} -D cn=admin,dc=${DOMAIN},dc=${LDAP_EXTENSION} -b dc=${DOMAIN},dc=${LDAP_EXTENSION} -LLL # &> /dev/null
r="$?" r="$?"
echo result $r echo result $r
# TODO: it returns 49, Bad Credentials, # TODO: it returns 49, Bad Credentials,
echo $1 echo $1
sed -i "s/\${LDAP_ORGANIZATION}/${LDAP_ORGANIZATION}/g" $1 sed -i "s/\${LDAP_ORGANIZATION}/${LDAP_ORGANIZATION}/g" $1
sed -i "s/\${LDAP_EXTENSION}/${LDAP_EXTENSION}/g" $1 sed -i "s/\${LDAP_EXTENSION}/${LDAP_EXTENSION}/g" $1
sed -i "s/\${LDAP_DOMAIN}/${LDAP_DOMAIN}/g" $1
sed -i "s/\${DOMAIN}/${DOMAIN}/g" $1
sed -i "s/\${VOLUMES_PATH}/${VOLUMES_PATH//\//\\/}/g" $1 sed -i "s/\${VOLUMES_PATH}/${VOLUMES_PATH//\//\\/}/g" $1
sed -i "s/\${LDAP_MAIL_UID}/${LDAP_MAIL_UID}/g" $1 sed -i "s/\${LDAP_MAIL_UID}/${LDAP_MAIL_UID}/g" $1
sed -i "s/\${LDAP_NEXTCLOUD_UID}/${LDAP_NEXTCLOUD_UID}/g" $1 sed -i "s/\${LDAP_NEXTCLOUD_UID}/${LDAP_NEXTCLOUD_UID}/g" $1

+ 3
- 3
images/openldap/users/userimport_example.ldif.template 查看文件

objectClass: extensibleObject objectClass: extensibleObject
cn: Example Lastname cn: Example Lastname
givenName: Example givenName: Example
mail: example@${LDAP_DOMAIN}
mail: example@${DOMAIN}
mailEnabled: TRUE mailEnabled: TRUE
mailGidNumber: 5000 mailGidNumber: 5000
mailHomeDirectory: ${MAIL_DATA_PATH}/example@${LDAP_DOMAIN}
mailHomeDirectory: ${MAIL_DATA_PATH}/example@${DOMAIN}
mailQuota: 10240000 mailQuota: 10240000
mailStorageDirectory: maildir:${MAIL_DATA_PATH}/example@${LDAP_DOMAIN}/Maildir
mailStorageDirectory: maildir:${MAIL_DATA_PATH}/example@${DOMAIN}/Maildir
mailUidNumber: 5000 mailUidNumber: 5000
sn: Lastname sn: Lastname
uniqueIdentifier: example uniqueIdentifier: example

+ 0
- 2
mail.env.template 查看文件

DOMAIN=${DOMAIN}
LDAP_SERVER_HOST=openldap LDAP_SERVER_HOST=openldap
LDAP_BIND_DN=uid=${LDAP_MAIL_UID},ou=services,dc=${ORGANIZATION},dc=${EXTENSION} LDAP_BIND_DN=uid=${LDAP_MAIL_UID},ou=services,dc=${ORGANIZATION},dc=${EXTENSION}
LDAP_BIND_PWD_FILE=/run/secrets/ldap_pwd LDAP_BIND_PWD_FILE=/run/secrets/ldap_pwd
LDAP_SEARCH_BASE=ou=people,dc=${ORGANIZATION},dc=${EXTENSION} LDAP_SEARCH_BASE=ou=people,dc=${ORGANIZATION},dc=${EXTENSION}
VIRTUAL_DOMAINS=()
DATA_CHOWN=1 DATA_CHOWN=1

+ 2
- 2
nextcloud.env.template 查看文件

NEXTCLOUD_DOMAIN=${DOMAIN}
NEXTCLOUD_SERVER_NAME=nextcloud
NEXTCLOUD_ADMIN_PWD_FILE=/run/secrets/admin_pwd NEXTCLOUD_ADMIN_PWD_FILE=/run/secrets/admin_pwd
NEXTCLOUD_SALT_FILE=/run/secrets/salt NEXTCLOUD_SALT_FILE=/run/secrets/salt
NEXTCLOUD_SECRET_FILE=/run/secrets/secret NEXTCLOUD_SECRET_FILE=/run/secrets/secret
DATA_CHOWN=1 DATA_CHOWN=1

# LDAP # LDAP
LDAP_SERVER_HOST=openldap LDAP_SERVER_HOST=openldap
LDAP_BIND_DN=uid=${LDAP_NEXTCLOUD_UID},ou=services,dc=${ORGANIZATION},dc=${EXTENSION} LDAP_BIND_DN=uid=${LDAP_NEXTCLOUD_UID},ou=services,dc=${ORGANIZATION},dc=${EXTENSION}
LDAP_BIND_PWD_FILE=/run/secrets/ldap_pwd LDAP_BIND_PWD_FILE=/run/secrets/ldap_pwd
#LDAP_SEARCH_BASE=ou=people,dc=${ORGANIZATION},dc=${EXTENSION} #LDAP_SEARCH_BASE=ou=people,dc=${ORGANIZATION},dc=${EXTENSION}
LDAP_SEARCH_BASE=dc=${ORGANIZATION},dc=${EXTENSION} LDAP_SEARCH_BASE=dc=${ORGANIZATION},dc=${EXTENSION}

# DB # DB
MYSQL_ROOT_PWD_FILE=/run/secrets/mysql_pwd MYSQL_ROOT_PWD_FILE=/run/secrets/mysql_pwd
DB_HOST=db DB_HOST=db

+ 0
- 1
openldap.env.template 查看文件

VOLUMES_PATH=${VOLUMES_PATH} VOLUMES_PATH=${VOLUMES_PATH}
LDAP_DOMAIN=${DOMAIN}
LDAP_ORGANIZATION=${ORGANIZATION} LDAP_ORGANIZATION=${ORGANIZATION}
LDAP_EXTENSION=${EXTENSION} LDAP_EXTENSION=${EXTENSION}
LDAP_ADMIN_PWD_FILE=/run/secrets/admin_pwd LDAP_ADMIN_PWD_FILE=/run/secrets/admin_pwd

+ 36
- 5
setup_noswarm.sh 查看文件

DEFAULT_LDAP_NEXTCLOUD_UID='nextcloud' DEFAULT_LDAP_NEXTCLOUD_UID='nextcloud'
DEFAULT_LDAP_GOGS_UID='gogs' DEFAULT_LDAP_GOGS_UID='gogs'


read -p "Main domain: " domain
# main domain
read -p "Add main domain: " domain
while [[ ! $domain =~ ^.*\.[a-z]{2,}$ ]]; do while [[ ! $domain =~ ^.*\.[a-z]{2,}$ ]]; do
read -p "Please Enter a valid domain: " domain
read -p "Add domain (empty to finish): " domain
done done
# TODO: more than 1 level domains # TODO: more than 1 level domains
org=`echo $domain | cut -f1 -d'.'`
ext=`echo $domain | cut -f2 -d'.'`
org=`echo ${domain} | cut -f1 -d'.'`
ext=`echo ${domain} | cut -f2 -d'.'`

# additional domain
virtual_domains=()
while :; do
read -p "Add additional domains (empty to finish): " virtual_domain
if [[ -z $virtual_domain ]]; then
break;
elif [[ ! $virtual_domain =~ ^.*\.[a-z]{2,}$ ]]; then
echo "Please Enter a valid domain";
else
virtual_domains+=($virtual_domain);
fi
done


read -p "Volumes path ($DEFAULT_VOLUMES): " volumes read -p "Volumes path ($DEFAULT_VOLUMES): " volumes
if [[ ${#volumes} -eq 0 ]]; then if [[ ${#volumes} -eq 0 ]]; then
echo "//////////////////////////////////////////////////" echo "//////////////////////////////////////////////////"
echo $'\E[1;30m' echo $'\E[1;30m'


echo Your domain is: $domain
echo Your main domain is: ${domain}
echo Your virtual domains are: ${virtual_domains[*]}
echo Your Volumes path is: $volumes echo Your Volumes path is: $volumes
echo Your LDAP Mail Bind DN Uid is: $ldap_mail_uid echo Your LDAP Mail Bind DN Uid is: $ldap_mail_uid
echo Your LDAP Nextcloud Bind DN Uid is: $ldap_nextcloud_uid echo Your LDAP Nextcloud Bind DN Uid is: $ldap_nextcloud_uid


for i in `ls *.env .env`; do for i in `ls *.env .env`; do
sed -i "s/\${DOMAIN}/${domain}/g" $i sed -i "s/\${DOMAIN}/${domain}/g" $i
sed -i "s/\${VIRTUAL_DOMAINS}/${virtual_domains[*]}/g" $i
sed -i "s/\${ORGANIZATION}/${org}/g" $i sed -i "s/\${ORGANIZATION}/${org}/g" $i
sed -i "s/\${EXTENSION}/${ext}/g" $i sed -i "s/\${EXTENSION}/${ext}/g" $i
sed -i "s/\${VOLUMES_PATH}/${volumes//\//\\/}/g" $i sed -i "s/\${VOLUMES_PATH}/${volumes//\//\\/}/g" $i
# read variables # read variables
. .env . .env
# repeated env variables # repeated env variables
# domains available for all, just in case
for i in `ls *.env`; do
echo "" >> $i
echo "# Domains" >> $i
echo "DOMAIN=${DOMAIN}" >> $i
echo "VIRTUAL_DOMAINS=${VIRTUAL_DOMAINS}" >> $i
echo "DOMAINS=${DOMAINS}" >> $i
done

echo "" >> mail.env echo "" >> mail.env
echo "MAIL_DATA_PATH=${MAIL_DATA_PATH}" >> mail.env echo "MAIL_DATA_PATH=${MAIL_DATA_PATH}" >> mail.env
echo "" >> nextcloud.env echo "" >> nextcloud.env
echo "NEXTCLOUD_SERVER_NAME=${NEXTCLOUD_SERVER_NAME}" >> nextcloud.env
echo "NEXTCLOUD_DB_BACKUP=${NEXTCLOUD_DATA_PATH}/nextcloud_db_backup.sql" >> nextcloud.env echo "NEXTCLOUD_DB_BACKUP=${NEXTCLOUD_DATA_PATH}/nextcloud_db_backup.sql" >> nextcloud.env
echo "NEXTCLOUD_DATA_PATH=${NEXTCLOUD_DATA_PATH}" >> nextcloud.env echo "NEXTCLOUD_DATA_PATH=${NEXTCLOUD_DATA_PATH}" >> nextcloud.env
echo "NEXTCLOUD_BACKUP_PATH=${NEXTCLOUD_BACKUP_PATH}" >> nextcloud.env echo "NEXTCLOUD_BACKUP_PATH=${NEXTCLOUD_BACKUP_PATH}" >> nextcloud.env
echo "" >> gogs.env
echo "GOGS_SERVER_NAME=${GOGS_SERVER_NAME}" >> gogs.env
echo "" >> paperless.env echo "" >> paperless.env
echo "PAPERLESS_CONSUMPTION_DIR=${PAPERLESS_CONSUMPTION_PATH}" >> paperless.env echo "PAPERLESS_CONSUMPTION_DIR=${PAPERLESS_CONSUMPTION_PATH}" >> paperless.env
echo "PAPERLESS_EXPORT_DIR=${PAPERLESS_EXPORT_PATH}" >> paperless.env echo "PAPERLESS_EXPORT_DIR=${PAPERLESS_EXPORT_PATH}" >> paperless.env
echo "" >> sftp.env echo "" >> sftp.env
echo "PAPERLESS_CONSUMPTION_DIR=${PAPERLESS_CONSUMPTION_PATH}" >> sftp.env echo "PAPERLESS_CONSUMPTION_DIR=${PAPERLESS_CONSUMPTION_PATH}" >> sftp.env
echo "" >> haproxy.env
echo "NEXTCLOUD_SERVER_NAME=${NEXTCLOUD_SERVER_NAME}" >> haproxy.env
echo "GOGS_SERVER_NAME=${GOGS_SERVER_NAME}" >> haproxy.env


echo $'\E[33m' echo $'\E[33m'
echo "//////////////////////////////////////////////////" echo "//////////////////////////////////////////////////"

Loading…
取消
儲存