Parse Server - это Полный Стек Приложений. Но позволяет создавать приложения быстрее с помощью хранилища объектов и файлов. Предоставляет Аутентификацию пользователя, push-уведомления, панель администратора и многое другое.
Официальный сайт: Parse Server
Документация: Parse Server Guide
Исходные требования:
Обновляем пакеты
sudo apt update -y
Устанавливаем MongoDB
sudo apt-get install gnupg curl
curl -fsSL https://pgp.mongodb.com/server-7.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg \
--dearmor
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
Необязательно. Хотя вы можете указать любую доступную версию MongoDB, apt-get обновит пакеты, когда станет доступна более новая версия. Чтобы предотвратить непреднамеренные обновления, вы можете закрепить пакет в текущей установленной версии:
echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-database hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-mongosh hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections
Проверяем, что сервис работает и добавляем его атозапуск
sudo systemctl daemon-reload
sudo systemctl start mongod.service
sudo systemctl status mongod
sudo systemctl enable mongod
Проверяем работу MongoDB путем подключения к DB и выполнения сервисной команды
mongosh --eval 'db.runCommand({ connectionStatus: 1 })'
Подключаемся к mongo
mongosh
Добавляем пользователя с правами администратора
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: passwordPrompt(), // or cleartext password
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" }
]
}
)
Метод passwordPrompt() предложит вам ввести пароль. Вы также можете указать свой пароль непосредственно в виде строки. Мы рекомендуем использовать метод passwordPrompt(), чтобы избежать видимости пароля на вашем экране и потенциальной утечки пароля в историю вашей оболочки.
Выходим из оболочки mongo
exit
Включим авторизацию в настройках mongo, для этого откроем файл /etc/mongod.conf
sudo nano /etc/mongod.conf
Найдем секцию security: и изменим, должно получится так:
. . .
security:
authorization: enabled
#operationProfiling:
. . .
Сохраняем файл (CTRL + X, Y, затем ENTER).
Перезапускаем mongo и проверяем статус
sudo systemctl restart mongod
sudo systemctl status mongod
Тестируем аутентификацию, для этого подключаемся к mongo с созданными логин/пароль
mongosh --port 27017 --authenticationDatabase "admin" -u "AdminSammy" -p
пробуем запросить данные
show dbs
Должен появится список баз
Output
admin 0.000GB
config 0.000GB
local 0.000GB
Для работы Parse понадобится NodeJS, актуальная инструкция по установке есть на сайте nodesource.com
sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
NODE_MAJOR=20
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
sudo apt-get update && sudo apt-get install nodejs -y
Устанавливаем менеджер пакетов
npm install -g yarn
Добавим Parse Server в yarn
yarn global add parse-server
Создадим файл конфигурации
mkdir /etc/parse
nano /etc/parse/config.json
Добавим в файл
{
"appName": "TSWT",
"databaseURI": "mongodb://user:password@127.0.0.1:27017/parsedb?authMechanism=DEFAULT&authSource=admin",
"appId": "SCWASRTWK9Y6AVMP3KFC",
"masterKey": "LASDK823JKHR87SDFJSDHF8DFHASFDF",
"clientKey": "RTWK9YMV6MUBP3KWK8KK823JKHR87SD",
"serverURL": "http://localhost:1337/parse",
"publicServerURL": "https://localhost:1337/parse",
"port": 1337,
"masterKeyIps": ["0.0.0.0/0", "::1"]
}
appName: Установите любое имя для вашего сервера ParsedatabaseURI: Строка подключения к базе данных MongoDBappID: Установите случайную строку в качестве appID, которая будет использоваться для подключения сервера.masterKey: Установите случайную строку для мастер-ключа.clientKey:Установите случайную строку для клиентского ключа.serverURL: Установите URL-адрес для вашего сервера разбора.publicServerURL: Установите общедоступный URL-адрес для вашего сервера разбора или оставьте localhost тогда нужно будет настроить обратный прокси.port: Укажите порт сервераmasterKeyIps: IP-адреса с которых возможно подключение (задаем маску, чтобы подключатся можно было с любых)Сохраняем файл (CTRL + X, Y, затем ENTER).
Создание файла службы systemd позволяет автоматически запускать приложение и управлять им. Он перезапустится в случае сбоя (неожиданного выхода) и даже переживет перезапуск сервера.
Создаем файл parse.server.service в дериктории /etc/systemd/system/
nano /etc/systemd/system/parse.server.service
Содержание файла
[Unit]
Description=Parse Server service
After=mongodb.service
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
#User=ubuntu
ExecStart=/usr/local/bin/parse-server /etc/parse/config.json --mountGraphQL
[Install]
WantedBy=multi-user.target
Запускаем сервер и проверяем состояние
systemctl start parse.server.service
systemctl status parse.server.service
Если всё хорошо - добавляем сервис в атозапуск
systemctl enable parse.server.service
Добавим Parse Server в yarn
yarn global add parse-dashboard
Создадим файл конфигурации
nano /etc/parse/parse-dashboard-config.json
Добавим в файл
{
"apps": [
{
"serverURL": "https://api.server.com/parse",
"graphQLServerURL": "https://api.server.com/graphql",
"appId": "SCWASRTWK9Y6AVMP3KFC",
"masterKey": "LASDK823JKHR87SDFJSDHF8DFHASFDF",
"clientKey": "RTWK9YMV6MUBP3KWK8KK823JKHR87SD",
"allowInsecureHTTP": "true",
"appName": "appName"
}
],
"users": [
{
"user":"admin",
"pass":"password"
}
],
"iconsFolder": "/var/icons"
}
serverURL: Установите URL-адрес для вашего сервера ParseappID: Как на сервере.masterKey: Как на сервере.clientKey: Как на сервере.appName: Установите любое имя для вашего сервера Parseuser: Установите имя пользователя для подключения к панели управления Parsepass: Установите пароль для подключения к панели управления ParseСохраняем файл (CTRL + X, Y, затем ENTER).
Создаем файл службы systemd parse.server.service в дериктории /etc/systemd/system/
nano /etc/systemd/system/parse.server.dashboard.service
Содержание файла
[Unit]
Description=Parse Server Dashboard service
After=parse.server.service
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
#User=ubuntu
ExecStart=/usr/local/bin/parse-dashboard --dev --config /etc/parse/parse-dashboard-config.json
[Install]
WantedBy=multi-user.target
Сохраняем файл (CTRL + X, Y, затем ENTER).
Запускаем сервер и проверяем состояние
systemctl start parse.server.dashboard.service
systemctl status parse.server.dashboard.service
Если всё хорошо - добавляем сервис в атозапуск
systemctl enable parse.server.dashboard.service
Устанавливаем nginx, php-fpm
apt-get install nginx
apt-get install php-fpm
Проверяем версию PHP командой
php -v
Изменяем конфиг nginx
nano /etc/nginx/sites-available/default
Приводим к следующему виду
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
}
location ~ /\.ht {
deny all;
}
}
Создаем файл конфигурации для домена, вместо server.com нужно указать домен сайта где будет размещатся Parse
nano /etc/nginx/sites-available/server.com
Содержание файла, вместо server.com нужно указать домен сайта где будет размещатся Parse
server {
root /var/www/server.com/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name server.com www.server.com;
location / {
try_files $uri $uri/ =404;
}
}
server {
server_name api.server.com;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
location / {
proxy_pass http://localhost:1337/;
}
}
server {
server_name dashboard.server.com;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
location / {
proxy_pass http://localhost:4040/;
}
}
server {
server_name www.server.com;
return 301 https://server.com$request_uri;
}
Сохраняем файл (CTRL + X, Y, затем ENTER).
Создаем ссылку для включения конфигурации и проверяем конфигурацию
ln -s /etc/nginx/sites-available/tswt.vint1024.com /etc/nginx/sites-enabled/
nginx -t
Если присутствуют ошибки - исправляем. Если всё хорошо перезагружаем nginx
systemctl restart nginx
Самая актуальная инструкция на сайте certbot
Устанавливаем certbot
apt install snapd
snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo snap set certbot trust-plugin-with-root=ok
Поскольку nginx у нас обратный прокси, самый простой способ получать сертификаты - это DNS-плагин.
Для DNS cloudflare инструкция ниже, для других - ищи инструкцию и параметры запроса на странице dns-plugins.
Устанавливаем плагин
sudo snap install certbot-dns-cloudflare
Создадим файл с токеном доступа к DNS cloudflare
nano dns_api_token
Сожержание файла
# Cloudflare API token used by Certbot
dns_cloudflare_api_token = TOKEN
Вместо TOKEN вставь токен cloudflare из панели управления доменом.
Сохраняем файл (CTRL + X, Y, затем ENTER).
Запусти получение сертификатов и их установку
certbot --dns-cloudflare --dns-cloudflare-credentials ~/dns_api_token --dns-cloudflare-propagation-seconds 20 -i nginx
Перезапустим nginx
systemctl restart nginx.service
Команда обновления сертификатов
sudo certbot renew --dns-cloudflare-propagation-seconds 20
Добавим обновление сертификатов в расписание crontab
crontab -e
Добавим в конец файла строку
@daily certbot renew --dns-cloudflare-propagation-seconds 20
Сохраняем файл (CTRL + X, Y, затем ENTER).
Parse Server доступен по адресу api.server.com
Parse Dashboard доступен по адресу dashboard.server.com, логин/пароль которые указаны в файле parse-dashboard-config.json, параметры "user" и "pass".
На основе инструкций: