Deploy

There are several options for sanic server deployment:

Every method has own benefits and disadvantages.


Running sanic servers behind nginx makes several advantages:

But this way requires more complex configuration.

To run servers one needs to:

  1. copy the systemd files to /etc/systemd/system:

    sudo cp ./deploy/systemd-luna-tasks@.service /etc/systemd/system/
    sudo cp ./deploy/systemd-luna-tasks-worker@.service /etc/systemd/system/
    
  2. change copied files’ in /etc/systemd/system/ (venv, paths, etc.)

  3. reload daemons:

    sudo systemctl daemon-reload
    
  4. run several Workers

    sudo systemctl start systemd-luna-tasks-worker@5051..5059
    
  5. run one Application

    sudo systemctl start systemd-luna-tasks@5050
    

Template configuration files for nginx are presented below. For more information, you can visit sanic.readthedocs.io.

Configuration file for nginx

upstream aiohttp {
    server 127.0.0.1:5051 fail_timeout=0;
    server 127.0.0.1:5052 fail_timeout=0;
}

server {
    listen 5050;
    client_max_body_size 4G;

    server_name 127.0.0.1;

    location / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_redirect off;
      proxy_buffering off;
      proxy_pass http://aiohttp;
    }
}

Configuration file for systemd

Config should be located in directory /etc/systemd/system/

Luna-Tasks service config:

[Unit]
Description=Luna-Tasks Application on port %i
After=network.target

[Service]
Restart=always
RestartSec=5
User=luna
Group=luna
SyslogIdentifier=luna-tasks-app-%i
WorkingDirectory=/var/lib/luna/current/luna-tasks/luna_tasks

# Run from luna-configurator
ExecStart=/var/lib/luna/current/luna-tasks/venv/bin/python ./run.py --port=%i --workers=1 --config-reload=0 --luna-config=http://127.0.0.1:5070/1 --log_suffix=%i
# Run from config file
# ExecStart=/var/lib/luna/current/luna-tasks/venv/bin/python ./run.py --port=%i --workers=1 --config-reload=0 --log_suffix=%i --config=./configs/config.conf

[Install]
WantedBy=multi-user.target

Tasks Worker config:

[Unit]
Description=Luna-Tasks Worker on port %i
After=network.target

[Service]
Restart=always
RestartSec=5
User=luna
Group=luna
SyslogIdentifier=luna-tasks-worker-%i
WorkingDirectory=/var/lib/luna/current/luna-tasks/luna_tasks

# Run from luna-configurator
ExecStart=/var/lib/luna/current/luna-tasks/venv/bin/python ./run.py --service-type=tasks_worker --port=%i --workers=1 --config-reload=0 --luna-config=http://127.0.0.1:5070/1 --log_suffix=%i
# Run from config file
# ExecStart=/var/lib/luna/current/luna-tasks/venv/bin/python ./run.py --service-type=tasks_worker --port=%i --workers=1 --config-reload=0 --log_suffix=%i --config=./configs/config.conf

[Install]
WantedBy=multi-user.target