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
Related
I'm working Django Project.
How to create a Public IP permanently for Localhost(127.0.0.1:8000) IP in Django Project.
After Creating Public URL, how to allow access for Other users without Source Code
when I run python manage.py runserver x.x.x.x:8088 in command prompt it is generating a URL with specified IP address. But when I share/open this URL with others it is not working
Can any one help me to configure this issue.
Thanks in advance.
You can use ngrok for this purpose
After running the server, you can open the HTTP(s) tunnel with ngrok
./ngrok 8000
and you will get the public URL of your service.
On free version the URL will be vary each time you run ngrok
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.
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.
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...
So for a school project, I have to follow the steps in the "Writing your first Django App" Tutorial on Django's website, but we're supposed to have it on our EC2 instances, which are running Ubuntu 12.04.
In the tutorial, it says:
Now, open a Web browser and go to “/admin/” on your local domain – e.g., http://127.0.0.1:8000/admin/. You should see the admin’s login screen:
That must mean I have to access the EC2's local domain on my computer, right? How should I go about doing this?
I've tried (with my correct address in the x's) "ec2-xx-xxx-xx-xx.us-west-2.compute.amazonaws.com/home/admin/", "ec2-xx-xxx-xx-xx.us-west-2.compute.amazonaws.com/admin/", and even using the user's directory I'm using "ec2-xx-xxx-xx-xx.us-west-2.compute.amazonaws.com/user/admin/".
I put the project in the user's folder, so it's in /home/user/my_django_project/
I've accessed and used EC2 successfully before by putting PHP and HTML projects in the /home/user/public_html/ folder, but I have no clue what to do for this.
Run the following command in the Django application folder:
python manage.py runserver 0.0.0.0:8000
Add a rule to your Security Group to allow Inbound TCP through port 8000. You can use a Custom TCP Rule to specify that only port 8000 be allowed in.
Open your browser and go to the following link:
http://<EC2_ADDRESS>.amazonaws.com:8000/admin/
The admin page should now load and you should be able to see the GET requests from your local computer on your Amazon server. e.g [29/Mar/2015 03:35:24] "GET /admin HTTP".
I guess you run Django via the manage.py runserver command? If so Django is currently only listening on 127.0.0.1. Start django using
manage.py runserver 0.0.0.0
in order for it to listen on all IPs. You should then, if configured properly, be able to reach it via "ec2-xx-xxx-xx-xx.us-west-2.compute.amazonaws.com:8000/admin/".