mernmail-website/docs/deployment/pm2-nginx.md
Dorian Niemiec 6486f7ba3b
Some checks failed
Deploy Next.js application / deploy (push) Has been cancelled
docs: refactor the documentation page about deploying MERNMail with PM2 and NGINX
2024-11-08 18:20:53 +01:00

81 lines
No EOL
3 KiB
Markdown

# Deploy with PM2 + NGINX
PM2 is a process manager for Node.JS applications with a built-in load balancer. NGINX is 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 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 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.