added traefik and portainer
This commit is contained in:
parent
22f980d8a7
commit
6620fe5355
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
.idea
|
||||||
|
joomla
|
||||||
|
traefik
|
||||||
|
portainer
|
124
src/setup-portainer.sh
Normal file
124
src/setup-portainer.sh
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# check that our source path is correct
|
||||||
|
[ -e "${VDM_SRC_PATH}" ] || {
|
||||||
|
echo "[error] Source path (${VDM_SRC_PATH}) does not exist."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
# check that our repository path is correct
|
||||||
|
[ -e "${VDM_REPO_PATH}" ] || {
|
||||||
|
echo "[error] Repository path (${VDM_REPO_PATH}) does not exist."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
# check that our projects path is correct
|
||||||
|
[ -e "${VDM_PROJECT_PATH}" ] || {
|
||||||
|
echo "[error] Projects path (${VDM_PROJECT_PATH}) does not exist."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
# be sure to create the container type path for traefik (just one container really)
|
||||||
|
# shellcheck disable=SC2174
|
||||||
|
mkdir -p -m 700 "${VDM_REPO_PATH}/traefik"
|
||||||
|
|
||||||
|
# check if we have global env file
|
||||||
|
[ -f "${VDM_REPO_PATH}/portainer/.env" ] && source "${VDM_REPO_PATH}/portainer/.env"
|
||||||
|
|
||||||
|
# set the local values
|
||||||
|
REMOVE_SECURE=''
|
||||||
|
ENTRY_POINT="websecure"
|
||||||
|
# check that we have what we need
|
||||||
|
if [ "${VDM_SECURE,,}" != 'y' ] && [ "${VDM_SECURE,,}" != 'n' ]; then
|
||||||
|
echo -n "[enter] Use letsencrypt (y/n): "
|
||||||
|
read -r VDM_SECURE
|
||||||
|
# make sure value was entered
|
||||||
|
if [ "${VDM_SECURE,,}" != 'y' ] && [ "${VDM_SECURE,,}" != 'n' ]; then
|
||||||
|
echo "[error] you must choose y or n"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# get the domain if not set
|
||||||
|
[ ${#VDM_DOMAIN} -ge 1 ] || {
|
||||||
|
echo -n "[enter:localhost] Domain: "
|
||||||
|
read -r VDM_DOMAIN
|
||||||
|
# make sure value was entered
|
||||||
|
[ ${#VDM_DOMAIN} -ge 1 ] || exit
|
||||||
|
# we add the domain to the env (may have the VDM_DOMAIN value, but not the same domain)
|
||||||
|
grep -q "VDM_DOMAIN=\"${VDM_DOMAIN}\"" "${VDM_SRC_PATH}/.env" || echo "export VDM_DOMAIN=\"${VDM_DOMAIN}\"" >>"${VDM_SRC_PATH}/.env"
|
||||||
|
}
|
||||||
|
# setup letsencrypt stuff
|
||||||
|
if [ "${VDM_SECURE,,}" == 'y' ]; then
|
||||||
|
# we add this switch to the env values
|
||||||
|
grep -q "VDM_SECURE=\"y\"" "${VDM_SRC_PATH}/.env" || echo "export VDM_SECURE=\"y\"" >>"${VDM_SRC_PATH}/.env"
|
||||||
|
else
|
||||||
|
# we add this switch to the env values
|
||||||
|
grep -q "VDM_SECURE=\"n\"" "${VDM_SRC_PATH}/.env" || echo "export VDM_SECURE=\"n\"" >>"${VDM_SRC_PATH}/.env"
|
||||||
|
# remove secure from build
|
||||||
|
REMOVE_SECURE="#"
|
||||||
|
ENTRY_POINT="web"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build function
|
||||||
|
function buildContainer() {
|
||||||
|
# we build the yml file
|
||||||
|
cat <<EOF
|
||||||
|
version: "3.3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
portainer:
|
||||||
|
image: portainer/portainer-ce:latest
|
||||||
|
container_name: portainer
|
||||||
|
command: -H unix:///var/run/docker.sock
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
- portainer_data:/data
|
||||||
|
labels:
|
||||||
|
# Frontend
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.portainer.rule=Host(\`port.${VDM_DOMAIN}\`)"
|
||||||
|
- "traefik.http.routers.portainer.entrypoints=${ENTRY_POINT}"
|
||||||
|
${REMOVE_SECURE} - "traefik.http.routers.portainer.tls.certresolver=vdmresolver"
|
||||||
|
- "traefik.http.routers.portainer.service=portainer"
|
||||||
|
- "traefik.http.services.portainer.loadbalancer.server.port=9000"
|
||||||
|
|
||||||
|
# Edge
|
||||||
|
# - "traefik.http.routers.portaineredge.rule=Host(\`edge.${VDM_DOMAIN}\`)"
|
||||||
|
# - "traefik.http.routers.portaineredge.entrypoints=${ENTRY_POINT}"
|
||||||
|
# - "traefik.http.routers.portaineredge.tls.certresolver=vdmresolver"
|
||||||
|
# - "traefik.http.routers.portaineredge.service=portaineredge"
|
||||||
|
# - "traefik.http.services.portaineredge.loadbalancer.server.port=8000"
|
||||||
|
networks:
|
||||||
|
- traefik
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
portainer_data:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
traefik:
|
||||||
|
external:
|
||||||
|
name: traefik_webgateway
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# add to the host file if not already set
|
||||||
|
#if [ $VDM_UPDATE_HOST ]; then
|
||||||
|
# grep -q "port.${VDM_DOMAIN}" /etc/hosts || {
|
||||||
|
# echo "[notice] Adding port.${VDM_DOMAIN} to the /etc/hosts file."
|
||||||
|
# sudo -- sh -c "127.0.0.1 port.${VDM_DOMAIN} >> /etc/hosts"
|
||||||
|
# }
|
||||||
|
#fi
|
||||||
|
|
||||||
|
## create the directory if it does not yet already exist
|
||||||
|
# shellcheck disable=SC2174
|
||||||
|
mkdir -p -m 700 "${VDM_REPO_PATH}/portainer"
|
||||||
|
## place this docker composer file in its place
|
||||||
|
buildContainer >"${VDM_REPO_PATH}/portainer/docker-compose.yml"
|
||||||
|
## set permissions
|
||||||
|
chmod 600 "${VDM_REPO_PATH}/portainer/docker-compose.yml"
|
||||||
|
[ -f "${VDM_REPO_PATH}/portainer/.env" ] && chmod 600 "${VDM_REPO_PATH}/portainer/.env" &&
|
||||||
|
ENV_FILE="${VDM_REPO_PATH}/portainer/.env" || ENV_FILE="${VDM_REPO_PATH}/src/.env"
|
||||||
|
## saved the file
|
||||||
|
echo "[saved] portainer:docker-compose.yml"
|
||||||
|
echo "[setup] Completed!"
|
||||||
|
|
||||||
|
# now start the container
|
||||||
|
docker-compose --env-file "${ENV_FILE}" --file "${VDM_REPO_PATH}/portainer/docker-compose.yml" up -d
|
138
src/setup-traefik.sh
Normal file
138
src/setup-traefik.sh
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# check that our source path is correct
|
||||||
|
[ -e "${VDM_SRC_PATH}" ] || {
|
||||||
|
echo "[error] Source path (${VDM_SRC_PATH}) does not exist."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
# check that our repository path is correct
|
||||||
|
[ -e "${VDM_REPO_PATH}" ] || {
|
||||||
|
echo "[error] Repository path (${VDM_REPO_PATH}) does not exist."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
# check that our projects path is correct
|
||||||
|
[ -e "${VDM_PROJECT_PATH}" ] || {
|
||||||
|
echo "[error] Projects path (${VDM_PROJECT_PATH}) does not exist."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
# be sure to create the container type path for traefik (just one container really)
|
||||||
|
# shellcheck disable=SC2174
|
||||||
|
mkdir -p -m 700 "${VDM_REPO_PATH}/traefik"
|
||||||
|
|
||||||
|
# check if we have global env file
|
||||||
|
[ -f "${VDM_REPO_PATH}/traefik/.env" ] && source "${VDM_REPO_PATH}/traefik/.env"
|
||||||
|
|
||||||
|
# set the local values
|
||||||
|
REMOVE_SECURE=''
|
||||||
|
# check that we have what we need
|
||||||
|
if [ "${VDM_SECURE,,}" != 'y' ] && [ "${VDM_SECURE,,}" != 'n' ]; then
|
||||||
|
echo -n "[enter] Use letsencrypt (y/n): "
|
||||||
|
read -r VDM_SECURE
|
||||||
|
# make sure value was entered
|
||||||
|
if [ "${VDM_SECURE,,}" != 'y' ] && [ "${VDM_SECURE,,}" != 'n' ]; then
|
||||||
|
echo "[error] you must choose y or n"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# get the domain if not set
|
||||||
|
[ ${#VDM_DOMAIN} -ge 1 ] || {
|
||||||
|
echo -n "[enter:localhost] Domain: "
|
||||||
|
read -r VDM_DOMAIN
|
||||||
|
# make sure value was entered
|
||||||
|
[ ${#VDM_DOMAIN} -ge 1 ] || exit
|
||||||
|
# we add the domain to the env (may have the VDM_DOMAIN value, but not the same domain)
|
||||||
|
grep -q "VDM_DOMAIN=\"${VDM_DOMAIN}\"" "${VDM_SRC_PATH}/.env" || echo "export VDM_DOMAIN=\"${VDM_DOMAIN}\"" >>"${VDM_SRC_PATH}/.env"
|
||||||
|
}
|
||||||
|
# setup letsencrypt stuff
|
||||||
|
if [ "${VDM_SECURE,,}" == 'y' ]; then
|
||||||
|
# we add this switch to the env values
|
||||||
|
grep -q "VDM_SECURE=\"y\"" "${VDM_SRC_PATH}/.env" || echo "export VDM_SECURE=\"y\"" >>"${VDM_SRC_PATH}/.env"
|
||||||
|
# get the email if not set
|
||||||
|
[ ${#VDM_SECURE_EMAIL} -ge 1 ] || {
|
||||||
|
echo -n "[enter] Email: "
|
||||||
|
read -r VDM_SECURE_EMAIL
|
||||||
|
# make sure value was entered
|
||||||
|
[ ${#VDM_SECURE_EMAIL} -ge 1 ] || exit
|
||||||
|
}
|
||||||
|
else
|
||||||
|
# we add this switch to the env values
|
||||||
|
grep -q "VDM_SECURE=\"n\"" "${VDM_SRC_PATH}/.env" || echo "export VDM_SECURE=\"n\"" >>"${VDM_SRC_PATH}/.env"
|
||||||
|
# remove secure from build
|
||||||
|
REMOVE_SECURE="#"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build function
|
||||||
|
function buildContainer() {
|
||||||
|
# we build the yml file
|
||||||
|
cat <<EOF
|
||||||
|
version: "3.3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
traefik:
|
||||||
|
container_name: traefik
|
||||||
|
image: "traefik:latest"
|
||||||
|
command:
|
||||||
|
- --entrypoints.web.address=:80
|
||||||
|
${REMOVE_SECURE} - --entrypoints.websecure.address=:443
|
||||||
|
# - --api.dashboard=true
|
||||||
|
# - --api.insecure=true
|
||||||
|
- --providers.docker
|
||||||
|
- --log.level=ERROR
|
||||||
|
${REMOVE_SECURE} - --certificatesresolvers.vdmresolver.acme.httpchallenge=true
|
||||||
|
${REMOVE_SECURE} - --certificatesresolvers.vdmresolver.acme.keytype=RSA4096
|
||||||
|
${REMOVE_SECURE} - --certificatesresolvers.vdmresolver.acme.email=${VDM_SECURE_EMAIL:-user@demo.com}
|
||||||
|
${REMOVE_SECURE} - --certificatesresolvers.vdmresolver.acme.storage=/acme.json
|
||||||
|
${REMOVE_SECURE} - --certificatesresolvers.vdmresolver.acme.httpchallenge.entrypoint=web
|
||||||
|
# - --providers.file.directory=/conf
|
||||||
|
# - --providers.file.watch=true
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
${REMOVE_SECURE} - "443:443"
|
||||||
|
# - "8080:8080"
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
# - "\${VDM_PROJECT_PATH}/traefik/conf:/conf"
|
||||||
|
${REMOVE_SECURE} - "\${VDM_PROJECT_PATH}/traefik/acme.json:/acme.json"
|
||||||
|
- "\${VDM_PROJECT_PATH}/traefik/errors:/errors"
|
||||||
|
labels:
|
||||||
|
# settings for all containers
|
||||||
|
- "traefik.http.routers.http-catchall.rule=hostregexp(\`{host:.+}\`)"
|
||||||
|
- "traefik.http.routers.http-catchall.entrypoints=web"
|
||||||
|
${REMOVE_SECURE} - "traefik.http.routers.http-catchall.middlewares=redirect-to-https"
|
||||||
|
${REMOVE_SECURE} - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
|
||||||
|
networks:
|
||||||
|
- traefik
|
||||||
|
|
||||||
|
networks:
|
||||||
|
traefik:
|
||||||
|
external:
|
||||||
|
name: traefik_webgateway
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
## create the directory if it does not yet already exist
|
||||||
|
# shellcheck disable=SC2174
|
||||||
|
mkdir -p -m 700 "${VDM_REPO_PATH}/traefik"
|
||||||
|
## place this docker composer file in its place
|
||||||
|
buildContainer >"${VDM_REPO_PATH}/traefik/docker-compose.yml"
|
||||||
|
## set permissions
|
||||||
|
chmod 600 "${VDM_REPO_PATH}/traefik/docker-compose.yml"
|
||||||
|
[ -f "${VDM_REPO_PATH}/traefik/.env" ] && chmod 600 "${VDM_REPO_PATH}/traefik/.env" &&
|
||||||
|
ENV_FILE="${VDM_REPO_PATH}/traefik/.env" || ENV_FILE="${VDM_REPO_PATH}/src/.env"
|
||||||
|
## saved the file
|
||||||
|
echo "[saved] traefik:docker-compose.yml"
|
||||||
|
echo "[setup] Completed!"
|
||||||
|
|
||||||
|
# we create the networks
|
||||||
|
docker network inspect traefik_webgateway >/dev/null 2>&1 ||
|
||||||
|
docker network create traefik_webgateway
|
||||||
|
docker network inspect openssh_gateway >/dev/null 2>&1 ||
|
||||||
|
docker network create openssh_gateway
|
||||||
|
# make sure port 80 is not used by apache
|
||||||
|
command -v apache2 >/dev/null 2>&1 && [[ $(service apache2 status) == *"active (running)"* ]] && {
|
||||||
|
sudo systemctl stop apache2.service
|
||||||
|
sudo systemctl disable apache2.service
|
||||||
|
}
|
||||||
|
# now start the container
|
||||||
|
docker-compose --env-file "${ENV_FILE}" --file "${VDM_REPO_PATH}/traefik/docker-compose.yml" up -d
|
Loading…
Reference in New Issue
Block a user