Sreeraj
Sreeraj

Reputation: 2720

How to upgrade a website without or less down time?

I want to upgrade my website without downtime. I made researches and didn't find a way to upgrade it without downtime (few seconds are fine). I was thinking a way as follows, but I am not sure whether any good professional way is there. Please help me out on how to improve this.

  1. Add new tables/CFs to the database (database is Cassandra, we are not supposed to do any changes in existing tables/CF)
  2. Deploy the project in online server in different Directory, so that users can still use the existing site.
  3. Point the uploaded project in different port and check whether everything is working properly.
  4. If everything is working change the symlink to the uploaded directory

Please let me know any other good methodology if you have.

I am using SVN in my local server

Upvotes: 1

Views: 548

Answers (2)

Sankalp Singha
Sankalp Singha

Reputation: 4546

UPDATING THE SERVER ALMOST INSTANTANEOUSLY

Ok for this one of the best and the easiest method is using Git. So, what you should do is host your code in Git and then whenever you want to update the site, just SSH into the server and do a Git Pull. It's instantaneous and it would update it. Also you can use Git Hooks to further solve your problem as well.

There are a few ways you can go about it, but one of the easier methods would be this.

Let me explain it in detail on how to do it:

The source for your web site should live in a Git repository on the local workstation. I shall describe how I set things up so that I can make changes live by running just "git push online".

The local repository

It doesn't really matter how the local repository is set up, but for the sake of argument, let's suppose you're starting one from scratch.

$ mkdir somesite && cd somesite
$ git init
Initialized empty Git repository in /home/sankalpsingha/somesite/.git/
$ echo 'Test!' > index.html
$ git add index.html
$ git commit -q -m "This is the first push."

The remote repository

I assume that the web site will live on a server to which you have ssh access, and that things are set up so that you can ssh to it without having to type a password (i.e., that your public key is in ~/.ssh/authorized_keys and you are running ssh-agent locally). On the server, we create a new repository to mirror the local one.

$ mkdir coolsite.git && cd coolsite.git
$ git init --bare
Initialized empty Git repository in /home/sankalpsingha/coolsite.git/

Now lets make and define the hoolks as a post-receive hook that checks out the latest tree into the web server's DocumentRoot (this directory must exist; Git will not create it for you):

$ mkdir /var/www/www.somesite.org
$ cat > hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/var/www/www.somesite.org git checkout -f
$ chmod +x hooks/post-receive

Back on the workstation, we define a name for the remote mirror, and then mirror to it, creating a new "master" branch there.

$ git remote add online ssh://server.somesite.org/home/sankalpsingha/coolsite.git
$ git push online +master:refs/heads/master

On the server, /var/www/www.somesite.org should now contain a copy of your files, independent of any .git metadata.

The update process

Just run :

$ git push online

This will transfer any new commits to the remote repository, where the post-receive hook will immediately update the DocumentRoot for you. (This is more convenient than defining your workstation as a remote on the server, and running "git pull" by hand or from a cron job, and it doesn't require your workstation to be accessible by ssh.)

Upvotes: 5

ineersa
ineersa

Reputation: 3445

You can use some CI or deployment tools. I'm doing this manually. Here is the way i'm doing it.

  1. I have a workcopy directory from git, and git hook to sync it on push.
  2. Then i sync worckopy directory with site using rsync.
  3. All database changes done with migrations, so 1 command yiic migrate is enough to make new tables or alter existing.

With this methodology there is no actuall downtime, some pages can be unavailable for 5-10 sec max, but all system works on this time.

Point the uploaded project in different port and check whether everything is working properly. If everything is working change the symlink to the uploaded directory

It's bad way, for testing you need test server, or test it on local machine with same configs and params as on server. For example Vagrant can make any environment on your local machine for testing.

If you need to pass tests (e.g. unit tests or functional), then watch on CI tools.

Upvotes: 1

Related Questions