configuration/constants/nginx.constants.ts

configuration/constants/nginx.constants.ts is a file in Bane's Lab Deploy. 84 lines of code and 60 definitions.

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"];