30 个终端命令中的多应用程序 Web 服务器
作者:互联网
先决条件
- 域名和 DNS 记录的控制权,最有可能在您的提供商的网站上。
- 具有根访问权限的 Debian 服务器。虚拟专用服务器可能是您最好的选择。
- 本地Unix机器(Linux / Mac)与常用工具,如,并安装。在 Windows 上,您可以使用适用于 Linux 的 Windows 子系统。
git
ssh
scp
从长远来看,设置域和服务器每月的成本约为 5 到 20 美元,具体取决于服务器的域和口径。对于本教程,即使只有 10 GB 的磁盘空间和 2 GB 的 RAM 也应该是安全的。处理器功率不会成为问题。
域名解析配置
若要将抽象域指向物理服务器,我们将设置两个 DNS 记录。任何子域的根地址记录和通配符。如果要严格,也可以单独设置每个子域。将下面的 IP 地址替换为您的服务器。如果未提供该地址,则可以在服务器中确定该地址。
@ 1800 IN A 1.1.1.1
* 1800 IN A 1.1.1.1
配置 DNS 后,您应该能够解析您的域。传播记录可能需要几个小时,因此为了避免不断检查状态。成功解析地址后继续教程。请注意,请求仍会导致错误,但应找到服务器 IP。watch
curl -v DOMAIN # check if domain can be resolved
watch -n 10 curl -v DOMAIN # check every 10s
模板存储库
不幸的是,如果没有一些帮助,就无法使本教程简短。我们将使用包含构建脚本、配置和虚拟网站内容的模板存储库。考虑分叉存储库或将其用作模板来管理您自己的未来项目!
git clone https://github.com/felix-hilden/server-template.git
cd server-template
服务器配置
让我们进入问题的实质并开始配置我们的服务器。下面的设置步骤分为两个缩进级别,第一个缩进级别位于本地计算机上,第二个缩进级别与服务器进行远程连接。请阅读正在使用的命令,并查看执行的脚本以了解正在执行的操作。
首先,我们通过在服务器上创建新的管理员用户来避免 root 访问权限。请将“域”替换为您的域名,用“用户”替换所需的用户名。以下命令假定您立即具有 SSH 访问权限,但如果您使用其他登录方法,则可以手动运行这些命令。user-setup
cd server
scp user-setup root@DOMAIN:~ # copy setup script to server
ssh root@DOMAIN # login as root
cat user-setup # peek at the script
chmod +x user-setup # make it executable
./user-setup USER # setup new sudo user
rm user-setup # remove setup script
下一步将为我们的系统配置 SSH 和防火墙以及一些重要的应用程序。在关闭root连接之前,请在另一个终端中继续设置,或者确保如果出现问题并且您注销而无法进入,则可以以其他方式访问服务器。为了安全起见,该配置将通过 SSH 禁用根访问和密码登录。
cat setup-ssh # peek at the script
chmod +x setup-ssh # make it executable
./setup-ssh USER DOMAIN # generate and send SSH keys
scp files/* DOMAIN:~ # copy build files to server
ssh DOMAIN # login as new user
cat build # peek at the script
chmod +x build # make it executable
./build USER # build server
rm * # remove build files
For additional configuration, this nixCraft article has great tips on Linux security and it seems to be kept up to date: https://www.cyberciti.biz/tips/linux-security.html
Applications
From now on, we'll only be working inside of the server. So let's clone the template repository on the server too. Before setting up a proper deployment process, the git project will do fine for synchronising changes across our local machine and the server.
git clone https://github.com/felix-hilden/server-template.git
cd server-template
在这一点上,解释我们的技术堆栈的基础知识是合适的。
- Docker:为我们提供轻型虚拟机来隔离服务。我们将构建并运行 git 项目中定义的容器,而不是进一步配置我们的主机服务器(这很快就会变得难以管理),其中所有相关信息都存储在一个地方。
- nginx:一个主要的Web服务器。我们将使用它来为其容器中的静态网站提供服务,并用作代理,将流量路由到另一个容器中的 Python 应用程序。
- Python:使用流行的FastAPI框架,我们将为一个简单的网站提供API服务。
要启动并运行网站本身,我们只需要遵循几个步骤。首先,使用下面的魔术脚本将模板文件中出现的所有“example.com”替换为您的域。相信我。还是这个家伙。
# Linux
grep -RIl 'example.com' | xargs sed -i 's/example.com/DOMAIN/g'
# Mac OS
grep -RIl 'example.com' | xargs sed -i '' 's/example.com/DOMAIN/g'
git diff # inspect the result
然后,我们将为您的域颁发 SSL 证书,以便能够使用安全连接。
make certify # bring up a dummy website to issue certificates
假设证书已成功颁发,我们可以启动真正的应用程序。
make up-prod # serve applications on HTTPS
make logs # start following logs to see if initialisation was successful
在幕后,我们的 Makefile 正在编排一组容器来运行,同时设置网络和共享文件系统以查找我们的配置。我们现在应该能够在普通浏览器中访问该域!或者获取主页。curl
curl DOMAIN # static site
curl app.DOMAIN # Python app
开发网站
存储库包括在本地运行站点以促进开发的配置。在本地计算机上,安装Docker Desktop并运行:
make # bring up development website & inspect logs
curl localhost # get home page
您现在可以修改 和 的内容以开始构建应用程序。网站在运行时将使用您的最新修改进行更新。如果出现问题,可以使用默认的 make 目标重新启动。website/site
app/src
告别
我希望你觉得这个简短的教程有用。感谢您的阅读。该模板在很多方面都缺乏,尤其是在实际软件开发方面。但是,我们不会在此处为网站或 Python 设置完整的开发环境。这与自动化发布过程一起,留给你,我亲爱的读者。