Whats the best way to update my Django site on DigitalOcean?

I have a basic website that I have in Git, recently I created an Ubuntu droplet here on DO and then cloned my site from git in the new server and finished setting it up running on Nginx.

I have since then made changes to my site locally and pushed the changes to git, what is the best way to update the site on DO now? Should I clone it again from git or upload via ftp or is there another solution?

thank you

Show comments

Submit an answer

This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Sign In or Sign Up to Answer

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

Accepted Answer

Either option would work. I would recommend using a git pull to pull the updates to your master branch since this will also clean up any files that have been removed. Using FTP/SFTP would simply copy the new files over the old and would not handle deletions.

If you wanted to take things a step further you could add a script to your site that acts as a webhook. With this in place, merging your changes into the master branch on github could kick off a git pull on your server and keep your live site in sync with the master branch of your git repository.

i am using the git pull origin master command but it isn’t updating my python files like views, forms etc. All other files like html files are updated

OK great thanks

I’ve written a bash script that does it, given that we do not have any changes on server. Feel free to add/comment on improvements:

APP_NAME = Name of Application to display APP_FOLDER = Django project’s GIT root folder

Make sure to give Execute permissions on this script: chmod 777 /home/django/

echo 'Updating <APP_NAME>...'
cd /home/django/<APP_FOLDER>/
source venv/bin/activate

if [ -z "$(git status --untracked-files=no --porcelain)" ]; then 

  if git pull origin master; then
    echo 'GIT PULL completed'
    echo 'GIT PULL failed: exiting program.'

  echo 'Upgrading DB to latest...'
  export DJANGO_SETTINGS_MODULE=<APP>.settings-prod
  python3 migrate

  echo 'Restarting servers...'
  sudo systemctl daemon-reload
  sudo service gunicorn restart
  sudo service nginx restart
  echo 'There are modified files. Aborting update process..'
echo 'Finished updating.'