Docker Nginx Proxy Pass Игровой сервер - PullRequest
0 голосов
/ 18 января 2020

Я пытаюсь настроить контейнер Nginx docker для запуска моего личного веб-сайта, а также моих игровых серверов на цифровой океанской капле. Я хочу, чтобы example.com был персональным сайтом, а gmod.example.com - игровым сервером. Персональный веб-сайт работает нормально, и я смог заставить пример сервера узлов работать в качестве попытки отладки конфигурации игрового сервера, но игровой сервер просто не работает. Я не уверен, что не так с моей конфигурацией.

docker -compose.yml

version: '3'

services:
    reverseproxy:
        container_name: reverseproxy
        hostname: reverseproxy
        image: nginx
        ports:
          - 80:80
          - 443:443
          - 27015:27015
        volumes:
          - ~/test/nginx/:/etc/nginx/
          - ~/test/sslcerts/:/etc/letsencrypt/
          - ~/test/websites:/var/www/
          - /etc/ssl/certs/dhparam.pem:/etc/ssl/certs/dhparam.pem
        depends_on:
          - gmod
    gmod:
        container_name: gmod
        hostname: gmod
        build:
            context: ~/test/game_servers/gmod

example.com.conf:

server {
        listen 443 ssl http2; #Certbot
        listen [::]:443 ssl http2 ipv6only=on; #Certbot
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; #Certbot
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; #Certbot

        ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
        #include /etc/nginx/snippets/header.conf;
        #include /etc/nginx/snippets/ssl.conf;

        server_name example.com www.example.com;
        root /var/www/example.com;

        index index.html;
        location / {
                include /etc/nginx/snippets/header.conf;
                try_files $uri $uri/ =404;
        }

        #for certbot renewal
        location ~ /.well-known/acme-challenge {
                allow all;
                root /data/letsencrypt;
        }
}

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        if ($host = www.example.com) {
                return 301 https://$host$request_uri;
        } #certbot

        if ($host = example.com) {
                return 301 https://$host$request_uri;
        } #certbot

        server_name example.com www.example.com;
        return 404; # certbot
}

gmod.example.com.conf:

upstream gmod {
        server gmod:27015;
}

server {
        listen 27015;
        listen [::]:27015;
        server_name gmod.example.com www.gmod.example.com;

        access_log /etc/nginx/logs/gmod.access;
        error_log /etc/nginx/logs/gmod.error;

        location / {
                proxy_pass http://gmod;
        }
}

Dockerfile для игрового сервера:

FROM cm2network/steamcmd:root

ENV STEAMAPPID 4020
ENV STEAMAPPDIR /home/steam/gmod
ENV MAP gm_flatgrass
ENV GAMEMODE sandbox

# Run Steamcmd and install Gmod
RUN set -x \
        && "${STEAMCMDDIR}/steamcmd.sh" \
                +login anonymous \
                +force_install_dir ${STEAMAPPDIR} \
                +app_update ${STEAMAPPID} validate \
                +quit

USER steam

WORKDIR $STEAMAPPDIR

VOLUME $STEAMAPPDIR

# Set the entrypoint:
# 1) Update the server
# 2) Run the server
ENTRYPOINT ${STEAMCMDDIR}/steamcmd.sh \
                +login anonymous +force_install_dir ${STEAMAPPDIR} +app_update ${STEAMAPPID} +quit \
                && ${STEAMAPPDIR}/srcds_run \
                        -game garrysmod -maxplayers 16 +gamemode ${GAMEMODE} +map ${MAP}

При текущей настройке, когда я перехожу на gmod.example.com, он дает мне 404 (это ожидается с учетом конфигурации, но в конце концов, я хочу, чтобы это работало). Переход к gmod.example.com:27015 дает 502 Bad Gateway в браузере. Журналы доступа показывают, что ничего не происходит, кроме как когда я попал в плохой шлюз. Игровой клиент просто сообщает, что серверов вообще нет. Любая помощь приветствуется. В идеале ответ может быть расширенным, сейчас я использую только один сервер, но в будущем мне бы хотелось иметь несколько разных видов запуска.

В цифровом океане у меня есть записи A для example.com, test.example.com и gmod.example.com (вместе с каждым из них с префиксом www.). Они все также указывают на капельку.

...