Я помогаю другу перенести приложение Parse на выделенный сервер, а не на хостинг-провайдера, и я застрял, пытаясь разрешить ошибку, которая, как я ДУМАЮ, происходит в экземпляре Parse Server на сервере.
Во-первых, вот стек ошибок из журналов PM2, он выдается каждый раз, когда на сервер выполняется GET или POST:
parse-wrapper-0 (err): at null.<anonymous> (/usr/lib/node_modules /parse-server/node_modules/mongodb-core/lib/connection/pool.js:119:12)
parse-wrapper-0 (err): at g (events.js:273:16)
parse-wrapper-0 (err): at emitTwo (events.js:100:13)
parse-wrapper-0 (err): at emit (events.js:185:7)
parse-wrapper-0 (err): at Socket.<anonymous> (/usr/lib/node_modules/parse-server/node_modules/mongodb-core/lib/connection/connection.js:144:49)
parse-wrapper-0 (err): at Socket.g (events.js:273:16)
parse-wrapper-0 (err): at emitOne (events.js:90:13)
parse-wrapper-0 (err): error: Uncaught internal server error. { [MongoError: server localhost:27017 received an error {"name":"MongoError","message":"write EPIPE"}]
parse-wrapper-0 (err): name: 'MongoError',
parse-wrapper-0 (err): message: 'server localhost:27017 received an error {"name":"MongoError","message":"write EPIPE"}' } MongoError: server localhost:27017 received an error {"name":"MongoError","message":"write EPIPE"}
parse-wrapper-0 (err): at null.<anonymous> (/usr/lib/node_modules/parse-server/node_modules/mongodb-core/lib/topologies/server.js:308:40)
parse-wrapper-0 (err): at emitTwo (events.js:100:13)
parse-wrapper-0 (err): at emit (events.js:185:7)
parse-wrapper-0 (err): at null.<anonymous> (/usr/lib/node_modules/parse-server/node_modules/mongodb-core/lib/connection/pool.js:119:12)
parse-wrapper-0 (err): at g (events.js:273:16)
parse-wrapper-0 (err): at emitTwo (events.js:100:13)
parse-wrapper-0 (err): at emit (events.js:185:7)
parse-wrapper-0 (err): at Socket.<anonymous> (/usr/lib/node_modules/parse-server/node_modules/mongodb-core/lib/connection/connection.js:144:49)
parse-wrapper-0 (err): at Socket.g (events.js:273:16)
parse-wrapper-0 (err): at emitOne (events.js:90:13)
Поскольку я не совсем уверен в природе проблемы (я посмотрел, что такое ошибка записи EPIPE, но не уверен, почему это происходит на GET или почему она закрывается каждый раз), я просто дам каждая информация о сервере, о которой я могу думать, имеет отношение к этому.
Вот относительная структура пользователей прямо сейчас:
root -defuser: запуск экземпляра mongo, а также nginx -parse: запуск синтаксического анализа через PM2
Вот файл экосистемы.json, который использует PM2:
{
"apps":[{
"name" : "parse-wrapper",
"script" : "/usr/bin/parse-server",
"watch" : true,
"merge_logs" : true,
"cwd" : "/home/parse",
"env" : {
"PARSE_SERVER_CLOUD_CODE_MAIN": "cloud/main.js",
"PARSE_SERVER_DATABASEURI": "mongodb://parse:SUPERPASSWORDHERE@domain.here:27017/beerdb?ssl=true",
"PARSE_SERVER_APPLICATION_ID": "super secret Parse key",
"PARSE_SERVER_MASTER_KEY" : " master key"
}
}]
}
Вот файл mongo.conf:
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongo.pem
#processManagement:
security:
authorization: enabled
#operationProfiling:
#replication:
#sharding:
setParameter:
failIndexKeyTooLong: false
## Enterprise-Only Options:
#auditLog:
#snmp:
Я не думаю, что nginx имеет к этому какое-то отношение, но вот конфигурация независимо от того:
# HTTP - redirect all requests to HTTPS
server {
listen 80;
listen [::]:80 default_server ipv6only=on;
return 301 https://$host$request_uri;
}
# HTTPS - serve HTML from /usr/share/nginx/html, proxy requests to /parse/
# through to Parse Server
server {
listen 443;
server_name domain.here;
root /usr/share/nginx/html;
index index.html index.htm;
ssl on;
# Use certificate and key provided by Let's Encrypt:
ssl_certificate /etc/letsencrypt/live/domain.here/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.here/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
# Pass requests for /parse/ to Parse Server instance at localhost:1337
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:1337/parse/;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_redirect off;
}
}
У меня здесь практически нет идей, хотя я не совсем специалист в гораздо большем, чем просто настройка Apache, так что это может быть глупой оплошностью или над моей головой. Так что любая помощь приветствуется и извиняюсь, если это что-то простое.
Кажется, что перезапуск сервера решил проблему. С другой стороны, вы должны открыть проблему (если еще не) на https://github.com/parseplatform/parse-server.
РЕДАКТИРОВАТЬ: обновление до parse-server v2.2.17 должно исправить вашу проблему