About
My Buisness is a business management tool featuring featuring accounts, invoices, partners, projects, and server.
Installation
Make sure Python >= 3.6 and pip are installed before proceeding with the installation instructions.
Note: If you are following these instructions when deploying My Buisness, it is highly recommended that you clone the repository in /srv.
-
Clone this repository.
-
Change the directory to
my-buisnessusing$ cd my-buisness/. -
Create a virtual environment using
$ python3 -m venv venv. -
Activate the virtual environment using
$ source venv/bin/activate. -
Install the external
pdftkdependency using$ apt install pdftkfor Debian based distributions.Note: You may face issues installing
pdftkon Ubuntu 18.04. Visit this link for further instructions. -
Install the
Pythondependencies using$ pip install -r requirements.txt.Note: You can safely ignore any errors about
bdist_wheel. -
Change the directory to
My Businessusing$ cd My Business/. -
Create
config.iniby making of copy ofconfig.ini.defaultsusing$ cp config.ini.defaults config.ini. -
Edit
config.iniwith your preferred text editor and make changes to the configuration (if necessary).Note:My Buisness is using a SQLite3 database while
DEBUG=True. You don't need to specify a database user or password. -
Apply the migrations using
$ python manage.py migrate. -
Create a superuser account using
$ python manage.py createsuperuser. -
Enable the
Cron Jobsusing$ python manage.py crontab add. (You need to be logged in as the user that's running the server).
You should now have a development version of the My Buisnessaccessible atlocalhost:8000or127.0.0.1:8000`.
Development
Always activate the virtual environment before performing operations.
-
Run the server using
$ python manage.py runserver. -
Stop the server by pressing
Ctrl-C.
If you want My Buisness to send emails to the console while developing, edit my-buisness/common/settings.py and replace the value of EMAIL_BACKED with 'django.core.mail.backends.console.EmailBackend'. Don't forget to undo this before committing!
Deployment
Follow the installation instructions before continuing. If you are running the Django server, press Control-C to close it.
Make sure you have root privileges.
Django configuration
-
Collect the static files (by default in
/var/www/my-buisness/static/) using$ python manage.py collectstatic. -
Generate a
SECRET_KEYusing$ python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'. -
Copy the returned key to your clipboard because we will need it soon.
-
Edit
config.iniwith your preferred text editor and replace the currentSECRET_KEYwith the one you generated earlier (it's in your clipboard, right!?).
Firewall configuration
If you have a firewall set up (recommended), make sure to open ports 80 and 443.
-
If you have
UFWset up:- Run
$ ufw allow http. - Run
$ ufw allow https.
- Run
-
If don't have
UFWand have onlyiptablesset up:- Open
/etc/sysconfig/iptablesfor editing using your preferred text editor. - Add the following lines to the file if they do not already exist, then save and exit:
- Open
-A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
Installing additional dependencies
- Install Gunicorn using
$ pip install gunicorn. - Install Nginx using
$ apt install nginx. - Install Certbot using
$ apt install python3-certbot-nginx.
Note: Make sure to edit the file and directory paths accordingly in the instructions below.
Setting up the Gunicorn service
- Edit
/etc/systemd/system/gunicorn_bt.socketusing your preferred text editor and add the following to the file:
[Unit]
Description=gunicorn bt socket
[Socket]
ListenStream=/run/gunicorn_bt.sock
[Install]
WantedBy=sockets.target
- Edit
/etc/systemd/system/gunicorn_bt.serviceusing your preferred text editor and add the following to the file:
[Unit]
Description=gunicorn bt daemon
Requires=gunicorn_bt.socket
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/srv/my-buisness
ExecStart=/srv/business-tracer/venv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn_bt.sock \
common.wsgi:application
[Install]
WantedBy=multi-user.target
- Start the Gunicorn socket using
$ systemctl start gunicorn_bt.socket. - Enable the Gunicorn socket (to run at startup) using
$ systemctl enable gunicorn_bt.socket.
Setting up Nginx
- Remove the
defaultconfiguration fromsites-enabledusing$ rm /etc/nginx/sites-enabled/default. - Edit
/etc/nginx/sites-available/blogusing your preferred text editor and add the following to the file:
*Note: Make sure to replace YOUR_FULLY_QUALIFIED_DOMAIN_NAME with your FQDN.
server {
listen 80;
server_name YOUR_FULLY_QUALIFIED_DOMAIN_NAME;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /var/www/my-buisness;
}
location /media/ {
root /var/www/my-buisness;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn_bt.sock;
}
}
- Enable the Nginx config using
$ ln -s /etc/nginx/sites-available/my-buisness /etc/nginx/sites-enabled/my-buisness. - Restart Nginx using
$ systemctl restart nginx.
Setting up the HTTPS certificate
*Note: Make sure to replace YOUR_FULLY_QUALIFIED_DOMAIN_NAME with your FQDN.
- Create an HTTPS certificate with Certbot using
$ certbot --nginx -d YOUR_FULLY_QUALIFIED_DOMAIN_NAME. - Follow the script instructions.
- You should choose option 2 (Redirect) when the script asks if you want users to be redirected to the
HTTPSversion of the website if they try accessing theHTTPversion.
Good job! You should now have a running instance of My Buisness.
