Я пытаюсь настроить контейнер 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.). Они все также указывают на капельку.