Configure nginx web server

Warning

This section depens on configuration of gunicorn web server. Check previous section to resolve problems.

Step 1 - Create custom recipe

As gunicorn, nginx web server is basic functionality of the system. Custom recipe which will append to default nginx’s recipe will be placed inside recipes-base folder.

mkdir -p ../meta-golemos/recipes-base/nginx/files
touch ../meta-golemos/recipes-base/nginx/nginx_%.bbappend

In this custom recipe place this instructions.

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

SRC_URI += " \
    file://datalogger.local \
    file://datalogger-setup.local \
"

SYSTEMD_AUTO_ENABLE = "enable"
SYSTEMD_SERVICE__append = " nginx.service "

do_install_append () {
    install -d ${D}${sysconfdir}/nginx/sites-available
    install -D -m 644 ${WORKDIR}/datalogger.local ${D}${sysconfdir}/nginx/sites-available/
    install -D -m 644 ${WORKDIR}/datalogger-setup.local ${D}${sysconfdir}/nginx/sites-available/

    rm -rf ${D}${sysconfdir}/nginx/sites-enabled/default_server
    ln -s ${sysconfdir}/nginx/sites-available/datalogger-setup.local ${D}${sysconfdir}/nginx/sites-enabled/
}

Note

This configuration remove default server from sites-enabled and place setup page as a default server.

Note

Original recipe is only available inside meta-webserver layer. Check dependency section to learn how to satisfy dependencies.

Step 2 - Create configuration files

Inside files folder create two configuration files. One will be for setup page and other will be for main page after setting up the device.

Main page

touch ../meta-golemos/recipes-base/nginx/files/datalogger.local

Output for datalogger.local file:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/datalogger.local;
    index index.html index.htm;

    server_name datalogger.local;

    location / {
        try_files $uri $uri/ =404;
    }
}

Setup page

touch ../meta-golemos/recipes-base/nginx/files/datalogger-setup.local

Output for datalogger-setup.local file:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name datalogger-setup.local;

    location / {
        proxy_pass http://unix:/run/datalogger_setup_page.sock;
    }
}

Summary

From now you can write device IP inside browser and see websites hosted on custom Linux distribution.

After all of this steps your layer structure should look like this.

../meta-golemos
├── COPYING.MIT
├── README
├── conf
│   ├── bblayers.conf.sample
│   ├── conf-notes.txt
│   ├── distro
│   │   └── golemos.conf
│   ├── layer.conf
│   └── local.conf.sample
├── recipes-base
│   ├── datalogger-setup-page
│   │   └── datalogger-setup-page.bb
│   ├── nginx
│   │   ├── files
│   │   │   ├── datalogger-setup.local
│   │   │   └── datalogger.local
│   │   └── nginx_%.bbappend
│   └── python3-gunicorn
│       ├── files
│       │   ├── datalogger_setup_page.service
│       │   └── datalogger_setup_page.socket
│       └── python3-gunicorn_%.bbappend
├── recipes-connectivity
│   ├── hostapd
│   │   ├── files
│   │   │   ├── hostapd@.service
│   │   │   └── wlan0.conf
│   │   └── hostapd_%.bbappend
│   ├── kea
│   │   ├── files
│   │   │   ├── kea-dhcp4.conf
│   │   │   └── kea-dhcp4.service
│   │   └── kea_%.bbappend
│   └── wpa-supplicant
│       ├── files
│       │   └── wpa_supplicant-nl80211-wlan0.conf
│       └── wpa-supplicant_%.bbappend
├── recipes-core
│   ├── images
│   │   ├── datalogger-dev-image.bb
│   │   ├── datalogger-extended-image.bb
│   │   └── datalogger-image.bb
│   ├── packagegroups
│   │   ├── datalogger-base-packagegroup.bb
│   │   ├── datalogger-core-packagegroup.bb
│   │   ├── datalogger-dev-packagegroup.bb
│   │   └── datalogger-extended-packagegroup.bb
│   ├── systemd
│   │   └── systemd_%.bbappend
│   └── systemd-conf
│       ├── files
│       │   └── wlan.network
│       └── systemd-conf_%.bbappend
└── recipes-example
    └── example
        └── example_0.1.bb