PyInventory/deployment
JensDiemer e3d4b42390 Update "deployment/project.env", too 2021-04-11 15:59:45 +02:00
..
caddy More generic deployment: rename "inventory" to "django" 2020-11-22 13:02:15 +01:00
django Bugfix Dockerfile and installation of the project 2020-11-23 18:37:03 +01:00
postgres Quote DB name and user 2020-11-14 14:32:38 +01:00
scripts Merge remote-tracking branch 'origin/deployment' into merge-deploy-src 2020-11-13 20:41:48 +01:00
.dockerignore Merge remote-tracking branch 'origin/deployment' into merge-deploy-src 2020-11-13 20:41:48 +01:00
.gitignore Replace .env with project.env 2020-11-23 18:50:41 +01:00
Dockerfile Bugfix Dockerfile and installation of the project 2020-11-23 18:37:03 +01:00
Makefile bugfix "make reload_django" 2020-11-22 13:39:00 +01:00
README.creole Release as v0.8.1 2020-12-09 20:16:10 +01:00
common.env Set XDG_CACHE_HOME and PYTHONUNBUFFERED in Dockerfile 2020-11-23 18:23:00 +01:00
compose.dev.sh Replace .env with project.env 2020-11-23 18:50:41 +01:00
compose.sh Replace .env with project.env 2020-11-23 18:50:41 +01:00
docker-compose.dev.yml cleanup docker-compose.dev.yml 2020-11-23 18:22:32 +01:00
docker-compose.yml Bugfix Dockerfile and installation of the project 2020-11-23 18:37:03 +01:00
project.env Update "deployment/project.env", too 2021-04-11 15:59:45 +02:00
pyproject.toml Merge remote-tracking branch 'origin/deployment' into merge-deploy-src 2020-11-13 20:41:48 +01:00

README.creole

= PyInventory - deployment instruction

Install PyInventory on a rood server via docker-compose.


**Note:**

* PyInventory is also available as [[https://yunohost.org|YunoHost]] App via [[https://github.com/YunoHost-Apps/pyinventory_ynh|pyinventory_ynh]]
* This README contains only the instruction to install PyInventory on a root server.
* Read [[https://github.com/jedie/PyInventory/tree/master#readme|the main README]] for local development installation.


Pull requests welcome!


== Project structure

There are two main directories:

|= directory |= description
| **[[https://github.com/jedie/PyInventory/tree/master/src|/src/]]**               | The main PyInventory source code
| **[[https://github.com/jedie/PyInventory/tree/master/deployment|/deployment/]]** | deploy PyInventory for production use case


== deploy

Install PyInventory on a root server:

**Note:**

* Running a public web server is a lot of work and brings some risks.
* This instructions are only the basics to get PyInventory working.
* To run the server safely, more work should be done, which is not explained here.
* Run at your own risk! No warranty is given.


=== prepare root server

Here some steps for a fresh created root server:

Update all packages, e.g.:
{{{
apt update && apt -y full-upgrade
}}}

Setup a normal user. You may use [[https://github.com/jedie/PyInventory/blob/deployment/scripts/setup_user.sh|scripts/setup_user.sh]]


===  Setup SSH services

{{{
~# nano /etc/ssh/sshd_config
}}}

Change e.g.:
{{{
Port xxxx
PermitRootLogin no
PasswordAuthentication no
}}}
(Changing the Port may need to change a firewall/network settings)

{{{
# restart SSH deamon:
~# service ssh restart

# Display and follow the ssh log output to see connection errors:
~# journalctl -f -u ssh
}}}

* Keep the current SSH session (with the log output) open!
* Update your {{{~/.ssh/config}}}
* Try to connect as the new, normal user in a **separate** terminal

Only after a working new connection: Terminate the first root SSH session ;)


=== setup unattended-upgrades

{{{
~$ sudo apt install unattended-upgrades
~$ sudo dpkg-reconfigure unattended-upgrades
~$ sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
}}}


=== install requirements

Install docker, see: https://docs.docker.com/engine/install/ubuntu/

install some base packages, e.g.:
{{{
~$ sudo apt install git make
}}}



=== install PyInventory

{{{
# Checkout the deployment branch:
~$ git clone https://github.com/jedie/PyInventory.git
~$ cd PyInventory/deployment/

# Theses Makefile targets exists:
~/PyInventory/deployment$ make
_________________________________________________________________
*Deployment* Makefile

install-poetry       install or update poetry
install              install requirements to setup project
update               update the sources and docker containers
up                   Start containers via docker-compose
down                 Stop all containers
prune                Cleanup docker
build                Update docker container build
init_postgres        Create postgres database
createsuperuser      Create super user
shell_django         Go into bash shell in django container
shell_postgres       Go into bash shell in postgres container
shell_caddy          Go into bash shell in caddy container
caddy_environ        Prints the caddy environment
logs                 Display docker logs from all containers
logs_postgres        Display docker logs from postgres container
logs_django          Display docker logs from django container
logs_caddy           Display docker logs from caddy container
dbbackup             Backup database
dbrestore            Restore a database backup
restart              Restart all containers
upgrade_django       Upgrade "django" container and restart it
restart_caddy        Restart caddy container
reload_caddy         Reload Caddy server
reload_django        Reload server in "django" container
}}}

Install, e.g.:

{{{
# install or update poetry:
~/PyInventory/deployment$ make install-poetry
}}}

To keep poetry running (PATH must be expand) just logout and login ;)

{{{
# install requirements (e.g.: docker-compose) via poetry:
~/PyInventory/deployment$ make install
}}}

Create a {{{.env}}} file in project root directory with these content, e.g.:
{{{
~/PyInventory/deployment$ touch .env
~/PyInventory/deployment$ nano .env
~/PyInventory/deployment$ cat .env
# Your Public domain:
HOSTNAME=domain.tld

# eMail address for Let's encrypt:
LETSENCRYPT_EMAIL=webmaster@domain.tld
}}}

For local testing of the docker-compose setup, used this values:
{{{
HOSTNAME=localhost
LETSENCRYPT_EMAIL=internal
}}}
(Caddy will create a self signed https certificate)

Start containers via docker-compose:
{{{
~/PyInventory/deployment$ make up
}}}

Notes: At the first start it takes a little while until the database is created ;)

Create first super user:
{{{
~/PyInventory/deployment$ make docker_createsuperuser
}}}

* Now you should be able to connect to your PyInventory installation and login with created super user.
* Redirect from **http** to **https** should work.
* Let's Encrypt certificate should be installed and valid.
* Containers should be restarted after a server reboot


=== Maintenance

TO keep everything up-to-date do the following steps:

Update the OS call:
{{{
~/PyInventory/deployment$ sudo ./scripts/apt-distupgrade.sh
}}}

Update PyInventory installation and docker containers:
{{{
~/PyInventory/deployment$ make update
}}}

This will do:

* update the source code
* update docker-compose and all requirements
* Pull and rebuild all docker containers
* restart all docker containers

Take a look at [[https://github.com/jedie/PyInventory/blob/deployment/scripts/apt-cleanup.sh|scripts/apt-cleanup.sh]] to keep your system clean.


== links ==

| Homepage   | http://github.com/jedie/PyInventory

Web server stuff:

* https://help.ubuntu.com/community/Security
* https://help.ubuntu.com/lts/serverguide/automatic-updates.html
* https://help.ubuntu.com/community/AutomaticSecurityUpdate


== donation ==

* [[https://www.paypal.me/JensDiemer|paypal.me/JensDiemer]]
* [[https://flattr.com/submit/auto?uid=jedie&url=https%3A%2F%2Fgithub.com%2Fjedie%2FPyInventory%2F|Flattr This!]]
* Send [[http://www.bitcoin.org/|Bitcoins]] to [[https://blockexplorer.com/address/1823RZ5Md1Q2X5aSXRC5LRPcYdveCiVX6F|1823RZ5Md1Q2X5aSXRC5LRPcYdveCiVX6F]]