如何使用 Nginx 在单个 DigitalOcean Droplet 上部署 React JS 和 Node.js 应用程序
使用反向代理服务器块在 DigitalOcean 上部署 NodeJS 应用程序
在本文中,我们将学习如何使用 Nginx 在单个 DigitalOcean droplet 上部署使用简单服务器块的 React JS 应用程序和使用反向代理服务器块的 Node.js 应用程序。
使用简单服务器块在 DigitalOcean 上部署 React 应用程序
步骤 1-登录DigitalOcean并创建一个新的 droplet
使用 root 访问服务器
打开你的终端并复制你的 droplet 的 ip_address 并写下下面的命令:
ssh root@server_ip_address
现在,输入您的密码,您就登录到服务器了。
现在该设置防火墙了。
基本防火墙设置
出于安全考虑,我们必须添加一个基本的防火墙。Ubuntu
服务器使用UFW
防火墙。设置一个基本的防火墙非常简单。
我们可以使用以下命令查看防火墙当前允许哪些应用程序:
sudo ufw app list
您应该看到以下输出:
Available applications
OpenSSH
我们必须通过输入以下命令来允许 SSH 连接:
sudo ufw allow OpenSSH
然后我们启用防火墙:
sudo ufw enable
按y
和ENTER
。
我们可以使用以下命令查看防火墙状态:
sudo ufw status
现在下一步,我们将配置域名。
第 2 步 - 配置域名
在本节中,我们将配置用于 React 应用程序的域名。
为此,我们必须购买一个域名(请访问GoDaddy或任何其他域名提供商)并将您的域名链接到 DigitalOcean。
我们将一步一步地完成这项工作。
在 DigitalOcean 的“添加域名”部分,像这样写入您的域名:sample.com
。它不应该www.sample.com
,然后单击添加域名按钮。
之后,您必须为您的域添加 NS 记录。
我们将添加两条A
记录,将其映射IP4 address
到域名。
对于第一条A
记录,@
输入HOSTNAME
您想要指向域名的服务器(即:droplet),
对于第二条A
记录,写入www
并HOSTNAME
选择相同的服务器
现在转到您的域名提供商(我使用的是GoDaddy)。
转到您的个人资料,然后在Domain
“部分”中单击DNS
。
在该Nameservers
部分中单击“更改”并输入以下名称服务器:
ns1.digitalocean.com
ns2.digitalocean.com
ns3.digitalocean.com
更改名称服务器可能需要一些时间。
第3步 - 安装Nginx
现在您的域名指向服务器,是时候安装和配置 Nginx 了。
安装 Nginx
在您的终端上写入以下命令:
sudo apt-get install nginx
它将安装 Nginx 以及其他依赖项。
配置防火墙
在我们测试 Nginx 之前,我们需要重新配置防火墙软件以允许访问该服务。
ufw
我们可以通过输入以下命令列出知道如何使用的应用程序配置:
sudo ufw app list
您应该看到以下输出:
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
Nginx HTTP
现在我们通过输入以下内容来启用:
sudo ufw allow 'Nginx HTTP'
我们可以通过输入以下命令来查看更改:
sudo ufw status
现在我们将测试 Ngnix 是否运行正常。
测试 Web 服务器:
我们可以通过输入以下内容来测试我们的服务器:
systemctl status nginx
输出应该如下所示:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2016-04-18 16:14:00 EDT; 4min 2s ago
Main PID: 12857 (nginx)
CGroup: /system.slice/nginx.service
├─12857 nginx: master process /usr/sbin/nginx -g daemon on; master_process on
└─12858 nginx: worker process
现在在浏览器中输入您的 ip_address,您应该会看到 Nginx 登录页面。
Nginx 配置
使用 nano 或您喜欢的文本编辑器打开默认配置文件:
sudo nano /etc/nginx/sites-available/default
找到 server_name 行并将下划线替换为您的域名:
. . .
server_name example.com www.example.com;
. . .
保存文件并退出编辑器,然后键入以下内容验证任何错误:
sudo nginx -t
然后输入以下命令重新加载服务器:
sudo systemctl reload nginx
现在通过输入以下命令允许访问 HTTP 防火墙:
sudo ufw allow 'Nginx Full'
步骤 4 - 使用 Let's Encrypt 和 Certbot 进行 SSL 配置
Let's Encrypt 是一家证书颁发机构 (CA),它提供了一种轻松获取和安装免费 SSL 证书的方法,从而在 Web 服务器上启用加密的 HTTPS。它通过提供软件客户端 Certbot 来简化流程,该客户端会尝试自动执行大部分(如果不是全部)所需步骤。目前,在 Apache 和 Nginx 上,获取和安装证书的整个过程都是完全自动化的。
安装 Certbot
首先,我们将 repo 添加到服务器:
sudo add-apt-repository ppa:certbot/certbot
按ENTER
现在输入以下命令安装 Certbot:
sudo apt install python-certbot-nginx
从 Certbot 获取 SSL 证书
要获取 example.com 和www.example.com URL 的 SSL 证书,请使用以下命令
sudo certbot --nginx -d example.com -d www.example.com
之后,Certbot 会询问您如何配置 HTTPS 设置。
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cance
选择ENTER
。现在您的网站服务器已开启HTTPS
。
现在输入您的域名并进行测试。
第 5 步 - 部署 React APP
首先,在您的网站名称上创建一个文件夹,就我而言,它example.com
位于/var/www/
。
sudo mkdir -p /var/www/example.com/html
现在/var/www/example.com/html
使用
cd /var/www/example.com/html
并通过输入以下内容创建index.html
文件:
cat > index.html
并使用以下命令打开它:
nano index.html
在文件内部,创建一个基本的 HTML 文件。
<html>
<head>
<title>Hello World!!!</title>
</head>
<body>
<h1>Success! The example.com server block is working!</h1>
</body>
</html>
保存并关闭文件。
重新配置Nginx
现在您已经在新目录中创建了内容/var/www/example.com/html
,您需要告诉 Nginx 为该目录提供服务,而不是/var/www/html
当前的默认目录。
通过使用以下命令将 root 添加到文件并告诉 Nginx 路径
使用以下方式打开文件:
sudo nano /etc/nginx/sites-available/default
并添加路径:
root /var/www/example.com/html;
输入以下命令检查任何语法错误:
sudo nginx -t
并重新启动Nginx
sudo systemctl restart nginx
现在输入您的域名并测试您的网站。
部署 React App
现在在终端中打开您的应用程序并在应用程序的终端中运行以下命令:
scp -r ./build/* user@server_ip_address:/var/www/example.com/html
输入密码即可。
现在打开package.json
文件React App
并在“scrips”部分添加以下代码:
"deploy-production": "react-scripts build && scp -r ./build/* user@server_ip_address:/var/www/example.com/html"
写下您的 ip_address 和您的网站名称,而不是server_ip_address
and example.com
。
现在运行以下命令:
npm run deploy-production
现在在浏览器中输入你的域名。如果没有错误,你的 React 网站就部署好了。
使用反向代理服务器块在 DigitalOcean 上部署 NodeJS 应用程序
防火墙已经"ufw"
安装Nginx
配置完毕,70% 的工作已经完成。这不会花太多时间。
安装 Node
在终端上写入以下命令:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt install node.js
node --version
从 GitHub 克隆你的项目
从你的 GitHub 仓库复制链接,然后运行以下命令
git clone yourrepolink.git
安装依赖项
cd yourproject
npm install
npm start (or whatever your start command)
# stop app
ctrl+C
安装 PM2 以保持应用程序运行
sudo npm i pm2 -g
pm2 start app.js (app.js is the file name)
# To make sure app starts when reboot
pm2 startup ubuntu
通过以下方式写入reboot
并再次登录到您的服务器
ssh-copy-id bob@server_ip_address
现在/etc/nginx/sites-available/default
添加另一个服务器块,并添加server_name
并写入你的子域名。在我的例子中,应该是nodejs.example.com
。
server_name nodejs.example.com
在下方server_name
添加以下位置部分:
location / {
proxy_pass http://localhost:5000; #whatever port your app runs on
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;
}
输入以下命令检查任何语法错误:
sudo nginx -t
并使用以下命令重新启动服务器:
sudo service nginx restart
现在在DigitalOcean
“添加域”部分,打开CNAME
任何子域名,在我的情况下,node.js
您可以在 HOSTNAME 下看到nodejs.example.com
并选择相同的 droplet。
现在,React App 和 Node.js 应用程序托管在单个 DigitalOcean droplet 上。
希望本文对您有所帮助。如有任何疑问,请在评论区留言。
我是一名初学者,因此请各位前辈提供任何建议,我将不胜感激。
附言:我目前正在进行#100DaysOfCode挑战。想了解我的每日进度,请在Twitter上关注我@zeeshanhshaheen
谢谢你!
文章来源:https://dev.to/zeeshanhshaheen/how-to-deploy-react-js-and-nodejs-app-on-a-single-digitalocean-droplet-using-nginx-1pcl