Notes tagged with "Webapp"
Web Application Setup - Application Prerequisits
Create Application User & Directory Structure
-
Create application user:
www-appname... sudo adduser www-appname --disabled-login \ --disabled-password \ --ingroup www-data \ --home /var/lib/www/appname \ --shell /bin/false -
Create application directory:
... sudo mkdir -p /var/www/appname -
Set ownership of this directory:
... sudo chown appname:www-data /var/www/appnameAlso add admin user access:
# not sure what the [d:efalut] option does, but alone, that doesn't grant access ... sudo setfacl -R -m d:u:adminuser:rwx /var/www/appname # this grants access ... sudo setfacl -R -m u:adminuser:rwx /var/www/appname -
Create the rest of the basic directory structure:
Web Application Setup - Build The Server
New Ubuntu VPS Set Up
We’ve assuming we’ve created the initial droplet and that we are able to ssh as root into the box. Next steps are as follows:
Add Admin User Account
-
SSH into the droplet as root:
Run these commands on the server
# create your admin user ... adduser usrnme # set up ssh key # this was the old way: # ... mkdir /home/usrnme/.ssh # ... chmod 700 /home/usrnme/.ssh # ... cp /root/.ssh/authorized_keys /home/usrnme/.ssh # ... chown -R usrnme:usrnme /home/usrnme/.ssh/authorized_keys # ... chmod 600 /home/usrnme/.ssh/authorized_keys # this is shorter and : ... rsync --archive --chown=usrnme:usrnme ~/.ssh /home/usrnme # add user to sudo ... usermod -aG sudo usrnme -
Push any user config files necessary from your local computer to the new server from your development environment:
Web Application Setup - Django Setup
DJANGO SITE SETUP
-
Create virutualenv for you application:
... cd /var/www/appname ... python3 -m virtualenv --python=python3 venv -
Copy the basic application files to your new app directory:
From your development machine:
-
scp manage.py wsgi.py adminusr@server:/var/www/appname
-
scp django.settings.ini adminusr@server:/var/www/appname/config
-
scp requirements.txt adminusr@server:/var/www/appname/packages
-
scp appsite-0.1.0.tar.gz adminusr@server:/var/www/appname/packages
-
scp app-plugin-0.1.0.tar.gz adminusr@server:/var/www/appname/packages
Your directory structure should now look like:
appname ├── config │ ├── django.settings.ini ├── data ├── logs ├── manage.py ├── packages │ ├── appsite-0.1.0.tar.gz │ ├── app-plugin-0.1.0.tar.gz │ ├── requirements.txt ├── static └── wsgi.pyWe’ll describe these files in more detail later.
-
Web Application Setup - Flask Setup
FLASK SITE SETUP
-
Create virutualenv for you application:
... cd /var/www/appname ... python3 -m virtualenv --python=python3 venv -
Copy the basic application files to your new app directory:
From your development machine:
-
scp manage.py wsgi.py adminusr@server:/var/www/appname
-
scp django.settings.ini adminusr@server:/var/www/appname/config
-
scp requirements.txt adminusr@server:/var/www/appname/packages
-
scp appsite-0.1.0.tar.gz adminusr@server:/var/www/appname/packages
-
scp app-plugin-0.1.0.tar.gz adminusr@server:/var/www/appname/packages
Your directory structure should now look like:
appname ├── config │ ├── django.settings.ini ├── data ├── logs ├── manage.py ├── packages │ ├── appsite-0.1.0.tar.gz │ ├── app-plugin-0.1.0.tar.gz │ ├── requirements.txt ├── static └── wsgi.pyWe’ll describe these files in more detail later.
-
Web Application Setup - Install Software
Install Software
-
Install Python 3
Good news, python 3 is already install on Ubuntu 17.10.
-
Install other top level software packages:
You may need to run ubuntu upgrade before insalling:
... sudo apt-get update ... sudo apt-get upgradeInstall the following packages:
... sudo apt-get install python3.7 ... sudo apt-get install python3.7-venv ... sudo apt-get install python3-pip ... sudo apt-get install uwsgi-core ... sudo apt-get install uwsgi-plugin-python3 ... sudo apt-get install nginxAll other python packages will be installed in the applications virtual environment.
Web Application Setup - Nginx Set Up
NGINX SET UP
-
Create your apps nginx configuration
... touch /var/www/appname/config/nginx-appname.cfg -
The content of your
nginx-appname.cfgfiles should look like this:upstream appname { server unix:/var/run/uwsgi/appname.socket; } server { listen 80; server_name SERVER_IP SERVER_DOMAIN; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /var/www/appname/; } location / { uwsgi_pass appname; include /etc/nginx/uwsgi_params; } } -
Link your nginx config file to nginx’ site config directory:
... cd /etc/nginx/sites-enabled ... ln -s /var/www/appname/config/appname-nginx.cfg appname -
You can check your nginx config by running the following:
Web Application Setup - Server Security
Optimizing Ubuntu Server
Services and programs you can likely kill:
This was taken from this site
-
BASICS
Killing these didn’t impact the system at all when I tested:
... sudo apt remove snapd -y --purge ... sudo apt remove lxcfs -y --purge ... sudo apt remove policykit-1 -y --purge ... ... sudo apt remove lvm2 -y --purge ... sudo apt remove at -y --purge ... sudo apt remove mdadm -y --purge ... sudo apt remove open-iscsi -y --purge ... sudo apt remove accountsservice -y --purge -
EXTREME
Web Application Setup - uWSGI Set Up
Set Up uWSGI To Server Your Application
-
Create your uWSGI configuration file:
... touch /var/www/appname/config/uwsgi-appname.ini -
Contents of your
uwsgi-appname.inishould look like this:[uwsgi] plugins = python3,logfile chdir = /var/www/appname home = /var/www/appname/venv wsgi-file = /var/www/appname/wsgi.py master = True cheap = True idle = 600 die-on-idle = True manage-script-name = True -
Link your config file so uwsgi can find it:
... cd /etc/uwsgi/apps-enabled ... ln -s /var/www/appname/config/uwsgi-appname.ini appname.ini
SYSTEMD UWSGI SET UP
-
Create systemd socket and server files for your uwsgi app: