Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Размещение BlueMap на внешних веб-серверах при использовании SQL хранилища

Внутренний веб-сервер BlueMap очень легкий и довольно быстрый, но он может быть перегружен большим количеством одновременных пользователей.

Если вы хотите оптимизировать скорость вашего веб-приложения для большой аудитории, вы также можете использовать BlueMap напрямую с внешними веб-серверами, такими как NGINX или Apache. Чтобы это сработало, вам необходимо выполнить некоторую настройку.

  1. Цель
  2. Общие настройки
  3. NGINX
  4. Apache
  5. Caddy с php-fpm
  6. FrankenPHP

Цель

BlueMap отображает и сохраняет карту на вашем SQL-сервере. Но веб-приложение запрашивает их так, как если бы они находились в обычном файловом хранилище внутри webroot. Итак, нам нужен какой-нибудь скрипт, который переводит эти запросы, извлекает и предоставляет нужные файлы с SQL-сервера.

Общие настройки

К счастью, BlueMap предоставляет такой скрипт. Точнее, PHP-скрипт. Это означает, что первое, что вам нужно сделать, это убедиться , что на вашем веб-сервере установлен PHP (>= 7.4).
Затем вы заходите в webroot и открываете sql.php и устанавливаете там настройки SQL-соединения.

Важно:
Убедитесь, что ваши настройки php работают, иначе вы можете случайно опубликовать эти настройки SQL-соединения во всем мире!

Информация:
Поскольку все ваши карты хранятся в базе данных, не забудьте удалить (старую) папку maps из вашего веб-каталога, если она все еще там. Чтобы файлы в ней не переопределяли данные, которые на самом деле должны поступать из базы данных.

Теперь вам нужно настроить свой веб-сервер таким образом, чтобы он переписывал все запросы, для которых не существует статического файла, в sql.php.

NGINX

В nginx этого можно достичь, например, с помощью try_files $uri /sql.php;.

В некотором контексте конфигурация вашего веб-сайта может выглядеть примерно так:

server {
    listen 80;
    server_name yourdomain.com;
    
    # path to bluemap-webroot, BlueMap can also be used in a sub-folder .. just adapt the paths accordingly
    root /var/www;
    
    location / {
        try_files $uri /sql.php;
    }
    
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }

    # OPTIONAL:
    # Proxy requests to the live data interface of each map to bluemaps integrated webserver
    # If you have multiple servers you will need to proxy each map-id to the correct server
    location ~* /(maps/[^/\s]*/live/.*) {
        proxy_pass http://127.0.0.1:8100/$1;
    }
}

Важно: Приведенная выше конфигурация является всего лишь примером, а не полной конфигурацией, которую можно просто скопировать и вставить. Вам потребуется адаптировать ее к вашим настройкам!

Apache

Вот пример того, как это могло бы выглядеть в Apache:

DocumentRoot /var/www/
<Directory /var/www/>
    allow from all
    Options FollowSymLinks
    Require all granted
  
    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-s
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{REQUEST_FILENAME} !-d
    # Rewrite request to the sql.php
    RewriteRule ^.*$ /sql.php [L]  
</Directory>

# OPTIONAL:
# Proxy requests to the live data interface to bluemaps integrated webserver  
ProxyPreserveHost On
ProxyPassMatch ^/(maps/[^/]*/live/.*) http://127.0.0.1:8100/$1

Важно: Приведенная выше конфигурация является всего лишь примером, а не полной конфигурацией, которую можно просто скопировать и вставить. Вам потребуется адаптировать ее к вашим настройкам!

Caddy с php-fpm

Вот пример того, как это могло бы выглядеть на Caddy с php-fpm:

yourdomain.com {
    # The root for the webserver.
    root /var/www
    file_server

    # https://caddyserver.com/docs/caddyfile/patterns#php-fpm
    # You may need to modify this path.
    php_fastcgi unix//run/php/php7.4-fpm.sock

    # Use the sql.php script, which handles requests with data from the sql-server.
    handle {
        try_files {path} /sql.php
    }

    # OPTIONAL:
    # Proxy requests for live data to the bluemaps integrated webserver.
    # If you have multiple servers you will need to proxy each map-id to the correct server.
    handle /maps/*/live/* {
        reverse_proxy 127.0.0.1:8100
    }
}

Важно: Приведенная выше конфигурация является всего лишь примером, а не полной конфигурацией, которую можно просто скопировать и вставить. Вам потребуется адаптировать ее к вашим настройкам!

FrankenPHP

Вот пример того, как это могло бы выглядеть на FrankenPHP:

{
    # https://frankenphp.dev/docs/config/#caddyfile-config
    # Enable FrankenPHP.
    frankenphp
}

yourdomain.com {
    # The root for the webserver.
    root /var/www

    # https://frankenphp.dev/docs/config/
    # Execute PHP files in the root directory and serve assets.
    php_server

    # Use the sql.php script, which handles requests with data from the sql-server.
    handle {
        try_files {path} /sql.php
    }

    # OPTIONAL:
    # Proxy requests for live data to the bluemaps integrated webserver.
    # If you have multiple servers you will need to proxy each map-id to the correct server.
    handle /maps/*/live/* {
        reverse_proxy 127.0.0.1:8100
    }
}

Важно: Приведенная выше конфигурация является всего лишь примером, а не полной конфигурацией, которую можно просто скопировать и вставить. Вам потребуется адаптировать ее к вашим настройкам!