docs: add guide on deployment with PM2 + NGINX
Some checks failed
Deploy Next.js application / deploy (push) Has been cancelled

This commit is contained in:
Dorian Niemiec 2024-11-08 17:20:38 +01:00
parent a4e2da090f
commit 5698071d47
8 changed files with 98 additions and 5 deletions

View file

@ -16,6 +16,7 @@ import "prismjs/components/prism-yaml";
import "prismjs/components/prism-markdown"; import "prismjs/components/prism-markdown";
import "prismjs/components/prism-json"; import "prismjs/components/prism-json";
import "prismjs/components/prism-perl"; import "prismjs/components/prism-perl";
import "prismjs/components/prism-nginx";
import "./_styles/prism-twilight.css"; import "./_styles/prism-twilight.css";
import "./_styles/prism.twilight.min.css"; import "./_styles/prism.twilight.min.css";

View file

@ -19,6 +19,7 @@ import "prismjs/components/prism-markdown";
import "prismjs/components/prism-markup-templating"; import "prismjs/components/prism-markup-templating";
import "prismjs/components/prism-json"; import "prismjs/components/prism-json";
import "prismjs/components/prism-perl"; import "prismjs/components/prism-perl";
import "prismjs/components/prism-nginx";
export async function generateMetadata({ params }) { export async function generateMetadata({ params }) {
const obtainedParams = await params; const obtainedParams = await params;

View file

@ -11,6 +11,7 @@ import "prismjs/components/prism-yaml";
import "prismjs/components/prism-markdown"; import "prismjs/components/prism-markdown";
import "prismjs/components/prism-json"; import "prismjs/components/prism-json";
import "prismjs/components/prism-perl"; import "prismjs/components/prism-perl";
import "prismjs/components/prism-nginx";
import "prismjs/components/prism-markup"; import "prismjs/components/prism-markup";
import "prismjs/components/prism-markup-templating"; import "prismjs/components/prism-markup-templating";
import "prismjs/components/prism-handlebars"; import "prismjs/components/prism-handlebars";

View file

@ -39,5 +39,11 @@ export default [
target: "_self", target: "_self",
sub: true, sub: true,
label: "Deploy with SVR.JS" label: "Deploy with SVR.JS"
},
{
href: "/docs/deployment/pm2-nginx",
target: "_self",
sub: true,
label: "Deploy with PM2 + NGINX"
} }
]; ];

View file

@ -3,3 +3,4 @@
MERNMail provides multiple options for deployment. Here is the list of the options: MERNMail provides multiple options for deployment. Here is the list of the options:
- [SVR.JS](/docs/deployment/svrjs) - [SVR.JS](/docs/deployment/svrjs)
- [PM2 + NGINX](/docs/deployment/pm2-nginx)

View file

@ -0,0 +1,82 @@
# Deploy with PM2 + NGINX
PM2 is a process manager for Node.JS applications with a built-in load balancer. NGINX is a popular web server and reverse proxy software. This tutorial will guide you on how to deploy MERNMail application with PM2 and NGINX on GNU/Linux systems.
## 1. Clone the Repository
First, change your working directory to your home directory, and clone the MERNMail repository:
```bash
cd ~
git clone https://git.svrjs.org/mernmail/mernmail.git
cd mernmail
```
## 2. Install Dependencies and Build the Application
Navigate to the project directory, install the necessary dependencies, and build the MERNMail application:
```bash
npm install
npm run build
```
## 3. Configuration
Copy the `.env.example` file to a `.env` file in the root directory of the project. The configuration options can be found in the [Configuration](/docs/configuration) page.
## 4. Install and Set Up PM2
Install and set up PM2:
```bash
npm install -g pm2
pm2 start npm --name "MERNMail" --start
pm2 startup
```
After running the `pm2 startup` command, run the command shown in the output to the terminal to start the PM2 daemon when the OS boots up.
## 5. Install and Set Up NGINX
Install NGINX using `sudo apt install nginx` on Debian-based systems, `sudo pacman -S nginx` on Arch-based systems, or `sudo dnf install nginx` on Red Hat-based systems.
After installing NGINX, open your preferred text editor, and save these contents to the `/etc/nginx/sites-available/mernmail` file (replace `/home/user` with path to your home directory; also check the port the MERNMail application listens to; this configuration causes NGINX to only listen to port 80):
```nginx
server {
listen 80;
server_name _;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
add_header x-content-type-options "nosniff";
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'sha256-VA8O2hAdooB288EpSTrGLl7z3QikbWU9wwoebO/QaYk=' 'sha256-+5XkZFazzJo8n0iOP4ti/cLCMUudTf//Mzkb7xNPXIc=' 'sha256-MS6/3FCg4WjP9gwgaBGwLpRCY6fZBgwmhVCdrPrNf3E=' 'sha256-tQjf8gvb2ROOMapIxFvFAYBeUJ0v1HCbOcSmDNXGtDo='; style-src 'self' 'unsafe-inline'; frame-src 'self' data:";
add_header Referrer-Policy "strict-origin-when-cross-origin";
add_header Permissions-Policy "geolocation=(), camera=(), microphone=(), fullscreen=*";
add_header Feature-Policy "geolocation 'none', camera 'none', microphone 'none', fullscreen *";
location /api/ {
proxy_pass http://localhost:3000/api/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location / {
root /home/user/mernmail/frontend/dist;
try_files $uri $uri/ =404;
}
}
```
After creating the NGINX configuration file, run these commands to enable the new NGINX configuration:
```bash
sudo rm /etc/nginx/sites-enabled/*
sudo ln -s /etc/nginx/sites-available/mernmail /etc/nginx/sites-enabled/mernmail
```
## 6. Restart NGINX
Restart NGINX using either `sudo systemctl restart nginx` or `sudo /etc/init.d/nginx restart` command.

View file

@ -57,7 +57,7 @@ sudo runuser svrjs -s /bin/bash -c 'cd /var/lib/mernmail && npm install && npm r
## 4. Configure MERNMail ## 4. Configure MERNMail
Copy the `.env.example` file to a `.env` file in the MERNMail root directory (like `/var/lib/mernmail`). The configuration options can be found in the [/docs/configuration](Configuration) page. Copy the `.env.example` file to a `.env` file in the MERNMail root directory (like `/var/lib/mernmail`). The configuration options can be found in the [Configuration](/docs/configuration) page.
For additional security, you can set the permissions for the `.env` file using this command: For additional security, you can set the permissions for the `.env` file using this command:
```bash ```bash

View file

@ -24,17 +24,18 @@ git clone https://git.svrjs.org/mernmail/mernmail.git
cd mernmail cd mernmail
``` ```
### 2. Install Dependencies ### 2. Install Dependencies and Build the Application
Navigate to the project directory and install the necessary dependencies: Navigate to the project directory, install the necessary dependencies, and build the MERNMail application:
```bash ```bash
npm install npm install
npm run build
``` ```
### 3. Configuration ### 3. Configuration
Copy the `.env.example` file to a `.env` file in the root directory of the project. The configuration options can be found in the [/docs/configuration](Configuration) page. Copy the `.env.example` file to a `.env` file in the root directory of the project. The configuration options can be found in the [Configuration](/docs/configuration) page.
### 4. Running the Application ### 4. Running the Application