peachykeen
peachykeen

Reputation: 4411

How do I get a server up and running in a virtual machine through only command line?

I wrote a server application in Python with Flask and now I would like to get it up and running on a virtual machine I have set up. Thus, I would really appreciate guidance in two areas.

  1. How do I get a server setup so that it is perpetually running, and other computers can access it? The computers can be in the same network so I don't have to worry about a domain name or anything. I am just looking for multiple devices to be able to access it. I am currently able to run the server on my local machine and everything works just fine.

  2. I have my virtual linux machine set up remotely, so I SSH into it and do everything from command line, but I am a bit lost as to how to do the aforementioned stuff from the command line.

Any guidance/help is much appreciated! The web-searching I have done hasn't pointed me in the right direction. I apologize if any of my terminology was off (if so, please feel free to correct me so I learn!). Thank you!

Upvotes: 0

Views: 92

Answers (1)

Mike
Mike

Reputation: 2614

Use systemd on Ubuntu, /etc/systemd/system, for a simple setup (probably not ideal for a production setup though).

I do this sometimes for Python Flask app that I'm prototyping. First, put your application code in /opt/my-app. I usually just cd /opt and git clone a repo there. Then, create a file called /etc/systemd/system/my-app.service. In that file, add the following:

[Unit]
Description=My App daemon
After=network.target postgresql.service 
Wants=postgresql.service 

[Service]
EnvironmentFile=/etc/sysconfig/my-app
WorkingDirectory=/opt/my-app/ # <- this is where your app lives
User=root
Group=root
Type=simple
ExecStart=/usr/bin/python server.py # <- this starts your app
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

Next, paste any environment variables you have into a file called /etc/sysconfig/my-app like:

DB_HOST=localhost
DB_USER=postgres 
DB_PASSWORD=postgres 
DB_NAME=postgres

Then you can do:

service my-app start
service my-app stop
service my-app restart

and then you can hit the app running on the servers IP and port (just like if you ran python app.py or python server.py. To check the logs for your daemon process, if it doesn't seem to work out, you can run:

journalctl -u my-app -e 

In production, I'm not sure this is the best setup, probably better to look into something like ngnix. But I do this for prototypes all the time and it's pretty great.

Upvotes: 1

Related Questions