在当今的数字时代,拥有一个可靠且可扩展的网站对于组织和个人都至关重要。无论您运行的是电子商务平台、投资组合网站还是企业网络应用程序,选择正确的托管选项都会对您的在线业务产生巨大影响。DigitalOcean 的 Droplet 服务为部署您的网站提供了强大而灵活的解决方案,让您可以完全控制您的在线状态。
先决条件
在开始之前,请确保您具备以下先决条件:
-
一个活跃的 DigitalOcean 帐户
-
注册域名(可选)
步骤 1:配置 DigitalOcean Droplet
-
前往 DigitalOcean 网站并登录您的帐户。
-
选择一个现有项目或启动一个新项目来托管您的 Droplet。
-
单击“创建”按钮,然后从下拉菜单中选择“Droplets”。
-
为了获得最佳效果,请选择距离目标受众最近的服务器位置。
-
选择最新的 Ubuntu LTS(长期支持)映像,它提供了可靠且良好支持的操作系统。
-
根据应用程序的需求确定最佳 CPU 选项。例如,如果您正在运行 Next.js 应用程序,该应用程序在构建过程中需要额外的资源,您可能需要考虑 18 美元或更高的选项。
-
选择您选择的身份验证机制,例如 SSH 密钥或密码。
-
检查您的选项并单击“创建 Droplet”以开始配置过程。
请注意,提供资源可能需要一些时间,因此在此阶段请耐心等待。
第 2 步:安装依赖项
在继续部署之前,您必须确认您的服务器是最新的。要更新和升级您的服务器,请执行下面列出的命令:
sudo apt update && sudo apt upgrade
现在,让我们安装所需的依赖项:
1. nginx:Nginx 是一个流行的用于托管网站的网络服务器。
sudo apt install nginx
2. certbot:SSL 证书对于保护您的网站和建立访问者信心至关重要。
sudo apt install certbot python3-certbot-nginx
3. npm 和 node:根据您的应用程序类型,您可能需要 npm 和 node。这些对于托管 Next.js 应用程序是必需的。如果您正在使用基本的 HTML 网站,则可以跳过此步骤。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
exec $SHELL
nvm list-remote # View available versions
nvm install v19.4.0 # Install the desired version
4. pm2:为了有效地管理 Node.js 应用程序,我们将使用 pm2 作为进程管理器。
npm install -g pm2
步骤3:配置Nginx www.cqzlsb.com
在托管您的网站之前,您必须配置 Nginx 以确保其正常运行。让我们从防火墙配置开始。
Ubuntu 使用 ufw(简单防火墙)作为默认防火墙配置工具。要查看与 ufw 兼容的应用程序设置,请执行以下命令:
sudo ufw app list
此命令显示可用的应用程序配置文件的列表。
Output
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
如报告所示,有三个可用的 Nginx 配置文件:
-
Nginx Full:此配置文件允许传统的未加密的 Web 流量(端口 80)和 TLS/SSL 加密流量(端口 443)。
-
Nginx HTTP:此配置文件仅允许端口 80(未加密的网络流量)。
-
Nginx HTTPS:此配置文件仅允许端口 443(TLS/SSL 加密通信)。
如果尚未启用 OpenSSH,请使用以下命令:
复制复制ufw allow OpenSSH
建议启用允许预设流量的最严格配置文件。我们暂时将流量限制到端口 80:
sudo ufw allow "Nginx HTTP"
可以检查防火墙状态来确认更改:
sudo ufw status
允许哪些 HTTP 流量将通过输出进行验证:
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Ubuntu 安装完成后,Nginx 启动,Web 服务器应启动并运行。使用 systemd init 系统确保服务正常运行:
systemctl status nginx
步骤 4:设置托管
服务器块类似于 Apache 中的虚拟主机,可用于封装配置信息并在单个 Nginx Web 服务器上运行多个域。在本例中,我们将设置一个名为“ ssw.com ”的域,但请确保用您的实际域名替换它。
在 Ubuntu 上,Nginx 默认激活一个服务器块,并配置为从 /var/www/html 目录提供文件。虽然适用于单个站点,但管理此目录中的多个站点可能会很困难。因此,让我们在 /var/www 内为我们的“ ssw.com ”站点创建一个目录结构,而不是直接更改 /var/www/html。如果客户端请求与任何其他站点都不匹配,则默认情况下仍将提供 /var/www/html 服务。
cd /var/www
如果您的代码位于 GitHub 上,请在此处克隆它或创建一个文件夹并将代码复制到其中。接下来,使用 $USER 环境变量分配目录的所有权:
sudo chown -R $USER:$USER /var/www/ssw #I am using SSW
通过执行以下命令来设置默认文件权限,以确保您的 Web 根目录具有正确的权限:
sudo chmod -R 755 /var/www/ssw
现在,导航到该目录:
cd ssw
如果您克隆了 Node.js 应用程序,请记住运行:
npm install
然后构建它:
npm run build
为了使 Nginx 能够提供此内容,我们需要创建一个具有适当指令的服务器块。我们不必直接修改默认配置文件,而是在 /etc/nginx/sites-available/ssw 创建一个新文件:
cd /etc/nginx/sites-available
在/var/www中创建同名文件:
touch ssw
现在,利用您喜欢的文本编辑器(例如 Vim、Nano 或任何其他编辑器)来编辑此文件:
nano ssw #I am using nano
请注意,以下配置特定于 Next.js 应用程序(我将为其他人留下一些参考):
#nginx config file for Nextjs App
#place in /etc/nginx/sites-available/name_of_config_file
server {
listen 80;
server_name ssw.com www.ssw.com; #read further to understand
gzip on;
gzip_proxied any;
gzip_types application/javascript application/x-javascript text/css text/javascript;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_min_length 256;
location /_next/static/ {
alias /var/www/ssw/.next/static/;
expires 365d;
access_log off;
}
location / {
proxy_pass http://127.0.0.1:3000; #change to 3001 for second app, but make sure second nextjs app starts on new port in packages.json "start": "next start -p 3001",
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;
}
}
将“ ssw.com ”替换为您的实际域名,例如rontennyson.com。如果您希望域名的“www”和非“www”版本都重定向到您的网站,请包括:
server_name ssw.com www.ssw.com;
如果您还没有域名,请使用:
server_name _;
注意:如果没有域名,您将无法获得 SSL 证书。
接下来,通过创建从该文件到 sites-enabled 目录的符号链接来启用该文件,Nginx 在启动期间读取该文件:
sudo ln -s /etc/nginx/sites-available/ssw/etc/nginx/sites-enabled/
现在,两个服务器块已启用并配置为根据其指令响应请求。测试 Nginx 文件中是否存在任何语法错误:
sudo nginx -t
如果没有发现问题,请重新启动 Nginx 以实现您的更改:
sudo systemctl restart nginx
Nginx 现在应该可以为您的域名提供服务了。通过导航到http:// ssw.com进行测试。恭喜,主要设置工作已完成!
如果发现您的网站不安全,请不要担心,让我们设置一个 SSL 证书(仅当您有域名时才有可能)
步骤5:获取SSL证书
Let's Encrypt 是一家可靠的证书颁发机构 (CA),它提供了一种安装 TLS/SSL 证书并在 Web 服务器上启用加密 HTTPS 通信的简便方法。Let's Encrypt 通过提供 Certbot 简化了该过程,Certbot 是一款软件应用程序,旨在自动执行大多数(如果不是全部)所需程序。目前,Apache 和 Nginx 服务器已完全自动化证书安装和获取流程。
为了启用 HTTPS 流量,有必要允许 Nginx 完整配置文件,同时从 Nginx HTTP 配置文件中删除任何不必要的权限:
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
执行这些命令后,您的防火墙状态应显示:
sudo ufw status
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
然后,启动 Certbot 并让其检索您的 SSL 证书。
Certbot 提供了多种通过插件获取 SSL 证书的方法。通过管理 Nginx 重新配置并根据需要重新加载配置,Nginx 插件简化了该过程。要使用此插件,请运行以下命令:
sudo certbot --nginx -d ssw.com -d www.ssw.com
使用 -d 参数来指示证书应对其有效的域名,此命令使用 --nginx 插件来调用 certbot。
如果这是您第一次使用 certbot,您将被要求同意服务条款并提供您的电子邮件地址。Nginx
将在验证成功后收到更改的配置设置,certbot 将验证该过程的完成情况以及您的证书的存储位置。
Output
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/ssw.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/ssw.com/privkey.pem
Your cert will expire on 2024-09-23. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
通过重新启动 Nginx 确保修改生效:
sudo systemctl restart nginx
现在,当您重新加载页面时,您应该看到它现在已完全装饰并且是 HTTPS 安全的。
总之,在您自己的服务器(例如 DigitalOcean Droplet)上托管您的网站,在控制、可扩展性、成本效益、安全性和定制方面具有明显的优势,即使像 Vercel 这样的平台提供了便利性和易用性。选择自托管可以让您完全控制您的托管环境,使您能够根据需要对其进行修改,有效地扩展资源,减少开支,提高安全性,并轻松整合定制解决方案。自托管让您完全控制和拥有您的网站,同时使您能够通过 DigitalOcean 等服务的适应性和可靠性建立和管理强大的在线形象。无论您经营的是大型公司、小型博客还是发展中的初创公司,在您自己的服务器上托管都可以提供无与伦比的定制和优化选项,以确保您的网站满足您的独特需求并在在线世界中发挥其应有的作用。