# configuration/constants/nginx.constants.ts

> 84 lines of code and 60 definitions.

Tree: Bane's Lab Deploy
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/deploy#file-deploy-configuration-constants-nginx-constants-ts
Source text: https://banes-lab.com/source/deploy/configuration/constants/nginx.constants.ts.txt

Listed in [configuration/constants](https://banes-lab.com/api/source/deploy/configuration/constants.md), after [configuration/constants/discord.constants.ts](https://banes-lab.com/source/deploy/configuration/constants/discord.constants.ts.md) and before [configuration/constants/ssh.constants.ts](https://banes-lab.com/source/deploy/configuration/constants/ssh.constants.ts.md).

## Definitions

- `NGINX_PARENT` (lexical_declaration, line 4, exported)
- `NGINX_FOLDER` (lexical_declaration, line 6, exported)
- `NGINX_ROOT` (lexical_declaration, line 8, exported)
- `MAIN_CONFIG` (lexical_declaration, line 10, exported)
- `SITES_FOLDER` (lexical_declaration, line 12)
- `SITE_NAME` (lexical_declaration, line 14, exported)
- `SCRIPTS_FOLDER` (lexical_declaration, line 16)
- `REMOTE_SCRIPTS` (lexical_declaration, line 18, exported)
- `SCRIPT_SOURCE_EXTENSION` (lexical_declaration, line 20, exported)
- `NAME_SEPARATOR` (lexical_declaration, line 22, exported)
- `SCRIPT_TARGET_EXTENSION` (lexical_declaration, line 24, exported)
- `NODE_PROTOCOL` (lexical_declaration, line 26, exported)
- `SCRIPT_STAGING_PREFIX` (lexical_declaration, line 28, exported)
- `REMOTE_SITE_CONFIG` (lexical_declaration, line 30, exported)
- `SITE_LINK` (lexical_declaration, line 32, exported)
- `FULL_ARCHIVE` (lexical_declaration, line 34)
- `REMOTE_FULL_ARCHIVE` (lexical_declaration, line 36, exported)
- `SETUP_STAGING` (lexical_declaration, line 38, exported)
- `FULL_BACKUP_PREFIX` (lexical_declaration, line 40, exported)
- `CONFIG_BACKUP_SUFFIX` (lexical_declaration, line 42, exported)
- `BACKUP_MARKER` (lexical_declaration, line 44, exported)
- `FILE_TEST_COMMAND` (lexical_declaration, line 46, exported)
- `REMOVE_FILE_COMMAND` (lexical_declaration, line 48, exported)
- `PREVIEW_LENGTH` (lexical_declaration, line 50, exported)
- `TEST_COMMAND` (lexical_declaration, line 52, exported)
- `ERROR_LOG_DIRECTIVE` (lexical_declaration, line 54, exported)
- `LOG_SIZE_COMMAND` (lexical_declaration, line 56, exported)
- `LOG_TAIL_COMMAND` (lexical_declaration, line 58, exported)
- `RELOAD_COMMAND` (lexical_declaration, line 60, exported)
- `STATUS_COMMAND` (lexical_declaration, line 62, exported)
- `SERVICE_ENABLE_COMMAND` (lexical_declaration, line 64, exported)
- `ACTIVE_STATUS` (lexical_declaration, line 66, exported)
- `CONFIG_MODE` (lexical_declaration, line 68, exported)
- `CONFIG_OWNER` (lexical_declaration, line 70, exported)
- `NGINX_SOURCE` (lexical_declaration, line 72, exported)
- `NGINX_PACKAGE` (lexical_declaration, line 79, exported)
- `MODULE_PACKAGES` (lexical_declaration, line 81, exported)
- `PACKAGE_SOURCES` (lexical_declaration, line 83, exported)
- `SOURCE_MODULES` (lexical_declaration, line 88, exported)
- `BUILD_PACKAGES` (lexical_declaration, line 98, exported)
- `MODULES_FOLDER` (lexical_declaration, line 100, exported)
- `BUILD_MARKER_SUFFIX` (lexical_declaration, line 102, exported)
- `PREVIOUS_SUFFIX` (lexical_declaration, line 104, exported)
- `MODULE_LOADERS` (lexical_declaration, line 106, exported)
- `CODENAME_COMMAND` (lexical_declaration, line 114, exported)
- `ARCHITECTURE_COMMAND` (lexical_declaration, line 116, exported)
- `PACKAGE_STATUS_COMMAND` (lexical_declaration, line 118, exported)
- `PACKAGE_VERSION_FIELD` (lexical_declaration, line 120, exported)
- `PACKAGE_STATUS_FIELD` (lexical_declaration, line 122, exported)
- `CONFIGURED_STATUS` (lexical_declaration, line 124, exported)
- `PACKAGE_LOCK_SECONDS` (lexical_declaration, line 126)
- `PACKAGE_LOCK_WAIT` (lexical_declaration, line 128, exported)
- `APT` (lexical_declaration, line 130)
- `PACKAGE_INDEX_COMMAND` (lexical_declaration, line 132, exported)
- `PACKAGE_INSTALL_COMMAND` (lexical_declaration, line 134, exported)
- `PACKAGE_REVERT_COMMAND` (lexical_declaration, line 136, exported)
- `PACKAGE_REMOVE_COMMAND` (lexical_declaration, line 138, exported)
- `PULL_COMMANDS` (lexical_declaration, line 140, exported)
- `PULL_FULL_COMMANDS` (lexical_declaration, line 142, exported)
- `PUSH_COMMANDS` (lexical_declaration, line 144, exported)

## Contained in

- [configuration/constants](https://banes-lab.com/anatomy/deploy/folder-deploy-configuration-constants.md)

## Source

```typescript
import type { ModuleLoader, PackageSource, SourceArchive, SourceModule } from "#types/deployment.types";
import { REMOTE_STAGING } from "#configuration/constants/deployment.constants";

export const NGINX_PARENT = "/etc";

export const NGINX_FOLDER = "nginx";

export const NGINX_ROOT = `${NGINX_PARENT}/${NGINX_FOLDER}`;

export const MAIN_CONFIG = "nginx.conf";

const SITES_FOLDER = "sites-available";

export const SITE_NAME = "banes-lab";

const SCRIPTS_FOLDER = "js";

export const REMOTE_SCRIPTS = `${NGINX_ROOT}/${SCRIPTS_FOLDER}`;

export const SCRIPT_SOURCE_EXTENSION = ".ts";

export const NAME_SEPARATOR = ".";

export const SCRIPT_TARGET_EXTENSION = ".js";

export const NODE_PROTOCOL = "node:";

export const SCRIPT_STAGING_PREFIX = "banes-lab-njs-";

export const REMOTE_SITE_CONFIG = `${NGINX_ROOT}/${SITES_FOLDER}/${SITE_NAME}`;

export const SITE_LINK = `${NGINX_ROOT}/sites-enabled/${SITE_NAME}`;

const FULL_ARCHIVE = "nginx-full.tar.gz";

export const REMOTE_FULL_ARCHIVE = `${REMOTE_STAGING}/${FULL_ARCHIVE}`;

export const SETUP_STAGING = `${REMOTE_STAGING}/nginx-setup`;

export const FULL_BACKUP_PREFIX = "nginx-full-";

export const CONFIG_BACKUP_SUFFIX = ".backup.conf";

export const BACKUP_MARKER = ".backup";

export const FILE_TEST_COMMAND = "test -f";

export const REMOVE_FILE_COMMAND = "sudo rm -f";

export const PREVIEW_LENGTH = 1000;

export const TEST_COMMAND = "nginx -t";

export const ERROR_LOG_DIRECTIVE = "error_log";

export const LOG_SIZE_COMMAND = "sudo stat -c %s";

export const LOG_TAIL_COMMAND = "sudo tail -c +";

export const RELOAD_COMMAND = "systemctl reload-or-restart nginx";

export const STATUS_COMMAND = "systemctl is-active nginx";

export const SERVICE_ENABLE_COMMAND = "sudo systemctl enable nginx";

export const ACTIVE_STATUS = "active";

export const CONFIG_MODE = "644";

export const CONFIG_OWNER = "root:root";

export const NGINX_SOURCE: SourceArchive & { readonly upstream: string } = {
    archive: "https://nginx.org/download/nginx-1.30.4.tar.gz",
    folder: "nginx-1.30.4",
    sha256: "4261dc90e9e47c1c4041276e9aaa3d48ebe2e664f728e14fa95ae6c67d57a08b",
    upstream: "1.30.4",
};

export const NGINX_PACKAGE = "nginx";

export const MODULE_PACKAGES: readonly string[] = ["nginx-module-njs", "libnginx-mod-brotli"];

export const PACKAGE_SOURCES: readonly PackageSource[] = [
    { base: "https://nginx.org/packages/ubuntu/", component: "nginx" },
    { base: "https://packagecloud.io/DaryL/libnginx-mod-brotli-stable/ubuntu/", component: "main" },
];

export const SOURCE_MODULES: readonly SourceModule[] = [
    {
        archive: "https://github.com/openresty/headers-more-nginx-module/archive/refs/tags/v0.40.tar.gz",
        folder: "headers-more-nginx-module-0.40",
        object: "ngx_http_headers_more_filter_module.so",
        sha256: "c14cb5e6c998590c209efbf77bd7637ce2cab02332e4192756a8af5b26ba4284",
        version: "0.40",
    },
];

export const BUILD_PACKAGES: readonly string[] = ["build-essential", "libpcre2-dev", "zlib1g-dev"];

export const MODULES_FOLDER = "/usr/lib/nginx/modules";

export const BUILD_MARKER_SUFFIX = ".build";

export const PREVIOUS_SUFFIX = ".previous";

export const MODULE_LOADERS: readonly ModuleLoader[] = [
    { file: `${NGINX_ROOT}/modules-enabled/50-mod-http-js.conf`, object: "ngx_http_js_module.so" },
    {
        file: `${NGINX_ROOT}/modules-enabled/50-mod-http-headers-more-filter.conf`,
        object: "ngx_http_headers_more_filter_module.so",
    },
];

export const CODENAME_COMMAND = '. /etc/os-release && echo "$VERSION_CODENAME"';

export const ARCHITECTURE_COMMAND = "dpkg --print-architecture";

export const PACKAGE_STATUS_COMMAND = "dpkg -s";

export const PACKAGE_VERSION_FIELD = "Version";

export const PACKAGE_STATUS_FIELD = "Status";

export const CONFIGURED_STATUS = "install ok installed";

const PACKAGE_LOCK_SECONDS = 600;

export const PACKAGE_LOCK_WAIT = `timeout ${String(PACKAGE_LOCK_SECONDS)} sh -c 'while sudo fuser /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock /var/lib/apt/lists/lock > /dev/null 2>&1; do sleep 5; done'`;

const APT = `sudo DEBIAN_FRONTEND=noninteractive apt-get -o DPkg::Lock::Timeout=${String(PACKAGE_LOCK_SECONDS)} -o Dpkg::Options::=--force-confold -y -q`;

export const PACKAGE_INDEX_COMMAND = `${APT} update`;

export const PACKAGE_INSTALL_COMMAND = `${APT} --no-remove install`;

export const PACKAGE_REVERT_COMMAND = `${APT} --no-remove --allow-downgrades install`;

export const PACKAGE_REMOVE_COMMAND = `${APT} remove`;

export const PULL_COMMANDS: readonly string[] = ["pull", "download", "from-remote"];

export const PULL_FULL_COMMANDS: readonly string[] = ["pull-full", "full", "pull-all"];

export const PUSH_COMMANDS: readonly string[] = ["push", "upload", "to-remote"];
```
