add members-mysql (#46)
This commit is contained in:
		
							parent
							
								
									3c1b2894a0
								
							
						
					
					
						commit
						804fc4c5e5
					
				
					 2 changed files with 128 additions and 0 deletions
				
			
		
							
								
								
									
										50
									
								
								jobs/services/members-mysql-backup.hcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								jobs/services/members-mysql-backup.hcl
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,50 @@
 | 
				
			||||||
 | 
					job "members-mysql-backup" {
 | 
				
			||||||
 | 
					  datacenters = ["aperture"]
 | 
				
			||||||
 | 
					  type        = "batch"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  periodic {
 | 
				
			||||||
 | 
					    crons            = ["0 */3 * * * *"]
 | 
				
			||||||
 | 
					    prohibit_overlap = true
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  group "db-backup" {
 | 
				
			||||||
 | 
					    task "mysql-backup" {
 | 
				
			||||||
 | 
					      driver = "raw_exec"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      config {
 | 
				
			||||||
 | 
					        command = "/bin/bash"
 | 
				
			||||||
 | 
					        args    = ["local/script.sh"]
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      template {
 | 
				
			||||||
 | 
					        data = <<EOH
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					file=/storage/backups/nomad/mysql/members/members-mysql-$(date +%Y-%m-%d_%H-%M-%S).sql
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mkdir -p /storage/backups/nomad/mysql/members
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					alloc_id=$(nomad job status members-mysql | grep running | tail -n 1 | cut -d " " -f 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					job_name=$(echo ${NOMAD_JOB_NAME} | cut -d "/" -f 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					nomad alloc exec $alloc_id mariadb-dump -u root -p'{{ key "members-mysql/root/password"}}' --all-databases > "${file}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					find /storage/backups/nomad/mysql/members/members-mysql* -ctime +3 -exec rm {} \; || true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -s "$file" ]; then # check if file exists and is not empty
 | 
				
			||||||
 | 
					  echo "Backup successful"
 | 
				
			||||||
 | 
					  exit 0
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  rm $file
 | 
				
			||||||
 | 
					  curl -H "Content-Type: application/json" -d \
 | 
				
			||||||
 | 
					  '{"content": "<@&585512338728419341> `MySQL` backup for **'"${job_name}"'** has just **FAILED**\nFile name: `'"$file"'`\nDate: `'"$(TZ=Europe/Dublin date)"'`\nTurn off this script with `nomad job stop '"${job_name}"'` \n\n## Remember to restart this backup job when fixed!!!"}' \
 | 
				
			||||||
 | 
					  {{ key "mysql/webhook/discord" }}
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					EOH
 | 
				
			||||||
 | 
					        destination = "local/script.sh"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										78
									
								
								jobs/services/members-mysql.hcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								jobs/services/members-mysql.hcl
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,78 @@
 | 
				
			||||||
 | 
					job "members-mysql" {
 | 
				
			||||||
 | 
					  datacenters = ["aperture"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  constraint {
 | 
				
			||||||
 | 
					    attribute = "${attr.unique.hostname}"
 | 
				
			||||||
 | 
					    value     = "wheatley"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  group "db" {
 | 
				
			||||||
 | 
					    network {
 | 
				
			||||||
 | 
					      port "db" {
 | 
				
			||||||
 | 
					        static = 3306
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    task "mariadb" {
 | 
				
			||||||
 | 
					      driver = "docker"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      template {
 | 
				
			||||||
 | 
					        data = <<EOH
 | 
				
			||||||
 | 
					MYSQL_ROOT_PASSWORD="{{ key "members-mysql/root/password" }}"
 | 
				
			||||||
 | 
					MYSQL_USER="{{ key "members-mysql/user/username" }}"
 | 
				
			||||||
 | 
					MYSQL_PASSWORD="{{ key "members-mysql/user/password" }}"
 | 
				
			||||||
 | 
					EOH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        destination = "local/file.env"
 | 
				
			||||||
 | 
					        env         = true
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      config {
 | 
				
			||||||
 | 
					        image = "mariadb:latest"
 | 
				
			||||||
 | 
					        ports = ["db"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        volumes = [
 | 
				
			||||||
 | 
					          "/opt/members-mysql:/var/lib/mysql",
 | 
				
			||||||
 | 
					          "local/server.cnf:/etc/mysql/mariadb.conf.d/50-server.cnf",
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      template {
 | 
				
			||||||
 | 
					        data = <<EOH
 | 
				
			||||||
 | 
					[server]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[mariadbd]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pid-file                = /run/mysqld/mysqld.pid
 | 
				
			||||||
 | 
					basedir                 = /usr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bind-address            = 0.0.0.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					expire_logs_days        = 10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					character-set-server     = utf8mb4
 | 
				
			||||||
 | 
					character-set-collations = utf8mb4=uca1400_ai_ci
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[mariadbd]
 | 
				
			||||||
 | 
					        EOH
 | 
				
			||||||
 | 
					        destination = "local/server.cnf"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      resources {
 | 
				
			||||||
 | 
					        cpu    = 400
 | 
				
			||||||
 | 
					        memory = 800
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      service {
 | 
				
			||||||
 | 
					        name = "members-mysql"
 | 
				
			||||||
 | 
					        port = "db"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        check {
 | 
				
			||||||
 | 
					          type     = "tcp"
 | 
				
			||||||
 | 
					          interval = "2s"
 | 
				
			||||||
 | 
					          timeout  = "2s"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in a new issue