I have my django application on ec2 instance. I am able run it on ec2 instance on localhost:8000. When I try to access that django application from outside of that ec2 instance, it doesn't show me "this site can't be reached". It is pinging
I see that you are running on localhost so it is not accessible from outside. Try running your server with command below and try to access with your server ip.
$ python manage.py runserver 0.0.0.0:8000
Go to your http://server-ip:8000
try to do telnet on that server on port 8000 and see if it works.
did u open port 8000 from security groups or not ! Most probably it is this issue.
Related
I created an EC2 instance. Installed Python 3.4 on it and then installed Django 1.10.6 on it. I was trying to develop my first django application
I started django server.
python manage.py runserver
I could not access at http://n.n.n.n:8000.
I get a ERR_CONNECTION_REFUSED error.
I went back to the EC2 instance and added the protocol/port to the security group. This is how it looks after I add the port/proptocol
Custom TCP Rule TCP 8000 0.0.0.0/0
Custom TCP Rule TCP 8000 ::/0
It did not work. I even added a rule to allow all traffic from anywhere. It still did not work.
However, if I start django server the following way
python manage.py runserver 0.0.0.0:8000
I get the following error:
DisallowedHost at /
Invalid HTTP_HOST header: 'n.n.n.n:8000'. You may need to add 'n.n.n.n' to ALLOWED_HOSTS.
If tried adding the IP to ProjectName/settings.py,
ALLOWED_HOSTS = ['n.n.n.n'] #Make sure your host IP is a string
I get the ERR_CONNECTION_REFUSED error
I can ping the IP. I can ssh (there is rule to allow ssh). Does not look like there is a firewall.
$ sudo service iptables status
iptables: Firewall is not running.
Why am I not able access http/django server?
Thanks
Actually, I must not have started the server right, when I added the host to the ProjectName/settings.py file. I tried again, and this time it worked.
So looks like
django server started on EC2 instances with the following
python manage.py runserver
may not be accessible from other machines.
django server started with the following
python manage.py runserver 0.0.0.0:8000
would be accessible from the Internet provided the IP address of the host machine is added to the ALLOWED_HOSTS in the ProjectName/settings.py file
ALLOWED_HOSTS = ['n.n.n.n'] #Make sure your host IP is a string
This is all in addition to the entries in the security group
The IP to the allowed hosts means the IP of the devices which you want to access Django from.
I'm working with PyCharm and I wonder if there's a way to make the Django embedded server accesible for the other hosts in my local network or I need to deploy my app on a dedicated web server such as Apache?
Now, I'm accessing my Django app like this in the browser:
http://localhost:8000/mypage/
and I want other users inside my local network to type:
http://my_private_ip:8000/mypage/
in their browsers and see the same page.
Just run the server (which is Django's embedded server FWIW, not PyCharm's) under http://my_private_ip:8000:
# ./manage.py help runserver
Usage: manage.py runserver [options] [optional port number, or ipaddr:port]
Starts a lightweight Web server for development.
(...)
# ./manage.py runserver my_private_ip:8000
Assuming a Unix environment.
You need to ensure the server is listening not on the lo interface but on all interfaces (or at least the one used to connect to the LAN).
If you can customize the way PyCharm launches the server, use 0.0.0.0 as the host, as in:
python manage.py runserver 0.0.0.0:8000
Your coworkers can then use your LAN IP address. If you don't know it, use $ ip a.
So, I have looked around stack overflow + other sites, but havent been able to solve this problem: hence posting this question!
I have recently started learning django... and am now trying to run it on ec2.
I have an ec2 instance of this format: ec2-xx-xxx-xx-xxx.us-west-2.compute.amazonaws.com on which I have a django app running. I changed the security group of this instance to allow http port 80 connections.
I did try to run it the django app the following ways: python manage.py runserver 0.0.0.0:8000 and python manage.py runserver ec2-xx-xxx-xx-xxx.us-west-2.compute.amazonaws.com:8000 and that doesnt seem to be helping either!
To make sure that there is nothing faulty from django's side, I opened another terminal window and ssh'ed into the instance and did a curl GET request to localhost:8000/admin which went through successfully.
Where am I going wrong? Will appreciate any help!
You are running the app on port 8000, when that port isn't open on the instance (you only opened port 80).
So either close port 80 and open port 8000 from the security group, or run your app on port 80.
Running any application on a port that is less than 1024 requires root privileges; so if you try to do python manage.py runserver 0.0.0.0:80 as a normal user, you'll get an error.
Instead of doing sudo python manage.py runserver 0.0.0.0:80, you have a few options:
Run a pre-configured AMI image for django (like this one from bitnami).
Configure a front end server to listen on port 80, and then proxy requests to your django application. The common stack here is nginx + gunicorn + supervisor, and this blog post explains how to set that up (along with a virtual environment which is always a good habit to get into).
Make sure to include your IPv4 Public IP address in the ALLOWED_HOSTS section in Django project/app/settings.py script...
I'm learning django to make a test website, I can run the site on my own laptop, and use the browser to visit 127.0.0.1 , it's ok
but when I do the same thing on my server, I bought a vps and a domain, I just can't telnet the port , the browser also can't connect, I don't know why
I do the following
python manage.py runserver 8080
on my laptop, 8080 port can be connected by telnet, but on my server , it can't
Two things.
Firstly, as the documentation explains, by default runserver only binds to the localhost interface, which means it is only available on a browser running on the same machine. To get it to be visible outside the local machine, you need to bind to an externally-visible address, or 0.0.0.0 for all addresses:
python manage.py runserver 0.0.0.0:8080
Secondly, as the documentation also explains, you should not be trying to use the development server in a production setting anyway. Use a proper webserver, eg Apache + mod_wsgi.
I have a django app on my local computer. I can access the application from a browser by using the url: http://localhost:8000/myapp/
But I cannot access the application by using the ip of the host computer: http://193.140.209.49:8000/myapp/ I get a 404 error.
What should I do? Any suggestions?
I assume you're using the development server. If so, then you need to specifically bind to your external IP for the server to be available there. Try this command:
./manage.py runserver 193.140.209.49:8000