termopro,
I have automated my deployments mostly separate from my
version control.
The other team members and I write, test, commit, and push our
code changes to our Git repo. I then pull, review, test, update
the version number, commit, tag, and push to Git.
Then I use a shell script (on Mac, but would work on Unix/Linux
also) to push the tagged commit to TEST and later to PROD.
My script does things like:
- Get the latest files from Git before, and back to master after:
% git checkout mytag
...
% git checkout master
- Create folder of collected static files before, and delete after:
% mkdir -pv collected_static/mytag
% python manage.py collectstatic --clear --noinput
...
% rm -rfv collected_static
- Delete all local *.pyc files:
% find . -name \*.pyc -exec rm -v "{}" ";"
- Insert PROD password into local settings file (PROD pushes
only) before, and remove after:
% sed -i .old -e "s/PUT_PROD_PASSWORD_HERE/`cat prod_pw`/g" settings.py
...
% mv -v settings.py.old settings.py
- Show a warning banner at the Web site to say it is going down
briefly, and clear the banner after:
% ssh -t myserver.mydomain.com cp -v
/var/www/django/myapp/templates/myapp/site_alert_maintenance.html
site_alert.html
% sleep 60
...
% ssh -t myserver.mydomain.com cp -v
/var/www/django/myapp/templates/myapp/site_alert_none.html site_alert.html
- Push the local files to the TEST or PROD server:
% rsync -v --progress -i -l --rsh=ssh -r --del myapp
myserver.mydomain.com:/var/www/django
- Run all migrations on the server
% ssh -t myserver.mydomain.com python manage.py migrate --all
- Stop the Apache server, delete all remote *.pyc files, and
restart the server:
% ssh -t myserver.mydomain.com sudo /etc/init.d/httpd stop
% ssh -t myserver.mydomain.com sudo find /var/www/django/myapp -name
\*.pyc -exec rm -v "{}" ";"
% ssh -t myserver.mydomain.com sudo /etc/init.d/httpd start
Plus a few other actions that are specific to our app, and lots
or informational messages, prompts, confirmations, etc. Also,
some of these steps are combined into a remote script that
runs on the server to reduce the number of "ssh -t sudo"
commands I would otherwise have to do. But, that's the gist
of it.
Hope this helps!
--Fred
------------------------------------------------------------------------
Fred Stluka -- mailto:[email protected] -- http://bristle.com/~fred/
Bristle Software, Inc -- http://bristle.com -- Glad to be of service!
Open Source: Without walls and fences, we need no Windows or Gates.
------------------------------------------------------------------------
On 11/19/14 5:22 AM, termopro wrote:
I have created a Django 1.7 project and would like to deploy it. I am
reading about how to do it right and i have some questions.
If i understand correctly deployment should contain the following steps:
1) Initial remote machine set up:
* a) install os / server / database / cache ...
* b) install Django and required modules
* c) update database with real data
2) Upload code/ database changes to remote machine:
* a) upload changed Django project
* b) upload changes in Database tables (model migrations)
Most tutorials/articles about deployment do not cover 1.c and 2.b.
Also the tasks 1.b. and 2.a. are solved using revision control tools
(Git/Mercurial)
So i'd like to know:
*
1) How do i install Django project or it's updates without
revision control tools ? Should i simply upload my project using
FTP/SSH ? Is there a good way to automate it ?
*
2) How do i automate the task of uploading required database
changes (like model migrations) ?
--
You received this message because you are subscribed to the Google
Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to [email protected]
<mailto:[email protected]>.
To post to this group, send email to [email protected]
<mailto:[email protected]>.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/e9fb8f5a-2bd9-47d5-80c7-07a3aa82bd25%40googlegroups.com
<https://groups.google.com/d/msgid/django-users/e9fb8f5a-2bd9-47d5-80c7-07a3aa82bd25%40googlegroups.com?utm_medium=email&utm_source=footer>.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Django
users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/546E7B4A.3030303%40bristle.com.
For more options, visit https://groups.google.com/d/optout.