The stack.env file referenced is a Portainer special. This is where Portainer would put a file containing all the environment variables set up in its UI.
To run it manually, you will need to copy `stack.env.example` to `stack.env` in the project root.
## Running database migrations
Now we need to run the database migrations in order to get a working database.
```shell
(env) $ python manage.py migrate
```
Note that these are automatically run by a step in the compose file in production.
You won't need to do that manually.
## Creating a superuser
In order to access Django admin, we need a superuser.
@ -32,28 +38,27 @@ Password (again):
Superuser created successfully.
```
## Running the server
```shell
(env) $ python manage.py runserver 8001
Starting development server at http://127.0.0.1:8001/
Quit the server with CONTROL-C.
```
As you've guessed, you can access it at http://127.0.0.1:8001/
## Running
The Docker Compose file is located in `docker/docker-compose.prod.yml`.
There is a shortcut to run it: `make run`.
## Troubleshooting
Sometimes Django is difficult.
## Stopping
To stop the containers, run `make stop`.
> `django.db.utils.OperationalError: no such table: core_user`
## Setup
This setup may be different from what you've seen before.
This means you haven't yet run the migrations. See above.
### Uvicorn
There is a Uvicorn worker in the `app` container listening on `/var/run/socks/app.sock`. This is the bit that runs the actual code.
### Updating the models
If you make changes to the database models, you will need to create new migrations.
Do this like so:
```shell
(env) $ python manage.py makemigrations
```
Afterwards, we can apply them as normal.
```shell
(env) $ python manage.py migrate
```
### Nginx
Nginx runs in the `nginx` container and proxies requests to Uvicorn thanks to a mounted and shared directory. No TCP required.
### Pre-start steps
There's a few commands running before start to ensure Django works correctly.
#### Migration
The `migration` container step runs the migrations so you don't need to remember to do it.
#### Collectstatic
The `collectstatic` container step collects all static files from plugins and puts them in the `core/static` folder. This folder is served straight from Nginx without going through Uvicorn.