ivan99
@ivan99
Изучаю web-стек, бомблю вопросами ;)

Можно ли установить Discorce на одном VPS для нескольких сайтов?

Можно ли установить на одном VPS для 3х сайтов каждому свой Discorce (Ruby/Docker)?
Благодарю.
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 1
Zeben
@Zeben
Ruby/Rails full-stack разработчик
Без проблем. Nginx умеет проворачивать такие вещи, проксируя с разных DNS на целевой IP-адрес с разными сервисами. Есть как минимум 2 варианта использования Nginx в этих целях:
1. Reverse proxy на локальные IP-адреса;
2. Reverse proxy на UNIX-сокет.
При помощи Nginx можно разнести Ваши форумы, к примеру, по разным поддоменам.
Допустим, Вы арендуете домен mydisc.com и Вы хотите, чтобы один форум (сервис) был на foo.mydisc.com, а второй, собственно, на bar.mydisc.com. Также допустим, что Вы уже арендуете VPS с выделенным IP (пусть будет 11.22.33.44).
Также допустим, что Вы уже создали свои домены и привязали их к своему VPS.
Тогда в Nginx создаётся файл конфигурации (упрощено):
/etc/nginx/nginx.conf
user sample;
worker_processes 4;
http {
  include mime.types;
  ...
  # если используете HTTPS - подключаете строки ниже:
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
  ssl_prefer_server_ciphers on;
  ssl_session_cache   shared:SSL:20m;
  ssl_session_timeout 20m;
  ssl_buffer_size 6k;

  # здесь рекурсивно подключаете все свои сервисы
  include /etc/nginx/servers-enabled/*;
}


Создаёте папку /etc/nginx/servers-available/ и создаёте в ней, к примеру, два файла: foo и bar. Каждый из них будет содержать что-то вроде:
foo
upstream foo {
 # здесь есть 2 способа проксировать своё приложение: UNIX-сокет (puma умеет такое делать)...
  server unix:/srv/http/foo/shared/sockets/puma.sock fail_timeout=0;
  # ... или адрес:
  server 127.0.0.1:9292 fail_timeout=0;
}

server {
  listen 80;
  server_name foo.mydisc.com;
  # если используете HTTPS - редирект
  return https://foo.mydisc.com$request_uri; 
}

server {
  listen 443 ssl http2;
  server_name foo.mydisc.com;
  root /srv/http/foo/public;

  ssl_certificate /etc/certs/mycert/fullchain.pem;
  ssl_certificate /etc/certs/mycert/privkey.pem;

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  add_header Strict-Transport-Security 'max-age=1209600'; # HSTS на 1 год
  
  location {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_redirect off;
    proxy_pass http://foo;
  }

  location ~ ^/(assets|fonts|system)/|favicon.ico|robots.txt { # папка с ассетами
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }
  
  # можете настроить под себя
  # error_page 500 502 503 504 /500.html;
  # client_max_body_size 4G;
  # keepalive_timeout 70;
}
bar
upstream bar {
  # здесь есть 2 способа проксировать своё приложение: UNIX-сокет (puma умеет такое делать)...
  server unix:/srv/http/bar/shared/sockets/puma.sock fail_timeout=0;
  # ... или адрес:
  server 127.0.0.1:<b>9393</b> fail_timeout=0;
}

server {
  listen 80;
  server_name bar.mydisc.com;
  # если используете HTTPS - редиректите
  return https://bar.mydisc.com$request_uri; 
}

server {
  listen 443 ssl http2;
  server_name bar.mydisc.com;
  root /srv/http/bar/public;

  ssl_certificate /etc/certs/mycert/fullchain.pem;
  ssl_certificate /etc/certs/mycert/privkey.pem;

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  add_header Strict-Transport-Security 'max-age=1209600'; # HSTS на 1 год
  
  location {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_redirect off;
    proxy_pass http://bar;
  }

  location ~ ^/(assets|fonts|system)/|favicon.ico|robots.txt { # папка с ассетами
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }
  
  # можете настроить под себя
  # error_page 500 502 503 504 /500.html;
  # client_max_body_size 4G;
  # keepalive_timeout 70;
}

Идёте в /etc/nginx/servers-enabled и линкуете по желанию:
ln -s ../servers-available/foo .
ln -s ../servers-available/bar .

Проверяете синтаксис...
# nginx -t
И перезапускаете Nginx.

Собственно и всё. Можете хоть 10 сервисов держать на VPS и разнести их на разные поддомены - все будут висеть на одном IP и не будут друг с другом драться.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы