start.sh 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #!/bin/bash
  2. ##-- Check if docker is installed --#
  3. if [ -z "$(command -v docker)" ]; then
  4. echo '== Error: Docker binary is not found. Is docker installed?'; exit 56
  5. fi
  6. ##-- Check if pgrok is installed when auto tunneling service is enabled --#
  7. if [ "$DRONE_SERVER_HOST" == "AUTO" ] && [ "$TUNNELING_SERVICE" == "pgrok" ] && [ -z "$(command -v pgrok)" ]; then
  8. echo '== Error: pgrok binary is not found. Is pgrok installed?'; exit 38
  9. fi
  10. ##-- Check if npm is installed when localtunnel is selected --#
  11. if [ "$DRONE_SERVER_HOST" == "AUTO" ] && [ "$TUNNELING_SERVICE" == "localtunnel" ] && [ -z "$(command -v npx)" ]; then
  12. echo '== Error: npx binary is not found. Is npm installed?'; exit 48
  13. fi
  14. ##-- Check if tunnelto is installed and api key when auto tunneling service is enabled --#
  15. if [ "$DRONE_SERVER_HOST" == "AUTO" ] && [ "$TUNNELING_SERVICE" == "tunnelto" ]; then
  16. if [ -z "$(command -v tunnelto)" ]; then
  17. echo '== Error: tunnelto binary is not found. Is tunnelto installed?'; exit 73
  18. fi
  19. if [ -z "$TUNNELTO_API_KEY" ]; then
  20. echo '== Error: tunnelto API key is required. Please visit https://tunnelto.dev/ to get one for free and put it on config.sh in TUNNELTO_API_KEY.'; exit 17
  21. fi
  22. fi
  23. ##-- Deal with configs --##
  24. CURRDIR=$(realpath $(dirname $0))
  25. if [ -f "$CURRDIR/config.sh" ]; then
  26. . "$CURRDIR/config.sh"
  27. else
  28. echo '== config.sh not found, exiting...'; exit 23
  29. fi
  30. ##-- Check if containers are already running from a previous start.sh run --#
  31. if [ -f "${CURRDIR}/run/running_containers" ]; then
  32. read -e -p "Containers are running from previous session. Would you like to stop them first? [y/N] " choice
  33. if [[ "$choice" == [Yy]* ]]; then
  34. ${CURRDIR}/stop.sh
  35. echo '== Stopped. Now continuing to start...'
  36. else
  37. echo "Cannot run what's already running! Exiting..."; exit 190
  38. fi
  39. fi
  40. ##-- Deal with auto local tunneling, if needed --##
  41. if [ "$DRONE_SERVER_HOST" = "AUTO" ]; then
  42. echo '== Creating localhost tunneling url automatically...'
  43. if [ "$TUNNELING_SERVICE" = "pgrok" ]; then
  44. setsid pgrok -subdomain="${TUNNELING_SERVICE_SUBDOMAIN}" 8090 2>/dev/null &
  45. # Store the pid to kill it later on stop.sh
  46. echo $! > "${CURRDIR}/run/tunneling_pid"
  47. export DRONE_SERVER_HOST="${TUNNELING_SERVICE_SUBDOMAIN}.ejemplo.me"
  48. echo "${DRONE_SERVER_PROTO}://${DRONE_SERVER_HOST}" > "${CURRDIR}/run/tunneling_url"
  49. elif [ "$TUNNELING_SERVICE" = "tunnelto" ]; then
  50. tunnelto set-auth --key "${TUNNELTO_API_KEY}"
  51. setsid tunnelto --subdomain "${TUNNELING_SERVICE_SUBDOMAIN}" --port 8090 2>/dev/null &
  52. # Store the pid to kill it later on stop.sh
  53. echo $! > "${CURRDIR}/run/tunneling_pid"
  54. export DRONE_SERVER_HOST="${TUNNELING_SERVICE_SUBDOMAIN}.tunnelto.dev"
  55. echo "${DRONE_SERVER_PROTO}://${DRONE_SERVER_HOST}" > "${CURRDIR}/run/tunneling_url"
  56. elif [ "$TUNNELING_SERVICE" = "localtunnel" ]; then
  57. mkdir -p /tmp/dronedocker/
  58. setsid npx lt --port 8090 > /tmp/dronedocker/autolt.output &
  59. # Store the pid to kill it later on stop.sh
  60. echo $! > "${CURRDIR}/run/tunneling_pid"
  61. sleep 5
  62. export DRONE_SERVER_HOST=$(grep -Po '(?i)https://\K(.*)' /tmp/dronedocker/autolt.output)
  63. echo "${DRONE_SERVER_PROTO}://${DRONE_SERVER_HOST}" > "${CURRDIR}/run/tunneling_url"
  64. fi
  65. DRONE_RPC_HOST="${DRONE_SERVER_HOST}"
  66. echo "Selecting url automatically as: ${DRONE_SERVER_PROTO}://${DRONE_SERVER_HOST}"
  67. fi
  68. ##-- Create main server --##
  69. export DRONE_GITEA_SERVER_HOST=$(echo "${DRONE_GITEA_SERVER}" | sed -e 's|^[^/]*//||' -e 's|/.*$||')
  70. export DRONE_ALLOWED_USERS="${GITEA_USERNAME}@${DRONE_GITEA_SERVER_HOST}"
  71. docker run \
  72. --volume=/var/run/docker.sock:/var/run/docker.sock \
  73. --volume=${CURRDIR}:/data \
  74. --env=DRONE_GITEA_SERVER=${DRONE_GITEA_SERVER} \
  75. --env=DRONE_GITEA_CLIENT_ID=${DRONE_GITEA_CLIENT_ID} \
  76. --env=DRONE_GITEA_CLIENT_SECRET=${DRONE_GITEA_CLIENT_SECRET} \
  77. --env=DRONE_RPC_SECRET=${DRONE_RPC_SECRET} \
  78. --env=DRONE_RUNNER_CAPACITY=2 \
  79. --env=DRONE_SERVER_HOST=${DRONE_SERVER_HOST} \
  80. --env=DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO} \
  81. --env=DRONE_TLS_AUTOCERT=true \
  82. --env=DRONE_USER_CREATE=username:${GITEA_USERNAME},admin:true \
  83. --publish=8090:80 \
  84. --publish=443:443 \
  85. --restart=always \
  86. --detach=true \
  87. --name=${DOCKER_MAIN_NAME} \
  88. drone/drone:latest
  89. echo "${DOCKER_MAIN_NAME}" >> "${CURRDIR}/run/running_containers"
  90. ##-- Create runner agent --##
  91. sudo docker run -d \
  92. -v /var/run/docker.sock:/var/run/docker.sock \
  93. -e DRONE_RPC_PROTO=${DRONE_RPC_PROTO} \
  94. -e DRONE_RPC_HOST=${DRONE_RPC_HOST} \
  95. -e DRONE_RPC_SECRET=${DRONE_RPC_SECRET} \
  96. -e DRONE_RUNNER_CAPACITY=2 \
  97. -e DRONE_RUNNER_NAME=${DOCKER_RUNNER_NAME} \
  98. -p 3000:3000 \
  99. --restart always \
  100. --name=${DOCKER_RUNNER_NAME} \
  101. drone/drone-runner-docker:latest
  102. echo "${DOCKER_RUNNER_NAME}" >> "${CURRDIR}/run/running_containers"
  103. #-- Setup message --#
  104. echo "== Docker images created"
  105. echo "== Change 'Redirect URL' on your OAuth2 settings to: ${DRONE_SERVER_PROTO}://${DRONE_SERVER_HOST}/login"
  106. echo "== Then access the above url to continue"
  107. echo '== Finished.'