Tuesday, April 19, 2016

Deploying Django Project

Last couple of days, I am concentrating on python and giving some time in python related research. Initially, I found it really good for scripting, and later I noticed that it is really powerful language, can be used for desktop to web applications, from small testing applications to a big project.

Django is a framework developed in python and the web development using this framework makes the task simple, clear separation between view and controller. The view templates even can not insert custom codes, that is great, which separates coding from view(coding makes mess in html code)

So, creating a sample Django application and running through command is very easy which can be used for development purpose. And good thing is that, the changed code is reflected when browser is reloaded, that means we do not need to recompile the code. But what if I want to deploy to a dedicated server (I mean Apache2) ? It is not straight forward. Although there are many different possible configurations, I will focus on the basic configuration that make the website running.  Later we can extend it with more and more.


So, let us begin it.

1) Virtualenv

There might be other methods also, I will explain the methods which needs creation of virtualenv. So, first of all, we need python-pip which can be installed with

sudo apt-get install pip
sudo pip install virtualenv


I normally used Eclipse IDE and for a django project I have instally PyDev plugin which makes the task easier. With eclipse I create a Django project and after you have created it , you can directly test it(Thanks Eclipse, it creates everything for you).

Now we install virtualenv inside the directory so that we can deploy the whole directory to new server without worrying the server.

So, we run the following command from inside the project folder:

virtualenv ENV

Then,

activate it

source ENV/bin/activate


2) Install Django

We can now install django module using

pip install django

So, the basic project is ready to deploy.


3) Server Preparation

a) Module wsgi

My assumption is that we already installed apache2 . That is not enough, we need to install libapache2-mod-wsgi module also.

sudo apt-get install libapache2-mod-wsgi-py3
* py3 here means python 3
Now we provide the access definition for wsgi.py file in the project.

b) apache2.conf
We write the following line in /etc/apache2/apache2.conf

<Directory /Backup/workspace/java/misc/DjangoProject>
        <Files wsgi.py>
                Require all granted
        </Files>


c) Define site

Now, finally,  we define and enable site in /etc/apache2/sites-available. We create a file 0001-python.conf (for e.g.) with the following contents:

WSGIDaemonProcess sampleapp python-path=/Backup/workspace/java/misc/DjangoProject:/Backup/workspace/java/misc/DjangoProject/ENV/lib/python3.4/site-packages
WSGIProcessGroup sampleapp
WSGIScriptAlias /sampleapp /Backup/workspace/java/misc/DjangoProject/DjangoProject/wsgi.py

And enable this site :

sudo a2ensite 0001-python.conf

sudo apt-get apache2 restart

Now, check your Django application running with the following URL:

http://localhost/sampleapp


Enjoy , you have successfully deploy your first Django application.


References:

https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/modwsgi/
https://www.digitalocean.com/community/tutorials/how-to-run-django-with-mod_wsgi-and-apache-with-a-virtualenv-python-environment-on-a-debian-vps

Tuesday, April 12, 2016

Apache2 Server Subdomains

Apache2 Server configuration for multiple web applications is confusing for beginners. Since I have just started configuring apache server in my Ubuntu 14.04 system, I am going to share my experiences while installing and configuring Apache Server.

Basic Commands

Here are the basic commands need to learn:

1) Installation :
       sudo apt-get install apache2
2) Reload:
       sudo service apache2 reload
3) Restart:
       sudo service apache2 restart
4) Enable website:
       sudo a2ensite [WEBSITE_NAME]
5) Disable website:
       sudo a2dissite [WEBSITE_NAME]

Problem Scenario

So, the problem scenario is I have to install multiple web applications in the same host but with different URLs. And the web applications can be placed anywhere in the server. And I also discuss about defining sub-domains. 

For example, I have three web projects located in /home/frietec/www/redmine, /home/frietec/www/owncloud, /home/frietec/www/ldap and I want to access these projects with redmine.frietec.com, cloud.frietec.com, ldap.frietec.com.

Solution

The solution for this is not so difficult. We need to configure virtual host.  First of all, we have to define the virtual hosts in config file as below:




    DocumentRoot /home/kris/public_html
    ServerName myproject.localhost

    # Other directives here




    DocumentRoot /home/kris/public_html/myproject
    ServerName myotherproject.localhost
  
    # Other directives here

 
 
In this example, it is important that the defined sub-domains should point to the same local machine. So, we either place this information to a DNS server to publicly access. To test in local network, we modify the file /etc/hosts with the subdomains point to the same IP. This way removed the burgeon of remembering the ip-address of the system.

File: /etc/hosts

 127.0.0.1      localhost
 127.0.1.1      kpsharma
 192.168.1.82   myproject.localhost

 192.168.1.82   myotherproject.localhost 



Note: if we use IP address instead of domain-name, then it uses the topmost virtual host. In this case, the project "myproject.localhost" is called.

Friday, April 8, 2016

General Purpose IDEs

Update: Recently, I got to notice that Microsoft has recently released their own light weight IDE called Visual Studio Code(VSCode). After a couple of hours research and testing, I found this IDE really fast, light and with great intelliscent support. I was really impressed by Visual Studio IDE which is really good IDE when I was using Windows. The installer is less than 50 MB and can be installed in Linux/ Windows/ OSX. So, we should not use Windows or specific operating system to use it. Its really great feature. The code auto-complete is really really cool and great, which out-wins Atom, and we can install hundreds of extensions according to our requirements. I already tested python, html, javascript, css and VSCode works exceptionally. 

The only downside, not really downside, is the compilation and execution. Although we can define it in tasks, but somehow not-used-to for normal users. But if just look at the file tasks.json, you will understand everything and you can make your own compiler and runner, really great if you need your own compiler or executer or any custom task.



IDE stands for Integrated Development Environment which supports development of software application. IDE actually makes the task of software development faster and easier for a programmer. Thats why IDEs are so popular. There are several IDEs available, and depending upon our needs , we choose one which is better for specific requirement.


In this article, I present some overview on the currently popular IDEs and will provide my experience on there IDES. First I will talk about my requirement, and then discuss about my research work carried out to get the better one for my requirement. May be you guys also have the similar problem, then this article will help you to some extent.


First, lets talk about my background. I basically develop software using java programming language. Previously, I used Netbeans, but later, because of serveral plugins available in eclipse, I chose Eclipse as my primary IDE. However, both the IDEs are very very popular, and ranked on the top. Eclipse is, with no doubt, the best IDE we can get which is open source. I have heard of IntellisJ IDE for Java, I guess, the current Android IDE(i.e. Android Studio) is using this IDE. But I am not so interested on this, firstly because it is not free, secondly, I found it a bit odd for Eclipse users. Netbeans is good , but there are not a lot of plugins available. 


By the way, this article is not talking about Eclipse, this is very good IDE and very popular. No need to write more about this because everybody know about it. My concern is if I wanted to write short programs/scripts or small website, then opening eclipse(everybody know that eclipse is bloated IDE) which needs a lot of resources to load, make the development task slower.Creating a project, creating files, and many more eclipse generated files make it confusing and somehow complicated. For example, I want to write a python program, which is no more than 100 lines, or if I want to create a website with a couple of pages, then opening eclipse , installing plugins, installing java(Eclipse requires that), is a very lengthy process. For Python project, I installed a Python Eclipse plugin (PyDev) where I could devlep python projects, but I could not feel comfortable with it. I wanted better support (like auto code complete, documentation). Since eclipse makes confusing by creating many other supplementry files, which makes the deployment processes complicated. However, Eclipse is best IDE for Java and Java related frameworks. 

So, I started doing some research work regarding which IDE best meets my requirement: fast, easy, light IDE, which helps to create normal everyday task (like creating small scripts(PHP or Python) , creating a couple of web pages in html, Javascript, css or any other programming languages. I have installed several IDEs and tested if it fits for my requirements. 


My another requirement is support of Linux and Windows operating systems. I basically use bothe operating systems, and IDE should work both systems, you know what I mean, IDE should be platform independent. 

My third requirement is it should be opensource, you know why opensource, we do not need to pay any bucks for these IDEs. And we can have chance to support the product if we have interest, but that is not my concern.  Here I have listed a bunch of IDEs I have been familiar with and I will tell you why I did not choose that IDE. 


1) Notepad ++

It is very nice IDE, but not full support for specific programming language, For example, if you develope a python script, it would not support code auto-completion. But Notepad++ is a general purpose text editor, which has capability of sytay highlighting for several progrmaming languages. There are plugins alos, but I found it not so interesting. Another disadvantage is we can not directly install Notepad++ in linux systems.

2) Vim

Vim is also good, support syntax highlighing for several programing languages, but not enough to do some advanced tasks.

3) Blue Fish

This is good IDE, I basically did not like the menu structure. They are not properly managed. And code highlighting was not good(for me).

4) Bracket

This is very nice IDE, I have tested it and worked like a charm. Support almost everything, and simple concise IDE and everything properly positioned. We could see live pages so that we do not need to run same page again and again. This is a nice feature. Many programmers recommended this for website development, and it is really good.

5) Sublime Text

I have tested this also, but it has the same impression like Blue Fish, menus are not proper, or unwanted, or not normally needed(sometimes confusing also) . I can not tell more about this, because I have not fully tested it.


6) Atom

Finally, I have stucked with this IDE. This IDE is really nice where we can install packages with our requirements. For this IDE, everything is package, that is good for me, because I can removed unwanted packages to make the IDE faster. Some users say this IDE is slow, but I have not noticed it. Actually, it is not noticed for small applications which this article is talking about. Code completion is perfect, syntax highlighting super, and files management is so simple, we do not need any extra files, just a folder is enough. And menus are so proper and concise, I really liked this IDE. The best part is there are thousands of packages available which we can install for our specific requirements.



Here is my scenerio:

1) I want to develop a simple website: For this requirement, I need HTML, Javascript, CSS. And there should be some mechanism to view the output(better if it is live like Brackets). Yes it has everyting. To view live, we instll a package called browser-plus which previews a page, the page could be made live. And if we need, we can debug also. It has CSS and Javascript auto-completion and code highlighting.  So, for web pages, it is not the problem, everything is fine.

package: autoclose-html

2)  I want to write a script(Python) and run it: This is challenging, but it is not that difficult. We just need to install atom-runner which runs  the script.

Package for python: language-python

Python should be installed before you install the packages.

And there are several packages which you can search and install according to your requirement.

You can see how many times the packages are already downloaded which can give you a hint how popular (stable) is the package.


There are some interesting packages which help program development:

>> minimap
>> pigments
>> autocomplete-plus
>> autocomplete-xml
>> autocomplete-paths
>> terminal-plus
>> autosave
>> highlight-selected