start.sh 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. source "$CURRDIR/config.sh"
  27. else
  28. echo '== config.sh not found, exiting...'; exit 23
  29. fi
  30. #-- Check if repo provider is ok --#
  31. if [ -z "$REPO_PROVIDER" ]; then
  32. echo "== Error: config.sh is probably not updated. Please check the 'Troubleshooting' section on docs/config.md."; exit 63
  33. elif [ "$REPO_PROVIDER" != "gitea" ] && [ "$REPO_PROVIDER" != "gogs" ]; then
  34. echo "== Error: Repo provider ${REPO_PROVIDER} not supported. Please change REPO_PROVIDER on config.sh to a supported one."; exit 39
  35. fi
  36. ##-- Check if containers are already running from a previous start.sh run --#
  37. if [ -f "${CURRDIR}/run/running_containers" ]; then
  38. read -e -p "Containers are running from previous session. Would you like to stop them first? [y/N] " choice
  39. if [[ "$choice" == [Yy]* ]]; then
  40. ${CURRDIR}/stop.sh
  41. echo '== Stopped. Now continuing to start...'
  42. else
  43. echo "Cannot run what's already running! Exiting..."; exit 190
  44. fi
  45. fi
  46. ##-- Deal with auto local tunneling, if needed --##
  47. if [ "$DRONE_SERVER_HOST" = "AUTO" ]; then
  48. echo '== Creating localhost tunneling url automatically...'
  49. if [ "$TUNNELING_SERVICE" = "pgrok" ]; then
  50. setsid pgrok -subdomain="${TUNNELING_SERVICE_SUBDOMAIN}" 8090 2>/dev/null &
  51. # Store the pid to kill it later on stop.sh
  52. echo $! > "${CURRDIR}/run/tunneling_pid"
  53. export DRONE_SERVER_HOST="${TUNNELING_SERVICE_SUBDOMAIN}.ejemplo.me"
  54. echo "${DRONE_SERVER_PROTO}://${DRONE_SERVER_HOST}" > "${CURRDIR}/run/tunneling_url"
  55. elif [ "$TUNNELING_SERVICE" = "tunnelto" ]; then
  56. tunnelto set-auth --key "${TUNNELTO_API_KEY}"
  57. setsid tunnelto --subdomain "${TUNNELING_SERVICE_SUBDOMAIN}" --port 8090 2>/dev/null &
  58. # Store the pid to kill it later on stop.sh
  59. echo $! > "${CURRDIR}/run/tunneling_pid"
  60. export DRONE_SERVER_HOST="${TUNNELING_SERVICE_SUBDOMAIN}.tunnelto.dev"
  61. echo "${DRONE_SERVER_PROTO}://${DRONE_SERVER_HOST}" > "${CURRDIR}/run/tunneling_url"
  62. elif [ "$TUNNELING_SERVICE" = "localtunnel" ]; then
  63. mkdir -p /tmp/dronedocker/
  64. setsid npx lt --port 8090 > /tmp/dronedocker/autolt.output &
  65. # Store the pid to kill it later on stop.sh
  66. echo $! > "${CURRDIR}/run/tunneling_pid"
  67. sleep 5
  68. export DRONE_SERVER_HOST=$(grep -Po '(?i)https://\K(.*)' /tmp/dronedocker/autolt.output)
  69. echo "${DRONE_SERVER_PROTO}://${DRONE_SERVER_HOST}" > "${CURRDIR}/run/tunneling_url"
  70. fi
  71. DRONE_RPC_HOST="${DRONE_SERVER_HOST}"
  72. echo "Selecting url automatically as: ${DRONE_SERVER_PROTO}://${DRONE_SERVER_HOST}"
  73. fi
  74. ##-- Create main server --##
  75. export REPO_SERVER_HOST=$(echo "${REPO_SERVER}" | sed -e 's|^[^/]*//||' -e 's|/.*$||')
  76. export DRONE_ALLOWED_USERS="${REPO_USERNAME}@${REPO_SERVER_HOST}"
  77. CMD="docker run \
  78. --volume=/var/run/docker.sock:/var/run/docker.sock \
  79. --volume='${CURRDIR}':/data"
  80. # Gitea
  81. if [ "$REPO_PROVIDER" = "gitea" ]; then
  82. CMD="${CMD} \
  83. --env=DRONE_GITEA_SERVER='${REPO_SERVER}' \
  84. --env=DRONE_GITEA_CLIENT_ID='${REPO_CLIENT_ID}' \
  85. --env=DRONE_GITEA_CLIENT_SECRET='${REPO_CLIENT_SECRET}'"
  86. # Gogs
  87. elif [ "$REPO_PROVIDER" = "gogs" ]; then
  88. CMD="${CMD} \
  89. --env=DRONE_GOGS_SERVER=${REPO_SERVER}"
  90. fi
  91. CMD="${CMD} \
  92. --env=DRONE_RUNNER_CAPACITY=2 \
  93. --env=DRONE_SERVER_HOST=${DRONE_SERVER_HOST} \
  94. --env=DRONE_RPC_SECRET=${DRONE_RPC_SECRET} \
  95. --env=DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO} \
  96. --env=DRONE_TLS_AUTOCERT=true \
  97. --env=DRONE_USER_CREATE=username:${REPO_USERNAME},admin:true \
  98. --publish=8090:80 \
  99. --publish=443:443 \
  100. --restart=always \
  101. --detach=true \
  102. --name=${DOCKER_MAIN_NAME} \
  103. drone/drone:latest"
  104. eval "${CMD}"
  105. echo "${DOCKER_MAIN_NAME}" >> "${CURRDIR}/run/running_containers"
  106. ##-- Create runner agent --##
  107. sudo docker run -d \
  108. --volume=/var/run/docker.sock:/var/run/docker.sock \
  109. --env=DRONE_RPC_PROTO=${DRONE_RPC_PROTO} \
  110. --env=DRONE_RPC_HOST=${DRONE_RPC_HOST} \
  111. --env=DRONE_RPC_SECRET=${DRONE_RPC_SECRET} \
  112. --env=DRONE_RUNNER_CAPACITY=2 \
  113. --env=DRONE_RUNNER_NAME=${DOCKER_RUNNER_NAME} \
  114. --publish=3000:3000 \
  115. --restart=always \
  116. --name=${DOCKER_RUNNER_NAME} \
  117. drone/drone-runner-docker:latest
  118. echo "${DOCKER_RUNNER_NAME}" >> "${CURRDIR}/run/running_containers"
  119. #-- Setup message --#
  120. echo "== Docker images created"
  121. echo "== Change 'Redirect URL' on your OAuth2 settings to: ${DRONE_SERVER_PROTO}://${DRONE_SERVER_HOST}/login"
  122. echo "== Then access the above url to continue"
  123. echo '== Finished.'