nm-quick.sh 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. #!/bin/bash
  2. echo "checking for root permissions..."
  3. if [ $EUID -ne 0 ]; then
  4. echo "This script must be run as root"
  5. exit 1
  6. fi
  7. echo "checking dependencies..."
  8. declare -A osInfo;
  9. osInfo[/etc/debian_version]="apt-get install -y"
  10. osInfo[/etc/alpine-release]="apk --update add"
  11. osInfo[/etc/centos-release]="yum install -y"
  12. osInfo[/etc/fedora-release]="dnf install -y"
  13. for f in ${!osInfo[@]}
  14. do
  15. if [[ -f $f ]];then
  16. install_cmd=${osInfo[$f]}
  17. fi
  18. done
  19. dependencies=("docker" "docker-compose" "wireguard")
  20. for dependency in ${dependencies[@]}; do
  21. is_installed=$(dpkg-query -W --showformat='${Status}\n' ${dependency} | grep "install ok installed")
  22. if [ "${is_installed}" == "install ok installed" ]; then
  23. echo " " ${dependency} is installed
  24. else
  25. echo " " ${dependency} is not installed. Attempting install.
  26. ${install_cmd} ${dependency}
  27. sleep 5
  28. is_installed=$(dpkg-query -W --showformat='${Status}\n' ${dependency} | grep "install ok installed")
  29. if [ "${is_installed}" == "install ok installed" ]; then
  30. echo " " ${dependency} is installed
  31. elif [ -x "$(command -v ${dependency})" ]; then
  32. echo " " ${dependency} is installed
  33. else
  34. echo " " failed to install ${dependency}. Exiting.
  35. exit 1
  36. fi
  37. fi
  38. done
  39. set -e
  40. echo "setting public ip values..."
  41. NETMAKER_BASE_DOMAIN=nm.$(curl -s ifconfig.me | tr . -).nip.io
  42. COREDNS_IP=$(ip route get 1 | sed -n 's/^.*src \([0-9.]*\) .*$/\1/p')
  43. SERVER_PUBLIC_IP=$(curl -s ifconfig.me)
  44. REPLACE_MASTER_KEY=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 30 ; echo '')
  45. echo " domain: $NETMAKER_BASE_DOMAIN"
  46. echo " coredns ip: $COREDNS_IP"
  47. echo " public ip: $SERVER_PUBLIC_IP"
  48. echo " master key: $REPLACE_MASTER_KEY"
  49. echo "creating caddyfile..."
  50. cat >/root/Caddyfile<<EOL
  51. {
  52. # LetsEncrypt account
  53. email [email protected]
  54. }
  55. # Dashboard
  56. https://dashboard.$NETMAKER_BASE_DOMAIN {
  57. reverse_proxy http://127.0.0.1:8082
  58. }
  59. # API
  60. https://api.$NETMAKER_BASE_DOMAIN {
  61. reverse_proxy http://127.0.0.1:8081
  62. }
  63. # gRPC
  64. https://grpc.$NETMAKER_BASE_DOMAIN {
  65. reverse_proxy h2c://127.0.0.1:50051
  66. }
  67. EOL
  68. echo "creating docker-compose.yml..."
  69. cat >/root/docker-compose.yml<<EOL
  70. version: "3.4"
  71. services:
  72. netmaker:
  73. container_name: netmaker
  74. image: gravitl/netmaker:v0.8.2
  75. volumes:
  76. - /etc/netclient/config:/etc/netclient/config
  77. - dnsconfig:/root/config/dnsconfig
  78. - /usr/bin/wg:/usr/bin/wg
  79. - sqldata:/root/data
  80. cap_add:
  81. - NET_ADMIN
  82. restart: always
  83. network_mode: host
  84. environment:
  85. SERVER_HOST: "$SERVER_PUBLIC_IP"
  86. SERVER_API_CONN_STRING: "api.$NETMAKER_BASE_DOMAIN:443"
  87. SERVER_GRPC_CONN_STRING: "grpc.$NETMAKER_BASE_DOMAIN:443"
  88. COREDNS_ADDR: "$SERVER_PUBLIC_IP"
  89. GRPC_SSL: "on"
  90. DNS_MODE: "on"
  91. SERVER_HTTP_HOST: "api.$NETMAKER_BASE_DOMAIN"
  92. SERVER_GRPC_HOST: "grpc.$NETMAKER_BASE_DOMAIN"
  93. API_PORT: "8081"
  94. GRPC_PORT: "50051"
  95. CLIENT_MODE: "contained"
  96. MASTER_KEY: "REPLACE_MASTER_KEY"
  97. SERVER_GRPC_WIREGUARD: "off"
  98. CORS_ALLOWED_ORIGIN: "*"
  99. DATABASE: "sqlite"
  100. netmaker-ui:
  101. container_name: netmaker-ui
  102. depends_on:
  103. - netmaker
  104. image: gravitl/netmaker-ui:v0.8
  105. links:
  106. - "netmaker:api"
  107. ports:
  108. - "8082:80"
  109. environment:
  110. BACKEND_URL: "https://api.$NETMAKER_BASE_DOMAIN"
  111. restart: always
  112. coredns:
  113. depends_on:
  114. - netmaker
  115. image: coredns/coredns
  116. command: -conf /root/dnsconfig/Corefile
  117. container_name: coredns
  118. restart: always
  119. ports:
  120. - "$COREDNS_IP:53:53/udp"
  121. - "$COREDNS_IP:53:53/tcp"
  122. volumes:
  123. - dnsconfig:/root/dnsconfig
  124. caddy:
  125. image: caddy:latest
  126. container_name: caddy
  127. restart: unless-stopped
  128. network_mode: host # Wants ports 80 and 443!
  129. volumes:
  130. - /root/Caddyfile:/etc/caddy/Caddyfile
  131. # - $PWD/site:/srv # you could also serve a static site in site folder
  132. - caddy_data:/data
  133. - caddy_conf:/config
  134. volumes:
  135. caddy_data: {}
  136. caddy_conf: {}
  137. sqldata: {}
  138. dnsconfig: {}
  139. EOL
  140. echo "starting containers..."
  141. docker-compose -f /root/docker-compose.yml up -d
  142. sleep 5
  143. echo "finished installing"
  144. echo "visit dashboard.$NETMAKER_BASE_DOMAIN to log in"