# Changing Digital Ocean droplets with doctl (resize, floating ip, rename, etc)

**URL:** <https://dashboard.literatecomputing.com/t/changing-digital-ocean-droplets-with-doctl-resize-floating-ip-rename-etc/915>\
**Category:** Howto\
**Created:** [July 30, 2024, 4:58pm UTC](https://dashboard.literatecomputing.com/t/changing-digital-ocean-droplets-with-doctl-resize-floating-ip-rename-etc/915 "2024-07-30T16:58:41Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![pfaffman](https://cdn.dashboard.literatecomputing.com/user_avatar/dashboard.literatecomputing.com/pfaffman/32/7_2.png) [@pfaffman](https://dashboard.literatecomputing.com/u/pfaffman)\
**Post date:** [July 30, 2024, 4:58pm UTC](https://dashboard.literatecomputing.com/t/changing-digital-ocean-droplets-with-doctl-resize-floating-ip-rename-etc/915/1 "2024-07-30T16:58:41Z")

</div>

Docs: [doctl compute floating-ip](https://docs.digitalocean.com/reference/doctl/reference/compute/floating-ip)

### Droplet and Floating IP list

```auto
doctl -t =do_api_key= compute droplet list
doctl -t =do_api_key= compute floating-ip list

```

### Create Floating IP (assign to old)

```auto
doctl -t =do_api_key= compute floating-ip create --droplet-id =old_droplet=

```

### establish connection to new server and from new to old

```auto
ssh -o StrictHostKeyChecking=accept-new =new_ip=
ssh -o StrictHostKeyChecking=accept-new =old_ip=
exit

```

## get data from old server

```auto
cd /var/discourse
rsync -rav --numeric-ids =old_ip=:/var/discourse/containers/ /var/discourse/containers/
rsync -rav --numeric-ids =old_ip=:/var/discourse/shared/ /var/discourse/shared/ --exclude log --exclude postgres_* --exclude redis_data --exclude log --exclude tmp --exclude state

```

## build containers

```auto
[-f containers/data.yml] && ./launcher rebuild data
[-f containers/web_only.yml] && ./launcher rebuild web_only
[-f containers/app.yml] && ./launcher rebuild app
[-f containers/mail-receiver.yml] && ./launcher rebuild mail-receiver

```

# make old server read-only and make backup

### Connect to old server

```auto
ssh =old_ip=

```

### Get into rails

```auto
docker exec -it $(docker ps --filter "publish=443" --format "{{.Names}}") bash -c 'rails c'

```

### make readonly, backup, announce server move

```auto
Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY);
BackupRestore::Backuper.new(Discourse.system_user.id, with_uploads: false).run;
SiteSetting.global_notice='Move to new server is happening now. Thanks for your patience.'

```

```auto
exit # from rails
exit # from ssh

```

### Enable restore on new computer

```auto
docker exec -it $(docker ps --filter "publish=443" --format "{{.Names}}") bash -c "discourse enable_restore"

```

### Get data (again)

```auto
rsync -rav --numeric-ids =old_ip=:/var/discourse/shared/ /var/discourse/shared/ --exclude log --exclude postgres_* --exclude redis_data --exclude letsencrypt --exclude ssl --exclude log --exclude tmp --exclude state

```

### Restore latest backup

```auto
docker exec -it $(docker ps --filter "publish=443" --format "{{.Names}}") bash

```

```auto
$(discourse restore|grep gz|head -1)

```

### Assign existing Floating IP to existing (new) Droplet

```auto
doctl -t =do_api_key= compute floating-ip-action assign =floating_ip= =new_droplet= # update

```

### Stop old droplet

```auto
doctl -t =do_api_key= compute droplet-action shutdown =old_droplet= # Test

```

### Delete old droplet

```auto
doctl -t =do_api_key= compute droplet delete =old_droplet=

```

### Rename droplets

```auto
doctl -t =do_api_key= compute droplet-action rename --droplet-name =old_droplet_name= =old_droplet=

```

```auto
doctl -t =do_api_key= compute droplet-action rename --droplet-name =new_droplet_name= =new_droplet=

```

### Change hostname

```auto
hostnamectl set-hostname =short_hostname=

```

### Resize

```auto
doctl -t =do_api_key= compute droplet-action resize =old_droplet= --size =droplet_size= --resize-disk=true # resize

```

### Size list

```auto
doctl -t =do_api_key= compute size list|less

```

### Staff Writes only

```auto
Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)

```

```auto
Discourse.disable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)

```
