Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

create.sh 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #! /bin/sh
  2. #
  3. if [ ! -f "${PWD}/.env" ]; then
  4. echo "missing env file in ${PWD}"
  5. exit 1
  6. fi
  7. set -a
  8. . "${PWD}/.env"
  9. . "${PWD}/env_files/certs.env"
  10. set +a
  11. mkdir -p "/tmp/${PREFIX}"
  12. echo "Setting up docker volumes"
  13. docker volume create "${PREFIX}-db"
  14. docker volume create "${PREFIX}-root"
  15. docker volume create "${PREFIX}-traefik-certs"
  16. docker volume create "${PREFIX}-traefik-dynamic"
  17. docker volume create "${PREFIX}-traefik-logs"
  18. docker volume create "${PREFIX}-traefik-static"
  19. docker volume create "${PREFIX}-webroot"
  20. docker volume create wp-cli-cache
  21. echo "Copying SSL certificates to traefik volume"
  22. if [ ! -f "${SSL_CRT_LOCATION}/${SSL_CRT_NAME}" ] || [ ! -f "${SSL_KEY_LOCATION}/${SSL_KEY_NAME}" ]; then
  23. echo "Missing SSL key or cert file"
  24. exit 1
  25. fi
  26. docker run \
  27. --rm \
  28. --volume "${PREFIX}-traefik-certs":/certs \
  29. --volume "${SSL_CRT_LOCATION}":/source \
  30. ubuntu \
  31. cp "/source/${SSL_CRT_NAME}" /certs
  32. docker run \
  33. --rm \
  34. --volume "${PREFIX}-traefik-certs":/certs \
  35. --volume "${SSL_KEY_LOCATION}":/source \
  36. ubuntu \
  37. cp "/source/${SSL_KEY_NAME}" /certs
  38. echo "Generating traefik configuration files (ssl.yml and middlewares.yml)"
  39. cat << EOF > /tmp/${PREFIX}/ssl.yml
  40. ---
  41. tls:
  42. stores:
  43. default:
  44. defaultCertificate:
  45. certFile: /certs/${SSL_CRT_NAME}
  46. keyFile: /certs/${SSL_KEY_NAME}
  47. EOF
  48. cat << EOF > /tmp/${PREFIX}/middlewares.yml
  49. ---
  50. http:
  51. middlewares:
  52. https-redirect:
  53. redirectscheme:
  54. scheme: https
  55. permanent: true
  56. EOF
  57. docker run \
  58. --rm \
  59. --volume "/tmp/${PREFIX}":/source \
  60. --volume "${PREFIX}-traefik-dynamic":/destination \
  61. ubuntu \
  62. cp /source/ssl.yml /source/middlewares.yml /destination
  63. echo "Generating traefik static configuration"
  64. cat << EOF > /tmp/${PREFIX}/static.yml
  65. ---
  66. api:
  67. dashboard: true
  68. entrypoints:
  69. http:
  70. address: :80
  71. https:
  72. address: :443
  73. log:
  74. filepath: /logs/traefik.log
  75. level: debug
  76. providers:
  77. docker:
  78. exposedbydefault: false
  79. file:
  80. directory: /etc/traefik/dynamic
  81. watch: true
  82. EOF
  83. docker run \
  84. --rm \
  85. --volume "/tmp/${PREFIX}":/source \
  86. --volume "${PREFIX}-traefik-static":/destination \
  87. ubuntu \
  88. cp /source/static.yml /destination/traefik.yml
  89. docker compose up -d app
  90. while ! docker ps -q -f name="${PREFIX}-app"; do
  91. echo "Waiting for the web container to be up and running..."
  92. sleep 1
  93. done
  94. docker compose up -d db
  95. while ! docker ps -q -f name="${PREFIX}-db"; do
  96. echo "Waiting for the db container to be up and running..."
  97. sleep 1
  98. done
  99. while ! docker exec "${PREFIX}-app" /bin/sh -c "mysqladmin ping -h ${PREFIX}-db -P 3306 --protocol=tcp -u user -puser --silent"; do
  100. echo "Waiting for the mysql server in the db container to be up and running and reachable from the app container..."
  101. sleep 1
  102. done
  103. echo "Downloading WordPress core"
  104. docker exec --user www-data "${PREFIX}-app" /bin/sh -c "
  105. wp core download \
  106. --locale=${WP_LOCALE} \
  107. --path=/var/www/html \
  108. --version=${WP_VERSION}"
  109. echo "Creating WordPress config"
  110. docker exec --user www-data "${PREFIX}-app" /bin/sh -c '
  111. wp config create \
  112. --dbhost='"${PREFIX}-db"' \
  113. --dbname='"${DB_NAME}"' \
  114. --dbpass='"${DB_USER_PASSWORD}"' \
  115. --dbuser='"${DB_USER}"' \
  116. --force \
  117. --path=/var/www/html \
  118. --skip-check \
  119. --extra-php <<EXTRA-PHP
  120. if (isset(\$_SERVER["HTTP_X_FORWARDED_PROTO"]) && \$_SERVER["HTTP_X_FORWARDED_PROTO"] == "https") \$_SERVER["HTTPS"]="on";
  121. EXTRA-PHP
  122. '
  123. echo "Installing WordPress core"
  124. docker exec --user www-data "${PREFIX}-app" /bin/sh -c "
  125. wp core install \
  126. --admin_email=no@mail.com \
  127. --admin_password=${WP_ADMIN_PASSWORD} \
  128. --admin_user=${WP_ADMIN_USERNAME} \
  129. --path=/var/www/html \
  130. --skip-email \
  131. --title=${PREFIX} \
  132. --url=${WP_DEFAULT_PROTOCOL}://${APP_URL}"
  133. echo "Installing WordPress "${WP_THEME}" theme"
  134. docker exec --user www-data "${PREFIX}-app" /bin/sh -c "
  135. wp theme install ${WP_THEME} \
  136. --activate \
  137. --path=/var/www/html"
  138. docker compose up -d adminer
  139. docker compose up -d traefik