Как я могу развернуть свое метеорное приложение на сервере Ubuntu в моей локальной сети?

У меня есть простое приложение метеора, я хочу, чтобы оно работало на локальном компьютере под управлением Ubuntu в моей локальной сети с nginx, чтобы оно было доступно из браузера с локальным IP-адресом компьютера. Я пытался использовать mup (meteor up), но для этого требуются ключи SSH, и мне приходится использовать nginx, поэтому мне приходится развертывать вручную.

Буду признателен, если вы поможете мне развернуть приложение, я могу использовать и пробовать разные методы, пока оно работает с nginx.

На данный момент мне не нужен SSL, поэтому я пытаюсь пропустить этот шаг. Кроме того, мой сервер MongoDB будет работать на той же машине, поэтому я тоже пытаюсь подключиться к нему локально. Я попробовал этот учебник, который использует навсегда для запуска метеора ссылка, но я не смог ее запустить, также она не объясняет, как настроить URL-адрес MongoDB и прочее.

Я установил узел, навсегда и метеор, создал нового пользователя, клонировал свой репозиторий на свой домашний сервер, и я могу запустить его локально с помощью команды запуска метеора.

Я думаю, что у меня есть проблемы с настройкой nginx и сценария, который связывает приложение, описанное в упомянутом мной руководстве. Я не уверен, где найти файл env_settings.sh. Он находится в моем каталоге /etc/nginx/.

вот мой файл config nginx

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

env_settings.sh

#load environment variables
source ../env_settings.sh

meteor update --release 1.11 #ensure proper version of Meteor

npm install # install NPM dependencies
npm prune --production # remove development dependencies

rm -rf ~/bundle # remove the previous bundle

meteor build --directory ~ # build the current bundle

cd ~/bundle/programs/server # enter the bundle
npm install # install dependencies

mv ~/bundle ~/portal 

# make sure the logs directory exists
mkdir ~/logs 

# use forever to restart the Node.js server
export PORT=8080
cd ~/portal
forever stop main.js
forever start -a -l ~/logs/forever.log -o ~/logs/portal.out -e ~/logs/portal.err main.js

доступные_сайты/приложение

# this section is needed to proxy web-socket connections
map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
}
# HTTP
server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;
        
        location = /favicon.ico {
          root /home/webapp/portal/programs/web.browser/app;
          access_log off;
        }
        
        location ~* "^/[a-z0-9]{40}\.(css|js)$" {
          gzip_static on;
          root /home/webapp/portal/programs/web.browser;
          access_log off;
        }
        
        location ~ "^/packages" {
          root /home/webapp/portal/programs/web.browser;
          access_log off;
        }

        # pass requests to Meteor
        location / {
            proxy_pass http://127.0.0.1:8080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade; #for websockets
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header Host $host;
        }
}

person Ögeday    schedule 11.09.2020    source источник
comment
что не работает?   -  person Christian Fritz    schedule 11.09.2020


Ответы (3)


  1. Вы должны запустить его с node main.js, а не main.js

  2. Перед его запуском у вас должны быть определены следующие переменные env:

    экспорт ПОРТ=8080

    экспортировать ROOT_URL=http://ваш.сайт.имя

    экспортировать MONGO_URL=mongodb://127.0.0.1/your.database.name

person bordalix    schedule 12.09.2020

Вы можете создать файл .service, чтобы, если служба остановилась, она перезапустилась в Ubuntu. Вот пример:

[Unit]
Description=Meteor app

[Service]
ExecStart=/usr/bin/node /home/user/meteorapp/bundle/main.js
User=user
Group=user
WorkingDirectory=/home/user/meteorapp/bundle
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=meteorapp
Environment=PWD=/home/user/meteorapp/
Environment=MONGO_URL=mongodb://localhost:27017/meteorapp
Environment=HTTP_FORWARDED_COUNT=1
Environment=PORT=8094
Environment=apiPort=4080
Environment=ROOT_URL=http://192.168.1.1
Environment=BIND_IP=127.0.0.1
Environment='METEOR_SETTINGS={"private": {"key": "value"}}'

[Install]
WantedBy=multi-user.target

Поместите этот файл в /etc/system/systemd, и вы сможете запускать его с sudo service meteorapp start.

Если вы используете это локально, вам не нужно использовать nginx. Я постоянно запускаю метеорные приложения локально, используя только meteor, и они доступны для всех внутренних устройств.

*Примечание: приведенный выше скрипт работает только в том случае, если вы уже создали приложение метеора. Но я бы пошел с запуском только команды метеора и доступа таким образом. Если вы хотите использовать отдельную базу данных MongoDB, вы можете создать простой скрипт ./start.

 export MONGO_URL=mongodb://localhost:27017/meteorapp
 meteor --settings settings.json --port 3004

Сделайте этот файл исполняемым, и вы сможете запускать его локально таким образом.

person Jeffrey Flynt    schedule 13.09.2020
comment
Как я могу сделать это с помощью только команды метеора? Похоже, это более простое решение, я собираюсь запускать приложение локально, не связывая его правильно? Могу ли я также написать это как сценарий, чтобы система могла запускать его при запуске? - person Ögeday; 14.09.2020
comment
Большое вам спасибо, я немного больше изучил это, и этот ссылка решила мою проблему. - person Ögeday; 14.09.2020

Я обработал эту ситуацию с информацией в этой ссылке. Он не запускает связанную версию метеора, но на самом деле это лучший способ сделать это, чтобы упростить тестирование в локальной сети.

person Ögeday    schedule 14.09.2020