main-new.sh 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #!/bin/bash
  2. # conda init
  3. # conda activate central_controller
  4. if [ -z "$ZT_DB_HOST" ]; then
  5. echo '*** FAILED: ZT_DB_HOST environment variable not defined'
  6. exit 1
  7. fi
  8. if [ -z "$ZT_DB_PORT" ]; then
  9. echo '*** FAILED: ZT_DB_PORT environment variable not defined'
  10. exit 1
  11. fi
  12. if [ -z "$ZT_DB_NAME" ]; then
  13. echo '*** FAILED: ZT_DB_NAME environment variable not defined'
  14. exit 1
  15. fi
  16. if [ -z "$ZT_DB_USER" ]; then
  17. echo '*** FAILED: ZT_DB_USER environment variable not defined'
  18. exit 1
  19. fi
  20. if [ -z "$ZT_DB_PASSWORD" ]; then
  21. echo '*** FAILED: ZT_DB_PASSWORD environment variable not defined'
  22. exit 1
  23. fi
  24. REDIS=""
  25. if [ "$ZT_USE_REDIS" == "true" ]; then
  26. if [ -z "$ZT_REDIS_HOST" ]; then
  27. echo '*** FAILED: ZT_REDIS_HOST environment variable not defined'
  28. exit 1
  29. fi
  30. if [ -z "$ZT_REDIS_PORT" ]; then
  31. echo '*** FAILED: ZT_REDIS_PORT enivronment variable not defined'
  32. exit 1
  33. fi
  34. if [ -z "$ZT_REDIS_CLUSTER_MODE" ]; then
  35. echo '*** FAILED: ZT_REDIS_CLUSTER_MODE environment variable not defined'
  36. exit 1
  37. fi
  38. REDIS=", \"redis\": {
  39. \"hostname\": \"${ZT_REDIS_HOST}\",
  40. \"port\": ${ZT_REDIS_PORT},
  41. \"clusterMode\": ${ZT_REDIS_CLUSTER_MODE},
  42. \"password\": \"${ZT_REDIS_PASSWORD}\"
  43. }
  44. "
  45. else
  46. REDIS=", \"redis\": null"
  47. fi
  48. mkdir -p /var/lib/zerotier-one
  49. pushd /var/lib/zerotier-one
  50. if [ -d "$ZT_IDENTITY_PATH" ]; then
  51. echo '*** Using existing ZT identity from path $ZT_IDENTITY_PATH'
  52. ln -s $ZT_IDENTITY_PATH/identity.public identity.public
  53. ln -s $ZT_IDENTITY_PATH/identity.secret identity.secret
  54. if [ -L "$ZT_IDENTITY_PATH/authtoken.secret" ] && [ -e "$ZT_IDENTITY_PATH/authtoken.secret" ]; then
  55. ln -s $ZT_IDENTITY_PATH/authtoken.secret authtoken.secret
  56. ln -s $ZT_IDENTITY_PATH/authtoken.secret metricstoken.secret
  57. fi
  58. fi
  59. popd
  60. DEFAULT_PORT=9993
  61. DEFAULT_LB_MODE=false
  62. APP_NAME="controller-$(cat /var/lib/zerotier-one/identity.public | cut -d ':' -f 1)"
  63. BIGTABLE_CONF=""
  64. if [ "$ZT_USE_BIGTABLE" == "true" ]; then
  65. if [ -z "$ZT_BIGTABLE_PROJECT" ] || [ -z "$ZT_BIGTABLE_INSTANCE" ] || [ -z "$ZT_BIGTABLE_TABLE" ]; then
  66. echo '*** FAILED: ZT_BIGTABLE_PROJECT, ZT_BIGTABLE_INSTANCE, and ZT_BIGTABLE_TABLE environment variables must all be defined to use Bigtable as a controller backend'
  67. exit 1
  68. fi
  69. BIGTABLE_CONF=", \"bigtable\": {
  70. \"project_id\": \"${ZT_BIGTABLE_PROJECT}\",
  71. \"instance_id\": \"${ZT_BIGTABLE_INSTANCE}\",
  72. \"table_id\": \"${ZT_BIGTABLE_TABLE}\"
  73. }
  74. "
  75. fi
  76. PUBSUB_CONF=""
  77. if [ "$ZT_USE_PUBSUB" == "true" ]; then
  78. if [ -z "$ZT_PUBSUB_PROJECT" ]; then
  79. echo '*** FAILED: ZT_PUBSUB_PROJECT environment variable must be defined to use PubSub as a controller backend'
  80. exit 1
  81. fi
  82. PUBSUB_CONF=", \"pubsub\": {
  83. \"project_id\": \"${ZT_PUBSUB_PROJECT}\"
  84. }
  85. "
  86. fi
  87. echo "{
  88. \"settings\": {
  89. \"controllerDbPath\": \"postgres:host=${ZT_DB_HOST} port=${ZT_DB_PORT} dbname=${ZT_DB_NAME} user=${ZT_DB_USER} password=${ZT_DB_PASSWORD} application_name=${APP_NAME} sslmode=prefer sslcert=${DB_CLIENT_CERT} sslkey=${DB_CLIENT_KEY} sslrootcert=${DB_SERVER_CA}\",
  90. \"portMappingEnabled\": true,
  91. \"softwareUpdate\": \"disable\",
  92. \"interfacePrefixBlacklist\": [
  93. \"inot\",
  94. \"nat64\"
  95. ],
  96. \"lowBandwidthMode\": ${ZT_LB_MODE:-$DEFAULT_LB_MODE},
  97. \"ssoRedirectURL\": \"${ZT_SSO_REDIRECT_URL}\",
  98. \"allowManagementFrom\": [\"127.0.0.1\", \"::1\", \"10.0.0.0/8\"],
  99. \"otel\": {
  100. \"exporterEndpoint\": \"${ZT_EXPORTER_ENDPOINT}\",
  101. \"exporterSampleRate\": ${ZT_EXPORTER_SAMPLE_RATE:-0}
  102. }
  103. ${REDIS}
  104. },
  105. \"controller\": {
  106. \"listenMode\": \"${ZT_LISTEN_MODE:-pgsql}\",
  107. \"statusMode\": \"${ZT_STATUS_MODE:-pgsql}\"
  108. ${REDIS}
  109. ${BIGTABLE_CONF}
  110. ${PUBSUB_CONF}
  111. }
  112. }
  113. " > /var/lib/zerotier-one/local.conf
  114. if [ -n "$DB_SERVER_CA" ]; then
  115. echo "secret list"
  116. chmod 600 /secrets/db/*.pem
  117. ls -l /secrets/db/
  118. until pg_isready -h ${ZT_DB_HOST} -p ${ZT_DB_PORT} -d "sslmode=prefer sslcert=${DB_CLIENT_CERT} sslkey=${DB_CLIENT_KEY} sslrootcert=${DB_SERVER_CA}"; do
  119. echo "Waiting for PostgreSQL...";
  120. sleep 2;
  121. done
  122. else
  123. until pg_isready -h ${ZT_DB_HOST} -p ${ZT_DB_PORT}; do
  124. echo "Waiting for PostgreSQL...";
  125. sleep 2;
  126. done
  127. fi
  128. echo "Migrating database (if needed)..."
  129. if [ -n "$DB_SERVER_CA" ]; then
  130. /usr/local/bin/migrate -source file:///migrations -database "postgres://$ZT_DB_USER:$ZT_DB_PASSWORD@$ZT_DB_HOST:$ZT_DB_PORT/$ZT_DB_NAME?x-migrations-table=controller_migrations&sslmode=verify-full&sslrootcert=$DB_SERVER_CA&sslcert=$DB_CLIENT_CERT&sslkey=$DB_CLIENT_KEY" up
  131. else
  132. /usr/local/bin/migrate -source file:///migrations -database "postgres://$ZT_DB_USER:$ZT_DB_PASSWORD@$ZT_DB_HOST:$ZT_DB_PORT/$ZT_DB_NAME?x-migrations-table=controller_migrations&sslmode=disable" up
  133. fi
  134. if [ -n "$ZT_TEMPORAL_HOST" ] && [ -n "$ZT_TEMPORAL_PORT" ]; then
  135. echo "waiting for temporal..."
  136. while ! nc -z ${ZT_TEMPORAL_HOST} ${ZT_TEMPORAL_PORT}; do
  137. echo "waiting...";
  138. sleep 1;
  139. done
  140. echo "Temporal is up"
  141. fi
  142. cat /var/lib/zerotier-one/local.conf
  143. export GOOGLE_CLOUD_CPP_ENABLE_CLOG=yes
  144. export LIBC_FATAL_STDERR_=1
  145. export GLIBCXX_FORCE_NEW=1
  146. export GLIBCPP_FORCE_NEW=1
  147. export LD_PRELOAD="/opt/conda/envs/central_controller/lib/libjemalloc.so.2"
  148. exec /usr/local/bin/zerotier-one -p${ZT_CONTROLLER_PORT:-$DEFAULT_PORT} /var/lib/zerotier-one