From 8043a4fe4c793f22a4f16cc65d5702b3a9b7adea Mon Sep 17 00:00:00 2001 From: zhangpeng Date: Thu, 1 Jul 2021 15:56:14 +0800 Subject: [PATCH 01/86] Fix:update rabbit version and replace apt source --- .gitignore | 1 + ansible/group_vars/all.yml | 2 +- ansible/roles/rabbitmq-server/tasks/main.yml | 39 ++++++++++++-------- 3 files changed, 26 insertions(+), 16 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1c2d52b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/* diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml index f665031..b96da00 100644 --- a/ansible/group_vars/all.yml +++ b/ansible/group_vars/all.yml @@ -1,5 +1,5 @@ keepalived_version: 2.0.18 -rabbitmq_version: 3.7.23 +rabbitmq_version: 3.8.18 local_cache_path: "~/.ansible/cache" erlang_solution_version: 1.0 haproxy_version: 2.0 \ No newline at end of file diff --git a/ansible/roles/rabbitmq-server/tasks/main.yml b/ansible/roles/rabbitmq-server/tasks/main.yml index fb25da6..a0d5411 100644 --- a/ansible/roles/rabbitmq-server/tasks/main.yml +++ b/ansible/roles/rabbitmq-server/tasks/main.yml @@ -35,14 +35,24 @@ apt: deb="/tmp/erlang-solutions_{{ erlang_solution_version }}_all.deb" become: yes -- name: update apt for erlang - shell: echo 'deb https://dl.bintray.com/rabbitmq/debian xenial erlang-22.x' | sudo tee -a /etc/apt/sources.list.d/erlang-solutions.list +#- name: update apt for erlang +# shell: echo 'deb https://dl.bintray.com/rabbitmq/debian xenial erlang-22.x' | sudo tee -a /etc/apt/sources.list.d/erlang-solutions.list -- name: add apt-key - apt_key: - url: https://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc +#- name: add apt-key +# apt_key: +# url: https://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc +# state: present + +- name: install add-apt-repository + apt: + name: "software-properties-common" + update_cache: yes state: present +- name: add-apt-repository rabbitmq-erlang + apt_repository: + repo: "ppa:rabbitmq/rabbitmq-erlang" + - name: install erlang apt: name: erlang @@ -52,17 +62,16 @@ - name: add apt_key for rabbitmq shell: wget -O - "https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey" | sudo apt-key add - -- name: add apt signing key, will not download if present - apt_key: - url: https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc - state: present +#- name: add apt signing key, will not download if present +# apt_key: +# url: https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc +# state: present - name: add bintray repo for latest Rabbitmq shell: cmd: | tee /etc/apt/sources.list.d/bintray.rabbitmq.list < Date: Thu, 8 Jul 2021 16:41:29 +0800 Subject: [PATCH 02/86] Perfect project --- ansible/group_vars/all.yml | 2 +- ansible/make.yml | 12 +- ansible/requirements.yml | 8 - ansible/roles/app-agent/meta/main.yml | 13 + ansible/roles/app-agent/tasks/main.yml | 45 ++++ .../roles/appctl/files/etc/logrotate.d/appctl | 7 + .../appctl/files/etc/rsyslog.d/49-appctl.conf | 2 + ansible/roles/appctl/files/opt/app/bin/ctl.sh | 250 ++++++++++++++++++ .../appctl/files/opt/app/bin/envs/appctl.env | 1 + .../appctl/files/opt/app/bin/envs/readme.md | 7 + .../appctl/files/opt/app/bin/node/readme.md | 1 + .../appctl/files/opt/app/bin/tmpl/readme.md | 1 + ansible/roles/appctl/meta/main.yml | 13 + ansible/roles/appctl/tasks/main.yml | 41 +++ ansible/roles/arping/meta/main.yml | 13 + ansible/roles/arping/tasks/main.yml | 6 + ansible/roles/caddy/files/compile.sh | 34 +++ .../files/lib/systemd/system/caddy.service | 35 +++ .../files/opt/app/bin/envs/svc-caddy.env | 1 + .../caddy/files/opt/app/conf/caddy/caddyfile | 0 ansible/roles/caddy/meta/main.yml | 13 + .../roles/caddy/tasks/compile-and-install.yml | 31 +++ .../roles/caddy/tasks/install-prebuilt.yml | 21 ++ ansible/roles/caddy/tasks/main.yml | 54 ++++ ansible/roles/caddy/vars/main.yml | 2 + .../etc/confd/templates/01.header.sh.tmpl | 38 +++ ansible/roles/confd-files/meta/main.yml | 13 + ansible/roles/confd-files/tasks/main.yml | 40 +++ ansible/roles/disable-apt-jobs/meta/main.yml | 13 + ansible/roles/disable-apt-jobs/tasks/main.yml | 16 ++ ansible/roles/disable-motd/meta/main.yml | 13 + ansible/roles/disable-motd/tasks/main.yml | 13 + ansible/roles/haproxy/tasks/main.yml | 5 + ansible/roles/install/meta/main.yml | 13 + ansible/roles/install/tasks/main.yml | 114 ++++++++ ansible/roles/keepalived/tasks/main.yml | 2 +- ansible/roles/node-all/tasks/main.yml | 2 +- .../templates/haproxy.sh/01.haproxy.cfg.tmpl | 8 +- ansible/roles/node-proxy/tasks/main.yml | 2 +- ansible/roles/node-rabbitmq/tasks/main.yml | 2 +- ansible/roles/rabbitmq-server/tasks/main.yml | 4 +- 41 files changed, 886 insertions(+), 25 deletions(-) delete mode 100644 ansible/requirements.yml create mode 100644 ansible/roles/app-agent/meta/main.yml create mode 100644 ansible/roles/app-agent/tasks/main.yml create mode 100644 ansible/roles/appctl/files/etc/logrotate.d/appctl create mode 100644 ansible/roles/appctl/files/etc/rsyslog.d/49-appctl.conf create mode 100755 ansible/roles/appctl/files/opt/app/bin/ctl.sh create mode 100644 ansible/roles/appctl/files/opt/app/bin/envs/appctl.env create mode 100644 ansible/roles/appctl/files/opt/app/bin/envs/readme.md create mode 100644 ansible/roles/appctl/files/opt/app/bin/node/readme.md create mode 100644 ansible/roles/appctl/files/opt/app/bin/tmpl/readme.md create mode 100644 ansible/roles/appctl/meta/main.yml create mode 100644 ansible/roles/appctl/tasks/main.yml create mode 100644 ansible/roles/arping/meta/main.yml create mode 100644 ansible/roles/arping/tasks/main.yml create mode 100644 ansible/roles/caddy/files/compile.sh create mode 100644 ansible/roles/caddy/files/lib/systemd/system/caddy.service create mode 100644 ansible/roles/caddy/files/opt/app/bin/envs/svc-caddy.env create mode 100644 ansible/roles/caddy/files/opt/app/conf/caddy/caddyfile create mode 100644 ansible/roles/caddy/meta/main.yml create mode 100644 ansible/roles/caddy/tasks/compile-and-install.yml create mode 100644 ansible/roles/caddy/tasks/install-prebuilt.yml create mode 100644 ansible/roles/caddy/tasks/main.yml create mode 100644 ansible/roles/caddy/vars/main.yml create mode 100644 ansible/roles/confd-files/files/etc/confd/templates/01.header.sh.tmpl create mode 100644 ansible/roles/confd-files/meta/main.yml create mode 100644 ansible/roles/confd-files/tasks/main.yml create mode 100644 ansible/roles/disable-apt-jobs/meta/main.yml create mode 100644 ansible/roles/disable-apt-jobs/tasks/main.yml create mode 100644 ansible/roles/disable-motd/meta/main.yml create mode 100644 ansible/roles/disable-motd/tasks/main.yml create mode 100644 ansible/roles/install/meta/main.yml create mode 100644 ansible/roles/install/tasks/main.yml diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml index b96da00..eae36a3 100644 --- a/ansible/group_vars/all.yml +++ b/ansible/group_vars/all.yml @@ -1,5 +1,5 @@ keepalived_version: 2.0.18 -rabbitmq_version: 3.8.18 +rabbitmq_version: 3.8.19 local_cache_path: "~/.ansible/cache" erlang_solution_version: 1.0 haproxy_version: 2.0 \ No newline at end of file diff --git a/ansible/make.yml b/ansible/make.yml index ab13b2e..cb31cc1 100644 --- a/ansible/make.yml +++ b/ansible/make.yml @@ -8,11 +8,11 @@ - include_role: name: "{{ service_name }}" loop: - - disable-apt-jobs-1.0.0 - - disable-motd-1.0.0 - - app-agent-1.0.1 - - appctl-1.0.9 - - arping-1.0.0 + - disable-apt-jobs + - disable-motd + - app-agent + - appctl + - arping - rabbitmq-server - haproxy - keepalived @@ -20,6 +20,6 @@ - node-client - node-proxy - node-rabbitmq - - caddy-1.0.6 + - caddy loop_control: loop_var: service_name diff --git a/ansible/requirements.yml b/ansible/requirements.yml deleted file mode 100644 index de56304..0000000 --- a/ansible/requirements.yml +++ /dev/null @@ -1,8 +0,0 @@ -- src: https://qingcloudappcenter.github.io/ansible-roles/disable-apt-jobs-1.0.0.tar.gz -- src: https://qingcloudappcenter.github.io/ansible-roles/disable-motd-1.0.0.tar.gz -- src: https://qingcloudappcenter.github.io/ansible-roles/app-agent-1.0.1.tar.gz -- src: https://qingcloudappcenter.github.io/ansible-roles/appctl-1.0.9.tar.gz -- src: https://qingcloudappcenter.github.io/ansible-roles/arping-1.0.0.tar.gz -- src: https://qingcloudappcenter.github.io/ansible-roles/confd-files-1.0.2.tar.gz -- src: https://qingcloudappcenter.github.io/ansible-roles/install-1.0.5.tar.gz -- src: https://qingcloudappcenter.github.io/ansible-roles/caddy-1.0.6.tar.gz \ No newline at end of file diff --git a/ansible/roles/app-agent/meta/main.yml b/ansible/roles/app-agent/meta/main.yml new file mode 100644 index 0000000..0a4c119 --- /dev/null +++ b/ansible/roles/app-agent/meta/main.yml @@ -0,0 +1,13 @@ +galaxy_info: + role_name: app-agent + role_version: 1.0.1 + author: Hongliang Wang + description: installs app agent + + license: Apache + + min_ansible_version: 2.4 + + galaxy_tags: [] + +dependencies: [] diff --git a/ansible/roles/app-agent/tasks/main.yml b/ansible/roles/app-agent/tasks/main.yml new file mode 100644 index 0000000..5787bc0 --- /dev/null +++ b/ansible/roles/app-agent/tasks/main.yml @@ -0,0 +1,45 @@ +--- +- name: set up variables + set_fact: + app_agent_version: 1.0.6 + +- name: prepare directories + file: + path: "/tmp/app-agent" + state: directory + +- name: prepare local download directories + file: + path : "{{ role_path }}/files/tmp" + state: directory + delegate_to: localhost + +- name: download reusable binaries locally + vars: + dest_path: "{{ role_path }}/files/tmp/app-agent-{{ app_agent_version }}.tgz" + get_url: + url: "https://github.com/QingCloudAppcenter/AppcenterAgent/releases/download/v{{ app_agent_version }}/app-agent-linux-amd64.tar.gz" + dest: "{{ dest_path }}" + when: dest_path is not exists + run_once: True + delegate_to: localhost + +- name: extract binary + unarchive: + src: "{{ role_path }}/files/tmp/app-agent-{{ app_agent_version }}.tgz" + dest: "/tmp/app-agent" + creates: "/tmp/app-agent/bin" + extra_opts: [ --strip-components=1 ] + +- name: install app agent + raw: | + cd /tmp/app-agent + ./install.sh + args: + creates: /opt/qingcloud/app-agent/bin/confd + +- name: adjust logrotate + replace: + path: /etc/logrotate.d/app-agent + regexp: '^(\s+size).*' + replace: '\1 2M' diff --git a/ansible/roles/appctl/files/etc/logrotate.d/appctl b/ansible/roles/appctl/files/etc/logrotate.d/appctl new file mode 100644 index 0000000..ea5c461 --- /dev/null +++ b/ansible/roles/appctl/files/etc/logrotate.d/appctl @@ -0,0 +1,7 @@ +/data/appctl/logs/appctl.log { + weekly + maxsize 2M + rotate 5 + missingok + notifempty +} diff --git a/ansible/roles/appctl/files/etc/rsyslog.d/49-appctl.conf b/ansible/roles/appctl/files/etc/rsyslog.d/49-appctl.conf new file mode 100644 index 0000000..da9ad12 --- /dev/null +++ b/ansible/roles/appctl/files/etc/rsyslog.d/49-appctl.conf @@ -0,0 +1,2 @@ +if $programname startswith 'appctl' then /data/appctl/logs/appctl.log +&stop diff --git a/ansible/roles/appctl/files/opt/app/bin/ctl.sh b/ansible/roles/appctl/files/opt/app/bin/ctl.sh new file mode 100755 index 0000000..8fb9760 --- /dev/null +++ b/ansible/roles/appctl/files/opt/app/bin/ctl.sh @@ -0,0 +1,250 @@ +#!/usr/bin/env bash + +# Default hook functions named starting with _, e.g. _init(), _start(), etc. +# Specific roles can override the default hooks like: +# start() { +# _start +# ... +# } +# +# Specific hooks will be executed if exist, otherwise the default ones. + +# Error codes +EC_CHECK_INACTIVE=200 +EC_CHECK_PORT_ERR=201 +EC_CHECK_PROTO_ERR=202 +EC_ENV_ERR=203 +EC_CHECK_HTTP_REQ_ERR=204 +EC_CHECK_HTTP_CODE_ERR=205 + +command=$1 +args="${@:2}" + +log() { + if [ "$1" == "--debug" ]; then + [ "$APPCTL_ENV" == "dev" ] || return 0 + shift + fi + logger -S 5000 -t appctl --id=$$ -- "[cmd=$command args='$args'] $@" +} + +retry() { + local tried=0 + local maxAttempts=$1 + local interval=$2 + local stopCode=$3 + local cmd="${@:4}" + local retCode=0 + while [ $tried -lt $maxAttempts ]; do + $cmd && return 0 || { + retCode=$? + if [ "$retCode" = "$stopCode" ]; then + log "'$cmd' returned with stop code $stopCode. Stopping ..." + return $retCode + fi + } + sleep $interval + tried=$((tried+1)) + done + + log "'$cmd' still returned errors after $tried attempts. Stopping ..." + return $retCode +} + +rotate() { + local maxFilesCount=5 + for path in $@; do + for i in $(seq 1 $maxFilesCount | tac); do + if [ -f "${path}.$i" ]; then mv ${path}.$i ${path}.$(($i+1)); fi + done + if [ -f "$path" ]; then cp $path ${path}.1; fi + done +} + +execute() { + local cmd=$1; log --debug "Executing command ..." + [ "$(type -t $cmd)" = "function" ] || cmd=_$cmd + $cmd ${@:2} +} + +applyEnvFiles() { + local envFile; for envFile in $(find /opt/app/bin/envs -name "*.env"); do . $envFile; done +} + +applyRoleScripts() { + local scriptFile=/opt/app/bin/node/$NODE_CTL.sh + if [ -f "$scriptFile" ]; then . $scriptFile; fi +} + +checkEnv() { + test -n "$1" +} + +checkMounts() { + test -n "${MY_HYPER_TYPE}" || { + log "ERROR: MY_HYPER_TYPE variable is required to be set. " + return 1 + } + test -n "${DATA_MOUNTS+x}" || { + log "ERROR: DATA_MOUNTS variable is required to be set. " + return 1 + } + case $MY_HYPER_TYPE in + kvm) + local dataDir; for dataDir in $DATA_MOUNTS; do + grep -qs " $dataDir " /proc/mounts || { + log "ERROR: Failed to mount disk . " + return 1 + } + done + ;; + lxc) + local dataDir; for dataDir in $DATA_MOUNTS; do + dataDir=$(echo $dataDir|tr -s [:space:]) + if [ -d $dataDir ]; then + : + else + log "ERROR: $dataDir is not found in this container . " + return 1 + fi + done + ;; + *) + log "ERROR: unrecognized hyper type: $MY_HYPER_TYPE. " + return 1 + ;; + esac +} + +getServices() { + if [ "$1" = "-a" ]; then + echo $SERVICES + else + echo $SERVICES | xargs -n1 | awk -F/ '$2=="true"' | xargs + fi +} + +isSvcEnabled() { + local svc="${1%%/*}" + [ "$(echo $(getServices -a) | xargs -n1 | awk -F/ '$1=="'$svc'" {print $2}')" = "true" ] +} + +checkActive() { + systemctl is-active -q $1 +} + +checkEndpoint() { + local proto=${1%:*} host=${2-$MY_IP} port=${1#*:} + if [ "$proto" = "tcp" ]; then + nc -z -w5 $host $port + elif [ "$proto" = "http" ]; then + local code + code="$(curl -s -m5 -o /dev/null -w "%{http_code}" $host:$port)" || { + log "ERROR: HTTP $code - failed to check http://$host:$port ($?)." + return $EC_CHECK_HTTP_REQ_ERR + } + [[ "$code" =~ ^(200|302|401|403|404)$ ]] || { + log "ERROR: unexpected HTTP code $code." + return $EC_CHECK_HTTP_CODE_ERR + } + else + return $EC_CHECK_PROTO_ERR + fi +} + +isNodeInitialized() { + local svcs="$(getServices -a)" + [ "$(systemctl is-enabled ${svcs%%/*})" == "disabled" ] +} + +initSvc() { + systemctl unmask -q ${1%%/*} +} + +_checkSvc() { + checkActive ${1%%/*} || { + log "Service '$1' is inactive." + return $EC_CHECK_INACTIVE + } + local endpoints=$(echo $1 | awk -F/ '{print $3}') + local endpoint; for endpoint in ${endpoints//,/ }; do + checkEndpoint $endpoint || { + log "Endpoint '$endpoint' is unreachable." + return $EC_CHECK_PORT_ERR + } + done +} + +startSvc() { + systemctl start ${1%%/*} +} + +stopSvc() { + systemctl stop ${1%%/*} +} + +restartSvc() { + stopSvc $1 + startSvc $1 +} + +### app management + +_preCheck() { + checkEnv "$MY_IP" +} + +_initNode() { + checkMounts + rm -rf /data/lost+found + install -d -o syslog -g svc /data/appctl/logs + local svc; for svc in $(getServices -a); do initSvc $svc; done +} + +_revive() { + local svc; for svc in $(getServices); do + execute checkSvc $svc || restartSvc $svc || log "ERROR: failed to restart '$svc' ($?)." + done +} + +_check() { + local svc; for svc in $(getServices); do + execute checkSvc $svc + done +} + +_start() { + isNodeInitialized || { + execute initNode + systemctl restart rsyslog # output to log files under /data + } + local svc; for svc in $(getServices); do startSvc $svc; done +} + +_stop() { + log "Stopping all services ..." + local svc; for svc in $(getServices -a | xargs -n1 | tac); do stopSvc $svc; done +} + +_restart() { + execute stop + execute start +} + +_reload() { + if ! isNodeInitialized; then return 0; fi # only reload after initialized + local svcs="${@:-$(getServices -a)}" + local svc; for svc in $(echo $svcs | xargs -n1 | tac); do stopSvc $svc; done + local svc; for svc in $svcs; do + if isSvcEnabled $svc; then startSvc $svc; fi + done +} + +applyEnvFiles +applyRoleScripts + +[ "$APPCTL_ENV" == "dev" ] && set -x +set -eo pipefail + +execute preCheck +execute $command $args diff --git a/ansible/roles/appctl/files/opt/app/bin/envs/appctl.env b/ansible/roles/appctl/files/opt/app/bin/envs/appctl.env new file mode 100644 index 0000000..3e167db --- /dev/null +++ b/ansible/roles/appctl/files/opt/app/bin/envs/appctl.env @@ -0,0 +1 @@ +APPCTL_ENV=prod diff --git a/ansible/roles/appctl/files/opt/app/bin/envs/readme.md b/ansible/roles/appctl/files/opt/app/bin/envs/readme.md new file mode 100644 index 0000000..0bae9b9 --- /dev/null +++ b/ansible/roles/appctl/files/opt/app/bin/envs/readme.md @@ -0,0 +1,7 @@ +This directory holds env files, e.g. + +svc-rabbitmq-server.env: + +```env +SERVICES="$SERVICES rabbitmq-server/true/tcp:5672,http:15672" +``` \ No newline at end of file diff --git a/ansible/roles/appctl/files/opt/app/bin/node/readme.md b/ansible/roles/appctl/files/opt/app/bin/node/readme.md new file mode 100644 index 0000000..fae06e7 --- /dev/null +++ b/ansible/roles/appctl/files/opt/app/bin/node/readme.md @@ -0,0 +1 @@ +Place node-specific scripts under this directory. \ No newline at end of file diff --git a/ansible/roles/appctl/files/opt/app/bin/tmpl/readme.md b/ansible/roles/appctl/files/opt/app/bin/tmpl/readme.md new file mode 100644 index 0000000..9835102 --- /dev/null +++ b/ansible/roles/appctl/files/opt/app/bin/tmpl/readme.md @@ -0,0 +1 @@ +This directory holds bundled confd template files. diff --git a/ansible/roles/appctl/meta/main.yml b/ansible/roles/appctl/meta/main.yml new file mode 100644 index 0000000..a995235 --- /dev/null +++ b/ansible/roles/appctl/meta/main.yml @@ -0,0 +1,13 @@ +galaxy_info: + role_name: appctl + role_version: 1.0.9 + author: Hongliang Wang + description: installs appctl + + license: Apache + + min_ansible_version: 2.4 + + galaxy_tags: [] + +dependencies: [] diff --git a/ansible/roles/appctl/tasks/main.yml b/ansible/roles/appctl/tasks/main.yml new file mode 100644 index 0000000..d677021 --- /dev/null +++ b/ansible/roles/appctl/tasks/main.yml @@ -0,0 +1,41 @@ +--- +- name: copy logging config files + copy: + src: files/{{ path }}/ + dest: /{{ path }} + owner: root + group: root + mode: u=rw,go=r + loop: + - etc/logrotate.d + - etc/rsyslog.d + loop_control: + loop_var: path + +- name: create svc group + group: + name: svc + state: present + +- name: copy app files + copy: + src: files/opt/app/ + dest: /opt/app + owner: root + group: svc + mode: preserve + directory_mode: u=rwx,g=rx,o= + +- name: create symbolic link + file: + src: /opt/app/bin/ctl.sh + dest: /usr/bin/appctl + state: link + +- name: set up dev env + copy: + dest: /opt/app/bin/envs/appdev.env + content: | + APPCTL_ENV=dev + + when: target_env == 'dev' diff --git a/ansible/roles/arping/meta/main.yml b/ansible/roles/arping/meta/main.yml new file mode 100644 index 0000000..9601b88 --- /dev/null +++ b/ansible/roles/arping/meta/main.yml @@ -0,0 +1,13 @@ +galaxy_info: + role_name: arping + role_version: 1.0.0 + author: Hongliang Wang + description: installs arping + + license: Apache + + min_ansible_version: 2.4 + + galaxy_tags: [] + +dependencies: [] diff --git a/ansible/roles/arping/tasks/main.yml b/ansible/roles/arping/tasks/main.yml new file mode 100644 index 0000000..a8ea64d --- /dev/null +++ b/ansible/roles/arping/tasks/main.yml @@ -0,0 +1,6 @@ +--- +- name: install arping + apt: + name: [ 'iputils-arping' ] + state: present + update_cache: yes \ No newline at end of file diff --git a/ansible/roles/caddy/files/compile.sh b/ansible/roles/caddy/files/compile.sh new file mode 100644 index 0000000..acc8718 --- /dev/null +++ b/ansible/roles/caddy/files/compile.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +set -eu + +# From https://github.com/wmark/http.upload/issues/38#issuecomment-529623377 + +cat > go.mod << MOD_EOF +module caddy + +go 1.13 + +require ( + blitznote.com/src/http.upload/v3 v$CADDY_UPLOAD_VERSION + github.com/caddyserver/caddy v$CADDY_VERSION +) +MOD_EOF + +cat > main.go << EOF +package main + +import ( + "github.com/caddyserver/caddy/caddy/caddymain" + + _ "blitznote.com/src/http.upload/v3" +) + +func main() { + caddymain.Run() +} +EOF + +gofmt -w main.go +go mod tidy +go build -tags "caddyserver0.9 caddyserver1.0" -o $TARGET_FILE \ No newline at end of file diff --git a/ansible/roles/caddy/files/lib/systemd/system/caddy.service b/ansible/roles/caddy/files/lib/systemd/system/caddy.service new file mode 100644 index 0000000..956a7a2 --- /dev/null +++ b/ansible/roles/caddy/files/lib/systemd/system/caddy.service @@ -0,0 +1,35 @@ +[Unit] +Description=Caddy HTTP/2 web server +Documentation=https://caddyserver.com/docs +After=network-online.target +Wants=network-online.target +ConditionFileNotEmpty=/opt/app/conf/caddy/caddyfile + +[Service] +Restart=on-abnormal + +User=caddy +Group=caddy + +; Always set "-root" to something safe in case it gets forgotten in the Caddyfile. +ExecStart=/opt/caddy/current/caddy -agree=true -conf=/opt/app/conf/caddy/caddyfile +ExecReload=/bin/kill -USR1 $MAINPID + +KillMode=mixed +KillSignal=SIGQUIT +TimeoutStopSec=5s + +LimitNOFILE=1024 +LimitNPROC=512 + +PrivateTmp=true +PrivateDevices=false +ProtectHome=true +ProtectSystem=full + +CapabilityBoundingSet=CAP_NET_BIND_SERVICE +AmbientCapabilities=CAP_NET_BIND_SERVICE +NoNewPrivileges=true + +[Install] +WantedBy=multi-user.target diff --git a/ansible/roles/caddy/files/opt/app/bin/envs/svc-caddy.env b/ansible/roles/caddy/files/opt/app/bin/envs/svc-caddy.env new file mode 100644 index 0000000..c98b9d4 --- /dev/null +++ b/ansible/roles/caddy/files/opt/app/bin/envs/svc-caddy.env @@ -0,0 +1 @@ +SERVICES="$SERVICES caddy/false/http:80" \ No newline at end of file diff --git a/ansible/roles/caddy/files/opt/app/conf/caddy/caddyfile b/ansible/roles/caddy/files/opt/app/conf/caddy/caddyfile new file mode 100644 index 0000000..e69de29 diff --git a/ansible/roles/caddy/meta/main.yml b/ansible/roles/caddy/meta/main.yml new file mode 100644 index 0000000..9d5009e --- /dev/null +++ b/ansible/roles/caddy/meta/main.yml @@ -0,0 +1,13 @@ +galaxy_info: + role_name: caddy + role_version: 1.0.6 + author: Hongliang Wang + description: installs caddy server + + license: Apache + + min_ansible_version: 2.4 + + galaxy_tags: [] + +dependencies: [] diff --git a/ansible/roles/caddy/tasks/compile-and-install.yml b/ansible/roles/caddy/tasks/compile-and-install.yml new file mode 100644 index 0000000..22eb3e5 --- /dev/null +++ b/ansible/roles/caddy/tasks/compile-and-install.yml @@ -0,0 +1,31 @@ +--- +- name: define vars + set_fact: + work_dir: "{{ role_path }}/files/tmp/with-upload-module" + +- name: prepare tmp compile dir + file: + path: "{{ work_dir }}" + state: directory + delegate_to: localhost + run_once: True + +- name: compile Caddy with upload module + vars: + target_file: "{{ work_dir }}/caddy-{{ caddy_version }}" + args: + chdir: "{{ work_dir }}" + creates: "{{ target_file }}" + environment: + GO111MODULE: "on" + CADDY_VERSION: "{{ caddy_version }}" + CADDY_UPLOAD_VERSION: "{{ mod_upload_version }}" + TARGET_FILE: "{{ target_file }}" + local_action: command bash {{ role_path }}/files/compile.sh + run_once: True + +- name: install + copy: + src: "{{ work_dir }}/caddy-{{ caddy_version }}" + dest: /opt/caddy/current/caddy + mode: 755 \ No newline at end of file diff --git a/ansible/roles/caddy/tasks/install-prebuilt.yml b/ansible/roles/caddy/tasks/install-prebuilt.yml new file mode 100644 index 0000000..ea8b75b --- /dev/null +++ b/ansible/roles/caddy/tasks/install-prebuilt.yml @@ -0,0 +1,21 @@ +--- +- name: prepare tmp download dir + file: + path: "{{ role_path }}/files/tmp/prebuilt" + state: directory + delegate_to: localhost + +- name: download caddy binary + vars: + dest_caddy_path: "{{ role_path }}/files/tmp/prebuilt/caddy-{{ caddy_version }}.tgz" + get_url: + url: https://github.com/caddyserver/caddy/releases/download/v{{ caddy_version }}/caddy_v{{ caddy_version }}_linux_amd64.tar.gz + dest: "{{ dest_caddy_path }}" + delegate_to: localhost + when: dest_caddy_path is not exists + run_once: True + +- name: install caddy + unarchive: + src: "{{ role_path }}/files/tmp/prebuilt/caddy-{{ caddy_version }}.tgz" + dest: /opt/caddy/current \ No newline at end of file diff --git a/ansible/roles/caddy/tasks/main.yml b/ansible/roles/caddy/tasks/main.yml new file mode 100644 index 0000000..214e872 --- /dev/null +++ b/ansible/roles/caddy/tasks/main.yml @@ -0,0 +1,54 @@ +--- +- name: prepare service group + group: + name: svc + state: present + +- name: prepare service user + user: + name: caddy + groups: svc + shell: /sbin/nologin + create_home: no + append: yes + comment: "Service User" + state: present + +- name: prepare binary directory + file: + path: /opt/caddy/{{ caddy_version }} + state: directory + +- name: link binary dir + file: + src: "{{ caddy_version }}" + dest: /opt/caddy/current + state: link + +- name: compile with plugins + include_tasks: compile-and-install.yml + when: caddy_plugins is defined + +- name: download official prebuilt package + include_tasks: install-prebuilt.yml + when: caddy_plugins is undefined + +- name: transfer files + copy: + src: files/{{ file_path }} + dest: /{{ file_path }} + owner: root + group: root + mode: preserve + loop: + - lib/systemd/system/ + - opt/app/ + loop_control: + loop_var: file_path + +- name: mask caddy service + systemd: + name: caddy + enabled: no + masked: yes + state: stopped \ No newline at end of file diff --git a/ansible/roles/caddy/vars/main.yml b/ansible/roles/caddy/vars/main.yml new file mode 100644 index 0000000..e706c83 --- /dev/null +++ b/ansible/roles/caddy/vars/main.yml @@ -0,0 +1,2 @@ +caddy_version: 1.0.4 +mod_upload_version: 3.0.1 \ No newline at end of file diff --git a/ansible/roles/confd-files/files/etc/confd/templates/01.header.sh.tmpl b/ansible/roles/confd-files/files/etc/confd/templates/01.header.sh.tmpl new file mode 100644 index 0000000..3b684c2 --- /dev/null +++ b/ansible/roles/confd-files/files/etc/confd/templates/01.header.sh.tmpl @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +set -eo pipefail + +myPath="$0" + +cleanUp() { + local rc=$? + [ "$rc" -eq 0 ] || echo "# Failed ($rc)! Please check confd logs." >> $myPath + return $rc +} + +trap cleanUp EXIT + +rotate() { + local path=$1 maxFilesCount=5 + for i in $(seq 1 $maxFilesCount | tac); do + if [ -f "${path}.$i" ]; then mv ${path}.$i ${path}.$(($i+1)); fi + done + if [ -f "$path" ]; then cp $path ${path}.1; fi +} + +flush() { + local targetFile=$1 + if [ -n "$targetFile" ]; then + rotate $targetFile + cat > $targetFile - + else + cat - + fi +} + +applyEnvs() { + local -r envFile=/opt/app/bin/envs/confd.env + if [ -f "$envFile" ]; then . $envFile; fi +} + +applyEnvs diff --git a/ansible/roles/confd-files/meta/main.yml b/ansible/roles/confd-files/meta/main.yml new file mode 100644 index 0000000..8913e8e --- /dev/null +++ b/ansible/roles/confd-files/meta/main.yml @@ -0,0 +1,13 @@ +galaxy_info: + role_name: confd-files + role_version: 1.0.2 + author: Hongliang Wang + description: installs confd-files + + license: Apache + + min_ansible_version: 2.9 + + galaxy_tags: [] + +dependencies: [] diff --git a/ansible/roles/confd-files/tasks/main.yml b/ansible/roles/confd-files/tasks/main.yml new file mode 100644 index 0000000..c7f6fc8 --- /dev/null +++ b/ansible/roles/confd-files/tasks/main.yml @@ -0,0 +1,40 @@ +--- +- name: compile + shell: | + compileTmpls() { + local commonFiles="$(ls {{ role_path }}/files/etc/confd/templates/*)" + local srcFiles="$commonFiles ${@:2}" destFile=$1 + for tmpl in $srcFiles; do + (cat $tmpl; echo) >> $destFile + done + } + + set -euo pipefail + + parentRolePath="{{ ansible_parent_role_paths[0] }}" + srcRootDir="$parentRolePath/files/etc/confd/templates" + [ -d "$srcRootDir" ] + destDir=$parentRolePath/files/tmp/confd/templates + mkdir -p $destDir + rm -rf $destDir/* + for srcDir in $(ls -d $srcRootDir/*); do + compileTmpls $destDir/$(basename $srcDir).tmpl $(ls $srcDir/*) + done + args: + executable: /bin/bash + delegate_to: localhost + run_once: True + +- name: install + copy: + src: "{{ ansible_parent_role_paths[0] }}/files/{{ path.src }}/" + dest: /etc/confd/{{ path.dest }}/ + owner: root + group: root + loop: + - src: etc/confd/conf.d + dest: conf.d + - src: tmp/confd/templates + dest: templates + loop_control: + loop_var: path \ No newline at end of file diff --git a/ansible/roles/disable-apt-jobs/meta/main.yml b/ansible/roles/disable-apt-jobs/meta/main.yml new file mode 100644 index 0000000..b8c81f8 --- /dev/null +++ b/ansible/roles/disable-apt-jobs/meta/main.yml @@ -0,0 +1,13 @@ +galaxy_info: + role_name: disable-apt-jobs + role_version: 1.0.0 + author: Hongliang Wang + description: disable apt jobs + + license: Apache + + min_ansible_version: 2.4 + + galaxy_tags: [] + +dependencies: [] diff --git a/ansible/roles/disable-apt-jobs/tasks/main.yml b/ansible/roles/disable-apt-jobs/tasks/main.yml new file mode 100644 index 0000000..c461176 --- /dev/null +++ b/ansible/roles/disable-apt-jobs/tasks/main.yml @@ -0,0 +1,16 @@ +--- +- name: disable apt auto upgrade + systemd: + name: "{{ svc_name }}" + state: stopped + masked: yes + loop: + - apt-daily.timer + - apt-daily.service + - apt-daily-upgrade.timer + - apt-daily-upgrade.service + loop_control: + loop_var: svc_name + +- name: fix apt issues + shell: dpkg --configure -a diff --git a/ansible/roles/disable-motd/meta/main.yml b/ansible/roles/disable-motd/meta/main.yml new file mode 100644 index 0000000..9bdfd23 --- /dev/null +++ b/ansible/roles/disable-motd/meta/main.yml @@ -0,0 +1,13 @@ +galaxy_info: + role_name: disable-motd + role_version: 1.0.0 + author: Hongliang Wang + description: disable motd + + license: Apache + + min_ansible_version: 2.4 + + galaxy_tags: [] + +dependencies: [] diff --git a/ansible/roles/disable-motd/tasks/main.yml b/ansible/roles/disable-motd/tasks/main.yml new file mode 100644 index 0000000..f0c9fdb --- /dev/null +++ b/ansible/roles/disable-motd/tasks/main.yml @@ -0,0 +1,13 @@ +--- +- name: remove welcome messages after SSH login + file: + path: "{{ remote_usr.home }}/.hushlogin" + owner: "{{ remote_usr.name }}" + state: touch + loop: + - name: ubuntu + home: /home/ubuntu + - name: root + home: /root + loop_control: + loop_var: remote_usr diff --git a/ansible/roles/haproxy/tasks/main.yml b/ansible/roles/haproxy/tasks/main.yml index 47a1156..e165345 100644 --- a/ansible/roles/haproxy/tasks/main.yml +++ b/ansible/roles/haproxy/tasks/main.yml @@ -31,3 +31,8 @@ masked: yes state: stopped +- name: creates directory + file: + path: /opt/app/conf/haproxy + state: directory + diff --git a/ansible/roles/install/meta/main.yml b/ansible/roles/install/meta/main.yml new file mode 100644 index 0000000..c461b3b --- /dev/null +++ b/ansible/roles/install/meta/main.yml @@ -0,0 +1,13 @@ +galaxy_info: + role_name: install + role_version: 1.0.5 + author: Hongliang Wang + description: download files with local cache and install + + license: Apache + + min_ansible_version: 2.9 + + galaxy_tags: [] + +dependencies: [] diff --git a/ansible/roles/install/tasks/main.yml b/ansible/roles/install/tasks/main.yml new file mode 100644 index 0000000..6bc844e --- /dev/null +++ b/ansible/roles/install/tasks/main.yml @@ -0,0 +1,114 @@ +--- +- name: set up default home var + set_fact: + default_dest_dir: "/opt/{{ opts.pkg_name }}/{{ opts.pkg_version }}/" + when: opts.pkg_version is defined + +- name: set up variables + set_fact: + dest_path: "{{ opts.dest_path | d(default_dest_dir) }}" + pkg_name: "{{ opts.pkg_name }}" + pkg_type: "{{ opts.pkg_type | d('') }}" + pkg_version: "{{ opts.pkg_version | d('') }}" + extracts: "{{ opts.extracts | d(false) }}" + extra_opts: "{{ opts.extra_opts | d(['--strip-components=1'] if opts.pkg_type == 'tgz' else []) }}" + creates: "{{ opts.creates | d('') }}" + parent_role_name: "{{ ansible_parent_role_names[0] | regex_replace('-[0-9.]+$', '') }}" + target_owner: "{{ opts.target_owner | d('root') }}" + target_group: "{{ opts.target_group | d('root') }}" + +- name: set other variables + set_fact: + local_path: "{{ local_cache_path }}/{{ parent_role_name }}/{{ opts.local_path + '/' if opts.local_path is defined else '' }}{{ pkg_name }}{{ '-' + pkg_version if pkg_version else '' }}{{ '.' + pkg_type if pkg_type else '' }}" + +- name: install tools + apt: + name: ['unzip'] + state: present + update_cache: no + when: + - extracts + - pkg_type == 'zip' + +- name: check if package file exists + stat: + path: "{{ local_path }}" + register: cached_file + run_once: True + delegate_to: localhost + +- name: prepare local dir + file: + dest: "{{ local_path | dirname }}" + state: directory + delegate_to: localhost + when: + - cached_file.stat.exists == False + +- name: download package - {{ pkg_name }} + get_url: + url: "{{ opts.pkg_url }}" + dest: "{{ local_path }}" + delegate_to: localhost + run_once: True + when: + - cached_file.stat.exists == False + +- name: Prepare directories - {{ pkg_name }} + file: + path: "{{ dest_path if extracts or dest_path[-1] == '/' else dest_path | dirname }}" + owner: "{{ target_owner }}" + group: "{{ target_group }}" + state: directory + +- name: extract package - {{ pkg_name }} + unarchive: + src: "{{ local_path }}" + dest: "{{ dest_path }}" + owner: "{{ target_owner }}" + group: "{{ target_group }}" + creates: "{{ dest_path | regex_replace('/*$', '') }}/{{ creates }}" + extra_opts: "{{ extra_opts }}" + when: + - extracts + +- name: set permissions - {{ pkg_name }} + file: + path: "{{ dest_path }}" + owner: "{{ target_owner }}" + group: "{{ target_group }}" + recurse: yes + when: + - extracts + +- name: transfer package - {{ pkg_name }} + copy: + src: "{{ local_path }}" + dest: "{{ dest_path }}" + mode: "{{ opts.file_mode | d('644') }}" + when: + - extracts == False + +- name: create symbolic link - {{ pkg_name }} + file: + src: "{{ pkg_version }}" + dest: "/opt/{{ pkg_name }}/current" + state: link + when: dest_path == default_dest_dir + +- name: add bin path to PATH + copy: + dest: /etc/profile.d/{{ pkg_name }}-path.sh + content: PATH={{ dest_path | regex_replace('/*$', '') }}/{{ opts.bin_path }}:$PATH + when: opts.bin_path is defined + +- name: create bin symbolic links - {{ pkg_name }} + file: + src: "{{ '/opt/' + pkg_name + '/current' if dest_path == default_dest_dir else dest_path }}{{ '/' + bin_link.src if bin_link.src else '' }}" + dest: "{{ bin_link.dest | d('/usr/bin/' + (bin_link.src | basename)) }}" + force: yes + state: link + loop: "{{ opts.bin_links }}" + loop_control: + loop_var: bin_link + when: opts.bin_links is defined diff --git a/ansible/roles/keepalived/tasks/main.yml b/ansible/roles/keepalived/tasks/main.yml index 8035964..deec589 100644 --- a/ansible/roles/keepalived/tasks/main.yml +++ b/ansible/roles/keepalived/tasks/main.yml @@ -15,7 +15,7 @@ - name: download keepalived include_role: - name: install-1.0.5 + name: install vars: opts: pkg_name: keepalived diff --git a/ansible/roles/node-all/tasks/main.yml b/ansible/roles/node-all/tasks/main.yml index e1c67ea..ddba54c 100644 --- a/ansible/roles/node-all/tasks/main.yml +++ b/ansible/roles/node-all/tasks/main.yml @@ -1,4 +1,4 @@ --- - name: install confd files include_role: - name: confd-files-1.0.2 \ No newline at end of file + name: confd-files \ No newline at end of file diff --git a/ansible/roles/node-proxy/files/etc/confd/templates/haproxy.sh/01.haproxy.cfg.tmpl b/ansible/roles/node-proxy/files/etc/confd/templates/haproxy.sh/01.haproxy.cfg.tmpl index 79d91e6..5805761 100644 --- a/ansible/roles/node-proxy/files/etc/confd/templates/haproxy.sh/01.haproxy.cfg.tmpl +++ b/ansible/roles/node-proxy/files/etc/confd/templates/haproxy.sh/01.haproxy.cfg.tmpl @@ -4,10 +4,10 @@ global log 127.0.0.1 local0 info maxconn 65535 chroot /usr/local/sbin - #uid 65534 - #gid 65534 - user nobody - group nobody + uid 65534 + gid 65534 + #user nobody + #group nobody daemon quiet nbproc 20 diff --git a/ansible/roles/node-proxy/tasks/main.yml b/ansible/roles/node-proxy/tasks/main.yml index cf955eb..320d09f 100644 --- a/ansible/roles/node-proxy/tasks/main.yml +++ b/ansible/roles/node-proxy/tasks/main.yml @@ -10,4 +10,4 @@ - name: install confd files include_role: - name: confd-files-1.0.2 \ No newline at end of file + name: confd-files \ No newline at end of file diff --git a/ansible/roles/node-rabbitmq/tasks/main.yml b/ansible/roles/node-rabbitmq/tasks/main.yml index cf955eb..320d09f 100644 --- a/ansible/roles/node-rabbitmq/tasks/main.yml +++ b/ansible/roles/node-rabbitmq/tasks/main.yml @@ -10,4 +10,4 @@ - name: install confd files include_role: - name: confd-files-1.0.2 \ No newline at end of file + name: confd-files \ No newline at end of file diff --git a/ansible/roles/rabbitmq-server/tasks/main.yml b/ansible/roles/rabbitmq-server/tasks/main.yml index a0d5411..c9749ef 100644 --- a/ansible/roles/rabbitmq-server/tasks/main.yml +++ b/ansible/roles/rabbitmq-server/tasks/main.yml @@ -10,7 +10,7 @@ - name: install rabbitmq deb include_role: - name: install-1.0.5 + name: install vars: opts: pkg_name: "{{ item.name }}" @@ -86,7 +86,7 @@ - name: download plugins for rabbitmq include_role: - name: install-1.0.5 + name: install vars: opts: pkg_name: "rabbitmq-delayed_message_exchange" From 4fba4eb803f70fb621111f575e603dfc594a9c23 Mon Sep 17 00:00:00 2001 From: mini-idea <2596691139@qq.com> Date: Thu, 8 Jul 2021 17:37:15 +0800 Subject: [PATCH 03/86] Add disk for node Haproxy --- .../confd/templates/nodectl.sh/01.nodectl.env.tmpl | 2 +- app/cluster.json.mustache | 12 ++++++++---- app/config.json | 10 ++++++++++ 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/ansible/roles/node-all/files/etc/confd/templates/nodectl.sh/01.nodectl.env.tmpl b/ansible/roles/node-all/files/etc/confd/templates/nodectl.sh/01.nodectl.env.tmpl index a7d523b..1ea09d0 100644 --- a/ansible/roles/node-all/files/etc/confd/templates/nodectl.sh/01.nodectl.env.tmpl +++ b/ansible/roles/node-all/files/etc/confd/templates/nodectl.sh/01.nodectl.env.tmpl @@ -11,7 +11,7 @@ SERVICES="\$SERVICES \$(echo " haproxy/true/tcp:5672,http:15672,tcp:61613,tcp:1883,http:{{ $HPPORT }} keepalived/true/ " | xargs)" -DATA_MOUNTS="" +DATA_MOUNTS="/log" MY_HYPER_TYPE={{ getv "/host/hypervisor" }} NODE_CTL="proxy-node" {{- else if getvs "/host/role" | filter "client" }} diff --git a/app/cluster.json.mustache b/app/cluster.json.mustache index 3ae328c..f938436 100644 --- a/app/cluster.json.mustache +++ b/app/cluster.json.mustache @@ -12,7 +12,7 @@ "prefer_type": "lxc", "sriov_nic": true, "zone": "sh1", - "image": "img-z1pyzrxh" + "image": "img-zpfb1hxm" }, "instance_class": {{cluster.disc.instance_class}}, "count": {{cluster.disc.count}}, @@ -97,7 +97,7 @@ "prefer_type": "lxc", "sriov_nic": true, "zone": "sh1", - "image": "img-z1pyzrxh" + "image": "img-zpfb1hxm" }, "instance_class": {{cluster.ram.instance_class}}, "count": {{cluster.ram.count}}, @@ -178,7 +178,7 @@ "container": { "type": "kvm", "zone": "sh1", - "image": "img-z1pyzrxh" + "image": "img-zpfb1hxm" }, "instance_class": {{cluster.client.instance_class}}, "count": {{cluster.client.count}}, @@ -201,7 +201,7 @@ "prefer_type":"lxc", "sriov_nic": true, "zone": "sh1", - "image": "img-z1pyzrxh" + "image": "img-zpfb1hxm" }, "instance_class": {{cluster.haproxy.instance_class}}, "count": {{cluster.haproxy.count}}, @@ -231,6 +231,10 @@ "unhealthy_threshold": 2, "check_cmd": "appctl check", "action_cmd": "appctl revive" + }, "volume": { + "size": {{cluster.haproxy.volume_size}}, + "mount_point": "/log", + "filesystem": "ext4" } }], "env": { diff --git a/app/config.json b/app/config.json index 0ceb6d2..6604709 100644 --- a/app/config.json +++ b/app/config.json @@ -206,6 +206,16 @@ "default": 101, "range": [101, 202], "required": "yes" + }, { + "key": "volume_size", + "label": "Volume Size", + "description": "The volume size for each instance", + "type": "integer", + "auto_scale_step": 10, + "min": 10, + "max": 1000, + "default": 10, + "required": "yes" }, { "key": "count", "label": "Count", From 5ad4fa174e34cc8a06486cc1446dfed28cbf45df Mon Sep 17 00:00:00 2001 From: mini-idea <2596691139@qq.com> Date: Fri, 9 Jul 2021 16:57:03 +0800 Subject: [PATCH 04/86] Change file permission Automatically --- ansible/roles/appctl/tasks/main.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ansible/roles/appctl/tasks/main.yml b/ansible/roles/appctl/tasks/main.yml index d677021..c3d607a 100644 --- a/ansible/roles/appctl/tasks/main.yml +++ b/ansible/roles/appctl/tasks/main.yml @@ -26,6 +26,11 @@ mode: preserve directory_mode: u=rwx,g=rx,o= +- name: Change file permissions + file: + path: /opt/app/bin/ctl.sh + mode: '0644' + - name: create symbolic link file: src: /opt/app/bin/ctl.sh From 9cbc7212d5e7b2d4e1af1e88aee1ce0318191873 Mon Sep 17 00:00:00 2001 From: mini-idea <2596691139@qq.com> Date: Mon, 12 Jul 2021 10:09:47 +0800 Subject: [PATCH 05/86] Revert "Change file permission Automatically" This reverts commit 5ad4fa174e34cc8a06486cc1446dfed28cbf45df. --- ansible/roles/appctl/tasks/main.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/ansible/roles/appctl/tasks/main.yml b/ansible/roles/appctl/tasks/main.yml index c3d607a..d677021 100644 --- a/ansible/roles/appctl/tasks/main.yml +++ b/ansible/roles/appctl/tasks/main.yml @@ -26,11 +26,6 @@ mode: preserve directory_mode: u=rwx,g=rx,o= -- name: Change file permissions - file: - path: /opt/app/bin/ctl.sh - mode: '0644' - - name: create symbolic link file: src: /opt/app/bin/ctl.sh From ac7aeec0d8958b0cf592c24f8e9dae56a90453c2 Mon Sep 17 00:00:00 2001 From: mini-idea <2596691139@qq.com> Date: Mon, 12 Jul 2021 10:13:07 +0800 Subject: [PATCH 06/86] Change file permission Automatically --- ansible/roles/appctl/tasks/main.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ansible/roles/appctl/tasks/main.yml b/ansible/roles/appctl/tasks/main.yml index d677021..8851e37 100644 --- a/ansible/roles/appctl/tasks/main.yml +++ b/ansible/roles/appctl/tasks/main.yml @@ -26,6 +26,11 @@ mode: preserve directory_mode: u=rwx,g=rx,o= +- name: Change file permissions + file: + path: /opt/app/bin/ctl.sh + mode: '0755' + - name: create symbolic link file: src: /opt/app/bin/ctl.sh From 9825d4da0692e4226727a38e8ee57428e7ca97c2 Mon Sep 17 00:00:00 2001 From: mini-idea <2596691139@qq.com> Date: Tue, 13 Jul 2021 15:42:54 +0800 Subject: [PATCH 07/86] add disk for node-haproxy --- ansible/roles/appctl/tasks/main.yml | 5 +++++ .../confd/templates/nodectl.sh/01.nodectl.env.tmpl | 2 +- ansible/roles/node-proxy/tasks/main.yml | 9 +++++++++ app/cluster.json.mustache | 13 +++++++++---- app/config.json | 10 ++++++++++ 5 files changed, 34 insertions(+), 5 deletions(-) diff --git a/ansible/roles/appctl/tasks/main.yml b/ansible/roles/appctl/tasks/main.yml index d677021..d1e96f1 100644 --- a/ansible/roles/appctl/tasks/main.yml +++ b/ansible/roles/appctl/tasks/main.yml @@ -26,6 +26,11 @@ mode: preserve directory_mode: u=rwx,g=rx,o= +- name: Change permissions + file: + path: /opt/app/bin/ctl.sh + mode: '0755' + - name: create symbolic link file: src: /opt/app/bin/ctl.sh diff --git a/ansible/roles/node-all/files/etc/confd/templates/nodectl.sh/01.nodectl.env.tmpl b/ansible/roles/node-all/files/etc/confd/templates/nodectl.sh/01.nodectl.env.tmpl index a7d523b..1ea09d0 100644 --- a/ansible/roles/node-all/files/etc/confd/templates/nodectl.sh/01.nodectl.env.tmpl +++ b/ansible/roles/node-all/files/etc/confd/templates/nodectl.sh/01.nodectl.env.tmpl @@ -11,7 +11,7 @@ SERVICES="\$SERVICES \$(echo " haproxy/true/tcp:5672,http:15672,tcp:61613,tcp:1883,http:{{ $HPPORT }} keepalived/true/ " | xargs)" -DATA_MOUNTS="" +DATA_MOUNTS="/log" MY_HYPER_TYPE={{ getv "/host/hypervisor" }} NODE_CTL="proxy-node" {{- else if getvs "/host/role" | filter "client" }} diff --git a/ansible/roles/node-proxy/tasks/main.yml b/ansible/roles/node-proxy/tasks/main.yml index 320d09f..154d6c3 100644 --- a/ansible/roles/node-proxy/tasks/main.yml +++ b/ansible/roles/node-proxy/tasks/main.yml @@ -8,6 +8,15 @@ mode: preserve directory_mode: u=rwx,g=rx,o= + +- name: Touch a file + file: + path: /log + state: directory + owner: root + group: svc + mode: 0644 + - name: install confd files include_role: name: confd-files \ No newline at end of file diff --git a/app/cluster.json.mustache b/app/cluster.json.mustache index 3ae328c..866d4e4 100644 --- a/app/cluster.json.mustache +++ b/app/cluster.json.mustache @@ -12,7 +12,7 @@ "prefer_type": "lxc", "sriov_nic": true, "zone": "sh1", - "image": "img-z1pyzrxh" + "image": "img-ve2up59b" }, "instance_class": {{cluster.disc.instance_class}}, "count": {{cluster.disc.count}}, @@ -97,7 +97,7 @@ "prefer_type": "lxc", "sriov_nic": true, "zone": "sh1", - "image": "img-z1pyzrxh" + "image": "img-ve2up59b" }, "instance_class": {{cluster.ram.instance_class}}, "count": {{cluster.ram.count}}, @@ -178,7 +178,7 @@ "container": { "type": "kvm", "zone": "sh1", - "image": "img-z1pyzrxh" + "image": "img-ve2up59b" }, "instance_class": {{cluster.client.instance_class}}, "count": {{cluster.client.count}}, @@ -201,12 +201,17 @@ "prefer_type":"lxc", "sriov_nic": true, "zone": "sh1", - "image": "img-z1pyzrxh" + "image": "img-ve2up59b" }, "instance_class": {{cluster.haproxy.instance_class}}, "count": {{cluster.haproxy.count}}, "cpu": {{cluster.haproxy.cpu}}, "memory": {{cluster.haproxy.memory}}, + "volume": { + "size": {{cluster.haproxy.volume_size}}, + "mount_point": "/data", + "filesystem": "ext4" + }, "services": { "start": { "order": 3, diff --git a/app/config.json b/app/config.json index 0ceb6d2..9e05e2a 100644 --- a/app/config.json +++ b/app/config.json @@ -207,6 +207,16 @@ "range": [101, 202], "required": "yes" }, { + "key": "volume_size", + "label": "Volume Size", + "description": "The volume size for each instance", + "type": "integer", + "auto_scale_step": 10, + "min": 10, + "max": 1000, + "default": 10, + "required": "yes" + },{ "key": "count", "label": "Count", "description": "Haproxy HA Node Count", From 2d4f182e7b8b49aed42a2f10c3a08fe324b51631 Mon Sep 17 00:00:00 2001 From: mini-idea <2596691139@qq.com> Date: Wed, 14 Jul 2021 16:10:04 +0800 Subject: [PATCH 08/86] enable caddy.service --- .../files/lib/systemd/system/caddy.service | 8 +++---- .../files/opt/app/bin/envs/svc-caddy.env | 2 +- ansible/roles/node-proxy/tasks/main.yml | 10 ++++++++- .../confd/templates/caddy.sh/00.svc.env.tmpl | 4 ++-- .../templates/caddy.sh/01.caddyfile.tmpl | 20 +++++++++++++----- .../templates/caddy.sh/02.index.html.tmpl | 12 ++++++++++- app/app.zip | Bin 0 -> 9065 bytes app/cluster.json.mustache | 8 +++---- 8 files changed, 46 insertions(+), 18 deletions(-) create mode 100644 app/app.zip diff --git a/ansible/roles/caddy/files/lib/systemd/system/caddy.service b/ansible/roles/caddy/files/lib/systemd/system/caddy.service index 956a7a2..405a7e4 100644 --- a/ansible/roles/caddy/files/lib/systemd/system/caddy.service +++ b/ansible/roles/caddy/files/lib/systemd/system/caddy.service @@ -8,8 +8,8 @@ ConditionFileNotEmpty=/opt/app/conf/caddy/caddyfile [Service] Restart=on-abnormal -User=caddy -Group=caddy +User=root +Group=root ; Always set "-root" to something safe in case it gets forgotten in the Caddyfile. ExecStart=/opt/caddy/current/caddy -agree=true -conf=/opt/app/conf/caddy/caddyfile @@ -19,7 +19,7 @@ KillMode=mixed KillSignal=SIGQUIT TimeoutStopSec=5s -LimitNOFILE=1024 +LimitNOFILE=8192 LimitNPROC=512 PrivateTmp=true @@ -27,7 +27,7 @@ PrivateDevices=false ProtectHome=true ProtectSystem=full -CapabilityBoundingSet=CAP_NET_BIND_SERVICE +; CapabilityBoundingSet=CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_BIND_SERVICE NoNewPrivileges=true diff --git a/ansible/roles/caddy/files/opt/app/bin/envs/svc-caddy.env b/ansible/roles/caddy/files/opt/app/bin/envs/svc-caddy.env index c98b9d4..2d6491f 100644 --- a/ansible/roles/caddy/files/opt/app/bin/envs/svc-caddy.env +++ b/ansible/roles/caddy/files/opt/app/bin/envs/svc-caddy.env @@ -1 +1 @@ -SERVICES="$SERVICES caddy/false/http:80" \ No newline at end of file +SERVICES="$SERVICES caddy/true/http:80" \ No newline at end of file diff --git a/ansible/roles/node-proxy/tasks/main.yml b/ansible/roles/node-proxy/tasks/main.yml index 154d6c3..9a69134 100644 --- a/ansible/roles/node-proxy/tasks/main.yml +++ b/ansible/roles/node-proxy/tasks/main.yml @@ -9,7 +9,7 @@ directory_mode: u=rwx,g=rx,o= -- name: Touch a file +- name: Touch a Dic file: path: /log state: directory @@ -17,6 +17,14 @@ group: svc mode: 0644 +- name: Touch a Dic + file: + path: /log/html + state: directory + owner: root + group: svc + mode: 0644 + - name: install confd files include_role: name: confd-files \ No newline at end of file diff --git a/ansible/roles/node-rabbitmq/files/etc/confd/templates/caddy.sh/00.svc.env.tmpl b/ansible/roles/node-rabbitmq/files/etc/confd/templates/caddy.sh/00.svc.env.tmpl index 36ac4df..a1ae904 100644 --- a/ansible/roles/node-rabbitmq/files/etc/confd/templates/caddy.sh/00.svc.env.tmpl +++ b/ansible/roles/node-rabbitmq/files/etc/confd/templates/caddy.sh/00.svc.env.tmpl @@ -1,6 +1,6 @@ flush /opt/app/bin/envs/svc-caddy.env << CADDY_ENV_EOF -{{- if getvs "/host/role" | filter "(disc|ram)" }} -SERVICES="\$SERVICES caddy/{{ getv "/env/web_console_enabled" "false" }}/http:80" +{{- if getvs "/host/role" | filter "(disc|ram|haproxy)" }} +SERVICES="\$SERVICES caddy/true/http:80" {{- end }} CADDY_ENV_EOF diff --git a/ansible/roles/node-rabbitmq/files/etc/confd/templates/caddy.sh/01.caddyfile.tmpl b/ansible/roles/node-rabbitmq/files/etc/confd/templates/caddy.sh/01.caddyfile.tmpl index fc1efd0..8d0ad14 100644 --- a/ansible/roles/node-rabbitmq/files/etc/confd/templates/caddy.sh/01.caddyfile.tmpl +++ b/ansible/roles/node-rabbitmq/files/etc/confd/templates/caddy.sh/01.caddyfile.tmpl @@ -1,13 +1,23 @@ +{{- if getvs "/host/role" | filter "(disc|ram)" }} ln -s -f /opt/app/conf/caddy/index.html /data/index.html - -flush /opt/app/conf/caddy/Caddyfile << CADDYFILE_EOF +flush /opt/app/conf/caddy/caddyfile << CADDYFILE_EOF {{ getv "/host/ip" }}:80 { - {{- with getv "/env/web_console_password" "" }} - basicauth / "{{ getv "/env/web_console_username" "admin" }}" "{{ . }}" - {{- end }} root /data gzip browse /log tls off } CADDYFILE_EOF +{{- end }} + +{{- if getvs "/host/role" | filter "haproxy" }} +ln -s -f /opt/app/conf/caddy/index.html /log/html/logviewer.html +flush /opt/app/conf/caddy/caddyfile << CADDYFILE_EOF +{{ getv "/host/ip" }}:80 { + root /log + gzip + browse + tls off +} +CADDYFILE_EOF +{{- end }} \ No newline at end of file diff --git a/ansible/roles/node-rabbitmq/files/etc/confd/templates/caddy.sh/02.index.html.tmpl b/ansible/roles/node-rabbitmq/files/etc/confd/templates/caddy.sh/02.index.html.tmpl index cd76688..8855ca7 100644 --- a/ansible/roles/node-rabbitmq/files/etc/confd/templates/caddy.sh/02.index.html.tmpl +++ b/ansible/roles/node-rabbitmq/files/etc/confd/templates/caddy.sh/02.index.html.tmpl @@ -68,8 +68,9 @@ flush /opt/app/conf/caddy/index.html << HTML_EOF
{{- $discNodes := getvs "/hosts/disc/*/ip" }} {{- $ramNodes := getvs "/hosts/ram/*/ip" }} + {{- $proxyNodes := getvs "/hosts/haproxy/*/ip" }}
- {{ len $discNodes }} 个 disc 节点, {{ len $ramNodes }} 个 ram 节点 + {{ len $discNodes }} 个 disc 节点, {{ len $ramNodes }} 个 ram 节点, {{ len $proxyNodes }} 个 haproxy 节点
  • disc节点/目录
  • @@ -90,6 +91,15 @@ flush /opt/app/conf/caddy/index.html << HTML_EOF
  • {{ . }}
  • {{- end }} {{- end }} +
  • haproxy节点/目录
  • + {{- range $proxyNodes }} + {{- if eq . (getv "/host/ip") }} +
  • {{ . }}
  • +
  • log
  • + {{- else }} +
  • {{ . }}
  • + {{- end }} + {{- end }}