├── .gitignore ├── LICENSE.md ├── README.md ├── article-assets ├── 5373 │ ├── README.md │ ├── example.fcc │ └── example.ign ├── 5737 │ ├── README.md │ └── cdomain ├── 5743 │ ├── README.md │ ├── baby.png │ ├── john.png │ ├── mary.png │ └── students.php ├── 6935 │ ├── 001_cr_minimal.yaml │ ├── 002_cr_load_balancer.yaml │ ├── 003_vultr_s3_secrets.yaml │ ├── 004_offsite_s3_secrets.yaml │ ├── 005_cr_with_backup_s3.yaml │ ├── 006_manual_backup.yaml │ ├── 007_cr_disable_pitr.yaml │ ├── 008_restore.yaml │ ├── 009_restore_2nd.yaml │ ├── 010_cr_enable_pitr.yaml │ └── README.md └── 7720 │ ├── Deb │ └── install-vultr-repo.sh │ ├── Nouveau │ └── disable-nouveau.sh │ ├── RHEL │ └── install-vultr-repo.sh │ └── gridd-config │ └── install-license.sh └── faq ├── README.md └── as20473-bgp-customer-guide └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | ### macOS ### 2 | # General 3 | .DS_Store 4 | .AppleDouble 5 | .LSOverride 6 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # License Information 2 | 3 | Unless otherwise specified, files in this repository are licensed under the MIT License. All artwork, logos, and trademarks are the property of their respective owners. 4 | 5 | ## MIT License 6 | 7 | Copyright (c) 2021-2023 Vultr 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vultr Docs 2 | 3 | Support files for [Vultr Docs](https://www.vultr.com/docs/). 4 | -------------------------------------------------------------------------------- /article-assets/5373/README.md: -------------------------------------------------------------------------------- 1 | # Supporting Files 2 | 3 | Support files for the article [How to Create an Ignition Configuration File](https://www.vultr.com/docs/ignition). 4 | -------------------------------------------------------------------------------- /article-assets/5373/example.fcc: -------------------------------------------------------------------------------- 1 | variant: fcos 2 | version: 1.0.0 3 | passwd: 4 | users: 5 | - name: core 6 | password_hash: "$5$B.MMovaOz1$a7Wu12LmZOBcpJj1qKQAv9RvlfVuw4LWDsaWyxDgA5A" 7 | ssh_authorized_keys: 8 | - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC/XVnymTvwKBEFZzApuoxqCLZmQGWywBTz4Dh6tbVvsbhQee3fQKIaz60/juggysUddD6K95wHXyrRdWClAnzwVAAt1KM3AmnKint3B5AbHDjqN5mre3/qjaFnfyMd3/DcRQmLPYg1Deye4gKQTjxkEUjMOys1/Gn4A2aEKHCMQkQeXQyWaSJ4eYIvIhXWIU/acvGvNsAtSSIbSedYSOJt9K3JyjPQexsMtUf8Yo85oqjkD5TO1RbxhGN0XT7PbY2h5avyrfrsVmzVqG34gjK1Lp1GG0QnlreEv/MkOYR3JNAkSLkPCQsnzO+NSB4D1ynVaujLh3glvwhY+nK3UTT1dM9ZmzR1PZPS/wnXrO0FhE8UJDiZLE97+mbBmOQkcKOOwEecfv3yg5k38y9ppTaB7+lbQnYCKaQw4PTBTk+973ENQ/obrwPVNd9fZjjQqqxBH6TM3C6bZwFGTf4xF2eCD4BKSA9HUOywAcDV/T3ZExu++DJVUqCaD+/sUlW2TzE= core@example" 9 | groups: [ sudo, docker ] 10 | storage: 11 | files: 12 | - path: /etc/hostname 13 | mode: 0644 14 | overwrite: true 15 | contents: 16 | inline: example-hostname 17 | - path: /etc/NetworkManager/system-connections/ens7.nmconnection 18 | mode: 0600 19 | overwrite: true 20 | contents: 21 | inline: | 22 | [connection] 23 | type=ethernet 24 | interface-name=ens7 25 | 26 | [ipv4] 27 | method=manual 28 | addresses=10.10.10.10/20 29 | -------------------------------------------------------------------------------- /article-assets/5373/example.ign: -------------------------------------------------------------------------------- 1 | {"ignition":{"version":"3.0.0"},"passwd":{"users":[{"groups":["sudo","docker"],"name":"core","passwordHash":"$5$B.MMovaOz1$a7Wu12LmZOBcpJj1qKQAv9RvlfVuw4LWDsaWyxDgA5A","sshAuthorizedKeys":["ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC/XVnymTvwKBEFZzApuoxqCLZmQGWywBTz4Dh6tbVvsbhQee3fQKIaz60/juggysUddD6K95wHXyrRdWClAnzwVAAt1KM3AmnKint3B5AbHDjqN5mre3/qjaFnfyMd3/DcRQmLPYg1Deye4gKQTjxkEUjMOys1/Gn4A2aEKHCMQkQeXQyWaSJ4eYIvIhXWIU/acvGvNsAtSSIbSedYSOJt9K3JyjPQexsMtUf8Yo85oqjkD5TO1RbxhGN0XT7PbY2h5avyrfrsVmzVqG34gjK1Lp1GG0QnlreEv/MkOYR3JNAkSLkPCQsnzO+NSB4D1ynVaujLh3glvwhY+nK3UTT1dM9ZmzR1PZPS/wnXrO0FhE8UJDiZLE97+mbBmOQkcKOOwEecfv3yg5k38y9ppTaB7+lbQnYCKaQw4PTBTk+973ENQ/obrwPVNd9fZjjQqqxBH6TM3C6bZwFGTf4xF2eCD4BKSA9HUOywAcDV/T3ZExu++DJVUqCaD+/sUlW2TzE= core@example"]}]},"storage":{"files":[{"overwrite":true,"path":"/etc/hostname","contents":{"source":"data:,example-hostname"},"mode":420},{"overwrite":true,"path":"/etc/NetworkManager/system-connections/ens7.nmconnection","contents":{"source":"data:,%5Bconnection%5D%0Atype%3Dethernet%0Ainterface-name%3Dens7%0A%0A%5Bipv4%5D%0Amethod%3Dmanual%0Aaddresses%3D10.10.10.10%2F20%0A"},"mode":384}]}} 2 | -------------------------------------------------------------------------------- /article-assets/5737/README.md: -------------------------------------------------------------------------------- 1 | # Supporting Files 2 | 3 | Support files [Scripted LEMP Installation with Vultr API](https://www.vultr.com/docs/scripted-lemp-installation-with-vultr-api). 4 | -------------------------------------------------------------------------------- /article-assets/5737/cdomain: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Verify bash version requirement met 3 | case "${BASH_VERSION}" in ''|[123].*) printf 'Bash 4.0+ required.\n' >&2; exit 1; ;; esac 4 | 5 | # Verify user has root access 6 | ((EUID == 0)) || { printf 'Run as root.\n' >&2; exit 1; } 7 | 8 | # Function to generate nginx configuration for https 9 | # It will redirect all http requests to https and set security headers 10 | config_https(){ 11 | cat > "/etc/nginx/sites-available/${domain}" <<-EOF 12 | server { 13 | listen 80; 14 | listen [::]:80; 15 | ${wwwdom} 16 | server_name ${domain}; 17 | root /var/www/${domain}; 18 | location / { 19 | return 301 https://${domain}\$request_uri; 20 | } 21 | } 22 | server { 23 | listen 443 ssl http2; 24 | listen [::]:443 ssl http2; 25 | ssl_certificate /etc/letsencrypt/live/${domain}/fullchain.pem; 26 | ssl_certificate_key /etc/letsencrypt/live/${domain}/privkey.pem; 27 | ssl_trusted_certificate /etc/letsencrypt/live/${domain}/fullchain.pem; 28 | root /var/www/${domain}; 29 | index index.php index.html index.htm index.nginx-debian.html; 30 | add_header X-XSS-Protection "1; mode=block"; 31 | add_header Content-Security-Policy "default-src 'self'; script-src 'self';"; 32 | add_header Referrer-Policy "no-referrer"; 33 | add_header X-Frame-Options "SAMEORIGIN" always; 34 | location ~ \.php$ { 35 | include snippets/fastcgi-php.conf; 36 | fastcgi_pass unix:/run/php/php7.4-fpm.sock; 37 | } 38 | ${wwwdom} 39 | server_name ${domain}; 40 | access_log /var/log/${domain}.log; 41 | error_log /var/log/${domain}.error.log; 42 | } 43 | EOF 44 | } 45 | 46 | # Function to generate the default nginx file for certbot 47 | config_default(){ 48 | cat > "/etc/nginx/sites-available/${domain}" <<-EOF 49 | server { 50 | listen 80; 51 | listen [::]:80; 52 | ${wwwdom} 53 | server_name ${domain}; 54 | root /var/www/${domain}; 55 | location / { 56 | index index.html; 57 | } 58 | } 59 | EOF 60 | } 61 | 62 | # Help function 63 | helpuser(){ 64 | cat <<-EOF 65 | Usage: ./${0##*/} [options] 66 | -d The domain you want to add/configure (required) 67 | -a Your vultr.com API key (required) 68 | -ip The server's IP address (optional) 69 | -s Skip adding the domain to vultr.com and just obtain certificates (optional) 70 | -sub Specify the domain is a subdomain. (required if true) 71 | -f Force add domain even if its IP does not match servers (optional) 72 | EOF 73 | exit 1 74 | } 75 | 76 | # Set defaults 77 | declare -ar DEPENDS=(certbot jq curl openssl nginx dig tee) 78 | declare -r isip='^[0-9.]+$' 79 | declare useapi=true 80 | declare issub=false 81 | declare verifydomain=true 82 | declare domain 83 | declare domainip 84 | declare wwwdom 85 | declare certdom 86 | declare apikey 87 | declare ipaddr 88 | 89 | # Verify the dependencies are met 90 | hash -- "${DEPENDS[@]}" || { 91 | printf '\nThere are unmet dependencies.\n' >&2 92 | exit 1 93 | } 94 | 95 | # Get server's IP address and strip quotes 96 | ipaddr=$(dig @1.1.1.1 whoami.cloudflare TXT CH +short +tries=1 +timeout=3) 97 | ipaddr=${ipaddr//\"/} 98 | 99 | # Get options. Alternatively you can use getopts for more advanced functionality, but it is not required 100 | while(($# > 0)); do 101 | case ${1} in 102 | -d) shift; domain=${1?-d needs a domain} ;; 103 | -a) shift; apikey=${1?-a needs an API key} ;; 104 | -ip) shift; ipaddr=${1?-ip needs an IP address} ;; 105 | -s) useapi=false ;; 106 | -sub) issub=true ;; 107 | -f) verifydomain=false ;; 108 | *) helpuser; ;; 109 | esac 110 | shift 111 | done 112 | 113 | # Remove www. from the beginning of the domain in case the user set it 114 | domain=${domain#www.} 115 | 116 | # Verify the required variables are set 117 | [[ -z ${domain} ]] && { 118 | printf 'No domain specified.\n' >&2 119 | exit 1 120 | } 121 | 122 | ! ${issub} && [[ -z ${apikey} ]] && { 123 | printf 'No API Key specified.\n' >&2 124 | exit 1 125 | } 126 | 127 | # Use a regex test to verify the ipaddr variable is a valid IP address 128 | [[ ${ipaddr} =~ ${isip} ]] || { 129 | printf 'No IP address found.\n' >&2 130 | exit 1 131 | } 132 | 133 | # Optionally add the domain to vultr.com via the v2 API 134 | if ${useapi} && ! ${issub}; then 135 | curl -s -L -f -o/dev/null 'https://api.vultr.com/v2/domains' \ 136 | -H "Authorization: Bearer ${apikey}" \ 137 | -H 'Content-Type: application/json' \ 138 | --data-raw "{\"domain\": \"${domain}\", \"ip\": \"${ipaddr}\"}" || { 139 | printf 'Could not create domain %q at vultr. Check the API key is correct and the servers IP is whitelisted before continuing.\n' "${domain}" >&2 140 | exit 1 141 | } 142 | 143 | printf '\n%q added successfully\n' "${domain}" 144 | fi 145 | 146 | # Verify the domain IP and server IP are equal. Certbot will fail if they are not. 147 | if ${verifydomain}; then 148 | printf 'Verifying domain IP matches server IP. Can take up to 90 seconds.\n' 149 | 150 | for((i=0; i<30; i++)); do 151 | domainip=$(dig @1.1.1.1 "${domain}" +short +tries=1 +timeout=3) 152 | [[ ${ipaddr} == "${domainip}" ]] && break 153 | sleep 1 154 | done 155 | 156 | [[ ${ipaddr} == "${domainip}" ]] || { 157 | printf 'Domain IP does not match server IP. If you believe this message to be in error, rerun with -f.\n' >&2 158 | exit 1 159 | } 160 | printf '\nDomain and server IP match. Continuing.\n' 161 | fi 162 | 163 | # Make the default web directory and test it is writable, and is actually a directory 164 | mkdir -p "/var/www/${domain}" 165 | [[ -d "/var/www/${domain}" && -w "/var/www/${domain}" ]] || { 166 | printf 'Cannot write into %q.\n' "/var/www/${domain}" >&2 167 | exit 1 168 | } 169 | 170 | # If not a subdomain, add the www subdomain for the nginx configs and certbot 171 | ${issub} || wwwdom="server_name www.${domain};" 172 | ${issub} && certdom="${domain}" || certdom="${domain},www.${domain}" 173 | 174 | # Generate the default configuration file for certbot and nginx 175 | config_default || { 176 | printf 'There was a problem creating the default nginx config.\n' >&2 177 | exit 1 178 | } 179 | 180 | # Restart nginx 181 | systemctl restart nginx.service || { 182 | printf 'Could not restart nginx.\n' >&2 183 | exit 1 184 | } 185 | 186 | # Test that certbot can obtain a certificate correctly 187 | certbot certonly --dry-run --nginx -d "${certdom}" || { 188 | printf '\nThe certbot dryrun failed with status %q for %q. Wait a minute and try again while ensuring settings are correct.\n' "$?" "${domain}" >&2 189 | exit 1 190 | } 191 | 192 | # Delay as to not be rate-limited by letsencrypt 193 | sleep 5 194 | 195 | # Obtain the letsencrypt certificate 196 | certbot certonly --nginx -d "${certdom}" || { 197 | printf '\nThe certbot dryrun was successful, but failed when attempting to get a certificate. Wait a minute and try again while ensuring settings are correct.\n' >&2 198 | exit 1 199 | } 200 | 201 | # Configure nginx to work with the newly obtained letsencrypt certificate 202 | config_https || { 203 | printf 'There was a problem creating the https nginx config.\n' >&2 204 | exit 1 205 | } 206 | 207 | # Link the nginx config to the enabled sites directory 208 | ln -s "/etc/nginx/sites-available/${domain}" "/etc/nginx/sites-enabled/" || { 209 | printf 'Could not symbolically link %q to sites-enabled.\n' "${domain}" >&2 210 | exit 1 211 | } 212 | 213 | # Restart nginx 214 | systemctl restart nginx.service || { 215 | printf 'Could not restart nginx.\n' >&2 216 | exit 1 217 | } 218 | 219 | # End message 220 | cat <<-EOF 221 | Everything ran successfully 222 | Your nginx config file is at /etc/nginx/sites-available/${domain} 223 | Don't forget to set the correct directory permissions for /var/www/${domain} 224 | EOF 225 | exit 0 226 | -------------------------------------------------------------------------------- /article-assets/5743/README.md: -------------------------------------------------------------------------------- 1 | # Supporting Files 2 | 3 | Support files [Using MySQL BLOB Data with PHP on Ubuntu 20.04](https://www.vultr.com/docs/using-mysql-blob-data-with-php-on-ubuntu-20-04). 4 | 5 | Image files are generated from . 6 | -------------------------------------------------------------------------------- /article-assets/5743/baby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vultr/vultr-docs/8d5a0301f9718efe6f676b907dd1def2f0feb348/article-assets/5743/baby.png -------------------------------------------------------------------------------- /article-assets/5743/john.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vultr/vultr-docs/8d5a0301f9718efe6f676b907dd1def2f0feb348/article-assets/5743/john.png -------------------------------------------------------------------------------- /article-assets/5743/mary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vultr/vultr-docs/8d5a0301f9718efe6f676b907dd1def2f0feb348/article-assets/5743/mary.png -------------------------------------------------------------------------------- /article-assets/5743/students.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Using MySQL BLOB Data Type with PHP 5 | 6 | 7 | 8 | 9 |

Student's Database

10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 29 | 30 | $sql_students = 'select 31 | student_id, 32 | first_name, 33 | last_name, 34 | photo 35 | from register 36 | '; 37 | 38 | $stmt = $pdo->prepare($sql_students); 39 | 40 | $stmt->execute(); 41 | 42 | while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 43 | echo ''; 44 | echo ''; 45 | echo ''; 46 | echo ''; 47 | echo ''; 50 | echo ''; 51 | } 52 | } catch (PDOException $e) { 53 | echo 'The records can not be loaded. ' . $e->getMessage(); 54 | } 55 | ?> 56 | 57 |
Student IdFirst NameLast NameStudent Photo
' . $row['student_id'] . '' . $row['first_name'] . '' . $row['last_name'] . '' 48 | . '' 49 | . '
58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /article-assets/6935/001_cr_minimal.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: pxc.percona.com/v1-10-0 2 | kind: PerconaXtraDBCluster 3 | metadata: 4 | name: db-cluster 5 | spec: 6 | crVersion: 1.10.0 7 | secretsName: db-cluster-secrets 8 | allowUnsafeConfigurations: true 9 | upgradeOptions: 10 | apply: 8.0-recommended 11 | schedule: "0 4 * * *" 12 | pxc: 13 | size: 3 14 | image: percona/percona-xtradb-cluster:8.0.23-14.1 15 | autoRecovery: true 16 | volumeSpec: 17 | persistentVolumeClaim: 18 | storageClassName: vultr-block-storage 19 | accessModes: ["ReadWriteOnce"] 20 | resources: 21 | requests: 22 | storage: 15G 23 | haproxy: 24 | enabled: true 25 | size: 3 26 | image: percona/percona-xtradb-cluster-operator:1.10.0-haproxy 27 | #serviceType: LoadBalancer 28 | #replicasServiceType: LoadBalancer 29 | logcollector: 30 | enabled: true 31 | image: percona/percona-xtradb-cluster-operator:1.10.0-logcollector 32 | -------------------------------------------------------------------------------- /article-assets/6935/002_cr_load_balancer.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: pxc.percona.com/v1-10-0 2 | kind: PerconaXtraDBCluster 3 | metadata: 4 | name: db-cluster 5 | spec: 6 | crVersion: 1.10.0 7 | secretsName: db-cluster-secrets 8 | allowUnsafeConfigurations: true 9 | upgradeOptions: 10 | apply: 8.0-recommended 11 | schedule: "0 4 * * *" 12 | pxc: 13 | size: 3 14 | image: percona/percona-xtradb-cluster:8.0.23-14.1 15 | autoRecovery: true 16 | volumeSpec: 17 | persistentVolumeClaim: 18 | storageClassName: vultr-block-storage 19 | accessModes: ["ReadWriteOnce"] 20 | resources: 21 | requests: 22 | storage: 15G 23 | haproxy: 24 | enabled: true 25 | size: 3 26 | image: percona/percona-xtradb-cluster-operator:1.10.0-haproxy 27 | serviceType: LoadBalancer 28 | replicasServiceType: LoadBalancer 29 | logcollector: 30 | enabled: true 31 | image: percona/percona-xtradb-cluster-operator:1.10.0-logcollector 32 | -------------------------------------------------------------------------------- /article-assets/6935/003_vultr_s3_secrets.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: vultr-s3-secret 5 | type: Opaque 6 | stringData: 7 | AWS_ACCESS_KEY_ID: "IYTYM5MQTWCUQA1APU4Z" 8 | AWS_SECRET_ACCESS_KEY: "CcE42KxAJOXZsLxPqgHeDIwyy089sKkbj44JpZm0" 9 | -------------------------------------------------------------------------------- /article-assets/6935/004_offsite_s3_secrets.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: offsite-s3-secret 5 | type: Opaque 6 | stringData: 7 | AWS_ACCESS_KEY_ID: "4hrVSwKAYtfcjFu92r" 8 | AWS_SECRET_ACCESS_KEY: "sIgPx!z#%9V&l65TRV" 9 | -------------------------------------------------------------------------------- /article-assets/6935/005_cr_with_backup_s3.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: pxc.percona.com/v1-10-0 2 | kind: PerconaXtraDBCluster 3 | metadata: 4 | name: db-cluster 5 | spec: 6 | crVersion: 1.10.0 7 | secretsName: db-cluster-secrets 8 | allowUnsafeConfigurations: true 9 | upgradeOptions: 10 | apply: 8.0-recommended 11 | schedule: "0 4 * * *" 12 | pxc: 13 | size: 3 14 | image: percona/percona-xtradb-cluster:8.0.23-14.1 15 | autoRecovery: true 16 | volumeSpec: 17 | persistentVolumeClaim: 18 | storageClassName: vultr-block-storage 19 | accessModes: ["ReadWriteOnce"] 20 | resources: 21 | requests: 22 | storage: 15G 23 | haproxy: 24 | enabled: true 25 | size: 3 26 | image: percona/percona-xtradb-cluster-operator:1.10.0-haproxy 27 | serviceType: LoadBalancer 28 | replicasServiceType: LoadBalancer 29 | logcollector: 30 | enabled: true 31 | image: percona/percona-xtradb-cluster-operator:1.10.0-logcollector 32 | backup: 33 | image: perconalab/percona-xtradb-cluster-operator:main-pxc8.0-backup 34 | pitr: 35 | enabled: true 36 | storageName: s3-vultr 37 | timeBetweenUploads: 60 38 | storages: 39 | s3-vultr: 40 | type: s3 41 | s3: 42 | bucket: db-cluster-backup 43 | credentialsSecret: vultr-s3-secret 44 | endpointUrl: https:// 45 | s3-offsite: 46 | type: s3 47 | s3: 48 | bucket: db-cluster-offsite-backup 49 | credentialsSecret: offsite-s3-secret 50 | endpointUrl: https:// 51 | schedule: 52 | - name: "daily-backup-vultr" 53 | schedule: "0 0 * * *" 54 | keep: 10 55 | storageName: s3-vultr 56 | - name: "daily-backup-offsite" 57 | schedule: "0 0 * * *" 58 | keep: 10 59 | storageName: s3-offsite 60 | -------------------------------------------------------------------------------- /article-assets/6935/006_manual_backup.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: pxc.percona.com/v1 2 | kind: PerconaXtraDBClusterBackup 3 | metadata: 4 | finalizers: 5 | - delete-s3-backup 6 | name: backup-001 7 | spec: 8 | pxcCluster: db-cluster 9 | storageName: s3-vultr 10 | -------------------------------------------------------------------------------- /article-assets/6935/007_cr_disable_pitr.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: pxc.percona.com/v1-10-0 2 | kind: PerconaXtraDBCluster 3 | metadata: 4 | name: db-cluster 5 | spec: 6 | crVersion: 1.10.0 7 | secretsName: db-cluster-secrets 8 | allowUnsafeConfigurations: true 9 | upgradeOptions: 10 | apply: 8.0-recommended 11 | schedule: "0 4 * * *" 12 | pxc: 13 | size: 3 14 | image: percona/percona-xtradb-cluster:8.0.23-14.1 15 | autoRecovery: true 16 | volumeSpec: 17 | persistentVolumeClaim: 18 | storageClassName: vultr-block-storage 19 | accessModes: ["ReadWriteOnce"] 20 | resources: 21 | requests: 22 | storage: 15G 23 | haproxy: 24 | enabled: true 25 | size: 3 26 | image: percona/percona-xtradb-cluster-operator:1.10.0-haproxy 27 | serviceType: LoadBalancer 28 | replicasServiceType: LoadBalancer 29 | logcollector: 30 | enabled: true 31 | image: percona/percona-xtradb-cluster-operator:1.10.0-logcollector 32 | backup: 33 | image: perconalab/percona-xtradb-cluster-operator:main-pxc8.0-backup 34 | pitr: 35 | enabled: false 36 | storageName: s3-vultr 37 | timeBetweenUploads: 60 38 | storages: 39 | s3-vultr: 40 | type: s3 41 | s3: 42 | bucket: db-cluster-backup 43 | credentialsSecret: vultr-s3-secret 44 | endpointUrl: https://ewr1.vultrobjects.com 45 | s3-offsite: 46 | type: s3 47 | s3: 48 | bucket: db-cluster-offsite-backup 49 | credentialsSecret: offsite-s3-secret 50 | endpointUrl: https://s3.nextdnn.com 51 | schedule: 52 | - name: "daily-backup-vultr" 53 | schedule: "0 0 * * *" 54 | keep: 10 55 | storageName: s3-vultr 56 | - name: "daily-backup-offsite" 57 | schedule: "0 0 * * *" 58 | keep: 10 59 | storageName: s3-offsite 60 | -------------------------------------------------------------------------------- /article-assets/6935/008_restore.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: pxc.percona.com/v1 2 | kind: PerconaXtraDBClusterRestore 3 | metadata: 4 | name: restore-001 5 | spec: 6 | pxcCluster: db-cluster 7 | backupName: backup-001 8 | pitr: 9 | type: date 10 | date: "2022-01-09 13:36:00" 11 | backupSource: 12 | storageName: s3-vultr 13 | -------------------------------------------------------------------------------- /article-assets/6935/009_restore_2nd.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: pxc.percona.com/v1 2 | kind: PerconaXtraDBClusterRestore 3 | metadata: 4 | name: restore-002 5 | spec: 6 | pxcCluster: db-cluster 7 | backupName: backup-001 8 | pitr: 9 | type: date 10 | date: "2022-01-09 13:35:30" 11 | backupSource: 12 | storageName: s3-vultr 13 | -------------------------------------------------------------------------------- /article-assets/6935/010_cr_enable_pitr.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: pxc.percona.com/v1-10-0 2 | kind: PerconaXtraDBCluster 3 | metadata: 4 | name: db-cluster 5 | spec: 6 | crVersion: 1.10.0 7 | secretsName: db-cluster-secrets 8 | allowUnsafeConfigurations: true 9 | upgradeOptions: 10 | apply: 8.0-recommended 11 | schedule: "0 4 * * *" 12 | pxc: 13 | size: 3 14 | image: percona/percona-xtradb-cluster:8.0.23-14.1 15 | autoRecovery: true 16 | volumeSpec: 17 | persistentVolumeClaim: 18 | storageClassName: vultr-block-storage 19 | accessModes: ["ReadWriteOnce"] 20 | resources: 21 | requests: 22 | storage: 15G 23 | haproxy: 24 | enabled: true 25 | size: 3 26 | image: percona/percona-xtradb-cluster-operator:1.10.0-haproxy 27 | serviceType: LoadBalancer 28 | replicasServiceType: LoadBalancer 29 | logcollector: 30 | enabled: true 31 | image: percona/percona-xtradb-cluster-operator:1.10.0-logcollector 32 | backup: 33 | image: perconalab/percona-xtradb-cluster-operator:main-pxc8.0-backup 34 | pitr: 35 | enabled: true 36 | storageName: s3-vultr 37 | timeBetweenUploads: 60 38 | storages: 39 | s3-vultr: 40 | type: s3 41 | s3: 42 | bucket: db-cluster-backup 43 | credentialsSecret: vultr-s3-secret 44 | endpointUrl: https://ewr1.vultrobjects.com 45 | s3-offsite: 46 | type: s3 47 | s3: 48 | bucket: db-cluster-offsite-backup 49 | credentialsSecret: offsite-s3-secret 50 | endpointUrl: https://s3.nextdnn.com 51 | schedule: 52 | - name: "daily-backup-vultr" 53 | schedule: "0 0 * * *" 54 | keep: 10 55 | storageName: s3-vultr 56 | - name: "daily-backup-offsite" 57 | schedule: "0 0 * * *" 58 | keep: 10 59 | storageName: s3-offsite 60 | -------------------------------------------------------------------------------- /article-assets/6935/README.md: -------------------------------------------------------------------------------- 1 | # How to Set Up a Percona Server for MySQL with Vultr Kubernetes Engine 2 | These are support files for the Vultr Docs article [How to Set Up a Percona Server for MySQL with Vultr Kubernetes Engine](https://www.vultr.com/docs/how-to-set-up-a-percona-server-for-mysql-with-vultr-kubernetes-engine). They have been archived here from [the author's original repository](https://github.com/quanhua92/k8s-mysql-cluster). 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /article-assets/7720/Deb/install-vultr-repo.sh: -------------------------------------------------------------------------------- 1 | $ OS=debian 2 | 3 | $ APPREPO_KEY=$(cat < /etc/apt/sources.list.d/vultr-apprepo.list 59 | $ echo "${APPREPO_KEY}" | gpg --dearmor > /usr/share/keyrings/vultr-apprepo.gpg 60 | $ apt update -y 61 | -------------------------------------------------------------------------------- /article-assets/7720/Nouveau/disable-nouveau.sh: -------------------------------------------------------------------------------- 1 | $ BLACKLIST_FILE=$(cat < /etc/modules-load.d/nvidia.conf 12 | $ echo "${BLACKLIST_FILE}" > /etc/modprobe.d/blacklist-nouveau.conf 13 | -------------------------------------------------------------------------------- /article-assets/7720/RHEL/install-vultr-repo.sh: -------------------------------------------------------------------------------- 1 | $ APPREPO_KEY=$(cat < /etc/yum.repos.d/vultr-apprepo.repo 67 | $ echo "${APPREPO_KEY}" > /etc/pki/rpm-gpg/RPM-GPG-KEY-apprepo 68 | $ update-crypto-policies --set DEFAULT:SHA1 || true 69 | -------------------------------------------------------------------------------- /article-assets/7720/gridd-config/install-license.sh: -------------------------------------------------------------------------------- 1 | $ NVIDIA_GRIDD_CONFIG='U2VydmVyQWRkcmVzcz1udmlkaWFsaWMudnVsdHJsYWJzLmNvbQpGZWF0dXJlVHlwZT0xCkVuYWJsZVVJPUZBTFNFCkxpY2Vuc2VIb3N0SWQ9e3tNQUNIRVJFfX0K' 2 | $ NVIDIA_TOKEN='ZXlKaGJHY2lPaUpTVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SnFkR2tpT2lJeE1qWmlPRGN5WVMxa01ETm1MVFEyWWpFdE9UbGxZUzA1WkRrNU5tWTBOVFl3WVdZaUxDSnBjM01pT2lKT1RGTWdVMlZ5ZG1salpTQkpibk4wWVc1alpTSXNJbUYxWkNJNklrNU1VeUJNYVdObGJuTmxaQ0JEYkdsbGJuUWlMQ0pwWVhRaU9qRTJOVFEzTlRJNU5qTXNJbTVpWmlJNk1UWTFORGMxTWprMk15d2laWGh3SWpveU1ETXpORFEwTVRZekxDSjFjR1JoZEdWZmJXOWtaU0k2SWtGQ1UwOU1WVlJGSWl3aWMyTnZjR1ZmY21WbVgyeHBjM1FpT2xzaU9Ua3lNVFJrWW1RdE9UVTJPQzAwTURVMUxXSmtNamN0WldJeU1EWTRaR1psTXpNM0lsMHNJbVoxYkdacGJHeHRaVzUwWDJOc1lYTnpYM0psWmw5c2FYTjBJanBiWFN3aWMyVnlkbWxqWlY5cGJuTjBZVzVqWlY5amIyNW1hV2QxY21GMGFXOXVJanA3SW01c2MxOXpaWEoyYVdObFgybHVjM1JoYm1ObFgzSmxaaUk2SWpBMVptSmlZMlJsTFRobU1HWXROREEyTXkxaVl6YzJMVFZqTnpReE5XSmxNV0poT1NJc0luTjJZMTl3YjNKMFgzTmxkRjlzYVhOMElqcGJleUpwWkhnaU9qQXNJbVJmYm1GdFpTSTZJa1JNVXlJc0luTjJZMTl3YjNKMFgyMWhjQ0k2VzNzaWMyVnlkbWxqWlNJNkltRjFkR2dpTENKd2IzSjBJam8wTkROOUxIc2ljMlZ5ZG1salpTSTZJbXhsWVhObElpd2ljRzl5ZENJNk5EUXpmVjE5WFN3aWJtOWtaVjkxY214ZmJHbHpkQ0k2VzNzaWFXUjRJam93TENKMWNtd2lPaUp1ZG1sa2FXRnNhV011ZG5Wc2RISnNZV0p6TG1OdmJTSXNJblZ5YkY5eGNpSTZJbTUyYVdScFlXeHBZeTUyZFd4MGNteGhZbk11WTI5dElpd2ljM1pqWDNCdmNuUmZjMlYwWDJsa2VDSTZNSDFkZlN3aWMyVnlkbWxqWlY5cGJuTjBZVzVqWlY5d2RXSnNhV05mYTJWNVgyTnZibVpwWjNWeVlYUnBiMjRpT25zaWMyVnlkbWxqWlY5cGJuTjBZVzVqWlY5d2RXSnNhV05mYTJWNVgyMWxJanA3SW0xdlpDSTZJbVV6TjJJek4yRmxZV0l6TldRMll6SXlPV0UyTURabFlXUXlNMlU0T0dZM1pHUTFNVGhpT0RBMU1XTm1ORFE1TmpneFpXSXpORGc1TlRBeU4yVm1NV1UwWlRZNU9UZGhOak0zTWpVeU1EZzRaakpqTXpnMVlqUTFaV0ppTURabVlUZ3pOall4TnpVMFl6UmlaV1JpTmpOa1pHWTFOamszTnpBNU5XWXdNbVppWVdVeE9XUmpNek5pTlRaaFlXVmhZalV4WWpOa04yWTRNRGcxTXpObU5ETTROR0UyTW1KaU1qQm1OVEJtTlROa01UUXlOakUyTlRZd1ltWmlZakEwTVRGa01HUmlOR0l4TW1Kak1ESmpaR0ZrWWpZMVlURmtNREV4TnpJMFpUTmpZVFZtT1dVNE1XWTFPR1kzWkRSbVpXVmtZek5qTUdNNE16WmxZekJqT1dKaU0yTXpZVGMzWXpabE1XUTNOR0ptWldRME1tVXpPVGczWXpJeE5XWm1OV00wTXpjell6bG1OR05rTm1ZelpXUXlOMkkyT1dFNE9USm1aRGcyTUdNelptTmhZMkUyT0dJNFpUUXdabUprWlRneE56TmxNVEZsTnpCbE4yRmpZakU0WkRjeE9HSXlObVkxTlRnek56ZGhZMlprWVRobE1XVTROVFJqTldVMU1EWmhZbU0xWW1NeFpqRTVOV1ZsT1RBell6Z3hPR000WkRVMU1XSTVNekl6TWpnMVlqQmpObVF5TnpZeVkyWXlNbVEwWmpVMVlUYzNZak00TURreU9EazBObVJpTW1Rd056UTFOemRtWkdFek1ETmxZalU0TkRBMlpEbGpOalJpWkRZeU5UaGpOamM1WVRNM01qUXhNV0k0TldJeE9HTTVOek0xTjJSa01EYzFJaXdpWlhod0lqbzJOVFV6TjMwc0luTmxjblpwWTJWZmFXNXpkR0Z1WTJWZmNIVmliR2xqWDJ0bGVWOXdaVzBpT2lJdExTMHRMVUpGUjBsT0lGQlZRa3hKUXlCTFJWa3RMUzB0TFZ4dVRVbEpRa2xxUVU1Q1oydHhhR3RwUnpsM01FSkJVVVZHUVVGUFEwRlJPRUZOU1VsQ1EyZExRMEZSUlVFME0zTXpjbkZ6TVRGelNYQndaMkp4TUdvMlNWeHVPVGt4VW1rMFFsSjZNRk5YWjJWek1HbFdRVzQzZURWUFlWcGxiVTU1VldkcFVFeEVhR0pTWlhWM1lqWm5NbGxZVmsxVEt6SXlVR1E1VjJ3elExWTRRMXh1S3pZMFdqTkVUekZoY1RaeVZXSlFXQ3RCYUZSUU1FOUZjR2wxZVVReFJERlFVbEZ0Um14WlRDczNRa0pJVVRJd2MxTjJRVXhPY21KYVlVaFJSVmhLVDF4dVVFdFlOVFpDT1ZrNU9WUXJOMk5RUVhsRVluTkVTblY2ZHpaa09HSm9NVEIyS3pGRE5EVm9PRWxXTHpGNFJHTTRiakI2Vnpnck1HNTBjSEZLVERsb1oxeHVkeTk1YzNCdmRVOVJVSFpsWjFoUWFFaHVSRzV5VEVkT1kxbHpiVGxXWnpObGN5OWhhbWcyUmxSR05WRmhjbmhpZDJaSFZqZHdRVGhuV1hsT1ZsSjFWRnh1U1hsb1lrUkhNRzVaY3pocE1WQldZV1EzVDBGcmIyeEhNbmt3U0ZKWVpqbHZkMUJ5VjBWQ2RHNUhVemxaYkdwSFpXRk9lVkZTZFVaeldYbFlUbGd6VVZ4dVpGRkpSRUZSUVVKY2JpMHRMUzB0UlU1RUlGQlZRa3hKUXlCTFJWa3RMUzB0TFNJc0ltdGxlVjl5WlhSbGJuUnBiMjVmYlc5a1pTSTZJa3hCVkVWVFZGOVBUa3haSW4xOS5xbDRpeDhEN24wY2Z3OXVQWmpEazlTRnVzU3lOczEtdVpIVzNKT190emtOX19rSmxtZDgtbHJKX3pNRmJwQXBZMFBsTThmWlFYNFlHNWJHMlZkbDNkSTF3WFNIX0hLV2VDa1JtTnVZRVZKY2UwNHR2OEZCWnFscDB1WjdUSE9JLW82NF96RTlpNDJBdFJlU0d1dzUwb2U2UV9FRl8zaVdqVlRiNEZ0MGVIOHJGVmhpSTZzeFRoN3hadGVNdmtzWllBcHVZbUJ1TGNkd0xFWWFTbUNKX0xSZlk5YW95ZldVbktKSWwxSm8wUmtiNWZyeGp5cG5OeWt1T2ZFdXlyUEdvSHQtWHZ0NlhyX3dpVVNOd3dZdUJDUnZuNjlWV3YxUjdhb2FoenAteWt4Smx5aW9YcV91X0Q0c1lLWFJia2d3Y19ESGlkbWJTVDVqcThjSXZQWS13NFE=' 3 | $ mkdir -p /etc/nvidia/ClientConfigToken 4 | $ echo "${NVIDIA_GRIDD_CONFIG}" | base64 -d > /etc/nvidia/gridd.conf 5 | $ echo "${NVIDIA_TOKEN}" | base64 -d > /etc/nvidia/ClientConfigToken/nvidialic.vultrlabs.com 6 | -------------------------------------------------------------------------------- /faq/README.md: -------------------------------------------------------------------------------- 1 | # FAQ 2 | 3 | Support files for the [FAQ](https://www.vultr.com/docs/category/faq/) category. 4 | -------------------------------------------------------------------------------- /faq/as20473-bgp-customer-guide/README.md: -------------------------------------------------------------------------------- 1 | # AS20473 BGP Communities Customer Guide 2 | 3 | Last updated: `2024-07-25` 4 | 5 | ## Informational Communities 6 | 7 | ### Prefix Type 8 | 9 | AS20473 tags prefixes that are learned or originated as follows: 10 | 11 | | Prefix type | Community | Large Community 12 | | ----------------------------------------------------- | --------------------- | --------------- 13 | | Prefix learned from Transit | 20473:100 | 20473­:100­:transit-as 14 | | Prefix learned from Public Peer via route servers | 20473:200 | 20473:200:ixp-as 15 | | Prefix learned from Public Peer via bilateral peering | 20473:200 | 20473:200:ixp-as, 20473:200:peer-as 16 | | Prefix learned from Private Peer | 20473:300 | 20473:300:peer-as 17 | | Prefix originated by Customer | 20473:4000 | 18 | | Prefix originated by 20473 | 20473:500 | 19 | | Prefix learned from AS number (if <= 65535) | 20473:peer-as | 20473:peer-type:peer-as 20 | 21 | ### Location 22 | 23 | Routes announced from AS20473 are also tagged with a 2­-digit community to provide information about the POP it was originated from. For example, prefixes tagged with 20473:11 are generated in Piscataway. These locations are defined in the following table. 24 | 25 | 26 | 27 | 28 | 29 | 30 | 45 | 55 | 69 | 70 |
United StatesAmericasEurope
31 | 32 | | POP Name | Code | 33 | |:----------------|:----:| 34 | | Atlanta, GA | 14 | 35 | | Chicago, IL | 13 | 36 | | Dallas, TX | 15 | 37 | | Honolulu, HI | 34 | 38 | | Los Angeles, CA | 17 | 39 | | Miami, FL | 12 | 40 | | Piscataway, NJ | 11 | 41 | | San Jose, CA | 18 | 42 | | Seattle, WA | 16 | 43 | 44 | 46 | 47 | | POP Name | Code | 48 | |:----------------|:----:| 49 | | Mexico, MX | 28 | 50 | | Santiago, CL | 42 | 51 | | Sao Paulo, BR | 30 | 52 | | Toronto, CA | 33 | 53 | 54 | 56 | 57 | | POP Name | Code | 58 | |:----------------|:----:| 59 | | Amsterdam, NL | 20 | 60 | | Frankfurt, DE | 22 | 61 | | London, GB | 19 | 62 | | Madrid, ES | 31 | 63 | | Manchester, GB | 46 | 64 | | Paris, FR | 21 | 65 | | Stockholm, SE | 27 | 66 | | Warsaw, PL | 29 | 67 | 68 |
71 | 72 | 73 | 74 | 75 | 76 | 90 | 98 | 105 | 106 |
AsiaAustraliaAfrica
77 | 78 | | POP Name | Code | 79 | |:----------------|:----:| 80 | | Bangalore, IN | 43 | 81 | | Korea, KR | 26 | 82 | | Mumbai, IN | 35 | 83 | | New Delhi, IN | 44 | 84 | | Osaka, JP | 45 | 85 | | Singapore, SG | 25 | 86 | | Tel Aviv, IL | 36 | 87 | | Tokyo, JP | 23 | 88 | 89 | 91 | 92 | | POP Name | Code | 93 | |:----------------|:----:| 94 | | Melbourne, AU | 32 | 95 | | Sydney, AU | 24 | 96 | 97 | 99 | 100 | | POP Name | Code | 101 | |:-------------------|:----:| 102 | | Johannesburg, ZA | 37 | 103 | 104 |
107 | 108 | Large communities are also used for location with the following format `20473:0:3RRRCCC1PP` where: 109 | 110 | - `RRR` is the [M49 region code](https://unstats.un.org/unsd/methodology/m49/#geo-regions) 111 | - `CCC` is the [M49 country code](https://unstats.un.org/unsd/methodology/m49/#countries) 112 | - `PP` is the location code as explained above 113 | 114 | ## Action Communities 115 | 116 | Customers may choose to influence traffic for prefixes advertised outside of AS20473 using the communities below. Customers may also add third party communities which are passed on to our providers and peers. We have incorporated large communities to support actions on 32-bit autonomous system numbers. 117 | 118 | **IXP route servers use large communities only!** 119 | 120 | | Action | Community | Large Community | 121 | | ---------------------------------- | ------------- | ------------------ | 122 | | Do not advertise to specific AS | 64600:peer-as | 20473:6000:peer-as | 123 | | Prepend 1x to specific AS | 64601:peer-as | 20473:6001:peer-as | 124 | | Prepend 2x to specific AS | 64602:peer-as | 20473:6002:peer-as | 125 | | Prepend 3x to specific AS | 64603:peer-as | 20473:6003:peer-as | 126 | | Set Metric to 0 to specific AS | 64609:peer-as | 20473:6009:peer-as | 127 | | Override 20473:6000 to specific AS | 64699:peer-as | 20473:6099:peer-as | 128 | | Do not advertise out of AS20473 | 20473:6000 | | 129 | | Prepend 1x to all peers | 20473:6001 | | 130 | | Prepend 2x to all peers | 20473:6002 | | 131 | | Prepend 3x to all peers | 20473:6003 | | 132 | | Set Metric to 0 to all peers | 20473:64609 | | 133 | | Do not announce to IXP peers | 20473:6601 | | 134 | | Announce to IXP route servers only | 20473:6602 | | 135 | | Export blackhole to all peers | 20473:666 | | 136 | 137 | ## Other BGP Communities 138 | 139 | AS20473 transparently advertises communities set by its customers. Customers can use these communities to affect their inbound traffic from our different transit providers and IXPs. 140 | --------------------------------------------------------------------------------