Как развернуть react приложение на сервере linux?

Рейтинг: 1Ответов: 1Опубликовано: 26.03.2023

Есть сайт на react, который нужно перенести на сервер. Запустил у себя на компьютере

npm run build

npm install serve -s

serve build -s

На local-ip:3000 запустился сайт. Теперь переношу на удаленный сервер. Запустил из папки сайта /var/www/websitefolder

yum install npm

Перенес папку build в папку сайта. Затем запустил:

npm install serve -s
serve build -s

Получил

не удается получить доступ к сайту

при переходе на remmote-ip-addres:3000.

Что делаю не так? Может 3000 порт на машине открыть надо?

Ответы

▲ 1

Если коротко, то да - нужно открыть порт 3000.

Если длинно, то я в таких случаях поднимаю на сервере nginx на 80-м и 443-м портах, и делаю внутри редиректы и обратную прокси.

server {
    listen 80 default_server;
    
    server_name _;
    return 301 https://$host$request_uri;
}

этот блок велит серверу все HTTP-запросы перенаправлять на HTTPS.

Доступ к вашему react серверу через фичу, которая называется обратная прокси:

server {
        listen 443 ssl;

        server_name your.server.domain;
        add_header Access-Control-Allow-Origin *;
        location / {
                proxy_pass http://localhost:3000/;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
        }
    ssl_certificate /etc/letsencrypt/live/your.server.domain/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/your.server.domain/privkey.pem; # managed by Certbot
}

Здесь единственная тонкость - перед тем, как получить сертификаты у Let's Encrypt, нужно подпихнуть nginx-у какие-то сертификат и ключ, чтобы https завёлся. Без ключа и сертификата nginx отказывается запускаться. У меня всегда есть в загашнике ключики и сертификаты от других сайтов, но вы можете для себя сгенерировать самоподписной сертификат.

$ openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr -subj '/CN=your.server.domain'
$ openssl x509 -signkey domain.key -in domain.csr -req -days 365 -out domain.crt

В результате domain.crt - самоподписной сертификат, domain.key - соответствующий приватный ключ. Укажите их в ssl_certificate и ssl_certificate_key, а затем запустите nginx.

После того, как nginx стартовал, вам нужно будет получить сертификат.

Я всегда пользуюсь бесплатными сертификами от Let's Encrypt, получаю их через certbot:

$ certbot --nginx -d your.server.domain

В результате профит: по адресу https://your.server.domain/ находится ваше приложение.