如何设置Web服务器
AWS GenAI 直播!
这篇文章包含联盟链接。如果您通过链接购买商品,我可能会赚取少量佣金。谢谢。
在之前的教程中,我们讨论了如何在 Linux 服务器上部署Laravel和Django应用程序,但我们错过了两个非常重要的主题。
- 如何设置服务器以确保其安全可靠地使用。
- 如何将您的域映射到您的服务器,以便公众可以访问。
我们将在本文中解决这些问题。
当我们谈论网络服务器时,通常指的是虚拟专用服务器 (VPS)。通俗地说,虚拟专用服务器 (VPS) 是一台为您的网站提供数据和资源的计算机。当您的网站被访问时,这台计算机会将这些资源传输给客户端。至于“虚拟”,这意味着这台计算机还利用虚拟化技术将一台物理服务器拆分成多个虚拟服务器,以便您更经济地使用它们。
选择 VPS 提供商
有很多优秀的公司提供 VPS 服务,例如Digital Ocean、Vultr和Linode。它们各自提供不同的功能。
在本文中,我将以 Vultr 为例。您可以使用此链接获得 100 美元的入门奖励。但是,如果您使用的是其他提供商,我不会使用其任何额外功能。让我们坚持基本操作,手动设置所有内容。
首先,转到“产品”并单击“部署服务器”:
接下来,选择您想要的服务器类型。如果您不知道该选择哪种,我建议您始终从最便宜的选项开始。您可以随时升级到更好的服务器,但没有 VPS 提供商提供降级服务,因为这会带来数据丢失的风险。
接下来,选择您的 CPU、服务器位置和操作系统。请务必选择您熟悉的发行版。这里我将使用 Ubuntu 进行演示:
选择服务器大小,同样,您应该从最便宜的选项开始。对于“附加功能”,如果您不知道它们是什么,可以不勾选。您可以随时根据需要添加它们。最后,为您的服务器指定主机名,然后点击“立即部署”:
服务器安装需要几分钟时间。一旦其状态变为Running,服务器将被分配一个 IP 地址,并root
创建一个用户:
你可以使用 IP 地址访问服务器。在你自己的电脑上,打开终端并输入:
ssh root@<ip_address>
系统将提示您输入root
用户密码。输入密码时不会显示,这只是一项安全措施,并非漏洞。
如果您看到相同的输出,则表示您已准备好使用新服务器!
准备服务器
在开始部署项目之前,您还需要做一些准备,否则您的服务器将容易受到攻击。
创建新用户
首先,你不应该使用root
用户。root
用户有权对你的服务器执行任何操作,任何人都不应该拥有这么大的权限。你可以jack
使用以下命令创建一个新的用户(我们姑且称之为 )帐户:
adduser jack
为用户创建一个新密码jack
,并输入他的信息:
将此新用户添加到sudo
组,并授予其 root 权限:
usermod -aG sudo jack
请勿关闭终端,以免出现问题。打开一个新的终端窗口并以新用户身份登录:
ssh jack@<ip_address>
确保您可以以管理员身份运行命令:
sudo <command>
系统将提示您输入jack
的密码。如果一切顺利,就可以安全关闭该root
用户的窗口了。从现在开始,我们将以新用户 的身份进行操作jack
。
接下来,您需要确保没有人可以以该root
用户身份登录。您可以在文件中禁用 root 登录sshd_config
。使用以下命令打开该文件:
sudo nano /etc/ssh/sshd_config
向下滚动并找到PermitRootLogin
:
. . .
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
PasswordAuthentication yes
PermitRootLogin yes
更改yes
为no
:
PermitRootLogin no
按CTRL+X
退出nano
编辑器,然后键入Y
以保存缓冲区:
Save modified buffer?
Y Yes
N No ^C Cancel
按ENTER
退出:
File Name to Write: /etc/ssh/sshd_config
^G Help M-D DOS Format M-A Append M-B Backup File
^C Cancel M-M Mac Format M-P Prepend ^T Browse
为了使此更改生效,您需要重新启动sshd
守护进程:
sudo systemctl restart sshd
现在您可以尝试以用户身份登录root
,您将收到一条Permission denied
消息:
通过 SSH 密钥登录
然后是密码。无论多么复杂,密码仍然很容易被破解。您需要确保登录服务器的唯一方法是通过安全外壳协议 (SSH) 密钥。
首先,您需要创建一个密钥对。公钥和私钥分别存放在您的服务器上和您自己持有的私钥中。如果密钥对匹配,您就能登录。
使用您自己的计算机,通过以下命令创建密钥对:
ssh-keygen
此命令适用于 Windows 和 macOS,但如果您使用的是 Windows,我建议您设置WSL。默认情况下,它将创建一个 3072 位的 RSA 密钥对。如果您希望提高安全性,可以添加一个可选-b
标志,如下所示:
ssh-keygen -b 4096
您应该看到以下输出:
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/<your_home>/.ssh/id_rsa):
默认情况下,私钥将生成在您的主目录下的.ssh
文件夹中。您可以根据需要更改其目标位置。我将保留默认路径并按下ENTER
:
Enter passphrase (empty for no passphrase):
您可以为密钥对创建可选的密码。这为您的服务器提供了额外的安全保障,如果您服务器上的数据非常重要,强烈建议您这样做。
完成后,您应该得到以下输出:
Your identification has been saved in /Users/<your_home>/.ssh/id_rsa
Your public key has been saved in /Users/<your_home>/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:EiQgE7ZQB/2v40ccfrXxnQrFs383qS/DgQ1xK8pjQ4Q erichu@Erics-MacBook-Pro.local
The key's randomart image is:
+---[RSA 3072]----+
| =+++o . . |
| o------------. |
| . .. . + . |
| .... oo= |
| .+S...*+o.. |
| .=*.o.+... |
| o..o o + . |
| o . = +o |
| ..o .=.+ |
+----[SHA256]-----+
打开.ssh
目录,您应该会看到生成的密钥对。
接下来,您需要将公钥(id_rsa.pub
)发送到您的服务器。在您自己的计算机上,运行以下命令:
ssh-copy-id jack@<ip_address>
您应该看到以下输出:
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/erichu/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
输入 的jack
密码后:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'jack@45.63.0.91'"
and check to make sure that only the key(s) you wanted were added.
不幸的是,此命令实用程序在 Windows 系统上不可用,因此您可以设置 WSL,也可以按照Digital Ocean 的本教程进行操作,该教程提供了一个将公钥复制到您的服务器的一体化命令:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go=$$ ~/.ssh && cat >> ~/.ssh/authorized_keys"
但正如您所见,此命令要求您对 Linux 系统有一定的了解。
接下来,您可以打开另一个终端并尝试以 身份登录jack
。这次,系统将提示您输入私钥的密码,而不是 jack 的密码。如果您没有设置密码,则将直接登录。
最后,您需要禁用密码登录,以便每个用户都必须使用 SSH 密钥。转到sshd_config
我们之前讨论过的同一文件:
sudo nano /etc/ssh/sshd_config
找到PasswordAuthentication yes
,并将其更改为no
:
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
PasswordAuthentication no
PermitRootLogin no
记得重新启动sshd
守护进程:
sudo systemctl restart sshd
部署你的项目
现在您的服务器应该已经安全且准备就绪,是时候部署您的项目了。对于典型的 Web 应用程序,您至少需要一个服务器应用程序(例如 Apache 或 Nginx)以及一个数据库(例如 MySQL 或 PostgreSQL)。这些应用程序的安装和配置可能非常困难,尤其是对于初学者而言。因此,在这一部分,我建议使用服务器控制面板。
最知名的选择是CPanel,但不幸的是,它每月要花费 15.99 美元。对于个人项目来说,这笔费用非常高。所以,如果你正在寻找免费的替代方案,我发现这个aaPanel可以帮我完成大部分工作。
可以使用以下命令轻松安装面板:
wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && sudo bash install.sh aapanel
您将被要求确认此安装:
系统可能还会提示你升级内核。如果出现这种情况,请按ENTER
:
Bash 脚本运行完成后(此过程通常需要 10 到 20 分钟,请耐心等待),您应该看到此输出告诉您如何访问面板:
按照说明登录面板,安装项目所需的所有软件。如果要设置生产环境,请记住使用编译模式:
安装过程完成后,转到“网站”选项卡并创建一个新网站,正如我们在各自的Laravel或Django教程中讨论的那样。
选择域名
现在我们来谈谈项目部署后会发生什么。目前,你的项目应该可以通过直接访问服务器的 IP 地址来访问,但这并不理想。为了让网站能够公开访问,你需要为其分配一个域名。
有很多域名注册商可供选择,本文以GoDaddy为例。在他们的网站上注册一个账户,然后搜索域名:
购买域名后,您应该可以在“我的产品”下看到它。
向下滚动到所有产品和服务部分,找到您的域名并单击DNS按钮:
DNS 服务器就像互联网上的电话簿,它将域名映射到 IP 地址。当您在浏览器中访问某个域名时,实际上首先访问的是 DNS 服务器,该 DNS 服务器会找到相应的 IP 地址并将您路由到那里。
因此,您需要做的是通过创建 DNS 记录将域名注册到 DNS 服务器。DNS 记录有很多种类型,但目前我们只关注A
记录和CNAME
记录。A
记录是主记录,它应该指向您服务器的 IP 地址。CNAME
另一方面,记录是别名记录。它们会创建别名(www.example.com
、me.example.com
、blog.example.com
...),这些别名可以指向现有A
记录或其他服务器。例如:
类型 | 主持人 | 指向 | TTL |
---|---|---|---|
一个 | @ | 服务器IP地址 | 1小时 |
别名记录 | 万维网 | @ | 1小时 |
别名记录 | 画廊 | 不同的 IP 地址 | 1小时 |
对于您的第一条A
记录,其主机名应为@
,它指向您的一级域名 ( example.com
),并指向您的服务器。TTL 决定了 DNS 服务器缓存此记录的时间。过期后,该记录将自动刷新。
第一个命令CNAME
创建一个别名 ( www.example.com
),它指向A
我们刚刚定义的记录。第二个命令CNAME
创建另一个别名 ( gallery.example.com
),它指向另一个可以托管图库应用的服务器。
保存更改并等待 DNS 服务器更新。此过程最多可能需要 48 小时才能完成,请耐心等待。更新完成后,您应该可以通过访问您的域名来访问您的应用。
文章来源:https://dev.to/thedevspace/how-to-set-up-a-web-server-39lm如果您喜欢这篇文章,也请查看我的“Web 开发初学者路线图”教程系列。